lifelines-3.0.61/0000700002540200244210000000000010657071736013752 5ustar prappDomain Userslifelines-3.0.61/.linesrc0000700002540200244210000002211710656417424015415 0ustar prappDomain Users# config file for LifeLines # .linesrc under UNIX, lines.cfg under Windows # Lines beginning with # are ignored (comments) # As are blank lines # So some of the examples are commented out... # # 2007-05-08 # # Note that paths are assigned with := # Other values are assigned with = # The distinction is that using plain = means that # backslash escapes are enabled: # \t means tab, \n means carriage return # We don't want these enabled in paths, because they might # occur naturally in path names under MS-Windows. # # All variables here are available to report programs # via the report language function getproperty, so, for # example, the user email property (which is built-in under # UNIX), may be specified here like so: #user.email=user@domain.name # Similarly the user fullname property (also built-in under # UNIX) may be specified like so: #user.fullname=myname # the user address property is a one line version of your address #user.address=1234 Some Street, Some City, State 00000 # the user phone property is your phone number #user.phone=(800)-555-1234 # the user url property is for your url (if you have one) #user.url=http://mylifelines.genealogy.net # Set a variable for the lifelines root # Variables have % at start and end %llroot%=/home/user/LifeLines # Root path for utility/read command #InputPath=%llroot% # Place to store output of utility/save #LLARCHIVES=%llroot%/Archives # Path(s) to search for databases #LLDATABASES=%llroot%/Databases # (New databases will be created in first directory of this path.) # (LLNEWDBDIR {Path for new databases} is obsolete) # Path for report programs #LLPROGRAMS=%llroot%/Reports # Path for report output #LLREPORTS=%llroot%/Outputs # Editor #LLEDITOR=/usr/local/vi # Path for global translation tables #TTPATH=%llroot%/tt # Path for exported translation tables (from a db) #LLTTEXPORT=%llroot%/ttdb # Refuse to execute system calls from report programs (default allowed) #DenySystemCalls=1 # Log file for report errors (default none) #ReportLog=%llroot%/reporterrs.log # Log file for crashes for llines (default none) #CrashLog_llines=%llroot%/crashes_llines.log # Log file for crashes for llexec (default none) #CrashLog_llexec=%llroot%/crashes_llexec.log # Log file for import errors (default errs.log) #ImportLog=%llroot%/import.log # Log file for report pvalue leaks (for debugging) #ReportLeakLog=%llroot%/reportleaks.log # Delay (secs) between each report error on screen (default 0) #PerErrorDelay=4 # Print more detailed call stack for each report error #FullReportCallStack=1 # dayfmt,monthfmt,yearfmt,datefmt,erafmt,complexfmt # see programmers reference for stddate for these # 2,3,0,0,1,1 is GEDCOM style (1 AUG 1945) with complex dates # 2,5,0,1,1,1 is American style (AUGUST 1, 1945) with complex dates # 1,1,0,9,1,1 is Chinese style (1945/04/25) with complex dates # 1,1,0,10,2,1 is Chinese style with dashes (1945-04-05 A.D.) with explicit origin & complex dates # 2,2,0,13,1,1 is the Swedish style (1/8 1945) # Omit this entirely to default to dates as given in GEDCOM #LongDisplayDate=1,1,0,9,1,1 # To use a combining format not already supported, such as the period format # This overrides the dateformat (but not dayformat,monthformat...) above #LongDisplayDatePic="%y.%m.%d" # As above, except that omitting this defaults to combining mode 12 (year only) # (the traditional short form) # Chinese style, BC if negative, no complex dates (100-04-03 BC) #ShortDisplayDate=1,1,0,10,11,0 # To use a combining format not already supported, such as the period format # This overrides the dateformat (but not dayformat,monthformat...) above #ShortDisplayDatePic="%y.%m.%d" # Trailing string to append when truncating events in short display # (eg, to see "b. 1995-5-3, Miss..." instead of "b. 1995-5-3, Missour") #ShortOmitString=... # Width to indent pedigree ancestor & descendent views, and gedcom view #GedcomDisplayIndent=2 # default is 6 # Set the default data for new persons #INDIREC=0 INDI\n1 NAME Fname/Surname/\n1 SEX MF\n1 BIRT\n 2 DATE\n 2 PLAC\n1 DEAT\n 2 DATE\n 2 PLAC\n1 SOUR # This sample version is the same as the default if none is given. # Set the default data for the body of a new family #FAMRECBODY=1 MARR\n 2 DATE\n 2 PLAC\n 2 SOUR # This sample version is the same as the default if none is given. # Note that for family, the program inserts the fam, spouse, # and children tags, so this is only data besides those tags. # Set the default data for new sources #SOURREC=0 SOUR\n1 REFN\n1 TITL Title\n1 AUTH Author # This sample version is the same as the default if none is given. # Set the default data for new events #EVENREC=0 EVEN\n1 REFN\n1 DATE\n1 PLAC\n1 INDI\n 2 NAME\n 2 ROLE\n1 SOUR # This sample version is the same as the default if none is given. # Set the default data for new other records #OTHR=0 XXXX\n1 REFN # This sample version is the same as the default if none is given. # Specify the SUBM line for the header (of GEDCOM exports) # This is meant to specify who submitted the record. #HDR_SUBM=1 SUBM # This sample version is the same as the default if none is given. # Specify the GEDC line for the header (of GEDCOM exports) # This is meant to specify what version of GEDCOM was used. #HDR_GEDC=1 GEDC\n2 VERS 5.5\n2 FORM LINEAGE-LINKED # This sample version is the same as the default if none is given. # Specify the GEDC line for the header (of GEDCOM exports) # This is meant to specify what character set was used in the data. #HDR_CHAR=1 CHAR ASCII # The default is the actual encoding used to output the GEDCOM # so this should not normally be overridden # Set the visit history size (# of entries remembered in visit history) #HistorySize=20 # Valid values are 0 through 9999. # This sample line is the same as the default if none is given. # Enable persistent history (remember in database between uses). #SaveHistory=1 # Valid values are 0 (don't save) and 1 (do save). # Default is 0. # Keep traversal back & forth between records off the history list. #HistoryBounceSuppress=5 # This would prevent a record from being added to the history list if # it is already present within the last 5 entries. # Valid values are 0 through 99. # Default is 1. # Disallow persons without name records (legacy 3.0.10 & earlier behavior) #RequireNames=1 # Default is 0 (nameless records allowed) # Specify language for message catalog #UiLocaleMessages=en # Default is normal gettext behavior (deduces it from environment) # This is injected into the LANG variable # Specify locale for collation #UiLocaleCollate=en # Default is normal deduction from environment # Specify locale for collation in reports #RptLocaleCollate=en # Default is normal deduction from environment # Coded charset name for GUI use # This is a libiconv charset name # And this is passed to gettext (libintl) # Default is none #GuiCodeset=8859-1 # Default is none # Suffix for codeset when converting to GUI codeset #GuiCodesetOutput=//TRANSLIT # Default is none # Coded charset name for editor use #EditorCodeset=8859-1 # Default is none # Coded charset name for report output #ReportCodeset=8859-1 # Default is none # Coded charset name for reading & writing GEDCOm files #GedcomCodeset=8859-1 # Default is none # For systems experiencing faulty screen erases (eg, RedHat Linux) #ForceScreenErase=1 # Option to invoke in-program report language debugger on report errors # This allows examination of the local symbols #debugger=1 # Default is 0 # Expand record references to refn links if available # Eg, change 1 SOUR @S20@ to 1 SOUR <1850.Census> during edit #ExpandRefnsDuringEdit=1 # Default is 0 # Add comment after pointers (during edit) (default is 0) # Eg, change 1 HUSB @I1@ to 1 HUSB @I1@ {{ John/SMITH }} #AnnotatePointers=1 # Display surnames in all caps on screen # Eg, display John/Smith as John/SMITH # Disable this if UTF-8 capitalization is failing #UppercaseSurnames=0 # Default is 1 # Display database key tags for individuals or families (i or f) # So instead of (1999) for an individual's key, you'd get (i1999) # This may help with on-screen positioning of keys when # Arabic/Hebrew characters (in UTF-8) are used for names. # Default is 0 (feature off) #DisplayKeyTags=1 # Where to find an iconv dll (only for MS-Windows) #iconv.path:=C:\Program Files\Common Files\gnu\iconv.dll # Not needed if it is named iconv.dll & is on the path. # Where to find a gettext dll (only for MS-Windows) #gettext.path:=C:\Program Files\Common Files\gnu\libintl.dll # Not needed if it is named gettext.dll & is on the path. # What locale directory to use #LocaleDir:=/usr/share/locale # default is depend on gettext's default # Global translation tables # Syntax is TT.which.ics.n # Where TT is always TT # which is the codename (MEDIN=Editor to Internal) # ics is the internal codeset (eg, UTF-8) # and n starts at 1 #TT.MEDIN.UTF-8.1=UTF-8.Greek.Input.tt #TT.MINED.UTF-8.1=UTF-8.Greek.Output.tt # Default is none # Display absolute path to database #FullDbPath=1 # This is disabled by default # Enable this to disambiguate databases in different paths # Disable this if your home directory is deep (eg, on MS-Windows) # Set default properties (user options) for new databases #NewDbProps=codeset=UTF-8 # Default is none lifelines-3.0.61/ABOUT-NLS0000700002540200244210000006015707606165331015210 0ustar prappDomain UsersNotes on the Free Translation Project ************************************* Free software is going international! The Free Translation Project is a way to get maintainers of free software, translators, and users all together, so that will gradually become able to speak many languages. A few packages already provide translations for their messages. If you found this `ABOUT-NLS' file inside a distribution, you may assume that the distributed package does use GNU `gettext' internally, itself available at your nearest GNU archive site. But you do _not_ need to install GNU `gettext' prior to configuring, installing or using this package with messages translated. Installers will find here some useful hints. These notes also explain how users should proceed for getting the programs to use the available translations. They tell how people wanting to contribute and work at translations should contact the appropriate team. When reporting bugs in the `intl/' directory or bugs which may be related to internationalization, you should tell about the version of `gettext' which is used. The information can be found in the `intl/VERSION' file, in internationalized packages. Quick configuration advice ========================== If you want to exploit the full power of internationalization, you should configure it using ./configure --with-included-gettext to force usage of internationalizing routines provided within this package, despite the existence of internationalizing capabilities in the operating system where this package is being installed. So far, only the `gettext' implementation in the GNU C library version 2 provides as many features (such as locale alias, message inheritance, automatic charset conversion or plural form handling) as the implementation here. It is also not possible to offer this additional functionality on top of a `catgets' implementation. Future versions of GNU `gettext' will very likely convey even more functionality. So it might be a good idea to change to GNU `gettext' as soon as possible. So you need _not_ provide this option if you are using GNU libc 2 or you have installed a recent copy of the GNU gettext package with the included `libintl'. INSTALL Matters =============== Some packages are "localizable" when properly installed; the programs they contain can be made to speak your own native language. Most such packages use GNU `gettext'. Other packages have their own ways to internationalization, predating GNU `gettext'. By default, this package will be installed to allow translation of messages. It will automatically detect whether the system already provides the GNU `gettext' functions. If not, the GNU `gettext' own library will be used. This library is wholly contained within this package, usually in the `intl/' subdirectory, so prior installation of the GNU `gettext' package is _not_ required. Installers may use special options at configuration time for changing the default behaviour. The commands: ./configure --with-included-gettext ./configure --disable-nls will respectively bypass any pre-existing `gettext' to use the internationalizing routines provided within this package, or else, _totally_ disable translation of messages. When you already have GNU `gettext' installed on your system and run configure without an option for your new package, `configure' will probably detect the previously built and installed `libintl.a' file and will decide to use this. This might be not what is desirable. You should use the more recent version of the GNU `gettext' library. I.e. if the file `intl/VERSION' shows that the library which comes with this package is more recent, you should use ./configure --with-included-gettext to prevent auto-detection. The configuration process will not test for the `catgets' function and therefore it will not be used. The reason is that even an emulation of `gettext' on top of `catgets' could not provide all the extensions of the GNU `gettext' library. Internationalized packages have usually many `po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless translations have been forbidden at `configure' time by using the `--disable-nls' switch, all available translations are installed together with the package. However, the environment variable `LINGUAS' may be set, prior to configuration, to limit the installed set. `LINGUAS' should then contain a space separated list of two-letter codes, stating which languages are allowed. Using This Package ================== As a user, if your language has been installed for this package, you only have to set the `LANG' environment variable to the appropriate `LL_CC' combination. Here `LL' is an ISO 639 two-letter language code, and `CC' is an ISO 3166 two-letter country code. For example, let's suppose that you speak German and live in Germany. At the shell prompt, merely execute `setenv LANG de_DE' (in `csh'), `export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). This can be done from your `.login' or `.profile' file, once and for all. You might think that the country code specification is redundant. But in fact, some languages have dialects in different countries. For example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The country code serves to distinguish the dialects. The locale naming convention of `LL_CC', with `LL' denoting the language and `CC' denoting the country, is the one use on systems based on GNU libc. On other systems, some variations of this scheme are used, such as `LL' or `LL_CC.ENCODING'. You can get the list of locales supported by your system for your country by running the command `locale -a | grep '^LL''. Not all programs have translations for all languages. By default, an English message is shown in place of a nonexistent translation. If you understand other languages, you can set up a priority list of languages. This is done through a different environment variable, called `LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' for the purpose of message handling, but you still need to have `LANG' set to the primary language; this is required by other parts of the system libraries. For example, some Swedish users who would rather read translations in German than English for when Swedish is not available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. In the `LANGUAGE' environment variable, but not in the `LANG' environment variable, `LL_CC' combinations can be abbreviated as `LL' to denote the language's main dialect. For example, `de' is equivalent to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' (Portuguese as spoken in Portugal) in this context. Translating Teams ================= For the Free Translation Project to be a success, we need interested people who like their own language and write it well, and who are also able to synergize with other translators speaking the same language. Each translation team has its own mailing list. The up-to-date list of teams can be found at the Free Translation Project's homepage, `http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams" area. If you'd like to volunteer to _work_ at translating messages, you should become a member of the translating team for your own language. The subscribing address is _not_ the same as the list itself, it has `-request' appended. For example, speakers of Swedish can send a message to `sv-request@li.org', having this message body: subscribe Keep in mind that team members are expected to participate _actively_ in translations, or at solving translational difficulties, rather than merely lurking around. If your team does not exist yet and you want to start one, or if you are unsure about what to do or how to get started, please write to `translation@iro.umontreal.ca' to reach the coordinator for all translator teams. The English team is special. It works at improving and uniformizing the terminology in use. Proven linguistic skill are praised more than programming skill, here. Available Packages ================== Languages are not equally supported in all packages. The following matrix shows the current state of internationalization, as of August 2002. The matrix shows, in regard of each package, for which languages PO files have been submitted to translation coordination, with a translation percentage of at least 50%. Ready PO files be bg ca cs da de el en eo es et fi fr +----------------------------------------+ a2ps | [] [] [] [] | ap-utils | | bash | [] [] [] [] | bfd | [] [] | binutils | [] [] | bison | [] [] [] [] | clisp | | clisp | [] [] [] [] | clisplow | | cpio | [] [] [] [] | darkstat | () | diffutils | [] [] [] [] [] [] | enscript | [] [] | error | [] [] [] | fetchmail | [] () [] [] [] () | fileutils | [] [] [] [] [] | findutils | [] [] [] [] [] [] | flex | [] [] [] [] [] | gas | [] [] | gawk | [] [] [] | gcal | [] [] | gcc | [] [] | gettext | [] [] [] [] [] | gnupg | [] [] [] [] [] [] [] | gprof | [] [] | gpsdrive | () () () () () | grep | [] [] [] [] [] [] [] [] | gretl | [] | gthumb | () () () | hello | [] [] [] [] [] [] [] [] [] | id-utils | [] [] [] | indent | [] [] [] [] [] | jpilot | () [] [] [] | jwhois | [] [] | kbd | [] [] [] | ld | [] [] | libc | [] [] [] [] [] [] [] [] | libiconv | [] [] [] [] | lifelines | () () | lilypond | [] [] | lingoteach | [] [] | lingoteach_lessons| () () | lynx | [] [] [] [] [] | m4 | [] [] [] [] [] | make | [] [] [] [] | man-db | [] () () [] () () | mysecretdiary | [] [] [] | nano | [] () [] [] [] [] | nano_1_0 | [] () [] [] [] [] | opcodes | [] [] [] | parted | [] [] [] [] [] | ptx | [] [] [] [] [] [] [] | python | | recode | [] [] [] [] [] [] | sed | [] [] [] [] [] [] [] [] [] [] | sh-utils | [] [] [] [] | sharutils | [] [] [] [] [] [] [] | sketch | () [] () | soundtracker | [] [] [] | sp | [] | tar | [] [] [] [] [] [] | texinfo | [] [] [] [] [] | textutils | [] [] [] [] [] | util-linux | [] [] [] [] [] [] | vorbis-tools | [] | wastesedge | | wdiff | [] [] [] [] [] [] | wget | [] [] [] [] [] [] [] [] [] [] | +----------------------------------------+ be bg ca cs da de el en eo es et fi fr 0 2 19 10 30 44 9 1 12 44 17 6 53 gl he hr hu id it ja ko lv nb nl nn +-------------------------------------+ a2ps | () () [] | ap-utils | | bash | [] | bfd | [] | binutils | [] | bison | [] [] [] [] | clisp | | clisp | [] | clisplow | | cpio | [] [] [] [] | darkstat | | diffutils | [] [] [] [] [] | enscript | [] [] | error | [] | fetchmail | [] | fileutils | [] [] [] | findutils | [] [] [] [] [] [] [] [] | flex | [] | gas | | gawk | [] | gcal | | gcc | [] | gettext | [] [] | gnupg | [] [] [] [] | gprof | [] | gpsdrive | [] () () | grep | [] [] [] [] [] [] [] | gretl | | gthumb | () () | hello | [] [] [] [] [] [] [] [] [] [] [] [] | id-utils | [] [] | indent | [] [] [] [] | jpilot | () () | jwhois | [] [] | kbd | | ld | | libc | [] [] [] [] | libiconv | [] [] [] | lifelines | | lilypond | [] | lingoteach | [] | lingoteach_lessons| | lynx | [] [] [] [] | m4 | [] [] [] [] | make | [] [] [] [] [] [] | man-db | () () | mysecretdiary | [] | nano | [] [] [] [] | nano_1_0 | [] [] [] [] [] | opcodes | [] [] | parted | [] [] [] | ptx | [] [] [] [] [] | python | | recode | [] [] [] | sed | [] [] [] [] [] [] [] [] | sh-utils | [] [] [] | sharutils | [] [] [] | sketch | () | soundtracker | [] [] | sp | | tar | [] [] [] [] [] [] | texinfo | [] [] [] | textutils | [] [] [] [] | util-linux | () [] | vorbis-tools | [] | wastesedge | | wdiff | [] [] [] | wget | [] [] [] [] [] [] | +-------------------------------------+ gl he hr hu id it ja ko lv nb nl nn 23 9 12 19 16 13 26 9 1 7 19 3 no pl pt pt_BR ru sk sl sv tr uk zh_CN zh_TW +----------------------------------------------+ a2ps | () () () [] [] [] [] [] | 10 ap-utils | () | 0 bash | [] | 6 bfd | [] [] | 5 binutils | [] [] | 5 bison | [] [] [] [] | 12 clisp | | 0 clisp | | 5 clisplow | | 0 cpio | [] [] [] [] | 12 darkstat | [] [] () () | 2 diffutils | [] [] [] [] [] [] | 17 enscript | [] [] [] [] | 8 error | [] [] [] | 7 fetchmail | () () [] | 6 fileutils | [] [] [] [] [] [] | 14 findutils | [] [] [] [] [] [] [] | 21 flex | [] [] [] | 9 gas | [] | 3 gawk | [] [] | 6 gcal | [] [] | 4 gcc | [] | 4 gettext | [] [] [] [] [] [] | 13 gnupg | [] [] [] | 14 gprof | [] [] | 5 gpsdrive | [] [] | 3 grep | [] [] [] [] [] | 20 gretl | | 1 gthumb | () () [] | 1 hello | [] [] [] [] [] [] [] | 28 id-utils | [] [] [] [] | 9 indent | [] [] [] [] [] | 14 jpilot | () () [] [] | 5 jwhois | [] () () [] [] | 7 kbd | [] [] | 5 ld | [] [] | 4 libc | [] [] [] [] [] [] | 18 libiconv | [] [] [] [] [] | 12 lifelines | [] | 1 lilypond | [] | 4 lingoteach | [] [] | 5 lingoteach_lessons| () | 0 lynx | [] [] [] [] | 13 m4 | [] [] [] [] | 13 make | [] [] [] [] [] | 15 man-db | | 3 mysecretdiary | [] [] [] | 7 nano | [] [] [] [] | 13 nano_1_0 | [] [] [] [] | 14 opcodes | [] [] [] | 8 parted | [] [] [] [] | 12 ptx | [] [] [] [] [] [] [] | 19 python | | 0 recode | [] [] [] [] [] [] | 15 sed | [] [] [] [] [] [] | 24 sh-utils | [] [] | 9 sharutils | [] [] [] [] | 14 sketch | [] () [] | 4 soundtracker | [] | 6 sp | | 1 tar | [] [] [] [] [] [] [] | 19 texinfo | [] [] | 10 textutils | [] [] [] [] [] | 14 util-linux | [] [] [] | 10 vorbis-tools | [] | 3 wastesedge | | 0 wdiff | [] [] [] [] [] | 14 wget | [] [] [] [] [] [] [] [] | 24 +----------------------------------------------+ 37 teams no pl pt pt_BR ru sk sl sv tr uk zh_CN zh_TW 68 domains 4 15 2 28 28 12 10 49 43 4 1 9 609 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are used for implementing regional variants of languages, or language dialects. For a PO file in the matrix above to be effective, the package to which it applies should also have been internationalized and distributed as such by its maintainer. There might be an observable lag between the mere existence a PO file and its wide availability in a distribution. If August 2002 seems to be old, you may fetch a more recent copy of this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix with full percentage details can be found at `http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'. Using `gettext' in new packages =============================== If you are writing a freely available program and want to internationalize it you are welcome to use GNU `gettext' in your package. Of course you have to respect the GNU Library General Public License which covers the use of the GNU `gettext' library. This means in particular that even non-free programs can use `libintl' as a shared library, whereas only free software can use `libintl' as a static library or use modified versions of `libintl'. Once the sources are changed appropriately and the setup can handle to use of `gettext' the only thing missing are the translations. The Free Translation Project is also available for packages which are not developed inside the GNU project. Therefore the information given above applies also for every other Free Software Project. Contact `translation@iro.umontreal.ca' to make the `.pot' files available to the translation teams. lifelines-3.0.61/aclocal.m40000700002540200244210000010076510655637173015627 0ustar prappDomain Users# generated automatically by aclocal 1.9.6 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. # Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION so it can be traced. # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.9.6])]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 7 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE]) AC_SUBST([$1_FALSE]) if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH]) ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 3 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.58])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AM_PROG_INSTALL_SH AM_PROG_INSTALL_STRIP AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl ]) ]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $1 | $1:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl install_sh=${install_sh-"$am_aux_dir/install-sh"} AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 AC_DEFUN([AM_MAINTAINER_MODE], [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode is disabled by default AC_ARG_ENABLE(maintainer-mode, [ --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer], USE_MAINTAINER_MODE=$enableval, USE_MAINTAINER_MODE=no) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST(MAINT)dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. # # Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories # created by `make install' are always world readable, even if the # installer happens to have an overly restrictive umask (e.g. 077). # This was a mistake. There are at least two reasons why we must not # use `-m 0755': # - it causes special bits like SGID to be ignored, # - it may be too restrictive (some setups expect 775 directories). # # Do not use -m 0755 and let people choose whatever they expect by # setting umask. # # We cannot accept any implementation of `mkdir' that recognizes `-p'. # Some implementations (such as Solaris 8's) are not thread-safe: if a # parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' # concurrently, both version can detect that a/ is missing, but only # one can create it and the other will error out. Consequently we # restrict ourselves to GNU make (using the --version option ensures # this.) AC_DEFUN([AM_PROG_MKDIR_P], [if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi AC_SUBST([mkdir_p])]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([build/gettext/codeset.m4]) m4_include([build/gettext/gettext.m4]) m4_include([build/gettext/glibc21.m4]) m4_include([build/gettext/iconv.m4]) m4_include([build/gettext/intdiv0.m4]) m4_include([build/gettext/inttypes-pri.m4]) m4_include([build/gettext/inttypes.m4]) m4_include([build/gettext/inttypes_h.m4]) m4_include([build/gettext/isc-posix.m4]) m4_include([build/gettext/lcmessage.m4]) m4_include([build/gettext/lib-ld.m4]) m4_include([build/gettext/lib-link.m4]) m4_include([build/gettext/lib-prefix.m4]) m4_include([build/gettext/progtest.m4]) m4_include([build/gettext/stdint_h.m4]) m4_include([build/gettext/uintmax_t.m4]) m4_include([build/gettext/ulonglong.m4]) m4_include([build/autotools/acinclude.m4]) lifelines-3.0.61/AUTHORS0000700002540200244210000000143310262566222015015 0ustar prappDomain UsersLifeLines Source Release, Version 3.0.6 http://lifelines.sourceforge.net ------------------------------------------------------------------------- Tom Wetmore (ttw@shore.net) - original author Matt Emmerton (matt@gsicomp.on.ca) - bug fixes & code cleaning Rob Fugina (robf@geekthing.com) - added autoconfig support Paul B. McBride (pbmcbride@rcn.com) - added win32 related bug fixes and features Marc Nozell (marc@nozell.com) - misc, project coordination Perry Rapp (prapp@erols.com) - win32 development, bug fixes and features, paging&resizing menus, config file, desc view, gedcom views, cross-referencing, pvalue memory issues Petter Reinholdtsen (pere@hungry.com) - code cleaning, insulation layer Stephen Dum (stephen.dum@verizon.net) - code cleaning, leak checking, xml docs, bug fixes. lifelines-3.0.61/build/0000700002540200244210000000000010657071736015051 5ustar prappDomain Userslifelines-3.0.61/build/autotools/0000700002540200244210000000000010657071736017102 5ustar prappDomain Userslifelines-3.0.61/build/autotools/acinclude.m40000700002540200244210000000046210167631174021272 0ustar prappDomain Usersdnl dnl Contains the following macros dnl JAPHAR_GREP_CFLAGS(flag, cmd_if_missing, cmd_if_present) dnl dnl JAPHAR_GREP_CFLAGS(flag, cmd_if_missing, cmd_if_present) AC_DEFUN([JAPHAR_GREP_CFLAGS], [case "$CFLAGS" in "$1" | "$1 "* | *" $1" | *" $1 "* ) ifelse($#, 3, [$3], [:]) ;; *) $2 ;; esac ]) lifelines-3.0.61/build/autotools/config.guess0000700002540200244210000011304507505750707021426 0ustar prappDomain Users#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002 Free Software Foundation, Inc. timestamp='2002-03-04' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi dummy=dummy-$$ trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int dummy(){}" > $dummy.c ; for c in cc gcc c89 ; do ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ; if test $? = 0 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; rm -f $dummy.c $dummy.o $dummy.rel ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; macppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvmeppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mipseb-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` fi # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. cat <$dummy.s .data \$Lformat: .byte 37,100,45,37,120,10,0 # "%d-%x\n" .text .globl main .align 4 .ent main main: .frame \$30,16,\$26,0 ldgp \$29,0(\$27) .prologue 1 .long 0x47e03d80 # implver \$0 lda \$2,-1 .long 0x47e20c21 # amask \$2,\$1 lda \$16,\$Lformat mov \$0,\$17 not \$1,\$18 jsr \$26,printf ldgp \$29,0(\$26) mov 0,\$16 jsr \$26,exit .end main EOF eval $set_cc_for_build $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null if test "$?" = 0 ; then case `./$dummy` in 0-0) UNAME_MACHINE="alpha" ;; 1-0) UNAME_MACHINE="alphaev5" ;; 1-1) UNAME_MACHINE="alphaev56" ;; 1-101) UNAME_MACHINE="alphapca56" ;; 2-303) UNAME_MACHINE="alphaev6" ;; 2-307) UNAME_MACHINE="alphaev67" ;; 2-1307) UNAME_MACHINE="alphaev68" ;; esac fi rm -f $dummy.s $dummy echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD $dummy.c -o $dummy \ && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null) && HP_ARCH=`./$dummy` if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi rm -f $dummy.c $dummy fi ;; esac echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3D:*:*:*) echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; x86:Interix*:3*) echo i386-pc-interix3 exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i386-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` rm -f $dummy.c test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0 ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit 0 ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit 0 ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit 0 ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit 0 ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #ifdef __INTEL_COMPILER LIBC=gnu #else LIBC=gnuaout #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` rm -f $dummy.c test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i*86:*:5:[78]*) case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) echo `uname -p`-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) if test "${UNAME_MACHINE}" = "x86pc"; then UNAME_MACHINE=pc echo i386-${UNAME_MACHINE}-nto-qnx else echo `uname -p`-${UNAME_MACHINE}-nto-qnx fi exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-[GKLNPTVW]:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit 0 ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: lifelines-3.0.61/build/autotools/config.rpath0000700002540200244210000003343407505750707021421 0ustar prappDomain Users#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2002 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a shlibext= host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix3* | aix4* | aix5*) wl='-Wl,' ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6*) wl='-Wl,' ;; linux*) echo '__INTEL_COMPILER' > conftest.$ac_ext if $CC -E conftest.$ac_ext >/dev/null | grep __INTEL_COMPILER >/dev/null then : else # Intel icc wl='-Qoption,ld,' fi ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; solaris*) wl='-Wl,' ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) if test "x$host_vendor" = xsni; then wl='-LD' else wl='-Wl,' fi ;; esac fi hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then case "$host_os" in aix3* | aix4* | aix5*) # On AIX, the GNU linker is very broken ld_shlibs=no ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' ;; solaris* | sysv5*) if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi esac fi if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib' else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib' fi fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=yes ;; freebsd1*) ld_shlibs=no ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9* | hpux10* | hpux11*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_minus_L=yes # Not in the search PATH, but as the default # location of the library. ;; irix5* | irix6*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; openbsd*) hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; sco3.2v5*) ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) if test "x$host_vendor" = xsno; then hardcode_direct=yes # is this really true??? else hardcode_direct=no # Motorola manual says yes, but my tests say they lie fi ;; sysv4.3*) ;; sysv5*) hardcode_libdir_flag_spec= ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4.2uw2*) hardcode_direct=yes hardcode_minus_L=no ;; sysv5uw7* | unixware7*) ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics libname_spec='lib$name' sys_lib_dlsearch_path_spec="/lib /usr/lib" sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" case "$host_os" in aix3*) shlibext=so ;; aix4* | aix5*) shlibext=so ;; amigaos*) shlibext=ixlibrary ;; beos*) shlibext=so ;; bsdi4*) shlibext=so sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" ;; cygwin* | mingw* | pw32*) case $GCC,$host_os in yes,cygwin*) shlibext=dll.a ;; yes,mingw*) shlibext=dll sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"` ;; yes,pw32*) shlibext=dll ;; *) shlibext=dll ;; esac ;; darwin* | rhapsody*) shlibext=dylib ;; freebsd1*) ;; freebsd*) shlibext=so ;; gnu*) shlibext=so ;; hpux9* | hpux10* | hpux11*) shlibext=sl ;; irix5* | irix6*) shlibext=so case "$host_os" in irix5*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 ") libsuff= shlibsuff= ;; *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" ;; linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) ;; linux-gnu*) shlibext=so ;; netbsd*) shlibext=so ;; newsos6) shlibext=so ;; openbsd*) shlibext=so ;; os2*) libname_spec='$name' shlibext=dll ;; osf3* | osf4* | osf5*) shlibext=so sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) shlibext=so ;; solaris*) shlibext=so ;; sunos4*) shlibext=so ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) shlibext=so case "$host_vendor" in motorola) sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; uts4*) shlibext=so ;; dgux*) shlibext=so ;; sysv4*MP*) if test -d /usr/nec; then shlibext=so fi ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_sys_lib_search_path_spec=`echo "X$sys_lib_search_path_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_sys_lib_dlsearch_path_spec=`echo "X$sys_lib_dlsearch_path_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | c4x | clipper \ | d10v | d30v | dsp16xx \ | fr30 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | m32r | m68000 | m68k | m88k | mcore \ | mips | mips16 | mips64 | mips64el | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el | mips64vr4300 \ | mips64vr4300el | mips64vr5000 | mips64vr5000el \ | mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \ | mipsisa32 | mipsisa64 \ | mn10200 | mn10300 \ | ns16k | ns32k \ | openrisc | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[34] | sh[34]eb | shbe | shle | sh64 \ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armv*-* \ | avr-* \ | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c54x-* \ | clipper-* | cydra-* \ | d10v-* | d30v-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | m32r-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | mcore-* \ | mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \ | mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \ | mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* | sh64-* \ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; crds | unos) basic_machine=m68k-crds ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; mmix*) basic_machine=mmix-knuth os=-mmixware ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; or32 | or32-*) basic_machine=or32-unknown os=-coff ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon) basic_machine=i686-pc ;; pentiumii | pentium2) basic_machine=i686-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3d) basic_machine=alpha-cray os=-unicos ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; windows32) basic_machine=i386-pc os=-windows32-msvcrt ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4 | sh3eb | sh4eb) basic_machine=sh-unknown ;; sh64) basic_machine=sh64-unknown ;; sparc | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; c4x*) basic_machine=c4x-none os=-coff ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto*) os=-nto-qnx ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -ptx*) vendor=sequent ;; -vxsim* | -vxworks*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: lifelines-3.0.61/build/autotools/depcomp0000700002540200244210000002752507505750707020472 0ustar prappDomain Users#! /bin/sh # depcomp - compile a program generating dependencies as side-effects # Copyright 1999, 2000 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # `libtool' can also be set to `yes' or `no'. depfile=${depfile-`echo "$object" | sed 's,\([^/]*\)$,.deps/\1,;s/\.\([^.]*\)$/.P\1/'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. This file always lives in the current directory. # Also, the AIX compiler puts `$object:' at the start of each line; # $object doesn't have directory information. stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" outname="$stripped.o" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; tru64) # The Tru64 AIX compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. tmpdepfile1="$object.d" tmpdepfile2=`echo "$object" | sed -e 's/.o$/.d/'` if test "$libtool" = yes; then "$@" -Wc,-MD else "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi if test -f "$tmpdepfile1"; then tmpdepfile="$tmpdepfile1" else tmpdepfile="$tmpdepfile2" fi if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a space and a tab in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. test -z "$dashmflag" && dashmflag=-M ( IFS=" " case " $* " in *" --mode=compile "*) # this is libtool, let us make it quiet for arg do # cycle over the arguments case "$arg" in "--mode=compile") # insert --quiet before "--mode=compile" set fnord "$@" --quiet shift # fnord ;; esac set fnord "$@" "$arg" shift # fnord shift # "$arg" done ;; esac "$@" $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" ) & proc=$! "$@" stat=$? wait "$proc" if test "$stat" != 0; then exit $stat; fi rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) # X makedepend ( shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift;; -*) ;; *) set fnord "$@" "$arg"; shift;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} 2>/dev/null -o"$obj_suffix" -f"$tmpdepfile" "$@" ) & proc=$! "$@" stat=$? wait "$proc" if test "$stat" != 0; then exit $stat; fi rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tail +3 "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. ( IFS=" " case " $* " in *" --mode=compile "*) for arg do # cycle over the arguments case $arg in "--mode=compile") # insert --quiet before "--mode=compile" set fnord "$@" --quiet shift # fnord ;; esac set fnord "$@" "$arg" shift # fnord shift # "$arg" done ;; esac "$@" -E | sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" ) & proc=$! "$@" stat=$? wait "$proc" if test "$stat" != 0; then exit $stat; fi rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. ( IFS=" " case " $* " in *" --mode=compile "*) for arg do # cycle over the arguments case $arg in "--mode=compile") # insert --quiet before "--mode=compile" set fnord "$@" --quiet shift # fnord ;; esac set fnord "$@" "$arg" shift # fnord shift # "$arg" done ;; esac "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" ) & proc=$! "$@" stat=$? wait "$proc" if test "$stat" != 0; then exit $stat; fi rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 lifelines-3.0.61/build/autotools/install-sh0000700002540200244210000001267107505750707021115 0ustar prappDomain Users#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else : fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: chmodcmd="" else instcmd=$mkdirprog fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then : else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else : fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else : fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else : fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else : fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 lifelines-3.0.61/build/autotools/missing0000700002540200244210000002405007505750707020502 0ustar prappDomain Users#! /bin/sh # Common stub for a few missing GNU programs while installing. # Copyright 1996, 1997, 1999, 2000 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch]" ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing 0.4 - GNU automake" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. You can get \`$1Help2man' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then # We have makeinfo, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; tar) shift if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 fi # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar ${1+"$@"} && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar ${1+"$@"} && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" ${1+"$@"} && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" ${1+"$@"} && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequirements for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 lifelines-3.0.61/build/autotools/mkinstalldirs0000700002540200244210000000351007505750707021707 0ustar prappDomain Users#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain # $Id: mkinstalldirs,v 1.1 2002/06/25 02:13:27 memmerto Exp $ errstatus=0 dirmode="" usage="\ Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." # process command line arguments while test $# -gt 0 ; do case "${1}" in -h | --help | --h* ) # -h for help echo "${usage}" 1>&2; exit 0 ;; -m ) # -m PERM arg shift test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } dirmode="${1}" shift ;; -- ) shift; break ;; # stop option processing -* ) echo "${usage}" 1>&2; exit 1 ;; # unknown option * ) break ;; # first non-opt arg esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac case $dirmode in '') if mkdir -p -- . 2>/dev/null; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" fi ;; *) if mkdir -m "$dirmode" -p -- . 2>/dev/null; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" fi ;; esac for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr="" chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp="$pathcomp/" done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 3 # End: # mkinstalldirs ends here lifelines-3.0.61/build/autotools/README0000700002540200244210000000104107506714021017747 0ustar prappDomain UsersThis directory holds a bunch of GNU autotools related files. This file is intended to show where they came from, and what the versions of the files are. File Parent Program Version --------------------------------------------------- config.sub autoconf config.guess autoconf missing autoconf mkinstalldirs autoconf installs-h autoconf depcomp automake config.rpath ?? ?? acinclude.m4 LifeLines n/a lifelines-3.0.61/build/gettext/0000700002540200244210000000000010657071736016535 5ustar prappDomain Userslifelines-3.0.61/build/gettext/codeset.m40000700002540200244210000000157607477212672020443 0ustar prappDomain Users# codeset.m4 serial AM1 (gettext-0.10.40) dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. AC_DEFUN([AM_LANGINFO_CODESET], [ AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, [AC_TRY_LINK([#include ], [char* cs = nl_langinfo(CODESET);], am_cv_langinfo_codeset=yes, am_cv_langinfo_codeset=no) ]) if test $am_cv_langinfo_codeset = yes; then AC_DEFINE(HAVE_LANGINFO_CODESET, 1, [Define if you have and nl_langinfo(CODESET).]) fi ]) lifelines-3.0.61/build/gettext/gettext.m40000700002540200244210000005730107606165340020467 0ustar prappDomain Users# gettext.m4 serial 17 (gettext-0.11.5) dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2002. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value `$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define(gt_included_intl, ifelse([$1], [external], [no], [yes])) define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], [])) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if test "$gt_cv_func_gnugettext_libc" != "yes"; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not dnl documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE(nls, [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT($USE_NLS) AC_SUBST(USE_NLS) ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH(included-gettext, [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. dnl Add a version number to the cache macros. define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1))) define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc]) define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl]) AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc, [AC_TRY_LINK([#include ]ifelse([$2], [need-formatstring-macros], [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ], [])[extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings;], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings], gt_cv_func_gnugettext_libc=yes, gt_cv_func_gnugettext_libc=no)]) if test "$gt_cv_func_gnugettext_libc" != "yes"; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], gt_cv_func_gnugettext_libintl, [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_TRY_LINK([#include ]ifelse([$2], [need-formatstring-macros], [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ], [])[extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias ();], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)], gt_cv_func_gnugettext_libintl=yes, gt_cv_func_gnugettext_libintl=no) dnl Now see whether libintl exists and depends on libiconv. if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include ]ifelse([$2], [need-formatstring-macros], [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ], [])[extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias ();], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" gt_cv_func_gnugettext_libintl=yes ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if test "$gt_cv_func_gnugettext_libc" = "yes" \ || { test "$gt_cv_func_gnugettext_libintl" = "yes" \ && test "$PACKAGE" != gettext; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. INTLOBJS="\$(GETTOBJS)" BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE(ENABLE_NLS, 1, [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if test "$gt_cv_func_gnugettext_libintl" = "yes"; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE(HAVE_GETTEXT, 1, [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE(HAVE_DCGETTEXT, 1, [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext; then BUILD_INCLUDED_LIBINTL=yes fi dnl Make all variables we use known to autoconf. AC_SUBST(BUILD_INCLUDED_LIBINTL) AC_SUBST(USE_INCLUDED_LIBINTL) AC_SUBST(CATOBJEXT) AC_SUBST(INTLOBJS) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST(DATADIRNAME) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST(INSTOBJEXT) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST(GENCAT) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST(INTLLIBS) dnl Make all documented variables known to autoconf. AC_SUBST(LIBINTL) AC_SUBST(LTLIBINTL) AC_SUBST(POSUB) ]) dnl Checks for all prerequisites of the po subdirectory, dnl except for USE_NLS. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_MKINSTALLDIRS])dnl dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) dnl Search for GNU xgettext 0.11 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1], :) dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. dnl Test whether we really found GNU msgfmt. if test "$GMSGFMT" != ":"; then dnl If it is no GNU msgfmt we define it as : so that the dnl Makefiles still can work. if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` AC_MSG_RESULT( [found $GMSGFMT program is not GNU msgfmt; ignore it]) GMSGFMT=":" fi fi dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is no GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 && (if $XGETTEXT --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po fi AC_OUTPUT_COMMANDS([ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' fi case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= GMOFILES= UPDATEPOFILES= DUMMYPOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it # from automake. eval 'ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Checks for all prerequisites of the intl subdirectory, dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS, dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. AC_DEFUN([AM_INTL_SUBDIR], [ AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_MKINSTALLDIRS])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_RANLIB])dnl AC_REQUIRE([AC_ISC_POSIX])dnl AC_REQUIRE([AC_HEADER_STDC])dnl AC_REQUIRE([AC_C_CONST])dnl AC_REQUIRE([AC_C_INLINE])dnl AC_REQUIRE([AC_TYPE_OFF_T])dnl AC_REQUIRE([AC_TYPE_SIZE_T])dnl AC_REQUIRE([AC_FUNC_ALLOCA])dnl AC_REQUIRE([AC_FUNC_MMAP])dnl AC_REQUIRE([jm_GLIBC21])dnl AC_REQUIRE([gt_INTDIV0])dnl AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl AC_REQUIRE([gt_INTTYPES_PRI])dnl AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ stdlib.h string.h unistd.h sys/param.h]) AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \ geteuid getgid getuid mempcpy munmap putenv setenv setlocale stpcpy \ strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next]) AM_ICONV AM_LANGINFO_CODESET if test $ac_cv_header_locale_h = yes; then AM_LC_MESSAGES fi dnl intl/plural.c is generated from intl/plural.y. It requires bison, dnl because plural.y uses bison specific features. It requires at least dnl bison-1.26 because earlier versions generate a plural.c that doesn't dnl compile. dnl bison is only needed for the maintainer (who touches plural.y). But in dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put dnl the rule in general Makefile. Now, some people carelessly touch the dnl files or have a broken "make" program, hence the plural.c rule will dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not dnl present or too old. AC_CHECK_PROGS([INTLBISON], [bison]) if test -z "$INTLBISON"; then ac_verc_fail=yes else dnl Found it, now check the version. AC_MSG_CHECKING([version of bison]) changequote(<<,>>)dnl ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) changequote([,])dnl ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; esac AC_MSG_RESULT([$ac_prog_version]) fi if test $ac_verc_fail = yes; then INTLBISON=: fi ]) AC_DEFUN([AM_MKINSTALLDIRS], [ dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but $(top_srcdir). dnl Try to locate is. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) lifelines-3.0.61/build/gettext/glibc21.m40000700002540200244210000000172707477212672020236 0ustar prappDomain Users# glibc21.m4 serial 2 (fileutils-4.1.3, gettext-0.10.40) dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. # Test for the GNU C Library, version 2.1 or newer. # From Bruno Haible. AC_DEFUN([jm_GLIBC21], [ AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, ac_cv_gnu_library_2_1, [AC_EGREP_CPP([Lucky GNU user], [ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif ], ac_cv_gnu_library_2_1=yes, ac_cv_gnu_library_2_1=no) ] ) AC_SUBST(GLIBC21) GLIBC21="$ac_cv_gnu_library_2_1" ] ) lifelines-3.0.61/build/gettext/iconv.m40000700002540200244210000000665307606165340020125 0ustar prappDomain Users# iconv.m4 serial AM4 (gettext-0.11.3) dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_func_iconv=yes) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_lib_iconv=yes am_cv_func_iconv=yes) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST(LIBICONV) AC_SUBST(LTLIBICONV) ]) AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL(am_cv_proto_iconv, [ AC_TRY_COMPILE([ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([$]{ac_t:- }[$]am_cv_proto_iconv) AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, [Define as const if the declaration of iconv() needs const.]) fi ]) lifelines-3.0.61/build/gettext/intdiv0.m40000700002540200244210000000356507606165340020363 0ustar prappDomain Users# intdiv0.m4 serial 1 (gettext-0.11.3) dnl Copyright (C) 2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. AC_DEFUN([gt_INTDIV0], [ AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_CACHE_CHECK([whether integer division by zero raises SIGFPE], gt_cv_int_divbyzero_sigfpe, [ AC_TRY_RUN([ #include #include static void #ifdef __cplusplus sigfpe_handler (int sig) #else sigfpe_handler (sig) int sig; #endif { /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ exit (sig != SIGFPE); } int x = 1; int y = 0; int z; int nan; int main () { signal (SIGFPE, sigfpe_handler); /* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ #if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) signal (SIGTRAP, sigfpe_handler); #endif /* Linux/SPARC yields signal SIGILL. */ #if defined (__sparc__) && defined (__linux__) signal (SIGILL, sigfpe_handler); #endif z = x / y; nan = y / y; exit (1); } ], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no, [ # Guess based on the CPU. case "$host_cpu" in alpha* | i[34567]86 | m68k | s390*) gt_cv_int_divbyzero_sigfpe="guessing yes";; *) gt_cv_int_divbyzero_sigfpe="guessing no";; esac ]) ]) case "$gt_cv_int_divbyzero_sigfpe" in *yes) value=1;; *) value=0;; esac AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value, [Define if integer division by zero raises signal SIGFPE.]) ]) lifelines-3.0.61/build/gettext/inttypes-pri.m40000700002540200244210000000222707606165340021447 0ustar prappDomain Users# inttypes-pri.m4 serial 1 (gettext-0.11.4) dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. # Define PRI_MACROS_BROKEN if exists and defines the PRI* # macros to non-string values. This is the case on AIX 4.3.3. AC_DEFUN([gt_INTTYPES_PRI], [ AC_REQUIRE([gt_HEADER_INTTYPES_H]) if test $gt_cv_header_inttypes_h = yes; then AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken], gt_cv_inttypes_pri_broken, [ AC_TRY_COMPILE([#include #ifdef PRId32 char *p = PRId32; #endif ], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes) ]) fi if test "$gt_cv_inttypes_pri_broken" = yes; then AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1, [Define if exists and defines unusable PRI* macros.]) fi ]) lifelines-3.0.61/build/gettext/inttypes.m40000700002540200244210000000171707606165340020662 0ustar prappDomain Users# inttypes.m4 serial 1 (gettext-0.11.4) dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Paul Eggert. # Define HAVE_INTTYPES_H if exists and doesn't clash with # . AC_DEFUN([gt_HEADER_INTTYPES_H], [ AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h, [ AC_TRY_COMPILE( [#include #include ], [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no) ]) if test $gt_cv_header_inttypes_h = yes; then AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1, [Define if exists and doesn't clash with .]) fi ]) lifelines-3.0.61/build/gettext/inttypes_h.m40000700002540200244210000000207307606165340021165 0ustar prappDomain Users# inttypes_h.m4 serial 4 (gettext-0.11.4) dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Paul Eggert. # Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, # doesn't clash with , and declares uintmax_t. AC_DEFUN([jm_AC_HEADER_INTTYPES_H], [ AC_CACHE_CHECK([for inttypes.h], jm_ac_cv_header_inttypes_h, [AC_TRY_COMPILE( [#include #include ], [uintmax_t i = (uintmax_t) -1;], jm_ac_cv_header_inttypes_h=yes, jm_ac_cv_header_inttypes_h=no)]) if test $jm_ac_cv_header_inttypes_h = yes; then AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1, [Define if exists, doesn't clash with , and declares uintmax_t. ]) fi ]) lifelines-3.0.61/build/gettext/isc-posix.m40000700002540200244210000000213307477212672020721 0ustar prappDomain Users# isc-posix.m4 serial 2 (gettext-0.11.2) dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. # This file is not needed with autoconf-2.53 and newer. Remove it in 2005. # This test replaces the one in autoconf. # Currently this macro should have the same name as the autoconf macro # because gettext's gettext.m4 (distributed in the automake package) # still uses it. Otherwise, the use in gettext.m4 makes autoheader # give these diagnostics: # configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX # configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX undefine([AC_ISC_POSIX]) AC_DEFUN([AC_ISC_POSIX], [ dnl This test replaces the obsolescent AC_ISC_POSIX kludge. AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) ] ) lifelines-3.0.61/build/gettext/lcmessage.m40000700002540200244210000000261607606165340020745 0ustar prappDomain Users# lcmessage.m4 serial 3 (gettext-0.11.3) dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995. # Check whether LC_MESSAGES is available in . AC_DEFUN([AM_LC_MESSAGES], [ AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi ]) lifelines-3.0.61/build/gettext/lib-ld.m40000700002540200244210000000626007477510465020154 0ustar prappDomain Users# lib-ld.m4 serial 1 (gettext-0.11) dnl Copyright (C) 1996-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl Subroutines of libtool.m4, dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision dnl with libtool.m4. dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 &5; then acl_cv_prog_gnu_ld=yes else acl_cv_prog_gnu_ld=no fi]) with_gnu_ld=$acl_cv_prog_gnu_ld ]) dnl From libtool-1.4. Sets the variable LD. AC_DEFUN([AC_LIB_PROG_LD], [AC_ARG_WITH(gnu-ld, [ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]* | [A-Za-z]:[\\/]*)] [re_direlt='/[^/][^/]*/\.\./'] # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(acl_cv_path_LD, [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$acl_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_LIB_PROG_LD_GNU ]) lifelines-3.0.61/build/gettext/lib-link.m40000700002540200244210000005563307606165340020512 0ustar prappDomain Users# lib-link.m4 serial 3 (gettext-0.11.3) dnl Copyright (C) 2001-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes undefine([Name]) undefine([NAME]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. If found, it dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" LIBS="$LIBS $LIB[]NAME" AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) undefine([Name]) undefine([NAME]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, dnl hardcode_direct, hardcode_minus_L, dnl sys_lib_search_path_spec, sys_lib_dlsearch_path_spec. AC_DEFUN([AC_LIB_RPATH], [ AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" libext="$acl_cv_libext" shlibext="$acl_cv_shlibext" hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" hardcode_direct="$acl_cv_hardcode_direct" hardcode_minus_L="$acl_cv_hardcode_minus_L" sys_lib_search_path_spec="$acl_cv_sys_lib_search_path_spec" sys_lib_dlsearch_path_spec="$acl_cv_sys_lib_dlsearch_path_spec" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE(rpath, [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH([lib$1-prefix], [ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib --without-lib$1-prefix don't search for lib$1 in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) lifelines-3.0.61/build/gettext/lib-prefix.m40000700002540200244210000001175507477510465021057 0ustar prappDomain Users# lib-prefix.m4 serial 1 (gettext-0.11) dnl Copyright (C) 2001-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/lib"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) lifelines-3.0.61/build/gettext/progtest.m40000700002540200244210000000407407477212672020660 0ustar prappDomain Users# progtest.m4 serial 2 (gettext-0.10.40) dnl Copyright (C) 1996-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1996. # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [# Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in /*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in ifelse([$5], , $PATH, [$5]); do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) lifelines-3.0.61/build/gettext/README0000700002540200244210000000063007606165340017412 0ustar prappDomain Usersgettext m4 files This is for developers without gettext Files added for gettext 0-10.40: codeset.m4 glibc21.m4 isc-posix.m4 progtest.m4 gettext.m4 iconv.m4 lcmessage.m4 Changes for gettext 0-11.2 unknown Files added for gettext 0-11.5: intdiv0.m4 inttypes-pri.m4 inttypes.m4 inttypes_h.m4 Makefile.am Makefile.in Files upgraded for gettext-0.11.5: gettext.m4 iconv.m4 lcmessage.m4 lib-link.m4 lifelines-3.0.61/build/gettext/stdint_h.m40000700002540200244210000000204307606165340020610 0ustar prappDomain Users# stdint_h.m4 serial 2 (gettext-0.11.4) dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Paul Eggert. # Define HAVE_STDINT_H_WITH_UINTMAX if exists, # doesn't clash with , and declares uintmax_t. AC_DEFUN([jm_AC_HEADER_STDINT_H], [ AC_CACHE_CHECK([for stdint.h], jm_ac_cv_header_stdint_h, [AC_TRY_COMPILE( [#include #include ], [uintmax_t i = (uintmax_t) -1;], jm_ac_cv_header_stdint_h=yes, jm_ac_cv_header_stdint_h=no)]) if test $jm_ac_cv_header_stdint_h = yes; then AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1, [Define if exists, doesn't clash with , and declares uintmax_t. ]) fi ]) lifelines-3.0.61/build/gettext/uintmax_t.m40000700002540200244210000000211407606165340021003 0ustar prappDomain Users# uintmax_t.m4 serial 6 (gettext-0.11) dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Paul Eggert. AC_PREREQ(2.13) # Define uintmax_t to `unsigned long' or `unsigned long long' # if does not exist. AC_DEFUN([jm_AC_TYPE_UINTMAX_T], [ AC_REQUIRE([jm_AC_HEADER_INTTYPES_H]) AC_REQUIRE([jm_AC_HEADER_STDINT_H]) if test $jm_ac_cv_header_inttypes_h = no && test $jm_ac_cv_header_stdint_h = no; then AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG]) test $ac_cv_type_unsigned_long_long = yes \ && ac_type='unsigned long long' \ || ac_type='unsigned long' AC_DEFINE_UNQUOTED(uintmax_t, $ac_type, [Define to unsigned long or unsigned long long if and don't define.]) fi ]) lifelines-3.0.61/build/gettext/ulonglong.m40000700002540200244210000000200007606165340020771 0ustar prappDomain Users# ulonglong.m4 serial 2 (fileutils-4.0.32, gettext-0.10.40) dnl Copyright (C) 1999-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Paul Eggert. AC_DEFUN([jm_AC_TYPE_UNSIGNED_LONG_LONG], [ AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long, [AC_TRY_LINK([unsigned long long ull = 1; int i = 63;], [unsigned long long ullmax = (unsigned long long) -1; return ull << i | ull >> i | ullmax / ull | ullmax % ull;], ac_cv_type_unsigned_long_long=yes, ac_cv_type_unsigned_long_long=no)]) if test $ac_cv_type_unsigned_long_long = yes; then AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1, [Define if you have the unsigned long long type.]) fi ]) lifelines-3.0.61/build/Makefile.am0000700002540200244210000000310007606165337017103 0ustar prappDomain Users# Process this file with automake to produce Makefile.in # (configure will process the resulting Makefile.in to produce Makefile) # SUBDIRS = autotools gettext msvc6 rpm # Files to trash - all Makefile.am/in in build/ EXTRA_DIST = rpm/lifelines.spec \ \ gettext/README gettext/codeset.m4 gettext/gettext.m4 \ gettext/glibc21.m4 gettext/iconv.m4 \ gettext/intdiv0.m4 \ gettext/inttypes-pri.m4 \ gettext/inttypes.m4 \ gettext/inttypes_h.m4 \ gettext/isc-posix.m4 \ gettext/lcmessage.m4 gettext/lib-ld.m4 gettext/lib-link.m4 \ gettext/lib-prefix.m4 gettext/progtest.m4 \ gettext/stdint_h.m4 \ gettext/uintmax_t.m4 \ gettext/ulonglong.m4 \ \ autotools/config.sub autotools/config.guess autotools/depcomp \ autotools/missing autotools/mkinstalldirs autotools/install-sh \ autotools/acinclude.m4 autotools/config.rpath autotools/README \ \ msvc6/dbverify/config.h msvc6/dbverify/dbVerify.rc \ msvc6/dbverify/dbverifyCmd.dsp msvc6/dbverify/dbverifyCmd.dsw \ msvc6/dbverify/resource.h \ \ msvc6/btedit/btedit.rc msvc6/btedit/bteditCmd.dsp \ msvc6/btedit/bteditCmd.dsw msvc6/btedit/resource.h \ \ msvc6/llines/config.h msvc6/llines/llines.rc \ msvc6/llines/llinesprj.dsp msvc6/llines/llinesprj.dsw \ msvc6/llines/resource.h msvc6/llines.ico lifelines-3.0.61/build/Makefile.in0000700002540200244210000002614310656416634017126 0ustar prappDomain Users# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Process this file with automake to produce Makefile.in # (configure will process the resulting Makefile.in to produce Makefile) # SUBDIRS = autotools gettext msvc6 rpm # Files to trash - all Makefile.am/in in build/ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ LIBOBJDIR = subdir = build DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/gettext/codeset.m4 \ $(top_srcdir)/build/gettext/gettext.m4 \ $(top_srcdir)/build/gettext/glibc21.m4 \ $(top_srcdir)/build/gettext/iconv.m4 \ $(top_srcdir)/build/gettext/intdiv0.m4 \ $(top_srcdir)/build/gettext/inttypes-pri.m4 \ $(top_srcdir)/build/gettext/inttypes.m4 \ $(top_srcdir)/build/gettext/inttypes_h.m4 \ $(top_srcdir)/build/gettext/isc-posix.m4 \ $(top_srcdir)/build/gettext/lcmessage.m4 \ $(top_srcdir)/build/gettext/lib-ld.m4 \ $(top_srcdir)/build/gettext/lib-link.m4 \ $(top_srcdir)/build/gettext/lib-prefix.m4 \ $(top_srcdir)/build/gettext/progtest.m4 \ $(top_srcdir)/build/gettext/stdint_h.m4 \ $(top_srcdir)/build/gettext/uintmax_t.m4 \ $(top_srcdir)/build/gettext/ulonglong.m4 \ $(top_srcdir)/build/autotools/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/build/autotools/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOCS_TARGET = @DOCS_TARGET@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POSUB = @POSUB@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SGMLTOOLS = @SGMLTOOLS@ SHELL = @SHELL@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ YACC = @YACC@ YFLAGS = @YFLAGS@ ac_ct_CC = @ac_ct_CC@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ EXTRA_DIST = rpm/lifelines.spec \ \ gettext/README gettext/codeset.m4 gettext/gettext.m4 \ gettext/glibc21.m4 gettext/iconv.m4 \ gettext/intdiv0.m4 \ gettext/inttypes-pri.m4 \ gettext/inttypes.m4 \ gettext/inttypes_h.m4 \ gettext/isc-posix.m4 \ gettext/lcmessage.m4 gettext/lib-ld.m4 gettext/lib-link.m4 \ gettext/lib-prefix.m4 gettext/progtest.m4 \ gettext/stdint_h.m4 \ gettext/uintmax_t.m4 \ gettext/ulonglong.m4 \ \ autotools/config.sub autotools/config.guess autotools/depcomp \ autotools/missing autotools/mkinstalldirs autotools/install-sh \ autotools/acinclude.m4 autotools/config.rpath autotools/README \ \ msvc6/dbverify/config.h msvc6/dbverify/dbVerify.rc \ msvc6/dbverify/dbverifyCmd.dsp msvc6/dbverify/dbverifyCmd.dsw \ msvc6/dbverify/resource.h \ \ msvc6/btedit/btedit.rc msvc6/btedit/bteditCmd.dsp \ msvc6/btedit/bteditCmd.dsw msvc6/btedit/resource.h \ \ msvc6/llines/config.h msvc6/llines/llines.rc \ msvc6/llines/llinesprj.dsp msvc6/llines/llinesprj.dsw \ msvc6/llines/resource.h msvc6/llines.ico all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu build/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu build/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh uninstall-info-am: tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) $(mkdir_p) $(distdir)/autotools $(distdir)/gettext $(distdir)/msvc6 $(distdir)/msvc6/btedit $(distdir)/msvc6/dbverify $(distdir)/msvc6/llines $(distdir)/rpm @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-info install-info-am install-man \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lifelines-3.0.61/build/msvc6/0000700002540200244210000000000010657071736016107 5ustar prappDomain Userslifelines-3.0.61/build/msvc6/btedit/0000700002540200244210000000000010657071736017362 5ustar prappDomain Userslifelines-3.0.61/build/msvc6/btedit/btedit.rc0000700002540200244210000000547110655637145021175 0ustar prappDomain Users//Microsoft Developer Studio generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // English (U.S.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 ///////////////////////////////////////////////////////////////////////////// // // Icon // // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. IDI_LLINES ICON DISCARDABLE "../llines.ico" #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0" END 2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""afxres.h""\r\n" "\0" END 3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED #ifndef _MAC ///////////////////////////////////////////////////////////////////////////// // // Version // VS_VERSION_INFO VERSIONINFO FILEVERSION 3,0,61,17218 PRODUCTVERSION 3,0,61,17218 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x29L #else FILEFLAGS 0x28L #endif FILEOS 0x40004L FILETYPE 0x1L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", "http://www.sourceforge.net/projects/lifelines\0" VALUE "CompanyName", "LifeLines on SourceForge\0" VALUE "FileDescription", "btedit.exe\0" VALUE "FileVersion", "3, 0, 61, 17218\0" VALUE "InternalName", "btedit\0" VALUE "LegalCopyright", "Copyright © 1991-2006\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "btedit.exe\0" VALUE "PrivateBuild", "\0" VALUE "ProductName", "LifeLines Genealogical DB and Programming System\0" VALUE "ProductVersion", "3, 0, 61, 17218\0" VALUE "SpecialBuild", "Win32 version by Perry Rapp\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END #endif // !_MAC #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED lifelines-3.0.61/build/msvc6/btedit/bteditCmd.dsp0000700002540200244210000002000410336252717021762 0ustar prappDomain Users# Microsoft Developer Studio Project File - Name="bteditCmd" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=bteditCmd - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "bteditCmd.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "bteditCmd.mak" CFG="bteditCmd - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "bteditCmd - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "bteditCmd - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "bteditCmd - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "..\..\..\..\obj\btedit\Release" # PROP Intermediate_Dir "..\..\..\..\obj\btedit\Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\src\hdrs" /I "..\..\..\src\hdrs\win32" /I "." /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "HAVE__VSNPRINTF" /D "HAVE_CONFIG_H" /YX /FD /c # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib version.lib /nologo /subsystem:console /machine:I386 /out:"..\..\..\..\bin\btedit\Release\btedit.exe" !ELSEIF "$(CFG)" == "bteditCmd - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "..\..\obj\bteditCmd\Debug" # PROP Intermediate_Dir "..\..\obj\bteditCmd\Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\src\hdrs" /I "..\..\..\src\hdrs\win32" /I "." /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "HAVE__VSNPRINTF" /D "HAVE_CONFIG_H" /YX /FD /GZ /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib version.lib /nologo /subsystem:console /debug /machine:I386 /out:"..\..\bin\bteditCmd\Debug/bteditCmd.exe" /pdbtype:sept !ENDIF # Begin Target # Name "bteditCmd - Win32 Release" # Name "bteditCmd - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=..\..\..\src\btree\addkey.c # End Source File # Begin Source File SOURCE=..\..\..\src\btree\block.c # End Source File # Begin Source File SOURCE=..\..\..\src\tools\btedit.c # End Source File # Begin Source File SOURCE=.\btedit.rc # End Source File # Begin Source File SOURCE=..\..\..\src\btree\btrec.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\dirs.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\environ.c # End Source File # Begin Source File SOURCE=..\..\..\src\btree\file.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\fileops.c # End Source File # Begin Source File SOURCE=..\..\..\win32\iconvshim.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\icvt.c # End Source File # Begin Source File SOURCE=..\..\..\src\btree\index.c # End Source File # Begin Source File SOURCE=..\..\..\win32\intlshim.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\llstrcmp.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\memalloc.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\mychar_funcs.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\mychar_tables.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\mystring.c # End Source File # Begin Source File SOURCE=..\..\..\src\btree\opnbtree.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\path.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\stdstrng.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\stralloc.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\strapp.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\strcvt.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\strutf8.c # End Source File # Begin Source File SOURCE=..\..\..\src\btree\utils.c # End Source File # Begin Source File SOURCE=..\..\..\src\arch\vsnprintf.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\vtable.c # End Source File # Begin Source File SOURCE=..\..\..\win32\w32systm.c # End Source File # Begin Source File SOURCE=..\..\..\src\tools\wprintf.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\zstr.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=..\..\..\src\hdrs\arch.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\btree.h # End Source File # Begin Source File SOURCE=..\..\..\src\btree\btreei.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\cache.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\feedback.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\gedcom.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\interp.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\llnls.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\llstdlib.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\msvc.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\mychar.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\mystring.h # End Source File # Begin Source File SOURCE=.\resource.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\standard.h # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\stdlibi.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\sys_inc.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\table.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\translat.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\uiprompts.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\vtable.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\zstr.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # Begin Source File SOURCE=..\llines.ico # End Source File # End Group # End Target # End Project lifelines-3.0.61/build/msvc6/btedit/bteditCmd.dsw0000700002540200244210000000103507505221364021772 0ustar prappDomain UsersMicrosoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "bteditCmd"=.\bteditCmd.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### lifelines-3.0.61/build/msvc6/btedit/resource.h0000700002540200244210000000066710165626176021374 0ustar prappDomain Users//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by btedit.rc // #define IDI_LLINES 101 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 102 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif lifelines-3.0.61/build/msvc6/dbverify/0000700002540200244210000000000010657071736017721 5ustar prappDomain Userslifelines-3.0.61/build/msvc6/dbverify/config.h0000700002540200244210000000115710321504200021315 0ustar prappDomain Users/* config.h settings for dbverify for compiling with Win32/MSVC6 */ #define PACKAGE "lifelines" #define LOCALEDIR "." #define ENABLE_NLS 1 #define HAVE_NGETTEXT 1 #define HAVE_BIND_TEXTDOMAIN_CODESET 1 #define HAVE_WINDOWS_H 1 #define HAVE__VSNPRINTF 1 #define HAVE_SETLOCALE 1 #define HAVE_STRCOLL 1 #define HAVE_LOCALE_H 1 #define HAVE__PUTENV 1 #define HAVE_ICONV 1 #define HAVE_WCSCOLL 1 #define HAVE_WCHAR_H 1 #define HAVE_TOWLOWER 1 #define HAVE_TOWUPPER 1 #define HAVE_ISWSPACE 1 #define HAVE_ISWALPHA 1 #define IN_LIBINTL 1 #define WIN32_INTL_SHIM 1 #define WIN32_ICONV_SHIM 1 #define LINES_CONFIG_FILE "lines.cfg" lifelines-3.0.61/build/msvc6/dbverify/dbVerify.rc0000700002540200244210000000547710655637144022040 0ustar prappDomain Users//Microsoft Developer Studio generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // English (U.S.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 ///////////////////////////////////////////////////////////////////////////// // // Icon // // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. IDI_LLINES ICON DISCARDABLE "../llines.ico" #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0" END 2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""afxres.h""\r\n" "\0" END 3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED #ifndef _MAC ///////////////////////////////////////////////////////////////////////////// // // Version // VS_VERSION_INFO VERSIONINFO FILEVERSION 3,0,61,17218 PRODUCTVERSION 3,0,61,17218 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x21L #else FILEFLAGS 0x20L #endif FILEOS 0x40004L FILETYPE 0x1L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", "http://www.sourceforge.net/projects/lifelines\0" VALUE "CompanyName", "LifeLines on SourceForge\0" VALUE "FileDescription", "dbverify.exe\0" VALUE "FileVersion", "3, 0, 61, 17218\0" VALUE "InternalName", "dbverify\0" VALUE "LegalCopyright", "Copyright © 1991-2006\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "dbverify.exe\0" VALUE "PrivateBuild", "\0" VALUE "ProductName", "LifeLines Genealogical DB and Programming System\0" VALUE "ProductVersion", "3, 0, 61, 17218\0" VALUE "SpecialBuild", "Win32 version by Perry Rapp\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END #endif // !_MAC #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED lifelines-3.0.61/build/msvc6/dbverify/dbverifyCmd.dsp0000700002540200244210000003627210336263144022672 0ustar prappDomain Users# Microsoft Developer Studio Project File - Name="dbverifyCmd" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=dbverifyCmd - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "dbverifyCmd.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "dbverifyCmd.mak" CFG="dbverifyCmd - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "dbverifyCmd - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "dbverifyCmd - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "dbverifyCmd - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "..\..\..\..\obj\dbverify\Release" # PROP Intermediate_Dir "..\..\..\..\obj\dbverify\Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /W3 /GX /Zi /O2 /I "../../../src/hdrs" /I "../../../src/hdrs/win32" /I "../../../src/intl" /I "." /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "HAVE_CONFIG_H" /YX /FD /c # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib version.lib /nologo /subsystem:console /map /debug /machine:I386 /out:"..\..\..\..\bin\dbverify\Release\dbverify.exe" /libpath:"..\..\..\..\bin\libintl\Release" /libpath:"..\..\..\iconv.rel\lib" /mapinfo:lines # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "dbverifyCmd - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "..\..\..\..\obj\dbverify\Debug" # PROP Intermediate_Dir "..\..\..\..\obj\dbverify\Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../src/hdrs" /I "../../../src/hdrs/win32" /I "../../../src/intl" /I "." /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "HAVE_CONFIG_H" /YX /FD /GZ /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib version.lib /nologo /subsystem:console /debug /machine:I386 /out:"..\..\..\..\bin\dbverify\Debug\dbverify.exe" /pdbtype:sept /libpath:"..\..\..\..\bin\libintl\Debug" /libpath:"..\..\..\iconv.dbg\lib" !ENDIF # Begin Target # Name "dbverifyCmd - Win32 Release" # Name "dbverifyCmd - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=..\..\..\src\btree\addkey.c # End Source File # Begin Source File SOURCE=..\..\..\src\arch\alphasort.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\appendstr.c # End Source File # Begin Source File SOURCE=..\..\..\src\btree\block.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\brwslist.c # End Source File # Begin Source File SOURCE=..\..\..\src\btree\btrec.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\charmaps.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\charprops.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\codesets.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\datei.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\dateparse.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\dateprint.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\dbcontext.c # End Source File # Begin Source File SOURCE=..\..\..\src\tools\dbverify.c # End Source File # Begin Source File SOURCE=.\dbVerify.rc # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\dirs.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\environ.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\equaliso.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\errlog.c # End Source File # Begin Source File SOURCE=..\..\..\src\btree\file.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\fileops.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\fpattern.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\gedcom.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\generic.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\gengedc.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\gstrings.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\hashtab.c # End Source File # Begin Source File SOURCE=..\..\..\win32\iconvshim.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\icvt.c # End Source File # Begin Source File SOURCE=..\..\..\src\btree\index.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\indiseq.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\init.c # End Source File # Begin Source File SOURCE=..\..\..\win32\intlshim.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\intrface.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\keytonod.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\list.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\listener.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\llabort.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\lldatabase.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\lldate.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\llgettext.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\lloptions.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\llstrcmp.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\locales.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\log.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\memalloc.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\messages.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\misc.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\mychar_funcs.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\mychar_tables.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\mystring.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\names.c # End Source File # Begin Source File SOURCE=..\..\..\src\arch\nl_langinfo.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\node.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\nodechk.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\nodeio.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\nodeutls.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\object.c # End Source File # Begin Source File SOURCE=..\..\..\src\btree\opnbtree.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\path.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\place.c # End Source File # Begin Source File SOURCE=..\..\..\src\arch\platform.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\property.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\rbtree.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\record.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\refns.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\remove.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\replace.c # End Source File # Begin Source File SOURCE=..\..\..\src\arch\scandir.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\sequence.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\soundex.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\spltjoin.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\sprintpic.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\stack.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\stdlib.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\stdstrng.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\stralloc.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\strapp.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\strcvt.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\strset.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\strutf8.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\strwhite.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\table.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\translat.c # End Source File # Begin Source File SOURCE=..\..\..\src\btree\traverse.c # End Source File # Begin Source File SOURCE=..\..\..\src\btree\utils.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\valid.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\valtable.c # End Source File # Begin Source File SOURCE=..\..\..\src\arch\vsnprintf.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\vtable.c # End Source File # Begin Source File SOURCE=..\..\..\src\tools\wprintf.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\xlat.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\xreffile.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\zstr.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=..\..\..\src\hdrs\arch.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\btree.h # End Source File # Begin Source File SOURCE=..\..\..\src\btree\btreei.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\cache.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\charprops.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\codesets.h # End Source File # Begin Source File SOURCE=.\config.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\date.h # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\datei.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\dbcontext.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\feedback.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\fpattern.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\gedcheck.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\gedcom.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\gedcom_macros.h # End Source File # Begin Source File SOURCE=..\..\..\gedlib\gedcomi.h # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\gedcomi.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\generic.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\gengedc.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\hashtab.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\win32\iconv.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\win32\iconvshim.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\icvt.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\indiseq.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\interp.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\win32\intlshim.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\isolangs.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\langinfz.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\liflines.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\llnls.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\lloptions.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\llstdlib.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\log.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\menuitem.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\metadata.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\msvc.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\mychar.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\mystring.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\object.h # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\rbtree.h # End Source File # Begin Source File SOURCE=.\resource.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\sequence.h # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\stack.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\standard.h # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\stdlibi.h # End Source File # Begin Source File SOURCE=D:\dev\PlatformSdk\Include\StrAlign.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\sys_inc.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\table.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\translat.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\uiprompts.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\vtable.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\xlat.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\zstr.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # Begin Source File SOURCE=..\llines.ico # End Source File # End Group # End Target # End Project lifelines-3.0.61/build/msvc6/dbverify/dbverifyCmd.dsw0000700002540200244210000000104107505221364022665 0ustar prappDomain UsersMicrosoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "dbverifyCmd"=.\dbverifyCmd.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### lifelines-3.0.61/build/msvc6/dbverify/resource.h0000700002540200244210000000067110165626176021726 0ustar prappDomain Users//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by dbVerify.rc // #define IDI_LLINES 101 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 102 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif lifelines-3.0.61/build/msvc6/llines/0000700002540200244210000000000010657071736017375 5ustar prappDomain Userslifelines-3.0.61/build/msvc6/llines/config.h0000700002540200244210000000115510321504200020767 0ustar prappDomain Users/* config.h settings for llines for compiling with Win32/MSVC6 */ #define PACKAGE "lifelines" #define LOCALEDIR "." #define ENABLE_NLS 1 #define HAVE_NGETTEXT 1 #define HAVE_BIND_TEXTDOMAIN_CODESET 1 #define HAVE_WINDOWS_H 1 #define HAVE__VSNPRINTF 1 #define HAVE_SETLOCALE 1 #define HAVE_STRCOLL 1 #define HAVE_LOCALE_H 1 #define HAVE__PUTENV 1 #define HAVE_ICONV 1 #define HAVE_WCSCOLL 1 #define HAVE_WCHAR_H 1 #define HAVE_TOWLOWER 1 #define HAVE_TOWUPPER 1 #define HAVE_ISWSPACE 1 #define HAVE_ISWALPHA 1 #define IN_LIBINTL 1 #define WIN32_INTL_SHIM 1 #define WIN32_ICONV_SHIM 1 #define LINES_CONFIG_FILE "lines.cfg" lifelines-3.0.61/build/msvc6/llines/llines.rc0000700002540200244210000000546210655637145021223 0ustar prappDomain Users//Microsoft Developer Studio generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // English (U.S.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 ///////////////////////////////////////////////////////////////////////////// // // Icon // // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. IDI_LLINES ICON DISCARDABLE "../llines.ico" #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0" END 2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""afxres.h""\r\n" "\0" END 3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED #ifndef _MAC ///////////////////////////////////////////////////////////////////////////// // // Version // VS_VERSION_INFO VERSIONINFO FILEVERSION 3,0,61,17218 PRODUCTVERSION 3,0,61,17218 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x21L #else FILEFLAGS 0x20L #endif FILEOS 0x40004L FILETYPE 0x1L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", "http://www.sourceforge.net/projects/lifelines\0" VALUE "CompanyName", "LifeLines on SourceForge\0" VALUE "FileDescription", "Lines\0" VALUE "FileVersion", "3, 0, 61, 17218\0" VALUE "InternalName", "Lines\0" VALUE "LegalCopyright", "Copyright © 1991-2006\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "Lines.exe\0" VALUE "PrivateBuild", "\0" VALUE "ProductName", "LifeLines Genealogical DB and Programming System\0" VALUE "ProductVersion", "3, 0, 61, 17218\0" VALUE "SpecialBuild", "Win32 version by Perry Rapp\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END #endif // !_MAC #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED lifelines-3.0.61/build/msvc6/llines/llinesprj.dsp0000700002540200244210000005226710623675035022121 0ustar prappDomain Users# Microsoft Developer Studio Project File - Name="llinesprj" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=llinesprj - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "llinesprj.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "llinesprj.mak" CFG="llinesprj - Win32 Release" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "llinesprj - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "llinesprj - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "llinesprj - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "..\..\..\..\obj\llines\Release" # PROP Intermediate_Dir "..\..\..\..\obj\llines\Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /W3 /GX /O2 /I "../../../src/hdrs" /I "../../../src/hdrs/win32" /I "../../../intl" /I "." /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "HAVE_CONFIG_H" /YX /FD /c # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 winspool.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib version.lib /nologo /subsystem:console /map /machine:I386 /out:"..\..\..\..\bin\llines\Release\Lines.exe" /libpath:"..\..\..\..\bin\libintl\Release" /libpath:"..\..\..\iconv.rel\lib" /mapinfo:lines # SUBTRACT LINK32 /pdb:none /debug !ELSEIF "$(CFG)" == "llinesprj - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "..\..\..\..\obj\llines\Debug" # PROP Intermediate_Dir "..\..\..\..\obj\llines\Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../src/hdrs" /I "../../../src/hdrs/win32" /I "../../../intl" /I "." /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "HAVE_CONFIG_H" /FR /FD /GZ /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib version.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libcmt.lib" /nodefaultlib:"msvcrt.lib" /nodefaultlib:"libcmtd.lib" /nodefaultlib:"msvcrtd.lib" /out:"..\..\..\..\bin\llines\Debug/llines.exe" /pdbtype:sept /libpath:"..\..\..\..\bin\libintl\Debug" /libpath:"..\..\..\iconv.dbg\lib" !ENDIF # Begin Target # Name "llinesprj - Win32 Release" # Name "llinesprj - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=..\..\..\src\liflines\add.c # End Source File # Begin Source File SOURCE=..\..\..\src\btree\addkey.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\advedit.c # End Source File # Begin Source File SOURCE=..\..\..\src\interp\alloc.c # End Source File # Begin Source File SOURCE=..\..\..\src\arch\alphasort.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\appendstr.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\array.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\ask.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\askgedc.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\askprogram.c # End Source File # Begin Source File SOURCE=..\..\..\src\btree\block.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\browse.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\brwslist.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\brwsmenu.c # End Source File # Begin Source File SOURCE=..\..\..\src\btree\btrec.c # End Source File # Begin Source File SOURCE=..\..\..\src\interp\builtin.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\charmaps.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\charprops.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\choose.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\codesets.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\cscurses.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\datei.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\dateparse.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\dateprint.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\dbcontext.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\dbfuncs.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\dblist.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\delete.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\dirs.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\dispfmt.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\dynmenu.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\edit.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\editmap.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\editvtab.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\environ.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\equaliso.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\errlog.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\error.c # End Source File # Begin Source File SOURCE=..\..\..\src\interp\eval.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\export.c # End Source File # Begin Source File SOURCE=..\..\..\src\btree\file.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\fileops.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\fpattern.c # End Source File # Begin Source File SOURCE=..\..\..\src\interp\functab.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\gedcom.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\gengedc.c # End Source File # Begin Source File SOURCE=..\..\..\win32\getopt.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\gstrings.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\hashtab.c # End Source File # Begin Source File SOURCE=..\..\..\src\interp\heapused.c # End Source File # Begin Source File SOURCE=..\..\..\win32\iconvshim.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\icvt.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\import.c # End Source File # Begin Source File SOURCE=..\..\..\src\btree\index.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\indiseq.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\init.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\interact.c # End Source File # Begin Source File SOURCE=..\..\..\src\interp\interp.c # End Source File # Begin Source File SOURCE=..\..\..\win32\intlshim.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\intrface.c # End Source File # Begin Source File SOURCE=..\..\..\src\interp\intrpseq.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\keytonod.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\lbrowse.c # End Source File # Begin Source File SOURCE=..\..\..\src\interp\lex.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\lines_usage.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\list.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\listener.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\listui.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\llabort.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\lldatabase.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\lldate.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\llgettext.c # End Source File # Begin Source File SOURCE=.\llines.rc # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\lloptions.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\llstrcmp.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\loadsave.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\locales.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\log.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\main.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\memalloc.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\menuset.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\merge.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\messages.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\misc.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\miscutls.c # End Source File # Begin Source File SOURCE=..\..\..\src\interp\more.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\mychar_funcs.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\mychar_tables.c # End Source File # Begin Source File SOURCE=..\..\..\win32\mycurses.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\mystring.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\names.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\newrecs.c # End Source File # Begin Source File SOURCE=..\..\..\src\arch\nl_langinfo.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\node.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\nodechk.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\nodeio.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\nodeutls.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\norm_charmap.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\object.c # End Source File # Begin Source File SOURCE=..\..\..\src\btree\opnbtree.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\path.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\pedigree.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\place.c # End Source File # Begin Source File SOURCE=..\..\..\src\arch\platform.c # End Source File # Begin Source File SOURCE=..\..\..\src\interp\progerr.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\property.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\proptbls.c # End Source File # Begin Source File SOURCE=..\..\..\src\interp\pvalalloc.c # End Source File # Begin Source File SOURCE=..\..\..\src\interp\pvalmath.c # End Source File # Begin Source File SOURCE=..\..\..\src\interp\pvalue.c # End Source File # Begin Source File SOURCE=..\..\..\src\interp\rassa.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\rbtree.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\record.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\refns.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\remove.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\replace.c # End Source File # Begin Source File SOURCE=..\..\..\src\interp\rptsort.c # End Source File # Begin Source File SOURCE=..\..\..\src\interp\rptui.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\scan.c # End Source File # Begin Source File SOURCE=..\..\..\src\arch\scandir.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\screen.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\searchui.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\selectdb.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\sequence.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\show.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\signals.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\soundex.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\spltjoin.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\sprintpic.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\stack.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\stdlib.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\stdstrng.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\stralloc.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\strapp.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\strcvt.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\strset.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\strutf8.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\strwhite.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\swap.c # End Source File # Begin Source File SOURCE=..\..\..\src\interp\symtab.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\table.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\tandem.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\translat.c # End Source File # Begin Source File SOURCE=..\..\..\src\btree\traverse.c # End Source File # Begin Source File SOURCE=..\..\..\src\btree\utils.c # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\valgdcom.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\valid.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\valtable.c # End Source File # Begin Source File SOURCE=..\..\..\src\arch\vsnprintf.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\vtable.c # End Source File # Begin Source File SOURCE=..\..\..\win32\w32systm.c # End Source File # Begin Source File SOURCE=..\..\..\src\interp\write.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\xlat.c # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\xreffile.c # End Source File # Begin Source File SOURCE=..\..\..\src\interp\yacc.c # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\zstr.c # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # Begin Source File SOURCE=..\llines.ico # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "" # Begin Source File SOURCE=..\..\..\src\hdrs\arch.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\array.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\btree.h # End Source File # Begin Source File SOURCE=..\..\..\src\btree\btreei.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\cache.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\charprops.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\codesets.h # End Source File # Begin Source File SOURCE=.\config.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\cscurses.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\win32\curses.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\date.h # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\datei.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\dbcontext.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\dbfuncs.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\dbfuncsi.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\feedback.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\fpattern.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\gedcheck.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\gedcom.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\gedcom_macros.h # End Source File # Begin Source File SOURCE=..\..\..\src\gedlib\gedcomi.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\gengedc.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\win32\getopt.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\hashtab.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\win32\iconv.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\win32\iconvshim.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\icvt.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\impfeed.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\indiseq.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\interp.h # End Source File # Begin Source File SOURCE=..\..\..\src\interp\interpi.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\win32\intlshim.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\isolangs.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\langinfz.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\liflines.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\list.h # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\listui.h # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\llinesi.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\llnls.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\lloptions.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\llstdlib.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\log.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\menuitem.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\metadata.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\msvc.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\mychar.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\mycurses.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\mystring.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\object.h # End Source File # Begin Source File SOURCE=..\..\..\src\interp\parse.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\proptbls.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\pvalue.h # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\rbtree.h # End Source File # Begin Source File SOURCE=.\resource.h # End Source File # Begin Source File SOURCE=..\..\..\src\interp\rptui.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\screen.h # End Source File # Begin Source File SOURCE=..\..\..\src\liflines\screeni.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\sequence.h # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\stack.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\standard.h # End Source File # Begin Source File SOURCE=..\..\..\src\stdlib\stdlibi.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\sys_inc.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\table.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\translat.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\uiprompts.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\version.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\vtable.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\xlat.h # End Source File # Begin Source File SOURCE=..\..\..\src\interp\yacc.h # End Source File # Begin Source File SOURCE=..\..\..\src\hdrs\zstr.h # End Source File # End Group # Begin Source File SOURCE=..\..\..\ChangeLog # End Source File # End Target # End Project lifelines-3.0.61/build/msvc6/llines/llinesprj.dsw0000700002540200244210000000103507505221364022110 0ustar prappDomain UsersMicrosoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "llinesprj"=.\llinesprj.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### lifelines-3.0.61/build/msvc6/llines/resource.h0000700002540200244210000000066710165626176021407 0ustar prappDomain Users//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by llines.rc // #define IDI_LLINES 101 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 102 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif lifelines-3.0.61/build/msvc6/llines.ico0000700002540200244210000000206607505220557020073 0ustar prappDomain Users è&(( @€€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿ™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™›»»»¹™™™™™™™™™›¹™™™™™™™™™™™™›¹™™™™™™™™™™™™›¹™™™™™™™™™™™™›¹™™™™™™™™™™™™›¹™™™™™™›»»»¹™›¹™™™™™™›¹™™™™›¹™™™™™™›¹™™™™›¹™™™™™™›¹™™™™›¹™™™™™™›¹™™™™›¹™™™™™™›¹™™™™›¹™™™™™™›¹™™™™™™™™™™™™›¹™™™™™™™™™™™™›¹™™™™™™™™™™™™›¹™™™™™™™™™™™™›¹™™™™™™™™™™™™›¹™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™ÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÿÿÿÿÿÿÿÿ( À€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð™™›»»¹ð™™›™™™ð™™›™™™ð»»»™™™ð¹™›™™™ð¹™›™™™ð¹™›™™™ð¹™›™™™ð¹™›™™™ð¹™›™™™ð¹™›™™™ð¹™™™™™ðÿÿÿÿÿÿðÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÿÿÿÿlifelines-3.0.61/build/rpm/0000700002540200244210000000000010657071736015647 5ustar prappDomain Userslifelines-3.0.61/build/rpm/lifelines.spec0000700002540200244210000001444410655637142020504 0ustar prappDomain Users# # lifelines.spec - RPM configuration file for Lifelines # # To generate RPMs, place the tar.gz in /usr/src/packages/SOURCES/ and # (or /usr/src/redhat/SOURCES as appropriate) # then "rpm -ba lifelines.spec" # or on newer systems, "rpmbuild -ba lifelines.spec" # # Add comment to top of comments at bottom if you revise this file. # %define lifelines_version 3.0.61 %define reports_dir /usr/local/share/lifelines-%{lifelines_version}/reports %define tt_dir /usr/local/share/lifelines-%{lifelines_version}/tt Name: lifelines Summary: lifelines genealogy program Version: %{lifelines_version} Release: 1 License: X11 Group: Utilities/System Source: http://download.sourceforge.net/lifelines/lifelines-%{lifelines_version}.tar.gz URL: http://lifelines.sourceforge.net/ Packager: Marc Nozell Provides: lifelines BuildRoot: %{_tmppath}/%{name}-%{version}-root BuildRequires: ncurses-devel bison %description This program allows the tracking of genealogical information. The lifelines reports are the power of the system. %prep %setup %build #make RPM_OPT_FLAGS="$RPM_OPT_FLAGS" sh -c ./configure make %install install -d -m 755 $RPM_BUILD_ROOT/usr/local/bin install -s -m 755 src/liflines/llines $RPM_BUILD_ROOT/usr/local/bin install -s -m 755 src/liflines/llexec $RPM_BUILD_ROOT/usr/local/bin install -s -m 755 src/tools/dbverify $RPM_BUILD_ROOT/usr/local/bin install -d -m 755 $RPM_BUILD_ROOT/usr/local/share/locale/da/LC_MESSAGES install -m 644 po/da.gmo $RPM_BUILD_ROOT/usr/local/share/locale/da/LC_MESSAGES/lifelines.mo install -d -m 755 $RPM_BUILD_ROOT/usr/local/share/locale/de/LC_MESSAGES install -m 644 po/de.gmo $RPM_BUILD_ROOT/usr/local/share/locale/de/LC_MESSAGES/lifelines.mo install -d -m 755 $RPM_BUILD_ROOT/usr/local/share/locale/eo/LC_MESSAGES install -m 644 po/eo.gmo $RPM_BUILD_ROOT/usr/local/share/locale/eo/LC_MESSAGES/lifelines.mo install -d -m 755 $RPM_BUILD_ROOT/usr/local/share/locale/es/LC_MESSAGES install -m 644 po/es.gmo $RPM_BUILD_ROOT/usr/local/share/locale/es/LC_MESSAGES/lifelines.mo install -d -m 755 $RPM_BUILD_ROOT/usr/local/share/locale/fr/LC_MESSAGES install -m 644 po/fr.gmo $RPM_BUILD_ROOT/usr/local/share/locale/fr/LC_MESSAGES/lifelines.mo install -d -m 755 $RPM_BUILD_ROOT/usr/local/share/locale/nl/LC_MESSAGES install -m 644 po/nl.gmo $RPM_BUILD_ROOT/usr/local/share/locale/nl/LC_MESSAGES/lifelines.mo install -d -m 755 $RPM_BUILD_ROOT/usr/local/share/locale/pl/LC_MESSAGES install -m 644 po/pl.gmo $RPM_BUILD_ROOT/usr/local/share/locale/pl/LC_MESSAGES/lifelines.mo install -d -m 755 $RPM_BUILD_ROOT/usr/local/share/locale/rw/LC_MESSAGES install -m 644 po/rw.gmo $RPM_BUILD_ROOT/usr/local/share/locale/rw/LC_MESSAGES/lifelines.mo install -d -m 755 $RPM_BUILD_ROOT/usr/local/share/locale/sv/LC_MESSAGES install -m 644 po/sv.gmo $RPM_BUILD_ROOT/usr/local/share/locale/sv/LC_MESSAGES/lifelines.mo install -d -m 755 $RPM_BUILD_ROOT%{reports_dir} install -m 644 reports/*.ll $RPM_BUILD_ROOT%{reports_dir} install -m 644 reports/*.li $RPM_BUILD_ROOT%{reports_dir} install -m 644 reports/CREDIT reports/index.html $RPM_BUILD_ROOT%{reports_dir} install -m 644 reports/boc.gif reports/ll.png $RPM_BUILD_ROOT%{reports_dir} install -m 644 reports/*.c $RPM_BUILD_ROOT%{reports_dir} install -m 644 reports/ps-pedigree.ps reports/tree.tex $RPM_BUILD_ROOT%{reports_dir} install -d -m 755 $RPM_BUILD_ROOT%{reports_dir}/novel install -m 644 reports/novel/novel* $RPM_BUILD_ROOT%{reports_dir}/novel install -d -m 755 $RPM_BUILD_ROOT%{reports_dir}/pedtex install -m 644 reports/pedtex/pedtex* $RPM_BUILD_ROOT%{reports_dir}/pedtex install -m 644 reports/pedtex/*.tex $RPM_BUILD_ROOT%{reports_dir}/pedtex install -d -m 755 $RPM_BUILD_ROOT%{reports_dir}/ps-fan install -m 644 reports/ps-fan/ps-fan* $RPM_BUILD_ROOT%{reports_dir}/ps-fan install -d -m 755 $RPM_BUILD_ROOT%{tt_dir} install -m 644 tt/*.tt $RPM_BUILD_ROOT%{tt_dir} install -d -m 755 $RPM_BUILD_ROOT/usr/local/man/man1 install -m 644 docs/btedit.1 $RPM_BUILD_ROOT/usr/local/man/man1/btedit.1 install -m 644 docs/dbverify.1 $RPM_BUILD_ROOT/usr/local/man/man1/dbverify.1 install -m 644 docs/llines.1 $RPM_BUILD_ROOT/usr/local/man/man1/llines.1 install -m 644 docs/llexec.1 $RPM_BUILD_ROOT/usr/local/man/man1/llexec.1 %files %defattr(-,root,root) %doc README ChangeLog NEWS AUTHORS LICENSE %doc README.AUTOCONF README.DEVELOPERS README.INTERNATIONAL README.LAYOUT %doc README.MAINTAINERS README.MAINTAINERS.rpm README.MAINTAINERS.win32 %doc .linesrc docs/lifelines.vim %doc docs/ll-reportmanual.xml docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt %doc docs/ll-userguide.xml docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.txt /usr/local/bin/llines /usr/local/bin/llexec /usr/local/bin/dbverify /usr/local/share/locale/da/LC_MESSAGES/lifelines.mo /usr/local/share/locale/de/LC_MESSAGES/lifelines.mo /usr/local/share/locale/fr/LC_MESSAGES/lifelines.mo /usr/local/share/locale/sv/LC_MESSAGES/lifelines.mo /usr/local/share/locale/eo/LC_MESSAGES/lifelines.mo /usr/local/share/locale/es/LC_MESSAGES/lifelines.mo /usr/local/share/locale/nl/LC_MESSAGES/lifelines.mo /usr/local/share/locale/pl/LC_MESSAGES/lifelines.mo /usr/local/share/locale/rw/LC_MESSAGES/lifelines.mo %{reports_dir} %{tt_dir} /usr/local/man/man1/btedit.1 /usr/local/man/man1/dbverify.1 /usr/local/man/man1/llines.1 /usr/local/man/man1/llexec.1 %changelog * Sun Apr 29 2007 Perry Rapp - add llexec.1 man page to release * Sun Apr 15 2007 Stephen Dum - add README* files to release * Wed Dec 21 2005 Stephen Dum - add .tt files, .linesrc and new .mo files to release * Tue Nov 15 2005 Perry Rapp - Change "Copyright" to newer "License". - Fix license name to clearer "X11". - Add BuildRequires line. * Thu Sep 29 2005 Perry Rapp - Add eo, es, nl, pl, rw translations. Add *.li files. Add novel, pedtex, ps-fan reports. * Sun Jan 30 2005 Perry Rapp - Add comment about using rpmbuild on newer systems, and instruction about adding comments down here. * Tue May 06 2003 Perry Rapp - Add btedit.1 (& alphabetize man pages) * Mon May 05 2003 Perry Rapp - Add dbverify.1 * Mon Nov 11 2002 Perry Rapp - Add da.po - (post lifelines-3.0.21) * Mon Oct 07 2002 Perry Rapp - Add new binary llexec * Sun Sep 29 2002 Perry Rapp - Implement patch by Karl DeBisschop: adds build root, list reports as group instead of individually - Add dbverify, de.po, fr.po, sv.po - (lifelines-3.0.19-1) lifelines-3.0.61/ChangeLog0000700002540200244210000145015610657071035015533 0ustar prappDomain Users2007-08-10 lifelines stable 3.0.61-2 RELEASE 2007-08-09 Perry Rapp * ChangeLog po/de.po German translation updated from Andreas Kirschbaum. 2007-08-08 lifelines stable 3.0.61 RELEASE 2007-08-08 Perry Rapp * ChangeLog po/da.po po/de.po po/el.po po/eo.po po/es.po po/fr.po po/it.po po/nl.po po/pl.po po/rw.po po/sv.po Create 3.0.61 release. 2007-08-07 Perry Rapp * ChangeLog src/liflines/searchui.c Fix missing i18n in repaint_search_menu (thanks to Patrick Texier). * ChangeLog po/fr.po Updated French translation by Patrick Texier. * ChangeLog docs/ll-userguide.xml Fix spelling (instances of "it's" to "its"). * ChangeLog docs/ll-userguide.xml Fix typo ("opend") in userguide. * ChangeLog docs/ll-userguide.html docs/ll-userguide.pdf Regenerate docs 2007-08-06 Stephen Dum * ChangeLog docs/ll-userguide.xml src/liflines/lines_usage.c Add text about dbverify and btedit to userguide, update information in Introduction about llines. Minor clean up to llexec usage message. 2007-08-06 Perry Rapp * ChangeLog po/POTFILES.in Add listui.c to list of files needing i18n. * ChangeLog po/POTFILES.in Add all other source files needing i18n to list. * ChangeLog INSTALL NEWS README configure.ac build/msvc6/btedit/btedit.rc build/msvc6/dbverify/dbVerify.rc build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc build/rpm/lifelines.spec docs/btedit.1 docs/dbverify.1 docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml docs/llexec.1 docs/llines.1 po/da.po po/de.po po/el.po po/eo.po po/es.po po/fr.po po/it.po po/nl.po po/pl.po po/rw.po po/sv.po src/hdrs/version.h Prepare for 3.0.61 release. * ChangeLog docs/ll-devguide.html docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-userguide.html docs/ll-userguide.pdf Regenerate docs. 2007-08-01 Perry Rapp * ChangeLog src/hdrs/mycurses.h Add case for having libncurses and ncurses/curses.h. * ChangeLog README.DEVELOPERS Minor grammar editing. * ChangeLog NEWS Add change notes for 3.0.60 and 3.0.61. 2007-07-31 Stephen Dum * ChangeLog configure.ac src/hdrs/mycurses.h README.DEVELOPERS Fix typo Update mycurses.h to look for curses.h as ncursesw/curses.h, ncurses/curses.h and then curses.h. Perhaps this will increase compatibility. Also add a some notes on building the code to the README.DEVELOPERS. 2007-07-30 Stephen Dum * ChangeLog configure.ac src/hdrs/mycurses.h Change detection of curses configuration to use curses.h if ncursesw/curses.h doesn't exist - allows build on SuSE 10. 2007-07-30 Perry Rapp * ChangeLog docs/ll-reportmanual.xml Add table of global iterators to iterators chapter. * ChangeLog docs/ll-reportmanual.xml Add para between title, key, and soundex descriptions. Correct key description (applies to all record types) and add examples. Fix grammar (who's => whose) in indi description. * ChangeLog docs/ll-reportmanual.html docs/ll-reportmanual.pdf Regenerate documentation from xml. 2007-07-06 lifelines stable 3.0.60 RELEASE 2007-07-06 Perry Rapp * ChangeLog INSTALL NEWS README configure.ac build/msvc6/btedit/btedit.rc build/msvc6/dbverify/dbVerify.rc build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc build/rpm/lifelines.spec docs/btedit.1 docs/dbverify.1 docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml docs/llexec.1 docs/llines.1 po/da.po po/de.po po/el.po po/eo.po po/es.po po/fr.po po/it.po po/nl.po po/pl.po po/rw.po po/sv.po src/hdrs/version.h Bump version to 3.0.60. * ChangeLog docs/ll-devguide.html docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-userguide.html docs/ll-userguide.pdf Updated doc files regenerated from xml sources. * ChangeLog README.MAINTAINERS Add note about some reports not building correctly in UTF-8 locale. 2007-06-05 Stephen Dum * ChangeLog docs/llexec.1 docs/llines.1 Fix typo in man pages. Add reference to llines in llexec man page. 2007-06-03 Stephen Dum * ChangeLog docs/ll-index.html docs/ll-index.sv.html docs/Makefile.am reports/grand.ll Add index files for the docs to meet debian package requirements (response to debian bug #330483) minor update to reports/grand.ll 2007-05-31 Perry Rapp * ChangeLog docs/ll-devguide.html docs/ll-devguide.pdf docs/ll-reportmanual.html docs/ll-reportmanual.pdf Updated doc files regenerated from xml sources. 2007-05-30 Stephen Dum * ChangeLog reports/st/.cvsignore src/liflines/lines_usage.c Add .cvsignore file resolving Bug id 1717366 Modify llexec usage message to be more attuned to llexec (loosly addressing bug id's 1360907 and 1360909) 2007-05-28 Stephen Dum * ChangeLog docs/ll-reportmanual.xml Minor tweak for Felipe Augusto van de Wiel and debian release 2007-05-27 Stephen Dum * ChangeLog reports/desc-tex2/README Update README to reflect distributed files. 2007-05-20 Perry Rapp * ChangeLog src/liflines/llexec.c Remove entirely faked out calls to browse & show module from llexec.c (b/c llexec.c now includes llines.h, so these conflicted with the real ones). * ChangeLog po/fr.po Add French translation of the free software statement in --version output. 2007-05-19 Perry Rapp * ChangeLog src/liflines/llexec.c src/liflines/main.c Add help2man compatible --help output to lifelines. * ChangeLog build/msvc6/llexec/llexec.dsp build/msvc6/llines/llinesprj.dsp src/hdrs/liflines.h src/hdrs/pvalue.h src/hdrs/screen.h src/hdrs/ui.h src/liflines/llexec.c src/liflines/llinesi.h src/liflines/main.c *NEW src/liflines/lines_usage.c Tweak line returns of --help output to not wrap on 80 character display. Move show_usage to be shared by both llines and llexec. * ChangeLog Makefile.am src/liflines/Makefile.am Add new lines_usage.c file to Makefile.am. 2007-05-14 Perry Rapp * ChangeLog po/POTFILES.in src/gedlib/keytonod.c src/hdrs/llstdlib.h src/liflines/error.c src/tools/dbverify.c Fix function free_all_rprtlocks to return int (per its declaration). Add crashlogn which appends carriage return, and i18n crashlog calls in keytonod.c, and add keytonod.c to po/POTFILES.in. * ChangeLog src/tools/dbverify.c Fix some gcc printf warnings by making error counts int instead of INT. * ChangeLog po/da.po po/de.po po/el.po po/eo.po po/es.po po/fr.po po/it.po po/nl.po po/pl.po po/rw.po po/sv.po Regenerate po files to include more i18n'd strings. * ChangeLog po/POTFILES.in src/tools/btedit.c i18n btedit.c, and capitalize some error messages, and remove carriage returns from i18n strings. * ChangeLog src/tools/btedit.c Detect system/edit errors in btedit and handle. Add success message as well. * ChangeLog src/tools/btedit.c Report btedit failure if database is readonly. Spread out btedit return codes to allow space if more added in-between. * ChangeLog src/tools/btedit.c Add error handling to btedit in case addfile fails. * ChangeLog po/da.po po/de.po po/el.po po/eo.po po/es.po po/fr.po po/it.po po/nl.po po/pl.po po/rw.po po/sv.po Regenerate po files to include more i18n'd strings. * ChangeLog src/tools/dbverify.c Localize "Checking..." message in dbverify main. 2007-05-13 Stephen Dum * ChangeLog reports/Makefile.am Add index.html to the clean targets in reports directory 2007-05-13 Perry Rapp * ChangeLog README.AUTOCONF README.DEVELOPERS README.MAINTAINERS build/setversions.sh docs/ll-devguide.xml *DELETE configure.in *NEW configure.ac Rename configure.in to (modern) name of configure.ac. Fix ll-devguide.xml to use build/setversions.sh instead of manual file list. * ChangeLog src/gedlib/keytonod.c src/hdrs/cache.h src/interp/interp.c Change return type of free_all_rprtlocks from INT to int, so can use %d printf type. * ChangeLog src/hdrs/win32/Makefile.am win32/Makefile.am Add some src files needed for MSVC compilation which weren't making it into dist tarball. * ChangeLog po/POTFILES.in Add file src/gedlib/dbcontext.c to list of src files for l10n. 2007-05-12 Perry Rapp * ChangeLog build/setversions.sh Add btedit.rc to setversions.sh restore handling. 2007-05-11 lifelines stable 3.0.59 RELEASE 2007-05-11 Perry Rapp * ChangeLog docs/ll-devguide.html docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-userguide.html docs/ll-userguide.pdf Updated doc files regenerated from xml sources (3.0.58). * ChangeLog NEWS Add entry for upcoming release (3.0.59 stable). * ChangeLog INSTALL NEWS README configure.in build/msvc6/btedit/btedit.rc build/msvc6/dbverify/dbVerify.rc build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc build/rpm/lifelines.spec docs/btedit.1 docs/dbverify.1 docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml docs/llexec.1 docs/llines.1 src/hdrs/version.h Bump version to 3.0.59. * ChangeLog docs/ll-devguide.html docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-userguide.html docs/ll-userguide.pdf Updated doc files regenerated from xml sources (3.0.59). * ChangeLog po/da.po po/de.po po/el.po po/eo.po po/es.po po/fr.po po/it.po po/nl.po po/pl.po po/rw.po po/sv.po Update po files from latest code. 2007-05-10 Perry Rapp * ChangeLog src/gedlib/init.c src/hdrs/gedcom.h src/liflines/llexec.c src/liflines/main.c src/tools/btedit.c src/tools/dbverify.c New function print_version, shared by llines, llexec, and dbverify: implement --version and --help handling for all three. Add --version and --help support to btedit, via new local functions print_version and print_usage. * ChangeLog src/liflines/llexec.c src/liflines/main.c Fix typo (llines & llexec were calling themselves dbverify in their --version output). * ChangeLog src/liflines/screen.c Make update_screen_size static and give it prototype. 2007-05-08 Perry Rapp * ChangeLog lines.cfg.input Fix sample INDIREC line to have slash after surname. * ChangeLog po/fr.po Updated French translation by Patrick Texier. 2007-05-07 Perry Rapp * ChangeLog NEWS build/setversions.sh docs/llexec.1 docs/llines.1 Fix setversions.sh to handle btedit win32 resource. Fix llines man page to be same as others. 2007-05-06 lifelines beta 3.0.58 RELEASE 2007-05-06 Perry Rapp * ChangeLog src/gedlib/dbcontext.c src/gedlib/messages.c src/interp/eval.c src/interp/interp.c src/interp/interpi.h src/interp/progerr.c src/interp/symtab.c src/liflines/import.c src/liflines/valgdcom.c i18n fix in describe_dberror. Removed qSdbodel & fixed with pluralizable i18n. Add title to symbol table, and display in debugger. * ChangeLog NEWS src/interp/eval.c src/interp/interp.c src/interp/interpi.h src/interp/progerr.c src/interp/symtab.c Display call stack count in report debugger. Add parent field to symbol tables (SYMTAB). New functions count_symtab_ancestors & get_symtab_ancestor. *ChangeLog reports/st/st_list.li Add two more in_list tests to self-test for lists. * ChangeLog src/liflines/llexec.c src/liflines/main.c Fix first arg to main to be int (rather than INT). * ChangeLog INSTALL NEWS README configure.in build/msvc6/dbverify/dbVerify.rc build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc build/rpm/lifelines.spec docs/btedit.1 docs/dbverify.1 docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml docs/llines.1 po/da.po po/de.po po/el.po po/eo.po po/es.po po/fr.po po/it.po po/nl.po po/pl.po po/rw.po po/sv.po src/hdrs/version.h Make new release 3.0.58. 2007-05-05 Perry Rapp * ChangeLog NEWS src/stdlib/list.c Fix in_list (needs to return -1 for empty list, not FALSE). * ChangeLog reports/st/st_list.li Add self-test to st/st_list.li for inlist of empty list. * ChangeLog docs/ll-reportmanual.xml src/gedlib/keytonod.c src/gedlib/messages.c src/hdrs/cache.h src/hdrs/gedcom.h src/hdrs/pvalue.h src/interp/interp.c src/interp/more.c src/interp/progerr.c src/interp/pvalue.c Track report locks & free after report: Remove declaration of function semilock_cache (which was removed in the past). Allow llrpt_lock & llrpt_unlock to work on any records (not just people & familes), and on nodes. New function is_node_pvalue. New macro ncel in gedcom.h (for node). Change llrpt_lock to call lockrpt_cache instead of lock_cache, and similarly for llrpt_unlock. New member c_rptlock in tag_cacheel. New functions free_all_rprtlocks_in_cache and free_all_rprtlocks in keytonod.c. Remove hardcoded "Program" prefix in progmessage (was bad i18n). Removed constant qSidrpt. Fix i18n in prog_var_error_zstr for pluralization (ie, use _pl( macro). 2007-04-29 Perry Rapp * ChangeLog build/setversions.sh build/rpm/lifelines.spec docs/Makefile.am Add llexec.1 man page to distribution and rpm distribution. 2007-04-22 lifelines beta 3.0.57 RELEASE 2007-04-11 Perry Rapp Increased version to 3.0.57 * ChangeLog src/tools/dbverify.c Reverted PRId32 use to %ld to fix win32 compilation to get 3.0.57 out. 2007-04-20 Perry Rapp * ChangeLog src/gedlib/llgettext.c src/hdrs/pvalue.h src/interp/builtin.c src/interp/pvalue.c New function create_pvalue_from_zstr. Fix missing end comment in update_textdomain_localedir which broke localedir handling. * ChangeLog NEWS Add latest fix into NEWS * ChangeLog src/tools/dbverify.c Revising printf calls to use PRId32 for INT, and rearranging strings to remove that macro from i18n strings. 2007-04-19 lifelines beta 3.0.56 RELEASE 2007-04-19 Perry Rapp * ChangeLog src/hdrs/list.h src/hdrs/screen.h src/liflines/brwsmenu.c src/liflines/screen.c src/stdlib/list.c Add static list_uiwin to screen.c to track uiwindows. New function add_uiwin in screen.c. Add outdated field to struct tag_uiwindow, and set upon language change, and recreate uiwindows when outdated. Comment out unused function delete_list_element. New list function find_delete_list_elements. Rename brwsmenu's on_lang_change to brwsmenu_on_lang_change. New screen local function screen_on_lang_change. New brwsmenu function register_brwsmenu_lang_callbacks. New screen function register_screen_lang_callbacks. Add uierase call to repaint_utils_menu so it can be called on existing window. Similar fixes to invoke_del_menu, repaint_delete_menu. Similar fixes to invoke_add_menu, repaint_add_menu. Similar fixes to invoke_extra_menu, repaint_extra_menu. * ChangeLog src/liflines/screen.c Call register_screen_lang_callbacks from init_screen and term_screen, and fix repainting routines to clear outdated flags. * ChangeLog src/gedlib/llgettext.c src/gedlib/locales.c src/hdrs/gedcom.h src/interp/builtin.c src/liflines/llexec.c src/liflines/main.c src/tools/dbverify.c New function ll_bindtextdomain (to catch LocaleDir changes). Fix customlocale to UiLocaleMessages works. * ChangeLog src/gedlib/gedcomi.h src/gedlib/llgettext.c src/gedlib/locales.c src/hdrs/gedcom.h src/liflines/llexec.c src/liflines/main.c src/tools/dbverify.c Fix LocaleDir handling; LOCALEDIR is only available in src/liflines directory, so pass it to llgettext at startup. New llgettext function llgettext_set_default_localedir. New llgettext function update_textdomain_localedir. * ChangeLog NEWS Record latest bugfixes into NEWS. 2007-04-18 Perry Rapp * ChangeLog po/es.po Minor updates to Spanish translation from Larry Hamilton. 2007-04-17 Perry Rapp * ChangeLog ll-reportmanual.xml Add some comments to sample report, and add section on invoking reports, to explain purpose of llexec program. 2007-04-16 Perry Rapp * ChangeLog build/rpm/lifelines.spec Add changelog entry to lifelines.spec for Steve's yesterday change. 2007-04-15 Stephen Dum * ChangeLog build/rpm/lifelines.spec Add README files to spec file so they get put in the rpm. 2007-04-16 Perry Rapp * ChangeLog docs/llines.1 Add See Also to llines man page, and remove synopsis of other commands (which now have their own man pages). * ChangeLog po/es.po Spanish translation tweaks by Larry Hamilton. 2007-04-15 Perry Rapp * ChangeLog docs/llines.1 *NEW docs/llexec.1 Add man page for llines. * ChangeLog src/gedlib/nodeio.c src/hdrs/gedcom.h src/interp/rassa.c Add call from request_file to new function prefix_file_for_report to write BOM to report files when appropriate. Similarly fix set_output_file to prefix when opening new or empty file. * ChangeLog src/interp/builtin.c Cosmetic: improving comments. 2007-04-14 Perry Rapp * ChangeLog NEWS lines.cfg.input src/liflines/export.c Fix export to write the output character set into the header CHAR line correctly by default, instead of using hardcoded "ASCII" by default. sfbug#1700485: Export not writing CHAR value in header correctly * ChangeLog web/index.html Fix link to freshmeat appindex page for lifelines. * ChangeLog docs/ll-userguide.xml Rewrite description of HDR_CHAR, to say it shouldn't be used. * ChangeLog src/gedlib/nodeio.c Factor UTF-8 BOM code out of write_indi_to_file into new prefix_file, and also use from write_fam_to_file. sfbug#1700702: fam edit doesn't get BOM * ChangeLog NEWS List bugfix of writing BOM to fam edit files in NEWS. * ChangeLog src/gedlib/nodeio.c src/hdrs/gedcom.h src/liflines/add.c Call new function prefix_file_for_edit from add_indi_by_edit to provide BOM prefix for new INDI edit file. Same fix for add_family_by_edit. sfbug#1700701: new indi edit doesn't get BOM * ChangeLog src/liflines/newrecs.c Call prefix_file_for_edit from edit_add_record, so new S,E,X records get BOM if appropriate. sfbug#1700719: New source doesn't get BOM * ChangeLog src/liflines/newrecs.c Call prefix_file_for_edit from write_node_to_editfile, so editing S,E,X records get BOM if appropriate. sfbug#1700723: edit source (etc) not getting BOM * ChangeLog src/liflines/export.c Fix archive_in_file to write output CHAR using output encoding of transl_get_predefined_xlat(MINGD). * ChangeLog src/gedlib/editvtab.c src/liflines/export.c Cosmetic; comment a few translations. * ChangeLog src/gedlib/nodeio.c src/hdrs/gedcom.h src/liflines/loadsave.c Fix save to GEDCOM to write BOM if appropriate; new function prefix_file_for_gedcom. sfbug#1700489: export not writing UTF-8 BOM sfrfe#942414: utf-8 byte-order mark in gedcom * ChangeLog src/liflines/import.c Fix do_import to ignore incoming CHAR if GEDCOM has a BOM. * ChangeLog src/liflines/import.c Fixed do_import to use local variable for source encoding. Fixed it to respect CHAR line of GEDCOM input, if specified (and if no BOM). * ChangeLog NEWS Summarize recent BOM changes to NEWS. 2007-04-13 Perry Rapp * ChangeLog *NEW build/md5/write_md5sums.sh Add script to generate md5sums on release page. 2007-04-13 lifelines beta 3.0.55 RELEASE 2007-04-12 Perry Rapp * ChangeLog README.MAINTAINERS *NEW build/rpm/README_Make_rpms *NEW build/rpm/rpmmacros_sample Add explanation of how to make rpm releases. * ChangeLog README.LAYOUT Add tt directory to layout list. * ChangeLog README.MAINTAINERS *DELETE build/rpm/README_Make_rpms *NEW README.MAINTAINERS.rpm Move readme for rpm creation to root, and rename to README.MAINTAINERS.rpm. * ChangeLog README.MAINTAINERS *NEW README.MAINTAINERS.win32 Add skeleton instructions for win32 build. * ChangeLog Makefile.am Add new README.MAINTAINERS.* files to dist. 2007-04-11 Perry Rapp * ChangeLog NEWS src/stdlib/stdstrng.c Fix isnumch & iswhite to fail all non-ASCII input; MS-Windows versions are buggy on non-ASCII input (isspace(160)=>8). 2007-04-10 Perry Rapp * ChangeLog build/msvc6/releaseScript/create_lifelines_release.vbs Fix release script to copy config files (which were removed from cvs at some point in the past years). 2007-04-10 lifelines beta 3.0.54 RELEASE (2007-04-09 sourceforge timezone) * ChangeLog INSTALL NEWS README configure.in build/msvc6/dbverify/dbVerify.rc build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc build/rpm/lifelines.spec docs/btedit.1 docs/dbverify.1 docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml docs/llines.1 po/da.po po/de.po po/el.po po/eo.po po/es.po po/fr.po po/it.po po/nl.po po/pl.po po/rw.po po/sv.po src/hdrs/version.h 2007-04-09 Perry Rapp * ChangeLog src/liflines/screen.c Fix term_screen to clear ll_lines & ll_cols (to fix Q main menu choice). * ChangeLog NEWS Document above bugfix. 2007-04-05 Perry Rapp * ChangeLog build/msvc6/releaseScript/create_lifelines_release.vbs Add es (Spanish) to the release script. 2007-04-04 lifelines beta 3.0.53 RELEASE 2007-04-04 Perry Rapp * ChangeLog build/setversions.sh Fix setversions.sh julian day handling (was misinterpreting leading 0 as octal. Also include version in error msg.) * ChangeLog build/setversions.sh Fix setversions.sh regexp handling for bash 3.2+ (no quotes around regexp). * ChangeLog INSTALL NEWS README configure.in build/msvc6/dbverify/dbVerify.rc build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc build/rpm/lifelines.spec docs/btedit.1 docs/dbverify.1 docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml docs/llines.1 po/da.po po/de.po po/el.po po/eo.po po/es.po po/fr.po po/it.po po/nl.po po/pl.po po/rw.po po/sv.po src/hdrs/version.h Set versions to 3.0.53. Fix format bug in French msg file (po). 2007-04-03 Perry Rapp * ChangeLog NEWS Add more recent changes to NEWS file for 3.0.53. 2007-04-02 Stephen Dum * ChangeLog reports/verify.ll Update verify.ll to the latest version 13 from Jim Eggert 2007-02-25 Stephen Dum * README.DEVELOPERS src/stdlib/fpattern.c Mention in README that gmake is required. Add __NetBSD__ to list of 'unix like' defines to fix compilation failure reported by James P. Jones. 2007-02-18 Perry Rapp * ChangeLog po/es.po New Spanish translation from Larry Hamilton. * ChangeLog NEWS List new Spanish translation in news for next release. 2006-12-22 Matt Emmerton * ChangeLog src/liflines/screen.c src/hdrs/ui.h Split some more composite ASSERTs. Add proto for invoke_search_menu to ui.h to avoid compile warning in src/ui. 2006-12-22 Matt Emmerton * ChangeLog docs/listops.jpg docs/listops.odg Add OpenOffice Draw (ODG) version of listops diagram. Regenerate JPG graphic based on this source. 2006-11-01 Stephen Dum * ChangeLog reports/Makefile.am reports/ssdi_aid.ll reports/ahnenliste.ll, add reports/ll2html.ll remove reports/ll2html4.ll Update 4 reports from Jim Eggert (via Larry Hamilton rename ll2html4.ll to ll2html.ll - removing version number from report name. 2006-10-25 Stephen Dum * ChangeLog src/interp/builtin.c Fix id 1583327 - strsave assert when called by llrpt_extractdate while dereferencing null string. 2006-10-01 Perry Rapp * ChangeLog src/tools/btedit.c Fix call from btedit to bt_openbtree. 2006-09-24 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp src/gedlib/gengedc.c src/liflines/listui.c src/liflines/listui.h src/liflines/main.c src/liflines/screen.c src/tools/dbverify.c Cosmetic; add ifdef guard around listui.h. Fix alphabetization of local functions in listui.c. Remove unneeded include of generic.h in gengedc.c. Remove unused generic files from project. Fix MSVC6 compilation of dbverify. * ChangeLog src/btree/utils.c src/gedlib/dbcontext.c Cleanup. 2006-09-23 Perry Rapp * ChangeLog src/btree/opnbtree.c src/gedlib/dbcontext.c src/hdrs/btree.h src/hdrs/gedcom.h src/liflines/selectdb.c Changes from dbf branch: localize errors (remove global bterrno) and new error type BTERR_MASTER_INDEX. * ChangeLog src/interp/more.c Fix some strange non-matching indents to surrounding pattern. * ChangeLog src/liflines/browse.c Fix more indents. * ChangeLog src/gedlib/xlat.c Fix more indents. * ChangeLog src/hdrs/sys_inc.h More complete type definitions, and include protection (to work with berkeleydb headers). * ChangeLog src/stdlib/norm_charmap.c Remove extra declaration of norm_charmap. * ChangeLog src/liflines/interact.c Cosmetic; fixing some copy & paste header comments. 2006-09-17 Perry Rapp * ChangeLog src/gedlib/xreffile.c Changing %d to %ld where INT used, to clean up gcc warnings. * ChangeLog src/interp/pvalue.c Comment out unused function table_pvcleaner. * ChangeLog src/stdlib/sequence.c Fix cosmetic type errors in Data element of sequence. * ChangeLog src/liflines/scan.c src/liflines/screen.c Removing some unused variables. * ChangeLog src/liflines/interact.c src/liflines/listui.c Include "screeni.h" in interact.c; include "listui.h" in listui.c. 2006-09-17 lifelines beta 3.0.52 RELEASE (2006-09-16 sourceforge timezone) 2006-09-17 Perry Rapp * ChangeLog INSTALL NEWS README configure.in build/msvc6/btedit/btedit.rc build/msvc6/dbverify/dbVerify.rc build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc build/rpm/lifelines.spec docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml docs/llines.1 src/hdrs/version.h Set version numbers to 3.0.52. * ChangeLog README.MAINTAINERS Add btedit.rc to list of files with version number. 2006-09-16 Perry Rapp * ChangeLog src/gedlib/gstrings.c src/gedlib/nodechk.c src/gedlib/nodeio.c src/gedlib/valtable.c src/gedlib/xreffile.c src/interp/alloc.c src/interp/builtin.c src/interp/interp.c src/interp/lex.c src/interp/pvalalloc.c src/liflines/add.c src/liflines/browse.c src/liflines/import.c src/liflines/listui.c src/liflines/llexec.c src/liflines/loadsave.c src/liflines/main.c src/liflines/menuset.c src/liflines/merge.c src/liflines/screen.c src/stdlib/fileops.c src/stdlib/memalloc.c src/stdlib/proptbls.c src/tools/dbverify.c src/ui/ui_cli.c Changing %d to %ld where INT used, to clean up gcc warnings. * ChangeLog NEWS src/liflines/show.c Fix buffer overflow in browse list (sf patch 1491225 by Andreas Kirschbaum). Update NEWS with recent improvements and this bug fix. * ChangeLog src/gedlib/llgettext.c Fix llgettext_init to use arguments, and add documentation for them in header comment. * ChangeLog src/gedlib/llgettext.c Include "gedcomi.h" in llgettext.c, for declaration of llgettext_init. * ChangeLog src/gedlib/xreffile.c Remove unused locals in is_key_in_use. * ChangeLog src/interp/interp.c src/interp/progerr.c Move declaration of prog_var_error_zstr to correct module (progerr.c). * ChangeLog src/stdlib/norm_charmap.c Add declaration of norm_charmap just before definition. 2006-09-15 Perry Rapp * ChangeLog src/liflines/browse.c src/liflines/searchui.c Fix crash in browse/search submenu. Plug indiseq leak in invoke_fullscan_menu. 2006-09-11 Perry Rapp * ChangeLog src/gedlib/src/gedlib src/gedlib/indiseq.c src/gedlib/messages.c src/hdrs/indiseq.h src/hdrs/liflines.h src/interp/builtin.c src/interp/rptui.c src/interp/rptui.h src/liflines/add.c src/liflines/ask.c src/liflines/browse.c src/liflines/delete.c src/liflines/edit.c src/liflines/llinesi.h src/liflines/miscutls.c src/liflines/scan.c src/liflines/screen.c src/liflines/searchui.c src/liflines/swap.c Modify ask_for_indiseq to invoke full search subroutine if "@" entered. Remove CONFIRMQ arg of ask_for_indi and ask_for_any, as it is always NOCONFIRM. Expand ask_for_indi_list_once into its only caller ask_for_indi_list. Modify llrpt_length to handle null sequence. Rewrite scan.c to return sequences instead of records, and rename type SCAN_PATTERN to SCANNER and expand it. New functions get_chistory_list & get_vhistory_list so history stuff can return indiseqs like all other ask & scan code paths. New functions invoke_search_source_menu, do_sources_scan, do_fields_scan. * ChangeLog src/liflines/screen.c Remove obsolete declarations of translate_control_key and translate_hdware_key. * ChangeLog src/ui/ui_cli.c Fix llexec by adding stub invoke_search_menu in ui/ui_cli.c. 2006-09-10 Perry Rapp * ChangeLog po/fr.po src/arch/platform.c src/btree/btrec.c src/gedlib/charmaps.c src/gedlib/dateprint.c src/gedlib/dbcontext.c src/gedlib/dispfmt.c src/gedlib/gedcom.c src/gedlib/gengedc.c src/gedlib/indiseq.c src/gedlib/init.c src/gedlib/node.c src/hdrs/llstdlib.h src/stdlib/appendstr.c Cleaning up gcc warnings (mostly changing %d format specifiers to %ld where INT used). 2006-09-04 Perry Rapp * ChangeLog src/gedlib/messages.c src/liflines/interact.c src/liflines/llinesi.h src/liflines/screen.c src/liflines/screeni.h src/liflines/searchui.c Move search menu & window painting into searchui.c Affected: invoke_search_menu, invoke_fullscan_menu, repaint_fullscan_menu, repaint_search_menu * ChangeLog src/liflines/valgdcom.c Fix type warning (due to ternary conditional promoting to int). 2006-09-04 Stephen Dum * ChangeLog src/liflines/valgdcom.c Fixed misclassifying of 'Other' records on import by validate_gedcom (it was using first letter of record type, which fails for Other). 2006-09-02 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp src/hdrs/screen.h src/liflines/Makefile.am src/liflines/listui.c src/liflines/llinesi.h src/liflines/screen.c *NEW src/liflines/interact.c *NEW src/liflines/screeni.h *NEW src/liflines/searchui.c Remove unused screen argument from interact_popup. Split interact calls into interact_screen_menu and interact_choice_string, and renamed interact to interact_worker. Moved interact_screen_menu, interact_choice_string, interact_worker, translate_hdware_key, translate_control_key to new file interact.c. Created new header screeni.h. 2006-08-11 lifelines beta 3.0.51b RELEASE (Fix windows binaries and French version) 2006-08-11 Perry Rapp * ChangeLog build/msvc6/btedit/btedit.rc build/msvc6/dbverify/dbVerify.rc build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc Update windows projects with version stamp for today (still 3.0.51, as same source code). 2006-07-30 Perry Rapp * ChangeLog po/fr.po Updated French translation from Patrick Texier. * ChangeLog po/fr.po (Cosmetic) updated French translation from Patrick Texier. * ChangeLog README.MAINTAINERS Add instructions to send pot updates to Free Translation Project. 2006-07-30 lifelines beta 3.0.51 RELEASE (2006-07-29 sourceforge timezone) 2006-07-30 Perry Rapp * ChangeLog po/da.po po/de.po po/el.po po/eo.po po/es.po po/fr.po po/it.po po/nl.po po/pl.po po/rw.po po/sv.po 3.0.51 release. 2006-07-28 Stephen Dum * ChangeLog docs/ll-devguide.html docs/ll-reportmanual.{html,pdf,txt} docs/ll-userguide.{html,pdf,txt} Update docs 2006-07-28 Perry Rapp * ChangeLog reports/st/st_date.li Fix minor bug in testjd (all dates must be passed through stddate before comparison). * ChangeLog INSTALL NEWS README README.MAINTAINERS build/msvc6/dbverify/dbVerify.rc build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc build/rpm/lifelines.spec configure.in docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml docs/llines.1 src/hdrs/version.h Bump to version 3.0.51. * ChangeLog build/msvc6/llexec/llexec.dsp Add src/interp/progerr.c to llexec MSVC6 project file. 2006-07-25 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp src/gedlib/messages.c src/hdrs/screen.h src/liflines/Makefile.am src/liflines/screen.c src/liflines/show.c src/liflines/listui.c src/liflines/listui.h Move popup and browse list code out of screen.c into listui.c. 2006-07-24 Perry Rapp * ChangeLog src/gedlib/messages.c src/hdrs/screen.h src/liflines/browse.c src/liflines/brwsmenu.c src/liflines/dynmenu.c src/liflines/main.c src/liflines/menuset.c src/liflines/screen.c win32/mycurses.c Pass error out of init_screen instead of using fprintf(stderr. Split part of init_screen into new function set_screen_graphical. Modified create_windows so it can be called over and over. Moved guts of init_screen into new function resize_screen_impl. win32/mycurs: moved static ConScreenBuffer to be local of mycur_init. win32/mycurs: added new function check_for_resize. Alter create_uiwin family of functions to take pointer so they can alter existing uiwindow, instead of always creating new one. (This is so we can recreate windows for sizing, without altering uiwindow pointers.) Moved platform_postcurses_init from main.c into screen.c. Rolled init_curses_ui from main.c into resize_screen_impl. Modify so it picks up LINES/COLS changes at redrawing person or family -- but with disadvantage that it is executing endwin/initscr every time to detect that. (A SIGWINCH handler would probably be better.) 2006-07-10 Stephen Dum * ChangeLog web web/... Created a new toplevel directory in the CVS archives named web so that we can use sf to keep track of the sf lifelines home page and related files. Checked into this directory the current web pages (and what little history we had for index.html). This is for archival purposes and no changes were made to include this data in a build or release process. 2006-07-09 Stephen Dum * ChangeLog reports/search_source.ll reports/Makefile.am Add report that searches source records for a string 2006-07-04 Perry Rapp * ChangeLog NEWS src/interp/builtin.c Fix llrpt_extractdate to save string before losing contents of val. * ChangeLog src/interp/write.c Cosmetic: adding comments to llrpt_createnode. * ChangeLog src/interp/builtin.c Fix llrpt_tag to save string before clearing val. * ChangeLog src/interp/builtin.c Fix llrpt_place to save string before clearing val. * ChangeLog src/interp/builtin.c Fix llrpt_date to save string before clearing val. Fix llrpt_trimname to save string before clearing val. 2006-07-01 Perry Rapp * ChangeLog NEWS src/interp/builtin.c src/interp/lex.c Trap token overflows and ASSERT in lextok, instead of corrupting memory. Add sanity ASSERT in inchar. Fix llrpt_value to save string before losing contents of val. 2006-06-29 Perry Rapp * ChangeLog src/gedlib/xreffile.c Add more error checking to add_xref_to_set_impl. Optimize deleting last record in add_xref_to_set_impl. Fix fencepost error in add_xref_to_set_impl which led to incorrect ASSERT. * ChangeLog NEWS Add bugfix to NEWS for next release. 2006-06-26 Perry Rapp * ChangeLog src/liflines/valgdcom.c Wrap more import stdallocs with calls to create_elmnt. * ChangeLog src/liflines/valgdcom.c Include line number in undefined error in check_references. * ChangeLog src/liflines/valgdcom.c Implement check_fam_lineage_links. 2006-06-25 Stephen Dum * ChangeLog reports/cron.ll reports/anniver.ll docs/ll-reportmanual.{html,pdf,txt} Incorporate changes by Dave Eaton to anniver and cron reports. Update formatted documentation 2006-06-25 Perry Rapp * ChangeLog src/liflines/merge.c New function is_key_in_use. Make string arg const in rmvat, rmvbrackets, rmvat_char. New function parse_key; 2006-06-23 Perry Rapp * ChangeLog src/liflines/merge.c New skeleton unimplemented functions check_indi_lineage_links and check_fam_lineage_links, and call before and after person and family merges. * ChangeLog src/liflines/merge.c Implement check_indi_lineage_links. * ChangeLog src/liflines/merge.c Cosmetic: adding comments. 2006-06-20 Perry Rapp * ChangeLog src/liflines/merge.c Minor cleanup & adding comments in merge_two_fams. * ChangeLog src/liflines/lbrowse.c NEWS Fix bug in add to list (browse_list); fix "strsave(key)" to "strsave(skey)". 2006-06-19 Perry Rapp * ChangeLog src/liflines/merge.c Cosmetic: annotating existing comment. 2006-06-13 Perry Rapp * ChangeLog docs/ll-reportmanual.xml Fix setdate declaration in report manual. * ChangeLog docs/ll-reportmanual.xml Add dayofweek to report manual. * ChangeLog NEWS Add new report functions to NEWS. 2006-06-10 Stephen Dum * ChangeLog docs/ll-devguide.{xml,html} ll-reportmanual.{html,pdf,txt} ll-userguide.{html,pdf,txt} ll-userguild.sv.html Update formatted docs. 2006-06-10 Perry Rapp * ChangeLog reports/st/st_date.li src/interp/builtin.c src/interp/functab.c src/interp/interpi.h (From Patrick Texier) New report functions: date2jd, dayofweek, jd2date, setdate. Also add tests for dayofweek to st_date.li. * ChangeLog reports/st/st_date.li Add julian date tests. Move day of week tests to subroutine. * ChangeLog docs/ll-reportmanual.xml Document new function setdate and new julian date functions in report manual (creating new section Date Arithmetic for the latter). 2006-06-08 Perry Rapp * ChangeLog src/interp/builtin.c Fix report or operator by fixing llrpt_or to initialize variable rc to FALSE. sf#1503144. 2006-06-07 Perry Rapp * ChangeLog src/interp/builtin.c Convert prog_error calls to prog_var_error in llrpt_moth, llrpt_parents, llrpt_nextsib, llrpt_prevsib, llrpt_d. 2006-06-04 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp po/POTFILES.in src/interp/Makefile.am src/interp/interp.c src/interp/interpi.h src/interp/rassa.c *NEW src/interp/progerr.c Move lifelines report error routines to new src/interp/progerr.c. 2006-06-02 Perry Rapp * ChangeLog src/interp/builtin.c src/interp/interp.c src/interp/interpi.h Fix llrpt_or & llrpt_and to have i18n & debugger for bad args like llrpt_and. * ChangeLog src/interp/builtin.c Upgrade llrpt_gettext from prog_error to prog_var_error (ie, debugger). * ChangeLog src/interp/alloc.c src/interp/builtin.c src/interp/interp.c src/interp/interpi.h Revamp pnode debug code to append into zstring, and modify prog_var_error_zstr to describe arg when val empty. 2006-05-18 Perry Rapp * ChangeLog po/fr.po Update French translation from Patrick Texier. 2006-05-16 Perry Rapp * ChangeLog src/gedlib/dblist.c src/gedlib/gedcomi.h src/gedlib/xreffile.c Modify xrefs_get_counts_from_unopened_db to report bad dbs in description rather than with ASSERT. * ChangeLog src/gedlib/keytonod.c Fix bad ASSERT which stopped lifelines from working at all. sfbug#1489310 2006-05-05 Perry Rapp * ChangeLog src/stdlib/hashtab.c Fix typo so lifelines compiles again. 2006-04-xx Matt Emmerton * ChangeLog src/hdrs/standard.h src/tools/dbverify.c src/interp/pvalmath.c src/interp/pvalue.c src/interp/symtab.c src/liflines/browse.c src/liflines/lbrowse.c src/liflines/merge.c src/liflines/swap.c src/liflines/tandem.c src/liflines/valgdcom.c src/stdlib/array.c src/stdlib/hashtab.c src/stdlib/icvt.c src/stdlib/object.c src/stdlib/zstr.c src/gedlib/charmaps.c src/gedlib/charprops.c src/gedlib/datei.c src/gedlib/dateprint.c src/gedlib/dblist.c src/gedlib/editmap.c src/gedlib/indiseq.c src/gedlib/keytonod.c src/gedlib/lldatabase.c src/gedlib/record.c src/gedlib/remove.c src/gedlib/spltjoin.c src/gedlib/translat.c src/gedlib/xreffile.c Split composite multiple ASSERTs (eg, ASSERT(a&&b); ) into separate ASSERTs. (eg, ASSERT(a); ASSERT(b); ) This makes it easier to determine which assertion failed when LifeLines crashes -- especially without a core dump. 2006-02-11 Stephen Dum * ChangeLog reports/Makefile.am reports/ttable.ll reports/st/test_fam_it.ll reports/st/test_forfam.ll reports/st/test_forindi.ll reports/st/test_indi_it.ll reports/st/test_othr_it.ll reports/st/trigtest.ll reports/least_related.ll remove least_related.ll which was just a stub saying it didn't work. minor header cleanup in a number of reports. remove reference to regvital1.ll from makefile. 2006-01-19 Matt Emmerton * ChangeLog src/hdrs/llstdlib.h Add prototype for norm_charmap() to avoid compiler warnings on Debian/IA64 (Debian Bug #348618) 2006-01-14 Stephen Dum * ChangeLog docs/ll-userguide.xml reports/regvital1.ll reports/timeline1.ll reports/timeline2.ll reports/pointers.ll reports/reg_html.ll reports/register1-dot.ll add to so it would compile. remove duplicated copies of reports regvital1, timeline1,timeline2 fix minor bug in reg_html, clean up indexing for pointers.ll and add note in register1-dot.ll 2006-01-10 Perry Rapp * ChangeLog docs/ll-userguide.xml Add links to homepage, FAQ, and list archives, to user guide. * ChangeLog src/tools/dbverify.c Improve error wording. * ChangeLog po/fr.po Update French translation from Patrick Texier. 2005-01-08 Stephen Dum * ChangeLog reports/verify.ll Check in version 12 of verify.ll from Jim Eggert. 2005-12-31 Stephen Dum * ChangeLog build/rpm/lifelines.spec move tt and reports directory into versioned lifelines directory 2005-12-30 Stephen Dum * ChangeLog reports/Makefile.am in reports: anniver.ll cron.ll famgroup.ll in reports/st:Makefile.am trigtest.ll trigtest.ref remove reports/trigtest.ll Update anniver and cron to translate gedcom text to html using convert code and strengthen privatization code. Check in fixes to famgroup.ll by Patrick Texier move trigtest.ll to st directory and make it part of 'make check' to verify proper operation of trig functions. 2005-12-28 Stephen Dum * ChangeLog docs/lifelines.vim docs/Makefile.am docs/ll-reportmanual.xml docs/ll-userguide.xml NEWS build/rpm/lifelines.spec Include a copy of lifelines.vim in distribution. Fix typo in example code in reportmanual Add documentation for codeset property to userguide Put listopts.jpg back into distribution. Put Trig functions in NEWS 2005-12-27 Matt Emmerton * ChangeLog docs/Makefile.am Fix so that listops.jpg is not removed during 'make distclean'. 2005-12-24 Stephen Dum * ChangeLog src/gedlib/xlat.c src/interp/interp.c docs/ll-userguide.{xml,html,pdf,txt} change translation table code to only compare uppercase codeset names document codeset parameter in userguide. removed some leaks in xlat cache, and fixed bug where cache was created with both LISTNOFREE and LISTDOFREE * ChangeLog src/stdlib/path.c undo a !strcmp that got transformed into a !eqstr simplify filepath a bit. 2005-12-24 Perry Rapp * ChangeLog src/hdrs/llstdlib.h src/hdrs/standard.h src/stdlib/path.c src/stdlib/stdstrng.c Remove eqstri_ex (b/c stricmp not available on unix). Add some comments to string macro definitions. 2005-12-24 Perry Rapp * build/msvc6/llexec/llexec.dsp Fix compilation of llexec (for 3.0.50 windows binary). * ChangeLog src/hdrs/llstdlib.h src/hdrs/standard.h src/stdlib/path.c src/stdlib/stdstrng.c New macro functions eqstri, eqstri_ex. 2005-12-24 lifelines beta 3.0.50 RELEASE 2005-12-24 Perry Rapp * ChangeLog README.MAINTAINERS Fix path of invocation example for setversions.sh. * ChangeLog INSTALL NEWS README configure.in build/msvc6/dbverify/dbVerify.rc build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc build/rpm/lifelines.spec docs/btedit.1 docs/dbverify.1 docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml docs/llines.1 src/hdrs/version.h Bumping versions to 3.0.50 for new release. * docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.txt Generating new manuals for version 3.0.50. 2005-12-22 Stephen Dum * ChangeLog configure.in has_key function was not being properly detected in config file. moved check for it below check for curses libraries. * ChangeLog docs/ll-reportmanual.xml reports/htmlahnen.ll Add some text to the report template about how the description is extracted for index.html. Fix a syntax error in htmlahnen.ll 2005-12-22 Perry Rapp * ChangeLog docs/ll-reportmanual.xml Fix invalid xml ("&" => "and"). 2005-12-21 Stephen Dum * ChangeLog build/rpm/lifelines.spec src/stdlib/path.c docs/ll-reportmanual.{xml,html,pdf,txt} docs/ll-userguide.{xml,html,pdf,txt} Makefile.am Update lifelines.spec file to include: tt files, new .mo files and .linesrc file export lines.cfg.input to source distribution update docs with some codeset information. Fix bug handling adding default extensions to short filenames 2005-12-22 Perry Rapp * ChangeLog src/hdrs/sys_inc.h Define M_PI if needed for WIN32/MSVC. 2005-12-21 Stephen Dum * ChangeLog docs/ll-reportmanual.xml src/gedlib/xlat.c src/interp/builtin.c src/stdlib/path.c fix llrpt_bytecode() function to actually process second argument rather than 1st argument twice. change bytecode docs to match code. add some TTPATH.debug enabled debug statements 2005-12-21 Matt Emmerton * ChangeLog reports/st/Makefile.am Fix clean target so that scripts and databases are not removed. 2005-12-21 Perry Rapp * ChangeLog sys/hdrs/sys_inc.h Fix backward int32 & int16 defines. 2005-12-21 Matt Emmerton * ChangeLog sys/hdrs/sys_inc.h Fix INT-related ifdef problems on Windows. 2005-12-21 Perry Rapp * ChangeLog src/hdrs/sequence.h src/liflines/screen.c src/liflines/tandem.c src/liflines/valgdcom.c src/stdlib/sequence.c src/stdlib/strcvt.c Fix declaration of seqerr (int => INT). Fix definition of crtseq (int => INT). Fix definition of ll_tolowerz (int => INT). Fix definition of handle_list_commands (BOOLEAN => INT rtn). Fix definition of variable reuse (INT => BOOLEAN). Fix definition of validate_get_warning_count (BOOLEAN => INT rtn). 2005-12-20 Stephen Dum * ChangeLog docs/ll-reportmanual.{xml,html,txt,pdf} Update report manual for new trig functions. * ChangeLog reports/Makefile.am remove reference to novel.head from Makefile.am 2005-12-20 Matt Emmerton * ChangeLog src/interp/builtin.c src/interp/functab.c src/interp/heapused.c src/interp/interpi.h src/interp/intrpseq.c src/interp/more.c src/interp/rassa.c src/interp/rptsort.c src/interp/write.c Update function names (again!) to avoid conflicts after linker fixups. This is a generic solution that should work for everyone, everywhere, evermore. 2005-12-20 Matt Emmerton * ChangeLog src/interp/interpi.h src/interp/more.c src/interp/functab.c src/interp/builtin.c Update function names to avoid conflicts with linker on Linux Mandrake 7.0 and 9.0. 2005-12-20 Matt Emmerton * ChangeLog src/hdrs/sys_inc.h Fix misplaced typedef on WIN32. 2005-12-20 Perry Rapp * ChangeLog src/hdrs/indiseq.h Fix declaration of default_compare_values (int => INT). * ChangeLog src/interp/pvalue.c Fix definition of create_pvalue_from_cel (int => INT). * ChangeLog src/hdrs/llstdlib.h Fix declaration of __reallocate (int => INT). * ChangeLog src/stdlib/path.c Fix definition of path_cmp (int => INT). 2005-12-19 Matt Emmerton * ChangeLog reports/trigtest.ll reports/Makefile.am src/interp/functab.c src/interp/more.c src/interp/interpi.h Add spherical distance function. Update sample report. 2005-12-19 Matt Emmerton * ChangeLog configure.in Add comments, re-arrange/group checks, general cleanup Add checks for trig functions * src/interp/interpi.h src/interp/alloc.c src/interp/functab.c * src/interp/more.c reports/trigtest.ll Add sin/cos/tan and arcsin/arccos/arctan report functions. Add sample report. * src/hdrs/standard.h src/hdrs/sys_inc.h Clean up headers. 2005-12-05 Stephen Dum * ChangeLog reports/novel/novel.{ll,intro,head} remove the external file dependency of novel.ll on novel.head by moving novel.head into novel.ll. It is ugly, but copyfile() didn't know how to find the included file. Also, remove the requirement that novel.intro be available in the current directory. Not it is optional. Fix a y2k bug that improperly interperted the year that *nix returned. 2005-11-30 Perry Rapp * ChangeLog src/stdlib/strcvt.c Fix unicode conversion bug on cygwin. Fix get_wchar_codeset_name to test size of wchar_t. 2005-11-29 Stephen Dum * ChangeLog docs/ll-reportmanual.xml Update behavior of incr and decr resolving defect 1361818 * ChangeLog src/stdlib/path.c Fix miscalculation of filenames being looked up. 2005-11-28 Stephen Dum * ChangeLog reports/anniver.ll reports/cron.ll reports/find.ll Remove reports/genancc2.ll Remove genancc2.ll which was identical to genancc.ll. add comment to anniver. fix typo in cron which was getting the wrong property values. move comment around in find.ll so that the description of the report is extracted for use in index.html. 2005-11-26 Stephen Dum * ChangeLog src/gedlib/lloptions.c See bug 1367863 copy_process() was not handling copying of strings correctly. Looks like a compiler bug. Code failed when compiled -O2, but worked when compiled -O1. Rearranged the code, and it now works with -O2. (Let someone else debug gcc.) * ChangeLog src/stdlib/path.c revise filepath() so that relative paths will be looked for in current directory and then in path directories. 2005-11-26 Perry Rapp * ChangeLog README.DEVELOPERS Add explanation of lynx use in developer tools. * ChangeLog Cosmetic: fix two typos in earlier ChangeLog entry. * ChangeLog README.DEVELOPERS Minor textual improvement to "which does what". * ChangeLog src/stdlib/path.c Cosmetic: Fix some inconsistency in tabs in filepath. * ChangeLog src/stdlib/path.c Restore is_absolute_path so that relative paths work again. Add more commenting to both is_path and is_absolute_path. Remove a spurious test for isdirsep(dir[0]) in both functions. * ChangeLog src/interp/Makefile.am src/interp/more.c *NEW src/interp/rptsort.c Move sort & rsort implementations from end of more.c into new file rptsort.c. * ChangeLog src/interp/rptsort.c Add some ASSERT calls in sortpair_bin. * ChangeLog src/hdrs/isolangs.h Add Italy, Sweden, and Spain to isolangs.h, to pass self-tests on MS-Windows. * ChangeLog src/hdrs/isolangs.h Add countries beginning with A or B to isolangs list. * ChangeLog build/msvc6/llines/llinesprj.dsp Add new source file rptsort.c to MSVC6 project. * ChangeLog README.DEVELOPERS Add jadetex to software list. 2005-11-26 Stephen Dum * ChangeLog ll-reportmanual.{xml,html,pdf,txt} Deprecate baptism function, and offer two alternative solutions. * ChangeLog lines.cfg.input Minor cleanup on lines.cfg.input. Remove a couple of inconsistent differences between *nix and windows ifdef's. * Changelog Makefile.am src/stdlib/path.c README.DEVELOPERS Remove use of unix2dos, which is not available everywhere. Add extension appending on pathnames, not just filenames. Add more data on required tools in README.DEVELOPERS 2005-11-26 Perry Rapp * ChangeLog src/stdlib/path.c New function get_user_homedir to encapsulate platform-specific portion of expand_special_fname_chars. * ChangeLog reports/find.ll Fix find.ll report to optionally search all types of records, and add menu option to print results to output file. * ChangeLog README.DEVELOPERS Add initial section on required software for developers. * ChangeLog README.DEVELOPERS Add requirements for compiling docs to software list. 2005-11-26 Stephen Dum * ChangeLog reports/st/st_collate_8859-1.li reports/st/st_collate_UTF-8.li reports/st/st_date.li reports/st/Makefile.am reports/st/st_all_stdout.ref Fix selftests to look for locales es_ES, it_IT, and sv_SE rather than es,it,sv. Change executions of llines and llexec in selftests to use full pathnames, rather than rely on default search paths. Add a clean target. * src/stdlib/path.c Change Path resolution code to properly handle absolute and relative unix paths. Also to handle ~name/, in addition to ~/ on *nix. * ll-reportmanual.{xml,txt,html,pdf} * ll-userguide.{xml,txt,html,pdf} Update formatted docs. Fix typo in report manual 2005-11-25 Perry Rapp * ChangeLog docs/ll-reportmanual.xml Add report header comments to sample ahnentafel in report manual. * ChangeLog docs/ll-reportmanual.xml Add report template, and explanation of report header comments, to report manual. sf#1362488. 2005-11-25 Stephen Dum * ChangeLog reports/anniver.ll reports/cron.ll Update cron.ll and anniver.ll to privatize data. * src/interp/interp.c Fix iterators forfam,forindi,forsour,fornotes and forothr so that last argument - the count, increments by 1 each time thru the executed loop. * DELETE .linesrc lines.cfg * lines.cfg.input Makefile.am Generate .linesrc and lines.cfg from lines.cfg.input using m4. * configure.in reports/Makefile.am *NEW in reports/st Makefile.am st_all.out st_all.ref st_all_stdout.ref test_fam_it.ll test_fam_it.ref test_forfam.ll test_forfam.out test_forfam.ref test_forindi.ll test_forindi.out test_forindi.ref test_indi_it.ll test_indi_it.out test_indi_it.ref test_othr_it.ll test_othr_it.ref ti.ged Add a number of tests in the reports/st directory. Add Makefile for this directory, and utilize the check target in the makefiles to run the tests in this directory. 2005-11-25 Perry Rapp * ChangeLog *NEW reports/marriages.ll New marriages report. * ChangeLog reports/Makefile.am Add new marriages report to Makefile.am. * ChangeLog src/gedlib/editvtab.c src/hdrs/gedcom.h src/liflines/screen.c Fix user option validator to test before & after codeset (test was failing when no preexisting option in user options). Changed uopt_validate & edit_valtab_from_db etc. 2005-11-20 Stephen Dum * ChangeLog reports/addsour.ll reports/refn.ll reports/Makefile.am Add Larry Hamilton's refn script, and add my addsour report. Adjust makefile to know about these scripts. 2005-11-20 Perry Rapp * ChangeLog src/interp/builtin.c Fix fragile handling of null val in __length (sf#1361865). * ChangeLog docs/ll-userguide.xml docs/llines.1 Add options (I, a, c, l, n, o, z) to man page (sf#1360893). * ChangeLog docs/ll-userguide.xml Add mention of btedit to user manual, and alphabetize tool list. (sf#1360896) * ChangeLog src/gedlib/messages.c Add z and I to the llines -h display (sf#1360885). 2005-11-19 Stephen Dum * ChangeLog reports/net-ped.ll fix net-ped.ll so it no longer crashes trying to deal with non-existant people. Clean up the html a little by adding new-lines. 2005-11-19 Matt Emmerton * ChangeLog docs/lifelines.sgml Add missing tags, as per SF Patch 551968. * ChangeLog reports/book-latex.ll reports/register-tex.ll Add "usepackage{isolatin1}" to register-tex.ll, as per SF Patch # 402021. Add comments about how to change between A4/Letter paper. * ChangeLog src/liflines/main.c src/liflines/llexec.c Add -v (version) option; clean up -h/-? (usage) options. As per SF Feature Request # 1310390. * ChangeLog src/btree/btrec.c src/btree/index.c Add "temp" and "random" hints to more file operations. 2005-11-18 Stephen Dum * ChangeLog Makefile.am docs/ll-userguide.{xml,html,pdf,txt} fix Makefile so that 'make install' will install random readme's and LICENSE file. Add some more text about XREF's under import errors. 2005-11-18 Perry Rapp * ChangeLog NEWS Cosmetic: typo fix * ChangeLog build/setversions.sh Add 'restore' option to usage. * ChangeLog build/setversions.sh docs/btedit.1 docs/dbverify.1 Add btedit.1 and dbverify.1 to setversions handling. * ChangeLog src/gedlib/refns.c Cosmetic: add more comments to header of index_by_refn. 2005-11-17 Stephen Dum * ChangeLog NEWS Add a new in 3.0.50 note about overloading the spouses() iterator. 2005-11-17 Matt Emmerton * ChangeLog src/tools/dbverify.c docs/dbverify.1 Update dbverify to accept and display the -h option. Update dbverify man page with all accepted options. 2005-11-17 Perry Rapp * ChangeLog src/tools/dbverify.c Fix cgn_callback in dbverify to avoid ASSERT on empty key. * ChangeLog src/tools/dbverify.c Fix my previous fix to cgn_callback. 2005-11-16 Stephen Dum * ChangeLog docs/ll-reportmanual.{xml,html,pdf,txt} docs/ll-userguide.{xml,html,pdf,txt} Added some text to the user guide about importing gedcoms. Added some text to report manual to clarify how iterators work. Especially that the count argument, increments by 1 for each iteration of the loop. 2005-11-16 Perry Rapp * ChangeLog docs/ll-userguide.xml Update copy of main menu (lacked Q) & miscellaneous utilities (lacked R & c). 2005-11-15 Perry Rapp * ChangeLog build/msvc6/dbverify/dbverifyCmd.dsp Fix MSVC6 project for dbverify to link. * ChangeLog build/msvc6/btedit/bteditCmd.dsp Fix MSVC6 project for btedit to link. * ChangeLog build/msvc6/llexec/llexec.dsp Fix MSVC6 project for llexec to link. * ChangeLog build/msvc6/dbverify/dbverifyCmd.dsp build/msvc6/llexec/llexec.dsp build/msvc6/llines/llinesprj.dsp src/hdrs/llstdlib.h src/liflines/error.c src/stdlib/signals.c src/tools/dbverify.c *NEW src/stdlib/errlog.c *NEW src/stdlib/llabort.c Factor out crashlog reporting into new file src/stdlib/errlog.c, and implement crashlog for dbverify as well. Also implement optional abort for dbverify (by factoring optional abort into new file src/stdlib/llabort.c). * ChangeLog src/stdlib/Makefile.am Fix unix compilation for new files errlog.c & llabort.c. * ChangeLog build/rpm/lifelines.spec rpm changes from sf#1327474 by Karl DeBisschop 2005-11-14 Stephen Dum * ChangeLog src/gedlib/node.c src/hdrs/gedcom_macros.h src/interp/alloc.c src/interp/interp.c src/interp/interpi.h src/interp/lex.c src/interp/yacc.y docs/ll-reportmanual.{xml,html,pdf,txt} FORSPOUSES macro was counting all spouses, not just those the loop returned. This caused nspouses to return incorrect number, and spouses iterator skipping numbers in it's count. rename parentunits iterator to spouses. Two different spouses iterators exist now: spouses(fam,indi,cnt) and spouses(indi,fam,indi,cnt) 2005-11-14 Perry Rapp * ChangeLog src/liflines/llexec.c src/liflines/main.c Remove unused variable dbdir. * ChangeLog src/liflines/valgdcom.c Remove no longer used global variable qSmisval. * ChangeLog src/gedlib/messages.c src/liflines/valgdcom.c Include tag0 key with import warning: "Family has no members" 2005-11-13 Perry Rapp * ChangeLog src/interp/lex.c Cosmetic: fix alignment in rwordtable. 2005-11-10 Stephen Dum * ChangeLog ll-userguide.{xml,html,pdf,txt} Update userguide on causes of import errors and reformat docs. 2005-11-08 Stephen Dum * ChangeLog src/gedlib/gengedc.c docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.txt src/interp/alloc.c src/interp/interp.c src/interp/interpi.h src/interp/lex.c src/interp/yacc.y Ignore @ signs in the value of a record if it is not the start of a valid key when writing out gedcom's. The prevents discarding any record with a random @ in it. Update Formatted docs Add parentunits iterator, that iterates over all parents in a family (the name is less than desirable, but parents and Parents already exist.) 2005-11-08 Perry Rapp * ChangeLog src/liflines/valgdcom.c Report top-level key in warnings & errors. * ChangeLog docs/ll-userguide.xml Add examples to import errors, and add entry for missing values. 2005-11-07 Stephen Dum * ChangeLog reports/partition.ll Change report to use gengedcomstrong, print out a gedcom header and output gedcom files, whose names end in .ged 2005-11-06 Perry Rapp * ChangeLog reports/html.ll Add url to LINES-L archive referenced in header of html.ll. 2005-10-30 Stephen Dum * ChangeLog src/gedlib/indiseq.c src/liflines/browse.c reports/span.ll docs/ll-userguide.xml Update span.ll. Enhance browse on Family, Individual and Main menu, to look for keys first, then Individuals 2005-10-30 Matt Emmerton * ChangeLog po/.cvsignore Update .cvsignore to ignore .gmo files for recently-added languages. 2005-10-26 Perry Rapp * ChangeLog src/gedlib/indiseq.c src/gedlib/messages.c src/liflines/ask.c src/liflines/browse.c src/liflines/lbrowse.c src/liflines/screen.c Allow main "browse persons" to accept any type of keyed entry (eg, F1), but still prefer persons. Fix $$ browse pointers to go to person browse screen if person chosen. Fix browse lists to check for types before invoking tandem mode. 2005-10-25 Stephen Dum * ChangeLog docs/ll-reportmanual.xml reports/BW_descendants.ll reports/bday_cover.ll reports/bias.ll reports/book-latex.ll reports/cgi_html.li reports/common.ll reports/connect2.ll reports/cons.ll reports/cron.ll Spelling corrections to reports from Larry Hamilton. Minor clarification to reportmanual about families vs spouses iterator. 2005-10-22 Perry Rapp * ChangeLog src/stdlib/signals.c Fix signal name array size. sf Patch#1334872: Fix off-by-one access to signal names list By Andreas Kirschbaum * ChangeLog src/gedlib/editmap.c src/gedlib/gengedc.c Fix a resource leak in editmap.c and one in genged.c sf Patch#1334873: Fix resource leaks By Andreas Kirschbaum * ChangeLog src/btree/btrec.c src/btree/file.c src/btree/index.c src/btree/opnbtree.c Check fclose & fflush return values. Based on Andreas' patch, with wrapper checked_fclose added. sf Patch#1334875: Check result values of file operations By Andreas Kirschbaum *ChangeLog build/msvc6/llines/llinesprj.dsp src/btree/btrec.c src/hdrs/llstdlib.h src/stdlib/Makefile.am *NEW src/stdlib/fileops.c Add wrappers for fclose, fflush, fseek, and fwrite, to check returns. 2005-10-21 Perry Rapp * ChangeLog docs/Install.LifeLines.Windows.txt docs/Run.LifeLines.Windows.txt *NEW reports/newuser.ll Windows docs improvements (& new newuser.ll report) by Larry Hamilton. 2005-10-19 Stephen Dum * ChangeLog .linesrc lines.cfg reports/anc2_ged.ll Make use of user properties consistent. name is user.fullname, address is user.address. Make lines.cfg and .linesrc more consistent. 2005-10-16 Stephen Dum * ChangeLog src/hdrs/gedcom_macros.h src/interp/builtin.c Parents iterator was returning counts of 2,4,... FORFAMCS macro was incrementing count twice for each family. roman() would only handle numbers less than 100. Enhanced it to handle numbers up to 3999, which reflect conventional use of roman numbers (i.e. for years). Numbers larger than this require special symbols and are no longer used. 2005-10-17 Matt Emmerton * ChangeLog src/btree/opnbtree.c src/btree/index.c src/btree/btrec.c Rename FILE* variables to line up with their usage. (fd=data, fi=index, fk=key, ft=temp, fp=general) This will make future maintenance simpler. 2005-10-16 Stephen Dum * ChangeLog docs/ll-reportmanual.{txt,pdf,html} docs/ll-userguide.{xml,txt,pdf,html} reports famtree1.ll reports/af-import.ll reports/ahnenliste.ll reports/ahnentafel.ll reports/alllines.ll reports/anc2_ged.ll reports/anniver.ll reports/alllines.sgml.ll reports/Makefile.am Add user.phone to the list of mentioned user properties. update famtree1.ll to use user properties by applying Larry Hamilton's patch. Regenerate formatted manuals. Increase use of getproperty() and fix typos in some reports. replaced reports/alllines.ll with reports/alllines.sgml.ll and removed reports/alllines.sgml.ll as they are really the same report. the sgml version does both nroff and sgml. 2005-10-15 Matt Emmerton * ChangeLog src/btree/btrec.c Use LLFILETEMP fopen() flag for temporary files. 2005-10-15 Matt Emmerton * ChangeLog src/gedlib/charprops.c src/gedlib/node.c src/gedlib/record.c src/interp/heapused.c src/interp/pvalalloc.c src/liflines/askgedc.c src/liflines/askprogram.c src/liflines/browse.c src/tools/prettytt.c Fix up instances where we were passing hard-coded mode strings (such as "r" or "w") to fopen() instead of using the appropriate LL macros (which map "r" to "rt" on Windows, as so on.) src/gedlib/xreffile.c Code cleanup/optimization. src/hdrs/standard.h Add new #defines for "random file I/O" and "temporary file" fopen() flags. 2005-10-15 Perry Rapp * ChangeLog src/liflines/main.c Fix crashlog name. 2005-10-14 Perry Rapp * ChangeLog src/liflines/llexec.c src/liflines/main.c Fix to not try to print null string. * ChangeLog src/gedlib/nodeio.c Cosmetic: remove obsolete TODO comment. 2005-10-09 lifelines beta 3.0.49 RELEASE 2005-10-09 Perry Rapp * ChangeLog build/setversions.sh Fix bug in setversions.sh causing files to be emptied (use .tmp files, instead of trying to override input). * ChangeLog build/setversions.sh Fix reversed resore/set version logic. Add handling for build/rpm/lifelines.spec. Add handling for src/hdrs/version.h. * ChangeLog build/setversions.sh Fix setversions.sh to set versions in Windows rc files. * ChangeLog build/setversions.sh Revise alterfile to handle multiple sed patterns. Finish handling versions listed in README.MAINTAINERS. * ChangeLog README.MAINTAINERS Add use of setversions.sh to README.MAINTAINERS. * ChangeLog README.MAINTAINERS Fix incorrect cvs command shown. * ChangeLog INSTALL NEWS README configure.in build/msvc6/dbverify/dbVerify.rc build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc build/rpm/lifelines.spec docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml docs/llines.1 src/hdrs/version.h Bump version to 3.0.49. 2005-10-08 Perry Rapp * ChangeLog src/gedlib/init.c src/gedlib/lldatabase.c src/hdrs/gedcom.h src/hdrs/liflines.h src/liflines/llexec.c src/liflines/main.c src/liflines/selectdb.c src/tools/dbverify.c Move duplicated database select & open code from main.c and llexec.c into new function select_database. * ChangeLog build/setversions.sh New (incomplete) shell script to set version numbers. 2005-10-07 Perry Rapp * ChangeLog build/msvc6/dbverify/config.h build/msvc6/llexec/config.h build/msvc6/llines/config.h src/gedlib/init.c Fix config file handling to work for Win32 also. New function check_installation_path & variable global_conf_path in init.c. * ChangeLog src/gedlib/init.c Fix typo (SYS_CONF_PATH => SYS_CONF_DIR). * ChangeLog src/gedlib/remove.c Fix bug in remove_any_xrefs_node_list (prev was not getting set). * ChangeLog NEWS Note above bugfix in NEWS. 2005-10-06 Stephen Dum * ChangeLog docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.txt Revise search process for configuration files. Document process in ll-userguide. 2005-10-05 Perry Rapp * ChangeLog build/msvc6/llexec/llexec.dsp build/msvc6/llines/llinesprj.dsp src/hdrs/liflines.h src/liflines/Makefile.am src/liflines/ask.c src/liflines/llexec.c src/liflines/main.c *NEW src/liflines/selectdb.c Combine two copies of open_or_create_database code from main.c & llexec.c into one copy in new selectdb.c. * ChangeLog src/liflines/Makefile.am Add new src/liflines/selectdb.c to makefile for llexec. * ChangeLog build/msvc6/dbverify/dbverifyCmd.dsp build/msvc6/llexec/llexec.dsp build/msvc6/llines/llinesprj.dsp src/hdrs/Makefile.am src/hdrs/gedcom.h Move macros from gedcom.h to new gedcom_macros.h. * ChangeLog build/msvc6/dbverify/dbverifyCmd.dsp build/msvc6/llexec/llexec.dsp build/msvc6/llines/llinesprj.dsp src/gedlib/gedcomi.h src/gedlib/init.c src/gedlib/lldatabase.c *NEW src/hdrs/dbcontext.h *NEW src/gedlib/dbcontext.c New files dbcontext.c & dbcontext.h, to start implementing database interface layer. * ChangeLog src/gedlib/Makefile.am src/hdrs/Makefile.am Add files dbcontext.* to makefiles. 2005-10-03 Perry Rapp * ChangeLog dbverify/dbverifyCmd.dsp llexec/llexec.dsp Fix MSVC6 compilation (new llgettext.c file). 2005-10-03 Stephen Dum *NEW reports/span.ll 2005-10-03 Perry Rapp * ChangeLog configure.in Restore AM_INIT_AUTOMAKE to configure.in (lost yesterday). 2005-10-03 Stephen Dum * ChangeLog docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.txt src/gedlib/init.c reports/anniver.ll reports/CREDIT reports/cron.ll reports/dump_html_sd.ll reports/gen_index reports/grand.ll reports/Makefile.am Update formatted docs Fix typo in init.c Change my email address to one that works in a number of reports Add a new report span.ll 2005-10-03 Matt Emmerton * ChangeLog configure.in Work around problems checking for on OSX/Darwin. 2005-10-03 Perry Rapp * ChangeLog src/gedlib/charprops.c src/gedlib/codesets.c src/gedlib/dispfmt.c src/gedlib/init.c src/gedlib/llgettext.c src/gedlib/lloptions.c src/gedlib/locales.c src/gedlib/node.c src/gedlib/property.c src/gedlib/record.c src/gedlib/translat.c src/hdrs/lloptions.h src/interp/builtin.c src/interp/interp.c src/interp/pvalalloc.c src/interp/rassa.c src/liflines/add.c src/liflines/export.c src/liflines/llexec.c src/liflines/loadsave.c src/liflines/main.c src/liflines/newrecs.c src/liflines/screen.c src/liflines/valgdcom.c src/stdlib/table.c Rename getoptstr to getlloptstr (to avoid clash with grep for getopt). * ChangeLog src/gedlib/gedcom.c src/gedlib/gstrings.c src/gedlib/init.c src/gedlib/lloptions.c src/gedlib/node.c src/gedlib/refns.c src/gedlib/valid.c src/gedlib/xlat.c src/hdrs/lloptions.h src/interp/builtin.c src/interp/eval.c src/interp/interp.c src/interp/more.c src/liflines/browse.c src/liflines/pedigree.c src/liflines/screen.c src/liflines/show.c src/liflines/valgdcom.c Rename getoptint to getlloptint. * ChangeLog src/gedlib/lloptions.c src/gedlib/property.c src/hdrs/lloptions.h Rename getoptstr_rpt to getlloptstr_rpt, and getoptstr_dbonly to getlloptstr_dbonly. * ChangeLog build/msvc6/llines/llinesprj.dsp src/gedlib/codesets.c src/gedlib/init.c src/hdrs/codesets.h src/stdlib/Makefile.am *NEW src/stdlib/norm_charmap.c Added Marcus Kuhn's norm_charmap.c to stdlib. Use user's default codeset (should be from locale) for databases lacking a codeset specification. 2005-10-02 Perry Rapp * ChangeLog src/gedlib/init.c src/gedlib/llgettext.c src/hdrs/gedcom.h src/liflines/screen.c Add more diagnostics to u/c display (Internal UTF-8, bind_textdomain_codeset). * ChangeLog README.MAINTAINERS configure.in src/hdrs/version.h Bump version to 3.0.48p. 2005-10-01 Perry Rapp * ChangeLog src/gedlib/init.c Break code out of init_lifelines_global into new functions llgettext_init, pre_codesets_hook. * ChangeLog src/gedlib/init.c src/gedlib/lloptions.c src/hdrs/lloptions.h Move code reading config file out of init_lifelines_global into new function load_configs, and allow local config file to override, and allow chaining to second config file. * ChangeLog src/gedlib/init.c Cosmetic: Add todo note for Win32. * ChangeLog src/gedlib/gedcomi.h src/gedlib/init.c build/msvc6/llines/llinesprj.dsp *NEW src/gedlib/llgettext.c Pull gettext code out of init.c into new file llgettext.c. * ChangeLog src/gedlib/Makefile.am Add new llgettext.c file to makefile. * ChangeLog src/arch/platform.c Add some internal debugging code (error descriptions for some Win32 console codepage functions). 2005-09-30 Perry Rapp * ChangeLog src/hdrs/standard.h Greppable definition-style comments for macro functions. * ChangeLog src/btree/btreei.h src/btree/index.c src/btree/utils.c Remove "double-buffering" comments (that was never implemented). Fix newmaster to ASSERT on failure, and no return value (it was anyway ignored). * ChangeLog src/btree/index.c Modify readindex to not set bterrno on robust error (wasn't used). * ChangeLog src/gedlib/lldatabase.c src/hdrs/gedcom.h Remove unused ERRORINFO type & list in LLDATABASE. 2005-09-30 lifelines beta 3.0.48 RELEASE 2005-09-30 Perry Rapp * ChangeLog build/msvc6/btedit/btedit.rc build/msvc6/btedit/bteditCmd.dsp build/msvc6/dbverify/dbVerify.rc build/msvc6/dbverify/dbverifyCmd.dsp build/msvc6/llexec/llexec.dsp build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc build/msvc6/btedit/config.h Bump Win32 versions to 3.0.48.15272. Fix llexec, dbverify, and btedit project files to compile & link. * ChangeLog po/da.po po/de.po po/el.po po/eo.po po/es.po po/fr.po po/it.po po/nl.po po/pl.po po/rw.po po/sv.po Making 3.0.48 release 2005-09-29 Perry Rapp * ChangeLog reports/Makefile.am Add some mising reports to Makefile.am, split self-tests into own target, and reformat lists. * ChangeLog reports/Makefile.am Fix typo (fami-grps.li => fami-grps.ll). * ChangeLog reports/Makefile.am Fix typo (genanc.ll => genancc.ll) * ChangeLog src/liflines/screen.c Ensure row is initialized in place_cursor_main. * ChangeLog INSTALL NEWS README README.MAINTAINERS configure.in build/rpm/lifelines.spec docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml docs/llines.1 src/hdrs/version.h Bump version to 3.0.48, starting to get ready for release. * ChangeLog src/hdrs/Makefile.am Add (fairly recent) mycurses.h to src/hdrs/Makefile.am. * ChangeLog build/rpm/lifelines.spec Add more translations, and include *.li files. Add novel, pedtex, and ps-fan subdirs of reports. * ChangeLog build/rpm/lifelines.spec Remove cvs conflict markers in spec file. * ChangeLog build/rpm/lifelines.spec Fix path & filename bugs in lifelines.spec file. * ChangeLog po/es.po A few Spanish translations, including ordinals for reports. 2005-09-28 Perry Rapp * ChangeLog src/btree/opnbtree. src/liflines/main.c Cosmetic: comment updates & formatting * ChangeLog po/POTFILES.in Fix filename list (date.c replaced by dateparse.c and dateprint.c). 2005-09-26 Perry Rapp * ChangeLog src/hdrs/gedcheck.h src/hdrs/standard.h src/liflines/valgdcom.c More leak fix in import; new function free_elmnt. * ChangeLog src/gedlib/xlat.c Leak fix in xlat call to scandir (in load_dynttlist_from_dir). * src/liflines/valgdcom.c Leak fix in validate_gedcom (tag0). * ChangeLog src/liflines/browse.c Annotate location of a memory leak. 2005-09-25 Perry Rapp * ChangeLong build/msvc6/llines/llinesprj.dsp src/gedlib/datei.c src/gedlib/datei.h src/gedlib/dateparse.c src/gedlib/dateprint.c src/gedlib/date.c Split code for parsing dates, and code for printing dates, into different files. * ChangeLog src/gedlib/Makefile.am src/gedlib/datei.c Fix Makefile.am for new date files. Fix a typedef incorrectly in both datei.h and date.c. * ChangeLog build/msvc6/llines/llinesprj.dsp Move datei.h into headers folder in MSVC6 project. * ChangeLog src/gedlib/datei.c src/gedlib/datei.h src/hdrs/date.h src/interp/builtin.c Move a bunch of date structures & enums from date.h into private datei.h. Add accessors as needed for this move (date_get_day, date_get_month, etc). * ChangeLog src/gedlib/dateprint.c Always format GEDCOM date phrases (parenthesized) using original text. * ChangeLog NEWS Note GEDCOM date phrase display feature in next release. * ChangeLog src/liflines/import.c src/liflines/llinesi.h src/liflines/valgdcom.c New function validate_end_import, called from do_import, to plug leaks. 2005-09-24 Perry Rapp * ChangeLog configure.in src/hdrs/mycurses.h src/lifelines/cscurses.c Use libncursew if available (for full UTF-8 support). * ChangeLog src/gedlib/charprops.c Fix bug in charprops_is_loaded. * ChangeLog NEWS Note fix to use cursesw for UTF-8 locales in NEWS. 2005-09-22 Stephen Dum * ChangeLog reports/gedn.ll reports/gedall.ll gedn incorrectly tried to include ged_write.ll instead of ged_write.li Modified gedall.ll to generate gedcom header using properties, rather than relying on use defined header files. 2005-09-21 Perry Rapp * ChangeLog win32/mycurses.c Fix win32 impl. of curs_set (use hStdout for console handle). * ChangeLog src/hdrs/log.h src/stdlib/log.c New function log_bytecode to help developer work on encoding issues. 2005-09-21 Matt Emmerton * ChangeLog src/hdrs/win32/curses.h win32/mycurses.c Add implementation of curs_set(). 2005-09-21 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp src/hdrs/mycurses.h Fix hdrs/mycurses.h to include existing win32/curses.h (instead of nonexistent win32/mycurses.h). 2005-09-20 Perry Rapp * ChangeLog configure.in po/LINGUAS *NEW po/es.po Add untranslated Spanish message catalog (in order to add the minimal strings for reports). 2005-09-19 Matt Emmerton * ChangeLog src/liflines/screen.c Improve cursor handling during external editing and dynamic menus. 2005-09-19 Matt Emmerton * ChangeLog configure.in src/hdrs/screen.h src/hdrs/win32/curses.h src/gedlib/editvtab.c * NEW: src/hdrs/mycurses.h Introduce mycurses.h which will choose between (standard library implementation) or "win32/curses.h" (local Win32 implementation.) Update configure.in to detect and platforms where local curses implementation can be used. Update screen.h and editvtab.c to use mycurses.h. Minor comment changes in src/win32/curses.h. 2005-09-20 Perry Rapp * ChangeLog configure.in src/hdrs/version.h Bump version to 3.0.47post. * ChangeLog src/gedlib/charprops.c src/hdrs/charprops.h src/liflines/screen.c New function charprops_is_loaded, and add line to cset output menu. 2005-09-19 Matt Emmerton * ChangeLog reports/browser.ll docs/ll-reportmanuals.xml src/interp/functab.c Remove all vestiges of the report function getrecord(), which now exists as dereference(). 2005-09-18 Perry Rapp * ChangeLog configure.in src/hdrs/arch.h Fix logic for declaring sleep (only if windows and don't already have it, not either). Add configure.in test for windows.h. 2005-09-18 Stephen Dum * ChangeLog reports/d-rtf.ll reports/dump-ances.ll * reports/est_life_span.ll docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.txt Fixed two typo's in listed reports reported by Larry Hamilton est_life_span had a number of truncated lines that were repaired. Update formatted documentation. 2005-09-17 lifelines beta 3.0.47 RELEASE 2005-09-17 Perry Rapp * ChangeLog build/msvc6/btedit/btedit.rc build/msvc6/dbverify/dbVerify.rc build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc src/hdrs/version.h Bumping version to 3.0.47. * ChangeLog configure.in If bison not present, don't fail, but don't use yacc (so end users can compile without bison). * ChangeLog configure.in If no (n)curses, display different message for win32 (using LifeLines version). No follow-on use of this test yet. * ChangeLog INSTALL README configure.in build/rpm/lifelines.spec docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml docs/llines.1 po/da.po po/de.po po/el.po po/eo.po po/fr.po po/it.po po/nl.po po/pl.po po/rw.po po/sv.po Bump version to 3.0.47. 2005-09-16 Perry Rapp * ChangeLog src/gedlib/date.c src/hdrs/date.h src/interp/builtin.c New day and month formats 21 (which give 00 for blank). New functions is_valid_dayfmt, is_valid_monthfmt, is_valid_yearfmt. * ChangeLog *NEW build/msvc6/releaseScript/create_lifelines_release.vbs New script to create win32 binary directory for distribution. * ChangeLog build/msvc6/dbverify/dbverifyCmd.dsp Fix msvc6 project for dbverify by adding file nodechk.c * ChangeLog build/msvc6/releaseScript/create_lifelines_release.vbs Finish win32 package script. * ChangeLog build/msvc6/releaseScript/create_lifelines_release.vbs Add esperanto to list of languages. * ChangeLog NEWS Update NEWS (new day & month formats) 2005-09-15 Perry Rapp * ChangeLog src/interp/heapused.c Remove old declaration "struct heapinfo hi", which was duplicating new declaration "HEAPINFO hi;". This has been broken since heapused.c v1.3, 2000-11-09. * ChangeLog src/gedlib/editvtab.c Remove unneeded endwin call (right before calling do_edit, which calls endwin first). * ChangeLog src/gedlib/editvtab.c Remove unneeded endwin call (before edit_valtab_impl, which calls do_edit, which calls endwin). Remove curses include. * ChangeLog src/gedlib/date.c Cosmetic: scope newdate to use, in extract_date. 2005-09-14 Perry Rapp * ChangeLog src/liflines/cscurses.c Cosmetic: Add explanatory comments to existing TODO items (for UTF-8 GUI). 2005-09-13 Perry Rapp * ChangeLog src/hdrs/cscurses.h src/hdrs/feedback.h src/hdrs/screen.h src/hdrs/ui.h src/liflines/ask.c src/liflines/cscurses.c src/liflines/llinesi.h src/liflines/screen.c src/ui/ui_cli.c const fix for ask_for_indiseq & ask_for_db_filename (& cascade) * ChangeLog src/hdrs/ui.h src/liflines/llexec.h src/ui/ui_cli.c some llexec ramifications of const fix 2005-07-30 Perry Rapp * ChangeLog po/da.po po/de.po po/el.po po/eo.po po/fr.po po/it.po po/nl.po po/pl.po po/rw.po po/sv.po src/liflines/menuset.c Cosmetic typo: Remove spurious extra space in "Clash with longer hotkey" 2005-07-29 Perry Rapp * ChangeLog src/gedlib/replace.c src/liflines/edit.c More nodechk calls, for sanity checking in-memory node tree. * ChangeLog src/gedlib/spltjoin.c Fix parenthood of first level children in join_indi & join_fam. * ChangeLog src/gedlib/keytonod.c src/gedlib/replace.c src/gedlib/splitjoin.c src/hdrs/cache.h New functions fix_children & fix_cel in spltjoin.c. New function set_all_nodetree_to_root_cel in keytonod.c. Call nodechk from end of join_indi and end of join_fam. 2005-07-28 Perry Rapp * ChangeLog *NEW src/gedlib/nodechk.c Add new nodechk.c source file which was missed yesterday. * ChangeLog src/gedlib/Makefile.am Add nodechk.c to Makefile.am. * ChangeLog src/gedlib/nodechk.c Pass scope (caller name) through to FATAL message. 2005-07-27 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp build/msvc6/llexec/llexec.dsp src/gedlib/init.c src/gedlib/nodeio.c src/hdrs/gedcom.h New function to sanity check node tree, and new option ("nodecheck") to enable node checking. 2005-07-22 Stephen Dum * ChangeLog docs/Makefile.am docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.sv.html docs/ll-reportmanual.sv.xml docs/ll-reportmanual.txt docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.txt src/gedlib/remove.c src/liflines/valgdcom.c src/stdlib/stdlib.c src/stdlib/table.c Move installed man page location to man/man1. Update ll-reportmanual.sv.xml to use dtd 4.2. Release formatted docs. remove some warning messages in compilation 2005-07-21 Perry Rapp * ChangeLog configure.in po/LINGUAS *NEW po/eo.po New Esperanto translation from Dave Eaton. * ChangeLog NEWS Update NEWS file with Esperanto translation and also 3.0.46.1 branch notes. 2005-07-20 Perry Rapp * ChangeLog src/liflines/delete.c Initialize local buffer confirm in choose_and_remove_family to avoid ASSERT crash. sf#1242080 2005-07-20 Perry Rapp * ChangeLog src/gedlib/lloptions.c Minor changes to help debugging option parsing (Store line length into local, skip blank lines) 2005-07-20 Stephen Dum * ChangeLog README.MAINTAINERS src/gedlib/remove.c update README.MAINTAINERS fix bug 1241731 - double free when joining two indi's 2005-07-17 Stephen Dum * ChangeLog docs/ll-reportmanual.xml src/interp/intrpseq.c fix bug 1224303 - document optional second argument to incr and decr fix bug 1239997 - bad free of pointer in inset() - free of uninitialized data. 2005-07-05 Stephen Dum * ChangeLog AUTHORS docs/llines.1 Updated the llines man page and AUTHORS. 2005-06-26 Perry Rapp * ChangeLog NEWS src/liflines/screen.c Handle CMD_KY_ENTER in array_interact, so enter key works for database list. 2005-06-25 Perry Rapp * ChangeLog NEWS Annotate release entries in NEWS as beta or stable. 2005-06-23 Perry Rapp * ChangeLog src/gedlib/messages.c src/liflines/swap.c Confirm swap families (spouse orders), new message qScffswp. Confirm for CMD_SWAPFAMILIES. * ChangeLog src/gedlib/messages.c src/liflines/swap.c Confirm swap children. New function confirm_and_swap_children_impl. New message qScfchswp. * ChangeLog NEWS Document newest features in NEWS. 2005-06-22 Perry Rapp * ChangeLog .linesrc Remove spurious carriage return * ChangeLog .linesrc src/liflines/pedigree.c Customizable indent in ancestor/descendent/gedcom views (new function get_indent). New option GedcomDisplayIndent. 2005-06-21 Perry Rapp * ChangeLog po/de.po German catalog typo fix (Schlüsel => Schlüssel) from Felipe Augusto van de Wiel on LINES-L. 2005-06-20 Perry Rapp * ChangeLog INSTALL More extensive platform notes in INSTALL file. * ChangeLog src/interp/builtin.c Cosmetic: Document optional 2nd arg to __incr & __decr in function header comments. 2005-06-20 Jens Arvidsson * ChangeLog po/sv.po Update Swedish translation for 3.0.46. 2005-06-20 Stephen Dum * ChangeLog docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.txt docs/ll-userguide.xml clarify behavior of -o option. 2005-06-20 lifelines beta 3.0.46 RELEASE Branch point for v3_0_46_branch 2005-06-20 Perry Rapp * ChangeLog build/msvc6/btedit/btedit.rc build/msvc6/dbverify/dbVerify.rc build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc Set version strings in Windows resource files. * po/da.po po/de.po po/el.po po/fr.po po/it.po po/nl.po po/pl.po po/rw.po po/sv.po Updated message catalogs (3.0.46 release). 2005-06-19 Perry Rapp * ChangeLog NEWS Document fixing outfile in llexec in 3.0.46 (not yet released). 2005-06-18 Perry Rapp * ChangeLog src/gedlib/refns.c Fix key_possible_to_record to call qkey_ functions, not key_ functions, to avoid assert if key is not found. * ChangeLog NEWS Add latest bugfix to NEWS, and annotate bugfixes with sf bug numbers. * ChangeLog src/liflines/valgdcom.c New function check_level1_tag, to warn of weird lineage-linking tags (eg, level-1 FAMS pointer inside of FAM record). * ChangeLog NEWS Note import check for unusual FAMS, FAMC, HUSB, WIFE in NEWS. * ChangeLog src/liflines/llexec.c Cosmetic: Fix indents in main in llexec.c. * ChangeLog src/interp/rassa.c Cosmetic: Add function header comment for set_output_file * ChangeLog src/interp/interp.c src/interp/interpi.h src/interp/rassa.c Fix interp_program_list to set outputfile, so outfile works for llexec. 2005-06-17 Stephen Dum * ChangeLog docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.txt reports/book-latex.ll src/gedlib/remove.c Update docs for 3.0.46. fix typo in book-latex.ll and cleanup code in merge families. 2005-06-17 Perry Rapp * ChangeLog src/gedlib/spltjoin.c src/hdrs/gedcom.h src/liflines/browse.c Add new normalize_rec function, and call it from autoadd_xref (instead of normalize_irec), to handle when auto adding to non-individuals. * ChangeLog INSTALL NEWS configure.in build/rpm/lifelines.spec docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml src/hdrs/version.h Set most version numbers to 3.0.46 in preparation for next beta. 2005-06-15 Perry Rapp * ChangeLog po/fr.po Updated French message catalog from Patrick Texier. 2005-06-12 Stephen Dum * ChangeLog docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.txt Update formatted documents 2005-06-12 lifelines beta 3.0.45 RELEASE 2005-06-12 Perry Rapp * ChangeLog INSTALL build/msvc6/dbverify/dbVerify.rc build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc build/rpm/lifelines.spec configure.in docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml src/hdrs/version.h po/da.po po/de.po po/el.po po/fr.po po/it.po po/nl.po po/pl.po po/sv.po Bump version for 3.0.45 2005-06-09 Stephen Dum * ChangeLog src/gedlib/remove.c Cosmetic (added more comments inside remove_empty_fam) * src/hdrs/gedcom.h docs/ll-reportmanual.xml Fix FORFAMSS to handle case of a family with only 1 spouse and no other records. Also add documentation clarifying difference between families and spouses iterators. 2005-06-09 Perry Rapp * ChangeLog src/gedlib/remove.c Cosmetic (added more comments inside remove_empty_fam) * ChangeLog src/interp/builtin.c Improved clean up of __insert in error cases. * ChangeLog src/hdrs/gedcom.h Fix FORSPOUSES to not count self (& add more comments) * ChangeLog src/hdrs/gedcom.h Fix FORFAMSS to only fall through at end of family for unreported families (fix handling first_sp). 2005-05-07 Stephen Dum * ChangeLog src/gedlib/init.c src/gedlib/remove.c src/interp/builtin.c src/interp/intrpseq.c src/interp/pvalalloc.c src/liflines/import.c src/stdlib/table.c src/liflines/valgdcom.c src/stdlib/hashtab.c fix crash on merging two families - double free of fam record clean up lots of memory and pvalue leaks 2005-04-26 Stephen Dum * ChangeLog src/hdrs/gedcom.h src/interp/builtin.c docs/ll-reportmanuel.xml docs/ll-reportmanuel.html docs/ll-reportmanuel.pdf docs/ll-reportmanuel.txt Fix bug 1190528 failure to display child if only 1 parent in normal Person display screen. Tighten what fam() and indi() will accept as a valid key. Now requires a valid key, ie Fnnn or Innn. Functions will also accept @Fnnn@ and @Innn@. Update docs. 2005-04-17 Perry Rapp * ChangeLog po/pl.po Updated Polish translation. 2005-04-06 Perry Rapp * ChangeLog configure.in po/LINGUAS *NEW po/rw.po Add Kinyarwanda (rw) translation from Translation Project, courtesy of Steve Murphy. 2005-03-12 Perry Rapp * ChangeLog src/hdrs/version.h Bump version to 3.0.44d to distinguish from 3.0.44 release. 2005-03-11 Jens Arvidsson * ChangeLog po/sv.po Update Swedish translation for 3.0.44. 2005-02-27 Perry Rapp * ChangeLog src/gedlib/init.c src/hdrs/gedcom.h Move dblist functions out of init.c into new dblist.c *NEW dblist.c New module dblist.c handles list of available databases. * ChangeLog src/gedlib/Makefile.am Add new dblist.c to Makefile.am. * ChangeLog build/msvc6/llexec/llexec.dsp build/msvc6/llines/llinesprj.dsp Add new dblist.c to llines MSVC6 project and llexec MSVC6 project. * ChangeLog src/arch/alphasort.c src/stdlib/appendstr.c src/tools/btedit.c Remove some unneeded includes. * ChangeLog src/tools/wprintf.c Remove unneeded include. * ChangeLog src/interp/symtab.c Remove unused locals in remove_symtab. 2005-02-26 Perry Rapp * ChangeLog src/stdlib/rbtree.c src/stdlib/rbtree.h src/stdlib/table.c Fix table's insertion into rbtree not to delete first. * ChangeLog src/stdlib/table.c Fix table leaking rbtree values (wasn't using custom destructor for VPTR). 2005-02-25 Perry Rapp * ChangeLog src/stdlib/rbtree.c Add newline to end of file (to placate gcc warning). * ChangeLog src/hdrs/table.h src/stdlib/stdlib.c src/stdlib/table.c Make stdlib_init just call table_init. 2005-02-24 Perry Rapp * ChangeLog src/gedlib/lloptions.c Release option tables instead of destroying them. * ChangeLog src/stdlib/rbtree.c Fix RbNext to handle null rbit->high. * ChangeLog build/msvc6/dbverify/dbverifyCmd.dsp src/liflines/llexec.c src/tools/dbverify.c Call init_stdlib from llexec & dbverify. Fix dbverify to do setlocale. Add rbtree & stack to MSVC6 project for dbverify. * ChangeLog build/msvc6/llexec:/llexec.dsp Add rbtree & stack to MSVC6 project for llexec. 2005-02-22 Perry Rapp * ChangeLog src/stdlib/table.c Fix next_table_ptr to handle rbtree iterator. 2005-02-20 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp src/stdlib/rbtree.c src/stdlib/rbtree.h src/stdlib/table.c Add iteration to rbtree. * ChangeLog src/hdrs/table.h src/stdlib/table.c Cleanup & fix compilation for gcc (order table.c includes so struct tag_table only declared once). * ChangeLog src/stdlib/rbtree.c src/stdlib/rbtree.h src/stdlib/table.c Tables are implemented with rbtree when property "rbtree" is set. 2005-02-19 Perry Rapp * build/msvc6/llines/llinesprj.dsp src/gedlib/date.c src/gedlib/editvtab.c src/gedlib/gengedc.c src/gedlib/indiseq.c src/gedlib/init.c src/gedlib/keytonod.c src/gedlib/lloptions.c src/gedlib/misc.c src/gedlib/names.c src/gedlib/node.c src/gedlib/valtable.c src/gedlib/xlat.c src/hdrs/table.h src/interp/alloc.c src/interp/builtin.c src/interp/interp.c src/interp/pvalalloc.c src/interp/pvalue.c src/interp/symtab.c src/liflines/import.c src/liflines/llexec.c src/liflines/main.c src/liflines/screen.c src/liflines/valgdcom.c src/stdlib/memalloc.c src/stdlib/proptbls.c src/stdlib/table.c *NEW src/hdrs/hashtab.h *NEW src/stdlib/hashtab.c Move hash table into new hashtab.h (use it from table.c). * ChangeLog src/hdrs/Makefile.am src/stdlib/Makefile.am Add new hashtab files to automake makefiles. * ChangeLog build/msvc6/llexec/llexec.dsp src/liflines/llexec.c Fix compilation & MSVC6 linking of llexec. * ChangeLog src/gedlib/gengedc.c Cleanup: remove declaration of (no longer existing) function add_refd_fams. * ChangeLog src/interp/builtin.c src/stdlib/table.c Cleanup: remove unused variables & no longer existing functions. * ChangeLog src/stdlib/rbtree.c src/stdlib/rbtree.h Add typedef for key & value types to rbtree, and reformat function declarations lifelines-style. * ChangeLog build/msvc6/dbverify/dbverifyCmd.dsp src/tools/dbverify.c Fix compilation & MSVC6 linking of dbverify. 2005-02-16 Perry Rapp * ChangeLog src/gedlib/xlat.c Change DYNTT to be object type. Change f_dyntts to be generic table. * ChangeLog src/gedlib/init.c src/gedlib/lloptions.c src/hdrs/proptbls.h src/hdrs/table.h src/liflines/askgedc.c src/liflines/askprogram.c src/stdlib/proptbls.c src/stdlib/table.c New function create_table_strings. Convert proparrays to new table (table of strings). Fix some option string leaks. Remove now unused insert_table_str. const fixes. * ChangeLog src/liflines/llexec.c Fix typo ("create_table_") in llexec.c. 2005-02-14 Perry Rapp * ChangeLog src/gedlib/editvtab.c src/gedlib/indiseq.c src/gedlib/init.c src/gedlib/lloptions.c src/gedlib/node.c src/gedlib/valtable.c src/liflines/import.c src/liflines/llexec.c src/liflines/main.c src/liflines/screen.c src/liflines/valgdcom.c src/stdlib/table.c Convert more occurrences of create_table_old to create_table. * ChangeLog src/gedlib/keytonod.c Convert caches to use create_table instead of create_table_old. * ChangeLog src/hdrs/table.h src/stdlib/table.c Remove now unused function delete_table_element_old. 2005-02-13 lifelines beta 3.0.44 RELEASE 2005-02-13 Perry Rapp * ChangeLog po/da.po po/de.po po/el.po po/fr.po po/it.po po/nl.po po/pl.po po/sv.po lifelines beta 3.0.44 release 2005-02-13 Stephen Dum * ChangeLog docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.txt docs/Makefile.am Fix bug generating txt version of manuals and update manuals for 3.0.44 2005-02-13 Perry Rapp * ChangeLog INSTALL build/msvc6/dbverify/dbVerify.rc build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc build/rpm/lifelines.spec configure.in docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml src/hdrs/version.h Bump version info for 3.0.44. 2005-02-12 Perry Rapp * ChangeLog src/gedlib/xlat.c Free leaked strings in free_xlat. * ChangeLog src/interp/lex.c Add comment about leaking IDEN strings. * ChangeLog src/interp/alloc.c src/interp/interp.c src/interp/interpi.h src/interp/lex.c src/interp/yacc.y Fix some IDEN leaks. * ChangeLog src/interp/alloc.c src/interp/interpi.h src/interp/yacc.y Fix IDEN leaks in children_node, spouses_node, families_node. * ChangeLog src/interp/alloc.c src/interp/interpi.h src/interp/yacc.y Fix IDEN leak in call_node, fornodes_node, traverse_node, fathers_node, mothers_node, parents_node, forindiset_node, forlist_node. * ChangeLog src/interp/alloc.c src/interp/yacc.y Fix IDEN leak in forindi_node, fornotes_node, forfam_node, forsour_node, foreven_node, forothr_node. * ChangeLog NEWS Added memory leak fixes to NEWS. * ChangeLog src/interp/alloc.c src/interp/interpi.h Fix IDEN leak in iden_node. 2005-02-13 Stephen Dum * ChangeLog docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-userguide.html docs/ll-userguide.pdf reports/Makefile.am src/gedlib/brwslist.c src/gedlib/lloptions.c src/gedlib/nodeio.c src/interp/alloc.c src/interp/interp.c src/interp/interpi.h src/interp/pvalue.c src/interp/symtab.c src/stdlib/icvt.c src/stdlib/stack.c src/stdlib/stdlib.c src/stdlib/table.c src/stdlib/vtable.c Update docs to 3.0.43, clean up compiler warnings on linux 2005-02-12 Perry Rapp * ChangeLog docs/ll-devguide.xml Fixes to ll-devguide.xml (from saxon 8.3b). * ChangeLog docs/ll-devguide.html New version (xsltproc, docbook-1.33) of ll-devguide. * ChangeLog src/gedlib/gedcomi.h src/gedlib/keytonod.c src/gedlib/record.c src/hdrs/gedcom.h src/liflines/add.c New function make_new_record_with_info. alloc_new_record becomes static. Change arguments of set_record_key_info. * ChangeLog src/gedlib/keytonod.c New cel_magic & init_cel, to identify corrupt cel memory. Stop asserting that record is cel's record in cel_remove_record (this is firing, although I don't know why, but records should be able to handle pointing at wrong cel; nztop handles it). * ChangeLog src/gedlib/keytonod.c src/liflines/error.c src/stdlib/signals.c Change assert logic so abort is called without shutting down db, if user wants crash dump. * ChangeLog src/gedlib/keytonod.c Call init_cel for new cel in get_free_cacheel (assure not wrong record pointer) and put_node_in_cache. * ChangeLog src/gedlib/indiseq.c Fix indi_to_families to check families only once, and include ones without spouse. * ChangeLog NEWS Update NEWS file. * ChangeLog configure.in src/hdrs/version.h Bump version to 3.0.43d, to differentiate from 3.0.43 release. * ChangeLog build/msvc6/llines/llines.rc Bump windows build number to 3.0.43.15043, and attach Private Build of "3.0.43d". 2005-02-12 lifelines beta 3.0.43 RELEASE 2005-02-12 Perry Rapp * ChangeLog src/liflines/browse.c Fix record reference counts in goto_indi_child and goto_fam_child. * ChangeLog src/liflines/browse.c Fix bug just introduced in goto_fam_child. * ChangeLog src/gedlib/node.c src/liflines/browse.c src/liflines/show.c Fix next_spouse to not ASSERT on missing spouse. Fix 2 record leaks (ihusb & iwife) in init_display_fam. * ChangeLog INSTALL NEWS README.MAINTAINERS build/msvc6/dbverify/dbVerify.rc build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc build/rpm/lifelines.spec configure.in docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml src/hdrs/version.h Bump versions for 3.0.43. * ChangeLog NEWS Record memory leak fixes in NEWS. * ChangeLog docs/ll-devguide.xml Additions to devguide, in the stdlib section. * ChangeLog po/da.po po/de.po po/el.po po/fr.po po/it.po po/nl.po po/pl.po po/sv.po Rebuild message catalogs for 3.0.42 release. 2005-02-10 Perry Rapp * ChangeLog src/gedlib/keytonod.c src/gedlib/node.c Fix leak of record in indi_to_next_sib_old. * ChangeLog src/tools/dbverify.c Cosmetic: added newline to bottom of dbverify.c. 2005-02-09 Stephen Dum * ChangeLog src/gedlib/date.c src/stdlib/list.c Fixed 2 memory leaks. 2005-02-09 Perry Rapp * ChangeLog src/interp/pvalue.c Fix leak of record in create_pvalue_from_cel. * ChangeLog src/gedlib/keytonod.c Fix leak of record in key_to_type. 2005-02-08 Perry Rapp * ChangeLog src/interp/alloc.c src/interp/interp.c Fix leak of pvalue returned to main proc. * ChangeLog src/hdrs/version.h src/interp/symtab.c Fix leak of assignments of nulls and ints with same value in insert_symtab (self-assignment check that did not belong). Bump version to 3.0.42d to differentiate from release. 2005-02-08 lifelines beta 3.0.42-2 RELEASE 2005-02-08 Stephen Dum * ChangeLog docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.txt update docs for 3.0.42 2005-02-08 lifelines beta 3.0.42 RELEASE 2005-02-08 Perry Rapp * ChangeLog NEWS src/gedlib/keytonod.c src/gedlib/lldatabase.c Free nodes which were leaked in cache. * ChangeLog src/tools/dbverify.c dbverify: convert tables to generic tables. * ChangeLog src/gedlib/gedcomi.h src/gedlib/lldatabase.c src/gedlib/node.c src/gedlib/record.c Add record leak count to leak log. * ChangeLog INSTALL build/msvc6/dbverify/dbVerify.rc build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc build/rpm/lifelines.spec configure.in docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml src/hdrs/version.h Bump version for 3.0.42. * Update pot & message catalogs. 2005-02-07 Perry Rapp * ChangeLog lines.cfg src/interp/pvalue.c src/interp/symtab.c Fix leak of pvalues of existing variables in insert_symtab. * ChangeLog src/interp/alloc.c src/interp/interpi.h src/interp/pvalalloc.c Fix leak of pvalues in ivaluex in pnodes. * ChangeLog src/gedlib/xreffile.c Fix prototype for addxref_impl to fix gcc compilation. * ChangeLog src/gedlib/gedcomi.h src/gedlib/lldatabase.c src/gedlib/node.c New function check_node_leaks. * ChangeLog src/gedlib/node.c src/interp/pvalalloc.c Add node leak count to leak log, and add time stamps, and append. 2005-02-06 Perry Rapp * ChangeLog src/liflines/llexec.c src/liflines/main.c src/liflines/pedigree.c src/liflines/screen.c More converting make_list_empty/remove_list2 to remove_list. * ChangeLog src/interp/interp.c src/stdlib/list.c Convert gproctab & gfunctab to generic table, and delete freelistentry which is thereby unused. * ChangeLog src/btree/index.c src/hdrs/btree.h src/tools/dbverify.c dbverify: Convert (unused) fkeytab to generic table. Implement checking for cycle in btree index files. * ChangeLog src/gedlib/indiseq.c src/gedlib/init.c src/gedlib/names.c src/gedlib/xlat.c src/hdrs/list.h src/hdrs/table.h src/interp/interp.c src/liflines/llexec.c src/liflines/main.c src/liflines/pedigree.c src/liflines/screen.c src/stdlib/list.c src/stdlib/listener.c src/stdlib/proptbls.c src/tools/dbverify.c Reorg list.h in sections like table.h. Rename remove list functions to destroy list. * ChangeLog src/gedlib/indiseq.c src/hdrs/list.h src/hdrs/table.h src/interp/more.c src/stdlib/list.c src/stdlib/table.c Make list iterators heap objects like table iterators. * ChangeLog src/interp/interp.c Convert "destroy_list2(list, NULL)" calls to "destroy_list(list)". * ChangeLog src/btree/btreei.h src/gedlib/gedcomi.h src/hdrs/btree.h Move some btree internal calls to btreei.h. * ChangeLog src/hdrs/table.h src/tools/dbverify.c Remove unused traverse_table function. Fix dbverify compile. * ChangeLog src/gedlib/names.c src/hdrs/gedcom.h src/interp/more.c src/liflines/scan.c Convert name_to_list to return new list (simplifying cleanup). * ChangeLog src/gedlib/names.c src/hdrs/gedcom.h src/liflines/screen.c Remove obsoleted function free_name_list. Cleanup destruction of msg_list. Remove obsoleted function free_string_list. Remove obsoleted function free_string_el. * ChangeLog src/gedlib/lloptions.c src/gedlib/locales.c src/hdrs/llstdlib.h src/stdlib/listener.c Alter notifier lists to use create_list2 instead of remove_list2. * ChangeLog src/hdrs/list.h src/stdlib/list.c Alter release_list not to use remove_list2, and delete now unused remove_list2 function. * ChangeLog src/hdrs/list.h src/interp/interp.c src/interp/pvalue.c src/stdlib/list.c Move destructor spec (used for pvalues) from release_list to new create_list3. * ChangeLog reports/st/st_db.li src/gedlib/place.c src/hdrs/gedcom.h src/hdrs/list.h src/interp/more.c src/stdlib/list.c Alter place_to_list and value_to_list to return list as output. Make in_string a local function in place.c. Delete now unused function set_list_type. Add extractplaces to st_db.li. * ChangeLog src/gedlib/keytonod.c src/hdrs/table.h src/interp/symtab.c src/stdlib/table.c Rename delete_table to delete_table_element. * ChangeLog src/interp/interp.c src/interp/interpi.h src/interp/symtab.c Rename delete_symtab to delete_symtab_element. * ChangeLog src/gedlib/keytonod.c src/hdrs/table.h src/interp/symtab.c src/stdlib/table.c Rename delete_table_element to delete_table_element_old. New delete_table_element which does free memory. * ChangeLog src/hdrs/pvalue.h src/hdrs/table.h src/interp/pvalalloc.c src/interp/pvalue.c src/interp/symtab.c src/stdlib/table.c Convert symtab to use generic table. Fix free_all_pvalues (was not handling leaked pvalues cross-linked between blocks). * ChangeLog src/hdrs/table.h src/stdlib/table.c Remove no longer used function create_table_old. * ChangeLog src/gedlib/gengedc.c src/gedlib/xlat.c src/hdrs/table.h src/stdlib/table.c Move gengedc.c local table_incr_item to table.c table_incr_int. Fix next_table_ptr to use const key. * ChangeLog src/interp/interp.c src/interp/interpi.h src/interp/symtab.c Add code to check for leaked symbol tables. * .linesrc ChangeLog lines.cfg src/hdrs/table.h src/interp/interpi.h src/interp/intrpseq.c src/interp/pvalalloc.c src/interp/pvalue.c src/interp/symtab.c src/stdlib/table.c Add leak statistics and new option ReportLeakLog. New function next_table_int. * ChangeLog src/gedlib/xreffile.c Add prototypes for add?xref_impl. * ChangeLog src/gedlib/xreffile.c Remove unused function add_xref_to_set. 2005-02-05 Perry Rapp * ChangeLog NEWS src/gedlib/xreffile.c Fix buggy growxrefs; set->max must be bigger than set->n, and shift was wrong direction, so this utterly failed at 65th insert. * ChangeLog src/interp/interp.c Avoid ASSERTs for missing records in forindi, forfam, etc loops. * ChangeLog src/gedlib/intrface.c src/gedlib/messages.c src/gedlib/refns.c src/hdrs/gedcom.h src/liflines/delete.c src/liflines/llinesi.h src/liflines/screen.c src/tools/dbverify.c llines & dbverify: Change terminology for records in index but lacking data from orphaned to missing data records. Remove llines UI for fixing these, and add dbverify M switch to fix them. * ChangeLog src/gedlib/indiseq.c src/gedlib/init.c src/gedlib/lldatabase.c src/gedlib/names.c src/gedlib/xlat.c src/hdrs/list.h src/interp/interp.c src/liflines/llexec.c src/liflines/main.c src/liflines/pedigree.c src/liflines/screen.c src/stdlib/list.c src/stdlib/listener.c src/stdlib/proptbls.c src/tools/dbverify.c Some internal list cleanup; new function remove_empty_list. Rename remove_list to remove_list2. * ChangeLog src/gedlib/intrface.c src/gedlib/xreffile.c src/hdrs/gedcom.h src/tools/dbverify.c dbverify: Add code to fix unfreed but missing records. * ChangeLog src/gedlib/intrface.c src/gedlib/xreffile.c src/hdrs/gedcom.h src/liflines/browse.c src/tools/dbverify.c dbverify: Add code to fix live records marked as deleted. Move some gedcom.h declarations to module areas. * ChangeLog src/hdrs/list.h src/stdlib/list.c Consolidate list element removal code into make_list_empty_impl. * ChangeLog src/gedlib/indiseq.c src/gedlib/init.c src/gedlib/xlat.c src/hdrs/list.h src/interp/builtin.c src/interp/interp.c src/stdlib/list.c src/stdlib/listener.c New function remove_list. * ChangeLog NEWS Fix NEWS now that missing record fixes are in dbverify not llines. * ChangeLog src/hdrs/pvalue.h src/interp/pvalalloc.c Remove PUNINT (use PNULL from the beginning). 2005-02-04 Perry Rapp * ChangeLog src/gedlib/node.c src/hdrs/gedcom.h src/tools/dbverify.c New function change_node_tag. dbverify: Fix bug in fix_bad_pointer which was corrupting node tags. * ChangeLog src/tools/dbverify.c dbverify: Change option -L to -l, and add to usage string. * ChangeLog src/tools/dbverify.c dbverify: Add orphan checking 2005-02-04 Jens Arvidsson * ChangeLog po/sv.po Update Swedish translation. 2005-02-04 Perry Rapp * ChangeLog src/gedlib/keytonod.c src/gedlib/node.c src/hdrs/gedcom.h src/tools/dbverify.c dbverify: Fix bad wife & child references in family. Fix fam_to_wife_node to ignore bad key (reference). Rewrite FORCHILDREN, FORCHILDRENx, etc for maximal efficiency, and to avoid ASSERTs. dbverify: Handle null keys in print outputs. * ChangeLog src/liflines/main.c Remove declaration of nonexistent check_version_compat function. * ChangeLog src/tools/dbverify.c dbverify: Change -P2 to -F, for fix family lineage. 2005-02-03 Perry Rapp * ChangeLog src/interp/alloc.c src/interp/interp.c src/stdlib/table.c Change rptinfo->functab from old table to generic table. * ChangeLog src/gedlib/keytonod.c src/liflines/add.c src/liflines/browse.c src/liflines/error.c src/liflines/screen.c src/stdlib/generic.c Minor optimization in copy_generic_value (skip clear_generic call). Avoid reentrancy in __fatal (to avoid infinite ASSERT loop). Fix some reference counts in adding new person and new family. * ChangeLog src/liflines/browse.c src/liflines/screen.c After adding new S/E/X record, browse to it. * ChangeLog src/interp/alloc.c src/interp/interp.c Change rptinfo->proctab from old table to generic table. * ChangeLog src/interp/interp.c src/stdlib/generic.c src/stdlib/table.c Change pactx->filetab from old table to generic table. Also fix leak of its elements (which are tables). * ChangeLog src/gedlib/node.c src/gedlib/record.c src/hdrs/list.h src/hdrs/object.h src/hdrs/table.h src/hdrs/vtable.h src/interp/alloc.c src/interp/interp.c src/interp/pvalue.c src/interp/symtab.c src/stdlib/array.c src/stdlib/generic.c src/stdlib/list.c src/stdlib/object.c src/stdlib/table.c src/stdlib/vtable.c Rename addref_obj to addref_object, and delref_obj to release_object. Rename delref_table to release_table, and delref_list to release_list. * ChangeLog src/gedlib/indiseq.c src/gedlib/intrface.c src/gedlib/keytonod.c src/gedlib/record.c src/gedlib/refns.c src/hdrs/gedcom.h src/interp/pvalue.c src/liflines/add.c src/liflines/browse.c Rename delref_record to release_record. Initialize vtable of record objects. * ChangeLog src/gedlib/brwslist.c src/liflines/lbrowse.c Make blel into an object. * ChangeLog src/gedlib/node.c src/hdrs/gedcom.h Skip over invalid spouses in FORFAMSS without ASSERT. Make next_spouse handle invalid spouses. Skip over invalid spouses in FORSPOUSES without ASSERT. Skip over invalid spouses in FORFAMSPOUSES without ASSERT. * ChangeLog src/hdrs/gedcom.h Skip over invalid children in FORCHILDRENx without ASSERT. * ChangeLog src/tools/dbverify.c Add "CHIL" to lineage_tags in dbverify. * ChangeLog src/btree/btrec.c src/gedlib/gstrings.c src/gedlib/node.c src/gedlib/spltjoin.c src/hdrs/gedcom.h src/interp/write.c src/liflines/advedit.c src/liflines/browse.c src/tools/dbverify.c dbverify: Remove unused fix_xxx members of struct work. dbverify: Implement fix/alter for missing spouse & children. Move normalize_indi from private browse.c to public spltjoin.c. Fix fam_to_list_string to not crash on bad HUSB. * ChangeLog src/tools/dbverify.c Cosmetic: fix unused arg warning in fix_bad_pointer. * ChangeLog src/tools/dbverify.c dbverify: Add shell for fixing family pointers. * ChangeLog src/gedlib/spltjoin.c src/hdrs/gedcom.h src/tools/dbverify.c dbverify: Implement code to fix family pointers. New function normalize_fam. 2005-02-02 Perry Rapp * ChangeLog src/gedlib/gedcomi.h src/gedlib/keytonod.c src/gedlib/record.c Fix ASSERT crash when cache fills. Remove function cel_set_record. New function record_remove_cel. Rename set_record_cache_info to record_set_cel; * ChangeLog src/gedlib/keytonod.c Add more ASSERTs to key_to_cacheel. * ChangeLog src/gedlib/date.c src/hdrs/table.h src/stdlib/table.c Handle generics in table valueofxx functions. Remove function valueofbool_impl. Implement table valuexx functions via valueofxx functions. Remove default value argument to valueof_int. * ChangeLog src/hdrs/generic.h src/hdrs/table.h src/interp/alloc.c src/interp/interpi.h src/stdlib/generic.c src/stdlib/table.c src/stdlib/vtable.c Make rptinfo into an object (with vtable). Store rptinfos in table as objects. * ChangeLog src/hdrs/pvalue.h src/interp/builtin.c src/interp/pvalue.c src/stdlib/list.c Create lists with refcount of 1. * ChangeLog src/gedlib/nodeio.c src/gedlib/refns.c src/hdrs/gedcom.h src/hdrs/liflines.h src/hdrs/table.h src/liflines/add.c src/liflines/browse.c src/liflines/edit.c src/liflines/llinesi.h src/liflines/screen.c src/liflines/tandem.c New function write_fam_to_file_for_edit (gains BOM handling). Split add_family into add_family_by_edit and local add_new_fam_to_db. Renamed add_new_indi to add_new_indi_to_db & made local. Prevent obscure crash by locking record during annotate_with_supplemental. * ChangeLog NEWS src/gedlib/intrface.c src/gedlib/keytonod.c src/gedlib/messages.c src/gedlib/refns.c src/hdrs/gedcom.h src/hdrs/liflines.h src/liflines/add.c src/liflines/ask.c src/liflines/delete.c src/liflines/llinesi.h src/liflines/screen.c New function ensure_cel_has_record. Fix so new cache elements get records immediately (avoids a crash adding new source). New function & UI choice choose_and_remove_orphaned_record. New function choose_and_remove_orphaned_record. New function delete_orphaned_record. 2005-02-01 Perry Rapp * ChangeLog src/stdlib/table.c Fix string leak in table_insert_ptr. * ChangeLog NEWS docs/ll-reportmanual.xml reports/st/st_all.ll reports/st/st_list.li src/interp/builtin.c *NEW reports/st/st_table.li Add self-test report for tables. Extend report 'empty' function to handle tables & sets. * ChangeLog docs/ll-reportmanual.xml Fix argument type specified for fornotes in report manual. * ChangeLog reports/st/st_db.li Add fornotes loop to st_db.li. * ChangeLog src/gedlib/gengedc.c Fix string leak in table_incr_item. * ChangeLog src/stdlib/table.c Remove no longer used table type TB_INT. * ChangeLog reports/Makefile.am Add new st_table.li to Makefile.am. * ChangeLog configure.in src/hdrs/version.h Bump version to 3.0.41d to differentiate from release. * ChangeLog src/gedlib/lloptions.c src/hdrs/lloptions.h Remove unused functions set_global_options, get_global_options. Change f_global to be generic table. * ChangeLog src/gedlib/date.c src/gedlib/gengedc.c src/gedlib/indiseq.c src/gedlib/init.c src/gedlib/lloptions.c src/gedlib/names.c src/hdrs/table.h src/stdlib/table.c Rename create_table_new to create_table_new. * ChangeLog src/hdrs/pvalue.h src/interp/builtin.c src/interp/pvalue.c src/stdlib/table.c New function create_pvalue_from_table. Addref new tables in create function. 2005-01-31 lifelines beta 3.0.41 RELEASE 2005-01-31 Perry Rapp * ChangeLog build/msvc6/btedit/bteditCmd.dsp build/msvc6/dbverify/dbverifyCmd.dsp src/gedlib/indiseq.c src/hdrs/indiseq.h src/tools/dbverify.c Fix compilation of dbverify, and tools MSVC6 projects (which I broke back on 2005-01-25). * ChangeLog src/hdrs/generic.h src/stdlib/generic.c Fix generics not to use unnamed member (to avoid pre-gcc 3 compilation problems). * ChangeLog NEWS Prepare NEWS for 3.0.41. * ChangeLog README.MAINTAINERS Revise release order to get new pot and po files into release. * ChangeLog build/msvc6/btedit/btedit.rc build/msvc6/dbverify/dbVerify.rc build/msvc6/llexec/llexec.dsp build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc src/hdrs/version.h Prepare MSVC6 projects for 3.0.41. Fix compilation of llexec project (which I broke back on 2005-01-25). * ChangeLog INSTALL configure.in build/rpm/lifelines.spec docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml po/da.po po/de.po po/el.po po/fr.po po/it.po po/nl.po po/pl.po po/sv.po Prepare 3.0.41 release. 2005-01-30 Matt Emmerton * ChangeLog src/interp/interp.c Set ranit=0 when cancel occurs in report selection box. Fixes sf bug#695876. 2005-01-30 Matt Emmerton * ChangeLog configure.in ADD: src/arch/nl_langinfo.c DEL: src/arch/langinfo.c Update configure script with proper detection logic for nl_langinfo(). Rename files to work properly with configure logic. Fix bug in our version of nl_langinfo() that was causing the ncurses-5.4 crashes. * ChangeLog build/msvc6/llexec/llexec.dsp build/msvc6/llines/llinesprj.dsp build/msvc6/dbverify/dbverifyCmd.dsp Update MSVC build files to handle changed filenames. * ChangeLog src/liflines/main.c Remove the ncurses-5.4 detection logic. 2005-01-30 Perry Rapp * ChangeLog build/rpm/lifelines.spec Cosmetic: add some comments in lifelines.spec. * ChangeLog src/stdlib/list.c Remove unused macro lrefcnt. * ChangeLog docs/ll-userguide.xml Reformat most of codeset explanations to fit 80 char screen (like surrounding sections). * ChangeLog docs/ll-userguide.xml Revise and extend user guide section on codesets. * ChangeLog src/gedlib/keytonod.c Cosmetic: remove obsolete variables from remove_from_cache. * ChangeLog src/interp/pvalue.c Cosmetic: Remove (my) questioning comment in set_pvalue. * ChangeLog src/gedlib/gengedc.c src/gedlib/indiseq.c src/hdrs/indiseq.h src/hdrs/pvalue.h src/interp/interp.c src/interp/pvalue.c src/liflines/ask.c src/liflines/delete.c src/liflines/lbrowse.c Move SORTEL (indiseq element) structure from indiseq.h to indiseq.c. Related const fixes. 2005-01-29 Perry Rapp * ChangeLog src/hdrs/table.h src/stdlib/table.c Remove unused function next_table_str. * ChangeLog src/gedlib/node.c src/gedlib/record.c src/gedlib/xlat.c src/hdrs/generic.h src/hdrs/table.h src/interp/alloc.c src/interp/interp.c src/interp/interpi.h src/interp/symtab.c src/stdlib/array.c src/stdlib/generic.c src/stdlib/list.c src/stdlib/table.c src/stdlib/zstr.c Encapsulated table & symbol table iterators into implementation (behind typedef'd pointers TABLE_ITER and SYMTAB_ITER). * ChangeLog src/interp/more.c Fix list leak in __extractnames. * ChangeLog src/gedlib/editmap.c Remove curses include & unneeded endwin call in editmap. * ChangeLog src/stdlib/rbtree.c Cosmetic: self-assign to avoid compiler warning for unused variable in NullFunction. 2005-01-28 Perry Rapp * ChangeLog src/interp/alloc.c Fix three zstr leaks in clear_rptinfos. * ChangeLog src/interp/lex.c Comment a leak location for later diagnosis. * ChangeLog src/gedlib/keytonod.c src/interp/symtab.c Fix key leak in remove_cel_from_cache. * ChangeLog src/interp/interp.c Fix leak of plist in interp_program_list. * ChangeLog reports/Makefile.am Move st reports into own variable and add missing st_name and st_list files. * ChangeLog reports/Makefile.am Add explanatory comments to targets in reports/Makefile.am, and remove ST only target. * ChangeLog src/interp/more.c Fix string leak in __rjustify. * ChangeLog src/stdlib/listener.c Revise delete_listener to free list if empty, to fix leak in empty lists. 2005-01-27 Perry Rapp * ChangeLog src/gedlib/gedcomi.h src/gedlib/keytonod.c src/gedlib/nodeio.c src/gedlib/record.c src/hdrs/gedcom.h src/interp/pvalue.c Give cacheel pointer to record, so we can reuse records. Rename create_record_for_cel to get_record_for_cel and reuse record. Fix delete_cache to actually get all active cache elements (not just first in each hash chain). * ChangeLog src/gedlib/record.c Move free_rec up next to alloc_new_record and also declare it. * ChangeLog src/gedlib/indiseq.c src/gedlib/keytonod.c src/gedlib/names.c src/liflines/browse.c Comment more functions which addref record. Fix record leak in key_to_indiseq. * ChangeLog src/liflines/browse.c Fix current record leak returning from browse_indi_modes. * ChangeLog src/liflines/browse.c New function setrecord. Fix record leaks in browse_indi_modes. * ChangeLog src/liflines/browse.c Fix record leaks in browse_fam. * ChangeLog src/gedlib/choose.c src/liflines/browse.c Fix record leaks in browse_aux. * ChangeLog src/gedlib/gedcomi.h src/gedlib/keytonod.c src/gedlib/nodeio.c src/gedlib/record.c src/liflines/add.c Fix record leak in add_indi_by_edit. Fix set_record_cache_info to hook cel & record together completely. * ChangeLog src/gedlib/init.c src/gedlib/xlat.c src/hdrs/xlat.h New function xlat_shutdown to fix some xlat leaks. * ChangeLog src/gedlib/lldatabase.c src/gedlib/xreffile.c Fix some leaks in closexref. * ChangeLog src/gedlib/xlat.c Fix leak in free_xlat. * ChangeLog src/btree/opnbtree.c Fix block & index leak in initbtree. * ChangeLog src/gedlib/charmaps.c Fix zstr leak in init_map_from_rec. * ChangeLog src/gedlib/init.c src/gedlib/lldatabase.c src/hdrs/gedcom.h Fix lldb leaks. * ChangeLog src/gedlib/valtable.c Fix string leak in init_valtab_from_string. 2005-01-26 Stephen Dum * ChangeLog docs/ll-reportmanual.xml docs/ll-userguide.sv.xml docs/ll-userguide.xml Make docbook versions consistant in xml files and 4.2. 2005-01-25 Perry Rapp * ChangeLog src/gedlib/intrface.c src/gedlib/keytonod.c src/gedlib/names.c src/gedlib/refns.c src/gedlib/remove.c src/gedlib/xreffile.c src/hdrs/gedcom.h src/hdrs/table.h src/liflines/add.c src/stdlib/table.c Convert record macros nzkey, nzkeynum, nztype to functions, and const correctness fixes. * ChangeLog build/msvc6/llines/llinesprj.dsp src/btree/Makefile.am src/gedlib/Makefile.am src/gedlib/gedcomi.h src/gedlib/indiseq.c src/gedlib/intrface.c src/gedlib/keytonod.c src/gedlib/node.c src/hdrs/ src/hdrs/btree.h src/hdrs/gedcom.h src/hdrs/pvalue.h src/interp/builtin.c src/interp/more.c src/interp/pvalue.c src/liflines/add.c src/stdlib/list.c *NEW src/btree/btrec.c *emptied src/btree/record.c *NEW src/gedlib/record.c Move record struct & all associated functions into new file record.c. Rename btree/record.c to btrec.c. Rename pvalue_to_rec to pvalue_to_record. Make records objects and reference counted. * ChangeLog src/gedlib/indiseq.c src/hdrs/gedcom.h Free records in macros FORCHILDRENx, FORCHILDREN, FORFAMCS. Fix bug in remove_indiseq. Fix multiple delete bug in FORFAMS. * ChangeLog src/liflines/browse.c Fix goto_indi_child not to use deleted record. * ChangeLog reports/st/st_db.li Add children loop to st_db.li. * ChangeLog src/gedlib/keytonod.c src/interp/pvalue.c Fix record leak in create_pvalue_from_key_impl. 2005-01-24 Perry Rapp * ChangeLog src/gedlib/init.c src/gedlib/node.c src/stdlib/table.c Convert tagtable into generic table. * ChangeLog src/interp/builtin.c Modify __indi not to crash on empty string. * ChangeLog src/btree/index.c Free index cache blocks in freecache. * ChangeLog src/stdlib/table.c Fix key and string value leaks in table_insert_string. 2005-01-23 Perry Rapp * ChangeLog src/gedlib/date.c src/stdlib/table.c Revise date keywordtbl to use new generic table. Fix new_table_entry_impl to duplicate key (generic tables duplicate all keys). * ChangeLog reports/st/st_db.li src/gedlib/indiseq.c src/hdrs/indiseq.h src/interp/intrpseq.c Change parent_indiseq, child_indiseq, and sibling_indiseq to use new generic table. Add childset, siblingset, spouseset, ancestorset, descendentset, uniqueset calls to st_db.li. Revise append_indiseq_pval to always copy the key (eliminate the alloc arg). * ChangeLog src/interp/intrpseq.c Fix __indiset to use prog_var_error (& therefore report debugger). * ChangeLog src/interp/alloc.c src/interp/intrpseq.c Fix __addtoset to use prog_var_error (& therefore report debugger). New error message nonsetx. * ChangeLog docs/ll-reportmanual.xml reports/st/st_db.li src/interp/intrpseq.c Fix return values (VOID) of addtoset & deletefromset in manual. Add inset and deletefromset calls to st_db.li. Fix __inset to use prog_var_error (& therefore report debugger). Fix __deletefromset to use prog_var_error (& therefore report debugger). * ChangeLog reports/st/st_db.li src/interp/alloc.c src/interp/intrpseq.c Fix __namesort, __keysort, __valuesort to use prog_var_error. New error message nonset1. Add dt_db.li calls to set sort functions. * ChangeLog src/hdrs/generic.h src/hdrs/table.h src/stdlib/generic.c src/stdlib/rbtree.c src/stdlib/stack.c src/stdlib/stack.h Cosmetic & cleanup for compiler warnings. * ChangeLog reports/st/st_db.li src/interp/intrpseq.c Fix __uniqueset, __union, __intersect, __difference to use prog_var_error. Add interset, difference calls to st_db.li. * ChangeLog src/gedlib/gengedc.c src/hdrs/standard.h src/hdrs/table.h src/stdlib/table.c Convert gengedcom tables to new generic style. Adjust traverse_table_param to handle generic values. * ChangeLog src/gedlib/indiseq.c Convert descendent_indiseq to use new generic tables. * ChangeLog src/gedlib/names.c Convert names.c to use generic tables. * ChangeLog reports/st/st_db.li src/interp/intrpseq.c Fix __parentset, __childset, __siblingset, __spouseset, __ancestorset, __descendentset, __gengedcom, __gengedcomweak, __gengedcomstrong to use prog_var_error. Modify st_db.li to call gengedcom, gengedcomweak. * ChangeLog src/hdrs/generic.h src/hdrs/standard.h Use compiler guard to prevent more than one instance of GENERIC typedef. * ChangeLog src/hdrs/generic.h src/hdrs/standard.h Fix just added compiler guard to work properly (needs define). 2005-01-22 Perry Rapp * ChangeLog src/stdlib/generic.c src/stdlib/table.c More infrastructure for generics & mixed tables. *ChangeLog src/gedlib/date.c src/gedlib/editvtab.c src/gedlib/indiseq.c src/gedlib/init.c src/gedlib/keytonod.c src/gedlib/lloptions.c src/gedlib/names.c src/gedlib/xlat.c src/hdrs/table.h src/interp/builtin.c src/interp/interp.c src/liflines/import.c src/liflines/llexec.c src/liflines/main.c src/liflines/screen.c src/liflines/valgdcom.c src/stdlib/proptbls.c src/stdlib/table.c src/tools/dbverify.c Rename create_table to create_table_old2. * ChangeLog build/msvc6/dbverify/dbverifyCmd.dsp Add object.c, generic.c, and miscellaneous headers to VC6 project, to fix compilation. 2005-01-21 Perry Rapp * ChangeLog src/gedlib/lloptions.c src/hdrs/generic.h src/hdrs/table.h src/stdlib/generic.c src/stdlib/table.c Continue converting tables to generics: new function create_table_new. 2005-01-19 Stephen Dum * ChangeLog INSTALL Add some text to INSTALL describing where to find doc generation tools. 2005-01-20 Perry Rapp * ChangeLog src/stdlib/table.c Fix next_table_str for generic values. 2005-01-19 Perry Rapp * ChangeLog src/stdlib/table.c Fix free_contents for generic values. 2005-01-18 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp src/gedlib/gengedc.c src/hdrs/table.h src/stdlib/table.c Add new generic module (union and selector). Start converting table to use generic entries. Remove table methods access_value_int, access_value_ptr, and access_value_str. Implement generics in integers stored in table. *NEW src/hdrs/generic.h *NEW src/stdlib/generic.c New generic module. * ChangeLog src/hdrs/Makefile.am src/stdlib/Makefile.am Add new generic files to Makefiles. 2005-01-17 Perry Rapp * ChangeLog src/gedlib/names.c const correct fix in callback signature (traverse_name_callback) * ChangeLog src/gedlib/remove.c Prevent compiler warnings: self-assign unused argument in remove_fam_record; remove declaration of nonexistent function count_xrefs_in_list. * ChangeLog src/gedlib/remove.c src/interp/interp.c src/stdlib/zstr.c Cleanup: Mark unused function argument as unused. * ChangeLog src/interp/pvalue.c Code cleanup: unused parameters and remove obsolete functions (pvalue_to_pint, pvalue_to_pfloat). * ChangeLog src/gedlib/names.c src/hdrs/gedcom.h Const-correctness: fix callback of traverse_names to use const string key. 2005-01-16 Perry Rapp * ChangeLog po/fr.po Fix missing errors/warnings plural forms in French catalog. * ChangeLog configure.in src/hdrs/version.h Bump version to 3.0.40i, for interim between releases. * ChangeLog src/interp/builtin.c src/interp/intrpseq.c src/interp/more.c Convert more pvalue access to encapsulated calls. * ChangeLog src/hdrs/gedcom.h src/gedlib/node.c Add object vtable to node. * ChangeLog src/stdlib/Makefile.am Add lacking headers to EXTRA_DIST in src/stdlib/Makefile.am. * ChangeLog src/hdrs/pvalue.h src/interp/builtin.c src/interp/more.c src/interp/pvalmath.c src/interp/pvalue.c Rename PANY to PNULL. * ChangeLog src/btree/traverse.c src/gedlib/intrface.c src/gedlib/nodeio.c src/gedlib/refns.c src/hdrs/btree.h src/hdrs/gedcom.h Fix const typing in db traversal. * ChangeLog src/hdrs/pvalue.h src/hdrs/pvalue.h src/interp/more.c src/interp/pvalalloc.c src/interp/pvalue.c Remove PNONE (use PNULL instead). * ChangeLog Fix ChangeLog (contents were duplicated due to non-merged conflict). 2005-01-15 Perry Rapp * ChangeLog src/gedlib/init.c src/hdrs/list.h src/interp/pvalue.c src/liflines/screen.c src/stdlib/list.c src/ui/ui_cli.c Move tag_list inside list.c, and implement vtable for list. * ChangeLog src/hdrs/pvalue.h src/interp/builtin.c src/interp/pvalue.c New encapsulating wrappers create_pvalue_from_list, create_pvalue_from_table, and set_pvalue_seq. Renamed create_pvalue_from_set to create_pvalue_from_seq. Reordered pvalue type blocks into order of types in pvalue.h (int,float,bool,string,node,indi,...). * ChangeLog src/hdrs/pvalue.h src/interp/pvalmath.c Removed pvalue_to_pfloat & pvalue_to_pint. 2005-01-14 Perry Rapp * ChangeLog README.MAINTAINERS More instructions for building release, including updating the message catalog template (lifelines.pot) first. 2005-01-14 Jens Arvidsson * ChangeLog po/sv.po Update Swedish translation (1.44->1.46, 9 changes). 2005-01-14 Perry Rapp * ChangeLog po/sv.po Change no-break space to space (in [ Minska menu item). * ChangeLog src/liflines/menuset.c Fix char to uchar for non-ASCII menu keys. * ChangeLog src/interp/eval.c Fix evaluate_ufunc not to crash deleting symbol table on undefined function. Fixes sf bug#1102127 (ASSERT on call to undefined function) * ChangeLog src/gedlib/indiseq.c src/hdrs/gedcom.h Fix parent_indiseq to handle non-traditional families. New traversal macro FORFAMSPOUSES. Fixes sf bug#1102130 (parentset doesn't include extra parents) * ChangeLog src/gedlib/indiseq.c Simplify indi_to_spouses to use new FORFAMSPOUSES. * ChangeLog src/gedlib/indiseq.c Fix ancestor_indiseq to handle extra parents. Fixes sf bug#1102138 (ancestorset doesn't include extra parents) * ChangeLog src/interp/interp.c Fix interp_call to avoid ASSERT trying to delete empty symtab. * ChangeLog po/fr.po Updated French message catalog from Patrick Texier (42 changes). 2005-01-13 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp src/gedlib/gengedc.c src/hdrs/llstdlib.h src/hdrs/table.h src/interp/builtin.c src/interp/interp.c src/interp/pvalue.c src/liflines/error.c src/liflines/main.c src/stdlib/table.c *NEW src/stdlib/rbtree.c *NEW src/stdlib/rbtree.h *NEW src/stdlib/stack.c *NEW src/stdlib/stack.h *NEW src/stdlib/stdlib.c Move table data declarations inside table.c. Add red/black (rbtree.*) and stack (stack.*) modules. * ChangeLog src/stdlib/Makefile.am src/tools/btedit.c src/tools/dbverify.c Add new files to Makefile.am. Fix __fatal implementations for const-correctness. 2005-01-12 Stephen Dum * ChangeLog docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.txt INSTALL update docs from xml's Add bison to list of dependencies 2005-01-12 lifelines beta 3.0.40 RELEASE 2005-01-13 Perry Rapp * ChangeLog src/liflines/loadsave.c Fix initial counts for save (row was wrong and lacked i18n). * ChangeLog src/liflines/loadsave.c i18n import_validating ("0 Warnings" and "0 Errors") * ChangeLog reports/st/st_string.li Fix strconcat and concat tests on undef (now return "" not null). * ChangeLog INSTALL NEWS configure.in build/rpm/lifelines.spec docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml src/hdrs/version.h Bump version to 3.0.40. * ChangeLog build/msvc6/llines/llines.rc build/msvc6/llines/llinesprj.dsp Bump windows versions. 2005-01-12 Perry Rapp * ChangeLog src/gedlib/remove.c Fix infinite loop in remove_any_xrefs_node_list. 2005-01-12 Matt Emmerton * ChangeLog configure.in Force the use of GNU Bison. 2005-01-12 Perry Rapp * ChangeLog configure.in src/hdrs/version.h Bump version to 3.0.39i to differentiate interim tarballs from released version. * ChangeLog docs/ll-userguide.xml Clarify use of environment in properties (and list environment variables alphabetically). 2005-01-11 Matt Emmerton * ChangeLog reports/Makefile.am Changes to Makefile.am to always install reports. This fixes problems on systems with older versions of automake that don't understand the newer syntax and end up not installing any of the reports. 2005-01-10 Stephen Dum * ChangeLog docs/ll-reportmanual.xml src/gedlib/gengedc.c src/gedlib/indiseq.c src/hdrs/gedcom.h src/liflines/browse.c src/liflines/show.c Update FORFAMSS to handle non-traditional families Create FORFAMS to iterate only on families (doesn't compute spouses). 2005-01-09 Perry Rapp * ChangeLog NEWS List recently added features in NEWS file. * ChangeLog src/interp/interp.c Avoid ASSERT running report with no main proc. Fixes sf bug#1099208 (FATAL error if no main() function in report). * ChangeLog reports/st/st_convert.li Remove Greek SAS test from string self-test, as special sigma code is not implemented. 2005-01-08 Matt Emmerton * ChangeLog src/interp/intrpseq.c src/interp/builtin.c Extend length() to work on SETs and TABLEs. Change lengthset() to use length() internally. 2005-01-08 Perry Rapp * ChangeLog src/gedlib/intrface.c src/gedlib/keytonod.c src/gedlib/messages.c src/gedlib/names.c src/gedlib/refns.c src/gedlib/remove.c src/gedlib/xreffile.c src/hdrs/gedcom.h src/hdrs/uiprompts.h src/interp/more.c src/liflines/ask.c src/liflines/delete.c src/liflines/llinesi.h src/liflines/merge.c src/liflines/screen.c Add remove function for any records. Cleanup of existing remove code & some const correct propagation. * ChangeLog src/liflines/Makefile.am src/stdlib/Makefile.am Fix typo in include for libintl.h. * ChangeLog sc/liflines/main.c Cosmetic & comments. 2005-01-08 lifelines beta 3.0.39 RELEASE 2005-01-08 Perry Rapp * ChangeLog src/gedlib/remove.c Fix child removal code for empty person. Fixes sf bug#1097629 (Deleting an empty person who is a child will lead to an ASSERT) * ChangeLog build/msvc6/llines/lines.rc Set win32 version to 3.0.39.15007. * ChangeLog NEWS Add recent bugfixes for arcane family issues. * ChangeLog build/msvc6/btedit/btedit.rc build/msvc6/dbverify/dbVerify.rc build/msvc6/llexec/llexec.dsp build/msvc6/llexec/llexec.rc Set win32 versions to 3.0.39.15007 Add stdlib/log.c to llexec msvc6 proj. 2005-01-07 Matt Emmerton * ChangeLog build/autotools/acinclude.m4 Fix up to keep automake-1.9 from complaining. 2005-01-07 Matt Emmerton * ChangeLog src/interp/interpi.h src/interp/interp.c src/interp/eval.c src/interp/symtab.c Convert SYMTAB data type to be a pointer. Update create_symtab() and remove_symtab() as needed. Remove null_symtab(). 2005-01-07 Perry Rapp * ChangeLog src/liflines/show.c src/gedlib/remove.c Fix the mother slot fix to not crash with no parents. Cosmetic: add more comments to remove code. 2005-01-06 Stephen Dum * ChangeLog INSTALL configure.in build/msvc6/llines/llines.rc build/rpm/lifelines.spec docs/ll-devguide.xml docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt docs/ll-reportmanual.xml docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.txt docs/ll-userguide.xml src/hdrs/version.h Updated all version numbers from 3.0.38 to 3.0.39. * ChangeLog src/liflines/show.c make family screen show mother in mother slot if only one parent. 2005-01-07 Perry Rapp * ChangeLog src/gedlib/keytonod.c Fix cache double-delete bug Fixes sf bug#1097599 (cache node pointers not cleared, later deleted again) * ChangeLog src/gedlib/remove.c Fix indi removal code for unusual cases Fixes sf bug#1097583 (Deleting person of unknown sex in family) * ChangeLog src/gedlib/remove.c Fix remove_spouse for removing spouse of unknown gender. Fixes sf bug#1097608 (Deleting spouse of unknown sex in family) * ChangeLog src/liflines/show.c Handle zero parent families gracefully. Fixes sf bug#1097631 (Crash in zero parent family) 2005-01-06 Perry Rapp * ChangeLog src/liflines/main.c Move curses check to own function, ifndef out for cygwin. * ChangeLog README.LAYOUT Update description of docs subdirectory. 2005-01-05 Perry Rapp * ChangeLog src/liflines/screen.c Fix list browse to respect config option UppercaseSurname 2005-01-04 Stephen Dum * ChangeLog docs/Makefile.am remove gnu-ism from docs makefile 2005-01-05 Perry Rapp * ChangeLog src/interp/pvalmath.c Improved error message in num_conform_pvalues Fix some copy&paste typos in calls to invalid_numeric_type. 2005-01-03 Stephen Dum * Changelog reports/cgi_html.li reports/dump_html_sd.ll reports/extract_html.ll reports/fileindex.ll reports/html.dn.ll reports/index_html.ll src/gedlib/node.c src/hdrs/gedcom.h src/liflines/show.c docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.txt docs/ll-userguide.xml remove hardcoded database owner names and email addresses from reports and use getproperty("user.fullname") and "user.email" instead. Fix spouses iterator to iterate over all spouses of a family. Modify family browse screen to display first two parents (regardless of sex). 2005-01-03 Perry Rapp * ChangeLog src/hdrs/Makefile.am Add dbfuncs.h and dbfuncsi.h to Makefile.am. 2005-01-02 Perry Rapp * ChangeLog src/liflines/browse.c Fix autoadd_xref to put nodes in lifelines canonical order. (rf. sf.net bug#1059724: Problem with add source/event/other commands) * ChangeLog docs/ll-reportmanual.pdf Change docs/ll-reportmanual.pdf to binary file type in cvs * ChangeLog NEWS Record recent bug fixes and feature in NEWS file. * ChangeLog src/liflines/valgdcom.c Check key length when importing GEDCOM file. (rf. sf.net bug#1094568: Import doesn't check incoming key length) * ChangeLog docs/ll-reportmanual.pdf docs/ll-userguide.pdf docs/quickref.pdf Ran "cvs admin -kb *.pdf" to make all pdfs binary in cvs. * ChangeLog src/interp/functab.c src/interp/interpi.h src/interp/more.c Change source function name from __getrecord to __dereference (because it returns a node not a record). 2005-01-01 Perry Rapp * ChangeLog src/hdrs/arch.h src/interp/builtin.c Fixes to make newest changes to __test(...) compile on MS-Windows. Adjust tabs to match surrounding code in three lines in _test(). * ChangeLog INSTALL Add note in INSTALL redirecting to README.DEVELOPERS for cvs build. * ChangeLog src/liflines/swap.c Add ASSERT in swap_families to verify its args are FAMS nodes. (rf. sf.net bug#1059724: Problem with add source/event/other commands) * ChangeLog src/hdrs/arch.h src/interp/builtin.c Remove support for X_OK in test() (not really needed and not supported on MS-Windows). 2005-01-01 Stephen Dum * Changelog po/fr.po reports/anniver.ll, reports/cron.ll src/interp/builtin.c Fix options call in cron.ll and anniver.ll and check in new fr.po from Patrick Texier. fixed test so that it always returns a value. 2005-01-01 Perry Rapp * ChangeLog build/msvc6/btedit/btedit.rc build/msvc6/btedit/bteditCmd.dsp build/msvc6/btedit/resource.h build/msvc6/dbverify/config.h build/msvc6/dbverify/dbVerify.rc build/msvc6/dbverify/dbverifyCmd.dsp build/msvc6/dbverify/resource.h build/msvc6/llexec/config.h build/msvc6/llexec/llexec.dsp build/msvc6/llexec/llexec.rc build/msvc6/llexec/resource.h build/msvc6/llines/config.h build/msvc6/llines/llines.rc build/msvc6/llines/llinesprj.dsp build/msvc6/llines/resource.h Remove extra carriage returns from files saved in DOS mode. 2005-01-01 Stephen Dum *Changelog liflines/add.c interp/builtin.c Fix test operator to fail rather than segfault when given null arguments. Fix add_family() to use traditional flag and allow creating non-traditional families when -n option is used 2005-01-01 Perry Rapp * ChangeLog src/interp/more.c Bugfix to prevent crash in dereference with bad report pointer. 2004-12-31 Perry Rapp * ChangeLog src/hdrs/win32/curses.h Fix compilation on MS-Windows (add cursors version macros). * ChangeLog src/hdrs/arch.h src/interp/builtin.c Fix compilation on MS-Windows (old stat macros), and bug in test function, and some pvalue leaks in test. 2004-12-30 Stephen Dum *Changelog reports/count_paternal_desc.ll reports/desc_ged.ll Alter scripts to use lengthset rather than copying loop counter 2004-12-27 Stephen Dum *Changelog reports/count_paternal_desc.ll reports/desc_ged.ll fix two scripts that assumed loop counter was valid outside the loop. (see bug id 1090607) 2004-11-03 Stephen Dum * ChangeLog src/gedlib/indiseq.c src/gedlib/lloptions.c parent_indiseq() was using a static buffer after it was invalidated. Fixed a minor memory leak in options code. 2004-10-27 Stephen Dum * ChangeLog docs/ll-reportmanual.xml docs/ll-reportmanual.pdf docs/ll-reportmanual.txt docs/ll-reportmanual.html src/btree/utils.c src/gedlib/nodeio.c src/hdrs/btree.h src/liflines/import.c src/liflines/valgdcom.c Some minor bug fixes. ll-reportmanual.xml was missing some end of block tags. Replace some explict constants with their Macro name. Make buffer in next_fp_to_node() static so it's contents remain valid after return (an error message was getting lost). Fix gedcom read routines so that line numbers reported when errors are encountered are accurate. Fix check_akey() to assure key's in correct format when gedcom is read in, rather than an assert later when accessing the key. 2004-10-27 Matt Emmerton Revert changes made on 2004-10-16, *except* for the change to src/btree/index.c (which just had changes to comments.) 2004-10-16 Matt Emmerton * ChangeLog src/btree/index.c src/btree/traverse.c src/gedlib/intrface.c src/gedlib/names.c src/gedlib/refns.c src/hdrs/btree.h src/hdrs/gedcom.h src/liflines/scan.c src/tools/dbverify.c Use #defines to simplify traversal routine function pointers and argument lists. 2004-10-15 Matt Emmerton * ChangeLog src/ui/ui_cli.c src/tools/dbverify.c src/interp/pvalue.c src/gedlib/refns.c Silence compiler warnings from unused parameters. Fix comments on freecache routine. Add cast to avoid compiler warning. 2004-10-15 Matt Emmerton * ChangeLog src/btree/addkey.c src/btree/btreei.h src/btree/index.c src/btree/opnbtree.c src/btree/record.c src/btree/traverse.c src/hdrs/btree.h Remove btree parameter from cmpkeys, writeindex, readindex. Add freecache routine. * tools/dbverify.c Remove btree parameter from cmpkeys, check_block, check_keys, printblock, readindex routines. Remove unused variables. Silence compiler warnings from unused parameters. * gedlib/keytonod.c Remove unused variable. * stdlib/vtable.c Silence compiler warnings from unused parameters. 2004-10-14 Matt Emmerton * ChangeLog docs/ll-reportmanual.xml src/interp/interpi.h src/interp/functab.c src/interp/builtin.c Add 'clear' operator. 2004-10-13 Stephen Dum * ChangeLog reports/pdesc.ll Apply patch for null indi reference discussed on llines mailing list 2004-10-10 Stephen Dum * ChangeLog docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt Update formatted reportmanual 2004-10-03 Matt Emmerton * ChangeLog interp/builtin.c interp/functab.c interp/interpi.h Add __test (test) report operator, which can be used to test for the existence of files, directories and properties thereof. 2004-09-06 Perry Rapp * ChangeLog gedlib/keytonod.c Fix cache bug (false match in is_record_loaded for @I50@ vs I500). sf bug#1015745. 2004-09-02 Robert Simms * ChangeLog, reports/book-latex.ll Enhanced book-latex.ll to filter text to render harmless those characters meaningful to the LaTeX system. Also added an option to supress e-mail addresses of source authors when they're specified as EMAI subnodes of AUTH nodes. Also indented all of the code with spaces (instead of tabs/spaces mix) to make the code easier to follow. 2004-08-28 Stephen Dum * ChangeLog, reports/eol.ll, src/gedlib/names.c Cleanup of eol.ll. Comment out an unused routine in names.c and remove an unnecessary strsave call. 2004-07-21 Stephen Dum * removed ps-circ/ps-circ.ll ps-circ/ps-circ.ps These turned out to be earlier versions of ps-circle.ll (which has the ps file imbeded.) 2004-07-20 Stephen Dum * ChangeLog docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.sv.html docs/ll-userguide.sv.xml docs/ll-userguide.txt docs/ll-userguide.xml Fix Tracker ID 836283 -- Well Perry Fixed it long ago, just adjust the documentation to match. 2004-07-20 Stephen Dum * ChangeLog reports/famrep.ll Fix Tracker Id 609265 - Apply Perry's fix 2004-07-20 Stephen Dum * ChangeLog docs/ll-userguide.xml docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.txt docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt In the reports directory... Makefile.am CREDIT README grand.ll desc-tex2/README desc-tex2/desc-tex.ll desc-tex2/desc-tex2.ll desc-tex2/drsetup.tex desc-tex2/drtree.tex desc-tex2/ex1.tex desc-tex2/extree1.tex desc-tex2/extree2.tex desc-tex2/mysetup.tex desc-tex2/poster.doc desc-tex2/poster.tex desc-tex2/poster1.tex desc-tex2/poster2.tex desc-tex2/pstricks.con desc-tex2/pstricks.pro desc-tex2/pstricks.tex desc-tex2/setup.tex desc-tex2/tree.tex novel/novel.README novel/novel.head novel/novel.intro novel/novel.ll pedtex/pedtex.ll pedtex/pedtex.readme pedtex/setup.tex pedtex/tree.tex ps-circ/ps-circ.ll ps-circ/ps-circ.ps ps-fan/ps-fan.ps src/gedlib/charprops.c src/gedlib/init.c src/gedlib/keytonod.c src/gedlib/names.c src/gedlib/nodeio.c src/gedlib/xlat.c src/gedlib/xreffile.c src/interp/pvalue.c src/liflines/loadsave.c src/stdlib/icvt.c src/stdlib/strutf8.c Document GuiCodeset and fix spelling of GedcomCodeset and EditorCodeset - as per Tracker id 837378 Add more reports from Vincent Broman's recent posting, as well as making the 'lint' changes to the sources that he made. 2004-07-19 Stephen Dum lines.cfg reports/bday_cover.ll reports/cron.ll reports/regvital.ll Some more minor updates to reports 2004-07-18 Stephen Dum src/btree/opnbtree.c src/gedlib/keytonod.c src/gedlib/names.c Clean up some memory leaks. 2004-07-18 Stephen Dum More reports directory updates - Merging Vincent Broman's Changes to reports. The following were added to the reports directory: af-import.ll afn_match.ll ahnenliste.ll all_anc_lines.ll allfam10c.ll altern.ll anc2_ged.ll bday_cover.ll bib2html.c browser.ll burial_index.ll bury.c BW_descendants.ll cgi_html.li common.ll cons.ll cont.ll count_dup.ll db_summary.ll desc_ged.ll descged.ll desc_html.ll desc-tree.ll divorce.li drep2.ll d-rtf.ll dump-ances.ll dump_html.ll dump_html_sd.ll eol.ll est_life_span.ll extract_gedcom.ll extract_html.ll extract_set.li fam_ged.ll famgroup.ll familycheck.ll fileindex.ll gedall.ll gedlist.ll gedlod.ll gedn.ll gedtags.ll ged_write.li genancc2.ll gendex.ll genetics2.ll getbaptism.li givens_gender.ll hp-anc.ll htmlahnen.ll html.dn.ll htmlfam.ll html.ll igi-filter.ll igi-import.ll igi-search.ll index_html.ll interestset.li ldsgedcom.li line.ll listsour.ll ll2html4.ll ll2visio.ll maritalinfo.ll name2html.ll net-ped.ll outsources.li paf-export.ll paf-import.ll pedigree_html.ll pedigreelhs.ll pedigree.ll ped.ll pointers.ll prompt.li ps-circle.ll reg_html.ll register-rtf.ll relink.ll rfc.ll rootset.ll rtflib.li sealing_line.ll sgsgen.ll shorten.li sour2.li sources_bib.ll sour.li src.ll src-rtf.ll ssdi_aid.ll ssdi-import.ll ssdi-search-list.ll tools.li tree_density.ll ttable.ll upl2.li wife.ll xml-dtd.ll xmlize.ll zombies.ll And the following files were udated: 2ppage.ll 4gen1.ll 6gen1.ll 8gen1.ll ahnentafel.ll alive.ll alllines.ll alllines.sgml.ll ancestors2.ll anniver.ll bias.ll bkdes16-1.ll book-latex.ll cid.ll connect2.ll count_anc.ll count_desc.ll count_paternal_desc.ll cousins.ll coverage.ll cron.ll dates.ll desc-henry.ll fam10c.ll fam16rn1.ll fami-grps.ll familyisfm1.ll famtree1.ll fdesc.ll find.ll findmissing.ll fix_nameplac.ll formatted_gedcom.ll genancc1.ll gender_order.ll genetics.ll gen_index givens_gender_finder.ll hasnotes1.ll igi-merge.ll index1.ll index_mm.ll indiv.ll infant_mortality.ll lldb.ll longlines.ll Makefile.am marriages1.ll menu.ll namesformat1.ll names_freq.ll nonpatronymics.ll pafcompat.ll partition.ll pedigreel.ll places.ll ps-pedigree.ll register1.ll register-tex.ll regvital1.ll regvital.ll related_spouses.ll relate.ll relation.ll rllgen.ll rslgen.ll showlines1.ll simpleged.ll soundex1.ll soundex-isfm.ll sources.ll stats.ll st/st_all.ll st/st_aux.li st/st_collate_8859-1.li st/st_collate.li st/st_collate_UTF-8.li st/st_convert.li st/st_date.li st/st_db.li st/st_list.li st/st_name.li st/st_number.li st/st_string.li st/st_string_UTF-8.li surname1.ll timeline1.ll timeline2.ll tinytafel1.ll verify.ll 2004-07-18 Stephen Dum Makefile.am src/interp/interp.c in reports directory remove: ps-anc2.ll ps-anc5.ll ps-anc6.ll ps-anc7.ll ps-anc8.ll add: ps-anc.ll remove: regvital1.ll remove: famrep1.ll famrep3.ll famrep6.ll; add: famrep.ll remove: indiv2.r.ll indiv3.ll: add: indiv.ll remove: pdesc1.ll pdesc2.r.ll pdesc3.ll pdesc4.ll; add: pdesc.ll remove: namefreq2.ll; add: namefreq.ll remove: select.li; add: select.ll The following are renamed from .ll to .li extension st/st_aux.ll st/st_collate.ll st/st_collate_8859-1.ll st/st_collate_UTF-8.ll st/st_convert.ll st/st_date.ll st/st_db.ll st/st_list.ll st/st_name.ll st/st_number.ll st/st_string.ll st/st_string_UTF-8.ll Starting clean up of reports. Removed instances where a reports multiple versions are checked in as report1.ll, report2.ll, etc. They are now checked in as report.ll. The earlier versions are checked in as report.ll so that the history of the earlier versions are preserved. The test programs in st directory are renamed to .li scripts since they are intended to be included. Also llines modified to look for either .li or .ll extention for files being included. 2004-06-18 Marc Nozell * reports/register-tex.ll: Checked in updates by Robert Simms that can render characters meaningful to the LaTeX system as if they were ordinary characters. 2004-06-18 Marc Nozell * reports/register1-dot.ll: New report based on register1.ll that generates input to the graphviz tool chain 2004-05-15 Stephen Dum * ChangeLog src/gedlib/lldatabase.c src/interp/builtin.c Fixes for bug id's 954704 'table inert() ASSERT's if value inserted is null; and id 950712 a redundent include in lldatabase.c 2004-05-08 lifelines beta 3.0.38 RELEASE 2004-05-08 Perry Rapp * ChangeLog LINGUAS *NEW po/nl.po Added new Dutch translation. * ChangeLog INSTALL NEWS configure.in build/msvc6/llines/llines.rc build/rpm/lifelines.spec docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml src/hdrs/version.h Updated all version numbers from 3.0.37 to 3.0.38. 2004-04-14 Stephen Dum * ChangeLog INSTALL docs/ll-userguide.xml src/hdrs/fpattern.h src/interp/pvalue.c src/stdlib/fpattern.c Document some of the build dependencies in the INSTALL file. fix bug where two pointers to database records (e.g., two families) will never compare equal. Modify fpattern so that searches are always case insensitive. Add minimal documentation for search menu in user guide. 2004-03-29 Robert Simms * ChangeLog src/liflines/browse.c Enabled the DisplayKeyTags option for the "Is this the new child?" prompt. 2004-03-29 Perry Rapp * ChangeLog configure.in Fix typo in configure.in for Polish (which is pl, not po). * ChangeLog po/LINGUAS Fix typo for Polish in po/LINGUAS (Polish is pl, not po). 2004-03-28 Perry Rapp * ChangeLog configure.in po/LINGUAS *NEW po/pl.po Add new Polish translation. 2004-03-19 Perry Rapp * ChangeLog src/interp/write.c Fix writeindi to report error instead of failing silently. * ChangeLog src/interp/write.c Fix addtonode to refuse bad arguments (prev not child of parent). 2004-03-08 Perry Rapp * ChangeLog *NEW src/hdrs/dbfuncs.h *NEW src/hdrs/dbfuncsi.h *NEW src/gedlib/dbfuncs.c New interface headers for database functions. * ChangeLog src/interp/write.c Fix __writeindi to gracefully error if argument is null. 2004-01-29 Perry Rapp * ChangeLog docs/ll-userguide.xml Fix & to & 2004-01-20 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp src/gedlib/lldatabase.c Begin interface layer to database backend. 2004-01-18 Perry Rapp * ChangeLog src/gedlib/init.c Simplify error return in open_database_impl. * ChangeLog build/msvc6/btedit/bteditCmd.dsp build/msvc6/dbverify/dbverifyCmd.dsp src/btree/opnbtree.c src/gedlib/init.c src/hdrs/btree.h src/tools/btedit.c src/tools/dbverify.c Prefix openbtree with bt_. Fix bteditCmd.dsp (MSVC6 project) to compile. Fix dbverifyCmd.dsp (MSVC6 project) to compile. 2004-01-17 Perry Rapp * ChangeLog src/btree/file.c src/btree/record.c src/gedlib/intrface.c src/gedlib/names.c src/gedlib/refns.c src/hdrs/btree.h src/interp/eval.c Prefix addrecord and getrecord with bt_. 2004-01-07 Perry Rapp * ChangeLog src/ui/.cvsignore Add .deps to src/ui/.cvsignore 2004-01-05 Perry Rapp * ChangeLog docs/ll-reportmanual.xml Remove obsolete closing statement from report docs (section on modifying database; it is now in fact possible). 2004-01-04 Matt Emmerton * ChangeLog src/interp/interp.c Fix bug with explicitvars, as reported by Jens Arvidsson. (This option was being "sticky" -- it remained set across multiple report executions.) 2003-12-27 Perry Rapp * ChangeLog src/gedlib/xreffile.c Improve comment. 2003-12-10 Perry Rapp * ChangeLog src/hdrs/pvalue.h src/interp/pvalalloc.c src/interp/pvalmath.c src/interp/pvalue.c src/interp/write.c Rename is_zero to is_numeric_zero, and ASSERT if nonnumeric input. Rename pvalue() macro to pvalvv (for greppability). Replace delete_pvalue_wrapper with remove_node_and_delete_pvalue. Fix eqv_pvalues for PBOOL. Remove unused PLONG. Fix how describe_pvalue handles indis, add handling for all records and arrays. * ChangeLog src/gedlib/charprops.c Fixed charprops_load to load lowercase properties. Fixes sf bug#857314 "syntax error in report at first cap letter". 2003-12-03 Perry Rapp * ChangeLog src/hdrs/pvalue.h src/interp/builtin.c src/interp/pvalue.c Fix __fam to go through cache, rather than direct data access. This fixes sf bug#852986 "partition missing all families!". 2003-11-30 Perry Rapp * ChangeLog src/gedlib/charprops.c Fixed charprops_load_utf8 to combine ttpath & filename carefully. (sf#851732) * ChangeLog src/liflines/screen.c Clarified display of LOCALEDIR in u/c to "Locale Dir (default)". * ChangeLog src/gedlib/gedcomi.h src/gedlib/node.c src/hdrs/gedcom.h src/interp/pvalue.c Allocate & copy RECORD pvalues, rather than (now incorrect) bit-by-bit copy (in set_pvalue, just as PFLOAT & PSTRING). (sf#851783) * ChangeLog src/gedlib/keytonod.c Fix broken cache traversal in get_free_cacheel (was going the wrong way on the freelist). (sf#851832) * ChangeLog src/interp/pvalue.c Fix pvalue_to_cel to reload cache if needed (sf#851843). 2003-11-26 Perry Rapp * ChangeLog NEWS src/hdrs/pvalue.h src/interp/builtin.c src/interp/functab.c src/interp/pvalmath.c Implement optional 2nd argument for incr() and decr(). 2003-11-26 Jens Arvidsson * ChangeLog po/sv.po Updated Swedish translation for 3.0.37. 2003-11-24 Perry Rapp * ChangeLog src/gedlib/keytonod.c src/hdrs/cache.h Add lock/unlock functions for records. * ChangeLog src/gedlib/gedcomi.h src/gedlib/node.c src/gedlib/nodeio.c Fix adding new records (fix file_to_record function to handle node trees with no xref in root yet). 2003-11-23 Perry Rapp * ChangeLog src/gedlib/keytonod.c add_to_direct was getting called twice (per each element added) * ChangeLog src/gedlib/keytonod.c Fix cache overflow detection to detect overflow, not full (bug from my changes yesterday). * ChangeLog src/gedlib/keytonod.c Fix init_cache to not skip element#0. Add get_free_cacheel to make room in cache (I lost this functionality when I removed indirect cache yesterday.) * ChangeLog src/liflines/show.c Minor: move population of father (&mother) next to display. 2003-11-22 Perry Rapp * ChangeLog src/gedlib/gedcomi.h src/gedlib/keytonod.c src/gedlib/node.c src/gedlib/nodeio.c src/hdrs/cache.h src/hdrs/gedcom.h src/hdrs/llstdlib.h src/hdrs/pvalue.h src/interp/interp.c src/interp/interpi.h src/interp/pvalue.c src/interp/write.c src/liflines/add.c src/liflines/llexec.c src/liflines/main.c src/stdlib/stdstrng.c Revise node->n_rec pointers to only be set in cache nodes. Revise cached records to point to cache elements, not node tree. Revise cache elements to not point to records. Revise nodes to point to cache elements (if cached), and not to records. Revise record pvalues to point to records not cache elements. That is, PVALUE->RECORD->CACHEEL->NODE instead of the old PVALUE->CACHEEL->RECORD->NODE. This is to remove necessity of locking records held by pvalues. Also, CACHEELs are permanent now, so one might be stale, but can never be a bad memory pointer. Also removed indirect caches entirely. * ChangeLog src/hdrs/cache.h Avoid typedef'ing CACHEEL twice by removing the one in cache.h (which anyway includes gedcom.h, which has the typedef). 2003-11-21 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp src/gedlib/xlat.c src/hdrs/Makefile.am src/stdlib/Makefile.am *NEW src/hdrs/log.h *NEW src/stdlib/log.c Add TTPATH.debug (optional config variable) code. * ChangeLog src/btree/utils.c src/gedlib/gedcom.c src/gedlib/intrface.c src/gedlib/node.c src/hdrs/btree.h src/hdrs/gedcom.h src/liflines/browse.c src/tools/dbverify.c Changed many occurrences of 9 to MAXKEYWIDTH+1. Changed NKEY to hold string buffer directly, instead of pointer. * ChangeLog src/gedlib/keytonod.c src/gedlib/node.c src/hdrs/gedcom.h Altered records to check & its node tree (from cache) in nztop. This is so PVALUES can hold records without holding cache locks. * ChangeLog docs/ll-devguide.xml Added some explanation of translation tables and cache. 2003-11-17 Perry Rapp * ChangeLog src/gedlib/charmaps.c src/gedlib/xlat.c Name translation tables by source file name by default. * .linesrc ChangeLog lines.cfg Remove obsoleted option CustomCharacterProperties. 2003-11-16 Perry Rapp * ChangeLog build/msvc6/llexec/llexec.dsp Fix llexec compilation under MSVC6. * ChangeLog src/gedlib/charprops.c src/gedlib/date.c src/gedlib/init.c src/gedlib/names.c src/hdrs/charprops.h src/hdrs/llstdlib.h src/interp/builtin.c src/stdlib/strcvt.c Implement char props for any codepage convertible to UTF-8. Change UTF-8 uppercasing into a plugin behind ll_toupperz. 2003-11-14 Robert Simms * ChangeLog tt/UTF-8_ISO-8859-8.tt Added Hebrew characters from the Unicode block 'Alphabetic Presentation Forms' that are not covered by ISO-8859-8. Also mapped the few Hebrew or Yiddish character ligatures from UTF-8 to two characters in ISO-8859-8 2003-11-13 Perry Rapp * ChangeLog src/gedlib/charmaps.c src/gedlib/charprops.c src/gedlib/date.c src/gedlib/gedcomi.h src/gedlib/names.c src/hdrs/llstdlib.h src/interp/builtin.c src/stdlib/strutf8.c Load UnicodeData.txt in charprops.c. Now charprops UTF-8 casing works. * ChangeLog src/gedlib/charprops.c *NEW tt/UnicodeDataExcerpt.txt Add file of unicode character properties (UnicodeDataExcerpt.txt), and revise parser to allow comments. 2003-11-12 Perry Rapp * .linesrc ChangeLog lines.cfg build/msvc6/llines/llinesprj.dsp src/gedlib/init.c src/hdrs/Makefile.am src/hdrs/mystring.h src/liflines/llexec.c src/liflines/main.c src/stdlib/Makefile.am src/stdlib/mystring.c src/stdlib/stdstrng.c src/tools/btedit.c src/tools/dbverify.c *NEW src/hdrs/mychar.h *NEW src/stdlib/mychar_funcs.c *NEW src/stdlib/mychar_tables.c Add option CustomCharacterProperties. * ChangeLog build/msvc6/llines/llinesprj.dsp src/gedlib/Makefile.am src/gedlib/charmaps.c src/gedlib/gedcomi.h src/gedlib/translat.c src/gedlib/xlat.c src/hdrs/Makefile.am src/hdrs/llstdlib.h src/hdrs/mychar.h src/stdlib/strcvt.c *NEW src/gedlib/charprops.c *NEW src/hdrs/charprops.h Add shell for code to do builtin character casing. * ChangeLog src/gedlib/charprops.c src/gedlib/date.c src/gedlib/init.c src/interp/builtin.c Switch calls to (new) charprops_lltoupperz & lower. 2003-11-11 Perry Rapp * ChangeLog src/gedlib/indiseq.c src/stdlib/strcvt.c Fix upper/lower handling for UTF-8 use on systems missing support. 2003-11-07 Robert Simms * ChangeLog tt/UTF-8_ISO-8859-8.tt tt/ISO-8859-8_UTF-8.tt Added translation tables for UTF-8 to/from ISO-8859-8 (Hebrew). 2003-11-06 Perry Rapp * ChangeLog src/liflines/screen.c Fix display of default TTPATH in u/c. * ChangeLog src/liflines/screen.c Better description of whether iconv/gettext support compiled in. * ChangeLog src/gedlib/xlat.c Implement two-pass tt conversions (via UTF-8). * ChangeLog src/stdlib/strcvt.c Fix ll_toupperz sign extension bug (sf:836960). * ChangeLog NEWS Update NEWS with recent bugfixes. 2003-11-05 Perry Rapp * ChangeLog src/liflines/screen.c Alter occurrences of TTDIR to TTPATH. * ChangeLog src/hdrs/gedcom.h Make FORSPOUSES graceful with missing keys. 2003-11-03 Matt Emmerton * ChangeLog reports/ps-pedigree.ll reports/ps-pedigree.ps reports/fami-grps.ll Add ps-pedigree and fami-grps reports from Stephen Woodbridge 2003-10-28 Stephen Dum * ChangeLog src/gedlib/names.c docs/ll-userguide.xml Fix bug in storing name records in database. rkey_eq() was ignoring the last character of the key. Update docs for CrashLog_llexec and CrashLog_llines definition. 2003-10-26 Matt Emmerton * ChangeLog src/liflines/main.c src/liflines/llexec.c Use CrashLog_[llexec|llines].log as the default crash log filenames. This enables crash log reporting by default. Any setting in the configuration file will override this default. 2003-10-25 Perry Rapp * ChangeLog src/gedlib/init.c Fix set_gettext_codeset for systems without HAVE_BIND_TEXTDOMAIN_CODESET. 2003-10-17 Perry Rapp * ChangeLog src/interp/builtin.c Fix nspouses (was returning zero always). 2003-10-10 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp src/gedlib/Makefile.am src/gedlib/gedcomi.h src/gedlib/init.c src/gedlib/xreffile.c src/hdrs/gedcom.h src/hdrs/vtable.h src/stdlib/zstr.c *NEW src/gedlib/lldatabase.c New structure LLDATABASE to wrap db connection. * ChangeLog src/gedlib/lldatabase.c Add comment about memory leak. 2003-10-08 Perry Rapp * ChangeLog src/gedlib/keytonod.c Minor cleanup. 2003-10-07 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp src/gedlib/keytonod.c src/gedlib/node.c src/gedlib/nodeio.c src/hdrs/Makefile.am src/hdrs/cache.h src/hdrs/gedcom.h src/hdrs/standard.h src/stdlib/Makefile.am Remove warehouse code (which was unused). Move two functions taking CACHE into keytonod.c statics. *DELETED src/hdrs/warehouse.h *DELETED src/stdlib/warehouse.c Remove warehouse code files (unused). 2003-10-06 Perry Rapp * ChangeLog src/gedlib/keytonod.c src/hdrs/cache.h src/interp/builtin.c src/interp/more.c src/interp/pvalue.c Encapsulate CACHEEL struct inside keytonod.c. * ChangeLog src/hdrs/gedcom.h Add comment about locking being desirable for all the macro loops. 2003-10-05 Perry Rapp * ChangeLog src/gedlib/date.c src/hdrs/date.h src/hdrs/impfeed.h src/hdrs/screen.h src/interp/interp.c src/interp/rptui.c src/liflines/import.c src/liflines/loadsave.c src/liflines/screen.c Report time duration of import. 2003-10-03 Perry Rapp * ChangeLog *NEW tt/.cvsignore Add cvsignore for tt Makefiles. 2003-10-02 Stephen Dum * ChangeLog docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.txt Update docs for 3.0.37 2003-10-03 Perry Rapp * .cvsignore ChangeLog po/.cvsignore src/interp/.cvsignore *NEW src/.cvsignore *NEW src/ui/.cvsignore Updating cvsignore files. * .cvsignore po/.cvsignore reports/.cvsignore src/.cvsignore src/liflines/.cvsignore *NEW intl/.cvsignore Updating cvsignore files for building in source tree. ** CVS TAG v3_0_37_branch ** CVS TAG v3_0_37 Released 3.0.37. 2003-10-02 Perry Rapp * ChangeLog src/gedlib/refns.c Do not expand REFNs with > in them. * ChangeLog INSTALL NEWS configure.in build/msvc6/llines/llines.rc build/rpm/lifelines.spec docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml src/hdrs/version.h Bump version to 3.0.37 (in preparation). 2003-10-01 Perry Rapp * ChangeLog src/gedlib/node.c src/gedlib/refns.c More graceful handling of bad family pointers. * ChangeLog src/gedlib/refns.c src/hdrs/gedcom.h Fix symbol_link handling to work with annotated pointers. 2003-09-30 Perry Rapp * ChangeLog po/fr.po Updated French message catalog from Patrick Texier. 2003-09-30 Stephen Dum * ChangeLog ll-reportmanual.sv.html ll-userguide.sv.html ll-userguide.sv.xml Update docs. 2003-09-30 Perry Rapp * ChangeLog NEWS Mention new option DisplayKeyTags in NEWS. * ChangeLog build/msvc6/dbverify/dbVerify.rc build/msvc6/llexec/llexec.dsp build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc Update MS-Windows version resources and projects. 2003-09-29 Jens Arvidsson * ChangeLog docs/ll-reportmanual.sv.xml docs/ll-userguide.sv.xml More doc translation updates for 3.0.36. 2003-09-29 Robert Simms * ChangeLog src/arch/Makefile.am src/btree/Makefile.am src/gedlib/Makefile.am src/interp/Makefile.am src/liflines/Makefile.am src/stdlib/Makefile.am src/tools/Makefile.am Fixed so that config.h and libintl.h are found relative to the build directory instead of a fixed location. 2003-09-28 Stephen Dum * ChangeLog src/liflines/loadsave.c docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.sv.html docs/ll-reportmanual.sv.xml docs/ll-reportmanual.txt docs/ll-reportmanual.xml docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.sv.html docs/ll-userguide.txt docs/ll-userguide.xml Update formatted docs. Modify save gedcom command to print actual filename data is saved to, rather than what user typed in. Add documention for option AnnotatePointers and DisplayKeyTags. 2003-09-28 Jens Arvidsson * ChangeLog docs/ll-reportmanual.sv.xml docs/ll-userguide.sv.xml po/sv.po Translation update for Swedish message catalog and doc files; minor fixes in report manual translation. 2003-09-27 Perry Rapp * ChangeLog INSTALL NEWS configure.in build/rpm/lifelines.spec docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml src/hdrs/version.h Bump versions to 3.0.36 (in preparation). 2003-09-26 Perry Rapp * ChangeLog src/hdrs/gedcom.h Fix typo in FORFAMCS. * ChangeLog src/gedlib/translat.c Include errno.h for use of errno. * ChangeLog src/btree/traverse.c src/gedlib/gstrings.c src/gedlib/intrface.c src/gedlib/nodeio.c src/hdrs/btree.h src/hdrs/gedcom.h const fixes and fix include for DisplayKeyTags option. 2003-09-25 Robert Simms * .linesrc ChangeLog lines.cfg src/gedlib/gstrings.c src/liflines/screen.c src/liflines/show.c Implemented DisplayKeyTags option to prepend I or F to individual and family keys shown on-screen. 2003-09-24 Perry Rapp * ChangeLog NEWS src/stdlib/path.c Fix bug in filepath causing extra append of extension. 2003-09-21 Jens Arvidsson * ChangeLog docs/ll-reportmanual.sv.xml Updated translation of report manual. 2003-09-20 Perry Rapp * .linesrc ChangeLog lines.cfg src/gedlib/gstrings.c src/gedlib/indiseq.c src/gedlib/node.c src/gedlib/nodeio.c src/gedlib/refns.c src/hdrs/gedcom.h src/interp/builtin.c src/interp/more.c src/liflines/add.c src/liflines/browse.c src/liflines/edit.c src/liflines/lbrowse.c src/liflines/llinesi.h src/liflines/newrecs.c src/liflines/pedigree.c src/liflines/screen.c src/liflines/show.c src/liflines/tandem.c Add new option AnnotatePointers. Add node iterator to traverse node tree with iterator. Modify various places to handle bad pointers gracefully. * .linesrc ChangeLog NEWS Add new option AnnotatePointers to NEWS. 2003-09-18 Stephen Dum * ChangeLog docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt docs/ll-reportmanual.xml Add to reportmanual information about duplicate includes, parameters of functions and procedures and dup() for lists. 2003-09-18 Perry Rapp * ChangeLog src/gedlib/translat.c Improved error detection and reporting during gedcom output. * ChangeLog INSTALL README.MAINTAINERS Put comment in INSTALL about docs. 2003-09-17 Perry Rapp * ChangeLog src/hdrs/Makefile.am Distribute ui.h as well. 2003-09-16 Stephen Dum * ChangeLog docs/ll-reportmanual.html docs/ll-reportmanual.xml docs/listops.jpg docs/Makefile.am Added image to show list operations. 2003-09-17 Perry Rapp * ChangeLog src/gedlib/names.c Fix corruption bug in add_names (was freeing record before done). * ChangeLog NEWS configure.in build/msvc6/llines/llines.rc build/rpm/lifelines.spec docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml src/hdrs/version.h Bump versions to 3.0.35. 2003-09-16 Matt Emmerton * ChangeLog src/hdrs/ui.h src/ui/Makefile.am src/ui/ui_cli.c configure.in src/Makefile.am src/liflines/Makefile.am src/liflines/llexec.c Add UI module for CLI (Command Line Interface). Used only by llexec at present. 2003-09-16 Perry Rapp * ChangeLog src/gedlib/charmaps.c src/gedlib/translat.c src/gedlib/xlat.c src/hdrs/xlat.h Remove unused name from xlat structure (which is shared, so shouldn't have the name). (sf#806664) * ChangeLog src/gedlib/translat.c src/gedlib/xlat.c src/hdrs/translat.h src/hdrs/xlat.h src/liflines/screen.c Fix legacy (db internal) translation tables (had to disable xlat cache). * ChangeLog NEWS README.MAINTAINERS configure.in build/msvc6/llines/llines.rc build/rpm/lifelines.spec docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml src/hdrs/version.h Bump version numbers to 3.0.34. * ChangeLog build/msvc6/dbverify/dbverifyCmd.dsp src/btree/traverse.c src/gedlib/intrface.c src/gedlib/names.c src/gedlib/nodeio.c src/gedlib/refns.c src/hdrs/btree.h src/hdrs/gedcom.h src/liflines/scan.c src/tools/dbverify.c const fixes (and add soundex to msvc6 dbverify project). * ChangeLog src/interp/builtin.c src/interp/intrpseq.c src/tools/Makefile.am Cosmetic changes to __list, __table, and __indiseq for clarity and to make them analogous. Add libintl & libiconv to btedit link. 2003-09-15 Perry Rapp * ChangeLog README.MAINTAINERS Add LINES-L mailing list to README.MAINTAINERS. * ChangeLog src/gedlib/indiseq.c Bugfix for name_to_indiseq (browse list not alphabetical). (sf#806495) Released 3.0.33 beta. 2003-09-15 Perry Rapp * ChangeLog src/gedlib/init.c src/gedlib/xlat.c src/hdrs/list.h src/interp/interp.c src/liflines/llexec.c src/liflines/main.c src/liflines/pedigree.c src/liflines/screen.c src/stdlib/list.c New create_list2 to specify what to free whilst creating list. * ChangeLog src/gedlib/gedcomi.h src/gedlib/indiseq.c src/gedlib/names.c src/hdrs/gedcom.h Rewrite soundex handling in names for multiple soundexes. Fix wildcard soundex handling for non-ASCII. (sf#805701) * ChangeLog NEWS src/gedlib/nodeio.c src/hdrs/gedcom.h src/liflines/add.c src/liflines/edit.c Fix all edits of indi to expand refns (not all were doing it). * ChangeLog src/gedlib/init.c src/gedlib/nodeio.c src/gedlib/xlat.c src/hdrs/gedcom.h src/hdrs/xlat.h Prepend UTF-8 BOM to edit file on Windows when appropriate. (sf#806300) * ChangeLog NEWS configure.in build/msvc6/llines/llines.rc build/rpm/lifelines.spec docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml src/hdrs/version.h Change version for experimental release 3.0.33. * ChangeLog src/gedlib/Makefile.am Add soundex.c to makefile. 2003-09-14 Perry Rapp * src/gedlib/intrface.c src/hdrs/icvt.h src/hdrs/table.h src/interp/alloc.c src/stdlib/environ.c src/stdlib/icvt.c win32/intlshim.c Cleanup some corrupted line feeds. * ChangeLog build/msvc6/llines/llinesprj.dsp src/btree/file.c src/btree/record.c src/gedlib/charmaps.c src/gedlib/indiseq.c src/gedlib/intrface.c src/gedlib/names.c src/gedlib/refns.c src/gedlib/replace.c src/hdrs/btree.h src/hdrs/gedcom.h src/hdrs/icvt.h src/hdrs/llstdlib.h src/hdrs/pvalue.h src/hdrs/table.h src/hdrs/translat.h src/interp/alloc.c src/interp/builtin.c src/interp/pvalue.c src/liflines/scan.c src/stdlib/environ.c src/stdlib/icvt.c src/stdlib/llstrcmp.c win32/intlshim.c Split soundex code into soundex.c (& rename trad_soundex). Some const fixes. Pass rkey pointers instead of values. *NEW src/gedlib/soundex.c Forgot to add new soundex file earlier. 2003-09-14 Jens Arvidsson * ChangeLog po/sv.po Error corrections in 3.0.32 Swedish message catalog. * ChangeLog docs/ll-reportmanual.sv.xml docs/ll-userguide.sv.xml po/sv.po Translation update of Swedish message catalog and doc files; typo fixes. 2003-09-14 Perry Rapp * ChangeLog src/hdrs/array.h src/hdrs/list.h src/stdlib/zstr.c Make zstrings into objects. 2003-09-13 Perry Rapp * ChangeLog src/liflines/screen.c Fix POPUP_LINES etc to not grow indefinitely as reopen dbs. ** CVS TAG v3_0_32 2003-09-12 Perry Rapp * ChangeLog NEWS src/arch/alphasort.c src/arch/wcslen.c src/hdrs/arch.h src/hdrs/llstdlib.h src/hdrs/standard.h src/liflines/swap.c src/liflines/tandem.c src/liflines/valgdcom.c src/stdlib/appendstr.c src/stdlib/path.c src/stdlib/sequence.c src/stdlib/signals.c src/stdlib/stdstrng.c src/stdlib/stralloc.c src/stdlib/strset.c src/stdlib/zstr.c src/tools/wprintf.c Ensure stdarg included for arch.h compiling wcslen.c (affects MacOS). Little bit of clean up in include lines. * ChangeLog configure.in build/msvc6/llines/llines.rc build/rpm/lifelines.spec src/hdrs/version.h Bump version to 3.0.32 preparatory to release. 2003-09-12 Stephen Dum * docs/Makefile.am docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt docs/ll-reportmanual.xml docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.txt reports/anniver.ll reports/cron.ll src/liflines/llexec.c ChangeLog Update documentation for sort/rsort's change in sorting direction Update reports anniver and cron for same. Add preliminary documentation to reportmanual for the dup function. And rebuild docs. 2003-09-12 Perry Rapp * ChangeLog docs/ll-reportmanual.sv.xml docs/ll-userguide.sv.xml docs/ll-reportmanual.sv.html docs/ll-userguide.sv.html docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt Moved ll-userguide.sv.xml ll-reportmanual.sv.xml up to the docs directory and obsoleted the versions in docs/sv. Updated the formatted docs for 3.0.32 including ll-userguide.sv.html and ll-reportmanual.sv.html 2003-09-12 Perry Rapp * ChangeLog README.MAINTAINERS docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml Bump doc versions to 3.0.32 (in preparation). Mark LLNEWDBDIR as obsolete in docs. 2003-09-11 Perry Rapp * ChangeLog src/gedlib/init.c src/hdrs/llstdlib.h src/liflines/llexec.c src/liflines/main.c src/stdlib/path.c Remove LLNEWDBDIR and instead use first component of path (LLDATABASES). * .linesrc ChangeLog lines.cfg Mark LLNEWDBDIR as obsolete in config files. 2003-09-10 Perry Rapp * ChangeLog src/btree/file.c src/gedlib/charmaps.c src/gedlib/editmap.c src/gedlib/messages.c src/gedlib/translat.c src/hdrs/gedcom.h src/hdrs/translat.h src/liflines/screen.c Fix addtextfile to skip leading BOM. Remove extra sets of map names. Fix tt menu to show menu keys. Fix basm & barm to not say bapt. (sf#803281) * ChangeLog src/liflines/tandem.c Peter Fales' bugfix for browsing to lower family from tandem. (sf#795805) * ChangeLog po/POTFILES.in Include translat.c in list for xgettext. * ChangeLog src/gedlib/messages.c src/gedlib/translat.c src/liflines/show.c Add translator instructions for localizing translation table menu keys. Remove some code obsoleted by earlier changes today. * ChangeLog src/interp/intrpseq.c Bugfix for set functions deleting temporary values too early. (sf#804082) 2003-09-10 Jens Arvidsson * ChangeLog po/sv.po Updated Swedish translation for 3.0.31. 2003-09-09 Stephen Dum * ChangeLog fam10c.ll docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt docs/ll-reportmanual.xml docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.txt fix a erroneous reference to a missing wife in fam10c.ll update formatted documentation. 2003-09-09 Matt Emmerton * ChangeLog src/interp/builtin.c src/interp/functab.c src/interp/interpi.h Added the dup() function, which does a "deep" copy of a list. ** CVS TAG v3_0_31 2003-09-09 Perry Rapp * ChangeLog NEWS src/interp/more.c Bugfix for report sort function to not crash on one argument. (sf#803279) * ChangeLog reports/st/st_list.ll src/interp/more.c Bugfix for (r)sort being reversed. Add single arg (r)sort tests to st_list.ll. (sf#803276) * ChangeLog src/gedlib/valtable.c Fix user option editor to skip UTF-8 BOM. (sf#803483) * ChangeLog NEWS src/gedlib/translat.c src/gedlib/xlat.c src/hdrs/translat.h src/hdrs/xlat.h Include legacy translation tables in translations. (sf#803280) * ChangeLog NEWS configure.in build/msvc6/llines/llines.rc build/rpm/lifelines.spec docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml src/gedlib/valtable.c src/hdrs/llstdlib.h src/hdrs/version.h src/liflines/screen.c src/stdlib/strutf8.c Fix value tables to handle BOM, and change version to 3.0.31. 2003-09-08 Matt Emmerton * ChangeLog src/gedlib/init.c Changes to eliminate warnings when using --disable-nls 2003-09-08 Perry Rapp * ChangeLog src/liflines/ask.c Revise file open code to try without then with default extension. 2003-09-06 Perry Rapp * ChangeLog build/msvc6/dbverify/dbverifyCmd.dsp src/btree/addkey.c src/btree/btreei.h src/btree/record.c src/hdrs/btree.h src/tools/dbverify.c Add low-level key checking option to dbverify. * ChangeLog NEWS README.MAINTAINERS configure.in build/msvc6/dbverify/dbVerify.rc build/msvc6/llines/llines.rc build/rpm/lifelines.spec docs/ll-devguide.xml docs/ll-reportmanual.xml docs/ll-userguide.xml src/hdrs/version.h src/tools/dbverify.c Fix format mistake & remove some unused variables in dbverify. Minor editing of developer docs xml. Bump version to 3.0.30 for beta. ** CVS TAG v3_0_30 * ChangeLog src/gedlib/nodeio.c Remove unused function convert_first_fp_to_record. 2003-09-04 Matt Emmerton * ChangeLog src/arch/wcslen.c src/gedlib/init.c src/gedlib/locales.c src/interp/builtin.c src/liflines/valgdcom.c src/liflines/llexec.h src/stdlib/stdlibi.h src/stdlib/table.c src/tools/wprintf.c Various changes to eliminate compiler warnings, especially those appearing only with --disable-nls. 2003-09-02 Perry Rapp * ChangeLog INSTALL Note that ppc argument to configure on Mac OS is only needed with older versions. 2003-08-29 Perry Rapp * ChangeLog src/stdlib/strcvt.c Add code to avoid 8-bit uppercasing of UTF-8 code bytes. 2003-08-27 Perry Rapp * .linesrc ChangeLog lines.cfg Add example of UppercaseSurnames config option to config file. 2003-08-26 Jens Arvidsson * ChangeLog docs/ll-userguide.xml docs/ll-reportmanual.xml src/gedlib/messages.c src/liflines/import.c Typo fixes and some other minor changes. 2003-08-25 Perry Rapp * ChangeLog src/liflines/brwsmenu.c Change "Browse top person" entry on tandem family screen. 2003-08-24 Jens Arvidsson * ChangeLog docs/sv/ll-reportmanual.sv.xml po/sv.po Error corrections in Swedish message catalog and report manual. 2003-08-17 Jens Arvidsson * ChangeLog po/sv.po Update of Swedish translation for 3.0.29. 2003-08-16 Perry Rapp * ChangeLog po/fr.po Updated fr.po for 3.0.29 from Patrick Texier. 2003-08-15 Perry Rapp * ChangeLog docs/Makefile.am Improve docs makefile a bit with some named groups. * ChangeLog docs/Makefile.am *NEW docs/sv/ll-reportmanual.sv.xml *NEW docs/sv/ll-userguide.sv.xml Add Swedish versions of manuals. ** CVS TAG v3_0_29 2003-08-14 Perry Rapp * ChangeLog src/hdrs/gedcom.h Revise FORFAMSS, FORFAMCS to skip dangling pointers (and not ASSERT). * ChangeLog src/gedlib/gedcom.c src/gedlib/messages.c src/liflines/import.c src/liflines/llinesi.h src/liflines/valgdcom.c Do not trim empty families at import; rather warn of them. Add option to bail out of import if warnings found. * ChangeLog NEWS build/msvc6/llines/llines.rc build/rpm/lifelines.spec src/hdrs/version.h Bump version to 3.0.29. * ChangeLog configure.in Bump also configure.in to 3.0.29. 2003-08-07 Perry Rapp * ChangeLog reports/st/st_aux.ll reports/st/st_collate.ll reports/st/st_date.ll reports/st/st_db.ll reports/st/st_list.ll reports/st/st_name.ll reports/st/st_number.ll reports/st/st_string.ll reports/st/st_string_UTF-8.ll Fix carriage returns in tests. Bump version of st_string for yesterday's fix. 2003-08-06 Matt Emmerton * ChangeLog src/stdlib/strcvt.c reports/st/st_string.ll Change ll_tocapitalizez() and ll_totitlecasez() to *NOT* lowercase the entire string before capitalizing. Update string tests to fail if embedded uppercase gets changed to lowercase as a result of calling these functions. 2003-07-29 Perry Rapp * ChangeLog src/liflines/screen.c Place cursor at bottom cursor when dynamic menu hidden. 2003-07-28 Perry Rapp * ChangeLog src/liflines/screen.c Set cursor for main screen. 2003-07-26 Perry Rapp * ChangeLog docs/ll-devguide.xml src/hdrs/menuitem.h src/hdrs/screen.h src/liflines/screen.c Add some documentation for screens, menus, and cursor position. Rename place_cursor_new to place_cursor_popup. Place cursor horizontally for main screens. 2003-07-24 Perry Rapp * ChangeLog src/gedlib/lloptions.c Add predefined config file variable %thisdir% (to simplify installer). 2003-07-23 Perry Rapp * ChangeLog src/liflines/screen.c Fix cursor display for main fixed menu screens (from psfales). * ChangeLog src/interp/interp.c src/interp/interpi.h Suppress report timing if report didn't run. 2003-07-22 Perry Rapp * ChangeLog src/liflines/screen.c Fix cursor display in search/scan menu. 2003-07-20 Perry Rapp * ChangeLog src/hdrs/screen.h src/liflines/screen.c Fix cursor display in full scan menu (from psfales). 2003-07-10 Perry Rapp * ChangeLog src/interp/builtin.c Fix error handling of __print to not crash (patch#768431). * ChangeLog src/interp/rassa.c src/liflines/miscutls.c i18n some strings 2003-07-08 Perry Rapp * ChangeLog po/fr.po Updated French message catalog from Patrick Texier. 2003-07-07 Steve Dum * ChangeLog reports/gen_index recognize sub directories when generating index.html and retain that information on file names. ** CVS TAG v3_0_28p2 2003-07-08 Perry Rapp * ChangeLog src/liflines/valgdcom.c Extend HEAD limit from 50 to 500 (to handle GEDCOM torture test). PATCH#767219. * ChangeLog build/msvc6/llines/llines.rc src/hdrs/version.h Bumped version for beta version 3.0.28p2. 2003-07-01 Matt Emmerton * ChangeLog src/hdrs/interp.h src/stdlib/signals.c src/interp/interp.c Create new function, get_report_error_msg(), to be used to create the appropriate error message when a signal is caught during report processing. (This eliminates the need to access interp/ internals from stdlib/signals.c) 2003-07-01 Matt Emmerton * ChangeLog src/hdrs/interp.h src/hdrs/pvalue.h src/interp/interpi.h Header file restructuring. - Move most of interp.h into interpi.h - Move pvalue-related stuff into pvalue.h * src/interp/builtin.c src/interp/eval.c src/interp/heapused.c src/interp/interpseq.c src/interp/more.c src/interp/pvalalloc.c src/interp/pvalmath.h src/interp/pvalue.c src/interp/rassa.c src/interp/symtab.c src/interp/write.c User internal header (interpi.h) instead of external header (interp.h) 2003-07-01 Matt Emmerton * ChangeLog src/liflines/askgedc.c src/liflines/screen.c gedlib/gengedc.c Add missing #includes of "cache.h" and "interp.h" Add casts to remove compiler warnings 2003-06-30 Matt Emmerton * ChangeLog src/interp/pvalue.c src/interp/pvalmath.c Remove Perry's ^M assassination of ChangeLog :) Add missing return statements in mod_pvalues and div_pvalues. Make is_zero() and is_numeric_value() treat PANY as valid. Update num_conform_pvalues to properly handle two PANY args. 2003-06-26 Perry Rapp * ChangeLog docs/ll-userguide.xml Add new section describing GEDCOM import errors. 2003-06-19 Matt Emmerton * ChangeLog src/hdrs/table.h src/stdlib/table.c Add access_value_str function. 2003-06-19 Perry Rapp * ChangeLog src/gedlib/init.c src/hdrs/pvalue.h src/interp/interp.c src/liflines/screen.c i18n occurrences reported by Frank Ellebrecht. Fix comments in pvalue.h from C++ to C. Remove CR characters I introduced recently. * ChangeLog po/de.po New German message catalog from Frank Ellebrecht. * reports/st/st_all.ll *NEW reports/st/st_name.ll Create self-test report for names. 2003-06-18 Matt Emmerton * ChangeLog src/interp/pvalue.c Use ARRAY instead of struct tag_array*, use pvalue_to_int() * src/gedlib/gengedc.c src/gedlib/indiseq.c src/liflines/scan.c src/tools/wprintf.c Remove unneccessary #includes of interp.h * src/hdrs/standard.h src/hdrs/interp.h src/hdrs/pvalue.h src/hdrs/Makefile.am Add STRING to UNION, introduce (but not use) PVALUE_DATA structure 2003-06-17 Matt Emmerton * ChangeLog src/interp/interp.c src/interp/pvalmath.c src/interp/pvalue.c Use pvalue_to_xxx() functions instead of casting pvalue(val). 2003-06-14 Perry Rapp * ChangeLog src/gedlib/names.c Fix by Peter Fales for piecematch bug introduced by UTF-8 code. * ChangeLog src/hdrs/interp.h src/interp/alloc.c src/interp/builtin.c src/interp/interp.c src/interp/intrpseq.c src/interp/more.c src/interp/pvalue.c Changing code to not access pvalue struct directly. 2003-06-13 Perry Rapp * ChangeLog src/interp/pvalue.c Added comment to Steve's fix of 2003-06-08. 2003-06-10 Steve Dum * ChangeLog docs/ll-reportmanual.html docs/ll-reportmanual.txt docs/ll-reportmanual.xml Add documentation for float() and int(). 2003-06-08 Steve Dum * ChangeLog src/interp/pvalue.c modify set_pvalue() to return float(0) when converting a int pvalue of 0 to float. 2003-06-03 Matt Emmerton * ChangeLog src/hdrs/interp.h src/hdrs/standard.h src/interp/builtin.c src/interp/more.c src/interp/pvalmath.c Remove definition of LONG, remove LONG from UNION Use type-specific versions of pvalue_create and set_pvalue 2003-06-01 Matt Emmerton * ChangeLog src/interp/interpi.h src/interp/functab.c src/interp/builtin.c Add float() and int() "casting" routines 2003-05-28 Steve Dum * ChangeLog docs/ll-devguide.html docs/ll-devguide.xml Update devguide and flush it out a little 2003-05-26 Steve Dum * ChangeLog build/rpm/lifelines.spec add index.html, boc.gif and ll.png to the distribution. fixed a typo in the spec's file. 2003-05-18 Perry Rapp * ChangeLog src/gedlib/init.c src/hdrs/gedcom.h src/hdrs/interp.h src/hdrs/version.h src/interp/alloc.c src/interp/builtin.c src/interp/functab.c src/interp/interp.c src/interp/interpi.h win32/intlshim.c Add report language gettext. Fix gettext (intl) shim to recognize intl.dll (the name used by gettext-0.12). ** CVS TAG v3_0_28p1 2003-05-18 Perry Rapp * ChangeLog src/hdrs/version.h Make version 3.0.28p1 (includes compile guards needed for OS/X). 2003-05-10 Perry Rapp * ChangeLog configure.in build/msvc6/llines/llines.rc build/rpm/lifelines.spec src/hdrs/version.h Bump version to 3.0.28. * ChangeLog README.MAINTAINERS docs/ll-devguide.xml Listed xml manuals in README.MAINTAINERS to have version bumped. * ChangeLog build/rpm/lifelines.spec Fix rpm spec changelog format bugs. ** CVS TAG v3_0_28 Released 3.0.28. * ChangeLog configure.in build/msvc6/dbverify/config.h build/msvc6/llexec/config.h build/msvc6/llines/config.h src/stdlib/strcvt.c Added config test for iswalpha. Sync'd msvc6 versions of config.h. * ChangeLog src/stdlib/strcvt.c Fix compile guards for use of towlower & towupper. 2003-05-09 Perry Rapp * ChangeLog po/de.po Fix pronouns in German message catalog. * ChangeLog src/stdlib/strutf8.c Fix operator precedence errors. 2003-05-08 Perry Rapp * ChangeLog docs/ll-userguide.xml Fix typo. 2003-05-07 Steve Dum * ChangeLog docs/ll-userguide.{txt,html,pdf} generate html, pdf and txt documents 2003-05-07 Perry Rapp * ChangeLog docs/ll-userguide.xml Document how to actually set the internal codeset. 2003-05-06 Steve Dum * ChangeLog docs/ll-reportmanual* docs/ll-userguide* roll version number for these docs to 3.0.28 and generate html, pdf and txt forms. 2003-05-06 Perry Rapp * ChangeLog docs/dbverify.1 Change gwc to dbverify in dbverify.1 man page. * ChangeLog docs/dbverify.1 docs/llines.1 *NEW docs/btedit.1 Add btedit man page (from Christian Perrier), and make all three man pages more consistent. * ChangeLog build/rpm/lifelines.spec docs/Makefile.am Add btedit.1 to distribution. * ChangeLog docs/ll-userguide.xml Wrote some documentation about codesets. 2003-05-05 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp build/rpm/lifelines.spec docs/Makefile.am *NEW docs/dbverify.1 Added dbverify.1 man page (supplied by Christian Perrier). 2003-04-21 Perry Rapp * ChangeLog build/msvc6/llines/llines.rc src/hdrs/version.h src/liflines/cscurses.c win32/mycurses.c Bugfix for sign-extension bug in win32 curses. Change version to 3.0.27p5. Release beta 3.0.27p5. * ChangeLog src/stdlib/environ.c Change temp file on Win32 to end in .txt extension (so SaveAs UTF-8 works in notepad). * ChangeLog src/gedlib/xlat.c src/hdrs/icvt.h src/stdlib/icvt.c src/stdlib/strcvt.c Bugfix for illegal character handling in iconv wrapper for Win32. ** CVS TAG v3_0_27p4 2003-04-20 Perry Rapp * ChangeLog win32/mycurses.c Document alt-0xxx bug in relevant code. * ChangeLog src/gedlib/indiseq.c Remove extraneous codeset conversion in str_to_indiseq (fix bug 724761). * ChangeLog build/msvc6/llines/llines.rc src/hdrs/version.h Update for version 3.0.27p4. Release beta 3.0.27p4. ** CVS TAG v3_0_27p3 2003-04-19 Perry Rapp * ChangeLog src/gedlib/date.c Fix title_dup copy&paste (it was doing lower), which was causing many failures in st/st_date.ll. * ChangeLog reports/st/st_string_UTF-8.ll Added a couple more casing tests, including Greek & Cyrillic, and the Greek sigma special case. * ChangeLog lines.cfg build/msvc6/llines/llines.rc src/arch/platform.c src/gedlib/init.c src/hdrs/arch.h src/hdrs/version.h src/liflines/main.c Added Win32 config option to set console codepage. 2003-04-16 Perry Rapp * ChangeLog src/stdlib/strcvt.c Change Greek sigma lowercasing, as recommended by Georg Skillas. 2003-04-16 Perry Rapp * ChangeLog configure.in build/msvc6/llines/config.h src/gedlib/date.c src/hdrs/llstdlib.h src/interp/builtin.c src/stdlib/icvt.c src/stdlib/strcvt.c Revise lower, capitalize, and titlecase for internal UTF-8. 2003-04-14 Perry Rapp * ChangeLog build/msvc6/llines/llines.rc src/stdlib/icvt.c Fix icvt.c to terminate wide in the 0-length input case (re: bug#721239). Adjust windows version for 3.0.27p2. * ChangeLog docs/ll-reportmanual.xml Document that Union, intersect, and difference modify their arguments (re: bug#719757). * ChangeLog src/liflines/tandem.c Fix tandem mode to not default to quit (bug#717421). 2003-04-14 Stephen Dum * ChangeLog src/hdrs/standard.h docs/ll-reportmanual.txt docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-userguide.txt docs/ll-userguide.html docs/ll-userguide.pdf include stdarg.h so compiles under linux update processed report manual make version numbers for user guide and report manual 3.0.27 2003-04-14 Perry Rapp * ChangeLog src/gedlib/names.c src/hdrs/llstdlib.h src/stdlib/strutf8.c New next_char32 function for UTF-8 use. Fix piecematch for UTF-8. * ChangeLog src/gedlib/names.c src/stdlib/strutf8.c Bugfixes to next_char32. * ChangeLog build/msvc6/llines/llines.rc src/gedlib/date.c src/gedlib/names.c src/gedlib/node.c src/hdrs/gedcom.h src/hdrs/llstdlib.h src/interp/builtin.c src/liflines/screen.c src/stdlib/stdstrng.c src/stdlib/strcvt.c New upperascii_s cheap & dirty uppercasing function, and ll_upperz good one. Change args of manip_name to enums. * ChangeLog Released 3.0.27p1 (and cvs tagged it). * ChangeLog src/arch/snprintf.c src/arch/vsnprintf.c src/gedlib/node.c src/hdrs/llstdlib.h src/hdrs/win32/curses.h src/interp/interp.c src/liflines/error.c src/liflines/valgdcom.c src/stdlib/mystring.c src/tools/dbverify.c src/tools/wprintf.c Ensuring that stdarg is included everywhere va_list appears. 2003-04-13 Perry Rapp * ChangeLog src/btree/record.c src/gedlib/names.c Move string for missing names, and & soundex-specific code, up from getsurname_impl to its callers. * ChangeLog src/gedlib/indiseq.c src/gedlib/names.c src/hdrs/llstdlib.h src/hdrs/mystring.h src/hdrs/standard.h src/liflines/main.c src/stdlib/llstrcmp.c src/stdlib/mystring.c src/stdlib/stdstrng.c src/stdlib/strapp.c src/stdlib/strset.c src/stdlib/zstr.c Reduce including of mystring.h. Minor refactoring of ll_toupper. 2003-04-11 Stephen Dum * ChangeLog docs/ll-reportmanual.xml Add text to include description about main procedure usage 2003-04-05 Stephen Dum * ChangeLog, .linesrc, lines.cfg, reports/anniver.ll, reports/cron.ll Correct OTHRREC reference to OTHR, merge some comments from lines.cfg into .linesrc, so two files are more consistent. Fix typo in reports. 2003-03-25 Stephen Dum * ChangeLog reports/anniver.ll reports/cron.ll src/interp/interp.c reports/Makefile.am reports/gen_index * Add \n to a number of error messages so they don't get clobbered by the command line prompt after llexec exits. Add two reports to the report directory. Fix gen_index to strip paths off program names. 2003-03-24 Perry Rapp * ChangeLog src/hdrs/interp.h src/interp/interp.c src/interp/interpi.h Fix requires command (in report language). * ChangeLog docs/ll-devguide.xml Add brief explanation of require handling to developer docs. 2003-03-18 Stephen Dum * ChangeLog docs/ll-devguide.html docs/ll-devguide.xml docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt docs/ll-reportmanual.xml docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.txt docs/ll-userguide.xml Format devguide and checkin html version. Minor cleanup of report manual and user guide. 2003-03-17 Stephen Dum * ChangeLog docs/ll-reportmanual.html docs/ll-reportmanual.xml docs/ll-userguide.xml src/liflines/llexec.c Minor mods to report and user manual, modify llexec.c to output cr on messages describing the failure to open database. 2003-03-16 Stephen Dum * ChangeLog docs/ll-reportmanual.xml docs/ll-reportmanual.html Updated report manual to include all functions in 3.0.27 updated version number in manual to 3.0.27 2003-03-16 Perry Rapp * ChangeLog src/btree/record.c src/liflines/error.c Fix crash_setdb in error.c. ASSERT if infinite index loop found in getrecord. 2003-03-15 Perry Rapp * ChangeLog src/hdrs/interp.h src/interp/interp.c src/liflines/llexec.c src/liflines/main.c src/liflines/screen.c Call interp_main instead of interp_program_list from main/llexec. (Fix for sf bug#704326: llexec will crash if argument error found.) * ChangeLog src/stdlib/stdstrng.c Remove unused llstrncat. * ChangeLog src/interp/builtin.c Fix buggy f() report function. (sf bug#704336: f() report function crashes.) * ChangeLog src/gedlib/messages.c src/liflines/llexec.c src/liflines/screen.c Implement choose/view array for llexec (not a great implementation). * ChangeLog src/liflines/llexec.c Fix llexec's interact for MS-Windows CR/LF. 2003-03-13 Stephen Dum * ChangeLog docs/ll-reportmanual.xml docs/ll-userguide.xml src/gedlib/init.c src/gedlib/lloptions.c src/stdlib/stdstrng.c docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.txt Move description of system and user properties to one section in userguide. Document a number of undocumented programming calls modify code to look in both home directory and current directory for configuration files. fix a bug in llstrncat which would cause llstrncpy to stomp on memory. 2003-03-07 Perry Rapp * ChangeLog sv/sv.po Update to Swedish message catalog. * ChangeLog src/interp/pvalue.c Disable dolock_node_in_cache (as it is causing cache overflow for at least one user). * ChangeLog src/interp/builtin.c src/interp/functab.c src/interp/interpi.h Remove deleteel function. * ChangeLog docs/ll-reportmanual.xml Remove documentation of deleteel function. * ChangeLog build/rpm/lifelines.spec Update rpm spec file for new documentation files. * ChangeLog build/msvc6/llexec/llexec.dsp Add new files to msvc makefile for llexec. * ChangeLog NEWS configure.in build/rpm/lifelines.spec src/hdrs/version.h Creating version 3.0.27. * ChangeLog build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc Updating versions in windows resources to 3.0.27. * ChangeLog reports/st/st_list.ll Remove self-test code for deleteel. 2003-03-06 Steve Dum * ChangeLog docs/Makefile.am Add rules to build doc's from xml (works on redhat 8.0) (requires openjade-1.3 jadetex-3.12) Add ll-reportmanual.* ll-usermanual.* to distribution remove quickref.* 2003-03-06 Perry Rapp * ChangeLog src/gedlib/brwslist.c src/gedlib/xlat.c src/hdrs/list.h src/interp/interp.c src/interp/more.c src/liflines/advedit.c src/liflines/scan.c Add STOPLIST macro to clear current lock when breaking (or returning) out of a FORLIST loop. This fixes the ASSERT crash when doing a successful name scan. * ChangeLog NEWS Document list fix above as bugfix. * ChangeLog src/interp/interp.c Bugfix to STOPLIST use in interp_forlist. * ChangeLog src/interp/builtin.c More specific error when passing Null value to __set. 2003-03-05 Perry Rapp * ChangeLog docs/Install.LifeLines.Windows.txt docs/Run.LifeLines.Windows.txt Minor updates to instructions for use on MS-Windows. * ChangeLog docs/ll-devguide.xml Attempt to make devguide parseable. 2003-03-04 Steve Dum * ChangeLog docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt docs/ll-reportmanual.xml docs/ll-userguide.html docs/ll-userguide.pdf docs/ll-userguide.xml docs/ll-userguide.txt Update manuals and regenerate various forms. 2003-03-04 Perry Rapp * ChangeLog src/gedlib/misc.c src/hdrs/gedcom.h Fix fornodes (FORTAGVALUES) to get CONC & CONT both. (sf.net bug#696779) * ChangeLog docs/ll-reportmanual.xml docs/ll-userguide.xml Removed "new in 3.0.6" references in ll-userguide.xml, and changed version from 3.0.15 to 3.0.25. Changed version of ll-reportmanual.xml from 3.0.25 to 3.0.26 (because it mentions sort functions, which are not in 3.0.25). * ChangeLog NEWS configure.in build/msvc6/llines/llines.rc build/rpm/lifelines.spec src/arch/platform.c src/gedlib/init.c src/gedlib/locales.c src/gedlib/misc.c src/hdrs/gedcom.h src/hdrs/menuitem.h src/hdrs/version.h src/liflines/brwsmenu.c src/stdlib/list.c Reload menus for codeset change via callback, to fix linking failure with llexec. Add include stdlib to platform.c to fix compile on Darwin. Minor cleanup. Bump version to 3.0.26. Make 3.0.26 distribution. Make distribution of current documentation and label it 3.0.26. 2003-03-04 Steve Dum * ChangeLog docs/ll-reportmanual.xml docs/ll-reportmanual.html docs/ll-reportmanual.pdf docs/ll-reportmanual.txt clean up formatting of report manual 2003-03-03 Perry Rapp * ChangeLog po/fr.po Update to French message catalog from Patrick Texier. 2003-03-02 Perry Rapp * ChangeLog src/interp/more.c Fix __sort to sort on keys not values. Add __rsort. * ChangeLog reports/st/st_list.ll src/interp/functab.c src/interp/interpi.h src/interp/more.c Code cleanup. Expose __rsort to report language. Add sort & rsort tests to list self-test. * ChangeLog src/stdlib/list.c Improve random access to lists. Implement negative offsets (to access elements from other end). * ChangeLog docs/ll-reportmanual.xml Documented sort & rsort, FLOAT type, negative offsets to getel, writeindi and writefam. * ChangeLog docs/ll-reportmanual.xml Updated dateformat documentation (new for yearformat and eraformat). * ChangeLog src/gedlib/init.c src/hdrs/menuitem.h src/liflines/brwsmenu.c Bugfix for menu items not getting localized into internal codeset (sf bug#696157). * ChangeLog docs/ll-reportmanual.xml reports/st/st_list.ll src/hdrs/list.h src/interp/builtin.c src/interp/functab.c src/interp/interpi.h src/stdlib/list.c Added delete_list_element and __deleteel, and list node locking. * ChangeLog src/hdrs/array.h src/stdlib/array.c Added delete method for arrays. 2003-03-01 Perry Rapp * ChangeLog src/gedlib/indiseq.c src/hdrs/array.h src/hdrs/indiseq.h src/hdrs/interp.h src/hdrs/object.h src/hdrs/vtable.h src/interp/more.c src/interp/pvalue.c src/stdlib/array.c src/stdlib/object.c src/stdlib/vtable.c Bugfix: pvalues were lacking refcount. Also, __sort was completely broken. Changed llqsort to use non-recursive quicksort with median3 pivot. * ChangeLog src/hdrs/interp.h src/interp/more.c Changed __sort to call library qsort, which is much faster than the lifelines one I just tried to optimize (on Windows). * ChangeLog src/interp/more.c Bugfix to __sort compare function. * src/hdrs/win32/curses.h win32/mycurses.c (win32 curses) Dynamically size window buffer (because I want to use a larger window :)). 2003-02-28 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp src/gedlib/indiseq.c src/hdrs/indiseq.h src/hdrs/interp.h src/hdrs/standard.h src/interp/functab.c src/interp/interpi.h src/interp/intrpseq.c src/interp/more.c src/interp/pvalue.c src/stdlib/table.c src/stdlib/zstr.c *NEW src/hdrs/array.h *NEW src/hdrs/object.h *NEW src/stdlib/array.c *NEW src/stdlib/object.c Add array types to interpreter, and new sort function. Add object.* for client use of objects with vtables. * ChangeLog src/hdrs/list.h src/interp/more.c src/stdlib/list.c Copy sorted array back in __sort. * ChangeLog src/hdrs/Makefile.am src/stdlib/Makefile.am Add new array.*, object.*, vtable.* files to automakefiles. * ChangeLog src/stdlib/Makefile.am Fix vtable.h should be vtable.c in src/stdlib/Makefile.am. * ChangeLog src/hdrs/object.h src/interp/more.c src/stdlib/object.c Bugfix: list_to_array wasn't addref'ing pvalues. * ChangeLog README.MAINTAINERS List cvs tag command for versions. 2003-02-26 Perry Rapp * ChangeLog po/sv.po Updated Swedish message catalog. 2003-02-24 Perry Rapp * ChangeLog src/gedlib/init.c src/hdrs/interp.h src/hdrs/table.h src/hdrs/vtable.h src/interp/interpi.h src/interp/pvalalloc.c src/interp/pvalue.c src/stdlib/table.c src/stdlib/vtable.c Fix crash because placeabbrvs wasn't cleared. Implement vtable for pvalues. 2003-02-23 Perry Rapp * ChangeLog src/gedlib/charmaps.c src/gedlib/date.c src/gedlib/dispfmt.c src/gedlib/indiseq.c src/gedlib/keytonod.c src/gedlib/xlat.c src/hdrs/cache.h src/hdrs/date.h src/hdrs/gedcom.h src/hdrs/impfeed.h src/hdrs/indiseq.h src/hdrs/interp.h src/hdrs/liflines.h src/hdrs/list.h src/hdrs/lloptions.h src/hdrs/menuitem.h src/hdrs/screen.h src/hdrs/standard.h src/hdrs/table.h src/hdrs/translat.h src/hdrs/warehouse.h src/hdrs/zstr.h src/hdrs/win32/curses.h src/interp/alloc.c src/interp/builtin.c src/interp/interp.c src/interp/interpi.h src/interp/intrpseq.c src/interp/pvalalloc.c src/interp/pvalue.c src/interp/symtab.c src/liflines/brwsmenu.c src/liflines/export.c src/liflines/import.c src/liflines/llinesi.h src/liflines/loadsave.c src/liflines/menuset.c src/liflines/screen.c src/liflines/show.c src/liflines/valgdcom.c src/stdlib/zstr.c Fixed cacheel<->record linkage. Regularized structure tags (eg, CACHEEL is struct tag_cacheel *). Removed unused indiseq list (initset etc). * ChangeLog NEWS configure.in build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc build/rpm/lifelines.spec src/hdrs/version.h Bumped version to 3.0.25. Added notes in ChangeLog when 3.0.24b1, b2, and b3 were released. Released 3.0.25. * ChangeLog src/gedlib/indiseq.c src/hdrs/indiseq.h src/interp/intrpseq.c Renamed indiseq "vtbl" to "fnctbl" (it is a function table, not a vtable; it is stored in the container, not in the objects). This is preparatory to adding vtables to objects. * ChangeLog build/msvc6/dbverify/dbverifyCmd.dsp build/msvc6/llines/llinesprj.dsp src/gedlib/date.c src/gedlib/editvtab.c src/gedlib/gengedc.c src/gedlib/indiseq.c src/gedlib/init.c src/gedlib/keytonod.c src/gedlib/lloptions.c src/gedlib/xlat.c src/hdrs/impfeed.h src/hdrs/list.h src/hdrs/table.h src/interp/alloc.c src/interp/builtin.c src/interp/interp.c src/interp/symtab.c src/liflines/import.c src/liflines/llexec.c src/liflines/main.c src/liflines/screen.c src/liflines/valgdcom.c src/stdlib/list.c src/stdlib/proptbls.c src/stdlib/table.c src/tools/dbverify.c *NEW src/hdrs/vtable.h *NEW src/stdlib/vtable.c Began adding vtables, and began moving table memory mgmt to creation. * ChangeLog src/gedlib/keytonod.c: Bugfix: [ 691936 ] dbverify ASSERT (3.0.25) * ChangeLog src/gedlib/date.c src/gedlib/editvtab.c src/gedlib/indiseq.c src/gedlib/init.c src/gedlib/keytonod.c src/gedlib/lloptions.c src/gedlib/valtable.c src/liflines/llexec.c src/liflines/main.c src/liflines/screen.c src/liflines/valgdcom.c src/stdlib/proptbls.c src/stdlib/table.c src/tools/dbverify.c Changing some remove_table calls to destroy_table. * ChangeLog src/gedlib/xlat.c src/hdrs/interp.h src/hdrs/vtable.h src/interp/builtin.c src/interp/pvalalloc.c src/interp/pvalue.c src/liflines/import.c src/liflines/valgdcom.c src/stdlib/table.c Changing more remove_table calls to destroy_table. 2003-02-22 Perry Rapp * ChangeLog build/msvc6/llexec/llexec.dsp build/msvc6/llexec/llexec.rc build/msvc6/llines/llinesprj.dsp src/gedlib/date.c src/gedlib/translat.c src/hdrs/liflines.h src/hdrs/screen.h src/interp/Makefile.am src/interp/builtin.c src/interp/eval.c src/interp/interp.c src/interp/interpi.h jsrc/interp/rassa.c src/interp/write.c src/liflines/ask.c src/liflines/llexec.c src/liflines/screen.c *NEW src/interp/rptui.c *NEW src/interp/rptui.h Fix bug report flag not getting cleared after report. Implement ui/rpt locale switching for ui functions. Add report (& report ui) timing. Put debugger prompt into stdout (so user can read error before popup obscures it). Prototype some existing static functions in screen.c at top. Add names to all uiwindows (for debugging convenience). Fix uninitialized bug in report pronoun function. * ChangeLog build/msvc6/llines/llines.rc Update versions in win32 to today's date. 2003-02-18 Perry Rapp * ChangeLog src/gedlib/xlat.c Fix leak of zstring if iconv translation step fails. * ChangeLog src/gedlib/xlat.c Fix bug creating iconv step of xlat. 2003-02-17 Perry Rapp * ChangeLog src/interp/builtin.c Fix crash if null first arg to extractdate. 2003-02-12 Perry Rapp * ChangeLog po/fr.po src/btree/record.c src/hdrs/version.h src/interp/pvalalloc.c Compilation fixes. New French message catalog. Bump version to 3.0.24b10. 2003-02-11 Perry Rapp * ChangeLog src/gedlib/nodeio.c src/liflines/loadsave.c Read gedcom files in binary mode, due to bug of MS-Windows. * ChangeLog src/gedlib/init.c src/gedlib/locales.c src/gedlib/node.c src/liflines/main.c: Plug some minor, one time per db, leaks. * ChangeLog src/gedlib/nodeio.c Plug holes in error returns from string_to_node. * ChangeLog src/liflines/screen.c Free some leaked uiwindows. * ChangeLog src/btree/index.c src/btree/record.c src/btree/utils.c src/gedlib/keytonod.c src/hdrs/standard.h src/interp/builtin.c src/stdlib/lldate.c Close some filehandles under error conditions. More legible dates in logs. 2003-02-10 Perry Rapp * ChangeLog src/hdrs/version.h Bump version for new 3.0.24b9 beta release. 2003-02-08 Stephen Dum * ChangeLog src/interp/interp.c src/stdlib/stdstrng.c Plug a uninitialized memory read and two leaks. 2003-02-08 Perry Rapp * ChangeLog src/interp/builtin.c src/interp/write.c Check for null parent in addnode. * ChangeLog src/gedlib/keytonod.c ASSERT checks that lock & semilock stay nonnegative. * ChangeLog src/liflines/show.c Andreas Kirschbaum's fix to prevent crash in birth display. * ChangeLog src/gedlib/editvtab.c Andreas Kirschbaum's fix to prevent crash editing place abbrev. 2003-02-07 Perry Rapp * ChangeLog src/hdrs/indiseq.h src/hdrs/interp.h src/interp/Makefile.am: Fix some declaration errors, and add pvalalloc.c to makefile. 2003-02-06 Perry Rapp * ChangeLog src/gedlib/keytonod.c src/hdrs/cache.h src/hdrs/gedcom.h src/liflines/show.c Add lock counts to cache display (for debugging). * ChangeLog src/hdrs/indiseq.h src/hdrs/interp.h src/interp/builtin.c src/interp/interp.c src/interp/intrpseq.c src/interp/more.c src/interp/pvalue.c src/interp/write.c src/liflines/lbrowse.c src/liflines/tandem.c Wrap a lot of pvalue access casts into functions (eg, pvalue_to_seq). * ChangeLog build/msvc6/llines/llinesprj.dsp src/gedlib/indiseq.c src/gedlib/node.c src/hdrs/interp.h src/interp/builtin.c src/interp/interpi.h src/interp/pvalue.c src/stdlib/list.c src/stdlib/table.c *NEW src/interp/pvalalloc.c Move pvalue memory code into pvalalloc.c. Move all pvalue assignment code into set_pvalue. Change reference counted types to start at 0 (none until something elects to own them). Fix lock leak. 2003-02-04 Perry Rapp * ChangeLog src/gedlib/keytonod.c src/gedlib/node.c src/hdrs/cache.h src/hdrs/gedcom.h src/hdrs/interp.h src/interp/builtin.c src/interp/pvalue.c src/interp/write.c src/liflines/browse.c src/liflines/edit.c Lock nodes into direct cache while pvalues point at them. (Add record pointer to node, and cacheel pointer to record.) * ChangeLog src/gedlib/node.c src/hdrs/gedcom.h src/interp/builtin.c src/interp/pvalue.c src/interp/write.c More fixing of node ref counting. Try to fix __writeindi. * ChangeLog src/interp/write.c Add explanatory note about outstanding bug. * ChangeLog src/gedlib/node.c src/gedlib/replace.c src/hdrs/gedcom.h src/interp/write.c src/liflines/edit.c Fix __writeindi and __writefam (integrating replace.c with edit.c). * ChangeLog build/msvc6/llines/llinesprj.dsp src/gedlib/Makefile.am src/gedlib/gedcomi.h src/gedlib/node.c src/hdrs/gedcom.h src/hdrs/liflines.h src/interp/write.c src/liflines/add.c src/liflines/edit.c *NEW src/gedlib/nodeio.c Factored out GEDCOM I/O code from node.c into nodeio.c. * ChangeLog src/gedlib/nodeio.c src/liflines/add.c src/liflines/edit.c Move gedcom output routines from edit.c to nodeio.c. 2003-02-03 Matt Emmerton * ChangeLog src/interp/write.c Break links to parent/sibling NODEs during deletenode() 2003-02-03 Perry Rapp * ChangeLog src/gedlib/node.c src/hdrs/llstdlib.h src/interp/builtin.c src/interp/functab.c src/interp/interpi.h src/interp/write.c src/liflines/import.c src/liflines/llinesi.h src/liflines/valgdcom.c src/stdlib/strwhite.c Make deletenode only detach the node, not delete it. Also rename it detachnode (but leave old name for reports). Begin reading GEDCOM header before validation. Check GEDCOM form for LINEAGE-LINKED. 2003-02-02 Matt Emmerton * ChangeLog src/gedlib/node.c Fix memory leak in free_node(). 2003-02-02 Perry Rapp * ChangeLog src/gedlib/codesets.c src/gedlib/date.c src/gedlib/init.c src/hdrs/date.h src/liflines/llexec.c Cleanup some heap memory at end of program. * ChangeLog reports/st/st_list.ll src/gedlib/init.c src/gedlib/lloptions.c src/hdrs/lloptions.h src/interp/alloc.c src/interp/interp.c src/stdlib/listener.c Cleanup leak in pathinfos. Cleanup leak in lloptions listeners. Cleanup leak of dboptions in init_lifelines_db. * ChangeLog src/gedlib/init.c src/gedlib/keytonod.c src/hdrs/gedcom.h Cleanup cache memory when closing db. * ChangeLog src/interp/builtin.c src/interp/write.c Standardize more argument handling in interpreter. * ChangeLog src/hdrs/interp.h src/interp/builtin.c src/interp/more.c src/interp/pvalue.c: More standardizing argument handling in interpreter. * ChangeLog src/gedlib/node.c src/hdrs/gedcom.h src/hdrs/interp.h src/hdrs/list.h src/hdrs/standard.h src/interp/builtin.c src/interp/pvalue.c src/interp/write.c src/stdlib/list.c: More cleaning, and begin fixing write.c. 2003-02-01 Perry Rapp * ChangeLog src/gedlib/node.c src/interp/interp.c src/interp/more.c: Report correct program name in parse error. 2003-02-01 Steve Dum * ChangeLog src/gedlib/node.c src/liflines/llexec.c src/btree/opnbtree.c fixed some memory leaks *src/interp/interp.c clean up message output 2003-02-01 Perry Rapp * ChangeLog src/hdrs/interp.h src/interp/builtin.c src/interp/rassa.c: Make program interpreter stop with error if output file cannot be opened. * ChangeLog src/gedlib/xlat.c src/hdrs/feedback.h src/interp/builtin.c src/interp/eval.c src/interp/interp.c src/interp/rassa.c src/liflines/askprogram.c src/liflines/llexec.c src/liflines/screen.c src/stdlib/path.c src/stdlib/zstr.c: Fix bug introduced earlier today. Change some malloc calls to stdalloc. Plug leaks in zs_free & zs_move. Plug leak in fopenpath. * ChangeLog src/gedlib/node.c src/hdrs/gedcom.h src/interp/builtin.c src/interp/pvalue.c: Plug leaks in gettoday(). Plug leak in __date(). * src/hdrs/version.h: Make 3.0.24b8 beta. 2003-01-31 Steve Dum * reports/Makefile.am reports/gen_index update makefile to use VPATH to complete arguments to gen_index make gen_index not change index.html unless no errors. 2003-01-30 Perry Rapp * ChangeLog src/interp/interp.c: Clear previous error info when running a new report. * ChangeLog build/msvc6/llines/llines.rc src/hdrs/interp.h src/hdrs/zstr.h src/interp/alloc.c src/interp/builtin.c src/interp/pvalmath.c src/interp/pvalue.c src/stdlib/zstr.c: Improved error reporting for numeric operators. * ChangeLog src/hdrs/interp.h src/interp/pvalue.c: Fix some type conversion pvalue leaks. * ChangeLog reports/Makefile.am: Fix path in reports Makefile.am for perl indexing. * ChangeLog src/hdrs/version.h: Made release 3.0.24b7. * ChangeLog build/msvc6/llines/llines.rc: Bumped win32 version to 3.0.27b7. 2003-01-23 Steve Dum * ChangeLog reports/Makefile.am, reports/gen_index, reports/ll.png, reports/boc.gif, reports/*.ll, Modify Makefile.am to generate index.html file using perl script gen_index for reports. Add image files ll.png, boc.gif for use by index.html, and modify all reports to have a 1 paragraph description following the description tag. 2003-01-23 Perry Rapp * ChangeLog src/liflines/show.c: Fix for fatal (zstring) bug in date.c. * ChangeLog reports/st/st_date.ll src/gedlib/date.c: Fix bug in date parser (misparsing BC, BCE if no month). 2003-01-19 Perry Rapp * ChangeLog src/hdrs/interp.h src/interp/alloc.c src/interp/builtin.c src/interp/interp.c src/interp/more.c src/interp/pvalue.c: Minor improvements to builtin debugger. 2003-01-17 Perry Rapp * ChangeLog src/gedlib/charmaps.c src/gedlib/codesets.c src/gedlib/date.c src/gedlib/editmap.c src/gedlib/gedcomi.h src/gedlib/indiseq.c src/gedlib/init.c src/gedlib/translat.c src/gedlib/xlat.c src/hdrs/cscurses.h src/hdrs/icvt.h src/hdrs/standard.h src/hdrs/translat.h src/hdrs/xlat.h src/hdrs/zstr.h src/interp/builtin.c src/interp/interp.c src/liflines/cscurses.c src/liflines/import.c src/liflines/screen.c src/liflines/show.c src/liflines/valgdcom.c src/stdlib/icvt.c src/stdlib/sprintpic.c src/stdlib/strcvt.c src/stdlib/zstr.c: Changed ZSTR interface to use ZSTR instead of ZSTR *. 2003-01-16 Perry Rapp * ChangeLog src/hdrs/llnls.h: Fix llnls.h for systems which include libintl.h indirectly. * ChangeLog Makefile.am configure.in build/msvc6/llines/llines.rc src/hdrs/version.h *NEW tt/Makefile.am *NEW tt/README: Added translation tables to distribution. Bumped version to 3.0.24b6. 2003-01-14 Perry Rapp * ChangeLog src/liflines/show.c: Finish revision of birth & death display code. * ChangeLog tt/UTF-8__asciitex.tt: Improvements to asciitex subcoding for UTF-8. 2003-01-13 Perry Rapp * ChangeLog *NEW tt/UTF-8__asciitex.tt: Begin translation table for tex. * ChangeLog src/gedlib/node.c src/liflines/show.c: Comments on new birth display code. * ChangeLog src/gedlib/node.c src/liflines/show.c: Implement most of new birth display code. * ChangeLog src/liflines/show.c: Revise comments about what needs doing for display. 2003-01-12 Perry Rapp * ChangeLog src/gedlib/misc.c src/gedlib/node.c src/hdrs/gedcom.h src/liflines/show.c: Start new birth display code. 2003-01-11 Perry Rapp * ChangeLog configure.in src/hdrs/arch.h src/stdlib/path.c: Remove unused configure tests for strcmpi (was only used once in liflines/scan.c, and only as a test for equality). * ChangeLog src/gedlib/init.c src/gedlib/node.c src/hdrs/gedcom.h src/interp/builtin.c src/liflines/screen.c src/liflines/show.c: Minor revision of person display code & apply to ppl in fam. Fix db selection choosing wrong db. Add missing description for BTERR_UNLOCKED. Begin work on Bug#662765. 2003-01-07 Perry Rapp * build/msvc6/llines.rc Mark win32 llines resource for 3.0.24b5 beta. 2003-01-05 Perry Rapp * ABOUT-NLS ChangeLog configure.in build/Makefile.am build/gettext/README build/gettext/gettext.m4 build/gettext/iconv.m4 build/gettext/lcmessage.m4 build/gettext/lib-link.m4 intl/ChangeLog intl/Makefile.in intl/VERSION intl/bindtextdom.c intl/config.charset intl/dcgettext.c intl/dcigettext.c intl/dcngettext.c intl/dgettext.c intl/dngettext.c intl/eval-plural.h intl/gettext.c intl/gettextP.h intl/gmo.h intl/intl-compat.c intl/l10nflist.c intl/libgnuintl.h intl/loadinfo.h intl/loadmsgcat.c intl/localcharset.c intl/localename.c intl/ngettext.c intl/os2compat.c intl/plural-exp.h intl/textdomain.c src/arch/Makefile.am src/btree/Makefile.am src/gedlib/Makefile.am src/interp/Makefile.am src/liflines/Makefile.am src/stdlib/Makefile.am src/tools/Makefile.am *NEW build/gettext/intdiv0.m4 *NEW build/gettext/inttypes-pri.m4 *NEW build/gettext/inttypes.m4 *NEW build/gettext/inttypes_h.m4 *NEW build/gettext/stdint_h.m4 *NEW build/gettext/uintmax_t.m4 *NEW build/gettext/ulonglong.m4 gettextized to 0.11.5. Added ../../intl to all source includes (to get generated libintl.h for systems lacking it). * ChangeLog src/hdrs/version.h: Bump version to 3.0.24b5 for beta release. 2003-01-04 Matt Emmerton * ChangeLog src/arch/Makefile.am Ensure libarch.a doesn't get installed during 'make install'. 2003-01-04 Perry Rapp * ChangeLog src/liflines/main.c Supply valid window argument to keypad (to prevent crash on Solaris). * ChangeLog src/hdrs/version.h: Bumped version to 3.0.24b3 for new beta release for work on SunOS5.8. [Also released 3.0.24b4 beta version this same day.] 2003-01-03 Perry Rapp * ChangeLog *NEW src/arch/has_key.c: Add file with new has_key (trivial placeholder) implementation. * ChangeLog src/hdrs/arch.h: Add arch.h declaration for has_key if replaced. * ChangeLog src/gedlib/charmaps.c src/hdrs/arch.h src/hdrs/gedcom.h src/hdrs/version.h src/stdlib/llstrcmp.c src/stdlib/signals.c src/stdlib/stdlibi.h src/stdlib/strcvt.c: Cleanup (& bump version for another beta release). * ChangeLog configure.in src/stdlib/icvt.c src/stdlib/strcvt.c: More portability cleanup. * ChangeLog src/arch/has_key.c: Fix arch/has_key.c. [Released 3.0.24b1 and 3.0.24b2 beta versions this day.] 2003-01-02 Perry Rapp * ChangeLog configure.in src/hdrs/version.h: Placeholder version of has_key for Solaris system lacking it. * ChangeLog src/liflines/llexec.c src/liflines/screen.c src/tools/dbverify.c: Miscellaneous fixes for recent changes. * ChangeLog build/msvc6/llexec/llexec.dsp src/liflines/ask.c src/liflines/llexec.c src/liflines/newrecs.c src/liflines/screen.c: Improving llexec.c. * ChangeLog src/liflines/Makefile.am: Add ask.c to llexec.c. 2003-01-01 Perry Rapp * ChangeLog src/gedlib/keytonod.c src/hdrs/cache.h src/hdrs/interp.h src/hdrs/screen.h src/interp/pvalue.c src/liflines/browse.c src/liflines/llinesi.h src/liflines/pedigree.c src/liflines/screen.c src/liflines/show.c src/liflines/tandem.c: Replace some uses of NODE with RECORD. 2002-12-31 Perry Rapp * ChangeLog src/hdrs/interp.h src/interp/builtin.c src/stdlib/list.c: Fix report language __free command. 2002-12-29 Perry Rapp * ChangeLog reports/st/st_list.ll src/gedlib/indiseq.c src/gedlib/names.c src/gedlib/place.c src/hdrs/interp.h src/hdrs/list.h src/interp/builtin.c src/interp/interp.c src/liflines/main.c src/stdlib/list.c: Fix setel for reports. Add setel test to st_list.ll. 2002-12-28 Perry Rapp * ChangeLog docs/ll-reportmanual.xml: Fix typo in report manual (thanks to Steve Dum). 2002-12-19 Perry Rapp * ChangeLog reports/st/st_list.ll src/interp/pvalue.c: More list tests (c/o John Chandler). 2002-12-18 Perry Rapp * ChangeLog build/msvc6/llines/llines.rc: Updating lines.rc to say 3.0.24 (oops). 2002-12-17 Perry Rapp * ChangeLog reports/st/st_list.ll src/hdrs/list.h src/liflines/screen.c src/stdlib/list.c src/stdlib/proptbls.c: Add requeue tests to st/st_list.ll. Revert enqueue to push, and getel & FORLIST to go from tail to head. * ChangeLog NEWS configure.in build/rpm/lifelines.spec src/hdrs/version.h: Making version 3.0.24. 2002-12-16 Perry Rapp * ChangeLog po/fr.po: Updated French message catalog from Patrick Texier. * ChangeLog configure.in *NEW src/arch/wcslen.c: Replace wcslen if missing (Darwin). * ChangeLog src/interp/builtin.c: Fix enqueue bug introduced recently by Perry. * ChangeLog src/liflines/add.c src/liflines/browse.c src/liflines/edit.c: Remove unused variables. * ChangeLog src/liflines/browse.c: Fix add child asking twice bug. * ChangeLog reports/st/st_all.ll *NEW reports/st/st_list.ll: Add list self-test functions. 2002-12-16 Perry Rapp * ChangeLog src/gedlib/xlat.c: Fix bug dropping subcoding files. * ChangeLog *NEW tt/UTF-8__html.tt *NEW tt/UTF-8__unhtml.tt: Add files for html subcoding (for output html reports). * ChangeLog src/gedlib/xlat.c: Cleanup warnings. * ChangeLog NEWS configure.in build/msvc6/llines/llines.rc build/rpm/lifelines.spec src/hdrs/version.h: Making version 3.0.23. * ChangeLog build/msvc6/llexec/llexec.dsp build/msvc6/llexec/llexec.rc: Bring llexec MSVC6 project up-to-date. * ChangeLog po/da.po po/de.po po/el.po po/fr.po po/it.po po/sv.po reports/Makefile.am: Update distribution reports to include self-test reports. 2002-12-15 Perry Rapp * ChangeLog src/gedlib/codesets.c src/gedlib/init.c src/gedlib/translat.c src/gedlib/xlat.c src/hdrs/gedcheck.h src/hdrs/translat.h src/hdrs/xlat.h src/liflines/askgedc.c src/liflines/import.c src/liflines/loadsave.c src/liflines/main.c src/liflines/screen.c src/liflines/valgdcom.c: Implement codeset detection & conversion when loading GEDCOM files. * ChangeLog src/tools/btedit.c: Fix so btedit links successfully (under gcc). * ChangeLog configure.in src/gedlib/indiseq.c src/liflines/cscurses.c src/liflines/valgdcom.c: Fix crash involving pointers. Restore ALL_LINGUAS (to ease life of Debian maintainer). * ChangeLog src/interp/builtin.c: Remove unnecessary code conversions. * ChangeLog reports/st/st_all.ll reports/st/st_collate_UTF-8.ll src/gedlib/names.c src/stdlib/icvt.c src/stdlib/strcvt.c *NEW reports/st/st_string_UTF-8.ll: Implement Unicode in upper & lower. Begin UTF-8 string self-tests. * ChangeLog configure.in build/msvc6/llines/config.h reports/st/st_all.ll reports/st/st_collate_UTF-8.ll src/stdlib/strcvt.c: Protect iswupper via HAVE_ISWUPPER etc. 2002-12-14 Perry Rapp * ChangeLog src/gedlib/init.c: Fix ordering bug, in which menuitems were not translated into correct codeset, if databases in different locales. * ChangeLog src/gedlib/gstrings.c src/gedlib/keytonod.c src/gedlib/names.c src/gedlib/node.c src/hdrs/gedcom.h src/interp/builtin.c src/liflines/add.c src/liflines/browse.c src/liflines/edit.c src/liflines/merge.c src/liflines/miscutls.c src/liflines/screen.c src/liflines/show.c: Remove internal conversions to display codeset; this only needs to happen in cscurses. * ChangeLog reports/st/st_convert.ll src/gedlib/xlat.c *NEW tt/ANSEL_UTF-8.tt *NEW tt/UTF-8_ANSEL.tt: Add translation tables for ANSEL<->UTF-8. Add ANSEL<->UTF-8 test to self-test. 2002-12-13 Perry Rapp * ChangeLog src/gedlib/charmaps.c src/gedlib/codesets.c src/gedlib/editmap.c src/gedlib/editvtab.c src/gedlib/gstrings.c src/gedlib/indiseq.c src/gedlib/init.c src/gedlib/translat.c src/gedlib/xlat.c src/hdrs/cscurses.h src/hdrs/llstdlib.h src/hdrs/translat.h src/hdrs/xlat.h src/hdrs/win32/curses.h src/interp/rassa.c src/liflines/add.c src/liflines/browse.c src/liflines/cscurses.c src/liflines/edit.c src/liflines/export.c src/liflines/import.c src/liflines/merge.c src/liflines/miscutls.c src/liflines/newrecs.c src/liflines/pedigree.c src/liflines/screen.c src/liflines/show.c src/liflines/valgdcom.c src/stdlib/stdstrng.c win32/intlshim.c win32/mycurses.c: Finished rewrite of translation tables. Prepare to start width-limiting curses output functions. Tracked down win32 codeset conversion bug to sf.net/projects/gettext version not linking to MSVCRT.DLL, so not getting E2BIG back from iconv.dll. Fixed in sf.net/projects/gettext. Symptom was French locale string in u/c menu not getting codeset conversion. 2002-12-10 Perry Rapp * ChangeLog src/gedlib/init.c src/gedlib/translat.c src/hdrs/translat.h: Don't segfault loading db tts when db not open. * ChangeLog src/gedlib/editvtab.c src/gedlib/messages.c: Prevent segfault editing options or places in readonly db. 2002-12-09 Perry Rapp * ChangeLog build/msvc6/btedit/btedit.rc build/msvc6/btedit/bteditCmd.dsp build/msvc6/dbverify/dbVerify.rc build/msvc6/dbverify/dbverifyCmd.dsp src/tools/btedit.c: Fix btedit to compile (needed uu8 definition). Fix MSVC6 projects for btedit & dbverify. 2002-12-03 Perry Rapp * ChangeLog src/stdlib/list.c: Change nth_in_list to count from front (so dblist is in order). * ChangeLog src/gedlib/charmaps.c src/gedlib/translat.c src/gedlib/xlat.c src/hdrs/Makefile.am src/hdrs/screen.h src/hdrs/translat.h src/hdrs/zstr.h src/liflines/Makefile.am src/liflines/screen.c src/liflines/show.c src/stdlib/zstr.c *NEW src/hdrs/cscurses.h *NEW src/liflines/cscurses.c: New cscurses.* module to translate between internal & GUI codesets. * ChangeLog build/msvc6/llines/llinesprj.dsp: Add cscurses.* files to MSVC6 project. 2002-12-02 Perry Rapp * ChangeLog *NEW tt/CP1250_UTF-8.tt *NEW tt/CP1251_UTF-8.tt *NEW tt/CP1252_UTF-8.tt *NEW tt/CP437_UTF-8.tt *NEW tt/CP850_UTF-8.tt *NEW tt/CP852_UTF-8.tt *NEW tt/ISO-8859-15_UTF-8.tt *NEW tt/ISO-8859-1_UTF-8.tt *NEW tt/ISO-8859-2_UTF-8.tt *NEW tt/ISO-8859-3_UTF-8.tt *NEW tt/ISO-8859-4_UTF-8.tt *NEW tt/UTF-8_CP1250.tt *NEW tt/UTF-8_CP1251.tt *NEW tt/UTF-8_CP1252.tt *NEW tt/UTF-8_CP437.tt *NEW tt/UTF-8_CP850.tt *NEW tt/UTF-8_CP852.tt *NEW tt/UTF-8_ISO-8859-1.tt *NEW tt/UTF-8_ISO-8859-15.tt *NEW tt/UTF-8_ISO-8859-2.tt *NEW tt/UTF-8_ISO-8859-3.tt *NEW tt/UTF-8_ISO-8859-4.tt: Adding basic translation tables for common codesets. 2002-12-01 Perry Rapp * ChangeLog src/gedlib/charmaps.c src/gedlib/editmap.c src/gedlib/gedcomi.h src/gedlib/gengedc.c src/gedlib/init.c src/gedlib/keytonod.c src/gedlib/messages.c src/gedlib/node.c src/gedlib/translat.c src/gedlib/xlat.c src/hdrs/gedcom.h src/hdrs/icvt.h src/hdrs/interp.h src/hdrs/list.h src/hdrs/llstdlib.h src/hdrs/table.h src/hdrs/translat.h src/hdrs/xlat.h src/hdrs/zstr.h src/interp/alloc.c src/interp/builtin.c src/interp/eval.c src/interp/functab.c src/interp/interp.c src/interp/interpi.h src/interp/pvalue.c src/interp/yacc.h src/interp/yacc.y src/stdlib/icvt.c src/stdlib/list.c src/stdlib/path.c src/stdlib/signals.c src/stdlib/stralloc.c src/stdlib/strutf8.c src/stdlib/table.c src/stdlib/zstr.c: Made const correct through keytonod.c. Moved RPTINFO structure to hold report properties. Made report local proc & func tables, and revised call handlers for both (duplicate procs & funcs not allowed in one file, and flagged at runtime if an ambiguous call is encountered). Altered include implementation to look in local directory first. Changed exercise reports to self-test (st_*). Implemented use of local translation tables if iconv missing. Created some common translation tables; enough to pass st_convert. * ChangeLog *NEW reports/st/st_all.ll *NEW reports/st/st_aux.ll *NEW reports/st/st_collate.ll *NEW reports/st/st_collate_8859-1.ll *NEW reports/st/st_collate_UTF-8.ll *NEW reports/st/st_convert.ll *NEW reports/st/st_date.ll *NEW reports/st/st_db.ll *NEW reports/st/st_number.ll *NEW reports/st/st_string.ll *DELETED reports/exer_8859-1.ll *DELETED reports/exer_UTF-8.ll *DELETED reports/exercise.ll: New self-test reports. * ChangeLog src/interp/builtin.c src/interp/interp.c src/interp/yacc.h src/stdlib/list.c: Cleanup warnings. * ChangeLog src/gedlib/codesets.c: Fix for nl_langinfo returning 0. * ChangeLog src/liflines/screen.c *DELETED src/interp/yacc.h: Localize some English strings (found thanks to Frank Ellebrecht). Remove src/interp/yacc.h (senseless to have it in cvs without yacc.c). 2002-11-29 Perry Rapp * ChangeLog src/gedlib/codesets.c src/gedlib/init.c src/gedlib/lloptions.c src/gedlib/translat.c src/hdrs/icvt.h src/hdrs/lloptions.h src/hdrs/translat.h src/hdrs/zstr.h src/liflines/main.c src/liflines/screen.c src/stdlib/icvt.c src/stdlib/zstr.c src/tools/dispcode.c src/tools/prettytt.c: More codeset work. * ChangeLog src/gedlib/codesets.c src/gedlib/init.c src/gedlib/lloptions.c src/gedlib/translat.c src/hdrs/icvt.h src/hdrs/lloptions.h src/hdrs/llstdlib.h src/hdrs/translat.h src/hdrs/zstr.h src/interp/alloc.c src/interp/builtin.c src/interp/functab.c src/interp/interp.c src/interp/interpi.h src/liflines/main.c src/liflines/screen.c src/stdlib/icvt.c src/stdlib/strutf8.c src/stdlib/zstr.c src/tools/dispcode.c src/tools/prettytt.c: More codeset work. Changed __utf8 to __bytecode (& added codeset argument). 2002-11-28 Perry Rapp * .linesrc ChangeLog lines.cfg build/msvc6/llines/llinesprj.dsp src/arch/platform.c src/gedlib/Makefile.am src/gedlib/charmaps.c src/gedlib/codesets.c src/gedlib/init.c src/gedlib/translat.c src/hdrs/Makefile.am src/hdrs/arch.h src/hdrs/gedcom.h src/hdrs/list.h src/hdrs/llnls.h src/hdrs/llstdlib.h src/hdrs/standard.h src/hdrs/translat.h src/interp/interp.c src/interp/write.c src/liflines/askprogram.c src/liflines/screen.c *NEW src/gedlib/xlat.c *NEW src/hdrs/xlat.h *DELETED src/hdrs/platform.h: Remove platform.h & put decls in arch.h. Make new layered implementation of codesets: translat, codesets, xlat, charmaps. 2002-11-27 Perry Rapp * ChangeLog src/gedlib/init.c src/gedlib/translat.c src/hdrs/win32/curses.h src/liflines/main.c src/stdlib/icvt.c src/stdlib/stdstrng.c win32/iconvshim.c win32/mycurses.c *NEW src/gedlib/codesets.c *NEW src/hdrs/codesets.h: Ongoing reimplementation of codesets. * ChangeLog src/gedlib/Makefile.am src/hdrs/Makefile.am: Add new codesets.* files to Makefiles. * ChangeLog build/msvc6/llines/llinesprj.dsp src/arch/Makefile.am src/gedlib/Makefile.am src/gedlib/charmaps.c src/gedlib/codesets.c src/gedlib/init.c src/hdrs/llstdlib.h src/hdrs/win32/curses.h src/interp/builtin.c src/interp/interp.c src/interp/rassa.c src/liflines/ask.c src/liflines/llexec.c src/liflines/main.c src/stdlib/Makefile.am src/stdlib/llstrcmp.c src/stdlib/path.c src/stdlib/signals.c src/stdlib/stdlibi.h win32/mycurses.c *NEW src/arch/platform.c *NEW src/hdrs/platform.h Add some win32 specific code in arch/platform.c. Remove uu8 from lib/stdlib.a. 2002-11-26 Perry Rapp * ChangeLog src/gedlib/charmaps.c src/gedlib/editvtab.c src/gedlib/gedcomi.h src/gedlib/gstrings.c src/gedlib/indiseq.c src/gedlib/keytonod.c src/gedlib/names.c src/gedlib/node.c src/gedlib/translat.c src/gedlib/valtable.c src/hdrs/gedcom.h src/hdrs/icvt.h src/hdrs/standard.h src/hdrs/translat.h src/hdrs/zstr.h src/interp/builtin.c src/interp/interp.c src/interp/rassa.c src/liflines/add.c src/liflines/browse.c src/liflines/edit.c src/liflines/export.c src/liflines/import.c src/liflines/merge.c src/liflines/miscutls.c src/liflines/newrecs.c src/liflines/pedigree.c src/liflines/screen.c src/liflines/show.c src/liflines/valgdcom.c src/stdlib/icvt.c src/stdlib/signals.c src/stdlib/zstr.c: Rename TRANMAPPING to XLAT (will be main interface to codeset conversion). Consolidate translation table code into charmaps.c. Making file header license statements shorter (with Tom's permission). Implement new XLAT chains for simple case of single iconv step chain. Fix uninitialized string bug in signal handler code. 2002-11-25 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp src/hdrs/Makefile.am src/hdrs/standard.h src/hdrs/version.h src/interp/builtin.c src/liflines/screen.c *NEW src/hdrs/list.h *NEW src/stdlib/list.c *DELETED src/stdlib/double.c: Renamed double.c to list.c and moved list declarations from standard.h to list.h. Changed enqueue, dequeue, requeue to work with head-to-tail FORLIST. * ChangeLog src/gedlib/date.c src/hdrs/llstdlib.h src/stdlib/appendstr.c src/stdlib/sprintpic.c: Rewrote date code to remove appendstr & use zstrings instead. 2002-11-24 Perry Rapp * ChangeLog src/gedlib/charmaps.c src/gedlib/date.c src/gedlib/editmap.c src/gedlib/editvtab.c src/gedlib/indiseq.c src/gedlib/init.c src/gedlib/locales.c src/gedlib/translat.c src/hdrs/llstdlib.h src/hdrs/zstr.h src/interp/builtin.c src/interp/interp.c src/interp/more.c src/liflines/ask.c src/liflines/askprogram.c src/liflines/delete.c src/liflines/screen.c src/liflines/valgdcom.c src/stdlib/Makefile.am src/stdlib/icvt.c src/stdlib/path.c src/stdlib/stdstrng.c src/stdlib/strapp.c src/stdlib/zstr.c *NEW src/stdlib/strset.c: More work trying to simplify string functions. Starting to replace appendstr* functions. * src/gedlib/editmap.c src/interp/Makefile.am src/interp/interp.c src/interp/pvalmath.c src/stdlib/zstr.c: Cleanup. 2002-11-23 Perry Rapp * ChangeLog src/gedlib/editvtab.c src/gedlib/indiseq.c src/gedlib/translat.c src/gedlib/valtable.c src/hdrs/Makefile.am src/hdrs/icvt.h src/hdrs/translat.h src/hdrs/zstr.h src/interp/builtin.c src/interp/interp.c src/interp/rassa.c src/stdlib/Makefile.am src/stdlib/icvt.c src/stdlib/llstrcmp.c src/stdlib/strcvt.c src/stdlib/zstr.c *DELETED src/hdrs/bfs.h *DELETED src/stdlib/bfs.c: Finished replacing bfs with zstr. 2002-11-22 Perry Rapp * ChangeLog src/hdrs/llstdlib.h src/liflines/llexec.c src/liflines/main.c src/stdlib/path.c src/stdlib/stdstrng.c: New function isasciiletter for clarity, and used it where appropriate. 2002-11-20 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp src/gedlib/editvtab.c src/gedlib/indiseq.c src/gedlib/locales.c src/gedlib/translat.c src/gedlib/valtable.c src/hdrs/icvt.h src/hdrs/standard.h src/hdrs/translat.h src/interp/interp.c src/interp/rassa.c src/stdlib/icvt.c src/stdlib/llstrcmp.c src/stdlib/strcvt.c *NEW src/hdrs/zstr.h *NEW src/stdlib/zstr.c: Add zstr.*, and start replacing bfptr uses with ZSTR. Fix some tricky fencepost errors in icvt.c involving UCS-2. * ChangeLog src/hdrs/Makefile.am src/stdlib/Makefile.am: Add zstr.* to Makefiles. * ChangeLog src/hdrs/zstr.h: Remove duplicate typedef to make gcc happy. * ChangeLog src/hdrs/win32/iconvshim.h win32/iconvshim.c win32/intlshim.c: More detail in reporting win32 intl/iconv dll versions. 2002-11-17 Perry Rapp * ChangeLog src/gedlib/translat.c src/hdrs/translat.h: Remove some unused code. 2002-11-16 Perry Rapp * ChangeLog reports/exer_8859-1.ll reports/exer_UTF-8.ll reports/exercise.ll src/gedlib/names.c: More error info in report collation tests. 2002-11-15 Perry Rapp * ChangeLog src/hdrs/standard.h Change FORLIST to go from front to back of list. 2002-11-14 Perry Rapp * ChangeLog src/gedlib/lloptions.c src/hdrs/llstdlib.h src/stdlib/stdstrng.c: Rename isnumber to isnumch (to avoid clash with existing function). Cleanup of lloptions.c. 2002-11-11 Perry Rapp * ChangeLog build/rpm/lifelines.spec po/LINGUAS *NEW: po/da.po Added Danish translation (da.po). * ChangeLog win32/iconvshim.c: Win32: load iconv.dll whenever iconvshim property queried, in case not yet loaded. * ChangeLog NEWS configure.in lines.cfg build/msvc6/dbverify/dbVerify.rc build/msvc6/dbverify/dbverifyCmd.dsp build/msvc6/llexec/llexec.dsp build/msvc6/llexec/llexec.rc build/msvc6/llines/llines.rc build/rpm/lifelines.spec po/da.po po/de.po po/el.po po/fr.po po/it.po po/sv.po src/hdrs/version.h: Creating release 3.0.22. * ChangeLog lines.cfg docs/Install.LifeLines.Windows.txt: Revising default MS-Windows directory layout & documentation. * ChangeLog build/rpm/lifelines.spec: Needed to add da.po to one more location in rpm spec file. 2002-11-08 Perry Rapp * ChangeLog src/interp/builtin.c src/liflines/brwsmenu.c src/liflines/screen.c: Fix bug in dynamic menu code. 2002-11-07 Perry Rapp * ChangeLog po/POTFILES.in po/de.po po/el.po po/fr.po po/it.po po/sv.po src/stdlib/llstrcmp.c src/stdlib/strcvt.c: Working on character handling code. * src/hdrs/llstdlib.h src/liflines/main.c src/liflines/screen.c src/stdlib/llstrcmp.c: More work on character handling code. * ChangeLog configure.in: Fix configure.in tests for ngettext & bind_textdomain_codeset. 2002-11-05 Perry Rapp * ChangeLog src/gedlib/indiseq.c src/gedlib/names.c src/hdrs/llstdlib.h src/hdrs/mystring.h src/stdlib/mystring.c src/stdlib/stdstrng.c: Simplify & clarify some character functions. 2002-11-03 Perry Rapp * ChangeLog src/liflines/llexec.c: Fix llexec for yesterday's db api changes. 2002-11-02 Perry Rapp * ChangeLog src/gedlib/init.c src/hdrs/btree.h src/hdrs/gedcom.h src/interp/builtin.c src/liflines/main.c: Change open & create db calls to only take one argument. More explicit keyfile errors. * ChangeLog src/gedlib/init.c src/liflines/llexec.c src/liflines/loadsave.c src/liflines/main.c src/liflines/miscutls.c src/liflines/screen.c src/tools/btedit.c src/tools/dbverify.c: Renamed btreepath to readpath_file. 2002-10-31 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp src/hdrs/menuitem.h src/liflines/dynmenu.c src/liflines/menuset.c src/liflines/screen.c: Code cleanup. * ChangeLog docs/ll-userguide.xml src/gedlib/messages.c src/hdrs/gedcom.h src/liflines/llexec.c src/liflines/main.c: Remove unused arguments -m and -z. Update docs. * ChangeLog docs/ll-reportmanual.xml: Fix reported typos. 2002-10-28 Perry Rapp * ChangeLog src/hdrs/menuitem.h src/hdrs/screen.h src/liflines/Makefile.am src/liflines/browse.c src/liflines/screen.c src/liflines/tandem.c win32/mycurses.c NEW: src/liflines/brwsmenu.c NEW: src/liflines/dynmenu.c NEW: src/liflines/menuset.c DELETED: src/liflines/menuitem.c: Split dynamic menu code into three new files. 2002-10-21 Perry Rapp * .linesrc ChangeLog lines.cfg src/gedlib/lloptions.c src/hdrs/llstdlib.h src/interp/more.c src/stdlib/stralloc.c: Implement variables for config file. * ChangeLog win32/iconvshim.c win32/intlshim.c: Give multiple default filenames to (win32) iconv & intl shims. * .linesrc ChangeLog lines.cfg: Update config files to reflect two CrashLog entries now. 2002-10-20 Perry Rapp * ChangeLog po/sv.po src/liflines/screen.c: Update to Swedish translation (sv.po). Fix for ? & q browse menu items not being translated. * ChangeLog build/msvc6/llines/config.h src/gedlib/messages.c src/interp/alloc.c src/interp/builtin.c src/liflines/delete.c src/liflines/screen.c: Fix screen.c for crash. Pluralize some entries (_pl needs string literals). * ChangeLog build/msvc6/llines/llinesprj.dsp src/interp/interp.c Cosmetic. 2002-10-19 Perry Rapp * ChangeLog NEWS build/msvc6/llexec/llexec.rc build/msvc6/llines/llinesprj.dsp src/arch/scandir.c src/gedlib/init.c src/gedlib/messages.c src/hdrs/Makefile.am src/hdrs/liflines.h src/hdrs/llstdlib.h src/hdrs/screen.h src/hdrs/table.h src/interp/interp.c src/liflines/Makefile.am src/liflines/askprogram.c src/liflines/llexec.c src/liflines/loadsave.c src/liflines/main.c src/liflines/screen.c src/stdlib/Makefile.am src/stdlib/path.c src/stdlib/stdstrng.c src/stdlib/table.c src/tools/btedit.c win32/mycurses.c NEW: src/hdrs/proptbls.h NEW: src/liflines/askgedc.c NEW: src/stdlib/proptbls.c: Rewrote askprogram.c to split up UI & parsing. Added ask_for_gedcom. Handle input redirection in Win32 console implementation. * ChangeLog win32/mycurses.c: Handle output redirection in Win32 console implementation. 2002-10-18 Perry Rapp * ChangeLog src/gedlib/init.c src/stdlib/path.c: Fix bug in chop_path. 2002-10-17 Perry Rapp * ChangeLog src/gedlib/init.c src/stdlib/path.c: Cleanup in path code. 2002-10-15 Perry Rapp * ChangeLog README.LAYOUT po/de.po po/el.po po/fr.po po/it.po po/sv.po src/btree/opnbtree.c src/gedlib/locales.c src/hdrs/gedcom.h src/hdrs/interp.h src/hdrs/screen.h src/interp/eval.c src/interp/interp.c src/liflines/add.c src/liflines/advedit.c src/liflines/ask.c src/liflines/browse.c src/liflines/delete.c src/liflines/export.c src/liflines/lbrowse.c src/liflines/llinesi.h src/liflines/loadsave.c src/liflines/merge.c src/liflines/pedigree.c src/liflines/swap.c src/liflines/tandem.c: Code cleanup. 2002-10-11 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp src/hdrs/Makefile.am src/hdrs/feedback.h src/hdrs/gedcom.h src/hdrs/liflines.h src/hdrs/win32/curses.h src/interp/alloc.c src/interp/builtin.c src/liflines/add.c src/liflines/advedit.c src/liflines/ask.c src/liflines/askprogram.c src/liflines/browse.c src/liflines/delete.c src/liflines/export.c src/liflines/llinesi.h src/liflines/merge.c src/liflines/newrecs.c src/liflines/screen.c NEW: src/hdrs/uiprompts.h: Convert some use of NODE to RECORD. Work on ui separation. * ChangeLog src/btree/traverse.c src/hdrs/btree.h src/hdrs/impfeed.h src/hdrs/version.h src/interp/builtin.c src/liflines/export.c src/liflines/import.c src/liflines/llinesi.h src/liflines/loadsave.c src/liflines/newrecs.c src/liflines/screen.c: Pull curses UI out of export.c (into loadsave.c). 2002-10-07 Perry Rapp * ChangeLog src/hdrs/liflines.h src/interp/builtin.c src/interp/more.c src/liflines/ask.c src/liflines/browse.c src/liflines/llexec.c: Fix llexec.c to compile, and implement ask_for_int, ask_for_string, and ask_for_dbname. * ChangeLog src/gedlib/lloptions.c src/hdrs/interp.h src/hdrs/lloptions.h src/interp/interp.c src/liflines/llexec.c src/liflines/main.c src/stdlib/table.c: Add -I argument to pass in properties from commandline (eg, -Iroot_indi=I1). Include llexec.h as source for llexec. * ChangeLog NEWS build/rpm/lifelines.spec Add llexec to rpm. Mention new -I param in NEWS. * ChangeLog src/liflines/Makefile.am: Include llexec.h as source for llexec. * ChangeLog configure.in build/msvc6/llines/llines.rc build/rpm/lifelines.spec po/de.po po/el.po po/fr.po po/it.po po/sv.po src/hdrs/version.h: Releasing version 3.0.21. * ChangeLog build/msvc6/llexec/llexec.rc Update version of llexec. 2002-10-06 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp src/gedlib/Makefile.am src/gedlib/editmap.c src/gedlib/editvtab.c src/hdrs/feedback.h src/hdrs/gedcom.h src/interp/alloc.c src/interp/more.c src/liflines/Makefile.am src/liflines/error.c src/liflines/main.c src/liflines/screen.c src/liflines/show.c NEW: src/gedlib/dispfmt.c NEW: src/liflines/llexec.c NEW: src/liflines/llexec.h: Add new stripped down target llexec (doesn't function yet). * ChangeLog NEWS README.LAYOUT: Update documentation. * ChangeLog NEW: build/msvc6/llexec/config.h NEW: build/msvc6/llexec/llexec.dsp NEW: build/msvc6/llexec/llexec.dsw NEW: build/msvc6/llexec/llexec.rc NEW: build/msvc6/llexec/resource.h: Add MSVC6 build stuff for llexec. * ChangeLog src/interp/more.c: Fixing more report language type error messages. 2002-10-05 Perry Rapp * ChangeLog src/interp/interp.c: Fix bug in -x (execute report) option. 2002-10-04 Perry Rapp * ChangeLog build/msvc6/llines/llines.rc src/gedlib/indiseq.c src/hdrs/version.h: Handle bad collation gracefully in indiseq (do not ASSERT). 2002-10-01 Perry Rapp * ChangeLog src/stdlib/fpattern.c: Modify fpattern to recognize __unix__ as reported for OpenBSD. 2002-09-29 Perry Rapp * ChangeLog NEWS configure.in build/msvc6/llines/llines.rc build/rpm/lifelines.spec po/de.po po/el.po po/fr.po po/it.po po/sv.po src/gedlib/init.c src/gedlib/locales.c src/hdrs/gedcom.h src/hdrs/version.h src/liflines/screen.c: Implement rpm spec patch by Karl DeBisschop, and add msg catalogs. Added LOCALEDIR & LocaleDir to u/c menu display. Change version to 3.0.19. * ChangeLog src/hdrs/version.h src/liflines/main.c: Fix locale initialization. Change version to 3.0.20. 2002-09-26 Matt Emmerton * ChangeLog Makefile.am autogen.sh configure.in build/Makefile.am src/arch/Makefile.am src/btree/Makefile.am src/gedlib/Makefile.am src/interp/Makefile.am src/liflines/Makefile.am src/stdlib/Makefile.am src/tools/Makefile.am Adjust for new build tree layout * build/msvc6/Makefile.am build/rpm/Makefile.am build/gettext/Makefile.am build/autotools/Makefile.am Remove unneccessary Makefiles * build/gnu Remove obsolete directory 2002-09-26 Perry Rapp * ChangeLog src/gedlib/locales.c src/liflines/screen.c: i18n menu page title. Fix locales.c to call llsetlocale (for win32 fix for locale names). * ChangeLog build/msvc6/llines/llinesprj.dsp src/gedlib/init.c src/gedlib/lloptions.c src/gedlib/locales.c src/hdrs/gedcom.h src/hdrs/lloptions.h src/hdrs/llstdlib.h src/liflines/menuitem.c src/stdlib/Makefile.am src/tools/wprintf.c NEW: src/stdlib/listener.c Propagate on-the-fly language changes to menuitem.c. * .linesrc ChangeLog lines.cfg: List LocaleDir in config files. 2002-09-25 Perry Rapp * ChangeLog build/msvc6/llines/llines.rc src/hdrs/version.h src/interp/builtin.c: I18n ordinals, cardinals, and personal pronouns in builtin fncs. * ChangeLog po/fr.po: Update to Patrick Texier's newest fr.po (added plural header). 2002-09-23 Perry Rapp * ChangeLog src/gedlib/names.c: Bugfix to id_by_key (was crashing on nonexistent key number). * ChangeLog README.MAINTAINERS: Update for new paths. * ChangeLog configure.in build/msvc6/llines/llines.rc build/rpm/lifelines.spec po/de.po po/el.po po/fr.po po/it.po po/sv.po src/hdrs/version.h: Releasing 3.0.18. * ChangeLog build/msvc6/llines/llinesprj.dsp docs/Install.LifeLines.Windows.txt: Update win32 install instructions to refer to win32 gettext/iconv at sourceforge. Update msvc6 project to new paths for release mode. 2002-09-22 Perry Rapp * ChangeLog configure.in po/POTFILES.in po/de.po po/el.po po/fr.po po/it.po po/sv.po: Fixing build system for relocated source files. * ChangeLog src/stdlib/environ.c: Bugfix (mktemp failed on subsequent dbs) (sf#603804). * ChangeLog src/stdlib/environ.c: Security fix for mktemp under unix. 2002-09-21 Perry Rapp * Makefile.am configure.in build/msvc6/llines/llinesprj.dsp NEW: src/Makefile.am: Fixing build system for relocated source files. 2002-07-31 Perry Rapp * ChangeLog po/LINGUAS NEW: po/fr.po: Add French message file. * ChangeLog build/msvc6/llines/config.h gedlib/init.c: Support bind_textdomain_codeset in Win/MSVC version. * ChangeLog gedlib/keytonod.c liflines/error.c tools/dbverify.c: Add missing key info messages to crash log. * ChangeLog build/msvc6/dbverify/dbVerify.rc gedlib/keytonod.c hdrs/standard.h liflines/error.c stdlib/lldate.c: Clean up error messages for missing keys in crash log. 2002-07-27 Perry Rapp * ChangeLog interp/interp.c interp/parse.h interp/yacc.h interp/yacc.y: Fix typo in yacc.y (yyloc -> yylloc). * interp/interp.c interp/lex.c interp/parse.h interp/yacc.y: Remove token location code (bison 1.28 & 1.35 have different yyllocs). 2002-07-24 Perry Rapp * ChangeLog build/msvc6/llines/llines.rc hdrs/interp.h hdrs/liflines.h interp/alloc.c interp/builtin.c interp/eval.c interp/interp.c interp/interpi.h interp/rassa.c liflines/ask.c liflines/askprogram.c liflines/export.c liflines/loadsave.c reports/exercise.ll stdlib/path.c stdlib/signals.c: NEW: reports/exer_8859-1.ll NEW: reports/exer_UTF-8.ll: Propagate both user-specified & opened path through program logic. Convert report to internal codeset. * ChangeLog configure.in build/msvc6/llines/llines.rc build/rpm/lifelines.spec hdrs/interp.h hdrs/version.h interp/builtin.c interp/eval.c interp/interp.c interp/more.c liflines/main.c reports/exer_8859-1.ll reports/exer_UTF-8.ll reports/exercise.ll tools/dbverify.c: Make report strcmp call strcmp_loc (so it gets localized collation). Improve collation tests in exercise scripts. Bump version to 3.0.18pre. 2002-07-22 Perry Rapp * ChangeLog btree/addkey.c gedlib/charmaps.c gedlib/date.c gedlib/editmap.c gedlib/editvtab.c gedlib/init.c gedlib/keytonod.c gedlib/lloptions.c gedlib/locales.c gedlib/names.c gedlib/node.c gedlib/property.c gedlib/translat.c hdrs/gedcom.h hdrs/llstdlib.h hdrs/standard.h interp/interp.c interp/more.c interp/pvalue.c liflines/add.c liflines/ask.c liflines/askprogram.c liflines/browse.c liflines/delete.c liflines/error.c liflines/loadsave.c liflines/menuitem.c liflines/screen.c liflines/show.c liflines/valgdcom.c stdlib/appendstr.c stdlib/llstrcmp.c stdlib/memalloc.c stdlib/path.c stdlib/signals.c stdlib/sprintpic.c stdlib/stdstrng.c stdlib/stralloc.c stdlib/strapp.c stdlib/strcvt.c stdlib/strutf8.c: Replaced string modules' use of global with argument (utf8). Fixed some utf8 string bugs. Renamed int_utf8 to uu8. 2002-07-21 Perry Rapp * ChangeLog gedlib/charmaps.c: Cleanup charmaps code. 2002-07-18 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp hdrs/interp.h interp/Makefile.am interp/alloc.c interp/interp.c interp/interpi.h interp/lex.c interp/parse.h interp/yacc.y liflines/main.c DELETED: interp/parse.c Simply parse state (context) by exposing it. 2002-07-14 Perry Rapp * ChangeLog configure.in build/msvc6/llines/llinesprj.dsp hdrs/interp.h hdrs/version.h interp/Makefile.am interp/interp.c interp/lex.c interp/yacc.h interp/yacc.y po/POTFILES.in po/de.po po/el.po po/it.po po/sv.po stdlib/icvt.c: Change yacc.y to use recursive parser. New function string_node_in_internal_codeset to convert report codeset to internal. * ChangeLog build/msvc6/llines/llinesprj.dsp hdrs/interp.h hdrs/llstdlib.h interp/Makefile.am interp/alloc.c interp/interp.c interp/lex.c interp/yacc.h interp/yacc.y liflines/pedigree.c stdlib/path.c NEW: interp/parse.c NEW: interp/parse.h: Move more parse globals into parse context. 2002-07-12 Perry Rapp * ChangeLog stdlib/icvt.c Bugfix to iconv_translate. 2002-07-09 Perry Rapp * ChangeLog gedlib/charmaps.c stdlib/stralloc.c: Bugfix to strconcat & iconv_translate. 2002-07-08 Perry Rapp * ChangeLog build/msvc6/llines/llines.rc gedlib/indiseq.c gedlib/messages.c hdrs/llstdlib.h hdrs/version.h liflines/screen.c stdlib/llstrcmp.c stdlib/stdstrng.c: Add details to notes & sources popup lists. 2002-07-07 Perry Rapp * ChangeLog hdrs/isolangs.h: Added new header isolangs.h. * ChangeLog stdlib/llstrcmp.c stdlib/memalloc.c stdlib/strcvt.c: Moved string widening code in strcmp into new function makewide in strcvt.c. 2002-07-04 Perry Rapp * ChangeLog gedlib/locales.c hdrs/Makefile.am: Move language & country arrays from gedlib/locales.c into hdrs/isolang.h. 2002-07-03 Perry Rapp * ChangeLog build/msvc6/btedit/btedit.rc build/msvc6/btedit/bteditCmd.dsp build/msvc6/dbverify/dbVerify.rc build/msvc6/dbverify/dbverifyCmd.dsp build/msvc6/llines/llines.rc stdlib/llstrcmp.c tools/btedit.c: * ChangeLog configure.in: Test for wchar.h & wcscoll. Fix builds. * ChangeLog gedlib/locales.c hdrs/llstdlib.h stdlib/strapp.c: More work on converting standard locale names to Windows names. 2002-07-02 Perry Rapp * ChangeLog arch/vsnprintf.c build/msvc6/llines/config.h build/msvc6/llines/llines.rc build/msvc6/llines/llinesprj.dsp gedlib/Makefile.am gedlib/gengedc.c gedlib/indiseq.c gedlib/lloptions.c gedlib/translat.c hdrs/Makefile.am hdrs/bfs.h hdrs/feedback.h hdrs/gedcom.h hdrs/impfeed.h hdrs/llnls.h hdrs/lloptions.h hdrs/metadata.h hdrs/warehouse.h hdrs/win32/iconvshim.h liflines/main.c liflines/menuitem.c liflines/pedigree.c stdlib/Makefile.am stdlib/bfs.c stdlib/llstrcmp.c stdlib/strutf8.c NEW: gedlib/locales.c NEW: hdrs/icvt.h NEW: stdlib/icvt.c Implemented wide char collation (wcscoll). Changed most of my license headers to wide & short versions. Moved locale code from translat.c to locales.c. Suppress message language changes to current language. Propagate message language changes to date.c. * ChangeLog build/msvc6/llines/llinesprj.dsp gedlib/Makefile.am gedlib/node.c hdrs/date.h hdrs/gedcom.h interp/Makefile.am DELETED: interp/date.c NEW: gedlib/date.c Move interp/date.c to gedlib/date.c. * ChangeLog reports/genetics.ll: Fix genetics.ll to work with current LifeLines (tighter type-checking). 2002-06-29 Perry Rapp * ChangeLog tools/Makefile.am: Fix build in tools dir. NEW: autotools/.cvsignore NEW: msvc6/.cvsignore NEW: rpm/.cvsignore NEW: win32/.cvsignore 2002-06-28 Perry Rapp * ChangeLog hdrs/date.h interp/date.c liflines/menuitem.c reports/exercise.ll: Locale work. NEW: build/Makefile.am 2002-06-27 Perry Rapp * ChangeLog build/msvc6/llines/llinesprj.dsp gedlib/charmaps.c gedlib/init.c gedlib/names.c hdrs/llstdlib.h hdrs/mystring.h interp/interp.c interp/rassa.c liflines/ask.c liflines/askprogram.c liflines/export.c liflines/loadsave.c liflines/main.c liflines/screen.c stdlib/Makefile.am stdlib/mystring.c stdlib/path.c stdlib/stdstrng.c NEW: stdlib/appendstr.c stdlib/sprintpic.c stdlib/stralloc.c NEW: stdlib/strapp.c stdlib/strcvt.c stdlib/strutf8.c NEW: stdlib/strwhite.c: Split string functions by type. Fix bug in filepath & bug in concat_path. Change concat_path to use caller buffer (instead of static buffer). * ChangeLog gedlib/translat.c hdrs/gedcom.h interp/builtin.c interp/functab.c interp/interpi.h reports/exercise.ll: Implement report functions utf8() and setlocale(). Put some collation tests into exercise.ll. * ChangeLog hdrs/llnls.h: Define _pl if not ENABLE_NLS. * ChangeLog gedlib/keytonod.c gedlib/names.c interp/symtab.c: Cosmetic. * ChangeLog liflines/screen.c: Cosmetic. * ChangeLog liflines/lbrowse.c: Bugfix (list_browse wasn't clearing pseq & other browses assert). * ChangeLog gedlib/property.c: Fix undeclared warning. * ChangeLog gedlib/indiseq.c liflines/screen.c: Bugfix: handle null name from element_indiseq in list browse. * ChangeLog gedlib/indiseq.c: Bugfix: copied indiseq didn't get names, but got flag as if it did. * ChangeLog NEWS configure.in build/rpm/lifelines.spec docs/Run.LifeLines.Windows.txt hdrs/version.h: Making version 3.0.17. 2002-06-26 Perry Rapp * ChangeLog po/Makevars po/de.po po/el.po po/it.po po/sv.po: Test for bind_textdomain_codeset & ngettext for old gettext versions. Start using _pl macro for ngettext (plural gettext). Cosmetic cleanup. * .linesrc ChangeLog lines.cfg liflines/screen.c: Add more info to utility codeset list. List DbNewProps in config files. * ChangeLog liflines/screen.c: Suppress ^ and $ markers if list not off-screen. 2002-06-25 Perry Rapp * ChangeLog configure.in: Make indenting consistent. * ChangeLog NEW: build/msvc6/Maekfile.am Add needed build/msvc6/Makefile.am. 2002-06-24 Matt Emmerton * ChangeLog README.DEVELOPERS autogen.sh Make sure we run 'aclocal -I m4 -I build/autotools' everywhere. 2002-06-24 Perry Rapp * .linesrc ChangeLog lines.cfg gedlib/init.c gedlib/messages.c hdrs/feedback.h hdrs/llstdlib.h hdrs/screen.h hdrs/win32/curses.h interp/builtin.c liflines/ask.c liflines/lbrowse.c liflines/main.c liflines/miscutls.c liflines/newrecs.c liflines/scan.c liflines/screen.c stdlib/path.c: Change static buffers in ask_for_string family to caller-passed. Implement ~ for home directory. 2002-06-24 Matt Emmerton * ChangeLog configure.in Makefile.am Update to find autotools glue in build/autotools and to include it in distributions. DELETED: build/gnu NEW: build/autotools Rename gnu -> autotools to make more sense. NEW: build/autotools/config.sub build/autotools/config.guess NEW: build/autotools/missing build/autotools/mkinstalldirs NEW: build/autotools/install-sh build/autotools/depcomp NEW: build/autotools/config.rpath README DELETED: config.sub config.guess config.rpath missing DELETED: mkinstalldirs install-sh depcomp Import autotools glue for autoconf 2.53, automake 1.5 NEW: build/autotools/acinclude.m4 DELETED: acinclude.m4 Our extensions to the autotools glue 2002-06-24 Matt Emmerton * ChangeLog configure.in NEW: build/rpm/Makefile.am Update automake/autoconf to use new directories. 2002-06-24 Matt Emmerton * ChangeLog NEW: build/rpm/lifelines.spec DELETED: liflines.spec Move lifelines.spec from root directory into build hierarchy 2002-06-24 Matt Emmerton * ChangeLog configure.in build/msvc6/Makefile.am DELETED: win32/msvc6/llines win32/msvc6/libintl DELETED: win32/msvc6/dbverify win32/msvc6/btedit DELETED: win32/msvc6/Makefile.am win32/msvc6 Remove obsolete win32/msvc6 directories. Update automake/autoconf to use new directories. 2002-06-24 Perry Rapp * ChangeLog gedlib/choose.c gedlib/gedcom.c gedlib/gstrings.c gedlib/indiseq.c gedlib/keytonod.c gedlib/names.c gedlib/node.c gedlib/refns.c gedlib/valid.c hdrs/gedcom.h hdrs/liflines.h interp/builtin.c interp/interp.c liflines/add.c liflines/ask.c liflines/browse.c liflines/delete.c liflines/edit.c liflines/lbrowse.c liflines/llinesi.h liflines/merge.c liflines/newrecs.c liflines/screen.c liflines/show.c liflines/swap.c liflines/tandem.c tools/dbverify.c: Pass RECORDs instead of NODEs through top-level browse functions. 2002-06-23 Perry Rapp * ChangeLog *DELETED win32/yacc.c: Removed obsolete yacc.c (good one generated in interp subdir). * .linesrc ChangeLog lines.cfg gedlib/charmaps.c gedlib/init.c gedlib/translat.c hdrs/translat.h NEW: build/msvc6/llines.ico DELETED: win32/msvc6/llines.ico win32/msvc6/btedit/btedit.rc DELETED: win32/msvc6/btedit/bteditCmd.dsp DELETED: win32/msvc6/btedit/bteditCmd.dsw win32/msvc6/btedit/resource.h DELETED: win32/msvc6/dbverify/dbVerify.rc DELETED: win32/msvc6/dbverify/dbverifyCmd.dsp DELETED: win32/msvc6/dbverify/dbverifyCmd.dsw DELETED: win32/msvc6/dbverify/resource.h win32/msvc6/llines/config.h DELETED: win32/msvc6/llines/llines.rc win32/msvc6/llines/llinesprj.dsp DELETED: win32/msvc6/llines/llinesprj.dsw win32/msvc6/llines/resource.h Move MSVC build stuff from win32 to build. Implement GuiCodesetOutput option instead of hardcoding //TRANSLIT always for output to display. * ChangeLog NEW: build/msvc6/btedit/btedit.rc build/msvc6/btedit/bteditCmd.dsp NEW: build/msvc6/btedit/bteditCmd.dsw build/msvc6/btedit/resource.h NEW: build/msvc6/dbverify/dbVerify.rc NEW: build/msvc6/dbverify/dbverifyCmd.dsp NEW: build/msvc6/dbverify/dbverifyCmd.dsw NEW: build/msvc6/dbverify/resource.h build/msvc6/llines/config.h NEW: build/msvc6/llines/llines.rc build/msvc6/llines/llinesprj.dsp NEW: build/msvc6/llines/llinesprj.dsw build/msvc6/llines/resource.h: Add MVC build stuff that didn't get added before. * ChangeLog btree/addkey.c gedlib/editvtab.c gedlib/init.c gedlib/messages.c gedlib/node.c gedlib/property.c hdrs/menuitem.h interp/interp.c interp/more.c interp/pvalue.c liflines/add.c liflines/ask.c liflines/askprogram.c liflines/browse.c liflines/edit.c liflines/lbrowse.c liflines/llinesi.h liflines/main.c liflines/menuitem.c liflines/screen.c liflines/show.c liflines/tandem.c tools/dbverify.c: Add change history (analogous to view history). Move codeset stuff to utility menu. Fix overflow bug in title (manifests with Swedish title & small console). Start replacing snprintf with llstrncpy. * ChangeLog NEW: docs/ll-devguide.xml: Started developer documentation. 2002-06-22 Perry Rapp * ChangeLog gedlib/init.c stdlib/stdstrng.c: Bugfix for strdup(0) in update_options. * ChangeLog gedlib/init.c: Bugfix for strsave(0) creating new database. * ChangeLog gedlib/charmaps.c gedlib/gedcom.c gedlib/indiseq.c gedlib/init.c gedlib/valtable.c interp/date.c liflines/askprogram.c liflines/browse.c liflines/main.c liflines/menuitem.c liflines/pedigree.c liflines/screen.c: Change all strdup calls to strsave (which has ASSERT). Allow exit from choose all databases prompt. * ChangeLog gedlib/charmaps.c: Cosmetic. 2002-06-21 Perry Rapp * ChangeLog gedlib/nodeutls.c liflines/newrecs.c: Bugfix so classify doesn't crash if one value is NULL. Bugfix so editing value of top-level other node works. * ChangeLog interp/interp.c: Fix Plist declaration broken two days ago. 2002-06-20 Matt Emmerton * ChangeLog configure.in Updated the host detection logic for Darwin (Mac OS X) so that libraries and headers installed using the Fink mechanism will be detected by configure. 2002-06-20 Matt Emmerton * ChangeLog configure.in Remove AC_DEFAULT_PREFIX($HOME) in order to prevent rogue prefix changes during configure and resulting build problems. 2002-06-19 Perry Rapp * ChangeLog btree/file.c gedlib/charmaps.c gedlib/editmap.c gedlib/editvtab.c gedlib/gedcomi.h gedlib/init.c gedlib/intrface.c gedlib/lloptions.c gedlib/translat.c hdrs/btree.h hdrs/gedcom.h hdrs/lloptions.h hdrs/translat.h liflines/main.c liflines/screen.c stdlib/mystring.c stdlib/path.c: Implement list of global user translation tables. Implement iconv transliteration in INDS direction. * .linesrc ChangeLog lines.cfg: Document new options for global translation tables. 2002-06-18 Matt Emmerton * ChangeLog build build/gnu build/msvc6 build/rpm Added build directory hierarchy to hold all build and packaging tools. 2002-06-18 Matt Emmerton * ChangeLog interp/rassa.c Add some casts to remove compiler warnings 2002-06-18 Perry Rapp * .linesrc ChangeLog configure.in lines.cfg btree/file.c btree/utils.c docs/Install.LifeLines.Windows.txt docs/Run.LifeLines.Windows.txt gedlib/charmaps.c gedlib/editvtab.c gedlib/init.c gedlib/intrface.c gedlib/lloptions.c gedlib/translat.c gedlib/valtable.c hdrs/btree.h hdrs/gedcom.h hdrs/interp.h hdrs/liflines.h hdrs/llstdlib.h hdrs/translat.h hdrs/version.h interp/alloc.c interp/interp.c interp/more.c interp/rassa.c interp/yacc.y liflines/screen.c stdlib/path.c stdlib/stdstrng.c win32/iconvshim.c win32/msvc6/dbverify/dbVerify.rc win32/msvc6/dbverify/dbverifyCmd.dsp win32/msvc6/llines/llines.rc: New codeset options in config file (GuiCodeset etc). New NewDbProps option to preload options in new databases. Fix init_valtab_from_string to not change its argument string. Fix notification code for options changes. Rewrite translation code to combine iconv with custom translations. Update windows docs to reflect codeset configuration. * ChangeLog *DELETED win32/hdrs/README win32/hdrs/btree.h win32/hdrs/cache.h win32/hdrs/gedcheck.h win32/hdrs/gedcom.h win32/hdrs/getopt.h win32/hdrs/include.h win32/hdrs/indiseq.h win32/hdrs/interp.h win32/hdrs/ll_getopt.h win32/hdrs/mycurses.h win32/hdrs/mystring.h win32/hdrs/proto.h win32/hdrs/proto.static.h win32/hdrs/screen.h win32/hdrs/sequence.h win32/hdrs/standard.h win32/hdrs/standard1.h win32/hdrs/table.h win32/hdrs/translat.h win32/hdrs/yacc.h: Remove win32/hdrs/* (obsolete headers created before hdrs existed). * ChangeLog *DELETED win32/msvc6/libintl/config.h win32/msvc6/libintl/libintlvc6.dsp win32/msvc6/libintl/libintlvc6.dsw: Remove msvc6 project for static libintl (now that DLL is used). 2002-06-17 Perry Rapp * ChangeLog README.LAYOUT gedlib/Makefile.am gedlib/init.c gedlib/messages.c gedlib/property.c hdrs/gedcom.h hdrs/interp.h hdrs/lloptions.h hdrs/llstdlib.h hdrs/table.h interp/interp.c interp/symtab.c liflines/main.c liflines/screen.c stdlib/Makefile.am stdlib/double.c stdlib/lldate.c stdlib/table.c win32/msvc6/llines/llinesprj.dsp: New table iterators. New copy_table. Move lloptions to gedlib, and user options inside it. * ChangeLog interp/builtin.c interp/interp.c: Add option to show globals to report debugger. Change copyfile & nearby routines to call the right routine to get report debugging. * ChangeLog gedlib/init.c gedlib/lloptions.c hdrs/lloptions.h hdrs/table.h: Fixes for gcc. * ChangeLog interp/lex.c interp/symtab.c liflines/browse.c liflines/valgdcom.c stdlib/double.c: More cleanup. * ChangeLog gedlib/translat.c liflines/screen.c: More cleanup. 2002-06-16 Perry Rapp *? .linesrc ChangeLog lines.cfg gedlib/init.c interp/builtin.c: Document Windows shim options in config files. Move Windows shim code out of main init_global function. Handful of i18n's in builtin.c. * .linesrc ChangeLog lines.cfg gedlib/init.c gedlib/messages.c gedlib/translat.c hdrs/gedcom.h hdrs/llstdlib.h hdrs/mystring.h interp/builtin.c interp/interp.c liflines/error.c liflines/llinesi.h liflines/main.c liflines/valgdcom.c stdlib/mystring.c: Make config option ImportLog for location of import log. Standardize string functions (llstrcpy & llstrapp families). * ChangeLog hdrs/liflines.h liflines/main.c liflines/newrecs.c liflines/screen.c liflines/valgdcom.c tools/dbverify.c: Cleanup warnings. 2002-06-15 Perry Rapp * ChangeLog configure.in gedlib/indiseq.c gedlib/init.c gedlib/messages.c gedlib/translat.c hdrs/gedcom.h hdrs/liflines.h hdrs/llnls.h hdrs/llstdlib.h hdrs/mystring.h interp/interp.c liflines/main.c liflines/screen.c stdlib/double.c stdlib/mystring.c win32/msvc6/llines/config.h win32/msvc6/llines/llines.rc win32/msvc6/llines/llinesprj.dsp NEW: hdrs/win32/iconv.h hdrs/win32/iconvshim.h NEW: hdrs/win32/intlshim.h win32/iconvshim.c win32/intlshim.c DELETED: arch/bind_textdomain_codeset.c arch/ngettext.c: Remove null implementations of ngettext & bind_textdomain_codeset. (Users with old gettext can just use included version.) Remove charset & report charset menus, & replace with codeset information display list. Add commandline option -C to specify config file. Add shim files to call gettext & iconv dlls on MS-Windows. 2002-06-14 Perry Rapp * ChangeLog hdrs/mystring.h interp/interp.c stdlib/mystring.c: Starting to simplify string functions. * ChangeLog config.guess config.sub missing: Updating system recognition autotools scripts. * ChangeLog configure.in gedlib/init.c hdrs/Makefile.am hdrs/llstdlib.h hdrs/standard.h stdlib/Makefile.am stdlib/double.c stdlib/memalloc.c NEW: hdrs/llnls.h stdlib/llnls.c: Test for ngettext & bind_textdomain_codeset in configure.in, and provide null implementations in llnls.c if missing & needed. Move NLS stuff from standard.h into llnls.h. * ChangeLog liflines/Makefile.am tools/Makefile.am: Add LIBICONV to link (needed if gettext doesn't pull it in). * ChangeLog configure.in arch/Makefile.am reports/exercise.ll stdlib/Makefile.am NEW: arch/bind_textdomain_codeset.c arch/ngettext.c DELETED stdlib/llnls.c: Move null nls implementations to arch. * ChangeLog hdrs/llnls.h: Fix declaration of gettext replacement implementations. 2002-06-13 Perry Rapp * ChangeLog gedlib/editvtab.c gedlib/init.c gedlib/names.c gedlib/translat.c hdrs/gedcom.h hdrs/indiseq.h hdrs/interp.h hdrs/llstdlib.h hdrs/mystring.h hdrs/standard.h hdrs/translat.h interp/alloc.c interp/builtin.c interp/interp.c interp/interpi.h interp/lex.c interp/more.c interp/yacc.h interp/yacc.y liflines/screen.c reports/exercise.ll stdlib/double.c stdlib/mystring.c stdlib/stdstrng.c stdlib/table.c: New report language commands: require, char_encoding. Revising string functions for UTF-8. Fix fatal bug in list code. * ChangeLog NEWS configure.in lifelines.spec gedlib/messages.c gedlib/node.c gedlib/translat.c hdrs/version.h liflines/import.c po/de.po po/el.po po/it.po po/sv.po win32/msvc6/llines/llines.rc: Fix fatal bug preventing import ("unsupported multibyte encoding..."); Bumped to 3.0.16 for release. 2002-06-12 Perry Rapp * ChangeLog gedlib/translat.c: Watch for iconv_open failing. * ChangeLog configure.in: Remove unused header check for libiintl.h (sic). * ChangeLog Prevent buffer overflow in yylex. 2002-06-11 Perry Rapp * ChangeLog configure.in gedlib/init.c gedlib/messages.c gedlib/node.c gedlib/translat.c hdrs/gedcom.h hdrs/llstdlib.h liflines/main.c liflines/screen.c stdlib/lloptions.c stdlib/path.c tools/dbverify.c win32/msvc6/llines/llines.rc win32/msvc6/llines/llinesprj.dsp: Capture user's most likely codeset at startup. Add 'Q' option on main menu to select a new database. * NEW: arch/langinfo.c hdrs/langinfz.h: Implementation of nl_langinfo for platforms lacking such. * ChangeLog liflines/askprogram.c win32/msvc6/libintl/libintlvc6.dsp: Fix possible char sign-extension problem in askprogram.c. Annotate some routines (with TODO) that must be fixed for UTF-8. 2002-06-10 Perry Rapp * ChangeLog hdrs/standard.h: Fix dir separator stuff for cygwin. * ChangeLog gedlib/charmaps.c gedlib/editmap.c gedlib/editvtab.c gedlib/gstrings.c gedlib/indiseq.c gedlib/init.c gedlib/keytonod.c gedlib/names.c gedlib/node.c gedlib/translat.c gedlib/valtable.c hdrs/gedcom.h hdrs/translat.h hdrs/version.h interp/builtin.c interp/rassa.c liflines/add.c liflines/browse.c liflines/edit.c liflines/export.c liflines/import.c liflines/merge.c liflines/miscutls.c liflines/newrecs.c liflines/pedigree.c liflines/screen.c liflines/show.c liflines/valgdcom.c po/el.po po/it.po win32/msvc6/llines/config.h win32/msvc6/llines/llines.rc: Implement iconv as an optional replacement for translation tables. Wrap each TRANTABLE structure in a TRANMAPPING. * ChangeLog gedlib/init.c gedlib/messages.c liflines/miscutls.c: Fix stats display in initial db list. 2002-06-09 Perry Rapp * ChangeLog NEWS README.LAYOUT configure.in lifelines.spec arch/scandir.c docs/ll-userguide.xml gedlib/indiseq.c gedlib/messages.c gedlib/translat.c gedlib/xreffile.c hdrs/llstdlib.h hdrs/standard.h hdrs/translat.h hdrs/version.h interp/builtin.c interp/interp.c liflines/add.c liflines/edit.c liflines/llinesi.h liflines/loadsave.c liflines/main.c liflines/newrecs.c liflines/pedigree.c liflines/screen.c po/POTFILES.in po/de.po po/el.po po/it.po po/sv.po stdlib/double.c tools/Makefile.am tools/dbverify.c win32/msvc6/dbverify/dbVerify.rc win32/msvc6/dbverify/dbverifyCmd.dsp win32/msvc6/libintl/libintlvc6.dsp win32/msvc6/llines/config.h win32/msvc6/llines/llines.rc win32/msvc6/llines/llinesprj.dsp: Fix handling of ? (list databases) when none found. Remove some carriage returns that I accidentally left in sources. Generalize in_list. Rename empty_list to is_empty_list. Remove locale display (it was collation only, and msg catalogs may be multiple, and can't be obtained from gettext anyway). I18nize dbverify. Fix unresolved reference string for plurals. Use setlocale(LC_MESSAGES if available. Fix MSVC projects to link to release or debug versions of iconv. Add more files to POTFILES, and update lifelines.pot. Bump version to 3.0.15 & release. * NEW: config.rpath: I guess this came from gettext-0.11. 2002-06-08 Perry Rapp * ChangeLog Makefile.am gedlib/init.c gedlib/messages.c hdrs/Makefile.am hdrs/gedcheck.h hdrs/gedcom.h hdrs/screen.h liflines/Makefile.am liflines/import.c liflines/llinesi.h liflines/main.c liflines/screen.c liflines/valgdcom.c m4/Makefile.am po/POTFILES.in po/de.po po/el.po po/it.po po/sv.po stdlib/double.c win32/msvc6/libintl/config.h win32/msvc6/libintl/libintlvc6.dsp win32/msvc6/llines/config.h win32/msvc6/llines/llines.rc win32/msvc6/llines/llinesprj.dsp NEW: hdrs/impfeed.h liflines/loadsave.c: Remove curses code from import.c via interface functions. Implement opening database from list at start. Put all the m4 files into EXTRA_DIST (otherwise make fails). * ChangeLog hdrs/standard.h liflines/add.c liflines/edit.c liflines/import.c liflines/loadsave.c liflines/newrecs.c po/Makevars po/de.po po/el.po po/it.po po/sv.po: Fix plural forms (must use ngettext directly, not macro). * ChangeLog README.LAYOUT docs/ll-userguide.xml gedlib/indiseq.c: Simplify locale handling in indiseq sorting. 2002-06-07 Perry Rapp * ChangeLog docs/ll-userguide.xml: Updating some screen drawings & discussion of config options. * ChangeLog liflines/screen.c: Cosmetic. 2002-06-06 Perry Rapp * ChangeLog arch/scandir.c btree/opnbtree.c gedlib/init.c gedlib/messages.c hdrs/gedcom.h hdrs/liflines.h hdrs/llstdlib.h liflines/askprogram.c liflines/main.c liflines/menuitem.c liflines/screen.c stdlib/path.c tools/btedit.c tools/dbverify.c win32/msvc6/llines/llines.rc: Fix several bugs in Win32 scandir in arch/scandir.c. Close databases even if opened in immutable. Add first cut at list of databases to opening prompt. Fix various bugs in opening & closing databases. * ChangeLog gedlib/init.c liflines/main.c liflines/menuitem.c: Cosmetic cleanup. * ChangeLog configure.in gedlib/messages.c gedlib/node.c hdrs/gedcom.h liflines/import.c liflines/main.c: Bugfix for import (UTF-8 BOM marker was causing import to fail). 2002-06-05 Perry Rapp * ChangeLog Makefile.am configure.in NEW: m4/Makefile.am m4/lib-ld.m4 m4/lib-link.m4 m4/lib-prefix.m4: More changes from gettextize/automake upgrade. * ChangeLog NEW: intl/eval-plural.h intl/gmo.h intl/localename.c NEW: intl/os2compat.c intl/os2compat.h intl/osdep.c NEW: intl/plural-exp.c intl/plural-exp.h: Check in new intl files from gettextize upgrade. * ChangeLog NEW: po/Makevars: Check in new file from gettextize upgrade. * ChangeLog NEW: po/Rules-quot po/boldquot.sed po/en@boldquot.header NEW: po/en@quot.header po/insert-header.sin po/quot.sed NEW: po/remove-potcdate.sin: Check in more new po files from gettextize upgrade. * ChangeLog liflines/menuitem.c po/de.po po/el.po po/it.po po/sv.po: Mark strings which look like printf specifiers but aren't, for gettext. Fill in unfilled headers in po files (so msgfmt won't error out). 2002-06-04 Marc Nozell * Cleaned up Rafal's xml conversion of docs/lifelines.sgml. Also broke it into docs/ll-reportmanual.xml and docs/ll-userguide.xml. Since not all platforms have the docbook toolchain, the PDF and HTML versions of those documents are checked in also. 2002-06-04 Perry Rapp * ABOUT-NLS ChangeLog Makefile.am README.DEVELOPERS configure.in gedlib/charmaps.c intl/ChangeLog intl/Makefile.in intl/VERSION intl/bindtextdom.c intl/config.charset intl/dcgettext.c intl/dcigettext.c intl/dcngettext.c intl/dgettext.c intl/dngettext.c intl/gettext.c intl/gettextP.h intl/hash-string.h intl/intl-compat.c intl/l10nflist.c intl/libgnuintl.h intl/loadinfo.h intl/loadmsgcat.c intl/localcharset.c intl/locale.alias intl/localealias.c intl/ngettext.c intl/plural.c intl/plural.y intl/ref-add.sin intl/ref-del.sin intl/textdomain.c liflines/Makefile.am m4/codeset.m4 m4/gettext.m4 m4/glibc21.m4 m4/iconv.m4 m4/isc-posix.m4 m4/lcmessage.m4 m4/progtest.m4 po/ChangeLog po/Makefile.in.in tools/Makefile.am NEW: autogen.sh DELETED: acconfig.sh: Ran gettextize to upgrade included gettext from 0.10.40 to 0.11.2. Removed acconfig.h & ALL_LINGUAS in configure.in (as recommended by gettextize). Added autogen.sh wrapper for autotools invocations. * ChangeLog gedlib/charmaps.c liflines/lbrowse.c liflines/menuitem.c: Minor fixes to static initialization. 2002-06-04 gettextize * Makefile.am (ACLOCAL_AMFLAGS): New variable. (EXTRA_DIST): Add config.rpath. * configure.in (AC_OUTPUT): Add m4/Makefile. 2002-06-04 Matt Emmerton * ChangeLog gedlib/charmaps.c Made tran_tables[] and map_keys[] ararys explicitly sized to NUM_TT_TABLES. Will force a compiler error when NUM_TT_TABLES is increased and tran_tables/map_keys initialization isn't adjusted. 2002-06-04 Perry Rapp * ChangeLog liflines/lbrowse.c liflines/screen.c: Added shift-pagedown command to lists. Changed d=delete item to r=remove item in list browse. Added u=pageup, U=shpageup, d=pagedn, D=shpagedn to lists. Added ^ and $ marks to top & bottom items of lists. * ChangeLog gedlib/indiseq.c: Bugfix for crash if invalid reference begins with I. 2002-06-03 Perry Rapp .linesrc ChangeLog lines.cfg gedlib/messages.c gedlib/node.c gedlib/refns.c gedlib/replace.c gedlib/spltjoin.c gedlib/valid.c hdrs/gedcom.h hdrs/liflines.h hdrs/standard.h hdrs/version.h liflines/add.c liflines/advedit.c liflines/browse.c liflines/edit.c liflines/import.c liflines/llinesi.h liflines/merge.c liflines/newrecs.c liflines/screen.c: Added feature: check for unresolved refn links after editing. Bugfix: S,E,X records ignored extra REFNs. Added ExpandRefnsDuringEdit option. * ChangeLog hdrs/menuitem.h liflines/lbrowse.c liflines/screen.c: Added shift-pageup command to lists. 2002-06-02 Perry Rapp * .linesrc ChangeLog lines.cfg gedlib/messages.c interp/interp.c: Document debugger option in code & in config files. More i18n in interpreter. * ChangeLog interp/alloc.c interp/interp.c: More i18n in interpreter. * ChangeLog interp/interp.c: Bugfix -- break was terminating entire proc enclosing families loop. 2002-05-30 Perry Rapp * ChangeLog configure.in arch/Makefile.am: arch/Makefile.am was missing include ../intl * ChangeLog win32/msvc/llines/llines.rc: Increase win32 version info to 3.0.14. 2002-05-28 Perry Rapp * ChangeLog lifelines/screen.h: Remove some of the extra draw code used to fight curses space bug. * gedlib/messages.c liflines/screen.c: i18n. 2002-05-27 Perry Rapp Fixes & changes to win32 curses emulation. * ChangeLog NEWS configure.in lifelines.spec hdrs/version.h win32/msvc/llines/llines.rc: Building release 3.0.13. * configure.in po/LINGUAS po/de.po po/sv.po reports/Makefile.am Building release 2.0.13. (exercise.ll wasn't in reports/Makefile.am) * .linesrc ChangeLog lines.cfg Added ForceScreenErase to prototype config files. * ChangeLog hdrs/version.h liflines/screen.c win32/msvc6/llines/llines.rc: Bump version for 3.0.13-post. Erase popup windows when closing them, and redraw other windows. 2002-05-25 Perry Rapp * ChangeLog btree/opnbtree.c hdrs/menuitem.h liflines/lbrowse.c liflines/main.c liflines/menuitem.c liflines/screen.c win32/mycurses.c: Report & fail if errors initializing win32 curses. Fix Win32 curses emulation so alt-escapes work again. Support in list browse. Add ^ and $ as equivalents for home & end keys in lists. Add support for page & home/end keys in popup lists. 2002-05-24 Perry Rapp * ChangeLog gedlib/messages.c: Improving comments for translators. 2002-05-22 Perry Rapp * ChangeLog gedlib/messages.c liflines/valgdcom.c: More i18n. * ChangeLog hdrs/menuitem.h liflines/browse.c liflines/lbrowse.c liflines/main.c liflines/screen.c: Handle arrow & page up & down keys in lists. * ChangeLog hdrs/menuitem.h hdrs/version.h hdrs/win32/curses.h liflines/lbrowse.c liflines/screen.c win32/mycurses.c win32/msvc6/llines/llines.rc: Implement arrow, page, home/end keys in win32 curses emulation. Add support for home/end in list browse. * ChangeLog NEWS README.INTERNATIONAL: Documenting. 2002-05-13 Perry Rapp * ChangeLog btree/opnbtree.c gedlib/init.c gedlib/xreffile.c hdrs/gedcom.h hdrs/version.h liflines/browse.c win32/msvc6/llines/llines.rc: Fix for immutable (don't use r+ for keyfile, and don't save history). 2002-05-12 Perry Rapp * ChangeLog README.INTERNATIONAL: Noted that lifelines has been submitted to Free Translation Project. * ChangeLog liflines/scan.c: Sort results of search. 2002-05-11 Perry Rapp * ChangeLog gedlib/init.c: Add new environment variable LLCONFIGFILE to set path for config file. 2002-05-10 Perry Rapp * .linesrc ChangeLog lines.cfg gedlib/init.c hdrs/win32/curses.h liflines/screen.c win32/mycurses.c win32/msvc6/llines/llines.rc win32/msvc6/llines/llinesprj.dsp: New ForceScreenErase option for systems with ncurses repaint problems. New wnoutrefresh & dooutput functions in win32/mycurses.c. New GuiOutputCharset option to init gettext/libintl output. 2002-05-05 Perry Rapp * ChangeLog Makefile.am NEWS configure.in lifelines.spec docs/Makefile.am hdrs/version.h po/de.po po/sv.po stdlib/signals.c: Fixed build system to always process docs subdir (so make dist works). Restored llines.1 to rpm spec file. Bumped version to 3.0.12 (to release with docs, to replace 3.0.11). Removed extra semicolon in signals.c. Added llines.1 to docs/Makefile.am (so rpm construct finds it). Updated obsolete reference in lifelines.spec to ANNOUNCEMENT to NEWS. * ChangeLog hdrs/version.h win32/msvc6/btedit/btedit.rc win32/msvc6/dbverify/dbVerify.rc win32/msvc6/llines/llines.rc: Updated win32 resource version numbers. Bumped code version to 3.0.12post. * ChangeLog README.INTERNATIONAL gedlib/messages.c: Added comments in messages.c. Removed trailing comments (they come out in wrong place in po file). 2002-05-01 Perry Rapp * ChangeLog configure.in lifelines.spec docs/Install.LifeLines.Windows.txt hdrs/version.h win32/msvc6/btedit/btedit.rc win32/msvc6/dbverify/dbVerify.rc win32/msvc6/llines/llines.rc win32/msvc6/llines/llinesprj.dsp: Updated MSVC6 llines project to include iconv static library. Updated Windows install summary to mention translations. Removed llines.1 from rpm spec (as it causes it to fail). Released 3.0.11. 2002-04-29 Perry Rapp * ChangeLog po/sv.po: Updated Swedish message file. 2002-04-28 Perry Rapp * config.h NEW: libintlvc6.dsp libintlvc6.dsw DELETED: msvc6lib.dsp msvc6lib.dsw: Updated project files for libintl under MSVC, and added use of iconv. 2002-04-27 Perry Rapp * ChangeLog gedlib/editmap.c gedlib/editvtab.c gedlib/gstrings.c gedlib/messages.c gedlib/node.c gedlib/remove.c gedlib/valid.c interp/interp.c interp/rassa.c liflines/add.c liflines/askprogram.c liflines/browse.c liflines/delete.c liflines/edit.c liflines/import.c liflines/lbrowse.c liflines/merge.c liflines/newrecs.c liflines/screen.c liflines/show.c liflines/swap.c liflines/tandem.c stdlib/lloptions.c: More i18n. * ChangeLog po/de.po po/sv.po: Propagating new i18n'd strings into de & sv translations. * ChangeLog gedlib/charmaps.c gedlib/editmap.c gedlib/editvtab.c gedlib/gstrings.c gedlib/messages.c gedlib/node.c gedlib/valid.c interp/interp.c liflines/browse.c liflines/import.c liflines/main.c liflines/menuitem.c liflines/miscutls.c liflines/screen.c liflines/show.c stdlib/signals.c tools/dbverify.c: More i18n. * ChangeLog liflines/merge.c liflines/screen.c stdlib/signals.c: Pass 3 overlooked string constants to gettext. * ChangeLog po/POTFILES.in po/de.po po/it.po po/sv.po: Propagating new i18n'd strings into de & it & sv.po translations. 2002-04-25 Perry Rapp * ChangeLog interp/interp.c: Bugfix for traverse (it was continuing to siblings at top lvl). * ChangeLog gedlib/editmap.c gedlib/messages.c liflines/add.c liflines/ask.c liflines/merge.c liflines/newrecs.c liflines/screen.c liflines/show.c: More 18n. 2002-04-24 Perry Rapp * ChangeLog README.INTERNATIONAL po/de.po po/sv.po: Propagating new i18n'd strings into de & sv translations. Added url to Translation Project to README.INTERNATIONAL. * ChangeLog gedlib/choose.c gedlib/editmap.c gedlib/messages.c hdrs/feedback.h interp/builtin.c interp/date.c interp/more.c liflines/add.c liflines/ask.c liflines/browse.c liflines/delete.c liflines/edit.c liflines/export.c liflines/import.c liflines/lbrowse.c liflines/main.c liflines/merge.c liflines/newrecs.c liflines/scan.c liflines/screen.c liflines/show.c liflines/swap.c liflines/tandem.c: More i18n. Simplifying by calling gettext directly on string constant, and marking string constants with qS prefix. 2002-04-21 Perry Rapp * ChangeLog gedlib/choose.c gedlib/messages.c hdrs/feedback.h liflines/ask.c liflines/delete.c liflines/edit.c liflines/export.c liflines/import.c liflines/newrecs.c liflines/scan.c liflines/screen.c liflines/swap.c liflines/tandem.c: More i18n. * ChangeLog po/de.po po/sv.po: Update po files for new i18n. 2002-04-20 Perry Rapp * ChangeLog po/sv.po: Bugfixes to Swedish translation. 2002-04-07 Perry Rapp * ChangeLog configure.in gedlib/charmaps.c gedlib/gstrings.c gedlib/translat.c hdrs/gedcom.h hdrs/menuitem.h hdrs/translat.h liflines/main.c liflines/menuitem.c po/LINGUAS tools/Makefile.am NEW: po/de.po: Set crashlog file before initializing menus, so menuitem conflicts will be logged. Revised menuitem to continue if menuitem conflict. New German translation. Fix tran_tables to be correct size. 2002-03-04 Perry Rapp Update to Swedish translation. 2002-03-03 Perry Rapp * ChangeLog INSTALL Makefile.am README.DEVELOPERS configure.in arch/scandir.c btree/Makefile.am btree/opnbtree.c btree/record.c gedlib/Makefile.am gedlib/indiseq.c gedlib/translat.c hdrs/arch.h hdrs/llstdlib.h hdrs/standard.h interp/Makefile.am interp/symtab.c interp/yacc.h liflines/Makefile.am liflines/ask.c liflines/error.c liflines/main.c liflines/menuitem.c liflines/screen.c stdlib/Makefile.am stdlib/environ.c stdlib/memalloc.c stdlib/mystring.c stdlib/signals.c tools/Makefile.am win32/msvc6/llines/llines.rc win32/msvc6/llines/llinesprj.dsp NEW: m4/README m4/codeset.m4 m4/gettext.m4 m4/glibc21.m4 NEW: m4/iconv.m4 m4/isc-posix.m4 m4/lcmessage.m4 m4/progtest.m4: Add gettext m4 files as new m4 subdirectory. Revise arch.h to not include config.h. Add comments to top of llstdlib.h. Revise README.DEVELOPERS to explain procedure for developers without gettext & iconv. Fix gcc uninit warnings for menuitem.c static initializers. 2002-02-27 Perry Rapp * ChangeLog README.INTERNATIONAL gedlib/messages.c liflines/delete.c liflines/edit.c liflines/newrecs.c liflines/screen.c po/sv.po: More i18n. 2002-02-26 Perry Rapp * ChangeLog po/sv.po NEW: README.INTERNATIONAL: New readme for l10n issues & update to Swedish version. 2002-02-25 Perry Rapp * ChangeLog gedlib/messages.c interp/date.c liflines/screen.c po/sv.po: i18n short form of may, translation tables. Updated Swedish po. 2002-02-24 Perry Rapp * ChangeLog liflines/screen.c: Cleanup compiler warnings. * .linesrc ChangeLog configure.in lines.cfg gedlib/messages.c gedlib/translat.c hdrs/gedcom.h hdrs/llstdlib.h liflines/main.c liflines/screen.c po/LINGUAS po/it.po reports/exercise.ll stdlib/stdstrng.c tools/dbverify.c win32/msvc6/llines/config.h win32/msvc6/llines/llines.rc NEW: po/sv.po: Finish i18n main menu. Split locale options into collate & messages (eg, UiLocaleMessages). Add Swedish msg catalog. * ChangeLog gedlib/messages.c liflines/ask.c liflines/scan.c liflines/screen.c NEW: po/el.po: i18n utility, extra, & scan menus. * ChangeLog btree/record.c: Add more sanity checking when altering an db block. 2002-02-23 Perry Rapp * ChangeLog Makefile.am configure.in arch/alphasort.c arch/scandir.c gedlib/indiseq.c gedlib/property.c gedlib/translat.c hdrs/menuitem.h hdrs/standard.h liflines/Makefile.am liflines/main.c liflines/menuitem.c liflines/screen.c tools/Makefile.am win32/msvc6/llines/llines.rc win32/msvc6/llines/llinesprj.dsp NEW: intl/* intl/hdr/libintl.h po/* win32/libintl/*: Implemented gettext-0.10.40 (new intl/ & po/). Added win32/msvc6/libintl project. Added it.po as test file (not real data). * ChangeLog README.DEVELOPERS gedlib/editmap.c gedlib/messages.c interp/date.c liflines/add.c liflines/ask.c liflines/browse.c liflines/delete.c liflines/edit.c liflines/main.c liflines/merge.c liflines/newrecs.c liflines/screen.c liflines/show.c liflines/swap.c po/POTFILES.in po/it.po NEW: ABOUT_NLS More i18n. 2002-02-21 Perry Rapp * gedlib/indiseq.c hdrs/interp.h interp/interp.c interp/pvalmath.c: Cleanup compiler warnings. 2002-02-20 Perry Rapp * ChangeLog gedlib/indiseq.c hdrs/indiseq.h interp/intrpseq.c win32/msvc6/llines/llines.rc: Fix valuesort for indiseqs to correctly handle the fact that there are various types of pvalues. 2002-02-18 Perry Rapp * ChangeLog gedlib/indiseq.c gedlib/intrface.c hdrs/Makefile.am hdrs/interp.h hdrs/llstdlib.h interp/Makefile.am interp/builtin.c interp/date.c interp/eval.c interp/interp.c interp/intrpseq.c interp/more.c interp/pvalue.c interp/rassa.c liflines/Makefile.am liflines/browse.c liflines/main.c liflines/screen.c liflines/show.c stdlib/double.c win32/msvc6/llines/llinesprj.dsp NEW: hdrs/date.h: Moved date function declarations out of interp.h into new date.h. Changed some calls to prog_error to new prog_var_error. 2002-02-17 Perry Rapp * ChangeLog gedlib/names.c hdrs/interp.h hdrs/llstdlib.h hdrs/mystring.h hdrs/screen.h hdrs/table.h interp/Makefile.am interp/alloc.c interp/builtin.c interp/date.c interp/eval.c interp/heapused.c interp/interp.c interp/intrpseq.c interp/more.c interp/pvalue.c interp/rassa.c interp/yacc.y liflines/browse.c liflines/main.c liflines/screen.c reports/exercise.ll stdlib/mystring.c stdlib/stdstrng.c stdlib/table.c win32/mycurses.c win32/msvc6/llines/llines.rc win32/msvc6/llines/llinesprj.dsp: Adding functions create_pvalue_from_int etc to remove casts. Workaround compiler warning in win32/mycurses.c (for long->char). Revised more report functions to use shared error strings (nonnod1 etc). Spun off pvalmath.c & symtab.c from pvalue.c. Began to build debugger for report program errors. 2002-02-16 Perry Rapp * ChangeLog NEWS gedlib/messages.c gedlib/translat.c hdrs/interp.h interp/alloc.c interp/builtin.c interp/interp.c interp/more.c interp/pvalue.c liflines/main.c liflines/screen.c tools/dbverify.c: Fix extractnames to handle missing name (& to set all variables if empty name). Modify value conversion to convert implicitly from record to (root) node. Improved comments in coerce_pvalue. Add interpreter locale reload for common error functions. Bugfix for dbused crash if user didn't specify database (in main.c). Bugfix for status msg getting lost when report finished. 2002-02-15 Perry Rapp .linesrc ChangeLog lines.cfg gedlib/gedcom.c gedlib/indiseq.c gedlib/messages.c gedlib/node.c gedlib/valid.c hdrs/indiseq.h interp/builtin.c liflines/lbrowse.c liflines/main.c liflines/screen.c liflines/valgdcom.c tools/dbverify.c win32/msvc6/llines/llines.rc: Allow nameless persons. Change indiseqs to not precompute names. Bugfix for dbrequested getting lost when creating new db. New option RequireNames to give legacy behavior. * ChangeLog interp/builtin.c: Bugfix for _dateformat (it wasn't allowing 12,13,14 formats). 2002-02-14 Perry Rapp * ChangeLog hdrs/screen.h liflines/screen.c: Change a bunch of windows to file locals in screen.c. 2002-02-13 Perry Rapp * liflines/ask.c liflines/browse.c: Remove spurious carriage returns. * ChangeLog interp/date.c liflines/main.c liflines/valgdcom.c stdlib/path.c: Fix some more potential sign-extensions of chars. 2002-02-11 Perry Rapp * gedlib/messages.c liflines/ask.c liflines/browse.c: Bugfix so browsing to invalid family doesn't crash. 2002-02-10 Perry Rapp * ChangeLog gedlib/messages.c gedlib/translat.c hdrs/llstdlib.h hdrs/translat.h liflines/main.c liflines/screen.c stdlib/stdstrng.c tools/dbverify.c win32/msvc6/llines/llinesprj.dsp: Drive ui & report locales off user variables. Capture locale at startup for fallback (if user-specified value invalid). Fix translat.c to include config.h. * ChangeLog gedlib/indiseq.c gedlib/init.c hdrs/indiseq.h liflines/main.c liflines/screen.c win32/msvc6/llines/llines.rc: Bugfixes for dual locale operation. Fix namesort & valuesort to detect if sorted in wrong locale. 2002-02-08 Perry Rapp * ChangeLog configure.in lifelines.spec docs/llines.1 hdrs/version.h: Set version 3.0.10 for making dist. Add llines.1 to rpm spec. * interp/builtin.c: Bugfix: because date.year is structure now instead of int. * lifelines.spec: Bugfix: tinytafel2 being installed as tree.tex in rpm. * gedlib/indiseq.c gedlib/messages.c: Fix sort of mixed items to be in canonical key order (eg, S1,S2,E1,E2). Change "among these persons" to "among these records". 2002-02-07 Perry Rapp * ChangeLog gedlib/indiseq.c: Fix name_sort to handle null names, for when hit lists include non-indis (and in future indis without names). Fixes "crash when cross-referencing from indi to duplicated REFNs in non-indi records" bug. 2002-02-04 Perry Rapp * ChangeLog interp/lex.c tools/Makefile.am: Allow periods inside variable names. Fix sign-extension in inchar. Fix copy&paste typo in dbverify build line in makefile. 2002-02-03 Perry Rapp * ChangeLog hdrs/version.h hdrs/win32/curses.h interp/date.c liflines/screen.c stdlib/stdstrng.c win32/mycurses.c: Bugfix for sprintpic3. Recognize dates with two numbers as day,year if legal day, or as year,day if legal day. Bugfix for graphic chars in screen.c (need to be chtype, not char). Fix win32 curses emulation to use chtype where appropriate (instead of char). * hdrs/interp.h interp/builtin.c interp/date.c reports/exercise.ll: Modify date parser to recognize slash & hyphen dates. Modify date structure for compound numbers for these. Add corresponding tests to exercise.ll. * ChangeLog liflines/Makefile.am: Move last three C sources into alphabetized order. * ChangeLog interp/date.c reports/exercise.ll: Fix date parser to require whitespace before compound numbers, so 1930-11-24 is recognized as three different numbers. 2002-01-31 Perry Rapp * ChangeLog INSTALL hdrs/interp.h hdrs/screen.h hdrs/win32/curses.h interp/builtin.c interp/date.c liflines/main.c liflines/screen.c tools/dbverify.c win32/mycurses.c: Fix __year & __extractdatestr to return 0 for unknown 0, rather than -99999. Add -z option to not use curses graphics. Fix dbverify.c with workaround for gcc 3.0.3 bug. 2002-01-27 Perry Rapp * ChangeLog liflines/screen.c: Fix list browse overwriting right-hand box line. * ChangeLog Makefile.am configure.in hdrs/Makefile.am hdrs/version.h NEW: hdrs/win32/Makefile.am win32/Makefile.am win32/msvc6/Makefile.am: Add files in hdrs/win32 & win32 & win32 subdirs to dist. Bump version to 3.0.9 (for a new distribution). 2002-01-25 Perry Rapp * .linesrc ChangeLog lines.cfg gedlib/property.c NEW: docs/llines.1: Revised my ChangeLog entries for added files to say *NEW (for greppability). Added minimal man page. Made all config variables available from the report language getproperty command. 2002-01-24 Perry Rapp * ChangeLog gedlib/messages.c hdrs/menuitem.h hdrs/screen.h liflines/menuitem.c liflines/screen.c: Removed choice letters in menuitems (they are all in display strings). Removed hardcoded "q" & "?" treatment. Moved screen defines to menuitem.h & removed screen.h from menuitem.c. Bugfix: delete the dynamically created curses popup list window. * ChangeLog liflines/screen.c: Bugfix: was skipping last line in lower tandem person window. * ChangeLog gedlib/messages.c liflines/menuitem.c: Gettextify menuitem.c. * ChangeLog hdrs/mystring.h hdrs/screen.h liflines/export.c liflines/import.c liflines/llinesi.h liflines/main.c liflines/screen.c liflines/show.c liflines/valgdcom.c stdlib/mystring.c stdlib/stdstrng.c: Fixes to mystring.c to handle incorrect sign-extensions. Jiggled header orders to make gcc happy about declaration of LLRECT. 2002-01-23 Perry Rapp * ChangeLog stdlib/stdstrng.c: Fixed sprintpic family to handle null args (occur with partial dates). * ChangeLog hdrs/screen.h hdrs/win32/curses.h liflines/screen.c liflines/show.c win32/mycurses.c: Added delwin to win32 curses. Revised list show routines to get closer to being able to use for full-screen list. Added digits to short lists. Switched to creating & deleting popup list curses window on-the-fly. 2002-01-22 Perry Rapp * ChangeLog hdrs/screen.h liflines/export.c liflines/llinesi.h liflines/pedigree.c liflines/screen.c liflines/show.c: Introduced LLRECT type into screen etc (to reduce #args). Removed assumption that display starts on col==1 from some of indi displays. 2002-01-21 Perry Rapp * ChangeLog liflines/screen.c: Bugfix for menus not being repainted if user presses illegal key. 2002-01-19 Perry Rapp * ChangeLog configure.in hdrs/version.h interp/interp.c liflines/pedigree.c stdlib/mystring.c: Fix infinite loop in !t mode (fix llstrncpy). Fix !t mode to handle long lines (make buffer MAXLINELEN in add_dnodes in pedigree.c). Change version to 3.0.8. * win32/msvc6/* Added project files for MSVC6 (Microsoft Visual C++). 2002-01-18 Matt Emmerton * ChangeLog hdrs/gedcheck.h Change CHAR typedef from char to unsigned char. Remove check for elem->type >= 0 in KNOWNTYPE macro since this is always true for unsigned chars. 2002-01-18 Matt Emmerton * ChangeLog hdrs/interp.h interp/pvalue.c Change ptag.type from 'char' to 'unsigned char'. Remove check for pvalue->type >= 0 since this is always true for unsigned chars. 2002-01-18 Perry Rapp * ChangeLog gedlib/messages.c interp/interp.c interp/rassa.c stdlib/lloptions.c stdlib/path.c: Fix bug in copy_process. Make interpreter report cancel or file error in output file, and not do traceback. Allow trailing slash in LLDATABASES paths. * ChangeLog interp/pvalue.c: Fix bug in pvalue.c (attempted check for self-assignment was too broad). 2002-01-16 Perry Rapp * ChangeLog gedlib/valtable.c interp/lex.c liflines/screen.c: Removed unused EOF test in valtable.c. Fixed interact to handle non-ascii letters (not currently used). Cosmetic in lex.c. 2002-01-13 Perry Rapp * ChangeLog gedlib/node.c hdrs/gedcom.h hdrs/interp.h interp/builtin.c interp/date.c interp/functab.c interp/interpi.h liflines/show.c reports/exercise.ll: New options LongDisplayDatePic & ShortDisplayDatePic. Revised year() report function to also accept string. Renamed originformat to eraformat. * .linesrc lines.cfg: Add lines for LongDisplayDatePic & ShortDisplayDatePic. 2002-01-12 Perry Rapp * ChangeLog gedlib/init.c hdrs/llstdlib.h hdrs/standard.h interp/date.c interp/pvalue.c liflines/askprogram.c liflines/error.c stdlib/signals.c: Fix gettoday (was not revised correctly in date rewrite last month). Remove system includes from askprogram.c. Remove compiler warnings from pvalue.c & init.c. Compiler cleanup & gettextify signals.c (change prototype of ll_abort). 2002-01-11 Perry Rapp * ChangeLog gedlib/charmaps.c hdrs/mystring.h hdrs/standard.h: Remove some ^Ms. 2002-01-09 Perry Rapp * ChangeLog hdrs/interp.h interp/alloc.c interp/more.c interp/pvalue.c reports/exercise.ll: Fix report language float type (PFLOAT). Remove (unused) report language long type (PLONG). Added numeric tests & test of partial dates to exercise.ll. 2002-01-08 Marc Nozell * lifelines.spec: Added book-latex.ll, exercise.ll, and tree.tex to RPM * docs/lifelines.sgml: Added note about Rafal converting the document to XML and to hold off any updates until the build is updated. 2002-01-07 Perry Rapp * ChangeLog interp/builtin.c interp/date.c reports/exercise.ll: Added month format 9=gedcom, 10=lower roman, 11=upper roman. 2002-01-05 Matt Emmerton * ChangeLog config.guess config.sub configure.in INSTALL Added config.guess and config.sub to allow OS/platform detection. configure.in will now detect host OS and add proper flags for cygwin. INSTALL updated as --with-cygwin is no longer needed. 2002-01-06 Perry Rapp Very minor fix for spouse lines at exactly maximum length. Improvment to appendstr (don't require caller to init). Give status line at bottom a few more characters on right. 2002-01-05 Perry Rapp * ChangeLog gedlib/init.c hdrs/mystring.h hdrs/standard.h hdrs/sys_inc.h hdrs/win32/curses.h liflines/screen.c reports/exercise.ll stdlib/mystring.c stdlib/signals.c win32/mycurses.c: Added wgetnstr & mvwgetnstr to win32 curses emulation. Revise get_answer to only use width of current window. 2002-01-05 Matt Emmerton * ChangeLog hdrs/screen.h Generalized the check for missing ACS_ #defines. Added blurb about compiling --with-cygnus. Reworded various sections. Added --with-cygwin option to configure which enables compilation options required for clean compilation on cygwin. Changed description of --with-docs option, and made the default for this option to be "no". 2002-01-04 Perry Rapp * ChangeLog gedlib/init.c gedlib/names.c gedlib/node.c gedlib/property.c gedlib/refns.c gedlib/translat.c hdrs/arch.h hdrs/interp.h hdrs/llstdlib/h hdrs/mystring.h hdrs/standard.h interp/alloc.c interp/builtin.c interp/date.c interp/heapused.c interp/interp.c interp/lex.c interp/more.c interp/pvalue.c interp/rassa.c liflines/ask.c liflines/askprogram.c liflines/import.c liflines/lbrowse.c liflines/screen.c liflines/show.c stdlib/environ.c stdlib/lloptions.c stdlib/mystring.c stdlib/path.c stdlib/sequence.c stdlib/stdstrng.c stdlib/warehouse.c tools/dbverify.c: Cleanup some gcc warnings (& a couple very obscure bug possibilities with signed chars). Change BSD & CYGWIN conditional defs in screen.c to be based on HAVE_ACS_MAP, and set it in arch.h. Improve behavior if not HAVE_ACS_MAP (use ascii graphics). Fix is_valid_month for French & Hebrew (13 months). Added chomp function to use after fgets. Fix extractdate to handle NULL input. * ChangeLog gedlib/gstrings.c hdrs/interp.h interp/rassa.c liflines/browse.c liflines/main.c liflines/pedigree.c liflines/screen.c: Added requested flags to make LifeLines just run a report (-x and -o). (Bit more cleanup) * ChangeLog hdrs/menuitem.h hdrs/screen.h liflines/askprogram.c liflines/menuitem.c liflines/screen.c liflines/show.c liflines/tandem.c: Fix more compiler warnings. Fix add_spouse_line to use width exactly. Fix to pass width correctly to pedigree (anc & desc). Remove BSD & CYGWIN defs in show.c (by using clear_hseg instead of wclrtoel + ACS_MAP. * ChangeLog hdrs/arch.h hdrs/screen.h liflines/screen.c: Remove my HAVE_ACS_MAP stuff, in favor of much simpler solution (defines alreaday present in screen.h). Add hack to make work with cygwin (because we aren't linking correctly to its ncurses). * ChangeLog interp/builtin.c interp/intrpseq.c liflines/newrecs.c liflines/scan.c tools/btedit.c tools/wprintf.c: More compiler warning cleanup. * ChangeLog liflines/screen.c: Removed some calls to touchwin. 2002-01-3 Matt Emmerton * ChangeLog gedlib/property.c interp/alloc.c interp/date.c interp/lex.c stdlib/path.c stdlib/stdstrng.c tools/dbverify.c Add in some casts to eliminate compiler warnings. 2002-01-02 Perry Rapp * ChangeLog stdlib/lloptions.c: Modify lloptions to handle \n\r (can happen on cygwin). 2002-01-01 Perry Rapp * ChangeLog hdrs/screen.h liflines/llinesi.h liflines/screen.c liflines/show.c: Renamed show_list to show_big_list, and moved to screen.c (preparation for improving full list screen). 2001-12-31 Perry Rapp * ChangeLog docs/Install.LifeLines.Windows.txt docs/Run.LifeLines.Windows.txt gedlib/messages.c hdrs/interp.h hdrs/llstdlib.h interp/builtin.c interp/date.c stdlib/stdstrng.c: Moved some more English errors from builtin.c to messages.c. Fix slash-year parsing for any width of slash year, and to not parse 8/9/1995 as slash year. Try harder to parse dates of three numbers, if unambiguous. Allow closing parens to end keywords (for "(B.C.)"). Added handling for Hebrew & French Republic dates, per GEDCOM standard. Moved all month names into messages.c. Added calendar picture strings. Updated the MS-Windows documents now that we will distribute multiple sets of translation tables. 2001-12-30 Perry Rapp * tools/dispcode.c NEW: tools/prettytt.c: Near-trivial program to convert binary translation table to all-ascii one. * ChangeLog docs/Install.LifeLines.Windows.txt docs/Run.LifeLines.Windows.txt liflines/browse.c liflines/newrecs.c liflines/screen.c: Bugfix: Couldn't edit tag in other record. Bugfix: history not loading correctly. Updates to doc files for use on MS-Windows: talk about using UTF-8. * ChangeLog gedlib/messages.c hdrs/interp.h hdrs/llstdlib.h interp/builtin.c interp/date.c interp/functab.c interp/interpi.h stdlib/mystring.c stdlib/stdstrng.c: Implemented cmplx values 3-8 (ABT,Abt,ABOUT,About,abt,about). Implemented complex & date picture strings. Added new report functions: titlecase, complexformat, complexpic, datepic. Added date tests for new functionality to exercise.ll. * ChangeLog gedlib/gstrings.c gedlib/keytonod.c gedlib/messages.c gedlib/node.c hdrs/gedcom.h hdrs/llstdlib.h liflines/import.c liflines/show.c reports/exercise.ll stdlib/path.c: Added check for Unicode marker at top of gedcom file (that M$ uses), so we can accept M$ UTF-8 by skipping over marker. Bugfix: Fixed key_of_record to translate, for refns following name. Bugfix: Fixed other_to_list_string to translate values of others. Added titlecase tests to exercise.ll. 2001-12-29 Perry Rapp * ChangeLog gedlib/charmaps.c gedlib/messages.c hdrs/interp.h interp/date.c liflines/screen.c: Separated English months & modifiers from GEDCOM ones. Fixed bug in lists where growing details could obscure entire list (also increased max. list height). Fix tt loader to error (not crash) if no original string (before separator) on a line. Fix end_action to handle stdout_vis (in case errors on it -- translation table errors weren't being shown any more). 2001-12-28 Perry Rapp * .linesrc ChangeLog lines.cfg gedlib/messages.c hdrs/interp.h interp/builtin.c interp/date.c interp/functab.c interp/interpi.h liflines/show.c reports/exercise.ll: Renamed get_date to get_todays_date (for clarity). Rewrite of date parsing to conform more to GEDCOM, and recognize early years. Also fixed various char extensions to INT. Began internationalizing date.c. Added originformat (for AD/BC formats). Modified __complexdate to accept string input. Added suite of date tests in exercise.ll. 2001-12-27 Perry Rapp * ChangeLog liflines/pedigree.c: Fixed !t (extended text mode) to use translation table. * .linesrc ChangeLog lines.cfg gedlib/messages.c hdrs/interp.h interp/builtin.c interp/date.c interp/functab.c interp/interpi.h liflines/show.c reports/exercise.ll: Renamed get_date to get_todays_date (for clarity). Rewrite of date parsing to conform more to GEDCOM, and recognize early years. Also fixed various char extensions to INT. Began internationalizing date.c. Added originformat (for AD/BC formats). Modified __complexdate to accept string input. 2001-12-26 Perry Rapp * ChangeLog lines.cfg gedlib/charmaps.c gedlib/editmap.c gedlib/gedcomi.h gedlib/messages.c gedlib/translat.c hdrs/gedcom.h hdrs/translat.h interp/date.c liflines/llinesi.h liflines/scan.c liflines/screen.c stdlib/lloptions.c: Made msg_outputv & place_std_message & display_status call touch_all when done. Fix edit_mapping to not show errors after finished. Add status messages during name/refn scans. Change ask_for_string & invoke_scan_menu to use activate/deactivate system (so ancestor menus get repainted). Added counts to translation table menu. Modified lloptions.c to recognize := to mean no escape processing. Implemented load_tt_action. 2001-12-24 Perry Rapp * ChangeLog liflines/browse.c liflines/screen.c: Put history variables into hist structure. Added bounce suppression. * ChangeLog gedlib/messages.c liflines/show.c: Moved remaining English strings in show.c into messages.c. Appended div. info to marriage line in family vitals. * ChangeLog gedlib/editmap.c gedlib/messages.c hdrs/gedcom.h hdrs/interp.h hdrs/liflines.h interp/builtin.c interp/date.c interp/eval.c interp/functab.c interp/interpi.h liflines/ask.c liflines/screen.c reports/exercise.ll: Moved some English strings from builtin.c to messages.c. Added yearformat=1 which displays negative years. (But doesn't work because parser doesn't handle years before 100). Modified __stddate to work on strings as well as nodes. Added date testing section to exercise.ll. Added __yearformat function. Implemented save_tt_action. 2001-12-23 Perry Rapp * .linesrc ChangeLog lines.cfg gedlib/messages.c hdrs/feedback.h hdrs/gedcom.h hdrs/lloptions.h hdrs/llstdlib.h hdrs/menuitem.h hdrs/screen.h liflines/browse.c liflines/llinesi.h liflines/main.c liflines/menuitem.c liflines/screen.c liflines/show.c: Made visit history persistent, with new config options (HistorySize & SaveHistory). Added to sample config files and synched sample config files (.linesrc & lines.cfg). Added clear history (^c) command. Altered menuitem code to read command sequence out of display, but then disabled it, pending research on matter of arrow keys... 2001-12-22 Perry Rapp * ChangeLog liflines/screen.c: Bugfix invoke_trans_menu was calling activate_uiwin twice, leading to ASSERT failure. * ChangeLog gedlib/messages.c hdrs/feedback.h hdrs/llstdlib.h hdrs/screen.h interp/interp.c liflines/screen.c stdlib/path.c: Bugfix -- push std message out to screen immediately in place_std_msg (in case a submenu is up). Fix progmessage to use wider screen. Create new function compress_path (for display use). Revise ask_for_output_filename & input to display default path. 2001-12-19 Perry Rapp * ChangeLog arch/alphasort.c arch/scandir.c hdrs/llstdlib.h stdlib/path.c: Fix replacement scandir to use caller's sort. Added platform correct path_cmp. 2001-12-18 Matt Emmerton * ChangeLog btree/record.c stdlib/lldate.c gedlib/intrface.c gedlib/translat.c interp/interp.c interp/builtin.c liflines/ask.c liflines/menuitem.c liflines/pedigree.c liflines/tandem.c liflines/screen.c Staticize prototypes in record.c, pedigree.c and screen.c Fix erroneous printfs in lldate.c and menuitem.c Mark unused code in intrface.c Comment out unused variables in builtin.c, menuitem.c, pedigree.c and ask.c Use proper types in translat.c Remove some ^M characters in interp.c Initialize some variables in pedigree.c and tandem.c 2001-12-16 Perry Rapp * .linesrc ChangeLog NEWS lines.cfg gedlib/charmaps.c gedlib/editmap.c gedlib/editvtab.c gedlib/messages.c hdrs/liflines.h hdrs/llstdlib.h interp/interp.c liflines/askprogram.c liflines/error.c liflines/main.c liflines/screen.c: Add "(separator is )" to charmap failure msgs (as I did to user options & place abbrevs last summer). Moved this string into messages.c. Changed option "ErrorLog" to "CrashLog". * ChangeLog arch/scandir.c hdrs/feedback.h hdrs/interp.h hdrs/llstdlib.h interp/interp.c liflines/askprogram.c liflines/screen.c reports/exercise.ll stdlib/path.c stdlib/stdstrng.c: Fixed askprogram.c to use platform-correct path match for extension (ie, case-insensitive under MS-Windows). Fixed formatting in askprogram.c to Petter's style. Added collation to MS-Windows scandir. Revised feedback and progmessage. 2001-12-15 Perry Rapp * ChangeLog gedlib/messages.c hdrs/screen.h liflines/screen.c liflines/show.c: Modify array_interact to have detail_lines. Added print_list_title function to handle both string & indi list titles, and truncation. Expand list window to cols-7, instead of fixed 73. 2001-12-14 Perry Rapp * ChangeLog gedlib/messages.c hdrs/screen.h liflines/main.c * liflines/menuitem.c liflines/miscutls.c liflines/screen.c * liflines/show.c Truncate string widths in msg list display. (Little more clean-up.) 2001-12-12 Matt Emmerton * ChangeLog liflines/show.c liflines/screen.c Add checks to allow clean compilation using cygwin tools. 2001-12-11 Perry Rapp * ChangeLog NEWS README.DEVELOPERS README.LAYOUT gedlib/gstrings.c gedlib/indiseq.c gedlib/init.c gedlib/intrface.c gedlib/keytonod.c gedlib/misc.c gedlib/names.c gedlib/node.c gedlib/property.c gedlib/translat.c gedlib/xreffile.c hdrs/feedback.h liflines/askprogram.c liflines/browse.c liflines/llinesi.h liflines/screen.c stdlib/lloptions.c stdlib/warehouse.c: Cosmetic code cleanup (removing causes of gcc warnings). 2001-12-11 Perry Rapp * ChangeLog hdrs/feedback.h liflines/screen.c: Changed status bar & msg list, to avoid losing messages. (msgs from utility menu were being lost, because I'm painting the main menu on the fly now). 2001-12-10 Perry Rapp * ChangeLog gedlib/gedcomi.h gedlib/indiseq.c gedlib/messages.c gedlib/names.c hdrs/feedback.h hdrs/gedcom.h hdrs/indiseq.h hdrs/menuitem.h interp/more.c liflines/ask.c liflines/browse.c liflines/lbrowse.c liflines/llinesi.h liflines/menuitem.c liflines/screen.c liflines/tandem.c: Change tandem commands to start with t. Alter output_menu to handle other #cols besides 3. Add commands to change #cols ("M<" & "M>"). Initialized #cols dependent on current screen width. Changed code to use fill screen width by default. Revised zip browse code to handle any type. Changed id_by_key to return RECORD. Removed (unused) return value from get_names. Split zip (z) cmd into zip indi (zi) and zip any (zz). Added zip cmds to aux browse screen. 2001-12-09 Perry Rapp * ChangeLog liflines/screen.c Bugfix for BSD section. 2001-12-06 Matt Emmerton * ChangeLog hdrs/feedback.h Included stdarg.h in feedback.h to avoid compilation errors. 2001-11-26 Perry Rapp * ChangeLog hdrs/feedback.h hdrs/liflines.h hdrs/screen.h interp/interp.c interp/more.c liflines/add.c liflines/advedit.c liflines/ask.c liflines/askprogram.c liflines/browse.c liflines/delete.c liflines/edit.c liflines/error.c liflines/export.c liflines/import.c liflines/lbrowse.c liflines/llinesi.h liflines/main.c liflines/menuitem.c liflines/miscutls.c liflines/newrecs.c liflines/scan.c liflines/screen.c liflines/show.c liflines/valgdcom.c: Combined choose_one_from_indiseq & choose_list_from_indiseq. Extended list detail display to handle F,S,E,X records. Changed UIWINDOW to a pointer. Fixed BSD bug. Changed include "screen.h" to "feedback.h" in many files. Made show_indi, show_fam, and show_aux the 3 major entry points for displaying records. Modified some show routines to handle variable windows & width arguments. 2001-11-26 Perry Rapp * ChangeLog gedlib/charmaps.c gedlib/gengedc.c gedlib/gstrings.c gedlib/names.c hdrs/gedcom.h hdrs/interp.h hdrs/screen.h hdrs/translat.h interp/alloc.c interp/interp.c liflines/import.c liflines/screen.c liflines/show.c: Little stuff to cut down on gcc errors & warnings. 2001-11-24 Perry Rapp * ChangeLog gedlib/messages.c hdrs/screen.h liflines/browse.c liflines/import.c liflines/llinesi.h liflines/screen.c liflines/show.c liflines/tandem.c: Revising & simplifying menu code. 2001-11-23 Perry Rapp * ChangeLog hdrs/liflines.h hdrs/screen.h interp/interp.c liflines/import.c liflines/llinesi.h liflines/screen.c liflines/show.c liflines/tandem.c: Wrapped curses WINDOW in UIWINDOW. 2001-11-22 Perry Rapp * ChangeLog gedlib/init.c gedlib/messages.c gedlib/node.c gedlib/translat.c hdrs/gedcom.h hdrs/lloptions.h hdrs/table.h interp/builtin.c interp/eval.c interp/interp.c interp/more.c interp/rassa.c liflines/add.c liflines/askprogram.c liflines/error.c liflines/export.c liflines/import.c liflines/main.c liflines/newrecs.c liflines/screen.c liflines/show.c stdlib/lloptions.c stdlib/table.c tools/dbverify.c: Rewrite of lloptions module. Pushed lifelines specific code up into init.c. Made all config options overridable via useroptions. Eliminated complete listing of options in code. 2001-11-21 Perry Rapp * ChangeLog liflines/pedigree.c liflines/show.c tools/dbverify.c: Fixed pedigree scroll. Fixed duplicate "cb." bug in family_events. 2001-11-20 Perry Rapp * .linesrc ChangeLog lines.cfg docs/lifelines.sgml gedlib/messages.c gedlib/node.c hdrs/cache.h hdrs/lloptions.h interp/date.c liflines/export.c liflines/show.c stdlib/lloptions.c tools/dbverify.c: (Internat.) Moved some indi strings ("born"...) into messages.c. Added getoptstr function (encapsulate getting option string). Added ShortOmitString option & add support in indi_event. Attempted fix bug in family_events which could print two cb. events. Fixed namelen bug in person_display. Include Jens' addition for docs. Fix pedigree scroll. 2001-11-19 Perry Rapp * .linesrc ChangeLog lines.cfg docs/lifelines.sgml gedlib/charmaps.c gedlib/intrface.c gedlib/keytonod.c gedlib/messages.c gedlib/node.c gedlib/remove.c gedlib/replace.c gedlib/spltjoin.c gedlib/valid.c gedlib/valtable.c hdrs/cache.h hdrs/gedcom.h interp/builtin.c interp/interp.c interp/more.c interp/pvalue.c interp/write.c liflines/add.c liflines/ask.c liflines/askprogram.c liflines/browse.c liflines/delete.c liflines/edit.c liflines/llinesi.h liflines/merge.c liflines/miscutls.c liflines/newrecs.c liflines/scan.c liflines/screen.c liflines/show.c liflines/swap.c tools/dbverify.c: Convert remaining "nod0" to "rec" or "record". Fix report prompt to not report error if you hit enter (to cancel). 2001-11-15 Perry Rapp * .linesrc ChangeLog lines.cfg docs/lifelines.sgml gedlib/messages.c gedlib/node.c hdrs/gedcom.h interp/date.c liflines/export.c liflines/main.c liflines/show.c: New dateformats 13 & 14. Fix wrong prototype in show.c. Updated some of lifelines.sgml. 2001-11-13 Perry Rapp * ChangeLog liflines/show.c: Fix a few blank prototypes to (void). * ChangeLog gedlib/intrface.c gedlib/keytonod.c gedlib/node.c gedlib/refns.c hdrs/cache.h hdrs/gedcom.h hdrs/liflines.h liflines/add.c liflines/ask.c liflines/browse.c liflines/llinesi.h liflines/newrecs.c liflines/scan.c liflines/screen.c tools/dbverify.c: Change NOD0 type to RECORD. * ChangeLog gedlib/intrface.c gedlib/keytonod.c gedlib/node.c gedlib/refns.c hdrs/cache.h hdrs/gedcom.h liflines/advedit.c liflines/ask.c liflines/newrecs.c tools/dbverify.c win32/hdrs/proto.h: Change nod0 to record in some function names. 2001-11-12 Perry Rapp * ChangeLog liflines/llinesi.h liflines/pedigree.c liflines/show.c liflines/tandem.c: Fix tandem scroll bugs, and tandem pedigree depth adj. was left out. 2001-11-12 Matt Emmerton * ChangeLog interp/pvalue.c interp/rassa.c interp/write.c interp/yacc.y tools/wprintf.c Converted more #include "screen.h" to "feedback.h" 2001-11-12 Matt Emmerton * ChangeLog liflines/tandem.c hdrs/menuitem.h Converted tandem.c to use feedback.h instead of screen.h. Changed extern definition of ScreenInfo to not depend on MAX_SCREEN, defined in screen.h. (This allows source that uses menuitem to use feedback.h instead of screen.h) 2001-11-12 Perry Rapp * ChangeLog gedlib/messages.c gedlib/node.c gedlib/valid.c hdrs/feedback.h hdrs/menuitem.h liflines/browse.c liflines/llinesi.h liflines/menuitem.c liflines/newrecs.c liflines/screen.c: Add prompts in %o, and add analogous %s and %n. Put all three into all browse screens. Fix bugs in fam_to_first_chil,fam_to_last_chil,indi_to_next_sib, indi_to_prev_sib. * ChangeLog hdrs/feedback.h hdrs/screen.h interp/alloc.c interp/builtin.c interp/eval.c interp/interp.c liflines/export.c liflines/llinesi.h liflines/merge.c liflines/pedigree.c liflines/screen.c liflines/show.c liflines/swap.c liflines/tandem.c: Removed screen.h from some more files. New CANVASDATA struct for pedigree (so it doesn't use screen.h). Changed put_out_line prototype to use void * win, so llinesi.h doesn't require curses. * .linesrc ChangeLog lines.cfg interp/interp.c liflines/browse.c liflines/export.c liflines/tandem.c: Typo fixes. 2001-11-11 Perry Rapp * ChangeLog gedlib/gstrings.c hdrs/interp.h interp/eval.c interp/interp.c interp/pvalue.c interp/yacc.y liflines/ask.c liflines/askprogram.c liflines/browse.c liflines/edit.c reports/exercise.ll stdlib/dirs.c stdlib/signals.c: Bugfix to other_to_list_string to not crash on blank CONC/CONT. Implement report statement: option("explicitvars"). Fix interp_foreven, interp_forothr (more efficient style, and lock loop variables in cache through loop body). * ChangeLog configure.in arch/Makefile.am gedlib/charmaps.c gedlib/editmap.c gedlib/editvtab.c gedlib/messages.c gedlib/names.c hdrs/arch.h hdrs/feedback.h hdrs/gedcom.h hdrs/liflines.h hdrs/screen.h interp/interp.c interp/more.c interp/rassa.c liflines/add.c liflines/ask.c liflines/askprogram.c liflines/browse.c liflines/edit.c liflines/export.c liflines/import.c liflines/lbrowse.c liflines/llinesi.h liflines/miscutls.c liflines/newrecs.c liflines/screen.c liflines/show.c stdlib/dirs.c tools/wprintf.c: Built buffered message system (built on msg_impl), and routed all messages through it except llwprintf. 2001-11-09 Perry Rapp * ChangeLog liflines/export.c Revised export headers (moved TIME to level 2, added GEDC & children). * .linesrc ChangeLog lines.cfg docs/lifelines.sgml gedlib/messages.c gedlib/valtable.c hdrs/lloptions.h interp/interp.c liflines/add.c liflines/ask.c liflines/askprogram.c liflines/browse.c liflines/edit.c liflines/export.c liflines/newrecs.c stdlib/lloptions.c stdlib/signals.c: Modified valtable to handle \n and \t escapes. Added new options to lloptions (config file): INDIREC, FAMRECBODY,SOURREC,EVENREC,OTHRREC,HDR_GEDC,HDR_CHAR,HDR_SUBM. Modified config file read to handle \n, \t, and \\ escapes. Added check for line overflow when reading config file (bail out of reading config file). 2001-11-08 Perry Rapp Moved ui code from liflines/remove.c into liflines/delete.c, and then moved non-ui remove.c to gedlib/. Created feedback.h for ui functions called outside of lifelines/, instead of them including screen.h. Included feedback.h from screen.h. Included screen.h from screen.c. Added shutdown_ui function to stop curses (combining exit points of main & fatal & signal handler). Moved cleanup_lloptions to close_lifelines. 2001-11-03 Marc Nozell * configure.in, hdrs/version.h, lifelines.spec: bump version to 3.0.7. * lifelines.spec: ensure /usr/local/share/lifelines/reports is created during install. * hdrs/Makefile.am (EXTRA_DIST): Added new bfs.h and fpattern.h 2001-10-29 Perry Rapp * .linesrc ChangeLog lines.cfg docs/lifelines.sgml gedlib/gstrings.c gedlib/init.c gedlib/node.c hdrs/gedcom.h hdrs/interp.h hdrs/lloptions.h interp/builtin.c interp/date.c liflines/add.c liflines/browse.c liflines/llinesi.h liflines/pedigree.c liflines/screen.c liflines/show.c liflines/swap.c stdlib/lloptions.c Revised option format for custom long date display format. Add option for custom short day format. Preparation for custom report long & short day formats. New sfmt mode 12 is old short format. 2001-10-29 Matt Emmerton * ChangeLog hdrs/llstdlib.h stdlib/stdlibi.h Promote ll_abort() from local scope to global scope. 2001-10-28 Perry Rapp * ChangeLog hdrs/llstdlib.h liflines/error.c liflines/main.c stdlib/fpattern.c stdlib/lloptions.c stdlib/memalloc.c tools/dbverify.c Bugfixes for alloc errorfile handling. * ChangeLog gedlib/xreffile.c hdrs/gedcom.h liflines/show.c stdlib/lloptions.c stdlib/signals.c Modify signal handler to not assume curses is up. Improve single-line person print to give more width to events for short names. 2001-10-16 Matt Emmerton * reports/book-latex.ll: Restored some previous additions to this report. The update from Dennis Nicklaus on 12 Aug 2001 had deleted them and he asked me to re-add them. So: Add CREM (cremated) tag processing; modified OCCU tag processing so that it can recognize date ranges (and so avoid saying "xx is a yy and a zz and a ..."); modified OCCU tag processing to recognize a subordinate AGNC tag indicating employer; modified onDate to recognize date ranges (FROM dd mmm yyyy TO dd mmm yyyy) - this still has some rough edges. 2001-09-26 Matt Emmerton * ChangeLog stdlib/lloptions.c liflines/main.c 1) Fix a missing pointer reference in init_lloptions that would cause segfaults 2) Moved init_lloptions from read_lloptions_from_config to init_liflines_global. 3) Make read_lloptions_from_db happen *after* init_liflines_db in main.c 2001-09-25 Matt Emmerton * ChangeLog * stdlib/lloptions.c stdlib/Makefile.am * tools/dbverify.c * liflines/Makefile.am liflines/error.c lifelines/main.c * hdrs/liflines.h hdrs/gedcom.h hdrs/llstdlib.h * gedlib/Makefile.am gedlib/init.c * (deleted) stdlib/assert.c gedlib/lloptions.c liflines/lloptions.c * (added) liflines/error.c liflines/lloptions.c stdlib/lloptions.c Three batches of commits to fix up a bunch of modularity violations. 1) moved lloptions stuff out of gedlib/ and into stdlib/ 2) moved __fatal() and related routines out of stdlib/ and into liflines/ and tools/, so that each program can handle errors in an appropriate manner. 2001-09-24 Matt Emmerton * ChangeLog tools/dbverify.c main() in dbverify.c now initializes the global variable alloclog instead of defining and initializing a local one. 2001-09-24 Matt Emmerton * ChangeLog liflines/main.c stdlib/memalloc.c: Moved global variable 'alloclog' from liflines/main.c to stdlib/memalloc.c 2001-09-22 Perry Rapp * .linesrc ChangeLog lines.cfg btree/addkey.c gedlib/init.c gedlib/lloptions.c gedlib/xreffile.c hdrs/lloptions.h hdrs/llstdlib.h stdlib/assert.c Added ErrorsLog config file option, & modified LifeLine's __fatal() accordingly. 2001-09-19 Perry Rapp * ChangeLog tools/dbverify.c Added -a option for all checks. 2001-09-16 Matt Emmerton * ChangeLog tools/dbverify.c: Removed special error-displaying code and use describe_dberror() from gedlib/init.c instead. 2001-09-16 Matt Emmerton * ChangeLog interp/interpi.h interp/more.c interp/functab.c: Renamed __system to __runsystem to avoid conflict with gcc internals (or something) when compiling with '-pg'. 2001-09-16 Matt Emmerton * ChangeLog stdlib/assert.c btree/index.c btree/opnbtree.c * btree/record.c gedlib/init.c gedlib/keytonod.c gedlib/messages.c * interp/builtin.c interp/interp.c interp/pvalue.c liflines/main.c * liflines/screen.c tools/btedit.c tools/dbverify.c: Removed some MS-DOS newlines. 2001-09-16 Matt Emmerton * ChangeLog hdrs/btree.h hdrs/gedcom.h hdrs/llstdlib.h * hdrs/msvc.h hdrs/standard.h: Removed some MS-DOS newlines. 2001-09-16 Matt Emmerton * ChangeLog tools/dbverify.c: Print bterrno value when database can't be opened. 2001-09-14 Perry Rapp * ChangeLog gedlib/keytonod.c hdrs/version.h interp/builtin.c interp/interp.c interp/pvalue.c: Added some comments indicating where null cacheels might be expected. 2001-09-03 Perry Rapp * ChangeLog tools/dbverify.c: bugfix from changes yesterday. 2001-09-02 Perry Rapp * .linesrc ChangeLog lines.cfg btree/addkey.c btree/block.c btree/btreei.h btree/file.c btree/index.c btree/opnbtree.c btree/record.c btree/traverse.c gedlib/init.c gedlib/messages.c hdrs/btree.h hdrs/gedcom.h hdrs/llstdlib.h hdrs/standard.h liflines/main.c liflines/screen.c stdlib/assert.c tools/btedit.c tools/dbverify.c NEW: hdrs/msvc.h: Added -i for immutable access, and -ly & -ln for locking & unlocking a database. 2001-08-12 Marc Nozell * reports/book-latex.ll: Dennis Nicklaus provided an updated book-latex.ll. 2001-08-03 Perry Rapp * .linesrc ChangeLog lines.cfg btree/record.c gedlib/intrface.c gedlib/lloptions.c gedlib/messages.c gedlib/names.c gedlib/refns.c hdrs/lloptions.h liflines/screen.c: Removed some unneeded casts. Modifications to charset menus. Moved IN-RPT translation from name functions to poutput. Fixed substring & trim_name for UTF-8. Split locale into GUI & report. 2001-07-31 Perry Rapp * ChangeLog btree/file.c btree/index.c btree/record.c btree/traverse.c hdrs/btree.h hdrs/lloptions.h: Changed typedef RECORD to RAWRECORD. Misc additional header documentation. 2001-07-29 Perry Rapp Deleted redundant ARRAYSIZE macro (same as ARRSIZE). Bugfix in bfs.c BufCatNum (but unused function at present). Added sanity ASSERT in sort code in case string compare misbehaves. 2001-07-28 Marc Nozell * docs/lifelines.sgml: Missed a typo. 2001-07-26 Marc Nozell * docs/lifelines.sgml: Allow newer docbook tool chains to process manual into postscript/pdf. Changed to 2001-07-26 Perry Rapp * ChangeLog stdlib/Makefile.am: Bugfix - forgot to include new file bfs.c in stdlib/makefile source line. 2001-07-24 Perry Rapp * btree/file.c stdlib/llstrcmp.c: Bugfix - handle strcoll errors. 2001-07-22 Perry Rapp * ChangeLog btree/file.c btree/opnbtree.c gedlib/brwslist.c gedlib/charmaps.c gedlib/editmap.c gedlib/editvtab.c gedlib/indiseq.c gedlib/init.c gedlib/intrface.c gedlib/lloptions.c gedlib/messages.c gedlib/names.c gedlib/translat.c gedlib/valtable.c hdrs/btree.h hdrs/gedcom.h hdrs/llstdlib.h hdrs/standard.h hdrs/translat.h interp/alloc.c interp/builtin.c interp/pvalue.c liflines/ask.c liflines/main.c liflines/newrecs.c liflines/screen.c stdlib/dirs.c stdlib/llstrcmp.c stdlib/memalloc.c stdlib/stdstrng.c tools/btedit.c tools/dbverify.c: Revised string sort macros & routines, so new macro cmpstrloc is for localized sorting. Implemented locale sorting (strcoll) and optional custom sorting. Added character set menu to display & adjust locale, and edit custom sort mapping table. Moved some strings from screen menu code into messages.c. Added map file names ("##!name: " directive) and displayed it in menu items. * ChangeLog stdlib/Makefile.am NEW: hdrs/bfs.h stdlib/bfs.c: Added new dynamic string code (bfs.*). * ChangeLog btree/file.c hdrs/translat.h: Bugfix for twice-declared typedef (bfptr) - change to single declaration and only forward declaration of underlying struct. 2001-07-18 Perry Rapp * ChangeLog gedlib/charmaps.c gedlib/names.c liflines/add.c stdlib/llstrcmp.c stdlib/stdstrng.c: Bugfix for crash due to adding person with blank name. Little more documentation & uchar fixes (cast chars to unsigned before assiging to INT to avoid sign extension). * gedlib/choose.c gedlib/messages.c hdrs/menuitem.h liflines/add.c liflines/browse.c liflines/llinesi.h liflines/menuitem.c liflines/swap.c: Add "reorder child" menu item to family browse. * ChangeLog gedlib/editmap.c liflines/pedigree.c liflines/show.c: Bugfix (NOMAPS was still 6 not 7, so couldn't edit internal-to-report). 2001-07-15 Perry Rapp * ChangeLog gedlib/charmaps.c gedlib/editvtab.c gedlib/indiseq.c gedlib/lloptions.c gedlib/messages.c gedlib/names.c gedlib/node.c gedlib/property.c gedlib/valtable.c hdrs/arch.h hdrs/gedcom.h hdrs/sys_inc.h liflines/ask.c liflines/screen.c liflines/show.c stdlib/memalloc.c tools/dbverify.c: Improved feedback for errors in user options or place abbrev. or translation tables. Changed a few sprintf calls to snprintf. Revised translation menu to stay up until user chooses quit. Added display-to-internal mapping. Moved mapping menu choices to messages.c. Added length limit to bsd_mvwgetstr. Modified str_to_indiseq to use new display-to-internal mapping. Modified squeeze to leave non-ascii characters. * ChangeLog btree/file.c btree/opnbtree.c gedlib/charmaps.c gedlib/editmap.c gedlib/init.c hdrs/btree.h liflines/main.c: Bugfix - newly created dbs weren't showing name at top of screen. (Also simplified creation code.) Bugfix - translation table editing on MS-Windows has cr/lf bug. 2001-07-13 Perry Rapp * ChangeLog gedlib/charmaps.c gedlib/translat.c: Bugfix in translation table code. * ChangeLog gedlib/charmaps.c interp/builtin.c: Apply internal-to-report trans for surname, givens, and trimname. 2001-07-12 Perry Rapp * ChangeLog gedlib/charmaps.c gedlib/gstrings.c gedlib/indiseq.c gedlib/init.c gedlib/node.c hdrs/gedcom.h hdrs/indiseq.h hdrs/liflines.h interp/builtin.c interp/more.c liflines/add.c liflines/browse.c liflines/pedigree.c liflines/screen.c liflines/show.c: Created reformatting context so gedcom doesn't directly call format_date. Plugged memory leak in init_map_from_str. 2001-07-11 Perry Rapp * ChangeLog gedlib/charmaps.c gedlib/misc.c gedlib/names.c gedlib/node.c hdrs/standard.h stdlib/stdstrng.c: Bugfix for unsigned char fixes on 2001-07-10. Reverted to previous use of STRING pointers, and now cast to (uchar) before any conversion to INT (to avoid unwanted sign extension). 2001-07-10 David A. Bright * reports/book-latex.ll: Added CREM (cremated) tag processing; modified OCCU tag processing so that it can recognize date ranges (and so avoid saying "xx is a yy and a zz and a ..."); modified OCCU tag processing to recognize a subordinate AGNC tag indicating employer; modified onDate to recognize date ranges (FROM dd mmm yyyy TO dd mmm yyyy) - this still has some rough edges. 2001-07-10 Perry Rapp * ChangeLog gedlib/charmaps.c gedlib/misc.c gedlib/names.c gedlib/node.c interp/builtin.c liflines/screen.c stdlib/stdstrng.c: Changed some string dereferences to unsigned char, where result will be passed to isxxxx family. Improved soundex routine (avoided copying entire name first). * .linesrc ChangeLog lines.cfg gedlib/charmaps.c gedlib/editmap.c gedlib/lloptions.c gedlib/node.c gedlib/translat.c hdrs/lloptions.h: Bugfix to allow entering empty translation table, and more function documentation. Additional config options allowing customized long date display in browse screen. 2001-07-08 Perry Rapp * ChangeLog gedlib/names.c stdlib/environ.c: Changed temp file to be 8.3 under windows, and fixed name_to_parts to avoid sign extension because STRING may be signed chars. 2001-07-07 Perry Rapp * ChangeLog: Added tools/dispcode.c, tiny utility to show character codes. 2001-07-04 Perry Rapp * ChangeLog btree/file.c btree/opnbtree.c gedlib/editmap.c gedlib/editvtab.c gedlib/intrface.c gedlib/node.c gedlib/nodeutls.c gedlib/translat.c gedlib/valtable.c hdrs/btree.h hdrs/gedcom.h interp/more.c interp/pvalue.c liflines/screen.c liflines/show.c stdlib/llstrcmp.c stdlib/mystring.c stdlib/stdstrng.c tools/wprintf.c: Fixed a possibility of buffer overflow in translate_write. More (function header) documentation of various functions. Fixed buffer overwrite bug in striplead, then ifdef'd it out as UNUSED_CODE. Standardized UNUSED/UNUSED_CODE ifdefs, so all are ifdef UNUSED_CODE, and have comment in function header docs. Deleted some unused variables in coerce_pvalue. Deleted unused & unimplemented function freerecord in more.c. Fixed translate_string (translat.c) for possible buffer overflow. Fixed indi_to_event to use fixed length string copying (to avoid any possibility of buffer overflow). Modified event_to_string to avoid any possibility of buffer overflow. Modified person_display into subroutines, and started respecting len. Modified spouse display to include more events when room. Fixed bug in translation tables & place abbrev tables on MSDOS (\r <-> \r\n file problem). 2001-07-02 Perry Rapp * ChangeLog btree/opnbtree.c gedlib/translat.c: Sign extension bugfix for translat.c (reported by Stefan Siegel). 2001-07-01 Perry Rapp * .linesrc ChangeLog btree/opnbtree.c gedlib/init.c gedlib/lloptions.c gedlib/node.c gedlib/place.c gedlib/refns.c hdrs/gedcom.h hdrs/lloptions.h hdrs/screen.h interp/eval.c interp/interp.c interp/yacc.y liflines/advedit.c liflines/browse.c liflines/export.c liflines/import.c liflines/main.c liflines/scan.c liflines/screen.c Added lines.cfg, copy of windows version template config file. Added progerror to flag when errors occurred during report processing, and made a single sleep call at the end of reporting all program errors (instead of a sleep after each individual error). Added some misc. function parameter documentation. Renamed ask_for_lldb to ask_for_db_filename. Added param to traverse_nodes function, and removed statics from advedit.c (passed on stack instead, with help of new param to traverse_nodes). Added ReportLog option (to which report errors will be appended by prog_error). Changed yyerror to call prog_error instead of llwvprintf. Modified prog_error to handle NULL pnode argument (for yyerror). Modified error string for mismatch args in user function to include function name. 2001-07-01 Matt Emmerton * ChangeLog btree/opnbtree.c Backed out my changes as they raised concerns by other developers. 2001-06-30 Matt Emmerton * ChangeLog btree/opnbtree.c Made open_btree() honour the readonly flag. (Previously it would attempt to open the keyfiles in R/W mode and update them (!) without checking the readonly flag.) 2001-06-15 Perry Rapp * ChangeLog liflines/swap.c: Improved swap children/families to not prompt for which when only two. 2001-06-12 Perry Rapp * ChangeLog interp/interp.c liflines/main.c: Bugfix in interp_indisetloop & interp_forlist (temp values getting deleted before used). Added -d flag for debug mode (don't catch signals, so can coredump). 2001-06-10 Perry Rapp * ChangeLog hdrs/interp.h interp/alloc.c liflines/main.c: Added init code to check builtins array (& FATAL2 if not correct). * ChangeLog btree/addkey.c btree/traverse.c btree/utils.c gedlib/init.c gedlib/place.c gedlib/property.c gedlib/refns.c gedlib/replace.c gedlib/spltjoin.c gedlib/translat.c gedlib/valid.c gedlib/valtable.c gedlib/xreffile.c hdrs/gedcheck.h hdrs/gedcom.h hdrs/indiseq.h hdrs/interp.h hdrs/lloptions.h hdrs/menuitem.h hdrs/screen.h hdrs/standard.h hdrs/table.h hdrs/translat.h interp/alloc.c interp/eval.c interp/pvalue.c interp/rassa.c interp/write.c liflines/add.c liflines/advedit.c liflines/ask.c liflines/remove.c liflines/screen.c liflines/show.c liflines/swap.c liflines/tandem.c liflines/valgdcom.c stdlib/sequence.c stdlib/signals.c stdlib/stdstrng.c stdlib/table.c stdlib/warehouse.c tools/dbverify.c win32/w32systm.c: (Comment changes.) Labelled version info in file headers as pre-Sourceforge. 2001-06-03 Perry Rapp * ChangeLog gedlib/gengedc.c gedlib/indiseq.c gedlib/init.c gedlib/keytonod.c gedlib/lloptions.c gedlib/node.c gedlib/property.c gedlib/valtable.c hdrs/gedcom.h hdrs/interp.h hdrs/table.h interp/alloc.c interp/builtin.c interp/date.c interp/eval.c interp/interp.c interp/pvalue.c interp/yacc.y liflines/add.c liflines/newrecs.c liflines/pedigree.c liflines/valgdcom.c stdlib/table.c tools/dbverify.c: Changed TABLEs to hold UNION instead of VPTR (they were already being used to store INTs sometimes anyway). This removed a lot of casting. Fixed bug in dbverify - it was flagging names with same soundex as duplicates. Made init_valtab_from_string into static. Corrected comments in symtab_valofbool. 2001-05-29 Perry Rapp * ChangeLog docs/Run.LifeLines.Windows.txt docs/lifelines.sgml Added notes about NULL vs. empty strings in string section, and under if operator. Revised notes about buffer return string functions, to indicate this is historical and obsolete with 3.0.6. 2001-05-29 Perry Rapp * ChangeLog NEWS btree/record.c btree/traverse.c: Fix traverse bug - indices and/or blocks could fall out of index cache during traverse. 2001-05-28 Perry Rapp * ChangeLog interp/more.c tools/dbverify.c: Fix buffer overflow in substring. Added detail to out-of-memory FATAL in dbverify's allocate. * reports/exercise.ll: Added index tests to exercise.ll. * ChangeLog interp/more.c liflines/main.c: Fix _index() to handle long strings without buffer overflow. * ChangeLog gedlib/indiseq.c hdrs/interp.h interp/eval.c interp/intrpseq.c: Fix critical bugs in several indiseq functions incl child_indiseq, difference_indiseq. Values were being copied directly, which was fatal with pvalue indiseqs (must use copyval, which uses vtable). Fix fatal bug in __length (it was deleting the seq before getting its length). * ChangeLog stdlib/table.c: Fix table hash function to handle negative numbers (perhaps this is happening with upper-bit set characters). 2001-05-27 Perry Rapp * ChangeLog interp/interp.c interp/pvalue.c: Fixed bug - filetab etc getting removed but not set to NULL. (Crashed if you choose "p" then "q" from main menu, after having run a report before.) * ChangeLog tools/dbverify.c: Added lifelines version string to dbverify help output. 2001-05-26 Perry Rapp * ChangeLog btree/record.c btree/traverse.c btree/utils.c gedlib/init.c gedlib/lloptions.c hdrs/btree.h hdrs/gedcom.h hdrs/llstdlib.h hdrs/standard.h hdrs/sys_inc.h liflines/main.c stdlib/assert.c tools/btedit.c tools/dbverify.c: Added string arg to __fatal, adapted existing FATAL & ASSERT, and added new FATAL2(str). Added comments in btree.h. Added some detail messages in ASSERT/FATAL errors in record.c. Fixed bug/crash - editfile was getting freed when opening new db. Also changed some 200 -> MAXPATHLEN in record.c. Absorbed init_cleanup() into new close_lldb(), and changed most calls close_lifelines() to be close_lldb(). 2001-05-22 Perry Rapp * gedlib/indiseq.c interp/date.c Fix memory leak of indiseq elements. * liflines/askprogram.c stdlib/environ.c Added include for stdfree. 2001-05-02 Matt Emmerton * ChangeLog gedlib/node.c gedlib/indiseq.c gedlib/gedcom.c * gedlib/lloptions.c gedlib/names.c btree/record.c * liflines/askprogram.c liflines/menuitem.c liflines/pedigree.c * liflines/show.c Change most instances of malloc to stdmalloc Change most instances of free to stdfree Fix double-free bug in gedlib/node.c introduced on May 1 2001-05-01 Matt Emmerton * liflines/main.c gedlib/node.c Fix up a few memory leaks 2001-04-29 Perry Rapp * ChangeLog liflines/import.c stdlib/stdstrng.c: Close file handle after import. Prevent buffer underrun access in striplead. 2001-04-29 Perry Rapp * ChangeLog NEWS interp/builtin.c interp/more.c interp/pvalue.c stdlib/stdstrng.c: Change back to use null pstrings Modify some builtin functions to handle null pstrings. Modify upper & lower to not overflow buffers. 2001-04-29 Perry Rapp * btree/opnbtree.c gedlib/init.c hdrs/btree.h liflines/main.c stdlib/fpattern.c: Finished rearranging open db code so almost all non-ui parts are in gedlib or btree. 2001-04-22 Perry Rapp * ChangeLog NEWS btree/index.c btree/opnbtree.c btree/utils.c gedlib/init.c gedlib/names.c gedlib/xreffile.c hdrs/btree.h hdrs/llstdlib.h hdrs/menuitem.h hdrs/screen.h interp/alloc.c interp/builtin.c interp/pvalue.c liflines/browse.c liflines/llinesi.h liflines/main.c liflines/menuitem.c liflines/pedigree.c liflines/screen.c liflines/show.c liflines/tandem.c stdlib/path.c stdlib/stdstrng.c tools/dbverify.c: Modified display routines to reuse display strings when convenient. Added gedcomt mode (wrap text & concatenate CONC records). Moved some code from main.c into opnbtree.c. Modified create_pvalue, set_pvalue, coerce_pvalue to make PSTRINGs with "" instead of NULL. Modified ne_pvalues so NULL & "" PSTRINGs compare equal. Added comments in some places. 2001-04-16 Petter Reinholdtsen * Makefile.am: The ANNOUNCEMENT file is removed. Track change in makefile. * docs/lifelines.sgml: Correct SGML tags in getproperty description. 2001-04-15 Perry Rapp * ChangeLog NEWS interp/interp.c interp/pvalue.c: Fixes for pvalue problems. * interp/builtin.c: Added comment for outstanding problem with __name (it returns NULL PSTRING values). * ChangeLog interp/interp.c: Fix to fornodes so it returns success when no children. 2001-04-15 * tools/btedit.c: Fix btedit build. 2001-04-14 Perry Rapp * ChangeLog NEWS hdrs/interp.h interp/pvalue.c liflines/newrecs.c liflines/pedigree.c liflines/screen.c: Add check for readonly to various places. Added some comments. 2001-04-13 Perry Rapp * ChangeLog NEWS gedlib/gstrings.c gedlib/indiseq.c gedlib/keytonod.c hdrs/cache.h interp/interp.c interp/intrpseq.c interp/more.c interp/pvalue.c: Fixed a couple bugs, and revised menuchoose to handle nonstring list choice items. Tested & commented in dupseq. * ChangeLog interp/intrpseq.c: Fix some more report indiseq commands to accept NULL seqs. 2001-04-12 Perry Rapp * ChangeLog gedlib/indiseq.c liflines/browse.c: Added history list, and pulled history handling into one function. 2001-04-11 Perry Rapp * ChangeLog gedlib/indiseq.c liflines/browse.c: Bugfixes to note/pointer cross-reference browsing, and add handling to family browse menu. 2001-04-11 Marc Nozell * docs/Makefile.am: postscript and pdf output of documentation is broken. Temporarily remove from build. 2001-04-09 Perry Rapp * ChangeLog gedlib/indiseq.c: New function dupseq (but not implemented correctly). Revised union_indiseq & difference_indiseq for NULL inputs. 2001-04-08 Perry Rapp * ChangeLog gedlib/indiseq.c gedlib/xreffile.c hdrs/indiseq.h hdrs/interp.h hdrs/menuitem.h interp/builtin.c interp/intrpseq.c interp/pvalue.c liflines/ask.c liflines/screen.c: Fixed bug in addxref. Fixes for ancestorset & descendantset to work with null value indiseqs. Allow create_gen callback to set valuetype of null value indiseq. Fixes for report code to work with null indiseqs. * ChangeLog hdrs/menuitem.h liflines/menuitem.c liflines/screen.c: Renamed global ScreenInfo variable in menuitem.h, fixed decl to extern. * ChangeLog NEWS gedlib/gstrings.c liflines/browse.c liflines/main.c liflines/newrecs.c liflines/pedigree.c liflines/screen.c liflines/show.c: Added some comments. Fixed bug: editing S/E/X didn't pick up changes to top node value. Added successive CONC/CONT text to generic_to_list_string for X nodes. 2001-04-06 Perry Rapp * ChangeLog gedlib/node.c gedlib/valid.c hdrs/gedcom.h hdrs/menuitem.h hdrs/sys_inc.h interp/pvalue.c liflines/browse.c liflines/llinesi.h liflines/menuitem.c liflines/newrecs.c tools/btedit.c win32/w32systm.c: Added decl of w32system to sys_inc.h (not sure where to put it). Modified add_sour etc to return NODE (instead of BOOLEAN). Added menuitem to add other from browse_indi screen. 2001-04-01 Perry Rapp * ChangeLog docs/Run.LifeLines.Windows.txt gedlib/indiseq.c hdrs/standard.h interp/pvalue.c liflines/screen.c: Bugfix - not all new seqs were getting correct Valvtbl. Bugfix - descendant_indiseq was putting stale keys in table. Bugfix - system call doesn't work in win95/98, so returned to calling w32system for Windows. 2001-03-30 John Chandler * tools/btedit.c: inserted missing declaration for rtn 2001-03-26 Perry Rapp * ChangeLog btree/file.c gedlib/brwslist.c gedlib/choose.c gedlib/gengedc.c gedlib/indiseq.c gedlib/keytonod.c gedlib/lloptions.c hdrs/cache.h hdrs/gengedc.h hdrs/indiseq.h hdrs/interp.h hdrs/table.h interp/builtin.c interp/eval.c interp/heapused.c interp/interp.c interp/interpi.h interp/intrpseq.c interp/more.c interp/pvalue.c interp/rassa.c interp/write.c interp/yacc.y liflines/ask.c liflines/browse.c liflines/delete.c liflines/lbrowse.c liflines/newrecs.c liflines/pedigree.c liflines/scan.c liflines/screen.c liflines/tandem.c stdlib/table.c tools/dbverify.c tools/wprintf.c: Fixed a LOT of pvalue leaks. Cleared symbol tables when leaving subs & funcs. Cleared symbol table entries used by loop constructs immediately. Revised PINDI etc to lock their nodes in indirect cache ("semilock"). 2001-03-18 Perry Rapp * btree/file.c gedlib/editmap.c gedlib/editvtab.c gedlib/init.c gedlib/intrface.c gedlib/messages.c gedlib/valtable.c hdrs/btree.h hdrs/gedcom.h hdrs/interp.h hdrs/standard.h interp/builtin.c interp/interp.c interp/more.c interp/pvalue.c liflines/main.c stdlib/environ.c tools/btedit.c tools/dbverify.c: Isolated PINDI etc storage as CACHEELs into one place. Windows bugfix: notepad adding .txt to temp file Windows bugfix: fread not reading full text because of CR/LF conversion 2001-03-17 Perry Rapp * gedlib/keytonod.c hdrs/cache.h hdrs/interp.h hdrs/mystring.h hdrs/version.h interp/builtin.c interp/eval.c interp/interp.c interp/pvalue.c stdlib/memalloc.c stdlib/mystring.c tools/dbverify.c: Fixed typos & cache overflow bug reported by Denis Excoffier by locking cache elements as long as held by pvalues. Added cache overflow message & names for caches. Removed unused & incorrect getindidate. Clears symbol table entries after loops (children,...). Added usage example to usage in dbverify. * gedlib/keytonod.c hdrs/cache.h interp/pvalue.c: Added semilocking for pvalues, to allow deeper recursion. * gedlib/lloptions.c hdrs/lloptions.h interp/builtin.c interp/interp.c interp/more.c: Add DenySystemCalls option. Typecheck root() report call. 2001-03-14 John Chandler * tools/Makefile.am: added arch/archlib.a to load list for dbverify (needed for snprintf) 2001-03-04 Perry Rapp * .linesrc gedlib/lloptions.c hdrs/lloptions.h liflines/import.c: Removed ReadFromArchives option, and added InputPath option. * gedlib/gedcom.c gedlib/keytonod.c gedlib/messages.c hdrs/gedcom.h hdrs/menuitem.h interp/interp.c liflines/browse.c liflines/menuitem.c: Added back (history) menu item. 2001-02-25 Marc Nozell * configure.in, docs/Makefile.am: Added building of documentation if possible. --with-docs=yes/no * configure.in, lifelines.spec, hdrs/version.h: Changed version to 3.0.6dev from 3.0.6. RPM doesn't like the hypen. * lifelines.spec: include new tree.tex 2001-02-25 Perry Rapp * gedlib/choose.c gedlib/indiseq.c gedlib/messages.c hdrs/gedcom.h hdrs/indiseq.h hdrs/menuitem.h liflines/browse.c liflines/llinesi.h liflines/menuitem.c liflines/screen.c: Integrated browse_aux into browse(...). This fixes some bugs from leaving nodes on the stack. * hdrs/gedcom.h interp/interp.c: Fix string/stack overflow in progmessage. 2001-02-24 Perry Rapp gedlib/indiseq.c: Filter out duplicates in indi_to_children. 2001-02-21 Matt Emmerton btree/utils.c: Removed llmkdir() function and exists() macro since they were moved to stdlib/dirs.c some time ago. 2001-02-18 Perry Rapp gedlib/lloptions.c hdrs/standard.h tools/dbverify.c: [dbverify] Implemented bad pointer check. 2001-02-17 Perry Rapp * gedlib/gstrings.c gedlib/indiseq.c gedlib/messages.c gedlib/names.c gedlib/translat.c hdrs/standard.h hdrs/translat.h liflines/main.c stdlib/mystring.c: Added translation to other_to_list_string (translate_catn). Added new function translate_catn. Fixed add_char to not write past end of buffer. More function (comment) annotation. Moved some strings from gstrings.c into messages.c. Added typedef CNSTRING for const char *. Alphabetized translat.h. * gedlib/gstrings.c gedlib/messages.c: Added fam_to_list_string. 2001-02-11 Perry Rapp * gedlib/choose.c gedlib/gstrings.c gedlib/indiseq.c gedlib/keytonod.c gedlib/messages.c hdrs/gedcom.h hdrs/indiseq.h hdrs/menuitem.h hdrs/screen.h liflines/browse.c liflines/llinesi.h liflines/menuitem.c liflines/pedigree.c liflines/screen.c liflines/show.c: Added expanded gedcom mode. Added cross-reference to notes. 2001-02-10 Perry Rapp * gedlib/node.c: bugfix for creating new NOD0s. * hdrs/menuitem.h: Added comment/suggestion for MenuItem. 2001-02-09 Matt Emmerton Code clean-up (make stuff static, fix void declarations, etc). 2001-02-08 Perry Rapp * gedlib/lloptions.c: Bugfix for LLPROGRAMS & LLREPORTS. Fix to compile on win32/msvc (_snprintf). 2001-02-07 Marc Nozell * hdrs/Makefile.am: Fixed distribution build. A number of new hdr/*.h files weren't in Makefile.am. 2001-02-07 Perry Rapp * gedlib/lloptions.c: Change use of itoa to sprintf. 2001-02-05 Perry Rapp * NEWS README gedlib/messages.c hdrs/gedcom.h hdrs/menuitem.h hdrs/screen.h liflines/browse.c liflines/llinesi.h liflines/menuitem.c liflines/pedigree.c liflines/screen.c liflines/show.c liflines/tandem.c: Integrate twoindi browse (tandem) to new menu system. * gedlib/messages.c hdrs/menuitem.h hdrs/screen.h liflines/browse.c liflines/llinesi.h liflines/menuitem.c liflines/screen.c liflines/show.c liflines/tandem.c: Integrate twofam browse (tandem) to new menu system. 2001-02-04 Perry Rapp * ChangeLog gedlib/messages.c hdrs/menuitem.h hdrs/screen.h liflines/browse.c liflines/llinesi.h liflines/menuitem.c liflines/miscutls.c liflines/screen.c liflines/show.c: Pulled add_spouse_to_family code out of browse_fam. Change browse_fam to use new menuitem commands. Fix more minor bugs in menu paging layout. Delete obsolete version of mprintf. Delete unused remnants of pedigree code. Moved prototypes of extern miscutls.c functions into llinesi.h. Fix some mistranslated tandem commands. * gedlib/gengedc.c gedlib/init.c gedlib/keytonod.c gedlib/messages.c gedlib/node.c gedlib/refns.c gedlib/xreffile.c hdrs/cache.h hdrs/gedcom.h hdrs/liflines.h hdrs/llstdlib.h hdrs/standard.h hdrs/warehouse.h interp/builtin.c interp/interp.c interp/rassa.c liflines/add.c liflines/askprogram.c liflines/browse.c liflines/export.c liflines/import.c liflines/llinesi.h liflines/main.c liflines/screen.c liflines/valgdcom.c stdlib/environ.c stdlib/warehouse.c tools/dbverify.c NEW: gedlib/lloptions.c hdrs/lloptions.h hdrs/metadata.h stdlib/lldate.c: Clarified lineno global names (lineno->flineno,tlineno->travlineno). Changed add_indi_by_edit, add_unlinked_indi to get nod0. Added options (lloptions.*). Revised llprograms, etc to be in options. Split init_lifelines into before & after opendb halves. * gedlib/Makefile.am interp/Makefile.am liflines/Makefile.am stdlib/Makefile.am: Makefile changes for new files Added dependencies for askprogram.c & property.c * .linesrc: Added sample config file for LifeLines. 2001-02-03 Perry Rapp * hdrs/screen.h liflines/browse.c liflines/menuitem.c liflines/screen.c stdlib/signals.c: Bugfixes: direct-to-child navigation, & pedigree mode. * gedlib/messages.c hdrs/screen.h liflines/browse.c liflines/screen.c stdlib/signals.c: Fix array overflow removing spouse from family with 3+ spouses (new remove_spouse_from_family, handles up to 30, and truncates list to 30, with message). Changed remove child from family to always remove from current family on-screen. Combine indi_browse, indi_ged_browse, and ped_browse. Combine fam_browse and fam_ged_browse. 2001-02-01 Perry Rapp * gedlib/messages.c hdrs/menuitem.h hdrs/screen.h liflines/browse.c liflines/llinesi.h liflines/menuitem.c liflines/screen.c liflines/show.c stdlib/signals.c: New menuing system in auxiliary menu. Display invalid command when appropriate. Bugfix on #pages in menu. 2001-02-01 Perry Rapp * liflines/pedigree.c: Fix ancestor/descendant tree leaks found by Petter Reinholdtsen. Added comment note on possible optimization to show_ancestors. * gedlib/messages.c hdrs/menuitem.h hdrs/screen.h liflines/browse.c liflines/llinesi.h liflines/main.c liflines/menuitem.c liflines/pedigree.c liflines/screen.c liflines/show.c stdlib/signals.c: New interact which works from menuitems and handles multicharacter. 2001-01-31 Perry Rapp * liflines/browse.c liflines/llinesi.h liflines/menuitem.c liflines/pedigree.c liflines/screen.c liflines/show.c: Implemented extended menu system for family screen. 2001-01-30 Perry Rapp * gedlib/gengedc.c gedlib/keytonod.c gedlib/messages.c gedlib/names.c gedlib/node.c gedlib/refns.c hdrs/gedcom.h interp/alloc.c interp/interp.c liflines/browse.c liflines/menuitem.c liflines/pedigree.c: Minor documentation. Moved some messages from node.c into messages.c. 2001-01-28 Perry Rapp * hdrs/screen.h liflines/browse.c liflines/llinesi.h liflines/screen.c NEW: hdrs/menuitem.h liflines/menuitem.c: New paging & resizable menu system. liflines/Makefile.am: Added menuitem.c. 2001-01-27 Marc Nozell * stdlib/Makefile.am: Fix UNIX build. 2001-01-27 Perry Rapp * NEWS README.LAYOUT hdrs/screen.h liflines/browse.c liflines/llinesi.h liflines/pedigree.c liflines/screen.c liflines/show.c: Added gedcom (view) mode to indi & fam. Alphabetized screen.h. Removed old (unused) pedigree code. liflines/pedigree.c: Annotate functions header comments. * gedlib/keytonod.c gedlib/messages.c gedlib/misc.c gedlib/xreffile.c hdrs/gedcom.h liflines/browse.c liflines/llinesi.h liflines/pedigree.c liflines/screen.c liflines/show.c: Implemented browse sources, etc. 2001-01-24 Perry Rapp * ChangeLog btree/utils.c gedlib/intrface.c gedlib/keytonod.c gedlib/names.c gedlib/node.c gedlib/valid.c hdrs/gedcom.h hdrs/standard.h liflines/main.c stdlib/path.c stdlib/signals.c NEW: hdrs/warehouse.h stdlib/warehouse.c: Directory separator bugfixes. LLNEWDBDIR bugfix (from Ethel bug on creating new db). New NAMESEP macro (to differentiate it from directory sep). Checked-in current warehouse code. Back out accidentally checked-in code disabling signals. * stdlib/dirs.c: Propagate bugfix from btree/utils.c/mkalldirs to stdlib/dirs.c/mkalldirs. * stdlib/Makefile.am: Added warehouse.c to Makefile. 2001-01-24 John Chandler * hdrs/gedcom.h, gedlib/gengedc.c, gedlib/name.c, gedlib/node.c, gedlib/refns.c: Change MAXNAMELEN to MAXGEDNAMELEN to avoid conflict with system symbol. * interp/interp.c: Avoid fatal error when report program not found. * interp/more.c: Revert to pre-3.0.3 behavior for extracttokens(), i.e., the list is cleared before the tokens are added to it. * interp/pvalue.c: Treat as error any undeclared variable used in a context that must be a list, table, or indiset. 2001-01-24 Perry Rapp * btree/block.c btree/index.c btree/opnbtree.c btree/utils.c hdrs/btree.h liflines/main.c: Changed keyfile types to 1 & 2. Check for overwriting existing database (from Ethel permission bug on NTFS). 2001-01-23 Matt Emmerton * liflines/screen.c: Fix screen refresh bug in choose_from_list() reported by Robert Simms on LINES_L. Also fixed same bug in choose_list_from_indiseq(). Cleaned up similar code in choose_one_from_indiseq(). 2001-01-21 Perry Rapp * gedlib/keytonod.c hdrs/cache.h tools/dbverify.c: Check lineage links in dbverify. * hdrs/arch.h liflines/askprogram.c stdlib/memalloc.c: #define snprintf to _snprintf for Win32/MSVC. 2001-01-21 Petter Reinholdtsen * configure.in arch/snprintf.c gedlib/property.c liflines/askprogram.c: Implement simple replacement snprintf() function. 2001-01-20 Perry Rapp * ChangeLog gedlib/gengedc.c gedlib/indiseq.c gedlib/names.c hdrs/indiseq.h hdrs/interp.h hdrs/llstdlib.h hdrs/standard.h hdrs/table.h interp/alloc.c interp/builtin.c interp/interp.c interp/intrpseq.c interp/pvalue.c liflines/ask.c liflines/main.c liflines/screen.c stdlib/double.c stdlib/environ.c stdlib/memalloc.c stdlib/mystring.c stdlib/signals.c stdlib/table.c: Reduce memory leaks during reports. 2 custom block allocators & cleaners (pvalues & pnodes). 2001-01-19 John Chandler * reports/longlines.ll New version with option to find the longest line(s) through a specific person. * hdrs/standard.h Removed BOOLEAN casts on TRUE and FALSE. These were causing compilations to fail. * gedlib/property.c Use sprintf as fallback replacement for another instance of snprintf. 2001-01-15 Perry Rapp * tools/dbverify.c: dbverify bugfix & began fam check for child. 2001-01-14 Perry Rapp * gedlib/gengedc.c liflines/pedigree.c liflines/scan.c stdlib/environ.c tools/dbverify.c: Added prototypes for static functions at top of files. Added block headers at top of files (enums, variables, prototypes,..). * ChangeLog btree/traverse.c gedlib/intrface.c gedlib/names.c gedlib/node.c gedlib/refns.c gedlib/valid.c gedlib/xreffile.c hdrs/gedcom.h hdrs/liflines.h liflines/main.c liflines/valgdcom.c tools/btedit.c tools/dbverify.c: Began I,F,S,E,X checks in dbverify. Moved pointer_value into gedlib/valid.c. Some top of module commenting. 2001-01-13 Perry Rapp * gedlib/gengedc.c gedlib/names.c gedlib/refns.c hdrs/gedcom.h liflines/browse.c liflines/lbrowse.c liflines/scan.c tools/dbverify.c: dbverify: added check dup or non-indi names, dup refns. * gedlib/Makefile.am gedlib/init.c gedlib/messages.c gedlib/node.c hdrs/gedcom.h interp/more.c liflines/Makefile.am liflines/export.c liflines/main.c liflines/scan.c liflines/screen.c stdlib/Makefile.am NEW: hdrs/fpattern.h stdlib/fpattern.c: Put version number in its own header. Add fpattern pattern-matching for scan. Changed scan to stay in scan until match selected or user quits. 2001-01-11 Perry Rapp * hdrs/indiseq.h liflines/ask.c liflines/llinesi.h liflines/pedigree.c liflines/screen.c liflines/show.c: Code to examine details of selected item in list. * hdrs/screen.h liflines/ask.c liflines/lbrowse.c liflines/screen.c: Moved ask_yes_or_no(_msg) from ask.c into screen.c. Modified args to list_browse for GUI. Added expand_special_chars in ask.c. 2001-01-10 Perry Rapp * hdrs/gedcom.h hdrs/liflines.h liflines/add.c: Moved some add.c function declarations from gedcom.h to liflines.h. 2001-01-10 Petter Reinholdtsen * Makefile.am: New target 'sort-cvsignore' to keep the .cvsignore files sorted. 2001-01-09 Perry Rapp * gedlib/gengedc.c gedlib/indiseq.c gedlib/names.c gedlib/property.c hdrs/indiseq.h hdrs/interp.h hdrs/llstdlib.h hdrs/standard.h hdrs/table.h interp/alloc.c interp/builtin.c interp/date.c interp/eval.c interp/heapused.c interp/interp.c interp/intrpseq.c interp/more.c interp/pvalue.c interp/rassa.c interp/write.c interp/yacc.y liflines/ask.c liflines/valgdcom.c stdlib/double.c stdlib/table.c tools/dbverify.c: Changed WORD to VPTR. Defaulted getproperty to work with non-UNIX platforms. * tests/test1.ged: Fix misleading typo in test1.ged. * gedlib/choose.c hdrs/gedcom.h hdrs/liflines.h interp/builtin.c interp/more.c liflines/add.c liflines/ask.c liflines/browse.c liflines/delete.c liflines/edit.c liflines/llinesi.h liflines/miscutls.c liflines/newrecs.c liflines/remove.c liflines/scan.c liflines/swap.c liflines/tandem.c: Implement ASK1Q typedef for ask1 & values DOASK1/NOASK1. * hdrs/gedcom.h hdrs/liflines.h: Fixed alphabetization in gedcom.h. Moved CONFIRM type & values to gedcom.h. 2001-01-07 Perry Rapp * gedlib/gengedc.c gedlib/indiseq.c hdrs/gedcom.h hdrs/indiseq.h interp/intrpseq.c liflines/lbrowse.c liflines/scan.c: Stored value type in indiseqs. * gedlib/messages.c gedlib/misc.c hdrs/gedcom.h hdrs/liflines.h liflines/ask.c liflines/browse.c liflines/delete.c liflines/llinesi.h liflines/remove.c liflines/screen.c: Add delete family to delete menu. Split up remove_spouse & remove_child into interactive & silent parts. Rename nod0_to_keynum -> node_to_keynum. 2001-01-07 Petter Reinholdtsen * tools/dbverify.c: Fix typo. 2001-01-07 Marc Nozell * .cvsignore: added yacc.h, a generated file 2001-01-07 Marc Nozell * tools/dbverify.c, liflines/main.c: Fix UNIX build. 2001-01-06 Perry Rapp * gedlib/messages.c hdrs/win32/curses.h liflines/main.c liflines/screen.c win32/mycurses.c: Added selftest (-y) mode. Added platform_init in main.c for titlebar. Added wtitle to win32 curses for titlebar. * gedlib/init.c liflines/ask.c NEW: tests/dotests.sh tests/runtest1.sh tests/test1.ged: tests/test1.ll tests/test1.out Suppress llprograms & llreports in selftest. Added tests & test1. * btree/traverse.c gedlib/choose.c gedlib/keytonod.c hdrs/gedcom.h hdrs/liflines.h interp/more.c liflines/ask.c liflines/browse.c liflines/llinesi.h liflines/newrecs.c liflines/scan.c liflines/screen.c: Make choose_from_indiseq return NOD0. Implement most of goto from refn_scan. Add placeholder browse_source,browse_event,browse_other. * gedlib/keytonod.c gedlib/node.c gedlib/refns.c gedlib/xreffile.c hdrs/gedcom.h liflines/advedit.c liflines/browse.c liflines/llinesi.h liflines/main.c liflines/newrecs.c liflines/screen.c liflines/show.c: More NODE->NODE0s. Fix bubble-sort in xreffile to be O(n) when sorted. * stdlib/signals.c: fix __fatal/ll_abort bug. * gedlib/xreffile.c liflines/import.c liflines/valgdcom.c Implement DELETESETs in xreffile.c and sort down instead of up. * gedlib/keytonod.c gedlib/refns.c gedlib/xreffile.c hdrs/gedcom.h liflines/advedit.c liflines/newrecs.c: Bugfix for isvalid in xreffile.c. Make nztop a function to handle NULLs. 2001-01-05 Perry Rapp * gedlib/init.c hdrs/llstdlib.h stdlib/environ.c tools/btedit.c: New LLNEWDBs environ var to control placement of new databases. Revised environ_determine_editor to default to vi under win32 for btedit. * hdrs/llstdlib.h liflines/main.c stdlib/environ.c stdlib/path.c: Finish newdbdir stuff (& newdbs -> newdbdir name change). * btree/utils.c gedlib/gengedc.c gedlib/indiseq.c hdrs/indiseq.h interp/alloc.c interp/builtin.c interp/lex.c liflines/edit.c liflines/merge.c win32/getopt.c: Split up append_indiseq calls by value type. Initialized some local variables to make compiler happy. * gedlib/misc.c gedlib/node.c hdrs/gedcom.h stdlib/path.c More comments, and a little more win32 code isolation in path.c. * liflines/main.c: Delay use of llnewdbdir in readpath so current directory is still checked. * btree/utils.c gedlib/gengedc.c gedlib/indiseq.c hdrs/indiseq.h: Sort gengedc into canonical key order. 2001-01-04 Marc Nozell * configure.in: Fix UNIX build, Add check for pwd.h. 2001-01-04 Perry Rapp * btree/addkey.c btree/block.c btree/index.c btree/opnbtree.c btree/record.c btree/traverse.c btree/utils.c hdrs/btree.h liflines/export.c: change index/blocks to be ix_type etc and macros ixtype etc to disambiguate from indiseq's itype rename a variable * gedlib/xreffile.c: Bugfix (heap corruption). * stdlib/path.c: Isolate win32 dependencies into separate functions. 2001-01-03 Perry Rapp * gedlib/property.c liflines/askprogram.c tools/dbverify.c: Hack property.c to compile on Win32. Leakfix in askprogram. 2001-01-03 Marc Nozell * tools/wprintf.c, interp/lex.c, stdlib/assert.c, stdlib/signals.c, liflines/screen.c, liflines/export.c, liflines/browse.c, gedlib/xreffile.c, hdrs/gedcom.h, liflines/askprogram.c, stdlib/llstrcmp.c, cleanup compiler prototype warnings. * tools/wprintf.c, liflines/add.c, gedlib/node.c, gedlib/nodeutls.c: #ifdef'd UNUSED_CODE * gedlib/translat.c: #ifdef'd DEBUG debug code 2001-01-02 Marc Nozell * hdrs/gedcom.h, gedlib/node.c: More compiler prototype warning cleanups, #ifdef'd UNUSED_CODE 2001-01-01 Petter Reinholdtsen * interp/more.c interp/intrpseq.c interp/write.c interp/heapused.c: Include "interpi.h" to check if functions match their prototype. (__lastfam) Correct return type to match prototype. (create_value_pvalue) Make function static, as it is only used in one file. 2001-01-02 Marc Nozell * stdlib/Makefile.am: Added stdlibi.h * btree/Makefile.am: Added btreei.h * liflines/Makefile.am: Added llinesi.h * interp/Makefile.am: added interpi.h * hdrs/Makefile.am: Added gengedc.h * gedlib/Makefile.am: Added gedcomi.h * hdrs/Makefile.am: Removed interpi.h (its in interp/) 2001-01-02 Marc Nozell * liflines/valgdcom.c: Add another prototype, include llinesi.h. * liflines/miscutls.c: Add more prototypes. * gedlib/keytonod.c: Add function prototypes for key_to_*_cacheel. * gedlib/gengedc.c (closure_add_node): no longer used. * btree/utils.c: Changed 'static unsigned char' to 'static char' in fkey2path and rkey2str. * hdrs/btree.h: Cleanup itype duplicate define. 2001-01-01 Petter Reinholdtsen * hdrs/interpi.h interp/interpi.h: Move private header file into library subdir. * configure.in docs/lifelines.sgml gedlib/Makefile.am gedlib/property.c hdrs/gedcom.h hdrs/interpi.h interp/functab.c interp/more.c: Implement new report function getproperty() to make the user options available in report programs. * btree/utils.c: Change mkalldirs() param from 'char *' to 'STRING' to match the prototype in "llstdlib.h". * interp/date.c: Make 'struct monthstrs[]' static, as it is only used in this file. * hdrs/screen.h hdrs/standard.h: Make sure TRUE and FALSE constants are of type BOOLEAN. This removed some warnings when running lclint. * docs/lifelines.sgml: Add option 'p' to the main menu screenshot. 2001-01-01 Perry Rapp * gedlib/indiseq.c gedlib/keytonod.c hdrs/gedcom.h hdrs/indiseq.h interp/intrpseq.c liflines/llinesi.h liflines/screen.c liflines/show.c: Move create_pvalue out of indiseq.c. (For dbverify.) Move mprintf_info out of keytonod.c. (For dbverify.) * btree/opnbtree.c hdrs/arch.h: Temporary hack because S_ISDIR is lacking on MSVC/Windows. * gedlib/gstrings.c hdrs/gedcom.h: liflines/ask.c liflines/main.c Changed gstrings.c to not require global showkeys. (For dbverify.) * hdrs/gedcom.h liflines/newrecs.c: Pulled write node code out of edit record into new function write_node_to_editfile (for Ethel). * gedlib/indiseq.c gedlib/keytonod.c hdrs/indiseq.h hdrs/interpi.h hdrs/screen.h hdrs/table.h interp/functab.c interp/intrpseq.c stdlib/table.c NEW: gedlib/gengedc.c hdrs/gengedc.h: gen_gedcom rewrite (gengedcomweak & strong & original) (includes new table functions). * btree/traverse.c gedlib/intrface.c gedlib/messages.c gedlib/names.c gedlib/refns.c gedlib/xreffile.c hdrs/arch.h hdrs/btree.h hdrs/gedcom.h hdrs/sys_inc.h interp/more.c interp/rassa.c liflines/delete.c liflines/llinesi.h liflines/main.c liflines/scan.c liflines/screen.c tools/btedit.c win32/mycurses.c: Add refn traversal & refn scan (& refn checking in dbverify). Move del_in_dbase from liflines to gedlib (interface.c). Added to sys_inc.h for MSVC/Windows. NEW: tools/dbverify file. 2000-12-31 Perry Rapp * btree/opnbtree.c gedlib/indiseq.c gedlib/keytonod.c hdrs/cache.h hdrs/gedcom.h interp/builtin.c liflines/browse.c: Change to use qkey for functions that handle possibly bad keys (ie, report mode), instead of the ambiguous rkey notation. 2000-12-31 Marc Nozell * interp/Makefile.am: Return special CFLAGS settings, as -O2 on pvalue.c still triggers a compiler bug in gcc version 2.95.2 19991024 (release) which is shipped with at least Linux/SuSE V6.4. 2000-12-31 Petter Reinholdtsen * acinclude.m4 configure.in: Add more warning flags (-pedantic -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wreturn-type -Wcast-align), to detect more errors and portability problems in the code. * btree/opnbtree.c liflines/main.c: Use POSIX S_ISREG() and S_ISDIR() macros instead of S_IFREG and S_IFDIR flags to test result from stat(). Required to get this to compile with -ansi on RedHat Linux 6.2. * interp/Makefile.am: Remove special CFLAGS setting, as using -O2 on pvalue.c no longer trigger compiler bug. Tested using gcc 2.95. 2000-12-31 Perry Rapp * liflines/screen.c: Removed some unnecessary local prototypes. * hdrs/indiseq.h liflines/llinesi.h liflines/newrecs.c: Sorted indiseq.h functions & removed dups. Changed add_to_record to extern. * gedlib/indiseq.c gedlib/messages.c hdrs/indiseq.h liflines/newrecs.c: Make ask_for_record handle dup REFNs. * gedlib/choose.c gedlib/indiseq.c gedlib/xreffile.c hdrs/indiseq.h hdrs/liflines.h hdrs/screen.h interp/more.c liflines/ask.c liflines/browse.c liflines/newrecs.c liflines/scan.c liflines/screen.c: Coded print subtypes into indiseq (new is_prntype). Reworked print format lines of indiseq to be dynamic for long indiseqs. Renamed format_and_choose_???? to choose_from_indiseq. More combining code in xreffile.c. * hdrs/interp.h hdrs/liflines.h interp/interp.c liflines/askprogram.c liflines/screen.c: Split report menu choice into two, for backward compatibility. 2000-12-30 Petter Reinholdtsen * configure.in: New option --with-profiling to generate runtime profile information when compiling using GNU cc. * arch/_llnull.c: Make dummy function static to avoid exporting unused symbol _llnull. Fix typo in comment. * interp/yacc.c interp/yacc.h: Generated from yacc.y using GNU bison 1.28. * hdrs/interp.h: Correct prototype for type PFUNC. * Changelog.usermap: Correct username prapp -> puddle to match the CVS repository username. Sorted list. 2000-12-30 Perry Rapp * gedlib/translat.c interp/builtin.c: Changed a variable name for more convenient greps. * ChangeLog gedlib/keytonod.c gedlib/node.c gedlib/xreffile.c hdrs/cache.h hdrs/gedcom.h hdrs/interpi.h interp/functab.c interp/interp.c interp/more.c interp/yacc.h: Combined some xref code, and added firsti, lasti etc. Sorted xref lists (when read, and then kept them sorted in memory). Combined code into get_indi_pvalue_from_keynum. Implemented __lastindi & __lastfam. Fixed firstindi, nextindi.., firstfam,nextfam,... Added NOD0 type to cacheel to hold info on the entire record (indi...). * docs/lifelines.sgml: Updated documentation a bit. 2000-12-29 Perry Rapp * gedlib/indiseq.c gedlib/names.c hdrs/btree.h hdrs/gedcom.h hdrs/indiseq.h liflines/browse.c: Fixed some () to (void). 2000-12-27 Petter Reinholdtsen * tools/btedit.c: Track changes to environ_figure_editor() to environ_determine_editor(). 2000-12-24 Perry Rapp * gedlib/gstrings.c gedlib/init.c gedlib/names.c gedlib/refns.c hdrs/gedcom.h hdrs/llstdlib.h hdrs/screen.h hdrs/standard.h interp/builtin.c interp/pvalue.c liflines/main.c liflines/screen.c stdlib/assert.c stdlib/environ.c stdlib/path.c win32/mycurses.c: Moved getasurname from builtin.c to names.c. Misc. cleanup to get rid of compiler warnings. Revised init_screen to return instead of exiting. * liflines/browse.c liflines/screen.c: Change browse_indi & fam to lock cache during display. Increment PED_LINES for larger screens (just like PER_LINES, etc). * liflines/pedigree.c: Fixed a fencepost error. 2000-12-23 Perry Rapp * gedlib/init.c liflines/browse.c liflines/pedigree.c liflines/screen.c: Fixed to compile on MSVC/Windows (which lacks PATH_MAX and doesn't handle #ifdef 0). * ChangeLog: Fixed my email address. * gedlib/init.c hdrs/llstdlib.h stdlib/Makefile.am: Moved figure_editor & figure_tempfile into stdlib for btedit. * btree/record.c: Don't return deleted records from getrecord. * tools/btedit.c: Make btedit call environ_figure_editor. Add ifdef so fmode assignment compiles on MSVC/Windows. 2000-12-21 * liflines/browse.c, liflines/pedigree.c, gedlib/choose.c, hdrs/gedcom.h: Cleanup compiler warning. 2000-12-17 Perry Rapp * ChangeLog liflines/browse.c liflines/llinesi.h liflines/pedigree.c liflines/show.c liflines/tandem.c: Revised some function definitions as per prevailing style. Renamed scroll variables to reduce confusion. Reset scroll every time entering a new person/family. * liflines/browse.c liflines/show.c: Fix cache overflow bug in browse_indi, browse_fam. Combined browse_ped into browse_indi. * gedlib/keytonod.c: (Mistaken change & backed it out - accidentally checked in cache size reduction to 20 for testing.) 2000-12-12 Perry Rapp * gedlib/messages.c liflines/scan.c stdlib/stdstrng.c: Revised name scan to do simple wildcards (. and trailing *) and use lifelines case-insensitive code (which handles the Finnish option). * liflines/merge.c: Fix ghostnames bug in merge.c. * gedlib/names.c: Fix a bug I accidentally introduced into names.c in 1.8. 2000-12-11 Marc Nozell * liflines/scan.c: Fix broken build. strcmpi (Windows) vs strcasecmp (Posix) 2000-12-10 Perry Rapp * btree/record.c btree/traverse.c gedlib/intrface.c gedlib/messages.c gedlib/names.c hdrs/btree.h hdrs/gedcom.h hdrs/screen.h interp/interp.c liflines/add.c liflines/export.c liflines/llinesi.h liflines/main.c liflines/screen.c NEW: liflines/scan.c: Added name scan (search all names in database against a pattern - only exact match against any word of name for now). 2000-12-09 Perry Rapp * gedlib/node.c hdrs/gedcom.h liflines/screen.c: rename num_spouses to num_spouses_of_indi include arch from screen.c (because it calls sleep) 2000-12-07 Perry Rapp * hdrs/gedcom.h liflines/browse.c liflines/llinesi.h: Moved init_show_module declaration, and added '$' (xref sources) to browse_pedigree. 2000-12-06 Perry Rapp * btree/opnbtree.c gedlib/init.c hdrs/btree.h liflines/main.c liflines/pedigree.c liflines/show.c stdlib/mystring.c: added magic string, alignment, & version number to key file moved static tempfile buffers into only function using them moved init call into init_lifelines some fixes to pedigree Fixed minor bug in llstrcat and added function comment 2000-12-07 David A. Bright * reports/tree.tex: Added file (support file for book-latex.ll 2000-12-07 Marc Nozell * liflines/main.c: Call init_show_module to init some string buffers. * liflines/Makefile.am: Fix build. Still dies when browsing to a person. 2000-12-06 Perry Rapp * hdrs/gedcom.h liflines/Makefile.am liflines/browse.c liflines/llinesi.h liflines/screen.c liflines/show.c: added scrolling children (in INDI & FAM) new scrolling pedigree with ancestors & descendants mode and expandable generation depth (added new liflines/pedigree.c) dynamically sized buffers in show.c (eg, Spers) to use full terminal width Change extra_menu so the new browse functions return to extra_menu when done Added more text to annotation of source tree in README.DEVELOPERS. 2000-12-05 Perry Rapp * gedlib/misc.c gedlib/refns.c hdrs/gedcom.h: Fixed bug resolving REFNs. I introduced this when I tightened up error checking in rmvat, not realizing it was also used for REFN references. I added a new rmvbrackets to resolve this. 2000-12-03 Perry Rapp * hdrs/win32/curses.h interp/pvalue.c liflines/main.c liflines/screen.c win32/mycurses.c: Modified win32 mycurses to work with different width terminals. Modified screen.c & show.c & main.c to allow user chosen width (new -u argument). 2000-12-02 Perry Rapp * gedlib/spltjoin.c hdrs/gedcom.h liflines/edit.c: Split writing node to file into separate functions in edit indi & fam. Removed spurious join_fam in read-only fam case (which crashed it). 2000-11-30 Perry Rapp * gedlib/refns.c: Changed some indents that didn't conform to surrounding style. * hdrs/btree.h hdrs/llinesi.h liflines/browse.c liflines/screen.c liflines/show.c: Added direct to child navigation via digits, and optional child numeric prefixes. * gedlib/gstrings.c: Prevent obscure buffer overflow possibility. 2000-11-29 Marc Nozell * reports/alive.ll: Fix typo. 2000-11-29 Perry Rapp * gedlib/choose.c gedlib/gstrings.c gedlib/indiseq.c gedlib/keytonod.c gedlib/node.c hdrs/btree.h hdrs/gedcom.h hdrs/indiseq.h hdrs/liflines.h hdrs/mystring.h liflines/ask.c liflines/browse.c liflines/screen.c liflines/tandem.c stdlib/mystring.c: Added handling for generic sequences (mixed contents). Added browse source, event, other lists (from extra menu). Added $ cross-reference to sources. (New functions include node_to_sources, browse_sources.) 2000-11-28 Perry Rapp * gedlib/gstrings.c: Fixed some space indents * gedlib/choose.c gedlib/indiseq.c hdrs/indiseq.h hdrs/liflines.h interp/more.c liflines/ask.c: Unfolded format_indiseq into format_indiseq, format_famseq, and format_spouseseq. Split format_and_choose_indiseq into format_and_choose_indiseq, format_and_choose_famseq, and format_and_choose_spouseseq. Dropped now obsolete fams & marr arguments from all. 2000-11-28 Perry Rapp * gedlib/misc.c hdrs/gedcom.h hdrs/liflines.h interp/builtin.c liflines/add.c liflines/ask.c liflines/browse.c liflines/delete.c liflines/edit.c liflines/llinesi.h liflines/miscutls.c liflines/remove.c liflines/swap.c: Fixed xrefval (I originally checked in wrong version). Changed second arg of ask_indi & ask_indi_key to CONFIRMQ typedef and added DOCONFIRM/NOCONFIRM values. 2000-11-28 Marc Nozell * Added @progname, @version, @author, @output info to all reports. * liflines/askprogram.c: Extend Petter's report script menu work -- @version is now used. 2000-11-28 Marc Nozell * gedlib/misc.c: Fixed call to xrefval (wrong number of args) * hdrs/gedcom.h: Fixed nod0_to_keynum prototype 2000-11-28 Perry Rapp * Reformatted all my ChangeLog entries to match others. * gedlib/indiseq.c gedlib/keytonod.c gedlib/misc.c hdrs/gedcom.h liflines/browse.c: Moved rkeynum functions out of browse & into keytonod, and made extern. Added keynum versions (non reportmode). Added xrefval to misc.c to implement indi_to_keynum etc. 2000-11-22 Marc Nozell * Update all Makefile.am files to automatically generate dependencies. Header files have been moving around and increasing in number, so this seem reasonable to do now. 2000-11-21 Marc Nozell * Fix a misleading typos in ChangeLog in 2000-11-09 entry. 2000-11-21 Marc Nozell * gedlib/init.c: move unix_tempfile and win32_tempfile declaration out of figure_tempfile into global. Function was referencing variables already popped off the stack. 2000-11-20 Perry Rapp * interp/lex.c: Renamed unchar to unreadchar, to avoid clash with linux etc headers. 2000-11-20 Perry Rapp * liflines/askprogram.c stdlib/double.c: stdlib/signals.c Handle nulls in get_list_element & set. Fix bug in my recent additions to askprogram.c. (Accidentally checked in signals.c with signals disabled, and backed it back out.) 2000-11-20 Perry Rapp * gedlib/xreffile.c: Set xreffp to zero after closing (minor safety device to help debug any future errors). 2000-11-19 Perry Rapp * interp/builtin.c interp/pvalue.c stdlib/memalloc.c: Changed variable "log" to "logfp" in memalloc.c (to resolve clash with a system header). Minor formatting cleanup. 2000-11-19 Perry Rapp * gedlib/messages.c hdrs/gedcom.h interp/rassa.c liflines/export.c liflines/screen.c liflines/show.c: Minor cleanup (typos & added some ifdef UNUSED) 2000-11-19 Perry Rapp * liflines/ask.c liflines/askprogram.c liflines/main.c liflines/export.c liflines/import.c liflines/screen.c interp/rassa.c hdrs/liflines.h hdrs/screen.h: Semantic breakout of ask_for_file, and new function ask_for_lldb. win32/mycurses.c hdrs/win32/curses.h: renamed MAXCOLS to CUR_MAXCOLS (and same for MAXLINES) to avoid clash with rassa.c's MAXCOLS. 2000-11-19 Perry Rapp * interp/date.c: Moved 20+ lines of commentary out of line of the function declaration, so that the function declaration is legible. 2000-11-19 Perry Rapp * gedlib/messages.c liflines/askprogram.c: Added choice to type in program. Fixed to prompt for program if no files found. 2000-11-19 Perry Rapp * interp/interp.c liflines/askprogram.c: Fixed bug in askprogram. It was saying File "" not found if the user pressed Q to cancel the report menu. 2000-11-18 Perry Rapp * Added win32/hdrs/README 2000-11-18 Perry Rapp * gedlib/keytonod.c gedlib/messages.c gedlib/xreffile.c hdrs/gedcom.h liflines/browse.c liflines/screen.c: Added some next & prev functions for keys & is_valid (xreffile.c) Added db sequential browsing ('+' and '-') to browse_indi, browse_fam, and browse_pedigree. Added supporting functions rkeynum_to_indi (browse.c), rkey_to_indi etc (keytonod.c). 2000-11-18 Perry Rapp * hdrs/gedcom.h liflines/add.c: Split up functions in add.c, breaking out non-interactive portions for use by the new GUI code under development. 2000-11-18 Perry Rapp * Changed mprintf to mprintf_error, mprintf_info, mprintf_status. gedlib/editmap.c gedlib/keytonod.c hdrs/screen.h interp/interp.c interp/rassa.c liflines/add.c liflines/ask.c liflines/edit.c liflines/export.c liflines/import.c liflines/lbrowse.c liflines/main.c liflines/miscutils.c liflines/newrecs.c liflines/screen.c 2000-11-16 Perry Rapp * Fixed a couple typos, and annotated the ghost names bug (in liflines/merge.c). 2000-11-16 Marc Nozell * gedlib/init.c: fix syntax error 2000-11-15 Perry Rapp * btree/traverse.c gedlib/editvtab.c hdrs/btree.h hdrs/gedcom.h hdrs/llstdlib.h hdrs/screen.h interp/more.c interp/yacc.y liflines/import.c stdlib/double.c win32/mycurses.c: Stricter type consistency. * arch/alphasort.c liflines/askprogram.c: Fixed WIN32 compile problems. * gedlib/init.c: Split out calculation of temp directory & editor into separate functions, & fixed WIN32 versions. 2000-11-11 Petter Reinholdtsen * reports/alive.ll: Get this report working. Fixed type problems and handle empty place tags without crashing. Add meta information. * arch/scandir.c hdrs/arch.h hdrs/indiseq.h interp/builtin.c liflines/askprogram.c liflines/newrecs.c: Fix some typos and types as reported by Perry Rapp. * reports/book-latex.ll: Bugfix. Include index even when there is no bibliography. Use ISO 8859/1 charset in LaTeX. Add meta- information in header. 2000-11-10 David Bright * reports/book-latex.ll: Added processing for BAPM tag, corrected error in referencing "spouse" rather than "s" in longvitals, added processing for the TYPE tag (modifier for EVENT), corrected setDayNumber so that it only uses text phrases (e.g., "on the same day") when both previous date and current date are fully specified, preserve line breaks represented by blank CONT/CONC tags, ensure "cn" variable in sourceIt is initialized before referenced, and miscellaneous typographical corrections. 2000-11-10 David Bright * reports/book-latex.ll: Added this report program, most recently maintained by Dennis Nicklaus. He gave me permission to add it to this repository. Some changes are necessary to allow it to run with the latest version of LifeLines. 2000-11-11 Petter Reinholdtsen * interp/functab.c: Add comment on the need to keep the list sorted alphabetically. Fixes bug #121686. * configure.in arch/README arch/alphasort.c arch/scandir.c hdrs/arch.h: Add replacement functions used by the report script menu to make this work on Win32 as well. * hdrs/liflines.h interp/interp.c liflines/askprogram.c liflines/Makefile.am: Implement report script menu (list all available scripts). * hdrs/Makefile.am liflines/Makefile.am stdlib/Makefile.am: Add llstdlib.h, llinesi.h and stdlibi.h to distribution. * hdrs/table.h: Correct prototype for traverse_table(). Fixes bug #121679. * Makefile.am README.DEVELOPERS configure.in arch/Makefile.am arch/README arch/sleep.c hdrs/arch.h: New library of replacement functions for standard functions missing on some platforms. * liflines/screen.c: Remove useless call to clearw() and wrefresh() in llwprintf(), as these are called in llvwprintf() as well. * interp/yacc.y: Include yacc error string in syntax error message. * gedlib/Makefile.am liflines/Makefile.am stdlib/Makefile.am interp/pvalue.c: Cleanup. Split long lines. * stdlib/signals.c: Write signal name when asking to dump core. * interp/eval.c: Cleanup. Call prog_error() directly with vararg argument instead of first preparing a string. 2000-11-10 Marc Nozell * Added lldb.ll report; list of all INDIs suitable to import into a palm pilot database 2000-11-10 Petter Reinholdtsen * hdrs/btree.h btree/index.c: Get the source compiling again by cleaning up include statements. 2000-11-09 Marc Nozell * reports/least_related.ll: At the request of the author, the script least_related.ll was removed. Doesn't work as advertised. 2000-11-09 Petter Reinholdtsen * configure.in hdrs/interpi.h interp/functab.c interp/heapused.c: Rewrote heapused() to work on any platform implementing heapwalk() or _heapwalk(). * interp/interp.c: Give user time to read error messages when program fails. * liflines/screen.c: Make sure to flush output to make it visible on errors. * interp/builtin.cinterp/pvalue.c: Give more debug info when insert() fails because of wrong types. 2000-11-08 Petter Reinholdtsen * hdrs/screen.h: Remove useless #ifdefs. * hdrs/interp.h hdrs/liflines.h hdrs/screen.h liflines/add.c liflines/advedit.c liflines/ask.c liflines/browse.c liflines/delete.c liflines/edit.c liflines/export.c liflines/import.c liflines/lbrowse.c liflines/main.c liflines/merge.c liflines/miscutls.c liflines/newrecs.c liflines/remove.c liflines/screen.c liflines/show.c liflines/swap.c liflines/tandem.c liflines/valgdcom.c: Converted from K&R to ANSI C. Removed some static functions prototypes from global header files, and added some prototypes to get rid of warnings. * btree/Makefile.am: Add new header files to distribution. * Makefile.am README.DEVELOPERS: Add first guess on source layout description. Make sure it is included in distribution. * hdrs/interp.h interp/alloc.c interp/builtin.c interp/date.c interp/eval.c interp/heapused.c interp/interp.c interp/intrpseq.c interp/lex.c interp/more.c interp/pvalue.c interp/rassa.c interp/write.c: Convert from K&R to ANSI C. Remove file local (static) functions from header. * interp/yacc.y: Quiet down compiler. Convert from K&R to ANSI C. Store pointers in 'void*', not 'int'. * hdrs/interp.h hdrs/screen.h interp/interp.c liflines/screen.c: Make prog_error() a vararg function again, and add new function llvwprintf() to support it. 2000-11-07 Marc Nozell * configure.in, lifelines.spec, liflines/main.c: Bumped version to 3.0.6-dev * hdrs/Makefile.am: include new interpi.h, liflines.h and sys_inc.h. 2000-11-07 Petter Reinholdtsen * configure.in interp/eval.c: Only use snprintf() when available. We should include a replacement function instead of #ifdef'ing the use. 2000-11-06 Petter Reinholdtsen * hdrs/gedcom.h hdrs/interp.h hdrs/liflines.h: Remove useless #ifdefs and make it possible to include the header files more then once. * Makefile.am ChangeLog.usermap: New target 'ChangeLog.new' to generate a changelog from CVS logs using cvs2cl. * gedlib/brwslist.c gedlib/charmaps.c gedlib/choose.c gedlib/editmap.c gedlib/editvtab.c gedlib/equaliso.c gedlib/gedcom.c gedlib/gstrings.c gedlib/indiseq.c gedlib/init.c gedlib/intrface.c gedlib/keytonod.c gedlib/misc.c gedlib/names.c gedlib/node.c gedlib/nodeutls.c gedlib/place.c gedlib/refns.c gedlib/replace.c gedlib/spltjoin.c gedlib/translat.c gedlib/valid.c gedlib/valtable.c gedlib/xreffile.c tools/btedit.c tools/wprintf.c: Convert from K&R to ANSI C. * hdrs/interp.h hdrs/interpi.h interp/functab.c: Correct function table prototypes and add new internal header file. Keep all prototypes inside the #ifdefs. * btree/addkey.c btree/block.c btree/file.c btree/index.c btree/opnbtree.c btree/record.c btree/traverse.c btree/utils.c hdrs/btree.h hdrs/standard.h stdlib/assert.c stdlib/double.c stdlib/llstrcmp.c stdlib/memalloc.c stdlib/mystring.c stdlib/path.c stdlib/sequence.c stdlib/signals.c stdlib/stdstrng.c stdlib/table.c: Convert from K&R to ANSI C. * btree/opnbtree.c gedlib/charmaps.c gedlib/choose.c gedlib/editmap.c gedlib/gedcom.c gedlib/keytonod.c gedlib/node.c gedlib/translat.c interp/alloc.c interp/builtin.c interp/eval.c interp/interp.c interp/pvalue.c interp/rassa.c interp/write.c interp/yacc.y liflines/add.c liflines/ask.c liflines/browse.c liflines/delete.c liflines/edit.c liflines/export.c liflines/lbrowse.c liflines/merge.c liflines/miscutls.c liflines/newrecs.c liflines/remove.c liflines/swap.c liflines/tandem.c stdlib/assert.c stdlib/signals.c: Include "screen.h" to find prototypes for output functions. * hdrs/screen.h tools/wprintf.c liflines/screen.c liflines/valgdcom.c: Convert vararg functions to use ANSI , and correct those functions already using it. * hdrs/liflines.h: Remove prototypes already in "screen.h". 2000-11-05 * liflines/newrecs.c liflines/show.c liflines/advedit.c liflines/swap.c liflines/screen.c liflines/add.c liflines/valgdcom.c liflines/import.c liflines/lbrowse.c tools/btedit.c: cleanup * liflines/browse.c: Add prototype * btree/index.c: cleanup compiler warnings 2000-11-05 Petter Reinholdtsen * stdlib/signals.c: Let the compiler calculate the size of array sig_msgs[]. 2000-11-04 Marc Nozell (at home) * btree/addkey.c: pretty up function definitions * gedlib/valid.c: cleanup compiler warnings * gedlib/place.c: add forward reference * gedlib/node.c: cleanup compiler warnings, hide unused code under #ifdef * gedlib/names.c: cleanup compiler warnings * gedlib/gedcom.c: cleanup compiler warnings * btree/file.c: cleanup compiler warnings * interp/alloc.c: cleanup compiler warnings * interp/Makefile.am: turn off -O2, pvalue.c will force a gcc 2.95.2 compiler bug 2000-11-04 Matt Emmerton * hdrs/liflines.h, hdrs/indiseq.h, hdrs/cache.h: Added function prototypes * gedlib/*.c: Updated function declarations, fixed -Wall warnings * liflines/screen.c: Converted mprintf() and llwprintf() to varargs-style functions in order for protos to work properly 2000-11-03 Marc Nozell (at home) * stdlib/stdstrng.c: Removed strcpy declaration. 2000-11-03 Matt Emmerton * Updated function prototypes in hdrs/*.h * Updated #include statments in most C files (anything that used gedlib.h or indiseq.h) to reflect new-found header dependencies due to types used in function prototypes * Wrapped all debug code into #ifdef DEBUG ... #endif blocks * Various code cleanups (removed unused variables, etc.) 2000-11-03 Petter Reinholdtsen * Makefile.am: Move docs last to be able to compile even if some documentation files are missing. * hdrs/cache.h hdrs/gedcheck.h hdrs/gedcom.h hdrs/indiseq.h hdrs/interp.h hdrs/screen.h hdrs/sequence.h hdrs/table.h hdrs/translat.h: Make it possible to include the header files more then once. * configure.in: Make it easier to use CVS to see if more files are generated by configure. * reports/.cvsignore: Ignore generated files. * interp/builtin.c: Bugfix. Add missing value in return statements. 2000-11-02 Petter Reinholdtsen * reports/Makefile.am: Install reports in $(pkgdatadir)/reports. * interp/eval.c: Print undefined function name on call to undefined function. * configure.in: Add '-g -W -Wall' to CFLAGS when compiling using GNU C. This generates a lot of new warnings. * interp/functab.c: Let the compiler calculate the size of array builtins[]. 2000-09-21 Marc Nozell * gedlib/indiseq.c, stdlib/mystring.c, win32/hdrs/proto.h Changed qsort to llqsort to prevent conflict with standard libraries. Idea to fix by sreeve * docs/lifelines.sgml - updated license info - point to lifelines.sourceforge.net - change references from lines302 to llines - make most lines less than 80 characters wide * liflines/main.c - Added sleep so you can see the usage message when you ask for it. * COPYING - Point to LICENSE 2000-08-23 John Chandler * gedlib/indiseq.c, interp/intrpseq.c Fixed valuesort() to work with pvalues. Also added support for sorting strings as well as integers. If the values are not all the same type, the interpreter quits with an error message. * liflines/valgdcom.c The GEDCOM import routine now avoids crashing on certain types of GEDCOM errors, such as multiply-defined INDI's. 2000-05-01 John Chandler * gedlib/messages.c - moved messages from import.c * liflines/ask.c - correct disply of GEDCOM file names * liflines/import.c - avoid abort if user tries to load while read-only * liflines/screen.c - correct typo on utility menu 2000-04-18 John Chandler * gedlib/indiseq.c. interp/more.c, liflines/ask.c Changed search order for the functions getindi, getindiset, and genindiset, so that REFNs are checked ahead of names. * interp/builtin.c, interp/date.c, interp/functab.c Added two new functions: - complexdate (similar to stddate, but supporting BC, modifiers, and double dates) - extractdatestr (returns the pieces of a date from a given string, rather than a node). 2000-01-26 John Chandler * btree/opnbtree.c Fixed bug in read-only mode. Leave the correct number of read-only users upon exiting. 2000-01-10 Marc Nozell * Added mystring.h to hdrs/Makefile.am 2000-01-09 Marc Nozell * In configure.in, bumped version to 3.0.5 * fixed tools/Makefile.am to include stdlib/libstdlib.a when linking btree * Updated AUTHORS 05 Jan 2000 Paul B. McBride (pmcbride@tiac.net) added stdlib/{llstrcmp.c,mystring.c} modified stdlib/path.c path (':' , ';') and directory ('/','\\') separator characters modified stdlib/signals.c conditionals for undefined signal names add abort message with core dump question. no core dump is produced on Win32. modified stdlib/stdstrng.c Finnish sort order related changes modified liflines/newrecs.c fopen() modes, data declaration corrections modified liflines/merge.c many "improvements" modified liflines/tandem.c change related to merge modified interp/yacc.c add "#define YACC_C" so that prototypes in proto.h can be suppressed. WARNING: pointers and integers must be the same size. modified interp/builtin.c many changes modified interp/date.c add 3.0.3 version back in. only comment changes. modified interp/functab.c added inlist(), and changes for function prototypes in proto.h added interp/heapused.c only for WIN32 modified interp/interp.c modified interp/intrpseq.c add valuesort back in modified interp/lex.c modified interp/more.c modified interp/rassa.c modified interp/alloc.c renamed iparent to iiparent modified gedlib/editmap.c use unlink() rather than system("rm -f ...") for WIN32 fixed translation bug modified gedlib/indiseq.c lots of changes modified gedlib/keytonod.c runtime cache size option support work on FATAL keytonod error. modified lifelines/main.c Finnish Sort order runtime options runtime cache size options modified btree/opnbtree.c use mkdir() for WIN32 modified btree/record.c modified gedlib/node.c modified stdlib/double.c add in_list() modified gedlib/charmaps.c translation tables modified gedlib/editvtab.c use unlink() instead of system("rm ... modified gedlib/gstrings.c add [P] to name if a child in a family add [S] to name if a spouse in a family add [PS] to name if both FOLLOWING ARE APPROXIMATED DATES, from before Open Source version 1995-11-23 Thomas T. Wetmore IV Version 3.0.3 1994-12-22 Thomas T. Wetmore IV Version 3.0.2 1994-10-24 Thomas T. Wetmore IV Apparently from Jun thru Oct of 1994 Version 3.0.0 1993-10-29 Thomas T. Wetmore IV Version 2.3.6 1993-09-02 Thomas T. Wetmore IV Version 2.3.5 1993-06-24 Thomas T. Wetmore IV Version 2.3.4 1993-01-28 Thomas T. Wetmore IV Version 2.3.3 Added getindiset, requeue, alpha, key, newfile, outfile, extractnames, extractplaces. getindi, getindimsg, getfam modified to return FALSE if user cancels entry. LLARCHIVES added. 1992-10-06 Thomas T. Wetmore IV Version 2.1.11 (Added getstr, getstrmsg, change from BAPT to CHR) 1992-09-30 Thomas T. Wetmore IV Version 2.1.10 1992-09 Thomas T. Wetmore IV Version 2.1.9 Version 2.1.8 Version 2.1.7 Version 2.1.6 lifelines-3.0.61/config.h.in0000700002540200244210000002171610655637201016000 0ustar prappDomain Users/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* Define to 1 if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the header file. */ #undef HAVE_ALLOC_H /* Define to 1 if you have the `alphasort' function. */ #undef HAVE_ALPHASORT /* Define to 1 if you have the header file. */ #undef HAVE_ARGZ_H /* Define if you have the bind_textdomain_codeset() function. */ #undef HAVE_BIND_TEXTDOMAIN_CODESET /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the header file. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the `feof_unlocked' function. */ #undef HAVE_FEOF_UNLOCKED /* Define to 1 if you have the `fgets_unlocked' function. */ #undef HAVE_FGETS_UNLOCKED /* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD /* Define to 1 if you have the `getc_unlocked' function. */ #undef HAVE_GETC_UNLOCKED /* Define to 1 if you have the `getegid' function. */ #undef HAVE_GETEGID /* Define to 1 if you have the `geteuid' function. */ #undef HAVE_GETEUID /* Define to 1 if you have the `getgid' function. */ #undef HAVE_GETGID /* Define to 1 if you have the `getopt' function. */ #undef HAVE_GETOPT /* Define to 1 if you have the header file. */ #undef HAVE_GETOPT_H /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define to 1 if you have the `getpwuid' function. */ #undef HAVE_GETPWUID /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define to 1 if you have the `getuid' function. */ #undef HAVE_GETUID /* Define to 1 if you have the `has_key' function. */ #undef HAVE_HAS_KEY /* Define to 1 if you have the `heapwalk' function. */ #undef HAVE_HEAPWALK /* Define if you have the iconv() function. */ #undef HAVE_ICONV /* Define if exists and doesn't clash with . */ #undef HAVE_INTTYPES_H /* Define if exists, doesn't clash with , and declares uintmax_t. */ #undef HAVE_INTTYPES_H_WITH_UINTMAX /* Define to 1 if you have the `iswalpha' function. */ #undef HAVE_ISWALPHA /* Define to 1 if you have the `iswspace' function. */ #undef HAVE_ISWSPACE /* Define if you have and nl_langinfo(CODESET). */ #undef HAVE_LANGINFO_CODESET /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Define to 1 if you have the `curses' library (-lcurses). */ #undef HAVE_LIBCURSES /* Define to 1 if you have the `m' library (-lm). */ #undef HAVE_LIBM /* Define to 1 if you have the `ncurses' library (-lncurses). */ #undef HAVE_LIBNCURSES /* Define to 1 if you have the `ncursesw' library (-lncursesw). */ #undef HAVE_LIBNCURSESW /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_H /* Define to 1 if you have the header file. */ #undef HAVE_MATH_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `mempcpy' function. */ #undef HAVE_MEMPCPY /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have the `munmap' function. */ #undef HAVE_MUNMAP /* Define to 1 if you have the header file. */ #undef HAVE_NCURSESW_CURSES_H /* Define to 1 if you have the header file. */ #undef HAVE_NCURSES_CURSES_H /* Define if you have the ngettext() function. */ #undef HAVE_NGETTEXT /* Define to 1 if you have the `nl_langinfo' function. */ #undef HAVE_NL_LANGINFO /* Define to 1 if you have the header file. */ #undef HAVE_NL_TYPES_H /* Define to 1 if you have the `putenv' function. */ #undef HAVE_PUTENV /* Define to 1 if you have the header file. */ #undef HAVE_PWD_H /* Define to 1 if you have the `scandir' function. */ #undef HAVE_SCANDIR /* Define to 1 if you have the `setenv' function. */ #undef HAVE_SETENV /* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE /* Define to 1 if you have the `sleep' function. */ #undef HAVE_SLEEP /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_STDDEF_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define if exists, doesn't clash with , and declares uintmax_t. */ #undef HAVE_STDINT_H_WITH_UINTMAX /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `stpcpy' function. */ #undef HAVE_STPCPY /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strtoul' function. */ #undef HAVE_STRTOUL /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the `towlower' function. */ #undef HAVE_TOWLOWER /* Define to 1 if you have the `towupper' function. */ #undef HAVE_TOWUPPER /* Define to 1 if you have the `tsearch' function. */ #undef HAVE_TSEARCH /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define if you have the unsigned long long type. */ #undef HAVE_UNSIGNED_LONG_LONG /* Define to 1 if you have the `vsnprintf' function. */ #undef HAVE_VSNPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_WCHAR_H /* Define to 1 if you have the `wcscoll' function. */ #undef HAVE_WCSCOLL /* Define to 1 if you have the `wcslen' function. */ #undef HAVE_WCSLEN /* Define to 1 if you have the header file. */ #undef HAVE_WCTYPE_H /* Define to 1 if you have the header file. */ #undef HAVE_WINDOWS_H /* Define to 1 if you have the `_heapwalk' function. */ #undef HAVE__HEAPWALK /* Define to 1 if you have the `_llnull' function. */ #undef HAVE__LLNULL /* Define to 1 if you have the `_vsnprintf' function. */ #undef HAVE__VSNPRINTF /* Define to 1 if you have the `__argz_count' function. */ #undef HAVE___ARGZ_COUNT /* Define to 1 if you have the `__argz_next' function. */ #undef HAVE___ARGZ_NEXT /* Define to 1 if you have the `__argz_stringify' function. */ #undef HAVE___ARGZ_STRINGIFY /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST /* Define if integer division by zero raises signal SIGFPE. */ #undef INTDIV0_RAISES_SIGFPE /* lifelines configuration file */ #undef LINES_CONFIG_FILE /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define if exists and defines unusable PRI* macros. */ #undef PRI_MACROS_BROKEN /* Profiling enabled? */ #undef PROFILING /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to `long int' if does not define. */ #undef off_t /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to unsigned long or unsigned long long if and don't define. */ #undef uintmax_t lifelines-3.0.61/configure0000700002540200244210000125173010655637221015665 0ustar prappDomain Users#! /bin/sh # From configure.ac for lifelines, built with autoconf AC_ACVERSION. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell autoconf@gnu.org about your system, echo including any error possibly output before this echo message } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="src/liflines/main.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir localstatedir includedir oldincludedir docdir infodir htmldir dvidir pdfdir psdir libdir localedir mandir DEFS ECHO_C ECHO_N ECHO_T LIBS build_alias host_alias target_alias build build_cpu build_vendor build_os host host_cpu host_vendor host_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE RANLIB YACC YFLAGS MKINSTALLDIRS MSGFMT GMSGFMT XGETTEXT MSGMERGE CPP GREP EGREP ALLOCA GLIBC21 LIBICONV LTLIBICONV INTLBISON USE_NLS BUILD_INCLUDED_LIBINTL USE_INCLUDED_LIBINTL CATOBJEXT INTLOBJS DATADIRNAME INSTOBJEXT GENCAT INTL_LIBTOOL_SUFFIX_PREFIX INTLLIBS LIBINTL LTLIBINTL POSUB SGMLTOOLS DOCS_TARGET LIBOBJS LTLIBOBJS' ac_subst_files='' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS YACC YFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=\$ac_optarg ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute directory names. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { echo "$as_me: error: Working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$0" || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --disable-rpath do not hardcode runtime library paths --disable-nls do not use Native Language Support Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld default=no --with-libiconv-prefix=DIR search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-included-gettext use the GNU gettext library included here --with-libintl-prefix=DIR search for libintl in DIR/include and DIR/lib --without-libintl-prefix don't search for libintl in includedir and libdir --with-docs Build the docs (requires sgmltools) --with-profiling Compile with profiling support Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory YACC The `Yet Another C Compiler' implementation to use. Defaults to the first program found out of: `bison -y', `byacc', `yacc'. YFLAGS The list of arguments that will be passed by default to $YACC. This script will default YFLAGS to the empty string to avoid a default value of `-d' given by some make applications. CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then set x "$CONFIG_SITE" elif test "x$prefix" != xNONE; then set x "$prefix/share/config.site" "$prefix/etc/config.site" else set x "$ac_default_prefix/share/config.site" \ "$ac_default_prefix/etc/config.site" fi shift for ac_site_file do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in build/autotools "$srcdir"/build/autotools; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in build/autotools \"$srcdir\"/build/autotools" >&5 echo "$as_me: error: cannot find install-sh or install.sh in build/autotools \"$srcdir\"/build/autotools" >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} { (exit 1); exit 1; }; } { echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6; } if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 echo "$as_me: error: invalid value of canonical build" >&2;} { (exit 1); exit 1; }; };; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6; } if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} { (exit 1); exit 1; }; } fi fi { echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 echo "$as_me: error: invalid value of canonical host" >&2;} { (exit 1); exit 1; }; };; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac am__api_version="1.9" # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm -f conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$AWK" && break done { echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } SET_MAKE= else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=lifelines VERSION=3.0.61 cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' ac_config_headers="$ac_config_headers config.h" { echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # # List of possible output files, starting from the most likely. # The algorithm is not robust to junk in `.', hence go to wildcards (a.*) # only as a last resort. b.out is created by i960 compilers. ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' # # The IRIX 6 linker writes into existing files which may not be # executable, retaining their permissions. Remove them first so a # subsequent execution test works. ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { (ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi { echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6; } if test -z "$ac_file"; then echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6; } { echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext { echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6; } ;; xno) { echo "$as_me:$LINENO: result: unsupported" >&5 echo "${ECHO_T}unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi { echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' for ac_prog in 'bison -y' byacc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_YACC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_YACC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi YACC=$ac_cv_prog_YACC if test -n "$YACC"; then { echo "$as_me:$LINENO: result: $YACC" >&5 echo "${ECHO_T}$YACC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$YACC" && break done test -n "$YACC" || YACC="yacc" if test "$YACC" != "bison -y"; then echo "LifeLines requires GNU Bison to compile src/interp/yacc.y." exit fi ALL_LINGUAS="da de el eo es fr it nl pl rw sv" MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_MSGFMT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { echo "$as_me:$LINENO: result: $MSGFMT" >&5 echo "${ECHO_T}$MSGFMT" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_GMSGFMT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { echo "$as_me:$LINENO: result: $GMSGFMT" >&5 echo "${ECHO_T}$GMSGFMT" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_XGETTEXT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if $ac_dir/$ac_word --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { echo "$as_me:$LINENO: result: $XGETTEXT" >&5 echo "${ECHO_T}$XGETTEXT" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi rm -f messages.po # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_MSGMERGE+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case "$MSGMERGE" in /*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then { echo "$as_me:$LINENO: result: $MSGMERGE" >&5 echo "${ECHO_T}$MSGMERGE" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "$GMSGFMT" != ":"; then if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` { echo "$as_me:$LINENO: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5 echo "${ECHO_T}found $GMSGFMT program is not GNU msgfmt; ignore it" >&6; } GMSGFMT=":" fi fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 && (if $XGETTEXT --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else { echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5 echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi rm -f messages.po fi ac_config_commands="$ac_config_commands default-1" { echo "$as_me:$LINENO: checking for strerror in -lcposix" >&5 echo $ECHO_N "checking for strerror in -lcposix... $ECHO_C" >&6; } if test "${ac_cv_lib_cposix_strerror+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcposix $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strerror (); int main () { return strerror (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_cposix_strerror=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_cposix_strerror=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_cposix_strerror" >&5 echo "${ECHO_T}$ac_cv_lib_cposix_strerror" >&6; } if test $ac_cv_lib_cposix_strerror = yes; then LIBS="$LIBS -lcposix" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Extract the first word of "grep ggrep" to use in msg output if test -z "$GREP"; then set dummy grep ggrep; ac_prog_name=$2 if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS fi GREP="$ac_cv_path_GREP" if test -z "$GREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 echo "${ECHO_T}$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else # Extract the first word of "egrep" to use in msg output if test -z "$EGREP"; then set dummy egrep; ac_prog_name=$2 if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS fi EGREP="$ac_cv_path_EGREP" if test -z "$EGREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi { echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; } if test "${ac_cv_c_const+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset cs; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_c_const=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 echo "${ECHO_T}$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then cat >>confdefs.h <<\_ACEOF #define const _ACEOF fi { echo "$as_me:$LINENO: checking for inline" >&5 echo $ECHO_N "checking for inline... $ECHO_C" >&6; } if test "${ac_cv_c_inline+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_c_inline=$ac_kw else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 echo "${ECHO_T}$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { echo "$as_me:$LINENO: checking for off_t" >&5 echo $ECHO_N "checking for off_t... $ECHO_C" >&6; } if test "${ac_cv_type_off_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef off_t ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_off_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_off_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 echo "${ECHO_T}$ac_cv_type_off_t" >&6; } if test $ac_cv_type_off_t = yes; then : else cat >>confdefs.h <<_ACEOF #define off_t long int _ACEOF fi { echo "$as_me:$LINENO: checking for size_t" >&5 echo $ECHO_N "checking for size_t... $ECHO_C" >&6; } if test "${ac_cv_type_size_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef size_t ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_size_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_size_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 echo "${ECHO_T}$ac_cv_type_size_t" >&6; } if test $ac_cv_type_size_t = yes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! { echo "$as_me:$LINENO: checking for working alloca.h" >&5 echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; } if test "${ac_cv_working_alloca_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_working_alloca_h=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_working_alloca_h=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_ALLOCA_H 1 _ACEOF fi { echo "$as_me:$LINENO: checking for alloca" >&5 echo $ECHO_N "checking for alloca... $ECHO_C" >&6; } if test "${ac_cv_func_alloca_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __GNUC__ # define alloca __builtin_alloca #else # ifdef _MSC_VER # include # define alloca _alloca # else # ifdef HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ char *alloca (); # endif # endif # endif # endif #endif int main () { char *p = (char *) alloca (1); if (p) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_func_alloca_works=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_alloca_works=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; } if test $ac_cv_func_alloca_works = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_ALLOCA 1 _ACEOF else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=\${LIBOBJDIR}alloca.$ac_objext cat >>confdefs.h <<\_ACEOF #define C_ALLOCA 1 _ACEOF { echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; } if test "${ac_cv_os_cray+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "webecray" >/dev/null 2>&1; then ac_cv_os_cray=yes else ac_cv_os_cray=no fi rm -f conftest* fi { echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 echo "${ECHO_T}$ac_cv_os_cray" >&6; } if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define CRAY_STACKSEG_END $ac_func _ACEOF break fi done fi { echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; } if test "${ac_cv_c_stack_direction+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_c_stack_direction=0 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int find_stack_direction () { static char *addr = 0; auto char dummy; if (addr == 0) { addr = &dummy; return find_stack_direction (); } else return (&dummy > addr) ? 1 : -1; } int main () { return find_stack_direction () < 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_stack_direction=1 else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; } cat >>confdefs.h <<_ACEOF #define STACK_DIRECTION $ac_cv_c_stack_direction _ACEOF fi for ac_header in stdlib.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getpagesize do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { echo "$as_me:$LINENO: checking for working mmap" >&5 echo $ECHO_N "checking for working mmap... $ECHO_C" >&6; } if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_mmap_fixed_mapped=no else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ #undef malloc /* Thanks to Mike Haertel and Jim Avera for this test. Here is a matrix of mmap possibilities: mmap private not fixed mmap private fixed at somewhere currently unmapped mmap private fixed at somewhere already mapped mmap shared not fixed mmap shared fixed at somewhere currently unmapped mmap shared fixed at somewhere already mapped For private mappings, we should verify that changes cannot be read() back from the file, nor mmap's back from the file at a different address. (There have been systems where private was not correctly implemented like the infamous i386 svr4.0, and systems where the VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get propagated back to all the places they're supposed to be. Grep wants private fixed already mapped. The main things grep needs to know about mmap are: * does it exist and is it safe to write into the mmap'd area * how to use it (BSD variants) */ #include #include #if !defined STDC_HEADERS && !defined HAVE_STDLIB_H char *malloc (); #endif /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE /* Assume that all systems that can run configure have sys/param.h. */ # ifndef HAVE_SYS_PARAM_H # define HAVE_SYS_PARAM_H 1 # endif # ifdef _SC_PAGESIZE # define getpagesize() sysconf(_SC_PAGESIZE) # else /* no _SC_PAGESIZE */ # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE # define getpagesize() EXEC_PAGESIZE # else /* no EXEC_PAGESIZE */ # ifdef NBPG # define getpagesize() NBPG * CLSIZE # ifndef CLSIZE # define CLSIZE 1 # endif /* no CLSIZE */ # else /* no NBPG */ # ifdef NBPC # define getpagesize() NBPC # else /* no NBPC */ # ifdef PAGESIZE # define getpagesize() PAGESIZE # endif /* PAGESIZE */ # endif /* no NBPC */ # endif /* no NBPG */ # endif /* no EXEC_PAGESIZE */ # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ # endif /* no _SC_PAGESIZE */ #endif /* no HAVE_GETPAGESIZE */ int main () { char *data, *data2, *data3; int i, pagesize; int fd; pagesize = getpagesize (); /* First, make a file with some known garbage in it. */ data = (char *) malloc (pagesize); if (!data) return 1; for (i = 0; i < pagesize; ++i) *(data + i) = rand (); umask (0); fd = creat ("conftest.mmap", 0600); if (fd < 0) return 1; if (write (fd, data, pagesize) != pagesize) return 1; close (fd); /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that we see the same garbage. */ fd = open ("conftest.mmap", O_RDWR); if (fd < 0) return 1; data2 = (char *) malloc (2 * pagesize); if (!data2) return 1; data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1); if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) return 1; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) return 1; /* Finally, make sure that changes to the mapped area do not percolate back to the file as seen by read(). (This is a bug on some variants of i386 svr4.0.) */ for (i = 0; i < pagesize; ++i) *(data2 + i) = *(data2 + i) + 1; data3 = (char *) malloc (pagesize); if (!data3) return 1; if (read (fd, data3, pagesize) != pagesize) return 1; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) return 1; close (fd); return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_mmap_fixed_mapped=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_mmap_fixed_mapped=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6; } if test $ac_cv_func_mmap_fixed_mapped = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_MMAP 1 _ACEOF fi rm -f conftest.mmap { echo "$as_me:$LINENO: checking whether we are using the GNU C Library 2.1 or newer" >&5 echo $ECHO_N "checking whether we are using the GNU C Library 2.1 or newer... $ECHO_C" >&6; } if test "${ac_cv_gnu_library_2_1+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky GNU user" >/dev/null 2>&1; then ac_cv_gnu_library_2_1=yes else ac_cv_gnu_library_2_1=no fi rm -f conftest* fi { echo "$as_me:$LINENO: result: $ac_cv_gnu_library_2_1" >&5 echo "${ECHO_T}$ac_cv_gnu_library_2_1" >&6; } GLIBC21="$ac_cv_gnu_library_2_1" { echo "$as_me:$LINENO: checking whether integer division by zero raises SIGFPE" >&5 echo $ECHO_N "checking whether integer division by zero raises SIGFPE... $ECHO_C" >&6; } if test "${gt_cv_int_divbyzero_sigfpe+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then # Guess based on the CPU. case "$host_cpu" in alpha* | i3456786 | m68k | s390*) gt_cv_int_divbyzero_sigfpe="guessing yes";; *) gt_cv_int_divbyzero_sigfpe="guessing no";; esac else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include static void #ifdef __cplusplus sigfpe_handler (int sig) #else sigfpe_handler (sig) int sig; #endif { /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ exit (sig != SIGFPE); } int x = 1; int y = 0; int z; int nan; int main () { signal (SIGFPE, sigfpe_handler); /* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ #if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) signal (SIGTRAP, sigfpe_handler); #endif /* Linux/SPARC yields signal SIGILL. */ #if defined (__sparc__) && defined (__linux__) signal (SIGILL, sigfpe_handler); #endif z = x / y; nan = y / y; exit (1); } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then gt_cv_int_divbyzero_sigfpe=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) gt_cv_int_divbyzero_sigfpe=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $gt_cv_int_divbyzero_sigfpe" >&5 echo "${ECHO_T}$gt_cv_int_divbyzero_sigfpe" >&6; } case "$gt_cv_int_divbyzero_sigfpe" in *yes) value=1;; *) value=0;; esac cat >>confdefs.h <<_ACEOF #define INTDIV0_RAISES_SIGFPE $value _ACEOF { echo "$as_me:$LINENO: checking for inttypes.h" >&5 echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6; } if test "${jm_ac_cv_header_inttypes_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { uintmax_t i = (uintmax_t) -1; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then jm_ac_cv_header_inttypes_h=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 jm_ac_cv_header_inttypes_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $jm_ac_cv_header_inttypes_h" >&5 echo "${ECHO_T}$jm_ac_cv_header_inttypes_h" >&6; } if test $jm_ac_cv_header_inttypes_h = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_INTTYPES_H_WITH_UINTMAX 1 _ACEOF fi { echo "$as_me:$LINENO: checking for stdint.h" >&5 echo $ECHO_N "checking for stdint.h... $ECHO_C" >&6; } if test "${jm_ac_cv_header_stdint_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { uintmax_t i = (uintmax_t) -1; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then jm_ac_cv_header_stdint_h=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 jm_ac_cv_header_stdint_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $jm_ac_cv_header_stdint_h" >&5 echo "${ECHO_T}$jm_ac_cv_header_stdint_h" >&6; } if test $jm_ac_cv_header_stdint_h = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H_WITH_UINTMAX 1 _ACEOF fi { echo "$as_me:$LINENO: checking for unsigned long long" >&5 echo $ECHO_N "checking for unsigned long long... $ECHO_C" >&6; } if test "${ac_cv_type_unsigned_long_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ unsigned long long ull = 1; int i = 63; int main () { unsigned long long ullmax = (unsigned long long) -1; return ull << i | ull >> i | ullmax / ull | ullmax % ull; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_type_unsigned_long_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_unsigned_long_long=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_long_long" >&5 echo "${ECHO_T}$ac_cv_type_unsigned_long_long" >&6; } if test $ac_cv_type_unsigned_long_long = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_UNSIGNED_LONG_LONG 1 _ACEOF fi if test $jm_ac_cv_header_inttypes_h = no && test $jm_ac_cv_header_stdint_h = no; then test $ac_cv_type_unsigned_long_long = yes \ && ac_type='unsigned long long' \ || ac_type='unsigned long' cat >>confdefs.h <<_ACEOF #define uintmax_t $ac_type _ACEOF fi { echo "$as_me:$LINENO: checking for inttypes.h" >&5 echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6; } if test "${gt_cv_header_inttypes_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then gt_cv_header_inttypes_h=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gt_cv_header_inttypes_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $gt_cv_header_inttypes_h" >&5 echo "${ECHO_T}$gt_cv_header_inttypes_h" >&6; } if test $gt_cv_header_inttypes_h = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_INTTYPES_H 1 _ACEOF fi if test $gt_cv_header_inttypes_h = yes; then { echo "$as_me:$LINENO: checking whether the inttypes.h PRIxNN macros are broken" >&5 echo $ECHO_N "checking whether the inttypes.h PRIxNN macros are broken... $ECHO_C" >&6; } if test "${gt_cv_inttypes_pri_broken+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #ifdef PRId32 char *p = PRId32; #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then gt_cv_inttypes_pri_broken=no else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gt_cv_inttypes_pri_broken=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $gt_cv_inttypes_pri_broken" >&5 echo "${ECHO_T}$gt_cv_inttypes_pri_broken" >&6; } fi if test "$gt_cv_inttypes_pri_broken" = yes; then cat >>confdefs.h <<_ACEOF #define PRI_MACROS_BROKEN 1 _ACEOF fi if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { echo "$as_me:$LINENO: checking for ld used by GCC" >&5 echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } else { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } fi if test "${acl_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$acl_cv_path_LD" if test -n "$LD"; then { echo "$as_me:$LINENO: result: $LD" >&5 echo "${ECHO_T}$LD" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } { echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } if test "${acl_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 &5; then acl_cv_prog_gnu_ld=yes else acl_cv_prog_gnu_ld=no fi fi { echo "$as_me:$LINENO: result: $acl_cv_prog_gnu_ld" >&5 echo "${ECHO_T}$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { echo "$as_me:$LINENO: checking for shared library run path origin" >&5 echo $ECHO_N "checking for shared library run path origin... $ECHO_C" >&6; } if test "${acl_cv_rpath+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5 echo "${ECHO_T}$acl_cv_rpath" >&6; } wl="$acl_cv_wl" libext="$acl_cv_libext" shlibext="$acl_cv_shlibext" hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" hardcode_direct="$acl_cv_hardcode_direct" hardcode_minus_L="$acl_cv_hardcode_minus_L" sys_lib_search_path_spec="$acl_cv_sys_lib_search_path_spec" sys_lib_dlsearch_path_spec="$acl_cv_sys_lib_dlsearch_path_spec" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then enableval=$enable_rpath; : else enable_rpath=yes fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi fi LIBICONV= LTLIBICONV= INCICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi for ac_header in argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ stdlib.h string.h unistd.h sys/param.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \ geteuid getgid getuid mempcpy munmap putenv setenv setlocale stpcpy \ strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { echo "$as_me:$LINENO: checking for iconv" >&5 echo $ECHO_N "checking for iconv... $ECHO_C" >&6; } if test "${am_cv_func_iconv+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then am_cv_func_iconv=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then am_cv_lib_iconv=yes am_cv_func_iconv=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5 echo "${ECHO_T}$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_ICONV 1 _ACEOF fi if test "$am_cv_lib_iconv" = yes; then { echo "$as_me:$LINENO: checking how to link with libiconv" >&5 echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $LIBICONV" >&5 echo "${ECHO_T}$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi if test "$am_cv_func_iconv" = yes; then { echo "$as_me:$LINENO: checking for iconv declaration" >&5 echo $ECHO_N "checking for iconv declaration... $ECHO_C" >&6; } if test "${am_cv_proto_iconv+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then am_cv_proto_iconv_arg1="" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 am_cv_proto_iconv_arg1="const" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" fi am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` { echo "$as_me:$LINENO: result: ${ac_t:- }$am_cv_proto_iconv" >&5 echo "${ECHO_T}${ac_t:- }$am_cv_proto_iconv" >&6; } cat >>confdefs.h <<_ACEOF #define ICONV_CONST $am_cv_proto_iconv_arg1 _ACEOF fi { echo "$as_me:$LINENO: checking for nl_langinfo and CODESET" >&5 echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6; } if test "${am_cv_langinfo_codeset+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { char* cs = nl_langinfo(CODESET); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then am_cv_langinfo_codeset=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 am_cv_langinfo_codeset=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $am_cv_langinfo_codeset" >&5 echo "${ECHO_T}$am_cv_langinfo_codeset" >&6; } if test $am_cv_langinfo_codeset = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_LANGINFO_CODESET 1 _ACEOF fi if test $ac_cv_header_locale_h = yes; then { echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5 echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6; } if test "${am_cv_val_LC_MESSAGES+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then am_cv_val_LC_MESSAGES=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5 echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_LC_MESSAGES 1 _ACEOF fi fi for ac_prog in bison do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_INTLBISON+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$INTLBISON"; then ac_cv_prog_INTLBISON="$INTLBISON" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_INTLBISON="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi INTLBISON=$ac_cv_prog_INTLBISON if test -n "$INTLBISON"; then { echo "$as_me:$LINENO: result: $INTLBISON" >&5 echo "${ECHO_T}$INTLBISON" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$INTLBISON" && break done if test -z "$INTLBISON"; then ac_verc_fail=yes else { echo "$as_me:$LINENO: checking version of bison" >&5 echo $ECHO_N "checking version of bison... $ECHO_C" >&6; } ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; esac { echo "$as_me:$LINENO: result: $ac_prog_version" >&5 echo "${ECHO_T}$ac_prog_version" >&6; } fi if test $ac_verc_fail = yes; then INTLBISON=: fi { echo "$as_me:$LINENO: checking whether NLS is requested" >&5 echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { echo "$as_me:$LINENO: result: $USE_NLS" >&5 echo "${ECHO_T}$USE_NLS" >&6; } BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no LIBINTL= LTLIBINTL= POSUB= if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no { echo "$as_me:$LINENO: checking whether included gettext is requested" >&5 echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6; } # Check whether --with-included-gettext was given. if test "${with_included_gettext+set}" = set; then withval=$with_included_gettext; nls_cv_force_use_gnu_gettext=$withval else nls_cv_force_use_gnu_gettext=no fi { echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5 echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6; } nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then { echo "$as_me:$LINENO: checking for GNU gettext in libc" >&5 echo $ECHO_N "checking for GNU gettext in libc... $ECHO_C" >&6; } if test "${gt_cv_func_gnugettext2_libc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; int main () { bindtextdomain ("", ""); return (int) gettext ("") + (int) ngettext ("", "", 0) + _nl_msg_cat_cntr + *_nl_domain_bindings ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then gt_cv_func_gnugettext2_libc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gt_cv_func_gnugettext2_libc=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext2_libc" >&5 echo "${ECHO_T}$gt_cv_func_gnugettext2_libc" >&6; } if test "$gt_cv_func_gnugettext2_libc" != "yes"; then use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libintl-prefix was given. if test "${with_libintl_prefix+set}" = set; then withval=$with_libintl_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi fi LIBINTL= LTLIBINTL= INCINTL= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='intl ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$hardcode_direct" = yes; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" else LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" ;; esac done fi else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" done fi { echo "$as_me:$LINENO: checking for GNU gettext in libintl" >&5 echo $ECHO_N "checking for GNU gettext in libintl... $ECHO_C" >&6; } if test "${gt_cv_func_gnugettext2_libintl+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (); int main () { bindtextdomain ("", ""); return (int) gettext ("") + (int) ngettext ("", "", 0) + _nl_msg_cat_cntr + *_nl_expand_alias (0) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then gt_cv_func_gnugettext2_libintl=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gt_cv_func_gnugettext2_libintl=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test "$gt_cv_func_gnugettext2_libintl" != yes && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (); int main () { bindtextdomain ("", ""); return (int) gettext ("") + (int) ngettext ("", "", 0) + _nl_msg_cat_cntr + *_nl_expand_alias (0) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" gt_cv_func_gnugettext2_libintl=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi { echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext2_libintl" >&5 echo "${ECHO_T}$gt_cv_func_gnugettext2_libintl" >&6; } fi if test "$gt_cv_func_gnugettext2_libc" = "yes" \ || { test "$gt_cv_func_gnugettext2_libintl" = "yes" \ && test "$PACKAGE" != gettext; }; then gt_use_preinstalled_gnugettext=yes else LIBINTL= LTLIBINTL= INCINTL= fi if test "$gt_use_preinstalled_gnugettext" != "yes"; then nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then INTLOBJS="\$(GETTOBJS)" BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="\${top_builddir}/intl/libintl.a $LIBICONV" LTLIBINTL="\${top_builddir}/intl/libintl.a $LTLIBICONV" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then CATOBJEXT=.gmo fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then cat >>confdefs.h <<\_ACEOF #define ENABLE_NLS 1 _ACEOF else USE_NLS=no fi fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if test "$gt_cv_func_gnugettext2_libintl" = "yes"; then { echo "$as_me:$LINENO: checking how to link with libintl" >&5 echo $ECHO_N "checking how to link with libintl... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $LIBINTL" >&5 echo "${ECHO_T}$LIBINTL" >&6; } for element in $INCINTL; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done fi cat >>confdefs.h <<\_ACEOF #define HAVE_GETTEXT 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define HAVE_DCGETTEXT 1 _ACEOF fi POSUB=po fi if test "$PACKAGE" = gettext; then BUILD_INCLUDED_LIBINTL=yes fi nls_cv_header_intl= nls_cv_header_libgt= DATADIRNAME=share INSTOBJEXT=.mo GENCAT=gencat INTL_LIBTOOL_SUFFIX_PREFIX= INTLLIBS="$LIBINTL" am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { echo "$as_me:$LINENO: checking for iconv" >&5 echo $ECHO_N "checking for iconv... $ECHO_C" >&6; } if test "${am_cv_func_iconv+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then am_cv_func_iconv=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then am_cv_lib_iconv=yes am_cv_func_iconv=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5 echo "${ECHO_T}$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_ICONV 1 _ACEOF fi if test "$am_cv_lib_iconv" = yes; then { echo "$as_me:$LINENO: checking how to link with libiconv" >&5 echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $LIBICONV" >&5 echo "${ECHO_T}$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi if test "$am_cv_func_iconv" = yes; then { echo "$as_me:$LINENO: checking for iconv declaration" >&5 echo $ECHO_N "checking for iconv declaration... $ECHO_C" >&6; } if test "${am_cv_proto_iconv+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then am_cv_proto_iconv_arg1="" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 am_cv_proto_iconv_arg1="const" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" fi am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` { echo "$as_me:$LINENO: result: ${ac_t:- }$am_cv_proto_iconv" >&5 echo "${ECHO_T}${ac_t:- }$am_cv_proto_iconv" >&6; } cat >>confdefs.h <<_ACEOF #define ICONV_CONST $am_cv_proto_iconv_arg1 _ACEOF fi if test "${ac_cv_c_compiler_gnu}" = "yes"; then # -ansi breaks compile of liflines/askprogram.c [pere 2000-12-31] for flag in \ -W \ -Wall \ -Wcast-align \ -Wmissing-declarations \ -Wmissing-prototypes \ -Wreturn-type \ -Wstrict-prototypes \ -pedantic do case "$CFLAGS" in "$flag" | "$flag "* | *" $flag" | *" $flag "* ) : ;; *) CFLAGS="$CFLAGS $flag" ;; esac done CFLAGS="${CFLAGS} -g" fi # OS-Specific Fixups # Cygwin - fixes linker problems # Darwin - will pick up Fink-installed headers and libraries case $host in *pc-cygwin*) CFLAGS="${CFLAGS} -DBROKEN_LINKER" ;; *apple-darwin*) CPPFLAGS="${CPPFLAGS} -I/sw/include"; LDFLAGS="${LDFLAGS} -L/sw/lib" ;; esac # Shall we build the docs? # Check whether --with-docs was given. if test "${with_docs+set}" = set; then withval=$with_docs; with_docs=$withval else with_docs=no fi DOCS_TARGET="" if test "$with_docs" = "yes" then echo Looking for sgmltools # Extract the first word of "sgmltools", so it can be a program name with args. set dummy sgmltools; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_SGMLTOOLS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $SGMLTOOLS in [\\/]* | ?:[\\/]*) ac_cv_path_SGMLTOOLS="$SGMLTOOLS" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_SGMLTOOLS="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_SGMLTOOLS" && ac_cv_path_SGMLTOOLS="FAIL" ;; esac fi SGMLTOOLS=$ac_cv_path_SGMLTOOLS if test -n "$SGMLTOOLS"; then { echo "$as_me:$LINENO: result: $SGMLTOOLS" >&5 echo "${ECHO_T}$SGMLTOOLS" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "$SGMLTOOLS" = "FAIL"; then { echo "$as_me:$LINENO: result: ******************************************************************* " >&5 echo "${ECHO_T}******************************************************************* " >&6; } { echo "$as_me:$LINENO: result: *** Cannot find sgmltools to build docs. skipping building docs *** " >&5 echo "${ECHO_T}*** Cannot find sgmltools to build docs. skipping building docs *** " >&6; } { echo "$as_me:$LINENO: result: *** Visit http://sgmltools-lite.sourceforge.net and install it. *** " >&5 echo "${ECHO_T}*** Visit http://sgmltools-lite.sourceforge.net and install it. *** " >&6; } { echo "$as_me:$LINENO: result: ******************************************************************* " >&5 echo "${ECHO_T}******************************************************************* " >&6; } else DOCS_TARGET="simple" fi fi # Compile with profiling, to find bottlenecks # Check whether --with-profiling was given. if test "${with_profiling+set}" = set; then withval=$with_profiling; # Does it work for other compilers then GCC? [pere 2000-12-30] if test "${ac_cv_c_compiler_gnu}" = "yes"; then CFLAGS="${CFLAGS} -pg -a" LDFLAGS="${LDFLAGS} -pg -a" # Make sure 'config.h' is changed if profiling is turned on, to # trigger recompile for every source file. cat >>confdefs.h <<\_ACEOF #define PROFILING 1 _ACEOF else echo "Do not know how to perform profiling using this compiler!" fi fi echo Looking for header files for ac_header in getopt.h dirent.h pwd.h locale.h windows.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in wchar.h wctype.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in math.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in ncurses/curses.h ncursesw/curses.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done echo Looking for library functions for ac_func in _vsnprintf heapwalk _heapwalk getpwuid setlocale do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in wcscoll towlower towupper iswspace iswalpha do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { echo "$as_me:$LINENO: checking for sin in -lm" >&5 echo $ECHO_N "checking for sin in -lm... $ECHO_C" >&6; } if test "${ac_cv_lib_m_sin_+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sin (); int main () { return sin (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_m_sin_=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_m_sin_=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_m_sin_" >&5 echo "${ECHO_T}$ac_cv_lib_m_sin_" >&6; } if test $ac_cv_lib_m_sin_ = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" fi { echo "$as_me:$LINENO: checking for cos in -lm" >&5 echo $ECHO_N "checking for cos in -lm... $ECHO_C" >&6; } if test "${ac_cv_lib_m_cos_+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char cos (); int main () { return cos (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_m_cos_=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_m_cos_=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_m_cos_" >&5 echo "${ECHO_T}$ac_cv_lib_m_cos_" >&6; } if test $ac_cv_lib_m_cos_ = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" fi { echo "$as_me:$LINENO: checking for tan in -lm" >&5 echo $ECHO_N "checking for tan in -lm... $ECHO_C" >&6; } if test "${ac_cv_lib_m_tan_+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char tan (); int main () { return tan (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_m_tan_=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_m_tan_=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_m_tan_" >&5 echo "${ECHO_T}$ac_cv_lib_m_tan_" >&6; } if test $ac_cv_lib_m_tan_ = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" fi { echo "$as_me:$LINENO: checking for asin in -lm" >&5 echo $ECHO_N "checking for asin in -lm... $ECHO_C" >&6; } if test "${ac_cv_lib_m_asin_+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char asin (); int main () { return asin (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_m_asin_=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_m_asin_=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_m_asin_" >&5 echo "${ECHO_T}$ac_cv_lib_m_asin_" >&6; } if test $ac_cv_lib_m_asin_ = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" fi { echo "$as_me:$LINENO: checking for acos in -lm" >&5 echo $ECHO_N "checking for acos in -lm... $ECHO_C" >&6; } if test "${ac_cv_lib_m_acos_+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char acos (); int main () { return acos (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_m_acos_=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_m_acos_=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_m_acos_" >&5 echo "${ECHO_T}$ac_cv_lib_m_acos_" >&6; } if test $ac_cv_lib_m_acos_ = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" fi { echo "$as_me:$LINENO: checking for atan in -lm" >&5 echo $ECHO_N "checking for atan in -lm... $ECHO_C" >&6; } if test "${ac_cv_lib_m_atan_+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char atan (); int main () { return atan (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_m_atan_=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_m_atan_=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_m_atan_" >&5 echo "${ECHO_T}$ac_cv_lib_m_atan_" >&6; } if test $ac_cv_lib_m_atan_ = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" fi echo Looking for curses-compatible screen output library { echo "$as_me:$LINENO: checking for tparm in -lncursesw" >&5 echo $ECHO_N "checking for tparm in -lncursesw... $ECHO_C" >&6; } if test "${ac_cv_lib_ncursesw_tparm+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lncursesw $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char tparm (); int main () { return tparm (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_ncursesw_tparm=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_ncursesw_tparm=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_ncursesw_tparm" >&5 echo "${ECHO_T}$ac_cv_lib_ncursesw_tparm" >&6; } if test $ac_cv_lib_ncursesw_tparm = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBNCURSESW 1 _ACEOF LIBS="-lncursesw $LIBS" fi if test "$ac_cv_lib_ncursesw_tparm" = "yes"; then echo Using ncursesw else { echo "$as_me:$LINENO: checking for tparm in -lncurses" >&5 echo $ECHO_N "checking for tparm in -lncurses... $ECHO_C" >&6; } if test "${ac_cv_lib_ncurses_tparm+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lncurses $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char tparm (); int main () { return tparm (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_ncurses_tparm=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_ncurses_tparm=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_ncurses_tparm" >&5 echo "${ECHO_T}$ac_cv_lib_ncurses_tparm" >&6; } if test $ac_cv_lib_ncurses_tparm = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBNCURSES 1 _ACEOF LIBS="-lncurses $LIBS" fi if test "$ac_cv_lib_ncurses_tparm" = "yes"; then echo Using ncurses else echo Looking for curses { echo "$as_me:$LINENO: checking for main in -lcurses" >&5 echo $ECHO_N "checking for main in -lcurses... $ECHO_C" >&6; } if test "${ac_cv_lib_curses_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcurses $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_curses_main=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_curses_main=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_curses_main" >&5 echo "${ECHO_T}$ac_cv_lib_curses_main" >&6; } if test $ac_cv_lib_curses_main = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBCURSES 1 _ACEOF LIBS="-lcurses $LIBS" fi if test "$ac_cv_lib_curses_main" = "yes"; then echo Using curses else case $host in *mingw32*) echo "Didn't find an up-to-date ncurses or curses library!" echo "Using LifeLines version of curses for Windows." ;; *) echo "Didn't find an up-to-date ncurses or curses library!" echo "Link problems may result!" ;; esac fi fi fi for ac_func in sleep scandir alphasort getopt snprintf vsnprintf do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF else case " $LIBOBJS " in *" $ac_func.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;; esac fi done for ac_func in nl_langinfo wcslen has_key do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF else case " $LIBOBJS " in *" $ac_func.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;; esac fi done for ac_func in _llnull do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF else case " $LIBOBJS " in *" $ac_func.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;; esac fi done echo Looking for header files and libraries to support heap walking case $host in *apple-darwin*) HAVE_ALLOC_H=no HAVE_MALLOC_H=no HAVE_HEAPWALK=no HAVE__HEAPWALK=no ;; *) for ac_header in alloc.h malloc.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in heapwalk _heapwalk do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done ;; esac echo Looking for ngettext saved_libs="$LIBS" LIBS="$LIBS $LIBINTL" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { ngettext("","",0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_func_ngettext=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_ngettext=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_func_ngettext" = yes; then echo "found ngettext" cat >>confdefs.h <<\_ACEOF #define HAVE_NGETTEXT 1 _ACEOF else echo "couldn't find ngettext" LIBS="$saved_libs" fi case $host_os in *windows*) cat >>confdefs.h <<\_ACEOF #define LINES_CONFIG_FILE "lines.cfg" _ACEOF ;; *) cat >>confdefs.h <<\_ACEOF #define LINES_CONFIG_FILE ".linesrc" _ACEOF ;; esac echo Looking for bind_textdomain_codeset saved_libs="$LIBS" LIBS="$LIBS $LIBINTL" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { bind_textdomain_codeset("",""); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_func_bind_textdomain_codeset=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_bind_textdomain_codeset=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_func_bind_textdomain_codeset" = yes; then echo "found bind_textdomain_codeset" cat >>confdefs.h <<\_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF else echo "couldn't find bind_textdomain_codeset" LIBS="$saved_libs" fi ac_config_files="$ac_config_files Makefile src/Makefile src/arch/Makefile src/btree/Makefile src/interp/Makefile src/gedlib/Makefile src/stdlib/Makefile src/liflines/Makefile src/tools/Makefile src/ui/Makefile src/hdrs/Makefile src/hdrs/win32/Makefile docs/Makefile reports/Makefile reports/st/Makefile tt/Makefile win32/Makefile build/Makefile intl/Makefile po/Makefile.in" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { echo "$as_me:$LINENO: updating cache $cache_file" >&5 echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2006 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header { echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 CONFIG_SHELL=$SHELL export CONFIG_SHELL exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it # from automake. eval 'ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/arch/Makefile") CONFIG_FILES="$CONFIG_FILES src/arch/Makefile" ;; "src/btree/Makefile") CONFIG_FILES="$CONFIG_FILES src/btree/Makefile" ;; "src/interp/Makefile") CONFIG_FILES="$CONFIG_FILES src/interp/Makefile" ;; "src/gedlib/Makefile") CONFIG_FILES="$CONFIG_FILES src/gedlib/Makefile" ;; "src/stdlib/Makefile") CONFIG_FILES="$CONFIG_FILES src/stdlib/Makefile" ;; "src/liflines/Makefile") CONFIG_FILES="$CONFIG_FILES src/liflines/Makefile" ;; "src/tools/Makefile") CONFIG_FILES="$CONFIG_FILES src/tools/Makefile" ;; "src/ui/Makefile") CONFIG_FILES="$CONFIG_FILES src/ui/Makefile" ;; "src/hdrs/Makefile") CONFIG_FILES="$CONFIG_FILES src/hdrs/Makefile" ;; "src/hdrs/win32/Makefile") CONFIG_FILES="$CONFIG_FILES src/hdrs/win32/Makefile" ;; "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; "reports/Makefile") CONFIG_FILES="$CONFIG_FILES reports/Makefile" ;; "reports/st/Makefile") CONFIG_FILES="$CONFIG_FILES reports/st/Makefile" ;; "tt/Makefile") CONFIG_FILES="$CONFIG_FILES tt/Makefile" ;; "win32/Makefile") CONFIG_FILES="$CONFIG_FILES win32/Makefile" ;; "build/Makefile") CONFIG_FILES="$CONFIG_FILES build/Makefile" ;; "intl/Makefile") CONFIG_FILES="$CONFIG_FILES intl/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # # Set up the sed scripts for CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "$CONFIG_FILES"; then _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF SHELL!$SHELL$ac_delim PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim PACKAGE_NAME!$PACKAGE_NAME$ac_delim PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim PACKAGE_STRING!$PACKAGE_STRING$ac_delim PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim exec_prefix!$exec_prefix$ac_delim prefix!$prefix$ac_delim program_transform_name!$program_transform_name$ac_delim bindir!$bindir$ac_delim sbindir!$sbindir$ac_delim libexecdir!$libexecdir$ac_delim datarootdir!$datarootdir$ac_delim datadir!$datadir$ac_delim sysconfdir!$sysconfdir$ac_delim sharedstatedir!$sharedstatedir$ac_delim localstatedir!$localstatedir$ac_delim includedir!$includedir$ac_delim oldincludedir!$oldincludedir$ac_delim docdir!$docdir$ac_delim infodir!$infodir$ac_delim htmldir!$htmldir$ac_delim dvidir!$dvidir$ac_delim pdfdir!$pdfdir$ac_delim psdir!$psdir$ac_delim libdir!$libdir$ac_delim localedir!$localedir$ac_delim mandir!$mandir$ac_delim DEFS!$DEFS$ac_delim ECHO_C!$ECHO_C$ac_delim ECHO_N!$ECHO_N$ac_delim ECHO_T!$ECHO_T$ac_delim LIBS!$LIBS$ac_delim build_alias!$build_alias$ac_delim host_alias!$host_alias$ac_delim target_alias!$target_alias$ac_delim build!$build$ac_delim build_cpu!$build_cpu$ac_delim build_vendor!$build_vendor$ac_delim build_os!$build_os$ac_delim host!$host$ac_delim host_cpu!$host_cpu$ac_delim host_vendor!$host_vendor$ac_delim host_os!$host_os$ac_delim INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim INSTALL_DATA!$INSTALL_DATA$ac_delim CYGPATH_W!$CYGPATH_W$ac_delim PACKAGE!$PACKAGE$ac_delim VERSION!$VERSION$ac_delim ACLOCAL!$ACLOCAL$ac_delim AUTOCONF!$AUTOCONF$ac_delim AUTOMAKE!$AUTOMAKE$ac_delim AUTOHEADER!$AUTOHEADER$ac_delim MAKEINFO!$MAKEINFO$ac_delim install_sh!$install_sh$ac_delim STRIP!$STRIP$ac_delim INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim mkdir_p!$mkdir_p$ac_delim AWK!$AWK$ac_delim SET_MAKE!$SET_MAKE$ac_delim am__leading_dot!$am__leading_dot$ac_delim AMTAR!$AMTAR$ac_delim am__tar!$am__tar$ac_delim am__untar!$am__untar$ac_delim MAINTAINER_MODE_TRUE!$MAINTAINER_MODE_TRUE$ac_delim MAINTAINER_MODE_FALSE!$MAINTAINER_MODE_FALSE$ac_delim MAINT!$MAINT$ac_delim CC!$CC$ac_delim CFLAGS!$CFLAGS$ac_delim LDFLAGS!$LDFLAGS$ac_delim CPPFLAGS!$CPPFLAGS$ac_delim ac_ct_CC!$ac_ct_CC$ac_delim EXEEXT!$EXEEXT$ac_delim OBJEXT!$OBJEXT$ac_delim DEPDIR!$DEPDIR$ac_delim am__include!$am__include$ac_delim am__quote!$am__quote$ac_delim AMDEP_TRUE!$AMDEP_TRUE$ac_delim AMDEP_FALSE!$AMDEP_FALSE$ac_delim AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim CCDEPMODE!$CCDEPMODE$ac_delim am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim RANLIB!$RANLIB$ac_delim YACC!$YACC$ac_delim YFLAGS!$YFLAGS$ac_delim MKINSTALLDIRS!$MKINSTALLDIRS$ac_delim MSGFMT!$MSGFMT$ac_delim GMSGFMT!$GMSGFMT$ac_delim XGETTEXT!$XGETTEXT$ac_delim MSGMERGE!$MSGMERGE$ac_delim CPP!$CPP$ac_delim GREP!$GREP$ac_delim EGREP!$EGREP$ac_delim ALLOCA!$ALLOCA$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF CEOF$ac_eof _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF GLIBC21!$GLIBC21$ac_delim LIBICONV!$LIBICONV$ac_delim LTLIBICONV!$LTLIBICONV$ac_delim INTLBISON!$INTLBISON$ac_delim USE_NLS!$USE_NLS$ac_delim BUILD_INCLUDED_LIBINTL!$BUILD_INCLUDED_LIBINTL$ac_delim USE_INCLUDED_LIBINTL!$USE_INCLUDED_LIBINTL$ac_delim CATOBJEXT!$CATOBJEXT$ac_delim INTLOBJS!$INTLOBJS$ac_delim DATADIRNAME!$DATADIRNAME$ac_delim INSTOBJEXT!$INSTOBJEXT$ac_delim GENCAT!$GENCAT$ac_delim INTL_LIBTOOL_SUFFIX_PREFIX!$INTL_LIBTOOL_SUFFIX_PREFIX$ac_delim INTLLIBS!$INTLLIBS$ac_delim LIBINTL!$LIBINTL$ac_delim LTLIBINTL!$LTLIBINTL$ac_delim POSUB!$POSUB$ac_delim SGMLTOOLS!$SGMLTOOLS$ac_delim DOCS_TARGET!$DOCS_TARGET$ac_delim LIBOBJS!$LIBOBJS$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 21; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b end _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF :end s/|#_!!_#|//g CEOF$ac_eof _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF fi # test -n "$CONFIG_FILES" for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 echo "$as_me: error: Invalid tag $ac_tag." >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac ac_file_inputs="$ac_file_inputs $ac_f" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input="Generated from "`IFS=: echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} fi case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin";; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= case `sed -n '/datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' $ac_file_inputs` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s&@configure_input@&$configure_input&;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out"; rm -f "$tmp/out";; *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; esac ;; :H) # # CONFIG_HEADER # _ACEOF # Transform confdefs.h into a sed script `conftest.defines', that # substitutes the proper values into config.h.in to produce config.h. rm -f conftest.defines conftest.tail # First, append a space to every undef/define line, to ease matching. echo 's/$/ /' >conftest.defines # Then, protect against being on the right side of a sed subst, or in # an unquoted here document, in config.status. If some macros were # called several times there might be several #defines for the same # symbol, which is useless. But do not sort them, since the last # AC_DEFINE must be honored. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* # These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where # NAME is the cpp macro being defined, VALUE is the value it is being given. # PARAMS is the parameter list in the macro definition--in most cases, it's # just an empty string. ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' ac_dB='\\)[ (].*,\\1define\\2' ac_dC=' ' ac_dD=' ,' uniq confdefs.h | sed -n ' t rset :rset s/^[ ]*#[ ]*define[ ][ ]*// t ok d :ok s/[\\&,]/\\&/g s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p ' >>conftest.defines # Remove the space that was appended to ease matching. # Then replace #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. # (The regexp can be short, since the line contains either #define or #undef.) echo 's/ $// s,^[ #]*u.*,/* & */,' >>conftest.defines # Break up conftest.defines: ac_max_sed_lines=50 # First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" # Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" # Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" # et cetera. ac_in='$ac_file_inputs' ac_out='"$tmp/out1"' ac_nxt='"$tmp/out2"' while : do # Write a here document: cat >>$CONFIG_STATUS <<_ACEOF # First, check the format of the line: cat >"\$tmp/defines.sed" <<\\CEOF /^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def /^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def b :def _ACEOF sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail grep . conftest.tail >/dev/null || break rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines conftest.tail echo "ac_result=$ac_in" >>$CONFIG_STATUS cat >>$CONFIG_STATUS <<\_ACEOF if test x"$ac_file" != x-; then echo "/* $configure_input */" >"$tmp/config.h" cat "$ac_result" >>"$tmp/config.h" if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else rm -f $ac_file mv "$tmp/config.h" $ac_file fi else echo "/* $configure_input */" cat "$ac_result" fi rm -f "$tmp/out12" # Compute $ac_file's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $ac_file | $ac_file:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $ac_file" >`$as_dirname -- $ac_file || $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X$ac_file : 'X\(//\)[^/]' \| \ X$ac_file : 'X\(//\)$' \| \ X$ac_file : 'X\(/\)' \| . 2>/dev/null || echo X$ac_file | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir=$dirpart/$fdir case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; "default-1":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' fi case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= GMOFILES= UPDATEPOFILES= DUMMYPOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi lifelines-3.0.61/configure.ac0000700002540200244210000002013610655637142016242 0ustar prappDomain Usersdnl dnl Configure script for lifelines software dnl dnl Process this file with autoconf to produce a configure script. dnl ************************************************************** dnl Autoconf Preamble dnl ************************************************************** AC_INIT(src/liflines/main.c) AC_PREREQ(2.50) AC_REVISION([for lifelines, built with autoconf] AC_ACVERSION) AC_CONFIG_AUX_DIR(build/autotools) AC_CANONICAL_HOST AM_INIT_AUTOMAKE(lifelines, 3.0.61) AM_CONFIG_HEADER(config.h) AM_MAINTAINER_MODE dnl ************************************************************** dnl Check for Compile-Chain Programs dnl ************************************************************** dnl Checks for programs. AC_PROG_CC AC_PROG_RANLIB AC_PROG_INSTALL dnl MTE: 01/11/04: Force the use of GNU Bison only. dnl MTE: AC_PROG_YACC will find any YACC, but only dnl MTE: Bison works for us. AC_PROG_YACC if test "$YACC" != "bison -y"; then echo "LifeLines requires GNU Bison to compile src/interp/yacc.y." exit fi dnl ************************************************************** dnl Check for Internationalization Support (gettext and iconv) dnl ************************************************************** dnl Internationalization (gettext) dnl ALL_LINGUAS is not needed with latest autotools dnl but debian maintainer still needs it dnl These languages should be a copy of po/LINGUAS ALL_LINGUAS="da de el eo es fr it nl pl rw sv" AM_GNU_GETTEXT(,need-ngettext) dnl codeset conversion library AM_ICONV dnl ************************************************************** dnl Apply OS/Compiler-Specific Settings dnl ************************************************************** dnl Add warning flags when using The GNU C Compiler if test "${ac_cv_prog_gcc}" = "yes"; then # -ansi breaks compile of liflines/askprogram.c [pere 2000-12-31] for flag in \ -W \ -Wall \ -Wcast-align \ -Wmissing-declarations \ -Wmissing-prototypes \ -Wreturn-type \ -Wstrict-prototypes \ -pedantic do JAPHAR_GREP_CFLAGS($flag, [ CFLAGS="$CFLAGS $flag" ]) done dnl Add debugging as well CFLAGS="${CFLAGS} -g" fi # OS-Specific Fixups # Cygwin - fixes linker problems # Darwin - will pick up Fink-installed headers and libraries case $host in *pc-cygwin*) CFLAGS="${CFLAGS} -DBROKEN_LINKER" ;; *apple-darwin*) CPPFLAGS="${CPPFLAGS} -I/sw/include"; LDFLAGS="${LDFLAGS} -L/sw/lib" ;; esac dnl ************************************************************** dnl Handle Docs Target dnl ************************************************************** # Shall we build the docs? AC_ARG_WITH(docs, [ --with-docs Build the docs (requires sgmltools) ], [with_docs=$withval], [with_docs=no] ) DOCS_TARGET="" if test "$with_docs" = "yes" then echo Looking for sgmltools AC_PATH_PROG(SGMLTOOLS, sgmltools, FAIL) if test "$SGMLTOOLS" = "FAIL"; then AC_MSG_RESULT( ******************************************************************* ) AC_MSG_RESULT( *** Cannot find sgmltools to build docs. skipping building docs *** ) AC_MSG_RESULT( *** Visit http://sgmltools-lite.sourceforge.net and install it. *** ) AC_MSG_RESULT( ******************************************************************* ) else DOCS_TARGET="simple" fi fi AC_SUBST(DOCS_TARGET) dnl ************************************************************** dnl Handle Profiling Target dnl ************************************************************** # Compile with profiling, to find bottlenecks AC_ARG_WITH(profiling, [ --with-profiling Compile with profiling support], [# Does it work for other compilers then GCC? [pere 2000-12-30] if test "${ac_cv_prog_gcc}" = "yes"; then CFLAGS="${CFLAGS} -pg -a" LDFLAGS="${LDFLAGS} -pg -a" # Make sure 'config.h' is changed if profiling is turned on, to # trigger recompile for every source file. AC_DEFINE(PROFILING, 1, [Profiling enabled?]) else echo "Do not know how to perform profiling using this compiler!" fi ] ) dnl ************************************************************** dnl Check for Standard Headers/Structures/Libraries dnl ************************************************************** echo Looking for header files AC_CHECK_HEADERS( getopt.h dirent.h pwd.h locale.h windows.h ) AC_CHECK_HEADERS( wchar.h wctype.h ) AC_CHECK_HEADERS( math.h ) AC_CHECK_HEADERS( ncurses/curses.h ncursesw/curses.h ) echo Looking for library functions AC_CHECK_FUNCS( _vsnprintf heapwalk _heapwalk getpwuid setlocale ) AC_CHECK_FUNCS( wcscoll towlower towupper iswspace iswalpha) AC_CHECK_LIB( m, sin ) AC_CHECK_LIB( m, cos ) AC_CHECK_LIB( m, tan ) AC_CHECK_LIB( m, asin ) AC_CHECK_LIB( m, acos ) AC_CHECK_LIB( m, atan ) echo Looking for curses-compatible screen output library AC_CHECK_LIB(ncursesw, tparm) if test "$ac_cv_lib_ncursesw_tparm" = "yes"; then echo Using ncursesw else AC_CHECK_LIB(ncurses, tparm) if test "$ac_cv_lib_ncurses_tparm" = "yes"; then echo Using ncurses else echo Looking for curses AC_CHECK_LIB(curses, main) if test "$ac_cv_lib_curses_main" = "yes"; then echo Using curses else case $host in *mingw32*) echo "Didn't find an up-to-date ncurses or curses library!" echo "Using LifeLines version of curses for Windows." ;; *) echo "Didn't find an up-to-date ncurses or curses library!" echo "Link problems may result!" ;; esac fi fi fi dnl Check for replacement functions AC_REPLACE_FUNCS( sleep scandir alphasort getopt snprintf vsnprintf ) AC_REPLACE_FUNCS( nl_langinfo wcslen has_key ) AC_REPLACE_FUNCS( _llnull ) dnl ************************************************************** dnl Platform/Version-Specific Checks dnl ************************************************************** echo Looking for header files and libraries to support heap walking dnl We need to cheat on OSX/Darwin. The standard configure dnl check brings in a C++ header which bombs and causes dnl configure to display a particularly nasty warning, which dnl we don't want to expose to end-users. case $host in *apple-darwin*) HAVE_ALLOC_H=no HAVE_MALLOC_H=no HAVE_HEAPWALK=no HAVE__HEAPWALK=no ;; *) AC_CHECK_HEADERS( alloc.h malloc.h ) AC_CHECK_FUNCS( heapwalk _heapwalk ) ;; esac dnl ngettext function missing from 0.10.35 echo Looking for ngettext saved_libs="$LIBS" LIBS="$LIBS $LIBINTL" AC_TRY_LINK([#include ], [ngettext("","",0);], ac_cv_func_ngettext=yes, ac_cv_func_ngettext=no) if test "$ac_cv_func_ngettext" = yes; then echo "found ngettext" AC_DEFINE(HAVE_NGETTEXT, 1, [Define if you have the ngettext() function.]) else echo "couldn't find ngettext" LIBS="$saved_libs" fi case $host_os in *windows*) AC_DEFINE(LINES_CONFIG_FILE,"lines.cfg",[lifelines configuration file]) ;; *) AC_DEFINE(LINES_CONFIG_FILE,".linesrc",[lifelines configuration file]) ;; esac dnl bind_textdomain_codeset function missing from 0.10.35 echo Looking for bind_textdomain_codeset saved_libs="$LIBS" LIBS="$LIBS $LIBINTL" AC_TRY_LINK([#include ], [bind_textdomain_codeset("","");], ac_cv_func_bind_textdomain_codeset=yes, ac_cv_func_bind_textdomain_codeset=no) if test "$ac_cv_func_bind_textdomain_codeset" = yes; then echo "found bind_textdomain_codeset" AC_DEFINE(HAVE_BIND_TEXTDOMAIN_CODESET, 1, [Define if you have the bind_textdomain_codeset() function.]) else echo "couldn't find bind_textdomain_codeset" LIBS="$saved_libs" fi dnl ************************************************************** dnl Build Makefiles dnl ************************************************************** AC_OUTPUT(Makefile \ src/Makefile \ src/arch/Makefile \ src/btree/Makefile \ src/interp/Makefile \ src/gedlib/Makefile \ src/stdlib/Makefile \ src/liflines/Makefile \ src/tools/Makefile \ src/ui/Makefile \ src/hdrs/Makefile \ src/hdrs/win32/Makefile \ docs/Makefile \ reports/Makefile \ reports/st/Makefile \ tt/Makefile \ win32/Makefile \ build/Makefile \ intl/Makefile \ po/Makefile.in) lifelines-3.0.61/COPYING0000700002540200244210000000004707162416604015003 0ustar prappDomain UsersSee the file LICENSE in this directory.lifelines-3.0.61/docs/0000700002540200244210000000000010657071736014702 5ustar prappDomain Userslifelines-3.0.61/docs/btedit.10000700002540200244210000000150710655637143016243 0ustar prappDomain Users.TH btedit 1 "2007 Aug" "Lifelines 3.0.61" .SH NAME btedit \- Direct editing of BTREE records .SH SYNOPSIS .B btedit .br .SH DESCRIPTION This manual page documents briefly the .B btedit command. .PP The btedit program is a companion program of the .I Lifelines genealogy software but may be used with any BTREE database (as long as it uses the same binary arrangement as the lifelines databases). .PP Only pure ASCII records may be edited with btedit. .PP .SH OPTIONS This program does not use command-line options. .PP .SH PARAMETERS Two parameters are required with the command : .TP .BI btree directory containing the btree database .TP .BI rkey key of the edited record .PP .SH AUTHOR This manual page was written by Christian Perrier , for the Debian GNU/Linux system (but may be used by others). lifelines-3.0.61/docs/dbverify.10000700002540200244210000000215010655637144016576 0ustar prappDomain Users.TH dbverify 1 "2007 Aug" "Lifelines 3.0.61" .SH NAME dbverify \- Check a Lifelines database .SH SYNOPSIS .B dbverify [ .I options ] .I file .br .SH DESCRIPTION This manual page documents briefly the .B dbverify command. .PP The dbverify program is a companion program of the .I Lifelines genealogy software, and is used to check an existing lifelines database for errors. .PP .SH OPTIONS .PP .TP .BI \-a Perform all checks (does not include fixes) .TP .BI \-g Check for ghosts (names/refns) .TP .BI \-G Check for & fix ghosts (names/refns) .TP .BI \-i Check individuals .TP .BI \-f Check families .TP .BI \-F Alter any bad family lineage pointers (to _badptr) .TP .BI \-h command-line help .TP .BI \-s Check sours .TP .BI \-e Check events .TP .BI \-x Check others .TP .BI \-l Check database structure .TP .BI \-m Check for records missing data entries .TP .BI \-M Fix records missing data entries .TP .BI \-D Fix bad delete entries .TP .BI \-n Noisy (echo every record processed) .SH AUTHOR This manual page was written by Christian Perrier , for the Debian GNU/Linux system (but may be used by others). lifelines-3.0.61/docs/lifelines.vim0000700002540200244210000001500710354671664017377 0ustar prappDomain Users" Vim syntax file " Language: LifeLines (v 3.0.50) http://lifelines.sourceforge.net " Maintainer: Patrick Texier " Location: http://www.genindre.org/ftp/lifelines/lifelines.vim " Last Change: 2005 Dec 22. " option to highlight error obsolete statements " add the following line to your .vimrc file or here : " (level2 is for baptism) " let lifelines_deprecated=1 " let lifelines_deprecated_level2=1 " For version 5.x: Clear all syntax items " For version 6.x: Quit when a syntax file was already loaded if version < 600 syntax clear elseif exists("b:current_syntax") finish endif " A bunch of useful lifelines keywords 3.0.50 syn keyword lifelinesStatement set syn keyword lifelinesUser getindi geindiset getfam getint getstr choosechild syn keyword lifelinesUser chooseindi choosespouse choosesubset menuchoose syn keyword lifelinesUser choosefam syn keyword lifelinesProc proc func return call syn keyword lifelinesInclude include syn keyword lifelinesDef global syn keyword lifelinesConditional if else elsif switch syn keyword lifelinesRepeat continue break while syn keyword lifelinesLogical and or not eq ne lt gt le ge strcmp eqstr nestr syn keyword lifelinesArithm add sub mul div mod exp neg incr decr syn keyword lifelinesArithm cos sin tan arccos arcsin arctan syn keyword lifelinesArithm deg2dms dms2deg spdist syn keyword lifelinesIndi name fullname surname givens trimname birth syn keyword lifelinesIndi death burial syn keyword lifelinesIndi father mother nextsib prevsib sex male female syn keyword lifelinesIndi pn nspouses nfamilies parents title key syn keyword lifelinesIndi soundex inode root indi firstindi nextindi syn keyword lifelinesIndi previndi spouses families forindi indiset syn keyword lifelinesIndi addtoset deletefromset union intersect syn keyword lifelinesIndi difference parentset childset spouseset siblingset syn keyword lifelinesIndi ancestorset descendentset descendantset uniqueset syn keyword lifelinesIndi namesort keysort valuesort genindiset getindiset syn keyword lifelinesIndi forindiset lastindi writeindi syn keyword lifelinesIndi inset syn keyword lifelinesFam marriage husband wife nchildren firstchild syn keyword lifelinesFam lastchild fnode fam firstfam nextfam lastfam syn keyword lifelinesFam prevfam children forfam writefam syn keyword lifelinesFam fathers mothers Parents syn keyword lifelinesList list empty length enqueue dequeue requeue syn keyword lifelinesList push pop setel getel forlist inlist dup clear syn keyword lifelinesTable table insert lookup syn keyword lifelinesGedcom xref tag value parent child sibling savenode syn keyword lifelinesGedcom fornodes traverse createnode addnode syn keyword lifelinesGedcom detachnode foreven fornotes forothr forsour syn keyword lifelinesGedcom reference dereference getrecord syn keyword lifelinesFunct date place year long short gettoday dayformat syn keyword lifelinesFunct monthformat dateformat extractdate eraformat syn keyword lifelinesFunct complexdate complexformat complexpic datepic syn keyword lifelinesFunct extractnames extractplaces extracttokens lower syn keyword lifelinesFunct yearformat syn keyword lifelinesFunct upper capitalize trim rjustify syn keyword lifelinesFunct concat strconcat strlen substring index syn keyword lifelinesFunct titlecase gettext syn keyword lifelinesFunct d card ord alpha roman strsoundex strtoint syn keyword lifelinesFunct atoi linemode pagemod col row pos pageout nl syn keyword lifelinesFunct sp qt newfile outfile copyfile print lock unlock test syn keyword lifelinesFunct database version system stddate program syn keyword lifelinesFunct pvalue pagemode level extractdatestr debug syn keyword lifelinesFunct f float int free getcol getproperty heapused syn keyword lifelinesFunct sort rsort syn keyword lifelinesFunct deleteel syn keyword lifelinesFunct bytecode convertcode setlocale " option to highlight error obsolete statements " please read ll-reportmanual if exists("lifelines_deprecated") syn keyword lifelinesError getintmsg getindimsg getstrmsg syn keyword lifelinesError gengedcom gengedcomstrong gengedcomweak deletenode syn keyword lifelinesError save strsave syn keyword lifelinesError lengthset else syn keyword lifelinesUser getintmsg getindimsg getstrmsg syn keyword lifelinesGedcom gengedcom gengedcomstrong gengedcomweak deletenode syn keyword lifelinesFunct save strsave syn keyword lifelinesIndi lengthset endif if exists("lifelines_deprecated_level2") syn keyword lifelinesError baptism else syn keyword lifelinesIndi baptism endif syn region lifelinesString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=lifelinesSpecial syn match lifelinesSpecial "\\\(\\\|\(n\|t\)\)" contained syn region lifelinesComment start="/\*" end="\*/" " integers syn match lifelinesNumber "-\=\<\d\+\>" "floats, with dot syn match lifelinesNumber "-\=\<\d\+\.\d*\>" "floats, starting with a dot syn match lifelinesNumber "-\=\.\d\+\>" "catch errors caused by wrong parenthesis "adapted from original c.vim written by Bram Moolenaar syn cluster lifelinesParenGroup contains=lifelinesParenError syn region lifelinesParen transparent start='(' end=')' contains=ALLBUT,@lifelinesParenGroup syn match lifelinesParenError ")" syn match lifelinesErrInParen contained "[{}]" " Define the default highlighting. " For version 5.7 and earlier: only when not done already " For version 5.8 and later: only when an item doesn't have highlighting yet if version >= 508 || !exists("did_lifelines_syn_inits") if version < 508 let did_lifelines_syn_inits = 1 command -nargs=+ HiLink hi link else command -nargs=+ HiLink hi def link endif HiLink lifelinesConditional Conditional HiLink lifelinesArithm Operator HiLink lifelinesLogical Conditional HiLink lifelinesInclude Include HiLink lifelinesComment Comment HiLink lifelinesStatement Statement HiLink lifelinesUser Statement HiLink lifelinesFunct Statement HiLink lifelinesTable Statement HiLink lifelinesGedcom Statement HiLink lifelinesList Statement HiLink lifelinesRepeat Repeat HiLink lifelinesFam Statement HiLink lifelinesIndi Statement HiLink lifelinesProc Statement HiLink lifelinesDef Statement HiLink lifelinesString String HiLink lifelinesSpecial Special HiLink lifelinesNumber Number HiLink lifelinesParenError Error HiLink lifelinesErrInParen Error HiLink lifelinesError Error delcommand HiLink endif let b:current_syntax = "lifelines" " vim: ts=4 lifelines-3.0.61/docs/listops.jpg0000700002540200244210000023240110565726616017110 0ustar prappDomain UsersÿØÿàJFIFÿÛCÿÛCÿÀ 0"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?þþ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®~çÅž³ñVà[Ïx~ׯÞ#ðÿ‰¼Yáï\ë:t*×|+à½GÂz?Œ|M£xz[•ÕõOøOWñït¿k66séÚ£ãO Øê—6·>#Ñâ¼è(¢Š(¢Š(¢Š(¢Š(¢¼ÿá?Å/|qøYðÓã_ÂÝwþ†_>ø7â—ïfk'ü$^øáÍ7Åž×±¼E§é Ò?µü?«éú‡öf»¥išÅ‡Ú>Ë©éöW±Om PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEçÿ|ÿ £ágÄ¿Š_ð…|@ø•ÿ ×áÿŒ¼ÿ ëá?‡?á1ø§ãïøC¼9©x‹þ¯†žûnÿ WÄgax7ßÚÛž#¿Ót϶Úý«Ï@áöñÿ‚̲ÿƒ«ÿfϱüEû'ìËû,ÿÂ'û |Vû/í5ý…ð&÷þ"Ý¿á >(üBò­áÿƒ?áF|@ø…àø\^ ñö—Û|cûx?þ_x;Zð΋ÿ Ëûü¯ñ&øÃû ÿÁW¾2ü}ñ—Œ~.þ¿¶þ½ûAþÐ~ ø±ñûĶw?±çÆø«Çúç4MSâÿÄ-ÀºÃÙ±§xŸ@Ô5sÃWþ?ø!¡ü`ýž¯æ‡Bøýðkþ ¡ÿÞÿ‚ƒ_~Ú?¼?ð;áßüSàÿìwñcöXøçã™§ð—À&ÔcO„0ø7ñ—à÷ÄŸŒ>0·ðç‚|ñ‚ ›­3ÇZˆº¦¯áY¼â/Ùëž2Ð>"|Dø}à|ÁûþÞú?íÿüqøñ¯àßÄ؃ſ²oüÄ¿ ?kþÒ×4½á7Žþ~Öÿ>2|Dñ.ñCGñ%ׄ¼cû?ØxKâV•â|uÔÁš?ü í|?£øKVÒonþŸñÏü¿öŸÓü+ñ'ö­øSÿký§þ*Á0¾xƒCÔoÿlýKâw‡þ|LñÏÀ'Ó¼®x£ö™øIûüFø{¥üVñïÁôð·‹.<{à?Gâ='Á~!ø{¦É⟈ž1ø:º7Ä«†Ÿ|`ø×á_ø*üßþ KáØ»OñÅKoÿÁ´?¶'ì“ðgÇZéÞøgûGüLÚoSð“ø‡àÄ?êº_…¼{ð}~+x³Sø3oñµ'áî«ñ áçÄ'ÐõÝSÁ:6ã=gäØñÿàš:ìàOþÒ_ðp/ü{öø­û=xÂÿhŸØÃRý¹µo…¿>üeøjžøgã/‡¿ ?d-à÷>2]|ðç‰'†/ÃàxÂ|=¶“GøqáOü9ø¡áï_¿ÿà¬ÿ°gÀߨ3Oÿ‚‘k¿|?â¯ÙsÅ^µÔ¾x‡ÀÅ5O|fñV¨š¬Z/ÂO†ÞÕ¦Ðu{ÏŒš¾ƒ¯è:瀼J¾Ô~j>ñµÏÅù>h> ëüøïÿ~Óÿ±§ì¿ª~Ñ?·güããì±sãÏøRý“¼=­þѾñ÷…~8ø«Ä ð´¾5øIñcÆ> ø3sâŸÙã†þø“Vø»àß|røYe¨üDÓ¾üaðd²x;ÆÞþÇÕüö•ý•tÙWþ•ÿ½øðGà¿íáÿ€¿ðLOÛÿötÿ‚“üLøûKèÖ?nÈ?g |pø¿ã¿Š «x#àÀ—ᕇÄÙ|q‰×þñoˆ>Úü3ø; kÍñ—ZðW޼â9ÿø8Ëþ Ïû~Ñ¿ðGO‹ßÿf޾ý§|mûEøàwŽlt¿€Å<?Á/†~ý gïjŸj{9­õÙ¯Ãójú—þézÅ­7õ?Œ¿|)à;OÉsaã«Ï€CßðÜÿñ´ßøvü*ïù°ønø]_ð›ÕÅ‚ÿ…]ÿ ãþû›?á6ÿ„óþ _ðˆÿÌf¹ÿÁDü+à/ø)'‰¿`¿xOÃþ ðO‚ÿàœÏüOÆ?´ß‹>'éÞð¯„ü+áÏ7?¼Cá?xgXðÕž‘ øBÒ,ï> k?õO‰ºv—§ZÜé÷Þ‚Ú uåüÀý£~?|ýàå…_ÿj_ˆ^ýŸ¾ ülÿ‚0ø“àÃ/ŒÿæŸÀÿ¼Iñ—Áÿ¶EÿÆ|=“âνogðïAñƒðîÎ×]Ô¡ñ'‰tx-§ñ/€ô¸$øà-#ÄŸ|`ø×á_ø*üßþ KáØ»OñÅKoÿÁ´?¶'ì“ðgÇZéÞøgûGüLÚoSð“ø‡àÄ?êº_…¼{ð}~+x³Sø3oñµ'áî«ñ áçÄ'ÐõÝSÁ:6ã=dïÿÿÁ{ÿiý?¿jß…?ðF¿Úâ§ü ᇈ4=FÿöÏÔ¾'xá'ÄÏü};Á:çŠ?iŸ„Ÿ±ŸÄo‡º_ÅoüO x²ãǾñ„~#Ò|⇺lž)ø‰ãƒ«£|J°øi÷ÿÇÏø+/Á¯|ÿ‚tþг凇ÿj?ƒðQOÛöký| 㯠øòéÞÓ¿h9üscyñ"æÎûÁ^!Õõ|4Õü ¨øwÅŸ¶Ó-üc£ÝxÃÀ_ |YáëŒ÷·þ èûöúý¹ÿá‡?áŠÿâ×ÂÐÿ†Àý¿ÿgØcþGoøB¿á]ÿÃ@ÂeÿGþEÿÂ[ÿ—ü"_ò$ÿÅ3ý½ý¡ÿ#v‹öOôŸýµ¿à©;ø1ñÛ@ýÿaoØÓâüöº·þÊ×~6ü5øwñGø?ð³ö]ð'ˆüâ¿øPý¢ÿhïx_Å? ¾ü@ø­eákëß„_ |g.‡¬x×ÖWÚôºž‰6¹ð£Hø©ùAÿŠÿ‚ŠþÈÿ´ÏÇßø#7ìùû1üXðÿí)«økþ =ÿîøÉñâÀ=WDø±ð ánqãO‰Þ ð?€~!|hðf¯«x'FøÁñRåümâ/‡ß í5KÅW~ øOñÅ~"²ðÖ‘„§ñw̵ÁÏ…žÿ‚ø~Ü?ðÛß·Wíÿÿ¬øeûq|?ýš|û ~ѳWí9áÏÙcöqý ÿáœ?g|;øÕà¯ßoô¿xLøðÿÄ7ü+oxãþ/ì›]S^þѽ´½øÑð6ÇâXô;ÿâÿ‚©xWöáñWÆßÙÏâïÁï~ÆŸ·ïìÅâ OMý bψþ,Ó¼]â¯øTê6‘øSâßÃiú7†´ŒÿüO¤k~¸oøWC¶Ó´­GÄž˜Çà|øñOõ~¿˜/ø#¿Á_ØwWý¾¾>þÑ¿²oíyÿ?ÿ‚øƒágìÿ®þÉ?ý³k/ŠþøÑû,iW|E´ñ%Çá ø©à¨uéö€ (¢€>øÿ)MýÿìÀ?य़úÑ_ðIÚûþ¾øÿ)MýÿìÀ?य़úÑ_ðIÚûþ€ (¢€ (¢€ (¢€ (¢€>ÿ‚NÿÊ,¿àšö`±¿þ³¯Ãšûþ¾ÿ‚NÿÊ,¿àšö`±¿þ³¯Ãšûþ€ üÿ‚õ~Ô¿bïø$÷íYûKþÍ9ÿ…kñ·á¯ü(ÏøB¼kÿσ¼cý‹ÿ í'ðwÀ#ÿŠsÇþñW„µí x«^Òâm ßýíÿo°û.§ke{oúý_ˆ?ðqçÂŠàŒ¶OÂß‚Ÿ > |`ø›âøgŸøF~|-ðoˆþ xïÄ_ØŸµ_Àßk?Ø^𞛫øƒWþÈðþ‘ªëºŸö~Ÿqö LÔ5;¯*ÊÊæx€>øÿûRÿÁA?à“_³Žµñ¯öÞý¯gÿÚãoí§û@~Ï¿³ìÍàOà÷†?eߨwö øÙñz×⮿ã câ—Ç-;[½øÛñ7ö@øe¦Y6¡¨xßÇTu/ |"Эu<'©üIñŽüùƒ­ÿÁZk¿ø&Ïü(¿Ú_ã§ü—öÿ‚Ê|¿þÈðoí™û&þÎúŸìQð×ã·ÁøLÿá·‹âÇì¥wðËÄ^ñoí/ÿ óŧWÒoôßè>þÝðuÕ½þ·ðÓÁÚgˆ|Eñ{öqýÞÿ‚èþÁ¿o?ÙáÆ—û>h¿üñ“öXý§þþÙ~øñûÃÐxƒà×í;¨üÑøÛöÇñµm©øÛÁÿ ü'iâßÙ—ÅWÞ _øïÄZ6—ðî/Š@>ÿý¦ÿi¿ø(¯í¯ÿø¥ÿÝÿ‚nüRðÿìAàŸØƒÃÿ üwûoþÛþ;øgð¿ãߊµ/|{ø_y㟀¿~üñÍåæ‘¯x^Ò/^ñ¿õæð¾££á}~ÚÛ_ðe·ƒ<;áßÚsŸýŠj?ø)þ—ÿ¡×ÿà·Ž~ø«áÿÂø&«ñƒÃž5øiáŸh~ý¬¼G§~Õ¾ð‚¿lMKÖ^“âÀˆ#ø¯êŸ þ,~Ï‘øßQøY£üSðŒ¼qð×L“áÿмy ûI\~ÑßðJïø)ÿÆÏÛËáoìuû@~Ü_²/ü›áÿÀïþÔZ'ì¹á‹¯Œ_µ?ìýûG~Ëñǃ~ø‹Àß´»? Ùj³ÿĆRéú/‰§×uýRëNø‹ÿ ˆu?ˆ¾†Óá¯ÂŒžûü`ý£¾?ÿÁÈúÿÆOÚà/ü3%—Äø"«®þÏðOíão[xÓÇÞ!ø[ákÝF×ჼQào…þ+Ôõ?‰¾ñæ¡rúÿˆý¨þ;~Ôðóïø^ž9ÿ„ãþßþ ÿûjþËŸâ™ðw†áøð“þ§ü+ïÅáïÿÂAÿÿü$¿üTÞ)þÛñŽ«ö¿øø‡Rû=¯“ù¦ÿÁk¾;|ýœà þ?ø·â‡ÿ>&ÛÿÁ¿hŸø%Oìeâ?’x;àÿìãð Ã’ÚønóáG‰?ißøEðïˆ"ýŸþx~ÃǾ5ø…âøìüQñOÅV¶VžÔ¼W¢YjsxÿÁgìõñ£öÉÿ‚M~ÑßðRÿÙ¿Yÿ‚_þ×ÿµíïí‘ûüný¹ÿcÏ?²¦‡câ¿ÙÇÆ?ðÖwVZW†>~ÑŸüQ† ð„´Àï|«ë_³ÇM_Å8³ø_ã?ßOá_èš—|gâßiÞ#ñ/ÄŸtßü§ö»ÿ‚lÿ‹ý¥þ:Ái`ø,§Á+ÿìþÙŸ²oìï©þÅ ~;|ÿ„Ïþkx¾,~ÊW ¼Eá¿þÒÿð¯ -žÿ WÃÿghÞ ·×-¼_¢èþºßx³[Ðõ«†>øÀì´/ü;âgì×ÿwøáð×Ç^*ñ­ûüÿ‚üKÿ‚‡xÇá„üðöûÅZ—ÄÏ…´Þµ x‡Å^ñ.±i ø¦óÄŸ t+Ï èÞÕ>#hßn5-¯ï­4íEå×aüa½ÿ‚•ÿÁC¾2ü,ñ'íÓðëþ µÿ€øâßÿÂñÇà/üZñ¿ì•¯ør…’xsÀ-´ýœ¿hÚƒã«ð£ão€h sLx3â¶›ŽƒáÈ>)Ç,^ø¯ð#Â^#†_ƒ^ÿᯂ·üþ ›ûZüAý¡ÿf/ˆ±gÀ_Û#þñçöPýžüYâo‡¾-ñ_ˆþxâïíàM7ö£¹[½#á–‘û_êöZ¿>>x‡ö`ð·Ä+McáÇÂÍwÀßè~É_´Ø‹öˆÿƒW$ð©ÑµÍcÂ~Õõ ï éo×̱Áï|ý—þ|(ñ׃f‡ž6ðׇïn|càØ¿á>£ðOö_𷊼Oâ cž!Ѿ|<Ö5½wW³ðýž¯¯^G{âmRãKÔ~!ø€k/¼'à{ŸKàÍéú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Çþ5þÏ_¿iO éþý£>|øýà'ľ,Òüñ¯á§‚þ*xWMñUŽªèö>&Óü=ã­^Ò,üAg¤kºæ—k¬ÛÙǨÛéÚΫc Ê[j7‘MìPøOözøà/xgÇ^øðÁ~6ð_ÁýözðwŒ|'ðÓÁ~ñW„þxsQ¶Ö<=ð;Ã>!Ñô[=_Aø?¡jövz¦ðÓK¼µð^—¨ÚÛ_Xè°\Á«Àx›ö"ý‹üiñ–ÛöŒñì‰û0x³öƒ³ñ„üYgñÛÄß¾ëßm|Uà(4k_øšÛâ~©á;¯AâÛxsÃÖþÖb×Qðäsg—b°}?Eøÿwÿ‚Uø;Æ?ðIïÛWöhÿ‚hþƳÿ€~6þÐ_ðÎ?ñE| ðÀŸÙÏþWü*ÚOá§ÿâ©ñφ¾¿ÿ„;ÂV¾<Õ´OøK5äû/Û5{ v§®}Šÿ÷úŠñÿ³×À/ÚSºhÏßþ?x'Iñ¯‹4¿|køi࿊žÓ|Uc§jº=‰´ÿxëE×´‹?Yéî¹¥Úë6öqê6úv³ªØÃr–ÚäSýž¾x Å^ñ×~|ð_¼ðFýž¼ã ü4ð_‡ñf§x¾,ð¯ˆôëÄ>ñ7‡µ‹kÍ#^ðþ»¤^^izΪYÝiÚ¦usc}m=´òÄÝó„ÿb/Ø¿À^ðÏ| û"~Ì ðO‚þ0hß´/ƒ¼á?€_ |9á_ ü}ðæm£ø{ã†|=£øNÏHÐ~0hZEž—£|KÒìí|i¥éÖ¶Ö6:ÔÐE÷ÿÿg¯€_´§…tÿþÑŸ¾ü~ðN“â _i~ø×ðÓÁ<+¦øªÇNÕt{iþñÖ‹¯i~ ³Ò5ÝsKµÖmìãÔmôígU±†å-µȦö (Ïþü'øYð;ÀšÂß‚Ÿ >üøeáí?øF~|-ðo‡>øÿÛzÆ¡â-gû Â>ÓtéÚþ Õõ]wSþÏÓíþ߬jz†§uæÞÞÜÏ/ QEQE|ñþR›ûÿÙ€ÁK?õ¢¿à“µ÷ý|ñþR›ûÿÙ€ÁK?õ¢¿à“µ÷ýQEQEQEQ_Ìüoþø§ÿwý£¼)ðwÅŸðOoø]_ ¾'ü?²ñÿÂOŽší)â?‡z?‹>Çtú'|©é—ì¯âéŸ>ø‚+k­wÞø…㟲øÆ_ |a¬Þè7¾=ÂÚ0ë÷üwþQeÿÓÿ³ýÿõ~×ßõüÁ´ð\ïøn?øTÿðMøeßøUÿðÇÿ°?âõÂíÿ„×þ'ü3ÿü(€_òN?áQøKþ/øKá-ÿ„³þGÏ`ÿgÿaÄëíÛ6ß×íQEQEðü0Çüm7þ]ÿ Gþlþcþ¯ü!?õq_ð¿áhÿÂÇÿ„»þå?øBáÿ¨ïü%ßó¯¿è Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( €>#ÊScû0ø)gþ´Wüv¾ÿ¯ øýðâ_ÁOꞺӬ|U¦øWâ§‚õ¯ø‡PðÍö±¥kÚEŸˆ,ôvòãFºÕ4=gN·Ôc¶šûJÔm’[9€?’/ø2£öhÿ…ûþÓµ«¤ü@ѼAûHþÐW€4oøH¬?³¼ â…Ÿ³¯„¿â™ñ¯Ã¯´è6WºßÚ>&ü`ø×àoxŽ×Ä:ï‡%Ö>Áá>ËDñ„üYý§ýž×ÄðMÙNý‚ÿ`ÏÙWöG³²ðýž¯ðcàÿ†´oˆ2øO^ñW‰|+­|e×Roürñg†uÅkâIü?ãOŒž#ñ׋´kkí3BƒMÓµ»m3Kðφ4‹;iŸoÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_Á4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿ_Á4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿEP_œðU øWÇ¿²_‡¼ 㯠øÆž ñ§í¿ÿ¶ðŸŒ|âÍNñ…|Yá_ÿÁO?cýÄ>ñ7‡µ‹kÍ#^ðþ½¤^^izΪYÝiÚ¦usc}m=´òÄߣõðü³þM×áÏýŸÿüwÿ^›ûÐÿÿ‚YÒ4ÿ`üCÙ×ÿÍðéßø%—ý#OöÿÄ7ýùÜ×ßôPÀðéßø%—ý#OöÿÄ7ýùÜÑÿÿ‚YÒ4ÿ`üCÙ×ÿÍ}ÿE|ÿÿ‚YÒ4ÿ`üCÙ×ÿÍðéßø%—ý#OöÿÄ7ýùÜ×ßôPÀðéßø%—ý#OöÿÄ7ýùÜÑÿÿ‚YÒ4ÿ`üCÙ×ÿÍ}ÿE|ÿÿ‚YÒ4ÿ`üCÙ×ÿÍðéßø%—ý#OöÿÄ7ýùÜ×ßôPÀðéßø%—ý#OöÿÄ7ýùÜÑÿÿ‚YÒ4ÿ`üCÙ×ÿÍ}ÿE|ÿÿ‚YÒ4ÿ`üCÙ×ÿÍðéßø%—ý#OöÿÄ7ýùÜ×ßôPÀðéßø%—ý#OöÿÄ7ýùÜÑÿÿ‚YÒ4ÿ`üCÙ×ÿÍ}ÿE|ÿÿ‚YÒ4ÿ`üCÙ×ÿÍðéßø%—ý#OöÿÄ7ýùÜ×ßôPâíµÿöý~|0ø9ñKà§ì=û |ø›áÛÿþ aÿÏÄ_…¿³OÁ‡þ;ðïößü×öGðî³ý…âï ø+Hñ‘ý¯áý_Uе?ìýBßíú>§¨i—^m•íÌþßWÀðRÏù7_‡?öÿðIßýzoìo_ÐEPEPEPE~p~ÈðW¯ø&íߨÙx{öZý±þüCñ¶­â {Ã:ÂígRÕ¾üeñ6£á Åãm~çÂþ/é>ø­âÏé~k­bçÅžðv©áQâh“Y{Ÿ ø– +ô~€ (¢€ (®Åž,𯀼+âoxëÄÞð_‚|áýgÅž1ñ‹5;ÞðŸ…|9§\ë!ñ7‰¼C¬\Ùé‡ô-"ÎóTÖuRò×NÒôë[›ëë˜- –Uè(¯ç‡@ÿƒ˜`Íc¾7ø­«| ý·þ~ÍÚ_‡þ9j_k_Š?³š|<ý˜?kO|Ó¼w­?ÂOÙ¿â߉üqa¤jß>+i > ÉðÀ_íþj>&ñ…u‡zÔžø£6à‹ï¯þ?ÿÁd¿dÙËöGý“¿ké¿ñ±øƒãïÚó¶>7†Ûà‡þ+øÛâ çÅx¾(j’xçÅ^0ø5á;+‹ëÔð·ÃOxWFþ·h¯ç‡Ç?ðsìá|I¼Ð¾~Ûÿ¿eσŸ4?‚Ÿÿà¡¿?g4øûx'ÅZ–£àZÔ5ºOŽWÕ6KÍ+TøA¥|JÐücðûTñ Á´/мÿ9ý¨ÿhÏÙkãˆ<'«Þxö`ñgŸŽß~%ê:£uá_þÓ_-müMð÷âýjÖæøÓÁ>#º·‡YðÞ¸Úwˆü+®ÜB—7šF©"Îû½EøƒÅж·üKâ·ìÑ¡|Køð»öRÿ‚Q|?ýŸþ%ücðW€ øÿà?À‡Þ Ñ?i/ø(_þ ‚þ/þ>xsIñ†ƒ¤^x‚óHЯ¥ø‡â›?ÜÏã_Z|BÖ< ¥ø›Ã~ø“­ø0÷zŠüAøWÿãýœ~/xöž¹ðÏì½ûØ~Ó_²oü+ýOâ?ü·Ä_³m®—ÿ×< ñ+Xøw£øâ—ïÙé~ ]ÂcðþÃþV¬ø»P¶ñe®±à C‰¼Y¡hú/Œ~Þøóåÿø6÷þ uñ—ö×ý•~|<ý þ~Ûþ*øÈžý£¾2xëöáø±ðn öGøÃ¨êŸµwŒ Ÿ€~|d±×—HÕ|ð/Á„÷°xcN±Ô|o>£=ç¾0üQ¾Ñ|K¤|ø?á#DÔbÖþ(x‡ÃÚ‡…tjž ÑüW{á_ ëú§¼2öýøÿøüXý©þ+ü,ÿ‚”ÃbüKÿ…•ñ·á¯üÿöÆøO®ÿbøËâ/Œ~xþï|þÓøiû?ÿÂÒÔµøWöð¯‹uÿ©ðmçØ?°ü9Ú4Û]NëPßèüXø§ûÿÁd¾þÍïÄ¿ˆe/ø*ïÃÿÚâ_ÁÏxÿÆ^#ø±ãÙ¿öÉýšt-ÇÿtßxÇ•–§ðËö@ø›ðJ÷LÕ¼9ðŸO×¾+XøCãµµí‡Âßüø[¨ê¶Z°íõQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|ÿÓÿ“uøÿgÿÿbÿצþÙ÷ý|ÿÓÿ“uøÿgÿÿbÿצþÙ÷ýQ@|ÿ,ÿ“uøsÿgÿÿÿצþÆõ÷ý|ÿ,ÿ“uøsÿgÿÿÿצþÆô÷ýQ@Q@Q@Q@Q@Q@Q@Q@Q@ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}ÿ_ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}ÿ@|ÿ çþ ›ÿG‘ûâ´ÿh¯þ›}ÿE|ÿ çþ ›ÿG‘ûâ´ÿh¯þ›ð®à©¿ôy°þ+OöŠÿé±WßôPÀð®à©¿ôy°þ+OöŠÿé±Qÿ çþ ›ÿG‘ûâ´ÿh¯þ›}ÿE…7ì¿ûþ×¶§ŠŸÁß²‡ìåñƒãæ¯gâøgÄ7Ÿ<­ëÞð.£ñQ¾Òüsñ;ÇQZ§‚~øY¹Òu™WÅŸüCáo ÙiÚˆ5KY³Ò4búËû½ÿ‚;ÿÁ1ÿàè_€:ƒí¾"~Ü>ý•?gÏ øƒÁþÕ¾þѾ*ÑnýF?†ü*n¾xgáWà ^ñ?‚~|ñUΩÂhß jÙ¿â…t«ýfÞØIàŸ…¨ÿs”P?á;oYøWÃ6~:Ö|?â?ZøF¶ñˆ|'áGÁ~×|UmˆuŸ ø;Xñgu øTÕÖòûFðΩã¯j:=¶—}âÏÜÚˬ^tQ@~0ÿÁþøËâÏø"ßüKøsâ _ZüÒ¼M®KáŸAà½E¾ x/â7‚k¾"ñf›ðêƒþ)Ôü'øá=/㵇íÅÿ:ƒá'íÛÿÊñí!ÿàþÅ¿³¿ÁïÚCÅß³ƒ¿ho|qø§£ø·Iñ¾·û)xv?‹i ´ˆ½–¯à/A'ˆ­|G°ß¾i¶÷> øÙàÝÄE÷ß>4ðwÅÝ7þ éÿ·þßÿ¿à ÿ¶ìÿûEü ñoŒ¾>øGÆ??eÙ·þKàOÄM7ã/Š~ üKøÝâ½Gà—…áÔõüðãDÓ>þÊ_ð›ü:ÖµŸ†žÕþ[øµ>ø›úݼÿ‚^~Ì?àžŸ³·ü§ö¸ðO‡ÿiÿ…?þþÏ¿"Õ5›|<Ôuo~ÏþÐ| £üNð÷ƒ¼^ž6øWâ fÛIÔâ¹_üAþÑO ø§ÄÞÕ,Ö4=OÕüaâ‹í_Ïþ2Á#?à_¿kþÝ¿ÿf뵇ÃO|/ñg…þ/èÞ4ø¡àmFO|Öìµÿ†^&ñg†¼ã x'âˆ<+s¥èºm¶³ñÃ>'Ôo¼+áï ø'V¹Ô<á­BÓ€?š/ØCáçíwñûþ ð{âÆ™ÿ&~Ïÿ ¿b_þÏÿ¿g‹ >2ÿÁ6¿b|,ýŸ>Åàü&ñì¥ñ»Æ_|cáÿøH?áÿ„ƒBøh—ÿ´Û/ø]>ñ„¼e§ÛøƒÃ_|5©k›ÿ¶OÀÿ†³§ü±ã…?~2øƒö…øS¦øág‹>|lñ7ÀŸˆ_³^£ñ'¿¿à¥žø©¤øšÛàçÅ9gñ·‡Ÿâ­OÅ^&ºÕ¾ÿý¨ÿeÏ?¶ÀŸþÍ´¿¿áe|ø•ÿÏü&¾ ÿ„›Æ>þÚÿ„;Æ>ñÿ‡?â£ðˆ|+âÝ;û;žÐuoø”ëÖlûØ/þÕ¦]^Ù\{ý~ÿÁÿç5öŸïø(ßþñºýþ¯Ä¾üSýŠà²_¿i} á§ÄŠ?²—üwáÿìÿðÓã|àßüXñìßûdþÍ:µà‚Ú—|9à}6ËSøeû |Mø%{©é>#ø±¨h?¬|!ñÚÚÎÿâ—Œ¾|-Ôt«ÝXóâŸüœWü­ÿfû*ÿ묾>W?ð»à?Á¯ŽpÁì?f?ø)Wˆ?àœßðX­þÃû,·…î-¾ÏñŸÂ¿´/ìK¨üy/þk? ~%j>øñÄø“¥øÛâW†|?iâ}WÇ>á|FñÃÙøáÏÄOƒÿÒö«û~ÉÚ߈ÿmoj ~Óâø(—Ãÿ ü-ý±uøN¾$Ãÿ ƒÀž øY¯üðÆ…ö[Åeðÿû3á—Š5ß ÿiü-¶ðN±{öïíCP»ñµž«oãÿ´7ü3þ ÕûVüýŸ?f?ÿ³?‡þ!üý•(h*øeá_ x/Lø}§xgFø§áOh?¯!ñf±¡èÚ~¯ã_jÿ \Á?à_³'…m¯‹¿²—ì áýsã'íû0~Ò_ücðgÂ~(|'ð¯Ç ü^Ó›Äþ!ýž<2úÇÄ)þþξøŸâÞѼQà/ ø;NøG§Ml|,|=á½6]8€~ÏQ_0~Ä_ |.ý”¿à”_ÿh†Ÿ|:🂿ký#Ä"ý¿ÿà–Ùú‡Å/ø'·íõð;À–ÿÙðS_Ù]ºþÝø¥ñ¯öiøðËÂþm–™s™ÿ 7‹´í½b]?ú7ÛüA«éZeïíõ|ÿ,ÿ“uøsÿgÿÿÿצþÆõ÷ýQEQEQEQEQEQEQEQ\ý·‹<+yâ­gÀ¶~&ðý×¼9áÿ ø³Ä>¶ÖtéüU¡xWÆš‹4x›YðôW-«é~ñf¯à/i~Öo¬àÓµíGÁ~,±Òîn®|9¬EfÐQEyÿÅ/‹ >x]ø¥ñ¯â_Ãÿƒÿ ¼/ý™ÿ 7Ä_Š^2ðçÃÿxwûoXÓü;£nø»Åš–‘áý#û_ľ•¡iŸÚ…¿ÛõOOÓ-|ÛÛÛh%ô (¯?ñÿÅ…Ÿ ?á ÿ…¥ñ/áÿÃ_øY_<9ðŸá×ü'þ2ð烿á>ø§ã¶ÿÂ#ðÓÁ_ð‘jZwü%_Á{ý™¦Ý}–}€Exý×í ð ÇQø×£ß|qø?g«þÍ~Ò¼YûEéw_üo¨üð®»á]CÇZ‰¾5ØÍ­%Ï¿ë> ÒuOéZÏŽ¢ÐtíGºn¡â;™´‹;‹ÈýÂ~,ð¯|+áŸxÄÞñ§‚|iáýÅžñ„õ;Ä~ñg…|G§[kñ7†|C£ÜÞi÷‡õÝ"òÏTѵ.òëNÕ4ë«kë™í§ŠVè(¢¹ÿ ø³Â¾4Ó®ux›Ãþ,Ò,üAâÏ ÞjžÖtí{NµñW€¼U¬øÇ^¹¾Òîn­ ñ‚ümáÏø;Åš4²®£áÏhZχµ‹k=_K¾³€ ¢ŠóÿŠ_>|ð&»ñKã_Ä¿‡ÿþx_û3þoˆ¿¼eáχþðïöÞ±§øwFþÝñw‹5-#ÃúGö¿ˆ5}+BÓ?´5 ·ëžŸ¦Zù··¶ÐJèWüý¡~~ÒžÔ'YËá/‚~6ðׇültmam¾x;ã'мO§Mâ´ß Ûêú6¥ø«ú>ýÿà¯_ðMÛ¿Q²ð÷ìµûcüø‡ãm[Ä÷†t/…ÚÎ¥«|+øËâmGËÆÚýÏ„þ ü_Ò|ñ[ÅžÒü,×ZÅÏ‹<7àíS¢ ÄÑ&²÷>ñ,Wðû!ÿÁœðRïZ–£ûRø«àÿìWà˜üA¯hÚíž³â-'ã÷ÆQ§YxV-S@ñg„ü ðƒ_¼øS¯x^ñM寅.m¼IûAøÅZ4w‰¼Dþ¾¶²ðÕŒ?©ïØÏþ *ÿ‚T~ÌŸðŽø›ã†¾ ~ÙÿtøVZìú¯ÇOI¤|,Ó¼wà_7Pñ¡áo‚Ÿ‡…ü?©ü?øâ a¹ÖþüzÖh|9¤i»Ôõ{+]x¸ú}¢¹ÿ øO¾ð¯†| à_ øÁ~ ð_‡ôo ø;ÁÞÑ´ïxWÂ~ðæm£ø{Ã>ðömg¤h>д‹;=/FÑ´»;];KÓ­m¬lm ¶‚(—  ¼öªý¥þ~Æÿ³ÆÚã^­ý‘ðËàwÃýÇþ&ò/ü9a¬k¿Ù§ûÁ^ÿ„³^ð¿‡õ?ˆ/ü%¾;ø?ãÿ|kðïµx‹Äþ ðþƒÿ ?Äôÿ‡_ð—k¾"²Ñüÿ Gü%Úœ–‰>•|ùCã?ø)gü·à?ìñSþ ûDÿÁ>ÿf 'ö|Ô>ü^ñÏ€go†·üCûm~Êsßèž+Ö¿g¯‰?µ÷ƒ|Mâ x'âÁÿ Üé~ ±ý©t?…úÃŒ¿üãKâÞµàŸ†’|)ø—ð¿E÷ÿÿÁX¿kŠ¿¿`?ÿ°çÀ¿ƒÿà§¿¶?ìAû3~ÝŸ´‰7úßÃÿÙö^ýž>(OðãÃß¾7øÚ[ÿé<{áõø‰âÍ[ÁþøAð›Å¾7ø·¦hšf¹ã¿E­·†|/àï‹ÿ~×ðpGÀŸÛ#þ •ûb|ø)û>þПíõâ_Ùö©ðoí=ûøƒÁ1ðf±ûøsÂÿ >"øKöœø±ñ×ã7<á߆Q|?øeaªÍá­7O»‹âŸÅ_øƒá'Áû¯†Ÿ þ"ü@×4‡ÿœ´ì£û2xÏáÇ>-è>*ý>2ÜiÚwŽ<ûE|Nð—ÁíG¾6ñ?ÁýRÛâü4Q øR‚=G]ñÚtKωpü øyñú>ýÿࣿ¶‡‚m«/ø&ïü«à—Áÿ†Ÿ´Ưëßÿb¿ÚöCÓ>+k?²?í-á_x/ü\øce¨|I»×÷ÃòÝ[KïÿðHoŸðF?Š¿·f‹ñËþÿÿéøyðËöaÿ„ïLñÇüƒâ'Ç?Ú¯À 4_ø÷àí®‹¥|-ý> üiñ‡Ž|AûAü@Õ¼?ñ/ÅšÅÝ?âO‚> èÿ¼9ieã»]wÅ7¾9ø9oã/?øíñ{áßø*Oü;ûükøÿ 3ãoüöý…ÿfÿØþ"ü7øÙsàO;ø…û|Hý—ôíb|>øaã½3Gø£ümñÞ•àxßPTÑìu/ÅÚu¬—úŸƒ8ø£Hð“ü]çÿà·ßµçÁ¯ÛÓþ ˆý¡ÿk€¾ ¼øSñŸÃÿ³ž³áè¼Y Ïá¯hºŽ…ûqüðwŒ|'âmYn­ ñ‚ümáÏøGY¹Ñ5=wº–£¢\ê~ñ7‰ü-y£ø‡Süøà/ø7à—Á­övÿ‚‰ÿÁ3iÿÁZ¾xƒÀŸ³—ÅÏØ×À*ý²¾#üeý£~2Ï?‚<-¦üUøà? ýŸ5¯ütÅ_<-á»ox. Ø/5Màí‡Ä¯ Ý|%ñoÅ/Ûïø+gÀm;ögÿƒS~5|ÒÿfþÇÞðÿÀmf_Ù‹Ã?¼UûNéßõˆ·ßÂ_ˆºÇ„î~:xÇLÒõø5_j>,¹³MOº'НõŸ xÄÞ.ðN‰áïk Öí~þÇßñ_ðY/Û×öÇñüV?¿àœ?Ù?ðMïØ²÷îø;Ãß®´+OÿÁD@‹Çÿðª?mßøÿÁBto|P¼Ó¾þÓçönðßö×ìåâÏ~ÎÖº_Ço øâÃo hþ*¶¿°ñV³áÿ‰þ*³ðÈ µë‚¾2ø—ðõá_í?ÿÛÕµÚ{öCø·û(~Èý±ü+ðÿáÿÆßÙOöÃðîûJj?ðJŠ>Ô|wðïÂÿ~|Eñ8Ôµ¾ý <+¦j>=½ð…c—NÖ<_&>½©x¿ ü+áÿ|iùþ ?ÿ†úÿ‡xþÎ_ð°¿á?áßð¯ÿhøQð†ÿÂèÿ†Éÿ…§ÿ kãíø[?Ûñd¿á_ÿiÿÂâþÍÿ„?þ*?°ÿ´ûWúGü%5ãÿðnÄ>ÐmÚáÏüOã÷í¿ûGÿÁ~þÌG„áñïí]q§'Ã;?ÛÏ[ø­¦üM¸ðÏìË ëŸ~x§ÂžÓþüAñ•ÿÅ-ß |"÷Ÿµk|Y¶Öt¿~Ξ(×½þ Äÿ‚þÇ¿à˜úì]ñwâoˆ>~ÔðO¯ƒÿ¶ŸÇÛ#àÏ‹> üsÒ:æ­éÚpõ»_˜´¯üÿágí‘ûq|ý§¿j™¾üø û:þÏÿ~ü$ý޾)|ðç‹< ¡|vø¹âÝãÇ¿´^»â}K\–ËâöŸÃ/ øwáÞ™ð‹â/Ãÿø;šƧüTðö…ã«hïßÿ þ)xãÂφŸþë¿ð”|2øÁðÿÁ¿¾x›û3XÑ?á"ð'Äi¾,ðŽ»ýâ-?Hñ‘ý¯áý_OÔ?³5Ý+LÖ,>Ñö]OO²½Š{h¿à¶Ÿð[/†ðO¿|(ý|=ñÃÿiÚKÃñøŸTý¥>!|(ø…ñkáŸìsð ûQñO‡ï¾=Ü|7ð/„üQ«ütøÁ­jþ ñ_„¾üÓ¬$ð\ÿ´Ø|SûAøÁ_ ´ë=;â(ŸÅû=|ø5ÿ÷ýôø&WÀïƒÿ døiû0~Ò¾ÿ‚·é³—ÃOøáï€>|Oðß…¼uûøgâ­Ž¢é ¼+ñƒâÇo Mã èÞŠÃö•ñoÃ?Xx‡ÆvÚ‡ìù¤é·–þÁû`ÿÆ ÿÁd¿`¯ÛßñG|ÿ‚kÁ7¿m;ß½àïüvµÐ¯i—ðxPçÿà“ÿðRïø!;£ðãöý€¿iÿ|TøÉñSÄ<ªê¾?øSûM?Æ_ÚSã+øW\øñ«ã¿Ç_¾ xCHñ·ÆiÖüOâŸøŸ[Ò`š 'KðW‚´½Ãz7‚ü¦ôð[¿ø¹_¿à†ß³G‚¿âuñ·Å_ðWÿ€ÿµƒà¯ù}¿àOì]àïøÿö—ñÏü$z·Ø<%kÿ ×Â^1ðæ­ÿÍî½oãÿhýƒÀñV§gejûýEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_Á4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿ_Á4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿEP_ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}ÿ_œðU‹o^~É~³ð.³áÿxÚëößÿ‚[[x;Ä>,ðΣãO è^*Ÿþ yûÅáígÄÞÑüYà-_ÅžÒõv³¾Ö|3¥øëÁz޽§As¥Øø³Ã—7Qk`£ôWÀð®à©¿ôy°þ+OöŠÿé±Qÿ çþ ›ÿG‘ûâ´ÿh¯þ›}ÿE|ÿ çþ ›ÿG‘ûâ´ÿh¯þ›ð®à©¿ôy°þ+OöŠÿé±PßôWÀð®à©¿ôy°þ+OöŠÿé±Qÿ çþ ›ÿG‘ûâ´ÿh¯þ›}ÿE|ÿ çþ ›ÿG‘ûâ´ÿh¯þ›ð®à©¿ôy°þ+OöŠÿé±PßôWÀð®à©¿ôy°þ+OöŠÿé±Qÿ çþ ›ÿG‘ûâ´ÿh¯þ›}ÿE|ÿ çþ ›ÿG‘ûâ´ÿh¯þ›ð®à©¿ôy°þ+OöŠÿé±PßôWÀð®à©¿ôy°þ+OöŠÿé±Qÿ çþ ›ÿG‘ûâ´ÿh¯þ›}ÿE|ÿ çþ ›ÿG‘ûâ´ÿh¯þ›ð®à©¿ôy°þ+OöŠÿé±PßôWÀð®à©¿ôy°þ+OöŠÿé±Qÿ çþ ›ÿG‘ûâ´ÿh¯þ›ðRÏù7_‡?öÿðIßýzoìo_×âíµà¯ÛëHøaðsPø×ûK~È>[þßÿðKøI¼#ð·öøÑðÇz¿›ÿ5ý‘àÑ¿°¾"ø³þ ñÇÃþûˆ%Òµ=OûCáoŠ?µô{-CBµþĽÔí¼E¤~ßPEPEPEPEPEP_0~ڳϊ¿jßÙâÿÀþÐ?eO|Cðý•·ƒ¿h?!Ô|1ñ3á—Š´hþ+ðö³¥ê:>§ ê÷ž¼Õô=ÇþÒüGámGÆuOøBÇÅž¹×"ñ™ôýüÁ|EýÿàåÚçàœ²í7ûcÁ0>|ñ÷Ãÿ|-ý¡þ>~Íÿ >1üWý£¾*ø_øEâï‡Þ(е‡Ÿ<%à‚Iÿ _S×,ï|o©ü-—à6±á §“^øg¨hzf”~ø‡ú=øOð·ÀŸ¾|4ø)ð·Bÿ„_á—Áÿ‡þ ø[ðëÃ?ÚzÆ·ÿï>øsMðŸ„t/íŸj¿ˆ5ìé~Ÿý§®êºž±öµjz…íì³ÜËèPEPEP_˜?ýŠ~)ø#þ 9à¯ø(/쫯ü?Ó¿án|?ðçìáû}| ñþ«â?ø;â÷ÂÏ ê—ºßÃOÚsÁZ¿Ã kÿð‘þ×ÿ<ÃðóÑühð÷м9ãÏ:½ïÂâÀìãâsôþŠ(¢Š+Ïþ,øwÇ~/øYñ/ ~"ÿŸø›â‡þ2ðïï‹ðˆèÿ?áWxï[ðæ¥¦øGâ/ü ^"žÛÃþ6ÿ„'Ä:‰¿á×nmôfcjsÅe{<‹èPþÏ_<+û5üøû9øPñ­àŸ€?þ|ðv©âË­:ûÅZ—…~ø/Eð/‡µ_húVƒ¤^x‚óHЬî5›­/CÑ´ëFK™¬t­:ÙⳇØ(¢€ üÀðìSñOÆÿðQÏÿÁAj­áþ£ÿ áÿˆÿgØà_€5_øóÁß~x«T³Öþ%þÓž5Õþ#øS@ÿ„sö¿øï凞#࿇¼+áÏü Ò,þëÿ>?hè§ôPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_Á4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿ_Á4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿEP_ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}ÿ_ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}ÿEPEPEPEPEPEPEPEPEPÀðRÏù7_‡?öÿðIßýzoìo_×ÀðRÏù7_‡?öÿðIßýzoìo_ÐEüàÿÁBÿàçoØOöþÌðާð«ö¿øñ·ÅüUã_|-ñ'ìÇñ‹öWû7Ø|ý3ÀW¾?Ô?kŸ|ñn•ðÿâ7‹lußÙxÿáoïØ_ð†øÖ}CÓjzV‘¡x„ú>¢¿Ì“ö½ÿƒÏ¿o?‹Úuï‡?d‚ÿc­#Rðþƒm/Œu›Çý¥>2è~*Ó|U.±¬k>ñŒ|3࿃v¾ñ†àÓ2xÓö`øâÏ‹^1ðŸüÛþ â? ø³âgˆþøOXñ牼3ℱýçÂ{ÃúïŠo5]SFÖ~Þ]|=Õ4ë«kïÜÏá¹ôÙXözŠøþYû:ÿÑ9ý¿ÿñS¿ðTßþƒz?á埳¯ýŸÛÿÿ;ÿMÿè7 ¿è¯€?á埳¯ýŸÛÿÿ;ÿMÿè7£þYû:ÿÑ9ý¿ÿñS¿ðTßþƒzûþŠóÿ…¿ü9ñƒÀšÄ_ é¿4ø‹ûOû?Oø¥ðŸâŸÀïÛÿdk†…uý»ð·ã_ƒ~üMð¿›{¦\ϦÂMá#ûoG—OñöÿêúV§{èQE|ÿNñÿí“ð·þ ÷ûPøÿþ ûà¯øXµ×†¾Áyð“ÃxrÇÆzÂù¾'Ð,¼yâ?ø+R½¶²ñ·Äü2¹ñŸ~x*k/Â_ã¿øwÑøâDÚœ~ñ ßôWðû'|høEñ[þ§Uÿ‚iÿÁɵÿ?à¤úGü)¿ê³OüçâçÆÍ#ö6øñ¬x§þÏüRýž5¯ë¾ Ôü?ÄxƒâÙ| à¿„ÿÿiïÙßiZÂêúŦ™ûK|<úÿþ ¯ÿ?øEã/ø)?ÆØSö°ÿ‚œ~ÐðI¿Ù—ö.ÿ…-®ÇqûxkãeçíûnxïãwÀ]G⥨^|~øIூøð þO‡zU¿ÂÝ[áÿô‹Z׉üI¬jwÕ§€æø0ýž×̱·íyðköïýž<ûRþÏ—¾ Õ¾ üCñÅ=Àºï‰´ü1¨ø›NøWñoÇ_/ŸÚ»ödÿ‚”|8ñ¿Æ_€?ðQ_ƒ>ðÿíð¥|Mû2üNø‹ñ—á—«ø÷Ä «ø²ÎÕ~)izUîyð¿Qñ†ìn,t?h?ÿfÿ‚YxÅ_ðK/ø7rïþ à_Œÿ´ÿÆÿAðâ§Ã~Åß¾=ê7_°gÃÏxïþ > x{âwƒ>hþ³Õôh:½ŸŽ|Vº_ìu'ˆþ*xzÇÄ ¹ø…‰ü0ýîWÈ¿mo…Ÿ¿kØ¿ö:ñfñQø›ûtÃEÿ¤×|;¥xrïÀžÿ†døm¥üRñïü,]ORñ^‘â #û_Ãú½µŸ„áðÇ‹¾ß¬$öúÏö’ǨKü!|Eÿ‚‘~Ïÿ³÷ ý«?eÿø9›ö¿ý¬¿à ÿ¾ x‹ã³ðCöø;û_øcþ ÷ûOèú¦±âëï|Ñÿe«oƒÒxKàGü$~×ì|?à‹´ø›7<+â}1๿g»}c¾~ÿü^øéÿ Aÿ1ÿƒOÿiøE¿áÿ†ˆýŸÿà¡ß?á þÛÿ„›þÿø[ðO„Þ?ÿ„[þ?ìÿÂAÿÿü$Ù?ÛØ:'ö¯Ù>ßý‘¦ý£ìp€OµòÁÿÛ[ágÇÿÚ;ã×ìñðo@øñËödû'†~5þК•áÆýœ|)ñÚ[¨[Uý—4ÿÝx®ÛÄ6ý <áû›/üRð÷€|â|#µÔtÏ |PñÏ„~&êz€î}ö±øéÿ ¿û,~Òß´¿ü"ßðœÃ;þÏÿ>:Âý·ÿÏü&ð©>xÇÿð‹ÂGý‘âøGÿá ÿ„û'ûoû[þÊû_Ûÿ²5/³ýŽo€?àƒ_ÿáIÁ*?dOYñOü,o‰¿´Ãø?lÏõ=û;Ç~)þÖòŽº¯ˆ¾)x‚ëWñˆ>$|@ðׇügៅº‡Äßkº‡ˆüe£ü=е ˜´K!§økEïþÿÁTþ|qÿ‚lh_ðSŸ‚Ÿ³·íñƒá—Š?´ÿáøð·á‡> ~Ö>"þÄøõ¨~ϺÏö¯ üCÕü?«ÿdxƒHÕ|k©ÿgøúãì ´ÍCÄw^Uí•΋éý ~,|SøÿFh_¾ |Køðâo…ÿ´ÿáø‹ð·Æ^#øã¿ÿmÿÁ[µë?Ø^.𞥤xƒHþ×ðþ¯ªèZŸö~¡oöýSÔ4˯6Êöæ }ÿþ ÓûNkÿ‚«ø»á_üÃöÿý¿ÿà–ÿðOöÐuߨ#Ç¿°AñßôÚwÇz„ äøÿ¨|dø·ð›JøÑâÝWâßßj^Ñ~ëbÑô[øoÆi©ü$¸ñe†¥ûU€_¿~)xàwÂωþ)k¿ð‹ü2ø?ðÿÆ_¾"ø›û3XÖÿáð'Ãÿj^,ñv»ýáÝ?Wñ¯ý‘áý#PÔ?³4-+SÖ/þÏö]3O½½– iyÿÙëã_…iO€_ÿhÏéþ Ò|ñûàÿÃO~ÒüYk§Xø«Mð¯ÅOè¾:ðöŸâkU×´‹?Yéí¾³k¥ëšÎo¨Çs Ž«¨Û$W“$^"øñOö„ÿ‚/ÿÁL¾ÅÿøûhþÄ¿¾ü`ý¦?b¿þ?xŽÛ'Äþ³ý”¾1üGø‰ûÿÁP5c·_ð˜ü?°ÿ…•àíÏ„>#þÅø§¬ØÏ7ü&ºÁ¯ [ü9ø+ðëõÿþû!ÿÃ9þÀ¿³Å/øiÿÚÿã¿ü4Ïìûøÿþ×íñ«þÂÏÙ÷Ëø/ˆ¿á ý˜ü#ÿÖ‡ÿ £áüŸðŸaIáÏí w‡<ðÿLûhÿ„sϼý¾¯ÌÛ[þ ¿ð'ö.ø§ ~Ïð¦kÿÚËöš×þé_á›ÿbŸÙ»Æ?þ)è¿uOø¯Áð»µù<ß ü?Ó¾éß<+ÿªŸðÍã?øÂ­ÿ”š.±ý±oú_ ~ÐZWˆÿgŸ|ý¤?cÏØ§áÿíû]|Bÿ…Uÿ 7<;â¿…Ÿ³wŽÿiøDõÀz7ü,_ÚŚŕïü)ÿ†Z߉õÿÂw&³ömDŸÁþΛ]¶Uçÿbø(wìÁÿð¯Ž5€*ñ6ø=â ;Àß´ÀŸŠñÂÿ¿³ŸÄË­9®µ†ß>x®ÒÏWмA¡jö~#ðuî¹¢Kâ?‡º¿<ãïxCÆÞ&¹ð_ˆšÃíúþxàºÎ£¨~Û_ðSß~×ñìÇÿ=ý¨|AðâÅØ§^¹ð®¡à¿~Èÿüuð‡ö]ø‹û>üNð߉¼e¤~Ô¾»Ò5}OÂÿ´OÇOëÚ‰áï¶÷Ÿ µO‚[JðåÏÄ¿èz€ (¢€ ùàÿí­ð³âÏíñëöFÔ4ˆÿh߀Ÿdñ5ÏÂߌW‡4câïÀnê3µÀ]CÃ>+ñ‡þ(þÏþ$ñ]xBïÄ:V¯oㆾ;°›À_ü ðÇÆwº6…ª}_€?ðVøÆø('üoö÷ðŸÉâþ×éÿ¿ø·áÿŬ|føYûtxc^ƒÀS|Eø‹¦ý®÷Å?ÿf‰¾¹øÉá‚þ&ðÞ¿áÏøïÄëZ6¹ðßÄ’x‹Pýþ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯€?àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ¯€?àšòn¿¿ìÿÿà¬_úôßÛ"€>ÿ¢Š(¯€?य़òn¿ìÿÿà“¿úôßØÞ¾ÿ¯€?य़òn¿ìÿÿà“¿úôßØÞ€>ÿ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(àø)gü›¯ÃŸû?ÿø$ïþ½7ö7¯¿ëàø)gü›¯ÃŸû?ÿø$ïþ½7ö7¯¿è¯?ø¥ðŸágÇk¿ ~5ü4øñƒá—Š?³?á&øuñKÁ¾øàObkˆ´oíßø³MÕü?«ÿdxƒHÒµÝ3ûCO¸û±¦iú¯•{em<^E0_¶güUÿ¨ý¦ÿá"ñ7Áÿ |@ýŒ>&êÿð³uØ5_~$“WøY¨øïÇ^V¡áÝCÅ?>"xLøðÿÄMs¢|-ø ¬þÏÚ;xsWÕü'i©éVþºðï÷ìð/þöXýšføJá8ÿ†wýŸþ ü ÿ„×ûþŸøL?áR|:ðç€?á)ÿ„sû_ÄðÿÂAÿÿö·ö'öö·ý•ö¿°kê_gûdÞÿEQEQEQEóí¡àOÚâ_ì¿ñÁŸ±wÇ/þε©áû+Ÿƒ?üYàüC𯇼U¢xƒG×ßFñ7†¼O x³H_ø÷HÒõ?‡šÏ‰›Â^.Ô| §xªçÇ„üO®xwNе§è ã öÏý•à¬?ðY/|2ý?jø"ÏìûüMñ¯ü*_|qÿ‚£ø¯ãìÛûFøïáÂχ:ÅÏÄßÙ~ϼ «ÜüzðOü&Þ:¶¾±ð_€âï¼9ã¯ü;ñ§ˆôË/ëÿüú?ûMþÌŸðQ_Ø£þ +ñKþ EÿÝø[áÿÛÁ?¶ÿ‡þøößýˆÿáçÿµˆ?´?üWþÿìåeâíÏüÿ‚||ÿ„âð›ÁÚgŽõ½KJø±ñëö‰µÿ„¿Ähx}´ Zi¿ üià¯:_4È|Wªü4‹âo޵ ü"üAýŒ?à™_·gÄOø%·Äßø gí½û-Ã9|ðŸÃÿ‹_ðÁG~þÓ~1èÿþ)韶m·í ð“û ögHÒ>&éõ{Ý]¼A©ÿÂqªø+Äz÷<¨xkQÿ…Mã¯i³x7úý¢€?š|]ÿƒ›|cá_†ß²?‹dÙƒà¯ÄKokŸ >3Á[õ/Œ¿ ¾.|3Ô¾èÚw´tý¡~~ľÖ<ãk_Œ#¶ƒÁž.ð‹ã0|3×>!,šgÄ?ß>øÃQÓ~ýûOþÈ´??à§ðC¯ŽÞ²ñÅÏ…?±‡‡ÿoÝö”øßâÍ{á'‡¼Uk¨ücý–üðÏá¿‹æ]nÈéþ%Ö¿_«äƒÿ±OÂÏ€´wǯÚàÞ¿ñáý—í7öO|kýžô-WËû8ø¯ã´WP®«ûQéþºð¥Ïˆ<û@xÛÃöÖ^ø¥âøÓÂþø¹k§iž+ø¡ào|MÓ4ÿ[8?ðëÛ³þ!<ÿ‡hÿÂŒÿŒÚÿ¢+ÿ 7àïý$—þïü”øX?ð©ä’ÿÅYÿ#çý@¿äeÿ‰5~þÚÇü/áíAñ~_„_²Áÿø+_ü¿ö›ø?eá8ÿdï|DýŸ¿eß~Ìž*Ò«â 5¹¼þ«Çþ;üø5ûNü3Õ> üø{áÿŠß uïxÄÞ!ø}âÈg¼ð¯‰5†¼-ñOÁÖÞ&Òb¸‚ÛÄ~µñ·‚ü9¨ë>ÖÒÿ¾.Ó¬î|1âý^ð¶­¬h·àÁ_ˆ?µ¿à§ÿ²‡í“ãŸÛ3ö)ð÷Äø(ßÁ/Ú3áÿ†~üKÿ‚t|Dý¨üð ß³ÏÅ?XøzÓÁ¿´_ìéã‹>ñ„¼?ðÿÄðÿŠü;ñwá/…üGâŠ~>²ø›ªß|LÓMÓ¾ þßQ@Œ?±ìÉûOüTý´øöTøíâ_ÙƒNýˆ~~ÆÞø™áÿ|-ø |Vo‹Þ%ñÇÇ/zœ^øñƒâ?Åh®µiß ,<-࿆ÿŽ¢øµ¼qñ'\×dð/Ûÿ°í+ã¿Úßögð¿Æ¿Š_á›þ&Ü|@øÿð·â/ÀïøY:?ÆøW>;ýžhOг׋´/øY~Ð|7áÿîñÂíCPþÓд¥ÑÇÛ~˦jÝ•´Ö¡õýxÿÀ€?¿e¯ƒ_gÏÙóáï‡þüøWáø|3à_øfÓNÒ4äžâúòææòúâóW×|A®ê÷šˆ¼YâÏê:·Š¼eâ­[Yñ_ŠõgĚΩª]€`~Ô>;|(øãŸþͳ§ü5—ÆÝþŸøB¿gÿø[¾øÿ ÷ö§Œ|=¢øþ.·ìu xWþ_ j:÷âme7öçü#ŸðŽXyzž±e*>"|vðßÇoÙÓÀý?áe|ø•ÿ wþö€ÿ…»àïÃ4Âàë-káOüZjÆüeÿ…ËâÙï<ÿUí‡ü+ϰÂGâ?µi—QD=þŠðøXŸ¿á©ÿáSÿÃ:Æ2ÿÃ?ÿÂÄÿ†µÿ…»àïù.ßð±áÿ†tÿ… öøXòOÿâåÿÂÝþÒÿ„;þdß°ÿm~þ¿ ?à¬ñ’ÿðPOø"ßìá?ŸÄý¯Óþ ñoÅÞÿŠÏXø3ð³öðƽ?€¡ø‹ðëMû%ï…¾þÓß|ysðoÂ?©ª|rµñÕç‹5 |$“B¾³ÕdÕÞãR¸úƒâ—ü'öøã½wáoƿۇö@ø?ñ7ÂÿÙŸð“|:ø¥ûK|øã¿ÿmèúˆ´oíßø³ÆºGˆ4íêúV»¦hiöÿoÑõ=?Sµól¯m§”ëú+òþ ™ÿcøYÿéÖ?d\øãö_‰¿´Wíû/|%ñç‡>)|\ðç„õ‚ß²ÇÅøŠÏâßíS®ø*MgLñ¿ü/áÿ‡þ,ðV™ã­fóü+ã½gOñ‰µÍvË—€о)|ø—ðÿãÃ/iÿÂ3ñáoŒ¼9ñÀž"þÄÖ5ë?Ø^.𞥫øWþÈñ‘ªèZŸö~¡qö cLÔ4˯*öÊæ€=Š( Š( ¾ÿ‚iÿɺüFÿ³ÿÿ‚±ëÓlŠûþ¾ÿ‚iÿɺüFÿ³ÿÿ‚±ëÓlŠûþŠ( ¿8?à«Ó¼iû%ø{ÁÚÅψ,ô~ÛÿðKo ê—žñgмâ«];^ÿ‚ž~Çú]õφ|uà]gÞ6ð_ˆ ¶º–]Åžñ…â¯j+m¬x{YÒõ{;;è?Gëàø)gü›¯ÃŸû?ÿø$ïþ½7ö7 þ§û:ÿÑFý¿ÿñl_ðTßþŒŠ?áÚ³¯ýoÛÿÿÅÿMÿèȯ¿è €?áÚ³¯ýoÛÿÿÅÿMÿèÈ£þ§û:ÿÑFý¿ÿñl_ðTßþŒŠûþŠøþ§û:ÿÑFý¿ÿñl_ðTßþŒŠ?áÚ³¯ýoÛÿÿÅÿMÿèȯ¿è €?áÚ³¯ýoÛÿÿÅÿMÿèÈ£þ§û:ÿÑFý¿ÿñl_ðTßþŒŠûþŠøþ§û:ÿÑFý¿ÿñl_ðTßþŒŠ?áÚ³¯ýoÛÿÿÅÿMÿèȯ¿è €?áÚ³¯ýoÛÿÿÅÿMÿèÈ£þ§û:ÿÑFý¿ÿñl_ðTßþŒŠûþŠøþ§û:ÿÑFý¿ÿñl_ðTßþŒŠ?áÚ³¯ýoÛÿÿÅÿMÿèȯ¿è €?áÚ³¯ýoÛÿÿÅÿMÿèÈ£þ§û:ÿÑFý¿ÿñl_ðTßþŒŠûþŠøþ§û:ÿÑFý¿ÿñl_ðTßþŒŠ?áÚ³¯ýoÛÿÿÅÿMÿèȯ¿è ÄÛköø/ðá‡Áψ¾ñ¯í«øƒÃ¿·ÿüÃû?Oø¥ÿ ý¾¾8øãû_þ kû#èW_Û¿ ~5þÒß>x£Ê²ÔîgÓ?á&ðޝý‰¬E§ø‹Fûˆ4+S²ý¾¯€?य़òn¿ìÿÿà“¿úôßØÞ¾ÿ Š( ŠçüYâÏ ø ¾&ñ׎¼Máÿø'Á~Ö|Yãø³YÓ¼9á_ øWÚuαâx›Ä:ÅÍž‘ øBÒ,ï5MgYÕ/-tí/Nµ¹¾¾¹‚Ú eSÂ~,ð¯|+áŸxÄÞñ§‚|iáýÅžñ„õ;Ä~ñg…|G§[kñ7†|C£ÜÞi÷‡õÝ"òÏTѵ.òëNÕ4ë«kë™í§ŠVè(¢Š(¢Š(¢Š(¢Š(¯>ÿÁB`_Ž>;оüý¸dŒ|Qý§ÿÏï…¿´·Áˆ;ñö&¨x‹YþÂð„ük«øƒWþÈðþ‘ªëºŸö~Ÿqö LÔ5;¯*ÊÊæx½ã_í ð ökð®Ÿã¯Ú3ãÁÿ€> Õ¼Aká=/Æ?þ%ø/á_…u/_iÚ®±cá?Ä>:Ö´"óÄšF…®j–º5½äšÆ£j·ÐÛ=¶y, ÁExü5ì±ÿ 'þþ[öÿ†eÿ£‹ÿ…ÉðëþOüŽ?ð®ÿä®ÿÂGÿ ÿþJüPßò0ÿÈãÿÏü†¿Ðkàø#×üágüögðÄ]Cdzÿ„¿i¯ÿÂðñ¯‹¿d¿|\ðç‹~)ü øYá/ÚÆ¿>^ø×ÁÓë?ð°?äŸÿ­ŸÄž?Ôü#á/x¯Ä~-³ñ…áÏ h¾-ðï†l€?_¨¯˜<3ûnþÅþ4øËsû9ø;ö»ý˜_ýªmoŠ¿à¤ÿðJ_ØëÂzÃýGá—íÑÿ Ïÿ o]ñ•â;¿øwþ“à/‡~)x þÖ§¦ø¯Hðþ‘ý¯â ^æÏÅßð“xcÅßoÑÒ }ûõdÔ%ý?¢ŠüÀýƒ¿moŠ·¯Å?ÚOâÇ€4‡þÿ‚||,øâÏÙÃöñ•Ö•â?üSý¬>)ü,ñé¿¿iχßô_ÿÂ’ÿ†@þÓûoÃOƒ±ø+Mø§â?‰þ#ðçŒ xötñ·ÂÛã7ìã¥üÓtÏi¾*ø{á_x/á7‰ì|!ñmüuvº¾©ñƒÂz¿uÏ ø÷W·ð¯Ãm:÷QÐã0ü5ðuÌwšpýž Š( Š+óÀ¶·Å?ÁG!øŽO‚þ!ñW‡0xKC·ñbÝxƒÃ_ÿg¯†zWÅkm*×FøœßßíúƧ¨jw^mííÌòþ@üjÿ‚!|,ÕÿàŸ²ì-û'üpøû+ÞþÁŸ´ÂÚö_øÛ©øwßu#ã·ÃOøÛÅWÞ9ø¥àoI øâ'ü&^ øŸñÆz‡†t›ïx;HñÞ«¡K£øz†^…¿éÿì¹ðïã·Â>ðí/ûEÿÃY|mÐ?á&ÿ„×ö€ÿ…EàïðŸjxÇÄ:ׇ?âÔøûQð—…áð–£ ø+þ%7³nÂ9ÿ ÿ—©ë± ¿ÑEQEWÀðM?ù7_ˆßöÿðV/ýzoí‘_×ÀðM?ù7_ˆßöÿðV/ýzoí‘@ÑEWÀðRÏù7_‡?öÿðIßýzoìo_×ÀðRÏù7_‡?öÿðIßýzoìo@ÑEQEQEQEQEQEQEQEQEðü³þM×áÏýŸÿüwÿ^›û×ßõðü³þM×áÏýŸÿüwÿ^›û×ßôWò…ÿyý¬àçO…>Ö›ö:ý‡¿gýá’|?ð&¡®ü[ý—&Á¨x ã¦¿âØ¿áLøïÄ#Š?Š^ð·ÂMtØxàw•âØèÚßïxOÁš?‡¿áÒ<3‡tË/ išnŸþ«ðLŸÁI,ÿà›ðO›?þʱˆükû~ÊÞñ‹?à ß|â­w°|ð ^Ö|Màíþ “ãÝ#Â~ Õ4…³¾Ö|3¥øëÆšv…¨Ïs¥Øø³ÄvÖ±kŸ§ÿµìSû#þÚžO~Õÿ³—ÁÿšEŸ‡üiáŸ^|Gð>‰¯x«ÀºwÄ=:ÇKñÏÃKjž6øWâ fÛIÑ¥o|8ñ…¼Ue¨è^Ö4ÝfÏWÐt{ë/_øOð·ÀŸ¾|4ø)ð·Bÿ„_á—Áÿ‡þ ø[ðëÃ?ÚzÆ·ÿï>øsMðŸ„t/íŸj¿ˆ5ìé~Ÿý§®êºž±öµjz…íì³ÜÊòü,oø*oý¿ìÿ‹,ý¢¿úS´ÂÆÿ‚¦ÿÑ›þÀø²ÏÚ+ÿ¥;_Ñ@ÂÆÿ‚¦ÿÑ›þÀø²ÏÚ+ÿ¥;Gü,oø*oý¿ìÿ‹,ý¢¿úSµ÷ýçÿ u/Šz¿4-Cã_ƒ~ü?ø›qý§ÿ 7„~üKñÆiV±¨A£a|EñgÂÞ ñÛü?•©êÚ |/ý‘¬^ê¯öÝ–™mâ-_Ð(¢€ øþ û&üSýº?àŸµì›ðSâ÷ü(¾ÁáÏ øþ{Ùèïöè$Ö|âëÏ ÝÛø‚ËáÿÆ蚯ˆ·š}§ˆ¾ÉàOøŠâëÁ^=²ŠçÁZÿßõóí¡û!üý½?eÿ‹ÿ²?Çû/^|)øÏáû-Ä2øO^ŸÃ^*Ñu Ä?Œ|âÏ ëEumˆ<ãoxsÅÚ5¶·¦k¾ÔµÛLñ†|OákÍcÃÚ˜ññwHøðCáŸÁ?‚_ðSïø7ëãü_Ã6ø™s'Á‹š^§ð§ö‚ñíâOTÖ5/xëÁÞ2ñWgøEà8¬õ:ÛÃß `ð×ßú—ü³öÚý ¼+ð“ö|ÿ‚‡ÿÁi>0~ÙŸ±€üAà=gâìÓ¦þËþýŸ-ñWŒµ"?Áâoü^²ð—Å}ûoÁ"õŽ´ÿÿooØ‹ö¦ñü›öðÑáOÖt?ßøà†¹ð|óþ aÿþýª´oÛCöÆð÷íÿºðÿìaÿ¢ýªþŸ‰>/ý‚þ#þÑ_²íÇû0?íµáïŠß u Æß ~øsDKŸ…~Ö|¤ëšÃxßÁÓxIñ„øßán³û[ü:øuàOþÑÚ‡>!ÁOdøEâm Œ¶Þÿ…ÿ$ÿì:/‡u4דXðUׇü#âêñ/ƒ<'¬h¿Õïüïþ ³ÿ ƒ¬|Aøéñûö†øût~Üÿ?·4_ˆÿµÿÆ 3ûXÒ¾]øï[ñï‡ÿgÿ€¿ —Ä^,ðÿìëû?è^ Önøá·È±‡ü÷ijwÂ/‰¿°ïÇÛþCþ Wâ_‡ÿ¼ðÛöø¥û.ü,ðf±ð÷þ7ÆËoŒzußÚsÀÚí·Äß|@ðMíÏŠdÓ ø_ãO~¯ü^ÿ…íÿ1ÿƒOÿá¨ÿäæ¿áŸÿà¡ßðÑò'Évÿ‡{ü&ÿ…»ÿ$ïþ-ÿü”øHäFÿŠ;þ…Ÿø’ý†·ü ÿý§ôÿ ü6ý”¾+Áe?iÿŠŸðL/† ×4ëØÃMøcáÿ„ŸÿÁ#ÿàœ¾øu¡Â;áý_ö@øñKPÓÿ´õ_í;øãà/ã_Å-wíZî¡©ÞÅÿ GÄ߈.ñ7öd1hú'ö¿ö7‡tý#Ãöf•e÷ÿÅŸ…¾øãð³â_ÁOŠZü% ¾0|?ñ—Â߈¾þÓÖ4OøH¼ ñÚ—„ü]¡løwPÒ&ü>ðÊiþñž§û?ü@ýœ¥ð&•ðwâ×>ø'XøÁÿ'Œº×ü3ð{á‡Åø>-ø'â‡þ1\é¾*ø¢hß¾x—ã.©ñ3Å~2ðß…m¾Iªx•¿iÿ·ÿáÆ?ñ¢ør§ü5ýÜ·ü)/ú¼?økù#ð·?îAÿ’«ÿSWýK•èµü[ã·‰ÿlŸþÝ?ðOOø(Äø'Æß¿ü3àÚÃOÿ…!àïÚ»ágÇ¿øV–>оx×þoÅ¿èþð'ÄxKGŸÁŸð‘é–:·›áÉü¯ ÙxSñ'ÅÝOâÀâÁÿÁ8þ5ÿÁ5?à¾_ð®¿dÚö_øµàÏÙÿÄÿ´×Æßø&í›ðÛK…Ÿ°íOªþÄ_5ß|{ý‹¼â¯Ù²ÿ…›öß`xòøCþ"Çáχ¾ ÿ„wáÀÏ„°ü(ð×ô;ÿVýž¾|ÿ‚mþÄ>:øEð;àÿ¿|lýˆ?c_|fñÆž ð?о.x©>xcXO|Nñ†4]/WñïˆWñgеEÖ|Uy«j+¨ø—ÄÂä\ë:Œ·<ì½ÿoð¯Âo€_·¿hÏÚ[ãíWûHÿÁO¼?ã þÚµ¶¥m§|;ñWŠü+¯ø/ÇŸ |ោŸ $¼øðïàÿ‡þü;ø®i~Ñ­ìüS§iúä–0Û[|.Ðþü)ø}ñÿ?g¿ø(¯üŸþ -ûOx~ßþ ¥âž6øWðöcøGÿù“ÂðN¿…é⯅^*ð?‹´?… ?g ü;ð•ÏÅÝ_㟈?k=_]øSû5èÞ(ø‰§x—Qø_¨êÖß$:ÍÈÖ®ô½_Æüßþ iÿûø‰ÿzø-ûÿÁDüCÿ ×ö%ÿ‚zÿÆQ|lѾ"ü"ñ?Æo~ÖßµŒ~ø6çöjøk†~xoÅŸ<;ðÿàïÃÿž%ø‘â-SÅðÛã°<]ðgâÂ=CÃV¾ñgˆ³Ú(ùBÿƒl¿o_Ù;ãÅ?ø*ïÁO…¿¿á(ø›ñƒþ ûtþÞ¿¼3ÿ/Äþ/Ù;âˆþxOÂ?¿¶|Eàí#ÃúGö¿ˆ5}?Oÿ„]Õtω6hûV§àë+(§¹‹ú½¯€?`_ØcþsþSþ.ü-ølÛÿöŽý¹ÿäIÿ„+þßü4ü!¿ñk¿änñoü%¿ð‰Â%ÿ#·üS?ÛßÚò(è¿dÿIçÿà’~2üoý€¾ üSøíñgļmâï|yºÐþ=ø›àŒ³†£ñÛàÕíñkHý>5Û|·ðç…#ø}áÿ‹?³æŸðÃâ„ô¦Ñcžë¾"ѵk­C[¹Ôf×5Ñú+À?j?‡¾+ü ñÏ€?fÚ/þ7ãn¿ÿÏü!_´ü*/|wÿ„û/Æ>Ö¼Gÿ§Ç÷Úw„¼Uÿ W„´í{Á_ñ6½‡ûþ?øHì<ÍOG²‰ÏˆŸþ;x“ã·ìéãÿ~Ñð­~ |5ÿ…»ÿ û?ÿ¢ðwŒá¥ÿá1ðu–‹ð§þ.¶µ}‹~ šñlž5ÿŠ*ÊÿþÛÿáñÙtËX¥ ÿ_€?ð[¿ø¶¿¿à†ß´¿‚¿âKñ·Â¿ðWÿ€ÿ²æƒã_ùýƒàOí£àïøö—ð7ü#š·Ûü%uÿ +Â^ðæ“ÿ 5îƒqãg}¿À!ð®§y{uúÿÿ ïã·ü5?ü-øh¿øÆ_øgÿøWðÉ_ð¨¼ÿ%Ûþ/ü$¿ðÑð¾~Ýÿ þIÿü[OøT_Ù¿ð‡Ìåöïí¯ÜWäíƒÿÕÿ’ý‚¿cÅcðKþ Ãý­ÿ!ý´ì¾ïƒ¼=ñÚëB¼ðWü¿ÁßðŸøûGžý <+âÝGÆ¿?áIxÿUøkàïˆßoá3½·ø«¦XAáÍ<÷úŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( øûûQü ý—ÿáJÿÂôñÏü ÿðÑ´ÃÙsàïüS>1ñ7ü&¾-ÿlÿ¾ð7üQþñü#ÿðÂ?«ÿÅMâŸìOi_dÿ‰ßˆtß´ZùÛþøýðkÇ?~/~Ïžø…áÿüdøáÿ…~&øÑà]i﵆šwÆÈ+Ö4m;Ã~8ðN©âÎø+¿íGñÛö_ÿ‡`ÿ‹ñÏü ÿðÑðWÿدö\øÅÿσ¼Mÿ ‡ÀŸ‹ð²ÿá`øþ+xƒþÿøH?áÒ?â¦ð·ö'Œt¯²Ä“Ä:oÚ.¼ïÄø&ßì­ÿ'´ÿ‚ÚÿÁUtÝOþ µý¯âß?à–þ"ý±|Mÿ 1ðÃþ£Àš¿Àý_Åžøuýoâ&²ý™?áøe§k¿ ?á.ø[&¯¬kÿð‘Â{¨Aˆ4‹;gþÏh¯â‰àªµWüKNøûRþÏßð]ø'ü;àÞ©áÿhß²_ìkñ¾ïöQø‡ûCø«Qð7о'xXø³öÙ¿øÝú¿ìëâ‰ú¾áOhößm~8øW@øIâ­ ôÿ øŸÄž¿ñoÆ >,Áqÿh_ðo7í}û{|‹Ãÿ³‡í¡û)ü`ø}û3|J×üyð“ãÇÁ¡ñ—Døïû7xkâ7Œ~k·÷Ÿ>ü@ø?ñá߯ŸÂÚŽ£?‹ Ñ§ÖµM?Ã0ø§xwÃü`ýnÑ_„:§…?à¾ÿ³ßÁ¯ø£Ãß¿fø(/íGûDü`ø£xsá—‰¾øoöiý‘ÿà> Õçñþ½ñÿÅ–Þ(ѶÖ/ôÿ±èšNñ*/ øÛ\/ð¿ð‹l?Û÷þ ¥ûyþÆ?~<Á^¿fø*F‘ûG~Óÿ ?cO² ÏÁŸÙÓöVý¨?g]Gö ^|$ý¢´o| ¾ñ§®¼?áËiÆ£âañ%4O ê^ñW„ü1¤è—ú¿ÅO|PøJý>Üü~ø5kñ÷Fý–¥ø…áöý õ߃þ&øýcð¢Úiï§$VOü üYý•¿à¤þ/ÿƒ‘þ%øOáoükþÿÄßÁ0%|þŸh¢Š(¯€?àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ¯€?àšòn¿¿ìÿÿà¬_úôßÛ"€>ÿ¢Š(¯Îø*Ç‹<+à/Ù/ÃÞ:ñ׉¼?à¿ø/ößÿ‚[x³Æ>1ñf³§xs¾ð¯‡?à§Ÿ±þ±âx›Ä:ÅÍž‘ øAÒ,ï5MgYÕ/-tí/Nµ¹¾¾¹‚Ú e_Ñúøþ Yÿ&ëðçþÏÿþ ;ÿ¯Mýèÿ‡±Á,¿é%Ÿ°þ&GìëÿÏø{üËþ’Yûâd~οüñ«ïú(àø{üËþ’Yûâd~οüñ¨ÿ‡±Á,¿é%Ÿ°þ&GìëÿϾÿ¢€>ÿ‡±Á,¿é%Ÿ°þ&GìëÿÏø{üËþ’Yûâd~οüñ«ïú(àø{üËþ’Yûâd~οüñ¨ÿ‡±Á,¿é%Ÿ°þ&GìëÿϾÿ¢€>ÿ‡±Á,¿é%Ÿ°þ&GìëÿÏø{üËþ’Yûâd~οüñ«ïú(àø{üËþ’Yûâd~οüñ¨ÿ‡±Á,¿é%Ÿ°þ&GìëÿϾÿ¢€>ÿ‡±Á,¿é%Ÿ°þ&GìëÿÏø{üËþ’Yûâd~οüñ«ïú(àø{üËþ’Yûâd~οüñ¨ÿ‡±Á,¿é%Ÿ°þ&GìëÿϾÿ¢€>ÿ‡±Á,¿é%Ÿ°þ&GìëÿÏø{üËþ’Yûâd~οüñ«ïú(ñöÚÿ‚„þÀ¿~|ø[ðSöáý>0|MñGíÿÿ°ÿ„gá×ÂßÚ[à¿Äø‹ûþ kû#ø‹YþÂð„ük«øƒWþÈðþ‘ªëºŸö~Ÿqö LÔ5;¯*ÊÊæx¿o«àø)gü›¯ÃŸû?ÿø$ïþ½7ö7¯¿è¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯?ÿ…Oð³þŸü/OøVŸÿávÿ¿ÿ…Oÿ ‹þßÂÓÿ…Yÿ ü&ð­?áafÿÂ[ÿ ÿþßøªá þ×ÿ„sþ?øÿfÿiÿ¥W Q@Q@Q@Q@Q@Q@yÿ€>ü,øQÿ ¯ü*߆ŸþÿÂÊøâ?‹áðo‡<ÿ ÷Å?ýþï‰~5ÿ„wMÓ¿á*øâ¯ìí?þ?k¿oñ¹ö ?í=Jëì°lô (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ñþ mðŸâŸÅøtgü*߆Ÿ>%µÿ‚ß~Àÿ>"ÿÂàßøÇþ…žÿ…¯ÿ wÄ¿ÿÂ;¦ê?ðŠü?ð¯öŽŸÿ Œµß°xsCû}Ÿöž¥kö¨7ü¿ðëÇßbø.÷üwTñ×ì=ûoüVøSÿ-ñü#FøûC~Ï?àø¯ð ÀZwįÀ¯ˆ>,ý þ"Øø·M¶øCáÿxÛ\¼¼ñ ¶©câ­'Á~Ôüu}á˜<-«x+Sñgô½E¿g½þ àOŠÿ±íyÿ÷ÿÃÕ|[ðŸþ¯~ÇŸ·ìÁÿûð'ǽö¢ð'uø«Ãý«üuâ üBñoÀψ ñkÅà}f %ø¥¬xKÀ’éºvƒðëÄþð7>&~ÐÿÁEc¿Ú:_ø7SöËøIáߨ_öø+ñëãÄ„?ô/؇þ ¿ð.êÿþþyûPþÎzŽ™ào·ÂØ5;/Ú7ö€ð/Ã/A'Æß¿¼àojðŽÜi¾ð¬¾ðŸãW´Pãü“á·íqñ;ö »Òÿe/øƒã>‘áiû^~ÌñηðÓâgí{ûøi5û¿¿²ÿÃoxOCÕ¼m£xƒâ¥³ørÏ\±ðö‰ãü=Óümà_ 'ŽuÛ|%ø‰üàøßö~ð®½?üÃÆ°üÃûOþÆ¿²çìWÿý’¾>|vý¨~5üÓ¬¿o;Ï ø/ã-Þ«ñ?áîŸû<ÚÞ|mý¼?h߃öV¼ñ×â‡ü[ñN³ê¾Ò~Yh—SнÊ(ù¡ý·¼}ñ—ö#ÿ‚åxöö—öý·ÿkOÙóÇŸðJ GöC±Ôbð~Ð~*ð÷Æ]ö¾_ŒÚ¥—Ž<1gâß\ø/Ãðx&ëGŸN×¼C=Œ)ÔuvÓüˆ¤ðÏŽŸÂžûCÁ2>>þÝ¿´?üûðÇLñÁ-#ö¾ðÿüçötøáñ;áç-¾ |JñWìåð’ÛÇzæáÿçÁmâ?ÚøÛÁz_Ãoˆþ&ð)ñ–£ð¶6­yá?júe¿ƒõ¯ëvŠþH¾9ÁD¿à¨ß·7ì¯ÿÁ74¿ø#ßí?ðcöðý¦¼?ã¿ÙöøÕñ“ᯉ¼/ÿÑø?á_èž7ðÇOŽþý£´ÍsÄw>4ðüþµ¾×¾èVm­éË«x¢ÊÛÀ¾7ý¦¯ü1á |{úþ ûüSøkû,Á¾ß³GÂßü@ý ¿á‹¿à§ÿðJ=â/|ðËÄwŸ`øYû9ü:ñ§€<]ñÓÆ¾ðì¾1ÿ…kðþ×ì~­â=_]ׯ<9àïí«; OÅ7 ¼ºþ¨ Äø-·ÂŠÿáÑŸð«~|@ø•ÿ ×þ }ûüXø‹ÿƒ|Gãø@~x;þ¿ü%ßükÿÿÂ+ðÿ¿Ú:ü$~2×~ÁáÍíöÚz•¯Ú ßû}EQEWÀðM?ù7_ˆßöÿðV/ýzoí‘_×ÀðM?ù7_ˆßöÿðV/ýzoí‘@ÑEWÀðRÏù7_‡?öÿðIßýzoìo_×ÀðRÏù7_‡?öÿðIßýzoìo@ÑEQEQEQEQEQEQEQEQEðü³þM×áÏýŸÿüwÿ^›û×ßõðü³þM×áÏýŸÿüwÿ^›û×ßôQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEøCñûþ -ñ2÷ö¸ø…ûÁ1?aOÁO>+~ÎÞ›Rý®üKáŸÚ#áïìßðközñUö·…ᯄ—?þ#øgÄ~ ñ§Æ îm|PÞ,ðާ£j>ŸÃz·¦ÉâÏøãVðƒòö1ý²þ ~Ô¿¿àí¯ÚãÄ?³¯Æ > Éû0~ÎÖ¿eÆ€?u};àì_ûR|(øÑðSâÏ‚u¿jÿ¼Aâ-_៌|#6«£êzм£o©Ë§Øø’Æ}Óîø'·íUû8ÿÁ4lŸø+_ìCûq|høû5|Mø»ûüpÿ‚“üñïÆ}~×á7ÀŸŒ¿³íicðÞO ¯Ã?‹ƒ¡®ØiLj¾xËÁ¾$Ôô-÷WŸF±ý~ø“ÿHð'üÓþ eÿ•øýð·ö4øãŸ†_´÷ü0oìñðëö_øOñXñçÅ?…øÕû:ßøÓÂ>øi}â/ ê~ ý£~ xÃþ Óþø7šíÇ€µ‹Þ#»ÓfÔüiákÛÉÞO@ñ¯ü§ã·ìïû,^üEý±àß>þÛ_~ xÿÀ±ÿü‡àÆÿ~Ù_¿kOøB>xsÇW¾5ð–­ðÂü"¿ü+ý£âyþ2øŽóÂ:çü*_x=(ŸÄš6‡©Iá?øãà®ñ|øýÿ–ø™{û\|Bý‹¿à˜Ÿ°§ˆ?à§Ÿ¿goÍ©~×~%ðÏíð÷öoø5û=xªû[ƒBð×ÂKŸ‹ÿü3â?øÓã÷6¾(ox ÇSѵ Ïá½gCÓdñgŠ|ñ«@øAùAá/ÙÃþ •ñöâý‹~ü1ÿ‚¸ÿÁ_ÿà­ß~~Ðk ü$ð§í¡ðÃöÈýœ~ Úü ñn±©[~Ñ´?5Ÿhÿ¼ ðÿÀšžŽÞ ñ¦“áÿŠþÑ×Ö¿¼-áO‡Öµ?оUûþ ‘ûO|ÿ‚|þÑßðXßÙöòø‰ðÿö4øãø)ÿÇoÛ§á³ûJüTøEð“ÀŸ?gÚöé-¾øÏà‰¼WñÇþ7öWü)}y>$Ţص¯ÃÍc[Ð|âëˆ~3ðŸ„@>ÿ‚ÂÿÁ]>2þÙ?ðBŒß?f¯ÙgãÃM#[ñ¯û/ÁFµo|ZƒàÇÄÏø'§Æ_|_ý›´_þÏÞ&ø}®xÞ6ý¢ü?ñæÛâV©ð£YŸÀÑøz 'áï‰îmþ4xGÃZ¾¡ã…žýý¨¿jŸø¿ágüƒÅŸðSŸø%/ü)ÿ‰¾(ÿ‚ß~Çÿ~|$ÿ†çÑþ ®ñÞ·áÏj_ ¿møOgßÛxÆßð„ø‚çÇÞÿ†tñ­µ¾âOìÏíŸê‘Y^豯ÌðY?Ûïà×üƒþ Ãÿ‚†þгç…þ0iô¿Œ þøÇ_>OðóNøá§|<ý²¿fËÏŒ?¬ïµÍ_^ø?®ê÷š‡tMoÄ:w…|Ui⯠øËž+ðo†Öµí"ÏÄzF»¡ê—Z5Åäz¾¬éWÓ[%¶£g,À@|~ÿ‚Ë|L½ý®>!~ÅßðLOØSÄðSÏŠß³·‡æÔ¿k¿øgöˆø{û7üýž¼U}­Á¡xká%ÏÅÿˆþñ‚|iñ‚{›_7‹<c©èÚ…çðÞ³¡é²x³Å>øÕ | ô€ðZOƒ_´oüÓö±ý²<ðïÄøíû üøÏâ¿Ú¿öø“¬ÏàŒ¿¾2üð|[¬ü!ñµÖ¥áfÕô¿ø³WðˆtO|T—À N ?\¶Ö< |Ið?Ä…ž øþ £ûaüÿ‚wþ×ðWOØ»ööñç‡ÿcoŠß¿à£ÿ´çü;àŸ‰hßx/á‡Á¯Ž?³í#­øCBø⯅_õÿÁàŸø‚ÖçÁs·‰<>§§x‚Â{ûýO´Õ¼SðÛãnð»åÿ†ž?ÿ†¶ø;ÿcÿÁIþø+âŸû~ز~ý—~+øÿßð…Âñÿ†?ý„ÿh?‚_4~À¾øðëÅ?´÷í'áÿŒþðÖ±ð»Äf×÷_´æ‘ð+ào< ¡üMý¨þþË—ºæ«àÏütÓì~|,ñ'Žþü[Šë[ðgï‡ZçÄÕþ~üRð'Ç…Ÿ >5ü-×á(øeñƒáÿƒ~)|:ñ7öf±¢ÂEàOˆÓ|YáwûÄZ~‘â #û_Ãú¾Ÿ¨fkºV™¬X}£ìºžŸe{öÑ~ ÿά¿÷€þ]}ÿÿÿ”YÁ4ÿìÀ?cýg_‡4÷ýQ@|ÿÓÿ“uøÿgÿÿbÿצþÙ÷ý|ÿÓÿ“uøÿgÿÿbÿצþÙ÷ýQ@|ÿ,ÿ“uøsÿgÿÿÿצþÆõ÷ý~pÁV5Gß²_‡¼C£øOÄ=ÕôÛþ m¬é~ðÏ…lüUãMGKÿ‚ž~Ç÷Ö>ðÍ玼Mà¿ÚøƒÄw0E£è×>1ñ„ü+£ym/ˆ|M é yªZ€~Ñ_Ãd~Ñ_ô‰ßÛÿÿ7üËÿ¦YGü6GíÿHý¿ÿðãÁ,¿úe”÷ýðü6GíÿHý¿ÿðãÁ,¿úe”Ãd~Ñ_ô‰ßÛÿÿ7üËÿ¦Y@Ñ_Ãd~Ñ_ô‰ßÛÿÿ7üËÿ¦YGü6GíÿHý¿ÿðãÁ,¿úe”÷ýðü6GíÿHý¿ÿðãÁ,¿úe”Ãd~Ñ_ô‰ßÛÿÿ7üËÿ¦Y@Ñ_Ãd~Ñ_ô‰ßÛÿÿ7üËÿ¦YGü6GíÿHý¿ÿðãÁ,¿úe”÷ýðü6GíÿHý¿ÿðãÁ,¿úe”Ãd~Ñ_ô‰ßÛÿÿ7üËÿ¦Y@Ñ_Ãd~Ñ_ô‰ßÛÿÿ7üËÿ¦YGü6GíÿHý¿ÿðãÁ,¿úe”÷ýðü6GíÿHý¿ÿðãÁ,¿úe”Ãd~Ñ_ô‰ßÛÿÿ7üËÿ¦Y@Ñ_Ãd~Ñ_ô‰ßÛÿÿ7üËÿ¦YGü6GíÿHý¿ÿðãÁ,¿úe”ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}ÿ_ˆ?¶×í-ñ£âÞñgüÛö¿øáý_öÿÿ‚Xh|Rø¥ã_ØWð'…þÁÿ5ý‘õ;_íÝ?à§íÃñƒâmÇöÝí•·‡tÏøF~x‹ÊÖ5}>}gû#Ãñjºî™û}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ñÓöNý–?jøE¿á¥ÿfŸÙÿöˆÿ„ûoþ¯ø^Ÿþ|[ÿ„?þoìøI?áÿ„ÿÞ ÿ„þøGôí¿ìŸ²jÿbioûGömŸ“¿uû=|¾Ô~5ëß¾Þjÿ´§‡ô¯ þÑz¥×ÃOÜj?¼+¡xWPð.‡áŸwÓh¯sñSÃú7‚umSÁÚVã©uí;N𮥨xzÎÚ"òâÎO`¢€<Rýž¾k>øIà]càwÁý[Á?|Aà/| ðv¥ðÓÁwÞø+⯅ztš?Ã|$ðõÖ‹.‘ðãÄ4‰eÒü¬ø:ÏFÔ|§I%‡®tëgh x³Â~ñï…|Mà_xgÃþ4ðOñf§x¾,ð¯ˆôëÄ>ñ7‡µ‹kÍ#^ðþ»¤^^izΪYÝiÚ¦usc}m=´òÄÝàÿdïÙcö_ÿ„§þ£öiýŸÿgøN?±?á5ÿ…ðoá×ÂOøL?áþ×ÿ„oþŸø@<9áÿøH?áÿ„ƒ^þÄþÖû_öWöÞ¯ö³ÿi^yÇÇOÙ;öXý¨?áÿ†—ýšgÿÚ#þí¿øB¿áz|øuñoþÿøI¿²?á$ÿ„[þÿxƒþÿøH?áжÿ²~Éý«ý‰¤}¿íÙ¶~O¿Ñ@ÿ Ÿágü*ÏøQð­>ÿÂ’ÿ…ÿ Ÿþïü!¾ÿ…Yÿ ³þÏøCÿáZ½þÍÿ„Kþÿü"_ñKÂý‘ÿçü#Ÿñ$þÍþÌÿE¯ ðŸìEûø ¾ð/dOÙƒÁ~ ð_Æ ö…ðwƒ¼'ð áO‡<+á?¾Ó­´|qðχ´ ÙéÆ H³³Òôo‰z]¯4½:ÖÚÆÇZ‚Ú¢_§è øéû'~˵ü"ßðÒÿ³OìÿûDÂý·ÿWü/Oƒ¾-ÿÂÿ 7öGü$Ÿð‹ÂáÏÂ?ÿ ü#úößöOÙ?µ±4·ý£û6ÏÉïÿáSü,ÿ…Yÿ /þ§ÃÿøR_ð¯ÿáSÿÂÿ„7ßð«?áVÂ9ÿü+OøW¿Ù¿ð‰¿ÿ„Kþ)oøC²?áÿ„sþ$ŸÙ¿ÙŸèµèPŸÿ§øYÿ ³þ_ü+O‡ÿð¤¿á_ÿ§ÿ…;ÿo‡?áV¬ÿ„sþÿøVŸð¯³áÿ…ÿ—üRßð†ÿdÂ9ÿçüI?³³?Ñk ðŸ„ü+à/ øgÀ¾ðχüàŸøF🃼á=Nðç…|'á_iÖÚ?‡¼3áŸhöÖzFƒáý H³³ÒômK³µÓ´½:ÖÚÆÆÚ h"‰z (¢Š(¯€?àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ¯€?àšòn¿¿ìÿÿà¬_úôßÛ"€>ÿ¢Š(¯€?य़òn¿ìÿÿà“¿úôßØÞ¾ÿ¯€?य़òn¿ìÿÿà“¿úôßØÞ€>ÿ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(àø)gü›¯ÃŸû?ÿø$ïþ½7ö7¯¿ëàø)gü›¯ÃŸû?ÿø$ïþ½7ö7¯¿è¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯€?àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ¯€?àšòn¿¿ìÿÿà¬_úôßÛ"€>ÿ¢Š(¯€?य़òn¿ìÿÿà“¿úôßØÞ¾ÿ¯€?य़òn¿ìÿÿà“¿úôßØÞ€>ÿ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(àø)gü›¯ÃŸû?ÿø$ïþ½7ö7¯¿ëàø)gü›¯ÃŸû?ÿø$ïþ½7ö7¯¿è¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯€?àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ¯€?àšòn¿¿ìÿÿà¬_úôßÛ"€>ÿ¢Š(¯Îø*ŷН?d¿YøYðÿ‡Òüuà½G^Ó ¹Òì|YáË›¨µ‹?Ñúøþ Yÿ&ëðçþÏÿþ ;ÿ¯Mýèÿ…sÿMÿ£Èý€?ñZ´WÿMŠøW?ðTßú<Øÿ§ûEôØ«ïú(àøW?ðTßú<Øÿ§ûEôبÿ…sÿMÿ£Èý€?ñZ´WÿMоÿ¢€>ÿ…sÿMÿ£Èý€?ñZ´WÿMŠøW?ðTßú<Øÿ§ûEôØ«ïú(àøW?ðTßú<Øÿ§ûEôبÿ…sÿMÿ£Èý€?ñZ´WÿMоÿ¢€>ÿ…sÿMÿ£Èý€?ñZ´WÿMŠøW?ðTßú<Øÿ§ûEôØ«ïú(àøW?ðTßú<Øÿ§ûEôبÿ…sÿMÿ£Èý€?ñZ´WÿMоÿ¢€>ÿ…sÿMÿ£Èý€?ñZ´WÿMŠøW?ðTßú<Øÿ§ûEôØ«ïú(àøW?ðTßú<Øÿ§ûEôبÿ…sÿMÿ£Èý€?ñZ´WÿMоÿ¢€>ÿ…sÿMÿ£Èý€?ñZ´WÿMŠøW?ðTßú<Øÿ§ûEôØ«ïú(ñöÚðWíõ¤|0ø9¨|ký¥¿dˆ ­ÿoÿø%‡ü$Þø[û|hø?ã½_Íÿ‚šþÈðhߨ_|Yÿ øãáÿýƒÄéZž§ý¡ð·ÅÚú=–¡¡Zÿb^êvÞ"Ò?o«àø)gü›¯ÃŸû?ÿø$ïþ½7ö7¯¿è¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šøƒàí½á_ŽŸ¶×íÓûx{Àþ Ò5ØCÃÿ²}ÏŽ¼{¬ê:pÓ¼kâ¯Ú—Àÿ>&ÙèÞÐlVêæø/Á>ðs\ø›XÔí5wÅ^&ñ6‡„ô­#Áº_Š=|EøwûI|kŸ]ñ·ü*Ï~ο±¶‰âÙ¾j¿5]xGÅ÷¿~ x“âkY|>ø[ð;À:%Åö»¬O\ø¡ã‚þ²Óü]¬€}ÿE~`xCþ 㿉Ÿ´ÇüƒöVø[û4ÿÂkñ7þ ¹ðÿöxñí?þ.áÏøj¯þÑ¿³ß‹~5øGá×Ú¼Eà«üò¼AáÝ?á×ü%Úu£¿öçü%Úœ–™>•?ßÿ üEã¿ü,øiâÏŠ_¿áOüMñGÃÿø‹â/ÂOøK´ˆð«¼w­øsMÔ¼]ðëþßÁmáÿÂâ CÃ?ð—hVÖú?‰?³?¶tÈ"²½‚5ô (¯ˆ?àœŸ¶÷…ࣟ±ïÃ/Û+À¾ñïü^ñÆkoxWÅšŽ©xª ü3øçñ+ᇵŸ_HÒüAâÍ#ÀV~-Ö|3¥ßëúw„urçÂÖ>,ñ¶е€·è¢Š(¢Š(¯€?à£ßðQïÙÇþ ¡û8øÿã—Ç/ü?Ó¼[§|?ñ׈¾ |ñŽ­|+ã¿Ú'Ç~µÒmt¯‡_´«]'Å^-Ô´|[â¯h.ñvàhÿ ôAã¿Á§xKNÔ5º~Óß~3ÿÁ=>þÙ³çìñáÿˆ¿>1þÌhßþÌ^&øßÃ;[Ô~&xŸo>[|t¾øk®é~ ³Ò5ÝGDðŸ‰ÿ¢Š(¯€?य़òn¿ìÿÿà“¿úôßØÞ¾ÿ¯€?य़òn¿ìÿÿà“¿úôßØÞ€>ÿ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(àø)gü›¯ÃŸû?ÿø$ïþ½7ö7¯¿ëàø)gü›¯ÃŸû?ÿø$ïþ½7ö7¯¿è¯€?á²?h¯úDïíÿÿ‡þ eÿÓ,¯¿è €?á²?h¯úDïíÿÿ‡þ eÿÓ,£þ#öŠÿ¤Nþßÿøq¿à–_ý2ÊûþŠøþ#öŠÿ¤Nþßÿøq¿à–_ý2Ê?á²?h¯úDïíÿÿ‡þ eÿÓ,¯¿è ñ¥ý—ÿàáø,ì©â§ñ†?mߌtKÄ Ö|Uà_ڃĿ´§…|S§x/Q¾¾KÏ‹·'ñ·ÃÏøªÛTÔt\üñÃ?kútÖ2¿‰­õøWTÐÿ­ïø%ü5ûq~Ù¾;µøeñþ Wñöÿ‹¤h^2ø·ÿûÑ<[ýð‹Gøƒ£Üé¿ ôÿˆ>øÃ­øƒáÿ‡ÿá øáÿ sâ—ÄïÚ³àÏ4mø´Ïø¶ºÜž'ý^ýÿà×ø#÷ì—¨Ùx–ûàgˆ?j¿i> ×µÅ_µï‰ì¾*iÖ:v¿áX¼+/„ï~x{ÃÞýŸð/†|?à¿ø/Ãú7„üàï èÚw‡<+á? øsN¶Ñü=០ø{G¶³Ò4èZEž—£hÚ]®¥éÖ¶Ö66Ð[AJxOYÔ|Gá_ ø‡XðŸˆ<«ëÞѵSÀ¾,¹ð­çм¨êšuµõ÷„üMyà_xÓÁ7^ ðåÌòèúÍσ¼câÏ Ï¨ÙÜËáïkºCYê—]P_˜ðYÿÛǰ7üö¾ýª~Ùý£âoÃÿ‡ú'‡~jhÑâÿ„KÇ<႞ø‹ö_xcÆ^׿áXxƒâ&Ÿñþw÷º?áÿ„GSŸL²ÖçÕlOëàø*uçìmmÿûý¨l¿à ^#ÿ„3öEñGÃø<ñoưx*ûâ±àŸøY'Ð<à?øGÚo€>(Þ¯Ä|Mñ'ƒ4ñ·ˆ¾Kðÿã•þ«†µ->Ò_Š ¼wáÿ„Ÿ.¾%üHø‹ðÿ\Ö> |ñããïü-oÁÿà›¾ þßÿ´ì1mÿAý¿moˆÿ³ü'áÇü&ß><üSÓµx#Ãúí3"ë:gˆ%ýý¶ÿି±­ûéÿ³ÆÙ¿gÏÚ›àß|MáïÛkþ S=‡Áÿ‰>8ý“>øûâ/Ä‹ù> ê>øûá»ë_-þ êßþ2üxð?¯~Oñ â]‡ÅoŠ_5O¸4oø%·íO¯þËðHÏÛ[ö)ø‘ÿ ›ÿGý“`Ø÷öwñ—ƒhˆ~"é~7ü Òþx3Rø—û)~Õ¿ 4Ý/Qño…áñn£â½~Âÿ@ð¤>1Ò¼c Æ•ªÛèþ8ÑþüYø ðÿü~çâìÛÿPøqð³þ íûÿÁWÿd?ø&íOáÿˆ—_µ?ÀOø(ì¡ñ3Ãÿ¾üeøoð[\Õþükøñ·]ø¡ñ3Wðïˆ>.êþ ðçÃïé_õ£«=í¶“ý¡ã¥»ø)¡þÎþðçþ £û~Ê·/ü!ñá—ìÁáûÍ_þáðö5ý¯?`Ÿ ø³â·íªøWáÆ]ö9ø‡ûRÏ{âdÓþ3èþ$ø™áýã'ï ëºÎƒãßëÐE§ZÜè º‘y=«Kß±OìÁÿ5Ô¾;kÿµü ö¯øâx_ûWÿ³Çì‡û k?þþÆÞÑüKàï è>4ø‹ñF/é¾ø›ûE|@×otkçðO„~;_|Hð'Á íOÅÞ4ðòøƒÆ~²ø7òÿÅø&íÓüWöÝø¿ð‹[ýˆ>&~ÁÿðUOþÊÿ ¿o…ÿ´3~Ò>øûáσ_¾ë?³·Å¯þÏš×Á]J×ÃsøƒÆŸüGâ­wÃÞ9ñW‰|;=¯|}ü8ñ…ü_û-i~0üøS­þÌñO†-îþix'Iñ¦‘ðkX±ðïÿ‰_[Føk«|;ý~ÿ‚üdý®>?Á¢~)þݾñÃOÚÃ[ðÿÁâÿ…üYð¿[ø1â©5ÁE>ø Ã^,ñ7Ã-~ËK¹ð¯ˆ>!ø#Ãøƒ¬Ûiº/‡¼+}¨øžçVðO†|5àíCBÐtï¨>Á>à¿ß²‡'ýˆcÏÛïö@ÿ†%ðÏÄéŸiŸÚCÀÿ~(ÁA?gŸÙÇûcÂ:ÇÂÝÁóx÷öeø›ÿ ËE²ñ?ü§øñ~Ëâ ]ǧx_]ýŸü5ÿ ÷Áß~ßÿ‚ÿÁ1~!~ÑÿðGO‰¿ðMO€|Aâψž!ðÿÁÃßÿmŒŸ>%ø«ÅÚ€¿h†¿|câÏ‹ÿeÐ~!øÛTñ‰í¼+â9l­´O ¯…tMGPÑü!á øáÞ—£éýž¯Àø#ü^ÚÇþ ³ûbø›ýâo¿à§þ&ýŠu] BÿFð%¿ÂÏø'oÃo ü-ø)¯éúf¡ý§â¾ x£Ãÿ5›ÏŠZ­Ï‰îü9­ëÚeÇ„ü)à›(n´ûßßêüÿ‚oÆ$ÁUÿà­ÿðO½gþ%Þø÷ñÃßðWŸÙª}wþ'Þ;øáÏÚn=;á×í­j"ð¶ßxoáÿÂïÚ7Âø}ð·Àž,Ñ<#ñLè÷úž¹suñ;Ãí‹´ð€>)ÿÉÅÁêßö`²¯þºËãå|ûFþÎÿþ(~Ïð@¿ˆ_´¿ì¥û_ÿÁC?à‘~ÿ‚`~ÍZ'd_ØbÿÄzÅ? ~Ù7¿³9o|tø£ð³Àþøñ+áý×ÃûýÁþ ÕôŸŒ^ ±øgâ=;Å×Wþ)ð­§Œï~~ÔŸ»Þ4ÿ‚_ü}ñÅoø8[ÇV>/ø?‘ÿeý˜> üý-îµÿ&£à¿|8ý‹þ'~Îzæ¡ñ®~ÏmáÏÝxÛÆš^©¥]xóâ>£?…mõ ëÍ*ÇWŠßCºóýkþ ëÿ^øð÷þ ¿ãØ'ö¿ø?¥üdý–?bƒ±?í%û(~Ó>#øÁâø'§Æ=;áçÃ;}6oŒÞѾøbÏâ&ƒñƒBø‰gZw`ð÷…|UãÙx?GÔ2~`ÁþÿÁ?oéÿkŸ?±çÇŒ~Áÿ´Áÿø»öÿ‚$ü|—â7‡|UðÓã/ÃŒ¾ ýª~üpÓþ2ë>6êÖß ü¿|;ð“âÄx$Ô|yðò×ãwÄ]"Â/ƒ¿<õüû~Éßÿàž?³—ü Â? ²?k¯Ž?ÿh…¿¾-ÿÂuñ&ÿþiµ¯ôÝ?Bÿ„ SñïÃ-ìö_þAý§áßiÄ¿ðŽù“êÍ«ë²jþÁ°GíŤþÜ_?à¦ðSŒŸ³ÿŠ¿i¯~Ïú/ìuð{à÷ìu¢ø·Nýœ~~Î:w‹|7ñc[¼¼Öþ,xoNøµâ¯ˆ*øµ§jZݽ¾·©j6¾µÔ|N©âh¾*ðoƒ~ |ÿÿåý“à©¿ðJOÙ;âÿìÑ㟋ßðL _öEý˜gÿÚËIJÆïÜ~Ñ^ñØø§«üIñWÆ_‡~?ý´ŸX»‹á—ÃÿÙÿL²ñGµoŒÖ µí_Ä~Ñí4{ ƾ)‡HÕ¼[ª€GÕüÁÁl¾øïãÿü‹þðoá×ǯˆ³'ˆ> ÃÓ4-Cã_Â{M_Š~ð#~Í¿ n¾)iÿ 5]v›/ü@ñ·Ã+oxÁ¿ ²Ôu„~#ñF›ñCúf§âéš}Ïî÷ìEñ¯Å_´§ì_û"~Ñž:Óü?¤øÛã÷ìÁð ã_Œt¿ Úê6>Ó|UñSáO„üuâ?Ã6:Æ«¯jö~³ÕõÛË}×T×5FßNŽÚíWQ¹Io&ùö©ýŠ~)üqÿ‚“ÿÁ)l_ ëÿôï†_°¿ü7?ü-½ ÄZ¯ˆí.Ãñ#ïÿ„ÿðqçüãÅ?†Ÿ>þÙ?ð”|MøÁñÁ¿ ~xgþçö«Ñ?á"ñßÄé¾ðŽ…ý³â/ºG‡ôíjú~Ÿý§®êºfaöµjz…•”SÜÅïÿµOìSñOãüŸþ KûbøO_ø§|2ý…ÿá¹ÿámè^"Õ|Giã¿ÃMüðïÂߺÓ4ß jþÕÿ²ÿ‚P~Ú?< ñY½ñ©¨ø/áçÁšýæ—á? _kø#Þ º¹ñ§ŒtÛŸèþ³ø…?…|YâoËâ–ðv½ªhW_OÿÁ'å_ðM?û0ØßÿY×áÍ{í»ðSÅ_´§ì_û]þÎ~ÔÓ|UñSáO‹< áíCÄ×Ú>•¯jö~³ÕõÛ;fëKÐõFßNŽæk+Q¹H¬æ?b/‚ž*ýšÿbÿÙösñÖ¡áý[Æßf€_;¸ø§ÿø Å/z¡©éÿÙž—áÿ…üAðÿF³ø[¥[xbÓÄz&s©Ûø³Å~6½š×P²ýþ¯Àø!×üdŽÿিðUÆùü?ÿý¯æðoìû¬h_ñ*ð'Ä/ØÛöÑïÿfÿÙÛâÆŸà{í?|ñÆ×¶ß­~)i¿ît íGXðæ™«øá§€ñƒ¼Y£iÞ#ð¯‹<+â=:çGñ†|MáíbÚóH×¼?®é—š^³£j–wZv©§]\Øß[Om<±7AE~ ü-ÿƒo?à‰_üw¡|EðŸìðÿWñ‡´ÿ³ôÿŠ_~8|qð%Çö¾¨hW_Û¿ ~5üPøðËÅU–§s>™ÿ 7„uìMb-?ÄZ7Øñ§ðÿâ‡å] â—Âj¿ÂÏŠÚ=¦™¦|GðoŠl´. ?¢€ (¢€ çüYá? ø÷¾&ð/޼3áÿx'ÆžÖ|'ãx³FÓ¼Gá_xWÄzuÎâ ø›ÃÚŵ摯x]Ò//4½gFÕ,î´íSNº¹±¾¶žÚybn‚Š(¢Š(¢Š+Çþ?|øgûNüø…ðã6—â {áOÅoÍá?ˆ>ðÏþ!|0Ô|Iá[ÉíåÕ¼3sã…ž)ð_­|?â;hDñf§xŽÏNñw…oõŸxžÛVð¶½­h÷þÁEsþðŸ…|á_ øÀ¾ðÿ‚üà¿èÞðwƒ¼'£iÞð¯„ü+áÍ:ÛGð÷†|3áíÚÏHÐ|?¡ivz^£ivvºv—§ZÛXØÛAmQ/AEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWÀðM?ù7_ˆßöÿðV/ýzoí‘_0ÁT¿à¸Ÿ³WüÅ_¼=ûN|ý§üY¤|tðÿ‹5Ÿ‡ž:ø)áï‚(ð­þ£à-GF±ñÇ„õ ?üzøyãm/ĶñW‚u‹«›¿/…u=;ÆZT^ñ6µ«é~-Òü5ùÿOÿƒ…¿bÿÚSâß…`ü1ý§ôŸŒŸ¿iÿø(¿Æ¿x—Åž øScðÏMð¯ÅOÚö®ý·|=§ø›YÑþ5kÞ)³ñŸÂvÏÃúÍ®—àÍgN·ø…Γcªê>H¼Y0õ»EP_ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}ÿ_ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}ÿEPEPEPEPEPEPEPEPEPÀðRÏù7_‡?öÿðIßýzoìo_×ÀðRÏù7_‡?öÿðIßýzoìo_ÐEüÁÁW>ÿÁΞ1ð%ÕìCûV~ÈÏ„¡ø«è^/ðÏìñð§Pý“hï‰ZÇÄ]bÛÂz¾ŸámgöŽø§ûLøKÁ_ð¬<$Æžø¥àÚƒö{ñÝ­Ö±ãDÓ´ÍSžøks~ýüRø±ð³àw5ߊ_þ%ü?ø?ðËÂÿÙŸð“|Eø¥ã/|?ð'‡¶õ?ú7öY©iÒ?µüA«éZ™ý¡¨[ý¿XÔôý2×ͽ½¶‚^ƒÂ~,ð¯|+áŸxÄÞñ§‚|iáýÅžñ„õ;Ä~ñg…|G§[kñ7†|C£ÜÞi÷‡õÝ"òÏTѵ.òëNÕ4ë«kë™í§ŠVÿoø(_Âßø)¯ÃÿŠzeÏüëBý¯Ûâm·ü%_ |ãßÚËSøŸãoøJ4…¾#žOè_~-øÿPñ‡þ$|?ð׈&ÛÿiÿÂMâï…¿ +h> Ñ5Ÿ ÝøÂÚŒôíRçÂñg…|I®i>"Ó<àü-ÿtý§~2ü=øðgöÒðþ½ñ[â·ˆ!ðŸÃïx›á/íðÃNñ'Н ¸—IðÍ·Œ~)ü&ð_‚m|Aâ;˜Dðž¨øŽÏQñwНôoxbÛVñN½¢è÷ÿ_þÛßðRØ—þ Ãá_øÇöÑøùáÿ‚ºGÄ¿j>ðχ¼qãŸx¯QÑ´åÕ5ëÀ¿ ¼/ãO]xÖÓé‘x›Å‹ááá_ ê>!ðž®k:~¯ã ØêÿËí·®ÿÁG?eÏÙ;¿?à·ðMØöìÿ‚Lü øû8i¾9ø¯û xóTýŸ|wðSÄz?ÄŸüðOŒ¼á]sÅŸüAoñDðýíÖ•/ÃOÙ·à·À_…šÎñVÇÀúoŇ ÿádø׿×?á¾¾#ÁÅðTïøbŸøvŽþ6üøû´ÿ‡•ÿÂèñ?Å?‚ÿ 5ŸÙzøL¿áˆÿáSý»Å¿~ê¾-øÑâ¿øi?ìì_xâÇ?µ|ÝOÇz—ö¨ô=£Á\ÿà^#ý‰|Yÿð÷í1áýwö<ðˆ-¼'㯊Ú7‚þ(jš‚üUyã ü<³ðÏ‹>ØøŒžñ׉!x/¿~ÁûJëúÃí?Ã>%¾ðšü;Õþ-~ÐV³ñCÇv_¼‡?m/ˆ?³WÆëoû)¿uό޸²Ñîüwã na£ÍñâoÅŸø›òƒÃ>,ñW‚ÿàÆ+cÁÞ&ñ„õ{Ïø³Âwš§†uGAÔn¼+ãßø*î³à_xfæûK¹µ¹ŸÃþ4ðOˆüCàïhÒÊÚwˆü+®ë>Ö-¯4RúÎpé{áoüÇþ ñ§öŽÐ¿dÿ†?¶×Ãÿ|mñWÄ Oáo„ô¨<#ñcNð'‹üw§]j}¶…ázÏÃý;à—Š¿á*ÔôæÒ~j~ø‰¨èÿuGú?ÃCÅZŸŠ¼3k«¶_íGñÛáGü‹þ¿û4xÇ?Ø¿k/øx·ü4‚¿áðv©ÿ ÷ü(Ù·Âþ?øSÿµáíGžÿ„Wźæ­ÿV½áÏíÏ;ì#þØÓ#ŠÉ??iØ[þ ÍûSÁ8õo€>5ðgüàŸØ¾ßülð¾ Kûbü.øYð?G¹Òõï‰6´ïÁørÆ/†_ÿ³,¼Qâ?ˆOñ ÊÞçÀž(ðç‰<[í<_ðëÆÞ5ÐüCõŒ´ßhßðPø4kGñ×Å¿ü~ñ¶“û0~ÞºoŒ~;xOǺÅO üjñUü—àí¯ˆ~-øgâ~±Z¿ÄüGÕâ¼ñŽãÝR(õiÚÍ·ˆo£KFUÔí~@ÿÁ/j?ŽßðP­cã·íÓsãŸøFÿa|@ñÿÀŸØ;à—‡|3àæÑþ+ü,ø7ã»ï ëÿ·Ä_ø‡ÃÖÿ¬¾ |`ñÖ‰âÏxGàŽ³cðoß| á âñ7€~)x£Äš/ÅxþŸÿ‚›x³Å^ÿ‚mÿÁA¼uà_xƒÁ~6ð_ìAûWø³ÁÞ1𞳨øsÅ^ñW‡>xûXð÷‰¼3âæÏWÐ|A¡jövz¦¬éw–ºŽ—¨ÚÛ_XÜÁsR¯ŸÿÁ<'á_ÿÁ(?à›š?ƒ¼3áÿ 韱ìÇâËÍ/Ã:6 é×^*ñïÁÿ xëÇ^&¹±Òí­m§ñì?øHÿá`ßùšž{ª?ê÷í½ÿsÿ‚uÁ8üUàþÙ_´Ç‡þøÛâ/‡õxWÁÖÞ ø¡ñ3ÅSøWMÔWG>&Ö|=ð‹Àþ=Õü'áýSW[ý/Ã:Ï‹lô=;ÅÚŽâË \ë>ñTZ?òEÿ:(ÿŸúL=~¿þÒ¿²oí“ð¯þ ûh~ß_ðG?‹ß°Ç¿Úkdzÿÿ~Úÿ±×íeqc¬|Søcâ? xÁ³ý—Âü,»ð¿Ä…ðпþé‚ßÀ>%ü'øYâèöŸüWâ?è±xóözúÿöžÿ‚ï~Âÿà™_?à¡hŸ‡ÿÿ¯ˆ>?ÁHb_ÙkâÄ/…Ÿ´ÇÏü+ñ·Â¿Ù‚oÛ'ÇZw‰¼=ã„Ó´Ùá>&[ü³ñ·‰ì|/yámwÄïÅkÍ;á÷„þx{ZÕ¾-øËÅZ¶¤øSÀºÍγ¥¥ßÛõüÐüXøðkã§üYð{Tø¿ð÷Ãÿî~ÿÁtOߢñ43ßiÞ øËáÛ«Æ^ð¯Ä+mÜ.‘ªxƒÂzG|Kyá9µÛR øªMÇZ¾ão øWÄ:(ëÿìCÿ!ý‰à£ÞñÇŒbïžøÕ¤|4ñáŸÙÛx{ÇñW…5gNmSA¹Ö| ñ7Âþ ñµ¯‡üGm§†|XÞ>ñ&£áïhú³¨jþñEŽ‘öý<:7„ü+áÏø:³ÅšÇ‡¼3áý Wñïü†ÛÅž:Õ4mNÒõxªÏöêðÏlüMâËëh.|Gâ _ø/ÁÞ¶Öu‰o5<+á? øz+•Ò4.Î×ú Š( ¿ t/Úã·ìÝÿWÓÿbÚ7Ç?ð´þþÝßþ)|vý‚>)k¾ðw†¼wð÷âŸÁxôÍOãÿì9¨iÿ ¼=meão‡þ øesañÓáoÆïоøuâ=;GÔµ?„>$ñ÷í㯰kº'ëõ~ÿÁv?â—ñßüâ—†âø›¤Áo¿c_„úWÄ] þ%;Ó>|qÑþ(xwã_ÃM?ÅÚÙüAeðÿã‡ôMBø¥àÛmB/|@Ñô3Lñf›«ÙXZÁïõQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ïüû!ê?µ§üûã•÷†¬¼A«xÛöTñ†?kÏ èú6½á]N¾Ó¾Ùx‡Ãßo|Y/Š¢XõOøOö|ñïÅÿ[h:©£x«XñW…¼3g¡K®\¹ðw‰¿˜/ø2ö_ð¯Ä?Úãö´ý«üBþÔµÙŸàÿ~xÃÚÏ‚ôíoQÒüUûJk~-–óâw„üc}|n|â x'àŸŒ~\®£M¨øŸÂ¿*×u–ð¬wˆ´èxÛÂz…u/Gà¿üLýŸ>| ø¡sàmÆ^4ñW„¼UãOhºî¹ksj<5 ~ÏQEWÀðRÏù7_‡?öÿðIßýzoìo_×ÀðS85øeÝYѼ#ñÇðƒþ×ÿðN/Š^ ðÿÂ߇^;ø·ã¿øA>ÁD¿eŸ‰ßõÝ áÇÃø·â‹áøá/x³SÓ<'áoXþÇÑ5 ›m>ãìì´÷ýðü<³öuÿ¢sûÿâ§à©¿ýôÃË?g_ú'?·ÿþ*wþ ›ÿÐo@Ñ_ÃË?g_ú'?·ÿþ*wþ ›ÿÐoGü<³öuÿ¢sûÿâ§à©¿ýô÷ýðü<³öuÿ¢sûÿâ§à©¿ýôÃË?g_ú'?·ÿþ*wþ ›ÿÐo@Ñ_ÃË?g_ú'?·ÿþ*wþ ›ÿÐoGü<³öuÿ¢sûÿâ§à©¿ýô÷ýðü<³öuÿ¢sûÿâ§à©¿ýôÃË?g_ú'?·ÿþ*wþ ›ÿÐo@Ñ_ÃË?g_ú'?·ÿþ*wþ ›ÿÐoGü<³öuÿ¢sûÿâ§à©¿ýô÷ýðü<³öuÿ¢sûÿâ§à©¿ýôÃË?g_ú'?·ÿþ*wþ ›ÿÐo@Ñ_ÃË?g_ú'?·ÿþ*wþ ›ÿÐoGü<³öuÿ¢sûÿâ§à©¿ýô÷ýðü<³öuÿ¢sûÿâ§à©¿ýôÃË?g_ú'?·ÿþ*wþ ›ÿÐo@ü³þM×áÏýŸÿüwÿ^›û×ßõøÃûZþÖ¾ý¥<ð—áÂ/„¿¶þ­ãm[ößÿ‚nø²8üYÿÝÿ‚…ü+ð®›á_…ðP¿Ùƒâ¿ÄOx›â'ÅÙƒÁ?ü!áÿ|;ðOмU¬ë>*ñV§[éÚ5È/rööó~ÏPEP?âÏ øWǾñ7|uáŸøÓÁ>4ðþ³á?ø;Åš6â? ø³Â¾#Ó®tøgÄÞÖ-¯4{Ãúî‘yy¥ë:6©gu§jšuÕÍõ´öÓËðŸ…|á_ øÀ¾ðÿ‚üà¿èÞðwƒ¼'£iÞð¯„ü+áÍ:ÛGð÷†|3áíÚÏHÐ|?¡ivz^£ivvºv—§ZÛXØÛAmQ/AEQEQEQEãÿ¾üý©~ |BýŸ?h?‡¾ø©ðo⧇æðÏŽ¼ âhg};WÓž{{ë;›kË‹=_Bñ…«ÙéÞ"ðŸ‹<=¨é>*ðoŠ´Å~ÖtohÚ^©iìPóÃàø6ÇöGÐu_ÆoÚÇþ ?ûcü ýœüAáo|5ý?kßÚwDø±û#Ùê?ü+ªxCá͵ïÁK…^ÒÃþÒ5G³Ð|'§_iž¼Ñ!—À¾'ѼAðÛZñ?‚õï·ÿoø$Ïìãûøïà߯¿xßö€ýš?i¯€ßÛZgÃÚÃö:ø—kðCöŽÓ< âMÄš?ˆ>Þ|Do x«ûGáþ£ÿ V³¨[é÷:QÖ<;uªøž×Âzî¢üCø¤ø×ôþŠøþ ÷ÿØýœà›ÞøƒáŸ‚ñÇ>4|@×>)|~ý£¾:ø¢×â7íñÿÇzƱ­êöúïÅ¿‰Pè¾ÿ„ƒþÿøH5[oéš~£èö—Z¯‰|Yu§ß|@ñßÄ/ø·À?cø"ßìãûkto†ß?kÿ‰³/ćÿ¾Û~Á_´'Æû_Œ¿°ïÿ|eñÝ·Ž|Y¡xào‰¼ÿaÏ ®§ãox×X×¼%ã_ÛxçPñvµâíg]¹ý~¢€?žÁ³ß°g„|`×>5ü,ÿ‚y|ký£â?ìàŸjZµOÓþ jÞ]_Tðÿ„õë÷Ö¶¾%ñÖ¹¨øÙ/5]/âþ«ñ+CñÄ/Åÿ«ÿ¿bŸ…ŸkØ¿öÅñf¿ñNø›û ÿÃEÿ¤м;ªørÓÀž"ÿ†›øm¥ü-ñïü,]3Rð¦¯â _û#ÃúEµç„áñ?„~Á¬<÷Ïöý“G§ÅõýÏø³Â~ñï…|Mà_xgÃþ4ðOñf§x¾,ð¯ˆôëÄ>ñ7‡µ‹kÍ#^ðþ»¤^^izΪYÝiÚ¦usc}m=´òÄ߈?ðCÿx«öuøgãOø$Oí%âo?íGûøƒÇ:?Ã{ïˆúΣ'Š¿jØ3Yø…«^~͵‡Ã/Q¹×t‹?ƒözF½ÀøwàˆÿöyÔ~xá·Ä [Áæ­áÿéÿ»ÔPäü9SöXÿ‡OÃá>ý ?á™èyÿ„«á×ü/où9?øjOù¿áU¿ÿ’ÿù&ò'Ä¿þC_ñPÑûbÿÁÿgÚÛö޳ý¯<3ñ³ö¿ý‰?i«¿‡÷ ~#üký‚>7ÚþÎþ;øãàDºðÅׇô/Œšªø3Å¿ð–ÿÂ%ÿ–e¢êvÑiÅþ¦øoAñf¡âmá÷Ã?Á?¯ÔPæì©ÿ†ý¿eÙÇöŒý›ômâÆ;/Û#þwü6ÆŸŽ¾;¾ñ_íûPÿÂÙµñf•âø[ü/kàŸ\ý›Ãþ6ñ6áÿøDãðŸö-Ö»â_Ûgâo¼wã|ñƒþ gã¿ØOþ ûb|ýŽ¿kø+ÿíñ7âGÃÿÙóáoì±á˜?jÄ~øïÀž?Ó<'ð?Bø ¬Øøwá‡þ~Ï÷> ñ_†4ÿÚ×S³Õt}Gý–<â[«}CÃV^Kšþ¨ ¾@ÿ†)øYÿ õÿþßøÿ ·þþ§þoí_¬ÿ…Yÿ £þ§öÿö'ü"Ÿð–ÿÂÀÿ„·þ%ßÚ¿ðœÂ9ÿçú'ü"ŸÚñ7¯¯è ?áŠ~Ã}ÃÅÿ·þ Âíÿ†@ÿ†)ÿ„[ûWßð«?áVÂèÿ…éý¿ý‰ÿ§ü%¿ð°?á-ÿ‰wö¯ü'ðŽÂ9þ‰ÿ§öŸüMëÇÿà’~øËá?Ø à®—ñÚçöŸºñµ×ˆ><ø›C—öÖñd4ý®à×?h¿‹^1ýœí¿hÝbßY×c³øÁgû>k¿ ,üqá6¾‚kp]xëFðåχ&ðö—ú?ExíGð þƒàOŽ~ÿÂêý ?gøN?áÿ‹Åû.|Gÿ…IñÛÁÿðŒøÇÃÞ0ÿŠâö7ˆ?áÿ„ƒþÿøE¼Mÿ‹¿í_k~!Ñ?Ñÿ´¾Õ ñàü,/Žß³§ÇOø]_´ÿáÿánÿÅøwñþŸ?ÿámø:ËÁÿñ‘±¯áfÿ²ûü%?¿âo¢Âã»íoþ&_hû*{ýàð ¿ã)ÿá¨ÿáu~Ðòoÿð ¿á?ácÿÆ,ÉEÿ…‰ÿ «þö7üœüÈßð±ÿá!ÿ’uÿÏö7ü¿WäÄOøÙüKötÑ|ÿ¿ìqÿ€ÿ…»ñö€ñ¯üŽß~ ÁGxÇÆðª|GcðgâF¹î§ûýEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE~þÐ_ðYàçü›ö?ÿ‚_ÿkü?_†_gÿÁñwÄ·¿| ¦ÿÂ'ûG|Q˜x³ötð‰4kï ^øƒDøoáÿƒÿðˆx+á×ü, Ý|Yÿ†Ùð¿ÿííï„>ÛxÛ÷ú¿Ä›öÐÿ‚‡|Lý ÿà¨ßÿà¤_|Uâ ÆÓþÓö_ÿgŸø³Áßm|Uà? ü!ñ6ì½§ø›ÁÚe§ˆ~ê øiðïÀß tfÖý|c§x‹QðåÍÏŠ5_\êZ®±«ÿ³Ïìõñ¯Â¿´§À/ÿ´gtÿi> øýðá§Æ¿i~,µÓ¬|U¦øWâ§‚ô_x{Oñ5ŽªëÚEŸˆ,ôvÎßYµÒõÍgN·Ôc¹†ÇUÔm’+É€=‚Š( Š( Š( Š( ˆ?à™>,ñWà›ðOŸxëÄÞ ñ§¼iû~Ê,ñŒ|Y¬ê>#ñW‹)h_ð”|2øÁðÿÆ_ ~"øgûOXÑ?á"ð'Äj^ñv…ý³áÝCHñ‘ý¯áý_PÓÿ´ô-WLÖ,>Ñö­3P²½Š ˜½ŠþP¼kÿáÿÁôÛëöiø)§þÆßgøeñö@ý¸~)x»Ã?ðÐßµ\¿Úþ;ø?ñ£þ íá?‡ZïöÌÿ¥ñ‡ü#¾øãñKOþÌÓ5[-Wÿ„£íZÞèž¹Ò?£ïÙsö\øû| ð7ìÑû4xþ¯Á/†¿ð“Âà¯øI¼cãì_øL|câøþ*?ø‡Å^-Ô´|[â­{Vÿ‰¶½ö?·ý‚Ãìºe­••¿Ïÿ¿å)¿±¿ý˜ü³ÿZ+þ ;_ÐEPEPEPEPÀðIßùE—üOþÌö7ÿÖuøs_×ÀðIßùE—üOþÌö7ÿÖuøs_ÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_Ìüþ eñwÇß·gÄ?ø'ïìñÿý?à‘~ý‘?áTø‹öý©k}CàŸˆ¾)üdÖ>9|ñÄo‡¿¿dÏ‚.m¾xÛáÿ‚l®|7Çx§Æ~ñÞ›â?xn? Acáÿ ]ØüoþŸkù"ý»?dÝGöHÿ‚¨|oý½¾3Á/|?ÿ}ý‹ÿo¯ü ðÏŒü/ðÛöNð¯í?û\~ÅŸgÏ‚ÑxÂW> øeã„ÖôüøÏ¤xiçñÏ‹4éü:Ûèz‰õŸ j? ¾h?´ÓÿðGø*Åߋߵ?Çßø&í/ñûöýº>&üø®þÒà ¿²o‹¾ ë ?hOÙÆïâ/‡üš?Åï|×ï*ištúßÇ äø(ßÄø8gþ Kÿêø›ûHxÏöðø?ûbêú߇þ èß x«öø…©|Pøkc'‹>ÙÜxëÁ?µÇÁÿ‰—:ï‹~øÊÛâ¿|Lðî£âƒß<០iWÅm/M?dïø'Wíqãßø7þ íàï|'ñÃïÛ÷öý§ïÿnÿ€?h­+[ø=§x³ã/ÀÿÛ+ãÿ‹ü9ðÓã7‡<_¤x{Å:‡þ%ü)ñψeð…œ¾!øQ©â­gáα¬|Pð€fÖõ·ðø-÷ü—ö¸ý¹¿àŽŸ´?‡´ø&oí?ûü;ð§‡ÿg?þÚ~:ý»| ­ü&ƒOÔuOÚà­€þþÆr |~ñ£ñ’HµüTñƒ¾xWÁ¾j‘x‡ÁšÄOŒŸt½úÿ†£øíÿôÿ†)ÿ„çþ1—þÿ Gÿ ÓþŸÉvÿ†Ïÿ…Oÿ Ïü&_ðÂÀÿ’ÿøFá+ÿ„;þb¿ðmÄʼö…ÿ‚‡|Lýšÿà®ÿ>øëÅ^ Õ¿bÿ€?ðB‰ðPïü 🃾ßx«Rø™ð¯ö›Ö´ø«Ã>%Ö-4Þx‚óáN…yá}ÁÚ§ÄmáíÆ£%µýõ¦¨¼ºì>?û{Ü~Ñß±ü#àßüÃ?±×íûhþ̾>ý€5¯ø'ßÄ ~Ç^ºø¯ûG| ñÝŸÇ/~Ò~øƒyðYlôïøJ¾ø«û;FðM¾¹mâýGðýÓøžûÅšÞ‡­[ü1ðÆ<5ðOöâÿ‚ÿÁSk_ˆ?´?ìÅñö,ø ûdÁ~<þʳߋ¯/ˆ%Õþ#¥â]j66þ*ø³>—ãOxcáÂ|Iño†>jpÁ]ÿj?Žß²ÿü;þ_Žáÿ†ˆÿ‚¿þŲçÆ/ø¦|âoøL>ü[ÿ…—ÿ ÀßñXx{ÄðÿÂAÿþ‘ÿ7…¿±"ý§j_ÚßPø'â/Š5Ž_|CñáïïÙ3à‡ÆË›o†^6øà›+ŸÍñãÅÞ)ñŸ|w¦øÆÂXøÂWv?þý¸?h_Û‹þ eñOþ Wâo„ÿðMÚÿà'ì‹û>Á_ÿaÏ|XÕjŸ‚>-ð7íO©xïAñ‹u KÇzÁOÞøæËÀ_²Á_†Wš•ÏůÚâ^³a£ø›â/Ä¿øOÁ«¤ÃðÇâ]Ö«Ð~ÝŸ²n£û$ÁT>7þÞß¿à—¾ÿ‚¾þÅÿ·×‡þxgÆ~ømû'xWöŸý®?bÏŒ¿³çÁh¼á+Ÿü2ñÂkzG‰þügÒ<4óøçÅštþ ‚mô=?Äúφ5†ß4ÚHéÿø#¿üâïÅïÚŸãïü?ö—øýû?þÝ~ü?×i‚?ðP_Ù7Åßõ¿…Ÿ´'ìãwñÃþMâ÷> k÷žø+û@x Ä9Ðt;i:jZßxrÞíïã½²Ð<%ñ¯öþ«ð‡þ !àGÆŸ¾(~Õ~ÿ‚J~ÌðIÿ:·‡üMðà¯n¿fŸ ü+ÿ‚…ü]Ó´ÿ‰“_j¿¾5Þx/Eøy¤|ø?¯iðu¦•û6ëø‘â¯xûFÔ>$ÅñYþh¿ uO‰Ÿ»ÔQEðÄoùJoìoÿfÿ,ÿÖŠÿ‚N×ßõðÄoùJoìoÿfÿ,ÿÖŠÿ‚N×ßôQEQEQEQEðüwþQeÿÓÿ³ýÿõ~×ßõðüwþQeÿÓÿ³ýÿõ~×ßôWäü«ö£øíûÁ'¿jÏÚ_öhñÏü+_¿ áFÂã_øF|ãì_øLi?ƒ¾ñüSž?ð÷м%¨ÿhøKÅZö“ÿmÿìoû}‡Ùu;[+Û×êüÿƒ£¿å·7ýÛ7þ¶ìû@ûKøÃþýš~jßðTwãìÿâ‡ÿ ¾ßñÓö„ÿ‚2Ùü=øeeáυ߲LJü9¯\xïÂÞý¾ÚÖ÷âÄßÚá—Ãû-3âGu½?KðÿíGâ—æø[¤|Møáÿüø¬jßðP_Û³þ ×ûLh?³Güâü0WÁ/ƒ¿³ÿìÑûS~Õß¶_Æ…?~6|SðÙ߳݇Ç/Ù“ö~øgû;ø‡Ä>*ð–£ý£á/[jß<[u¯X}ƒÄ~ñE†‘ãOéž ðÆ‘ûQsÿ¶í§ÿFý¦>xïþ Q£ÿÁ,>0h·íáÿ~Ê?¿jKÃ&ÿ‡KxGáŸÄ_øŸCøŸûM|$ý¦­oïÑþ!|8ñw‹døoâ‹_>¯Â_‹¼ýŸÁ?Ú;þ'ûiøŸã_ÁOÙ‹ö€ÿ‚…ÿÁ>?k_Ùÿö:ý›üo¥þÍÿn¾)þÜ_³oŽÿ`/ÙŠßàGÀÝcXðwáÏ |SøñOÂ^ÕuøßOÒ¾èúg‹|E%­Ôž¸ð_<-ûI}¿ÿâý¯?m¯þÚà’¿ðR+ßüjý þ|ÔÿkÏÙóöÔøq øÀÞý¥¿d}gâµ§Ãm:÷âwÂ? K¦Û|!øÁàïk‹àõÐtèš¶áïZ\˨Gàÿügý¢~ ý—~0Ámà£ÿà£ÿ ¾þØŸÿcÏ‚_²güÿöÀø?àßÚ×RýŸ>þÐ_üQáÏøÃþøiûø7à6¥¦xÂZ'Ãÿ„ž¸Ô¾%üKý þ%ê^$ø§ãßø÷á?ƒ|©Þižø±:ý?ÿâðíqû`ÿÁI>6ÿÁch¿ ýŒ>Þ~ÌŸüÿöGý—¾.x[[пj|ð÷Ç›O‹ÚŸÇßÚCÔõD¶øWâ gÆÚN¹aá[èóO¨x^›Ï x+Â??hoÎø'í»ûG~ÄŸÿà±>&Ÿöý ?l_ÙÇ?ð[ïø(>…¦j¿°Ç€î¾5~Ôÿ ÿhí/Ä~Ô5Ý?âÁMC_ð½–§û?ü@øe/‡n|ñKÂ:ɺø{ñÀ^.ðŸÄ]2ò‹ n´ÐÙÿø$_í½ûOüsÔjoØ‹ööð?‡ôOÛÃþ Íℾø÷ñ3á¶£áýGà×í á_Œþñ‹þ |rðM¾º]Ï…|AñÁŸÄ¾9ðDþðƣϪèzΟ xÿĺçÁƒÿ³ÕøƒÿrøûG_øöÒÿ‚˜~Ø¿ ?á›ÿhßø)¯Äƒž.ödµñÖ±ÿ ;öqýž~CðÏöoðïÄ+=cÃZGˆ4ÚWðþ¯â}oãš’ÚËö¯¥Çï‚~3¶ñ¿ÂßþßPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ÁQÿaøyGì'ñÏö)ÿ…£ÿ _þGü+/ø¹ð„ÿÂÆÿ„kþׯ/‡ßäMÿ„»ÀŸÛÛð‚`È×¥gÿjÿjÿ§}‡û6óïú(¢¿8?nOø*Ÿìÿèø™û8ü<ý«üG⇚Gí)áÿÚGÄÞø¯%†‰qðÏÀÚwìÃð÷Cø‰ãoÜKâ;_Oâ[xFð—ÂO ü8ð?ÄO|Aø…©i¾ Óthu}_GPòØëþ Iû8þÖß´uçì‡âo‚µÿìIûM]ü?·ø¥ðãà§íïðB×öwñßÇ%׉í|A®üÒ›Æ~-ÿ„·þ/øDµ›ÝkL¹—HÖ/ô}7Äš÷„ôÿh¿¾'j ý~¢¾@ýÿmo…Ÿ¶ü4ÿü*Ýâÿ ›û_üjýŠ~"ÿÂ¥xsKþÚø§ð#þ¯øKµÿÂ;â¿hü?Ôá*ÓÿáÕußøGÿƒ“¿d}{Qøª|fý“¿à£ÿ±ÇÀŸÚ3ÄðÏÃ_Úÿö½ý˜´O„ÿ²=æ£ñº§‹þÜÞük°ø«âÍ!|?ãÝ#K{ÍÅšuާá[=i|uâ}gÃÿ ´_øÓAóÿÚ÷þ +§~Ä¿ð^;ÛŒß>0]| ºÿ‚0è:ÏÃ_ÙOÀ¯Š¼i¨üzý®øû;ØjñiÿiÿˆúDOà_ \éÚ\Ü>ƒT¼ñ?‰¼9ðÛÞ'×´@ézŠüÀý‚?à¬ß³íÿ㿌Ÿ<3àÚöhý¦¾bêÿdÿÛ᥯ÁÚ;Lð'‰4 ëø¥gðí|Oâ¯í‡úü%Z6Ÿq¨[j§Xðí֫ዯhZ‹ñᎭã_Óú(¢Šøâ7ü¥7ö7ÿ³ÿ‚–ëEÁ'kïúøâ7ü¥7ö7ÿ³ÿ‚–ëEÁ'kïú(¢Š(¢Š(¢Š(¢Šøþ ;ÿ(²ÿ‚iÿÙ€~Æÿúοkïúøþ ;ÿ(²ÿ‚iÿÙ€~Æÿúοkïú+àø*?ì1ÿ(ý„þ9þÅ?ð´áKÿÂèÿ…eÿ/þŸøXßðºøÅðûâÏü‰¿ð—xûcûcþOìùô¯ìÿí_í_ôï°ÿfÞ}ÿEQEðì û ÃÃjÅÑÿ…¡ÿ ûþÑß·?ü‰?ð…»ÿ†€ÿ„7þ-wüÞ-ÿ„·þ/øD¿ävÿŠgû{ûCþEìŸé?Ñ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ìü¯â—ìãð[þ õÿð|Ný¬5߇þø%á_ˆðPyõ_|RÓ-uxCÇz€ú7ÁOk·:†Ÿ¨éžÿ„Wãn£ðïÄgÄ]Ytíáv±§iÿõxWLð­×‰´žÿþ wÿ ³ãí“ÿ6ýš<ÿ ÿÅÿ¶Ö‡ÿ?øûQè> ÿŠq>)øOö6ø-cãßþÒþ9ÿ„“Vû/ü!ßïÿáZøsVÿ„f÷^Òo¾6xáGØ<áïx—áuý—‡}ƒþ 3û=x«ãgüÏþ¬_|ñÅÏÙóÂ~ÿ‚®øOö‹Õ.¾j>=ø5ᯠücýü3à]Ã?ï¦ÑuoèÞø©rú§ƒ´­ÇRÛiÞ8µYÛj’5Å™úÿö!ÿ‚FÁ:¿àœ~*ñÇŽ¿c_ÙŸÃÿ|mñÃúw„üUãŸ|Pø™â©ü+¦ê-¬ èÞ!ø»ãêþðþ©«­†©âmÂWšâíG@ð÷Šmµ‹ŸxV]óƒþ]ñcágƒ¿áüÿð—|Køá_øUð[ïø(ÅŠ_ð’xËÚü+_…šü"Ùÿüý§©ZÿÂðþÿþ¯Ä_±øËÄ_ÙÞºÿ„ƾF¤ÿðŠë¿`üàý‰|sÿêý¥?à’ßð__‰_¶'ÄŸi?ðNÿßðYïÚÛÇ:Åÿ è,|U¦øWâ§‹¿e-ö|ø“០xwÁ:÷ÄK?YüD×~x£FÐüEðçYÓ­õí¬>(ø'Qð‚x¯B›úý¤?àŒðLÚïöŽÑÿkOÚ7öAøñ?ãÖ‘ÿGÚ|]©ë~?Ò4»ºŽ ÿÂÒøuáŸèŸ ¾0}ŠÊÞÃÃ:‡ü-_xËþ/iÃÏkøAѼ;cõÂïØ¿ö`ø9á_ÚCÀ¾øAáøüû^|`øÁñßö“ðw‹/|Añ#¿>&|~Ó´ýã©âo|HÖø¹eñÿâ·Ã/ X|[ð×ÆïŠ¿þ-}³G‹â?Æo|øªü9ѼS«~¯k>ð¯ˆÿàêÏ ë!ðχõÝ_À_ðBŸxTÖtm;TÔ|â«ÏÛ«ÄÞ¼ñ7„ﯭ§¹ðçˆ.¼ãOø:çYÑå³Ôgð¯‹ÿÁ½?ðGOÙ‹ã/Ãßÿbßè?¾ø‚|>ñ‰¾-~Ð?ôï øªÎ ˆ´Ÿ[x;âŸÅŸx&ëĹ5¿ ë:‡/5øªÃFñ†.tŸè:.±aú?ÿ ¹ð'þŸþ[þoøÉ¯øgÿøeÏøYð“xÇþHOü,_ø[ðƒÂÿ ü+ÿù(ñ?ÿ„›þOøLæÿ ö/üKhòþvšÿ¼ÿðE+÷ú¼þsàOü5?ü6·ü ßñ“_ðÏÿðËŸð²ÿá&ñüŸøX¿ð¶?áÿ„7þøWÿòP?âÿ 7ü"Ÿð˜ÿÌ+þì_ø–׿ÐEPÀ¿å)¿±¿ý˜ü³ÿZ+þ ;_×À¿å)¿±¿ý˜ü³ÿZ+þ ;_ÐEPEPEPEùAû^ÿÁo¿à˜ÿ°_Æ[߀µÇí⃬ü? ø²/k?³ŸíI®éÚ×…|K²èþ&ðŸŒ|ðWÄ~ ñ§‡ç¹µÔôKgÂ>#Öôí7ÅZ‰¼!©ÜÙø§Ã!ÑôÀ`ÿ‚NÿÊ,¿àšö`±¿þ³¯Ãšûþ¿à„ðTØOö ý–?cߨ§à_Ç?øN?i¯ÙßöýŸ¿áq|4ÿ…eñ‹Ã?ð‡ÿ¤øuðƒá?Äø¬¼aðûÃÿüAÿÿÄiüRÞ+Öÿµ~×ý«¢ih¶÷Z”?¿ÔQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEðÄoùJoìoÿfÿ,ÿÖŠÿ‚N×ßõðÄoùJoìoÿfÿ,ÿÖŠÿ‚N×ßôQEQEQEWñÿ«þÆð›~Î?³'íÓá?ý£Ä¾ j¿þ-êøeý©¬\ü,øÁký»à/üEø¥¦Ê·¾øð·âo„.|áÄÖ7¾¹ñßí1 LifeLines Developer Documentation

LifeLines Developer Documentation

LifeLines Version 3.0.61

Perry Rapp



Introduction to Lifelines Developers Manual

LifeLines source code is divided into several functional subdirectories, which will be discussed individually below. They are chained together by an autotools build system, which creates executables in both the liflines and tools subdirectories.


btree module

The btree subdirectory contains the implementation for a btree database, using fixed length 8 letter keys (RKEY).

nodes. Each node in the btree is a separate file on disk (named, eg, "aa"), and the first 4096 (BUFLEN macro) bytes are the node header.

index nodes . These are the interior index nodes of the btree; they contain pointers to subordinate index or block nodes. The program performs binary searches through index nodes to find a particular key.

block nodes . These contain the actual data (keys and their associated records).

keyfile . One special file on the disk, the keyfile, contains some meta information and a pointer to the root of the btree (the master key). When the root changes (splits), the master key in the keyfile is updated accordingly.

traverse . There is a traversal function implemented at the btree level, which uses a callback.

bterrno . There is a global integer error variable, bterrno, which is set by this module upon most failure conditions.

FUTURE DIRECTIONS . bterrno must be removed for multi-threading. Traversal is more elegantly done via iterator style repeated calls in, instead of callback.


stdlib module

The stdlib directory contains various utility functions not specifically related to LifeLines, GEDCOM, or even genealogy.


String Functions

There has built up, over time, quite an assortment of string functions, split currently between mystring.c and stdstrng.c (and a few macros in standard.h).


String copy and concatenation

char *llstrncpy(char *dest, size_t n, int utf8, const char * fmt, va_list args);

char *llstrncat(char *dest, size_t n, int utf8, const char * fmt, va_list args);

These are simple wrappers around the C RTL (run time library) functions. The ANSI versions do not zero-terminate on overflow, which is greatly inconvenient, os the wrapper versions do so. Also, the wrapper versions are UTF-8 aware (they backtrack on overflow, to avoid leaving part of a UTF-8 multibyte sequence at the end).


String append (llstrapp)

char *llstrapps(char *dest, size_t limit, int utf8, const char * src);

char *llstrappc(char *dest, size_t limit, char ch);

char *llstrappc(char *dest, int limit, int utf8, const char * fmt);

char *llstrappv(char *dest, int limit, int utf8, const char * fmt, va_list args);

This family of functions is one (thin) layer higher than llstrncpy, providing an interface wherein the caller specified the buffer's start and entire size. That is,

      llstrncat(buffer, " more stuff", sizeof(buffer)-strlen(buffer));
    
may be replaced by

      llstrapp(buffer, sizeof(buffer), " more stuff");
    
There are also varargs versions, so that

      snprintf(buffer+strlen(buffer), sizeof(buffer)-strlen(buffer), ...
    
may be replaced by

      llstrappf(buffer, sizeof(buffer), ...
    


String append (appendstr)

This is a family of functions similar in purpose to the strapp family, but which uses an additional level of indirection, advancing pointers and decrementing counts.

* NOTE: FUTURE DIRECTIONS I put these in, and I would like to take them out, as I find them less intuitive than the strapp family, and more bug-prone. They are slightly faster, but I don't think it is worth it. -Perry.


char functions

There are character classification functions, which have handling particular to Latin-1 and to Finnish (if the Finnish compilation option was set).

* NOTE: FUTURE DIRECTIONS It would be very nice to see wchar-based functions, which handle unicode, replace these, and then we might be able to jettison the Latin-1 and Finnish specific character code.


string allocation functions

TODO: (strsave, strfree, strupdate, strconcat, free_array_strings)


string conversion functions

TODO: (isnumeric, lower, upper, capitalize, titlecase)


string equality functions

TODO: (eqstr, eqstr_ex, nestr, cmpstr)


string comparison functions

TODO: (cmpstrloc)


string whitespace functions

TODO: (trim, striptrail, striplead, allwhite, chomp)


string UTF-8 functions

These are the low-level functions used to do UTF-8 mechanics. These should only be called when in a database with internal codeset of UTF-8.


printpic functions

These are simple printf style functions, except they only handle string format, and they do handle reordering the inputs. These are used for strings that are internationalized, so that words or numbers (passed in string format) may be reordered in other languages. Instead of %s escapes, these handle %1, %2, and %3 escapes.


List Module

list.c and list.h implement a simple, doubly-linked list type, which takes void pointers (VPTR) as elements. The list manages its own nodes and memory (struct tag_list and struct tag_lnode), but the for the elements, it only frees them if the caller so instructs it (using list type LISTDOFREE), and of course this only works if they are stdalloc/stdfree heap blocks.


Table Module

table.c and table.h implement a fixed size hash tree (with linear buckets). As of 2005-01, Perry has been changing the implementation of the table type, so it is currently in flux.


Balanced Binary Tree (rbtree) Module

rbtree.c and rbtree.h implement a generic red/black balanced binary tree. These are not currently used by lifelines, but are planned as a replacement for the current fixed-size hash table in table.c.


gedlib module

This directory is a collection of routines for GEDCOM and for its use in a LifeLines btree database.


names

This module implements indexing names. TODO: Explain soundex indexing.


refns

This module implements indexing references (REFNs). TOD: Explain two character index.


xreffile

This module stores lists of deleted record numbers for each type. When a record is deleted, its number is added to the appropriate deleted list in xreffile. When a record is added, first the appropriate deleted list in xreffile is checked for a free record number.


messages

Traditionally all translatable strings have been stored in this file. This is not necessary with the current gettext scheme, but it would perhaps be helpful if a resource based scheme were adapted in the future.

* FUTURE DIRECTIONS When/If GUI versions are incorporated into the same codebase, how to handle translate strings shared and not shared between versions needs to be worked out.


translation tables (charmaps.c and translat.c)

The implementation of codeset translation is stored here (not to be confused with language translation for the user interface, called localization, and not associated with these files). Both custom translation tables and delegation to the iconv codeset conversion library are done here.


indiseq

The indiseq type is implemented here, a list of records (which no longer need all be persons).


brwslist

Named browse lists are implemented here (temporary record lists named by user during this session).


interp module

The LifeLines reporting language parser and interpreter are stored here. A custom lexical analyzer is in lex.c, and a yacc parser generator is in yacc.y.

The main interpreter is called with a list of files to parse, and some options. In actuality, I don't think more than one file is ever passed to the main entry point. If no file is passed, the routine will prompt (and here is where the user may choose a report from a list). But a report may be passed in, if one was specified with commandline argument to llines or llexec.

The report file is parsed, and as it is parsed, any included reports are added to the list to be parsed (unless already on the list, so circular references are not a problem).

require statements are handled at parse time. The handler puts the requested version into the file property table (stored inside the pointer in the filetab entry for the file; filetab entries are indexed by full path of report). Later, just after parse completes for that file (in the main parsing loop in the main interpreter function), require conditions are tested in check_rpt_requires(...).


pvalues

All variable values in report language interpretation are stored in a union type called pvalue.


symtab

Symbol tables are a thin wrapper around the table type provided by stdlib, specialized to hold pvalues.


date

A fairly complete GEDCOM date parser is also located here. It actually includes both a date parser, and a date formatter (which generates the thousands of possible LifeLines date formats).

* FUTURE DIRECTIONS If a date type were added to the report language, it would be possible to distinguish fully-parsed dates in the report language (so invalid or illegal dates could be flagged and handled separately in a report). The date module already implements a date type internally, and it is exposed to the rest of the program (gdate and gdate_val, which correspond to GEDCOM date types), but not to the report language.


liflines module

TODO:


autotools build system

todo


Building LifeLines

This chapter gives an overview of one way you can build LifeLines. It is not intended to be a comprehensive list of all techniques, but rather enough to get you started. This section does not assume you are downloading the source tarball and building it, Those instructions are in the file INSTALL. We are assuming you are checking out the sources from CVS.


Checking the CVS source out

If you are not a member of the LifeLines development project, you can check out sources anonymously. In the following assume that CVS stands for

cvs -d:pserver:anonymous@cvs.lifelines.sourceforge.net:/cvsroot/lifelines
If you are a project developer, you will be checking the files out under your user_id. so CVS will stand for

cvs -d:ext:user_id@cvs.lifelines.sourceforge.net:/cvsroot/lifelines
You will also need to export CVS_RSH

CVS_RSH=ssh
export CVS_RSH
The first time you check out sources into a build area:

CVS login anonymous
CVS checkout lifelines
When prompted for a password for anonymous, simply press the Enter key.

Once you have checked out the sources, cvs hides information in the CVS sub directories about how you accessed sourceforge so the -d option isn't needed to be typed in. After the first checkout, if you want to update your sources, you can just type:

cvs update lifelines

The cvs login command stashes information in .cvspass for remote repository access. If this is the only remote cvs archive you access, you may be able to skip the cvs login command on future access attempts. If you work on multiple projects you can logout when you are finished with

cvs logout


automake and autoconf

Many of the files you're used to editing by hand are automatically generated by automake and/or autoconf. These include any file named Makefile, Makefile.in, config.h, config.h.in, or configure.

The proper files to modify by hand are configure.ac (if there's something new you need to determine about the host system at configuration time) and Makefile.am (if source files are added or removed, targets added, or dependencies changed).

As long as you have autoconf and automake installed on your system, the Makefiles generated will be able to regenerate any file dependent on a Makefile.am or configure.ac. To regenerate the build system explicitly run the script autogen.sh:

 sh autogen.sh

autogen *must* be run after freshly checking a copy of the project out of CVS -- the files generated automatically are no longer included in the CVS repository.


Which does what:

At development (or package creation) time:

aclocal: This generates aclocal.m4 from acinclude.m4.

Please run 'aclocal -I build/autotools -I build/autotools' in order to get all the autoconf, automake and gettext macros into aclocal.m4. [ The autogen.sh script has been updated to do this. ]

autoheader: This generates acconfig.h.

automake: This generates Makefile.in files from Makefile.am files.

autoconf: This generates configure from configure.ac.

On remote machine compiling a source distribution package:

configure will generate config.h and Makefile files from Makefile.in files.


Building the code on Unix/Linux

There are lots of dependencies required to build LifeLines. Of course you need a C Compiler and make, but also a number of other tools like autoconf, automake, byacc and flex. One way to build the code is to make a subdirectory, lets say called bld in your lifelines directory, (where the toplevel Makefile.am is located) and then build all the code there. This keeps the objects and executables out of the source directories. This is the process shown here.

sh autogen.sh
mkdir bld
cd bld
../configure
make

This should build LifeLines and leave the results in subdirectories of the the directory bld.


Generating the source tarball

If you have build the code as described above, you can generate the source tarball as follows;

cd bld
make dist

While this is a source tarball it does contain a number of generated files that make it easier to generate LifeLines from the source tarball.


Generating the rpm package

The specification file to build a rpm for redhat linux is included in the cvs repository. These notes show how you can use this to build the source and binary rpm for redhat linux.

These instructions use techniques described by Mike Harris in a note entitled "Building RPM packages as a non-root user." These were found at http://www.rpm.org/hintskinks/buildtree. At that url was also a tarball that included the files README( the note), .rpmrc and .rpmmacros. The later two files are installed in your home directory. These do alter the default behavior of rpm for you and are not required to build the rpm, however, these instructions will fail.

Make sure there is a line of the form

%packager     Joe Blow  <joe@blow.com>
In your ~/.rpmmacros file. It is used to put the name and email address of the individual generating the rpm package into the file. Be sure to use your name and email address. If there is a "Packager:" entry in the lifelines.spec file, make sure it is correct, as it overrides the value in your .rpmmacros file.

From the lifelines directory (where the toplevel Makefile.am and the bld directory are, execute the following commands (with appropriate version numbers of course)

mkdir ~/rpmbuild
mkdir ~/rpmbuild/SRPMS
mkdir ~/rpmbuild/RPMS
mkdir ~/rpmbuild/BUILD
mkdir ~/rpmbuild/tmp
mkdir ~/rpmbuild/lifelines-3.0.22
cp bld/lifelines-3.0.22.tar.gz ~/rpmbuild/lifelines-3.0.22.
cp build/rpm/lifelines.spec ~/rpmbuild/lifelines-3.0.22
cd ~/rpmbuild/lifeines-3.0.22
rpmbuild -ba lifelines.spec
The mkdir commands only need to be executed if needed. If everything goes ok, this will generate a source and binary rpm.


Making a release

To release a new version, run the build/setversions.sh script to set the version in the many necessary files. Add an entry mentioning the new version in the

  ChangeLog
Tag the cvs source via (for example, for version 3.0.25)

  cvs tag v3_0_25
Finally, Send an announcement to the LINES-L mailing list


Putting a release on sourceforge

(Not all developers have the power to create or edit a file release on sourceforge, only Project Administrators and File Release Technicians.)

The instructions at http://sourceforge.net/docman/display_doc.php?docid=6445&group_id=1 are the ones that Perry followed to make many of the releases.

lifelines-3.0.61/docs/ll-devguide.xml0000700002540200244210000007344310655637142017640 0ustar prappDomain Users ]> <application>LifeLines</application> Developer Documentation PerryRapp LifeLines Version &llversion; Introduction to Lifelines Developers Manual LifeLines source code is divided into several functional subdirectories, which will be discussed individually below. They are chained together by an autotools build system, which creates executables in both the liflines and tools subdirectories. btree module The btree subdirectory contains the implementation for a btree database, using fixed length 8 letter keys (RKEY). nodes Each node in the btree is a separate file on disk (named, eg, "aa"), and the first 4096 (BUFLEN macro) bytes are the node header. index nodes These are the interior index nodes of the btree; they contain pointers to subordinate index or block nodes. The program performs binary searches through index nodes to find a particular key. block nodes These contain the actual data (keys and their associated records). keyfile One special file on the disk, the keyfile, contains some meta information and a pointer to the root of the btree (the master key). When the root changes (splits), the master key in the keyfile is updated accordingly. traverse There is a traversal function implemented at the btree level, which uses a callback. bterrno There is a global integer error variable, bterrno, which is set by this module upon most failure conditions. FUTURE DIRECTIONS bterrno must be removed for multi-threading. Traversal is more elegantly done via iterator style repeated calls in, instead of callback. stdlib module The stdlib directory contains various utility functions not specifically related to LifeLines, GEDCOM, or even genealogy. String Functions There has built up, over time, quite an assortment of string functions, split currently between mystring.c and stdstrng.c (and a few macros in standard.h). String copy and concatenation char *llstrncpy char *dest, size_t n, int utf8, const char * fmt, va_list args char *llstrncat char *dest, size_t n, int utf8, const char * fmt, va_list args These are simple wrappers around the C RTL (run time library) functions. The ANSI versions do not zero-terminate on overflow, which is greatly inconvenient, os the wrapper versions do so. Also, the wrapper versions are UTF-8 aware (they backtrack on overflow, to avoid leaving part of a UTF-8 multibyte sequence at the end). String append (llstrapp) char *llstrapps char *dest, size_t limit, int utf8, const char * src char *llstrappc char *dest, size_t limit, char ch char *llstrappc char *dest, int limit, int utf8, const char * fmt char *llstrappv char *dest, int limit, int utf8, const char * fmt, va_list args This family of functions is one (thin) layer higher than llstrncpy, providing an interface wherein the caller specified the buffer's start and entire size. That is, llstrncat(buffer, " more stuff", sizeof(buffer)-strlen(buffer)); may be replaced by llstrapp(buffer, sizeof(buffer), " more stuff"); There are also varargs versions, so that snprintf(buffer+strlen(buffer), sizeof(buffer)-strlen(buffer), ... may be replaced by llstrappf(buffer, sizeof(buffer), ... String append (appendstr) This is a family of functions similar in purpose to the strapp family, but which uses an additional level of indirection, advancing pointers and decrementing counts. * NOTE: FUTURE DIRECTIONS I put these in, and I would like to take them out, as I find them less intuitive than the strapp family, and more bug-prone. They are slightly faster, but I don't think it is worth it. -Perry. char functions There are character classification functions, which have handling particular to Latin-1 and to Finnish (if the Finnish compilation option was set). * NOTE: FUTURE DIRECTIONS It would be very nice to see wchar-based functions, which handle unicode, replace these, and then we might be able to jettison the Latin-1 and Finnish specific character code. string allocation functions TODO: (strsave, strfree, strupdate, strconcat, free_array_strings) string conversion functions TODO: (isnumeric, lower, upper, capitalize, titlecase) string equality functions TODO: (eqstr, eqstr_ex, nestr, cmpstr) string comparison functions TODO: (cmpstrloc) string whitespace functions TODO: (trim, striptrail, striplead, allwhite, chomp) string UTF-8 functions These are the low-level functions used to do UTF-8 mechanics. These should only be called when in a database with internal codeset of UTF-8. printpic functions These are simple printf style functions, except they only handle string format, and they do handle reordering the inputs. These are used for strings that are internationalized, so that words or numbers (passed in string format) may be reordered in other languages. Instead of %s escapes, these handle %1, %2, and %3 escapes. List Module list.c and list.h implement a simple, doubly-linked list type, which takes void pointers (VPTR) as elements. The list manages its own nodes and memory (struct tag_list and struct tag_lnode), but the for the elements, it only frees them if the caller so instructs it (using list type LISTDOFREE), and of course this only works if they are stdalloc/stdfree heap blocks. Table Module table.c and table.h implement a fixed size hash tree (with linear buckets). As of 2005-01, Perry has been changing the implementation of the table type, so it is currently in flux. Balanced Binary Tree (rbtree) Module rbtree.c and rbtree.h implement a generic red/black balanced binary tree. These are not currently used by lifelines, but are planned as a replacement for the current fixed-size hash table in table.c. gedlib module This directory is a collection of routines for GEDCOM and for its use in a LifeLines btree database. names This module implements indexing names. TODO: Explain soundex indexing. refns This module implements indexing references (REFNs). TOD: Explain two character index. xreffile This module stores lists of deleted record numbers for each type. When a record is deleted, its number is added to the appropriate deleted list in xreffile. When a record is added, first the appropriate deleted list in xreffile is checked for a free record number. messages Traditionally all translatable strings have been stored in this file. This is not necessary with the current gettext scheme, but it would perhaps be helpful if a resource based scheme were adapted in the future. * FUTURE DIRECTIONS When/If GUI versions are incorporated into the same codebase, how to handle translate strings shared and not shared between versions needs to be worked out. translation tables (charmaps.c and translat.c) The implementation of codeset translation is stored here (not to be confused with language translation for the user interface, called localization, and not associated with these files). Both custom translation tables and delegation to the iconv codeset conversion library are done here. indiseq The indiseq type is implemented here, a list of records (which no longer need all be persons). brwslist Named browse lists are implemented here (temporary record lists named by user during this session). interp module The LifeLines reporting language parser and interpreter are stored here. A custom lexical analyzer is in lex.c, and a yacc parser generator is in yacc.y. The main interpreter is called with a list of files to parse, and some options. In actuality, I don't think more than one file is ever passed to the main entry point. If no file is passed, the routine will prompt (and here is where the user may choose a report from a list). But a report may be passed in, if one was specified with commandline argument to llines or llexec. The report file is parsed, and as it is parsed, any included reports are added to the list to be parsed (unless already on the list, so circular references are not a problem). require statements are handled at parse time. The handler puts the requested version into the file property table (stored inside the pointer in the filetab entry for the file; filetab entries are indexed by full path of report). Later, just after parse completes for that file (in the main parsing loop in the main interpreter function), require conditions are tested in check_rpt_requires(...). pvalues All variable values in report language interpretation are stored in a union type called pvalue. symtab Symbol tables are a thin wrapper around the table type provided by stdlib, specialized to hold pvalues. date A fairly complete GEDCOM date parser is also located here. It actually includes both a date parser, and a date formatter (which generates the thousands of possible LifeLines date formats). * FUTURE DIRECTIONS If a date type were added to the report language, it would be possible to distinguish fully-parsed dates in the report language (so invalid or illegal dates could be flagged and handled separately in a report). The date module already implements a date type internally, and it is exposed to the rest of the program (gdate and gdate_val, which correspond to GEDCOM date types), but not to the report language. liflines module TODO: autotools build system todo Building <application>LifeLines</application> This chapter gives an overview of one way you can build LifeLines. It is not intended to be a comprehensive list of all techniques, but rather enough to get you started. This section does not assume you are downloading the source tarball and building it, Those instructions are in the file INSTALL. We are assuming you are checking out the sources from CVS. Checking the CVS source out If you are not a member of the LifeLines development project, you can check out sources anonymously. In the following assume that CVS stands for cvs -d:pserver:anonymous@cvs.lifelines.sourceforge.net:/cvsroot/lifelines If you are a project developer, you will be checking the files out under your user_id. so CVS will stand for cvs -d:ext:user_id@cvs.lifelines.sourceforge.net:/cvsroot/lifelines You will also need to export CVS_RSH CVS_RSH=ssh export CVS_RSH The first time you check out sources into a build area: CVS login anonymous CVS checkout lifelines When prompted for a password for anonymous, simply press the Enter key. Once you have checked out the sources, cvs hides information in the CVS sub directories about how you accessed sourceforge so the -d option isn't needed to be typed in. After the first checkout, if you want to update your sources, you can just type: cvs update lifelines The cvs login command stashes information in .cvspass for remote repository access. If this is the only remote cvs archive you access, you may be able to skip the cvs login command on future access attempts. If you work on multiple projects you can logout when you are finished with cvs logout automake and autoconf Many of the files you're used to editing by hand are automatically generated by automake and/or autoconf. These include any file named Makefile, Makefile.in, config.h, config.h.in, or configure. The proper files to modify by hand are configure.ac (if there's something new you need to determine about the host system at configuration time) and Makefile.am (if source files are added or removed, targets added, or dependencies changed). As long as you have autoconf and automake installed on your system, the Makefiles generated will be able to regenerate any file dependent on a Makefile.am or configure.ac. To regenerate the build system explicitly run the script autogen.sh: sh autogen.sh autogen *must* be run after freshly checking a copy of the project out of CVS -- the files generated automatically are no longer included in the CVS repository. Which does what: At development (or package creation) time: aclocal: This generates aclocal.m4 from acinclude.m4. Please run 'aclocal -I build/autotools -I build/autotools' in order to get all the autoconf, automake and gettext macros into aclocal.m4. [ The autogen.sh script has been updated to do this. ] autoheader: This generates acconfig.h. automake: This generates Makefile.in files from Makefile.am files. autoconf: This generates configure from configure.ac. On remote machine compiling a source distribution package: configure will generate config.h and Makefile files from Makefile.in files. Building the code on Unix/Linux There are lots of dependencies required to build LifeLines. Of course you need a C Compiler and make, but also a number of other tools like autoconf, automake, byacc and flex. One way to build the code is to make a subdirectory, lets say called bld in your lifelines directory, (where the toplevel Makefile.am is located) and then build all the code there. This keeps the objects and executables out of the source directories. This is the process shown here. sh autogen.sh mkdir bld cd bld ../configure make This should build LifeLines and leave the results in subdirectories of the the directory bld. Generating the source tarball If you have build the code as described above, you can generate the source tarball as follows; cd bld make dist While this is a source tarball it does contain a number of generated files that make it easier to generate LifeLines from the source tarball. Generating the rpm package The specification file to build a rpm for redhat linux is included in the cvs repository. These notes show how you can use this to build the source and binary rpm for redhat linux. These instructions use techniques described by Mike Harris in a note entitled "Building RPM packages as a non-root user." These were found at http://www.rpm.org/hintskinks/buildtree. At that url was also a tarball that included the files README( the note), .rpmrc and .rpmmacros. The later two files are installed in your home directory. These do alter the default behavior of rpm for you and are not required to build the rpm, however, these instructions will fail. Make sure there is a line of the form %packager Joe Blow <joe@blow.com> In your ~/.rpmmacros file. It is used to put the name and email address of the individual generating the rpm package into the file. Be sure to use your name and email address. If there is a "Packager:" entry in the lifelines.spec file, make sure it is correct, as it overrides the value in your .rpmmacros file. From the lifelines directory (where the toplevel Makefile.am and the bld directory are, execute the following commands (with appropriate version numbers of course) mkdir ~/rpmbuild mkdir ~/rpmbuild/SRPMS mkdir ~/rpmbuild/RPMS mkdir ~/rpmbuild/BUILD mkdir ~/rpmbuild/tmp mkdir ~/rpmbuild/lifelines-3.0.22 cp bld/lifelines-3.0.22.tar.gz ~/rpmbuild/lifelines-3.0.22. cp build/rpm/lifelines.spec ~/rpmbuild/lifelines-3.0.22 cd ~/rpmbuild/lifeines-3.0.22 rpmbuild -ba lifelines.spec The mkdir commands only need to be executed if needed. If everything goes ok, this will generate a source and binary rpm. Making a release To release a new version, run the build/setversions.sh script to set the version in the many necessary files. Add an entry mentioning the new version in the ChangeLog Tag the cvs source via (for example, for version 3.0.25) cvs tag v3_0_25 Finally, Send an announcement to the LINES-L mailing list Putting a release on sourceforge (Not all developers have the power to create or edit a file release on sourceforge, only Project Administrators and File Release Technicians.) The instructions at http://sourceforge.net/docman/display_doc.php?docid=6445&group_id=1 are the ones that Perry followed to make many of the releases. lifelines-3.0.61/docs/ll-index.html0000700002540200244210000000055610630655426017310 0ustar prappDomain Users Lifelines manuals LifeLines User Guide
LifeLines Report Programming Manual lifelines-3.0.61/docs/ll-index.sv.html0000700002540200244210000000062510630655427017735 0ustar prappDomain Users Lifelines manuals Dokumentation för LifeLines
Manual för LifeLines rapportprogrammering lifelines-3.0.61/docs/ll-reportmanual.html0000700002540200244210000057102310655721442020713 0ustar prappDomain Users THE LIFELINES PROGRAMMING SUBSYSTEM AND REPORT GENERATOR

THE LIFELINES PROGRAMMING SUBSYSTEM AND REPORT GENERATOR

LifeLines Version 3.0.61

Thomas T. Wetmore , IV



Report Programming Manual

Introduction

The LifeLines programming subsystem lets you produce reports in any style or layout. You may generate files in troff, Postscript, TeX, SGML or any other ASCII-based format, for further text processing and printing. You access the report generator by choosing the r command from the main menu. You may also use the programming subsystem to create query and other processing programs that write their results directly upon the screen. For example, there is a LifeLines program that computes the relationship between any two persons in a database.

Each LifeLines program is written in the LifeLines programming language, and the programs are stored in normal files. When you direct LifeLines to run a program, it asks you for the name of the program file, asks you where you want the program's output written, and then runs the program.


Tutorial Ahnentafel report

For example, say you want LifeLines to generate an ahnentafel (ancestor) report for Tom Wetmore. Such a report would show Tom Wetmore, his parents, grandparents, great-grandparents, and so on. It would like like the following:

Example 1. Example of ahnentafel report


1. Thomas Trask WETMORE IV
b. 18 December 1949, New London, Connecticut
2. Thomas Trask WETMORE III
b. 15 October 1925, New London, Connecticut
3. Joan Marie HANCOCK
b. 6 June 1928, New London, Connecticut
4. Thomas Trask WETMORE Jr
b. 5 May 1896, New London, Connecticut
d. 8 November 1970, New London, Connecticut
5. Vivian Genevieve BROWN
b. 5 April 1896, Mondovi, Wisconsin
6. Richard James HANCOCK
b. 18 August 1904, New London, Connecticut
d. 24 December 1976, Waterford, Connecticut
7. Muriel Armstrong SMITH
b. 28 October 1905, New Haven, Connecticut
8. Thomas Trask WETMORE Sr
b. 13 March 1866, St. Mary's Bay, Nova Scotia
d. 17 February 1947, New London, Connecticut
9. Margaret Ellen KANEEN
b. 27 October 1859, Liverpool, England
d. 10 May 1900, New London, Connecticut
... lots more

Here is a LifeLines program that generates this report:

Example 2. Example of ahnentafel report script


/*
 * @progname        ahnentafel_tutorial.ll
 * @version         1.0
 * @author          Wetmore
 * @category        sample
 * @output          text
 * @description
 *
 * Generate an ahnentafel chart for the selected person (tutorial sample).
 */

proc main ()
  {
    getindi(indi)
    list(ilist)
    list(alist)
    enqueue(ilist, indi)  /* list of people needing to be displayed */
    enqueue(alist, 1)     /* ancestor numbers for people on ilist */
	
	/*
	Our basic loop is we take the next person who needs to be displayed,
	display them, and then record their parents as needing to be displayed.
	*/
    while (indi, dequeue(ilist)) {
	  /* display person we just pulled off list */
      set(ahnen, dequeue(alist))
      d(ahnen) ". " name(indi) nl()
      if (e, birth(indi)) { " b. " long(e) nl() }
      if (e, death(indi)) { " d. " long(e) nl() }
	  /* add person's parents to list to display */
      if (par, father(indi)) {
        enqueue(ilist, par)
        enqueue(alist, mul(2,ahnen))
      }
      if (par,mother(indi)) {
        enqueue(ilist, par)
        enqueue(alist, add(1,mul(2,ahnen)))
      }
    }
  }

Say this program is in the file ahnentafel_tutorial. When you choose the r option from the main menu, LifeLines asks:

What is the name of the report program?
enter string:

You enter ahnentafel_tutorial. Since the program generates a report, LifeLines asks where to write that report:

What is the name of the output file?
enter file name:

You enter a file name, say my.ahnen. LifeLines reads the program ahnen, executes the program, and writes the report output to my.ahnen. LifeLines reports any syntax or run-time errors found while trying to run the program.

A LifeLines program is made up of procedures and functions; every program must contain at least one procedure named main. The main procedure runs first; it may call other procedures, functions and built-in functions. In the ahnentafel example there is only one procedure.

In the example program, there are some comments at the top, to tell the reader a bit about the program. The comments run from /* to */, and are not necessary (but are suggested).

A procedure body is a sequence of statements. In the example program, the first five statements are:

getindi(indi)
list(ilist)
list(alist)
enqueue(ilist, indi)
enqueue(alist, 1)

The first statement calls the getindi (get individual) built-in function, which causes LifeLines to ask you to identify a person using the zip browse style of identification:

Identify person for interpreted report
enter name:

After you identify a person, he or she is assigned to the variable indi. The next two statements declare two list variables, ilist and alist. Lists hold sequences of things; there are operations for placing things on lists, taking things off, and iterating through the list elements. In the example, ilist holds a list of ancestors, in ahnentafel order, who have not yet been reported on, and alist holds their respective ahnentafel numbers.

The next two statements call the enqueue function, adding the first members to both lists. The person identified by the getindi function is made the first member of ilist, and the number one, this person's ahnentafel number, is made the first member of alist.

The rest of the program is:

while (indi, dequeue(ilist)) {
  set(ahnen, dequeue(alist))
  d(ahnen) ". " name(indi) nl()
  if (e, birth(indi)) { " b. " long(e) nl() }
  if (e, death(indi)) { " d. " long(e) nl() }
  if (par, father(indi)) {
    enqueue(ilist, par)
    enqueue(alist, mul(2,ahnen))
  }
  if (par, mother(indi)) {
    enqueue(ilist, par)
   enqueue(alist, add(1,mul(2,ahnen)))
  }
}

This is a loop that iteratively removes persons and their ahnentafel numbers from the two lists, and then prints their names and birth and death information. If the persons have parents in the database, their parents and their parents' ahnentafel numbers are then put at the ends of the lists. The loop iterates until the list is empty.

The loop is a while loop statement. The line:

while (indi, dequeue(ilist)) {
removes (via dequeue) a person from ilist, and assigns the person to variable indi. As long as there are persons on ilist, another iteration of the loop follows.

The statement:

set(ahnen, dequeue(alist))
is an assignment statement. The second argument is evaluated; its value is assigned to the first argument, which must be a variable. Here the next number in alist is removed and assigned to variable ahnen. This is the ahnentafel number of the person just removed from ilist.

The line:

d(ahnen) ". " name(indi) nl()
contains four expression statements; when expressions are used as statements, their values, if any, are treated as strings and written directly to the report output file. The d function converts its integer argument to a numeric string. The ". " is a literal (constant) string value. The name function returns the default form of a person's name. The nl function returns a string containing the newline character.

The next two lines:

if (e, birth(indi)) { " b. " long(e) nl() }
if (e, death(indi)) { " d. " long(e) nl() }
write out basic birth and death information about a person. These lines are if statements. The second argument in the conditional is evaluated and assigned to the first argument, which must be a variable. The first if statement calls the birth function, returning the first birth event in a person's record. If the event exists it is assigned to variable e, and the body (the items between the curly brackets) of the if statement is executed. The body consists of three expression statements: a literal, and calls to the long and nl functions. Long takes an event and returns the values of the first DATE and PLAC lines in the event.

Finally in the program is:

if (par, father(indi)) {
enqueue(ilist,par)
enqueue(alist,mul(2,ahnen))
}
if (par,mother(indi)) {
enqueue(ilist,par)
enqueue(alist,add(1,mul(2,ahnen)))
}

These lines add the father and mother of the current person, if either or both are in the database, to ilist. They also compute and add the parents' ahnentafel numbers to alist. A father's ahnentafel number is twice that of his child. A mother's ahnentafel number is twice that of her child plus one. These values are computed with the mul and add functions.


Template for creating new reports

The following is a good template to use when creating a new report from scratch.


/*
 * @progname reportname
 * @version Version Number.
 * @author report author and possible email address
 * @category ????
 * @output Format of Report Output
 * @description The following paragraph is used to populate index.html.
 *
 * This report .... (Note, the text in the 1st paragraph following the @keyword
 * lines is used as a description in the automatically generated index.html 
 * file. The text following the @description is not used for this purpose.)
 * The description lines can be written with or without the *'s on the left
 * they will be removed when generating index.html.
 * 
 * Additional descriptive text
*/

proc main()
{

}

Invoking Reports

As mentioned earlier, reports may be invoked interactively from the main menu via the r option from the main menu.

Alternatively, llines may be called with the -x option to have it immediately run a report. For example, to have lifelines run the example ahnentafel report above, on a database named wetmore, this command llines -x ahnentafel_tutorial wetmore would be used.

For more efficient operation from scripts, the lifelines distribution includes a smaller program llexec which includes all functionality of lifelines except the curses GUI. llexec is made specifically, therefore, for invocations such as llexec -x ahnentafel_tutorial wetmore


LIFELINES PROGRAMMING REFERENCE

LifeLines programs are stored in files you edit with a screen editor. Programs are not edited from within the LifeLines program; edit them as you would any text file. The programs may be stored in any directories; they do not have to be kept in or associated with LifeLines databases. You may set the LLPROGRAMS shell variable to hold a list of directories that LifeLines will use to automatically search for programs when you request program execution.


Procedures and Functions

A LifeLines program is made up of one or more procedures and functions. A procedure has format:
proc name(params) { statements }

Name is the name of the procedure, params is an optional list of parameters separated by commas, and statements is a list of statements that make up the procedure body. Report generation begins with the first statement in the procedure named main. Procedures may call other procedures and functions. Procedures are called with the call statement described below.When a procedure is called, the statements making up its body are executed.

A function has format:
func name(params) { statements }

Name, params and statements are defined as in procedures. Functions may call other procedures and functions. When a function is called the statements that make it up are executed. A function differs from a procedure by returning a value to the procedure or function that calls it. Values are returned by the return statement, described below. Recursive functions are allowed. A function is called by invoking it in an expression.

Function and procedure parameters are passed by value except for list, set and table types which are passed by reference. Redeclaration of a parameter instantiates a new variable of the stated or implied type. The previous instance continues to exist in the scope of the caller.


Comments

You may comment your LifeLines programs using the following notation:

/*...comment text including any characters except */... */

These comments may be inserted anywhere in the program file.

You should put in some report header comments, because they will provide useful text for your report when it is included in the report list seen by the user who uses the lifelines pick report menu function. Report header comments are some specific comments at the top of the report, with keywords preceded by @ signs. The following is an illustration of report header comments, with explanations inside them:


/*
* @progname The name of the report without the
extension. This shows in the pick report option.
* @version Version Number of the report. This
is stored here and not in the report name.
* @author Name of the author of this report
and email address if he/she desires.
* @category ????
* @output Modifies Database | text | HTML |
GEDCOM | RTF | XML | PostScript | etc.
* @description The first paragraph after this is
used to generate the description in the index.html.

This report ....
*/

Comments begin with a /* and end with a */. Comments may appear on lines of their own or on lines that have program constructs. Comments may span many lines. Comments may not be nested.


Statements

There are a number of statement types. The simplest is an expression statement, an expression that is not part of any other statement or expression. Expressions are defined more fully below. An expression statement is evaluated, and if its value is non-null (non-zero), it is assumed to be a string, and written to the program output file. If its value is null, nothing is written to the output file. For example, the expression
name(indi)
, where indi is a person, returns the person's name and writes it to the output file. On the other hand, the expression
set(n, nspouses(indi))
assigns the variable n the number of spouses that person indi has, but since set returns null, nothing is written to the output file.

The programming language includes if statements, while statements and procedure call statements, with the following formats:
if ([varb,] expr) { statements }
               [ elsif ([varb], expr) { statements } ]*
                    [ else { statements } ]
     
while ([varb,] expr ) { statements }
call name(args)

Square brackets indicate optional parts of the statement syntax. An if statement is executed by first evaluating the conditional expression in the if clause. If non-zero, the statements in the if clause are evaluated, and the rest of the if statement, if any, is ignored. If the value is zero, and there is an elsif clause following, the conditional in the elsif clause is evaluated, and if non-zero, the statements in that clause are executed. Conditionals are evaluated until one of them is non-zero, or until there are no more. If no conditional is non-zero, and if the if statement ends with an else clause, the statements in the else clause are executed. There are two forms of conditional expressions. If the conditional is a single expression, it is simply evaluated. If the conditional is a variable followed by an expression, the expression is evaluated and its value is assigned to the variable.

Note that if treats null strings as false, but empty strings as true. This has the benefit that

if (birth(indi))
will return true if there is a BIRT record, even if it is empty, but will return false if there is no BIRT record at all.

The while statement provides a looping mechanism. The conditional is evaluated, and if non-zero, the body of the loop is executed. After each iteration the expression is reevaluated; as long as it remains non-zero, the loop is repeated.

The call statement provides procedure calls. Name must match one of the procedures defined in the report program. Args is a list of argument expressions separated by commas. Recursion is allowed. When a call is executed, the values of its arguments are evaluated and used to initialize the procedure's parameters. The procedure is then executed. When the procedure completes, execution resumes with the first item after the call.

The following report language statements are commonly encountered only near the top of a report:
char_encoding(string)
require(string)
option(string)
include(string)
global(varb)

The char_encoding statement specifies what character encoding scheme is used by the report, so that the report processor can correctly interpret bytes not in ASCII (e.g., accented letters). An example specifying a character encoding common in Western Europe:

char_encoding("ISO-8859-1")
The option statement allows the report writer to specify options. The only option currently available is "explicitvars", which causes any use of variables not previously declared or set to be reported as a parsing error. The require statement allows the report writer to specify that this report needs a version of the report interpreter no older than that specified. The include statement includes the contents of another file into the current file; its string expression is the name of another LifeLines program file. It is described in more detail below. The global statement must be used outside the scope of any procedure or function; it declares a variable to have global scope. The variable is initialized to 0.

The report language also includes the following statements, which mimic some common programming languages:
set(varb, expr)
continue()
break()
return([expr])

The set statement is the assignment statement; the expression is evaluated, and its value is assigned to the variable. The continue statement jumps to the bottom of the current loop, but does not leave the loop. The break statement breaks out of the most closely nested loop. The return statement returns from the current procedure or function. Procedures have return statements without expressions; functions have return statements with expressions. None of these statements return a value, so none has a direct effect on program output.


Expressions

There are four types of expressions: literals, numbers, variables and built-in or user defined function calls.

A literal is any string enclosed in double quotes; its value is itself. A number is any integer or floating point constant; its value is itself. A variable is a named location that can be assigned different values during program execution. The value of a variable is the last value assigned to it. Variables do not have fixed type; at different times in a program, the same variable may be assigned data of completely different types. An identifier followed by comma-separated list of expressions enclosed in parentheses, is either a call to a built-in function or a call to a user-defined function.


Include Feature

The LifeLines programming language provides an include feature. Using this feature one LifeLines program can refer to other LifeLines programs. This feature is provided by the include statement:
include(string)
where string is a quoted string that is the name of another LifeLines program file. When an include statement is encountered, the program that it refers to is read at that point, exactly as if the contents of included file had been in the body of the original file at that point. This allows you to create LifeLines program library files that can be used by many programs. Included files may in turn contain include statements, and so on to any depth. LifeLines will use the LLPROGRAMS shell variable, if set, to search for the include files. Each file included with a include statement is only read once. If multiple include statements are encountered that include the same file, only the first statement has any effect.

The only main procedure actually executed is the one in the report the user chose. main procedures in other reports which are included do not get run. This allows a module intended to be included in other programs to have a main procedure for test purposes. If multiple functions or procedures with the same name are included (other than the name main) a runtime error is generated and the program is not run.


Built-in Functions

There is a long list of built-in functions, and this list will continue to grow for some time. The first subsection below describes the value types used in LifeLines programs; these are the types of variables, function parameters and function return values. In the remaining sections the built-in functions are separated into logical categories and described.


Value Types

ANY

union of all types

BOOL

boolean (0 represents false; anything else represents true)

EVENT

event; reference to substructure of nodes in a GEDCOM record (reference)

FAM

family; reference to a GEDCOM FAM record (reference)

FLOAT

floating point number (may be used anywhere an INT may be used)

INDI

person; reference to a GEDCOM INDI record (reference)

INT

integer (on most systems a 32-bit signed value)

LIST

arbitrary length list of any values (reference)

NODE

GEDCOM node; reference to a line in a GEDCOM tree/record (reference)

NUMBER

union of all arithmetic types (INT and FLOAT)

SET

a collection of persons each with a value (see person sets below).

STRING

text string

TABLE

keyed look-up table (reference)

VOID

type with no values

In the summaries of built-in functions below, each function is shown with its argument types and its return type. The types are from the preceding list. Sometimes an argument to a built-in function must be a variable; when this is so its type is given as XXX_V, where XXX is one of the types above. The built-ins do not check the types of their arguments. Variables can hold values of any type, though at any one time they will hold values of only one type. Note that EVENT is a subtype of NODE, and BOOL is a subtype of INT. Built-ins with type VOID actually return null (zero) values.

Reference types (denoted above in parentheses) obey "pointer semantics", which is to say that assigning one to another variable results in both variables pointing at the same data (no copy is made). Therefore, if you pass a string to a function which changes the string, the caller does not see the change, because a string is not a reference type. On the other hand, if you pass a table to a function which alters the table, the caller does see the change, because a table is a reference type.


Iterators

The report generator provides a number of iterator statements for looping through genealogical and other types of data. For example, the children statement iterates through the children of a family, the spouses statement iterates through the spouses of a person, and the families statement iterates through the families that a person is a spouse or parent in.

Usually the first argument to the iterator is an expression that evaluates to an individual or a family. The other arguments of the iterator are variable names that are set with values for each iteration. The last argument is often a variable name used as a counter. It starts with the value of one and is increased by one for each iteration of the loop. After completion of the iteration, these variables have the value null.

children(afam,indi,cnt) { commands }
For example, the first argument to children is the family that the iterator will operate on. This iterator will execute the block of commands for each child in the specified family. The second argument is set to each child in the family in the order they are listed in the family and the third argument is the loop counter which starts at one and is incremented by one each time the the block of commands is executed. The two variables indi and cnt will have the value null after the iteration has completed.

For the purpose of traversing all records in the database, the following iterators may be used:

forindiIterate over all people
forfamIterate over all families
forsourIterate over all sources
forevenIterate over all events
forothrIterate over all other recoure types

All the iterators are described in more detail later in the section where their definition occurs.


Arithmetic and Logic Functions

NUMBER add(NUMBER, NUMBER ...);

addition - two to 32 arguments

NUMBER sub(NUMBER, NUMBER);

subtraction

NUMBER mul(NUMBER, NUMBER ...);

multiplication - two to 32 arguments

NUMBER div(NUMBER, NUMBER);

division

INT mod(INT, INT);

modulus (remainder)

NUMBER exp(NUMBER, INT);

exponentiation

NUMBER neg(NUMBER);

negation

FLOAT float(INT);

convert int to float

INT int(FLOAT);

convert float to int

VOID incr(NUMBER,NUMBER);

increment variable by second argument (or by 1 if no second argument)

VOID decr(NUMBER,NUMBER);

decrement variable by second argument (or by 1 if no second argument)

BOOL and(BOOL, BOOL ...);

logical and - two to 32 arguments

BOOL or(BOOL, BOOL ...);

logical or - two to 32 arguments

BOOL not(BOOL);

logical not

BOOL eq(ANY, ANY);

equality (not strings)

BOOL ne(ANY, ANY);

non-equality

BOOL lt(ANY, ANY);

less than

BOOL gt(ANY, ANY );

greater than

BOOL le(ANY, ANY);

less than or equal

BOOL ge(ANY, ANY);

greater than or equal

Add, sub, mul and div do normal arithmetic of integer or floating values. If any operand is float, the result is float. Functions add and mul can have two to 32 arguments; the sum or product of the full set of arguments is computed. Functions sub and div have two arguments each; sub subtracts its second argument from its first, and div divides its first argument by its second. The mod function returns the remainder after dividing the first parameter by the second. If the second argument to div or mod is zero, these functions return 0 and generate a run time error. Exp performs integer exponentiation. Neg negates its argument. The functions float and int can be used to explicitly convert a value to float or int where needed.

Incr and decr increment by one and decrement by one, respectively, the value of a variable. The argument to both functions must be a variable. These functions take an optional second argument which is the amount to increment or decrement the variable by.

And and or do logical operations. Both functions take two to 32 arguments. All arguments are and'ed or or'ed together, respectively. The arguments are evaluated from left to right, but only up to the point where the final value of the function becomes known. Not does the logical not operation.

Eq, ne, lt, le, gt and ge evaluate the six ordering relationships between two integers.


Trigonometric and Spherical Calculations

FLOAT sin(FLOAT);

compute sine of argument in degrees

FLOAT cos(FLOAT);

compute cosine of argument in degrees

FLOAT tan(FLOAT);

compute tangent of argument in degrees

FLOAT arcsin(FLOAT);

compute inverse sine of argument

FLOAT arccos(FLOAT);

compute inverse cosine of argument

FLOAT arctan(FLOAT);

compute inverse tangent of argument

VOID dms2deg(INT degree, INT minute, INT second, FLOAT_V decimal);

convert (degree, minute, second) to decimal degrees

void deg2dms(FLOAT decimal, INT_V degree, INT_V minute, INT_V second);

convert decimal degrees to (degree, minute, second)

FLOAT spdist(FLOAT lat0, FLOAT long0, FLOAT lat1, FLOAT long1);

compute distance between two locations

The trigonometric functions specify angles using degrees. The functions deg2dms and dms2deg are provided to convert between (degree,minute,second) notation and decimal degree representations for angles.

spdist estimates the distance between two spherical coordinates. The arguments provided are, in order, first latitude, first longitude, second latitude, second longitude. The result is in kilometers.


Person Functions

STRING name(INDI, BOOL);

default name of

STRING fullname(INDI, BOOL, BOOL, INT);

many name forms of

STRING surname(INDI);

surname of

STRING givens(INDI);

given names of

STRING trimname(INDI, INT);

trimmed name of

EVENT birth(INDI);

first birth event of

EVENT death(INDI);

first death event of

EVENT burial(INDI);

first burial event of

INDI father(INDI);

first father of

INDI mother(INDI);

first mother of

INDI nextsib(INDI);

next (younger) sibling of

INDI prevsib(INDI);

previous (older) sibling of

STRING sex(INDI);

sex of

BOOL male(INDI);

male predicate

BOOL female(INDI);

female predicate

STRING pn(INDI, INT);

pronoun referring to

INT nspouses(INDI);

number of spouses of

INT nfamilies(INDI);

number of families (as spouse/parent) of

FAM parents(INDI);

first parents' family of

STRING title(INDI);

first title of

STRING key(RECORD, BOOL);

internal key of (works for any record type)

STRING soundex(INDI);

SOUNDEX code of

NODE inode(INDI);

root GEDCOM node of

NODE root(INDI);

root GEDCOM node of

INDI indi(STRING);

find person with key value

INDI firstindi(void);

first person in database in key order

INDI lastindi(void);

last person in database in key order

INDI nextindi(INDI);

next person in database in key order

INDI previndi(INDI);

previous person in database in key order

spouses (INDI, INDI_V, FAM_V, INT_V) { commands } 

loop through all spouses of

families (INDI, FAM_V, INDI_V, INT_V) { commands } 

loop through all families (as spouse) of

forindi (INDI_V, INT_V) { commands } 

loop through all persons in database

mothers (INDI, INDI_V, FAM_V, INT_V) { commands } 

loop through all female parents of a person

fathers (INDI, INDI_V, FAM_V, INT_V) { commands } 

loop through all male parents of a person

Parents (INDI, FAM, INT_V) { commands } 

loop through all familes a person is a child of

These functions take a person as a parameter and return information about him or her.

Name returns the default name of a person; this is the name found on the first 1 NAME line in the person's record; the slashes are removed and the surname is made all capitals; name can take an optional second parameter - if it is true the function acts as described above; if false, the surname is kept exactly as it is in the record.

Fullname returns the name of a person in a variety of formats. If the second parameter is true the surname is shown in upper case; otherwise the surname is as in the record. If the third parameter is true the parts of the name are shown in the order as found in the record; otherwise the surname is given first, followed by a comma, followed by the other name parts. The fourth parameter specifies the maximum length field that can be used to show the name; various conversions occur if it is necessary to shorten the name to fit this length.

Surname returns the surname of the person, as found in the first 1 NAME line; the slashes are removed. Givens returns the given names of the person in the same order and format as found in the first 1 NAME line of the record. Trimname returns the default name of the person trimmed to the maximum character length given in the second variable.

Birth, death, and burial return the first birth, death, and burial event in the person's record, respectively. An event is a level 1 GEDCOM node. If there is no matching event these functions return null.

Father, mother, nextsib and prevsib return the father, mother, next younger sibling and next older sibling of the person, respectively. If the person has more than one father (mother) the father (mother) function returns the first one. These functions return null if there is no person in the role.

Sex returns the person's sex as the string M if the person is male, F if the person is female, or U if the sex of the person is not known. Male and female return true if the person is male or female, respectively, or false if not.

Pn generates pronouns, useful when generating English text; the second parameter selects the type of pronoun:

0He/She
1he/she
2His/Her
3his/her
4him/her

Nspouses returns the number of spouses the person has in the database, and nfamilies returns the number of families the person is a parent/spouse in; these two values are not necessarily the same. Parents returns the first family that the person is a child in.

Title returns the value of the first 1 TITL line in the record.

Key returns the key value of a person (or any record); if there is a second parameter and it is non-null, the leading I (or F or S or E or X) will be stripped. For example, if key(curindi) returns I23, then key(curindi,1) returns 23.

Soundex returns the Soundex code of the person.

Root and Inode return the root node of the person's GEDCOM node tree. Note that an INDI value is not a NODE value. If you want to process the nodes within a person node tree, you must first use the root or inode function to get the root of the person node tree. Root and inode are synonyms.

Indi returns the person whose key is passed as an argument; if no person has the key indi returns null. INDI keys are accepted either as Innn or @Innn@.

Firstindi, nextindi and previndi allow you to iterate through all persons in the database. Firstindi returns the first person in the database in key order. Nextindi returns the next person after the argument person in key order. Previndi returns the previous person before the argument person in key order.

Spouses is an iterator that loops through each spouse a person has. The first argument is a person. The second argument is a person variable that iterates through the first person's spouses. The third argument is a family variable that iterates through the families the person and each spouse are in. The fourth argument is an integer variable that counts the iterations. The spouses iterator skips any family that has no spouse, whereas the families iterator does not.

Families is an iterator that loops through the families a person was a spouse/parent in. The first argument is a person. The second argument is a family variable that iterates through the families the first person was a spouse/parent in. The third argument iterates through the spouses from the families; if there is no spouse in a particular family, the variable is set to null for that iteration. The fourth argument is an integer variable that counts the iterations.

Families and Spouses behave the same except for one situation. If the person is a spouse in a family that only has one spouse identified, that family does not show up with the spouses iterator, but it does show up with the families iterator. One caution, this situation causes the 3rd argument of the families iterator to be set to null. You must check for this.

Forindi is an iterator that loops through every person in the database in ascending key order. Its first parameter is a variable that iterates through the persons; its second parameter is an integer counter variable that counts the persons starting at one.

mothers is an iterator that loops through every female parent of the specified individual. Its first parameter is a person; its third parameter is a family variable that iterates through the familes that the person is a child in; its second parameter is a person variable that is the female parent associated with the family in the third parameter; The fourth parameter is a variable that counts the families returned starting at one.

Parents is an iterator that loops through every family that a person is a child in. Note: This iterator's name begins with a capital P. There is another function of the same name that begins with a lower case p. Its first parameter is a person; its second parameter is a family variable that iterates through the familes that the person is a child in; and the third parameter is a variable that counts the families returned starting at one.

Forindi is an iterator that loops through every person in the database in ascending key order. Its first parameter is a variable that iterates through the persons; its second parameter is an integer counter variable that counts the persons starting at one.

fathers and mothers are iterators that loop through each family the specified individual is in returns each father or mother found. If a non-traditional family is processed, there will be separate iterations for each father or mother found.


Family Functions

EVENT marriage(FAM);

first marriage event of

INDI husband(FAM);

first husband/father of

INDI wife(FAM);

first wife/mother of

INT nchildren(FAM);

number of children in

INDI firstchild(FAM);

first child of

INDI lastchild(FAM);

last child of

STRING key(FAM|INDI, BOOL);

internal key of (works for persons also)

NODE fnode(FAM);

root GEDCOM node of

NODE root(FAM);

root GEDCOM node of

FAM fam(STRING);

find family from key

FAM firstfam(void);

first family in database in key order

FAM lastfam(void);

last family in database in key order

FAM nextfam(FAM);

next family in database in key order

FAM prevfam(FAM);

previous family in database in key order

children (FAM, INDI_V, INT_V) { commands } 

loop through children of family

spouses (FAM, INDI_V, INT_V) { commands } 

loop through all husbands and wives of a family

forfam (FAM_V, INT_V) { commands } 

loop through all families in database

These functions take a family as an argument and return information about it.

Marriage returns the first marriage event found in the family record, if any; it returns null if there is no marriage event.

Husband returns the first husband/father of the family, if any; and wife returns the first wife/mother of the family, if any. Each returns null if the requested person is not in the family.

Nchildren returns the number of children in the family.

Firstchild and lastchild return the first child and last child in a family, respectively.

Key was described in the section on person functions.

Root and fnode return the root node of a family GEDCOM node tree. Note that a FAM value is not a NODE value. If you want to process the nodes within a family node tree, you must first use root or fnode function to get the root of the family node tree. Root and fnode are synonyms.

Fam returns the family who's key is passed as an argument; if no family has the key fam returns null. Family keys are accepted either as Fnnn or @Fnnn@.

Firstfam, nextfam and prevfam allow you to iterate through all families in the database. Firstfam returns the first family in the database in key order. Nextfam returns the next family after the argument family in key order. Prevfam returns the previous family before the argument family in key order.

Children is an iterator that loops through the children in a family. Its first parameter is a family expression; its second parameter is a variable that iterates through each child; its third parameter is an integer counter variable that counts the children starting at one. These two variables may be used within the loop body.

spouses is an iterator that loops through all the husbands and wives of a family. Its first parameter is a family expression; its second parameter is a variable that iterates through each parent; its third parameter is an integer counter variable that counts the parents starting at one. These two variables may be used within the loop body.

Forfam is an iterator that loops through every family in the database in ascending key order. Its first parameter is a variable that iterates through the families; its second parameter is an integer counter variable that counts the families starting at one.


Other types of records

forsour (NODE_V, INT_V) { commands } 

loop through all sources in database

foreven (NODE_V, INT_V) { commands } 

loop through all EVEN nodes in database

forothr (NODE_V, INT_V) { commands } 

loop through all other (notes, etc.) nodes in database

forsour is an iterator that loops through all the Source nodes in the database. Its first argument is the SOUR record and its second parameter is an integer counter variable that counts the sources elements starting at one. foreven is an iterator that loops through all the Event nodes in the database. Its first argument is the EVEN record and its second parameter is an integer counter variable that counts the events elements starting at one. forothr is an iterator that loops through all the Other nodes in the database. Its first argument is the record (NOTE, etc.) and its second parameter is an integer counter variable that counts the nodes starting at one.


List Functions

VOID list(LIST_V);

declare a list

VOID clear(LIST);

clear a list

BOOL empty(LIST);

check if list is empty

INT length(LIST);

length of list

VOID enqueue(LIST, ANY);

enqueue element on list

ANY dequeue(LIST);

dequeue and return element from list

VOID requeue(LIST, ANY);

requeue an element on list

VOID push(LIST, ANY);

push element on list

ANY pop(LIST);

pop and return element from list

VOID setel(LIST, INT, ANY);

array element assignment

ANY getel(LIST, INT);

array element selection

BOOL inlist(LIST, ANY);

is second argument in list.

VOID sort(LIST, LIST);

sort list elements

VOID rsort(LIST, LIST);

reverse sort list elements

LIST dup(LIST);

duplicate a list

forlist (LIST, ANY_V, INT_V) { commands } 

loop through all elements of list

LifeLines provides general purpose lists that can be accessed as queues, stacks or arrays. A list must be declared with the list function before it can be used. Redeclaring an existing variable with the list clears it and restores it to being an empty list. If the argument to list() is the name of a parameter to the current routine, the reference to the calling routines list is removed and a new list is created.

A list can have any number of elements. Empty returns true if the list has no elements and false otherwise. Length returns the length of the list. The only parameter to both is a list. The following diagram indicates how the various access functions for a list interact:

Enqueue, dequeue and requeue provide queue access to a list. Enqueue adds an element to the back of a queue, dequeue removes and returns the element from the front of a queue, and requeue adds an element to the front of a queue. The first parameter to all three is a list, and the second parameter to enqueue and requeue is the value to be added to the queue and can be any value.

Push and pop provide stack access to a list. Push pushes an element on the stack, and pop removes and returns the most recently pushed element from the stack. The first parameter to both is a list, and the second parameter to push is the value to be pushed on the stack and can be of any type.

Setel and getel provide array access to a list. Setel sets a value of an array element, and getel returns the value of an array element. The first parameter to both is a list; the second parameter to both is an integer index into the array; and the third parameter to setel is the value to assign to the array element and can be of any type. Array elements are indexed starting at one. Unassigned elements are assumed to be null (0). Arrays automatically grow in size to accommodate the largest index value that is used. Passing 0 references the last element at the other end from 1, and -1 the one before it, etc.

inlist compares the second argument with each element in the list. If it finds a match inlist returns true.

sort and rsort sort a list, using the elements of the second array to determine the new order. Both lists are reordered, so essentially both are sorted using the sort order of the second argument. (If only one argument is given, it is sorted on its own elements.) rsort sorts in order reverse of sort. The order that sort produces places the smallest element at position 1, and the largest element at the end of the list, such that dequeue will remove the smallest element.

dup creates a copy of a list. If b is a list, the function set(a,b) makes the variable a a reference to the list b. If you want to make a new list, you must use set(a,dup(b)).

Forlist is an iterator that loops through the element in a list. Its first parameter is a LIST expression; its second parameter is a variable that iterates through the list elements; and its third parameter is an integer counter variable that counts the list elements starting at one.


Table Functions

VOID table(TABLE_V);

declare a table

VOID insert(TABLE, STRING, ANY);

insert entry in table

ANY lookup(TABLE, STRING);

lookup and return entry from table

INT length(TABLE);

size of the table

BOOL empty(TABLE);

check if table is empty

These functions provide general purpose, keyed tables. A table must be declared with the table function before it can be used.

Insert adds an object and its key to a table. Its first parameter is a table; the second parameter is the object's key; and the third parameter is the object itself. The key must be a string and the object can be any value. If there already is an object in the table with that key, the old object is replaced with the new.

Lookup retrieves an object from a table. Its first parameter is a table, and the second parameter is the object's key. The function returns the object with that key from the table; if there is no such object, null is returned. length returns the number of elements in the table.


GEDCOM Node Functions

STRING xref(NODE);

cross reference index of

STRING tag(NODE);

tag of

STRING value(NODE);

value of

NODE parent(NODE);

parent node of

NODE child(NODE);

first child of

NODE sibling(NODE);

next sibling of

NODE savenode(NODE);

copy a node structure

INT level(NODE);

level of a node

fornodes (NODE, NODE_V) { commands } 

loop through child nodes

fornotes (NODE, STRING_V) { commands } 

loop through notes on a node

traverse (NODE, NODE_V, INT_V) { commands } 

loop through all descendent nodes

These functions provide access to the components of a GEDCOM node. All take a GEDCOM node as their only parameter, and each returns a different value associated with the node.

Xref returns the cross reference index of the node, if any; tag returns the tag of the node; and value returns the value of the node, if any. If there is no cross reference, xref returns null; if there is no value, value returns null.

Parent returns the parent node of the node, if any; child returns the first child node of the node, if any; and sibling returns the next sibling node of the node, if any. Whenever there is no such related node, these functions return null. These three functions allow simple navigation through a GEDCOM node tree.

Savenode makes a copy of the node, and the substructure of nodes below the node, that is passed to it. Beware: the memory used to make the copy is never returned to the system.

The level function returns the level of the node.

Fornodes is an iterator that loops through the child nodes of a GEDCOM node. Its first argument is a node expression, and its second parameter is a variable that iterates through each direct child node of the first node.

Fornotes is an iterator that loops through the NOTE nodes of a GEDCOM node. Its first argument is a node expression, and its second parameter is a variable that returns the value of the NOTE. The value includes processed sub CONC and CONT records.

Traverse is an iterator providing a general method for traversing GEDCOM trees. Its first parameter is a node expression; its second parameter is a variable that iterates over every node under the first node in a top down, left to right manner; and its third parameter is a variable that is set to the level of the current node in the iteration.


Event and Date Functions

STRING date(EVENT);

date of, value of first DATE line

STRING place(EVENT);

place of, value of first PLAC line

STRING year(EVENT);

year or, 1st string of 3-4 digits in 1st DATE line

STRING long(EVENT);

date and place, values of 1st DATE and PLAC lines

STRING short(EVENT);

date and place of, abbreviated from

EVENT gettoday(void);

returns the `event' of the current date

VOID setdate(VARSTRING);

creates an event with specified date and assigns to specified variable

VOID dayformat(INT);

set day format for stddate calls

VOID monthformat(INT);

set month format for stddate calls

VOID yearformat(INT);

set year format for stddate calls

VOID eraformat(INT);

set era format for stddate calls

VOID dateformat(INT);

set date format for stddate calls

VOID datepic(STRING);

set custom date format for stddate calls

STRING stddate(EVENT|STRING);

date of, in current format

VOID complexformat(INT);

set complex date format

VOID complexpic(INT, STRING);

set custom complex date picture string

STRING complexdate(EVENT|STRING);

date of, in current complex format

STRING dayofweek(EVENT|STRING);

day of week, in appropriate language

These functions extract information about the dates and places of events.

Date returns the value of the first DATE line in an event, a node in a GEDCOM record tree. Date finds the first DATE line one level deeper than the event node. Place returns the value of the first PLAC line in an event. Year returns the first three or four digit number in the value of the first DATE line in an event; this number is assumed to be the year of the event.

Long returns the verbatim values of the first DATE and PLAC lines in an event, concatenated together and separated by a comma. Short abbreviates information from the first DATE and PLAC lines, concatenates the shortened information together with a comma separator and returns it. An abbreviated date is its year; an abbreviated place is the last component in the value, further abbreviated if the component has an entry in the place abbreviation table.

Gettoday creates an event that has today's date in the DATE line. Setdate creates an event that has the specified date in the DATE line, and assigns the new event to the specified variable.

The next seven functions are used to format dates in a variety of ways. Dayformat, monthformat, yearformat, eraformat, and dateformat select style options for formatting the day, month, year, era, and overall date structure; stddate returns dates in the selected style. datepic allows specifying a custom pattern that overrides the date format selected with dateformat. The string supplied specifies the placement of the day, month and year in the string with %d, %m and %y. A null argument disables the overrided format. The argument to stddate is normally an event and the date is extracted from the event and formatted. If the argument is a date string it is converted using the current date formats.

The next three functions provide for more complex formatting of dates. Taking into account the abt, est, cal, bef, aft, fr and to qualifiers on GEDCOM dates. complexformat selects the format to use. The format effects only the complex picture, not the format of the date itself. The function complexpic can be used to specify a custom picture string for any or all of the 9 custom format strings. The custom string can be canceled by passing a null for the string. When a custom picture string is provided it overrides both the abbreviated and full word picture strings. complexdate formats the date similarly to stddate, but with the addition of the complex date format string selected.

The day format codes passed to dayformat are:

0leave space before single digit days
1 use leading 0 before single digit days
2 no space or leading 0 before single digit days

The month format codes passed to monthformat are:

0 number with space before single digit months
1 number with leading zero before single digit months
2 number with no space or zero before single digit months
3 upper case abbreviation (eg, JAN, FEB) (localized)
4 capitalized abbreviation (eg, Jan, Feb) (localized)
5 upper case full word (eg, JANUARY, FEBRUARY) (localized)
6 capitalized full word (eg, January, February) (localized)
7 lower case abbreviation (eg, jan, feb) (localized)
8 lower case full word (eg, january, february) (localized)
9 upper case abbreviation in English per GEDCOM (eg, JAN, FEB)
10 lower case roman letter (eg, i, ii)
11 upper case roman letter (eg, I, II)

The year format codes passed to yearformat are:

0 use leading spaces before years with less than four digits
1 use leading 0 before years with less than four digits
2 no space or leading 0 before years

The era format codes passed to eraformat are:

0 no AD/BC markers
1 trailing B.C. if appropriate
2 trailing A.D. or B.C.
11 trailing BC if appropriate
12 trailing AD or BC
21 trailing B.C.E. if appropriate
22 trailing C.E. or B.C.E.
31 trailing BC if appropriate
32 trailing CE or BCE

The full date formats passed to stddate are:

0 da mo yr
1 mo da, yr
2 mo/da/yr
3 da/mo/yr
4 mo-da-yr
5 da-mo-yr
6 modayr
7 damoyr
8 yr mo da
9 yr/mo/da
10 yr-mo-da
11 yrmoda
12 yr (year only, omitting all else)
13 da/mo yr
14 (As in GEDCOM)

The complex date formats selected by the complexformat and used by complexdate are:

  Mode Example
3 use abbreviations in uppercase ABT 1 JAN 2002
4 use abbreviations in titlecase Abt 1 JAN 2002
5 use uppercased full words ABOUT 1 JAN 2002
6 use titlecased full words About 1 JAN 2002
7 use abbreviations in lowercase abt 1 JAN 2002
8 use lowercase full words about 1 JAN 2002

The complex date string pictures that can be overridden with the complexpic are:

  Abbreviation Full word
0 abt %1 about %1
1 est %1 estimated %1
2 cal %1 calculated %1
3 bef %1 before %1
4 aft %1 after %1
5 bet %1 and %2 between %1 and %2
6 fr %1 from %1
7 to %1 to %1
8 fr %1 to %2 from %1 to $2

The function dayofweek is a way to access the (localized) day name, eg, "Thursday", for a given date.


Date Arithmetic

FLOAT date2jd(EVENT|STRING);

julian date number is number of days since origin (-4712/01/01 12h00 UT) of specified date

EVENT jd2date(FLOAT);

Convert julian date number to date (actually to event structure with subordinate date)

These functions allow adding or subtracting days from dates.

date2jd converts a date into a number of days, which can then be adjusted by simple arithmetic. Finally, jd2date converts the number of days back into a date.

Julian calendar is used before 4 OCT 1582, and Gregorian calendar afterwards.

As with other date functions, calendar escapes (eg, "@#DRENCH R#@") are not respected, and the only the first date of the DATE record is used.


Value Extraction Functions

VOID extractdate(NODE, INT_V, INT_V, INT_V);

extract a date

VOID extractnames(NODE, LIST_V, INT_V, INT_V);

extract a name

VOID extractplaces(NODE, LIST_V, INT_V);

extract a place

VOID extracttokens(STRING, LIST_V, INT_V, STRING);

extract tokens

VOID extractdatestr(VARB, VARB, VARB, VARB, VARB, STRING);

extract date from string

Value extraction functions read the values of certain lines and return those values in extracted form.

Extractdate extracts date values from either an event node or DATE node. The first parameter must be a node; if its tag is DATE, the date is extracted from the value of that node; if its tag is not DATE, the date is extracted from the first DATE line one level below the argument node. The remaining three arguments are variables. The first is assigned the integer value of the extracted day; the second is assigned the integer value of the extracted month; and the third is assigned the integer value of the extracted year.

Extractnames extracts name components from a NAME line. Its first argument is either an INDI or a NAME node. If it is a NAME line, the components are extracted from the value of that node; if it is an INDI line, the components are extracted from the value of the first NAME line in the person record. The second argument is a list that will hold the extracted components. The third argument is an integer variable that is set to the number of extracted components. The fourth argument is a variable that is set to the index (starting at one) of the surname component; the / characters are removed from around the surname component. If there is no surname this argument variable is set to zero.

Extractplaces extracts place components from a PLAC node. The first argument is a node; if its tag is PLAC, the places are extracted from the value of the node; if its tag is not PLAC, places are extracted from the first PLAC line one level below the argument node. The second parameter is a list that will hold the extracted components. The third argument is an integer variable that is set to the number of extracted components. Place components are defined by the comma-separated portions of the PLAC value; leading and trailing white space is removed from the components, while all internal white space is retained.

Extracttokens extracts tokens from a string and places them in a list. The first argument is the string to extract tokens from. The second argument is the list to hold the tokens. The third argument is an integer variable that is set to the number of tokens extracted. The fourth parameter is the string of delimiter characters that extracttokens uses to break the input string into tokens.

extractdatestr extracts date values from a . STRING. It is intended for internal verification of date extraction code. The remaining five arguments are variables. The second is assigned the integer value of the extracted day; the third is assigned the integer value of the extracted month; and the fourth is assigned the integer value of the extracted year.


User Interaction Functions

VOID getindi(INDI_V, STRING);

identify person through user interface

VOID getindiset(SET_V, STRING);

identify set of persons through user interface

VOID getfam(FAM_V);

identify family through user interface

VOID getint(INT_V, STRING);

get integer through user interface

VOID getstr(STRING_V, STRING);

get string through user interface

INDI choosechild(INDI|FAM);

select child of person/family through user interface

FAM choosefam(INDI);

select family person is in as spouse

INDI chooseindi(SET);

select person from set of persons

INDI choosespouse(INDI);

select spouse of person

SET choosesubset(SET);

select a subset of persons from set of persons

INT menuchoose(LIST, STRING);

select from a list of options

These functions interact with the user to get information needed by the program.

Getindi asks the user to identify a person. The first argument is a variable that is set to the person. The second is an optional string to use as a prompt. Getindiset asks the user to identify a set of persons. Getfam asks the user identify a family. Getint and getstr ask the user enter an integer and string, respectively.

Choosechild asks the user select a child of a family or person; its single argument is a person or family; it return the child. Choosefam has the user select a family that a person is in as a spouse; its argument is a person; it returns the family. Chooseindi has the user select one person from a set of persons; its argument in a set of persons; it returns the chosen person. Choosespouse has the user select a spouse of a person; its argument is a person; it returns the chosen spouse. Choosesubset has the user select a subset of persons from a set of persons; its argument is the chosen subset.

Menuchoose allows the user to select from an arbitrary menu. The first argument is a list of strings making up the items in the menu; the second, optional argument is a prompt string for the menu; menuchoose returns the integer index of the item selected by the user; if the user doesn't select an item, zero is returned.


String Functions

STRING lower(STRING);

convert to lower case

STRING upper(STRING);

convert to upper case

STRING capitalize(STRING);

capitalize first letter

STRING titlecase(STRING);

capitalize first letter of each word

STRING trim(STRING, INT);

trim to length

STRING rjustify(STRING, INT);

right justify in field

STRING concat(STRING, STRING ...);

catenate two strings

STRING strconcat(STRING, STRING ...);

catenate two strings

INT strlen(STRING);

number of characters in string

STRING substring((STRING, INT, INT);

substring function

INT index(STRING, STRING, INT);

index function

STRING d(INT);

number as decimal string

STRING f(FLOAT, INT);

number as floating point string

STRING card(INT);

number in cardinal form (one, two, ...)

STRING ord(INT);

number in ordinal form (first, second, ...)

STRING alpha(INT);

convert number to Latin letter (a, b, ...)

STRING roman(INT);

number in Roman numeral form (i, ii, ...)

STRING strsoundex(STRING);

find SOUNDEX value of arbitrary string

INT strtoint(STRING);

convert numeric string to integer

INT atoi(STRING);

convert numeric string to integer

INT strcmp(STRING, STRING);

general string compare

BOOL eqstr(STRING, STRING);

compare strings for equality

BOOL nestr(STRING, STRING);

compare strings for inequality

These functions provide string handling. Prior to version 3.0.6, many of them used an approach to memory management chosen for absolute minimal memory footprint. A function using this approach constructed its output string in its own string buffer, reusing that buffer each time it was called. When a function using this approach returned a string value it returned its buffer. In consequence the strings returned by these functions were to be either used or saved before the function was called again.

Lower and upper convert the letters in their arguments to lower or upper case, respectively. Capitalize converts the first character of the argument, if it is a letter, to upper case. Lower and upper historically used the buffer return method; capitalize operates on and returns its argument. titlecase converts the first letter of each word if it is a letter, to upper case and all other characters to lower case.

Trim shortens a string to the length specified by the second parameter. If the string is already of that length or shorter the string is not changed. Rjustify right justifies a string into another string of the length specified by the second parameter. If the original string is shorter than the justified string, blanks are inserted to the left of the original string; if the string is longer than the justified string, the original string is truncated on the right. Trim historically used the buffer return method; rjustify creates and returns a new string.

Concat and strconcat catenate strings and return the result. They are identical functions. They may take two to 32 string arguments; null arguments are allowed. The arguments are concatenated together into a single, newly allocated string, which is returned.

Strlen returns the length of the string argument.

Substring returns a substring of the first argument string. The second and third arguments are the indices of the first and last characters in the argument string to use to form the substring. The indexes are relative one. Substring historically used the buffer return method.

Index returns the character index of the nth occurrence of a substring within a string. The index is the relative one character offset to the beginning of the substring. The first argument is the string; the second argument is the substring; and the third argument is the occurrence number.

D, card, ord, alpha and roman convert integers to strings. D converts an integer to a numeric string; card converts an integer to a cardinal number string (eg, one, two, three); ord converts an integer to an ordinal number (eg, first, second, third); alpha converts an integer to a letter (eg, a, b, c); and roman converts an integer to a Roman numeral (eg, i, ii, iii).

The f function converts a float to a string. The optional second argument specifies the precision of the output. The default precision is 2.

Strsoundex converts an arbitrary string to a SOUNDEX value. Non-ASCII text characters are ignored in the string.

Strtoint converts a numeric string to an integer. Atoi is identical to strtoint.

Strcmp compares two strings and returns an integer that is less than zero, equal to zero, or greater than zero, if, respectively, the first string is lexicographically less than, equal to, or greater than the second string. Eqstr and nestr return whether two strings are equal or not equal, respectively. Strcmp, Eqstr, and nestr all treat null strings as empty strings, which is to say they pretend that a null string is actually "". This means that all null and empty strings compare as equal.


Output Mode Functions

VOID linemode(void);

use line output mode

VOID pagemode(INT, INT);

use page output mode with given page size

VOID col(INT);

position to column in output

INT getcol(void);

get current column in output

VOID row(INT);

position to row in output

VOID pos(INT, INT);

position to (row, col) coordinate in output

VOID pageout(void);

output page buffer

STRING nl(void);

newline character

STRING sp(void);

space character

STRING qt(void);

double quote character

VOID newfile(STRING, BOOL);

send program output to this file

STRING outfile(void);

return name of current program output file

VOID copyfile(STRING);

copy file contents to program output file

BOOLEAN test(STRING, STRING);

tests for characteristics of a file

VOID print(STRING, STRING ...);

print string to standard output window

Reports can be generated in two modes, line mode and page mode. Linemode selects line mode and pagemode selects page mode; line mode is the default. The first parameter to pagemode is the number of rows per page; the second parameter is the number of columns per page. When in the line mode report output is written directly to the output file as the program runs, line by line. When in page mode output is buffered into pages which are written to the output file when pageout is called. Page mode is useful for generating charts (eg, pedigree charts or box charts) where it is convenient to compute the two-dimensional location of output.

Col positions output to the given column. If the current column is greater than the argument, col positions output to the given column on the next line. Col works in both modes. Getcol returns the current column in the output.

Row positions output to the first character in the given row; row can only be used in page mode.

Pos positions output to a specified row and column coordinate; the first argument specifies the row, and the second specifies the column. Pos can only be used in page mode.

Nl write a new line character to the output file; sp writes a space character to the output file; and qt writes a quote character to the output file. Note that \n and \' can be used within string values to represent the newline and double quote characters.

Newfile specifies the name of the report output file. Its first argument is the file's name; its second argument is an append flag - if its value is non-zero the report appends to this file; if its value is zero the report overwrites the contents of the file. Newfile can be called many times; this allows a single report program to generate many report output files during one execution. Programs are not required to use newfile; if it is not used then LifeLines automatically asks for the name of the report output file.

Outfile returns the name of the current report output file.

Copyfile copies the contents of a file to the report output file; its argument is a string whose value is the name of a file; if the file name is not absolute nor relative, then the LLPROGRAMS environment variable, if set, will be used to search for the file; the file is opened and its contents copied to the report output file.

Test will check for a specified property of the specified file. The first argument is the property, the second argument is the filename. Supported properties are: r - file is readable w - file is writeable x - file is executable s - file has non-zero size z - file has zero size e - file exists f - check if argument is a file d - check if argument is a directory The return value is TRUE or FALSE, depending on whether the file had the specified property or not.

Print prints its argument string to the standard output window; print may have one to 32 arguments.


Person Set Functions and GEDCOM Extraction

VOID indiset(SET_V);

declare a set variable

VOID addtoset(SET, INDI, ANY);

add a person to a set

VOID deletefromset(SET, INDI, BOOL);

remove a person from a set

INT length(SET);

size of a set

SET union(SET, SET);

union of two sets

SET intersect(SET, SET);

intersection of two sets

SET difference(SET, SET);

difference of two sets

SET parentset(SET);

set of all parents

SET childset(SET);

set of all children

SET spouseset(SET);

set of all spouses

SET siblingset(SET);

set of all siblings

SET ancestorset(SET);

set of all ancestors

SET descendentset(SET);

set of all descendents

SET descendantset(SET);

same as descendentset; spelling

SET uniqueset(SET);

remove duplicates from set

VOID namesort(SET);

sort indiset by name

VOID keysort(SET);

sort indiset by key values

VOID valuesort(SET);

sort indiset by auxiliary values

VOID genindiset(STRING, SET);

generate indiset from GEDCOM name string

BOOL inset(SET, INDI);

true if the Individual is in the set.

forindiset( SET, INDI_V, ANY_V, INT_V ) { commands } 

loop through all persons in person set

These functions allow you to manipulate person sets. A person set is a potentially large set of persons; each person may have an arbitrary value associated with him/her. A person set must be declared with the indiset function before it can be used.

Addtoset adds a person to a set. The first argument is the set; the second argument is the person; and the third argument may be any value. The same person may be added to a set more than once, each time with a different value. Deletefromset removes a person from a set. The first argument is the set; the second argument is the person; if the third parameter is true all of the person's entries are removed from the set; if false only the first entry is removed. Length returns the number of persons in a person set.

Union, intersect and difference return the set union, set intersection and set difference, respectively, of two person sets. Each functions takes two person sets as arguments and returns a third person set. The functions actually modify their argument sets, both reordering them into canonical key order and removing any duplicates (these operations are necessary to easily implement these types of set functions).

Parentset, childset, spouseset and siblingset return the set of all parents, set of all children, set of all spouses and set of all siblings, respectively, of the set of persons in their argument. In all cases there is no change to the argument person set.

Ancestorset returns the set all ancestors of all persons in the argument set. Descendentset returns the set of all descendents of all persons in the argument set. Descendantset is the same as descendentset; it allows an alternate spelling.

Uniqueset sorts a person set by key value and then removes all entries with duplicate keys; the input set is modified and returned.

Namesort, keysort and valuesort sort a set of persons by name, by key and by associated value, respectively.

Each person in a person set has an associated value. When a person is added to a set with addtoset, the value is explicitly assigned. When new sets are created by other functions, a number of rules are used to associate values with persons as they are added to the new sets. For parentset, childset and spouseset the values are copied from the first input set person that causes the new person to be added to the set. For union, intersect and difference, the values are copied from the values in the first input set, except in the case of union, when persons are taken from the second set alone, in which case the values come from there. For ancestorset and descendantset the value is set to the number of generations the new person is away from the first person in the input set that the new person is related to. If the new person is related to more than one person in the input set, the value is set for the nearest relationship; that is, the value is as low as possible. Valuesort sorts a person set by the values of these auxiliary values.

Genindiset generates the set of persons that matches a string whose value is a name in GEDCOM format. Genindiset uses the same algorithm that matches names entered at the browse prompt or by the user interaction getindiset function.

Inset returns true if the the specified individual is in the SET.

Forindiset is an iterator that loops through each person in an indiset. The first parameter is an indiset. The second parameter is a variable that iterates through each person in the set. The third parameter iterates through the values associated with the persons. The fourth parameter is an integer variable that counts the iterations.


Record Update Functions

NODE createnode(STRING, STRING);

create a GEDCOM node

VOID addnode(NODE, NODE, NODE);

add a node to a GEDCOM tree

VOID detachnode(NODE);

delete a node from a GEDCOM tree

VOID writeindi(INDI);

write a person back to the database

VOID writefam(FAM);

write a family back to the database

These functions allow you to modify an internal GEDCOM node tree.

Createnode creates a GEDCOM node; the two arguments are tag and value strings, respectively; the value string can be null. Addnode adds a node to a node tree. The first argument is the new node; the second is the node in the tree that becomes the parent of the new node; the third is the node in the tree that becomes the previous sibling of the new node; this argument is null if the new node is to become the first child of the parent. Detachnode removes a node from a node tree. writeindi writes an individual record back to the database, and writefam writes a family record back to the database, allowing the report to make permanent changes to the database.

The node functions only change data in memory; there is no effect on the database until and unless writeindi or writefam are called.


Record Linking Functions

BOOL reference(STRING);

determine if string is a cross reference

NODE dereference(STRING);

reference cross reference or key to node tree

These functions allow you to recognize values that are cross references and to read the records they refer to. Reference returns true if its string argument is a cross reference value, that is, the internal key of one of the records in the database. Dereference returns the node tree of the record referred to by its cross-reference string argument.


Miscellaneous Functions

VOID lock(RECORD|NODE);

lock a record (or record containing specified node) in memory

VOID unlock(RECORD|NODE);

unlock a record (or record containing specified node) from memory

STRING database(void);

return name of current database

STRING program(void);

return name of current program

STRING version(void);

return version of LifeLines program

VOID system(STRING);

execute string as a UNIX shell command

INT heapused(void);

amount of heap used for windows

STRING getproperty(STRING);

extract system or user property. Function available after v3.0.5.

STRING setlocale(STRING);

set the locale

STRING bytecode(STRING, STRING);

encode a string in a codeset

STRING convertcode(STRING, STRING, STRING);

convert string from one codeset to another

VOID debug(BOOLEAN);

set interperter debug mode

STRING pvalue(ANY);

dump information about a pvalue

VOID free(ANY);

free space associated with a variable

Lock and unlock are used to lock a person or family into RAM memory, and to unlock a person or family from RAM memory, respectively.

Database returns the name of the current database, useful in titling reports. program returns the name of the current report program. Version returns the version of the running LifeLines program, eg, 3.0.61.

System executes its string argument as a UNIX (or MS-Windows as appropriate) shell command, by invoking the system shell. This will not occur if the user has chosen to disallow report system calls (via the DenySystemCalls user option).

The heapused function returns the amount of system heap that is in use at the time. This is implemented only on windows.

The getproperty function extracts system or user properties. Properties are named group.subgroup.property, group.property or even property. The keys are available at the moment can be found in the ll-userguide under System and User Properties.

The setlocale function sets the locale and returns the previous setting of locale.

The bytecode function converts the supplied string with escape codes to the current codeset from the internal codeset or from the codeset specified by the optional second parameter if specified. A escaped code is a dollar sign ($) followed by 2 hex characters, e.g. $C1.

The convertcode function converts a string to another codeset. In the two argument form, the second argument is the destination codeset, and the source codeset is the internal codeset. In the 3 argument form, the second argument is the source codeset and the third argument is the destination codeset. (See the section of the LifeLines User Guide on codeset conversions.) For example, if your internal codeset is UTF-8, and the report codeset is UTF-8, the following code,
       "<p>\n"
       convertcode(str,"UTF-8//html")
writes the first line of output as it is written, but will apply the html sub-conversion to all the characters in the string str. The special html codes, like the less than or greater than, will be escaped when printing the second string, but not when printing the first string.

The debug function turns on or off programming debugging. When enabled gobs of information is printed as a LifeLines program is run. This can be useful to figure out why a program is not behaving as expected.

The pvalue function returns a string that represents the contents of a variable in the interpreter. This is present for debug purposes.

The function free deallocates space associated with the variable provided as argument 1. Care must be taken when free is used in a function on a variable which is a parameter to the function. free will not effect the variable in the calling program.


Deprecated Functions

The baptism finds christening (CHR) events. The types of events desired to be found, depend on the nature of the report being written. It is recommended that custom access routines be used instead of baptism.

EVENT baptism(INDI);

first baptism event of

If you want a routine that returns the first event for an individual that is a baptism, LDS baptism, Christening or Adult Christening, the following routine can be used.
func get_baptism(indi) {
    fornodes(indi,node) {
        if (index(" BAPM BAPL CHR CHRA ",upper(tag(node)),1)) {
            return(node)
        }
    }
    return(0)
}
If you want to search for additional events or fewer events you can modify the string in the index call acccordingly. Likewise, if you want the to prioritize the results, finding a christening event if one exists, else finding a baptism event if one exists, then finding an LDS baptism event, and finally a christening event, the following function is suggested.
/* get_baptism(indi) returns a baptism event if found
   events CHR, BAPM, BAPL, and CHRA are considered, in that order
*/
func get_baptism(indi, prefs)
{
    set(chr, 0)
    set(bapm, 0)
    set(bapl, 0)
    set(chra, 0)
    fornodes(indi,node)
    {
	if (and(eq(upper(tag(node)), "CHR"), not(chr)) { set(chr, node) }
	if (and(eq(upper(tag(node)), "BAPM"), not(bapm)) { set(bapm, node) }
	if (and(eq(upper(tag(node)), "BAPL"), not(bapl)) { set(bapl, node) }
	if (and(eq(upper(tag(node)), "CHRA"), not(chra)) { set(chra, node) }
    }
    if (chr) { return(chr) }
    if (bapm) { return(bapm) }
    if (bapl) { return(bapl) }
    return(chra)
}

The functionality of the following three functions, getindimsg, getintmsg and getstrmsg is now available using the optional parameter of getindi, getint and getstr. These functions should no longer be used as they will be removed from a future version of Lifelines.

VOID getindimsg(INDI_V, STRING);

identify person through user interface

VOID getintmsg(INT_V, STRING);

get integer through user interface

VOID getstrmsg(STRING_V, STRING);

get string through user interface

Three functions are available for to generate GEDCOM format output to the report output file of all persons in the argument person set. These functions do not in most cases generate consistent and usable output. This can be done with a program, but it is suggested that these routines are probably not what you really wanted.

Gengedcom output contains a person record for each person in the set, and all the family records that link at least two of the persons in the set together. This function is provided for backward compatibility. Source, Event and Other(X) record pointers are output unmodified, but none of their records are output - this yields an inconsistent output.

Gengedcomweak output does not contain Source, Event or Other(X) record pointers or their records. Gengedcomstrong includes the Source, Event and Other(X) record pointers and all top-level nodes referenced by them.

VOID gengedcom(SET);

generate GEDCOM file from person set

VOID gengedcomweak(SET);

generate GEDCOM file from person set

VOID gengedcomstrong(SET);

generate GEDCOM file from person set

By the release of version 3.0.6, all string values are local copies, and the save and strsave functions should be entirely unnecessary. Save is present only for compatibility reasons. Previously it duplicated its argument (to prevent strings from becoming stale; this is not currently necessary (and this function no longer does anything). Strsave is the same function as save.

STRING save(STRING);

save and return copy of string

STRING strsave(STRING);

same as save function

Use detachnode instead of deletenode.

VOID deletenode(NODE);

delete a node from a GEDCOM tree

In releases after version 3.0.39, the length function accepts an argument of type list, set or table. the lengthset function is no longer needed.

INT lengthset(SET);

size of a set

lifelines-3.0.61/docs/ll-reportmanual.pdf0000700002540200244210000251016110655721444020520 0ustar prappDomain Users%PDF-1.3 1 0 obj << /S /GoTo /D (1.0) >> endobj 4 0 obj (THE LIFELINES PROGRAMMING SUBSYSTEM AND REPORT GENERATOR) endobj 5 0 obj << /S /GoTo /D (2.0) >> endobj 8 0 obj (Table of Contents) endobj 9 0 obj << /S /GoTo /D (3.0) >> endobj 12 0 obj (Chapter 1. Report Programming Manual ) endobj 13 0 obj << /S /GoTo /D (3.1.1) >> endobj 16 0 obj (Introduction) endobj 17 0 obj << /S /GoTo /D (3.2.1) >> endobj 20 0 obj (Tutorial Ahnentafel report) endobj 21 0 obj << /S /GoTo /D (3.3.1) >> endobj 24 0 obj (Template for creating new reports) endobj 25 0 obj << /S /GoTo /D (3.4.1) >> endobj 28 0 obj (Invoking Reports) endobj 29 0 obj << /S /GoTo /D (4.0) >> endobj 32 0 obj (Chapter 2. LIFELINES PROGRAMMING REFERENCE ) endobj 33 0 obj << /S /GoTo /D (4.5.1) >> endobj 36 0 obj (Procedures and Functions) endobj 37 0 obj << /S /GoTo /D (4.6.1) >> endobj 40 0 obj (Comments) endobj 41 0 obj << /S /GoTo /D (4.7.1) >> endobj 44 0 obj (Statements) endobj 45 0 obj << /S /GoTo /D (4.8.1) >> endobj 48 0 obj (Expressions) endobj 49 0 obj << /S /GoTo /D (4.9.1) >> endobj 52 0 obj (Include Feature) endobj 53 0 obj << /S /GoTo /D (4.10.1) >> endobj 56 0 obj (Builtin Functions) endobj 57 0 obj << /S /GoTo /D (4.11.1) >> endobj 60 0 obj (Value Types) endobj 61 0 obj << /S /GoTo /D (4.12.1) >> endobj 64 0 obj (ANY) endobj 65 0 obj << /S /GoTo /D (4.13.1) >> endobj 68 0 obj (BOOL) endobj 69 0 obj << /S /GoTo /D (4.14.1) >> endobj 72 0 obj (EVENT) endobj 73 0 obj << /S /GoTo /D (4.15.1) >> endobj 76 0 obj (FAM) endobj 77 0 obj << /S /GoTo /D (4.16.1) >> endobj 80 0 obj (FLOAT) endobj 81 0 obj << /S /GoTo /D (4.17.1) >> endobj 84 0 obj (INDI) endobj 85 0 obj << /S /GoTo /D (4.18.1) >> endobj 88 0 obj (INT) endobj 89 0 obj << /S /GoTo /D (4.19.1) >> endobj 92 0 obj (LIST) endobj 93 0 obj << /S /GoTo /D (4.20.1) >> endobj 96 0 obj (NODE) endobj 97 0 obj << /S /GoTo /D (4.21.1) >> endobj 100 0 obj (NUMBER) endobj 101 0 obj << /S /GoTo /D (4.22.1) >> endobj 104 0 obj (SET) endobj 105 0 obj << /S /GoTo /D (4.23.1) >> endobj 108 0 obj (STRING) endobj 109 0 obj << /S /GoTo /D (4.24.1) >> endobj 112 0 obj (TABLE) endobj 113 0 obj << /S /GoTo /D (4.25.1) >> endobj 116 0 obj (VOID) endobj 117 0 obj << /S /GoTo /D (4.26.1) >> endobj 120 0 obj (Iterators) endobj 121 0 obj << /S /GoTo /D (4.27.1) >> endobj 124 0 obj (Arithmetic and Logic Functions) endobj 125 0 obj << /S /GoTo /D (4.28.1) >> endobj 128 0 obj (NUMBER add\(NUMBER, NUMBER ...\);) endobj 129 0 obj << /S /GoTo /D (4.29.1) >> endobj 132 0 obj (NUMBER sub\(NUMBER, NUMBER\);) endobj 133 0 obj << /S /GoTo /D (4.30.1) >> endobj 136 0 obj (NUMBER mul\(NUMBER, NUMBER ...\);) endobj 137 0 obj << /S /GoTo /D (4.31.1) >> endobj 140 0 obj (NUMBER div\(NUMBER, NUMBER\);) endobj 141 0 obj << /S /GoTo /D (4.32.1) >> endobj 144 0 obj (INT mod\(INT, INT\);) endobj 145 0 obj << /S /GoTo /D (4.33.1) >> endobj 148 0 obj (NUMBER exp\(NUMBER, INT\);) endobj 149 0 obj << /S /GoTo /D (4.34.1) >> endobj 152 0 obj (NUMBER neg\(NUMBER\);) endobj 153 0 obj << /S /GoTo /D (4.35.1) >> endobj 156 0 obj (FLOAT float\(INT\);) endobj 157 0 obj << /S /GoTo /D (4.36.1) >> endobj 160 0 obj (INT int\(FLOAT\);) endobj 161 0 obj << /S /GoTo /D (4.37.1) >> endobj 164 0 obj (VOID incr\(NUMBER,NUMBER\);) endobj 165 0 obj << /S /GoTo /D (4.38.1) >> endobj 168 0 obj (VOID decr\(NUMBER,NUMBER\);) endobj 169 0 obj << /S /GoTo /D (4.39.1) >> endobj 172 0 obj (BOOL and\(BOOL, BOOL ...\);) endobj 173 0 obj << /S /GoTo /D (4.40.1) >> endobj 176 0 obj (BOOL or\(BOOL, BOOL ...\);) endobj 177 0 obj << /S /GoTo /D (4.41.1) >> endobj 180 0 obj (BOOL not\(BOOL\);) endobj 181 0 obj << /S /GoTo /D (4.42.1) >> endobj 184 0 obj (BOOL eq\(ANY, ANY\);) endobj 185 0 obj << /S /GoTo /D (4.43.1) >> endobj 188 0 obj (BOOL ne\(ANY, ANY\);) endobj 189 0 obj << /S /GoTo /D (4.44.1) >> endobj 192 0 obj (BOOL lt\(ANY, ANY\);) endobj 193 0 obj << /S /GoTo /D (4.45.1) >> endobj 196 0 obj (BOOL gt\(ANY, ANY \);) endobj 197 0 obj << /S /GoTo /D (4.46.1) >> endobj 200 0 obj (BOOL le\(ANY, ANY\);) endobj 201 0 obj << /S /GoTo /D (4.47.1) >> endobj 204 0 obj (BOOL ge\(ANY, ANY\);) endobj 205 0 obj << /S /GoTo /D (4.48.1) >> endobj 208 0 obj (Trigonometric and Spherical Calculations) endobj 209 0 obj << /S /GoTo /D (4.49.1) >> endobj 212 0 obj (FLOAT sin\(FLOAT\);) endobj 213 0 obj << /S /GoTo /D (4.50.1) >> endobj 216 0 obj (FLOAT cos\(FLOAT\);) endobj 217 0 obj << /S /GoTo /D (4.51.1) >> endobj 220 0 obj (FLOAT tan\(FLOAT\);) endobj 221 0 obj << /S /GoTo /D (4.52.1) >> endobj 224 0 obj (FLOAT arcsin\(FLOAT\);) endobj 225 0 obj << /S /GoTo /D (4.53.1) >> endobj 228 0 obj (FLOAT arccos\(FLOAT\);) endobj 229 0 obj << /S /GoTo /D (4.54.1) >> endobj 232 0 obj (FLOAT arctan\(FLOAT\);) endobj 233 0 obj << /S /GoTo /D (4.55.1) >> endobj 236 0 obj (VOID dms2deg\(INT degree, INT minute, INT second, FLOATV decimal\);) endobj 237 0 obj << /S /GoTo /D (4.56.1) >> endobj 240 0 obj (void deg2dms\(FLOAT decimal, INTV degree, INTV minute, INTV second\);) endobj 241 0 obj << /S /GoTo /D (4.57.1) >> endobj 244 0 obj (FLOAT spdist\(FLOAT lat0, FLOAT long0, FLOAT lat1, FLOAT long1\);) endobj 245 0 obj << /S /GoTo /D (4.58.1) >> endobj 248 0 obj (Person Functions) endobj 249 0 obj << /S /GoTo /D (4.59.1) >> endobj 252 0 obj (STRING name\(INDI, BOOL\); ) endobj 253 0 obj << /S /GoTo /D (4.60.1) >> endobj 256 0 obj (STRING fullname\(INDI, BOOL, BOOL, INT\);) endobj 257 0 obj << /S /GoTo /D (4.61.1) >> endobj 260 0 obj (STRING surname\(INDI\);) endobj 261 0 obj << /S /GoTo /D (4.62.1) >> endobj 264 0 obj (STRING givens\(INDI\);) endobj 265 0 obj << /S /GoTo /D (4.63.1) >> endobj 268 0 obj (STRING trimname\(INDI, INT\);) endobj 269 0 obj << /S /GoTo /D (4.64.1) >> endobj 272 0 obj (EVENT birth\(INDI\);) endobj 273 0 obj << /S /GoTo /D (4.65.1) >> endobj 276 0 obj (EVENT death\(INDI\);) endobj 277 0 obj << /S /GoTo /D (4.66.1) >> endobj 280 0 obj (EVENT burial\(INDI\);) endobj 281 0 obj << /S /GoTo /D (4.67.1) >> endobj 284 0 obj (INDI father\(INDI\);) endobj 285 0 obj << /S /GoTo /D (4.68.1) >> endobj 288 0 obj (INDI mother\(INDI\);) endobj 289 0 obj << /S /GoTo /D (4.69.1) >> endobj 292 0 obj (INDI nextsib\(INDI\);) endobj 293 0 obj << /S /GoTo /D (4.70.1) >> endobj 296 0 obj (INDI prevsib\(INDI\);) endobj 297 0 obj << /S /GoTo /D (4.71.1) >> endobj 300 0 obj (STRING sex\(INDI\);) endobj 301 0 obj << /S /GoTo /D (4.72.1) >> endobj 304 0 obj (BOOL male\(INDI\);) endobj 305 0 obj << /S /GoTo /D (4.73.1) >> endobj 308 0 obj (BOOL female\(INDI\);) endobj 309 0 obj << /S /GoTo /D (4.74.1) >> endobj 312 0 obj (STRING pn\(INDI, INT\);) endobj 313 0 obj << /S /GoTo /D (4.75.1) >> endobj 316 0 obj (INT nspouses\(INDI\);) endobj 317 0 obj << /S /GoTo /D (4.76.1) >> endobj 320 0 obj (INT nfamilies\(INDI\);) endobj 321 0 obj << /S /GoTo /D (4.77.1) >> endobj 324 0 obj (FAM parents\(INDI\);) endobj 325 0 obj << /S /GoTo /D (4.78.1) >> endobj 328 0 obj (STRING title\(INDI\);) endobj 329 0 obj << /S /GoTo /D (4.79.1) >> endobj 332 0 obj (STRING key\(RECORD, BOOL\);) endobj 333 0 obj << /S /GoTo /D (4.80.1) >> endobj 336 0 obj (STRING soundex\(INDI\);) endobj 337 0 obj << /S /GoTo /D (4.81.1) >> endobj 340 0 obj (NODE inode\(INDI\);) endobj 341 0 obj << /S /GoTo /D (4.82.1) >> endobj 344 0 obj (NODE root\(INDI\);) endobj 345 0 obj << /S /GoTo /D (4.83.1) >> endobj 348 0 obj (INDI indi\(STRING\);) endobj 349 0 obj << /S /GoTo /D (4.84.1) >> endobj 352 0 obj (INDI firstindi\(void\);) endobj 353 0 obj << /S /GoTo /D (4.85.1) >> endobj 356 0 obj (INDI lastindi\(void\);) endobj 357 0 obj << /S /GoTo /D (4.86.1) >> endobj 360 0 obj (INDI nextindi\(INDI\);) endobj 361 0 obj << /S /GoTo /D (4.87.1) >> endobj 364 0 obj (INDI previndi\(INDI\);) endobj 365 0 obj << /S /GoTo /D (4.88.1) >> endobj 368 0 obj (spouses \(INDI, INDIV, FAMV, INTV\) \173 commands \175 ) endobj 369 0 obj << /S /GoTo /D (4.89.1) >> endobj 372 0 obj (families \(INDI, FAMV, INDIV, INTV\) \173 commands \175 ) endobj 373 0 obj << /S /GoTo /D (4.90.1) >> endobj 376 0 obj (forindi \(INDIV, INTV\) \173 commands \175 ) endobj 377 0 obj << /S /GoTo /D (4.91.1) >> endobj 380 0 obj (mothers \(INDI, INDIV, FAMV, INTV\) \173 commands \175 ) endobj 381 0 obj << /S /GoTo /D (4.92.1) >> endobj 384 0 obj (fathers \(INDI, INDIV, FAMV, INTV\) \173 commands \175 ) endobj 385 0 obj << /S /GoTo /D (4.93.1) >> endobj 388 0 obj (Parents \(INDI, FAM, INTV\) \173 commands \175 ) endobj 389 0 obj << /S /GoTo /D (4.94.1) >> endobj 392 0 obj (Family Functions) endobj 393 0 obj << /S /GoTo /D (4.95.1) >> endobj 396 0 obj (EVENT marriage\(FAM\);) endobj 397 0 obj << /S /GoTo /D (4.96.1) >> endobj 400 0 obj (INDI husband\(FAM\);) endobj 401 0 obj << /S /GoTo /D (4.97.1) >> endobj 404 0 obj (INDI wife\(FAM\);) endobj 405 0 obj << /S /GoTo /D (4.98.1) >> endobj 408 0 obj (INT nchildren\(FAM\);) endobj 409 0 obj << /S /GoTo /D (4.99.1) >> endobj 412 0 obj (INDI firstchild\(FAM\);) endobj 413 0 obj << /S /GoTo /D (4.100.1) >> endobj 416 0 obj (INDI lastchild\(FAM\);) endobj 417 0 obj << /S /GoTo /D (4.101.1) >> endobj 420 0 obj (STRING key\(FAM|INDI, BOOL\);) endobj 421 0 obj << /S /GoTo /D (4.102.1) >> endobj 424 0 obj (NODE fnode\(FAM\);) endobj 425 0 obj << /S /GoTo /D (4.103.1) >> endobj 428 0 obj (NODE root\(FAM\);) endobj 429 0 obj << /S /GoTo /D (4.104.1) >> endobj 432 0 obj (FAM fam\(STRING\);) endobj 433 0 obj << /S /GoTo /D (4.105.1) >> endobj 436 0 obj (FAM firstfam\(void\);) endobj 437 0 obj << /S /GoTo /D (4.106.1) >> endobj 440 0 obj (FAM lastfam\(void\);) endobj 441 0 obj << /S /GoTo /D (4.107.1) >> endobj 444 0 obj (FAM nextfam\(FAM\);) endobj 445 0 obj << /S /GoTo /D (4.108.1) >> endobj 448 0 obj (FAM prevfam\(FAM\);) endobj 449 0 obj << /S /GoTo /D (4.109.1) >> endobj 452 0 obj (children \(FAM, INDIV, INTV\) \173 commands \175 ) endobj 453 0 obj << /S /GoTo /D (4.110.1) >> endobj 456 0 obj (spouses \(FAM, INDIV, INTV\) \173 commands \175 ) endobj 457 0 obj << /S /GoTo /D (4.111.1) >> endobj 460 0 obj (forfam \(FAMV, INTV\) \173 commands \175 ) endobj 461 0 obj << /S /GoTo /D (4.112.1) >> endobj 464 0 obj (Other types of records) endobj 465 0 obj << /S /GoTo /D (4.113.1) >> endobj 468 0 obj (forsour \(NODEV, INTV\) \173 commands \175 ) endobj 469 0 obj << /S /GoTo /D (4.114.1) >> endobj 472 0 obj (foreven \(NODEV, INTV\) \173 commands \175 ) endobj 473 0 obj << /S /GoTo /D (4.115.1) >> endobj 476 0 obj (forothr \(NODEV, INTV\) \173 commands \175 ) endobj 477 0 obj << /S /GoTo /D (4.116.1) >> endobj 480 0 obj (List Functions) endobj 481 0 obj << /S /GoTo /D (4.117.1) >> endobj 484 0 obj (VOID list\(LISTV\);) endobj 485 0 obj << /S /GoTo /D (4.118.1) >> endobj 488 0 obj (VOID clear\(LIST\);) endobj 489 0 obj << /S /GoTo /D (4.119.1) >> endobj 492 0 obj (BOOL empty\(LIST\);) endobj 493 0 obj << /S /GoTo /D (4.120.1) >> endobj 496 0 obj (INT length\(LIST\);) endobj 497 0 obj << /S /GoTo /D (4.121.1) >> endobj 500 0 obj (VOID enqueue\(LIST, ANY\);) endobj 501 0 obj << /S /GoTo /D (4.122.1) >> endobj 504 0 obj (ANY dequeue\(LIST\);) endobj 505 0 obj << /S /GoTo /D (4.123.1) >> endobj 508 0 obj (VOID requeue\(LIST, ANY\);) endobj 509 0 obj << /S /GoTo /D (4.124.1) >> endobj 512 0 obj (VOID push\(LIST, ANY\);) endobj 513 0 obj << /S /GoTo /D (4.125.1) >> endobj 516 0 obj (ANY pop\(LIST\);) endobj 517 0 obj << /S /GoTo /D (4.126.1) >> endobj 520 0 obj (VOID setel\(LIST, INT, ANY\);) endobj 521 0 obj << /S /GoTo /D (4.127.1) >> endobj 524 0 obj (ANY getel\(LIST, INT\);) endobj 525 0 obj << /S /GoTo /D (4.128.1) >> endobj 528 0 obj (BOOL inlist\(LIST, ANY\);) endobj 529 0 obj << /S /GoTo /D (4.129.1) >> endobj 532 0 obj (VOID sort\(LIST, LIST\);) endobj 533 0 obj << /S /GoTo /D (4.130.1) >> endobj 536 0 obj (VOID rsort\(LIST, LIST\);) endobj 537 0 obj << /S /GoTo /D (4.131.1) >> endobj 540 0 obj (LIST dup\(LIST\);) endobj 541 0 obj << /S /GoTo /D (4.132.1) >> endobj 544 0 obj (forlist \(LIST, ANYV, INTV\) \173 commands \175 ) endobj 545 0 obj << /S /GoTo /D (4.133.1) >> endobj 548 0 obj (Table Functions) endobj 549 0 obj << /S /GoTo /D (4.134.1) >> endobj 552 0 obj (VOID table\(TABLEV\);) endobj 553 0 obj << /S /GoTo /D (4.135.1) >> endobj 556 0 obj (VOID insert\(TABLE, STRING, ANY\);) endobj 557 0 obj << /S /GoTo /D (4.136.1) >> endobj 560 0 obj (ANY lookup\(TABLE, STRING\);) endobj 561 0 obj << /S /GoTo /D (4.137.1) >> endobj 564 0 obj (INT length\(TABLE\);) endobj 565 0 obj << /S /GoTo /D (4.138.1) >> endobj 568 0 obj (BOOL empty\(TABLE\);) endobj 569 0 obj << /S /GoTo /D (4.139.1) >> endobj 572 0 obj (GEDCOM Node Functions) endobj 573 0 obj << /S /GoTo /D (4.140.1) >> endobj 576 0 obj (STRING xref\(NODE\);) endobj 577 0 obj << /S /GoTo /D (4.141.1) >> endobj 580 0 obj (STRING tag\(NODE\);) endobj 581 0 obj << /S /GoTo /D (4.142.1) >> endobj 584 0 obj (STRING value\(NODE\);) endobj 585 0 obj << /S /GoTo /D (4.143.1) >> endobj 588 0 obj (NODE parent\(NODE\);) endobj 589 0 obj << /S /GoTo /D (4.144.1) >> endobj 592 0 obj (NODE child\(NODE\);) endobj 593 0 obj << /S /GoTo /D (4.145.1) >> endobj 596 0 obj (NODE sibling\(NODE\);) endobj 597 0 obj << /S /GoTo /D (4.146.1) >> endobj 600 0 obj (NODE savenode\(NODE\);) endobj 601 0 obj << /S /GoTo /D (4.147.1) >> endobj 604 0 obj (INT level\(NODE\);) endobj 605 0 obj << /S /GoTo /D (4.148.1) >> endobj 608 0 obj (fornodes \(NODE, NODEV\) \173 commands \175 ) endobj 609 0 obj << /S /GoTo /D (4.149.1) >> endobj 612 0 obj (fornotes \(NODE, STRINGV\) \173 commands \175 ) endobj 613 0 obj << /S /GoTo /D (4.150.1) >> endobj 616 0 obj (traverse \(NODE, NODEV, INTV\) \173 commands \175 ) endobj 617 0 obj << /S /GoTo /D (4.151.1) >> endobj 620 0 obj (Event and Date Functions) endobj 621 0 obj << /S /GoTo /D (4.152.1) >> endobj 624 0 obj (STRING date\(EVENT\);) endobj 625 0 obj << /S /GoTo /D (4.153.1) >> endobj 628 0 obj (STRING place\(EVENT\);) endobj 629 0 obj << /S /GoTo /D (4.154.1) >> endobj 632 0 obj (STRING year\(EVENT\);) endobj 633 0 obj << /S /GoTo /D (4.155.1) >> endobj 636 0 obj (STRING long\(EVENT\);) endobj 637 0 obj << /S /GoTo /D (4.156.1) >> endobj 640 0 obj (STRING short\(EVENT\);) endobj 641 0 obj << /S /GoTo /D (4.157.1) >> endobj 644 0 obj (EVENT gettoday\(void\);) endobj 645 0 obj << /S /GoTo /D (4.158.1) >> endobj 648 0 obj (VOID setdate\(VARSTRING\);) endobj 649 0 obj << /S /GoTo /D (4.159.1) >> endobj 652 0 obj (VOID dayformat\(INT\);) endobj 653 0 obj << /S /GoTo /D (4.160.1) >> endobj 656 0 obj (VOID monthformat\(INT\);) endobj 657 0 obj << /S /GoTo /D (4.161.1) >> endobj 660 0 obj (VOID yearformat\(INT\);) endobj 661 0 obj << /S /GoTo /D (4.162.1) >> endobj 664 0 obj (VOID eraformat\(INT\);) endobj 665 0 obj << /S /GoTo /D (4.163.1) >> endobj 668 0 obj (VOID dateformat\(INT\);) endobj 669 0 obj << /S /GoTo /D (4.164.1) >> endobj 672 0 obj (VOID datepic\(STRING\);) endobj 673 0 obj << /S /GoTo /D (4.165.1) >> endobj 676 0 obj (STRING stddate\(EVENT|STRING\);) endobj 677 0 obj << /S /GoTo /D (4.166.1) >> endobj 680 0 obj (VOID complexformat\(INT\);) endobj 681 0 obj << /S /GoTo /D (4.167.1) >> endobj 684 0 obj (VOID complexpic\(INT, STRING\);) endobj 685 0 obj << /S /GoTo /D (4.168.1) >> endobj 688 0 obj (STRING complexdate\(EVENT|STRING\);) endobj 689 0 obj << /S /GoTo /D (4.169.1) >> endobj 692 0 obj (STRING dayofweek\(EVENT|STRING\);) endobj 693 0 obj << /S /GoTo /D (4.170.1) >> endobj 696 0 obj (Date Arithmetic) endobj 697 0 obj << /S /GoTo /D (4.171.1) >> endobj 700 0 obj (FLOAT date2jd\(EVENT|STRING\);) endobj 701 0 obj << /S /GoTo /D (4.172.1) >> endobj 704 0 obj (EVENT jd2date\(FLOAT\);) endobj 705 0 obj << /S /GoTo /D (4.173.1) >> endobj 708 0 obj (Value Extraction Functions) endobj 709 0 obj << /S /GoTo /D (4.174.1) >> endobj 712 0 obj (VOID extractdate\(NODE, INTV, INTV, INTV\);) endobj 713 0 obj << /S /GoTo /D (4.175.1) >> endobj 716 0 obj (VOID extractnames\(NODE, LISTV, INTV, INTV\);) endobj 717 0 obj << /S /GoTo /D (4.176.1) >> endobj 720 0 obj (VOID extractplaces\(NODE, LISTV, INTV\);) endobj 721 0 obj << /S /GoTo /D (4.177.1) >> endobj 724 0 obj (VOID extracttokens\(STRING, LISTV, INTV, STRING\);) endobj 725 0 obj << /S /GoTo /D (4.178.1) >> endobj 728 0 obj (VOID extractdatestr\(VARB, VARB, VARB, VARB, VARB, STRING\);) endobj 729 0 obj << /S /GoTo /D (4.179.1) >> endobj 732 0 obj (User Interaction Functions) endobj 733 0 obj << /S /GoTo /D (4.180.1) >> endobj 736 0 obj (VOID getindi\(INDIV, STRING\);) endobj 737 0 obj << /S /GoTo /D (4.181.1) >> endobj 740 0 obj (VOID getindiset\(SETV, STRING\);) endobj 741 0 obj << /S /GoTo /D (4.182.1) >> endobj 744 0 obj (VOID getfam\(FAMV\);) endobj 745 0 obj << /S /GoTo /D (4.183.1) >> endobj 748 0 obj (VOID getint\(INTV, STRING\);) endobj 749 0 obj << /S /GoTo /D (4.184.1) >> endobj 752 0 obj (VOID getstr\(STRINGV, STRING\);) endobj 753 0 obj << /S /GoTo /D (4.185.1) >> endobj 756 0 obj (INDI choosechild\(INDI|FAM\);) endobj 757 0 obj << /S /GoTo /D (4.186.1) >> endobj 760 0 obj (FAM choosefam\(INDI\);) endobj 761 0 obj << /S /GoTo /D (4.187.1) >> endobj 764 0 obj (INDI chooseindi\(SET\);) endobj 765 0 obj << /S /GoTo /D (4.188.1) >> endobj 768 0 obj (INDI choosespouse\(INDI\);) endobj 769 0 obj << /S /GoTo /D (4.189.1) >> endobj 772 0 obj (SET choosesubset\(SET\);) endobj 773 0 obj << /S /GoTo /D (4.190.1) >> endobj 776 0 obj (INT menuchoose\(LIST, STRING\);) endobj 777 0 obj << /S /GoTo /D (4.191.1) >> endobj 780 0 obj (String Functions) endobj 781 0 obj << /S /GoTo /D (4.192.1) >> endobj 784 0 obj (STRING lower\(STRING\);) endobj 785 0 obj << /S /GoTo /D (4.193.1) >> endobj 788 0 obj (STRING upper\(STRING\);) endobj 789 0 obj << /S /GoTo /D (4.194.1) >> endobj 792 0 obj (STRING capitalize\(STRING\);) endobj 793 0 obj << /S /GoTo /D (4.195.1) >> endobj 796 0 obj (STRING titlecase\(STRING\);) endobj 797 0 obj << /S /GoTo /D (4.196.1) >> endobj 800 0 obj (STRING trim\(STRING, INT\);) endobj 801 0 obj << /S /GoTo /D (4.197.1) >> endobj 804 0 obj (STRING rjustify\(STRING, INT\);) endobj 805 0 obj << /S /GoTo /D (4.198.1) >> endobj 808 0 obj (STRING concat\(STRING, STRING ...\);) endobj 809 0 obj << /S /GoTo /D (4.199.1) >> endobj 812 0 obj (STRING strconcat\(STRING, STRING ...\);) endobj 813 0 obj << /S /GoTo /D (4.200.1) >> endobj 816 0 obj (INT strlen\(STRING\);) endobj 817 0 obj << /S /GoTo /D (4.201.1) >> endobj 820 0 obj (STRING substring\(\(STRING, INT, INT\);) endobj 821 0 obj << /S /GoTo /D (4.202.1) >> endobj 824 0 obj (INT index\(STRING, STRING, INT\);) endobj 825 0 obj << /S /GoTo /D (4.203.1) >> endobj 828 0 obj (STRING d\(INT\);) endobj 829 0 obj << /S /GoTo /D (4.204.1) >> endobj 832 0 obj (STRING f\(FLOAT, INT\);) endobj 833 0 obj << /S /GoTo /D (4.205.1) >> endobj 836 0 obj (STRING card\(INT\);) endobj 837 0 obj << /S /GoTo /D (4.206.1) >> endobj 840 0 obj (STRING ord\(INT\);) endobj 841 0 obj << /S /GoTo /D (4.207.1) >> endobj 844 0 obj (STRING alpha\(INT\);) endobj 845 0 obj << /S /GoTo /D (4.208.1) >> endobj 848 0 obj (STRING roman\(INT\);) endobj 849 0 obj << /S /GoTo /D (4.209.1) >> endobj 852 0 obj (STRING strsoundex\(STRING\);) endobj 853 0 obj << /S /GoTo /D (4.210.1) >> endobj 856 0 obj (INT strtoint\(STRING\);) endobj 857 0 obj << /S /GoTo /D (4.211.1) >> endobj 860 0 obj (INT atoi\(STRING\);) endobj 861 0 obj << /S /GoTo /D (4.212.1) >> endobj 864 0 obj (INT strcmp\(STRING, STRING\);) endobj 865 0 obj << /S /GoTo /D (4.213.1) >> endobj 868 0 obj (BOOL eqstr\(STRING, STRING\);) endobj 869 0 obj << /S /GoTo /D (4.214.1) >> endobj 872 0 obj (BOOL nestr\(STRING, STRING\);) endobj 873 0 obj << /S /GoTo /D (4.215.1) >> endobj 876 0 obj (Output Mode Functions) endobj 877 0 obj << /S /GoTo /D (4.216.1) >> endobj 880 0 obj (VOID linemode\(void\);) endobj 881 0 obj << /S /GoTo /D (4.217.1) >> endobj 884 0 obj (VOID pagemode\(INT, INT\);) endobj 885 0 obj << /S /GoTo /D (4.218.1) >> endobj 888 0 obj (VOID col\(INT\);) endobj 889 0 obj << /S /GoTo /D (4.219.1) >> endobj 892 0 obj (INT getcol\(void\);) endobj 893 0 obj << /S /GoTo /D (4.220.1) >> endobj 896 0 obj (VOID row\(INT\);) endobj 897 0 obj << /S /GoTo /D (4.221.1) >> endobj 900 0 obj (VOID pos\(INT, INT\);) endobj 901 0 obj << /S /GoTo /D (4.222.1) >> endobj 904 0 obj (VOID pageout\(void\);) endobj 905 0 obj << /S /GoTo /D (4.223.1) >> endobj 908 0 obj (STRING nl\(void\);) endobj 909 0 obj << /S /GoTo /D (4.224.1) >> endobj 912 0 obj (STRING sp\(void\);) endobj 913 0 obj << /S /GoTo /D (4.225.1) >> endobj 916 0 obj (STRING qt\(void\);) endobj 917 0 obj << /S /GoTo /D (4.226.1) >> endobj 920 0 obj (VOID newfile\(STRING, BOOL\);) endobj 921 0 obj << /S /GoTo /D (4.227.1) >> endobj 924 0 obj (STRING outfile\(void\);) endobj 925 0 obj << /S /GoTo /D (4.228.1) >> endobj 928 0 obj (VOID copyfile\(STRING\);) endobj 929 0 obj << /S /GoTo /D (4.229.1) >> endobj 932 0 obj (BOOLEAN test\(STRING, STRING\);) endobj 933 0 obj << /S /GoTo /D (4.230.1) >> endobj 936 0 obj (VOID print\(STRING, STRING ...\);) endobj 937 0 obj << /S /GoTo /D (4.231.1) >> endobj 940 0 obj (Person Set Functions and GEDCOM Extraction) endobj 941 0 obj << /S /GoTo /D (4.232.1) >> endobj 944 0 obj (VOID indiset\(SETV\);) endobj 945 0 obj << /S /GoTo /D (4.233.1) >> endobj 948 0 obj (VOID addtoset\(SET, INDI, ANY\);) endobj 949 0 obj << /S /GoTo /D (4.234.1) >> endobj 952 0 obj (VOID deletefromset\(SET, INDI, BOOL\);) endobj 953 0 obj << /S /GoTo /D (4.235.1) >> endobj 956 0 obj (INT length\(SET\);) endobj 957 0 obj << /S /GoTo /D (4.236.1) >> endobj 960 0 obj (SET union\(SET, SET\);) endobj 961 0 obj << /S /GoTo /D (4.237.1) >> endobj 964 0 obj (SET intersect\(SET, SET\);) endobj 965 0 obj << /S /GoTo /D (4.238.1) >> endobj 968 0 obj (SET difference\(SET, SET\);) endobj 969 0 obj << /S /GoTo /D (4.239.1) >> endobj 972 0 obj (SET parentset\(SET\);) endobj 973 0 obj << /S /GoTo /D (4.240.1) >> endobj 976 0 obj (SET childset\(SET\);) endobj 977 0 obj << /S /GoTo /D (4.241.1) >> endobj 980 0 obj (SET spouseset\(SET\);) endobj 981 0 obj << /S /GoTo /D (4.242.1) >> endobj 984 0 obj (SET siblingset\(SET\);) endobj 985 0 obj << /S /GoTo /D (4.243.1) >> endobj 988 0 obj (SET ancestorset\(SET\);) endobj 989 0 obj << /S /GoTo /D (4.244.1) >> endobj 992 0 obj (SET descendentset\(SET\);) endobj 993 0 obj << /S /GoTo /D (4.245.1) >> endobj 996 0 obj (SET descendantset\(SET\);) endobj 997 0 obj << /S /GoTo /D (4.246.1) >> endobj 1000 0 obj (SET uniqueset\(SET\);) endobj 1001 0 obj << /S /GoTo /D (4.247.1) >> endobj 1004 0 obj (VOID namesort\(SET\);) endobj 1005 0 obj << /S /GoTo /D (4.248.1) >> endobj 1008 0 obj (VOID keysort\(SET\);) endobj 1009 0 obj << /S /GoTo /D (4.249.1) >> endobj 1012 0 obj (VOID valuesort\(SET\);) endobj 1013 0 obj << /S /GoTo /D (4.250.1) >> endobj 1016 0 obj (VOID genindiset\(STRING, SET\);) endobj 1017 0 obj << /S /GoTo /D (4.251.1) >> endobj 1020 0 obj (BOOL inset\(SET, INDI\);) endobj 1021 0 obj << /S /GoTo /D (4.252.1) >> endobj 1024 0 obj (forindiset\( SET, INDIV, ANYV, INTV \) \173 commands \175 ) endobj 1025 0 obj << /S /GoTo /D (4.253.1) >> endobj 1028 0 obj (Record Update Functions) endobj 1029 0 obj << /S /GoTo /D (4.254.1) >> endobj 1032 0 obj (NODE createnode\(STRING, STRING\);) endobj 1033 0 obj << /S /GoTo /D (4.255.1) >> endobj 1036 0 obj (VOID addnode\(NODE, NODE, NODE\);) endobj 1037 0 obj << /S /GoTo /D (4.256.1) >> endobj 1040 0 obj (VOID detachnode\(NODE\);) endobj 1041 0 obj << /S /GoTo /D (4.257.1) >> endobj 1044 0 obj (VOID writeindi\(INDI\);) endobj 1045 0 obj << /S /GoTo /D (4.258.1) >> endobj 1048 0 obj (VOID writefam\(FAM\);) endobj 1049 0 obj << /S /GoTo /D (4.259.1) >> endobj 1052 0 obj (Record Linking Functions) endobj 1053 0 obj << /S /GoTo /D (4.260.1) >> endobj 1056 0 obj (BOOL reference\(STRING\);) endobj 1057 0 obj << /S /GoTo /D (4.261.1) >> endobj 1060 0 obj (NODE dereference\(STRING\);) endobj 1061 0 obj << /S /GoTo /D (4.262.1) >> endobj 1064 0 obj (Miscellaneous Functions) endobj 1065 0 obj << /S /GoTo /D (4.263.1) >> endobj 1068 0 obj (VOID lock\(RECORD|NODE\);) endobj 1069 0 obj << /S /GoTo /D (4.264.1) >> endobj 1072 0 obj (VOID unlock\(RECORD|NODE\);) endobj 1073 0 obj << /S /GoTo /D (4.265.1) >> endobj 1076 0 obj (STRING database\(void\);) endobj 1077 0 obj << /S /GoTo /D (4.266.1) >> endobj 1080 0 obj (STRING program\(void\);) endobj 1081 0 obj << /S /GoTo /D (4.267.1) >> endobj 1084 0 obj (STRING version\(void\);) endobj 1085 0 obj << /S /GoTo /D (4.268.1) >> endobj 1088 0 obj (VOID system\(STRING\);) endobj 1089 0 obj << /S /GoTo /D (4.269.1) >> endobj 1092 0 obj (INT heapused\(void\);) endobj 1093 0 obj << /S /GoTo /D (4.270.1) >> endobj 1096 0 obj (STRING getproperty\(STRING\);) endobj 1097 0 obj << /S /GoTo /D (4.271.1) >> endobj 1100 0 obj (STRING setlocale\(STRING\);) endobj 1101 0 obj << /S /GoTo /D (4.272.1) >> endobj 1104 0 obj (STRING bytecode\(STRING, STRING\);) endobj 1105 0 obj << /S /GoTo /D (4.273.1) >> endobj 1108 0 obj (STRING convertcode\(STRING, STRING, STRING\);) endobj 1109 0 obj << /S /GoTo /D (4.274.1) >> endobj 1112 0 obj (VOID debug\(BOOLEAN\);) endobj 1113 0 obj << /S /GoTo /D (4.275.1) >> endobj 1116 0 obj (STRING pvalue\(ANY\);) endobj 1117 0 obj << /S /GoTo /D (4.276.1) >> endobj 1120 0 obj (VOID free\(ANY\);) endobj 1121 0 obj << /S /GoTo /D (4.277.1) >> endobj 1124 0 obj (Deprecated Functions) endobj 1125 0 obj << /S /GoTo /D (4.278.1) >> endobj 1128 0 obj (EVENT baptism\(INDI\);) endobj 1129 0 obj << /S /GoTo /D (4.279.1) >> endobj 1132 0 obj (VOID getindimsg\(INDIV, STRING\);) endobj 1133 0 obj << /S /GoTo /D (4.280.1) >> endobj 1136 0 obj (VOID getintmsg\(INTV, STRING\);) endobj 1137 0 obj << /S /GoTo /D (4.281.1) >> endobj 1140 0 obj (VOID getstrmsg\(STRINGV, STRING\);) endobj 1141 0 obj << /S /GoTo /D (4.282.1) >> endobj 1144 0 obj (VOID gengedcom\(SET\);) endobj 1145 0 obj << /S /GoTo /D (4.283.1) >> endobj 1148 0 obj (VOID gengedcomweak\(SET\);) endobj 1149 0 obj << /S /GoTo /D (4.284.1) >> endobj 1152 0 obj (VOID gengedcomstrong\(SET\);) endobj 1153 0 obj << /S /GoTo /D (4.285.1) >> endobj 1156 0 obj (STRING save\(STRING\);) endobj 1157 0 obj << /S /GoTo /D (4.286.1) >> endobj 1160 0 obj (STRING strsave\(STRING\);) endobj 1161 0 obj << /S /GoTo /D (4.287.1) >> endobj 1164 0 obj (VOID deletenode\(NODE\);) endobj 1165 0 obj << /S /GoTo /D (4.288.1) >> endobj 1168 0 obj (INT lengthset\(SET\);) endobj 1169 0 obj << /S /GoTo /D [1170 0 R /Fit ] >> endobj 1172 0 obj << /Length 317 /Filter /FlateDecode >> stream xÚQMOÃ0 ½÷WäØHÔäÃù:n"+E[7µa!:Øa›´ñÿE²T*(Çö{ÏÏ2',>Nœœá@hEÞ#Ÿ±S|D ·€2e4+d8jR ­tÂÌCq»šp  »+6|¼”áÞÓ×ð»†pÄÔ”º±l~Ù´¾q¿U¬ˆ>ôÜtT°r]w³ÕªikZ cËþqÞ?÷Á¯r:kï’ ©8—«¸‰¯ôÎoÖW…¡µo}7£.0êv“ϸ_ q~Å…Å¢ŽÐà,fÃûݰ܇ËdAYÁáèwK+‡3媼ìOÇ> endobj 1173 0 obj << /D [1170 0 R /XYZ 95.641 729.265 null] >> endobj 1174 0 obj << /D [1170 0 R /XYZ 95.641 716.314 null] >> endobj 1175 0 obj << /D [1170 0 R /XYZ 95.641 716.314 null] >> endobj 2 0 obj << /D [1170 0 R /XYZ 390.568 686.959 null] >> endobj 1171 0 obj << /Font << /F26 1177 0 R /F27 1179 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1183 0 obj << /Length 298 /Filter /FlateDecode >> stream xÚ‘=OÃ0†÷ü ¶D;fk…‚’´JLB |¤Ð!­DYø÷8uŠ"ÑyðݽϽ:û¢á0dhÉá¸VèµO(zJž°‘,)†ìŒ˜žÔ”s°LÌÜ'— ®‘«ò›#êß±¿qäÉßÑ ,ˆz¹šÉ‘(‹…+‹Úµ#71Q”Ñ#·j§x™7³ª*꜄1 nïæíCë]ÓY}ƒÆ­–GÞy†sW»fF, \šX¾:3› ”8 ·Ýtåv×þ— C2RFÁ*{ä×DQÜ}¦ða»ß‘”›   YtjúGÓÖ—ï@‡nÿ±ïŸcLŒÄã{b9î¾ú}pÏp‹ñ*Öƒ{âüï’‚·VTxÚ÷û`®yendstream endobj 1182 0 obj << /Type /Page /Contents 1183 0 R /Resources 1181 0 R /MediaBox [0 0 609.714 789.041] /Parent 1180 0 R >> endobj 1184 0 obj << /D [1182 0 R /XYZ 95.641 729.265 null] >> endobj 1181 0 obj << /Font << /F26 1177 0 R /F27 1179 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1190 0 obj << /Length 2434 /Filter /FlateDecode >> stream xÚíÝOsÓÖà=Ÿ"K{Á©ŽþkI!0¹C€´›;wáÆÓE”Ø•ô¼£çütÞ’ËÿâAS„2UÚ„´,NÏ$ï.?yö Þ|#uȳ«ßv|øð÷O¦Y(šôê;ߟ<øîiZÄ<uypòöú»'ÓNÆu2šü4ŽÉhÞŽ¦U=Z¾í>^.ºvÑ]Œÿsò¯‡'^½ uzyúËˤEúá-\_&«šÐ”Ù‡W‰áò”E2zÝž/W]üjµ|·šœÍïú?OÆq´XO曌yš¤ÙÍMBRlTbð6Âæ™Ó7ÿóÇäsœ#~3'¡¡¡¡¡¡¡¡¡¡¡ù›j”•††††††††æ~jâVRšz(%Éò2Tc²b;<(¶Ï~´èVãX–Óõi7[.6/V¡H®–†´Îv…Åg(gñ9ÊùEOBCCCCC£¬444444444444ÊJCCCCCCCCóu4¬'¡)š;%Þ'ã&­»åj6™÷K½_´‹nò¶½ùý:xï×n® ŒE¨«|÷½ÄPÖŧÄîbe¥¡¡¡¡¡¡¡¡¡‘ƒ|r’ŽÚ³óù¤kûÜãírÕœö Ȥû£[â¢ýïåAÞ|\l7N¬/¯1Ô7±©ê¯žx&ihhhhhhhh”•††††††††æN'É÷;={´øeùóó¯¯wO¹V—g-âà”kaÊ•†††Æô„²ÒÐÐÐÐÐÐÐÐÐÐÐ(+ Í~o¤øKÉi•„2nµcc®ôú&¿{šVW RÊ«Ïú/õŸ??zzøüèÅá›þkž¢HB“47ß{õúå³×Ž^<» aŸ¾ÇÑá‹Ç‡[uHêåõP›•Í®(ÖNk4444444ÊJCCCCCCso5Õ^7OÕo~ÚN×}¿’‹~g²˜öO׋ë]Õ·{˜Ä< Ïâuã…zy5 –²ÒÐÐÐÐÐÐìùFªý6!z¼<;kÛ}‡ò:ĬÙ}™4Ä*û”˜ÄSACCCCCCC£¬444444444444Z44444444_ôý€7ݤk‡ÞÈâÀ147hhhhhhhhh”•†††††††††††Æ@‹††††††æ3ÞH½ß7=¿iÁ|±«ßr‘†¢È†ú-§ù×ï·ì1¥¡¡¡¡¡¡¡1óDCCCCCCCCCCCc ¥¬44444ÿtML6Ïrõ•ô³EëG‹ÓùzÚÞìhÜNº›ÍŽ7¯ZÖ¡‰qh)~––ö4¦¡¡¡¡¡¡¡QVe¥¡¡¡¡¹Ïl}§HôûõlÞ=œ-n2Øõâ´ÛµÊ¹jB’fC l¬*ÍÐihhhhhŒ‚••†††††††††††FYihhhhþq+>7éh2_߬ù<7Éè·óv»«rb¹ûªiˆÙ'í½ìy¥¡¡¡¡¡¡¡1ÍACCCCCCCCCCCc ¥¬44444Òñ=÷CîÚÕ¤[®¶âð¬ 1C› W±:°É0 ™+e¥¡¡¡¡¡¡¡¡¡¡¡QVšÒý¾ððh5ëÞŸµÝì´ï0YLûƒçËw¿ÿíª'ù8Žv¶%Yê*z1"&Ñ‹44444444444n„†††††††æ/Î gû¾î »š½[.–gm·Úš ~sþ¾½úkMæý_Oæ§ëùd÷º[l}§HôÙá“Ç/ûøõÅrz[cÊ"Šb³¦üêQ¬§ß?”hhhhhhhhhhhh ´”•†††††æÞ¥Å~×kþÒ.nšNÓþàɤ»=5Ȇo#†˜XÀEã_Õ444444444444ZÊJCCCCCsã‹j¿ñÅŸQÅ£Õ¬{Öv³ÓÍ+V—§«²¡¨¢*ŠO‰*> endobj 1192 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.462 684.87 287.371 694.619] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 1196 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [509.091 684.87 514.072 694.619] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 1197 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 673.856 222.873 681.279] /Subtype /Link /A << /S /GoTo /D (13) >> >> endobj 1198 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [509.091 673.856 514.072 681.279] /Subtype /Link /A << /S /GoTo /D (13) >> >> endobj 1199 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 660.302 283.246 670.32] /Subtype /Link /A << /S /GoTo /D (27) >> >> endobj 1200 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [509.091 660.302 514.072 670.32] /Subtype /Link /A << /S /GoTo /D (27) >> >> endobj 1201 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 649.343 316.332 659.361] /Subtype /Link /A << /S /GoTo /D (140) >> >> endobj 1202 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [509.091 649.343 514.072 659.361] /Subtype /Link /A << /S /GoTo /D (140) >> >> endobj 1203 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 638.385 244.123 648.402] /Subtype /Link /A << /S /GoTo /D (144) >> >> endobj 1204 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [509.091 638.385 514.072 648.402] /Subtype /Link /A << /S /GoTo /D (144) >> >> endobj 1205 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.462 627.665 351.81 634.818] /Subtype /Link /A << /S /GoTo /D (154) >> >> endobj 1206 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [509.091 627.665 514.072 634.818] /Subtype /Link /A << /S /GoTo /D (154) >> >> endobj 1207 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 614.28 281.852 621.702] /Subtype /Link /A << /S /GoTo /D (163) >> >> endobj 1208 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [509.091 614.28 514.072 621.702] /Subtype /Link /A << /S /GoTo /D (163) >> >> endobj 1209 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 603.321 215.511 610.439] /Subtype /Link /A << /S /GoTo /D (217) >> >> endobj 1210 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [509.091 603.321 514.072 610.439] /Subtype /Link /A << /S /GoTo /D (217) >> >> endobj 1211 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 592.362 215.691 599.48] /Subtype /Link /A << /S /GoTo /D (228) >> >> endobj 1212 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [509.091 592.362 514.072 599.48] /Subtype /Link /A << /S /GoTo /D (228) >> >> endobj 1213 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 578.808 219.925 588.521] /Subtype /Link /A << /S /GoTo /D (335) >> >> endobj 1214 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 578.808 514.072 588.521] /Subtype /Link /A << /S /GoTo /D (335) >> >> endobj 1215 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 570.444 236.283 577.866] /Subtype /Link /A << /S /GoTo /D (351) >> >> endobj 1216 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 570.444 514.072 577.866] /Subtype /Link /A << /S /GoTo /D (351) >> >> endobj 1217 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 559.485 246.395 566.907] /Subtype /Link /A << /S /GoTo /D (367) >> >> endobj 1218 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 559.485 514.072 566.907] /Subtype /Link /A << /S /GoTo /D (367) >> >> endobj 1219 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 545.931 220.532 555.949] /Subtype /Link /A << /S /GoTo /D (376) >> >> endobj 1220 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 545.931 514.072 555.949] /Subtype /Link /A << /S /GoTo /D (376) >> >> endobj 1221 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 537.568 204.513 544.686] /Subtype /Link /A << /S /GoTo /D (473) >> >> endobj 1222 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 537.568 514.072 544.686] /Subtype /Link /A << /S /GoTo /D (473) >> >> endobj 1223 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 524.013 307.246 534.031] /Subtype /Link /A << /S /GoTo /D (504) >> >> endobj 1224 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 524.013 514.072 534.031] /Subtype /Link /A << /S /GoTo /D (504) >> >> endobj 1225 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 513.055 349.836 523.072] /Subtype /Link /A << /S /GoTo /D (759) >> >> endobj 1226 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 513.055 514.072 523.072] /Subtype /Link /A << /S /GoTo /D (759) >> >> endobj 1227 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 504.691 243.426 511.809] /Subtype /Link /A << /S /GoTo /D (866) >> >> endobj 1228 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 504.691 514.072 511.809] /Subtype /Link /A << /S /GoTo /D (866) >> >> endobj 1229 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 491.137 243.894 501.154] /Subtype /Link /A << /S /GoTo /D (1352) >> >> endobj 1230 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 491.137 514.072 501.154] /Subtype /Link /A << /S /GoTo /D (1352) >> >> endobj 1231 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 480.178 265.414 490.195] /Subtype /Link /A << /S /GoTo /D (1566) >> >> endobj 1232 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 480.178 514.072 490.195] /Subtype /Link /A << /S /GoTo /D (1566) >> >> endobj 1233 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 471.814 229.698 478.932] /Subtype /Link /A << /S /GoTo /D (1600) >> >> endobj 1234 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 471.814 514.072 478.932] /Subtype /Link /A << /S /GoTo /D (1600) >> >> endobj 1235 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 460.855 236.592 468.277] /Subtype /Link /A << /S /GoTo /D (1828) >> >> endobj 1236 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 460.855 514.072 468.277] /Subtype /Link /A << /S /GoTo /D (1828) >> >> endobj 1237 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 449.896 286.026 457.318] /Subtype /Link /A << /S /GoTo /D (1892) >> >> endobj 1238 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 449.896 514.072 457.318] /Subtype /Link /A << /S /GoTo /D (1892) >> >> endobj 1239 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 438.937 281.334 446.36] /Subtype /Link /A << /S /GoTo /D (2032) >> >> endobj 1240 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 438.937 514.072 446.36] /Subtype /Link /A << /S /GoTo /D (2032) >> >> endobj 1241 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 427.979 238.345 435.401] /Subtype /Link /A << /S /GoTo /D (2497) >> >> endobj 1242 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 427.979 514.072 435.401] /Subtype /Link /A << /S /GoTo /D (2497) >> >> endobj 1243 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 417.02 285.866 424.442] /Subtype /Link /A << /S /GoTo /D (2526) >> >> endobj 1244 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 417.02 514.072 424.442] /Subtype /Link /A << /S /GoTo /D (2526) >> >> endobj 1245 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 406.061 284.312 413.179] /Subtype /Link /A << /S /GoTo /D (2624) >> >> endobj 1246 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 406.061 514.072 413.179] /Subtype /Link /A << /S /GoTo /D (2624) >> >> endobj 1247 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 392.507 239.889 402.22] /Subtype /Link /A << /S /GoTo /D (2764) >> >> endobj 1248 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 392.507 514.072 402.22] /Subtype /Link /A << /S /GoTo /D (2764) >> >> endobj 1249 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 381.548 273.782 391.565] /Subtype /Link /A << /S /GoTo /D (3073) >> >> endobj 1250 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 381.548 514.072 391.565] /Subtype /Link /A << /S /GoTo /D (3073) >> >> endobj 1251 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 373.184 374.424 380.606] /Subtype /Link /A << /S /GoTo /D (3264) >> >> endobj 1252 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 373.184 514.072 380.606] /Subtype /Link /A << /S /GoTo /D (3264) >> >> endobj 1253 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 359.63 279.69 369.647] /Subtype /Link /A << /S /GoTo /D (3539) >> >> endobj 1254 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 359.63 514.072 369.647] /Subtype /Link /A << /S /GoTo /D (3539) >> >> endobj 1255 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 348.671 281.423 358.688] /Subtype /Link /A << /S /GoTo /D (3609) >> >> endobj 1256 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 348.671 514.072 358.688] /Subtype /Link /A << /S /GoTo /D (3609) >> >> endobj 1257 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 340.307 276.004 347.729] /Subtype /Link /A << /S /GoTo /D (3636) >> >> endobj 1258 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 340.307 514.072 347.729] /Subtype /Link /A << /S /GoTo /D (3636) >> >> endobj 1259 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 326.753 263.75 336.77] /Subtype /Link /A << /S /GoTo /D (3812) >> >> endobj 1260 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 326.753 514.072 336.77] /Subtype /Link /A << /S /GoTo /D (3812) >> >> endobj 1191 0 obj << /D [1189 0 R /XYZ 95.641 729.265 null] >> endobj 6 0 obj << /D [1189 0 R /XYZ 217.509 705.673 null] >> endobj 1188 0 obj << /Font << /F26 1177 0 R /F38 1195 0 R /F35 1187 0 R /F27 1179 0 R /F39 1263 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1299 0 obj << /Length 98 /Filter /FlateDecode >> stream xÚ3T0BCKS=3Cs#K=#3S…ä\.…t Œ;—!T…‰¡…ž‰1ˆ‡ER&«kfa¤g4 I‘S—¾›±¥‚¥ž¥™±BHXOHJ´Ff™flˆ—k~K/Ý nendstream endobj 1298 0 obj << /Type /Page /Contents 1299 0 R /Resources 1297 0 R /MediaBox [0 0 609.714 789.041] /Parent 1180 0 R >> endobj 1300 0 obj << /D [1298 0 R /XYZ 95.641 729.265 null] >> endobj 1297 0 obj << /Font << /F39 1263 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1303 0 obj << /Length 1814 /Filter /FlateDecode >> stream xÚ¥]sã6î}…ßNž‰Y}Q–ú–M½»Ù&ÙÎÆÓÜ͵ŒMۚʤO¢’úß ÅŽU7{;~A ¾:…ð‹F…Y¦q!âLŽÛwáh o>¾‹˜#r‘&ˆ ¼œto'q"d#Ïûù»>ÄÙ(J…̳Ñ|åyçËÿWµsºOâiDb<‘2 ¾êER8zñK=Ä®kµÝ–fMÄ[eÆQ´ªÿ>ÿLòcJIò'ÉTÄIæO¹6Ž$,Û…+­¡9*D‘%ÈŸNEƒÎQ&Š|ê?šo4ñ¥r”Ÿ×lC>Rþ¦\é›ÒèæTž …ÌbæÛÕã(?R?’AÓ>6ûÆé-¡•v A{ÛÀŸÎšGßt¬¥¡§2{êö•gÎïA¬öÔo4É ‘ä ØŠBæ^3Û:ðyìÿq`ÇQоU{ÖÚèZ9x£‰ð[ÆØì‘Ò ø(A'&l¼«íjuê 8yQ0ÏÅ©HB½þÅ6®YÔåÎ 8:Ó"?/Gòë¹þ÷©ˆx”¼(â­ºÿx{ƒô^DŠ÷°'¸fÚåýÕõ5û6N¥ ömáe=ªF/‘3 V¶Þ*wÑ# ´àÔº“É®ÿtqäºi|¾ M™e÷²4È‚P\Ø–™ø ‹Ûh^Ò†pQ¤‘îá‘ÖÊyõd<î鹨XËj†‰àÌŒ »Ý’v€¬Hõ-sw¬[…¹ê!mZT]N9çÚŽƒÏSUc jýJ ;fHñƒêJ££êÔYz.ÈÊiÂÿ×êzO · N©((ˆõ¡*G〼†G ¶ ÝF9ö\—Ý ª¬ô%Mš¶ÂbN ,K"-\µ'J»³† r [  Â.ôŸj»«ôEÿ1Zòê´@b™‹,,ÞÐÒb‘Èô´¥u*G¥ ‘Yrd,¤È®uØ4bÉ™‰©X)ìÉͦ_îèÅ£vÏ`#!ÔÝð»gKÀN× |AHÙ±Ñc©œÂҽϥ(R¯ÅL-6HE2ÍÞ`$d8l?•÷pXøÈ;ÔÜ Ýà(ŦQôÿLÙŽò+eÖ­Zë‹—VÁ])®$BA©”†G&@nQõYHƒ½Q¬í¤ s€n°Uó4Äñ°ÑÌã§/i=àú,„qš¼ÉyØOK’ë1´C«#›&]&Æ"ƒµàu›@7ePŽžªù£!ˆ”€ztÖFm²+|f/àΗØÐ}Fd<'ql^>pÌóA•Ñ•q/çŸöŽƒÐý‹«&9TÁ”ƒp´¹è*hÙWžéJ÷º ‹­jÒ­II.¢Œ×¤qKdJ‰)‹ÙåÆhãÔ ·3Í´ú`¥;¿|ÑÆæÛZGm ±‡´$à]5P[…Èû¹~OËú}ÎO É+&L~²YÞ$À e¨ Ì[°àˆ¨‡ÃqÌ$ŸŒÑ4©Î¹ÆÏÞ"°8²pÝ¥)k`Uþ¡_C}R®lUÙghv?rüò—øR°I))5£d¡Ï¢‰¿O„á1Ë×ë·1Xœ}D±&È­'I‚‡€å'xHÄfÌ7v«¸€|ÔPá„>Ìæ·_¾ÎÈîë_Ü÷ÈB¢œž?é…Þ>ú¥©`»ñN?pÚZ³´]M_Yc ©–‹Ö È¿UÉëësZJz~Y8{ d,O”´èÔ·*™°øÏVqWºUuÉqútywõåêç3Zeüukt¯Q> «VžW'ýFŸ}®Ï(';ƒö] ‹ìïuCWùøžQoÉ’9cîìÓQÆLÃSñ8þ9t”,þ×±„ÑøTv!ùÍð©ÔOìã÷_¿€Ô‡»6ý.*Õ‰ñ·hóSÉØÃ®ûe³€eŽn’¯Df,òk¹ØP‡á†ñÆqóÖDéŠì²]·ë¦ß—½]<ât¸„§Yo$ô_'õ BV¼é„)ŸpÛBU°+/ëmãhJû»îo¯ç øÓÄù`‡'üI=ù®ø&ýòo,˜ûs%} @ëüÔó±Ë:?Þ;ѳ컽ç=^Àöã(Š‚‹¾0ø*p¿°®TgBMéùA?ú}HÕû¾O¿¯œ qdΚç#g߬ªºEìçË»Ùì\9ÅÓ¡Øå²›7å“®w¨œ­˜43못üåáëþT„áwôN!XpeG¦Û7:î$y{îOýÚë/pMw;ÙãÒöÌ·­qE‡=º›Ñ&¡ØïÝf×ï½%]}^.£¸ø=ãÝlÞÿ§ ÚgpMÎaÍü;4ÍŽþ õÿt&Åáî@JE¯e¦°ë¾ú õ/¡:‰endstream endobj 1302 0 obj << /Type /Page /Contents 1303 0 R /Resources 1301 0 R /MediaBox [0 0 609.714 789.041] /Parent 1180 0 R >> endobj 1264 0 obj << /D [1302 0 R /XYZ 95.641 716.314 null] >> endobj 10 0 obj << /D [1302 0 R /XYZ 379.167 705.673 null] >> endobj 1265 0 obj << /D [1302 0 R /XYZ 95.641 697.455 null] >> endobj 14 0 obj << /D [1302 0 R /XYZ 165.715 668.437 null] >> endobj 1304 0 obj << /D [1302 0 R /XYZ 95.641 662.259 null] >> endobj 1305 0 obj << /D [1302 0 R /XYZ 162.283 651.45 null] >> endobj 1308 0 obj << /D [1302 0 R /XYZ 280.445 640.492 null] >> endobj 1309 0 obj << /D [1302 0 R /XYZ 312.98 640.492 null] >> endobj 1310 0 obj << /D [1302 0 R /XYZ 372.413 640.492 null] >> endobj 1311 0 obj << /D [1302 0 R /XYZ 394.188 640.492 null] >> endobj 1312 0 obj << /D [1302 0 R /XYZ 483.995 640.492 null] >> endobj 1313 0 obj << /D [1302 0 R /XYZ 402.071 596.656 null] >> endobj 1314 0 obj << /D [1302 0 R /XYZ 95.641 577.906 null] >> endobj 1315 0 obj << /D [1302 0 R /XYZ 167.838 569.757 null] >> endobj 1316 0 obj << /D [1302 0 R /XYZ 335.053 569.757 null] >> endobj 1317 0 obj << /D [1302 0 R /XYZ 404.285 558.798 null] >> endobj 1266 0 obj << /D [1302 0 R /XYZ 95.641 529.089 null] >> endobj 18 0 obj << /D [1302 0 R /XYZ 242.696 498.713 null] >> endobj 1318 0 obj << /D [1302 0 R /XYZ 95.641 490.191 null] >> endobj 1319 0 obj << /D [1302 0 R /XYZ 263.297 481.727 null] >> endobj 1320 0 obj << /D [1302 0 R /XYZ 424.744 459.809 null] >> endobj 1321 0 obj << /D [1302 0 R /XYZ 95.641 420.347 null] >> endobj 1322 0 obj << /D [1302 0 R /XYZ 95.641 144.94 null] >> endobj 1323 0 obj << /D [1302 0 R /XYZ 184.627 133.981 null] >> endobj 1324 0 obj << /D [1302 0 R /XYZ 394.03 133.981 null] >> endobj 1301 0 obj << /Font << /F26 1177 0 R /F35 1187 0 R /F45 1307 0 R /F38 1195 0 R /F39 1263 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1327 0 obj << /Length 1475 /Filter /FlateDecode >> stream xÚÅXKÛ6¾ï¯0z©7°¸"õÎ¥E‹$@‘¢E³À¢hŠ‚kQ¶=\ŠÊ®ä¿wÈ!õ°Ö£9>ˆ’3ß|3ŽDW>üè*‹HÒUÂ2Ââhµ­¯üÕfÞ\Q»Â_$J=õÃíÕÍë [e$‹ƒÕmaVÜæ¬ÜóƒòÚc‘¿¦Ÿ¿‰C+Ž•×4]·;É뺼¦ëf‡òŸyÓóêúÏÛŸ®^Ý&Cš’0 +o°| Ê ŸÄðdŒd4Á¥Kp¯y}¨„ç1€ùþ\ÜøäûЉFñBT(’7º­,JýyF«LÅhÊã45o^諈/#©†â×^ v¿?Èv×ð,‡©&½Áæ_ªW­,yE*C‹V½TñQÈ®la_úšpÿüRÞ«}+Í}'”¶U·Rœß±åJìZy´ø:^ë=šª³[Ú^ze(ñ¨7¨óËsDjžXtnßÑ àðoìsßî ‰ʶ{.κ°Î¯ÕÞnìD%¶JäøïT¶VÕ{?òÿZBµóà8È!©—°nŒÌÃ@ÓŒ$,1á-j¬y9Ñ­õ˜-Ô'I> endobj 1328 0 obj << /D [1326 0 R /XYZ 95.641 693.838 null] >> endobj 1329 0 obj << /D [1326 0 R /XYZ 95.641 256.239 null] >> endobj 1330 0 obj << /D [1326 0 R /XYZ 274.542 245.28 null] >> endobj 1331 0 obj << /D [1326 0 R /XYZ 478.901 245.28 null] >> endobj 1332 0 obj << /D [1326 0 R /XYZ 238.893 234.322 null] >> endobj 1333 0 obj << /D [1326 0 R /XYZ 95.641 222.725 null] >> endobj 1334 0 obj << /D [1326 0 R /XYZ 95.641 178.73 null] >> endobj 1335 0 obj << /D [1326 0 R /XYZ 188.886 167.771 null] >> endobj 1336 0 obj << /D [1326 0 R /XYZ 188.886 167.771 null] >> endobj 1337 0 obj << /D [1326 0 R /XYZ 465.654 167.771 null] >> endobj 1338 0 obj << /D [1326 0 R /XYZ 95.641 144.04 null] >> endobj 1339 0 obj << /D [1326 0 R /XYZ 95.641 101.221 null] >> endobj 1340 0 obj << /D [1326 0 R /XYZ 260.239 90.262 null] >> endobj 1341 0 obj << /D [1326 0 R /XYZ 260.239 90.262 null] >> endobj 1342 0 obj << /D [1326 0 R /XYZ 308.571 90.262 null] >> endobj 1343 0 obj << /D [1326 0 R /XYZ 343.057 79.303 null] >> endobj 1344 0 obj << /D [1326 0 R /XYZ 391.213 79.303 null] >> endobj 1325 0 obj << /Font << /F39 1263 0 R /F38 1195 0 R /F45 1307 0 R /F35 1187 0 R /F27 1179 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1347 0 obj << /Length 2137 /Filter /FlateDecode >> stream xÚµYK¯+· Þß_atŸÀ£;Ò¼“UZ4EŠ[ (Î.ÉBöÈö žwçÆ-òßKŠÔ¼ï9'h /DIERùi,w>üä.‹DÊ]¢2¡âhw*?ø» Ìüåƒd"ôÕ.Qš ß?|ü>Èv™Èâ`÷|¶|Ïùû?]õ½3Í“§"/µÿ0÷ºéˆþ{ó$Ó}}itY>É}Q]hüoºêõíéçç¿~øó󰱌#á«lç ;/Uó‚Ä1´J‰L†£rÑZ¹ïPüÇïÃh—ÂTŒSÒR&<ÿ©8›OEeZ⛊ˆ|‘¤óÝG@ù Ù-¶é¾Ô¹¡‘þN#õ™ú¼ädòÞR¦¥q]åÄxî«SWÔUû-M˜ÓK0»P~üz§3£K `ÞZ‚AàîÍ×7$@j‰yþ@úP`A£Ëa´ªÙÞÊœLÛj›€é'?òÎnÇyémžÚþr1mgrX&7‚ä;Œ§`óÊEáþ^¬óulÚ^MMkþÙ›êÄœ6óáh§;cý.hÀF!0t êÊÌc Ž[»@„‘ÎñÙKël2ãþ‹ÙˆŽqWºì–oÖçƒë2‘ªÈ®»˜®¨ò]Ê­tÒ  ˜nEÛY&^aÑ_f1¸«7ƒ °5öýý—·,ГÒq/‹žİVÙµt¢”ÓdGÁKØMl‚li¦ÛJÛ’²‚0ñ§®Zïú\SæBm“¤"ÿK‘C¡·:Û1Ș 8}Fc%;Ñ•ù•¡U B†é,¦ºÏ Jųô‚ýÜœ0ˆ‡tc3ÞU¢œâ€'6*ëœêvÑJ÷Àiè"«ÄZ‡tKoKQp€ÙĨÚ'àdc®õ-g31£ƒaÔ[®(€¶S¨w341D ÎÐ<âWê Ø»zÚ©!4ã(쟱67Dßoúd£D^TQ‹&!³óú—mÞ3îvf.[M‘(:o£TX]ì3$üGwµ¿\Ý€!‚N)sëtm=›rr1Û8c™¥¯Ÿ±ÂëèNÏ¢%±z©‡Í8ÇÓÕE©fY>«H ?žŸÕ z¦1^A0WZôcŸ¯˜øÒhÕ/††zñ0L©ˆ¢“Å|‚Ö ­X’ÆØÙ Ò(…(UoDi&’0]ø!µh¯h¦[·wsòØä4Ñ×wÅ Cä™íЯúòhì“aqÁô)#%éBãÐ\؇…¥¶Ëfˆ,p7›«øfÙ”‘»Û³"ªçùðRf0$§¥Üß—†Œ!–š8Žð¨!ÇÈ4~:{“0JÅ WC‹’MÅ0rĬ.ƒ/Ø §šÉôMx ïÆ ;yÖZzG#E9vŒµóÖX¢á¬K¥ò}§áÌÜâÉÝfŒ¿ _A±B4¼¹nÚB` Èm_qoiãj¾b0à–ñƒéNã©â¼)]d“šSƒŽî;Ë– T|ÑïªvŸ(inÞ¾mݰé4ýÅg (ðj½‚¸ ¾C0„án¶¹2b¥ ;"Ç¿­Îô€š ˜ÖöÆSXËBgXH4ÈZÁ |X>îõÁ휾(md¬ÜúÛ‚‹óh©aÕŽEÓ]§Ž©}ã–p›çÜêêbålnmû¿½OƒÜè÷iÿ¯5¸ë†u8kD [JÈÉ1Cä¿ý‚¡¿ëUöVi…ÇxN}á­7~·Ueý±Ê‹D¾Ã2(8„†Éƒ3snâLf²a¥·º^¿½ýØ´ùMòYìÍ­F¤w§Nw¥¯“Ñ€…a/Æ~Ø‚1J6eýbXeX'Ï&hu`ÇÐ,”Äy†\…·¬ÃGÞ}볕x• (²¼™²9º"êÞ~¿h‡ «…¢Ï§íb½áDòXJwŽÆŠ k¥Ä‚F~8åV• Ư5fŒر>#XbåÒw„{®;}Ô­9 ãVk\ ¶Ì–ÃÝœóL_±A‹o™£Ëö1Ê©’£É•X6z.(º[Såí²Ö€ž<ëÐ ÒC‰‚»sñ±eX@8æ¶Ï@š mX޻Ǔ”K@(çup²‰ûºD —² ”ð,®t-ª·¿Gý×ÕqúoŠ& Ú8ÊD¤6ÿO ñƒ&â†×þå –’C‘¥’9ÿ"ºë1endstream endobj 1346 0 obj << /Type /Page /Contents 1347 0 R /Resources 1345 0 R /MediaBox [0 0 609.714 789.041] /Parent 1394 0 R >> endobj 1348 0 obj << /D [1346 0 R /XYZ 95.641 716.314 null] >> endobj 1349 0 obj << /D [1346 0 R /XYZ 153.579 706.351 null] >> endobj 1350 0 obj << /D [1346 0 R /XYZ 307.144 706.351 null] >> endobj 1351 0 obj << /D [1346 0 R /XYZ 377.968 706.351 null] >> endobj 1352 0 obj << /D [1346 0 R /XYZ 229.138 695.392 null] >> endobj 1353 0 obj << /D [1346 0 R /XYZ 308.937 695.392 null] >> endobj 1354 0 obj << /D [1346 0 R /XYZ 353.987 695.392 null] >> endobj 1355 0 obj << /D [1346 0 R /XYZ 377.688 695.392 null] >> endobj 1356 0 obj << /D [1346 0 R /XYZ 168.955 684.433 null] >> endobj 1357 0 obj << /D [1346 0 R /XYZ 222.97 684.433 null] >> endobj 1358 0 obj << /D [1346 0 R /XYZ 285.592 684.433 null] >> endobj 1359 0 obj << /D [1346 0 R /XYZ 184.129 673.474 null] >> endobj 1360 0 obj << /D [1346 0 R /XYZ 95.641 665.684 null] >> endobj 1361 0 obj << /D [1346 0 R /XYZ 341.072 646.575 null] >> endobj 1362 0 obj << /D [1346 0 R /XYZ 365.814 646.575 null] >> endobj 1363 0 obj << /D [1346 0 R /XYZ 95.641 627.826 null] >> endobj 1364 0 obj << /D [1346 0 R /XYZ 153.737 619.676 null] >> endobj 1365 0 obj << /D [1346 0 R /XYZ 297.669 619.676 null] >> endobj 1366 0 obj << /D [1346 0 R /XYZ 143.462 608.717 null] >> endobj 1367 0 obj << /D [1346 0 R /XYZ 95.641 598.541 null] >> endobj 1368 0 obj << /D [1346 0 R /XYZ 95.641 523.537 null] >> endobj 1369 0 obj << /D [1346 0 R /XYZ 182.713 512.578 null] >> endobj 1370 0 obj << /D [1346 0 R /XYZ 266.756 512.578 null] >> endobj 1371 0 obj << /D [1346 0 R /XYZ 378.504 512.578 null] >> endobj 1372 0 obj << /D [1346 0 R /XYZ 143.462 501.619 null] >> endobj 1373 0 obj << /D [1346 0 R /XYZ 95.641 488.847 null] >> endobj 1374 0 obj << /D [1346 0 R /XYZ 95.641 446.027 null] >> endobj 1375 0 obj << /D [1346 0 R /XYZ 446.391 435.069 null] >> endobj 1376 0 obj << /D [1346 0 R /XYZ 164.403 424.11 null] >> endobj 1377 0 obj << /D [1346 0 R /XYZ 272.235 424.11 null] >> endobj 1378 0 obj << /D [1346 0 R /XYZ 335.715 424.11 null] >> endobj 1379 0 obj << /D [1346 0 R /XYZ 387.37 424.11 null] >> endobj 1380 0 obj << /D [1346 0 R /XYZ 420.705 424.11 null] >> endobj 1381 0 obj << /D [1346 0 R /XYZ 365.66 402.192 null] >> endobj 1382 0 obj << /D [1346 0 R /XYZ 402.274 391.233 null] >> endobj 1383 0 obj << /D [1346 0 R /XYZ 95.641 375.079 null] >> endobj 1384 0 obj << /D [1346 0 R /XYZ 287.395 364.334 null] >> endobj 1385 0 obj << /D [1346 0 R /XYZ 302.38 353.375 null] >> endobj 1386 0 obj << /D [1346 0 R /XYZ 143.462 342.416 null] >> endobj 1387 0 obj << /D [1346 0 R /XYZ 171.417 331.457 null] >> endobj 1388 0 obj << /D [1346 0 R /XYZ 95.641 326.262 null] >> endobj 1389 0 obj << /D [1346 0 R /XYZ 95.641 302.745 null] >> endobj 1390 0 obj << /D [1346 0 R /XYZ 95.641 141.569 null] >> endobj 1391 0 obj << /D [1346 0 R /XYZ 95.641 89.943 null] >> endobj 1392 0 obj << /D [1346 0 R /XYZ 201.972 81.793 null] >> endobj 1393 0 obj << /D [1346 0 R /XYZ 95.641 69.021 null] >> endobj 1345 0 obj << /Font << /F39 1263 0 R /F35 1187 0 R /F45 1307 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1397 0 obj << /Length 2316 /Filter /FlateDecode >> stream xÚ­YK“ã¶¾ï¯Pù²—Kð’ö%Ç›G9U®”nqS¤ÂÇh¶RùïéHJâì¬S)4F£Ñýu7¤Wüô*O”‰õ* sšdµ?½ VOðåï´ÌV‘J²?ý~ûîç(_å*7Ñj{ ÛâïëŽöÜ»öá1L‚µVÜþÍ›¶çþÏíƒÎÖÍSkO§òA¯ë'¦ÿÕÖƒ­þ±ýË»·ã–±ÎTéÕã¸ó­PQ(mª\Ç“pɽp´µ;5Ï®ƒMÃ`ýKÏ¥Å]?|Š“U+ ®H2e‚L–î_ƒÏšóRe? xiæj±Ñë³k»¦fÒO}ºßÉd*‰sáQVe×ßï•å~ÎF6© ÞÆv]ùTËú£ãδ¹^÷ Óžm[Ú]åî…ÐI¬²Ìx)ê¢\B«$” ?ƒêAx®u ò$§/;¾Îªñk…¢±þ…<ˆ´z-s¡/c”« ó·i wªÚ›%§íKR ntðÂÁæÎ‹Þœ¹whªª¹trZmŒ2&†N¢ò˜vØeM×ÛÞ\Ýw/x¶™+“±‚:×£ÕÙcíjз/"Wz GCk"‹º;"²}‡šõ€K38¤´d ( AI`",›b ßܾ!+ÂutOôÒsvÏ ”^À¤ø^>õò > îz: à ÒYpeh‡Q”±‘bç— [s 6LºËý‘»§­C¦îd½åÆÛµâáŸF;»Ú¬v/²¼N;´ì— –E‘ ½©ÛeC‹@ÉÔcçý!R1ÀÔüÐæ ¦u.Ž‹¯)ͯlÙOã\nJ&ô† (f¾=Òõ@¯¼ ”¹ôöà*{å`Ÿ¼eó“ÅOÙR£R8äü°ÿ:ùëc'_BÀ,RYü[üÚû#lœÆËþX•µ{ӋѻѿQÒrSÛù%˜ øeQNë é_ã¢àd½- ¡³0eh¹ç^ά%°Â# 8Ò}Ï„ËÑÕKÓ…Û„¢0:R6’»[v&ÀM–í‚k’#Ó¤|âÀ­­??h­×BžöŠÁ$x`^h×8ç]cÄœ¶¬Ÿ:ϤàÎ¥-ûžƒ¢äõû¾ú̲ÿXü¹ñ„3ðçÜHÍПdˆðA^ëðê—î{vÈâþ¦R•§>€†z/‘Áh¼µg<[KX„rìÔ½{"1Á-n‰¶ÐZnÀŸˆM¹ç1+Gñ€íÕ°Ù!áÙ¢›ñ@kƨU1 Í„{d'àÌO w^÷l§Q˜È~Ø7|ËŠé‹úÒøYæ‚Æ¿àŠ1„áðNgÈ“¯¬Z4OÜÁ¾î`‡ªçÁ¡iOü)–‡cð^Ö£ÞÛ# ÉÖÕI—+mÆT÷òk÷äþÊGÌñ)sðÁUˆý=Ú#ùóHê=èÔ#¶µ{L…ÓxÌ—B í"`qt"v—f°nÄàYh0ŒGhNŠ]ÙöG†-†¬ ¶þöð¶»F;LÚˆÏ"ÌÑø?<0E¯JP2|•Åÿ&Á—ðÍ.ˆ0¸³³: uQ9Ü%l‰ËݲFó”‘&íF.h¦A²>“Cƒ¥*oa|tã\~ïx4‚&ñ>pK°ü¸ÃÕT4…Þ4¢)MKÂ[¸JYó,±Â«(Q| øRú¼:¢\Ž9áÆl£y*dB°$ô,£1O»ø6i‹Í˜´Å)$m”±‘26 XÎ36 ÒQ‘>%„@%mq bLÞS:Zuǯ‹Åúæ:Æq{Í)6JVðÓëâx^½ý•žNÄNa—ÍŠ¢LíS6òû bàT\1Å·¡7ž|…3S&rµ>~ŒçÀt-‰ŽA”̇ù?|Üþx/ ‚‹º.Ö&uÏyå*J|©÷óOX,Oòñ‡â¶¼6Ô7))E²Ø= Ì<øTh“ã,­=O/g2£{³Ä™Çæ³m%:,>ˆÌÃ3V7ó}ä]=¾QP‰¶n¾øyu&ÕΛÓ@<ÜXÜÅ—[Ë‹ßH/ð§æVx/¸þ? n ªõæ„‚§˜Ÿà §¸KQ"È­öi¦ aŽÖ]Ø;>–…/J¾’¯@ç䟳`fèu¸YàËîD( Q”2Ý•ëFÚ]Cñ.˜×•0•,1=¤ÝVU¶·^aææ¦0A^xPMT6ÂÈ×ùÄ4…þC4¬º†iûæt0Å#2©¨¬½Ü‡Yøt¶^Ý{™3ì€üØÑɺ±³P¥€ÆW ñ•ÒGñú#7þ¡ D!JPŒ~£0 C™%) €Åý¥Ü;émÏ=BBhù]fïeU\ïêídÜ5žŸŸ HdžŸn|ÿɤ ÅWè=‘$´G¿€¤`Ú¹:&65ÕèY8š=GX¿~ÄÐþr…Ë¥$‹úb<’XÅ©…4K(/s–qþ:¬N8ÖtW!¨D¯„U(Çt¡2a³s Òƒˆ¨MÊ>ÿ•¼;+ÛË“éá! Ø÷`°o¡á„4ÅÇʬ/> endobj 1398 0 obj << /D [1396 0 R /XYZ 202.07 706.351 null] >> endobj 1399 0 obj << /D [1396 0 R /XYZ 308.277 706.351 null] >> endobj 1400 0 obj << /D [1396 0 R /XYZ 490.062 706.351 null] >> endobj 1401 0 obj << /D [1396 0 R /XYZ 283.227 695.392 null] >> endobj 1402 0 obj << /D [1396 0 R /XYZ 95.641 687.602 null] >> endobj 1403 0 obj << /D [1396 0 R /XYZ 95.641 669.275 null] >> endobj 1404 0 obj << /D [1396 0 R /XYZ 166.903 628.842 null] >> endobj 1405 0 obj << /D [1396 0 R /XYZ 476.682 617.883 null] >> endobj 1406 0 obj << /D [1396 0 R /XYZ 293.322 606.924 null] >> endobj 1407 0 obj << /D [1396 0 R /XYZ 227.307 595.965 null] >> endobj 1408 0 obj << /D [1396 0 R /XYZ 95.641 588.174 null] >> endobj 1409 0 obj << /D [1396 0 R /XYZ 95.641 569.848 null] >> endobj 1410 0 obj << /D [1396 0 R /XYZ 204.595 529.415 null] >> endobj 1411 0 obj << /D [1396 0 R /XYZ 143.462 507.497 null] >> endobj 1412 0 obj << /D [1396 0 R /XYZ 250.35 496.538 null] >> endobj 1413 0 obj << /D [1396 0 R /XYZ 162.63 485.579 null] >> endobj 1414 0 obj << /D [1396 0 R /XYZ 95.641 477.788 null] >> endobj 1415 0 obj << /D [1396 0 R /XYZ 95.641 459.462 null] >> endobj 1416 0 obj << /D [1396 0 R /XYZ 481.035 419.029 null] >> endobj 1417 0 obj << /D [1396 0 R /XYZ 353.448 397.111 null] >> endobj 1418 0 obj << /D [1396 0 R /XYZ 181.738 375.193 null] >> endobj 1419 0 obj << /D [1396 0 R /XYZ 228.302 375.193 null] >> endobj 1420 0 obj << /D [1396 0 R /XYZ 452.305 375.193 null] >> endobj 1421 0 obj << /D [1396 0 R /XYZ 207.289 364.234 null] >> endobj 1422 0 obj << /D [1396 0 R /XYZ 306.322 364.234 null] >> endobj 1423 0 obj << /D [1396 0 R /XYZ 143.462 353.275 null] >> endobj 1424 0 obj << /D [1396 0 R /XYZ 186.916 353.275 null] >> endobj 1425 0 obj << /D [1396 0 R /XYZ 246.389 353.275 null] >> endobj 1426 0 obj << /D [1396 0 R /XYZ 309.055 353.275 null] >> endobj 1429 0 obj << /D [1396 0 R /XYZ 490.162 353.275 null] >> endobj 1430 0 obj << /D [1396 0 R /XYZ 162.819 342.316 null] >> endobj 1431 0 obj << /D [1396 0 R /XYZ 240.348 342.316 null] >> endobj 1432 0 obj << /D [1396 0 R /XYZ 95.641 337.121 null] >> endobj 1433 0 obj << /D [1396 0 R /XYZ 95.641 313.604 null] >> endobj 1434 0 obj << /D [1396 0 R /XYZ 95.641 201.744 null] >> endobj 1435 0 obj << /D [1396 0 R /XYZ 199.316 179.826 null] >> endobj 1436 0 obj << /D [1396 0 R /XYZ 143.462 168.867 null] >> endobj 1437 0 obj << /D [1396 0 R /XYZ 497.933 157.908 null] >> endobj 1438 0 obj << /D [1396 0 R /XYZ 162.819 146.949 null] >> endobj 1267 0 obj << /D [1396 0 R /XYZ 95.641 141.754 null] >> endobj 22 0 obj << /D [1396 0 R /XYZ 288.998 108.782 null] >> endobj 1439 0 obj << /D [1396 0 R /XYZ 95.641 100.073 null] >> endobj 1440 0 obj << /D [1396 0 R /XYZ 95.641 79.024 null] >> endobj 1395 0 obj << /Font << /F39 1263 0 R /F35 1187 0 R /F45 1307 0 R /F48 1428 0 R /F26 1177 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1443 0 obj << /Length 1325 /Filter /FlateDecode >> stream xÚ•WKÛ6¾ï¯ð­r°æŠzëÔ¤E7H¦EàöÒ-Ñk"’hH”íEÐÿÞ)kíuŠîøš~óÍpÆâ‹þù¢LY–ðE•,ÊÒEÕÞ…‹'8yÇD”Æ, £EÌÒ"GÖwq¹(Y™Å‹õÖÊ­ë?ƒwbod¿\EipFã'¹×½¡ùoý’~êEÛ.y º'ÚÿEt£h–­¾ûi=]̳”…Q¹XM7_B[Å Å‹U±’'¸$].›ƒ{³\ea¼=È~Pº£ÕóÅDZ]®x°‘=C( ·*Y.ÎÔÅhvº§Eï\ùÝGuw&ºš&{= jÓHZÉV¨ÆIÔu/‡áöU•0òI÷Ï´üþnËêÑìGåQ÷­ps½¥ñ“Dlg¸¿’üM{µª^íÍDÎzç<ØêM5úhÃg]½€˜îw´Tã F{.öc^9¹®–'´Åv¦m^åü¾õÎ_2ƒ?š}Ó𣠇‘÷ƒwÀÈ“ñ.Žø`^õ|¶þ¢Á§ ·_äóQ÷õM¬êäp‹áv 5ÞpIýLÈ5 V•h—O²“=0kÍr¢ÖÒzÖV5’]ÄöLõÁœ£|öø*9¼_6—nýc1.d…cB2ÿF„ÝmW—!ŸˆÌÝY ·¿q Ç^#ÝæQCw´*“Oo¾sæ¬Ó—„7r{û­€Ô³7Ý4/±ô²Õ”ãΣrÑš¨=‡ë½‚wu­Ñ\P…>æ1E «”ÅÅ +Þ2/Yevsß늡RuøŽ^Ó×WtÿÁ½‡GXñˆ…iŠåw•䬈 T'1ãIaå>tË$ ËèþBM /¨QÀ d(NÏ=Æ›á+¡ ™w*ò •²€4ãRоQÐ…ò$¸§Ûulðâ™&'UwÐ_¼ÕA•QÙ8¹-5®WQ` wí$Í‘¥ ÆH³ƒ;!+Sò³‰Ü*În;qXºÕ_» ÇÐÆèX»G€s(u‰Š‡g€Q>aÌòब„noÙkÀËN8/9çÈVœ$Aã Î-Q8A¢pÄ’ƒ<ÅI±…ãóÂ……€«-αþã¸'¥ ©©¶s`jWóL{ý²F§ù’ÈÒÑäÃÉP(džGyí¾‘÷´¢[óéÖJÇV6 ®sæ³»rïÂd†b×A~ Pôþvw¾în¯ã¥=†¤¨…1 UH›N´–F88JÓj²zO;T*Q¬Òm‹¿$®ó¦,XRÄ.3¦²åTϸÿ6#f¬î <£+åuº­¼Ý9ßG=65eÕÆåÖ÷©T͒ꑪ,< ç®â@nqñ9 £J(Ñ{[©¬Ç³ŒÆC*dÃ=­\!Ž]]?‚Z ¦W›Ñ[‰àíVÍXÓy¼ö ‡S`¦YÕnúAzÍq±(O&ŠåIV׌ŜeY;UíÐr‰M› nì 8ÙŽ˜€neži¨!¢™‡¸-O•Ü:r¼á±e|¤jì› øþ÷ìÚ4c<*þÃø ÈrŸVÊÙkEi p†½¬”£ýéÁyd«œ8Šøv–Ë kûì 9èʆ|pæF¤ ÅÄp 8J2VÄùKÄVrÜÇP×°©Íˆx™÷.é1gý; ä凯 ¾p¢Æ,-Y½ú©‘çðY~ó(½´œ@³â¤ä þ wÊ“_endstream endobj 1442 0 obj << /Type /Page /Contents 1443 0 R /Resources 1441 0 R /MediaBox [0 0 609.714 789.041] /Parent 1394 0 R >> endobj 1444 0 obj << /D [1442 0 R /XYZ 95.641 729.265 null] >> endobj 1268 0 obj << /D [1442 0 R /XYZ 95.641 517.805 null] >> endobj 26 0 obj << /D [1442 0 R /XYZ 193.501 485.669 null] >> endobj 1445 0 obj << /D [1442 0 R /XYZ 95.641 476.959 null] >> endobj 1446 0 obj << /D [1442 0 R /XYZ 159.771 457.724 null] >> endobj 1447 0 obj << /D [1442 0 R /XYZ 95.641 449.933 null] >> endobj 1448 0 obj << /D [1442 0 R /XYZ 341.945 419.866 null] >> endobj 1449 0 obj << /D [1442 0 R /XYZ 95.641 403.711 null] >> endobj 1450 0 obj << /D [1442 0 R /XYZ 225.736 382.008 null] >> endobj 1451 0 obj << /D [1442 0 R /XYZ 199.59 371.049 null] >> endobj 1452 0 obj << /D [1442 0 R /XYZ 476.1 371.049 null] >> endobj 1441 0 obj << /Font << /F39 1263 0 R /F45 1307 0 R /F26 1177 0 R /F35 1187 0 R /F38 1195 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1455 0 obj << /Length 165 /Filter /FlateDecode >> stream xÚuË Â0E÷ùŠY&‹ÆL^M¶Š ‚ ’¸Z«`„úÿV+¥e3Ì=ýƒ úBð†[KÏ¥5p©ˆ€²W¶„ÅË?Ò2ÅFyðÜ[áö%ÂõDW÷ØvEb™4‚"ú±h›Ô ó!1t´)S¬ªCZ—Ã~ëW|²sØ‘u-5:®B6:ÿ‡ÊFÄ:ÉuÿÁšiçŒÄôü ÃÐ=»endstream endobj 1454 0 obj << /Type /Page /Contents 1455 0 R /Resources 1453 0 R /MediaBox [0 0 609.714 789.041] /Parent 1394 0 R >> endobj 1456 0 obj << /D [1454 0 R /XYZ 95.641 729.265 null] >> endobj 1453 0 obj << /Font << /F39 1263 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1459 0 obj << /Length 2285 /Filter /FlateDecode >> stream xÚµ]oÛ8ò½¿ÂJ³’¨ÏÝ—íIÑC¶Wdƒ;n÷‘éXˆ,é,)ޱ¸ÿ~óEY¶Õ^±ÀÂÎ ‡Ãá|Q>ü‚E«$ i˜«0‰Åö¿xÊÇ7pDA¦"³âÒQ—¡Vq"ÏÏoÞ݆É"ˆTœ%‹‡5ñ>¬þí}ؘ¶·»«e˜f^¨®~øp¦‹@«àLs–ûݧۛ»OŸo~Æ©È4Ry$|_î¯BßûûÇû÷¿üòéóGs{sóùà /ŽâE¦ò„Ö.?Qq“ÒaófåÚÞ•µí˜_Ç‹ø5òÇŠu.›µ»« óš§ÙvWKhÏÆò¤ëž®x^Ö8FÞo¾VVVš»*{†öe¿q"¨`9VëUà¡ô4òã¾|U8Ãb)zÃqUç¤}Ýà~IJ;“ޝYÌ–g¨ i p¿±—æ ÂH¥¡»£o˜-T~š\šíÇ£ã.²·éxd¡2ÍP‰–¦> y½C¼ö|Æ MTš''‡d[£òÈ{ØàÍä1i˜­90Ï£åñäò`NfFÞ«’é0–¶û‘± ¿£7¼€Í ˆyÙ½Ü^϶å#ø'ºÓ–©ï"0`‘®)JÃwxò“‹+É3¥ÓﺑÀw޼2½y4íKþ×UzdwØ–MØÎöŒéÉŽ€¹»ûrO±ö«pllUÉeľŠRçqmóbv¥y¬`q˜k²Ž›¯!ƒCèUe×3¢YóxfkY¿1ýŒG¦™Jüè; (=j_‚Þ$uèÎÔ3Cßla§À+ SUÆv–ëØðqCHš9$Ïéý­ñâÂØ?ˈÙo0–"÷F€OøØg°tþÓ…Œ°¯¶ú²©Õ1BhAþÂ\¥* AB8î06…] ;2¤CS¯¸ê…ÍXlj •g)‰z?cl_ÅIø]¶]†?¨‘…^Ùñ¸5+ËÐÐòH÷c-²h¦½mã-bE"› \|P`X»ƒ*ž¿?Y·ä+Lȧ7(y#0ÿÆÈýÁÕ‚OüpiŒàLËQ›âj™ø¾W›­ýÍýÖ 0þðÂ!À{»µuß1î¿—vé:Q˜¥™wÚ' ê0—ÀÔ¼£Ð„ˆI-x؉½àt×B2’a‰œ©ylZ4 ©˜Ê!Jø5ch­…Š.ë:ÛšåLRÛqþ 3Hµ¾¦¢ÙnMwÍH¹3LÀGs {IDII±“è³ç‚¶æÙ2;VÄÖ@ =7ÅŒÊÍêp–Úн{Û6;íÞ“­- LôGûTÖÃ\Çâí€ËÑŽì¨0OËúŒùR7¢ãÝ®.=OG‰rvk@Ø…÷„и`UìóPC¡Ý:9í—ó]ÅþTèº åJŒFPU²ýÊ*¹N}‚zܼñbÍ1¶y7+2Ä ™vÍÈÙE±f`4-vHb]Ĭ,tQå#ÕÎKoÕì±Ê©R*Fä³#•ȬÐ5#9ª;u>$€Ë•õÓ‰Ž\É!ƒ”½¤ò.‚Ì4Õp¦u¹+SádÌyH¬úçÒ®þkÓuŒ‰aöNâ ãña²²*µ^:X(1Î…ÈSÌ#U 0µ¬b×…e⺱ë^ºÐ¬ç9k­}ÿÔ îsd@ߣ[A9Œ£'ç.Q“e'F &-¤HÒ\)pK…Vƒ‚îœFñô=ëmáü«r‹Ö”¬‰cìú©?àa.ýš²6ŒŒëQö®F_Ÿ®}1Õ üÔGḱgrçÊÃd/s.÷áÔÍ3=&vNÒ<”½$–`TãösÙÄ)½«Ñc$­¸:$EaÊŲÇKºfú1—Ì‹1±àis(ŰëÊËÓÑ}x:¹=˜T°T./çË˧GO¹*ã8úÀ|!@«_šg¹vš0ó9bP¸ŒöuùU··]çZË1Ýùv’f$ÂxÞCâÓVÙÌ)±ëHóX4‡ÑyKŒ\àcˆÐÒ?s·qÍtzƒL”€ˆ¡Åå‘úCK. ¡nlÊ ‡Ž&ºÀ¤Å"!êhéG`d–µu’­ |A"éÞ®lQ™±âky£hîK`:ž±Ð ô¦îñÕ&Ê&Ôv?£ôä…¥,:JÅ1 GDm£Œcpå¶­JF¦thÅàƒ[$wûR6C'KH©BèEúÕ/(¢áѾr‡[‘EéWªnW4­-R8–fòSùLñK¤Uq}üÍ ¥Ão?Ibß©¸gyÜ”EŒï«ÝÜÃ^‰ñ÷¼\àœþü÷”>tpÓ3¯(2Paö#©nzr˜æ¾?Å9¼¡ð£Y®’Œ-úî­Rj<ÛÞ¾ TbɼjX‘xDÑ' Š 8_Á‡sL¿}2øÿJ7øNgOŒÙÙøQÈ%•Y»c·ŒI™=–Öc'SÖgºxÕº4yçø¿‚mäP‘;ô§ßÔºf+_ÝxkîБ²±›( Hœºó\3÷£- =ù‘&oèu’¸Óø\z)W ÖC5—sèš´qîBà€È “Ý`¾—æ!’I³€ç*àŠ©[õå㓹¶a„nædÉ“  Î:©˜Ñ&ëèëÆÎmÝ0¨nî(î½XApTüÎ+‹g&œæ`Ö¡õ±SŒ¹Ÿðá…zê](ûøõ{Ýv­-Jô‘b¦Ÿžø§-|Ï£¼¡h°ßöcNMSÊQýkF¸çZâ=ÛÞ?0¬D®äP¨t®o$Õ â¡+Ÿ¸+øÁí‚É€3ÁÌ÷½Î…ŒJU ]?Ö–I>uÅÆRz}±â4F¯åã„mejã ÆŽÜXr ¿ñLH$9å‡épo9•üÔîš'þØ€S:¶{O Ð(ƒ9ÒN\aÔ´ú#ìóææaüK¶LâLeQ>ÿo„V‘æ?#èOçìô\f¬|ÿìŒÿÊ‚¬Zendstream endobj 1458 0 obj << /Type /Page /Contents 1459 0 R /Resources 1457 0 R /MediaBox [0 0 609.714 789.041] /Parent 1394 0 R >> endobj 1460 0 obj << /D [1458 0 R /XYZ 95.641 729.265 null] >> endobj 1269 0 obj << /D [1458 0 R /XYZ 95.641 716.314 null] >> endobj 30 0 obj << /D [1458 0 R /XYZ 462.041 705.673 null] >> endobj 1461 0 obj << /D [1458 0 R /XYZ 95.641 690.388 null] >> endobj 1462 0 obj << /D [1458 0 R /XYZ 95.641 690.388 null] >> endobj 1463 0 obj << /D [1458 0 R /XYZ 268.182 671.489 null] >> endobj 1464 0 obj << /D [1458 0 R /XYZ 241.832 649.572 null] >> endobj 1465 0 obj << /D [1458 0 R /XYZ 420.45 649.572 null] >> endobj 1466 0 obj << /D [1458 0 R /XYZ 322.066 638.613 null] >> endobj 1270 0 obj << /D [1458 0 R /XYZ 95.641 624.844 null] >> endobj 34 0 obj << /D [1458 0 R /XYZ 247.458 595.39 null] >> endobj 1467 0 obj << /D [1458 0 R /XYZ 95.641 589.212 null] >> endobj 1468 0 obj << /D [1458 0 R /XYZ 154.024 578.403 null] >> endobj 1469 0 obj << /D [1458 0 R /XYZ 366.839 578.403 null] >> endobj 1470 0 obj << /D [1458 0 R /XYZ 438.553 578.403 null] >> endobj 1471 0 obj << /D [1458 0 R /XYZ 495.572 578.403 null] >> endobj 1472 0 obj << /D [1458 0 R /XYZ 95.641 557.268 null] >> endobj 1473 0 obj << /D [1458 0 R /XYZ 95.641 521.716 null] >> endobj 1474 0 obj << /D [1458 0 R /XYZ 95.641 521.716 null] >> endobj 1475 0 obj << /D [1458 0 R /XYZ 257.862 510.757 null] >> endobj 1476 0 obj << /D [1458 0 R /XYZ 308.638 510.757 null] >> endobj 1477 0 obj << /D [1458 0 R /XYZ 437.872 510.757 null] >> endobj 1478 0 obj << /D [1458 0 R /XYZ 244.864 499.798 null] >> endobj 1479 0 obj << /D [1458 0 R /XYZ 469.072 499.798 null] >> endobj 1480 0 obj << /D [1458 0 R /XYZ 338.967 488.839 null] >> endobj 1481 0 obj << /D [1458 0 R /XYZ 410.604 488.839 null] >> endobj 1482 0 obj << /D [1458 0 R /XYZ 490.062 488.839 null] >> endobj 1483 0 obj << /D [1458 0 R /XYZ 143.462 477.88 null] >> endobj 1484 0 obj << /D [1458 0 R /XYZ 261.705 477.88 null] >> endobj 1485 0 obj << /D [1458 0 R /XYZ 333.434 477.88 null] >> endobj 1486 0 obj << /D [1458 0 R /XYZ 379.899 477.88 null] >> endobj 1487 0 obj << /D [1458 0 R /XYZ 143.462 466.921 null] >> endobj 1488 0 obj << /D [1458 0 R /XYZ 321.495 466.921 null] >> endobj 1489 0 obj << /D [1458 0 R /XYZ 429.763 466.921 null] >> endobj 1490 0 obj << /D [1458 0 R /XYZ 170.809 455.963 null] >> endobj 1491 0 obj << /D [1458 0 R /XYZ 95.641 448.172 null] >> endobj 1492 0 obj << /D [1458 0 R /XYZ 95.641 429.846 null] >> endobj 1493 0 obj << /D [1458 0 R /XYZ 95.641 394.294 null] >> endobj 1494 0 obj << /D [1458 0 R /XYZ 95.641 394.294 null] >> endobj 1495 0 obj << /D [1458 0 R /XYZ 174.986 383.335 null] >> endobj 1496 0 obj << /D [1458 0 R /XYZ 229.166 383.335 null] >> endobj 1497 0 obj << /D [1458 0 R /XYZ 352.452 383.335 null] >> endobj 1498 0 obj << /D [1458 0 R /XYZ 406.372 383.335 null] >> endobj 1499 0 obj << /D [1458 0 R /XYZ 143.462 372.376 null] >> endobj 1500 0 obj << /D [1458 0 R /XYZ 215.524 372.376 null] >> endobj 1501 0 obj << /D [1458 0 R /XYZ 299.438 372.376 null] >> endobj 1502 0 obj << /D [1458 0 R /XYZ 395.313 372.376 null] >> endobj 1503 0 obj << /D [1458 0 R /XYZ 214.742 361.417 null] >> endobj 1504 0 obj << /D [1458 0 R /XYZ 317.415 361.417 null] >> endobj 1505 0 obj << /D [1458 0 R /XYZ 431.275 361.417 null] >> endobj 1506 0 obj << /D [1458 0 R /XYZ 486.376 361.417 null] >> endobj 1507 0 obj << /D [1458 0 R /XYZ 179.094 350.458 null] >> endobj 1508 0 obj << /D [1458 0 R /XYZ 392.633 350.458 null] >> endobj 1509 0 obj << /D [1458 0 R /XYZ 174.746 339.499 null] >> endobj 1510 0 obj << /D [1458 0 R /XYZ 332.262 339.499 null] >> endobj 1511 0 obj << /D [1458 0 R /XYZ 500.842 339.499 null] >> endobj 1512 0 obj << /D [1458 0 R /XYZ 95.641 320.75 null] >> endobj 1513 0 obj << /D [1458 0 R /XYZ 95.641 320.75 null] >> endobj 1514 0 obj << /D [1458 0 R /XYZ 204.638 312.6 null] >> endobj 1515 0 obj << /D [1458 0 R /XYZ 440.057 312.6 null] >> endobj 1516 0 obj << /D [1458 0 R /XYZ 458.396 312.6 null] >> endobj 1517 0 obj << /D [1458 0 R /XYZ 492.663 312.6 null] >> endobj 1518 0 obj << /D [1458 0 R /XYZ 95.641 271.933 null] >> endobj 1271 0 obj << /D [1458 0 R /XYZ 95.641 266.951 null] >> endobj 38 0 obj << /D [1458 0 R /XYZ 157.928 236.575 null] >> endobj 1519 0 obj << /D [1458 0 R /XYZ 95.641 230.397 null] >> endobj 1520 0 obj << /D [1458 0 R /XYZ 252.114 219.589 null] >> endobj 1521 0 obj << /D [1458 0 R /XYZ 95.641 206.817 null] >> endobj 1522 0 obj << /D [1458 0 R /XYZ 95.641 163.997 null] >> endobj 1523 0 obj << /D [1458 0 R /XYZ 95.641 145.248 null] >> endobj 1524 0 obj << /D [1458 0 R /XYZ 95.641 80.491 null] >> endobj 1457 0 obj << /Font << /F26 1177 0 R /F27 1179 0 R /F45 1307 0 R /F35 1187 0 R /F39 1263 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1527 0 obj << /Length 2188 /Filter /FlateDecode >> stream xÚ•ËrÛFòî¯àmÉ9@<÷’xÊ«”%§dÖÖV9>@äD¸(J»É¿o¿f ’ØL÷ôôkú5¢;rà¿;Júî(òå…Áhµ猶°óñ+Îh®‚8­,ßÝÜΓQ¢’p>Znˆb¹þ:þ°K®&3/pÆžš|[þtsëÇ£C$ô}s¡þtw»øt÷°øÂt]†«æA$t??~þøøþþþîá#s~\Ü.wüagß-–VMß•?wG3«í¹!³y䨾ž§×·ùA«§1H¿4º¨³²P“Yè8ãå.«yUïÊ-ÝqV0ªÙi^²Õ¯¼ªô¡¬^—‡†ÂÀ}–¨m!ßñþϺBQ ý« <÷“™;~B׫͙D–ÓUòBŠU¼)+½æõNW -U”Í«º¶é^¿aIzlv¥èú¤ƒZ»ã.Y»iyB¬ªzŸf¹¨¿^Wº–ƒ™°Ú¡ÏôMm Xë:ª7ô^¥Þ–Õ+ƒßÿë´å±9Å÷å:ÛdZäÿ˜6(9}Jk‘ü›ØáÔCüsyÿÉ .}\üøáó}þqyÛƒÿݧÏÏ(·¬›/«*;ôEéfõ†áà:b#niœ¶É*dZ ·CZ¥Û*=ìÄï›ÆÄd{qCÑw¬MÌ5%·ºÐøû,ÊÖtigÚ\ÄbV¬õ‹Ú5ûÜå&*òB¶A·œÍ}N+^—bY&â-vCnŸ€|/Wƒs‚˜xÃ`€xn<.O.’qi²Â­f‡¹È]ú¬yu¨&H Qµg¢È.‹º©&ñø¸j a Ýê§H\Ô‡TäîS8X¼2@BÛà@“³ëÄVÂl©{¸xÒ‚]HÙµ´1ˆ-×SN {g~¤b{I¬Ü0"Æ_ˆff}q†Ü UG¤š qs¬…=€?ÅqO%×Xñ[) 6¯ ä-%ҖȲý!×µPa:ß‚¿ú…%“r¬Çxji»Î‹¥özQlî4JH ~Ù—°ÕB¶P}Ĥt?ˆhv4(®cíº/Kñ梇¬…©ñR¬õlàÖq¯ÀäùÁx_Ú¾?Þóü•7žt^ž&‰‡)ƒð{ (^^X¸®âÀˆÌGÒç4?ÂÎzÊxÊmÜÀÆDßF(Ÿ?ÐjA ¶(‹! Ðæ>8Hô_Ž `wÊ[Y#ßš¿i]÷d7XzñK!Ž›üLËŠ­0`eaqª²†ŸþI*À¸è'- L;dý/׊»Í€-™É¿g1?pXeL<°sj“rª¡[»ß*p7¡ïN¸X=`ÝêÀm)s©~I17¦g5ÜEÿŽ/ª.w™Xº Î@xЋ2¼ë}Ä%zèÅãS›÷ža'ËxƒìLÊàÀ²C|¢9‚ŽE½‹æ–òor¼ y ñ|•€Bi9E8r\—‹ul¶ŽƒÏÅÀ¶þ–<†å^xÕ¸4ÿS^­uCá=•A³>”0;Ô]GÿgCÜg[ôÔ<’¨ÅÅsZeéS®/•H ¡&4Ìâ’{¢\ÇôjËÎÖgXS}†¯èkciÄßÑÀ˜BO M§¦`¸íÊó É.­§Ìòé(¼ë¬X ˜ðÖ2:ƒ[/Ïæ¯üÈíݬ 5޳kùØÉ×å_MIQJ|Ó¥g´•eϲ™§Åö˜n¥Äƒ½9=®µ4œlsÖIÐGˆ8í²\Q7·šPœ ­Ì•^%Z/#~•Rù œ3)èÕZ›¡XmÊZ‰õÕ¦¬öiSÿý¢ß<]0Ü¿B´>M¿ÉøyDqOÐÿÌSŽÞÖ&ÄýNªÇðÂM¢îœûUøäõ…ŒoS+ù É9—AŸo4ÔŽ¼PÅI2,K¿Áǵ|x¼„SAB'*ŒÙérW]b·\æxUáö‘{Aç>Íc¹§Õ¶¾Z[æ`eÈ‚/ÿ9¶ÓZSC•®~…ü‚ ÇLã=mâwš#äÓH$dT2àËõ$àyçnïóZ4é‹bà}Á,²MKÞ¡mŸ]¨Õ/zulp˜{îøé•¿˜… ‡È¸B±:÷½q»;þ†ò§%\˜Cýèóî^:±Âé‘bP$¦šHmgý28üSÐèÃóÏÚZ3¦å€UžÁcÑd9/ËBHè)ÐT±çU&œÎ Cbšd„·’3Ô½Âs ŠrÀóbA#’€Ã'!Z‚Íâs“q¤TˆRØ£­^€åKIäM’˜É¾ƒè>n­‹uÍÒíˆ c¸Ð“"Ó—#'Tx–Ö¡¤u·Ì W6«ÃnV#‰T5Å`÷)}NÚœJ^` ‘”äÈÿ͸ïW;zaG!—±(2C`xV%Aíˆæxa:ÛæšQÓð”ñYÓ?J¯÷WÆÙˆP` Ô»Úxq$å!¤W€v&ˆ+;@؈´`¸ï€)#¥hœíÊ;ÙÊ‹z‰ ÆÛ_{òωØ*¹øó!¶Eÿ`ÿ:‰ ¼Þ¯W»ˆ¯ý’àtÿ µ!endstream endobj 1526 0 obj << /Type /Page /Contents 1527 0 R /Resources 1525 0 R /MediaBox [0 0 609.714 789.041] /Parent 1394 0 R >> endobj 1528 0 obj << /D [1526 0 R /XYZ 95.641 729.265 null] >> endobj 1529 0 obj << /D [1526 0 R /XYZ 95.641 741.22 null] >> endobj 1530 0 obj << /D [1526 0 R /XYZ 95.641 577.324 null] >> endobj 1531 0 obj << /D [1526 0 R /XYZ 255.023 567.074 null] >> endobj 1532 0 obj << /D [1526 0 R /XYZ 341.629 567.074 null] >> endobj 1272 0 obj << /D [1526 0 R /XYZ 95.641 537.365 null] >> endobj 42 0 obj << /D [1526 0 R /XYZ 160.616 506.989 null] >> endobj 1533 0 obj << /D [1526 0 R /XYZ 95.641 500.811 null] >> endobj 1534 0 obj << /D [1526 0 R /XYZ 245.729 490.003 null] >> endobj 1535 0 obj << /D [1526 0 R /XYZ 404.703 490.003 null] >> endobj 1536 0 obj << /D [1526 0 R /XYZ 317.987 479.044 null] >> endobj 1537 0 obj << /D [1526 0 R /XYZ 376.002 479.044 null] >> endobj 1538 0 obj << /D [1526 0 R /XYZ 428.282 479.044 null] >> endobj 1539 0 obj << /D [1526 0 R /XYZ 263.817 468.085 null] >> endobj 1540 0 obj << /D [1526 0 R /XYZ 493.719 468.085 null] >> endobj 1541 0 obj << /D [1526 0 R /XYZ 304.464 457.126 null] >> endobj 1542 0 obj << /D [1526 0 R /XYZ 192.717 446.167 null] >> endobj 1543 0 obj << /D [1526 0 R /XYZ 95.641 433.395 null] >> endobj 1544 0 obj << /D [1526 0 R /XYZ 177.896 405.42 null] >> endobj 1545 0 obj << /D [1526 0 R /XYZ 95.641 381.689 null] >> endobj 1546 0 obj << /D [1526 0 R /XYZ 235.957 353.714 null] >> endobj 1547 0 obj << /D [1526 0 R /XYZ 407.13 353.714 null] >> endobj 1548 0 obj << /D [1526 0 R /XYZ 497.933 353.714 null] >> endobj 1549 0 obj << /D [1526 0 R /XYZ 177.693 342.755 null] >> endobj 1550 0 obj << /D [1526 0 R /XYZ 95.641 334.964 null] >> endobj 1551 0 obj << /D [1526 0 R /XYZ 310.33 326.815 null] >> endobj 1552 0 obj << /D [1526 0 R /XYZ 371.896 326.815 null] >> endobj 1553 0 obj << /D [1526 0 R /XYZ 469.072 326.815 null] >> endobj 1554 0 obj << /D [1526 0 R /XYZ 95.641 303.084 null] >> endobj 1555 0 obj << /D [1526 0 R /XYZ 95.641 256.478 null] >> endobj 1556 0 obj << /D [1526 0 R /XYZ 95.641 235.245 null] >> endobj 1557 0 obj << /D [1526 0 R /XYZ 95.641 200.887 null] >> endobj 1558 0 obj << /D [1526 0 R /XYZ 450.576 189.928 null] >> endobj 1559 0 obj << /D [1526 0 R /XYZ 419.987 178.969 null] >> endobj 1560 0 obj << /D [1526 0 R /XYZ 472.279 178.969 null] >> endobj 1561 0 obj << /D [1526 0 R /XYZ 239.38 168.01 null] >> endobj 1562 0 obj << /D [1526 0 R /XYZ 429.153 168.01 null] >> endobj 1563 0 obj << /D [1526 0 R /XYZ 256.098 157.051 null] >> endobj 1564 0 obj << /D [1526 0 R /XYZ 348.675 157.051 null] >> endobj 1565 0 obj << /D [1526 0 R /XYZ 171.162 146.092 null] >> endobj 1566 0 obj << /D [1526 0 R /XYZ 308.21 146.092 null] >> endobj 1567 0 obj << /D [1526 0 R /XYZ 173.023 135.133 null] >> endobj 1568 0 obj << /D [1526 0 R /XYZ 382.299 135.133 null] >> endobj 1569 0 obj << /D [1526 0 R /XYZ 258.341 124.174 null] >> endobj 1570 0 obj << /D [1526 0 R /XYZ 348.776 124.174 null] >> endobj 1571 0 obj << /D [1526 0 R /XYZ 464.672 124.174 null] >> endobj 1572 0 obj << /D [1526 0 R /XYZ 241.776 113.216 null] >> endobj 1573 0 obj << /D [1526 0 R /XYZ 464.16 113.216 null] >> endobj 1574 0 obj << /D [1526 0 R /XYZ 228.935 102.257 null] >> endobj 1575 0 obj << /D [1526 0 R /XYZ 332.087 102.257 null] >> endobj 1576 0 obj << /D [1526 0 R /XYZ 143.462 91.298 null] >> endobj 1577 0 obj << /D [1526 0 R /XYZ 214.053 91.298 null] >> endobj 1578 0 obj << /D [1526 0 R /XYZ 322.081 91.298 null] >> endobj 1579 0 obj << /D [1526 0 R /XYZ 391.119 91.298 null] >> endobj 1525 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R /F26 1177 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1582 0 obj << /Length 2043 /Filter /FlateDecode >> stream xÚ]oã8î}~E0/ç‰×òWì›§î 3èa¶{è؇ÝÅAq”Z8ä,¹î¯?R¤;qgE!‘¢(~“ŽXð'Vyâ§±XmÃÜÓdUÔï‚Õœ|~'˜Bd‘ŸmÃUä'Ù ~Þ½ûéS”¯r?O£Õîèèv‡ß½¥>Êʨ5í÷½¥ªOö•è&—òñ¼‘y½ò Ú•š™–#AÉòíU£þ‚ТA@úüì€Z8ÙÉÉÙH“ûY˜8Ô* ï öº³%ntsа üg'ÍŒ´ á‘0t ^4ª…¹Gv±}׃tˆï8d©ˆŽÑ†Ð’ÀŸïo¢­·›2,Z·ÖD©žU3g©íœWá­éÀ™O^4ÄŽ€™¸!;Š9­9JŽÁH. ¼¦¥õ,:BsÑ G„º¢þøDâç±{a‡NR³]1d¬´ªV *?9ží³>(C’–ªmáÚ ¢‰àZ¥l´©}º8²/Zð¯Õm#+:ÑÌH=˪‡ÇÀÖ×úËõHSJX›¶ÙüE6iׄ¢°„;=¼Ò®=^˜'fdhUßTÑë>·Gª%x"‹’i'Qæ nêÙCƒ‡×b~"ªQÃì >­Z´Úƒ¡b§Wk©›ÑçsÍ“`HÈ`Po!tý¤¤SqÙë¡H¼BºB"Ò©Çñ`îq$` ˆX¨C?†%œ ãÓ½Y3¶î óª¥u&dÛðÃÎE°’gögÞfÁ°WwuÀœpmhuL¢(Ôn;KÌô©“. së0O†º' ¬´á‹í‘VIä=§‚óÁÿ3 £N¢EÁá0û× ж®¥3Vžzƒ¡Ë96as¶/šýV*w¾E)Á>›\‚yM Ù6xÎ}pÙïØá•‰jK¶–cÍÌâs–"Q^"¾7Šw¶¥U7æ²Ò)"%ßÀÁ•ƒÿaøìV+È54 ^Ù½y…Ÿ0Ë¥ÍdzԎ“Á~p@v‰“%¾x¾9U ˆY2wö\Ãn›ºò¢mIGÌ<ö0B;ú€…R/Ùö8Ž.c£[ßLÕ,ðŽ-†…«´NC=Ì v%œ€°òIbLhCF"€aØ6Õ+Aª)Ú¾±Ük„Ž…×(éBÞ(ï‚õ‡äÂÌ5œi)ÿù£©G÷”ä:âD@SÊ0ŒÔ©£îÔÿzݩҵ'ôÞwÈx$iŠª?ü˜ÝSÕîe…dϲۿ9«D©Ÿ¥á¤ÁB)™éG¨i—Eð¤ ᣸<½¸Ap¸, 4^°)JU«yEãÄÌb¢¨ §Z´´ò*ò%Z‚Ç42¦íUȆ7mÇóˆua(v.žÌdÿj]2…Øâì@Iëí×÷÷´E“+ÿÉ_œŠlHúB¯Wk úÆ'ÌmC«ú&1Á 0( ØûøÊvL© ¤s[§3[§œ8´×¼þv“C_0pc> dNº;ª1íI}'Òåxÿõ×M–%7áåñþï ÇpÛ˜C÷Ñ,ÒàÈuC{*Ð@3kžpðÒi2–«;ò99“MpU Øs|ÚÕŽ‰ °çi(@p –º’{ô‚®»ÁúZn¥ m!åÌû5!_JífŠc‚ieüzã¸P'G\ÖÈ› )Ö¢!ˆÕ³n{S½.øï ŠJž+#Ö8.ÝFñ°fy߫˪7\&³(h°š3Í  ¢›p ä3­w¥ºÚ˜Hÿ–$‘$¾VÏß ‡yA XŠ4÷ãm~=G…`œƒyÆ~P¹y» g>”7j –ûNgëhR\Íu·©u­ &kk¾SÁR™u“ê1ɃZ_ý$)6e~8@¯¦Î5ýz† þÆ4‹%K7½gßd÷’ÿýÎyç~¥B‚ßñ¡?²éx ô°¦Iî'áâ/ ±ˆüËÁ÷~ËÍ/9Ç~ž º40ü?™‚û>endstream endobj 1581 0 obj << /Type /Page /Contents 1582 0 R /Resources 1580 0 R /MediaBox [0 0 609.714 789.041] /Parent 1630 0 R >> endobj 1583 0 obj << /D [1581 0 R /XYZ 95.641 729.265 null] >> endobj 1584 0 obj << /D [1581 0 R /XYZ 95.641 716.314 null] >> endobj 1585 0 obj << /D [1581 0 R /XYZ 187.633 706.351 null] >> endobj 1586 0 obj << /D [1581 0 R /XYZ 194.55 654.645 null] >> endobj 1587 0 obj << /D [1581 0 R /XYZ 95.641 638.491 null] >> endobj 1588 0 obj << /D [1581 0 R /XYZ 163.722 627.746 null] >> endobj 1589 0 obj << /D [1581 0 R /XYZ 404.004 627.746 null] >> endobj 1590 0 obj << /D [1581 0 R /XYZ 171.847 616.787 null] >> endobj 1591 0 obj << /D [1581 0 R /XYZ 232.761 616.787 null] >> endobj 1592 0 obj << /D [1581 0 R /XYZ 467.059 616.787 null] >> endobj 1593 0 obj << /D [1581 0 R /XYZ 301.876 605.828 null] >> endobj 1594 0 obj << /D [1581 0 R /XYZ 95.641 598.037 null] >> endobj 1595 0 obj << /D [1581 0 R /XYZ 162.287 589.888 null] >> endobj 1596 0 obj << /D [1581 0 R /XYZ 337.026 589.888 null] >> endobj 1597 0 obj << /D [1581 0 R /XYZ 464.847 589.888 null] >> endobj 1598 0 obj << /D [1581 0 R /XYZ 284.09 578.929 null] >> endobj 1599 0 obj << /D [1581 0 R /XYZ 355.997 578.929 null] >> endobj 1600 0 obj << /D [1581 0 R /XYZ 185.567 567.97 null] >> endobj 1601 0 obj << /D [1581 0 R /XYZ 320.791 567.97 null] >> endobj 1602 0 obj << /D [1581 0 R /XYZ 466.949 567.97 null] >> endobj 1603 0 obj << /D [1581 0 R /XYZ 381.675 557.011 null] >> endobj 1604 0 obj << /D [1581 0 R /XYZ 458.124 557.011 null] >> endobj 1605 0 obj << /D [1581 0 R /XYZ 254.687 546.052 null] >> endobj 1606 0 obj << /D [1581 0 R /XYZ 95.641 529.898 null] >> endobj 1607 0 obj << /D [1581 0 R /XYZ 95.641 495.422 null] >> endobj 1608 0 obj << /D [1581 0 R /XYZ 95.641 476.998 null] >> endobj 1609 0 obj << /D [1581 0 R /XYZ 95.641 457.173 null] >> endobj 1610 0 obj << /D [1581 0 R /XYZ 95.641 437.347 null] >> endobj 1611 0 obj << /D [1581 0 R /XYZ 95.641 417.521 null] >> endobj 1612 0 obj << /D [1581 0 R /XYZ 95.641 383.163 null] >> endobj 1613 0 obj << /D [1581 0 R /XYZ 163.439 372.204 null] >> endobj 1614 0 obj << /D [1581 0 R /XYZ 95.641 326.556 null] >> endobj 1615 0 obj << /D [1581 0 R /XYZ 163.863 298.58 null] >> endobj 1616 0 obj << /D [1581 0 R /XYZ 375.059 276.663 null] >> endobj 1617 0 obj << /D [1581 0 R /XYZ 251.418 254.745 null] >> endobj 1618 0 obj << /D [1581 0 R /XYZ 229.104 243.786 null] >> endobj 1619 0 obj << /D [1581 0 R /XYZ 423.887 243.786 null] >> endobj 1620 0 obj << /D [1581 0 R /XYZ 343.187 232.827 null] >> endobj 1621 0 obj << /D [1581 0 R /XYZ 216.841 221.868 null] >> endobj 1622 0 obj << /D [1581 0 R /XYZ 276.036 221.868 null] >> endobj 1623 0 obj << /D [1581 0 R /XYZ 372.14 221.868 null] >> endobj 1624 0 obj << /D [1581 0 R /XYZ 162.63 210.909 null] >> endobj 1625 0 obj << /D [1581 0 R /XYZ 95.641 205.714 null] >> endobj 1626 0 obj << /D [1581 0 R /XYZ 95.641 171.238 null] >> endobj 1627 0 obj << /D [1581 0 R /XYZ 95.641 152.814 null] >> endobj 1628 0 obj << /D [1581 0 R /XYZ 95.641 133.347 null] >> endobj 1629 0 obj << /D [1581 0 R /XYZ 95.641 113.521 null] >> endobj 1580 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F35 1187 0 R /F45 1307 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1633 0 obj << /Length 2571 /Filter /FlateDecode >> stream xÚË’ã¶ñ¾_¡£¦J‚ù)Ò{Z»f¶&µ^»Öûç‘Ä„"œÙùûô |HœªIJ¢@w£ÑO(\ð y¢ÒM¸ØF¹ŠÒdQœ>‹Ì|þÊŠ`«$ÛâÔOO~xˆóE®ò4^<íiÅSùåÏG}vær·Ž’`©»>ý퇇M¶È`aŠ 7•$±¬þòøpÿåñëýï¼nL0 UœleÝoß~ýüíÓ/¿<~ýÌ”¿Ý?Ü»ÿz.¾Ç½îŸz17a¦6q¸X÷Ò^do•Â7ŠTn†%·z:`o–­q2pÚ™“i¬Zþ:¿P·muhN„k®·|ÖzÍô£(TQ&lÍ÷óÅ!ÛˆjF¢¥‘ ¯ÏÞ<ëº.åJ¤hJ‘ϵH›Å*…¬Ã@åIN»qˆ|ü²ø¦D(Y:ËØY‰A •‘Hò¬/•ÞÕæVàÍVeQ(Ë$½"‡Ž.]Õt‚éþ«;E´±0´tgîµ'ížO&‰ÚDñä¤|=y°,ºËå.Ì–|€¨­"çC»NÐ¥5-ëWý,TÜö˜žÀYñðÉsÙ1ýoÇ6“åìp°ž)œ@È“Aeã3œl‹J‰ãeQÛ¨_nLëèÊ`,âÄq$JósݥቱŽ'Ó-Ïï Cz…iÖ7 'ºÃ™3¯+LÙñÄDꌤ¶ ²d¹ïšÂA£ª²Íò·ë­-/;²Ža4wôBËÊ—ÊYs Ã0™¶Íئý8e;&«Ú /8Ø„ÀÈ‹GcF@U1ö«m è Yi­™'vÍL³§²3†KñàÖòlƒ¤o%>ê–c¡æOY1ÙÂ1löî{Ø6ü•+;Àg©O2×¹sç$ZGé"ŒT$èºkñÝuœ©0Ýçû>6µoúú:LUž¥>„Šq€mo—zÒåÞvF»×3;\*^°½VõŒ­Að rŒ®Ûcšî´3=kXÀ¡¨Ž a°ëªÚ­«FØç®ùn\š¿‚ ¢Hˆ:òvÄP¡ëºUý®Då;q×'¤¹YÖ,!£óäxeDë.Usà±iЙ‰ .mø[ÚC)ÿÓYgÈœ·z½íM½W ˆ,¬Ù.ëP”[W­g¸4õ„ ÐBlµ#¶º?!vƒmSZCS mÁ'( D'ÙþÄÓ}Ò˜,Ö 6ú„zALm Mi/î¨ÝÌ¥ºá±£OÒ¨µ¯ÈÁ+Fa,Ïky„#:*â{_Ñ'ž4ßMÑIe±xœHÑz‰³§=¤Å+aé2¶‰ä¦-XÆ(µ0Ôéý!h¹åoåoûã.–z0y˜+e ç.X#aPhÕߙֆ¼î£ðÖ¤£l¢#ZY<ñª™9 ±p¬²c¤0‚3Àuâ(Ý:âOú•;A w†P©ÐæÐ iÈžÎhKÆQDÔXè\„4Å»?ÍI]•°¶B•°‡€ŸÛº¶/ìÇ_¥j°§“^·æ¬/Úùɺj¯òöUÄäÈÃñpˆÃÚë¯7ìC9$_Së!þðˆ¬a˜à‡!²™‹[öd(&‚xë7¢à{sÅcSÜE ©®$ëË–FCâ3ïMRt&Cæ*Ùö Dµ7_*¨~néaµ=¯YåI"/¥›C§A{Ã}‹{Ó ÏTp,?šÉO7§xúïmOÑ9¾†¸lÍÅ(´ÙUÕí ÀÒâ,6 3sdÉ»¤ÉíA‘zÂÙ0Ë=ÙQ*A¹“iÝjÔáÿϼø<±J€ÓHsföfòɨ ¼Ÿá:Ì_2~µl²ü-Dun.²f¹JÓè]f…Ù¼aAZ®v}ye€вŒƒä•Ø÷7'g¦Ê-¢Tò]?ްPh^shõØ_B=_¨ÀÀÞ ’F8â«ÖUã§Å¾š¶¹ÔÌ-Ep—–äÜ^¥’GÓ@j}˜(ÍÙÕŒ¶ƒT¥ÙûYÐ?÷¼T”°SR3`;Ì—/òNö;O´Gãû‚kÅ Y<®0nåŸL¶*ͧYŠœ.ƒE\©G†÷TCÀ@<:Ç…Ìk^1t¯ý¶Þ”‡ %CÒ[ÃHÏÐ?à\Ë_Ûè3OMAYz æ±çï©«]u&A¶ã² ¦m:ÀC£º ®ƒ#Å ¯ I=ßW¼[o+Hö[›ê3.¾´Ò·ÏàÐö“Aêý¹~Tž€„)NlðC±Žo0”iø¸8a²ƒ@";¸íᦀ_ ãÀ? …¾‚¡1“î'¡z¶wµ‹JLBG(ÕÌý‰¤QzûÐÔ2žç)c50”5/Ç ‡ý•òÞ!b¤Ô1!%ê˜q0ÎÌ–u|pœ%Zgi<ûZWvhgqScÝ0+€è¾é2lú lgD–Œ_p?UO"Þ” wv8Ò¼[´–Í=Ï=xÆü ™\–-ÏÝå 7B> ¹|G®vÒ‘·Œá‡¾lö®/~žùÈq5ýhp»l)ærcØ¡1_l®*D¡™ˆÉc6‚RoÜæðÕbk+¿oú.É7`Óß÷‘ë•Wœ¦Ip´¹Z7föÞÎé§á­ Û¦þó}qëËM¯ÖÖW¤ÒÀâÝíåezà*wL\WRãÒÁ©pųRÉ}v‚˜WùIŸ–[þXM/B Ò=Í=ൠ×mR‰b0èC#m·k4·ïL´qM\q©v&t~¿§A?8Æzä’ª™éÅ‚@E›÷•FYzUI#'‘ ÃÉ É›?öiœ3úØúôŽy M¤I€oÿŽ©fŨq»Ÿã#ø€ãB:ñ˜dWË&ÒD·^Ï\Hg¸ØŠ¡Øâ/ë5òOÚèfüx(¹šöjåS72DŒè…h¤Ñ?¸ aÔò¨¶‡ªÀ÷U X1'ï*kÓ^ù¬·ŒR]ÿqØ{ašä*‰&¾ù‡g¼õÿc0Þÿ_Þáè?endstream endobj 1632 0 obj << /Type /Page /Contents 1633 0 R /Resources 1631 0 R /MediaBox [0 0 609.714 789.041] /Parent 1630 0 R >> endobj 1634 0 obj << /D [1632 0 R /XYZ 95.641 729.265 null] >> endobj 1635 0 obj << /D [1632 0 R /XYZ 95.641 716.314 null] >> endobj 1636 0 obj << /D [1632 0 R /XYZ 162.471 706.351 null] >> endobj 1637 0 obj << /D [1632 0 R /XYZ 364.742 706.351 null] >> endobj 1638 0 obj << /D [1632 0 R /XYZ 251.064 695.392 null] >> endobj 1639 0 obj << /D [1632 0 R /XYZ 324.117 695.392 null] >> endobj 1640 0 obj << /D [1632 0 R /XYZ 365.935 684.433 null] >> endobj 1641 0 obj << /D [1632 0 R /XYZ 279.773 673.474 null] >> endobj 1642 0 obj << /D [1632 0 R /XYZ 469.072 673.474 null] >> endobj 1643 0 obj << /D [1632 0 R /XYZ 155.674 662.516 null] >> endobj 1644 0 obj << /D [1632 0 R /XYZ 197.934 662.516 null] >> endobj 1645 0 obj << /D [1632 0 R /XYZ 448.899 662.516 null] >> endobj 1273 0 obj << /D [1632 0 R /XYZ 95.641 632.807 null] >> endobj 46 0 obj << /D [1632 0 R /XYZ 167.33 602.431 null] >> endobj 1646 0 obj << /D [1632 0 R /XYZ 95.641 593.908 null] >> endobj 1647 0 obj << /D [1632 0 R /XYZ 304.867 585.445 null] >> endobj 1648 0 obj << /D [1632 0 R /XYZ 340.171 585.445 null] >> endobj 1649 0 obj << /D [1632 0 R /XYZ 384.661 585.445 null] >> endobj 1650 0 obj << /D [1632 0 R /XYZ 218.918 574.486 null] >> endobj 1651 0 obj << /D [1632 0 R /XYZ 95.641 569.29 null] >> endobj 1652 0 obj << /D [1632 0 R /XYZ 154.144 558.545 null] >> endobj 1653 0 obj << /D [1632 0 R /XYZ 449.948 558.545 null] >> endobj 1654 0 obj << /D [1632 0 R /XYZ 373.738 547.587 null] >> endobj 1655 0 obj << /D [1632 0 R /XYZ 478.466 536.628 null] >> endobj 1656 0 obj << /D [1632 0 R /XYZ 279.052 525.669 null] >> endobj 1657 0 obj << /D [1632 0 R /XYZ 235.178 514.71 null] >> endobj 1658 0 obj << /D [1632 0 R /XYZ 188.463 492.792 null] >> endobj 1659 0 obj << /D [1632 0 R /XYZ 318.633 492.792 null] >> endobj 1274 0 obj << /D [1632 0 R /XYZ 95.641 487.597 null] >> endobj 50 0 obj << /D [1632 0 R /XYZ 184.496 454.625 null] >> endobj 1660 0 obj << /D [1632 0 R /XYZ 95.641 448.447 null] >> endobj 1661 0 obj << /D [1632 0 R /XYZ 163.035 437.639 null] >> endobj 1662 0 obj << /D [1632 0 R /XYZ 377.491 437.639 null] >> endobj 1663 0 obj << /D [1632 0 R /XYZ 182.547 426.68 null] >> endobj 1664 0 obj << /D [1632 0 R /XYZ 352.913 426.68 null] >> endobj 1665 0 obj << /D [1632 0 R /XYZ 95.641 402.949 null] >> endobj 1666 0 obj << /D [1632 0 R /XYZ 173.751 374.974 null] >> endobj 1667 0 obj << /D [1632 0 R /XYZ 405.266 374.974 null] >> endobj 1668 0 obj << /D [1632 0 R /XYZ 333.124 342.097 null] >> endobj 1669 0 obj << /D [1632 0 R /XYZ 428.193 331.138 null] >> endobj 1670 0 obj << /D [1632 0 R /XYZ 250.146 320.179 null] >> endobj 1671 0 obj << /D [1632 0 R /XYZ 354.742 320.179 null] >> endobj 1672 0 obj << /D [1632 0 R /XYZ 215.306 309.22 null] >> endobj 1673 0 obj << /D [1632 0 R /XYZ 95.641 279.512 null] >> endobj 1275 0 obj << /D [1632 0 R /XYZ 95.641 219.736 null] >> endobj 54 0 obj << /D [1632 0 R /XYZ 198.106 189.36 null] >> endobj 1674 0 obj << /D [1632 0 R /XYZ 95.641 183.182 null] >> endobj 1675 0 obj << /D [1632 0 R /XYZ 239.733 172.374 null] >> endobj 1676 0 obj << /D [1632 0 R /XYZ 443.704 161.415 null] >> endobj 1677 0 obj << /D [1632 0 R /XYZ 271.573 150.456 null] >> endobj 1678 0 obj << /D [1632 0 R /XYZ 316.472 150.456 null] >> endobj 1679 0 obj << /D [1632 0 R /XYZ 427.64 150.456 null] >> endobj 1680 0 obj << /D [1632 0 R /XYZ 297.326 139.497 null] >> endobj 1276 0 obj << /D [1632 0 R /XYZ 95.641 120.747 null] >> endobj 1631 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F35 1187 0 R /F26 1177 0 R /F45 1307 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1683 0 obj << /Length 745 /Filter /FlateDecode >> stream xÚµVMo£0½çWp„C\Û`>ÔSÚ’ˆUBV)[iµÝƒC‰œ­òï×`Cضj-u«fˆÇ3ïyƒ‘Å®ƒ »ÄH‹ 4öbe1A*ù6ð=lØ€ø^p“L®æv` pm#ÙuqÉÓ/óö@œÕÖhb`ýN¾]ÍßðE Û: ÄVÑËh.£8¼—qã„›x*îûf½ØÌV«(^ÈÌ›pnÂØBæmØî„ÉÛm‰À˜h_Ò™:ÈŽ-ŒA€œv „$dLéÁr¡Ió¥=ßLÚÇó‘5³Ø2`v<àã6«ìÀî6Ï⟊¹Ä!áa"â °¸‹;•YUJnÕNZšçÒáoW›öi_ÛC]š›õz©Uo[U9£ªâ#$J·¶o²£4 +y#ÿßѼa×Âw“–g~Èʽ\abáý½¼¶|óÄD¤Ç"|ãä2’ýe®ÇåwLÚ2U¨x%msÚ6‰PMÊO2ìß#/«'¦@gêl¨4‹ðîv½J«Î>]Žð}Æsˇæl¥Õº-²ü¬Gz„^°î Ì-Ïi«}›åÚYfVÍD‹Ó#„vEù ªc••\õäTlûÒâ*¨`r–Ï[E÷Ô0…\hóùÀƽíE IuNAߨ­O.Šï"-mYÝTågúÔ•úª&E±^kD#Ø~Ü€~NU£ZÔœΊæBE O·Y¿ží˾AÚIªrÝëÁ¤µ(WÓZõ6gåž”Ÿõ@‡ÑZž%ÊMó_Î3^ß…Zº’vàh(¤º=—’}8 ¸ÌÁ®¾@6ñÕM¸ùô7Ö?Œgéð·bx_i©‹±2k'W¢ö>ÔT¬VyÎRþ ¶|•8FSUië9ëUFGú¾°h§Pïë?[–WÏ-ðò©K@ð›7Š Œÿ½ËB/³¶!XîêSþ¢—tlendstream endobj 1682 0 obj << /Type /Page /Contents 1683 0 R /Resources 1681 0 R /MediaBox [0 0 609.714 789.041] /Parent 1630 0 R >> endobj 1684 0 obj << /D [1682 0 R /XYZ 95.641 729.265 null] >> endobj 58 0 obj << /D [1682 0 R /XYZ 164.546 706.351 null] >> endobj 1685 0 obj << /D [1682 0 R /XYZ 95.641 703.856 null] >> endobj 1686 0 obj << /D [1682 0 R /XYZ 95.641 686.421 null] >> endobj 1687 0 obj << /D [1682 0 R /XYZ 95.641 686.421 null] >> endobj 62 0 obj << /D [1682 0 R /XYZ 164.493 677.958 null] >> endobj 1688 0 obj << /D [1682 0 R /XYZ 95.641 672.976 null] >> endobj 1689 0 obj << /D [1682 0 R /XYZ 95.641 667.995 null] >> endobj 1690 0 obj << /D [1682 0 R /XYZ 95.641 633.624 null] >> endobj 1691 0 obj << /D [1682 0 R /XYZ 95.641 633.624 null] >> endobj 66 0 obj << /D [1682 0 R /XYZ 172.244 622.665 null] >> endobj 1692 0 obj << /D [1682 0 R /XYZ 95.641 617.559 null] >> endobj 1693 0 obj << /D [1682 0 R /XYZ 95.641 612.578 null] >> endobj 1694 0 obj << /D [1682 0 R /XYZ 95.641 578.331 null] >> endobj 1695 0 obj << /D [1682 0 R /XYZ 95.641 578.331 null] >> endobj 70 0 obj << /D [1682 0 R /XYZ 176.677 567.372 null] >> endobj 1696 0 obj << /D [1682 0 R /XYZ 95.641 562.391 null] >> endobj 1697 0 obj << /D [1682 0 R /XYZ 95.641 557.41 null] >> endobj 1698 0 obj << /D [1682 0 R /XYZ 362.887 546.451 null] >> endobj 1699 0 obj << /D [1682 0 R /XYZ 95.641 523.039 null] >> endobj 1700 0 obj << /D [1682 0 R /XYZ 95.641 523.039 null] >> endobj 74 0 obj << /D [1682 0 R /XYZ 164.244 512.08 null] >> endobj 1701 0 obj << /D [1682 0 R /XYZ 95.641 507.098 null] >> endobj 1702 0 obj << /D [1682 0 R /XYZ 95.641 502.117 null] >> endobj 1703 0 obj << /D [1682 0 R /XYZ 258.081 491.158 null] >> endobj 1704 0 obj << /D [1682 0 R /XYZ 95.641 467.746 null] >> endobj 1705 0 obj << /D [1682 0 R /XYZ 95.641 467.746 null] >> endobj 78 0 obj << /D [1682 0 R /XYZ 175.273 456.787 null] >> endobj 1706 0 obj << /D [1682 0 R /XYZ 95.641 451.681 null] >> endobj 1707 0 obj << /D [1682 0 R /XYZ 95.641 446.7 null] >> endobj 1708 0 obj << /D [1682 0 R /XYZ 95.641 412.453 null] >> endobj 1709 0 obj << /D [1682 0 R /XYZ 95.641 412.453 null] >> endobj 82 0 obj << /D [1682 0 R /XYZ 163.387 401.494 null] >> endobj 1710 0 obj << /D [1682 0 R /XYZ 95.641 396.513 null] >> endobj 1711 0 obj << /D [1682 0 R /XYZ 95.641 391.532 null] >> endobj 1712 0 obj << /D [1682 0 R /XYZ 259.805 380.573 null] >> endobj 1713 0 obj << /D [1682 0 R /XYZ 95.641 357.161 null] >> endobj 1714 0 obj << /D [1682 0 R /XYZ 95.641 357.161 null] >> endobj 86 0 obj << /D [1682 0 R /XYZ 159.512 346.202 null] >> endobj 1715 0 obj << /D [1682 0 R /XYZ 95.641 341.22 null] >> endobj 1716 0 obj << /D [1682 0 R /XYZ 95.641 336.239 null] >> endobj 1717 0 obj << /D [1682 0 R /XYZ 95.641 301.868 null] >> endobj 1718 0 obj << /D [1682 0 R /XYZ 95.641 301.868 null] >> endobj 90 0 obj << /D [1682 0 R /XYZ 165.051 290.909 null] >> endobj 1719 0 obj << /D [1682 0 R /XYZ 95.641 285.803 null] >> endobj 1720 0 obj << /D [1682 0 R /XYZ 95.641 280.822 null] >> endobj 1721 0 obj << /D [1682 0 R /XYZ 95.641 246.575 null] >> endobj 1722 0 obj << /D [1682 0 R /XYZ 95.641 246.575 null] >> endobj 94 0 obj << /D [1682 0 R /XYZ 172.244 235.616 null] >> endobj 1723 0 obj << /D [1682 0 R /XYZ 95.641 230.511 null] >> endobj 1724 0 obj << /D [1682 0 R /XYZ 95.641 225.529 null] >> endobj 1725 0 obj << /D [1682 0 R /XYZ 95.641 225.529 null] >> endobj 1726 0 obj << /D [1682 0 R /XYZ 337.473 214.695 null] >> endobj 1727 0 obj << /D [1682 0 R /XYZ 95.641 191.283 null] >> endobj 1728 0 obj << /D [1682 0 R /XYZ 95.641 191.283 null] >> endobj 98 0 obj << /D [1682 0 R /XYZ 187.178 180.324 null] >> endobj 1729 0 obj << /D [1682 0 R /XYZ 95.641 175.218 null] >> endobj 1730 0 obj << /D [1682 0 R /XYZ 95.641 170.237 null] >> endobj 1731 0 obj << /D [1682 0 R /XYZ 95.641 135.99 null] >> endobj 1732 0 obj << /D [1682 0 R /XYZ 95.641 135.99 null] >> endobj 102 0 obj << /D [1682 0 R /XYZ 162.839 125.031 null] >> endobj 1733 0 obj << /D [1682 0 R /XYZ 95.641 119.925 null] >> endobj 1734 0 obj << /D [1682 0 R /XYZ 95.641 114.944 null] >> endobj 1681 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F26 1177 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1737 0 obj << /Length 2306 /Filter /FlateDecode >> stream xÚYÝoã¸߿¸'ptú¶Ô>íÞ9‹{I‘uƒÚ¢ e:Ö& KJÖWôï|Q¶ÓüÀáp8‡¿Êá,€_8+R?KÂÙ"*ü(KgåþC0{‘ÏB‘f±Ÿæ ú´úðó]\Ì ¿ÈâÙjK«Íß½_*uhõñæ6J/òoþ¹úËÏwI>ËA0CÁ$ñÓ4é/÷wË/÷˯,7V˜†~œ.Dî¯OŸŸ>þöÛýÃgÖü´¼[>-nBï—%Îý°\õf&aî'q8»í­=ßÈm¼ü Ú(ò‹0é7e—úºzÂUÙ¾tŠRP@’h«´l^Ókó“ÆJoݬ8ñãÏZÝ÷ñÓ—åÿY#"éïú¤7¼ÈÎÚï·Ý;­Zï4“ÿÒàxæžÞÂA„…§M©þ1{žo@Çãý¯ÈœötUßê¶bÊXn_Õ®Ó ªÖI#?xê½¹¹C°¼ÒL4Ý~¯Ž5L¡®Ýbzë®Þµ·5µaƶ3e[[#rk½³o7Eä͹¯UY1å¹W‹|SÙ7a±Í¨³neT‘ç^º[²;Ëa³iAïµÁóÍÚvä2`Ù†iÒ‚»¿íŽf÷™\áv£<žè`yîl©c÷2³öeJ½©qÅæîê¦Å_í^·õ~d×x9íÀíNvç^‹‡žâ®8Ûpop Šì;X·i¹³Ö,¢¸û GzfÎ[¥EK[¡ë‘Çmî5–[ö H!KD^êW-ëªFP$Pdz0ß¾}û×óe¼F™Ÿ…Üã9º%D³g‡8“ ZZkh„Ãráp^¡§Öö•Ï3tçÙÇ©™e=ƶÌ(+]~_'¬G7EŒoÄkDÔ,Ÿ`Îö™ýŒñ/GÐ0«T†‰Êî0<³…»Ä¥í¡BsbL}z.½Êv/•ˆ´Ñ…ø¥ Üœ¼>]¹1oõnA쬪·h²[³;9J3á® ¶uÌŠŒjù¼|X1Y‹2ÅMÓ­%œF <<þºœ‹˜C>=>~¹b3©øR彺T‚Úû‡•ÏÔ''¸0‹r^q´ } ÁˆÙÇ(†™ÄëŽ-€@‘mtÃ+ã˜]ÃõÓÁÖ†R<êmô^™¶.›Ÿæ<üVÕ„¿ÝåK÷"àÄ9`€:1Ágç ¸èMýb0qÒ…IÈæW´p¾‡†Øê¦ÛŽç²'h×– ~4AhýZ`ÂST7j/ÔFµŠñJ™¸¥=œ˜b‰½½ÚPÊõ¹»r¨³µÜÎE|ËÊN¶cÆ|À”’¥¹’àŒaÚ¹;Bgè±ß/7QVʼÐ}[D²# Xí|Â…}@dRíÌu“Áp’Öç* HÐ?çþZ—ªkDJ—bºžªŒÌ¨\ɽk©—c:Ê¢€|4ªdLÂIØõfÎ$9Zv2âäŒMÌâ¾xB]v4} =‰mßÁhÎÖ'=ów# .pïa ÅÈ1Z†¹ ï¢86 FŽiTòaÖÄâ:Á#¿/ÃÈÒ”ªÀdáç–Źf ®Î`{ªÅhM½æ2µºaæyÆu,×q…¬~°Ç–û/Úˆ.êr!c_ë WzT{`cºýZ‹P1´ã©M«ZÍ©ú[7¥ðï2tÚŠWÀvyhÚÙ—Žä)'$ºé¹[nñêûHfÞ1ýCíxä<‰<DYÕ»8Ÿ9½åÜåm髸8²îFæ.ÛâL+Q:‚ÅÍVíëÄÍé&„’vÎÌ~zs°– |­c“PWo’ÌzÏ RsÕr®˜2†§Ô;Àý°f.ò€+`Æú ûú‡”þ­qKQÎ)å»jÐËd¸?fS_ÃS¸}Ƨ¼ã˜Ï-Ÿrù<À%nÜ_$§…(‰ÑùÇr Qcaä¶F+ô¥7ˆ ‡Œâ— ͧcì‰F·W+Lª¶ x‚ bJiY6 ïA!v5øÑçþ ‡4Ó;E úÍ¡ýF˜µ(¶Û–î_ÁŸ¢ï˜†‹àCLmDPæªk ÚvTN-ôw x{ßr —âÈP—öOU‡2aÊ…4“ —©”L¡Ã4 øÕ gaJq&x‰ìBîút6O5í_Ñéà²~©ËweŸ·ˆ¥2þ¸í¿•Q²Å7¼5ÓJºŸÙ/3ïÜ•UnØ­ÔëyºDWàY U´õÍ%~,¤.B4Õë81?Ç«2/ñ´CëÞ,¼s;€:wÓpï?— 1˜|¡%Á(A`íMÂ!{ö(G9Ëíâ'’è÷‚†ÜVQ¯Ú³…À«àw!/2±ÂØk@n(ñ[‡O2Éé(A¾þ¡Ë®ÕÜ‘ÈL¼õÎâSI™ì@üTÒL"-é#-áíÊzfì @´.kt„î¥ÅSÌbÓi"к´F´ža1®Ó8)a€Ž¬Š/­ê7÷Þ¿:È¥þF{þilÆ5Ïã纛±¼`b—VðkŒ[,^Èý¶UÍëq÷l«òee2ï*ksDl÷€Ãï4€bþ €-BÅ•DJù=b‡Rëð Ð2ˆpƒ-?ò#çe¤äSBä¾x 'š¹åv¸ãE%7>wW½¦7{-Naï¿TÑF¾°–.ù¿Q]µûŸø£ÏŸðjÀK”sªš!qMÖ_Ôwvª(¤·zw<ØFú=žÁºcÃ/.4ÂY#Ÿ%(žU›3û°È]C~˜Ÿ-·µäû&ŠÃd{uíûÏZÔb&ü“~Rð·fv{‚J~s¸:앜—ÃÚ–žîï_/YZøi4ùàÿîßaôÞ¿Áxþ]‹ºendstream endobj 1736 0 obj << /Type /Page /Contents 1737 0 R /Resources 1735 0 R /MediaBox [0 0 609.714 789.041] /Parent 1630 0 R >> endobj 1738 0 obj << /D [1736 0 R /XYZ 95.641 729.265 null] >> endobj 1739 0 obj << /D [1736 0 R /XYZ 95.641 716.314 null] >> endobj 1740 0 obj << /D [1736 0 R /XYZ 95.641 716.314 null] >> endobj 106 0 obj << /D [1736 0 R /XYZ 181.101 706.351 null] >> endobj 1741 0 obj << /D [1736 0 R /XYZ 95.641 701.245 null] >> endobj 1742 0 obj << /D [1736 0 R /XYZ 95.641 696.264 null] >> endobj 1743 0 obj << /D [1736 0 R /XYZ 95.641 662.017 null] >> endobj 1744 0 obj << /D [1736 0 R /XYZ 95.641 662.017 null] >> endobj 110 0 obj << /D [1736 0 R /XYZ 175.771 651.059 null] >> endobj 1745 0 obj << /D [1736 0 R /XYZ 95.641 646.077 null] >> endobj 1746 0 obj << /D [1736 0 R /XYZ 95.641 641.096 null] >> endobj 1747 0 obj << /D [1736 0 R /XYZ 95.641 606.725 null] >> endobj 1748 0 obj << /D [1736 0 R /XYZ 95.641 606.725 null] >> endobj 114 0 obj << /D [1736 0 R /XYZ 167.322 595.766 null] >> endobj 1749 0 obj << /D [1736 0 R /XYZ 95.641 590.66 null] >> endobj 1750 0 obj << /D [1736 0 R /XYZ 95.641 585.679 null] >> endobj 1751 0 obj << /D [1736 0 R /XYZ 95.641 533.001 null] >> endobj 1752 0 obj << /D [1736 0 R /XYZ 236.194 522.042 null] >> endobj 1753 0 obj << /D [1736 0 R /XYZ 490.471 522.042 null] >> endobj 1754 0 obj << /D [1736 0 R /XYZ 228.398 511.083 null] >> endobj 1755 0 obj << /D [1736 0 R /XYZ 143.462 500.125 null] >> endobj 1756 0 obj << /D [1736 0 R /XYZ 207.156 500.125 null] >> endobj 1757 0 obj << /D [1736 0 R /XYZ 326.08 500.125 null] >> endobj 1758 0 obj << /D [1736 0 R /XYZ 143.462 489.166 null] >> endobj 1759 0 obj << /D [1736 0 R /XYZ 205.857 489.166 null] >> endobj 1760 0 obj << /D [1736 0 R /XYZ 363.162 489.166 null] >> endobj 1761 0 obj << /D [1736 0 R /XYZ 166.782 478.207 null] >> endobj 1762 0 obj << /D [1736 0 R /XYZ 219.064 478.207 null] >> endobj 1763 0 obj << /D [1736 0 R /XYZ 332.907 467.248 null] >> endobj 1764 0 obj << /D [1736 0 R /XYZ 432.925 467.248 null] >> endobj 1765 0 obj << /D [1736 0 R /XYZ 486.237 467.248 null] >> endobj 1766 0 obj << /D [1736 0 R /XYZ 209.573 456.289 null] >> endobj 1767 0 obj << /D [1736 0 R /XYZ 316.949 456.289 null] >> endobj 1768 0 obj << /D [1736 0 R /XYZ 413.008 456.289 null] >> endobj 1769 0 obj << /D [1736 0 R /XYZ 95.641 448.498 null] >> endobj 1277 0 obj << /D [1736 0 R /XYZ 95.641 377.763 null] >> endobj 118 0 obj << /D [1736 0 R /XYZ 143.691 347.387 null] >> endobj 1770 0 obj << /D [1736 0 R /XYZ 95.641 341.209 null] >> endobj 1771 0 obj << /D [1736 0 R /XYZ 394.996 319.442 null] >> endobj 1772 0 obj << /D [1736 0 R /XYZ 305.964 308.483 null] >> endobj 1773 0 obj << /D [1736 0 R /XYZ 234.766 297.524 null] >> endobj 1774 0 obj << /D [1736 0 R /XYZ 95.641 278.775 null] >> endobj 1775 0 obj << /D [1736 0 R /XYZ 95.641 218.999 null] >> endobj 1776 0 obj << /D [1736 0 R /XYZ 95.641 209.036 null] >> endobj 1777 0 obj << /D [1736 0 R /XYZ 295.42 181.061 null] >> endobj 1778 0 obj << /D [1736 0 R /XYZ 95.641 118.476 null] >> endobj 1779 0 obj << /D [1736 0 R /XYZ 184.797 99.367 null] >> endobj 1780 0 obj << /D [1736 0 R /XYZ 95.641 84.209 null] >> endobj 1781 0 obj << /D [1736 0 R /XYZ 95.641 84.209 null] >> endobj 1735 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F26 1177 0 R /F35 1187 0 R /F45 1307 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1784 0 obj << /Length 736 /Filter /FlateDecode >> stream xÚÝVMo›@½ûWpÄRÙì÷‡zJ"¹JÜÊuOMH²’m"‰úï;Ë.¶cLJªÊ–õ›737 $Âð#‘Hr)j•"Ê=Á?7D3¤Z9ÀÕlp1b&2ÈHÍ;ܬø_?g/M¹&Tà˜¢á¯Ù—‹ב t@Α, oÇ£ôvüCBç8¨/8ØÀ)»­/ôÕ¬²¼#b-Õ¢ÿßž„û2·yv¦3ݺqæß´ea_ÿK[B_¶>Ó“ãÉlO$J kCV‡Iy®Hïsô)xGUhý¤3°úHæïXí¼­½Å\ñþ ·Èì²(WŽh÷3iýÊ’° †ô¡Ä±F\º‚}ó¶Ëí ÔGõ”‹à‰ùendstream endobj 1783 0 obj << /Type /Page /Contents 1784 0 R /Resources 1782 0 R /MediaBox [0 0 609.714 789.041] /Parent 1630 0 R >> endobj 1785 0 obj << /D [1783 0 R /XYZ 95.641 729.265 null] >> endobj 1786 0 obj << /D [1783 0 R /XYZ 95.641 619.159 null] >> endobj 1278 0 obj << /D [1783 0 R /XYZ 95.641 592.045 null] >> endobj 122 0 obj << /D [1783 0 R /XYZ 276.485 559.074 null] >> endobj 1787 0 obj << /D [1783 0 R /XYZ 95.641 556.392 null] >> endobj 1788 0 obj << /D [1783 0 R /XYZ 95.641 538.957 null] >> endobj 1789 0 obj << /D [1783 0 R /XYZ 95.641 532.93 null] >> endobj 1790 0 obj << /D [1783 0 R /XYZ 95.641 522.967 null] >> endobj 1791 0 obj << /D [1783 0 R /XYZ 181.121 509.759 null] >> endobj 1792 0 obj << /D [1783 0 R /XYZ 195.646 509.759 null] >> endobj 1793 0 obj << /D [1783 0 R /XYZ 201.026 509.759 null] >> endobj 1794 0 obj << /D [1783 0 R /XYZ 244.065 509.759 null] >> endobj 1795 0 obj << /D [1783 0 R /XYZ 281.723 509.759 null] >> endobj 126 0 obj << /D [1783 0 R /XYZ 146.232 488.837 null] >> endobj 1796 0 obj << /D [1783 0 R /XYZ 95.641 483.856 null] >> endobj 1797 0 obj << /D [1783 0 R /XYZ 95.641 478.875 null] >> endobj 1798 0 obj << /D [1783 0 R /XYZ 95.641 444.504 null] >> endobj 1799 0 obj << /D [1783 0 R /XYZ 95.641 439.522 null] >> endobj 1800 0 obj << /D [1783 0 R /XYZ 95.641 429.56 null] >> endobj 1801 0 obj << /D [1783 0 R /XYZ 181.121 414.715 null] >> endobj 1802 0 obj << /D [1783 0 R /XYZ 195.646 414.715 null] >> endobj 1803 0 obj << /D [1783 0 R /XYZ 201.026 414.715 null] >> endobj 1804 0 obj << /D [1783 0 R /XYZ 244.065 414.715 null] >> endobj 130 0 obj << /D [1783 0 R /XYZ 146.232 393.794 null] >> endobj 1805 0 obj << /D [1783 0 R /XYZ 95.641 388.812 null] >> endobj 1806 0 obj << /D [1783 0 R /XYZ 95.641 383.831 null] >> endobj 1807 0 obj << /D [1783 0 R /XYZ 95.641 349.46 null] >> endobj 1808 0 obj << /D [1783 0 R /XYZ 95.641 344.479 null] >> endobj 1809 0 obj << /D [1783 0 R /XYZ 95.641 334.516 null] >> endobj 1810 0 obj << /D [1783 0 R /XYZ 181.121 319.672 null] >> endobj 1811 0 obj << /D [1783 0 R /XYZ 195.646 319.672 null] >> endobj 1812 0 obj << /D [1783 0 R /XYZ 201.026 319.672 null] >> endobj 1813 0 obj << /D [1783 0 R /XYZ 244.065 319.672 null] >> endobj 1814 0 obj << /D [1783 0 R /XYZ 281.723 319.672 null] >> endobj 134 0 obj << /D [1783 0 R /XYZ 146.232 298.75 null] >> endobj 1815 0 obj << /D [1783 0 R /XYZ 95.641 293.769 null] >> endobj 1816 0 obj << /D [1783 0 R /XYZ 95.641 288.788 null] >> endobj 1817 0 obj << /D [1783 0 R /XYZ 95.641 254.416 null] >> endobj 1818 0 obj << /D [1783 0 R /XYZ 95.641 249.435 null] >> endobj 1819 0 obj << /D [1783 0 R /XYZ 95.641 239.472 null] >> endobj 1820 0 obj << /D [1783 0 R /XYZ 181.121 224.628 null] >> endobj 1821 0 obj << /D [1783 0 R /XYZ 195.646 224.628 null] >> endobj 1822 0 obj << /D [1783 0 R /XYZ 201.026 224.628 null] >> endobj 1823 0 obj << /D [1783 0 R /XYZ 244.065 224.628 null] >> endobj 138 0 obj << /D [1783 0 R /XYZ 146.232 203.707 null] >> endobj 1824 0 obj << /D [1783 0 R /XYZ 95.641 198.725 null] >> endobj 1825 0 obj << /D [1783 0 R /XYZ 95.641 193.744 null] >> endobj 1826 0 obj << /D [1783 0 R /XYZ 95.641 159.373 null] >> endobj 1827 0 obj << /D [1783 0 R /XYZ 95.641 154.392 null] >> endobj 1828 0 obj << /D [1783 0 R /XYZ 95.641 144.429 null] >> endobj 1829 0 obj << /D [1783 0 R /XYZ 164.981 129.585 null] >> endobj 1830 0 obj << /D [1783 0 R /XYZ 179.507 129.585 null] >> endobj 1831 0 obj << /D [1783 0 R /XYZ 184.887 129.585 null] >> endobj 1832 0 obj << /D [1783 0 R /XYZ 212.368 129.585 null] >> endobj 142 0 obj << /D [1783 0 R /XYZ 146.232 108.663 null] >> endobj 1833 0 obj << /D [1783 0 R /XYZ 95.641 103.682 null] >> endobj 1834 0 obj << /D [1783 0 R /XYZ 95.641 98.7 null] >> endobj 1835 0 obj << /D [1783 0 R /XYZ 95.641 64.329 null] >> endobj 1836 0 obj << /D [1783 0 R /XYZ 95.641 59.348 null] >> endobj 1782 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F35 1187 0 R /F26 1177 0 R /F45 1307 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1839 0 obj << /Length 626 /Filter /FlateDecode >> stream xÚÝVËnÚ@Ýó^‚TßÌ{Æê*I ¢âQQ·›¦  E"vDhÚþ}¯í1¶±)VÔ‡T±[sæÌ=çŒ/C‚?êx” Žf0%åC8œõ¨E‡ƒ4:º zWCî9xŠ;Á:C«OýÛ/áã!Ú\&IŸÁàsðöj(Œc¨R  %·èÉxèOÆ3ÿ}Ž«J \j‹{·˜×Óéx6Ê™þÐ_ø³íßúéÚžËÔ€àÔqÕž q¹& pd <*Ž‚„,ë,Í>Loü…Õ‘ÎNs Jz}¬,E¡LZÄ‘¤é…nÎmc!œÓÅ>¯š”€Vvz< ZÊP +Ë ¯­×²ôÚõ4ÇŒà…¢$ŽâÃ6RSŠ%u‘Hh†Næ×AScuïõ. M6&ÄëªòåIJ ¿ÞªÄe?GûCþálcûpHòñŽÞZq›þz]¹zFAÒBYJßž°êªýÔãÂ@<¢†^P/Ž ³ê ±5Zknðóñ›¦xÆ+Å/÷-ê=àJÿé>ð»>JhöÁV-ÌtQÓ¢âô<‡ûmx¿‹ò·ûùø-lÉñ* ³U›¯å²T~²¯/¢6…u>ÆIÉÕF”Þí°^lýŸeº:†y%ÿ:°¬è›ù|òë¸B¤as9Úx²KÑ\°‡Öí_6cpÑ}hR ÉÅÐpìåÕÐvÉf» wÖÀÂI×öªoI½iqvâ4æˆf?^†\¡Á0ñŒ QµëÐÙKçîT¤ºþ'é´m¬endstream endobj 1838 0 obj << /Type /Page /Contents 1839 0 R /Resources 1837 0 R /MediaBox [0 0 609.714 789.041] /Parent 1630 0 R >> endobj 1840 0 obj << /D [1838 0 R /XYZ 95.641 729.265 null] >> endobj 1841 0 obj << /D [1838 0 R /XYZ 95.641 716.314 null] >> endobj 1842 0 obj << /D [1838 0 R /XYZ 181.121 706.351 null] >> endobj 1843 0 obj << /D [1838 0 R /XYZ 195.646 706.351 null] >> endobj 1844 0 obj << /D [1838 0 R /XYZ 201.026 706.351 null] >> endobj 1845 0 obj << /D [1838 0 R /XYZ 244.065 706.351 null] >> endobj 146 0 obj << /D [1838 0 R /XYZ 146.232 685.43 null] >> endobj 1846 0 obj << /D [1838 0 R /XYZ 95.641 680.448 null] >> endobj 1847 0 obj << /D [1838 0 R /XYZ 95.641 675.467 null] >> endobj 1848 0 obj << /D [1838 0 R /XYZ 95.641 641.096 null] >> endobj 1849 0 obj << /D [1838 0 R /XYZ 95.641 636.115 null] >> endobj 1850 0 obj << /D [1838 0 R /XYZ 95.641 626.152 null] >> endobj 1851 0 obj << /D [1838 0 R /XYZ 181.121 611.308 null] >> endobj 1852 0 obj << /D [1838 0 R /XYZ 195.646 611.308 null] >> endobj 1853 0 obj << /D [1838 0 R /XYZ 201.026 611.308 null] >> endobj 150 0 obj << /D [1838 0 R /XYZ 146.232 590.386 null] >> endobj 1854 0 obj << /D [1838 0 R /XYZ 95.641 585.405 null] >> endobj 1855 0 obj << /D [1838 0 R /XYZ 95.641 580.423 null] >> endobj 1856 0 obj << /D [1838 0 R /XYZ 95.641 546.052 null] >> endobj 1857 0 obj << /D [1838 0 R /XYZ 95.641 541.071 null] >> endobj 1858 0 obj << /D [1838 0 R /XYZ 95.641 531.108 null] >> endobj 1859 0 obj << /D [1838 0 R /XYZ 175.741 516.264 null] >> endobj 1860 0 obj << /D [1838 0 R /XYZ 199.95 516.264 null] >> endobj 1861 0 obj << /D [1838 0 R /XYZ 205.33 516.264 null] >> endobj 154 0 obj << /D [1838 0 R /XYZ 146.232 495.342 null] >> endobj 1862 0 obj << /D [1838 0 R /XYZ 95.641 490.361 null] >> endobj 1863 0 obj << /D [1838 0 R /XYZ 95.641 485.38 null] >> endobj 1864 0 obj << /D [1838 0 R /XYZ 95.641 451.009 null] >> endobj 1865 0 obj << /D [1838 0 R /XYZ 95.641 446.027 null] >> endobj 1866 0 obj << /D [1838 0 R /XYZ 95.641 436.065 null] >> endobj 1867 0 obj << /D [1838 0 R /XYZ 164.981 421.22 null] >> endobj 1868 0 obj << /D [1838 0 R /XYZ 179.507 421.22 null] >> endobj 1869 0 obj << /D [1838 0 R /XYZ 184.887 421.22 null] >> endobj 158 0 obj << /D [1838 0 R /XYZ 146.232 400.299 null] >> endobj 1870 0 obj << /D [1838 0 R /XYZ 95.641 395.318 null] >> endobj 1871 0 obj << /D [1838 0 R /XYZ 95.641 390.336 null] >> endobj 1872 0 obj << /D [1838 0 R /XYZ 95.641 355.965 null] >> endobj 1873 0 obj << /D [1838 0 R /XYZ 95.641 350.984 null] >> endobj 1874 0 obj << /D [1838 0 R /XYZ 95.641 341.021 null] >> endobj 1875 0 obj << /D [1838 0 R /XYZ 170.361 326.177 null] >> endobj 1876 0 obj << /D [1838 0 R /XYZ 189.728 326.177 null] >> endobj 1877 0 obj << /D [1838 0 R /XYZ 195.108 326.177 null] >> endobj 1878 0 obj << /D [1838 0 R /XYZ 232.767 326.177 null] >> endobj 162 0 obj << /D [1838 0 R /XYZ 146.232 305.255 null] >> endobj 1879 0 obj << /D [1838 0 R /XYZ 95.641 300.274 null] >> endobj 1880 0 obj << /D [1838 0 R /XYZ 95.641 295.293 null] >> endobj 1881 0 obj << /D [1838 0 R /XYZ 95.641 260.922 null] >> endobj 1882 0 obj << /D [1838 0 R /XYZ 95.641 255.94 null] >> endobj 1883 0 obj << /D [1838 0 R /XYZ 95.641 245.978 null] >> endobj 1884 0 obj << /D [1838 0 R /XYZ 170.361 231.133 null] >> endobj 1885 0 obj << /D [1838 0 R /XYZ 189.728 231.133 null] >> endobj 1886 0 obj << /D [1838 0 R /XYZ 195.108 231.133 null] >> endobj 1887 0 obj << /D [1838 0 R /XYZ 232.767 231.133 null] >> endobj 166 0 obj << /D [1838 0 R /XYZ 146.232 210.212 null] >> endobj 1888 0 obj << /D [1838 0 R /XYZ 95.641 205.23 null] >> endobj 1889 0 obj << /D [1838 0 R /XYZ 95.641 200.249 null] >> endobj 1890 0 obj << /D [1838 0 R /XYZ 95.641 165.878 null] >> endobj 1891 0 obj << /D [1838 0 R /XYZ 95.641 160.897 null] >> endobj 1892 0 obj << /D [1838 0 R /XYZ 95.641 150.934 null] >> endobj 1893 0 obj << /D [1838 0 R /XYZ 170.361 136.09 null] >> endobj 1894 0 obj << /D [1838 0 R /XYZ 184.887 136.09 null] >> endobj 1895 0 obj << /D [1838 0 R /XYZ 190.266 136.09 null] >> endobj 1896 0 obj << /D [1838 0 R /XYZ 222.608 136.09 null] >> endobj 1897 0 obj << /D [1838 0 R /XYZ 249.57 136.09 null] >> endobj 170 0 obj << /D [1838 0 R /XYZ 146.232 115.168 null] >> endobj 1898 0 obj << /D [1838 0 R /XYZ 95.641 110.187 null] >> endobj 1899 0 obj << /D [1838 0 R /XYZ 95.641 105.206 null] >> endobj 1900 0 obj << /D [1838 0 R /XYZ 95.641 70.834 null] >> endobj 1901 0 obj << /D [1838 0 R /XYZ 95.641 65.853 null] >> endobj 1837 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1904 0 obj << /Length 523 /Filter /FlateDecode >> stream xÚÝ–ËjÛ@†÷~ŠYÊPÌýBWI‹cW›Òt!RU1(Rc)”¾}g¤‰|‘ bh ^ŒÅüóÏ9ßé AØþ2$'HQT t÷0Â(³3Óñ ¢hE¡•\Å£‹ 3È€‘ Å?]üã[p}ŸüªÓÍ8¤ÆßãO®‘¶B鄜ƒÌ«ç³I4Ÿ-¢/­n×P`ByÝçÕrºº¼¹™-¦­ó*šD«h1&ÁuäÖŽ¢¸ –2·…Aaía:!S¤)Cx—Û8ŸºZ.ç> 7‹•›¤´1^QnvæýjRs?‹îsÀôñ-¼€>õ’}‚A ³kJ¬è{qÓm<ä£.¶ÀC£€k …М5Ò¼ÌÖwIÞ2/ý©†íPÿ.ý?2ÚŽÉfLt==¤öxŠºê‡»+( è@ÊEY÷ˆ=i*OqVf8è—àp \¾çhx{yb20Óôñõt¹øz•cÈÀrzÙá')Aé=LéãS’¯ë?-'¼cÕ> endobj 1905 0 obj << /D [1903 0 R /XYZ 95.641 729.265 null] >> endobj 1906 0 obj << /D [1903 0 R /XYZ 95.641 716.314 null] >> endobj 1907 0 obj << /D [1903 0 R /XYZ 170.361 706.351 null] >> endobj 1908 0 obj << /D [1903 0 R /XYZ 180.045 706.351 null] >> endobj 1909 0 obj << /D [1903 0 R /XYZ 185.425 706.351 null] >> endobj 1910 0 obj << /D [1903 0 R /XYZ 217.766 706.351 null] >> endobj 1911 0 obj << /D [1903 0 R /XYZ 244.728 706.351 null] >> endobj 174 0 obj << /D [1903 0 R /XYZ 146.232 685.43 null] >> endobj 1912 0 obj << /D [1903 0 R /XYZ 95.641 680.448 null] >> endobj 1913 0 obj << /D [1903 0 R /XYZ 95.641 675.467 null] >> endobj 1914 0 obj << /D [1903 0 R /XYZ 95.641 641.096 null] >> endobj 1915 0 obj << /D [1903 0 R /XYZ 95.641 636.115 null] >> endobj 1916 0 obj << /D [1903 0 R /XYZ 95.641 626.152 null] >> endobj 1917 0 obj << /D [1903 0 R /XYZ 170.361 611.308 null] >> endobj 1918 0 obj << /D [1903 0 R /XYZ 184.887 611.308 null] >> endobj 1919 0 obj << /D [1903 0 R /XYZ 190.266 611.308 null] >> endobj 178 0 obj << /D [1903 0 R /XYZ 146.232 590.386 null] >> endobj 1920 0 obj << /D [1903 0 R /XYZ 95.641 585.405 null] >> endobj 1921 0 obj << /D [1903 0 R /XYZ 95.641 580.423 null] >> endobj 1922 0 obj << /D [1903 0 R /XYZ 95.641 546.052 null] >> endobj 1923 0 obj << /D [1903 0 R /XYZ 95.641 541.071 null] >> endobj 1924 0 obj << /D [1903 0 R /XYZ 95.641 531.108 null] >> endobj 1925 0 obj << /D [1903 0 R /XYZ 170.361 516.264 null] >> endobj 1926 0 obj << /D [1903 0 R /XYZ 180.045 516.264 null] >> endobj 1927 0 obj << /D [1903 0 R /XYZ 185.425 516.264 null] >> endobj 1928 0 obj << /D [1903 0 R /XYZ 213.175 516.264 null] >> endobj 182 0 obj << /D [1903 0 R /XYZ 146.232 495.342 null] >> endobj 1929 0 obj << /D [1903 0 R /XYZ 95.641 490.361 null] >> endobj 1930 0 obj << /D [1903 0 R /XYZ 95.641 485.38 null] >> endobj 1931 0 obj << /D [1903 0 R /XYZ 95.641 451.009 null] >> endobj 1932 0 obj << /D [1903 0 R /XYZ 95.641 446.027 null] >> endobj 1933 0 obj << /D [1903 0 R /XYZ 95.641 436.065 null] >> endobj 1934 0 obj << /D [1903 0 R /XYZ 170.361 421.22 null] >> endobj 1935 0 obj << /D [1903 0 R /XYZ 180.045 421.22 null] >> endobj 1936 0 obj << /D [1903 0 R /XYZ 185.425 421.22 null] >> endobj 1937 0 obj << /D [1903 0 R /XYZ 213.175 421.22 null] >> endobj 186 0 obj << /D [1903 0 R /XYZ 146.232 400.299 null] >> endobj 1938 0 obj << /D [1903 0 R /XYZ 95.641 395.318 null] >> endobj 1939 0 obj << /D [1903 0 R /XYZ 95.641 390.336 null] >> endobj 1940 0 obj << /D [1903 0 R /XYZ 95.641 355.965 null] >> endobj 1941 0 obj << /D [1903 0 R /XYZ 95.641 350.984 null] >> endobj 1942 0 obj << /D [1903 0 R /XYZ 95.641 341.021 null] >> endobj 1943 0 obj << /D [1903 0 R /XYZ 170.361 326.177 null] >> endobj 1944 0 obj << /D [1903 0 R /XYZ 180.045 326.177 null] >> endobj 1945 0 obj << /D [1903 0 R /XYZ 185.425 326.177 null] >> endobj 1946 0 obj << /D [1903 0 R /XYZ 213.175 326.177 null] >> endobj 190 0 obj << /D [1903 0 R /XYZ 146.232 305.255 null] >> endobj 1947 0 obj << /D [1903 0 R /XYZ 95.641 300.274 null] >> endobj 1948 0 obj << /D [1903 0 R /XYZ 95.641 295.293 null] >> endobj 1949 0 obj << /D [1903 0 R /XYZ 95.641 260.922 null] >> endobj 1950 0 obj << /D [1903 0 R /XYZ 95.641 255.94 null] >> endobj 1951 0 obj << /D [1903 0 R /XYZ 95.641 245.978 null] >> endobj 1952 0 obj << /D [1903 0 R /XYZ 170.361 231.133 null] >> endobj 1953 0 obj << /D [1903 0 R /XYZ 180.045 231.133 null] >> endobj 1954 0 obj << /D [1903 0 R /XYZ 185.425 231.133 null] >> endobj 1955 0 obj << /D [1903 0 R /XYZ 213.175 231.133 null] >> endobj 194 0 obj << /D [1903 0 R /XYZ 146.232 210.212 null] >> endobj 1956 0 obj << /D [1903 0 R /XYZ 95.641 205.23 null] >> endobj 1957 0 obj << /D [1903 0 R /XYZ 95.641 200.249 null] >> endobj 1958 0 obj << /D [1903 0 R /XYZ 95.641 165.878 null] >> endobj 1959 0 obj << /D [1903 0 R /XYZ 95.641 160.897 null] >> endobj 1960 0 obj << /D [1903 0 R /XYZ 95.641 150.934 null] >> endobj 1961 0 obj << /D [1903 0 R /XYZ 170.361 136.09 null] >> endobj 1962 0 obj << /D [1903 0 R /XYZ 180.045 136.09 null] >> endobj 1963 0 obj << /D [1903 0 R /XYZ 185.425 136.09 null] >> endobj 1964 0 obj << /D [1903 0 R /XYZ 213.175 136.09 null] >> endobj 198 0 obj << /D [1903 0 R /XYZ 146.232 115.168 null] >> endobj 1965 0 obj << /D [1903 0 R /XYZ 95.641 110.187 null] >> endobj 1966 0 obj << /D [1903 0 R /XYZ 95.641 105.206 null] >> endobj 1967 0 obj << /D [1903 0 R /XYZ 95.641 70.834 null] >> endobj 1968 0 obj << /D [1903 0 R /XYZ 95.641 65.853 null] >> endobj 1902 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1972 0 obj << /Length 1870 /Filter /FlateDecode >> stream xÚÍËnÛ8ðÞ¯ðm fùõ@OiáYd“EêËb»Ù¦m¡²äꑤûõ;ádÙ–í,z)tÉ΋ó"ňÃ'F±f/F¡Œ™ ôh¾yÇG+€|~')¦£A§ïÞߪx³8P£éÒbL{ŸÖɶ6åÕXjîIvõÏô÷÷·~4Š1@DßgZ+‡}w;¹¿{˜|!¼>A-˜Ò¡ÃûóéñóÓÍÜ=|&ÊO“ÛÉÓäáJxŸ&¸÷Ýdډ鋈ùJŒÆ´‡ŠŒUÈY)Y,üN!_ïälúøøxï´@((űÃX™ÜíŽYùþ•k~lÍTänþ:¦ ÇÂa\:¾HA•õÎÊã `a4û‚E¾"uÊ+y&éN±^'9 ·b¾7IvÌp,€®Ô£±–,â’$[,޹‚dBźõ`½\5³aþùý­q7Mv¼_r¦:ó'ù☄ŒCÆ"}>A£uÐEq5ö¥ðò¢Ü€i`,½¤LÁ?ëõÆÔ霖Š%¡¥ymVh_œ%¿r® Ø‘Ôi¾¢¥ç$kLÅïÎmNò( ˜›‡LÅX ¾€‚[S¢Bàâ¾—Vô·”æš굡uÕdõÐŽšÑì¶½ù¼N‹¼0ˆ¡£ÖU“ÁYøgíÍ™îœuðÌöhÌÑ%Q´uòìT©_ (¯.hAIú'VÉ1ÙL!‹¹Ø³ÙªÙ˜¼®>€s+M¶‘*ÏÛЊu{XØZBÅ¢™×°$€Û¢½e“e4ªLM0ÂÑN ÇŠ@iE y±Ù6µY0šÞ6'M­´ÏüPœ q‹Ó×pÐähP!ι8`ð.‘¥e¬ÉÒ2Žt˜Iæë¼€”öý³1Ýgu™Ì[ª) àL̼@ïÆÅ>w‚.é€6›À™eYÕàÃ×.pBðX©Þd"~ÁD“Ô€‘. r-{´ìíä@hX™ýÀ°Ã'M¦k3$–€¬Ýe¸bqA®¥ó("I1_7eî’ûvM’æm´øa‚Ð*"%1o)TeYÓ0 ÅmÖR-=Õ×q¶I™@*lw£Ú=ä`§6®b®€:Æ{6´hÅ¥X<¼ÁXh?6¸´f8gïJZ›¿låÜû×CbÖåÂ*#@š-»0·¸»S¡9§år@_™2{mÜr»)òšÜQO7@Ý7%q.¯ ²tB\u¬.Do—㊇ŠI!{M¾ô/+Véí‡Ûp[ã3ZøHgëï Lí±`Iu .¹?¶ªøßk¨½›,ÛºÚ d—­žåº>Œ;d›m˜üf3JìR@L·¨ Ýz]¬LÙ¯ Å]öƒ…ºË°¢“ <³c/úì!ya@Aî^¬ëÒŽ>3Kt N–Á™®ÖöÖãYã€EŽyGÍvœ“‡Þ¶HmA ¥¹Øs@‡E!ELÚ°çÔ´÷È½Ê 1³1Õ€ßòâe¨Ø) ——¶J<õ ¯ªs4[çìÝÛ…ÁÎç0Mm>·Î‡ùg°Äޱ½‰u?N&ßXs§oÓø`#º"<¼]ÇoÛŸÕ?Å>3?µ}5Ä]²HžM0’áÁ[Ï) ­«Ãñ´~&Áaªô•V ëûÐBÛfW(P2J!ët‹å‰ 3S¿“;R6eÀ€ú,À*+wâ2@¸Öô£•m«Æ*bzV”jzqŒ¤"·­K|aDÕ_¶ν`ú)Éæ Id¥9¶i ²§Ð–ÅíýãÍôèLIf{§KóëÂùHýÖ—²C.]7ËüèÒK—ŽY苽§.wñ¦XñÜÈ^Ù5?¬ß>´î!laÜ+™©Î=ƒAñ€vææ™Õ¯lïŒ\®¥ÞòÿÚè­ª“_Ú@¼•i­pd"ìÜ.˜¨ÿˆ=nc,¶Zî=cŸ||Á©·pÞßÿn²Rendstream endobj 1971 0 obj << /Type /Page /Contents 1972 0 R /Resources 1970 0 R /MediaBox [0 0 609.714 789.041] /Parent 1969 0 R >> endobj 1973 0 obj << /D [1971 0 R /XYZ 95.641 729.265 null] >> endobj 1974 0 obj << /D [1971 0 R /XYZ 95.641 716.314 null] >> endobj 1975 0 obj << /D [1971 0 R /XYZ 170.361 706.351 null] >> endobj 1976 0 obj << /D [1971 0 R /XYZ 180.045 706.351 null] >> endobj 1977 0 obj << /D [1971 0 R /XYZ 185.425 706.351 null] >> endobj 1978 0 obj << /D [1971 0 R /XYZ 213.175 706.351 null] >> endobj 202 0 obj << /D [1971 0 R /XYZ 146.232 685.43 null] >> endobj 1979 0 obj << /D [1971 0 R /XYZ 95.641 680.448 null] >> endobj 1980 0 obj << /D [1971 0 R /XYZ 95.641 675.467 null] >> endobj 1981 0 obj << /D [1971 0 R /XYZ 95.641 622.665 null] >> endobj 1982 0 obj << /D [1971 0 R /XYZ 95.641 622.665 null] >> endobj 1983 0 obj << /D [1971 0 R /XYZ 166.29 611.706 null] >> endobj 1984 0 obj << /D [1971 0 R /XYZ 189.118 611.706 null] >> endobj 1985 0 obj << /D [1971 0 R /XYZ 230.521 611.706 null] >> endobj 1986 0 obj << /D [1971 0 R /XYZ 351.043 600.747 null] >> endobj 1987 0 obj << /D [1971 0 R /XYZ 391.499 600.747 null] >> endobj 1988 0 obj << /D [1971 0 R /XYZ 497.933 589.788 null] >> endobj 1989 0 obj << /D [1971 0 R /XYZ 163.273 578.829 null] >> endobj 1990 0 obj << /D [1971 0 R /XYZ 301.901 578.829 null] >> endobj 1991 0 obj << /D [1971 0 R /XYZ 162.473 567.87 null] >> endobj 1992 0 obj << /D [1971 0 R /XYZ 372.545 567.87 null] >> endobj 1993 0 obj << /D [1971 0 R /XYZ 497.933 556.912 null] >> endobj 1994 0 obj << /D [1971 0 R /XYZ 155.829 545.953 null] >> endobj 1995 0 obj << /D [1971 0 R /XYZ 454.533 545.953 null] >> endobj 1996 0 obj << /D [1971 0 R /XYZ 249.093 534.994 null] >> endobj 1997 0 obj << /D [1971 0 R /XYZ 430.029 534.994 null] >> endobj 1998 0 obj << /D [1971 0 R /XYZ 479.752 534.994 null] >> endobj 1999 0 obj << /D [1971 0 R /XYZ 95.641 516.244 null] >> endobj 2000 0 obj << /D [1971 0 R /XYZ 95.641 516.244 null] >> endobj 2001 0 obj << /D [1971 0 R /XYZ 188.829 508.095 null] >> endobj 2002 0 obj << /D [1971 0 R /XYZ 95.641 467.427 null] >> endobj 2003 0 obj << /D [1971 0 R /XYZ 95.641 467.427 null] >> endobj 2004 0 obj << /D [1971 0 R /XYZ 181.375 459.278 null] >> endobj 2005 0 obj << /D [1971 0 R /XYZ 179.327 426.401 null] >> endobj 2006 0 obj << /D [1971 0 R /XYZ 95.641 418.61 null] >> endobj 2007 0 obj << /D [1971 0 R /XYZ 95.641 418.61 null] >> endobj 2008 0 obj << /D [1971 0 R /XYZ 158.773 410.461 null] >> endobj 2009 0 obj << /D [1971 0 R /XYZ 174.083 410.461 null] >> endobj 2010 0 obj << /D [1971 0 R /XYZ 189.394 410.461 null] >> endobj 2011 0 obj << /D [1971 0 R /XYZ 204.705 410.461 null] >> endobj 2012 0 obj << /D [1971 0 R /XYZ 236.452 410.461 null] >> endobj 1279 0 obj << /D [1971 0 R /XYZ 95.641 402.67 null] >> endobj 206 0 obj << /D [1971 0 R /XYZ 333.154 372.294 null] >> endobj 2013 0 obj << /D [1971 0 R /XYZ 95.641 369.612 null] >> endobj 2014 0 obj << /D [1971 0 R /XYZ 95.641 352.177 null] >> endobj 2015 0 obj << /D [1971 0 R /XYZ 95.641 346.15 null] >> endobj 2016 0 obj << /D [1971 0 R /XYZ 95.641 336.187 null] >> endobj 2017 0 obj << /D [1971 0 R /XYZ 175.741 322.979 null] >> endobj 2018 0 obj << /D [1971 0 R /XYZ 190.266 322.979 null] >> endobj 2019 0 obj << /D [1971 0 R /XYZ 195.646 322.979 null] >> endobj 210 0 obj << /D [1971 0 R /XYZ 146.232 302.057 null] >> endobj 2020 0 obj << /D [1971 0 R /XYZ 95.641 297.076 null] >> endobj 2021 0 obj << /D [1971 0 R /XYZ 95.641 292.095 null] >> endobj 2022 0 obj << /D [1971 0 R /XYZ 95.641 257.724 null] >> endobj 2023 0 obj << /D [1971 0 R /XYZ 95.641 252.742 null] >> endobj 2024 0 obj << /D [1971 0 R /XYZ 95.641 242.78 null] >> endobj 2025 0 obj << /D [1971 0 R /XYZ 175.741 227.935 null] >> endobj 2026 0 obj << /D [1971 0 R /XYZ 190.266 227.935 null] >> endobj 2027 0 obj << /D [1971 0 R /XYZ 195.646 227.935 null] >> endobj 214 0 obj << /D [1971 0 R /XYZ 146.232 207.014 null] >> endobj 2028 0 obj << /D [1971 0 R /XYZ 95.641 202.032 null] >> endobj 2029 0 obj << /D [1971 0 R /XYZ 95.641 197.051 null] >> endobj 2030 0 obj << /D [1971 0 R /XYZ 95.641 162.68 null] >> endobj 2031 0 obj << /D [1971 0 R /XYZ 95.641 157.699 null] >> endobj 2032 0 obj << /D [1971 0 R /XYZ 95.641 147.736 null] >> endobj 2033 0 obj << /D [1971 0 R /XYZ 175.741 132.892 null] >> endobj 2034 0 obj << /D [1971 0 R /XYZ 190.266 132.892 null] >> endobj 2035 0 obj << /D [1971 0 R /XYZ 195.646 132.892 null] >> endobj 218 0 obj << /D [1971 0 R /XYZ 146.232 111.97 null] >> endobj 2036 0 obj << /D [1971 0 R /XYZ 95.641 106.989 null] >> endobj 2037 0 obj << /D [1971 0 R /XYZ 95.641 102.007 null] >> endobj 2038 0 obj << /D [1971 0 R /XYZ 95.641 67.636 null] >> endobj 2039 0 obj << /D [1971 0 R /XYZ 95.641 62.655 null] >> endobj 1970 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R /F26 1177 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2042 0 obj << /Length 1041 /Filter /FlateDecode >> stream xÚÕW[Ú8~Ÿ_‘G&®ïŽÕ§^`Äj:³šE}ÙV+š&*$ˆ„©ößïñ%!(°—Šcûøóñw¾sìÃDZ ÉI¤¨FTŠ(]Ýàh3w7$X„¡Dш!‘(kð~zófÌt¤‘–,šÎÝ4û{ðáy¶®ÍfS ¿Nÿx3æI”€¡´†œ#!X°¾ŸŒG÷“‡Ñ_Þ® (bB»?ŸïžÞ}ú4y¸óÈO£ñèiô0$ƒ#»öf4m¥Ìn¡£¸õöð81SIh)Ešðö@\ìül4¾|7 ǰÓXÙYFU:˜Ì6i•›|bA‚Ñ,pŸ Xrb£D!žÐy¸;®bÅ!r*Š9A gÎ4-Wëmm<]yñb6U耯á_9÷íl3$z°Ø®LQ÷=ˆ lDE †èœ¤eõÛp¾î³Âµc%¹ŒL®à¥žý>Z_öøŽ®\®#æóãäc*Q¢^²UE3³èÃ1¨<š]JÌäa:Œ%ÆÀÚÓ‡§”n¬oûX#%ÁVyaéy°Ê¤e‘ãˆy˜‹ÿ?Ÿ›£¦ùj¶ì#&Pä´:#F1Ò¼¯«ÚGÛrnÙ´17æÖzFBÄBìšÌîtSú¶ñ-t”ê’*óRæÙјáüªh|6ýœK Þ1uq¨w±9.Ci¯¨äj¸SBtpWy&pýi…æQ¬Q"}èO©Š˜dç´D(R„ž–ÒI5ì4eæÁµj{­º\­³¼ª_§.»P-g5þµŠÑ+‹Å14ˆ:ƒ&ôQßÈ ßôÿ@çÈçNV,&òômd£2+ÒÐûfêÆ^'õPd–e:«ó²¨¼ª[P”`_J¦Ï@4¬ÙäP«eQ® üOýè|[¤º ht:ÿ×ÏÁ¸4ab „…î¨ùÉvZ?‹y,•¯.-LC²5ÔÍŽ¥cÌl´8¤.DECTzwhcÄÚ÷‡óˆ“b°vò%ÏLæG\B»K[èìX‡ÎAv†¼ìd¤³*ÊÚ…Ä÷ìÜ(±’s©ëü±Âàû¾ã}5¼9,2D±uc^†Ï *Ôg ÃNiÞËô=Ò%¢¤‘·©jp¨¶gh±±eZväh‡[bœ•£µ©ÖϤecÇÓ²t®gya‘6ˆíc Ng Ît Ú¼‰å­ïå…oÃnð ¦ø Ì}Á˜nàÐÐ6ûa¯¼Þf~©èNs—ÎnŒÂ|¸ü4°ß.åûSv¥/ÞsÝÚ##wî]T«í2Ü yÕ> endobj 2043 0 obj << /D [2041 0 R /XYZ 95.641 729.265 null] >> endobj 2044 0 obj << /D [2041 0 R /XYZ 95.641 716.314 null] >> endobj 2045 0 obj << /D [2041 0 R /XYZ 175.741 706.351 null] >> endobj 2046 0 obj << /D [2041 0 R /XYZ 204.792 706.351 null] >> endobj 2047 0 obj << /D [2041 0 R /XYZ 210.172 706.351 null] >> endobj 222 0 obj << /D [2041 0 R /XYZ 146.232 685.43 null] >> endobj 2048 0 obj << /D [2041 0 R /XYZ 95.641 680.448 null] >> endobj 2049 0 obj << /D [2041 0 R /XYZ 95.641 675.467 null] >> endobj 2050 0 obj << /D [2041 0 R /XYZ 95.641 641.096 null] >> endobj 2051 0 obj << /D [2041 0 R /XYZ 95.641 636.115 null] >> endobj 2052 0 obj << /D [2041 0 R /XYZ 95.641 626.152 null] >> endobj 2053 0 obj << /D [2041 0 R /XYZ 175.741 611.308 null] >> endobj 2054 0 obj << /D [2041 0 R /XYZ 204.792 611.308 null] >> endobj 2055 0 obj << /D [2041 0 R /XYZ 210.172 611.308 null] >> endobj 226 0 obj << /D [2041 0 R /XYZ 146.232 590.386 null] >> endobj 2056 0 obj << /D [2041 0 R /XYZ 95.641 585.405 null] >> endobj 2057 0 obj << /D [2041 0 R /XYZ 95.641 580.423 null] >> endobj 2058 0 obj << /D [2041 0 R /XYZ 95.641 546.052 null] >> endobj 2059 0 obj << /D [2041 0 R /XYZ 95.641 541.071 null] >> endobj 2060 0 obj << /D [2041 0 R /XYZ 95.641 531.108 null] >> endobj 2061 0 obj << /D [2041 0 R /XYZ 175.741 516.264 null] >> endobj 2062 0 obj << /D [2041 0 R /XYZ 204.792 516.264 null] >> endobj 2063 0 obj << /D [2041 0 R /XYZ 210.172 516.264 null] >> endobj 230 0 obj << /D [2041 0 R /XYZ 146.232 495.342 null] >> endobj 2064 0 obj << /D [2041 0 R /XYZ 95.641 490.361 null] >> endobj 2065 0 obj << /D [2041 0 R /XYZ 95.641 485.38 null] >> endobj 2066 0 obj << /D [2041 0 R /XYZ 95.641 451.009 null] >> endobj 2067 0 obj << /D [2041 0 R /XYZ 95.641 446.027 null] >> endobj 2068 0 obj << /D [2041 0 R /XYZ 95.641 436.065 null] >> endobj 2069 0 obj << /D [2041 0 R /XYZ 170.361 421.22 null] >> endobj 2070 0 obj << /D [2041 0 R /XYZ 204.254 421.22 null] >> endobj 2071 0 obj << /D [2041 0 R /XYZ 209.634 421.22 null] >> endobj 2072 0 obj << /D [2041 0 R /XYZ 274.192 421.22 null] >> endobj 2073 0 obj << /D [2041 0 R /XYZ 338.75 421.22 null] >> endobj 2074 0 obj << /D [2041 0 R /XYZ 403.666 421.22 null] >> endobj 234 0 obj << /D [2041 0 R /XYZ 146.232 400.299 null] >> endobj 2075 0 obj << /D [2041 0 R /XYZ 95.641 395.318 null] >> endobj 2076 0 obj << /D [2041 0 R /XYZ 95.641 390.336 null] >> endobj 2077 0 obj << /D [2041 0 R /XYZ 95.641 355.965 null] >> endobj 2078 0 obj << /D [2041 0 R /XYZ 95.641 350.984 null] >> endobj 2079 0 obj << /D [2041 0 R /XYZ 95.641 341.021 null] >> endobj 2080 0 obj << /D [2041 0 R /XYZ 170.361 326.177 null] >> endobj 2081 0 obj << /D [2041 0 R /XYZ 204.254 326.177 null] >> endobj 2082 0 obj << /D [2041 0 R /XYZ 209.634 326.177 null] >> endobj 2083 0 obj << /D [2041 0 R /XYZ 290.331 326.177 null] >> endobj 2084 0 obj << /D [2041 0 R /XYZ 365.649 326.177 null] >> endobj 2085 0 obj << /D [2041 0 R /XYZ 440.966 326.177 null] >> endobj 238 0 obj << /D [2041 0 R /XYZ 146.232 295.392 null] >> endobj 2086 0 obj << /D [2041 0 R /XYZ 95.641 290.411 null] >> endobj 2087 0 obj << /D [2041 0 R /XYZ 95.641 285.43 null] >> endobj 2088 0 obj << /D [2041 0 R /XYZ 95.641 251.059 null] >> endobj 2089 0 obj << /D [2041 0 R /XYZ 95.641 246.077 null] >> endobj 2090 0 obj << /D [2041 0 R /XYZ 95.641 236.115 null] >> endobj 2091 0 obj << /D [2041 0 R /XYZ 175.741 221.27 null] >> endobj 2092 0 obj << /D [2041 0 R /XYZ 204.792 221.27 null] >> endobj 2093 0 obj << /D [2041 0 R /XYZ 210.172 221.27 null] >> endobj 2094 0 obj << /D [2041 0 R /XYZ 274.73 221.27 null] >> endobj 2095 0 obj << /D [2041 0 R /XYZ 344.667 221.27 null] >> endobj 2096 0 obj << /D [2041 0 R /XYZ 409.225 221.27 null] >> endobj 242 0 obj << /D [2041 0 R /XYZ 146.232 200.349 null] >> endobj 2097 0 obj << /D [2041 0 R /XYZ 95.641 195.367 null] >> endobj 2098 0 obj << /D [2041 0 R /XYZ 95.641 190.386 null] >> endobj 2099 0 obj << /D [2041 0 R /XYZ 95.641 137.584 null] >> endobj 2100 0 obj << /D [2041 0 R /XYZ 457.568 126.625 null] >> endobj 2101 0 obj << /D [2041 0 R /XYZ 143.462 115.666 null] >> endobj 2102 0 obj << /D [2041 0 R /XYZ 95.641 96.917 null] >> endobj 2103 0 obj << /D [2041 0 R /XYZ 95.641 96.917 null] >> endobj 1280 0 obj << /D [2041 0 R /XYZ 95.641 61.654 null] >> endobj 2040 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2106 0 obj << /Length 559 /Filter /FlateDecode >> stream xÚ½VËnÚ@Ýó³4R}3¯;uÕ¤¹J "V7M4˜ CeL¥þ}Çfbì€UQÅÆ’ϜǡîLjEP’Í-p…ä)ëQòìÞ {Ì#(€F—¯®“ÞÕ@XbÁ*A’y…Hfß‚›—éÏ"Íû!GpèO¾\ ¤!ÆU ”…G߯ƒè6E;\“Ôw?'ŸîîâÑpÇ<‰Ñ$õYp•ßö¢¤–)™) kµo„5„s°LÖŽ¸"ŒElZºï 8K ƒÍzåÖ×&lWOÅb½ÚxƒØ0¨Áðr ‚aÅðLJå{(Õ%RhPhý*«i–’1G¢^Sx¤HEÆâÑçøƒ3Ð=äÃ!£ •}=ße@Ã÷*ØGßîû ­t´.[0RTÐY:Ÿn—Å®²Ê`õ´ž.:§Ö© Q?;´ùv¹<œ0 …¼@pêýàj)g$÷ïÙŸ`ˆGÉ‘RÎÅ©ò˜F——õíÉ ›MW¿ßV7_çÙæÒ-n¶yG‰Œ§JÔöü»üër\xkx_Ug–²³í>/~¥Çwð:uÜëfËX[^+Iû®/Þp‘/²wö)^²âSµ{“ˆS›„1×j%W:ËÒÙ_q~^¢¯QKŽÏޝ-ÿXäÅËÏÒ‘Øÿ0-J€Rísý‘Ržoü¹¾ÓW=¦nŠŠfÍk™:*´€¼u%wþ‘`¦ë^§ÍïÿÄcendstream endobj 2105 0 obj << /Type /Page /Contents 2106 0 R /Resources 2104 0 R /MediaBox [0 0 609.714 789.041] /Parent 1969 0 R >> endobj 2107 0 obj << /D [2105 0 R /XYZ 95.641 729.265 null] >> endobj 246 0 obj << /D [2105 0 R /XYZ 196.913 706.351 null] >> endobj 2108 0 obj << /D [2105 0 R /XYZ 95.641 706.201 null] >> endobj 2109 0 obj << /D [2105 0 R /XYZ 95.641 688.766 null] >> endobj 2110 0 obj << /D [2105 0 R /XYZ 95.641 682.739 null] >> endobj 2111 0 obj << /D [2105 0 R /XYZ 95.641 672.776 null] >> endobj 2112 0 obj << /D [2105 0 R /XYZ 181.121 657.036 null] >> endobj 2113 0 obj << /D [2105 0 R /XYZ 200.488 657.036 null] >> endobj 2114 0 obj << /D [2105 0 R /XYZ 205.868 657.036 null] >> endobj 2115 0 obj << /D [2105 0 R /XYZ 238.353 657.036 null] >> endobj 2116 0 obj << /D [2105 0 R /XYZ 238.353 657.036 null] >> endobj 250 0 obj << /D [2105 0 R /XYZ 149.001 636.115 null] >> endobj 2117 0 obj << /D [2105 0 R /XYZ 95.641 631.133 null] >> endobj 2118 0 obj << /D [2105 0 R /XYZ 95.641 626.152 null] >> endobj 2119 0 obj << /D [2105 0 R /XYZ 95.641 591.781 null] >> endobj 2120 0 obj << /D [2105 0 R /XYZ 95.641 586.8 null] >> endobj 2121 0 obj << /D [2105 0 R /XYZ 95.641 576.837 null] >> endobj 2122 0 obj << /D [2105 0 R /XYZ 181.121 561.993 null] >> endobj 2123 0 obj << /D [2105 0 R /XYZ 219.856 561.993 null] >> endobj 2124 0 obj << /D [2105 0 R /XYZ 225.235 561.993 null] >> endobj 2125 0 obj << /D [2105 0 R /XYZ 257.72 561.993 null] >> endobj 2126 0 obj << /D [2105 0 R /XYZ 290.062 561.993 null] >> endobj 2127 0 obj << /D [2105 0 R /XYZ 322.404 561.993 null] >> endobj 254 0 obj << /D [2105 0 R /XYZ 146.232 541.071 null] >> endobj 2128 0 obj << /D [2105 0 R /XYZ 95.641 536.09 null] >> endobj 2129 0 obj << /D [2105 0 R /XYZ 95.641 531.108 null] >> endobj 2130 0 obj << /D [2105 0 R /XYZ 95.641 496.737 null] >> endobj 2131 0 obj << /D [2105 0 R /XYZ 95.641 491.756 null] >> endobj 2132 0 obj << /D [2105 0 R /XYZ 95.641 481.793 null] >> endobj 2133 0 obj << /D [2105 0 R /XYZ 181.121 466.949 null] >> endobj 2134 0 obj << /D [2105 0 R /XYZ 215.014 466.949 null] >> endobj 2135 0 obj << /D [2105 0 R /XYZ 220.393 466.949 null] >> endobj 258 0 obj << /D [2105 0 R /XYZ 146.232 446.027 null] >> endobj 2136 0 obj << /D [2105 0 R /XYZ 95.641 441.046 null] >> endobj 2137 0 obj << /D [2105 0 R /XYZ 95.641 436.065 null] >> endobj 2138 0 obj << /D [2105 0 R /XYZ 95.641 401.694 null] >> endobj 2139 0 obj << /D [2105 0 R /XYZ 95.641 396.712 null] >> endobj 2140 0 obj << /D [2105 0 R /XYZ 95.641 386.75 null] >> endobj 2141 0 obj << /D [2105 0 R /XYZ 181.121 371.905 null] >> endobj 2142 0 obj << /D [2105 0 R /XYZ 210.172 371.905 null] >> endobj 2143 0 obj << /D [2105 0 R /XYZ 215.552 371.905 null] >> endobj 262 0 obj << /D [2105 0 R /XYZ 146.232 350.984 null] >> endobj 2144 0 obj << /D [2105 0 R /XYZ 95.641 346.003 null] >> endobj 2145 0 obj << /D [2105 0 R /XYZ 95.641 341.021 null] >> endobj 2146 0 obj << /D [2105 0 R /XYZ 95.641 306.65 null] >> endobj 2147 0 obj << /D [2105 0 R /XYZ 95.641 301.669 null] >> endobj 2148 0 obj << /D [2105 0 R /XYZ 95.641 291.706 null] >> endobj 2149 0 obj << /D [2105 0 R /XYZ 181.121 276.862 null] >> endobj 2150 0 obj << /D [2105 0 R /XYZ 219.856 276.862 null] >> endobj 2151 0 obj << /D [2105 0 R /XYZ 225.235 276.862 null] >> endobj 2152 0 obj << /D [2105 0 R /XYZ 257.72 276.862 null] >> endobj 266 0 obj << /D [2105 0 R /XYZ 146.232 255.94 null] >> endobj 2153 0 obj << /D [2105 0 R /XYZ 95.641 250.959 null] >> endobj 2154 0 obj << /D [2105 0 R /XYZ 95.641 245.978 null] >> endobj 2155 0 obj << /D [2105 0 R /XYZ 95.641 211.607 null] >> endobj 2156 0 obj << /D [2105 0 R /XYZ 95.641 206.625 null] >> endobj 2157 0 obj << /D [2105 0 R /XYZ 95.641 196.663 null] >> endobj 2158 0 obj << /D [2105 0 R /XYZ 175.741 181.818 null] >> endobj 2159 0 obj << /D [2105 0 R /XYZ 199.95 181.818 null] >> endobj 2160 0 obj << /D [2105 0 R /XYZ 205.33 181.818 null] >> endobj 270 0 obj << /D [2105 0 R /XYZ 146.232 160.897 null] >> endobj 2161 0 obj << /D [2105 0 R /XYZ 95.641 155.915 null] >> endobj 2162 0 obj << /D [2105 0 R /XYZ 95.641 150.934 null] >> endobj 2163 0 obj << /D [2105 0 R /XYZ 95.641 116.563 null] >> endobj 2164 0 obj << /D [2105 0 R /XYZ 95.641 111.582 null] >> endobj 2165 0 obj << /D [2105 0 R /XYZ 95.641 101.619 null] >> endobj 2104 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F26 1177 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2168 0 obj << /Length 508 /Filter /FlateDecode >> stream xÚÍUMOÛ@¼çWì19ø±ßâÔR'r.2V/´‡Ð8!Rˆ#'Aôß÷-^'N Tˆ"ÖÚ73^ïc„âÈS %#†;àZ‘_w=Jf¸2ê±€`V€5œPÖxÀç¼w2Ž8pZ|úˆË'×ý³ÛñjSTƒˆ+Úç0ø™=JK,µJ J‰€>O†ñy’ÆW5®M¨eî2û6Ê>]\$é¨fÎâaœÅé€õÏb¿·ç;±\øŽD;µOíDÂPÐ8rŽÉ!©ö:Cñ÷8̓ ¿L_¸q2)Æ›Û$0p œ6˜TÑn „ €$ý’à``¸Ús°Ó”Ú'iZ[IVŠ¥¼Zoê°j}¯Å}± ³å´[.bÈŠõ"%€¿ÔþͶš´;@ÁïáßÖ9j?è{µÊ «à¬k˜b¼xäÿc˜8@Ð÷Æ®ïÊí:è{ÅYÞó²xجç7]2÷£ïaڀ˸íÚ‹ªmú¿ËírVT~=‰zóåì­?ÿª*î?\«jÀ,þäór»ÞGR.&ÇÁò¢Ãq•g¾ûtnBZ5™¬‹‡.ÃnÔöòÏyègòP¶ïv^Pë»·»d$ XŽ#ÊGû¤¤¤öîþÖò™{Êí!¼ÞÕPþÇiûpendstream endobj 2167 0 obj << /Type /Page /Contents 2168 0 R /Resources 2166 0 R /MediaBox [0 0 609.714 789.041] /Parent 1969 0 R >> endobj 2169 0 obj << /D [2167 0 R /XYZ 95.641 729.265 null] >> endobj 2170 0 obj << /D [2167 0 R /XYZ 175.741 706.351 null] >> endobj 2171 0 obj << /D [2167 0 R /XYZ 199.95 706.351 null] >> endobj 2172 0 obj << /D [2167 0 R /XYZ 205.33 706.351 null] >> endobj 274 0 obj << /D [2167 0 R /XYZ 146.232 685.43 null] >> endobj 2173 0 obj << /D [2167 0 R /XYZ 95.641 680.448 null] >> endobj 2174 0 obj << /D [2167 0 R /XYZ 95.641 675.467 null] >> endobj 2175 0 obj << /D [2167 0 R /XYZ 95.641 641.096 null] >> endobj 2176 0 obj << /D [2167 0 R /XYZ 95.641 636.115 null] >> endobj 2177 0 obj << /D [2167 0 R /XYZ 95.641 626.152 null] >> endobj 2178 0 obj << /D [2167 0 R /XYZ 175.741 611.308 null] >> endobj 2179 0 obj << /D [2167 0 R /XYZ 204.792 611.308 null] >> endobj 2180 0 obj << /D [2167 0 R /XYZ 210.172 611.308 null] >> endobj 278 0 obj << /D [2167 0 R /XYZ 146.232 590.386 null] >> endobj 2181 0 obj << /D [2167 0 R /XYZ 95.641 585.405 null] >> endobj 2182 0 obj << /D [2167 0 R /XYZ 95.641 580.423 null] >> endobj 2183 0 obj << /D [2167 0 R /XYZ 95.641 546.052 null] >> endobj 2184 0 obj << /D [2167 0 R /XYZ 95.641 541.071 null] >> endobj 2185 0 obj << /D [2167 0 R /XYZ 95.641 531.108 null] >> endobj 2186 0 obj << /D [2167 0 R /XYZ 170.361 516.264 null] >> endobj 2187 0 obj << /D [2167 0 R /XYZ 199.412 516.264 null] >> endobj 2188 0 obj << /D [2167 0 R /XYZ 204.792 516.264 null] >> endobj 282 0 obj << /D [2167 0 R /XYZ 146.232 495.342 null] >> endobj 2189 0 obj << /D [2167 0 R /XYZ 95.641 490.361 null] >> endobj 2190 0 obj << /D [2167 0 R /XYZ 95.641 485.38 null] >> endobj 2191 0 obj << /D [2167 0 R /XYZ 95.641 451.009 null] >> endobj 2192 0 obj << /D [2167 0 R /XYZ 95.641 446.027 null] >> endobj 2193 0 obj << /D [2167 0 R /XYZ 95.641 436.065 null] >> endobj 2194 0 obj << /D [2167 0 R /XYZ 170.361 421.22 null] >> endobj 2195 0 obj << /D [2167 0 R /XYZ 199.412 421.22 null] >> endobj 2196 0 obj << /D [2167 0 R /XYZ 204.792 421.22 null] >> endobj 286 0 obj << /D [2167 0 R /XYZ 146.232 400.299 null] >> endobj 2197 0 obj << /D [2167 0 R /XYZ 95.641 395.318 null] >> endobj 2198 0 obj << /D [2167 0 R /XYZ 95.641 390.336 null] >> endobj 2199 0 obj << /D [2167 0 R /XYZ 95.641 355.965 null] >> endobj 2200 0 obj << /D [2167 0 R /XYZ 95.641 350.984 null] >> endobj 2201 0 obj << /D [2167 0 R /XYZ 95.641 341.021 null] >> endobj 2202 0 obj << /D [2167 0 R /XYZ 170.361 326.177 null] >> endobj 2203 0 obj << /D [2167 0 R /XYZ 204.254 326.177 null] >> endobj 2204 0 obj << /D [2167 0 R /XYZ 209.634 326.177 null] >> endobj 290 0 obj << /D [2167 0 R /XYZ 146.232 305.255 null] >> endobj 2205 0 obj << /D [2167 0 R /XYZ 95.641 300.274 null] >> endobj 2206 0 obj << /D [2167 0 R /XYZ 95.641 295.293 null] >> endobj 2207 0 obj << /D [2167 0 R /XYZ 95.641 260.922 null] >> endobj 2208 0 obj << /D [2167 0 R /XYZ 95.641 255.94 null] >> endobj 2209 0 obj << /D [2167 0 R /XYZ 95.641 245.978 null] >> endobj 2210 0 obj << /D [2167 0 R /XYZ 170.361 231.133 null] >> endobj 2211 0 obj << /D [2167 0 R /XYZ 204.254 231.133 null] >> endobj 2212 0 obj << /D [2167 0 R /XYZ 209.634 231.133 null] >> endobj 294 0 obj << /D [2167 0 R /XYZ 146.232 210.212 null] >> endobj 2213 0 obj << /D [2167 0 R /XYZ 95.641 205.23 null] >> endobj 2214 0 obj << /D [2167 0 R /XYZ 95.641 200.249 null] >> endobj 2215 0 obj << /D [2167 0 R /XYZ 95.641 165.878 null] >> endobj 2216 0 obj << /D [2167 0 R /XYZ 95.641 160.897 null] >> endobj 2217 0 obj << /D [2167 0 R /XYZ 95.641 150.934 null] >> endobj 2218 0 obj << /D [2167 0 R /XYZ 181.121 136.09 null] >> endobj 2219 0 obj << /D [2167 0 R /XYZ 195.646 136.09 null] >> endobj 2220 0 obj << /D [2167 0 R /XYZ 201.026 136.09 null] >> endobj 298 0 obj << /D [2167 0 R /XYZ 146.232 115.168 null] >> endobj 2221 0 obj << /D [2167 0 R /XYZ 95.641 110.187 null] >> endobj 2222 0 obj << /D [2167 0 R /XYZ 95.641 105.206 null] >> endobj 2223 0 obj << /D [2167 0 R /XYZ 95.641 70.834 null] >> endobj 2224 0 obj << /D [2167 0 R /XYZ 95.641 65.853 null] >> endobj 2166 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2227 0 obj << /Length 568 /Filter /FlateDecode >> stream xÚ½VKoÚ@¼ó+öVê}?”S’ä LD|krp“"ƒ°9ôßwׯ¦)BVxg‡™aø‚°}dHN¢¨èeÕÃèÍîŒ{Ä!0b ´*¶î¢ÞpÄ 2`$CÑbˆ^õïÿÄ›<Ù<*pŸÂà9ú9q´ÊÈ9ÁzŒüIú%®I(0¡îa>Ïo§Ó —ÌsäÏýp@ú÷~q¶çGµLN4pFW«ýhÄc ƒ´+¥`¯ qqÐYº›Í&ÎE±‹U±I%hcb¿' „;O 0YéÂG!€iÂÁ1% ¨> endobj 2228 0 obj << /D [2226 0 R /XYZ 95.641 729.265 null] >> endobj 2229 0 obj << /D [2226 0 R /XYZ 95.641 716.314 null] >> endobj 2230 0 obj << /D [2226 0 R /XYZ 170.361 706.351 null] >> endobj 2231 0 obj << /D [2226 0 R /XYZ 189.728 706.351 null] >> endobj 2232 0 obj << /D [2226 0 R /XYZ 195.108 706.351 null] >> endobj 302 0 obj << /D [2226 0 R /XYZ 146.232 685.43 null] >> endobj 2233 0 obj << /D [2226 0 R /XYZ 95.641 680.448 null] >> endobj 2234 0 obj << /D [2226 0 R /XYZ 95.641 675.467 null] >> endobj 2235 0 obj << /D [2226 0 R /XYZ 95.641 641.096 null] >> endobj 2236 0 obj << /D [2226 0 R /XYZ 95.641 636.115 null] >> endobj 2237 0 obj << /D [2226 0 R /XYZ 95.641 626.152 null] >> endobj 2238 0 obj << /D [2226 0 R /XYZ 170.361 611.308 null] >> endobj 2239 0 obj << /D [2226 0 R /XYZ 199.412 611.308 null] >> endobj 2240 0 obj << /D [2226 0 R /XYZ 204.792 611.308 null] >> endobj 306 0 obj << /D [2226 0 R /XYZ 146.232 590.386 null] >> endobj 2241 0 obj << /D [2226 0 R /XYZ 95.641 585.405 null] >> endobj 2242 0 obj << /D [2226 0 R /XYZ 95.641 580.423 null] >> endobj 2243 0 obj << /D [2226 0 R /XYZ 95.641 546.052 null] >> endobj 2244 0 obj << /D [2226 0 R /XYZ 95.641 541.071 null] >> endobj 2245 0 obj << /D [2226 0 R /XYZ 95.641 531.108 null] >> endobj 2246 0 obj << /D [2226 0 R /XYZ 181.121 516.264 null] >> endobj 2247 0 obj << /D [2226 0 R /XYZ 190.804 516.264 null] >> endobj 2248 0 obj << /D [2226 0 R /XYZ 196.184 516.264 null] >> endobj 2249 0 obj << /D [2226 0 R /XYZ 228.669 516.264 null] >> endobj 310 0 obj << /D [2226 0 R /XYZ 146.232 495.342 null] >> endobj 2250 0 obj << /D [2226 0 R /XYZ 95.641 490.361 null] >> endobj 2251 0 obj << /D [2226 0 R /XYZ 95.641 485.38 null] >> endobj 2252 0 obj << /D [2226 0 R /XYZ 95.641 451.009 null] >> endobj 2253 0 obj << /D [2226 0 R /XYZ 95.641 446.027 null] >> endobj 2254 0 obj << /D [2226 0 R /XYZ 95.641 436.065 null] >> endobj 2255 0 obj << /D [2226 0 R /XYZ 164.981 421.22 null] >> endobj 2256 0 obj << /D [2226 0 R /XYZ 203.716 421.22 null] >> endobj 2257 0 obj << /D [2226 0 R /XYZ 209.096 421.22 null] >> endobj 314 0 obj << /D [2226 0 R /XYZ 146.232 400.299 null] >> endobj 2258 0 obj << /D [2226 0 R /XYZ 95.641 395.318 null] >> endobj 2259 0 obj << /D [2226 0 R /XYZ 95.641 390.336 null] >> endobj 2260 0 obj << /D [2226 0 R /XYZ 95.641 355.965 null] >> endobj 2261 0 obj << /D [2226 0 R /XYZ 95.641 350.984 null] >> endobj 2262 0 obj << /D [2226 0 R /XYZ 95.641 341.021 null] >> endobj 2263 0 obj << /D [2226 0 R /XYZ 164.981 326.177 null] >> endobj 2264 0 obj << /D [2226 0 R /XYZ 208.558 326.177 null] >> endobj 2265 0 obj << /D [2226 0 R /XYZ 213.938 326.177 null] >> endobj 318 0 obj << /D [2226 0 R /XYZ 146.232 305.255 null] >> endobj 2266 0 obj << /D [2226 0 R /XYZ 95.641 300.274 null] >> endobj 2267 0 obj << /D [2226 0 R /XYZ 95.641 295.293 null] >> endobj 2268 0 obj << /D [2226 0 R /XYZ 95.641 260.922 null] >> endobj 2269 0 obj << /D [2226 0 R /XYZ 95.641 255.94 null] >> endobj 2270 0 obj << /D [2226 0 R /XYZ 95.641 245.978 null] >> endobj 2271 0 obj << /D [2226 0 R /XYZ 164.981 231.133 null] >> endobj 2272 0 obj << /D [2226 0 R /XYZ 198.874 231.133 null] >> endobj 2273 0 obj << /D [2226 0 R /XYZ 204.254 231.133 null] >> endobj 322 0 obj << /D [2226 0 R /XYZ 146.232 210.212 null] >> endobj 2274 0 obj << /D [2226 0 R /XYZ 95.641 205.23 null] >> endobj 2275 0 obj << /D [2226 0 R /XYZ 95.641 200.249 null] >> endobj 2276 0 obj << /D [2226 0 R /XYZ 95.641 165.878 null] >> endobj 2277 0 obj << /D [2226 0 R /XYZ 95.641 160.897 null] >> endobj 2278 0 obj << /D [2226 0 R /XYZ 95.641 150.934 null] >> endobj 2279 0 obj << /D [2226 0 R /XYZ 181.121 136.09 null] >> endobj 2280 0 obj << /D [2226 0 R /XYZ 205.33 136.09 null] >> endobj 2281 0 obj << /D [2226 0 R /XYZ 210.71 136.09 null] >> endobj 326 0 obj << /D [2226 0 R /XYZ 146.232 115.168 null] >> endobj 2282 0 obj << /D [2226 0 R /XYZ 95.641 110.187 null] >> endobj 2283 0 obj << /D [2226 0 R /XYZ 95.641 105.206 null] >> endobj 2284 0 obj << /D [2226 0 R /XYZ 95.641 70.834 null] >> endobj 2285 0 obj << /D [2226 0 R /XYZ 95.641 65.853 null] >> endobj 2225 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2288 0 obj << /Length 630 /Filter /FlateDecode >> stream xÚ½V]oÚ0}çWä¤Åõ·íi…€˜(™B&MZ÷‘°F°…´]ÿýìØ|&-He6ñññ=çÆ÷9Pýã1À)röæÌ™ÿî@ç—ZuE I€Ø!€I¡·QçfH<Ç'N´¨qQò½Ûˆ×UZö\Ì`ƒÞèóÍJG* ×@JcÄ¢'ã¡?Oý™Á2÷% Fá§»»ñtd˜Cè‡þ´‡º}_ïíøÑ.XLôžãî¢=•ãW#ÆÀCt'ˆ²}œ[A³(Ô§z ½Làê ƒY¦/K€T˜YÄ=d°éDZ@è÷ƒpÐd!p‰-èC“A ¸]¾ ‚I“#eÞÇ>Z³ÙÞlAuŽš»IIÍr•È<^ǵÆzR,̨%=årcþ. ›ôX%%·Ø²‡d7õ˜˜gÕË:Õa4#u‘ HYæ2ðÅæoŠÇ> endobj 2289 0 obj << /D [2287 0 R /XYZ 95.641 729.265 null] >> endobj 2290 0 obj << /D [2287 0 R /XYZ 95.641 716.314 null] >> endobj 2291 0 obj << /D [2287 0 R /XYZ 181.121 706.351 null] >> endobj 2292 0 obj << /D [2287 0 R /XYZ 195.646 706.351 null] >> endobj 2293 0 obj << /D [2287 0 R /XYZ 201.026 706.351 null] >> endobj 2294 0 obj << /D [2287 0 R /XYZ 244.468 706.351 null] >> endobj 2295 0 obj << /D [2287 0 R /XYZ 244.468 706.351 null] >> endobj 330 0 obj << /D [2287 0 R /XYZ 146.232 685.43 null] >> endobj 2296 0 obj << /D [2287 0 R /XYZ 95.641 680.448 null] >> endobj 2297 0 obj << /D [2287 0 R /XYZ 95.641 675.467 null] >> endobj 2298 0 obj << /D [2287 0 R /XYZ 95.641 641.096 null] >> endobj 2299 0 obj << /D [2287 0 R /XYZ 95.641 636.115 null] >> endobj 2300 0 obj << /D [2287 0 R /XYZ 95.641 626.152 null] >> endobj 2301 0 obj << /D [2287 0 R /XYZ 181.121 611.308 null] >> endobj 2302 0 obj << /D [2287 0 R /XYZ 215.014 611.308 null] >> endobj 2303 0 obj << /D [2287 0 R /XYZ 220.393 611.308 null] >> endobj 334 0 obj << /D [2287 0 R /XYZ 146.232 590.386 null] >> endobj 2304 0 obj << /D [2287 0 R /XYZ 95.641 585.405 null] >> endobj 2305 0 obj << /D [2287 0 R /XYZ 95.641 580.423 null] >> endobj 2306 0 obj << /D [2287 0 R /XYZ 95.641 546.052 null] >> endobj 2307 0 obj << /D [2287 0 R /XYZ 95.641 541.071 null] >> endobj 2308 0 obj << /D [2287 0 R /XYZ 95.641 531.108 null] >> endobj 2309 0 obj << /D [2287 0 R /XYZ 170.361 516.264 null] >> endobj 2310 0 obj << /D [2287 0 R /XYZ 194.57 516.264 null] >> endobj 2311 0 obj << /D [2287 0 R /XYZ 199.95 516.264 null] >> endobj 338 0 obj << /D [2287 0 R /XYZ 146.232 495.342 null] >> endobj 2312 0 obj << /D [2287 0 R /XYZ 95.641 490.361 null] >> endobj 2313 0 obj << /D [2287 0 R /XYZ 95.641 485.38 null] >> endobj 2314 0 obj << /D [2287 0 R /XYZ 95.641 451.009 null] >> endobj 2315 0 obj << /D [2287 0 R /XYZ 95.641 446.027 null] >> endobj 2316 0 obj << /D [2287 0 R /XYZ 95.641 436.065 null] >> endobj 2317 0 obj << /D [2287 0 R /XYZ 170.361 421.22 null] >> endobj 2318 0 obj << /D [2287 0 R /XYZ 189.728 421.22 null] >> endobj 2319 0 obj << /D [2287 0 R /XYZ 195.108 421.22 null] >> endobj 342 0 obj << /D [2287 0 R /XYZ 146.232 400.299 null] >> endobj 2320 0 obj << /D [2287 0 R /XYZ 95.641 395.318 null] >> endobj 2321 0 obj << /D [2287 0 R /XYZ 95.641 390.336 null] >> endobj 2322 0 obj << /D [2287 0 R /XYZ 95.641 355.965 null] >> endobj 2323 0 obj << /D [2287 0 R /XYZ 95.641 350.984 null] >> endobj 2324 0 obj << /D [2287 0 R /XYZ 95.641 341.021 null] >> endobj 2325 0 obj << /D [2287 0 R /XYZ 170.361 326.177 null] >> endobj 2326 0 obj << /D [2287 0 R /XYZ 189.728 326.177 null] >> endobj 2327 0 obj << /D [2287 0 R /XYZ 195.108 326.177 null] >> endobj 346 0 obj << /D [2287 0 R /XYZ 146.232 305.255 null] >> endobj 2328 0 obj << /D [2287 0 R /XYZ 95.641 300.274 null] >> endobj 2329 0 obj << /D [2287 0 R /XYZ 95.641 295.293 null] >> endobj 2330 0 obj << /D [2287 0 R /XYZ 95.641 260.922 null] >> endobj 2331 0 obj << /D [2287 0 R /XYZ 95.641 255.94 null] >> endobj 2332 0 obj << /D [2287 0 R /XYZ 95.641 245.978 null] >> endobj 2333 0 obj << /D [2287 0 R /XYZ 170.361 231.133 null] >> endobj 350 0 obj << /D [2287 0 R /XYZ 146.232 210.212 null] >> endobj 2334 0 obj << /D [2287 0 R /XYZ 95.641 205.23 null] >> endobj 2335 0 obj << /D [2287 0 R /XYZ 95.641 200.249 null] >> endobj 2336 0 obj << /D [2287 0 R /XYZ 95.641 165.878 null] >> endobj 2337 0 obj << /D [2287 0 R /XYZ 95.641 160.897 null] >> endobj 2338 0 obj << /D [2287 0 R /XYZ 95.641 150.934 null] >> endobj 2339 0 obj << /D [2287 0 R /XYZ 170.361 136.09 null] >> endobj 354 0 obj << /D [2287 0 R /XYZ 146.232 115.168 null] >> endobj 2340 0 obj << /D [2287 0 R /XYZ 95.641 110.187 null] >> endobj 2341 0 obj << /D [2287 0 R /XYZ 95.641 105.206 null] >> endobj 2342 0 obj << /D [2287 0 R /XYZ 95.641 70.834 null] >> endobj 2343 0 obj << /D [2287 0 R /XYZ 95.641 65.853 null] >> endobj 2286 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2347 0 obj << /Length 636 /Filter /FlateDecode >> stream xÚíWMo›@½ûWpÄRÙì'˪§4Å–«Ø­\ÔK[U4Æ1ª1ȪUÔÿÞ]ãBê¢(òÌ>fgÞ{;Ë ÃXJ —KR…¨+¬«d€­kˆA`‹!áÉrèM081e)¤\fË ,>Û«0+¢íСÛ ¿ïÎFܳ<º%s$3èËÉÈ¿œÌü× (bB܇ùûñü|:ÌÆ:òÜùs6$ö…_¾;ðƒ:MN<ıœ:Ûû…8Lbä•R¤¯ ââ.Ï]A“ÙÛ‰©¢Ų¤.ò”2ˆMô«ˆ7‹¸21˜‡$ö |H‡@ÌkŸÉ(A’6b׆+qÇ•#)ò ‡äqVg¥¹Ê¢mžnô}l®‹°¿‡yÔxÊ•ý#ú­¤Û!ñìèxC`ZHÈ Ñž eÛèçÓc(«Š„ÌÒ›¼“)pZ´?pŒ,*[Èâ@”QN›g0_”ÖÌTRu“áÈ«Ã#)š!¾}jQ…çôßAvsŒÎ§m!(ÓÞy1Ja‡Ž‹±}{ ª;àUš$áfÑF0ô²óÒŸ“ÐÒ”ì¹d¦™Ö¹XUB§7×+ý \¯õÍNRm°Ê²Ÿ–a¯ã¨+ÕSÖE_+œ £ûnz‚Vˆâ‡[¡–´úW)Gì0oúD§_Y¥¯OÒm{ûü–qêzˆ:]!{¸üÁ é&o‰Aû[b/I’´XA —.þ|ºø2JµÙ䳌¡¿6E^¯VýÂÞÇBÏFÿâ–gæ–¦W´QÊVÒ长AÅ=¦šÚ jÙ;ª=`Qz켃›ïÿ¨ÖRºendstream endobj 2346 0 obj << /Type /Page /Contents 2347 0 R /Resources 2345 0 R /MediaBox [0 0 609.714 789.041] /Parent 2344 0 R >> endobj 2348 0 obj << /D [2346 0 R /XYZ 95.641 729.265 null] >> endobj 2349 0 obj << /D [2346 0 R /XYZ 95.641 716.314 null] >> endobj 2350 0 obj << /D [2346 0 R /XYZ 170.361 706.351 null] >> endobj 2351 0 obj << /D [2346 0 R /XYZ 209.096 706.351 null] >> endobj 2352 0 obj << /D [2346 0 R /XYZ 214.476 706.351 null] >> endobj 358 0 obj << /D [2346 0 R /XYZ 146.232 685.43 null] >> endobj 2353 0 obj << /D [2346 0 R /XYZ 95.641 680.448 null] >> endobj 2354 0 obj << /D [2346 0 R /XYZ 95.641 675.467 null] >> endobj 2355 0 obj << /D [2346 0 R /XYZ 95.641 641.096 null] >> endobj 2356 0 obj << /D [2346 0 R /XYZ 95.641 636.115 null] >> endobj 2357 0 obj << /D [2346 0 R /XYZ 95.641 626.152 null] >> endobj 2358 0 obj << /D [2346 0 R /XYZ 170.361 611.308 null] >> endobj 2359 0 obj << /D [2346 0 R /XYZ 209.096 611.308 null] >> endobj 2360 0 obj << /D [2346 0 R /XYZ 214.476 611.308 null] >> endobj 362 0 obj << /D [2346 0 R /XYZ 146.232 590.386 null] >> endobj 2361 0 obj << /D [2346 0 R /XYZ 95.641 585.405 null] >> endobj 2362 0 obj << /D [2346 0 R /XYZ 95.641 580.423 null] >> endobj 2363 0 obj << /D [2346 0 R /XYZ 95.641 546.052 null] >> endobj 2364 0 obj << /D [2346 0 R /XYZ 95.641 536.09 null] >> endobj 2365 0 obj << /D [2346 0 R /XYZ 95.641 536.09 null] >> endobj 2366 0 obj << /D [2346 0 R /XYZ 191.88 526.227 null] >> endobj 2367 0 obj << /D [2346 0 R /XYZ 224.366 526.227 null] >> endobj 2368 0 obj << /D [2346 0 R /XYZ 268.507 526.227 null] >> endobj 2369 0 obj << /D [2346 0 R /XYZ 307.268 526.227 null] >> endobj 2370 0 obj << /D [2346 0 R /XYZ 356.79 526.227 null] >> endobj 366 0 obj << /D [2346 0 R /XYZ 95.641 525.012 null] >> endobj 2371 0 obj << /D [2346 0 R /XYZ 95.641 500.324 null] >> endobj 2372 0 obj << /D [2346 0 R /XYZ 95.641 495.342 null] >> endobj 2373 0 obj << /D [2346 0 R /XYZ 95.641 460.971 null] >> endobj 2374 0 obj << /D [2346 0 R /XYZ 95.641 451.009 null] >> endobj 2375 0 obj << /D [2346 0 R /XYZ 95.641 451.009 null] >> endobj 2376 0 obj << /D [2346 0 R /XYZ 197.26 441.146 null] >> endobj 2377 0 obj << /D [2346 0 R /XYZ 229.745 441.146 null] >> endobj 2378 0 obj << /D [2346 0 R /XYZ 268.507 441.146 null] >> endobj 2379 0 obj << /D [2346 0 R /XYZ 312.648 441.146 null] >> endobj 2380 0 obj << /D [2346 0 R /XYZ 362.17 441.146 null] >> endobj 370 0 obj << /D [2346 0 R /XYZ 95.641 440.097 null] >> endobj 2381 0 obj << /D [2346 0 R /XYZ 95.641 415.243 null] >> endobj 2382 0 obj << /D [2346 0 R /XYZ 95.641 410.262 null] >> endobj 2383 0 obj << /D [2346 0 R /XYZ 95.641 375.89 null] >> endobj 2384 0 obj << /D [2346 0 R /XYZ 95.641 365.928 null] >> endobj 2385 0 obj << /D [2346 0 R /XYZ 95.641 365.928 null] >> endobj 2386 0 obj << /D [2346 0 R /XYZ 191.88 356.065 null] >> endobj 2387 0 obj << /D [2346 0 R /XYZ 236.022 356.065 null] >> endobj 2388 0 obj << /D [2346 0 R /XYZ 285.543 356.065 null] >> endobj 374 0 obj << /D [2346 0 R /XYZ 95.641 355.016 null] >> endobj 2389 0 obj << /D [2346 0 R /XYZ 95.641 330.162 null] >> endobj 2390 0 obj << /D [2346 0 R /XYZ 95.641 325.181 null] >> endobj 2391 0 obj << /D [2346 0 R /XYZ 95.641 290.809 null] >> endobj 2392 0 obj << /D [2346 0 R /XYZ 95.641 280.847 null] >> endobj 2393 0 obj << /D [2346 0 R /XYZ 95.641 280.847 null] >> endobj 2394 0 obj << /D [2346 0 R /XYZ 191.88 270.984 null] >> endobj 2395 0 obj << /D [2346 0 R /XYZ 224.366 270.984 null] >> endobj 2396 0 obj << /D [2346 0 R /XYZ 268.507 270.984 null] >> endobj 2397 0 obj << /D [2346 0 R /XYZ 307.268 270.984 null] >> endobj 2398 0 obj << /D [2346 0 R /XYZ 356.79 270.984 null] >> endobj 378 0 obj << /D [2346 0 R /XYZ 95.641 269.935 null] >> endobj 2399 0 obj << /D [2346 0 R /XYZ 95.641 245.081 null] >> endobj 2400 0 obj << /D [2346 0 R /XYZ 95.641 240.1 null] >> endobj 2401 0 obj << /D [2346 0 R /XYZ 95.641 205.729 null] >> endobj 2402 0 obj << /D [2346 0 R /XYZ 95.641 195.766 null] >> endobj 2403 0 obj << /D [2346 0 R /XYZ 95.641 195.766 null] >> endobj 2404 0 obj << /D [2346 0 R /XYZ 191.88 185.903 null] >> endobj 2405 0 obj << /D [2346 0 R /XYZ 224.366 185.903 null] >> endobj 2406 0 obj << /D [2346 0 R /XYZ 268.507 185.903 null] >> endobj 2407 0 obj << /D [2346 0 R /XYZ 307.268 185.903 null] >> endobj 2408 0 obj << /D [2346 0 R /XYZ 356.79 185.903 null] >> endobj 382 0 obj << /D [2346 0 R /XYZ 95.641 184.854 null] >> endobj 2409 0 obj << /D [2346 0 R /XYZ 95.641 160 null] >> endobj 2410 0 obj << /D [2346 0 R /XYZ 95.641 155.019 null] >> endobj 2411 0 obj << /D [2346 0 R /XYZ 95.641 120.648 null] >> endobj 2345 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R /F27 1179 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2414 0 obj << /Length 2791 /Filter /FlateDecode >> stream xÚ¥Ûnãºñ}¿Âou€˜I]›§={’=i79‹]·(ÐSŠMÇÂÊ’!ɹ è¿w†3Ô}“Åy 5‡Ã¹;ráÁŸ\$}¹ˆT"T,6‡wÞâV>¾“Œ!c-âH-´â~Y¿»¸ÖÉ"I¨ëÅ[oÿ¹ü°O©ÎV*ð–Jœýký—‹k?^Ä€"¢ï‹ ÐŒýéæúêÓÍÝÕWÂë ¤ÐAÄxŸ¿üþñËûÛÛ›»DùËÕõÕ—«»3¹üp…{ß]­[f•Æ#’Ūåv|•Ž<¨”H¤ß^HEŸîBŸÓÊMÍ zц ë/ð¦w „ŽÆÍݯ7S"JŠH…Œr>¥ =ŽÄõûÛ) É×)„-ëÿ}†‰Xxžên"ÏV¡ç-ÿ3%ìÒ±³)‡´ØÎ‰&¾Œí¿ü¶A÷¶+‡"Â+_¨-^^–GzÜf_ÉxYžöHóœ&»ôå¦f( GPSÕeAŸÙpu³Ïò-MËr‡*X¬%b¸6ž½Þ›Úœ­´‚#NŦÉÊ¢ÆO¹lÒo¼àÈgY#¥ôyL«ô`¬ö[h±%¸½iNUA Y±+éêâAŒ|_žBßg‚••eØ–=‘€ «{ ùK1•:â"ñ-Úp2¼Ò"òÜÃtl¡ÈÊ®ªd²Üš]zÊ‚HÉ‚A€’Ò@’¸¤µfŸ1•¬¥†3 â-O(K®è “?@ «ºiÕ®e[K ¶æœ«çÝûÛ«ÕÒ`ýˆ¥/³<+ð`® Ñž‰ºÄŸjú"‘lJ;n/G¸užÖ{è)áö÷ÊG³åÕb;Þ r¶R°l0‘Cºeªøô±7é1kÒ¼¾œ¾¶ŽÁ-¾÷ÚqÒZkŠâÖ k4ΆvD=Ls‚ÖpûD0wÚJ َdžǚH5ÕY¼<1}zX˜8›âc7 c§5Yd¨À_¨ÁÍ·¦ÞTÙ½aÛóx4—lá;ç òÚœÃÜwG=1÷}Á7slhfžáôü…‰òrÖ Ñ³Âù!¦3T‹·Lïú”çó⠚ɬùEŠƒ _fÖâ`Lip¾çY1XzL«Ì4/Ãm»}L-èëf7:§}i$/½¢ç`6ûÏÁ^Í‹Hu½ÞK#´&–JjÃØõ¾|*˜§ã‘hÆ ›5>.BK U=eõ08¡öhׄÖ}ª±Ý0µ£ñ®T‘<˜åâa!ÐgÏã§Õް¯âaÔíd«Õ0-Çtù=aÖ: \g™XÚÅ€˜¤µ8ä…Žomex/çM! >øîuýÑÞ%Á{àw–ƒÔj²GÄw–ËsìÊçC#c ‹¸}N)ogÕÇ©µý>Åï&*Ð’û?’Hh˜ù.)Æâ²;ÄzIL4üÀ¨K›!(¥{Æ®ü~†0#Ðj‰ÀeéÑæêŽ ¬ñÂùäÍ™ŽêL`(Öš ”»õÐúi³b÷Ñ_¯9eÓ˲uD”>«H¡¨¥;±æˆƒsŸ^ÊÂè¥b:AôR±ÿý—’~ÊóC)Ÿï ÷_ŠÎ°šûî,ýv}¸#´®²ÃwÔj—Ùgp7#õ€ZIi9Jj8¯Ö^²t±ŒuÞsú+½®Æ@ ðq°i¥GΥÄ 9²}löàÿ6©çÔ윕‰gEGcêðÚœìTzŸ›·ž_²Šœç(ý {éçù”d^ÀË[“þ ª¶º6-aXìˆÝŸ€ï|Æ€á'zòrH–cÒw*i¡÷x5>ØòxNp®í´;Ë ȸ!p6¦Š¹¸r6UycZ 9¬”r)hí}A#s€ÓŒi¥4䰔ϘYÝÊ„ÍìãÕ¯~¿Ê/€*¬}¢Ü>Ý&RÒZZëòz%à /H ÌÈO†I¿cŸbUÍ1ªW‘wÉ8Æûv6žAÆýfVžZö¦J¡„Š^ÕRl"Ñò¡üy.湩³ûY7N…g•¡ ^ÇÊ<¾Mg å /­‹Ù‘8 ;;§¾[@FiöüÁ† ú†cG‘P^4.¶OGl$:t¤Tæ6¡Å)PéP1ßÝÑ”X„Iöᣯý€Û7\¾™ßLÇïm$à¡l‹v‹ YÜÔ–6€Èȉæ±íï‘„¨?†ëì@GoäEB¶âß}OéÀùrÚ;ì×÷B·-´Ò»Ž±®ÜFÖ‡!J:Á¤ótØm+МìšaL©}êXHð}QM­r`’Ãr½ïü¤-¶ Î@ýÞl^¾‰¾šç©”Àl”œ­º¡´× ò° òL“tŒWCD¶j ó[²Ý,-^¬]¨Î±[ÓëÛæº•Èý ê3LKù ³3õòoôi¥í»Ràö"q¼ÒJ·Õ4eC‹ß (NgÄ­ ryÊ%I·ÀÇlß)Ñþž¬KÙè:³ùn˜ø3ŽÌÞ¢­ÂÙþ¥)¸$°0 .Ç™&±=˜šÃü“E'[R»drÏG° 5Ôtâ[Šú¹˜ÑS›t‰åƒ)L•6†möHP€'ƦÊ9A¡êÜrš?í)Á‹ÜVRR.¯Š‡<«÷lüàŠ/~ ls>{P[B“öOà 17ÔÁë[hór4m› Ú±Œ‘ºø³ó´ô*Ròl(ò–¿™‹¯½d2¥]>böæ¢!Pß^9 Y}ñ›©fHhG0ö# ¢á·‡‹ÖËŽ5šŠÝ»úu»™)ÏüXèp¶.4W!À1î1ªàE…‹Ž¦2¦ß*,mà ¿b€,·i“Þ§¶Šûf-nÅìõ_²°?§ds—T/IæK÷À9,˜¸ËàÜV1!ÿF“îý…^‡Ýº·€½"Œ)á]± ·k.H´’ÔºbJ5[838ˆFOXŤùÉÌ»6=|Xï¦cÕ¶N°å‚Ý`„q(må;c¿2ŽDè빟GM¿ýÝrTÊî.ö‡YË0•6OäДÃoº³éo^Yñ–'ZgͬO„žïT÷­ÞJzhö^^iÂHå‹xXq¬oÖŸf@,üöÇQ*ì®=AT‰Ðú±öÞ5/3.8îu†×v‚“oû•Pí»ûÇ^cêÇÃJ¿½k›ãوŠM†|cþvI ÔñÓƒ”)æ ÝQ£µpµë‰ç¦«ôU&¥^±¶N¤áiMcQ¢­0m;'Hû3AnÒ-—m#‹ÐZ„‘×ÍTœ1Ô‹A/Ë-g¼+¼ˆßþ$yý:Ùý xýëOnw™øÕÿwü?fü¨h ”Ÿ£dŸPþ6=†ÛA†ÑvÖ«ìx4ö÷ €\[…0ÏéáHIId“Ñ?<¬üHÄ Æ0HD fÿåd,ü9}í¿7”ÓFE»ÉÿSTѤendstream endobj 2413 0 obj << /Type /Page /Contents 2414 0 R /Resources 2412 0 R /MediaBox [0 0 609.714 789.041] /Parent 2344 0 R >> endobj 2415 0 obj << /D [2413 0 R /XYZ 95.641 729.265 null] >> endobj 2416 0 obj << /D [2413 0 R /XYZ 95.641 741.22 null] >> endobj 2417 0 obj << /D [2413 0 R /XYZ 95.641 716.314 null] >> endobj 2418 0 obj << /D [2413 0 R /XYZ 95.641 716.314 null] >> endobj 2419 0 obj << /D [2413 0 R /XYZ 191.88 706.351 null] >> endobj 2420 0 obj << /D [2413 0 R /XYZ 224.366 706.351 null] >> endobj 2421 0 obj << /D [2413 0 R /XYZ 252.296 706.351 null] >> endobj 2422 0 obj << /D [2413 0 R /XYZ 301.817 706.351 null] >> endobj 386 0 obj << /D [2413 0 R /XYZ 95.641 705.302 null] >> endobj 2423 0 obj << /D [2413 0 R /XYZ 95.641 680.448 null] >> endobj 2424 0 obj << /D [2413 0 R /XYZ 95.641 675.467 null] >> endobj 2425 0 obj << /D [2413 0 R /XYZ 95.641 622.665 null] >> endobj 2426 0 obj << /D [2413 0 R /XYZ 95.641 595.552 null] >> endobj 2427 0 obj << /D [2413 0 R /XYZ 95.641 595.552 null] >> endobj 2428 0 obj << /D [2413 0 R /XYZ 478.207 584.807 null] >> endobj 2429 0 obj << /D [2413 0 R /XYZ 181.975 562.889 null] >> endobj 2430 0 obj << /D [2413 0 R /XYZ 409.841 562.889 null] >> endobj 2431 0 obj << /D [2413 0 R /XYZ 228.681 551.93 null] >> endobj 2432 0 obj << /D [2413 0 R /XYZ 95.641 544.14 null] >> endobj 2433 0 obj << /D [2413 0 R /XYZ 95.641 544.14 null] >> endobj 2434 0 obj << /D [2413 0 R /XYZ 173.437 525.031 null] >> endobj 2435 0 obj << /D [2413 0 R /XYZ 284.982 514.072 null] >> endobj 2436 0 obj << /D [2413 0 R /XYZ 95.641 462.446 null] >> endobj 2437 0 obj << /D [2413 0 R /XYZ 95.641 462.446 null] >> endobj 2438 0 obj << /D [2413 0 R /XYZ 437.974 454.296 null] >> endobj 2439 0 obj << /D [2413 0 R /XYZ 236.518 443.337 null] >> endobj 2440 0 obj << /D [2413 0 R /XYZ 292.599 432.379 null] >> endobj 2441 0 obj << /D [2413 0 R /XYZ 417.833 432.379 null] >> endobj 2442 0 obj << /D [2413 0 R /XYZ 95.641 405.265 null] >> endobj 2443 0 obj << /D [2413 0 R /XYZ 95.641 405.265 null] >> endobj 2444 0 obj << /D [2413 0 R /XYZ 176.066 394.521 null] >> endobj 2445 0 obj << /D [2413 0 R /XYZ 228.75 394.521 null] >> endobj 2446 0 obj << /D [2413 0 R /XYZ 338.855 383.562 null] >> endobj 2447 0 obj << /D [2413 0 R /XYZ 269.129 372.603 null] >> endobj 2448 0 obj << /D [2413 0 R /XYZ 95.641 367.407 null] >> endobj 2449 0 obj << /D [2413 0 R /XYZ 95.641 367.407 null] >> endobj 2450 0 obj << /D [2413 0 R /XYZ 181.328 356.663 null] >> endobj 2451 0 obj << /D [2413 0 R /XYZ 219.195 356.663 null] >> endobj 2452 0 obj << /D [2413 0 R /XYZ 279.914 356.663 null] >> endobj 2453 0 obj << /D [2413 0 R /XYZ 250.617 334.745 null] >> endobj 2454 0 obj << /D [2413 0 R /XYZ 289.376 334.745 null] >> endobj 2455 0 obj << /D [2413 0 R /XYZ 197.568 323.786 null] >> endobj 2456 0 obj << /D [2413 0 R /XYZ 95.641 315.995 null] >> endobj 2457 0 obj << /D [2413 0 R /XYZ 95.641 315.995 null] >> endobj 2458 0 obj << /D [2413 0 R /XYZ 329.748 307.846 null] >> endobj 2459 0 obj << /D [2413 0 R /XYZ 438.902 307.846 null] >> endobj 2460 0 obj << /D [2413 0 R /XYZ 189.696 296.887 null] >> endobj 2461 0 obj << /D [2413 0 R /XYZ 363.484 296.887 null] >> endobj 2462 0 obj << /D [2413 0 R /XYZ 406.7 296.887 null] >> endobj 2463 0 obj << /D [2413 0 R /XYZ 471.325 296.887 null] >> endobj 2464 0 obj << /D [2413 0 R /XYZ 324.71 285.928 null] >> endobj 2465 0 obj << /D [2413 0 R /XYZ 95.641 278.137 null] >> endobj 2466 0 obj << /D [2413 0 R /XYZ 95.641 278.137 null] >> endobj 2467 0 obj << /D [2413 0 R /XYZ 95.641 256.219 null] >> endobj 2468 0 obj << /D [2413 0 R /XYZ 95.641 241.275 null] >> endobj 2469 0 obj << /D [2413 0 R /XYZ 95.641 241.275 null] >> endobj 2470 0 obj << /D [2413 0 R /XYZ 95.641 154.701 null] >> endobj 2471 0 obj << /D [2413 0 R /XYZ 95.641 154.701 null] >> endobj 2472 0 obj << /D [2413 0 R /XYZ 143.462 132.783 null] >> endobj 2473 0 obj << /D [2413 0 R /XYZ 331.105 121.824 null] >> endobj 2474 0 obj << /D [2413 0 R /XYZ 95.641 103.074 null] >> endobj 2475 0 obj << /D [2413 0 R /XYZ 95.641 103.074 null] >> endobj 2476 0 obj << /D [2413 0 R /XYZ 297.652 94.925 null] >> endobj 2477 0 obj << /D [2413 0 R /XYZ 95.641 89.729 null] >> endobj 2478 0 obj << /D [2413 0 R /XYZ 95.641 89.729 null] >> endobj 2479 0 obj << /D [2413 0 R /XYZ 277.134 68.026 null] >> endobj 2480 0 obj << /D [2413 0 R /XYZ 300.637 68.026 null] >> endobj 2481 0 obj << /D [2413 0 R /XYZ 320.822 68.026 null] >> endobj 2482 0 obj << /D [2413 0 R /XYZ 341.008 68.026 null] >> endobj 2483 0 obj << /D [2413 0 R /XYZ 361.193 68.026 null] >> endobj 2412 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F27 1179 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2486 0 obj << /Length 2936 /Filter /FlateDecode >> stream xÚíMsÛºñž_á[å‹!@𫹼6Ïθóâdò|éôõK”ʼnMjD*ŽÿýÛ/€ HÙî©Ó™ŽX,€Åb±Ÿ ÔY ?uV¦QfÔY®ËHgéÙêñ]|v#ŸÞ)™Ÿ%QZä8ô÷Ûw﯒ò¬ŒÊ,9»ÝÐŒÛõ¿·v×Wûó¥Nã…ŽÎÿ}û÷W¦8+`b†‰Ò4‘Ù¿]_]þv}sù;Ï ¦*JÒ\æ}ýöåÓ·¿}þ|}ó‰)»¼ºüvys®/qí»Ë[ϦQEdu¶ôÜd™äq”A«uT*ãdÒOw ïÕóq¯ûºY×*á5xÍò(†3ò‚ý¹*UØ7œ> š˜H'Zf^ëdJKe‘9ðŒ >m¿­š)- »Å,›jžÑ<Šø?gt–Ï8ÊSÇg4%°Ô •$ÎΖ*JCÓ~oͺú9%fâH™r†/w|Üzê¬Úµ [PƒÍÑÔ]µïÚfŽ/Ù+`ë[ÛöSž4H 3“mÖSRªD%’»l)˜bÌä`Àcž ³yÆÈ¡>@í†Çeb*§úKǽO—¿~üò™§ ‹zÞ¦Š¸{Óö•£bé˜gË,C ‚8*áù€0I'‹ë›_¯úa¸R›EÝ1ª!°ÜÜ|ùõ’gÐäHHl¸}n <Ù¦çi}˘ŸxUuB™OH[¬+Á=Õý¶nx¡lÈç§CÄ#öåø©òÇ¿à.3Àã¡C&R½ø#Žõž;jqèܺm5sÃà­Tž¹û;¥'±v–Òîgˆ¨¨ÈÑÕ'õÄÄŽÈæÐ¬úºm„±–Ûûª8¥ƒjhR–aX…ÂZê6È‹Y™ÅÊL˜7àŽ”sÃ' %V¯ØÉàÊO À{=Ëì0oÝsÓ6ÏÝœ)+ðôEnB[¾ï7Ëb‘Ìù½e’ˆò! #øiÛv‚ßÊ@- v¶ëª5ÃVpVÖ1ó÷‡Çªé?Ȳ ·M;Ýfk&øª˜×ð¦©T‹(1ÊKõıýÍL¼jsxxˆ£v’ááL¹°«Ua}ÍC¦ ñV¦_7M#ÞXF~AÔ/³Xƒ>¨ðÖ®j0Èù3æªðñpB-Œw°Mõóتԯ(iá&ìöÕ·ÐyxhŸà°e&n¦ÌÙZQCdÉó–èyÙT÷[ž+y„U¡“5Ðpª 2Èɲl¤ kÛÛ;ÛÍÚ*\wâœÕ "…ÔJ̓ÎskòÀMBÇ©,Âu3šYK‚‘+F¸d8´´Í”&7sɤ Žõ›“׸L éIs=’Èø‰ó€ >0äùØn8A g¢¶—bµÓµ´|^=$ZÞ6¿¾¤M‰™½ˆD Z@–š§£#sü²í¡ ó†ïªMºÐ.ÇåE¡{š®¬ï¼1¿xÐx”Þ퀪›Mï »äDµb‡ -[ z ìQ’P¼xhÛ]çý ¢²+:ÚS(rãÝ+÷1öv+³¼^ÓÇ’E-Œ†¢Ae1gAÐb.’á6 VN2©OàxW­Úf-sÇâ>¦Hàv_Û»‡Šéõ[ o{îˆ;‘µc’Å^WÆIÑpÒ8 RÇ$Ö"6’ Œ±lb B5_8wÇÜã:º¼˜@l6ö±~xfxà'Ê=~`wXŸrÌ‘8͘pM‹Òl@ï@$îv¡‹ŽœÑ€¼>à°3ìÔxOÜú=°n8ìûm8Û—tnG¢¯î«ý ßÁÍQ^O×)÷ –¾eû©ò».âY·nDn%œFÑætßë Øæ™qNúáž)g\ÌpÊ[H]ù„aEd+-" â¡+ Ï0p½uëðP¼æ®Ü]Îù?í+(Wd¸J$Ø‘ +µ‡øF:eBwTI *T,Þܨ,±hÞïDm)–„ÉPˆ¤KÚÄrs&p*ˆ=2z#FoÈCa×§cÞo¼…„¿{3ò&ô†ýRZΨ‚ø¥ü !˜ q@‡%t¼L•“) -7S™šÀ­Û(ð<´<<ÿ”õÀ§$åQx DÅ€7(ìlxHçñhš;åîr¾NãÞƒ Zèp_®Çn-7pÞ¾^윳«SJÑûNæêû,E€LBEŠÑ3@É% `êΘ ÙG–9û”w/Ü:â›–"ãR.›±³£þŒ³+޹ Û»qvÞ‘@å:»“nB½æ' õôlö®ã(Ž]‰ùR’—®Ê¼«¶ö^Ÿߌ@gª~bÉÃ0I¶qóêþà„Œ}|óòIÀ¤8 D+Y}œEeafܲ 3v‚Pøì¡•ØÔ6Ç$¡0:NÃ`½†K®Ñd«õÅ1:{u„衇èl¡Â™ªða‡éSAO4 Í>Ÿ¤)”çοw/ÜJ©}vè¼>ä›LúîÐ3PK+|Dì4Ãg½ÓB/WQ¦®l^R:|¾œ²1ý/ËÏ•‰òdd"+{@å¸ðY•d?^m¸ Ó:ŸI’ŽpòR–ÐKÓ9žÆ÷MU¾åxqZé¶ÜÞ ;äd€Ÿ( 4È|üš4<'üó¼Ô ~w‹ý»ø‡mµú.é…K$èÔõ|C»?QBÅ‘ + ]pemA®²@ÈeÅQeˆêGµfÐǵBsaT¸‚W†ËN2l»Ul6÷¾œ0ÙH1¸°Ò“ pzqMÞ3,Q°±œ—¬ZKšÄytÉcñMþXkŸ(jÂc¹V»xîK&Œ¼PÖHF2µÿ§Tr,.}ɱƒ¯öÅÈàúo¾8l×cXáòf@W–‚[~Uƒ[ ç'‚BjÂâTIqªÂ´±â6©l¿ë>L@”×"¤°©-EŠ®Ò§A8F†¬”‹XÍV+ñÔ²?hÓP›"Ÿ£H\¯­.´¡ìÃú·\¸ËJ¤M¸M|úAưd*D‚ThŽŠ#£2–)ÙW28#¾:”¡)D(mž™»+Ƈ·)DÖBÐòÐj[?¬e„Îhr9#`\¾05ŠÄ4¢4£þnÇXŸ.{;‡‘!¯XŒ‡Šc¶ëÚUmé…ûņåa©ÍÞh4HÆ=*Ýwv.å«ýÀÅTzÈ ÍØÝ`ÑñËÝãRƒë =¯q>€ x0:xàB9¯éMz®¡.²Ð±G/ÿH‚M¶È¯6Z.ã¢A`( wënÎDpL{*ñr…–§±B\CåàÁGÀœÑaa-LìÂáÏä`í ÃáS¢kŸ“óQ(»©ÿï'‚åÿÁÿR"(Ñé<ÐèWÿ¿.½”Otüwü,†÷€Ì¶ûŽ1îÕ¶UDéì:¼Ÿ<—÷mÞ|ƒp£´‘?Ñù´QÅÀO1~¿ä¼ËXqqš¿êaüu\û·u‹èËßkòÅ#²íÐôÆÔ¬#žBo"šãžÆ7…fÙïíºÆ0âv÷5àDþ2—¿àFèCt#üÊõTÓ£}ÿ5©v(nùë±k¯G¾ ùÒÃ÷ðmÛ>¶Nxô—³¥É£BC›¥e”êÑŸÎNþUN›Sÿ\‹Ãõ'.endstream endobj 2485 0 obj << /Type /Page /Contents 2486 0 R /Resources 2484 0 R /MediaBox [0 0 609.714 789.041] /Parent 2344 0 R >> endobj 2487 0 obj << /D [2485 0 R /XYZ 95.641 729.265 null] >> endobj 2488 0 obj << /D [2485 0 R /XYZ 143.462 706.351 null] >> endobj 2489 0 obj << /D [2485 0 R /XYZ 244.742 706.351 null] >> endobj 2490 0 obj << /D [2485 0 R /XYZ 287.969 706.351 null] >> endobj 2491 0 obj << /D [2485 0 R /XYZ 400.009 706.351 null] >> endobj 2492 0 obj << /D [2485 0 R /XYZ 95.641 682.62 null] >> endobj 2493 0 obj << /D [2485 0 R /XYZ 95.641 682.62 null] >> endobj 2494 0 obj << /D [2485 0 R /XYZ 187.336 674.471 null] >> endobj 2495 0 obj << /D [2485 0 R /XYZ 377.229 674.471 null] >> endobj 2496 0 obj << /D [2485 0 R /XYZ 156.466 663.512 null] >> endobj 2497 0 obj << /D [2485 0 R /XYZ 241.174 663.512 null] >> endobj 2498 0 obj << /D [2485 0 R /XYZ 287.638 652.553 null] >> endobj 2499 0 obj << /D [2485 0 R /XYZ 323.538 652.553 null] >> endobj 2500 0 obj << /D [2485 0 R /XYZ 189.579 641.594 null] >> endobj 2501 0 obj << /D [2485 0 R /XYZ 232.946 641.594 null] >> endobj 2502 0 obj << /D [2485 0 R /XYZ 95.641 633.803 null] >> endobj 2503 0 obj << /D [2485 0 R /XYZ 95.641 633.803 null] >> endobj 2504 0 obj << /D [2485 0 R /XYZ 161.803 614.695 null] >> endobj 2505 0 obj << /D [2485 0 R /XYZ 220.044 614.695 null] >> endobj 2506 0 obj << /D [2485 0 R /XYZ 95.641 606.904 null] >> endobj 2507 0 obj << /D [2485 0 R /XYZ 95.641 606.904 null] >> endobj 2508 0 obj << /D [2485 0 R /XYZ 197.324 598.755 null] >> endobj 2509 0 obj << /D [2485 0 R /XYZ 263.136 598.755 null] >> endobj 2510 0 obj << /D [2485 0 R /XYZ 187.498 587.796 null] >> endobj 2511 0 obj << /D [2485 0 R /XYZ 471.034 587.796 null] >> endobj 2512 0 obj << /D [2485 0 R /XYZ 420.872 576.837 null] >> endobj 2513 0 obj << /D [2485 0 R /XYZ 95.641 558.087 null] >> endobj 2514 0 obj << /D [2485 0 R /XYZ 95.641 558.087 null] >> endobj 2515 0 obj << /D [2485 0 R /XYZ 95.641 487.352 null] >> endobj 2516 0 obj << /D [2485 0 R /XYZ 95.641 487.352 null] >> endobj 2517 0 obj << /D [2485 0 R /XYZ 95.641 419.213 null] >> endobj 2518 0 obj << /D [2485 0 R /XYZ 95.641 419.213 null] >> endobj 2519 0 obj << /D [2485 0 R /XYZ 209.647 408.468 null] >> endobj 2520 0 obj << /D [2485 0 R /XYZ 199.333 386.55 null] >> endobj 2521 0 obj << /D [2485 0 R /XYZ 411.886 386.55 null] >> endobj 2522 0 obj << /D [2485 0 R /XYZ 383.581 375.592 null] >> endobj 2523 0 obj << /D [2485 0 R /XYZ 95.641 359.437 null] >> endobj 2524 0 obj << /D [2485 0 R /XYZ 95.641 359.437 null] >> endobj 2525 0 obj << /D [2485 0 R /XYZ 95.641 318.984 null] >> endobj 2526 0 obj << /D [2485 0 R /XYZ 95.641 318.984 null] >> endobj 2527 0 obj << /D [2485 0 R /XYZ 95.641 250.844 null] >> endobj 2528 0 obj << /D [2485 0 R /XYZ 95.641 250.844 null] >> endobj 2529 0 obj << /D [2485 0 R /XYZ 95.641 177.514 null] >> endobj 2530 0 obj << /D [2485 0 R /XYZ 95.641 177.514 null] >> endobj 2531 0 obj << /D [2485 0 R /XYZ 95.641 139.656 null] >> endobj 2532 0 obj << /D [2485 0 R /XYZ 95.641 139.656 null] >> endobj 2533 0 obj << /D [2485 0 R /XYZ 203.519 131.507 null] >> endobj 1281 0 obj << /D [2485 0 R /XYZ 95.641 101.798 null] >> endobj 2484 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2536 0 obj << /Length 547 /Filter /FlateDecode >> stream xÚ½UËnÛ0¼û+x”Z“K®H"§4• ±¸B/mб[.ühÑ¿/õ°¬Fv‚´Iáƒ,i4;3»$ãî'˜%•`-`HlºîqöàÞ z¢F#ÁhdÈèð.éõci™J–,J\2ûâÝ,ÓïûùÖ¸‡àK>ôce˜qÀ°*D²Fßãèv8Ž>U¸6! ¤kÜÝäã`r= ǃŠyÅÑ$û»‰Šo{QÒˆEY”°,hÔ>¶(a@I÷¬P# ™@àDmK±ÜK×ÙÊäýrõµñâC>Ýg›|W¤–A ‹¤ ’!ú“’ë(PÛºÈ:Ýn³ôaÞå“´¤ö•ïfJ ÍQìõ¨K!4}bWuÜtŠ;ÐB—¿‹Œ’5”ãv·¯o–wóó¼~±Yt Â#±€$`É5¿vÀŒ=&°<ìîÓ|v&7{V¾y¡å@Uª@­¯¿H÷Ë〿–÷ŸÙâLç‘ õ¿Ï8WÆIÁË­/Ôõ×›Øæ¢6Þz@âè;Ÿ.³Õl;ÏÏ,#·zµ~û®kÐåj=yÏëû–ÓòZéô…ñœÖòI–¿Në™Ë¹¤?“Û¥š¬.fÐì!?Zƒuî/N@¥ï…½Îù*½lüÿ4ßíy‚ÿÙüBÔÏí3†»É! „gÏÅ]ãÂÂçSG%ÒcÖ‚ÕWGÊßWÚΈendstream endobj 2535 0 obj << /Type /Page /Contents 2536 0 R /Resources 2534 0 R /MediaBox [0 0 609.714 789.041] /Parent 2344 0 R >> endobj 2537 0 obj << /D [2535 0 R /XYZ 95.641 729.265 null] >> endobj 390 0 obj << /D [2535 0 R /XYZ 194.357 706.351 null] >> endobj 2538 0 obj << /D [2535 0 R /XYZ 95.641 703.856 null] >> endobj 2539 0 obj << /D [2535 0 R /XYZ 95.641 686.421 null] >> endobj 2540 0 obj << /D [2535 0 R /XYZ 95.641 680.394 null] >> endobj 2541 0 obj << /D [2535 0 R /XYZ 95.641 670.431 null] >> endobj 2542 0 obj << /D [2535 0 R /XYZ 175.741 657.036 null] >> endobj 2543 0 obj << /D [2535 0 R /XYZ 214.476 657.036 null] >> endobj 2544 0 obj << /D [2535 0 R /XYZ 219.856 657.036 null] >> endobj 394 0 obj << /D [2535 0 R /XYZ 146.232 636.115 null] >> endobj 2545 0 obj << /D [2535 0 R /XYZ 95.641 631.133 null] >> endobj 2546 0 obj << /D [2535 0 R /XYZ 95.641 626.152 null] >> endobj 2547 0 obj << /D [2535 0 R /XYZ 95.641 591.781 null] >> endobj 2548 0 obj << /D [2535 0 R /XYZ 95.641 586.8 null] >> endobj 2549 0 obj << /D [2535 0 R /XYZ 95.641 576.837 null] >> endobj 2550 0 obj << /D [2535 0 R /XYZ 170.361 561.993 null] >> endobj 2551 0 obj << /D [2535 0 R /XYZ 204.254 561.993 null] >> endobj 2552 0 obj << /D [2535 0 R /XYZ 209.634 561.993 null] >> endobj 398 0 obj << /D [2535 0 R /XYZ 146.232 541.071 null] >> endobj 2553 0 obj << /D [2535 0 R /XYZ 95.641 536.09 null] >> endobj 2554 0 obj << /D [2535 0 R /XYZ 95.641 531.108 null] >> endobj 2555 0 obj << /D [2535 0 R /XYZ 95.641 496.737 null] >> endobj 2556 0 obj << /D [2535 0 R /XYZ 95.641 491.756 null] >> endobj 2557 0 obj << /D [2535 0 R /XYZ 95.641 481.793 null] >> endobj 2558 0 obj << /D [2535 0 R /XYZ 170.361 466.949 null] >> endobj 2559 0 obj << /D [2535 0 R /XYZ 189.728 466.949 null] >> endobj 2560 0 obj << /D [2535 0 R /XYZ 195.108 466.949 null] >> endobj 402 0 obj << /D [2535 0 R /XYZ 146.232 446.027 null] >> endobj 2561 0 obj << /D [2535 0 R /XYZ 95.641 441.046 null] >> endobj 2562 0 obj << /D [2535 0 R /XYZ 95.641 436.065 null] >> endobj 2563 0 obj << /D [2535 0 R /XYZ 95.641 401.694 null] >> endobj 2564 0 obj << /D [2535 0 R /XYZ 95.641 396.712 null] >> endobj 2565 0 obj << /D [2535 0 R /XYZ 95.641 386.75 null] >> endobj 2566 0 obj << /D [2535 0 R /XYZ 164.981 371.905 null] >> endobj 2567 0 obj << /D [2535 0 R /XYZ 208.558 371.905 null] >> endobj 2568 0 obj << /D [2535 0 R /XYZ 213.938 371.905 null] >> endobj 406 0 obj << /D [2535 0 R /XYZ 146.232 350.984 null] >> endobj 2569 0 obj << /D [2535 0 R /XYZ 95.641 346.003 null] >> endobj 2570 0 obj << /D [2535 0 R /XYZ 95.641 341.021 null] >> endobj 2571 0 obj << /D [2535 0 R /XYZ 95.641 306.65 null] >> endobj 2572 0 obj << /D [2535 0 R /XYZ 95.641 301.669 null] >> endobj 2573 0 obj << /D [2535 0 R /XYZ 95.641 291.706 null] >> endobj 2574 0 obj << /D [2535 0 R /XYZ 170.361 276.862 null] >> endobj 2575 0 obj << /D [2535 0 R /XYZ 218.78 276.862 null] >> endobj 2576 0 obj << /D [2535 0 R /XYZ 224.159 276.862 null] >> endobj 410 0 obj << /D [2535 0 R /XYZ 146.232 255.94 null] >> endobj 2577 0 obj << /D [2535 0 R /XYZ 95.641 250.959 null] >> endobj 2578 0 obj << /D [2535 0 R /XYZ 95.641 245.978 null] >> endobj 2579 0 obj << /D [2535 0 R /XYZ 95.641 211.607 null] >> endobj 2580 0 obj << /D [2535 0 R /XYZ 95.641 206.625 null] >> endobj 2581 0 obj << /D [2535 0 R /XYZ 95.641 196.663 null] >> endobj 2582 0 obj << /D [2535 0 R /XYZ 170.361 181.818 null] >> endobj 2583 0 obj << /D [2535 0 R /XYZ 213.938 181.818 null] >> endobj 2584 0 obj << /D [2535 0 R /XYZ 219.318 181.818 null] >> endobj 414 0 obj << /D [2535 0 R /XYZ 146.232 160.897 null] >> endobj 2585 0 obj << /D [2535 0 R /XYZ 95.641 155.915 null] >> endobj 2586 0 obj << /D [2535 0 R /XYZ 95.641 150.934 null] >> endobj 2587 0 obj << /D [2535 0 R /XYZ 95.641 116.563 null] >> endobj 2588 0 obj << /D [2535 0 R /XYZ 95.641 111.582 null] >> endobj 2589 0 obj << /D [2535 0 R /XYZ 95.641 101.619 null] >> endobj 2534 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F26 1177 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2592 0 obj << /Length 605 /Filter /FlateDecode >> stream xÚµ–MoÚ@†ïü Aª'ûé]«§ ¢â#"¾5=¸µi`GõCê﬽€]C1U"6ìxæ}ÞÙñB‚êø…î†B;=(HÉmôd< &ãYðTÆUJ \*÷¸˜÷Óéx6*3/‚a°f=ÚíæÙNe ªApê¸Gµƒ¸\ððÊøT„<é<=… Sµä0ëD™e®À“¾Y'¿*6EP&mÄ3‘¤é…®mÀð~ú{<Œ›y&yÞ5“Pê¨äa>Ÿ4S0ŠN°“úÞú-O~»”b!ì Zð"v•b/ÓhSšn0‹›lY^ Õ,_ïʯËÌöýû’ä»,µ Ñf—™²Me.E¦¨ÄâEÉÙ|4ÜfhÿÀ¸L³89)€ÿ¿Ï´LUôŠO¨TqQ³)ïQÝͲ}I; ýù´¼/¤<û7=¡-ùsS©©Ýî©·Ç¥°7ï ³ô¸}é±ûÑö¬ymá#mC8ïê˜HT×ùŸ ailg Ú®6vL–¥1ÛÓô´Øÿ× Xå»ýY¸ÆY}ã|ÏVñÅ>àÌop`î&È*-¯q´>G»¤þëÚLûáÍP Çx¼N·7Ñ%VŽÛ·dåžUV“øfÐIom‡™&?[bþçT_ÛÔ¨Š× 2’^m'TgW(Ð ¯x~âÔÖè‹+˜wé”'ÕçÿV¸Lendstream endobj 2591 0 obj << /Type /Page /Contents 2592 0 R /Resources 2590 0 R /MediaBox [0 0 609.714 789.041] /Parent 2344 0 R >> endobj 2593 0 obj << /D [2591 0 R /XYZ 95.641 729.265 null] >> endobj 2594 0 obj << /D [2591 0 R /XYZ 181.121 706.351 null] >> endobj 2595 0 obj << /D [2591 0 R /XYZ 195.646 706.351 null] >> endobj 2596 0 obj << /D [2591 0 R /XYZ 201.026 706.351 null] >> endobj 2597 0 obj << /D [2591 0 R /XYZ 255.03 706.351 null] >> endobj 2598 0 obj << /D [2591 0 R /XYZ 255.03 706.351 null] >> endobj 418 0 obj << /D [2591 0 R /XYZ 146.232 685.43 null] >> endobj 2599 0 obj << /D [2591 0 R /XYZ 95.641 680.448 null] >> endobj 2600 0 obj << /D [2591 0 R /XYZ 95.641 675.467 null] >> endobj 2601 0 obj << /D [2591 0 R /XYZ 95.641 641.096 null] >> endobj 2602 0 obj << /D [2591 0 R /XYZ 95.641 636.115 null] >> endobj 2603 0 obj << /D [2591 0 R /XYZ 95.641 626.152 null] >> endobj 2604 0 obj << /D [2591 0 R /XYZ 170.361 611.308 null] >> endobj 2605 0 obj << /D [2591 0 R /XYZ 194.57 611.308 null] >> endobj 2606 0 obj << /D [2591 0 R /XYZ 199.95 611.308 null] >> endobj 422 0 obj << /D [2591 0 R /XYZ 146.232 590.386 null] >> endobj 2607 0 obj << /D [2591 0 R /XYZ 95.641 585.405 null] >> endobj 2608 0 obj << /D [2591 0 R /XYZ 95.641 580.423 null] >> endobj 2609 0 obj << /D [2591 0 R /XYZ 95.641 546.052 null] >> endobj 2610 0 obj << /D [2591 0 R /XYZ 95.641 541.071 null] >> endobj 2611 0 obj << /D [2591 0 R /XYZ 95.641 531.108 null] >> endobj 2612 0 obj << /D [2591 0 R /XYZ 170.361 516.264 null] >> endobj 2613 0 obj << /D [2591 0 R /XYZ 189.728 516.264 null] >> endobj 2614 0 obj << /D [2591 0 R /XYZ 195.108 516.264 null] >> endobj 426 0 obj << /D [2591 0 R /XYZ 146.232 495.342 null] >> endobj 2615 0 obj << /D [2591 0 R /XYZ 95.641 490.361 null] >> endobj 2616 0 obj << /D [2591 0 R /XYZ 95.641 485.38 null] >> endobj 2617 0 obj << /D [2591 0 R /XYZ 95.641 451.009 null] >> endobj 2618 0 obj << /D [2591 0 R /XYZ 95.641 446.027 null] >> endobj 2619 0 obj << /D [2591 0 R /XYZ 95.641 436.065 null] >> endobj 2620 0 obj << /D [2591 0 R /XYZ 164.981 421.22 null] >> endobj 2621 0 obj << /D [2591 0 R /XYZ 179.507 421.22 null] >> endobj 2622 0 obj << /D [2591 0 R /XYZ 184.887 421.22 null] >> endobj 430 0 obj << /D [2591 0 R /XYZ 146.232 400.299 null] >> endobj 2623 0 obj << /D [2591 0 R /XYZ 95.641 395.318 null] >> endobj 2624 0 obj << /D [2591 0 R /XYZ 95.641 390.336 null] >> endobj 2625 0 obj << /D [2591 0 R /XYZ 95.641 355.965 null] >> endobj 2626 0 obj << /D [2591 0 R /XYZ 95.641 350.984 null] >> endobj 2627 0 obj << /D [2591 0 R /XYZ 95.641 341.021 null] >> endobj 2628 0 obj << /D [2591 0 R /XYZ 164.981 326.177 null] >> endobj 434 0 obj << /D [2591 0 R /XYZ 146.232 305.255 null] >> endobj 2629 0 obj << /D [2591 0 R /XYZ 95.641 300.274 null] >> endobj 2630 0 obj << /D [2591 0 R /XYZ 95.641 295.293 null] >> endobj 2631 0 obj << /D [2591 0 R /XYZ 95.641 260.922 null] >> endobj 2632 0 obj << /D [2591 0 R /XYZ 95.641 255.94 null] >> endobj 2633 0 obj << /D [2591 0 R /XYZ 95.641 245.978 null] >> endobj 2634 0 obj << /D [2591 0 R /XYZ 164.981 231.133 null] >> endobj 438 0 obj << /D [2591 0 R /XYZ 146.232 210.212 null] >> endobj 2635 0 obj << /D [2591 0 R /XYZ 95.641 205.23 null] >> endobj 2636 0 obj << /D [2591 0 R /XYZ 95.641 200.249 null] >> endobj 2637 0 obj << /D [2591 0 R /XYZ 95.641 165.878 null] >> endobj 2638 0 obj << /D [2591 0 R /XYZ 95.641 160.897 null] >> endobj 2639 0 obj << /D [2591 0 R /XYZ 95.641 150.934 null] >> endobj 2640 0 obj << /D [2591 0 R /XYZ 164.981 136.09 null] >> endobj 2641 0 obj << /D [2591 0 R /XYZ 198.874 136.09 null] >> endobj 2642 0 obj << /D [2591 0 R /XYZ 204.254 136.09 null] >> endobj 442 0 obj << /D [2591 0 R /XYZ 146.232 115.168 null] >> endobj 2643 0 obj << /D [2591 0 R /XYZ 95.641 110.187 null] >> endobj 2644 0 obj << /D [2591 0 R /XYZ 95.641 105.206 null] >> endobj 2645 0 obj << /D [2591 0 R /XYZ 95.641 70.834 null] >> endobj 2646 0 obj << /D [2591 0 R /XYZ 95.641 65.853 null] >> endobj 2590 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2649 0 obj << /Length 2008 /Filter /FlateDecode >> stream xÚÍ]oÛ6ð½¿Âos€š¿$yi×Ú]¶&-²`/ë0(6 µ%Ï’’ÃþûŽ~»Ê¶µÞM˜ŒÆŒœýqóó«™HG) ÆQ"%wØ.fÓWÓ_/$()á2qxŸ®?¾¿~syyqõ)_OgÓëéÕ¿š½/¦7-³Œ›#ÔhÒr»/΄'‰adŒ(*Z„ìøôÍÞ\:!Ìb”˜5F‰¤Ê!lwú~™m$GƒÎ”—ôs$£CeHÂÓÁsÜ:MMhG‚ž;EÉNQ l™‰ $ÜñtFÓ±¾Ï˦B…‡ùúçyã"«³Û¬%êþÂí0KKgö´Ç²¤cmB&áXNoޝòõb§‹CADJMÿ?]¼<ÜO#’Ho”‹«wþ6hž²ÓDâ–ÆÍ êŽX`“³IE㿉õÜd^n6Y±¨žÐÍ?fxR*z^—åmT¯¬‘Êæn…´‚ugÏrélmýàY欶à>zˆc§ž²f¢þ«9ãçX“~‡ÖT'¬IUJd$ŸkÍl½ÆÉª©ní‘&Ôf~ÈïuÕ7sÖ ùg™zYî†sXBb©¾!nŸÔñÓ‘û½ØI*’Òo·“U{îm’CÄõÓ­6guFŒ¤ ˜¡~³Ò•ËÄ˦˜×yY8*uöEïÛ·=sx™;*³ÌÝ5]Ô~Åù &†ºÙ>çƒí7™9ÌaÞ–MÝ1_“CÝEF;D Ëõe¶ÛåÙ>T¡„úú×kX¥F'ŸÁ®»ªÆ 3‚z ïQ˜.ËÆ A]¡ ‰´åz ç®vµ—nÓǬxv&(J7¨–®¸ZIžRæO二H"}]*áÔ“N—ðáÆ«efYµ0›"ÂNq”¢š’;§&%WÑñb &eB¢6ÿ>äË`‚À–|[}shÄ(£=w²°Äµ)?¢,³²Àˆ²À¤ /s‡âX0ÁÏi67Ëâ=®`É™ºÝw' î_®j½Àµ­ÞU6t ¾§PÖV®¨'ï®Z— ‘«Ó~qÕo­B K8!vð°¢ÙÜú¾Ü Ûk¾‘͉;?`v–ƒÝ,ÃÜÆD)_“[OïyUD¢Ø»Ì:;N‰B ŸÈ}ÎD‘y3i½È| %;µùÐLÌ ~ÕzƒçŽR†C?N ¬¶z>qjTœ¤=›×PŸiâ_ôã¡Húúà³üBWó]~«G Vi¨ ‹Ïè~l]5,0C&ÅS‘7jϾ.Ñ¥‚[µ5ô˜1Yìͽ,ÊÅ@Šà€£Ô!…7¤pê6\Ø/KÉÎŒ/sÁ¬Dk';?}÷öãåþ†Ð?¯ÊÚ/¬2G=Cƒ&’Óvöœ%büÆÐdÑø>[7§&òÍX”uà6Ñøêã»i€Lp~±Äñ±lû!+jÕ%Žxƒ+çºr”GGV{ÈëUÏOæ¯Í>Øá¡e­lYäÈ„o¬Â<,ÉlÜTz {g’HáSÿnØ;8x‘Ðr7@„¡Øiç`ŠDm”{§ur”Èívœºn€¾bÀ6ÛÔ-³ YàcªqzEâ4é‡oë+‡ž m&ó^{4<"z*: ìÞ8Ž+ ½jeaÃQ=eñ¸ `%Kã^Ï|{¿—^OkGêb¥AwÀ‡Uùƒ[Çg‚Ôõ>ØfUe³Ìm²J]Kj¾ƒ–ôA¶¼¦®eJißï˜ÀÓS•‘ 4Úòˆ¤1?V$MÅ'8ï$p¢¿m…ŠÏæs½­}öÕ¹ëH‚6|VEû€bÇ×ôú©\ÛUÏAz×î—‡´b¸F ·\è¯GˆP¸wð“9›BóK‡^·ŽÓY¯Ë‡³‰`)¦31áiƼֻÌäX ¯M`¯Mf²„‚ÕÞœì¾Âoñ*Iú¦öWªÅB %ÞµOè4†ËÝ_p_YÀYe0Ï–øVbîÝ÷vXq"ÿD€î‰ðˆ8)dyî³ü§£îA¹à¨þE!Jh¯²~ì¼ÕË2ŒÞzÕ]ɯÉCϤ¯¡Ã¢F½„ûöhÇ>Ç…—ÕvœÙ<É97á BĘÔa®-óúà°{q„“þ럥X¸pèµórQWˆiÝN·žßÛl—m\w똽M[çáB¢0Ú&LM˜ë¯Î>U•ûÜá×n´ª¥íÄa—=íM ý\§o×q}¯&}zqÈ¡^{ —¾Ø½‘žãÜ2ÃbŠAœ»g ñ,‹ Ä–ºØ•5³¹¨õ!CµlŠÚt ›/dØP°HFÉîЕXò†;¼=Vu¶«óâÎyní[{í WðxT?”X¶< •’hcǦÒí+"v’½{D÷Úu[.‚KLøgËD$$57÷X*hˆÿnQJ„uøSÿ±dŸ6 Ø·ú€ä¿$«ÏŒendstream endobj 2648 0 obj << /Type /Page /Contents 2649 0 R /Resources 2647 0 R /MediaBox [0 0 609.714 789.041] /Parent 2721 0 R >> endobj 2650 0 obj << /D [2648 0 R /XYZ 95.641 729.265 null] >> endobj 2651 0 obj << /D [2648 0 R /XYZ 95.641 716.314 null] >> endobj 2652 0 obj << /D [2648 0 R /XYZ 164.981 706.351 null] >> endobj 2653 0 obj << /D [2648 0 R /XYZ 198.874 706.351 null] >> endobj 2654 0 obj << /D [2648 0 R /XYZ 204.254 706.351 null] >> endobj 446 0 obj << /D [2648 0 R /XYZ 146.232 685.43 null] >> endobj 2655 0 obj << /D [2648 0 R /XYZ 95.641 680.448 null] >> endobj 2656 0 obj << /D [2648 0 R /XYZ 95.641 675.467 null] >> endobj 2657 0 obj << /D [2648 0 R /XYZ 95.641 641.096 null] >> endobj 2658 0 obj << /D [2648 0 R /XYZ 95.641 631.133 null] >> endobj 2659 0 obj << /D [2648 0 R /XYZ 95.641 631.133 null] >> endobj 2660 0 obj << /D [2648 0 R /XYZ 197.26 621.27 null] >> endobj 2661 0 obj << /D [2648 0 R /XYZ 225.19 621.27 null] >> endobj 2662 0 obj << /D [2648 0 R /XYZ 269.332 621.27 null] >> endobj 2663 0 obj << /D [2648 0 R /XYZ 318.853 621.27 null] >> endobj 450 0 obj << /D [2648 0 R /XYZ 95.641 620.221 null] >> endobj 2664 0 obj << /D [2648 0 R /XYZ 95.641 595.367 null] >> endobj 2665 0 obj << /D [2648 0 R /XYZ 95.641 590.386 null] >> endobj 2666 0 obj << /D [2648 0 R /XYZ 95.641 556.015 null] >> endobj 2667 0 obj << /D [2648 0 R /XYZ 95.641 546.052 null] >> endobj 2668 0 obj << /D [2648 0 R /XYZ 95.641 546.052 null] >> endobj 2669 0 obj << /D [2648 0 R /XYZ 191.88 536.189 null] >> endobj 2670 0 obj << /D [2648 0 R /XYZ 219.811 536.189 null] >> endobj 2671 0 obj << /D [2648 0 R /XYZ 263.952 536.189 null] >> endobj 2672 0 obj << /D [2648 0 R /XYZ 313.473 536.189 null] >> endobj 454 0 obj << /D [2648 0 R /XYZ 95.641 534.974 null] >> endobj 2673 0 obj << /D [2648 0 R /XYZ 95.641 510.286 null] >> endobj 2674 0 obj << /D [2648 0 R /XYZ 95.641 505.305 null] >> endobj 2675 0 obj << /D [2648 0 R /XYZ 95.641 470.934 null] >> endobj 2676 0 obj << /D [2648 0 R /XYZ 95.641 460.971 null] >> endobj 2677 0 obj << /D [2648 0 R /XYZ 95.641 460.971 null] >> endobj 2678 0 obj << /D [2648 0 R /XYZ 186.501 451.108 null] >> endobj 2679 0 obj << /D [2648 0 R /XYZ 225.262 451.108 null] >> endobj 2680 0 obj << /D [2648 0 R /XYZ 274.783 451.108 null] >> endobj 458 0 obj << /D [2648 0 R /XYZ 95.641 450.059 null] >> endobj 2681 0 obj << /D [2648 0 R /XYZ 95.641 425.205 null] >> endobj 2682 0 obj << /D [2648 0 R /XYZ 95.641 420.224 null] >> endobj 2683 0 obj << /D [2648 0 R /XYZ 95.641 367.422 null] >> endobj 2684 0 obj << /D [2648 0 R /XYZ 95.641 348.673 null] >> endobj 2685 0 obj << /D [2648 0 R /XYZ 95.641 348.673 null] >> endobj 2686 0 obj << /D [2648 0 R /XYZ 143.462 329.564 null] >> endobj 2687 0 obj << /D [2648 0 R /XYZ 95.641 321.773 null] >> endobj 2688 0 obj << /D [2648 0 R /XYZ 95.641 321.773 null] >> endobj 2689 0 obj << /D [2648 0 R /XYZ 441.133 313.624 null] >> endobj 2690 0 obj << /D [2648 0 R /XYZ 367.897 302.665 null] >> endobj 2691 0 obj << /D [2648 0 R /XYZ 95.641 283.915 null] >> endobj 2692 0 obj << /D [2648 0 R /XYZ 95.641 283.915 null] >> endobj 2693 0 obj << /D [2648 0 R /XYZ 95.641 267.975 null] >> endobj 2694 0 obj << /D [2648 0 R /XYZ 95.641 267.975 null] >> endobj 2695 0 obj << /D [2648 0 R /XYZ 220.523 259.826 null] >> endobj 2696 0 obj << /D [2648 0 R /XYZ 95.641 241.076 null] >> endobj 2697 0 obj << /D [2648 0 R /XYZ 95.641 241.076 null] >> endobj 2698 0 obj << /D [2648 0 R /XYZ 95.641 225.136 null] >> endobj 2699 0 obj << /D [2648 0 R /XYZ 95.641 225.136 null] >> endobj 2700 0 obj << /D [2648 0 R /XYZ 188.647 216.986 null] >> endobj 2701 0 obj << /D [2648 0 R /XYZ 366.228 216.986 null] >> endobj 2702 0 obj << /D [2648 0 R /XYZ 143.462 206.027 null] >> endobj 2703 0 obj << /D [2648 0 R /XYZ 232.271 206.027 null] >> endobj 2704 0 obj << /D [2648 0 R /XYZ 269.003 195.069 null] >> endobj 2705 0 obj << /D [2648 0 R /XYZ 304.132 195.069 null] >> endobj 2706 0 obj << /D [2648 0 R /XYZ 164.991 184.11 null] >> endobj 2707 0 obj << /D [2648 0 R /XYZ 208.358 184.11 null] >> endobj 2708 0 obj << /D [2648 0 R /XYZ 95.641 176.319 null] >> endobj 2709 0 obj << /D [2648 0 R /XYZ 95.641 176.319 null] >> endobj 2710 0 obj << /D [2648 0 R /XYZ 143.462 157.21 null] >> endobj 2711 0 obj << /D [2648 0 R /XYZ 196.323 157.21 null] >> endobj 2712 0 obj << /D [2648 0 R /XYZ 95.641 149.42 null] >> endobj 2713 0 obj << /D [2648 0 R /XYZ 95.641 149.42 null] >> endobj 2714 0 obj << /D [2648 0 R /XYZ 193.256 141.27 null] >> endobj 2715 0 obj << /D [2648 0 R /XYZ 256.309 141.27 null] >> endobj 2716 0 obj << /D [2648 0 R /XYZ 188.539 130.311 null] >> endobj 2717 0 obj << /D [2648 0 R /XYZ 476.413 130.311 null] >> endobj 2718 0 obj << /D [2648 0 R /XYZ 424.894 119.352 null] >> endobj 2719 0 obj << /D [2648 0 R /XYZ 95.641 100.603 null] >> endobj 2720 0 obj << /D [2648 0 R /XYZ 95.641 100.603 null] >> endobj 2647 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R /F27 1179 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2724 0 obj << /Length 1503 /Filter /FlateDecode >> stream xÚíXÍnã6¾ç)|´˜+R¤D!§v× Rì&EâæÒ…b3±P[2$y·AÑwï3”(ËÙ´À>˜‡Ã™o~(>‰àÇ'™b‰ä“TdL$j²ÚE“gX¹:ãÄMb¦tj—~\ž½»Œ³IƲ$ž,ŸÇrýëôý&ß·¦žÍ…Ц‚Í~_þôîRê‰ÆÄ2JɔЉûãõåâãõÍâùBгX¥Ä÷óÝíÕÝŸ>]ß\¡ä»Ååânq3ãÓ÷ »÷l±ìÔ”\3óɼÓöø"ó8XÿB°ŒËîBRõzú 5ûêИ†T½‚2bRpâ*Ð+M§y‰ÿØ o«gí&oq´­ª½cÕ@¬g\O«\âyƒ´|»õ; 6‡æ1/×ø5¾Ÿ Ѫ'ZCOù®Ø‚È—ç|Êxݺ Læ¤ôœG,S™Sý·(ucõKâé>¯óA&¯ä§Nö ’Ì_{§¿iš¢*/ˆ¿¥ YUNW :™ Ñ«b?çu‘?n ÉXNš5"Úì*ÝÏYާS“¯hÇ9½Êö ¨·F-ÜÒºcìîjو˹ÐÎËÖ<ûÅUu(;Î@_Þ9×3ug™j÷º5ˆã¦Íë¶(ŸqæÁU†£åÆ®18k¿T8ð”]þ‚ƒGbÄ®qô¥€[—´}CË…´¡ùk ÖA̹b™tÊ_V5`1$‘lj³¢ýïÁÎÐVvD€DïKÐeƒ4óÙÔ/8ô sÒJ¿Åà`·ùcÞ˜árÞ¬L¹¶fu 'CGüi¬Å쩈pm*]´ðÌE‹[ìC¨¸h‚Kæ0 ÓºÃDÖc˜èØfäNa[˜æ‚¤·$žé$”:uÀ‘A!'_÷è…ÉÊzÙ8€‡…Ç]à,^³`e6¬†H&\°H)‹Œ¹L™¶é&ÖŒ[DÞ· ¸¦ ø²7” 1‰éi ×­g"š®)ã‚ßúÒᥥP¡¸“öTÕMu¨ÇÈ•1‹ œD”âT4®DŠÅ©ç¸¹ý°øãa,&ŽY¬1e€CÒ„–¯o–§DÍF½&|6O¢hú÷X˜àLq¯ÑªÚí\â_ Ê×ÄöÏ8窛J%˜Ÿ3-cÇׇüƒ2®èXßZKÂÒÊ;Û%pse#—Ì9+3kïßò»O¾…OÐå¸QY­]-\ÿÿÛ5•=ë»k¾k*Êd0´+m’…LŽ$Ó®ªOÎûºçB;Ï)Á4Øb”èm(g" ÛÐØ6V¶&"¬¾®³ ]†‰/ÀÀ5¸¢Ûn¯ˆ+)÷]jÀº]*Ê#^1†ô¾÷DMOöžqÅÄð|ØP³$"Þ(óÒõôþö—;$a+µª|Oçd”kdsÔR|'j‰AÍ e£µt_3-Ñw|ãÊTO-{£ÚIW@Ý‚ãˆÒ*¬˜­ÙQ h—ûŠ k^R_QÁ¡$‹¼³yöøe¢Uø2±‚K<.x™8%á@ç‘I&3E7Õ]8%ÇI8Eáþ¾Ìendstream endobj 2723 0 obj << /Type /Page /Contents 2724 0 R /Resources 2722 0 R /MediaBox [0 0 609.714 789.041] /Parent 2721 0 R >> endobj 2725 0 obj << /D [2723 0 R /XYZ 95.641 729.265 null] >> endobj 2726 0 obj << /D [2723 0 R /XYZ 95.641 716.314 null] >> endobj 2727 0 obj << /D [2723 0 R /XYZ 95.641 716.314 null] >> endobj 2728 0 obj << /D [2723 0 R /XYZ 95.641 665.684 null] >> endobj 2729 0 obj << /D [2723 0 R /XYZ 95.641 665.684 null] >> endobj 1282 0 obj << /D [2723 0 R /XYZ 95.641 627.826 null] >> endobj 462 0 obj << /D [2723 0 R /XYZ 224.686 597.45 null] >> endobj 2730 0 obj << /D [2723 0 R /XYZ 95.641 594.954 null] >> endobj 2731 0 obj << /D [2723 0 R /XYZ 95.641 577.52 null] >> endobj 2732 0 obj << /D [2723 0 R /XYZ 95.641 567.557 null] >> endobj 2733 0 obj << /D [2723 0 R /XYZ 95.641 567.557 null] >> endobj 2734 0 obj << /D [2723 0 R /XYZ 191.88 560.189 null] >> endobj 2735 0 obj << /D [2723 0 R /XYZ 236.022 560.189 null] >> endobj 2736 0 obj << /D [2723 0 R /XYZ 285.543 560.189 null] >> endobj 466 0 obj << /D [2723 0 R /XYZ 95.641 559.14 null] >> endobj 2737 0 obj << /D [2723 0 R /XYZ 95.641 534.286 null] >> endobj 2738 0 obj << /D [2723 0 R /XYZ 95.641 529.305 null] >> endobj 2739 0 obj << /D [2723 0 R /XYZ 95.641 494.934 null] >> endobj 2740 0 obj << /D [2723 0 R /XYZ 95.641 484.971 null] >> endobj 2741 0 obj << /D [2723 0 R /XYZ 95.641 484.971 null] >> endobj 2742 0 obj << /D [2723 0 R /XYZ 191.88 475.108 null] >> endobj 2743 0 obj << /D [2723 0 R /XYZ 236.022 475.108 null] >> endobj 2744 0 obj << /D [2723 0 R /XYZ 285.543 475.108 null] >> endobj 470 0 obj << /D [2723 0 R /XYZ 95.641 474.059 null] >> endobj 2745 0 obj << /D [2723 0 R /XYZ 95.641 449.205 null] >> endobj 2746 0 obj << /D [2723 0 R /XYZ 95.641 444.224 null] >> endobj 2747 0 obj << /D [2723 0 R /XYZ 95.641 409.853 null] >> endobj 2748 0 obj << /D [2723 0 R /XYZ 95.641 399.89 null] >> endobj 2749 0 obj << /D [2723 0 R /XYZ 95.641 399.89 null] >> endobj 2750 0 obj << /D [2723 0 R /XYZ 191.88 390.027 null] >> endobj 2751 0 obj << /D [2723 0 R /XYZ 236.022 390.027 null] >> endobj 2752 0 obj << /D [2723 0 R /XYZ 285.543 390.027 null] >> endobj 474 0 obj << /D [2723 0 R /XYZ 95.641 388.978 null] >> endobj 2753 0 obj << /D [2723 0 R /XYZ 95.641 364.125 null] >> endobj 2754 0 obj << /D [2723 0 R /XYZ 95.641 359.143 null] >> endobj 2755 0 obj << /D [2723 0 R /XYZ 95.641 306.341 null] >> endobj 2756 0 obj << /D [2723 0 R /XYZ 95.641 306.341 null] >> endobj 2757 0 obj << /D [2723 0 R /XYZ 397.472 273.465 null] >> endobj 2758 0 obj << /D [2723 0 R /XYZ 251.733 240.588 null] >> endobj 1283 0 obj << /D [2723 0 R /XYZ 95.641 210.879 null] >> endobj 478 0 obj << /D [2723 0 R /XYZ 178.023 180.503 null] >> endobj 2759 0 obj << /D [2723 0 R /XYZ 95.641 180.353 null] >> endobj 2760 0 obj << /D [2723 0 R /XYZ 95.641 162.918 null] >> endobj 2761 0 obj << /D [2723 0 R /XYZ 95.641 156.891 null] >> endobj 2762 0 obj << /D [2723 0 R /XYZ 95.641 146.928 null] >> endobj 2763 0 obj << /D [2723 0 R /XYZ 170.361 131.188 null] >> endobj 2764 0 obj << /D [2723 0 R /XYZ 189.728 131.188 null] >> endobj 2765 0 obj << /D [2723 0 R /XYZ 195.108 131.188 null] >> endobj 482 0 obj << /D [2723 0 R /XYZ 146.232 110.267 null] >> endobj 2766 0 obj << /D [2723 0 R /XYZ 95.641 105.285 null] >> endobj 2767 0 obj << /D [2723 0 R /XYZ 95.641 100.304 null] >> endobj 2768 0 obj << /D [2723 0 R /XYZ 95.641 65.933 null] >> endobj 2769 0 obj << /D [2723 0 R /XYZ 95.641 60.951 null] >> endobj 2722 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R /F26 1177 0 R /F27 1179 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2772 0 obj << /Length 543 /Filter /FlateDecode >> stream xÚÝ–KoÚ@…÷ü /AªoæÎ{ÔU’DE "V¥ªíÁ¢‚¡<ý÷{l°c·ªŠÅ æÌážÏ×Wƒq ŒÉ1PÔ•"˜®Z$xt;½æ Ô ´¢¡U*¸‰[W]fF² žgºxö¥}»˜lövÛ © m oñÇ«.×vB™ 9!X®ô»Ñ ?Œ¼®l(˜P¹î~<ê¯ïîúÞwGÝh ;ؾҳ­(>KYú&Õ>2E@º•R0ȸ8ÕYú4êÈS¤»D¥›T‚6&WL—v²-IrÊ’Bó•Rg!€é#‰‡øŒ$ôäïsPâ*¤{l!GМ•JÊHMü²|Úíëþ!:êÎ 4;y3 ^kW›ýÏ,îÂN¿ûœOóR^ÿËί/Ô]A@0óëã:E¾¥M÷‹3 ¸ªßRU×”e]Ïû©ç‘›ÛÜ&?ö`ëvÌÍÃ.ú]Ý (QTr=ü\w@ Æ4a3°­å;diW6ÉÛfüÙ‹S-êLÏÌì[ñ{)½tÓNšJþ¢(?*’™ÿ²í nÛýa›”À¸Y[°™g‚õêòM¶µÿa“yœÐh¸f˜›ÃîÌŒrFLª¿OR6‚ÄÚ½>ŠWPf‘šÙ•¯!W ©[¥0 èÙ '¸L¹½v·¡æ¹w*¡þTaù #¶4Åendstream endobj 2771 0 obj << /Type /Page /Contents 2772 0 R /Resources 2770 0 R /MediaBox [0 0 609.714 789.041] /Parent 2721 0 R >> endobj 2773 0 obj << /D [2771 0 R /XYZ 95.641 729.265 null] >> endobj 2774 0 obj << /D [2771 0 R /XYZ 95.641 716.314 null] >> endobj 2775 0 obj << /D [2771 0 R /XYZ 170.361 706.351 null] >> endobj 2776 0 obj << /D [2771 0 R /XYZ 194.57 706.351 null] >> endobj 2777 0 obj << /D [2771 0 R /XYZ 199.95 706.351 null] >> endobj 486 0 obj << /D [2771 0 R /XYZ 146.232 685.43 null] >> endobj 2778 0 obj << /D [2771 0 R /XYZ 95.641 680.448 null] >> endobj 2779 0 obj << /D [2771 0 R /XYZ 95.641 675.467 null] >> endobj 2780 0 obj << /D [2771 0 R /XYZ 95.641 641.096 null] >> endobj 2781 0 obj << /D [2771 0 R /XYZ 95.641 636.115 null] >> endobj 2782 0 obj << /D [2771 0 R /XYZ 95.641 626.152 null] >> endobj 2783 0 obj << /D [2771 0 R /XYZ 170.361 611.308 null] >> endobj 2784 0 obj << /D [2771 0 R /XYZ 194.57 611.308 null] >> endobj 2785 0 obj << /D [2771 0 R /XYZ 199.95 611.308 null] >> endobj 490 0 obj << /D [2771 0 R /XYZ 146.232 590.386 null] >> endobj 2786 0 obj << /D [2771 0 R /XYZ 95.641 585.405 null] >> endobj 2787 0 obj << /D [2771 0 R /XYZ 95.641 580.423 null] >> endobj 2788 0 obj << /D [2771 0 R /XYZ 95.641 546.052 null] >> endobj 2789 0 obj << /D [2771 0 R /XYZ 95.641 541.071 null] >> endobj 2790 0 obj << /D [2771 0 R /XYZ 95.641 531.108 null] >> endobj 2791 0 obj << /D [2771 0 R /XYZ 164.981 516.264 null] >> endobj 2792 0 obj << /D [2771 0 R /XYZ 194.032 516.264 null] >> endobj 2793 0 obj << /D [2771 0 R /XYZ 199.412 516.264 null] >> endobj 494 0 obj << /D [2771 0 R /XYZ 146.232 495.342 null] >> endobj 2794 0 obj << /D [2771 0 R /XYZ 95.641 490.361 null] >> endobj 2795 0 obj << /D [2771 0 R /XYZ 95.641 485.38 null] >> endobj 2796 0 obj << /D [2771 0 R /XYZ 95.641 451.009 null] >> endobj 2797 0 obj << /D [2771 0 R /XYZ 95.641 446.027 null] >> endobj 2798 0 obj << /D [2771 0 R /XYZ 95.641 436.065 null] >> endobj 2799 0 obj << /D [2771 0 R /XYZ 170.361 421.22 null] >> endobj 2800 0 obj << /D [2771 0 R /XYZ 204.254 421.22 null] >> endobj 2801 0 obj << /D [2771 0 R /XYZ 209.634 421.22 null] >> endobj 2802 0 obj << /D [2771 0 R /XYZ 242.495 421.22 null] >> endobj 498 0 obj << /D [2771 0 R /XYZ 146.232 400.299 null] >> endobj 2803 0 obj << /D [2771 0 R /XYZ 95.641 395.318 null] >> endobj 2804 0 obj << /D [2771 0 R /XYZ 95.641 390.336 null] >> endobj 2805 0 obj << /D [2771 0 R /XYZ 95.641 355.965 null] >> endobj 2806 0 obj << /D [2771 0 R /XYZ 95.641 350.984 null] >> endobj 2807 0 obj << /D [2771 0 R /XYZ 95.641 341.021 null] >> endobj 2808 0 obj << /D [2771 0 R /XYZ 164.981 326.177 null] >> endobj 2809 0 obj << /D [2771 0 R /XYZ 198.874 326.177 null] >> endobj 2810 0 obj << /D [2771 0 R /XYZ 204.254 326.177 null] >> endobj 502 0 obj << /D [2771 0 R /XYZ 146.232 305.255 null] >> endobj 2811 0 obj << /D [2771 0 R /XYZ 95.641 300.274 null] >> endobj 2812 0 obj << /D [2771 0 R /XYZ 95.641 295.293 null] >> endobj 2813 0 obj << /D [2771 0 R /XYZ 95.641 260.922 null] >> endobj 2814 0 obj << /D [2771 0 R /XYZ 95.641 255.94 null] >> endobj 2815 0 obj << /D [2771 0 R /XYZ 95.641 245.978 null] >> endobj 2816 0 obj << /D [2771 0 R /XYZ 170.361 231.133 null] >> endobj 2817 0 obj << /D [2771 0 R /XYZ 204.254 231.133 null] >> endobj 2818 0 obj << /D [2771 0 R /XYZ 209.634 231.133 null] >> endobj 2819 0 obj << /D [2771 0 R /XYZ 242.495 231.133 null] >> endobj 506 0 obj << /D [2771 0 R /XYZ 146.232 210.212 null] >> endobj 2820 0 obj << /D [2771 0 R /XYZ 95.641 205.23 null] >> endobj 2821 0 obj << /D [2771 0 R /XYZ 95.641 200.249 null] >> endobj 2822 0 obj << /D [2771 0 R /XYZ 95.641 165.878 null] >> endobj 2823 0 obj << /D [2771 0 R /XYZ 95.641 160.897 null] >> endobj 2824 0 obj << /D [2771 0 R /XYZ 95.641 150.934 null] >> endobj 2825 0 obj << /D [2771 0 R /XYZ 170.361 136.09 null] >> endobj 2826 0 obj << /D [2771 0 R /XYZ 189.728 136.09 null] >> endobj 2827 0 obj << /D [2771 0 R /XYZ 195.108 136.09 null] >> endobj 2828 0 obj << /D [2771 0 R /XYZ 227.97 136.09 null] >> endobj 510 0 obj << /D [2771 0 R /XYZ 146.232 115.168 null] >> endobj 2829 0 obj << /D [2771 0 R /XYZ 95.641 110.187 null] >> endobj 2830 0 obj << /D [2771 0 R /XYZ 95.641 105.206 null] >> endobj 2831 0 obj << /D [2771 0 R /XYZ 95.641 70.834 null] >> endobj 2832 0 obj << /D [2771 0 R /XYZ 95.641 65.853 null] >> endobj 2770 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2835 0 obj << /Length 582 /Filter /FlateDecode >> stream xÚ½–MÚ0†ïüŠAjf=þŠ­žv·Q±P±Q¥ªí!‚,%¡Rÿ}/’”°Pv…r f^OfÇF‹˜--@r´ªJa-6=b­ŒeÔÃRA,B9™éÁëÝ ™¶4hÉ,ï%WxËïýÇ_þ. âMéSüô>ß ¹²”ÊLÈ9ÁJõdðcIIÔ”lÎ@‘Íg‡€rH~´,^âª~îã¨ë`Di1xÉ­[ƒrSü±“ô8ÍG©°lÁ€æßù::F#Aé M¤Áº#1”èw„óáØp*þãi‡”àÐ ´k v 5žYDfx¨ÖúøqìÿéX?IÂU”_§Oð²Ê\Æçè;ú†øOÑS™ç"x‰-Òp]Æîa6›¼^»aÔ½L{4ÑÞ®x¯¯=@E»ô¤¢µØVÍÁÏ÷ÿj_³ £ºÀ;u‚mÜÁÒ8bÒ¹Ë7ôY%A*Ñ‚™çTwÌfM&—Uáynq7¸[wÐ7€3U(h{ÇÑï N‚²¯'Ù^ÇåþêCú:áÉSÚȶ ˜ˆÖáÂOK~ûìmÞglî€2Û–Bç,7š“÷0FN]‹Hsþ_A]]üendstream endobj 2834 0 obj << /Type /Page /Contents 2835 0 R /Resources 2833 0 R /MediaBox [0 0 609.714 789.041] /Parent 2721 0 R >> endobj 2836 0 obj << /D [2834 0 R /XYZ 95.641 729.265 null] >> endobj 2837 0 obj << /D [2834 0 R /XYZ 95.641 716.314 null] >> endobj 2838 0 obj << /D [2834 0 R /XYZ 164.981 706.351 null] >> endobj 2839 0 obj << /D [2834 0 R /XYZ 179.507 706.351 null] >> endobj 2840 0 obj << /D [2834 0 R /XYZ 184.887 706.351 null] >> endobj 514 0 obj << /D [2834 0 R /XYZ 146.232 685.43 null] >> endobj 2841 0 obj << /D [2834 0 R /XYZ 95.641 680.448 null] >> endobj 2842 0 obj << /D [2834 0 R /XYZ 95.641 675.467 null] >> endobj 2843 0 obj << /D [2834 0 R /XYZ 95.641 641.096 null] >> endobj 2844 0 obj << /D [2834 0 R /XYZ 95.641 636.115 null] >> endobj 2845 0 obj << /D [2834 0 R /XYZ 95.641 626.152 null] >> endobj 2846 0 obj << /D [2834 0 R /XYZ 170.361 611.308 null] >> endobj 2847 0 obj << /D [2834 0 R /XYZ 194.57 611.308 null] >> endobj 2848 0 obj << /D [2834 0 R /XYZ 199.95 611.308 null] >> endobj 2849 0 obj << /D [2834 0 R /XYZ 232.812 611.308 null] >> endobj 2850 0 obj << /D [2834 0 R /XYZ 260.294 611.308 null] >> endobj 518 0 obj << /D [2834 0 R /XYZ 146.232 590.386 null] >> endobj 2851 0 obj << /D [2834 0 R /XYZ 95.641 585.405 null] >> endobj 2852 0 obj << /D [2834 0 R /XYZ 95.641 580.423 null] >> endobj 2853 0 obj << /D [2834 0 R /XYZ 95.641 546.052 null] >> endobj 2854 0 obj << /D [2834 0 R /XYZ 95.641 541.071 null] >> endobj 2855 0 obj << /D [2834 0 R /XYZ 95.641 531.108 null] >> endobj 2856 0 obj << /D [2834 0 R /XYZ 164.981 516.264 null] >> endobj 2857 0 obj << /D [2834 0 R /XYZ 189.191 516.264 null] >> endobj 2858 0 obj << /D [2834 0 R /XYZ 194.57 516.264 null] >> endobj 2859 0 obj << /D [2834 0 R /XYZ 227.432 516.264 null] >> endobj 522 0 obj << /D [2834 0 R /XYZ 146.232 495.342 null] >> endobj 2860 0 obj << /D [2834 0 R /XYZ 95.641 490.361 null] >> endobj 2861 0 obj << /D [2834 0 R /XYZ 95.641 485.38 null] >> endobj 2862 0 obj << /D [2834 0 R /XYZ 95.641 451.009 null] >> endobj 2863 0 obj << /D [2834 0 R /XYZ 95.641 446.027 null] >> endobj 2864 0 obj << /D [2834 0 R /XYZ 95.641 436.065 null] >> endobj 2865 0 obj << /D [2834 0 R /XYZ 170.361 421.22 null] >> endobj 2866 0 obj << /D [2834 0 R /XYZ 199.412 421.22 null] >> endobj 2867 0 obj << /D [2834 0 R /XYZ 204.792 421.22 null] >> endobj 2868 0 obj << /D [2834 0 R /XYZ 237.654 421.22 null] >> endobj 526 0 obj << /D [2834 0 R /XYZ 146.232 400.299 null] >> endobj 2869 0 obj << /D [2834 0 R /XYZ 95.641 395.318 null] >> endobj 2870 0 obj << /D [2834 0 R /XYZ 95.641 390.336 null] >> endobj 2871 0 obj << /D [2834 0 R /XYZ 95.641 355.965 null] >> endobj 2872 0 obj << /D [2834 0 R /XYZ 95.641 350.984 null] >> endobj 2873 0 obj << /D [2834 0 R /XYZ 95.641 341.021 null] >> endobj 2874 0 obj << /D [2834 0 R /XYZ 170.361 326.177 null] >> endobj 2875 0 obj << /D [2834 0 R /XYZ 189.728 326.177 null] >> endobj 2876 0 obj << /D [2834 0 R /XYZ 195.108 326.177 null] >> endobj 2877 0 obj << /D [2834 0 R /XYZ 227.97 326.177 null] >> endobj 530 0 obj << /D [2834 0 R /XYZ 146.232 305.255 null] >> endobj 2878 0 obj << /D [2834 0 R /XYZ 95.641 300.274 null] >> endobj 2879 0 obj << /D [2834 0 R /XYZ 95.641 295.293 null] >> endobj 2880 0 obj << /D [2834 0 R /XYZ 95.641 260.922 null] >> endobj 2881 0 obj << /D [2834 0 R /XYZ 95.641 255.94 null] >> endobj 2882 0 obj << /D [2834 0 R /XYZ 95.641 245.978 null] >> endobj 2883 0 obj << /D [2834 0 R /XYZ 170.361 231.133 null] >> endobj 2884 0 obj << /D [2834 0 R /XYZ 194.57 231.133 null] >> endobj 2885 0 obj << /D [2834 0 R /XYZ 199.95 231.133 null] >> endobj 2886 0 obj << /D [2834 0 R /XYZ 232.812 231.133 null] >> endobj 534 0 obj << /D [2834 0 R /XYZ 146.232 210.212 null] >> endobj 2887 0 obj << /D [2834 0 R /XYZ 95.641 205.23 null] >> endobj 2888 0 obj << /D [2834 0 R /XYZ 95.641 200.249 null] >> endobj 2889 0 obj << /D [2834 0 R /XYZ 95.641 165.878 null] >> endobj 2890 0 obj << /D [2834 0 R /XYZ 95.641 160.897 null] >> endobj 2891 0 obj << /D [2834 0 R /XYZ 95.641 150.934 null] >> endobj 2892 0 obj << /D [2834 0 R /XYZ 170.361 136.09 null] >> endobj 2893 0 obj << /D [2834 0 R /XYZ 184.887 136.09 null] >> endobj 2894 0 obj << /D [2834 0 R /XYZ 190.266 136.09 null] >> endobj 538 0 obj << /D [2834 0 R /XYZ 146.232 115.168 null] >> endobj 2895 0 obj << /D [2834 0 R /XYZ 95.641 110.187 null] >> endobj 2896 0 obj << /D [2834 0 R /XYZ 95.641 105.206 null] >> endobj 2897 0 obj << /D [2834 0 R /XYZ 95.641 70.834 null] >> endobj 2833 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2901 0 obj << /Length 1052 /Filter /FlateDecode >> stream xÚVÛnã6}ÏWèQ"®HŠ”Ø·tá.²ná5 ,¶EAË´-T¦\]’Eÿ½Cåø†îÂŽærÎpfd¥ð£‘Df4Ê™"LЍÜߥÑÞ<ÝÑ`A NŠœEœˆ"w?.ï>ÍæOy1}œ.¦ó ?NïÝty˸K¡¢äˆö’NÂó”Hx2FÍŽ„XþŽs$´iÚºêú@Dœá$Àhõ[*Òk®‚ð\©~^^4eÁäþ:MI.Ãë‡ù—?~½¢ é÷†˜Í—ß Tè$‘iÿsŒQ"èH©lö{m×ÝÚ$£E0û7\®x¿Ü„*H)d”d”÷vuÓðvû];¡EÜ Û*t]£`j³7¶ïà”©¸Ù ööA¢˜ˆÁHôü-Tó\YÓ]cŽ ˜à¥ZƒiÂio5­®ÝƇ:¯=4Á³ìúîQY‚¶(¯ ¾ÕeiºÎ¬Q«ƒÏ_ƒLw‡®×åŸ4­Ã [w© ³Bݶú­#P*â÷X¯Ø(IŸÙiÖ¦¬µgå²;ÍkÕïЦߙëòÑœ9^õ{…OKÆ8‘rì­Í`˾j,_Ÿ STX©í9®ªX,Ì;ȉS%a È3æ•Ýbr™¿ÝQû¢ÛJ¯jó}$37€òÛ,Çf.k£Û.p‚ îG(ks×ò¢¨‚Yßòài.xÈØìý:8$µ³M(…$ϳ³R8N0"Æ¢m][ºù@¥Ï&0¼p; ‡Û)«.aˆ,¶z‚áXe±ÆãA·ð*,õìõèX-’ó†á…+1÷Ágĉ†J%PÚ3R͸ %Œ? 'Á»qúœow8T݉™Ù7/¾ÛÝ ±£€k^O–Ç™o‰Îºw9âDe¸†Áˆå£HØÒ ìô‹AIÛ7ì°_ùÂìË O·ÃÜýÃ#·Æ.'ô8TSß×-©ÀfÜUˆ¶ZÛa‚¾ñ T!+Vó øNÛ\!Þc)Œ|Ï/$—ñF×nÿ1Ô zûZuæ!•’”Žògc·0W„à“-¹¼IˆË€òÔèœ|$Æåqf@·u­ßP:íbçÕ zÕ  Èü39[5€’¾gT~Ì̺MS× í;4ëJo!ÚUv]•ÐI!ЮyE#D­p]5ØÇBà°OÃ+·N/±ÜžÊE]ö?\þ+J²œ žR("ØÍÿEY ßm¿óÿï/§—± C¯1äC×¢˜endstream endobj 2900 0 obj << /Type /Page /Contents 2901 0 R /Resources 2899 0 R /MediaBox [0 0 609.714 789.041] /Parent 2721 0 R >> endobj 2902 0 obj << /D [2900 0 R /XYZ 95.641 729.265 null] >> endobj 2903 0 obj << /D [2900 0 R /XYZ 95.641 741.22 null] >> endobj 2904 0 obj << /D [2900 0 R /XYZ 95.641 716.314 null] >> endobj 2905 0 obj << /D [2900 0 R /XYZ 95.641 716.314 null] >> endobj 2906 0 obj << /D [2900 0 R /XYZ 191.88 706.351 null] >> endobj 2907 0 obj << /D [2900 0 R /XYZ 224.742 706.351 null] >> endobj 2908 0 obj << /D [2900 0 R /XYZ 263.504 706.351 null] >> endobj 2909 0 obj << /D [2900 0 R /XYZ 313.025 706.351 null] >> endobj 542 0 obj << /D [2900 0 R /XYZ 95.641 705.302 null] >> endobj 2910 0 obj << /D [2900 0 R /XYZ 95.641 680.448 null] >> endobj 2911 0 obj << /D [2900 0 R /XYZ 95.641 675.467 null] >> endobj 2912 0 obj << /D [2900 0 R /XYZ 95.641 622.665 null] >> endobj 2913 0 obj << /D [2900 0 R /XYZ 95.641 622.665 null] >> endobj 2914 0 obj << /D [2900 0 R /XYZ 316.152 600.747 null] >> endobj 2915 0 obj << /D [2900 0 R /XYZ 285.568 589.788 null] >> endobj 2916 0 obj << /D [2900 0 R /XYZ 95.641 560.08 null] >> endobj 2917 0 obj << /D [2900 0 R /XYZ 320.628 551.93 null] >> endobj 2918 0 obj << /D [2900 0 R /XYZ 383.791 551.93 null] >> endobj 2919 0 obj << /D [2900 0 R /XYZ 162.685 540.971 null] >> endobj 2920 0 obj << /D [2900 0 R /XYZ 233.479 540.971 null] >> endobj 2899 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F27 1179 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2923 0 obj << /Length 185 /Filter /FlateDecode >> stream xÚuÏK ‚@ðû~Š9êÁqßîKV1ÔbÛ[tˆž— ¢ïOš"Èç7?Ú«PK·Èµ‚ó“P¸w’°QP¨LÖ·Ö¤…°`ÑjáöárˆòÇéõ¹¾ã„+qŒa“Ò€é î¡”¨”u]®®Z·Ü|¡b(T6ºß–~Õ4U[›½+œwmÌ¢Üõ³Ä…éMÉ JÁ ™¾ý’LD޲K=C‹Ñ_ºDçó_*QH%endstream endobj 2922 0 obj << /Type /Page /Contents 2923 0 R /Resources 2921 0 R /MediaBox [0 0 609.714 789.041] /Parent 2721 0 R >> endobj 2924 0 obj << /D [2922 0 R /XYZ 95.641 729.265 null] >> endobj 2925 0 obj << /D [2922 0 R /XYZ 95.641 716.314 null] >> endobj 2926 0 obj << /D [2922 0 R /XYZ 95.641 716.314 null] >> endobj 2921 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2929 0 obj << /Length 245 /Filter /FlateDecode >> stream xÚuËNÄ0 E÷ù /ÛEÝ8Îs CZÍ(Ù!ˆçfƒøÑLB£A‰bÉ>¾¾A0h5S•5ð¼ÞÇJ+h&È3z§€Ñx—Ë$ê† –!½¹ôòPl>ž¾~^¿ËJY(,ÓuÝh~mµFcx¦·]·]ï'!dãfîv¸i‡‹Ý®ëÛIyˆMb_R±‰¹WÄ´šUœG¨V·§ëTì$Ú1’´£12Xêù=›9OvJIc—lÝí ®>Å€ã]Çh‡^°·h¤?çDKÚ†IçßOe>Ý1#jêZ$T!`•endstream endobj 2928 0 obj << /Type /Page /Contents 2929 0 R /Resources 2927 0 R /MediaBox [0 0 609.714 789.041] /Parent 2931 0 R >> endobj 2898 0 obj << /Type /XObject /Subtype /Image /Width 816 /Height 1056 /BitsPerComponent 8 /Length 79105 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream ÿØÿàJFIFÿÛCÿÛCÿÀ 0"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?þþ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®~çÅž³ñVà[Ïx~ׯÞ#ðÿ‰¼Yáï\ë:t*×|+à½GÂz?Œ|M£xz[•ÕõOøOWñït¿k66séÚ£ãO Øê—6·>#Ñâ¼è(¢Š(¢Š(¢Š(¢Š(¢¼ÿá?Å/|qøYðÓã_ÂÝwþ†_>ø7â—ïfk'ü$^øáÍ7Åž×±¼E§é Ò?µü?«éú‡öf»¥išÅ‡Ú>Ë©éöW±Om PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEçÿ|ÿ £ágÄ¿Š_ð…|@ø•ÿ ×áÿŒ¼ÿ ëá?‡?á1ø§ãïøC¼9©x‹þ¯†žûnÿ WÄgax7ßÚÛž#¿Ót϶Úý«Ï@áöñÿ‚̲ÿƒ«ÿfϱüEû'ìËû,ÿÂ'û |Vû/í5ý…ð&÷þ"Ý¿á >(üBò­áÿƒ?áF|@ø…àø\^ ñö—Û|cûx?þ_x;Zð΋ÿ Ëûü¯ñ&øÃû ÿÁW¾2ü}ñ—Œ~.þ¿¶þ½ûAþÐ~ ø±ñûĶw?±çÆø«Çúç4MSâÿÄ-ÀºÃÙ±§xŸ@Ô5sÃWþ?ø!¡ü`ýž¯æ‡Bøýðkþ ¡ÿÞÿ‚ƒ_~Ú?¼?ð;áßüSàÿìwñcöXøçã™§ð—À&ÔcO„0ø7ñ—à÷ÄŸŒ>0·ðç‚|ñ‚ ›­3ÇZˆº¦¯áY¼â/Ùëž2Ð>"|Dø}à|ÁûþÞú?íÿüqøñ¯àßÄ؃ſ²oüÄ¿ ?kþÒ×4½á7Žþ~Öÿ>2|Dñ.ñCGñ%ׄ¼cû?ØxKâV•â|uÔÁš?ü í|?£øKVÒonþŸñÏü¿öŸÓü+ñ'ö­øSÿký§þ*Á0¾xƒCÔoÿlýKâw‡þ|LñÏÀ'Ó¼®x£ö™øIûüFø{¥üVñïÁôð·‹.<{à?Gâ='Á~!ø{¦É⟈ž1ø:º7Ä«†Ÿ|`ø×á_ø*üßþ KáØ»OñÅKoÿÁ´?¶'ì“ðgÇZéÞøgûGüLÚoSð“ø‡àÄ?êº_…¼{ð}~+x³Sø3oñµ'áî«ñ áçÄ'ÐõÝSÁ:6ã=gäØñÿàš:ìàOþÒ_ðp/ü{öø­û=xÂÿhŸØÃRý¹µo…¿>üeøjžøgã/‡¿ ?d-à÷>2]|ðç‰'†/ÃàxÂ|=¶“GøqáOü9ø¡áï_¿ÿà¬ÿ°gÀߨ3Oÿ‚‘k¿|?â¯ÙsÅ^µÔ¾x‡ÀÅ5O|fñV¨š¬Z/ÂO†ÞÕ¦Ðu{ÏŒš¾ƒ¯è:瀼J¾Ô~j>ñµÏÅù>h> ëüøïÿ~Óÿ±§ì¿ª~Ñ?·güããì±sãÏøRý“¼=­þѾñ÷…~8ø«Ä ð´¾5øIñcÆ> ø3sâŸÙã†þø“Vø»àß|røYe¨üDÓ¾üaðd²x;ÆÞþÇÕüö•ý•tÙWþ•ÿ½øðGà¿íáÿ€¿ðLOÛÿötÿ‚“üLøûKèÖ?nÈ?g |pø¿ã¿Š «x#àÀ—ᕇÄÙ|q‰×þñoˆ>Úü3ø; kÍñ—ZðW޼â9ÿø8Ëþ Ïû~Ñ¿ðGO‹ßÿf޾ý§|mûEøàwŽlt¿€Å<?Á/†~ý gïjŸj{9­õÙ¯Ãójú—þézÅ­7õ?Œ¿|)à;OÉsaã«Ï€CßðÜÿñ´ßøvü*ïù°ønø]_ð›ÕÅ‚ÿ…]ÿ ãþû›?á6ÿ„óþ _ðˆÿÌf¹ÿÁDü+à/ø)'‰¿`¿xOÃþ ðO‚ÿàœÏüOÆ?´ß‹>'éÞð¯„ü+áÏ7?¼Cá?xgXðÕž‘ øBÒ,ï> k?õO‰ºv—§ZÜé÷Þ‚Ú uåüÀý£~?|ýàå…_ÿj_ˆ^ýŸ¾ ülÿ‚0ø“àÃ/ŒÿæŸÀÿ¼Iñ—Áÿ¶EÿÆ|=“âνogðïAñƒðîÎ×]Ô¡ñ'‰tx-§ñ/€ô¸$øà-#ÄŸ|`ø×á_ø*üßþ KáØ»OñÅKoÿÁ´?¶'ì“ðgÇZéÞøgûGüLÚoSð“ø‡àÄ?êº_…¼{ð}~+x³Sø3oñµ'áî«ñ áçÄ'ÐõÝSÁ:6ã=dïÿÿÁ{ÿiý?¿jß…?ðF¿Úâ§ü ᇈ4=FÿöÏÔ¾'xá'ÄÏü};Á:çŠ?iŸ„Ÿ±ŸÄo‡º_ÅoüO x²ãǾñ„~#Ò|⇺lž)ø‰ãƒ«£|J°øi÷ÿÇÏø+/Á¯|ÿ‚tþг凇ÿj?ƒðQOÛöký| 㯠øòéÞÓ¿h9üscyñ"æÎûÁ^!Õõ|4Õü ¨øwÅŸ¶Ó-üc£ÝxÃÀ_ |YáëŒ÷·þ èûöúý¹ÿá‡?áŠÿâ×ÂÐÿ†Àý¿ÿgØcþGoøB¿á]ÿÃ@ÂeÿGþEÿÂ[ÿ—ü"_ò$ÿÅ3ý½ý¡ÿ#v‹öOôŸýµ¿à©;ø1ñÛ@ýÿaoØÓâüöº·þÊ×~6ü5øwñGø?ð³ö]ð'ˆüâ¿øPý¢ÿhïx_Å? ¾ü@ø­eákëß„_ |g.‡¬x×ÖWÚôºž‰6¹ð£Hø©ùAÿŠÿ‚ŠþÈÿ´ÏÇßø#7ìùû1üXðÿí)«økþ =ÿîøÉñâÀ=WDø±ð ánqãO‰Þ ð?€~!|hðf¯«x'FøÁñRåümâ/‡ß í5KÅW~ øOñÅ~"²ðÖ‘„§ñw̵ÁÏ…žÿ‚ø~Ü?ðÛß·Wíÿÿ¬øeûq|?ýš|û ~ѳWí9áÏÙcöqý ÿáœ?g|;øÕà¯ßoô¿xLøðÿÄ7ü+oxãþ/ì›]S^þѽ´½øÑð6ÇâXô;ÿâÿ‚©xWöáñWÆßÙÏâïÁï~ÆŸ·ïìÅâ OMý bψþ,Ó¼]â¯øTê6‘øSâßÃiú7†´ŒÿüO¤k~¸oøWC¶Ó´­GÄž˜Çà|øñOõ~¿˜/ø#¿Á_ØwWý¾¾>þÑ¿²oíyÿ?ÿ‚øƒágìÿ®þÉ?ý³k/ŠþøÑû,iW|E´ñ%Çá ø©à¨uéö€ (¢€>øÿ)MýÿìÀ?य़úÑ_ðIÚûþ¾øÿ)MýÿìÀ?य़úÑ_ðIÚûþ€ (¢€ (¢€ (¢€ (¢€>ÿ‚NÿÊ,¿àšö`±¿þ³¯Ãšûþ¾ÿ‚NÿÊ,¿àšö`±¿þ³¯Ãšûþ€ üÿ‚õ~Ô¿bïø$÷íYûKþÍ9ÿ…kñ·á¯ü(ÏøB¼kÿσ¼cý‹ÿ í'ðwÀ#ÿŠsÇþñW„µí x«^Òâm ßýíÿo°û.§ke{oúý_ˆ?ðqçÂŠàŒ¶OÂß‚Ÿ > |`ø›âøgŸøF~|-ðoˆþ xïÄ_ØŸµ_Àßk?Ø^𞛫øƒWþÈðþ‘ªëºŸö~Ÿqö LÔ5;¯*ÊÊæx€>øÿûRÿÁA?à“_³Žµñ¯öÞý¯gÿÚãoí§û@~Ï¿³ìÍàOà÷†?eߨwö øÙñz×⮿ã câ—Ç-;[½øÛñ7ö@øe¦Y6¡¨xßÇTu/ |"Эu<'©üIñŽüùƒ­ÿÁZk¿ø&Ïü(¿Ú_ã§ü—öÿ‚Ê|¿þÈðoí™û&þÎúŸìQð×ã·ÁøLÿá·‹âÇì¥wðËÄ^ñoí/ÿ óŧWÒoôßè>þÝðuÕ½þ·ðÓÁÚgˆ|Eñ{öqýÞÿ‚èþÁ¿o?ÙáÆ—û>h¿üñ“öXý§þþÙ~øñûÃÐxƒà×í;¨üÑøÛöÇñµm©øÛÁÿ ü'iâßÙ—ÅWÞ _øïÄZ6—ðî/Š@>ÿý¦ÿi¿ø(¯í¯ÿø¥ÿÝÿ‚nüRðÿìAàŸØƒÃÿ üwûoþÛþ;øgð¿ãߊµ/|{ø_y㟀¿~üñÍåæ‘¯x^Ò/^ñ¿õæð¾££á}~ÚÛ_ðe·ƒ<;áßÚsŸýŠj?ø)þ—ÿ¡×ÿà·Ž~ø«áÿÂø&«ñƒÃž5øiáŸh~ý¬¼G§~Õ¾ð‚¿lMKÖ^“âÀˆ#ø¯êŸ þ,~Ï‘øßQøY£üSðŒ¼qð×L“áÿмy ûI\~ÑßðJïø)ÿÆÏÛËáoìuû@~Ü_²/ü›áÿÀïþÔZ'ì¹á‹¯Œ_µ?ìýûG~Ëñǃ~ø‹Àß´»? Ùj³ÿĆRéú/‰§×uýRëNø‹ÿ ˆu?ˆ¾†Óá¯ÂŒžûü`ý£¾?ÿÁÈúÿÆOÚà/ü3%—Äø"«®þÏðOíão[xÓÇÞ!ø[ákÝF×ჼQào…þ+Ôõ?‰¾ñæ¡rúÿˆý¨þ;~Ôðóïø^ž9ÿ„ãþßþ ÿûjþËŸâ™ðw†áøð“þ§ü+ïÅáïÿÂAÿÿü$¿üTÞ)þÛñŽ«ö¿øø‡Rû=¯“ù¦ÿÁk¾;|ýœà þ?ø·â‡ÿ>&ÛÿÁ¿hŸø%Oìeâ?’x;àÿìãð Ã’ÚønóáG‰?ißøEðïˆ"ýŸþx~ÃǾ5ø…âøìüQñOÅV¶VžÔ¼W¢YjsxÿÁgìõñ£öÉÿ‚M~ÑßðRÿÙ¿Yÿ‚_þ×ÿµíïí‘ûüný¹ÿcÏ?²¦‡câ¿ÙÇÆ?ðÖwVZW†>~ÑŸüQ† ð„´Àï|«ë_³ÇM_Å8³ø_ã?ßOá_èš—|gâßiÞ#ñ/ÄŸtßü§ö»ÿ‚lÿ‹ý¥þ:Ái`ø,§Á+ÿìþÙŸ²oìï©þÅ ~;|ÿ„Ïþkx¾,~ÊW ¼Eá¿þÒÿð¯ -žÿ WÃÿghÞ ·×-¼_¢èþºßx³[Ðõ«†>øÀì´/ü;âgì×ÿwøáð×Ç^*ñ­ûüÿ‚üKÿ‚‡xÇá„üðöûÅZ—ÄÏ…´Þµ x‡Å^ñ.±i ø¦óÄŸ t+Ï èÞÕ>#hßn5-¯ï­4íEå×aüa½ÿ‚•ÿÁC¾2ü,ñ'íÓðëþ µÿ€øâßÿÂñÇà/üZñ¿ì•¯ør…’xsÀ-´ýœ¿hÚƒã«ð£ão€h sLx3â¶›ŽƒáÈ>)Ç,^ø¯ð#Â^#†_ƒ^ÿᯂ·üþ ›ûZüAý¡ÿf/ˆ±gÀ_Û#þñçöPýžüYâo‡¾-ñ_ˆþxâïíàM7ö£¹[½#á–‘û_êöZ¿>>x‡ö`ð·Ä+McáÇÂÍwÀßè~É_´Ø‹öˆÿƒW$ð©ÑµÍcÂ~Õõ ï éo×̱Áï|ý—þ|(ñ׃f‡ž6ðׇïn|càØ¿á>£ðOö_𷊼Oâ cž!Ѿ|<Ö5½wW³ðýž¯¯^G{âmRãKÔ~!ø€k/¼'à{ŸKàÍéú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Çþ5þÏ_¿iO éþý£>|øýà'ľ,Òüñ¯á§‚þ*xWMñUŽªèö>&Óü=ã­^Ò,üAg¤kºæ—k¬ÛÙǨÛéÚΫc Ê[j7‘MìPøOözøà/xgÇ^øðÁ~6ð_ÁýözðwŒ|'ðÓÁ~ñW„þxsQ¶Ö<=ð;Ã>!Ñô[=_Aø?¡jövz¦ðÓK¼µð^—¨ÚÛ_Xè°\Á«Àx›ö"ý‹üiñ–ÛöŒñì‰û0x³öƒ³ñ„üYgñÛÄß¾ëßm|Uà(4k_øšÛâ~©á;¯AâÛxsÃÖþÖb×Qðäsg—b°}?Eøÿwÿ‚Uø;Æ?ðIïÛWöhÿ‚hþƳÿ€~6þÐ_ðÎ?ñE| ðÀŸÙÏþWü*ÚOá§ÿâ©ñφ¾¿ÿ„;ÂV¾<Õ´OøK5äû/Û5{ v§®}Šÿ÷úŠñÿ³×À/ÚSºhÏßþ?x'Iñ¯‹4¿|køi࿊žÓ|Uc§jº=‰´ÿxëE×´‹?Yéî¹¥Úë6öqê6úv³ªØÃr–ÚäSýž¾x Å^ñ×~|ð_¼ðFýž¼ã ü4ð_‡ñf§x¾,ð¯ˆôëÄ>ñ7‡µ‹kÍ#^ðþ»¤^^izΪYÝiÚ¦usc}m=´òÄÝó„ÿb/Ø¿À^ðÏ| û"~Ì ðO‚þ0hß´/ƒ¼á?€_ |9á_ ü}ðæm£ø{ã†|=£øNÏHÐ~0hZEž—£|KÒìí|i¥éÖ¶Ö6:ÔÐE÷ÿÿg¯€_´§…tÿþÑŸ¾ü~ðN“â _i~ø×ðÓÁ<+¦øªÇNÕt{iþñÖ‹¯i~ ³Ò5ÝsKµÖmìãÔmôígU±†å-µȦö (Ïþü'øYð;ÀšÂß‚Ÿ >üøeáí?øF~|-ðo‡>øÿÛzÆ¡â-gû Â>ÓtéÚþ Õõ]wSþÏÓíþ߬jz†§uæÞÞÜÏ/ QEQE|ñþR›ûÿÙ€ÁK?õ¢¿à“µ÷ý|ñþR›ûÿÙ€ÁK?õ¢¿à“µ÷ýQEQEQEQ_Ìüoþø§ÿwý£¼)ðwÅŸðOoø]_ ¾'ü?²ñÿÂOŽší)â?‡z?‹>Çtú'|©é—ì¯âéŸ>ø‚+k­wÞø…㟲øÆ_ |a¬Þè7¾=ÂÚ0ë÷üwþQeÿÓÿ³ýÿõ~×ßõüÁ´ð\ïøn?øTÿðMøeßøUÿðÇÿ°?âõÂíÿ„×þ'ü3ÿü(€_òN?áQøKþ/øKá-ÿ„³þGÏ`ÿgÿaÄëíÛ6ß×íQEQEðü0Çüm7þ]ÿ Gþlþcþ¯ü!?õq_ð¿áhÿÂÇÿ„»þå?øBáÿ¨ïü%ßó¯¿è Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( €>#ÊScû0ø)gþ´Wüv¾ÿ¯ øýðâ_ÁOꞺӬ|U¦øWâ§‚õ¯ø‡PðÍö±¥kÚEŸˆ,ôvòãFºÕ4=gN·Ôc¶šûJÔm’[9€?’/ø2£öhÿ…ûþÓµ«¤ü@ѼAûHþÐW€4oøH¬?³¼ â…Ÿ³¯„¿â™ñ¯Ã¯´è6WºßÚ>&ü`ø×àoxŽ×Ä:ï‡%Ö>Áá>ËDñ„üYý§ýž×ÄðMÙNý‚ÿ`ÏÙWöG³²ðýž¯ðcàÿ†´oˆ2øO^ñW‰|+­|e×Roürñg†uÅkâIü?ãOŒž#ñ׋´kkí3BƒMÓµ»m3Kðφ4‹;iŸoÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_Á4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿ_Á4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿEP_œðU øWÇ¿²_‡¼ 㯠øÆž ñ§í¿ÿ¶ðŸŒ|âÍNñ…|Yá_ÿÁO?cýÄ>ñ7‡µ‹kÍ#^ðþ½¤^^izΪYÝiÚ¦usc}m=´òÄߣõðü³þM×áÏýŸÿüwÿ^›ûÐÿÿ‚YÒ4ÿ`üCÙ×ÿÍðéßø%—ý#OöÿÄ7ýùÜ×ßôPÀðéßø%—ý#OöÿÄ7ýùÜÑÿÿ‚YÒ4ÿ`üCÙ×ÿÍ}ÿE|ÿÿ‚YÒ4ÿ`üCÙ×ÿÍðéßø%—ý#OöÿÄ7ýùÜ×ßôPÀðéßø%—ý#OöÿÄ7ýùÜÑÿÿ‚YÒ4ÿ`üCÙ×ÿÍ}ÿE|ÿÿ‚YÒ4ÿ`üCÙ×ÿÍðéßø%—ý#OöÿÄ7ýùÜ×ßôPÀðéßø%—ý#OöÿÄ7ýùÜÑÿÿ‚YÒ4ÿ`üCÙ×ÿÍ}ÿE|ÿÿ‚YÒ4ÿ`üCÙ×ÿÍðéßø%—ý#OöÿÄ7ýùÜ×ßôPÀðéßø%—ý#OöÿÄ7ýùÜÑÿÿ‚YÒ4ÿ`üCÙ×ÿÍ}ÿE|ÿÿ‚YÒ4ÿ`üCÙ×ÿÍðéßø%—ý#OöÿÄ7ýùÜ×ßôPâíµÿöý~|0ø9ñKà§ì=û |ø›áÛÿþ aÿÏÄ_…¿³OÁ‡þ;ðïößü×öGðî³ý…âï ø+Hñ‘ý¯áý_Uе?ìýBßíú>§¨i—^m•íÌþßWÀðRÏù7_‡?öÿðIßýzoìo_ÐEPEPEPE~p~ÈðW¯ø&íߨÙx{öZý±þüCñ¶­â {Ã:ÂígRÕ¾üeñ6£á Åãm~çÂþ/é>ø­âÏé~k­bçÅžðv©áQâh“Y{Ÿ ø– +ô~€ (¢€ (®Åž,𯀼+âoxëÄÞð_‚|áýgÅž1ñ‹5;ÞðŸ…|9§\ë!ñ7‰¼C¬\Ùé‡ô-"ÎóTÖuRò×NÒôë[›ëë˜- –Uè(¯ç‡@ÿƒ˜`Íc¾7ø­«| ý·þ~ÍÚ_‡þ9j_k_Š?³š|<ý˜?kO|Ó¼w­?ÂOÙ¿â߉üqa¤jß>+i > ÉðÀ_íþj>&ñ…u‡zÔžø£6à‹ï¯þ?ÿÁd¿dÙËöGý“¿ké¿ñ±øƒãïÚó¶>7†Ûà‡þ+øÛâ çÅx¾(j’xçÅ^0ø5á;+‹ëÔð·ÃOxWFþ·h¯ç‡Ç?ðsìá|I¼Ð¾~Ûÿ¿eσŸ4?‚Ÿÿà¡¿?g4øûx'ÅZ–£àZÔ5ºOŽWÕ6KÍ+TøA¥|JÐücðûTñ Á´/мÿ9ý¨ÿhÏÙkãˆ<'«Þxö`ñgŸŽß~%ê:£uá_þÓ_-müMð÷âýjÖæøÓÁ>#º·‡YðÞ¸Úwˆü+®ÜB—7šF©"Îû½EøƒÅж·üKâ·ìÑ¡|Køð»öRÿ‚Q|?ýŸþ%ücðW€ øÿà?À‡Þ Ñ?i/ø(_þ ‚þ/þ>xsIñ†ƒ¤^x‚óHЯ¥ø‡â›?ÜÏã_Z|BÖ< ¥ø›Ã~ø“­ø0÷zŠüAøWÿãýœ~/xöž¹ðÏì½ûØ~Ó_²oü+ýOâ?ü·Ä_³m®—ÿ×< ñ+Xøw£øâ—ïÙé~ ]ÂcðþÃþV¬ø»P¶ñe®±à C‰¼Y¡hú/Œ~Þøóåÿø6÷þ uñ—ö×ý•~|<ý þ~Ûþ*øÈžý£¾2xëöáø±ðn öGøÃ¨êŸµwŒ Ÿ€~|d±×—HÕ|ð/Á„÷°xcN±Ô|o>£=ç¾0üQ¾Ñ|K¤|ø?á#DÔbÖþ(x‡ÃÚ‡…tjž ÑüW{á_ ëú§¼2öýøÿøüXý©þ+ü,ÿ‚”ÃbüKÿ…•ñ·á¯üÿöÆøO®ÿbøËâ/Œ~xþï|þÓøiû?ÿÂÒÔµøWöð¯‹uÿ©ðmçØ?°ü9Ú4Û]NëPßèüXø§ûÿÁd¾þÍïÄ¿ˆe/ø*ïÃÿÚâ_ÁÏxÿÆ^#ø±ãÙ¿öÉýšt-ÇÿtßxÇ•–§ðËö@ø›ðJ÷LÕ¼9ðŸO×¾+XøCãµµí‡Âßüø[¨ê¶Z°íõQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|ÿÓÿ“uøÿgÿÿbÿצþÙ÷ý|ÿÓÿ“uøÿgÿÿbÿצþÙ÷ýQ@|ÿ,ÿ“uøsÿgÿÿÿצþÆõ÷ý|ÿ,ÿ“uøsÿgÿÿÿצþÆô÷ýQ@Q@Q@Q@Q@Q@Q@Q@Q@ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}ÿ_ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}ÿ@|ÿ çþ ›ÿG‘ûâ´ÿh¯þ›}ÿE|ÿ çþ ›ÿG‘ûâ´ÿh¯þ›ð®à©¿ôy°þ+OöŠÿé±WßôPÀð®à©¿ôy°þ+OöŠÿé±Qÿ çþ ›ÿG‘ûâ´ÿh¯þ›}ÿE…7ì¿ûþ×¶§ŠŸÁß²‡ìåñƒãæ¯gâøgÄ7Ÿ<­ëÞð.£ñQ¾Òüsñ;ÇQZ§‚~øY¹Òu™WÅŸüCáo ÙiÚˆ5KY³Ò4búËû½ÿ‚;ÿÁ1ÿàè_€:ƒí¾"~Ü>ý•?gÏ øƒÁþÕ¾þѾ*ÑnýF?†ü*n¾xgáWà ^ñ?‚~|ñUΩÂhß jÙ¿â…t«ýfÞØIàŸ…¨ÿs”P?á;oYøWÃ6~:Ö|?â?ZøF¶ñˆ|'áGÁ~×|UmˆuŸ ø;Xñgu øTÕÖòûFðΩã¯j:=¶—}âÏÜÚˬ^tQ@~0ÿÁþøËâÏø"ßüKøsâ _ZüÒ¼M®KáŸAà½E¾ x/â7‚k¾"ñf›ðêƒþ)Ôü'øá=/㵇íÅÿ:ƒá'íÛÿÊñí!ÿàþÅ¿³¿ÁïÚCÅß³ƒ¿ho|qø§£ø·Iñ¾·û)xv?‹i ´ˆ½–¯à/A'ˆ­|G°ß¾i¶÷> øÙàÝÄE÷ß>4ðwÅÝ7þ éÿ·þßÿ¿à ÿ¶ìÿûEü ñoŒ¾>øGÆ??eÙ·þKàOÄM7ã/Š~ üKøÝâ½Gà—…áÔõüðãDÓ>þÊ_ð›ü:ÖµŸ†žÕþ[øµ>ø›úݼÿ‚^~Ì?àžŸ³·ü§ö¸ðO‡ÿiÿ…?þþÏ¿"Õ5›|<Ôuo~ÏþÐ| £üNð÷ƒ¼^ž6øWâ fÛIÔâ¹_üAþÑO ø§ÄÞÕ,Ö4=OÕüaâ‹í_Ïþ2Á#?à_¿kþÝ¿ÿf뵇ÃO|/ñg…þ/èÞ4ø¡àmFO|Öìµÿ†^&ñg†¼ã x'âˆ<+s¥èºm¶³ñÃ>'Ôo¼+áï ø'V¹Ô<á­BÓ€?š/ØCáçíwñûþ ð{âÆ™ÿ&~Ïÿ ¿b_þÏÿ¿g‹ >2ÿÁ6¿b|,ýŸ>Åàü&ñì¥ñ»Æ_|cáÿøH?áÿ„ƒBøh—ÿ´Û/ø]>ñ„¼e§ÛøƒÃ_|5©k›ÿ¶OÀÿ†³§ü±ã…?~2øƒö…øS¦øág‹>|lñ7ÀŸˆ_³^£ñ'¿¿à¥žø©¤øšÛàçÅ9gñ·‡Ÿâ­OÅ^&ºÕ¾ÿý¨ÿeÏ?¶ÀŸþÍ´¿¿áe|ø•ÿÏü&¾ ÿ„›Æ>þÚÿ„;Æ>ñÿ‡?â£ðˆ|+âÝ;û;žÐuoø”ëÖlûØ/þÕ¦]^Ù\{ý~ÿÁÿç5öŸïø(ßþñºýþ¯Ä¾üSýŠà²_¿i} á§ÄŠ?²—üwáÿìÿðÓã|àßüXñìßûdþÍ:µà‚Ú—|9à}6ËSøeû |Mø%{©é>#ø±¨h?¬|!ñÚÚÎÿâ—Œ¾|-Ôt«ÝXóâŸüœWü­ÿfû*ÿ묾>W?ð»à?Á¯ŽpÁì?f?ø)Wˆ?àœßðX­þÃû,·…î-¾ÏñŸÂ¿´/ìK¨üy/þk? ~%j>øñÄø“¥øÛâW†|?iâ}WÇ>á|FñÃÙøáÏÄOƒÿÒö«û~ÉÚ߈ÿmoj ~Óâø(—Ãÿ ü-ý±uøN¾$Ãÿ ƒÀž øY¯üðÆ…ö[Åeðÿû3á—Š5ß ÿiü-¶ðN±{öïíCP»ñµž«oãÿ´7ü3þ ÕûVüýŸ?f?ÿ³?‡þ!üý•(h*øeá_ x/Lø}§xgFø§áOh?¯!ñf±¡èÚ~¯ã_jÿ \Á?à_³'…m¯‹¿²—ì áýsã'íû0~Ò_ücðgÂ~(|'ð¯Ç ü^Ó›Äþ!ýž<2úÇÄ)þþξøŸâÞѼQà/ ø;NøG§Ml|,|=á½6]8€~ÏQ_0~Ä_ |.ý”¿à”_ÿh†Ÿ|:🂿ký#Ä"ý¿ÿà–Ùú‡Å/ø'·íõð;À–ÿÙðS_Ù]ºþÝø¥ñ¯öiøðËÂþm–™s™ÿ 7‹´í½b]?ú7ÛüA«éZeïíõ|ÿ,ÿ“uøsÿgÿÿÿצþÆõ÷ýQEQEQEQEQEQEQEQ\ý·‹<+yâ­gÀ¶~&ðý×¼9áÿ ø³Ä>¶ÖtéüU¡xWÆš‹4x›YðôW-«é~ñf¯à/i~Öo¬àÓµíGÁ~,±Òîn®|9¬EfÐQEyÿÅ/‹ >x]ø¥ñ¯â_Ãÿƒÿ ¼/ý™ÿ 7Ä_Š^2ðçÃÿxwûoXÓü;£nø»Åš–‘áý#û_ľ•¡iŸÚ…¿ÛõOOÓ-|ÛÛÛh%ô (¯?ñÿÅ…Ÿ ?á ÿ…¥ñ/áÿÃ_øY_<9ðŸá×ü'þ2ð烿á>ø§ã¶ÿÂ#ðÓÁ_ð‘jZwü%_Á{ý™¦Ý}–}€Exý×í ð ÇQø×£ß|qø?g«þÍ~Ò¼YûEéw_üo¨üð®»á]CÇZ‰¾5ØÍ­%Ï¿ë> ÒuOéZÏŽ¢ÐtíGºn¡â;™´‹;‹ÈýÂ~,ð¯|+áŸxÄÞñ§‚|iáýÅžñ„õ;Ä~ñg…|G§[kñ7†|C£ÜÞi÷‡õÝ"òÏTѵ.òëNÕ4ë«kë™í§ŠVè(¢¹ÿ ø³Â¾4Ó®ux›Ãþ,Ò,üAâÏ ÞjžÖtí{NµñW€¼U¬øÇ^¹¾Òîn­ ñ‚ümáÏø;Åš4²®£áÏhZχµ‹k=_K¾³€ ¢ŠóÿŠ_>|ð&»ñKã_Ä¿‡ÿþx_û3þoˆ¿¼eáχþðïöÞ±§øwFþÝñw‹5-#ÃúGö¿ˆ5}+BÓ?´5 ·ëžŸ¦Zù··¶ÐJèWüý¡~~ÒžÔ'YËá/‚~6ðׇültmam¾x;ã'мO§Mâ´ß Ûêú6¥ø«ú>ýÿà¯_ðMÛ¿Q²ð÷ìµûcüø‡ãm[Ä÷†t/…ÚÎ¥«|+øËâmGËÆÚýÏ„þ ü_Ò|ñ[ÅžÒü,×ZÅÏ‹<7àíS¢ ÄÑ&²÷>ñ,Wðû!ÿÁœðRïZ–£ûRø«àÿìWà˜üA¯hÚíž³â-'ã÷ÆQ§YxV-S@ñg„ü ðƒ_¼øS¯x^ñM寅.m¼IûAøÅZ4w‰¼Dþ¾¶²ðÕŒ?©ïØÏþ *ÿ‚T~ÌŸðŽø›ã†¾ ~ÙÿtøVZìú¯ÇOI¤|,Ó¼wà_7Pñ¡áo‚Ÿ‡…ü?©ü?øâ a¹ÖþüzÖh|9¤i»Ôõ{+]x¸ú}¢¹ÿ øO¾ð¯†| à_ øÁ~ ð_‡ôo ø;ÁÞÑ´ïxWÂ~ðæm£ø{Ã>ðömg¤h>д‹;=/FÑ´»;];KÓ­m¬lm ¶‚(—  ¼öªý¥þ~Æÿ³ÆÚã^­ý‘ðËàwÃýÇþ&ò/ü9a¬k¿Ù§ûÁ^ÿ„³^ð¿‡õ?ˆ/ü%¾;ø?ãÿ|kðïµx‹Äþ ðþƒÿ ?Äôÿ‡_ð—k¾"²Ñüÿ Gü%Úœ–‰>•|ùCã?ø)gü·à?ìñSþ ûDÿÁ>ÿf 'ö|Ô>ü^ñÏ€go†·üCûm~Êsßèž+Ö¿g¯‰?µ÷ƒ|Mâ x'âÁÿ Üé~ ±ý©t?…úÃŒ¿üãKâÞµàŸ†’|)ø—ð¿E÷ÿÿÁX¿kŠ¿¿`?ÿ°çÀ¿ƒÿà§¿¶?ìAû3~ÝŸ´‰7úßÃÿÙö^ýž>(OðãÃß¾7øÚ[ÿé<{áõø‰âÍ[ÁþøAð›Å¾7ø·¦hšf¹ã¿E­·†|/àï‹ÿ~×ðpGÀŸÛ#þ •ûb|ø)û>þПíõâ_Ùö©ðoí=ûøƒÁ1ðf±ûøsÂÿ >"øKöœø±ñ×ã7<á߆Q|?øeaªÍá­7O»‹âŸÅ_øƒá'Áû¯†Ÿ þ"ü@×4‡ÿœ´ì£û2xÏáÇ>-è>*ý>2ÜiÚwŽ<ûE|Nð—ÁíG¾6ñ?ÁýRÛâü4Q øR‚=G]ñÚtKωpü øyñú>ýÿࣿ¶‡‚m«/ø&ïü«à—Áÿ†Ÿ´Ưëßÿb¿ÚöCÓ>+k?²?í-á_x/ü\øce¨|I»×÷ÃòÝ[KïÿðHoŸðF?Š¿·f‹ñËþÿÿéøyðËöaÿ„ïLñÇüƒâ'Ç?Ú¯À 4_ø÷àí®‹¥|-ý> üiñ‡Ž|AûAü@Õ¼?ñ/ÅšÅÝ?âO‚> èÿ¼9ieã»]wÅ7¾9ø9oã/?øíñ{áßø*Oü;ûükøÿ 3ãoüöý…ÿfÿØþ"ü7øÙsàO;ø…û|Hý—ôíb|>øaã½3Gø£ümñÞ•àxßPTÑìu/ÅÚu¬—úŸƒ8ø£Hð“ü]çÿà·ßµçÁ¯ÛÓþ ˆý¡ÿk€¾ ¼øSñŸÃÿ³ž³áè¼Y Ïá¯hºŽ…ûqüðwŒ|'âmYn­ ñ‚ümáÏøGY¹Ñ5=wº–£¢\ê~ñ7‰ü-y£ø‡Süøà/ø7à—Á­övÿ‚‰ÿÁ3iÿÁZ¾xƒÀŸ³—ÅÏØ×À*ý²¾#üeý£~2Ï?‚<-¦üUøà? ýŸ5¯ütÅ_<-á»ox. Ø/5Màí‡Ä¯ Ý|%ñoÅ/Ûïø+gÀm;ögÿƒS~5|ÒÿfþÇÞðÿÀmf_Ù‹Ã?¼UûNéßõˆ·ßÂ_ˆºÇ„î~:xÇLÒõø5_j>,¹³MOº'НõŸ xÄÞ.ðN‰áïk Öí~þÇßñ_ðY/Û×öÇñüV?¿àœ?Ù?ðMïØ²÷îø;Ãß®´+OÿÁD@‹Çÿðª?mßøÿÁBto|P¼Ó¾þÓçönðßö×ìåâÏ~ÎÖº_Ço øâÃo hþ*¶¿°ñV³áÿ‰þ*³ðÈ µë‚¾2ø—ðõá_í?ÿÛÕµÚ{öCø·û(~Èý±ü+ðÿáÿÆßÙOöÃðîûJj?ðJŠ>Ô|wðïÂÿ~|Eñ8Ôµ¾ý <+¦j>=½ð…c—NÖ<_&>½©x¿ ü+áÿ|iùþ ?ÿ†úÿ‡xþÎ_ð°¿á?áßð¯ÿhøQð†ÿÂèÿ†Éÿ…§ÿ kãíø[?Ûñd¿á_ÿiÿÂâþÍÿ„?þ*?°ÿ´ûWúGü%5ãÿðnÄ>ÐmÚáÏüOã÷í¿ûGÿÁ~þÌG„áñïí]q§'Ã;?ÛÏ[ø­¦üM¸ðÏìË ëŸ~x§ÂžÓþüAñ•ÿÅ-ß |"÷Ÿµk|Y¶Öt¿~Ξ(×½þ Äÿ‚þÇ¿à˜úì]ñwâoˆ>~ÔðO¯ƒÿ¶ŸÇÛ#àÏ‹> üsÒ:æ­éÚpõ»_˜´¯üÿágí‘ûq|ý§¿j™¾üø û:þÏÿ~ü$ý޾)|ðç‹< ¡|vø¹âÝãÇ¿´^»â}K\–ËâöŸÃ/ øwáÞ™ð‹â/Ãÿø;šƧüTðö…ã«hïßÿ þ)xãÂφŸþë¿ð”|2øÁðÿÁ¿¾x›û3XÑ?á"ð'Äi¾,ðŽ»ýâ-?Hñ‘ý¯áý_OÔ?³5Ý+LÖ,>Ñö]OO²½Š{h¿à¶Ÿð[/†ðO¿|(ý|=ñÃÿiÚKÃñøŸTý¥>!|(ø…ñkáŸìsð ûQñO‡ï¾=Ü|7ð/„üQ«ütøÁ­jþ ñ_„¾üÓ¬$ð\ÿ´Ø|SûAøÁ_ ´ë=;â(ŸÅû=|ø5ÿ÷ýôø&WÀïƒÿ døiû0~Ò¾ÿ‚·é³—ÃOøáï€>|Oðß…¼uûøgâ­Ž¢é ¼+ñƒâÇo Mã èÞŠÃö•ñoÃ?Xx‡ÆvÚ‡ìù¤é·–þÁû`ÿÆ ÿÁd¿`¯ÛßñG|ÿ‚kÁ7¿m;ß½àïüvµÐ¯i—ðxPçÿà“ÿðRïø!;£ðãöý€¿iÿ|TøÉñSÄ<ªê¾?øSûM?Æ_ÚSã+øW\øñ«ã¿Ç_¾ xCHñ·ÆiÖüOâŸøŸ[Ò`š 'KðW‚´½Ãz7‚ü¦ôð[¿ø¹_¿à†ß³G‚¿âuñ·Å_ðWÿ€ÿµƒà¯ù}¿àOì]àïøÿö—ñÏü$z·Ø<%kÿ ×Â^1ðæ­ÿÍî½oãÿhýƒÀñV§gejûýEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_Á4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿ_Á4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿEP_ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}ÿ_œðU‹o^~É~³ð.³áÿxÚëößÿ‚[[x;Ä>,ðΣãO è^*Ÿþ yûÅáígÄÞÑüYà-_ÅžÒõv³¾Ö|3¥øëÁz޽§As¥Øø³Ã—7Qk`£ôWÀð®à©¿ôy°þ+OöŠÿé±Qÿ çþ ›ÿG‘ûâ´ÿh¯þ›}ÿE|ÿ çþ ›ÿG‘ûâ´ÿh¯þ›ð®à©¿ôy°þ+OöŠÿé±PßôWÀð®à©¿ôy°þ+OöŠÿé±Qÿ çþ ›ÿG‘ûâ´ÿh¯þ›}ÿE|ÿ çþ ›ÿG‘ûâ´ÿh¯þ›ð®à©¿ôy°þ+OöŠÿé±PßôWÀð®à©¿ôy°þ+OöŠÿé±Qÿ çþ ›ÿG‘ûâ´ÿh¯þ›}ÿE|ÿ çþ ›ÿG‘ûâ´ÿh¯þ›ð®à©¿ôy°þ+OöŠÿé±PßôWÀð®à©¿ôy°þ+OöŠÿé±Qÿ çþ ›ÿG‘ûâ´ÿh¯þ›}ÿE|ÿ çþ ›ÿG‘ûâ´ÿh¯þ›ð®à©¿ôy°þ+OöŠÿé±PßôWÀð®à©¿ôy°þ+OöŠÿé±Qÿ çþ ›ÿG‘ûâ´ÿh¯þ›ðRÏù7_‡?öÿðIßýzoìo_×âíµà¯ÛëHøaðsPø×ûK~È>[þßÿðKøI¼#ð·öøÑðÇz¿›ÿ5ý‘àÑ¿°¾"ø³þ ñÇÃþûˆ%Òµ=OûCáoŠ?µô{-CBµþĽÔí¼E¤~ßPEPEPEPEPEP_0~ڳϊ¿jßÙâÿÀþÐ?eO|Cðý•·ƒ¿h?!Ô|1ñ3á—Š´hþ+ðö³¥ê:>§ ê÷ž¼Õô=ÇþÒüGámGÆuOøBÇÅž¹×"ñ™ôýüÁ|EýÿàåÚçàœ²í7ûcÁ0>|ñ÷Ãÿ|-ý¡þ>~Íÿ >1üWý£¾*ø_øEâï‡Þ(е‡Ÿ<%à‚Iÿ _S×,ï|o©ü-—à6±á §“^øg¨hzf”~ø‡ú=øOð·ÀŸ¾|4ø)ð·Bÿ„_á—Áÿ‡þ ø[ðëÃ?ÚzÆ·ÿï>øsMðŸ„t/íŸj¿ˆ5ìé~Ÿý§®êºž±öµjz…íì³ÜËèPEPEP_˜?ýŠ~)ø#þ 9à¯ø(/쫯ü?Ó¿án|?ðçìáû}| ñþ«â?ø;â÷ÂÏ ê—ºßÃOÚsÁZ¿Ã kÿð‘þ×ÿ<ÃðóÑühð÷м9ãÏ:½ïÂâÀìãâsôþŠ(¢Š+Ïþ,øwÇ~/øYñ/ ~"ÿŸø›â‡þ2ðïï‹ðˆèÿ?áWxï[ðæ¥¦øGâ/ü ^"žÛÃþ6ÿ„'Ä:‰¿á×nmôfcjsÅe{<‹èPþÏ_<+û5üøû9øPñ­àŸ€?þ|ðv©âË­:ûÅZ—…~ø/Eð/‡µ_húVƒ¤^x‚óHЬî5›­/CÑ´ëFK™¬t­:ÙⳇØ(¢€ üÀðìSñOÆÿðQÏÿÁAj­áþ£ÿ áÿˆÿgØà_€5_øóÁß~x«T³Öþ%þÓž5Õþ#øS@ÿ„sö¿øï凞#࿇¼+áÏü Ò,þëÿ>?hè§ôPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_Á4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿ_Á4ÿäÝ~#ÙÿÿÁX¿õé¿¶E}ÿEP_ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}ÿ_ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}ÿEPEPEPEPEPEPEPEPEPÀðRÏù7_‡?öÿðIßýzoìo_×ÀðRÏù7_‡?öÿðIßýzoìo_ÐEüàÿÁBÿàçoØOöþÌðާð«ö¿øñ·ÅüUã_|-ñ'ìÇñ‹öWû7Ø|ý3ÀW¾?Ô?kŸ|ñn•ðÿâ7‹lußÙxÿáoïØ_ð†øÖ}CÓjzV‘¡x„ú>¢¿Ì“ö½ÿƒÏ¿o?‹Úuï‡?d‚ÿc­#Rðþƒm/Œu›Çý¥>2è~*Ó|U.±¬k>ñŒ|3࿃v¾ñ†àÓ2xÓö`øâÏ‹^1ðŸüÛþ â? ø³âgˆþøOXñ牼3ℱýçÂ{ÃúïŠo5]SFÖ~Þ]|=Õ4ë«kïÜÏá¹ôÙXözŠøþYû:ÿÑ9ý¿ÿñS¿ðTßþƒz?á埳¯ýŸÛÿÿ;ÿMÿè7 ¿è¯€?á埳¯ýŸÛÿÿ;ÿMÿè7£þYû:ÿÑ9ý¿ÿñS¿ðTßþƒzûþŠóÿ…¿ü9ñƒÀšÄ_ é¿4ø‹ûOû?Oø¥ðŸâŸÀïÛÿdk†…uý»ð·ã_ƒ~üMð¿›{¦\ϦÂMá#ûoG—OñöÿêúV§{èQE|ÿNñÿí“ð·þ ÷ûPøÿþ ûà¯øXµ×†¾Áyð“ÃxrÇÆzÂù¾'Ð,¼yâ?ø+R½¶²ñ·Äü2¹ñŸ~x*k/Â_ã¿øwÑøâDÚœ~ñ ßôWðû'|høEñ[þ§Uÿ‚iÿÁɵÿ?à¤úGü)¿ê³OüçâçÆÍ#ö6øñ¬x§þÏüRýž5¯ë¾ Ôü?ÄxƒâÙ| à¿„ÿÿiïÙßiZÂêúŦ™ûK|<úÿþ ¯ÿ?øEã/ø)?ÆØSö°ÿ‚œ~ÐðI¿Ù—ö.ÿ…-®ÇqûxkãeçíûnxïãwÀ]G⥨^|~øIூøð þO‡zU¿ÂÝ[áÿô‹Z׉üI¬jwÕ§€æø0ýž×̱·íyðköïýž<ûRþÏ—¾ Õ¾ üCñÅ=Àºï‰´ü1¨ø›NøWñoÇ_/ŸÚ»ödÿ‚”|8ñ¿Æ_€?ðQ_ƒ>ðÿíð¥|Mû2üNø‹ñ—á—«ø÷Ä «ø²ÎÕ~)izUîyð¿Qñ†ìn,t?h?ÿfÿ‚YxÅ_ðK/ø7rïþ à_Œÿ´ÿÆÿAðâ§Ã~Åß¾=ê7_°gÃÏxïþ > x{âwƒ>hþ³Õôh:½ŸŽ|Vº_ìu'ˆþ*xzÇÄ ¹ø…‰ü0ýîWÈ¿mo…Ÿ¿kØ¿ö:ñfñQø›ûtÃEÿ¤×|;¥xrïÀžÿ†døm¥üRñïü,]ORñ^‘â #û_Ãú½µŸ„áðÇ‹¾ß¬$öúÏö’ǨKü!|Eÿ‚‘~Ïÿ³÷ ý«?eÿø9›ö¿ý¬¿à ÿ¾ x‹ã³ðCöø;û_øcþ ÷ûOèú¦±âëï|Ñÿe«oƒÒxKàGü$~×ì|?à‹´ø›7<+â}1๿g»}c¾~ÿü^øéÿ Aÿ1ÿƒOÿiøE¿áÿ†ˆýŸÿà¡ß?á þÛÿ„›þÿø[ðO„Þ?ÿ„[þ?ìÿÂAÿÿü$Ù?ÛØ:'ö¯Ù>ßý‘¦ý£ìp€OµòÁÿÛ[ágÇÿÚ;ã×ìñðo@øñËödû'†~5þК•áÆýœ|)ñÚ[¨[Uý—4ÿÝx®ÛÄ6ý <áû›/üRð÷€|â|#µÔtÏ |PñÏ„~&êz€î}ö±øéÿ ¿û,~Òß´¿ü"ßðœÃ;þÏÿ>:Âý·ÿÏü&ð©>xÇÿð‹ÂGý‘âøGÿá ÿ„û'ûoû[þÊû_Ûÿ²5/³ýŽo€?àƒ_ÿáIÁ*?dOYñOü,o‰¿´Ãø?lÏõ=û;Ç~)þÖòŽº¯ˆ¾)x‚ëWñˆ>$|@ðׇügៅº‡Äßkº‡ˆüe£ü=е ˜´K!§økEïþÿÁTþ|qÿ‚lh_ðSŸ‚Ÿ³·íñƒá—Š?´ÿáøð·á‡> ~Ö>"þÄøõ¨~ϺÏö¯ üCÕü?«ÿdxƒHÕ|k©ÿgøúãì ´ÍCÄw^Uí•΋éý ~,|SøÿFh_¾ |Køðâo…ÿ´ÿáø‹ð·Æ^#øã¿ÿmÿÁ[µë?Ø^.𞥤xƒHþ×ðþ¯ªèZŸö~¡oöýSÔ4˯6Êöæ }ÿþ ÓûNkÿ‚«ø»á_üÃöÿý¿ÿà–ÿðOöÐuߨ#Ç¿°AñßôÚwÇz„ äøÿ¨|dø·ð›JøÑâÝWâßßj^Ñ~ëbÑô[øoÆi©ü$¸ñe†¥ûU€_¿~)xàwÂωþ)k¿ð‹ü2ø?ðÿÆ_¾"ø›û3XÖÿáð'Ãÿj^,ñv»ýáÝ?Wñ¯ý‘áý#PÔ?³4-+SÖ/þÏö]3O½½– iyÿÙëã_…iO€_ÿhÏéþ Ò|ñûàÿÃO~ÒüYk§Xø«Mð¯ÅOè¾:ðöŸâkU×´‹?Yéí¾³k¥ëšÎo¨Çs Ž«¨Û$W“$^"øñOö„ÿ‚/ÿÁL¾ÅÿøûhþÄ¿¾ü`ý¦?b¿þ?xŽÛ'Äþ³ý”¾1üGø‰ûÿÁP5c·_ð˜ü?°ÿ…•àíÏ„>#þÅø§¬ØÏ7ü&ºÁ¯ [ü9ø+ðëõÿþû!ÿÃ9þÀ¿³Å/øiÿÚÿã¿ü4Ïìûøÿþ×íñ«þÂÏÙ÷Ëø/ˆ¿á ý˜ü#ÿÖ‡ÿ £áüŸðŸaIáÏí w‡<ðÿLûhÿ„sϼý¾¯ÌÛ[þ ¿ð'ö.ø§ ~Ïð¦kÿÚËöš×þé_á›ÿbŸÙ»Æ?þ)è¿uOø¯Áð»µù<ß ü?Ó¾éß<+ÿªŸðÍã?øÂ­ÿ”š.±ý±oú_ ~ÐZWˆÿgŸ|ý¤?cÏØ§áÿíû]|Bÿ…Uÿ 7<;â¿…Ÿ³wŽÿiøDõÀz7ü,_ÚŚŕïü)ÿ†Z߉õÿÂw&³ömDŸÁþΛ]¶Uçÿbø(wìÁÿð¯Ž5€*ñ6ø=â ;Àß´ÀŸŠñÂÿ¿³ŸÄË­9®µ†ß>x®ÒÏWмA¡jö~#ðuî¹¢Kâ?‡º¿<ãïxCÆÞ&¹ð_ˆšÃíúþxàºÎ£¨~Û_ðSß~×ñìÇÿ=ý¨|AðâÅØ§^¹ð®¡à¿~Èÿüuð‡ö]ø‹û>üNð߉¼e¤~Ô¾»Ò5}OÂÿ´OÇOëÚ‰áï¶÷Ÿ µO‚[JðåÏÄ¿èz€ (¢€ ùàÿí­ð³âÏíñëöFÔ4ˆÿh߀Ÿdñ5ÏÂߌW‡4câïÀnê3µÀ]CÃ>+ñ‡þ(þÏþ$ñ]xBïÄ:V¯oㆾ;°›À_ü ðÇÆwº6…ª}_€?ðVøÆø('üoö÷ðŸÉâþ×éÿ¿ø·áÿŬ|føYûtxc^ƒÀS|Eø‹¦ý®÷Å?ÿf‰¾¹øÉá‚þ&ðÞ¿áÏøïÄëZ6¹ðßÄ’x‹Pýþ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯€?àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ¯€?àšòn¿¿ìÿÿà¬_úôßÛ"€>ÿ¢Š(¯€?य़òn¿ìÿÿà“¿úôßØÞ¾ÿ¯€?य़òn¿ìÿÿà“¿úôßØÞ€>ÿ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(àø)gü›¯ÃŸû?ÿø$ïþ½7ö7¯¿ëàø)gü›¯ÃŸû?ÿø$ïþ½7ö7¯¿è¯?ø¥ðŸágÇk¿ ~5ü4øñƒá—Š?³?á&øuñKÁ¾øàObkˆ´oíßø³MÕü?«ÿdxƒHÒµÝ3ûCO¸û±¦iú¯•{em<^E0_¶güUÿ¨ý¦ÿá"ñ7Áÿ |@ýŒ>&êÿð³uØ5_~$“WøY¨øïÇ^V¡áÝCÅ?>"xLøðÿÄMs¢|-ø ¬þÏÚ;xsWÕü'i©éVþºðï÷ìð/þöXýšføJá8ÿ†wýŸþ ü ÿ„×ûþŸøL?áR|:ðç€?á)ÿ„sû_ÄðÿÂAÿÿö·ö'öö·ý•ö¿°kê_gûdÞÿEQEQEQEóí¡àOÚâ_ì¿ñÁŸ±wÇ/þε©áû+Ÿƒ?üYàüC𯇼U¢xƒG×ßFñ7†¼O x³H_ø÷HÒõ?‡šÏ‰›Â^.Ô| §xªçÇ„üO®xwNе§è ã öÏý•à¬?ðY/|2ý?jø"ÏìûüMñ¯ü*_|qÿ‚£ø¯ãìÛûFøïáÂχ:ÅÏÄßÙ~ϼ «ÜüzðOü&Þ:¶¾±ð_€âï¼9ã¯ü;ñ§ˆôË/ëÿüú?ûMþÌŸðQ_Ø£þ +ñKþ EÿÝø[áÿÛÁ?¶ÿ‡þøößýˆÿáçÿµˆ?´?üWþÿìåeâíÏüÿ‚||ÿ„âð›ÁÚgŽõ½KJø±ñëö‰µÿ„¿Ähx}´ Zi¿ üià¯:_4È|Wªü4‹âo޵ ü"üAýŒ?à™_·gÄOø%·Äßø gí½û-Ã9|ðŸÃÿ‹_ðÁG~þÓ~1èÿþ)韶m·í ð“û ögHÒ>&éõ{Ý]¼A©ÿÂqªø+Äz÷<¨xkQÿ…Mã¯i³x7úý¢€?š|]ÿƒ›|cá_†ß²?‹dÙƒà¯ÄKokŸ >3Á[õ/Œ¿ ¾.|3Ô¾èÚw´tý¡~~ľÖ<ãk_Œ#¶ƒÁž.ð‹ã0|3×>!,šgÄ?ß>øÃQÓ~ýûOþÈ´??à§ðC¯ŽÞ²ñÅÏ…?±‡‡ÿoÝö”øßâÍ{á'‡¼Uk¨ücý–üðÏá¿‹æ]nÈéþ%Ö¿_«äƒÿ±OÂÏ€´wǯÚàÞ¿ñáý—í7öO|kýžô-WËû8ø¯ã´WP®«ûQéþºð¥Ïˆ<û@xÛÃöÖ^ø¥âøÓÂþø¹k§iž+ø¡ào|MÓ4ÿ[8?ðëÛ³þ!<ÿ‡hÿÂŒÿŒÚÿ¢+ÿ 7àïý$—þïü”øX?ð©ä’ÿÅYÿ#çý@¿äeÿ‰5~þÚÇü/áíAñ~_„_²Áÿø+_ü¿ö›ø?eá8ÿdï|DýŸ¿eß~Ìž*Ò«â 5¹¼þ«Çþ;üø5ûNü3Õ> üø{áÿŠß uïxÄÞ!ø}âÈg¼ð¯‰5†¼-ñOÁÖÞ&Òb¸‚ÛÄ~µñ·‚ü9¨ë>ÖÒÿ¾.Ó¬î|1âý^ð¶­¬h·àÁ_ˆ?µ¿à§ÿ²‡í“ãŸÛ3ö)ð÷Äø(ßÁ/Ú3áÿ†~üKÿ‚t|Dý¨üð ß³ÏÅ?XøzÓÁ¿´_ìéã‹>ñ„¼?ðÿÄðÿŠü;ñwá/…üGâŠ~>²ø›ªß|LÓMÓ¾ þßQ@Œ?±ìÉûOüTý´øöTøíâ_ÙƒNýˆ~~ÆÞø™áÿ|-ø |Vo‹Þ%ñÇÇ/zœ^øñƒâ?Åh®µiß ,<-࿆ÿŽ¢øµ¼qñ'\×dð/Ûÿ°í+ã¿Úßögð¿Æ¿Š_á›þ&Ü|@øÿð·â/ÀïøY:?ÆøW>;ýžhOг׋´/øY~Ð|7áÿîñÂíCPþÓд¥ÑÇÛ~˦jÝ•´Ö¡õýxÿÀ€?¿e¯ƒ_gÏÙóáï‡þüøWáø|3à_øfÓNÒ4äžâúòææòúâóW×|A®ê÷šˆ¼YâÏê:·Š¼eâ­[Yñ_ŠõgĚΩª]€`~Ô>;|(øãŸþͳ§ü5—ÆÝþŸøB¿gÿø[¾øÿ ÷ö§Œ|=¢øþ.·ìu xWþ_ j:÷âme7öçü#ŸðŽXyzž±e*>"|vðßÇoÙÓÀý?áe|ø•ÿ wþö€ÿ…»àïÃ4Âàë-káOüZjÆüeÿ…ËâÙï<ÿUí‡ü+ϰÂGâ?µi—QD=þŠðøXŸ¿á©ÿáSÿÃ:Æ2ÿÃ?ÿÂÄÿ†µÿ…»àïù.ßð±áÿ†tÿ… öøXòOÿâåÿÂÝþÒÿ„;þdß°ÿm~þ¿ ?à¬ñ’ÿðPOø"ßìá?ŸÄý¯Óþ ñoÅÞÿŠÏXø3ð³öðƽ?€¡ø‹ðëMû%ï…¾þÓß|ysðoÂ?©ª|rµñÕç‹5 |$“B¾³ÕdÕÞãR¸úƒâ—ü'öøã½wáoƿۇö@ø?ñ7ÂÿÙŸð“|:ø¥ûK|øã¿ÿmèúˆ´oíßø³ÆºGˆ4íêúV»¦hiöÿoÑõ=?Sµól¯m§”ëú+òþ ™ÿcøYÿéÖ?d\øãö_‰¿´Wíû/|%ñç‡>)|\ðç„õ‚ß²ÇÅøŠÏâßíS®ø*MgLñ¿ü/áÿ‡þ,ðV™ã­fóü+ã½gOñ‰µÍvË—€о)|ø—ðÿãÃ/iÿÂ3ñáoŒ¼9ñÀž"þÄÖ5ë?Ø^.𞥫øWþÈñ‘ªèZŸö~¡qö cLÔ4˯*öÊæ€=Š( Š( ¾ÿ‚iÿɺüFÿ³ÿÿ‚±ëÓlŠûþ¾ÿ‚iÿɺüFÿ³ÿÿ‚±ëÓlŠûþŠ( ¿8?à«Ó¼iû%ø{ÁÚÅψ,ô~ÛÿðKo ê—žñgмâ«];^ÿ‚ž~Çú]õφ|uà]gÞ6ð_ˆ ¶º–]Åžñ…â¯j+m¬x{YÒõ{;;è?Gëàø)gü›¯ÃŸû?ÿø$ïþ½7ö7 þ§û:ÿÑFý¿ÿñl_ðTßþŒŠ?áÚ³¯ýoÛÿÿÅÿMÿèȯ¿è €?áÚ³¯ýoÛÿÿÅÿMÿèÈ£þ§û:ÿÑFý¿ÿñl_ðTßþŒŠûþŠøþ§û:ÿÑFý¿ÿñl_ðTßþŒŠ?áÚ³¯ýoÛÿÿÅÿMÿèȯ¿è €?áÚ³¯ýoÛÿÿÅÿMÿèÈ£þ§û:ÿÑFý¿ÿñl_ðTßþŒŠûþŠøþ§û:ÿÑFý¿ÿñl_ðTßþŒŠ?áÚ³¯ýoÛÿÿÅÿMÿèȯ¿è €?áÚ³¯ýoÛÿÿÅÿMÿèÈ£þ§û:ÿÑFý¿ÿñl_ðTßþŒŠûþŠøþ§û:ÿÑFý¿ÿñl_ðTßþŒŠ?áÚ³¯ýoÛÿÿÅÿMÿèȯ¿è €?áÚ³¯ýoÛÿÿÅÿMÿèÈ£þ§û:ÿÑFý¿ÿñl_ðTßþŒŠûþŠøþ§û:ÿÑFý¿ÿñl_ðTßþŒŠ?áÚ³¯ýoÛÿÿÅÿMÿèȯ¿è ÄÛköø/ðá‡Áψ¾ñ¯í«øƒÃ¿·ÿüÃû?Oø¥ÿ ý¾¾8øãû_þ kû#èW_Û¿ ~5þÒß>x£Ê²ÔîgÓ?á&ðޝý‰¬E§ø‹Fûˆ4+S²ý¾¯€?य़òn¿ìÿÿà“¿úôßØÞ¾ÿ Š( ŠçüYâÏ ø ¾&ñ׎¼Máÿø'Á~Ö|Yãø³YÓ¼9á_ øWÚuαâx›Ä:ÅÍž‘ øBÒ,ï5MgYÕ/-tí/Nµ¹¾¾¹‚Ú eSÂ~,ð¯|+áŸxÄÞñ§‚|iáýÅžñ„õ;Ä~ñg…|G§[kñ7†|C£ÜÞi÷‡õÝ"òÏTѵ.òëNÕ4ë«kë™í§ŠVè(¢Š(¢Š(¢Š(¢Š(¯>ÿÁB`_Ž>;оüý¸dŒ|Qý§ÿÏï…¿´·Áˆ;ñö&¨x‹YþÂð„ük«øƒWþÈðþ‘ªëºŸö~Ÿqö LÔ5;¯*ÊÊæx½ã_í ð ökð®Ÿã¯Ú3ãÁÿ€> Õ¼Aká=/Æ?þ%ø/á_…u/_iÚ®±cá?Ä>:Ö´"óÄšF…®j–º5½äšÆ£j·ÐÛ=¶y, ÁExü5ì±ÿ 'þþ[öÿ†eÿ£‹ÿ…ÉðëþOüŽ?ð®ÿä®ÿÂGÿ ÿþJüPßò0ÿÈãÿÏü†¿Ðkàø#×üágüögðÄ]Cdzÿ„¿i¯ÿÂðñ¯‹¿d¿|\ðç‹~)ü øYá/ÚÆ¿>^ø×ÁÓë?ð°?äŸÿ­ŸÄž?Ôü#á/x¯Ä~-³ñ…áÏ h¾-ðï†l€?_¨¯˜<3ûnþÅþ4øËsû9ø;ö»ý˜_ýªmoŠ¿à¤ÿðJ_ØëÂzÃýGá—íÑÿ Ïÿ o]ñ•â;¿øwþ“à/‡~)x þÖ§¦ø¯Hðþ‘ý¯â ^æÏÅßð“xcÅßoÑÒ }ûõdÔ%ý?¢ŠüÀýƒ¿moŠ·¯Å?ÚOâÇ€4‡þÿ‚||,øâÏÙÃöñ•Ö•â?üSý¬>)ü,ñé¿¿iχßô_ÿÂ’ÿ†@þÓûoÃOƒ±ø+Mø§â?‰þ#ðçŒ xötñ·ÂÛã7ìã¥üÓtÏi¾*ø{á_x/á7‰ì|!ñmüuvº¾©ñƒÂz¿uÏ ø÷W·ð¯Ãm:÷QÐã0ü5ðuÌwšpýž Š( Š+óÀ¶·Å?ÁG!øŽO‚þ!ñW‡0xKC·ñbÝxƒÃ_ÿg¯†zWÅkm*×FøœßßíúƧ¨jw^mííÌòþ@üjÿ‚!|,ÕÿàŸ²ì-û'üpøû+ÞþÁŸ´ÂÚö_øÛ©øwßu#ã·ÃOøÛÅWÞ9ø¥àoI øâ'ü&^ øŸñÆz‡†t›ïx;HñÞ«¡K£øz†^…¿éÿì¹ðïã·Â>ðí/ûEÿÃY|mÐ?á&ÿ„×ö€ÿ…EàïðŸjxÇÄ:ׇ?âÔøûQð—…áð–£ ø+þ%7³nÂ9ÿ ÿ—©ë± ¿ÑEQEWÀðM?ù7_ˆßöÿðV/ýzoí‘_×ÀðM?ù7_ˆßöÿðV/ýzoí‘@ÑEWÀðRÏù7_‡?öÿðIßýzoìo_×ÀðRÏù7_‡?öÿðIßýzoìo@ÑEQEQEQEQEQEQEQEQEðü³þM×áÏýŸÿüwÿ^›û×ßõðü³þM×áÏýŸÿüwÿ^›û×ßôWò…ÿyý¬àçO…>Ö›ö:ý‡¿gýá’|?ð&¡®ü[ý—&Á¨x ã¦¿âØ¿áLøïÄ#Š?Š^ð·ÂMtØxàw•âØèÚßïxOÁš?‡¿áÒ<3‡tË/ išnŸþ«ðLŸÁI,ÿà›ðO›?þʱˆükû~ÊÞñ‹?à ß|â­w°|ð ^Ö|Màíþ “ãÝ#Â~ Õ4…³¾Ö|3¥øëÆšv…¨Ïs¥Øø³ÄvÖ±kŸ§ÿµìSû#þÚžO~Õÿ³—ÁÿšEŸ‡üiáŸ^|Gð>‰¯x«ÀºwÄ=:ÇKñÏÃKjž6øWâ fÛIÑ¥o|8ñ…¼Ue¨è^Ö4ÝfÏWÐt{ë/_øOð·ÀŸ¾|4ø)ð·Bÿ„_á—Áÿ‡þ ø[ðëÃ?ÚzÆ·ÿï>øsMðŸ„t/íŸj¿ˆ5ìé~Ÿý§®êºž±öµjz…íì³ÜÊòü,oø*oý¿ìÿ‹,ý¢¿úS´ÂÆÿ‚¦ÿÑ›þÀø²ÏÚ+ÿ¥;_Ñ@ÂÆÿ‚¦ÿÑ›þÀø²ÏÚ+ÿ¥;Gü,oø*oý¿ìÿ‹,ý¢¿úSµ÷ýçÿ u/Šz¿4-Cã_ƒ~ü?ø›qý§ÿ 7„~üKñÆiV±¨A£a|EñgÂÞ ñÛü?•©êÚ |/ý‘¬^ê¯öÝ–™mâ-_Ð(¢€ øþ û&üSýº?àŸµì›ðSâ÷ü(¾ÁáÏ øþ{Ùèïöè$Ö|âëÏ ÝÛø‚ËáÿÆ蚯ˆ·š}§ˆ¾ÉàOøŠâëÁ^=²ŠçÁZÿßõóí¡û!üý½?eÿ‹ÿ²?Çû/^|)øÏáû-Ä2øO^ŸÃ^*Ñu Ä?Œ|âÏ ëEumˆ<ãoxsÅÚ5¶·¦k¾ÔµÛLñ†|OákÍcÃÚ˜ññwHøðCáŸÁ?‚_ðSïø7ëãü_Ã6ø™s'Á‹š^§ð§ö‚ñíâOTÖ5/xëÁÞ2ñWgøEà8¬õ:ÛÃß `ð×ßú—ü³öÚý ¼+ð“ö|ÿ‚‡ÿÁi>0~ÙŸ±€üAà=gâìÓ¦þËþýŸ-ñWŒµ"?Áâoü^²ð—Å}ûoÁ"õŽ´ÿÿooØ‹ö¦ñü›öðÑáOÖt?ßøà†¹ð|óþ aÿþýª´oÛCöÆð÷íÿºðÿìaÿ¢ýªþŸ‰>/ý‚þ#þÑ_²íÇû0?íµáïŠß u Æß ~øsDKŸ…~Ö|¤ëšÃxßÁÓxIñ„øßán³û[ü:øuàOþÑÚ‡>!ÁOdøEâm Œ¶Þÿ…ÿ$ÿì:/‡u4דXðUׇü#âêñ/ƒ<'¬h¿Õïüïþ ³ÿ ƒ¬|Aøéñûö†øût~Üÿ?·4_ˆÿµÿÆ 3ûXÒ¾]øï[ñï‡ÿgÿ€¿ —Ä^,ðÿìëû?è^ Önøá·È±‡ü÷ijwÂ/‰¿°ïÇÛþCþ Wâ_‡ÿ¼ðÛöø¥û.ü,ðf±ð÷þ7ÆËoŒzußÚsÀÚí·Äß|@ðMíÏŠdÓ ø_ãO~¯ü^ÿ…íÿ1ÿƒOÿá¨ÿäæ¿áŸÿà¡ßðÑò'Évÿ‡{ü&ÿ…»ÿ$ïþ-ÿü”øHäFÿŠ;þ…Ÿø’ý†·ü ÿý§ôÿ ü6ý”¾+Áe?iÿŠŸðL/† ×4ëØÃMøcáÿ„ŸÿÁ#ÿàœ¾øu¡Â;áý_ö@øñKPÓÿ´õ_í;øãà/ã_Å-wíZî¡©ÞÅÿ GÄ߈.ñ7öd1hú'ö¿ö7‡tý#Ãöf•e÷ÿÅŸ…¾øãð³â_ÁOŠZü% ¾0|?ñ—Â߈¾þÓÖ4OøH¼ ñÚ—„ü]¡løwPÒ&ü>ðÊiþñž§û?ü@ýœ¥ð&•ðwâ×>ø'XøÁÿ'Œº×ü3ð{á‡Åø>-ø'â‡þ1\é¾*ø¢hß¾x—ã.©ñ3Å~2ðß…m¾Iªx•¿iÿ·ÿáÆ?ñ¢ør§ü5ýÜ·ü)/ú¼?økù#ð·?îAÿ’«ÿSWýK•èµü[ã·‰ÿlŸþÝ?ðOOø(Äø'Æß¿ü3àÚÃOÿ…!àïÚ»ágÇ¿øV–>оx×þoÅ¿èþð'ÄxKGŸÁŸð‘é–:·›áÉü¯ ÙxSñ'ÅÝOâÀâÁÿÁ8þ5ÿÁ5?à¾_ð®¿dÚö_øµàÏÙÿÄÿ´×Æßø&í›ðÛK…Ÿ°íOªþÄ_5ß|{ý‹¼â¯Ù²ÿ…›öß`xòøCþ"Çáχ¾ ÿ„wáÀÏ„°ü(ð×ô;ÿVýž¾|ÿ‚mþÄ>:øEð;àÿ¿|lýˆ?c_|fñÆž ð?о.x©>xcXO|Nñ†4]/WñïˆWñgеEÖ|Uy«j+¨ø—ÄÂä\ë:Œ·<ì½ÿoð¯Âo€_·¿hÏÚ[ãíWûHÿÁO¼?ã þÚµ¶¥m§|;ñWŠü+¯ø/ÇŸ |ោŸ $¼øðïàÿ‡þü;ø®i~Ñ­ìüS§iúä–0Û[|.Ðþü)ø}ñÿ?g¿ø(¯üŸþ -ûOx~ßþ ¥âž6øWðöcøGÿù“ÂðN¿…é⯅^*ð?‹´?… ?g ü;ð•ÏÅÝ_㟈?k=_]øSû5èÞ(ø‰§x—Qø_¨êÖß$:ÍÈÖ®ô½_Æüßþ iÿûø‰ÿzø-ûÿÁDüCÿ ×ö%ÿ‚zÿÆQ|lѾ"ü"ñ?Æo~ÖßµŒ~ø6çöjøk†~xoÅŸ<;ðÿàïÃÿž%ø‘â-SÅðÛã°<]ðgâÂ=CÃV¾ñgˆ³Ú(ùBÿƒl¿o_Ù;ãÅ?ø*ïÁO…¿¿á(ø›ñƒþ ûtþÞ¿¼3ÿ/Äþ/Ù;âˆþxOÂ?¿¶|Eàí#ÃúGö¿ˆ5}?Oÿ„]Õtω6hûV§àë+(§¹‹ú½¯€?`_ØcþsþSþ.ü-ølÛÿöŽý¹ÿäIÿ„+þßü4ü!¿ñk¿änñoü%¿ð‰Â%ÿ#·üS?ÛßÚò(è¿dÿIçÿà’~2üoý€¾ üSøíñgļmâï|yºÐþ=ø›àŒ³†£ñÛàÕíñkHý>5Û|·ðç…#ø}áÿ‹?³æŸðÃâ„ô¦Ñcžë¾"ѵk­C[¹Ôf×5Ñú+À?j?‡¾+ü ñÏ€?fÚ/þ7ãn¿ÿÏü!_´ü*/|wÿ„û/Æ>Ö¼Gÿ§Ç÷Úw„¼Uÿ W„´í{Á_ñ6½‡ûþ?øHì<ÍOG²‰ÏˆŸþ;x“ã·ìéãÿ~Ñð­~ |5ÿ…»ÿ û?ÿ¢ðwŒá¥ÿá1ðu–‹ð§þ.¶µ}‹~ šñlž5ÿŠ*ÊÿþÛÿáñÙtËX¥ ÿ_€?ð[¿ø¶¿¿à†ß´¿‚¿âKñ·Â¿ðWÿ€ÿ²æƒã_ùýƒàOí£àïøö—ð7ü#š·Ûü%uÿ +Â^ðæ“ÿ 5îƒqãg}¿À!ð®§y{uúÿÿ ïã·ü5?ü-øh¿øÆ_øgÿøWðÉ_ð¨¼ÿ%Ûþ/ü$¿ðÑð¾~Ýÿ þIÿü[OøT_Ù¿ð‡Ìåöïí¯ÜWäíƒÿÕÿ’ý‚¿cÅcðKþ Ãý­ÿ!ý´ì¾ïƒ¼=ñÚëB¼ðWü¿ÁßðŸøûGžý <+âÝGÆ¿?áIxÿUøkàïˆßoá3½·ø«¦XAáÍ<÷úŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( øûûQü ý—ÿáJÿÂôñÏü ÿðÑ´ÃÙsàïüS>1ñ7ü&¾-ÿlÿ¾ð7üQþñü#ÿðÂ?«ÿÅMâŸìOi_dÿ‰ßˆtß´ZùÛþøýðkÇ?~/~Ïžø…áÿüdøáÿ…~&øÑà]i﵆šwÆÈ+Ö4m;Ã~8ðN©âÎø+¿íGñÛö_ÿ‡`ÿ‹ñÏü ÿðÑðWÿدö\øÅÿσ¼Mÿ ‡ÀŸ‹ð²ÿá`øþ+xƒþÿøH?áÒ?â¦ð·ö'Œt¯²Ä“Ä:oÚ.¼ïÄø&ßì­ÿ'´ÿ‚ÚÿÁUtÝOþ µý¯âß?à–þ"ý±|Mÿ 1ðÃþ£Àš¿Àý_Åžøuýoâ&²ý™?áøe§k¿ ?á.ø[&¯¬kÿð‘Â{¨Aˆ4‹;gþÏh¯â‰àªµWüKNøûRþÏßð]ø'ü;àÞ©áÿhß²_ìkñ¾ïöQø‡ûCø«Qð7о'xXø³öÙ¿øÝú¿ìëâ‰ú¾áOhößm~8øW@øIâ­ ôÿ øŸÄž¿ñoÆ >,Áqÿh_ðo7í}û{|‹Ãÿ³‡í¡û)ü`ø}û3|J×üyð“ãÇÁ¡ñ—Døïû7xkâ7Œ~k·÷Ÿ>ü@ø?ñá߯ŸÂÚŽ£?‹ Ñ§ÖµM?Ã0ø§xwÃü`ýnÑ_„:§…?à¾ÿ³ßÁ¯ø£Ãß¿fø(/íGûDü`ø£xsá—‰¾øoöiý‘ÿà> Õçñþ½ñÿÅ–Þ(ѶÖ/ôÿ±èšNñ*/ øÛ\/ð¿ð‹l?Û÷þ ¥ûyþÆ?~<Á^¿fø*F‘ûG~Óÿ ?cO² ÏÁŸÙÓöVý¨?g]Gö ^|$ý¢´o| ¾ñ§®¼?áËiÆ£âañ%4O ê^ñW„ü1¤è—ú¿ÅO|PøJý>Üü~ø5kñ÷Fý–¥ø…áöý õ߃þ&øýcð¢Úiï§$VOü üYý•¿à¤þ/ÿƒ‘þ%øOáoükþÿÄßÁ0%|þŸh¢Š(¯€?àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ¯€?àšòn¿¿ìÿÿà¬_úôßÛ"€>ÿ¢Š(¯Îø*Ç‹<+à/Ù/ÃÞ:ñ׉¼?à¿ø/ößÿ‚[x³Æ>1ñf³§xs¾ð¯‡?à§Ÿ±þ±âx›Ä:ÅÍž‘ øAÒ,ï5MgYÕ/-tí/Nµ¹¾¾¹‚Ú e_Ñúøþ Yÿ&ëðçþÏÿþ ;ÿ¯Mýèÿ‡±Á,¿é%Ÿ°þ&GìëÿÏø{üËþ’Yûâd~οüñ«ïú(àø{üËþ’Yûâd~οüñ¨ÿ‡±Á,¿é%Ÿ°þ&GìëÿϾÿ¢€>ÿ‡±Á,¿é%Ÿ°þ&GìëÿÏø{üËþ’Yûâd~οüñ«ïú(àø{üËþ’Yûâd~οüñ¨ÿ‡±Á,¿é%Ÿ°þ&GìëÿϾÿ¢€>ÿ‡±Á,¿é%Ÿ°þ&GìëÿÏø{üËþ’Yûâd~οüñ«ïú(àø{üËþ’Yûâd~οüñ¨ÿ‡±Á,¿é%Ÿ°þ&GìëÿϾÿ¢€>ÿ‡±Á,¿é%Ÿ°þ&GìëÿÏø{üËþ’Yûâd~οüñ«ïú(àø{üËþ’Yûâd~οüñ¨ÿ‡±Á,¿é%Ÿ°þ&GìëÿϾÿ¢€>ÿ‡±Á,¿é%Ÿ°þ&GìëÿÏø{üËþ’Yûâd~οüñ«ïú(ñöÚÿ‚„þÀ¿~|ø[ðSöáý>0|MñGíÿÿ°ÿ„gá×ÂßÚ[à¿Äø‹ûþ kû#ø‹YþÂð„ük«øƒWþÈðþ‘ªëºŸö~Ÿqö LÔ5;¯*ÊÊæx¿o«àø)gü›¯ÃŸû?ÿø$ïþ½7ö7¯¿è¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯?ÿ…Oð³þŸü/OøVŸÿávÿ¿ÿ…Oÿ ‹þßÂÓÿ…Yÿ ü&ð­?áafÿÂ[ÿ ÿþßøªá þ×ÿ„sþ?øÿfÿiÿ¥W Q@Q@Q@Q@Q@Q@yÿ€>ü,øQÿ ¯ü*߆ŸþÿÂÊøâ?‹áðo‡<ÿ ÷Å?ýþï‰~5ÿ„wMÓ¿á*øâ¯ìí?þ?k¿oñ¹ö ?í=Jëì°lô (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ñþ mðŸâŸÅøtgü*߆Ÿ>%µÿ‚ß~Àÿ>"ÿÂàßøÇþ…žÿ…¯ÿ wÄ¿ÿÂ;¦ê?ðŠü?ð¯öŽŸÿ Œµß°xsCû}Ÿöž¥kö¨7ü¿ðëÇßbø.÷üwTñ×ì=ûoüVøSÿ-ñü#FøûC~Ï?àø¯ð ÀZwįÀ¯ˆ>,ý þ"Øø·M¶øCáÿxÛ\¼¼ñ ¶©câ­'Á~Ôüu}á˜<-«x+Sñgô½E¿g½þ àOŠÿ±íyÿ÷ÿÃÕ|[ðŸþ¯~ÇŸ·ìÁÿûð'ǽö¢ð'uø«Ãý«üuâ üBñoÀψ ñkÅà}f %ø¥¬xKÀ’éºvƒðëÄþð7>&~ÐÿÁEc¿Ú:_ø7SöËøIáߨ_öø+ñëãÄ„?ô/؇þ ¿ð.êÿþþyûPþÎzŽ™ào·ÂØ5;/Ú7ö€ð/Ã/A'Æß¿¼àojðŽÜi¾ð¬¾ðŸãW´Pãü“á·íqñ;ö »Òÿe/øƒã>‘áiû^~ÌñηðÓâgí{ûøi5û¿¿²ÿÃoxOCÕ¼m£xƒâ¥³ørÏ\±ðö‰ãü=Óümà_ 'ŽuÛ|%ø‰üàøßö~ð®½?üÃÆ°üÃûOþÆ¿²çìWÿý’¾>|vý¨~5üÓ¬¿o;Ï ø/ã-Þ«ñ?áîŸû<ÚÞ|mý¼?h߃öV¼ñ×â‡ü[ñN³ê¾Ò~Yh—SнÊ(ù¡ý·¼}ñ—ö#ÿ‚åxöö—öý·ÿkOÙóÇŸðJ GöC±Ôbð~Ð~*ð÷Æ]ö¾_ŒÚ¥—Ž<1gâß\ø/Ãðx&ëGŸN×¼C=Œ)ÔuvÓüˆ¤ðÏŽŸÂžûCÁ2>>þÝ¿´?üûðÇLñÁ-#ö¾ðÿüçötøáñ;áç-¾ |JñWìåð’ÛÇzæáÿçÁmâ?ÚøÛÁz_Ãoˆþ&ð)ñ–£ð¶6­yá?júe¿ƒõ¯ëvŠþH¾9ÁD¿à¨ß·7ì¯ÿÁ74¿ø#ßí?ðcöðý¦¼?ã¿ÙöøÕñ“ᯉ¼/ÿÑø?á_èž7ðÇOŽþý£´ÍsÄw>4ðüþµ¾×¾èVm­éË«x¢ÊÛÀ¾7ý¦¯ü1á |{úþ ûüSøkû,Á¾ß³GÂßü@ý ¿á‹¿à§ÿðJ=â/|ðËÄwŸ`øYû9ü:ñ§€<]ñÓÆ¾ðì¾1ÿ…kðþ×ì~­â=_]ׯ<9àïí«; OÅ7 ¼ºþ¨ Äø-·ÂŠÿáÑŸð«~|@ø•ÿ ×þ }ûüXø‹ÿƒ|Gãø@~x;þ¿ü%ßükÿÿÂ+ðÿ¿Ú:ü$~2×~ÁáÍíöÚz•¯Ú ßû}EQEWÀðM?ù7_ˆßöÿðV/ýzoí‘_×ÀðM?ù7_ˆßöÿðV/ýzoí‘@ÑEWÀðRÏù7_‡?öÿðIßýzoìo_×ÀðRÏù7_‡?öÿðIßýzoìo@ÑEQEQEQEQEQEQEQEQEðü³þM×áÏýŸÿüwÿ^›û×ßõðü³þM×áÏýŸÿüwÿ^›û×ßôQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEøCñûþ -ñ2÷ö¸ø…ûÁ1?aOÁO>+~ÎÞ›Rý®üKáŸÚ#áïìßðközñUö·…ᯄ—?þ#øgÄ~ ñ§Æ îm|PÞ,ðާ£j>ŸÃz·¦ÉâÏøãVðƒòö1ý²þ ~Ô¿¿àí¯ÚãÄ?³¯Æ > Éû0~ÎÖ¿eÆ€?u};àì_ûR|(øÑðSâÏ‚u¿jÿ¼Aâ-_៌|#6«£êzм£o©Ë§Øø’Æ}Óîø'·íUû8ÿÁ4lŸø+_ìCûq|høû5|Mø»ûüpÿ‚“üñïÆ}~×á7ÀŸŒ¿³íicðÞO ¯Ã?‹ƒ¡®ØiLj¾xËÁ¾$Ôô-÷WŸF±ý~ø“ÿHð'üÓþ eÿ•øýð·ö4øãŸ†_´÷ü0oìñðëö_øOñXñçÅ?…øÕû:ßøÓÂ>øi}â/ ê~ ý£~ xÃþ Óþø7šíÇ€µ‹Þ#»ÓfÔüiákÛÉÞO@ñ¯ü§ã·ìïû,^üEý±àß>þÛ_~ xÿÀ±ÿü‡àÆÿ~Ù_¿kOøB>xsÇW¾5ð–­ðÂü"¿ü+ý£âyþ2øŽóÂ:çü*_x=(ŸÄš6‡©Iá?øãà®ñ|øýÿ–ø™{û\|Bý‹¿à˜Ÿ°§ˆ?à§Ÿ¿goÍ©~×~%ðÏíð÷öoø5û=xªû[ƒBð×ÂKŸ‹ÿü3â?øÓã÷6¾(ox ÇSѵ Ïá½gCÓdñgŠ|ñ«@øAùAá/ÙÃþ •ñöâý‹~ü1ÿ‚¸ÿÁ_ÿà­ß~~Ðk ü$ð§í¡ðÃöÈýœ~ Úü ñn±©[~Ñ´?5Ÿhÿ¼ ðÿÀšžŽÞ ñ¦“áÿŠþÑ×Ö¿¼-áO‡Öµ?оUûþ ‘ûO|ÿ‚|þÑßðXßÙöòø‰ðÿö4øãø)ÿÇoÛ§á³ûJüTøEð“ÀŸ?gÚöé-¾øÏà‰¼WñÇþ7öWü)}y>$Ţص¯ÃÍc[Ð|âëˆ~3ðŸ„@>ÿ‚ÂÿÁ]>2þÙ?ðBŒß?f¯ÙgãÃM#[ñ¯û/ÁFµo|ZƒàÇÄÏø'§Æ_|_ý›´_þÏÞ&ø}®xÞ6ý¢ü?ñæÛâV©ð£YŸÀÑøz 'áï‰îmþ4xGÃZ¾¡ã…žýý¨¿jŸø¿ágüƒÅŸðSŸø%/ü)ÿ‰¾(ÿ‚ß~Çÿ~|$ÿ†çÑþ ®ñÞ·áÏj_ ¿møOgßÛxÆßð„ø‚çÇÞÿ†tñ­µ¾âOìÏíŸê‘Y^豯ÌðY?Ûïà×üƒþ Ãÿ‚†þгç…þ0iô¿Œ þøÇ_>OðóNøá§|<ý²¿fËÏŒ?¬ïµÍ_^ø?®ê÷š‡tMoÄ:w…|Ui⯠øËž+ðo†Öµí"ÏÄzF»¡ê—Z5Åäz¾¬éWÓ[%¶£g,À@|~ÿ‚Ë|L½ý®>!~ÅßðLOØSÄðSÏŠß³·‡æÔ¿k¿øgöˆø{û7üýž¼U}­Á¡xká%ÏÅÿˆþñ‚|iñ‚{›_7‹<c©èÚ…çðÞ³¡é²x³Å>øÕ | ô€ðZOƒ_´oüÓö±ý²<ðïÄøíû üøÏâ¿Ú¿öø“¬ÏàŒ¿¾2üð|[¬ü!ñµÖ¥áfÕô¿ø³WðˆtO|T—À N ?\¶Ö< |Ið?Ä…ž øþ £ûaüÿ‚wþ×ðWOØ»ööñç‡ÿcoŠß¿à£ÿ´çü;àŸ‰hßx/á‡Á¯Ž?³í#­øCBø⯅_õÿÁàŸø‚ÖçÁs·‰<>§§x‚Â{ûýO´Õ¼SðÛãnð»åÿ†ž?ÿ†¶ø;ÿcÿÁIþø+âŸû~ز~ý—~+øÿßð…Âñÿ†?ý„ÿh?‚_4~À¾øðëÅ?´÷í'áÿŒþðÖ±ð»Äf×÷_´æ‘ð+ào< ¡üMý¨þþË—ºæ«àÏütÓì~|,ñ'Žþü[Šë[ðgï‡ZçÄÕþ~üRð'Ç…Ÿ >5ü-×á(øeñƒáÿƒ~)|:ñ7öf±¢ÂEàOˆÓ|YáwûÄZ~‘â #û_Ãú¾Ÿ¨fkºV™¬X}£ìºžŸe{öÑ~ ÿά¿÷€þ]}ÿÿÿ”YÁ4ÿìÀ?cýg_‡4÷ýQ@|ÿÓÿ“uøÿgÿÿbÿצþÙ÷ý|ÿÓÿ“uøÿgÿÿbÿצþÙ÷ýQ@|ÿ,ÿ“uøsÿgÿÿÿצþÆõ÷ý~pÁV5Gß²_‡¼C£øOÄ=ÕôÛþ m¬é~ðÏ…lüUãMGKÿ‚ž~Ç÷Ö>ðÍ玼Mà¿ÚøƒÄw0E£è×>1ñ„ü+£ym/ˆ|M é yªZ€~Ñ_Ãd~Ñ_ô‰ßÛÿÿ7üËÿ¦YGü6GíÿHý¿ÿðãÁ,¿úe”÷ýðü6GíÿHý¿ÿðãÁ,¿úe”Ãd~Ñ_ô‰ßÛÿÿ7üËÿ¦Y@Ñ_Ãd~Ñ_ô‰ßÛÿÿ7üËÿ¦YGü6GíÿHý¿ÿðãÁ,¿úe”÷ýðü6GíÿHý¿ÿðãÁ,¿úe”Ãd~Ñ_ô‰ßÛÿÿ7üËÿ¦Y@Ñ_Ãd~Ñ_ô‰ßÛÿÿ7üËÿ¦YGü6GíÿHý¿ÿðãÁ,¿úe”÷ýðü6GíÿHý¿ÿðãÁ,¿úe”Ãd~Ñ_ô‰ßÛÿÿ7üËÿ¦Y@Ñ_Ãd~Ñ_ô‰ßÛÿÿ7üËÿ¦YGü6GíÿHý¿ÿðãÁ,¿úe”÷ýðü6GíÿHý¿ÿðãÁ,¿úe”Ãd~Ñ_ô‰ßÛÿÿ7üËÿ¦Y@Ñ_Ãd~Ñ_ô‰ßÛÿÿ7üËÿ¦YGü6GíÿHý¿ÿðãÁ,¿úe”ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}ÿ_ˆ?¶×í-ñ£âÞñgüÛö¿øáý_öÿÿ‚Xh|Rø¥ã_ØWð'…þÁÿ5ý‘õ;_íÝ?à§íÃñƒâmÇöÝí•·‡tÏøF~x‹ÊÖ5}>}gû#Ãñjºî™û}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ñÓöNý–?jøE¿á¥ÿfŸÙÿöˆÿ„ûoþ¯ø^Ÿþ|[ÿ„?þoìøI?áÿ„ÿÞ ÿ„þøGôí¿ìŸ²jÿbioûGömŸ“¿uû=|¾Ô~5ëß¾Þjÿ´§‡ô¯ þÑz¥×ÃOÜj?¼+¡xWPð.‡áŸwÓh¯sñSÃú7‚umSÁÚVã©uí;N𮥨xzÎÚ"òâÎO`¢€<Rýž¾k>øIà]càwÁý[Á?|Aà/| ðv¥ðÓÁwÞø+⯅ztš?Ã|$ðõÖ‹.‘ðãÄ4‰eÒü¬ø:ÏFÔ|§I%‡®tëgh x³Â~ñï…|Mà_xgÃþ4ðOñf§x¾,ð¯ˆôëÄ>ñ7‡µ‹kÍ#^ðþ»¤^^izΪYÝiÚ¦usc}m=´òÄÝàÿdïÙcö_ÿ„§þ£öiýŸÿgøN?±?á5ÿ…ðoá×ÂOøL?áþ×ÿ„oþŸø@<9áÿøH?áÿ„ƒ^þÄþÖû_öWöÞ¯ö³ÿi^yÇÇOÙ;öXý¨?áÿ†—ýšgÿÚ#þí¿øB¿áz|øuñoþÿøI¿²?á$ÿ„[þÿxƒþÿøH?áжÿ²~Éý«ý‰¤}¿íÙ¶~O¿Ñ@ÿ Ÿágü*ÏøQð­>ÿÂ’ÿ…ÿ Ÿþïü!¾ÿ…Yÿ ³þÏøCÿáZ½þÍÿ„Kþÿü"_ñKÂý‘ÿçü#Ÿñ$þÍþÌÿE¯ ðŸìEûø ¾ð/dOÙƒÁ~ ð_Æ ö…ðwƒ¼'ð áO‡<+á?¾Ó­´|qðχ´ ÙéÆ H³³Òôo‰z]¯4½:ÖÚÆÇZ‚Ú¢_§è øéû'~˵ü"ßðÒÿ³OìÿûDÂý·ÿWü/Oƒ¾-ÿÂÿ 7öGü$Ÿð‹ÂáÏÂ?ÿ ü#úößöOÙ?µ±4·ý£û6ÏÉïÿáSü,ÿ…Yÿ /þ§ÃÿøR_ð¯ÿáSÿÂÿ„7ßð«?áVÂ9ÿü+OøW¿Ù¿ð‰¿ÿ„Kþ)oøC²?áÿ„sþ$ŸÙ¿ÙŸèµèPŸÿ§øYÿ ³þ_ü+O‡ÿð¤¿á_ÿ§ÿ…;ÿo‡?áV¬ÿ„sþÿøVŸð¯³áÿ…ÿ—üRßð†ÿdÂ9ÿçüI?³³?Ñk ðŸ„ü+à/ øgÀ¾ðχüàŸøF🃼á=Nðç…|'á_iÖÚ?‡¼3áŸhöÖzFƒáý H³³ÒômK³µÓ´½:ÖÚÆÆÚ h"‰z (¢Š(¯€?àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ¯€?àšòn¿¿ìÿÿà¬_úôßÛ"€>ÿ¢Š(¯€?य़òn¿ìÿÿà“¿úôßØÞ¾ÿ¯€?य़òn¿ìÿÿà“¿úôßØÞ€>ÿ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(àø)gü›¯ÃŸû?ÿø$ïþ½7ö7¯¿ëàø)gü›¯ÃŸû?ÿø$ïþ½7ö7¯¿è¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯€?àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ¯€?àšòn¿¿ìÿÿà¬_úôßÛ"€>ÿ¢Š(¯€?य़òn¿ìÿÿà“¿úôßØÞ¾ÿ¯€?य़òn¿ìÿÿà“¿úôßØÞ€>ÿ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(àø)gü›¯ÃŸû?ÿø$ïþ½7ö7¯¿ëàø)gü›¯ÃŸû?ÿø$ïþ½7ö7¯¿è¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯€?àšòn¿¿ìÿÿà¬_úôßÛ"¾ÿ¯€?àšòn¿¿ìÿÿà¬_úôßÛ"€>ÿ¢Š(¯Îø*ŷН?d¿YøYðÿ‡Òüuà½G^Ó ¹Òì|YáË›¨µ‹?Ñúøþ Yÿ&ëðçþÏÿþ ;ÿ¯Mýèÿ…sÿMÿ£Èý€?ñZ´WÿMŠøW?ðTßú<Øÿ§ûEôØ«ïú(àøW?ðTßú<Øÿ§ûEôبÿ…sÿMÿ£Èý€?ñZ´WÿMоÿ¢€>ÿ…sÿMÿ£Èý€?ñZ´WÿMŠøW?ðTßú<Øÿ§ûEôØ«ïú(àøW?ðTßú<Øÿ§ûEôبÿ…sÿMÿ£Èý€?ñZ´WÿMоÿ¢€>ÿ…sÿMÿ£Èý€?ñZ´WÿMŠøW?ðTßú<Øÿ§ûEôØ«ïú(àøW?ðTßú<Øÿ§ûEôبÿ…sÿMÿ£Èý€?ñZ´WÿMоÿ¢€>ÿ…sÿMÿ£Èý€?ñZ´WÿMŠøW?ðTßú<Øÿ§ûEôØ«ïú(àøW?ðTßú<Øÿ§ûEôبÿ…sÿMÿ£Èý€?ñZ´WÿMоÿ¢€>ÿ…sÿMÿ£Èý€?ñZ´WÿMŠøW?ðTßú<Øÿ§ûEôØ«ïú(ñöÚðWíõ¤|0ø9¨|ký¥¿dˆ ­ÿoÿø%‡ü$Þø[û|hø?ã½_Íÿ‚šþÈðhߨ_|Yÿ øãáÿýƒÄéZž§ý¡ð·ÅÚú=–¡¡Zÿb^êvÞ"Ò?o«àø)gü›¯ÃŸû?ÿø$ïþ½7ö7¯¿è¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šøƒàí½á_ŽŸ¶×íÓûx{Àþ Ò5ØCÃÿ²}ÏŽ¼{¬ê:pÓ¼kâ¯Ú—Àÿ>&ÙèÞÐlVêæø/Á>ðs\ø›XÔí5wÅ^&ñ6‡„ô­#Áº_Š=|EøwûI|kŸ]ñ·ü*Ï~ο±¶‰âÙ¾j¿5]xGÅ÷¿~ x“âkY|>ø[ð;À:%Åö»¬O\ø¡ã‚þ²Óü]¬€}ÿE~`xCþ 㿉Ÿ´ÇüƒöVø[û4ÿÂkñ7þ ¹ðÿöxñí?þ.áÏøj¯þÑ¿³ß‹~5øGá×Ú¼Eà«üò¼AáÝ?á×ü%Úu£¿öçü%Úœ–™>•?ßÿ üEã¿ü,øiâÏŠ_¿áOüMñGÃÿø‹â/ÂOøK´ˆð«¼w­øsMÔ¼]ðëþßÁmáÿÂâ CÃ?ð—hVÖú?‰?³?¶tÈ"²½‚5ô (¯ˆ?àœŸ¶÷…ࣟ±ïÃ/Û+À¾ñïü^ñÆkoxWÅšŽ©xª ü3øçñ+ᇵŸ_HÒüAâÍ#ÀV~-Ö|3¥ßëúw„urçÂÖ>,ñ¶е€·è¢Š(¢Š(¯€?à£ßðQïÙÇþ ¡û8øÿã—Ç/ü?Ó¼[§|?ñ׈¾ |ñŽ­|+ã¿Ú'Ç~µÒmt¯‡_´«]'Å^-Ô´|[â¯h.ñvàhÿ ôAã¿Á§xKNÔ5º~Óß~3ÿÁ=>þÙ³çìñáÿˆ¿>1þÌhßþÌ^&øßÃ;[Ô~&xŸo>[|t¾øk®é~ ³Ò5ÝGDðŸ‰ÿ¢Š(¯€?य़òn¿ìÿÿà“¿úôßØÞ¾ÿ¯€?य़òn¿ìÿÿà“¿úôßØÞ€>ÿ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(àø)gü›¯ÃŸû?ÿø$ïþ½7ö7¯¿ëàø)gü›¯ÃŸû?ÿø$ïþ½7ö7¯¿è¯€?á²?h¯úDïíÿÿ‡þ eÿÓ,¯¿è €?á²?h¯úDïíÿÿ‡þ eÿÓ,£þ#öŠÿ¤Nþßÿøq¿à–_ý2ÊûþŠøþ#öŠÿ¤Nþßÿøq¿à–_ý2Ê?á²?h¯úDïíÿÿ‡þ eÿÓ,¯¿è ñ¥ý—ÿàáø,ì©â§ñ†?mߌtKÄ Ö|Uà_ڃĿ´§…|S§x/Q¾¾KÏ‹·'ñ·ÃÏøªÛTÔt\üñÃ?kútÖ2¿‰­õøWTÐÿ­ïø%ü5ûq~Ù¾;µøeñþ Wñöÿ‹¤h^2ø·ÿûÑ<[ýð‹Gøƒ£Üé¿ ôÿˆ>øÃ­øƒáÿ‡ÿá øáÿ sâ—ÄïÚ³àÏ4mø´Ïø¶ºÜž'ý^ýÿà×ø#÷ì—¨Ùx–ûàgˆ?j¿i> ×µÅ_µï‰ì¾*iÖ:v¿áX¼+/„ï~x{ÃÞýŸð/†|?à¿ø/Ãú7„üàï èÚw‡<+á? øsN¶Ñü=០ø{G¶³Ò4èZEž—£hÚ]®¥éÖ¶Ö66Ð[AJxOYÔ|Gá_ ø‡XðŸˆ<«ëÞѵSÀ¾,¹ð­çм¨êšuµõ÷„üMyà_xÓÁ7^ ðåÌòèúÍσ¼câÏ Ï¨ÙÜËáïkºCYê—]P_˜ðYÿÛǰ7üö¾ýª~Ùý£âoÃÿ‡ú'‡~jhÑâÿ„KÇ<႞ø‹ö_xcÆ^׿áXxƒâ&Ÿñþw÷º?áÿ„GSŸL²ÖçÕlOëàø*uçìmmÿûý¨l¿à ^#ÿ„3öEñGÃø<ñoưx*ûâ±àŸøY'Ð<à?øGÚo€>(Þ¯Ä|Mñ'ƒ4ñ·ˆ¾Kðÿã•þ«†µ->Ò_Š ¼wáÿ„Ÿ.¾%üHø‹ðÿ\Ö> |ñããïü-oÁÿà›¾ þßÿ´ì1mÿAý¿moˆÿ³ü'áÇü&ß><üSÓµx#Ãúí3"ë:gˆ%ýý¶ÿି±­ûéÿ³ÆÙ¿gÏÚ›àß|MáïÛkþ S=‡Áÿ‰>8ý“>øûâ/Ä‹ù> ê>øûá»ë_-þ êßþ2üxð?¯~Oñ â]‡ÅoŠ_5O¸4oø%·íO¯þËðHÏÛ[ö)ø‘ÿ ›ÿGý“`Ø÷öwñ—ƒhˆ~"é~7ü Òþx3Rø—û)~Õ¿ 4Ý/Qño…áñn£â½~Âÿ@ð¤>1Ò¼c Æ•ªÛèþ8ÑþüYø ðÿü~çâìÛÿPøqð³þ íûÿÁWÿd?ø&íOáÿˆ—_µ?ÀOø(ì¡ñ3Ãÿ¾üeøoð[\Õþükøñ·]ø¡ñ3Wðïˆ>.êþ ðçÃïé_õ£«=í¶“ý¡ã¥»ø)¡þÎþðçþ £û~Ê·/ü!ñá—ìÁáûÍ_þáðö5ý¯?`Ÿ ø³â·íªøWáÆ]ö9ø‡ûRÏ{âdÓþ3èþ$ø™áýã'ï ëºÎƒãßëÐE§ZÜè º‘y=«Kß±OìÁÿ5Ô¾;kÿµü ö¯øâx_ûWÿ³Çì‡û k?þþÆÞÑüKàï è>4ø‹ñF/é¾ø›ûE|@×otkçðO„~;_|Hð'Á íOÅÞ4ðòøƒÆ~²ø7òÿÅø&íÓüWöÝø¿ð‹[ýˆ>&~ÁÿðUOþÊÿ ¿o…ÿ´3~Ò>øûáσ_¾ë?³·Å¯þÏš×Á]J×ÃsøƒÆŸüGâ­wÃÞ9ñW‰|;=¯|}ü8ñ…ü_û-i~0üøS­þÌñO†-îþix'Iñ¦‘ðkX±ðïÿ‰_[Føk«|;ý~ÿ‚üdý®>?Á¢~)þݾñÃOÚÃ[ðÿÁâÿ…üYð¿[ø1â©5ÁE>ø Ã^,ñ7Ã-~ËK¹ð¯ˆ>!ø#Ãøƒ¬Ûiº/‡¼+}¨øžçVðO†|5àíCBÐtï¨>Á>à¿ß²‡'ýˆcÏÛïö@ÿ†%ðÏÄéŸiŸÚCÀÿ~(ÁA?gŸÙÇûcÂ:ÇÂÝÁóx÷öeø›ÿ ËE²ñ?ü§øñ~Ëâ ]ǧx_]ýŸü5ÿ ÷Áß~ßÿ‚ÿÁ1~!~ÑÿðGO‰¿ðMO€|Aâψž!ðÿÁÃßÿmŒŸ>%ø«ÅÚ€¿h†¿|câÏ‹ÿeÐ~!øÛTñ‰í¼+â9l­´O ¯…tMGPÑü!á øáÞ—£éýž¯Àø#ü^ÚÇþ ³ûbø›ýâo¿à§þ&ýŠu] BÿFð%¿ÂÏø'oÃo ü-ø)¯éúf¡ý§â¾ x£Ãÿ5›ÏŠZ­Ï‰îü9­ëÚeÇ„ü)à›(n´ûßßêüÿ‚oÆ$ÁUÿà­ÿðO½gþ%Þø÷ñÃßðWŸÙª}wþ'Þ;øáÏÚn=;á×í­j"ð¶ßxoáÿÂïÚ7Âø}ð·Àž,Ñ<#ñLè÷úž¹suñ;Ãí‹´ð€>)ÿÉÅÁêßö`²¯þºËãå|ûFþÎÿþ(~Ïð@¿ˆ_´¿ì¥û_ÿÁC?à‘~ÿ‚`~ÍZ'd_ØbÿÄzÅ? ~Ù7¿³9o|tø£ð³Àþøñ+áý×ÃûýÁþ ÕôŸŒ^ ±øgâ=;Å×Wþ)ð­§Œï~~ÔŸ»Þ4ÿ‚_ü}ñÅoø8[ÇV>/ø?‘ÿeý˜> üý-îµÿ&£à¿|8ý‹þ'~Îzæ¡ñ®~ÏmáÏÝxÛÆš^©¥]xóâ>£?…mõ ëÍ*ÇWŠßCºóýkþ ëÿ^øð÷þ ¿ãØ'ö¿ø?¥üdý–?bƒ±?í%û(~Ó>#øÁâø'§Æ=;áçÃ;}6oŒÞѾøbÏâ&ƒñƒBø‰gZw`ð÷…|UãÙx?GÔ2~`ÁþÿÁ?oéÿkŸ?±çÇŒ~Áÿ´Áÿø»öÿ‚$ü|—â7‡|UðÓã/ÃŒ¾ ýª~üpÓþ2ë>6êÖß ü¿|;ð“âÄx$Ô|yðò×ãwÄ]"Â/ƒ¿<õüû~Éßÿàž?³—ü Â? ²?k¯Ž?ÿh…¿¾-ÿÂuñ&ÿþiµ¯ôÝ?Bÿ„ SñïÃ-ìö_þAý§áßiÄ¿ðŽù“êÍ«ë²jþÁ°GíŤþÜ_?à¦ðSŒŸ³ÿŠ¿i¯~Ïú/ìuð{à÷ìu¢ø·Nýœ~~Î:w‹|7ñc[¼¼Öþ,xoNøµâ¯ˆ*øµ§jZݽ¾·©j6¾µÔ|N©âh¾*ðoƒ~ |ÿÿåý“à©¿ðJOÙ;âÿìÑ㟋ßðL _öEý˜gÿÚËIJÆïÜ~Ñ^ñØø§«üIñWÆ_‡~?ý´ŸX»‹á—ÃÿÙÿL²ñGµoŒÖ µí_Ä~Ñí4{ ƾ)‡HÕ¼[ª€GÕüÁÁl¾øïãÿü‹þðoá×ǯˆ³'ˆ> ÃÓ4-Cã_Â{M_Š~ð#~Í¿ n¾)iÿ 5]v›/ü@ñ·Ã+oxÁ¿ ²Ôu„~#ñF›ñCúf§âéš}Ïî÷ìEñ¯Å_´§ì_û"~Ñž:Óü?¤øÛã÷ìÁð ã_Œt¿ Úê6>Ó|UñSáO„üuâ?Ã6:Æ«¯jö~³ÕõÛË}×T×5FßNŽÚíWQ¹Io&ùö©ýŠ~)üqÿ‚“ÿÁ)l_ ëÿôï†_°¿ü7?ü-½ ÄZ¯ˆí.Ãñ#ïÿ„ÿðqçüãÅ?†Ÿ>þÙ?ð”|MøÁñÁ¿ ~xgþçö«Ñ?á"ñßÄé¾ðŽ…ý³â/ºG‡ôíjú~Ÿý§®êºfaöµjz…•”SÜÅïÿµOìSñOãüŸþ KûbøO_ø§|2ý…ÿá¹ÿámè^"Õ|Giã¿ÃMüðïÂߺÓ4ß jþÕÿ²ÿ‚P~Ú?< ñY½ñ©¨ø/áçÁšýæ—á? _kø#Þ º¹ñ§ŒtÛŸèþ³ø…?…|YâoËâ–ðv½ªhW_OÿÁ'å_ðM?û0ØßÿY×áÍ{í»ðSÅ_´§ì_û]þÎ~ÔÓ|UñSáO‹< áíCÄ×Ú>•¯jö~³ÕõÛ;fëKÐõFßNŽæk+Q¹H¬æ?b/‚ž*ýšÿbÿÙösñÖ¡áý[Æßf€_;¸ø§ÿø Å/z¡©éÿÙž—áÿ…üAðÿF³ø[¥[xbÓÄz&s©Ûø³Å~6½š×P²ýþ¯Àø!×üdŽÿিðUÆùü?ÿý¯æðoìû¬h_ñ*ð'Ä/ØÛöÑïÿfÿÙÛâÆŸà{í?|ñÆ×¶ß­~)i¿ît íGXðæ™«øá§€ñƒ¼Y£iÞ#ð¯‹<+â=:çGñ†|MáíbÚóH×¼?®é—š^³£j–wZv©§]\Øß[Om<±7AE~ ü-ÿƒo?à‰_üw¡|EðŸìðÿWñ‡´ÿ³ôÿŠ_~8|qð%Çö¾¨hW_Û¿ ~5üPøðËÅU–§s>™ÿ 7„uìMb-?ÄZ7Øñ§ðÿâ‡å] â—Âj¿ÂÏŠÚ=¦™¦|GðoŠl´. ?¢€ (¢€ çüYá? ø÷¾&ð/޼3áÿx'ÆžÖ|'ãx³FÓ¼Gá_xWÄzuÎâ ø›ÃÚŵ摯x]Ò//4½gFÕ,î´íSNº¹±¾¶žÚybn‚Š(¢Š(¢Š+Çþ?|øgûNüø…ðã6—â {áOÅoÍá?ˆ>ðÏþ!|0Ô|Iá[ÉíåÕ¼3sã…ž)ð_­|?â;hDñf§xŽÏNñw…oõŸxžÛVð¶½­h÷þÁEsþðŸ…|á_ øÀ¾ðÿ‚üà¿èÞðwƒ¼'£iÞð¯„ü+áÍ:ÛGð÷†|3áíÚÏHÐ|?¡ivz^£ivvºv—§ZÛXØÛAmQ/AEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWÀðM?ù7_ˆßöÿðV/ýzoí‘_0ÁT¿à¸Ÿ³WüÅ_¼=ûN|ý§üY¤|tðÿ‹5Ÿ‡ž:ø)áï‚(ð­þ£à-GF±ñÇ„õ ?üzøyãm/ĶñW‚u‹«›¿/…u=;ÆZT^ñ6µ«é~-Òü5ùÿOÿƒ…¿bÿÚSâß…`ü1ý§ôŸŒŸ¿iÿø(¿Æ¿x—Åž øScðÏMð¯ÅOÚö®ý·|=§ø›YÑþ5kÞ)³ñŸÂvÏÃúÍ®—àÍgN·ø…Γcªê>H¼Y0õ»EP_ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}ÿ_ÁK?äÝ~ÿÙÿÿÁ'õ鿱½}ÿEPEPEPEPEPEPEPEPEPÀðRÏù7_‡?öÿðIßýzoìo_×ÀðRÏù7_‡?öÿðIßýzoìo_ÐEüÁÁW>ÿÁΞ1ð%ÕìCûV~ÈÏ„¡ø«è^/ðÏìñð§Pý“hï‰ZÇÄ]bÛÂz¾ŸámgöŽø§ûLøKÁ_ð¬<$Æžø¥àÚƒö{ñÝ­Ö±ãDÓ´ÍSžøks~ýüRø±ð³àw5ߊ_þ%ü?ø?ðËÂÿÙŸð“|Eø¥ã/|?ð'‡¶õ?ú7öY©iÒ?µüA«éZ™ý¡¨[ý¿XÔôý2×ͽ½¶‚^ƒÂ~,ð¯|+áŸxÄÞñ§‚|iáýÅžñ„õ;Ä~ñg…|G§[kñ7†|C£ÜÞi÷‡õÝ"òÏTѵ.òëNÕ4ë«kë™í§ŠVÿoø(_Âßø)¯ÃÿŠzeÏüëBý¯Ûâm·ü%_ |ãßÚËSøŸãoøJ4…¾#žOè_~-øÿPñ‡þ$|?ð׈&ÛÿiÿÂMâï…¿ +h> Ñ5Ÿ ÝøÂÚŒôíRçÂñg…|I®i>"Ó<àü-ÿtý§~2ü=øðgöÒðþ½ñ[â·ˆ!ðŸÃïx›á/íðÃNñ'Н ¸—IðÍ·Œ~)ü&ð_‚m|Aâ;˜Dðž¨øŽÏQñwНôoxbÛVñN½¢è÷ÿ_þÛßðRØ—þ Ãá_øÇöÑøùáÿ‚ºGÄ¿j>ðχ¼qãŸx¯QÑ´åÕ5ëÀ¿ ¼/ãO]xÖÓé‘x›Å‹ááá_ ê>!ðž®k:~¯ã ØêÿËí·®ÿÁG?eÏÙ;¿?à·ðMØöìÿ‚Lü øû8i¾9ø¯û xóTýŸ|wðSÄz?ÄŸüðOŒ¼á]sÅŸüAoñDðýíÖ•/ÃOÙ·à·À_…šÎñVÇÀúoŇ ÿádø׿×?á¾¾#ÁÅðTïøbŸøvŽþ6üøû´ÿ‡•ÿÂèñ?Å?‚ÿ 5ŸÙzøL¿áˆÿáSý»Å¿~ê¾-øÑâ¿øi?ìì_xâÇ?µ|ÝOÇz—ö¨ô=£Á\ÿà^#ý‰|Yÿð÷í1áýwö<ðˆ-¼'㯊Ú7‚þ(jš‚üUyã ü<³ðÏ‹>ØøŒžñ׉!x/¿~ÁûJëúÃí?Ã>%¾ðšü;Õþ-~ÐV³ñCÇv_¼‡?m/ˆ?³WÆëoû)¿uό޸²Ñîüwã na£ÍñâoÅŸø›òƒÃ>,ñW‚ÿàÆ+cÁÞ&ñ„õ{Ïø³Âwš§†uGAÔn¼+ãßø*î³à_xfæûK¹µ¹ŸÃþ4ðOˆüCàïhÒÊÚwˆü+®ë>Ö-¯4RúÎpé{áoüÇþ ñ§öŽÐ¿dÿ†?¶×Ãÿ|mñWÄ Oáo„ô¨<#ñcNð'‹üw§]j}¶…ázÏÃý;à—Š¿á*ÔôæÒ~j~ø‰¨èÿuGú?ÃCÅZŸŠ¼3k«¶_íGñÛáGü‹þ¿û4xÇ?Ø¿k/øx·ü4‚¿áðv©ÿ ÷ü(Ù·Âþ?øSÿµáíGžÿ„Wźæ­ÿV½áÏíÏ;ì#þØÓ#ŠÉ??iØ[þ ÍûSÁ8õo€>5ðgüàŸØ¾ßülð¾ Kûbü.øYð?G¹Òõï‰6´ïÁørÆ/†_ÿ³,¼Qâ?ˆOñ ÊÞçÀž(ðç‰<[í<_ðëÆÞ5ÐüCõŒ´ßhßðPø4kGñ×Å¿ü~ñ¶“û0~ÞºoŒ~;xOǺÅO üjñUü—àí¯ˆ~-øgâ~±Z¿ÄüGÕâ¼ñŽãÝR(õiÚÍ·ˆo£KFUÔí~@ÿÁ/j?ŽßðP­cã·íÓsãŸøFÿa|@ñÿÀŸØ;à—‡|3àæÑþ+ü,ø7ã»ï ëÿ·Ä_ø‡ÃÖÿ¬¾ |`ñÖ‰âÏxGàŽ³cðoß| á âñ7€~)x£Äš/ÅxþŸÿ‚›x³Å^ÿ‚mÿÁA¼uà_xƒÁ~6ð_ìAûWø³ÁÞ1𞳨øsÅ^ñW‡>xûXð÷‰¼3âæÏWÐ|A¡jövz¦¬éw–ºŽ—¨ÚÛ_XÜÁsR¯ŸÿÁ<'á_ÿÁ(?à›š?ƒ¼3áÿ 韱ìÇâËÍ/Ã:6 é×^*ñïÁÿ xëÇ^&¹±Òí­m§ñì?øHÿá`ßùšž{ª?ê÷í½ÿsÿ‚uÁ8üUàþÙ_´Ç‡þøÛâ/‡õxWÁÖÞ ø¡ñ3ÅSøWMÔWG>&Ö|=ð‹Àþ=Õü'áýSW[ý/Ã:Ï‹lô=;ÅÚŽâË \ë>ñTZ?òEÿ:(ÿŸúL=~¿þÒ¿²oí“ð¯þ ûh~ß_ðG?‹ß°Ç¿Úkdzÿÿ~Úÿ±×íeqc¬|Søcâ? xÁ³ý—Âü,»ð¿Ä…ðпþé‚ßÀ>%ü'øYâèöŸüWâ?è±xóözúÿöžÿ‚ï~Âÿà™_?à¡hŸ‡ÿÿ¯ˆ>?ÁHb_ÙkâÄ/…Ÿ´ÇÏü+ñ·Â¿Ù‚oÛ'ÇZw‰¼=ã„Ó´Ùá>&[ü³ñ·‰ì|/yámwÄïÅkÍ;á÷„þx{ZÕ¾-øËÅZ¶¤øSÀºÍγ¥¥ßÛõüÐüXøðkã§üYð{Tø¿ð÷Ãÿî~ÿÁtOߢñ43ßiÞ øËáÛ«Æ^ð¯Ä+mÜ.‘ªxƒÂzG|Kyá9µÛR øªMÇZ¾ão øWÄ:(ëÿìCÿ!ý‰à£ÞñÇŒbïžøÕ¤|4ñáŸÙÛx{ÇñW…5gNmSA¹Ö| ñ7Âþ ñµ¯‡üGm§†|XÞ>ñ&£áïhú³¨jþñEŽ‘öý<:7„ü+áÏø:³ÅšÇ‡¼3áý Wñïü†ÛÅž:Õ4mNÒõxªÏöêðÏlüMâËëh.|Gâ _ø/ÁÞ¶Öu‰o5<+á? øz+•Ò4.Î×ú Š( ¿ t/Úã·ìÝÿWÓÿbÚ7Ç?ð´þþÝßþ)|vý‚>)k¾ðw†¼wð÷âŸÁxôÍOãÿì9¨iÿ ¼=meão‡þ øesañÓáoÆïоøuâ=;GÔµ?„>$ñ÷í㯰kº'ëõ~ÿÁv?â—ñßüâ—†âø›¤Áo¿c_„úWÄ] þ%;Ó>|qÑþ(xwã_ÃM?ÅÚÙüAeðÿã‡ôMBø¥àÛmB/|@Ñô3Lñf›«ÙXZÁïõQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ïüû!ê?µ§üûã•÷†¬¼A«xÛöTñ†?kÏ èú6½á]N¾Ó¾Ùx‡Ãßo|Y/Š¢XõOøOö|ñïÅÿ[h:©£x«XñW…¼3g¡K®\¹ðw‰¿˜/ø2ö_ð¯Ä?Úãö´ý«üBþÔµÙŸàÿ~xÃÚÏ‚ôíoQÒüUûJk~-–óâw„üc}|n|â x'àŸŒ~\®£M¨øŸÂ¿*×u–ð¬wˆ´èxÛÂz…u/Gà¿üLýŸ>| ø¡sàmÆ^4ñW„¼UãOhºî¹ksj<5 ~ÏQEWÀðRÏù7_‡?öÿðIßýzoìo_×ÀðS85øeÝYѼ#ñÇðƒþ×ÿðN/Š^ ðÿÂ߇^;ø·ã¿øA>ÁD¿eŸ‰ßõÝ áÇÃø·â‹áøá/x³SÓ<'áoXþÇÑ5 ›m>ãìì´÷ýðü<³öuÿ¢sûÿâ§à©¿ýôÃË?g_ú'?·ÿþ*wþ ›ÿÐo@Ñ_ÃË?g_ú'?·ÿþ*wþ ›ÿÐoGü<³öuÿ¢sûÿâ§à©¿ýô÷ýðü<³öuÿ¢sûÿâ§à©¿ýôÃË?g_ú'?·ÿþ*wþ ›ÿÐo@Ñ_ÃË?g_ú'?·ÿþ*wþ ›ÿÐoGü<³öuÿ¢sûÿâ§à©¿ýô÷ýðü<³öuÿ¢sûÿâ§à©¿ýôÃË?g_ú'?·ÿþ*wþ ›ÿÐo@Ñ_ÃË?g_ú'?·ÿþ*wþ ›ÿÐoGü<³öuÿ¢sûÿâ§à©¿ýô÷ýðü<³öuÿ¢sûÿâ§à©¿ýôÃË?g_ú'?·ÿþ*wþ ›ÿÐo@Ñ_ÃË?g_ú'?·ÿþ*wþ ›ÿÐoGü<³öuÿ¢sûÿâ§à©¿ýô÷ýðü<³öuÿ¢sûÿâ§à©¿ýôÃË?g_ú'?·ÿþ*wþ ›ÿÐo@ü³þM×áÏýŸÿüwÿ^›û×ßõøÃûZþÖ¾ý¥<ð—áÂ/„¿¶þ­ãm[ößÿ‚nø²8üYÿÝÿ‚…ü+ð®›á_…ðP¿Ùƒâ¿ÄOx›â'ÅÙƒÁ?ü!áÿ|;ðOмU¬ë>*ñV§[éÚ5È/rööó~ÏPEP?âÏ øWǾñ7|uáŸøÓÁ>4ðþ³á?ø;Åš6â? ø³Â¾#Ó®tøgÄÞÖ-¯4{Ãúî‘yy¥ë:6©gu§jšuÕÍõ´öÓËðŸ…|á_ øÀ¾ðÿ‚üà¿èÞðwƒ¼'£iÞð¯„ü+áÍ:ÛGð÷†|3áíÚÏHÐ|?¡ivz^£ivvºv—§ZÛXØÛAmQ/AEQEQEQEãÿ¾üý©~ |BýŸ?h?‡¾ø©ðo⧇æðÏŽ¼ âhg};WÓž{{ë;›kË‹=_Bñ…«ÙéÞ"ðŸ‹<=¨é>*ðoŠ´Å~ÖtohÚ^©iìPóÃàø6ÇöGÐu_ÆoÚÇþ ?ûcü ýœüAáo|5ý?kßÚwDø±û#Ùê?ü+ªxCá͵ïÁK…^ÒÃþÒ5G³Ð|'§_iž¼Ñ!—À¾'ѼAðÛZñ?‚õï·ÿoø$Ïìãûøïà߯¿xßö€ýš?i¯€ßÛZgÃÚÃö:ø—kðCöŽÓ< âMÄš?ˆ>Þ|Do x«ûGáþ£ÿ V³¨[é÷:QÖ<;uªøž×Âzî¢üCø¤ø×ôþŠøþ ÷ÿØýœà›ÞøƒáŸ‚ñÇ>4|@×>)|~ý£¾:ø¢×â7íñÿÇzƱ­êöúïÅ¿‰Pè¾ÿ„ƒþÿøH5[oéš~£èö—Z¯‰|Yu§ß|@ñßÄ/ø·À?cø"ßìãûkto†ß?kÿ‰³/ćÿ¾Û~Á_´'Æû_Œ¿°ïÿ|eñÝ·Ž|Y¡xào‰¼ÿaÏ ®§ãox×X×¼%ã_ÛxçPñvµâíg]¹ý~¢€?žÁ³ß°g„|`×>5ü,ÿ‚y|ký£â?ìàŸjZµOÓþ jÞ]_Tðÿ„õë÷Ö¶¾%ñÖ¹¨øÙ/5]/âþ«ñ+CñÄ/Åÿ«ÿ¿bŸ…ŸkØ¿öÅñf¿ñNø›û ÿÃEÿ¤м;ªørÓÀž"ÿ†›øm¥ü-ñïü,]3Rð¦¯â _û#ÃúEµç„áñ?„~Á¬<÷Ïöý“G§ÅõýÏø³Â~ñï…|Mà_xgÃþ4ðOñf§x¾,ð¯ˆôëÄ>ñ7‡µ‹kÍ#^ðþ»¤^^izΪYÝiÚ¦usc}m=´òÄ߈?ðCÿx«öuøgãOø$Oí%âo?íGûøƒÇ:?Ã{ïˆúΣ'Š¿jØ3Yø…«^~͵‡Ã/Q¹×t‹?ƒözF½ÀøwàˆÿöyÔ~xá·Ä [Áæ­áÿéÿ»ÔPäü9SöXÿ‡OÃá>ý ?á™èyÿ„«á×ü/où9?øjOù¿áU¿ÿ’ÿù&ò'Ä¿þC_ñPÑûbÿÁÿgÚÛö޳ý¯<3ñ³ö¿ý‰?i«¿‡÷ ~#üký‚>7ÚþÎþ;øãàDºðÅׇô/Œšªø3Å¿ð–ÿÂ%ÿ–e¢êvÑiÅþ¦øoAñf¡âmá÷Ã?Á?¯ÔPæì©ÿ†ý¿eÙÇöŒý›ômâÆ;/Û#þwü6ÆŸŽ¾;¾ñ_íûPÿÂÙµñf•âø[ü/kàŸ\ý›Ãþ6ñ6áÿøDãðŸö-Ö»â_Ûgâo¼wã|ñƒþ gã¿ØOþ ûb|ýŽ¿kø+ÿíñ7âGÃÿÙóáoì±á˜?jÄ~øïÀž?Ó<'ð?Bø ¬Øøwá‡þ~Ï÷> ñ_†4ÿÚ×S³Õt}Gý–<â[«}CÃV^Kšþ¨ ¾@ÿ†)øYÿ õÿþßøÿ ·þþ§þoí_¬ÿ…Yÿ £þ§öÿö'ü"Ÿð–ÿÂÀÿ„·þ%ßÚ¿ðœÂ9ÿçú'ü"ŸÚñ7¯¯è ?áŠ~Ã}ÃÅÿ·þ Âíÿ†@ÿ†)ÿ„[ûWßð«?áVÂèÿ…éý¿ý‰ÿ§ü%¿ð°?á-ÿ‰wö¯ü'ðŽÂ9þ‰ÿ§öŸüMëÇÿà’~øËá?Ø à®—ñÚçöŸºñµ×ˆ><ø›C—öÖñd4ý®à×?h¿‹^1ýœí¿hÝbßY×c³øÁgû>k¿ ,üqá6¾‚kp]xëFðåχ&ðö—ú?ExíGð þƒàOŽ~ÿÂêý ?gøN?áÿ‹Åû.|Gÿ…IñÛÁÿðŒøÇÃÞ0ÿŠâö7ˆ?áÿ„ƒþÿøE¼Mÿ‹¿í_k~!Ñ?Ñÿ´¾Õ ñàü,/Žß³§ÇOø]_´ÿáÿánÿÅøwñþŸ?ÿámø:ËÁÿñ‘±¯áfÿ²ûü%?¿âo¢Âã»íoþ&_hû*{ýàð ¿ã)ÿá¨ÿáu~Ðòoÿð ¿á?ácÿÆ,ÉEÿ…‰ÿ «þö7üœüÈßð±ÿá!ÿ’uÿÏö7ü¿WäÄOøÙüKötÑ|ÿ¿ìqÿ€ÿ…»ñö€ñ¯üŽß~ ÁGxÇÆðª|GcðgâF¹î§ûýEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE~þÐ_ðYàçü›ö?ÿ‚_ÿkü?_†_gÿÁñwÄ·¿| ¦ÿÂ'ûG|Q˜x³ötð‰4kï ^øƒDøoáÿƒÿðˆx+á×ü, Ý|Yÿ†Ùð¿ÿííï„>ÛxÛ÷ú¿Ä›öÐÿ‚‡|Lý ÿà¨ßÿà¤_|Uâ ÆÓþÓö_ÿgŸø³Áßm|Uà? ü!ñ6ì½§ø›ÁÚe§ˆ~ê øiðïÀß tfÖý|c§x‹QðåÍÏŠ5_\êZ®±«ÿ³Ïìõñ¯Â¿´§À/ÿ´gtÿi> øýðá§Æ¿i~,µÓ¬|U¦øWâ§‚ô_x{Oñ5ŽªëÚEŸˆ,ôvÎßYµÒõÍgN·Ôc¹†ÇUÔm’+É€=‚Š( Š( Š( Š( ˆ?à™>,ñWà›ðOŸxëÄÞ ñ§¼iû~Ê,ñŒ|Y¬ê>#ñW‹)h_ð”|2øÁðÿÆ_ ~"øgûOXÑ?á"ð'Äj^ñv…ý³áÝCHñ‘ý¯áý_PÓÿ´ô-WLÖ,>Ñö­3P²½Š ˜½ŠþP¼kÿáÿÁôÛëöiø)§þÆßgøeñö@ý¸~)x»Ã?ðÐßµ\¿Úþ;ø?ñ£þ íá?‡ZïöÌÿ¥ñ‡ü#¾øãñKOþÌÓ5[-Wÿ„£íZÞèž¹Ò?£ïÙsö\øû| ð7ìÑû4xþ¯Á/†¿ð“Âà¯øI¼cãì_øL|câøþ*?ø‡Å^-Ô´|[â­{Vÿ‰¶½ö?·ý‚Ãìºe­••¿Ïÿ¿å)¿±¿ý˜ü³ÿZ+þ ;_ÐEPEPEPEPÀðIßùE—üOþÌö7ÿÖuøs_×ÀðIßùE—üOþÌö7ÿÖuøs_ÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_Ìüþ eñwÇß·gÄ?ø'ïìñÿý?à‘~ý‘?áTø‹öý©k}CàŸˆ¾)üdÖ>9|ñÄo‡¿¿dÏ‚.m¾xÛáÿ‚l®|7Çx§Æ~ñÞ›â?xn? Acáÿ ]ØüoþŸkù"ý»?dÝGöHÿ‚¨|oý½¾3Á/|?ÿ}ý‹ÿo¯ü ðÏŒü/ðÛöNð¯í?û\~ÅŸgÏ‚ÑxÂW> øeã„ÖôüøÏ¤xiçñÏ‹4éü:Ûèz‰õŸ j? ¾h?´ÓÿðGø*Åߋߵ?Çßø&í/ñûöýº>&üø®þÒà ¿²o‹¾ ë ?hOÙÆïâ/‡üš?Åï|×ï*ištúßÇ äø(ßÄø8gþ Kÿêø›ûHxÏöðø?ûbêú߇þ èß x«öø…©|Pøkc'‹>ÙÜxëÁ?µÇÁÿ‰—:ï‹~øÊÛâ¿|Lðî£âƒß<០iWÅm/M?dïø'Wíqãßø7þ íàï|'ñÃïÛ÷öý§ïÿnÿ€?h­+[ø=§x³ã/ÀÿÛ+ãÿ‹ü9ðÓã7‡<_¤x{Å:‡þ%ü)ñψeð…œ¾!øQ©â­gáα¬|Pð€fÖõ·ðø-÷ü—ö¸ý¹¿àŽŸ´?‡´ø&oí?ûü;ð§‡ÿg?þÚ~:ý»| ­ü&ƒOÔuOÚà­€þþÆr |~ñ£ñ’HµüTñƒ¾xWÁ¾j‘x‡ÁšÄOŒŸt½úÿ†£øíÿôÿ†)ÿ„çþ1—þÿ Gÿ ÓþŸÉvÿ†Ïÿ…Oÿ Ïü&_ðÂÀÿ’ÿøFá+ÿ„;þb¿ðmÄʼö…ÿ‚‡|Lýšÿà®ÿ>øëÅ^ Õ¿bÿ€?ðB‰ðPïü 🃾ßx«Rø™ð¯ö›Ö´ø«Ã>%Ö-4Þx‚óáN…yá}ÁÚ§ÄmáíÆ£%µýõ¦¨¼ºì>?û{Ü~Ñß±ü#àßüÃ?±×íûhþ̾>ý€5¯ø'ßÄ ~Ç^ºø¯ûG| ñÝŸÇ/~Ò~øƒyðYlôïøJ¾ø«û;FðM¾¹mâýGðýÓøžûÅšÞ‡­[ü1ðÆ<5ðOöâÿ‚ÿÁSk_ˆ?´?ìÅñö,ø ûdÁ~<þʳߋ¯/ˆ%Õþ#¥â]j66þ*ø³>—ãOxcáÂ|Iño†>jpÁ]ÿj?Žß²ÿü;þ_Žáÿ†ˆÿ‚¿þŲçÆ/ø¦|âoøL>ü[ÿ…—ÿ ÀßñXx{ÄðÿÂAÿþ‘ÿ7…¿±"ý§j_ÚßPø'â/Š5Ž_|CñáïïÙ3à‡ÆË›o†^6øà›+ŸÍñãÅÞ)ñŸ|w¦øÆÂXøÂWv?þý¸?h_Û‹þ eñOþ Wâo„ÿðMÚÿà'ì‹û>Á_ÿaÏ|XÕjŸ‚>-ð7íO©xïAñ‹u KÇzÁOÞøæËÀ_²Á_†Wš•ÏůÚâ^³a£ø›â/Ä¿øOÁ«¤ÃðÇâ]Ö«Ð~ÝŸ²n£û$ÁT>7þÞß¿à—¾ÿ‚¾þÅÿ·×‡þxgÆ~ømû'xWöŸý®?bÏŒ¿³çÁh¼á+Ÿü2ñÂkzG‰þügÒ<4óøçÅštþ ‚mô=?Äúφ5†ß4ÚHéÿø#¿üâïÅïÚŸãïü?ö—øýû?þÝ~ü?×i‚?ðP_Ù7Åßõ¿…Ÿ´'ìãwñÃþMâ÷> k÷žø+û@x Ä9Ðt;i:jZßxrÞíïã½²Ð<%ñ¯öþ«ð‡þ !àGÆŸ¾(~Õ~ÿ‚J~ÌðIÿ:·‡üMðà¯n¿fŸ ü+ÿ‚…ü]Ó´ÿ‰“_j¿¾5Þx/Eøy¤|ø?¯iðu¦•û6ëø‘â¯xûFÔ>$ÅñYþh¿ uO‰Ÿ»ÔQEðÄoùJoìoÿfÿ,ÿÖŠÿ‚N×ßõðÄoùJoìoÿfÿ,ÿÖŠÿ‚N×ßôQEQEQEQEðüwþQeÿÓÿ³ýÿõ~×ßõðüwþQeÿÓÿ³ýÿõ~×ßôWäü«ö£øíûÁ'¿jÏÚ_öhñÏü+_¿ áFÂã_øF|ãì_øLi?ƒ¾ñüSž?ð÷м%¨ÿhøKÅZö“ÿmÿìoû}‡Ùu;[+Û×êüÿƒ£¿å·7ýÛ7þ¶ìû@ûKøÃþýš~jßðTwãìÿâ‡ÿ ¾ßñÓö„ÿ‚2Ùü=øeeáυ߲LJü9¯\xïÂÞý¾ÚÖ÷âÄßÚá—Ãû-3âGu½?KðÿíGâ—æø[¤|Møáÿüø¬jßðP_Û³þ ×ûLh?³Güâü0WÁ/ƒ¿³ÿìÑûS~Õß¶_Æ…?~6|SðÙ߳݇Ç/Ù“ö~øgû;ø‡Ä>*ð–£ý£á/[jß<[u¯X}ƒÄ~ñE†‘ãOéž ðÆ‘ûQsÿ¶í§ÿFý¦>xïþ Q£ÿÁ,>0h·íáÿ~Ê?¿jKÃ&ÿ‡KxGáŸÄ_øŸCøŸûM|$ý¦­oïÑþ!|8ñw‹døoâ‹_>¯Â_‹¼ýŸÁ?Ú;þ'ûiøŸã_ÁOÙ‹ö€ÿ‚…ÿÁ>?k_Ùÿö:ý›üo¥þÍÿn¾)þÜ_³oŽÿ`/ÙŠßàGÀÝcXðwáÏ |SøñOÂ^ÕuøßOÒ¾èúg‹|E%­Ôž¸ð_<-ûI}¿ÿâý¯?m¯þÚà’¿ðR+ßüjý þ|ÔÿkÏÙóöÔøq øÀÞý¥¿d}gâµ§Ãm:÷âwÂ? K¦Û|!øÁàïk‹àõÐtèš¶áïZ\˨Gàÿügý¢~ ý—~0Ámà£ÿà£ÿ ¾þØŸÿcÏ‚_²güÿöÀø?àßÚ×RýŸ>þÐ_üQáÏøÃþøiûø7à6¥¦xÂZ'Ãÿ„ž¸Ô¾%üKý þ%ê^$ø§ãßø÷á?ƒ|©Þižø±:ý?ÿâðíqû`ÿÁI>6ÿÁch¿ ýŒ>Þ~ÌŸüÿöGý—¾.x[[пj|ð÷Ç›O‹ÚŸÇßÚCÔõD¶øWâ gÆÚN¹aá[èóO¨x^›Ï x+Â??hoÎø'í»ûG~ÄŸÿà±>&Ÿöý ?l_ÙÇ?ð[ïø(>…¦j¿°Ç€î¾5~Ôÿ ÿhí/Ä~Ô5Ý?âÁMC_ð½–§û?ü@øe/‡n|ñKÂ:ɺø{ñÀ^.ðŸÄ]2ò‹ n´ÐÙÿø$_í½ûOüsÔjoØ‹ööð?‡ôOÛÃþ Íℾø÷ñ3á¶£áýGà×í á_Œþñ‹þ |rðM¾º]Ï…|AñÁŸÄ¾9ðDþðƣϪèzΟ xÿĺçÁƒÿ³ÕøƒÿrøûG_øöÒÿ‚˜~Ø¿ ?á›ÿhßø)¯Äƒž.ödµñÖ±ÿ ;öqýž~CðÏöoðïÄ+=cÃZGˆ4ÚWðþ¯â}oãš’ÚËö¯¥Çï‚~3¶ñ¿ÂßþßPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ÁQÿaøyGì'ñÏö)ÿ…£ÿ _þGü+/ø¹ð„ÿÂÆÿ„kþׯ/‡ßäMÿ„»ÀŸÛÛð‚`È×¥gÿjÿjÿ§}‡û6óïú(¢¿8?nOø*Ÿìÿèø™û8ü<ý«üG⇚Gí)áÿÚGÄÞø¯%†‰qðÏÀÚwìÃð÷Cø‰ãoÜKâ;_Oâ[xFð—ÂO ü8ð?ÄO|Aø…©i¾ Óthu}_GPòØëþ Iû8þÖß´uçì‡âo‚µÿìIûM]ü?·ø¥ðãà§íïðB×öwñßÇ%׉í|A®üÒ›Æ~-ÿ„·þ/øDµ›ÝkL¹—HÖ/ô}7Äš÷„ôÿh¿¾'j ý~¢¾@ýÿmo…Ÿ¶ü4ÿü*Ýâÿ ›û_üjýŠ~"ÿÂ¥xsKþÚø§ð#þ¯øKµÿÂ;â¿hü?Ôá*ÓÿáÕußøGÿƒ“¿d}{Qøª|fý“¿à£ÿ±ÇÀŸÚ3ÄðÏÃ_Úÿö½ý˜´O„ÿ²=æ£ñº§‹þÜÞük°ø«âÍ!|?ãÝ#K{ÍÅšuާá[=i|uâ}gÃÿ ´_øÓAóÿÚ÷þ +§~Ä¿ð^;ÛŒß>0]| ºÿ‚0è:ÏÃ_ÙOÀ¯Š¼i¨üzý®øû;ØjñiÿiÿˆúDOà_ \éÚ\Ü>ƒT¼ñ?‰¼9ðÛÞ'×´@ézŠüÀý‚?à¬ß³íÿ㿌Ÿ<3àÚöhý¦¾bêÿdÿÛ᥯ÁÚ;Lð'‰4 ëø¥gðí|Oâ¯í‡úü%Z6Ÿq¨[j§Xðí֫ዯhZ‹ñᎭã_Óú(¢Šøâ7ü¥7ö7ÿ³ÿ‚–ëEÁ'kïúøâ7ü¥7ö7ÿ³ÿ‚–ëEÁ'kïú(¢Š(¢Š(¢Š(¢Šøþ ;ÿ(²ÿ‚iÿÙ€~Æÿúοkïúøþ ;ÿ(²ÿ‚iÿÙ€~Æÿúοkïú+àø*?ì1ÿ(ý„þ9þÅ?ð´áKÿÂèÿ…eÿ/þŸøXßðºøÅðûâÏü‰¿ð—xûcûcþOìùô¯ìÿí_í_ôï°ÿfÞ}ÿEQEðì û ÃÃjÅÑÿ…¡ÿ ûþÑß·?ü‰?ð…»ÿ†€ÿ„7þ-wüÞ-ÿ„·þ/øD¿ävÿŠgû{ûCþEìŸé?Ñ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ìü¯â—ìãð[þ õÿð|Ný¬5߇þø%á_ˆðPyõ_|RÓ-uxCÇz€ú7ÁOk·:†Ÿ¨éžÿ„Wãn£ðïÄgÄ]Ytíáv±§iÿõxWLð­×‰´žÿþ wÿ ³ãí“ÿ6ýš<ÿ ÿÅÿ¶Ö‡ÿ?øûQè> ÿŠq>)øOö6ø-cãßþÒþ9ÿ„“Vû/ü!ßïÿáZøsVÿ„f÷^Òo¾6xáGØ<áïx—áuý—‡}ƒþ 3û=x«ãgüÏþ¬_|ñÅÏÙóÂ~ÿ‚®øOö‹Õ.¾j>=ø5ᯠücýü3à]Ã?ï¦ÑuoèÞø©rú§ƒ´­ÇRÛiÞ8µYÛj’5Å™úÿö!ÿ‚FÁ:¿àœ~*ñÇŽ¿c_ÙŸÃÿ|mñÃúw„üUãŸ|Pø™â©ü+¦ê-¬ èÞ!ø»ãêþðþ©«­†©âmÂWšâíG@ð÷Šmµ‹ŸxV]óƒþ]ñcágƒ¿áüÿð—|Køá_øUð[ïø(ÅŠ_ð’xËÚü+_…šü"Ùÿüý§©ZÿÂðþÿþ¯Ä_±øËÄ_ÙÞºÿ„ƾF¤ÿðŠë¿`üàý‰|sÿêý¥?à’ßð__‰_¶'ÄŸi?ðNÿßðYïÚÛÇ:Åÿ è,|U¦øWâ§‹¿e-ö|ø“០xwÁ:÷ÄK?YüD×~x£FÐüEðçYÓ­õí¬>(ø'Qð‚x¯B›úý¤?àŒðLÚïöŽÑÿkOÚ7öAøñ?ãÖ‘ÿGÚ|]©ë~?Ò4»ºŽ ÿÂÒøuáŸèŸ ¾0}ŠÊÞÃÃ:‡ü-_xËþ/iÃÏkøAѼ;cõÂïØ¿ö`ø9á_ÚCÀ¾øAáøüû^|`øÁñßö“ðw‹/|Añ#¿>&|~Ó´ýã©âo|HÖø¹eñÿâ·Ã/ X|[ð×ÆïŠ¿þ-}³G‹â?Æo|øªü9ѼS«~¯k>ð¯ˆÿàêÏ ë!ðχõÝ_À_ðBŸxTÖtm;TÔ|â«ÏÛ«ÄÞ¼ñ7„ﯭ§¹ðçˆ.¼ãOø:çYÑå³Ôgð¯‹ÿÁ½?ðGOÙ‹ã/Ãßÿbßè?¾ø‚|>ñ‰¾-~Ð?ôï øªÎ ˆ´Ÿ[x;âŸÅŸx&ëĹ5¿ ë:‡/5øªÃFñ†.tŸè:.±aú?ÿ ¹ð'þŸþ[þoøÉ¯øgÿøeÏøYð“xÇþHOü,_ø[ðƒÂÿ ü+ÿù(ñ?ÿ„›þOøLæÿ ö/üKhòþvšÿ¼ÿðE+÷ú¼þsàOü5?ü6·ü ßñ“_ðÏÿðËŸð²ÿá&ñüŸøX¿ð¶?áÿ„7þøWÿòP?âÿ 7ü"Ÿð˜ÿÌ+þì_ø–׿ÐEPÀ¿å)¿±¿ý˜ü³ÿZ+þ ;_×À¿å)¿±¿ý˜ü³ÿZ+þ ;_ÐEPEPEPEùAû^ÿÁo¿à˜ÿ°_Æ[߀µÇí⃬ü? ø²/k?³ŸíI®éÚ×…|K²èþ&ðŸŒ|ðWÄ~ ñ§‡ç¹µÔôKgÂ>#Öôí7ÅZ‰¼!©ÜÙø§Ã!ÑôÀ`ÿ‚NÿÊ,¿àšö`±¿þ³¯Ãšûþ¿à„ðTØOö ý–?cߨ§à_Ç?øN?i¯ÙßöýŸ¿áq|4ÿ…eñ‹Ã?ð‡ÿ¤øuðƒá?Äø¬¼aðûÃÿüAÿÿÄiüRÞ+Öÿµ~×ý«¢ih¶÷Z”?¿ÔQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEðÄoùJoìoÿfÿ,ÿÖŠÿ‚N×ßõðÄoùJoìoÿfÿ,ÿÖŠÿ‚N×ßôQEQEQEWñÿ«þÆð›~Î?³'íÓá?ý£Ä¾ j¿þ-êøeý©¬\ü,øÁký»à/üEø¥¦Ê·¾øð·âo„.|áÄÖ7¾¹ñßí1´ý†! +|tã ˆ›ˆBtÏ>÷<(ñºLF–1~¢’PÂ=/á@’cÎEnS&d±©÷^¡Tms“âÇCL°";NÃ’Rì8<û—ýëÑùT±½(ûnæ*Ttôô*ÓÖ"†09*d5N†Ö"æ¥e^º &ÿñ9ñ-Rt®ï&”½‘`†t‡|4'¬… öj2'Ö»”½2}_=p’bª6Ï$Q |"ˆ|Ú<ç ßÂ'‚§⯥ß‚ ·‘ïc@î3” ã ¡ZޝX`è¥M–Lâ-òRqx|„Ù4ÃSà d8C§¤>z¢SÒ”ŒRðõäwÔÍÚý)¨ßN#±ß{ rlXí75)“¬Bî>Š´Qô›ùÚžBb2Éà4³Že[Ûqô_ÍPôE0V]W?¡sæ¾÷6‡tj|›—`dù+a¼ÍÌËî‹›îvÚ(~3òpr£«“ãñ©2QNêÐ×Í/U=϶ 5n0ó†¥òøcºfL×¢øÇã‰N`R2âÔ@Í»9« xnÇðO£KkÍt¼VûvWõõ z¿žz‚óʨýÆ_uÃcWÿå"'2jÚÝ®]W½_ذe–Ÿ°·¥ˆÑ&ø¡öV=ç¸ß°jbv[£Ž²2úUÄ*Œ£˜VÌ£ã±Y9Ù&å7F¨ ÂöÁ`Úð šÈ‘tä*°c\‚ãH_ËVZàF4ÎEÛúšòØûÁwMµׯ¾SR8L3Ù.S&ö Ø`/‚&-}_@H%‹EŽÒFÁÌ·šR@®Z”¢–Àd'eãIr !ðþ‘ÇZèa~lÖo”œ'œNn™U¿ÚÌdyè@­ÏàOTžÏey*Ò‡«"ší¢o²D¥q1Vm×úÙV$ÍËWnC<\ RR‚‡ƒàA7f¤½BðÈ +8ÎG¡_T¥ÆËÁ¤HPJV,ÅÆ5&ä]ݸaÙ!‡+›ÖÚÆQ€§»çü?O"Ås¹¼hî;C†‡½øµ¾æµ®å¥ö™%T­SZ¨#Li{h_¤d}ÌëÍLÀ­©ÞQ™ñ*3#•™|Ч09ÞËž¶!N rç;x† .ŒOõ³k®eŽÖа$"RGÛoÍŒÞð 5Þsñ/3"ØñlÝð8èž‘I¡ÏîÐ9Y¶*ž’‚³½’x“<N”&s}ä¬ kûmàù¬×íÀÖŽR®-F)>*÷mW÷5µæðEYWH;k†å6^ Uä»:'nHð !ÿ^QDÝS¯Vý|þ;Õå7øDñ­¦g“4]Ooƒb0õo±Ã`*1]@ù5†U»aˆ”2,H7ENy§x¨»3ÄkåšEÇfE6œyÍÁ‡µbhùføÎTx¡ÄØ«®Äãò®úÝKN{®uõ°u¶¤¾˜¤TñÉcÖYSpá…†J ×hÅã½Üû^À<í‘áoUÓO r?ä2©§(ÕýÅïßý)ÐËÌ•½L%&}Maáq„56S—b ×¼»œR!­sSxîƒÖ–*)íØ ïÚÃ|Qͳ|ÔÁS[)]c õ¨êÛƒo+é·m»ïü$gšãÓÆO`x0<<üŒZÑJhH/à}ßùV×_Òôäù‘¶wì4Âðäâ‰7µ2útÿuÉûs/=UW·øBðžç9‰ª ÀãsGP„èà¿6/¼ ˆªÆ òT þͯõ õ³Ò—Z«…C.o4·šŸˆÙù­òÝôrm„ÉU{lzÿ1ðDŽ“åWø O1þF”J?N/6¾}ƒK§)§Ä\FÓK—Ë!¹å¾Á=\i;jâ‹èNÒRwîО¤ h#ˆÀo¿Üÿm„]*†c¦ŠÒGIO"Ÿ‡l=í8’Î^KUhe—>~ºýïoçd@–<3ýþ<´nr Ùá&ѪH¬Ô¤Õ¶ß($ ]àö†:V ‘ZeÞ(xÝtîÐÏöèÀçÿ%ùÜ“ Jl~ò‹]1Íd¾Áþºü‚?6žëΨ¬0o£ñáó?gÒe6*ž—”¯ñ—;Õ¾¨†ËxÓä°nNŒ0þ)4¸o–âψ“C/þ„k“K¿¨Æãýÿ{>ÌÂendstream endobj 2933 0 obj << /Type /Page /Contents 2934 0 R /Resources 2932 0 R /MediaBox [0 0 609.714 789.041] /Parent 2931 0 R >> endobj 2935 0 obj << /D [2933 0 R /XYZ 95.641 729.265 null] >> endobj 2936 0 obj << /D [2933 0 R /XYZ 186.266 706.351 null] >> endobj 2937 0 obj << /D [2933 0 R /XYZ 246.101 706.351 null] >> endobj 2938 0 obj << /D [2933 0 R /XYZ 420.529 706.351 null] >> endobj 2939 0 obj << /D [2933 0 R /XYZ 267.546 695.392 null] >> endobj 2940 0 obj << /D [2933 0 R /XYZ 213.333 684.433 null] >> endobj 2941 0 obj << /D [2933 0 R /XYZ 354.098 673.474 null] >> endobj 2942 0 obj << /D [2933 0 R /XYZ 413.248 673.474 null] >> endobj 2943 0 obj << /D [2933 0 R /XYZ 95.641 654.725 null] >> endobj 2944 0 obj << /D [2933 0 R /XYZ 95.641 654.725 null] >> endobj 2945 0 obj << /D [2933 0 R /XYZ 189.087 646.575 null] >> endobj 2946 0 obj << /D [2933 0 R /XYZ 344.024 646.575 null] >> endobj 2947 0 obj << /D [2933 0 R /XYZ 163.115 635.616 null] >> endobj 2948 0 obj << /D [2933 0 R /XYZ 413.656 624.658 null] >> endobj 2949 0 obj << /D [2933 0 R /XYZ 95.641 605.908 null] >> endobj 2950 0 obj << /D [2933 0 R /XYZ 95.641 605.908 null] >> endobj 2951 0 obj << /D [2933 0 R /XYZ 191.282 597.758 null] >> endobj 2952 0 obj << /D [2933 0 R /XYZ 346.789 597.758 null] >> endobj 2953 0 obj << /D [2933 0 R /XYZ 164.078 586.8 null] >> endobj 2954 0 obj << /D [2933 0 R /XYZ 201.986 564.882 null] >> endobj 2955 0 obj << /D [2933 0 R /XYZ 143.462 542.964 null] >> endobj 2956 0 obj << /D [2933 0 R /XYZ 167.489 542.964 null] >> endobj 2957 0 obj << /D [2933 0 R /XYZ 95.641 514.431 null] >> endobj 2958 0 obj << /D [2933 0 R /XYZ 95.641 514.431 null] >> endobj 2959 0 obj << /D [2933 0 R /XYZ 173.2 494.147 null] >> endobj 2960 0 obj << /D [2933 0 R /XYZ 242.201 494.147 null] >> endobj 2961 0 obj << /D [2933 0 R /XYZ 95.641 488.951 null] >> endobj 2962 0 obj << /D [2933 0 R /XYZ 95.641 488.951 null] >> endobj 2963 0 obj << /D [2933 0 R /XYZ 187.967 478.207 null] >> endobj 2964 0 obj << /D [2933 0 R /XYZ 143.462 423.412 null] >> endobj 2965 0 obj << /D [2933 0 R /XYZ 95.641 417.023 null] >> endobj 2966 0 obj << /D [2933 0 R /XYZ 95.641 417.023 null] >> endobj 2967 0 obj << /D [2933 0 R /XYZ 246.994 407.472 null] >> endobj 2968 0 obj << /D [2933 0 R /XYZ 301.298 407.472 null] >> endobj 2969 0 obj << /D [2933 0 R /XYZ 376.361 407.472 null] >> endobj 2970 0 obj << /D [2933 0 R /XYZ 213.578 396.513 null] >> endobj 2971 0 obj << /D [2933 0 R /XYZ 359.898 396.513 null] >> endobj 2972 0 obj << /D [2933 0 R /XYZ 439.887 396.513 null] >> endobj 2973 0 obj << /D [2933 0 R /XYZ 466.816 396.513 null] >> endobj 2974 0 obj << /D [2933 0 R /XYZ 95.641 388.722 null] >> endobj 2975 0 obj << /D [2933 0 R /XYZ 95.641 388.722 null] >> endobj 2976 0 obj << /D [2933 0 R /XYZ 152.219 369.614 null] >> endobj 1284 0 obj << /D [2933 0 R /XYZ 95.641 339.905 null] >> endobj 546 0 obj << /D [2933 0 R /XYZ 186.992 309.529 null] >> endobj 2977 0 obj << /D [2933 0 R /XYZ 95.641 309.379 null] >> endobj 2978 0 obj << /D [2933 0 R /XYZ 95.641 291.944 null] >> endobj 2979 0 obj << /D [2933 0 R /XYZ 95.641 285.917 null] >> endobj 2980 0 obj << /D [2933 0 R /XYZ 95.641 275.954 null] >> endobj 2981 0 obj << /D [2933 0 R /XYZ 170.361 260.214 null] >> endobj 2982 0 obj << /D [2933 0 R /XYZ 194.57 260.214 null] >> endobj 2983 0 obj << /D [2933 0 R /XYZ 199.95 260.214 null] >> endobj 550 0 obj << /D [2933 0 R /XYZ 146.232 239.293 null] >> endobj 2984 0 obj << /D [2933 0 R /XYZ 95.641 234.311 null] >> endobj 2985 0 obj << /D [2933 0 R /XYZ 95.641 229.33 null] >> endobj 2986 0 obj << /D [2933 0 R /XYZ 95.641 194.959 null] >> endobj 2987 0 obj << /D [2933 0 R /XYZ 95.641 189.978 null] >> endobj 2988 0 obj << /D [2933 0 R /XYZ 95.641 180.015 null] >> endobj 2989 0 obj << /D [2933 0 R /XYZ 170.361 165.171 null] >> endobj 2990 0 obj << /D [2933 0 R /XYZ 199.412 165.171 null] >> endobj 2991 0 obj << /D [2933 0 R /XYZ 204.792 165.171 null] >> endobj 2992 0 obj << /D [2933 0 R /XYZ 242.989 165.171 null] >> endobj 2993 0 obj << /D [2933 0 R /XYZ 286.431 165.171 null] >> endobj 554 0 obj << /D [2933 0 R /XYZ 146.232 144.249 null] >> endobj 2994 0 obj << /D [2933 0 R /XYZ 95.641 139.268 null] >> endobj 2995 0 obj << /D [2933 0 R /XYZ 95.641 134.286 null] >> endobj 2996 0 obj << /D [2933 0 R /XYZ 95.641 99.915 null] >> endobj 2997 0 obj << /D [2933 0 R /XYZ 95.641 94.934 null] >> endobj 2998 0 obj << /D [2933 0 R /XYZ 95.641 84.971 null] >> endobj 2932 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R /F26 1177 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3001 0 obj << /Length 1216 /Filter /FlateDecode >> stream xÚ½WKsÛ8 ¾çWè¶ÎLÌò!ê19%©“ñNê줾ìl÷ Kt¬,y$9múë$ [ŠÕm.ÛñA ~Ä-<?áÅš¾ðB3h/Ýžqï fîÎYˆH±(”žb: ­ÁõòìÃ­Š½˜Åò–kg·ÌþšÜl’]kêó©Ô|"ÙùßËß?Üú‘a` }Ÿi­Èú~~;»Ÿ/fŸÑ®¨S:$»?î¯>}š/îùqv;{œ-ÎÅäffמ͖g¥²[ÄÞôàí[:SrÀWJ ÿ@È×G?;BW‹?‰„ä¡“‚i“AQUÏû]φ š\ 2úÂ5?…f*"ƒåÕõýl$d¾ê¢pqŠ 8 šþ¼|´ñ9ÁP’‘<:".)Úúí©à‹¹ïM}Á"_õ™¹€'e†B}.¢‰i÷u‰cS¶õ+Šk7WÁ¡lQÑ&«Âœ:4°¯ÔÞT+&ÝNóÅò'A6åS»ùAþQ€Åü@âÓäß ­ÖDxcÞÏœ ‡rýðpJ>`QÜ‘7Û]û:â¶ñ/á>Ì‹tcÒg䙯û|QÕPbt^÷XKq<ñåÆ4°@Äj²Þ—i›WeƒÃfÑKžÑü“)M4»¯wUc.pôl^M†¢ó a8¸êéPÜi2“ f3A|Í1Å P,†;ĺjõ$n"`êüÞi÷ãÉ©¢Î¦c‰ÁY™u…{SÐZü¦ÉÁ¿{¨¦Ædl$—|¸¶ã\Õ,ö±ŒÊÆÔí©#p!ƺK„$Ëì ñÄíßjõIÛN—¡·Î*²1FM[‘ -i†ò¼%È/œËº!¬]R'[ƒÝÀ"Z*§—$»Ò¡1iN¸Ä!Çû§Ñå³w• $ó[ƒ£g›¾^â¹p0n7¹;… AF±­€ ài¾mL±f¸vÙab¼@p)wšNödm &M[ç婬ƒVpÚÙn;«t¹a…M&å+*^’boÂÊó5ND—`ºÀQ’ÑKApÜß)/; $îä.ÇßÐqEC—_BYlC „€†5¼«‚šlf‘Óvxe ‹»"I öÑ ¤4_Ïc9©Þ¯…û^[Ô‚fZ>Ö5³:7/ÆúùX‘>4許mq&Aå!ÿA…ùÊcþƒ–ÒÉ2­Q㈾¸èöÍp‰‚fPèõ ./mï<·<ö‘쵊îTbÂöî_û;-³þ0[4¤£q[&¤ÃÜ#ŸFîUª~%•ë#Júƒ¬•HÊªË ÇÍ>Ý =¹@u¹/ Tã‚>‹Ñ»SŠ)<.Þ¤Šæj˜*»Ö¨un¿]ÙS°ÊŠx˜ÂLñä¤mzR ˜oáÑD)Ÿ—c/rYžðÀÑx߇¤"&‚ÐÝÍ>Þ<|‚…a4YT¶aZéöÐPOˆw>´&¡ÇŸøQ! t×¼¾Õf=Ò$ßûY<|{X~?0 8ƒ7&X3¸9Ö”> endobj 3002 0 obj << /D [3000 0 R /XYZ 95.641 729.265 null] >> endobj 3003 0 obj << /D [3000 0 R /XYZ 164.981 706.351 null] >> endobj 3004 0 obj << /D [3000 0 R /XYZ 194.032 706.351 null] >> endobj 3005 0 obj << /D [3000 0 R /XYZ 199.412 706.351 null] >> endobj 3006 0 obj << /D [3000 0 R /XYZ 237.609 706.351 null] >> endobj 558 0 obj << /D [3000 0 R /XYZ 146.232 685.43 null] >> endobj 3007 0 obj << /D [3000 0 R /XYZ 95.641 680.448 null] >> endobj 3008 0 obj << /D [3000 0 R /XYZ 95.641 675.467 null] >> endobj 3009 0 obj << /D [3000 0 R /XYZ 95.641 641.096 null] >> endobj 3010 0 obj << /D [3000 0 R /XYZ 95.641 636.115 null] >> endobj 3011 0 obj << /D [3000 0 R /XYZ 95.641 626.152 null] >> endobj 3012 0 obj << /D [3000 0 R /XYZ 164.981 611.308 null] >> endobj 3013 0 obj << /D [3000 0 R /XYZ 194.032 611.308 null] >> endobj 3014 0 obj << /D [3000 0 R /XYZ 199.412 611.308 null] >> endobj 562 0 obj << /D [3000 0 R /XYZ 146.232 590.386 null] >> endobj 3015 0 obj << /D [3000 0 R /XYZ 95.641 585.405 null] >> endobj 3016 0 obj << /D [3000 0 R /XYZ 95.641 580.423 null] >> endobj 3017 0 obj << /D [3000 0 R /XYZ 95.641 546.052 null] >> endobj 3018 0 obj << /D [3000 0 R /XYZ 95.641 541.071 null] >> endobj 3019 0 obj << /D [3000 0 R /XYZ 95.641 531.108 null] >> endobj 3020 0 obj << /D [3000 0 R /XYZ 170.361 516.264 null] >> endobj 3021 0 obj << /D [3000 0 R /XYZ 194.57 516.264 null] >> endobj 3022 0 obj << /D [3000 0 R /XYZ 199.95 516.264 null] >> endobj 566 0 obj << /D [3000 0 R /XYZ 146.232 495.342 null] >> endobj 3023 0 obj << /D [3000 0 R /XYZ 95.641 490.361 null] >> endobj 3024 0 obj << /D [3000 0 R /XYZ 95.641 485.38 null] >> endobj 3025 0 obj << /D [3000 0 R /XYZ 95.641 432.578 null] >> endobj 3026 0 obj << /D [3000 0 R /XYZ 159.771 410.66 null] >> endobj 3027 0 obj << /D [3000 0 R /XYZ 95.641 405.465 null] >> endobj 3028 0 obj << /D [3000 0 R /XYZ 95.641 405.465 null] >> endobj 3029 0 obj << /D [3000 0 R /XYZ 95.641 354.052 null] >> endobj 3030 0 obj << /D [3000 0 R /XYZ 95.641 354.052 null] >> endobj 3031 0 obj << /D [3000 0 R /XYZ 285.517 323.985 null] >> endobj 3032 0 obj << /D [3000 0 R /XYZ 360.781 323.985 null] >> endobj 1285 0 obj << /D [3000 0 R /XYZ 95.641 307.831 null] >> endobj 570 0 obj << /D [3000 0 R /XYZ 244.324 274.859 null] >> endobj 3033 0 obj << /D [3000 0 R /XYZ 95.641 274.709 null] >> endobj 3034 0 obj << /D [3000 0 R /XYZ 95.641 257.274 null] >> endobj 3035 0 obj << /D [3000 0 R /XYZ 95.641 251.247 null] >> endobj 3036 0 obj << /D [3000 0 R /XYZ 95.641 241.284 null] >> endobj 3037 0 obj << /D [3000 0 R /XYZ 181.121 225.544 null] >> endobj 3038 0 obj << /D [3000 0 R /XYZ 200.488 225.544 null] >> endobj 3039 0 obj << /D [3000 0 R /XYZ 205.868 225.544 null] >> endobj 574 0 obj << /D [3000 0 R /XYZ 146.232 204.623 null] >> endobj 3040 0 obj << /D [3000 0 R /XYZ 95.641 199.641 null] >> endobj 3041 0 obj << /D [3000 0 R /XYZ 95.641 194.66 null] >> endobj 3042 0 obj << /D [3000 0 R /XYZ 95.641 160.289 null] >> endobj 3043 0 obj << /D [3000 0 R /XYZ 95.641 155.308 null] >> endobj 3044 0 obj << /D [3000 0 R /XYZ 95.641 145.345 null] >> endobj 3045 0 obj << /D [3000 0 R /XYZ 181.121 130.501 null] >> endobj 3046 0 obj << /D [3000 0 R /XYZ 195.646 130.501 null] >> endobj 3047 0 obj << /D [3000 0 R /XYZ 201.026 130.501 null] >> endobj 578 0 obj << /D [3000 0 R /XYZ 146.232 109.579 null] >> endobj 3048 0 obj << /D [3000 0 R /XYZ 95.641 104.598 null] >> endobj 3049 0 obj << /D [3000 0 R /XYZ 95.641 99.616 null] >> endobj 3050 0 obj << /D [3000 0 R /XYZ 95.641 65.245 null] >> endobj 3051 0 obj << /D [3000 0 R /XYZ 95.641 60.264 null] >> endobj 2999 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R /F26 1177 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3054 0 obj << /Length 569 /Filter /FlateDecode >> stream xÚÅVËnÛ0¼û+x”€jÃå[È©MeÃEâŽÐKRª-?Û2üB‹¢ÿ^êåH–‚øà¤ÐG3³K­Pû ñ%(D3˜’d´ìP2µ;½J8H£Ó­OaçªË}⃯8 '"?:7³h½‹7®Ç$u¸ßÃ/W]aˆ±@•…)y¾íwƒÛþ xÈqUB‰À¥.p_‡÷½áÇ»»þ —3ƒn0 .:7Az¶„G™ ŽÄ;ª=5âqMAÙ•1ðQ ù¬³4ôÓ·æ>Ò}ªÓm®AI¿À¢Å>®@ &€ÑóD%m¦!›0¸ÿ´p0 Ç,^QÉç¨<å§4ž@0‚WeQ%“&«‡ö0“Ä“XÛÛs“LñKëh¯v- }«ßÃ%¡XͦÕä¢qR]™×U2>×5Å3}fóÅø?W8qýD)Ûl ˹¼ {ÞÎ.æ«i“Žs‹âïQlœŠšíUü«ð\Ê»ho£CœõOÓ´m޽iÍ…ª™%ëß¹Ïè´Å·»kœýh·Ï/ÁyÅïÂfËñ!^¼a¿›×úÝjµs¨B.©¬v#ŒƒéßÂrYM)Ç$Ù¤àmS•°ãÍËû¡I€´ª0üøÖz·¸a•t\OQêüi²Õê5J–Ëh5~ÍØß–¨ÑŽAj‹ZË:IÖy¶»YÖWÉ~:k|jŽQV¯'4fW;A²Úè}ñ‡«—æ7­žÿ endstream endobj 3053 0 obj << /Type /Page /Contents 3054 0 R /Resources 3052 0 R /MediaBox [0 0 609.714 789.041] /Parent 2931 0 R >> endobj 3055 0 obj << /D [3053 0 R /XYZ 95.641 729.265 null] >> endobj 3056 0 obj << /D [3053 0 R /XYZ 95.641 716.314 null] >> endobj 3057 0 obj << /D [3053 0 R /XYZ 181.121 706.351 null] >> endobj 3058 0 obj << /D [3053 0 R /XYZ 205.33 706.351 null] >> endobj 3059 0 obj << /D [3053 0 R /XYZ 210.71 706.351 null] >> endobj 582 0 obj << /D [3053 0 R /XYZ 146.232 685.43 null] >> endobj 3060 0 obj << /D [3053 0 R /XYZ 95.641 680.448 null] >> endobj 3061 0 obj << /D [3053 0 R /XYZ 95.641 675.467 null] >> endobj 3062 0 obj << /D [3053 0 R /XYZ 95.641 641.096 null] >> endobj 3063 0 obj << /D [3053 0 R /XYZ 95.641 636.115 null] >> endobj 3064 0 obj << /D [3053 0 R /XYZ 95.641 626.152 null] >> endobj 3065 0 obj << /D [3053 0 R /XYZ 170.361 611.308 null] >> endobj 3066 0 obj << /D [3053 0 R /XYZ 199.412 611.308 null] >> endobj 3067 0 obj << /D [3053 0 R /XYZ 204.792 611.308 null] >> endobj 586 0 obj << /D [3053 0 R /XYZ 146.232 590.386 null] >> endobj 3068 0 obj << /D [3053 0 R /XYZ 95.641 585.405 null] >> endobj 3069 0 obj << /D [3053 0 R /XYZ 95.641 580.423 null] >> endobj 3070 0 obj << /D [3053 0 R /XYZ 95.641 546.052 null] >> endobj 3071 0 obj << /D [3053 0 R /XYZ 95.641 541.071 null] >> endobj 3072 0 obj << /D [3053 0 R /XYZ 95.641 531.108 null] >> endobj 3073 0 obj << /D [3053 0 R /XYZ 170.361 516.264 null] >> endobj 3074 0 obj << /D [3053 0 R /XYZ 194.57 516.264 null] >> endobj 3075 0 obj << /D [3053 0 R /XYZ 199.95 516.264 null] >> endobj 590 0 obj << /D [3053 0 R /XYZ 146.232 495.342 null] >> endobj 3076 0 obj << /D [3053 0 R /XYZ 95.641 490.361 null] >> endobj 3077 0 obj << /D [3053 0 R /XYZ 95.641 485.38 null] >> endobj 3078 0 obj << /D [3053 0 R /XYZ 95.641 451.009 null] >> endobj 3079 0 obj << /D [3053 0 R /XYZ 95.641 446.027 null] >> endobj 3080 0 obj << /D [3053 0 R /XYZ 95.641 436.065 null] >> endobj 3081 0 obj << /D [3053 0 R /XYZ 170.361 421.22 null] >> endobj 3082 0 obj << /D [3053 0 R /XYZ 204.254 421.22 null] >> endobj 3083 0 obj << /D [3053 0 R /XYZ 209.634 421.22 null] >> endobj 594 0 obj << /D [3053 0 R /XYZ 146.232 400.299 null] >> endobj 3084 0 obj << /D [3053 0 R /XYZ 95.641 395.318 null] >> endobj 3085 0 obj << /D [3053 0 R /XYZ 95.641 390.336 null] >> endobj 3086 0 obj << /D [3053 0 R /XYZ 95.641 355.965 null] >> endobj 3087 0 obj << /D [3053 0 R /XYZ 95.641 350.984 null] >> endobj 3088 0 obj << /D [3053 0 R /XYZ 95.641 341.021 null] >> endobj 3089 0 obj << /D [3053 0 R /XYZ 170.361 326.177 null] >> endobj 3090 0 obj << /D [3053 0 R /XYZ 209.096 326.177 null] >> endobj 3091 0 obj << /D [3053 0 R /XYZ 214.476 326.177 null] >> endobj 598 0 obj << /D [3053 0 R /XYZ 146.232 305.255 null] >> endobj 3092 0 obj << /D [3053 0 R /XYZ 95.641 300.274 null] >> endobj 3093 0 obj << /D [3053 0 R /XYZ 95.641 295.293 null] >> endobj 3094 0 obj << /D [3053 0 R /XYZ 95.641 260.922 null] >> endobj 3095 0 obj << /D [3053 0 R /XYZ 95.641 255.94 null] >> endobj 3096 0 obj << /D [3053 0 R /XYZ 95.641 245.978 null] >> endobj 3097 0 obj << /D [3053 0 R /XYZ 164.981 231.133 null] >> endobj 3098 0 obj << /D [3053 0 R /XYZ 189.191 231.133 null] >> endobj 3099 0 obj << /D [3053 0 R /XYZ 194.57 231.133 null] >> endobj 602 0 obj << /D [3053 0 R /XYZ 146.232 210.212 null] >> endobj 3100 0 obj << /D [3053 0 R /XYZ 95.641 205.23 null] >> endobj 3101 0 obj << /D [3053 0 R /XYZ 95.641 200.249 null] >> endobj 3102 0 obj << /D [3053 0 R /XYZ 95.641 165.878 null] >> endobj 3103 0 obj << /D [3053 0 R /XYZ 95.641 155.915 null] >> endobj 3104 0 obj << /D [3053 0 R /XYZ 95.641 155.915 null] >> endobj 3105 0 obj << /D [3053 0 R /XYZ 197.26 146.052 null] >> endobj 3106 0 obj << /D [3053 0 R /XYZ 230.077 146.052 null] >> endobj 3107 0 obj << /D [3053 0 R /XYZ 284.978 146.052 null] >> endobj 606 0 obj << /D [3053 0 R /XYZ 95.641 145.003 null] >> endobj 3108 0 obj << /D [3053 0 R /XYZ 95.641 120.149 null] >> endobj 3109 0 obj << /D [3053 0 R /XYZ 95.641 115.168 null] >> endobj 3110 0 obj << /D [3053 0 R /XYZ 95.641 80.797 null] >> endobj 3052 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R /F27 1179 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3113 0 obj << /Length 1982 /Filter /FlateDecode >> stream xÚÅX_oÜ6 ï§¸Ç S-ùÿòÔ&— C›é¡°ƒkërF}öÁö% †}÷‘"å³ÏN“§ ~0EQ%þDR’3>9‹}xrªX¨ÀŸ¥Û7Îìz®ÞH–‘+¢PÍ\áG! ¼_½y{鯳XÄ;[­Ü*ûc~¾Iv­®OÊwæJœü¹úõí¥Í" PÐó„ï»,ýáúrùáúfù™äú })\?d¹Ow·Wwï>~¼¾¹"ÍwËËåÝòæDÎÏ—8öÍrÕ«\œ"ž-:k—³pCGðWJÄÒë¤ÂƒvAëª.«V7¼¿·’Hx2b±¯ŽïŒë × ÜÜ^,Ç:À§[åéXtDp÷çÕ¬ÿ¯/–xBzò`‰xBŒÁ€ã|{fØïµ^ñ <À‹ÅèÐàXò@¤ä²†ù$Ø- e©ðñƒHôÒ@šxÊbÜ—”Og'Žä%²¨MîÇ6ØïE“qèÈV†B:ñ`SѼ3‰OŽÏUˆ)„æ$G·¨0œ² µž`7#i ìD‡>Þ$$󵵿éD$5¯×:š‚¥«€þì/8 ÷Œ\v:^ä6“hc~<GNºÑ¸/Š3"« ©Ö\ö’``E¤Ù–ÓMä¤ò ¨/È¢Þ?%5­‘éP/Á4â={¤€ØiIï€z]tÊ@ª/mÑ d¹{à2ŠEÛä’nò"›“Š^¶ò+$½Ì&’¶ƒµ„wê9߸Õ@Ï÷z@Xè™sŸ1Ÿ©‰#!A’ðMþ­ÈË‰Ó yFFÁä±̯´DYMÖ, éÔx¥Ñ|^(1Aeé9î`í¿mt©LÙêxhBÓ@ÓñÌI³7á(’*LTfrºƒÙ ­l4µL¾¥<äØu³.‰E@6Š8U’5$ÊMÔ´˜ÈœM9CWD6ùvWØ”<ä÷ˆa}.¹Ó¯Ë€~‡q”fC^Ê+Ÿ¡L³X;ò¼†Åð’0Z)3-üÒj÷D”9Nð'Xaw…M^íw6ûo Í÷)ɺ®§†êC~Ó´9cålá`g7 ž¥0$$ÀÙØ¸h¬NL_+ˆx¯9JüÂf ¶z[ÕODïD°à›ïšÝÞ’Þä¨@ÎNOÙ4lQÐ<5­ÞŠN¤óØj3QTCR•- ˜µ˜ J®õ§­éž ÓVŒ¨.ë×U. ¨c}?ê[}‰W³Ì^Í8 „T6™LˆµVIÿÊ´¤­jj‘w‘š·±ÌÞ¹ ÇÙETWÚz×&QE‡¿®•vE†¼n¹:BFG÷Ñvè¾EGxŒŽÀVrÐss»ZË"#dd+¡f‡ – Шþ†^Óg˜Ó±=‡ërµçú(Ó3^¡1Â0øÀ^ƒäX| ³‡cín‡Vo¶hŒ†£ó[OF‡Z.f/Ûp Ü@AäjB>/ÓbO¡:øÖˆ7Eÿ@2ç·7ç$E'X«g M+óÏš—`µ¿¦ûºw‰ݼ<’ͱfEG€ù`¨`&ñ¥Ì§¤Š£–A­še-HshàJ¢.»‡Ÿ© µÑåAM!ýÞ“gOÔ Í… ®ÞÝ3Z†º§Š7_û"¸ü²¤Øpôð /ê?ÅM<ŸDö_Ï2Z®ÙýñÖzÄ‚ÒÖ©Œ]¡ºûèÅ»Õr¢î D[¸éãGðÎ3°QÂW“Ïàž Ï”ã?{ÑwÃcÝ bv¥§ò_¤«=Þendstream endobj 3112 0 obj << /Type /Page /Contents 3113 0 R /Resources 3111 0 R /MediaBox [0 0 609.714 789.041] /Parent 2931 0 R >> endobj 3114 0 obj << /D [3112 0 R /XYZ 95.641 729.265 null] >> endobj 3115 0 obj << /D [3112 0 R /XYZ 95.641 716.314 null] >> endobj 3116 0 obj << /D [3112 0 R /XYZ 95.641 716.314 null] >> endobj 3117 0 obj << /D [3112 0 R /XYZ 197.26 706.351 null] >> endobj 3118 0 obj << /D [3112 0 R /XYZ 230.077 706.351 null] >> endobj 3119 0 obj << /D [3112 0 R /XYZ 295.738 706.351 null] >> endobj 610 0 obj << /D [3112 0 R /XYZ 95.641 705.302 null] >> endobj 3120 0 obj << /D [3112 0 R /XYZ 95.641 680.448 null] >> endobj 3121 0 obj << /D [3112 0 R /XYZ 95.641 675.467 null] >> endobj 3122 0 obj << /D [3112 0 R /XYZ 95.641 641.096 null] >> endobj 3123 0 obj << /D [3112 0 R /XYZ 95.641 631.133 null] >> endobj 3124 0 obj << /D [3112 0 R /XYZ 95.641 631.133 null] >> endobj 3125 0 obj << /D [3112 0 R /XYZ 197.26 621.27 null] >> endobj 3126 0 obj << /D [3112 0 R /XYZ 230.077 621.27 null] >> endobj 3127 0 obj << /D [3112 0 R /XYZ 274.218 621.27 null] >> endobj 3128 0 obj << /D [3112 0 R /XYZ 323.74 621.27 null] >> endobj 614 0 obj << /D [3112 0 R /XYZ 95.641 620.221 null] >> endobj 3129 0 obj << /D [3112 0 R /XYZ 95.641 595.367 null] >> endobj 3130 0 obj << /D [3112 0 R /XYZ 95.641 590.386 null] >> endobj 3131 0 obj << /D [3112 0 R /XYZ 95.641 537.584 null] >> endobj 3132 0 obj << /D [3112 0 R /XYZ 392.968 526.625 null] >> endobj 3133 0 obj << /D [3112 0 R /XYZ 143.462 515.666 null] >> endobj 3134 0 obj << /D [3112 0 R /XYZ 95.641 499.512 null] >> endobj 3135 0 obj << /D [3112 0 R /XYZ 95.641 499.512 null] >> endobj 3136 0 obj << /D [3112 0 R /XYZ 401.531 488.767 null] >> endobj 3137 0 obj << /D [3112 0 R /XYZ 191.072 477.808 null] >> endobj 3138 0 obj << /D [3112 0 R /XYZ 143.462 466.849 null] >> endobj 3139 0 obj << /D [3112 0 R /XYZ 201.703 466.849 null] >> endobj 3140 0 obj << /D [3112 0 R /XYZ 371.454 466.849 null] >> endobj 3141 0 obj << /D [3112 0 R /XYZ 95.641 460.234 null] >> endobj 3142 0 obj << /D [3112 0 R /XYZ 95.641 460.234 null] >> endobj 3143 0 obj << /D [3112 0 R /XYZ 368.027 450.909 null] >> endobj 3144 0 obj << /D [3112 0 R /XYZ 253.679 439.95 null] >> endobj 3145 0 obj << /D [3112 0 R /XYZ 416.992 428.991 null] >> endobj 3146 0 obj << /D [3112 0 R /XYZ 321.901 418.032 null] >> endobj 3147 0 obj << /D [3112 0 R /XYZ 95.641 410.242 null] >> endobj 3148 0 obj << /D [3112 0 R /XYZ 95.641 410.242 null] >> endobj 3149 0 obj << /D [3112 0 R /XYZ 95.641 372.384 null] >> endobj 3150 0 obj << /D [3112 0 R /XYZ 162.63 364.234 null] >> endobj 3151 0 obj << /D [3112 0 R /XYZ 95.641 359.039 null] >> endobj 3152 0 obj << /D [3112 0 R /XYZ 95.641 359.039 null] >> endobj 3153 0 obj << /D [3112 0 R /XYZ 426.76 348.294 null] >> endobj 3154 0 obj << /D [3112 0 R /XYZ 95.641 318.585 null] >> endobj 3155 0 obj << /D [3112 0 R /XYZ 95.641 318.585 null] >> endobj 3156 0 obj << /D [3112 0 R /XYZ 440.085 310.436 null] >> endobj 3157 0 obj << /D [3112 0 R /XYZ 95.641 272.364 null] >> endobj 3158 0 obj << /D [3112 0 R /XYZ 95.641 272.364 null] >> endobj 3159 0 obj << /D [3112 0 R /XYZ 441.935 261.619 null] >> endobj 1286 0 obj << /D [3112 0 R /XYZ 95.641 220.951 null] >> endobj 618 0 obj << /D [3112 0 R /XYZ 243.673 190.575 null] >> endobj 3160 0 obj << /D [3112 0 R /XYZ 95.641 190.425 null] >> endobj 3161 0 obj << /D [3112 0 R /XYZ 95.641 172.99 null] >> endobj 3162 0 obj << /D [3112 0 R /XYZ 95.641 166.963 null] >> endobj 3163 0 obj << /D [3112 0 R /XYZ 95.641 157 null] >> endobj 3164 0 obj << /D [3112 0 R /XYZ 181.121 141.26 null] >> endobj 3165 0 obj << /D [3112 0 R /XYZ 200.488 141.26 null] >> endobj 3166 0 obj << /D [3112 0 R /XYZ 205.868 141.26 null] >> endobj 622 0 obj << /D [3112 0 R /XYZ 146.232 120.339 null] >> endobj 3167 0 obj << /D [3112 0 R /XYZ 95.641 115.357 null] >> endobj 3168 0 obj << /D [3112 0 R /XYZ 95.641 110.376 null] >> endobj 3169 0 obj << /D [3112 0 R /XYZ 256.656 99.417 null] >> endobj 3170 0 obj << /D [3112 0 R /XYZ 95.641 76.005 null] >> endobj 3171 0 obj << /D [3112 0 R /XYZ 95.641 71.024 null] >> endobj 3172 0 obj << /D [3112 0 R /XYZ 95.641 61.061 null] >> endobj 3111 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F27 1179 0 R /F45 1307 0 R /F35 1187 0 R /F26 1177 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3175 0 obj << /Length 745 /Filter /FlateDecode >> stream xÚÍ–Ïo›0Çïù+¸-‘†ëŸØh§¬%U¦6R”Ë:i4‰† ÜLýïg°!ÈÂ.S•ƒüüüÞÇ_?YPýå2àPdqìì0ký2‚ÖVÜŽ±€Lðbè«?ºš×rëËß”~øc|½ ^e”MlÌàƒÉOÿÛÕŒ K(C§0¤0FŒõÝ|æÝÍÞ£¶k:dÆÝ÷åÃírz?_ÜjÏKoæ-½Å¯½bîÈóë0)€dÙu´§‰Ø„Cà¨cà"Z'DÙ1Î*¡GY¬ªó(Æ!/† sÍk¬£†‰q)À°²y‚ vi0@„1ðVÞÂïqÂøè}1¬Ø‘•Í)Y6E@PÒˆ©„•n>ëÎ!HÞêoº}‚g¹¬#«}º`J+þwÓëî²Ø.­òKâ}©ýFHX6#úY×rqøÿàéèn“g’F—M8¤H±+;¹Ìâý¶ —ØTwÂx+­Ê\ÿ÷ÇÉðˆ©XYáÍÔ÷úÉ»ÈcÈ€àŽ&Ñ`öIªÒøXìÃ@ÙûPwJy7e·Ñ÷£UÜB2m±\׋۬LÃNFÞ·AÊ…ÿ¾Aù.Íä«6çvè¤ÏÏÙ‰qtˆ©Ddl7å×ô¥¯€¨u1kÔÓÈ ! 0¯²ßFR¦aðÞuGà*—#¤C‡çòTWn+O½|ËöForgrü¢½üÔV¡¥îxý–é©{S.J`ÏÖHbõ0¿é¤«&j•æ‘ìwGˆ²"C%±š.;ò«.m¾$ õ€€N×Z'­‚Ë+uè¶„¥»¿c¹3%ô5Ze²¸“*eô+Èóx[óOs›AÏI4DR—+1mÒì%è9wT=3øàÊ8ï;uÈü"^ŽU h×Eµñ¥wstU¿ºšÂ#Æu 'I~új²)W{¬ZUhíwÓÙ×ç_°9ÿx³Ñendstream endobj 3174 0 obj << /Type /Page /Contents 3175 0 R /Resources 3173 0 R /MediaBox [0 0 609.714 789.041] /Parent 2931 0 R >> endobj 3176 0 obj << /D [3174 0 R /XYZ 95.641 729.265 null] >> endobj 3177 0 obj << /D [3174 0 R /XYZ 181.121 706.351 null] >> endobj 3178 0 obj << /D [3174 0 R /XYZ 205.33 706.351 null] >> endobj 3179 0 obj << /D [3174 0 R /XYZ 210.71 706.351 null] >> endobj 626 0 obj << /D [3174 0 R /XYZ 146.232 685.43 null] >> endobj 3180 0 obj << /D [3174 0 R /XYZ 95.641 680.448 null] >> endobj 3181 0 obj << /D [3174 0 R /XYZ 95.641 675.467 null] >> endobj 3182 0 obj << /D [3174 0 R /XYZ 260.631 664.508 null] >> endobj 3183 0 obj << /D [3174 0 R /XYZ 95.641 641.096 null] >> endobj 3184 0 obj << /D [3174 0 R /XYZ 95.641 636.115 null] >> endobj 3185 0 obj << /D [3174 0 R /XYZ 95.641 626.152 null] >> endobj 3186 0 obj << /D [3174 0 R /XYZ 181.121 611.308 null] >> endobj 3187 0 obj << /D [3174 0 R /XYZ 200.488 611.308 null] >> endobj 3188 0 obj << /D [3174 0 R /XYZ 205.868 611.308 null] >> endobj 630 0 obj << /D [3174 0 R /XYZ 146.232 590.386 null] >> endobj 3189 0 obj << /D [3174 0 R /XYZ 95.641 585.405 null] >> endobj 3190 0 obj << /D [3174 0 R /XYZ 95.641 580.423 null] >> endobj 3191 0 obj << /D [3174 0 R /XYZ 322.339 569.465 null] >> endobj 3192 0 obj << /D [3174 0 R /XYZ 95.641 546.052 null] >> endobj 3193 0 obj << /D [3174 0 R /XYZ 95.641 541.071 null] >> endobj 3194 0 obj << /D [3174 0 R /XYZ 95.641 531.108 null] >> endobj 3195 0 obj << /D [3174 0 R /XYZ 181.121 516.264 null] >> endobj 3196 0 obj << /D [3174 0 R /XYZ 200.488 516.264 null] >> endobj 3197 0 obj << /D [3174 0 R /XYZ 205.868 516.264 null] >> endobj 634 0 obj << /D [3174 0 R /XYZ 146.232 495.342 null] >> endobj 3198 0 obj << /D [3174 0 R /XYZ 95.641 490.361 null] >> endobj 3199 0 obj << /D [3174 0 R /XYZ 95.641 485.38 null] >> endobj 3200 0 obj << /D [3174 0 R /XYZ 289.563 474.421 null] >> endobj 3201 0 obj << /D [3174 0 R /XYZ 335.919 474.421 null] >> endobj 3202 0 obj << /D [3174 0 R /XYZ 95.641 451.009 null] >> endobj 3203 0 obj << /D [3174 0 R /XYZ 95.641 446.027 null] >> endobj 3204 0 obj << /D [3174 0 R /XYZ 95.641 436.065 null] >> endobj 3205 0 obj << /D [3174 0 R /XYZ 181.121 421.22 null] >> endobj 3206 0 obj << /D [3174 0 R /XYZ 205.33 421.22 null] >> endobj 3207 0 obj << /D [3174 0 R /XYZ 210.71 421.22 null] >> endobj 638 0 obj << /D [3174 0 R /XYZ 146.232 400.299 null] >> endobj 3208 0 obj << /D [3174 0 R /XYZ 95.641 395.318 null] >> endobj 3209 0 obj << /D [3174 0 R /XYZ 95.641 390.336 null] >> endobj 3210 0 obj << /D [3174 0 R /XYZ 95.641 355.965 null] >> endobj 3211 0 obj << /D [3174 0 R /XYZ 95.641 350.984 null] >> endobj 3212 0 obj << /D [3174 0 R /XYZ 95.641 341.021 null] >> endobj 3213 0 obj << /D [3174 0 R /XYZ 175.741 326.177 null] >> endobj 642 0 obj << /D [3174 0 R /XYZ 146.232 305.255 null] >> endobj 3214 0 obj << /D [3174 0 R /XYZ 95.641 300.274 null] >> endobj 3215 0 obj << /D [3174 0 R /XYZ 95.641 295.293 null] >> endobj 3216 0 obj << /D [3174 0 R /XYZ 95.641 260.922 null] >> endobj 3217 0 obj << /D [3174 0 R /XYZ 95.641 255.94 null] >> endobj 3218 0 obj << /D [3174 0 R /XYZ 95.641 245.978 null] >> endobj 3219 0 obj << /D [3174 0 R /XYZ 170.361 231.133 null] >> endobj 3220 0 obj << /D [3174 0 R /XYZ 204.254 231.133 null] >> endobj 3221 0 obj << /D [3174 0 R /XYZ 209.634 231.133 null] >> endobj 3222 0 obj << /D [3174 0 R /XYZ 225.773 231.133 null] >> endobj 646 0 obj << /D [3174 0 R /XYZ 146.232 210.212 null] >> endobj 3223 0 obj << /D [3174 0 R /XYZ 95.641 205.23 null] >> endobj 3224 0 obj << /D [3174 0 R /XYZ 95.641 200.249 null] >> endobj 3225 0 obj << /D [3174 0 R /XYZ 95.641 165.878 null] >> endobj 3226 0 obj << /D [3174 0 R /XYZ 95.641 160.897 null] >> endobj 3227 0 obj << /D [3174 0 R /XYZ 95.641 150.934 null] >> endobj 3228 0 obj << /D [3174 0 R /XYZ 170.361 136.09 null] >> endobj 3229 0 obj << /D [3174 0 R /XYZ 213.938 136.09 null] >> endobj 3230 0 obj << /D [3174 0 R /XYZ 219.318 136.09 null] >> endobj 650 0 obj << /D [3174 0 R /XYZ 146.232 115.168 null] >> endobj 3231 0 obj << /D [3174 0 R /XYZ 95.641 110.187 null] >> endobj 3232 0 obj << /D [3174 0 R /XYZ 95.641 105.206 null] >> endobj 3233 0 obj << /D [3174 0 R /XYZ 95.641 70.834 null] >> endobj 3234 0 obj << /D [3174 0 R /XYZ 95.641 65.853 null] >> endobj 3173 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3237 0 obj << /Length 556 /Filter /FlateDecode >> stream xÚÍ–KÚ0…÷ü /AjîÄo[]µÓ€¨f˜Š‰fÓv tF"…Tj¥þø^‡WH“VŒT±ˆÁ''÷~9¶¡$Ä%V‚”hf)Iæi/$ßpfÔ£^A £á v‚÷qïfÈ-±`'ñr§‹Ÿû·Ï³M‘䃀ɰÏ`ð5þx3†*'¤ä^}7FwãIôXêŽ %.µ×}š>Œ¦ïîïÇ“Qé<†Ñ4š hÿ6r÷ö¢x_,ãî–ûjÏÛ ¸Aá•1°TìòPgÕÐÓÃøƒïÂ͆ÚM2ÆZ¯H³uñ¼ÌòtV ½äÈÔ ¿„2¬‘ÀŒ'qÝ*ÐŒ,è[K`†çŠ‚‚|'Ý&EÉjW_9ôUVãr°- ü‘ö“òû|¶ZmëuÇ$ \KÑüLfya@Póúh´aÅe4®¾V2‹°°„´#˜$Ÿ5rÁØjÝÆEÛV0¼ …+ñ"¬¯LÎ5Ñ8çÿ93‡Î¯“™¿À²y™×Í8nÍ–weòOÝ&ZwÁ0˜V,(gö2–ù÷m‘¥íˆÊi|ºg§V{‰‰kÌq…©òþGLûe=E“øW-%pÔF‹2Šcs‚ëÐw¶|S^ÖÀ<PÓOÖÅ »«¤gž¥›Uò£ÉRá9(Äë¯+Ë d ù)+lÐÙ †á_> endobj 3238 0 obj << /D [3236 0 R /XYZ 95.641 729.265 null] >> endobj 3239 0 obj << /D [3236 0 R /XYZ 95.641 716.314 null] >> endobj 3240 0 obj << /D [3236 0 R /XYZ 170.361 706.351 null] >> endobj 3241 0 obj << /D [3236 0 R /XYZ 223.621 706.351 null] >> endobj 3242 0 obj << /D [3236 0 R /XYZ 229.001 706.351 null] >> endobj 654 0 obj << /D [3236 0 R /XYZ 146.232 685.43 null] >> endobj 3243 0 obj << /D [3236 0 R /XYZ 95.641 680.448 null] >> endobj 3244 0 obj << /D [3236 0 R /XYZ 95.641 675.467 null] >> endobj 3245 0 obj << /D [3236 0 R /XYZ 95.641 641.096 null] >> endobj 3246 0 obj << /D [3236 0 R /XYZ 95.641 636.115 null] >> endobj 3247 0 obj << /D [3236 0 R /XYZ 95.641 626.152 null] >> endobj 3248 0 obj << /D [3236 0 R /XYZ 170.361 611.308 null] >> endobj 3249 0 obj << /D [3236 0 R /XYZ 218.78 611.308 null] >> endobj 3250 0 obj << /D [3236 0 R /XYZ 224.159 611.308 null] >> endobj 658 0 obj << /D [3236 0 R /XYZ 146.232 590.386 null] >> endobj 3251 0 obj << /D [3236 0 R /XYZ 95.641 585.405 null] >> endobj 3252 0 obj << /D [3236 0 R /XYZ 95.641 580.423 null] >> endobj 3253 0 obj << /D [3236 0 R /XYZ 95.641 546.052 null] >> endobj 3254 0 obj << /D [3236 0 R /XYZ 95.641 541.071 null] >> endobj 3255 0 obj << /D [3236 0 R /XYZ 95.641 531.108 null] >> endobj 3256 0 obj << /D [3236 0 R /XYZ 170.361 516.264 null] >> endobj 3257 0 obj << /D [3236 0 R /XYZ 213.938 516.264 null] >> endobj 3258 0 obj << /D [3236 0 R /XYZ 219.318 516.264 null] >> endobj 662 0 obj << /D [3236 0 R /XYZ 146.232 495.342 null] >> endobj 3259 0 obj << /D [3236 0 R /XYZ 95.641 490.361 null] >> endobj 3260 0 obj << /D [3236 0 R /XYZ 95.641 485.38 null] >> endobj 3261 0 obj << /D [3236 0 R /XYZ 95.641 451.009 null] >> endobj 3262 0 obj << /D [3236 0 R /XYZ 95.641 446.027 null] >> endobj 3263 0 obj << /D [3236 0 R /XYZ 95.641 436.065 null] >> endobj 3264 0 obj << /D [3236 0 R /XYZ 170.361 421.22 null] >> endobj 3265 0 obj << /D [3236 0 R /XYZ 218.78 421.22 null] >> endobj 3266 0 obj << /D [3236 0 R /XYZ 224.159 421.22 null] >> endobj 666 0 obj << /D [3236 0 R /XYZ 146.232 400.299 null] >> endobj 3267 0 obj << /D [3236 0 R /XYZ 95.641 395.318 null] >> endobj 3268 0 obj << /D [3236 0 R /XYZ 95.641 390.336 null] >> endobj 3269 0 obj << /D [3236 0 R /XYZ 95.641 355.965 null] >> endobj 3270 0 obj << /D [3236 0 R /XYZ 95.641 350.984 null] >> endobj 3271 0 obj << /D [3236 0 R /XYZ 95.641 341.021 null] >> endobj 3272 0 obj << /D [3236 0 R /XYZ 170.361 326.177 null] >> endobj 3273 0 obj << /D [3236 0 R /XYZ 204.254 326.177 null] >> endobj 3274 0 obj << /D [3236 0 R /XYZ 209.634 326.177 null] >> endobj 670 0 obj << /D [3236 0 R /XYZ 146.232 305.255 null] >> endobj 3275 0 obj << /D [3236 0 R /XYZ 95.641 300.274 null] >> endobj 3276 0 obj << /D [3236 0 R /XYZ 95.641 295.293 null] >> endobj 3277 0 obj << /D [3236 0 R /XYZ 95.641 260.922 null] >> endobj 3278 0 obj << /D [3236 0 R /XYZ 95.641 255.94 null] >> endobj 3279 0 obj << /D [3236 0 R /XYZ 95.641 245.978 null] >> endobj 3280 0 obj << /D [3236 0 R /XYZ 181.121 231.133 null] >> endobj 3281 0 obj << /D [3236 0 R /XYZ 215.014 231.133 null] >> endobj 3282 0 obj << /D [3236 0 R /XYZ 220.393 231.133 null] >> endobj 674 0 obj << /D [3236 0 R /XYZ 146.232 210.212 null] >> endobj 3283 0 obj << /D [3236 0 R /XYZ 95.641 205.23 null] >> endobj 3284 0 obj << /D [3236 0 R /XYZ 95.641 200.249 null] >> endobj 3285 0 obj << /D [3236 0 R /XYZ 95.641 165.878 null] >> endobj 3286 0 obj << /D [3236 0 R /XYZ 95.641 160.897 null] >> endobj 3287 0 obj << /D [3236 0 R /XYZ 95.641 150.934 null] >> endobj 3288 0 obj << /D [3236 0 R /XYZ 170.361 136.09 null] >> endobj 3289 0 obj << /D [3236 0 R /XYZ 233.305 136.09 null] >> endobj 3290 0 obj << /D [3236 0 R /XYZ 238.685 136.09 null] >> endobj 678 0 obj << /D [3236 0 R /XYZ 146.232 115.168 null] >> endobj 3291 0 obj << /D [3236 0 R /XYZ 95.641 110.187 null] >> endobj 3292 0 obj << /D [3236 0 R /XYZ 95.641 105.206 null] >> endobj 3293 0 obj << /D [3236 0 R /XYZ 95.641 70.834 null] >> endobj 3294 0 obj << /D [3236 0 R /XYZ 95.641 65.853 null] >> endobj 3235 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3298 0 obj << /Length 2560 /Filter /FlateDecode >> stream xÚ½YÝoÛ8ï_á—â á’õ…>åZ·È¡M©±‡ÅÞ=ȶ”+K>INjàþø›á õe9Þ§Cp8¤Èáo†óA«…„?µˆ}µu,tà/6»wrñ#_Þ)ž!žð£‡þ¾z÷Ëg/^Ä"¼Å*³3VÛ?®>>'û6­¯oµ/¯´¸þ÷ê¿|6Ñ"‚‰N4Fø¾Ç³¿Þ^~½Xþ yÃ}%~ÿòx÷íÛýÃZùqùyù¸|¸VW—øí»åªÓ¨HO-n;i§¹õB)hµ±2ÝŒßËéôÛ÷ûO| •!ê@DqÌ36Õn_¤?÷ùf0ÏDQn⿤/Oñ…º÷«Ó5T Bí»9]@Iún…«GédO‹ òzAÔ†Üï!¿UZŠØ ·F‰Èxvn“¶ùæÐ´ÕŽi:2u¶I›µ}ä›öP_«èŠyM[çåÓ©@· öÕþâÖ÷„ž°öBø¬í–'KâJÁ%¬#ž°ümù°úï9¸”ºÀägWF•Ý‘—Àš€)Û)Š&¾Êªz—´p’ê/#µMŽUöš¦Î%\Œðÿ ”§@25êèp¢e –ì÷±j_ç„+U$åÓ!y²ú £E$ÉŽVÏiÃ:Èå¦Í«²¡nú³­“ £Ÿƒ±–„:Ìà ×Õ‡Ûç´7oþ>)·lèE²qL'úŠmÄ)D¤ôEl¬pŸ:Ë"¤½Á'#[dÅÖŠEâ%)LÚ]û1 ØK 'ª›¶Óf·¼‚õeçd>Ý­–3"€—QN‘E^ò>VÐ&ÜÚSÞ0v.«ít25_–Ÿ>~ÿF4jSÙv˺ Á•¸0\ܹ¥‰é Žà¬Uì$<ƒ£A¨;k”ºÜ†ž 'O…–; Rd‚·1‚ Œ Â¥«’—.œ‚xÛ4Ýc¤­<œÀB„"‘ˆÞÌaá¤Â3ÆÅ?´·Sy<)¤¯GfsKÐz~$Bˆâ#h٢˜­&’EÏZTä g‘R`¥ç€øõëÝÇY¨´Ñcs‚5­…D’Ì úˆ™ãƒe±»¿§I=«kOÎß™á Ý)˜ËæEcUMì¬:Ô„›ߨC3Âm›?åö{PÖa·¶É Ðö(aàð {,² ÞÀ¨§Í%³ÓÁÊ~‚2$(?¸}ófFbæ%MsإùÑøÄmE.mN|á51òzÝnþ§½ä¿V.˜(ÓèxV™±æM€xIë5¸ë÷pžbåN=xhx¤KˆCÉSÐ럮‹0 /]/ˆzcQ­â M¸í\*Лªä¬á è‰sÜ€Ó+á£PšžR8oM= N@4é>©!•gÍœõ‘§PyÇ.™s°°Uçß~ ªÀÈ(†ƒ<;wɤðAÛ#“³z3þy½yPæR‹;wxNk^äÎh ‘CÇÕÜ` ‡CœNæ±JK ·Á›™Áa Ïê ¸¤.`¼æí3ß@ Rɱ¯MyAHš"’µŠ.Ë Ò6òG—9\AKܕԎµÄŸQžŠ+åÝwLà%ÿÀŸžYå–#mF„'SäfŒs À(ëÂŒÃ%d^̱—Á¨~òK£p¯o¨›j6q蜜·É³É ¸ â_¦n“ç¤áÊÑaZ}'žWsDz¹¡Û«œAÒØ&ë"½äö¾¤m[aÎ{bpÆ&ò]}C[ô6–°ýpÆ@f—´Ääs —þw¸1"ØPgî‚v|ùF™Áe˜õÖzÙk¤ív63ƒ+¯ä[§¤´CŒÆêá\I*>¹'%œX)Í>Ýäè<¬…ƒ-\’VÝÜ™pà Å—Â/‡0ÜЂt ‘h4Чr*U™¾ÑBÚè:ü¡ÔÂÇ®~t´²—j ghcÛZÑnvûÙÕØplÉA „ÝÄçØ94„–a¡Œ+C-Í•’9/–PƒÂ¤í‘:z±}MŽs凡RöyûqXéŽLdøVr3S C4J`ÚUeû|nA?*ŒÎ/èÛKÃèôήÕYü×IëäÍóõË`„D©á2¶–•݃ÂYÁˆ£Ù&-R[Û²M{,R"«½+€¡“QÆK˜Ë5à„ÊŒ 6lñáåÐeÓ¡­Ú•RV|èmŸ¹kÓÃиQÀ‚)ÊM€¨ ƒKŠÂ-Öò² ”}ñÕ¡{:ú0Jå_Ô¶Ýžõ3~ò8‘äv5JC‰1NB†Ž͘:bQ±ð*ÇÎ>p‹î)p"YtÙIQT¯ÍÀseG 6nšÛ½·!½e¤uIãÎ *‹foÓfâP”…u0.bÈB¹ÞÝp¨Ê烗’L*QÞ4Çá=´&ù&ÜŠÞ-³9ì÷E󃱷kˆGÂàúN~2"‚¼›ŽÙlêDl¤@ ºÖGIv2AD1røµi‹ˆ¥Þoyµ÷»ÉRïi3A½;jʃ5rœgðé°£øâåÍíL‚ÎÝ*Ò=Vál ÐgÕ [¹Iãì÷ÕÌý‘PçuåÈ[÷'”®®ÉYž÷-Š#ïWRë*>ÇÝöÂs𝡖öç̃²-b÷&GG”®XØÑ !»ôx¼‘d4àKA÷ÇW*ã`úMêöÒtJ‡Á¼Ÿ|ª%¨@'­‹Ê‡†>æŒôÎ÷ï¼ý›0‰Üœ‹áÊxŠáH +°;ˆãØå—Ñ|ÆÜº)èÞ‘ØU.Êc¯{gæ9kÇ>Þl­kD¯®±<ý“ßí'ä%æ àd¯’ͦ:à!}Ū²Ü5³H¥ Q1®óÖiƼ$só@çô%jÖ®Åüçäê†8˜sã ÷´ˆ<–|6ÿ*΂pÎwA^sJqK÷Âê§eVÔB%htEÓÔ`”öª!ø xU‰i´²S½6,ɨ¸êTÁÌ3€L¯B# µ·5%Ñg8)ƒ¶uƒ®à3Xè¥E&¨³ê>†…ØÂæ2ˆúÜ^£ £—ÙPýhìCnÂùf`ØE-0qÆOsß ½Mdß,°é¢!ÐÓŸ™×… í5°ß–¼HÇ@¯lµdñé6œÝòx?°·b7±0þŽÓ‰cüˆP@&¢€-06`a[ÆÇäàoB<5ŽQA]mŸS1£-qÿùœ–£/Y˜™B}ŒÜ 0Gš>´ˆ°ó/}p°¥†Y°×ÆH`0õÌ‹CäŠ%ͤuõê~ M’M~Ò¯$"ÈtoÈé}=úQ÷ìOÑFžûeX¿ÿ2D°endstream endobj 3297 0 obj << /Type /Page /Contents 3298 0 R /Resources 3296 0 R /MediaBox [0 0 609.714 789.041] /Parent 3295 0 R >> endobj 3299 0 obj << /D [3297 0 R /XYZ 95.641 729.265 null] >> endobj 3300 0 obj << /D [3297 0 R /XYZ 95.641 716.314 null] >> endobj 3301 0 obj << /D [3297 0 R /XYZ 170.361 706.351 null] >> endobj 3302 0 obj << /D [3297 0 R /XYZ 218.78 706.351 null] >> endobj 3303 0 obj << /D [3297 0 R /XYZ 224.159 706.351 null] >> endobj 3304 0 obj << /D [3297 0 R /XYZ 251.641 706.351 null] >> endobj 682 0 obj << /D [3297 0 R /XYZ 146.232 685.43 null] >> endobj 3305 0 obj << /D [3297 0 R /XYZ 95.641 680.448 null] >> endobj 3306 0 obj << /D [3297 0 R /XYZ 95.641 675.467 null] >> endobj 3307 0 obj << /D [3297 0 R /XYZ 95.641 641.096 null] >> endobj 3308 0 obj << /D [3297 0 R /XYZ 95.641 636.115 null] >> endobj 3309 0 obj << /D [3297 0 R /XYZ 95.641 626.152 null] >> endobj 3310 0 obj << /D [3297 0 R /XYZ 181.121 611.308 null] >> endobj 3311 0 obj << /D [3297 0 R /XYZ 234.381 611.308 null] >> endobj 3312 0 obj << /D [3297 0 R /XYZ 239.761 611.308 null] >> endobj 686 0 obj << /D [3297 0 R /XYZ 146.232 590.386 null] >> endobj 3313 0 obj << /D [3297 0 R /XYZ 95.641 585.405 null] >> endobj 3314 0 obj << /D [3297 0 R /XYZ 95.641 580.423 null] >> endobj 3315 0 obj << /D [3297 0 R /XYZ 95.641 546.052 null] >> endobj 3316 0 obj << /D [3297 0 R /XYZ 95.641 541.071 null] >> endobj 3317 0 obj << /D [3297 0 R /XYZ 95.641 531.108 null] >> endobj 3318 0 obj << /D [3297 0 R /XYZ 181.121 516.264 null] >> endobj 3319 0 obj << /D [3297 0 R /XYZ 224.697 516.264 null] >> endobj 3320 0 obj << /D [3297 0 R /XYZ 230.077 516.264 null] >> endobj 690 0 obj << /D [3297 0 R /XYZ 146.232 495.342 null] >> endobj 3321 0 obj << /D [3297 0 R /XYZ 95.641 490.361 null] >> endobj 3322 0 obj << /D [3297 0 R /XYZ 95.641 485.38 null] >> endobj 3323 0 obj << /D [3297 0 R /XYZ 95.641 432.578 null] >> endobj 3324 0 obj << /D [3297 0 R /XYZ 95.641 413.828 null] >> endobj 3325 0 obj << /D [3297 0 R /XYZ 95.641 413.828 null] >> endobj 3326 0 obj << /D [3297 0 R /XYZ 290.264 405.679 null] >> endobj 3327 0 obj << /D [3297 0 R /XYZ 437.916 405.679 null] >> endobj 3328 0 obj << /D [3297 0 R /XYZ 165.653 394.72 null] >> endobj 3329 0 obj << /D [3297 0 R /XYZ 253.171 394.72 null] >> endobj 3330 0 obj << /D [3297 0 R /XYZ 472.175 394.72 null] >> endobj 3331 0 obj << /D [3297 0 R /XYZ 261.498 383.761 null] >> endobj 3332 0 obj << /D [3297 0 R /XYZ 362.433 383.761 null] >> endobj 3333 0 obj << /D [3297 0 R /XYZ 307.786 372.802 null] >> endobj 3334 0 obj << /D [3297 0 R /XYZ 95.641 354.052 null] >> endobj 3335 0 obj << /D [3297 0 R /XYZ 95.641 354.052 null] >> endobj 3336 0 obj << /D [3297 0 R /XYZ 342.112 345.903 null] >> endobj 3337 0 obj << /D [3297 0 R /XYZ 389.307 345.903 null] >> endobj 3338 0 obj << /D [3297 0 R /XYZ 354.122 334.944 null] >> endobj 3339 0 obj << /D [3297 0 R /XYZ 179.602 323.985 null] >> endobj 3340 0 obj << /D [3297 0 R /XYZ 225.865 323.985 null] >> endobj 3341 0 obj << /D [3297 0 R /XYZ 95.641 283.318 null] >> endobj 3342 0 obj << /D [3297 0 R /XYZ 95.641 283.318 null] >> endobj 3343 0 obj << /D [3297 0 R /XYZ 382.306 275.168 null] >> endobj 3344 0 obj << /D [3297 0 R /XYZ 430.565 275.168 null] >> endobj 3345 0 obj << /D [3297 0 R /XYZ 318.551 264.209 null] >> endobj 3346 0 obj << /D [3297 0 R /XYZ 95.641 245.46 null] >> endobj 3347 0 obj << /D [3297 0 R /XYZ 463.163 237.31 null] >> endobj 3348 0 obj << /D [3297 0 R /XYZ 143.462 226.351 null] >> endobj 3349 0 obj << /D [3297 0 R /XYZ 207.853 226.351 null] >> endobj 3350 0 obj << /D [3297 0 R /XYZ 266.864 226.351 null] >> endobj 3351 0 obj << /D [3297 0 R /XYZ 340.084 226.351 null] >> endobj 3352 0 obj << /D [3297 0 R /XYZ 415.643 215.392 null] >> endobj 3353 0 obj << /D [3297 0 R /XYZ 236.36 204.433 null] >> endobj 3354 0 obj << /D [3297 0 R /XYZ 260.541 193.474 null] >> endobj 3355 0 obj << /D [3297 0 R /XYZ 345.03 171.557 null] >> endobj 3356 0 obj << /D [3297 0 R /XYZ 95.641 141.848 null] >> endobj 3357 0 obj << /D [3297 0 R /XYZ 143.462 111.781 null] >> endobj 3358 0 obj << /D [3297 0 R /XYZ 390.491 100.822 null] >> endobj 3296 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3361 0 obj << /Length 1127 /Filter /FlateDecode >> stream xÚ­XMs£8½çWpÄU±‚$>ÄÞ‡¤25Ély½‡­Ý=ÈFNØÅ†<³™_¿ ’0Æ‚±3)¢y¯ûµZjŒ-~Ø =仨 HˆˆïYëí•c½À“‡+¬,0£ˆÄ¢ÈcAmp»¼º¹§¡¢Ð§ÖrÓØ-ã?íù+Ï+QL¦Äsl‚&/?ÝÜ»Ìb`è׆®‹<*ëÏ÷ÑçÇçè7i×ô0¢^ ì~]|yXÌžžŸ$ò"ºÑóÛó¨~÷*Z¶ÎZS„Ö´õ¶ΔòáJ ±{È; ¨¬Šd÷RêH¼C$@„¡2[gÛ<ÿż*––)ËMVlyUB®gW¯BšaäÚe²MR^¤oÊ";eÆÄG ·ÆfV ßÓþ]K´Õ¾’ƒoIõzä‚kó8Nª$ÛÉélS#‚D¾ƒó­)vPp5˜|Ò ¢–7*ÉkœPé'çK‘Šu%âFLplŠ=º äRCÆü­ÒðÄ¢”Ü—¥€¼ÇòÖ(‹k×*¨…<ÉÑ ñb‚™-~‘aã à¦ÔA¬¢Ú™L)v;ü«ò¶ÌùZ Wh8„ê ’—¤jã+;áSBl ØïKõ Ä­pÎEhkö3)hCAÅ.;ñ=+ú¤€cˆëMUR2ào<‰Í‘ÿ>[Lh`ÿ1ÁÛzþ2=ü!=Îöˆïö¼x;òF€”Ì®§/“(PΤٷ±¥QWÉP‚þi´9?AR 6ÆÞ•£Ù…c3y_‹Í{µßU&‰ºFP“I©ª»xˆîæ_žÎ*(Ã!U lH¹ClùNofàXÕö‚Gd‰¾&‰ÀX1cï3‘`zÔ×Ç.“á€z¼øQã<ãç4·n q°óðaæÎƒ8ޱóîšó©4Pµåé9Sª¹êU‹¸ÉöEg;¼.êQ>Æò‘Œtix)ˆ‚ÿt JaHu€ïiAYˆ˜˜¥Àìîæv®N[^ü+б¼UOÒ6_·hŽTnÔ–’çz›Ïò"Q98›¡;tœ€04VÛ=æ'Þ4ëhØLŒ@³»ž'sSN€(щ,H>(‹j®Í¾Ð:º èDÕý¼2Ò:àMÔW&)ƒÃy×ÿ²ëÔA½õþ ‚¶?U]aÏ\ƒÏOs·sÝgªº.F>¬´Q̯»ÖÝ?¦n€+|6#ÿ:p†\¿.رA\ÜÇ®Mˆ|KCþyÕendstream endobj 3360 0 obj << /Type /Page /Contents 3361 0 R /Resources 3359 0 R /MediaBox [0 0 609.714 789.041] /Parent 3295 0 R >> endobj 3362 0 obj << /D [3360 0 R /XYZ 95.641 729.265 null] >> endobj 3363 0 obj << /D [3360 0 R /XYZ 178.261 706.351 null] >> endobj 3364 0 obj << /D [3360 0 R /XYZ 366.689 706.351 null] >> endobj 3365 0 obj << /D [3360 0 R /XYZ 95.641 687.602 null] >> endobj 3366 0 obj << /D [3360 0 R /XYZ 285.319 679.452 null] >> endobj 3367 0 obj << /D [3360 0 R /XYZ 95.641 676.643 null] >> endobj 3368 0 obj << /D [3360 0 R /XYZ 95.641 661.699 null] >> endobj 3369 0 obj << /D [3360 0 R /XYZ 95.641 661.699 null] >> endobj 3370 0 obj << /D [3360 0 R /XYZ 95.641 605.769 null] >> endobj 3371 0 obj << /D [3360 0 R /XYZ 297.792 594.81 null] >> endobj 3372 0 obj << /D [3360 0 R /XYZ 95.641 592 null] >> endobj 3373 0 obj << /D [3360 0 R /XYZ 95.641 577.056 null] >> endobj 3374 0 obj << /D [3360 0 R /XYZ 95.641 577.056 null] >> endobj 3375 0 obj << /D [3360 0 R /XYZ 95.641 383.225 null] >> endobj 3376 0 obj << /D [3360 0 R /XYZ 287.939 372.266 null] >> endobj 3377 0 obj << /D [3360 0 R /XYZ 95.641 369.456 null] >> endobj 3378 0 obj << /D [3360 0 R /XYZ 95.641 354.512 null] >> endobj 3379 0 obj << /D [3360 0 R /XYZ 95.641 354.512 null] >> endobj 3380 0 obj << /D [3360 0 R /XYZ 95.641 298.583 null] >> endobj 3381 0 obj << /D [3360 0 R /XYZ 282.4 287.624 null] >> endobj 3382 0 obj << /D [3360 0 R /XYZ 95.641 284.814 null] >> endobj 3383 0 obj << /D [3360 0 R /XYZ 95.641 269.87 null] >> endobj 3384 0 obj << /D [3360 0 R /XYZ 95.641 269.87 null] >> endobj 3385 0 obj << /D [3360 0 R /XYZ 95.641 122.006 null] >> endobj 3386 0 obj << /D [3360 0 R /XYZ 282.2 111.047 null] >> endobj 3387 0 obj << /D [3360 0 R /XYZ 95.641 108.238 null] >> endobj 3388 0 obj << /D [3360 0 R /XYZ 95.641 93.294 null] >> endobj 3389 0 obj << /D [3360 0 R /XYZ 95.641 93.294 null] >> endobj 3359 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F35 1187 0 R /F45 1307 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3392 0 obj << /Length 1012 /Filter /FlateDecode >> stream xÚ•VKo£H¾çW ÑŒD¤Ðî'4{ódí(£I²ÊzN»{ÀÐŽÑbc÷×oõ0ŽùÐî꯾zuUC< ?âÅ…œx …—n®°÷'wWÄ!°Ç‘>úº¸šÌYìÅ(™·XÄ"ûË¿]'»Zí¯*°OÑõ?‹o“9—ž`¨œ#!˜C¿ŸÏ¾ß?Îþ´¸.¡ ˆ‰Èáþx~º{ž><Ü?ÞYæçÙ|ö<{¼&þíLë^Í­›œHÄñ‚ÖÛa ‹0 õ*å€Äy@ô:` ,nÊI–LN{m Ž"£Ì@˜ƒÀ9 j ¼e ²$e-K¨Q–°eÉ’Qލ娔£ ÒN®B›Ò®Y2Ž[ðÄD?b`З–H?0ñPÒâ´ócLô“qéo,ðI%nWn‹Ó5!Ä¿qûM^×Pþ|ûbIQØ?ª¨è’1/˜³a*eá£y$ܵÓÊ"ó­]ïf¿ß>=tMP†bbk †ý´Üì õSo˜«xUî7I]ÙM¥ •Ö*³ åÉJk °]#~u ‘ 1ÌÝtä–̵NçêFQÖ`“mfyUÇÒ™!ŒüÆí3ö€ýE!aÅ"¶VLùÕo&#LB놖ñØfþ¡Ì „Sù³Ÿ‰¦7РÁvªÔ´8ìJ»\Zú×<©ór«ÓÇ㶇ÝN™ó4ÑŒD¡?ýº°‡Ä.ߦn$aLßèÏ÷Ú¬ójgìqB¹?]Öï´×oöÖ^/ˆÌÊV¸à͵>–æ8G!"|úñ±áÍ6ˆÖž1avŒ…8d^yøX€ÑZ”Ç^Ñ*õ‡”C›Ò‹1 jkïŠqØë¢Ûëf´ÔN\Õ{;ÀØ.OëƒßM“z8kiâr°tŠå«Úïó,SN~Ìëu£42¨ŒPFýÞƒç­+BDeÜ †nË éax3õùtP0h_ éÏÃ+9ÒÉö`W¶_ ³„IÖËö—ÑQíTUÕS¥å0÷š[;Pg½W;MŠžzĵ(=õû3h©V=Ï9×"·zÃ~3O’U×}Ž­¨ù>5-ZÓUÓAÛÆcªkÁÀÀUsMÆp—§ÀjßuŒK¢%@YnÞ«éêºì*3u%—³k“vit@0¶ãsz¸Ïý.ìµ!‡ÖÞ¦ö¢ê|!•+Hοv›WvMô"ücr²{K ò4U•ÃÔ £~ý‹.LþŸỄßP[–m²Q7V¦^ÜŸO‹õa_äÓM› ýNJ㬾:¶HvyÉ_›òéÁ†ß²¤°†ð‡ÀÝùš½ø Îé¥ObÜÕÿ;Áí±endstream endobj 3391 0 obj << /Type /Page /Contents 3392 0 R /Resources 3390 0 R /MediaBox [0 0 609.714 789.041] /Parent 3295 0 R >> endobj 3393 0 obj << /D [3391 0 R /XYZ 95.641 729.265 null] >> endobj 3394 0 obj << /D [3391 0 R /XYZ 95.641 497.197 null] >> endobj 3395 0 obj << /D [3391 0 R /XYZ 326.766 486.238 null] >> endobj 3396 0 obj << /D [3391 0 R /XYZ 454.894 486.238 null] >> endobj 3397 0 obj << /D [3391 0 R /XYZ 95.641 475.065 null] >> endobj 3398 0 obj << /D [3391 0 R /XYZ 95.641 460.121 null] >> endobj 3399 0 obj << /D [3391 0 R /XYZ 95.641 460.121 null] >> endobj 3400 0 obj << /D [3391 0 R /XYZ 95.641 342.901 null] >> endobj 3401 0 obj << /D [3391 0 R /XYZ 431.229 331.943 null] >> endobj 3402 0 obj << /D [3391 0 R /XYZ 95.641 329.133 null] >> endobj 3403 0 obj << /D [3391 0 R /XYZ 95.641 314.189 null] >> endobj 3404 0 obj << /D [3391 0 R /XYZ 95.641 314.189 null] >> endobj 3405 0 obj << /D [3391 0 R /XYZ 95.641 151.002 null] >> endobj 1287 0 obj << /D [3391 0 R /XYZ 95.641 121.294 null] >> endobj 3390 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F35 1187 0 R /F45 1307 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3408 0 obj << /Length 1103 /Filter /FlateDecode >> stream xÚµWmo›Hþž_Ú/¶d6ì,º/õÙ8ç*µO—/×Ó‰`l“³!2Ð\¤ûñ7Ë,ø§M¥V­äevöÙ™çfµøG-_WPËc>a®´âÝ•c­açæŠª8Q³8‘ÊÓ¿†W×î[>ñ]n…«Ú/\þÙm¢§2Ù÷m&#ý¿Âס,Ž®v‚HÉ÷ítÜNgÁúJJ¸ôŒßï‹ùÍbøéÓtvƒÈ‹`,‚YŸöF>{„m°Œë+|Ën£=OÇTÁaÁñ©h3b®Eq¤ß§ëÔ êÌláQvíPøFÊ6ŽƒË?Bo‹ aC6uˆë‹§$N?;K–Xuœ l ™2iÙ’v ìëâ<.Ùe´ïç¼ ŒóˆPßRÅó uNEåÙ—d_B¶Œ· 1& s ¹.UxhÑNeŽ¿(¡ÞÕ1GqYEÛíË©Oò%ÉJt*Ê}_õªX£Vû>U=súÞô.ª‡¼ÞY¦™aêL}g-¡Þ:¨ÀˆrP‡p“ J·ª²¸Ló¬ÀG.6Ëå².¡5>榿Àõåòh7°äj¬:¬|w(Š‚t5бJâCó뼌Ç2pŸxÒ5RÅÈ¿¾‡Bdú‡6Ô‚!Íj*Á¡¡UÖúÕ@÷—b€¦çMoÐk3\—›$C‡‡ÄÀ-«¢¬Ë\[_ÐZ¤pf÷´Eîm)* êx£¶i$cZiÝ)t9Q‚Ê.½Ç”‡@—ë0ð9.ÚÄ¥I\øG=Dñ?¸2ŒI$Ó¨ELÁ0èå.;‘écSóàGÛ$[Fæ–Ô`WEÓ €<Ú[åmõ‚IàÏ|â‚JÅæþÌ»ÁkhU—oŠV0äž#¬}¬¬¶˜ê ‡ºõ1×¼+œÉ^ÄìÑhz)Û’àÎá½›qô”$ýÎ&kã÷îÃû1d#pôZï?¼3½ž¢&c “å%ZÑh¿ÒF¡¶ÎyhµÌ³ºQ´&R7Ý}Qu݃ÒÇGÇþ'za€OBlºFW6ó’ž b»™­\êzuÀ÷}WwˆÊLæà_ly†Ï“¶•¼ePßϧãÎ(`.4ùf$ˆyè™â¾uÌæãàÂ0ÐÉ6_;ƒ.Hå5WLgáß÷ p‡ýtéÆkc9JÏ=™k†âN'xË0³€Y´K.Ô„„Â:úgKx;½»H|Xpõ#øuðª†Tê©oj¨)?ÿD‡æãJŸHvñó\8ðuîê4¿ö—†àç¨Ú…á©òaÇ2¢endstream endobj 3407 0 obj << /Type /Page /Contents 3408 0 R /Resources 3406 0 R /MediaBox [0 0 609.714 789.041] /Parent 3295 0 R >> endobj 3409 0 obj << /D [3407 0 R /XYZ 95.641 729.265 null] >> endobj 694 0 obj << /D [3407 0 R /XYZ 184.725 706.351 null] >> endobj 3410 0 obj << /D [3407 0 R /XYZ 95.641 706.201 null] >> endobj 3411 0 obj << /D [3407 0 R /XYZ 95.641 688.766 null] >> endobj 3412 0 obj << /D [3407 0 R /XYZ 95.641 682.739 null] >> endobj 3413 0 obj << /D [3407 0 R /XYZ 95.641 672.776 null] >> endobj 3414 0 obj << /D [3407 0 R /XYZ 175.741 657.036 null] >> endobj 3415 0 obj << /D [3407 0 R /XYZ 209.634 657.036 null] >> endobj 3416 0 obj << /D [3407 0 R /XYZ 215.014 657.036 null] >> endobj 698 0 obj << /D [3407 0 R /XYZ 146.232 636.115 null] >> endobj 3417 0 obj << /D [3407 0 R /XYZ 95.641 631.133 null] >> endobj 3418 0 obj << /D [3407 0 R /XYZ 95.641 626.152 null] >> endobj 3419 0 obj << /D [3407 0 R /XYZ 95.641 580.822 null] >> endobj 3420 0 obj << /D [3407 0 R /XYZ 95.641 575.841 null] >> endobj 3421 0 obj << /D [3407 0 R /XYZ 95.641 565.878 null] >> endobj 3422 0 obj << /D [3407 0 R /XYZ 175.741 551.034 null] >> endobj 3423 0 obj << /D [3407 0 R /XYZ 209.634 551.034 null] >> endobj 3424 0 obj << /D [3407 0 R /XYZ 215.014 551.034 null] >> endobj 702 0 obj << /D [3407 0 R /XYZ 146.232 530.112 null] >> endobj 3425 0 obj << /D [3407 0 R /XYZ 95.641 525.131 null] >> endobj 3426 0 obj << /D [3407 0 R /XYZ 95.641 520.149 null] >> endobj 3427 0 obj << /D [3407 0 R /XYZ 95.641 456.389 null] >> endobj 3428 0 obj << /D [3407 0 R /XYZ 95.641 437.639 null] >> endobj 3429 0 obj << /D [3407 0 R /XYZ 95.641 437.639 null] >> endobj 3430 0 obj << /D [3407 0 R /XYZ 227.874 418.531 null] >> endobj 3431 0 obj << /D [3407 0 R /XYZ 95.641 410.74 null] >> endobj 3432 0 obj << /D [3407 0 R /XYZ 95.641 394.8 null] >> endobj 1288 0 obj << /D [3407 0 R /XYZ 95.641 367.9 null] >> endobj 706 0 obj << /D [3407 0 R /XYZ 250.327 337.524 null] >> endobj 3433 0 obj << /D [3407 0 R /XYZ 95.641 337.374 null] >> endobj 3434 0 obj << /D [3407 0 R /XYZ 95.641 319.939 null] >> endobj 3435 0 obj << /D [3407 0 R /XYZ 95.641 313.912 null] >> endobj 3436 0 obj << /D [3407 0 R /XYZ 95.641 303.949 null] >> endobj 3437 0 obj << /D [3407 0 R /XYZ 170.361 288.209 null] >> endobj 3438 0 obj << /D [3407 0 R /XYZ 223.621 288.209 null] >> endobj 3439 0 obj << /D [3407 0 R /XYZ 229.001 288.209 null] >> endobj 3440 0 obj << /D [3407 0 R /XYZ 261.818 288.209 null] >> endobj 3441 0 obj << /D [3407 0 R /XYZ 300.58 288.209 null] >> endobj 3442 0 obj << /D [3407 0 R /XYZ 339.341 288.209 null] >> endobj 710 0 obj << /D [3407 0 R /XYZ 146.232 267.288 null] >> endobj 3443 0 obj << /D [3407 0 R /XYZ 95.641 262.306 null] >> endobj 3444 0 obj << /D [3407 0 R /XYZ 95.641 257.325 null] >> endobj 3445 0 obj << /D [3407 0 R /XYZ 95.641 222.954 null] >> endobj 3446 0 obj << /D [3407 0 R /XYZ 95.641 217.973 null] >> endobj 3447 0 obj << /D [3407 0 R /XYZ 95.641 208.01 null] >> endobj 3448 0 obj << /D [3407 0 R /XYZ 170.361 193.166 null] >> endobj 3449 0 obj << /D [3407 0 R /XYZ 228.463 193.166 null] >> endobj 3450 0 obj << /D [3407 0 R /XYZ 233.843 193.166 null] >> endobj 3451 0 obj << /D [3407 0 R /XYZ 266.66 193.166 null] >> endobj 3452 0 obj << /D [3407 0 R /XYZ 310.801 193.166 null] >> endobj 3453 0 obj << /D [3407 0 R /XYZ 349.563 193.166 null] >> endobj 714 0 obj << /D [3407 0 R /XYZ 146.232 172.244 null] >> endobj 3454 0 obj << /D [3407 0 R /XYZ 95.641 167.263 null] >> endobj 3455 0 obj << /D [3407 0 R /XYZ 95.641 162.281 null] >> endobj 3456 0 obj << /D [3407 0 R /XYZ 95.641 127.91 null] >> endobj 3457 0 obj << /D [3407 0 R /XYZ 95.641 122.929 null] >> endobj 3458 0 obj << /D [3407 0 R /XYZ 95.641 112.966 null] >> endobj 3406 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F26 1177 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3461 0 obj << /Length 2325 /Filter /FlateDecode >> stream xÚÍÛnÛ:ò½_áG¨YФnÈSNëY´i‘}Ù³8Pb%Ž-–œžî×ï gHQ–œËY`±ðÉÑp87Î…Žf~Ñ,Eb¢Yªr¡’xv»{#g÷ðåÓ›ˆ1äL‹8KñÓo«7ï>ê|–‹<ѳÕÅX­ÿ9¿)ºr¶P±œ+qö¯Õ?Þ}4Ù,Äq¬ûóåÇåçË«åw ƑÐqÊxß®¿~º¾øòåòêQ¾^~\^/¯Î¢ùû%î}³\y6M” ££ÙÂs{,ÈB§R$0*%òÈxLÜóéúñõòK_eŠU"²c)ϱêu&èš?Ëú¿6Á÷Õ5úÙXJ$Ï)ðn„gøx‘,§ ©´-qʧô=0¡Œ^gÄuÑ•m·Ÿ°b*Ò,y©\\ÿ6¡»H$É u÷ýB þ}Éÿ“Oz‘~΋R#rmN{œfwû³(›7;ZTõ=R J‰LrT8ËÕ¼Øpobɪ©i}w¨íª¥¥¥\kZu»+ž?ZѼ¥esGßoË}WTLi[Õ%S)êuH®;ìkÚØm€HÓ†Ty PA $È E* ä/×,w³ß‰±zqO ‘ËnYö·c¬ä$kEÃ{„çÇ™×nÖsóPÓù5PNö´,jB*˺£iݬ™J³÷ÎâWQ &vŽðábµ³¨R!3Ç"’Doµa¿CPÛ·Ù[Ë<8(í¡Ø»’Š‹ÜÌw‡¶£Ù RȵÍ+°Dâç4­îx´Ú€IWÜ3¤‹¥Ps¤êi1 |‘™¿7DÔŠÖ5‘·£34(xM@óáÖGöd˜‚²ÏÇ"Ë*è6Ȭcå„Ô±¶B"È ‰+¤…0 nàünB`¬”¢WÉ‹d-ÓH—ä O Á½°ƒ}©J4Äxó4G<"ÇÞM"ÞÔ%»d-0b¨¶-xòÐŒ_Ù6?iJìðËåý”´³@vQD\¢â[¿ƒÈ€‰‰1)¤Ó† >ê±ØWÅͶlÒãðàôu*¹ŽEÛV÷5{ˆĨ»ò¯.Ø‘pŠÑL§ºG ­“¢»þ:?"Õ"ýÛ¦^Ožìn(r¤TsÃ8ˆÂ)Jø. ‚­Üþ»æ°#ÙùQèŠÏBAC϶eã4ÛÐëÛ8A¶íHnƒ6Öå_4Åæ³íŠ}Ge@ ÞìbÄ‹»#-ô 6ðãÂGŠókÜaI)båJÒwcOÎDâãí¦°ܳ,îrE÷ÎE2s9Ó‚ \àëAØzœlX¹ëWóÚG Dé£\°‰"‡=Àvó˜y{-1d²ÚtäÎa,Ö¾lF$‹‘óQ8î|èf[!г.·Õ®ò{lÉIí¾uá¹è¦¾okÊg<^ p7öøC[¶Ãªî†óÿd°{Ç©ê‡Cçÿ;À7mäž¾¸½Î²Gÿ/ ËŒIœCÁ=ø×øäÝÆœúëY†ûÿw7endstream endobj 3460 0 obj << /Type /Page /Contents 3461 0 R /Resources 3459 0 R /MediaBox [0 0 609.714 789.041] /Parent 3295 0 R >> endobj 3462 0 obj << /D [3460 0 R /XYZ 95.641 729.265 null] >> endobj 3463 0 obj << /D [3460 0 R /XYZ 170.361 706.351 null] >> endobj 3464 0 obj << /D [3460 0 R /XYZ 233.305 706.351 null] >> endobj 3465 0 obj << /D [3460 0 R /XYZ 238.685 706.351 null] >> endobj 3466 0 obj << /D [3460 0 R /XYZ 271.502 706.351 null] >> endobj 3467 0 obj << /D [3460 0 R /XYZ 315.643 706.351 null] >> endobj 718 0 obj << /D [3460 0 R /XYZ 146.232 685.43 null] >> endobj 3468 0 obj << /D [3460 0 R /XYZ 95.641 680.448 null] >> endobj 3469 0 obj << /D [3460 0 R /XYZ 95.641 675.467 null] >> endobj 3470 0 obj << /D [3460 0 R /XYZ 95.641 641.096 null] >> endobj 3471 0 obj << /D [3460 0 R /XYZ 95.641 636.115 null] >> endobj 3472 0 obj << /D [3460 0 R /XYZ 95.641 626.152 null] >> endobj 3473 0 obj << /D [3460 0 R /XYZ 170.361 611.308 null] >> endobj 3474 0 obj << /D [3460 0 R /XYZ 233.305 611.308 null] >> endobj 3475 0 obj << /D [3460 0 R /XYZ 238.685 611.308 null] >> endobj 3476 0 obj << /D [3460 0 R /XYZ 282.127 611.308 null] >> endobj 3477 0 obj << /D [3460 0 R /XYZ 326.268 611.308 null] >> endobj 3478 0 obj << /D [3460 0 R /XYZ 365.03 611.308 null] >> endobj 722 0 obj << /D [3460 0 R /XYZ 146.232 590.386 null] >> endobj 3479 0 obj << /D [3460 0 R /XYZ 95.641 585.405 null] >> endobj 3480 0 obj << /D [3460 0 R /XYZ 95.641 580.423 null] >> endobj 3481 0 obj << /D [3460 0 R /XYZ 95.641 546.052 null] >> endobj 3482 0 obj << /D [3460 0 R /XYZ 95.641 541.071 null] >> endobj 3483 0 obj << /D [3460 0 R /XYZ 95.641 531.108 null] >> endobj 3484 0 obj << /D [3460 0 R /XYZ 170.361 516.264 null] >> endobj 3485 0 obj << /D [3460 0 R /XYZ 238.147 516.264 null] >> endobj 3486 0 obj << /D [3460 0 R /XYZ 243.527 516.264 null] >> endobj 3487 0 obj << /D [3460 0 R /XYZ 275.949 516.264 null] >> endobj 3488 0 obj << /D [3460 0 R /XYZ 308.371 516.264 null] >> endobj 3489 0 obj << /D [3460 0 R /XYZ 340.794 516.264 null] >> endobj 3490 0 obj << /D [3460 0 R /XYZ 373.216 516.264 null] >> endobj 3491 0 obj << /D [3460 0 R /XYZ 405.638 516.264 null] >> endobj 726 0 obj << /D [3460 0 R /XYZ 146.232 495.342 null] >> endobj 3492 0 obj << /D [3460 0 R /XYZ 95.641 490.361 null] >> endobj 3493 0 obj << /D [3460 0 R /XYZ 95.641 485.38 null] >> endobj 3494 0 obj << /D [3460 0 R /XYZ 95.641 432.578 null] >> endobj 3495 0 obj << /D [3460 0 R /XYZ 95.641 405.465 null] >> endobj 3496 0 obj << /D [3460 0 R /XYZ 95.641 405.465 null] >> endobj 3497 0 obj << /D [3460 0 R /XYZ 423.146 394.72 null] >> endobj 3498 0 obj << /D [3460 0 R /XYZ 314.834 383.761 null] >> endobj 3499 0 obj << /D [3460 0 R /XYZ 261.872 372.802 null] >> endobj 3500 0 obj << /D [3460 0 R /XYZ 450.164 372.802 null] >> endobj 3501 0 obj << /D [3460 0 R /XYZ 95.641 321.176 null] >> endobj 3502 0 obj << /D [3460 0 R /XYZ 95.641 321.176 null] >> endobj 3503 0 obj << /D [3460 0 R /XYZ 363.995 313.026 null] >> endobj 3504 0 obj << /D [3460 0 R /XYZ 177.056 302.067 null] >> endobj 3505 0 obj << /D [3460 0 R /XYZ 223.144 302.067 null] >> endobj 3506 0 obj << /D [3460 0 R /XYZ 312.35 302.067 null] >> endobj 3507 0 obj << /D [3460 0 R /XYZ 291.497 291.108 null] >> endobj 3508 0 obj << /D [3460 0 R /XYZ 220.028 280.149 null] >> endobj 3509 0 obj << /D [3460 0 R /XYZ 443.984 247.273 null] >> endobj 3510 0 obj << /D [3460 0 R /XYZ 95.641 220.159 null] >> endobj 3511 0 obj << /D [3460 0 R /XYZ 95.641 220.159 null] >> endobj 3512 0 obj << /D [3460 0 R /XYZ 363.283 209.415 null] >> endobj 3513 0 obj << /D [3460 0 R /XYZ 216.664 198.456 null] >> endobj 3514 0 obj << /D [3460 0 R /XYZ 160.359 187.497 null] >> endobj 3515 0 obj << /D [3460 0 R /XYZ 338.152 187.497 null] >> endobj 3516 0 obj << /D [3460 0 R /XYZ 490.162 154.62 null] >> endobj 3517 0 obj << /D [3460 0 R /XYZ 95.641 124.912 null] >> endobj 3518 0 obj << /D [3460 0 R /XYZ 95.641 124.912 null] >> endobj 3519 0 obj << /D [3460 0 R /XYZ 143.462 72.927 null] >> endobj 3459 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3522 0 obj << /Length 891 /Filter /FlateDecode >> stream xÚÅVM›H½Ï¯àˆ¥Ð¡¿ènÍ)öˆUÆY9Þ\6«1miŒ#À£Ÿ*ºÁxÌŒ3»ÊF>ÅãÕ«×Uí¦A ?IAÅ a‰ V»«8ØÀ››+êTs¢ 8‘Z!àíòêõŒ›À“ð`¹nqËüÏðÝ6ûÖØj1‡ŒLþZþöz&t ˜ P"%÷èélú!O?9ÜPRÂ¥ò¸ßoonoÓùc^LgÓÅt>¡á»)~{5]öbÇ&ˆzµË‰¸ŠIWƈ¡¢/Hȣή ûOSe«&Ï[7•×):•!TˆSp=‰¸!~ãîî³»ƒõÑu5¡:ÜïÜSæ.G£zbÊ9áTzæOË–ž'êÒG–6îZøŒEÙØ2·¹Ï¿¯ŽáªÌ(ŃˆÆÄ€{Èwo«âK³UÖûgá~í®®8¼óE÷ˆÕ>·ÄÝ.·-†‡P³ í.+ʢܸÃúÝ{DÖÚ²9ìl Q´ðõ‰î³ªÈ¾ÞÙzÀŽÚãѵ]íK¬Upç€`aV×Ŧ´>Ú * £lVŒ¶käâXãÈA ]•Gž=\?bk¶E«öbîsͽ¦T'„)í̆P›oìQ¾ßíËf{í^ee~Ö°Ò‡ªÙº ªiQ½Dô¼ÏªÕ­Z÷LáP <>XX.Õ73KÊH,%öi$Ñ GOš¨–çÚeÔaŠ­Ø÷f‡²}ªý\ ³#¦$úü1}?Æ q,!Ú?Ûe^œ³ÁiÓmG_bŸïX’píéü}ú÷çQ®™½:§ó”4#£|BÂH¢Rèõù¸G”q¨˧D îº'·eS¬Ü*|³UíF1†•r›Ía³u4rÝmÏí°ÎVö\KD!%“A$9a1}™ËµmF–MAÍ%£UoÒt9f4ƒ¼ñ£“ñ™]òPŒ&ÏøŒU¶7nG쌯O¿æÿTç×ÙnÄ/H´½gon/šþ”a‰!„=íè+îžêËŒz©;/éÊæ¿z“ÎqCÂ^ª…91xÓµàqû7·w\þ ­×Œþ½½Î›1‡áÀHý?†µ4Z; %ú“ËóC£a#wÏ¥ý_`" ‘lôd*bØ&´ö¹C¶¹ÂÜWåw`6ùgendstream endobj 3521 0 obj << /Type /Page /Contents 3522 0 R /Resources 3520 0 R /MediaBox [0 0 609.714 789.041] /Parent 3579 0 R >> endobj 3523 0 obj << /D [3521 0 R /XYZ 95.641 729.265 null] >> endobj 3524 0 obj << /D [3521 0 R /XYZ 95.641 716.314 null] >> endobj 3525 0 obj << /D [3521 0 R /XYZ 95.641 716.314 null] >> endobj 3526 0 obj << /D [3521 0 R /XYZ 355.921 706.351 null] >> endobj 1289 0 obj << /D [3521 0 R /XYZ 95.641 654.725 null] >> endobj 730 0 obj << /D [3521 0 R /XYZ 248.362 624.349 null] >> endobj 3527 0 obj << /D [3521 0 R /XYZ 95.641 624.198 null] >> endobj 3528 0 obj << /D [3521 0 R /XYZ 95.641 606.763 null] >> endobj 3529 0 obj << /D [3521 0 R /XYZ 95.641 600.736 null] >> endobj 3530 0 obj << /D [3521 0 R /XYZ 95.641 590.773 null] >> endobj 3531 0 obj << /D [3521 0 R /XYZ 170.361 575.034 null] >> endobj 3532 0 obj << /D [3521 0 R /XYZ 204.254 575.034 null] >> endobj 3533 0 obj << /D [3521 0 R /XYZ 209.634 575.034 null] >> endobj 3534 0 obj << /D [3521 0 R /XYZ 253.775 575.034 null] >> endobj 3535 0 obj << /D [3521 0 R /XYZ 253.775 575.034 null] >> endobj 734 0 obj << /D [3521 0 R /XYZ 146.232 554.112 null] >> endobj 3536 0 obj << /D [3521 0 R /XYZ 95.641 549.131 null] >> endobj 3537 0 obj << /D [3521 0 R /XYZ 95.641 544.149 null] >> endobj 3538 0 obj << /D [3521 0 R /XYZ 95.641 509.778 null] >> endobj 3539 0 obj << /D [3521 0 R /XYZ 95.641 504.797 null] >> endobj 3540 0 obj << /D [3521 0 R /XYZ 95.641 494.834 null] >> endobj 3541 0 obj << /D [3521 0 R /XYZ 170.361 479.99 null] >> endobj 3542 0 obj << /D [3521 0 R /XYZ 218.78 479.99 null] >> endobj 3543 0 obj << /D [3521 0 R /XYZ 224.159 479.99 null] >> endobj 3544 0 obj << /D [3521 0 R /XYZ 262.921 479.99 null] >> endobj 3545 0 obj << /D [3521 0 R /XYZ 262.921 479.99 null] >> endobj 738 0 obj << /D [3521 0 R /XYZ 146.232 459.069 null] >> endobj 3546 0 obj << /D [3521 0 R /XYZ 95.641 454.087 null] >> endobj 3547 0 obj << /D [3521 0 R /XYZ 95.641 449.106 null] >> endobj 3548 0 obj << /D [3521 0 R /XYZ 95.641 414.735 null] >> endobj 3549 0 obj << /D [3521 0 R /XYZ 95.641 409.753 null] >> endobj 3550 0 obj << /D [3521 0 R /XYZ 95.641 399.791 null] >> endobj 3551 0 obj << /D [3521 0 R /XYZ 170.361 384.946 null] >> endobj 3552 0 obj << /D [3521 0 R /XYZ 199.412 384.946 null] >> endobj 3553 0 obj << /D [3521 0 R /XYZ 204.792 384.946 null] >> endobj 742 0 obj << /D [3521 0 R /XYZ 146.232 364.025 null] >> endobj 3554 0 obj << /D [3521 0 R /XYZ 95.641 359.044 null] >> endobj 3555 0 obj << /D [3521 0 R /XYZ 95.641 354.062 null] >> endobj 3556 0 obj << /D [3521 0 R /XYZ 95.641 319.691 null] >> endobj 3557 0 obj << /D [3521 0 R /XYZ 95.641 314.71 null] >> endobj 3558 0 obj << /D [3521 0 R /XYZ 95.641 304.747 null] >> endobj 3559 0 obj << /D [3521 0 R /XYZ 170.361 289.903 null] >> endobj 3560 0 obj << /D [3521 0 R /XYZ 199.412 289.903 null] >> endobj 3561 0 obj << /D [3521 0 R /XYZ 204.792 289.903 null] >> endobj 3562 0 obj << /D [3521 0 R /XYZ 243.554 289.903 null] >> endobj 3563 0 obj << /D [3521 0 R /XYZ 243.554 289.903 null] >> endobj 746 0 obj << /D [3521 0 R /XYZ 146.232 268.981 null] >> endobj 3564 0 obj << /D [3521 0 R /XYZ 95.641 264 null] >> endobj 3565 0 obj << /D [3521 0 R /XYZ 95.641 259.019 null] >> endobj 3566 0 obj << /D [3521 0 R /XYZ 95.641 224.648 null] >> endobj 3567 0 obj << /D [3521 0 R /XYZ 95.641 219.666 null] >> endobj 3568 0 obj << /D [3521 0 R /XYZ 95.641 209.704 null] >> endobj 3569 0 obj << /D [3521 0 R /XYZ 170.361 194.859 null] >> endobj 3570 0 obj << /D [3521 0 R /XYZ 199.412 194.859 null] >> endobj 3571 0 obj << /D [3521 0 R /XYZ 204.792 194.859 null] >> endobj 3572 0 obj << /D [3521 0 R /XYZ 259.693 194.859 null] >> endobj 3573 0 obj << /D [3521 0 R /XYZ 259.693 194.859 null] >> endobj 750 0 obj << /D [3521 0 R /XYZ 146.232 173.938 null] >> endobj 3574 0 obj << /D [3521 0 R /XYZ 95.641 168.956 null] >> endobj 3575 0 obj << /D [3521 0 R /XYZ 95.641 163.975 null] >> endobj 3576 0 obj << /D [3521 0 R /XYZ 95.641 129.604 null] >> endobj 3577 0 obj << /D [3521 0 R /XYZ 95.641 124.623 null] >> endobj 3578 0 obj << /D [3521 0 R /XYZ 95.641 114.66 null] >> endobj 3520 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R /F26 1177 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3582 0 obj << /Length 1148 /Filter /FlateDecode >> stream xÚ½WKoã6¾çWèè+†OIDNÛÔ\$iáøÖíA±eK¨-–¼E€þø9ÔË–Öì¢ð&9~ó̓CæQø1O+Hæ…\(oµ¿¡Þvo˜“ ž * ÍÖ/Ë›»™Ðž&:Þrc%–ë?'i|¨’ã­Ïprû×ò·»™Œ¼#(%QJ8é§ùlú4™¾¢\W¡bD¨ÐÉý±øýqñùùyþòˆšÓÙt1}¹e“‡©ùöfºl`J)˜ç7hÏ ñEHI#çD3Ù$U‹³6hþòëÜYavih6y@"­Ä*-Š2Y¥ÙnÝtj”6àªè%!Šˆ¨sÖ¿³ÏÏ—j€5¶jؽ#Lµ„ùŒjDÒó%#‘V¶LvɪBΡý[lp<$DzÈï6ñ˜Ìvï¸Z¥Ç[MŠÓ6Å…SY{4ËÁ¹›x•\Bô@áÊóÉöð¾%Ž9Fë3gN¿4œ†!îRœ o³rÂÃ`”4×ð‚l9"Êšc Ð-•‡»BeŠ®,_g$A 7dŽ’Ö¯Óå¥IâI!‘Z’Ô%fƒ±³w\$ÕYÄOVºü¹‘®"Â(ÿâHsÂ"6J‘Ã7}ß“I}ÏfRyz3„ÿ ãa¯pQ:å vT Ê*\m F®DÑÇBè yû$?!?œbOó×òàšiùÿt©QÖ—Äëran¹ ‚Cq¿æÆ)ÑâÕ¬G«óÇ.+Ïè-Ui*œÑ!•“ˆbD.Ó¤çÍ)_ù²sEÄöD©'ÿdUZß*ÉùmR8nkÿfù¦8îc{º]È“d¸KëíýLÑ¡‰“í1Þ“KÎ(@WDK‹ø1©Ú*ÚeMRBuÞqù·±C*8Æ”*üï ›UYÊI¶Nò*Û¼ã,ÆM K‚kËÔ}ü…R~´I x{‚˜«pÛÞ$­Ž¯ñ1‹ßv .Vi|&æ\Œ°áÚ'Zi Þ‚ CÇP@Æ‹ˆ æˆ $ _)ò5þ·ša3ÎqŽÞwN²:fùÖé-P+,Ä¥q8¸ð:TÎàÐ`ÒºÆ8g4ժ밮?¬½:BÓ ö 6ö9 ª-F³Ò:ȬƸh ‰™›H7 ®¡‚'ˆT-ܦKéBûŠ÷BÇbÒ™n rýcl2Bh¢¸î’6@˜/DD„èSçÝ($rÛTCÖsŒ’¤é¼À¦ÑìMò¦Ñó6÷Áöm»îr£èNl”À e)ûšŒ[ï+I»IüpÞkw¬S"]"+VCç6lMŰ“¶,2,„¬m¹«„ÍNÛ²Iá`èÜãbV¹ÃJ0Ó&¯ù¸ŸëðMæbÙ!íù $´l[)øoOÒÊžÀwï÷8Ï*ÜG«ÓÑÉ£¡ðÇ2NðìÑnžj½î»—‚æñåÄR›ä]õ.‰%ÔñSgCÖn ˜6õíìæËDÆ@™(ï½ÔFß—2{îÑî÷ÿç"½endstream endobj 3581 0 obj << /Type /Page /Contents 3582 0 R /Resources 3580 0 R /MediaBox [0 0 609.714 789.041] /Parent 3579 0 R >> endobj 3583 0 obj << /D [3581 0 R /XYZ 95.641 729.265 null] >> endobj 3584 0 obj << /D [3581 0 R /XYZ 170.361 706.351 null] >> endobj 3585 0 obj << /D [3581 0 R /XYZ 223.621 706.351 null] >> endobj 3586 0 obj << /D [3581 0 R /XYZ 229.001 706.351 null] >> endobj 754 0 obj << /D [3581 0 R /XYZ 146.232 685.43 null] >> endobj 3587 0 obj << /D [3581 0 R /XYZ 95.641 680.448 null] >> endobj 3588 0 obj << /D [3581 0 R /XYZ 95.641 675.467 null] >> endobj 3589 0 obj << /D [3581 0 R /XYZ 95.641 641.096 null] >> endobj 3590 0 obj << /D [3581 0 R /XYZ 95.641 636.115 null] >> endobj 3591 0 obj << /D [3581 0 R /XYZ 95.641 626.152 null] >> endobj 3592 0 obj << /D [3581 0 R /XYZ 164.981 611.308 null] >> endobj 3593 0 obj << /D [3581 0 R /XYZ 208.558 611.308 null] >> endobj 3594 0 obj << /D [3581 0 R /XYZ 213.938 611.308 null] >> endobj 758 0 obj << /D [3581 0 R /XYZ 146.232 590.386 null] >> endobj 3595 0 obj << /D [3581 0 R /XYZ 95.641 585.405 null] >> endobj 3596 0 obj << /D [3581 0 R /XYZ 95.641 580.423 null] >> endobj 3597 0 obj << /D [3581 0 R /XYZ 95.641 546.052 null] >> endobj 3598 0 obj << /D [3581 0 R /XYZ 95.641 541.071 null] >> endobj 3599 0 obj << /D [3581 0 R /XYZ 95.641 531.108 null] >> endobj 3600 0 obj << /D [3581 0 R /XYZ 170.361 516.264 null] >> endobj 3601 0 obj << /D [3581 0 R /XYZ 218.78 516.264 null] >> endobj 3602 0 obj << /D [3581 0 R /XYZ 224.159 516.264 null] >> endobj 762 0 obj << /D [3581 0 R /XYZ 146.232 495.342 null] >> endobj 3603 0 obj << /D [3581 0 R /XYZ 95.641 490.361 null] >> endobj 3604 0 obj << /D [3581 0 R /XYZ 95.641 485.38 null] >> endobj 3605 0 obj << /D [3581 0 R /XYZ 95.641 451.009 null] >> endobj 3606 0 obj << /D [3581 0 R /XYZ 95.641 446.027 null] >> endobj 3607 0 obj << /D [3581 0 R /XYZ 95.641 436.065 null] >> endobj 3608 0 obj << /D [3581 0 R /XYZ 170.361 421.22 null] >> endobj 3609 0 obj << /D [3581 0 R /XYZ 228.463 421.22 null] >> endobj 3610 0 obj << /D [3581 0 R /XYZ 233.843 421.22 null] >> endobj 766 0 obj << /D [3581 0 R /XYZ 146.232 400.299 null] >> endobj 3611 0 obj << /D [3581 0 R /XYZ 95.641 395.318 null] >> endobj 3612 0 obj << /D [3581 0 R /XYZ 95.641 390.336 null] >> endobj 3613 0 obj << /D [3581 0 R /XYZ 95.641 355.965 null] >> endobj 3614 0 obj << /D [3581 0 R /XYZ 95.641 350.984 null] >> endobj 3615 0 obj << /D [3581 0 R /XYZ 95.641 341.021 null] >> endobj 3616 0 obj << /D [3581 0 R /XYZ 164.981 326.177 null] >> endobj 3617 0 obj << /D [3581 0 R /XYZ 223.083 326.177 null] >> endobj 3618 0 obj << /D [3581 0 R /XYZ 228.463 326.177 null] >> endobj 770 0 obj << /D [3581 0 R /XYZ 146.232 305.255 null] >> endobj 3619 0 obj << /D [3581 0 R /XYZ 95.641 300.274 null] >> endobj 3620 0 obj << /D [3581 0 R /XYZ 95.641 295.293 null] >> endobj 3621 0 obj << /D [3581 0 R /XYZ 95.641 260.922 null] >> endobj 3622 0 obj << /D [3581 0 R /XYZ 95.641 255.94 null] >> endobj 3623 0 obj << /D [3581 0 R /XYZ 95.641 245.978 null] >> endobj 3624 0 obj << /D [3581 0 R /XYZ 164.981 231.133 null] >> endobj 3625 0 obj << /D [3581 0 R /XYZ 213.4 231.133 null] >> endobj 3626 0 obj << /D [3581 0 R /XYZ 218.78 231.133 null] >> endobj 3627 0 obj << /D [3581 0 R /XYZ 251.641 231.133 null] >> endobj 3628 0 obj << /D [3581 0 R /XYZ 251.641 231.133 null] >> endobj 774 0 obj << /D [3581 0 R /XYZ 146.232 210.212 null] >> endobj 3629 0 obj << /D [3581 0 R /XYZ 95.641 205.23 null] >> endobj 3630 0 obj << /D [3581 0 R /XYZ 95.641 200.249 null] >> endobj 3631 0 obj << /D [3581 0 R /XYZ 95.641 147.447 null] >> endobj 3632 0 obj << /D [3581 0 R /XYZ 95.641 128.697 null] >> endobj 3633 0 obj << /D [3581 0 R /XYZ 95.641 128.697 null] >> endobj 3634 0 obj << /D [3581 0 R /XYZ 438.542 109.589 null] >> endobj 3635 0 obj << /D [3581 0 R /XYZ 306.912 98.63 null] >> endobj 3636 0 obj << /D [3581 0 R /XYZ 481.793 98.63 null] >> endobj 3637 0 obj << /D [3581 0 R /XYZ 162.819 87.671 null] >> endobj 3638 0 obj << /D [3581 0 R /XYZ 95.641 79.881 null] >> endobj 3639 0 obj << /D [3581 0 R /XYZ 95.641 79.881 null] >> endobj 3640 0 obj << /D [3581 0 R /XYZ 314.431 60.772 null] >> endobj 3580 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3643 0 obj << /Length 1147 /Filter /FlateDecode >> stream xÚÕWMoã6½çWøVˆ¹üŸÚ…¤Ø¤EÖ·î›¶…Ú’!ÉÝf}‡R–dïnP 8$g83o†2›Pø±I¦ˆ–l’òŒp­&Ëýl`çîŠ f1)Ÿ¢Lê~Y\½»Ù$#™“ÅÚë-V$ï·ù¡µõõ”+šprýyñë»[i&µS”’(%‚ö‡ûÛù‡ûÇùGÔë¨* z¿?ýv÷ôóÃÃýãžü4¿?ͯYò~îl¯æ‹.X.œ‹l2í¢§3)%FÎIÆä)!užÐÁÖMU‚×L&EÆ0ÏÃ<Ç¡9TÇÆÎ‚Në7U’××Ì$õ¸·e‹‹Lã>꣟ÎGojÛc]OíÖ¢°Î÷Åîåš1–DÕ dÁ41ŒwwRU-ÊU`î¥9ªSFI¨9ƒ­OLéàÈ«F©±;»lQ®Ê°ÝòÚ]A‚{\È£a´Z÷šÎ/§ŽxE°ÜVùʃ ;H¹Ÿ‰Rë:fÂr Ø”(ãAðdܪӞxÛçˆê”pšUD²ï/ ©{HjLÍ-á™^öÙé4nE~¸§ J–§z”*¸2èVЏƒCG5¿çuL@n-€äÖÚ-Ì-Ê'gƒa^À‰Ë Jq:>»;Ç íT=Nîh“YÁÉDd¨ñú'R¤M‚/#3hdLd‰¹Z}Ãd†³ÀJzÆJŠÍÆP#ôÄ$ çâ¹’c(d×eò`ËãÒu‘r¥!Êw»ê‹C‰Š€åM~©Â1"ãäSÆn–—h“×ÏE[çõ .CFG‚âÉ'JyÝ´QÀ'؆ÔýÍ„øú,t3"ÙÞ$‡«0> endobj 3644 0 obj << /D [3642 0 R /XYZ 95.641 729.265 null] >> endobj 3645 0 obj << /D [3642 0 R /XYZ 460.274 706.351 null] >> endobj 3646 0 obj << /D [3642 0 R /XYZ 271.529 684.433 null] >> endobj 3647 0 obj << /D [3642 0 R /XYZ 391.378 673.474 null] >> endobj 3648 0 obj << /D [3642 0 R /XYZ 95.641 654.725 null] >> endobj 3649 0 obj << /D [3642 0 R /XYZ 95.641 654.725 null] >> endobj 3650 0 obj << /D [3642 0 R /XYZ 292.782 624.658 null] >> endobj 3651 0 obj << /D [3642 0 R /XYZ 380.988 613.699 null] >> endobj 1290 0 obj << /D [3642 0 R /XYZ 95.641 605.908 null] >> endobj 778 0 obj << /D [3642 0 R /XYZ 191.416 575.532 null] >> endobj 3652 0 obj << /D [3642 0 R /XYZ 95.641 572.85 null] >> endobj 3653 0 obj << /D [3642 0 R /XYZ 95.641 555.415 null] >> endobj 3654 0 obj << /D [3642 0 R /XYZ 95.641 549.388 null] >> endobj 3655 0 obj << /D [3642 0 R /XYZ 95.641 539.425 null] >> endobj 3656 0 obj << /D [3642 0 R /XYZ 181.121 526.217 null] >> endobj 3657 0 obj << /D [3642 0 R /XYZ 205.33 526.217 null] >> endobj 3658 0 obj << /D [3642 0 R /XYZ 210.71 526.217 null] >> endobj 782 0 obj << /D [3642 0 R /XYZ 146.232 505.295 null] >> endobj 3659 0 obj << /D [3642 0 R /XYZ 95.641 500.314 null] >> endobj 3660 0 obj << /D [3642 0 R /XYZ 95.641 495.333 null] >> endobj 3661 0 obj << /D [3642 0 R /XYZ 95.641 460.961 null] >> endobj 3662 0 obj << /D [3642 0 R /XYZ 95.641 455.98 null] >> endobj 3663 0 obj << /D [3642 0 R /XYZ 95.641 446.017 null] >> endobj 3664 0 obj << /D [3642 0 R /XYZ 181.121 431.173 null] >> endobj 3665 0 obj << /D [3642 0 R /XYZ 205.33 431.173 null] >> endobj 3666 0 obj << /D [3642 0 R /XYZ 210.71 431.173 null] >> endobj 786 0 obj << /D [3642 0 R /XYZ 146.232 410.252 null] >> endobj 3667 0 obj << /D [3642 0 R /XYZ 95.641 405.27 null] >> endobj 3668 0 obj << /D [3642 0 R /XYZ 95.641 400.289 null] >> endobj 3669 0 obj << /D [3642 0 R /XYZ 95.641 365.918 null] >> endobj 3670 0 obj << /D [3642 0 R /XYZ 95.641 360.936 null] >> endobj 3671 0 obj << /D [3642 0 R /XYZ 95.641 350.974 null] >> endobj 3672 0 obj << /D [3642 0 R /XYZ 181.121 336.13 null] >> endobj 3673 0 obj << /D [3642 0 R /XYZ 229.539 336.13 null] >> endobj 3674 0 obj << /D [3642 0 R /XYZ 234.919 336.13 null] >> endobj 790 0 obj << /D [3642 0 R /XYZ 146.232 315.208 null] >> endobj 3675 0 obj << /D [3642 0 R /XYZ 95.641 310.227 null] >> endobj 3676 0 obj << /D [3642 0 R /XYZ 95.641 305.245 null] >> endobj 3677 0 obj << /D [3642 0 R /XYZ 95.641 270.874 null] >> endobj 3678 0 obj << /D [3642 0 R /XYZ 95.641 265.893 null] >> endobj 3679 0 obj << /D [3642 0 R /XYZ 95.641 255.93 null] >> endobj 3680 0 obj << /D [3642 0 R /XYZ 181.121 241.086 null] >> endobj 3681 0 obj << /D [3642 0 R /XYZ 224.697 241.086 null] >> endobj 3682 0 obj << /D [3642 0 R /XYZ 230.077 241.086 null] >> endobj 794 0 obj << /D [3642 0 R /XYZ 146.232 220.164 null] >> endobj 3683 0 obj << /D [3642 0 R /XYZ 95.641 215.183 null] >> endobj 3684 0 obj << /D [3642 0 R /XYZ 95.641 210.202 null] >> endobj 3685 0 obj << /D [3642 0 R /XYZ 95.641 175.831 null] >> endobj 3686 0 obj << /D [3642 0 R /XYZ 95.641 170.849 null] >> endobj 3687 0 obj << /D [3642 0 R /XYZ 95.641 160.887 null] >> endobj 3688 0 obj << /D [3642 0 R /XYZ 181.121 146.042 null] >> endobj 3689 0 obj << /D [3642 0 R /XYZ 200.488 146.042 null] >> endobj 3690 0 obj << /D [3642 0 R /XYZ 205.868 146.042 null] >> endobj 3691 0 obj << /D [3642 0 R /XYZ 249.31 146.042 null] >> endobj 798 0 obj << /D [3642 0 R /XYZ 146.232 125.121 null] >> endobj 3692 0 obj << /D [3642 0 R /XYZ 95.641 120.14 null] >> endobj 3693 0 obj << /D [3642 0 R /XYZ 95.641 115.158 null] >> endobj 3694 0 obj << /D [3642 0 R /XYZ 95.641 80.787 null] >> endobj 3695 0 obj << /D [3642 0 R /XYZ 95.641 75.806 null] >> endobj 3696 0 obj << /D [3642 0 R /XYZ 95.641 65.843 null] >> endobj 3641 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F35 1187 0 R /F45 1307 0 R /F26 1177 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3699 0 obj << /Length 587 /Filter /FlateDecode >> stream xÚÅ–MoÚ@†ïüŠ=‚TOö{×ê©LD•ЈøÖô@ŒW`*0jûï;Îc㸦*M„Ђvüî¼3Ã2Bñň¯@KF ÷kE¢u’îÜôXA‰eM¾õ1ì] …O|ðµ áü9"œ}é_/§ß³x;ð¸¢}ƒ¯á§«¡´Äb Î¥¥D};·£qðà⪂ŠP¦ˆ»Ÿ|¾™|¸»oœò$“`<`ýë ¶„eš’Y‚¯ÌöÔˆ' +çà3Y’ê˜çÁÐC8ÉOu>ò}jòma@+¿ˆÙ~Ûï²dþ«U¨ FÈ"ì‘*Ú¢@ض³*´=0{×”`L™Ìh6˜Ãù1ö¾ ®ŽÄ=†8(ãÄ“ ¬ÎZ²XfŽùÁäó—$uë#¥<^Íš'z …¹"žÀÏ&mÒhš5Õ°(1é‹päæ¨ëž–ªM1%SÖ…Tú`©­!EƒqŠo0û±qvÙ6I»’xâ¹,Q° §ÄÖ(¾NYžÇ³³Dµ uižõ¦q09Å*0Wqú_ Stx×8KNJ)ݯŸÃv3wk´œn§Îà]½SÑŽKDr©^ÝíŸãŠíjáfö5[¶{òý³@k]*˜©ÿ8%ǾO£,Ù¤*È$Å?_¨Ç¼‹ü·èì7û׌õk蜿Á~vÕ¿ðW'ñ\Þ…Üt;íxuÒ¦}L‹†ŸÅQ²ž®ªSðôŠäI–㊾@ñÚ%©õj'mÛM‹VŸÿ xŠtendstream endobj 3698 0 obj << /Type /Page /Contents 3699 0 R /Resources 3697 0 R /MediaBox [0 0 609.714 789.041] /Parent 3579 0 R >> endobj 3700 0 obj << /D [3698 0 R /XYZ 95.641 729.265 null] >> endobj 3701 0 obj << /D [3698 0 R /XYZ 181.121 706.351 null] >> endobj 3702 0 obj << /D [3698 0 R /XYZ 219.856 706.351 null] >> endobj 3703 0 obj << /D [3698 0 R /XYZ 225.235 706.351 null] >> endobj 3704 0 obj << /D [3698 0 R /XYZ 268.677 706.351 null] >> endobj 802 0 obj << /D [3698 0 R /XYZ 146.232 685.43 null] >> endobj 3705 0 obj << /D [3698 0 R /XYZ 95.641 680.448 null] >> endobj 3706 0 obj << /D [3698 0 R /XYZ 95.641 675.467 null] >> endobj 3707 0 obj << /D [3698 0 R /XYZ 95.641 641.096 null] >> endobj 3708 0 obj << /D [3698 0 R /XYZ 95.641 636.115 null] >> endobj 3709 0 obj << /D [3698 0 R /XYZ 95.641 626.152 null] >> endobj 3710 0 obj << /D [3698 0 R /XYZ 181.121 611.308 null] >> endobj 3711 0 obj << /D [3698 0 R /XYZ 210.172 611.308 null] >> endobj 3712 0 obj << /D [3698 0 R /XYZ 215.552 611.308 null] >> endobj 3713 0 obj << /D [3698 0 R /XYZ 258.994 611.308 null] >> endobj 3714 0 obj << /D [3698 0 R /XYZ 258.994 611.308 null] >> endobj 3715 0 obj << /D [3698 0 R /XYZ 297.056 611.308 null] >> endobj 3716 0 obj << /D [3698 0 R /XYZ 297.056 611.308 null] >> endobj 806 0 obj << /D [3698 0 R /XYZ 146.232 590.386 null] >> endobj 3717 0 obj << /D [3698 0 R /XYZ 95.641 585.405 null] >> endobj 3718 0 obj << /D [3698 0 R /XYZ 95.641 580.423 null] >> endobj 3719 0 obj << /D [3698 0 R /XYZ 95.641 546.052 null] >> endobj 3720 0 obj << /D [3698 0 R /XYZ 95.641 541.071 null] >> endobj 3721 0 obj << /D [3698 0 R /XYZ 95.641 531.108 null] >> endobj 3722 0 obj << /D [3698 0 R /XYZ 181.121 516.264 null] >> endobj 3723 0 obj << /D [3698 0 R /XYZ 224.697 516.264 null] >> endobj 3724 0 obj << /D [3698 0 R /XYZ 230.077 516.264 null] >> endobj 3725 0 obj << /D [3698 0 R /XYZ 273.519 516.264 null] >> endobj 3726 0 obj << /D [3698 0 R /XYZ 273.519 516.264 null] >> endobj 3727 0 obj << /D [3698 0 R /XYZ 311.581 516.264 null] >> endobj 3728 0 obj << /D [3698 0 R /XYZ 311.581 516.264 null] >> endobj 810 0 obj << /D [3698 0 R /XYZ 146.232 495.342 null] >> endobj 3729 0 obj << /D [3698 0 R /XYZ 95.641 490.361 null] >> endobj 3730 0 obj << /D [3698 0 R /XYZ 95.641 485.38 null] >> endobj 3731 0 obj << /D [3698 0 R /XYZ 95.641 451.009 null] >> endobj 3732 0 obj << /D [3698 0 R /XYZ 95.641 446.027 null] >> endobj 3733 0 obj << /D [3698 0 R /XYZ 95.641 436.065 null] >> endobj 3734 0 obj << /D [3698 0 R /XYZ 164.981 421.22 null] >> endobj 3735 0 obj << /D [3698 0 R /XYZ 194.032 421.22 null] >> endobj 3736 0 obj << /D [3698 0 R /XYZ 199.412 421.22 null] >> endobj 814 0 obj << /D [3698 0 R /XYZ 146.232 400.299 null] >> endobj 3737 0 obj << /D [3698 0 R /XYZ 95.641 395.318 null] >> endobj 3738 0 obj << /D [3698 0 R /XYZ 95.641 390.336 null] >> endobj 3739 0 obj << /D [3698 0 R /XYZ 95.641 355.965 null] >> endobj 3740 0 obj << /D [3698 0 R /XYZ 95.641 350.984 null] >> endobj 3741 0 obj << /D [3698 0 R /XYZ 95.641 341.021 null] >> endobj 3742 0 obj << /D [3698 0 R /XYZ 181.121 326.177 null] >> endobj 3743 0 obj << /D [3698 0 R /XYZ 229.539 326.177 null] >> endobj 3744 0 obj << /D [3698 0 R /XYZ 234.919 326.177 null] >> endobj 3745 0 obj << /D [3698 0 R /XYZ 278.361 326.177 null] >> endobj 3746 0 obj << /D [3698 0 R /XYZ 305.843 326.177 null] >> endobj 818 0 obj << /D [3698 0 R /XYZ 146.232 305.255 null] >> endobj 3747 0 obj << /D [3698 0 R /XYZ 95.641 300.274 null] >> endobj 3748 0 obj << /D [3698 0 R /XYZ 95.641 295.293 null] >> endobj 3749 0 obj << /D [3698 0 R /XYZ 95.641 260.922 null] >> endobj 3750 0 obj << /D [3698 0 R /XYZ 95.641 255.94 null] >> endobj 3751 0 obj << /D [3698 0 R /XYZ 95.641 245.978 null] >> endobj 3752 0 obj << /D [3698 0 R /XYZ 164.981 231.133 null] >> endobj 3753 0 obj << /D [3698 0 R /XYZ 189.191 231.133 null] >> endobj 3754 0 obj << /D [3698 0 R /XYZ 194.57 231.133 null] >> endobj 3755 0 obj << /D [3698 0 R /XYZ 238.012 231.133 null] >> endobj 3756 0 obj << /D [3698 0 R /XYZ 281.454 231.133 null] >> endobj 822 0 obj << /D [3698 0 R /XYZ 146.232 210.212 null] >> endobj 3757 0 obj << /D [3698 0 R /XYZ 95.641 205.23 null] >> endobj 3758 0 obj << /D [3698 0 R /XYZ 95.641 200.249 null] >> endobj 3759 0 obj << /D [3698 0 R /XYZ 95.641 165.878 null] >> endobj 3760 0 obj << /D [3698 0 R /XYZ 95.641 160.897 null] >> endobj 3761 0 obj << /D [3698 0 R /XYZ 95.641 150.934 null] >> endobj 3762 0 obj << /D [3698 0 R /XYZ 181.121 136.09 null] >> endobj 3763 0 obj << /D [3698 0 R /XYZ 185.963 136.09 null] >> endobj 3764 0 obj << /D [3698 0 R /XYZ 191.342 136.09 null] >> endobj 826 0 obj << /D [3698 0 R /XYZ 146.232 115.168 null] >> endobj 3765 0 obj << /D [3698 0 R /XYZ 95.641 110.187 null] >> endobj 3766 0 obj << /D [3698 0 R /XYZ 95.641 105.206 null] >> endobj 3767 0 obj << /D [3698 0 R /XYZ 95.641 70.834 null] >> endobj 3768 0 obj << /D [3698 0 R /XYZ 95.641 65.853 null] >> endobj 3697 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3771 0 obj << /Length 730 /Filter /FlateDecode >> stream xÚÍ–KOÛ@€ïù>&öýPO”:(UUH¥J¥“8`)±‘chûï;ÎÚÆ`“‡*ª*‡]ggçñíÌÎRàzV‚ÔÓÌSÒ›¯{ĻÕ‹-%¨á`4ó8H£ ³Þé[Ï‚UÜ›-·r³Å÷þù}øGÙÀg’ô ~Ì>Ÿ…ñ ªBP’—ÒãÑ0&Áµ“k*”¸Ô¥Ü—éÕÅôìòr4¹pš§Á0˜“íŸÅÞ^0«e¼0a=¿ööu8>׎Œ¥¢HÈg?«€®gÓª‹£X'ºXæÚp2ËÆr&ÁÊå"I„®+ÃñÕÙ¬­„i¦ÒrÒVA hU.& ¨ÍnÐ%hù Ú7Ä%(úÌ·¢Éãú¶:ÄpãÆBxæqrç¾Ò8ÉÝt“ãAdÅJËŸ¢!&=_r`‡Ù¢# \é}PÍ_‘X„¿ $N܈N¨é/â$\¹–i¶®`ÕÞ5­S”ÒÒ|šD'_ÒϦå Ú)œÕaNw`F‡Ájá8z0é´4žÙûƒx t/èôxΨ¨*cg›¼ä»‰æi²ØÛ*0\ïÍXbކ®îÃŽ2¨Å¾?n%€à¦&n¤ñee7Ùç©ÇEÅ»é ‹<ÊëËý ôÜ€¨ƒ KÒ·»ˆ ÜAí¾ôƱmwdé:Lþ+Þ]é=ÝzY@”m³\ØýY.,¨Ú͸DÇ»X#>m÷]%Œ»²<2»7y¶I“Eô«£glEÞ²VŠpÊì£N /6õ&vì],Y8˜×W_'Ÿ‚oîã)\=Få-³,û]v‹‰çY˜ý®ÚÛ¡½íe®8FŒ‚¤ Fù¶o¶c3 ¹ü'„´néÎ{ Êâù‹àŸ/ÌL ºÃ4~õðò…ÃpÄœÀÒùô3A8v½"…}­»anW¥òjI endstream endobj 3770 0 obj << /Type /Page /Contents 3771 0 R /Resources 3769 0 R /MediaBox [0 0 609.714 789.041] /Parent 3579 0 R >> endobj 3772 0 obj << /D [3770 0 R /XYZ 95.641 729.265 null] >> endobj 3773 0 obj << /D [3770 0 R /XYZ 95.641 716.314 null] >> endobj 3774 0 obj << /D [3770 0 R /XYZ 181.121 706.351 null] >> endobj 3775 0 obj << /D [3770 0 R /XYZ 185.963 706.351 null] >> endobj 3776 0 obj << /D [3770 0 R /XYZ 191.342 706.351 null] >> endobj 3777 0 obj << /D [3770 0 R /XYZ 229.584 706.351 null] >> endobj 830 0 obj << /D [3770 0 R /XYZ 146.232 685.43 null] >> endobj 3778 0 obj << /D [3770 0 R /XYZ 95.641 680.448 null] >> endobj 3779 0 obj << /D [3770 0 R /XYZ 95.641 675.467 null] >> endobj 3780 0 obj << /D [3770 0 R /XYZ 95.641 641.096 null] >> endobj 3781 0 obj << /D [3770 0 R /XYZ 95.641 636.115 null] >> endobj 3782 0 obj << /D [3770 0 R /XYZ 95.641 626.152 null] >> endobj 3783 0 obj << /D [3770 0 R /XYZ 181.121 611.308 null] >> endobj 3784 0 obj << /D [3770 0 R /XYZ 200.488 611.308 null] >> endobj 3785 0 obj << /D [3770 0 R /XYZ 205.868 611.308 null] >> endobj 834 0 obj << /D [3770 0 R /XYZ 146.232 590.386 null] >> endobj 3786 0 obj << /D [3770 0 R /XYZ 95.641 585.405 null] >> endobj 3787 0 obj << /D [3770 0 R /XYZ 95.641 580.423 null] >> endobj 3788 0 obj << /D [3770 0 R /XYZ 277.498 569.465 null] >> endobj 3789 0 obj << /D [3770 0 R /XYZ 95.641 546.052 null] >> endobj 3790 0 obj << /D [3770 0 R /XYZ 95.641 541.071 null] >> endobj 3791 0 obj << /D [3770 0 R /XYZ 95.641 531.108 null] >> endobj 3792 0 obj << /D [3770 0 R /XYZ 181.121 516.264 null] >> endobj 3793 0 obj << /D [3770 0 R /XYZ 195.646 516.264 null] >> endobj 3794 0 obj << /D [3770 0 R /XYZ 201.026 516.264 null] >> endobj 838 0 obj << /D [3770 0 R /XYZ 146.232 495.342 null] >> endobj 3795 0 obj << /D [3770 0 R /XYZ 95.641 490.361 null] >> endobj 3796 0 obj << /D [3770 0 R /XYZ 95.641 485.38 null] >> endobj 3797 0 obj << /D [3770 0 R /XYZ 273.533 474.421 null] >> endobj 3798 0 obj << /D [3770 0 R /XYZ 95.641 451.009 null] >> endobj 3799 0 obj << /D [3770 0 R /XYZ 95.641 446.027 null] >> endobj 3800 0 obj << /D [3770 0 R /XYZ 95.641 436.065 null] >> endobj 3801 0 obj << /D [3770 0 R /XYZ 181.121 421.22 null] >> endobj 3802 0 obj << /D [3770 0 R /XYZ 205.33 421.22 null] >> endobj 3803 0 obj << /D [3770 0 R /XYZ 210.71 421.22 null] >> endobj 842 0 obj << /D [3770 0 R /XYZ 146.232 400.299 null] >> endobj 3804 0 obj << /D [3770 0 R /XYZ 95.641 395.318 null] >> endobj 3805 0 obj << /D [3770 0 R /XYZ 95.641 390.336 null] >> endobj 3806 0 obj << /D [3770 0 R /XYZ 301.796 379.377 null] >> endobj 3807 0 obj << /D [3770 0 R /XYZ 95.641 355.965 null] >> endobj 3808 0 obj << /D [3770 0 R /XYZ 95.641 350.984 null] >> endobj 3809 0 obj << /D [3770 0 R /XYZ 95.641 341.021 null] >> endobj 3810 0 obj << /D [3770 0 R /XYZ 181.121 326.177 null] >> endobj 3811 0 obj << /D [3770 0 R /XYZ 205.33 326.177 null] >> endobj 3812 0 obj << /D [3770 0 R /XYZ 210.71 326.177 null] >> endobj 846 0 obj << /D [3770 0 R /XYZ 146.232 305.255 null] >> endobj 3813 0 obj << /D [3770 0 R /XYZ 95.641 300.274 null] >> endobj 3814 0 obj << /D [3770 0 R /XYZ 95.641 295.293 null] >> endobj 3815 0 obj << /D [3770 0 R /XYZ 313.025 284.334 null] >> endobj 3816 0 obj << /D [3770 0 R /XYZ 95.641 260.922 null] >> endobj 3817 0 obj << /D [3770 0 R /XYZ 95.641 255.94 null] >> endobj 3818 0 obj << /D [3770 0 R /XYZ 95.641 245.978 null] >> endobj 3819 0 obj << /D [3770 0 R /XYZ 181.121 231.133 null] >> endobj 3820 0 obj << /D [3770 0 R /XYZ 229.539 231.133 null] >> endobj 3821 0 obj << /D [3770 0 R /XYZ 234.919 231.133 null] >> endobj 850 0 obj << /D [3770 0 R /XYZ 146.232 210.212 null] >> endobj 3822 0 obj << /D [3770 0 R /XYZ 95.641 205.23 null] >> endobj 3823 0 obj << /D [3770 0 R /XYZ 95.641 200.249 null] >> endobj 3824 0 obj << /D [3770 0 R /XYZ 95.641 165.878 null] >> endobj 3825 0 obj << /D [3770 0 R /XYZ 95.641 160.897 null] >> endobj 3826 0 obj << /D [3770 0 R /XYZ 95.641 150.934 null] >> endobj 3827 0 obj << /D [3770 0 R /XYZ 164.981 136.09 null] >> endobj 3828 0 obj << /D [3770 0 R /XYZ 203.716 136.09 null] >> endobj 3829 0 obj << /D [3770 0 R /XYZ 209.096 136.09 null] >> endobj 854 0 obj << /D [3770 0 R /XYZ 146.232 115.168 null] >> endobj 3830 0 obj << /D [3770 0 R /XYZ 95.641 110.187 null] >> endobj 3831 0 obj << /D [3770 0 R /XYZ 95.641 105.206 null] >> endobj 3832 0 obj << /D [3770 0 R /XYZ 95.641 70.834 null] >> endobj 3833 0 obj << /D [3770 0 R /XYZ 95.641 65.853 null] >> endobj 3769 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3836 0 obj << /Length 1972 /Filter /FlateDecode >> stream xÚåXKã6¾Ï¯ðÑ ´RÔsJ=ƒ^Lf‚{ØÝ[¦mmdÊ‘¨n8¿>U,êeÉ=Y`/AàƒŠ¬b‘õÕƒE‹‡ŸXe‹C±J‚Œq´ÊOïøêœOï„—à+É¢4AÖOÛw?|”Ù*cY,WÛ½“ØîþµþpTg«ë»MñuÀîþ³ýÇÃt•‚`Œ‚aÈ¢HzéÏ>?~yøFrc…‘`2J¼Ü/O_?=ýøóÏ_>‘槇O_îÄúî}÷°íŠ”…R¬6ýi¯ ÙÈ„³¾AÀ2ö…ÑpÎΠÇ/[o2y‚¼@°Hd^@ÙªIøå"c2N½È¿yÄçHDL&’oÛ'´m¦F,Nå F¼÷HER›(c<W›P°4”N4¯Ì‹®-eÚ“®‹œ­ s ÚVð ³ua¬>€ÓfÛoÀŒ,ˆ` É‚?èÏOç¹*+8þ÷Iÿ ºŸ«œ%ñÿ¢ã¦BL„ÙÔƒ6ºVåǼ:U}'Òµþ†\8M?}ýúycÌÒ¬ƒQÿ, ‚Žì/…b 98 ͬ’ ö•¯ú·V•$¸½ü¿05úoŽiaUÀ´,ÕK9¥øö¨TÃÓõd[“Û¢2 ÍœÝ.ÕK±s"ÉÀ<*³+aĈõK]¸ã* |_@¡®ÐGcÉ ß}R¸T{¿ð¨O¤­môŽæ@ÏÎáôœeQFeøì¦òãÝF´'~OúTÕO+£ú¤¥q~¬mˆv0!¡ž›ªl­öK Sœ0ë¯uí«ÊžÁxË&ÇIÝq~„£Æb½÷èሃ 0ì±hhrzpäAñÆ@M×mnÍ U؆˜UkÏ­%ºÇ Í ‚¯~×AJ¬ŸÛ=bŸ„¦W8Rù“Ê = ¬,/vMP£LqÒ$SXšyU ¹*K½cÄýçÑ ÓŠ>>8j€ÑÆ…×1èÖ‘m[‡V£ö ‰ËaêE•­&ψìù:ˆ)NŒ&át†Htä’6¹× qJzÎá5Í7y¾,Ø`}ÒaºŽ2†¯zœØ.‘àûŒ‰ä+e‹}†û$ªËùF½tSÏC|¤ëxµ£ßPùÁuX+ºåê  ÃæU ‰XRGW½vĸjIÎÑ•P¨ U˜3‘v²=Ÿojé*ußâH)É$Jm¡ýlh€9á¹EM$UÉC‹%ÀK¹:KÝÑYù/ѹjô=’¡w)@³¡šB äÄÍY¢/º¼Ü !Ö ¨…)ô·a×5«saáºû]ÏŽbèéÑÎAiçÀ î Ô¥Ùü¨j•û&<£J:CpO¼bO¬Â«pµ EéC ÞAÊÜÓ@F·Y¤Ó=fˆf ¦CkŸv±p#^°[ ߌ¸¸¸HÞŽ—‰¨&¶‚6êÑ…ŽçÊ‹nÑ%°˜¤>ŒÇU‚ø'mÕîý‰҄¥Cx¾áÒЗˆ`‚[&(«y‘EkLF‘ÅÎv71ÃK¸ZåDÈŸxU£Kqo».¹laK®Yˆ5¯–hk¸Ã·s±v‡—}pЩ÷4‡Éá.¼RÑÙQȤà811Âûðã>ü8…ïÃ/¤ðŠ`jð„qöÐ"ÓÕ«Ò·êÕPûÜh¦š|îSÕ[ ÚI•ÛÖÅi!Üàivè5Ǫ¶%yè®;.û §\ÙÁ¯+]K—9Ø#Mbý(i Od>_&Ò ¡Á?ž ½Ÿ‚°ì/+ä?î¯Ôû½É tÒ‰\Ûjijwñ}ÄžÔ ÕÔqkš#sýÀ‚û]:!£ï>¿\¢•×î0ìæ×Aœ@WÞ•½§ÿ¶-ö—9æa4Šìº8½f·ÀØÉÚætj2:Š]ï”(Á—pE³Êø°ñ"}gQs*»’ŠÞ“÷P|â=˜pÞõý‚Þ{@;ï¡‚‘aúq´É¼_€Jv(ŒkKãx0!ŽÈn®óÀy¦£4=B¾zîið\*ó«WÖ?.pP@ïªa_æ0ë.õÞP-6;“|lïÕ÷4(öôíe‡Ü¡ß²2g¢t&Ž— A°븿[:Å©]ô&Ð/¸ÖÜ䊚ó$pÅÚq¨ ”ˆK…ÿUàÝ¿ 7«H o\Z ÚwxI0ì6¹±p÷ñcwc¡·–.­LÀvÝ?LõÍ<ƒO¢dzeå¾T¸[kR{'·Õ¨”ýêÛR|Ù×î­øv©ýP!Ò ½`Èd¼Ù!%GÿJÝPw^Ø?ºÑ©FÙÉÛ¶¡ÙÄ^î“z`4miý^Ò¿¸ï»aogcѧ4Äî{ÓõS’%ÐN’ŸX$÷ ‘:)OXõ«öÔkå ÿ•}Ñ |ºh8ißÓœiñ²œqÇS~ˆD¸+wÖÞâW:Ä8W`8¬w4i«ƒöWô…WÒ¤¥ëÀaaTÒNŽ”І$‡Áë±pTTÙ|çíø½Püfk¸úC1‰»¾oùý+«¿6±%Ù_1¼3‡Ç²ë?¸7!4š|ã(cQ0ù‹ûæóô·ÖÒÿä|¼þ@AKÉendstream endobj 3835 0 obj << /Type /Page /Contents 3836 0 R /Resources 3834 0 R /MediaBox [0 0 609.714 789.041] /Parent 3579 0 R >> endobj 3837 0 obj << /D [3835 0 R /XYZ 95.641 729.265 null] >> endobj 3838 0 obj << /D [3835 0 R /XYZ 95.641 716.314 null] >> endobj 3839 0 obj << /D [3835 0 R /XYZ 164.981 706.351 null] >> endobj 3840 0 obj << /D [3835 0 R /XYZ 184.349 706.351 null] >> endobj 3841 0 obj << /D [3835 0 R /XYZ 189.728 706.351 null] >> endobj 858 0 obj << /D [3835 0 R /XYZ 146.232 685.43 null] >> endobj 3842 0 obj << /D [3835 0 R /XYZ 95.641 680.448 null] >> endobj 3843 0 obj << /D [3835 0 R /XYZ 95.641 675.467 null] >> endobj 3844 0 obj << /D [3835 0 R /XYZ 95.641 641.096 null] >> endobj 3845 0 obj << /D [3835 0 R /XYZ 95.641 636.115 null] >> endobj 3846 0 obj << /D [3835 0 R /XYZ 95.641 626.152 null] >> endobj 3847 0 obj << /D [3835 0 R /XYZ 164.981 611.308 null] >> endobj 3848 0 obj << /D [3835 0 R /XYZ 194.032 611.308 null] >> endobj 3849 0 obj << /D [3835 0 R /XYZ 199.412 611.308 null] >> endobj 3850 0 obj << /D [3835 0 R /XYZ 242.854 611.308 null] >> endobj 862 0 obj << /D [3835 0 R /XYZ 146.232 590.386 null] >> endobj 3851 0 obj << /D [3835 0 R /XYZ 95.641 585.405 null] >> endobj 3852 0 obj << /D [3835 0 R /XYZ 95.641 580.423 null] >> endobj 3853 0 obj << /D [3835 0 R /XYZ 95.641 546.052 null] >> endobj 3854 0 obj << /D [3835 0 R /XYZ 95.641 541.071 null] >> endobj 3855 0 obj << /D [3835 0 R /XYZ 95.641 531.108 null] >> endobj 3856 0 obj << /D [3835 0 R /XYZ 170.361 516.264 null] >> endobj 3857 0 obj << /D [3835 0 R /XYZ 194.57 516.264 null] >> endobj 3858 0 obj << /D [3835 0 R /XYZ 199.95 516.264 null] >> endobj 3859 0 obj << /D [3835 0 R /XYZ 243.392 516.264 null] >> endobj 866 0 obj << /D [3835 0 R /XYZ 146.232 495.342 null] >> endobj 3860 0 obj << /D [3835 0 R /XYZ 95.641 490.361 null] >> endobj 3861 0 obj << /D [3835 0 R /XYZ 95.641 485.38 null] >> endobj 3862 0 obj << /D [3835 0 R /XYZ 95.641 451.009 null] >> endobj 3863 0 obj << /D [3835 0 R /XYZ 95.641 446.027 null] >> endobj 3864 0 obj << /D [3835 0 R /XYZ 95.641 436.065 null] >> endobj 3865 0 obj << /D [3835 0 R /XYZ 170.361 421.22 null] >> endobj 3866 0 obj << /D [3835 0 R /XYZ 194.57 421.22 null] >> endobj 3867 0 obj << /D [3835 0 R /XYZ 199.95 421.22 null] >> endobj 3868 0 obj << /D [3835 0 R /XYZ 243.392 421.22 null] >> endobj 870 0 obj << /D [3835 0 R /XYZ 146.232 400.299 null] >> endobj 3869 0 obj << /D [3835 0 R /XYZ 95.641 395.318 null] >> endobj 3870 0 obj << /D [3835 0 R /XYZ 95.641 390.336 null] >> endobj 3871 0 obj << /D [3835 0 R /XYZ 95.641 337.534 null] >> endobj 3872 0 obj << /D [3835 0 R /XYZ 95.641 263.99 null] >> endobj 3873 0 obj << /D [3835 0 R /XYZ 95.641 263.99 null] >> endobj 3874 0 obj << /D [3835 0 R /XYZ 193.866 255.841 null] >> endobj 3875 0 obj << /D [3835 0 R /XYZ 191.816 244.882 null] >> endobj 3876 0 obj << /D [3835 0 R /XYZ 195.342 233.923 null] >> endobj 3877 0 obj << /D [3835 0 R /XYZ 243.407 233.923 null] >> endobj 3878 0 obj << /D [3835 0 R /XYZ 460.274 233.923 null] >> endobj 3879 0 obj << /D [3835 0 R /XYZ 308.108 222.964 null] >> endobj 3880 0 obj << /D [3835 0 R /XYZ 95.641 204.214 null] >> endobj 3881 0 obj << /D [3835 0 R /XYZ 95.641 204.214 null] >> endobj 3882 0 obj << /D [3835 0 R /XYZ 410.666 185.106 null] >> endobj 3883 0 obj << /D [3835 0 R /XYZ 255.564 141.27 null] >> endobj 3884 0 obj << /D [3835 0 R /XYZ 471.034 141.27 null] >> endobj 3885 0 obj << /D [3835 0 R /XYZ 95.641 122.521 null] >> endobj 3886 0 obj << /D [3835 0 R /XYZ 95.641 122.521 null] >> endobj 3887 0 obj << /D [3835 0 R /XYZ 196.734 114.371 null] >> endobj 3888 0 obj << /D [3835 0 R /XYZ 95.641 76.299 null] >> endobj 3889 0 obj << /D [3835 0 R /XYZ 95.641 76.299 null] >> endobj 3834 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3892 0 obj << /Length 2086 /Filter /FlateDecode >> stream xÚ•YY7~÷¯ò¤$†G³äɱ5ÆñxáÑ.Øä¡§Õ’º•>$J3x‹UëbKÌ8üÄ,Ñ, Ä,’ “¡žeÇw|¶ƒ•Oï„¥±bq$gŠé8B‚_×ï~¾WÉ,aI¨fë­¡[oþ7ÿ°OOm^ß-¥æsÉîþ\ÿöó}Ïb ‘0˜ÖÊRÿþp¿úýáqõDtc†Z0¥#K÷¯¯_>}}ÿùóÃã'âüuu¿úºz¼ó+Üûnµî…• HfË^Úsu–*â,„VJ–ˆ W(ЃœN¡§î¹ië¢ÜYõHDÉ”’–®¾ñ6>¯÷>ëHé‰SâLhÀ‚&ˆå/ç³9^މ8<ç£-ŸÐíЃt¿Ø-%0Øœ adÂvéÑæhŽ‚–¸@çÂ`®4¡íÀŽ‚ùkfûÑãULÅÖ`—»5“.idi½ñX¼`Z¾iåÛ.B ã-ÛÓÃiŸz=.ŒGSn.y \ب«#ÜÏm.¾å5ÞA„.Ðæ; º™.¶tán!9Ó‰ÚƒwÌD8=ÈòNËɉÓSë¬a‰vÐJ0N„h ƒQ_È&,“ÛW0‰KÙtH²A;È#.R“‘QoŠ2=Ð Höìˆû¨ý?¸æùnáK1“½9AcËØs_œ0 '÷Åí}ÙEh«ðÒÍõ°@ÿ:j©ØvÛ"›ƒÊ‡ ÄŸØ<+ o+¿TaÀbîÀŒ_q3-=¶*‹ƒáƒChª6lyÛº¥«* Í™ì|j5|¶mv)”ŠX¨§7l%ò„Amš¼þ©–ä– 1fRÚÊÚœd#58*ùÆ‹O@éBba•/†Ná áŠEK·©]à‚T6ˆ>·{Œqî¬|ë‹Y‘p°l»2k‹ tR*„#¬Ñ!ÙA&VUÚÒœÉön-•Þ@H…ÌV'd‰ØWˆã¶I6«§<+0ÙCÕi«</™XqŸ1O”-³¢1"›$º=Ϫ]{ïìZFãµ[ØäÛ´;´W9¹ü,o¤]Bý©­›ªó׌R  .•/]5ó\´uZÿ é>–Zx Ÿ¾üûñãê¿4÷-=`q3>VåòýÓ‡‡»3ÿnK¬×P¹¥}ã@cvÐv(ò‚]I!ÎÔÞ8Qž¡ ¼K [oÞ¨M£¶÷ºD(Ðà–‰'1qçe£Èx›?µÇF*X¸­ù¡=äß‹¬ÚÕéiß¿<ô€NÖ44@Yž²Þiœ } qb‰‰B†Â(„$ö«}à}õÔºð–ŽÝ¯þÂçÿ¥]À£8–·JfÈýƒ¼Ì¯3Q/]’ïeŸ›ËïÕyq‰2,L’ 0ƒùI9%U~.©i½¬ÚÑÚ‚&½—ëEGƒï:ç½ê6É­7IÄõm„'¥ç‚ö ÌâðU¤EÿF£#v­5@Ù"Rv°Fž±!J?Ê2”m›OíêÚõ^À¾÷Ô-,-Ut@˜Ú`™¶gSc››W³Y¨Ð×’d3e Ù¥³Þ£Ÿ~b÷Yï]°=æiÙ?ŒS› .” \¡)mVrŠöÙÁ2EE»É.ó²&%©ŒkmpÁ‹¿yâC.4²}¢3ïÅxþ¹ÚäÔ»·…RsyíŽGÞ*ˆÇ¾<|òèÂŽE™‘û;%Rz¨ÿø·ªØŒŠþ±5-´_ðÀ@@ɪÌüh´Æ#†š¨³Øú] ,T5” ŠÉ7ªpJwoUáòK÷èCÅÃãÚãÝ!»çŸ"FûÁ˜¢ðÍ ®Á!D&ʪw>Ó{)°ÚÓ`¡ª<ß׿5o;«(¥Â×pîÃßuœÔ+8A!âÓr„Ó©jж/ž]ebvÇrZ<|"xö_Dï}ðîE¼ÿF^õæSÇ­?V´8ç$’v9–ÿO¤´endstream endobj 3891 0 obj << /Type /Page /Contents 3892 0 R /Resources 3890 0 R /MediaBox [0 0 609.714 789.041] /Parent 3956 0 R >> endobj 3893 0 obj << /D [3891 0 R /XYZ 95.641 729.265 null] >> endobj 3894 0 obj << /D [3891 0 R /XYZ 95.641 716.314 null] >> endobj 3895 0 obj << /D [3891 0 R /XYZ 95.641 716.314 null] >> endobj 3896 0 obj << /D [3891 0 R /XYZ 372.837 684.433 null] >> endobj 3897 0 obj << /D [3891 0 R /XYZ 95.641 668.279 null] >> endobj 3898 0 obj << /D [3891 0 R /XYZ 95.641 668.279 null] >> endobj 3899 0 obj << /D [3891 0 R /XYZ 95.641 619.462 null] >> endobj 3900 0 obj << /D [3891 0 R /XYZ 95.641 619.462 null] >> endobj 3901 0 obj << /D [3891 0 R /XYZ 154.112 608.717 null] >> endobj 3902 0 obj << /D [3891 0 R /XYZ 180.902 608.717 null] >> endobj 3903 0 obj << /D [3891 0 R /XYZ 202.312 608.717 null] >> endobj 3904 0 obj << /D [3891 0 R /XYZ 251.637 608.717 null] >> endobj 3905 0 obj << /D [3891 0 R /XYZ 401.913 608.717 null] >> endobj 3906 0 obj << /D [3891 0 R /XYZ 213.331 597.758 null] >> endobj 3907 0 obj << /D [3891 0 R /XYZ 465.654 597.758 null] >> endobj 3908 0 obj << /D [3891 0 R /XYZ 178.857 586.8 null] >> endobj 3909 0 obj << /D [3891 0 R /XYZ 400.668 586.8 null] >> endobj 3910 0 obj << /D [3891 0 R /XYZ 143.462 575.841 null] >> endobj 3911 0 obj << /D [3891 0 R /XYZ 323.209 575.841 null] >> endobj 3912 0 obj << /D [3891 0 R /XYZ 388.787 575.841 null] >> endobj 3913 0 obj << /D [3891 0 R /XYZ 243.386 564.882 null] >> endobj 3914 0 obj << /D [3891 0 R /XYZ 95.641 557.091 null] >> endobj 3915 0 obj << /D [3891 0 R /XYZ 163.47 548.941 null] >> endobj 3916 0 obj << /D [3891 0 R /XYZ 95.641 530.192 null] >> endobj 3917 0 obj << /D [3891 0 R /XYZ 95.641 530.192 null] >> endobj 3918 0 obj << /D [3891 0 R /XYZ 95.641 503.293 null] >> endobj 3919 0 obj << /D [3891 0 R /XYZ 95.641 503.293 null] >> endobj 3920 0 obj << /D [3891 0 R /XYZ 363.335 495.143 null] >> endobj 3921 0 obj << /D [3891 0 R /XYZ 448.634 495.143 null] >> endobj 3922 0 obj << /D [3891 0 R /XYZ 95.641 487.352 null] >> endobj 3923 0 obj << /D [3891 0 R /XYZ 95.641 487.352 null] >> endobj 3924 0 obj << /D [3891 0 R /XYZ 342.846 457.285 null] >> endobj 3925 0 obj << /D [3891 0 R /XYZ 394.378 457.285 null] >> endobj 3926 0 obj << /D [3891 0 R /XYZ 338.473 446.326 null] >> endobj 3927 0 obj << /D [3891 0 R /XYZ 376.457 446.326 null] >> endobj 3928 0 obj << /D [3891 0 R /XYZ 429.142 446.326 null] >> endobj 1291 0 obj << /D [3891 0 R /XYZ 95.641 416.618 null] >> endobj 874 0 obj << /D [3891 0 R /XYZ 230.919 386.242 null] >> endobj 3929 0 obj << /D [3891 0 R /XYZ 95.641 383.746 null] >> endobj 3930 0 obj << /D [3891 0 R /XYZ 95.641 366.312 null] >> endobj 3931 0 obj << /D [3891 0 R /XYZ 95.641 360.284 null] >> endobj 3932 0 obj << /D [3891 0 R /XYZ 95.641 350.322 null] >> endobj 3933 0 obj << /D [3891 0 R /XYZ 170.361 336.927 null] >> endobj 878 0 obj << /D [3891 0 R /XYZ 146.232 316.005 null] >> endobj 3934 0 obj << /D [3891 0 R /XYZ 95.641 311.024 null] >> endobj 3935 0 obj << /D [3891 0 R /XYZ 95.641 306.042 null] >> endobj 3936 0 obj << /D [3891 0 R /XYZ 95.641 271.671 null] >> endobj 3937 0 obj << /D [3891 0 R /XYZ 95.641 266.69 null] >> endobj 3938 0 obj << /D [3891 0 R /XYZ 95.641 256.727 null] >> endobj 3939 0 obj << /D [3891 0 R /XYZ 170.361 241.883 null] >> endobj 3940 0 obj << /D [3891 0 R /XYZ 209.096 241.883 null] >> endobj 3941 0 obj << /D [3891 0 R /XYZ 214.476 241.883 null] >> endobj 3942 0 obj << /D [3891 0 R /XYZ 241.957 241.883 null] >> endobj 882 0 obj << /D [3891 0 R /XYZ 146.232 220.961 null] >> endobj 3943 0 obj << /D [3891 0 R /XYZ 95.641 215.98 null] >> endobj 3944 0 obj << /D [3891 0 R /XYZ 95.641 210.999 null] >> endobj 3945 0 obj << /D [3891 0 R /XYZ 95.641 176.628 null] >> endobj 3946 0 obj << /D [3891 0 R /XYZ 95.641 171.646 null] >> endobj 3947 0 obj << /D [3891 0 R /XYZ 95.641 161.684 null] >> endobj 3948 0 obj << /D [3891 0 R /XYZ 170.361 146.839 null] >> endobj 3949 0 obj << /D [3891 0 R /XYZ 184.887 146.839 null] >> endobj 3950 0 obj << /D [3891 0 R /XYZ 190.266 146.839 null] >> endobj 886 0 obj << /D [3891 0 R /XYZ 146.232 125.918 null] >> endobj 3951 0 obj << /D [3891 0 R /XYZ 95.641 120.937 null] >> endobj 3952 0 obj << /D [3891 0 R /XYZ 95.641 115.955 null] >> endobj 3953 0 obj << /D [3891 0 R /XYZ 95.641 81.584 null] >> endobj 3954 0 obj << /D [3891 0 R /XYZ 95.641 76.603 null] >> endobj 3955 0 obj << /D [3891 0 R /XYZ 95.641 66.64 null] >> endobj 3890 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R /F26 1177 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3959 0 obj << /Length 543 /Filter /FlateDecode >> stream xÚ½•KoÚ@…÷ü /AªoæýPWmjUB*buÓváC,!vó÷{Ǽ#\)­ÃçØž¡Á ¬%h ™¦d>õH°À™Qz 8H£ë©ÏqïjÈm`Á*Äó"žýè_?&«2[B&IŸÁàWüõj(L`P¨j¡ %÷ê›ñ0ºO¢ûF·o()p©½îÛôn4ýt{;žŒçi4Œ¦Ñd@û×Q}n/Š·˜‚œá–ö8HÈ5…#c`©ØrÇÙOb¢ž$ºžc$µ^°ÈÊÔ-÷4Þ{$’zÑO"Éo—Ïp¤}X¹ räÁ“CAÁÞú6YÓj½PÓÏŠö·¬žŠæ8÷£«J,c…ß' !Åë04—ØÆúûÝøËi(ƶ¡ÖîõÔˆâ­cj/ÑéÝ•Àµ=Û\ë¡@3¾ó8Û†à ;hcå^ò2w>méšqÓ ¢Wq¹B;6þM|85 ´¼ìÀ.t©)Ã;tYÇhû´ ‰Úg­vn¸b†Z^$eöO‹O™;gÇ9ªxÇK0JÄ÷˜äú"ÍÑC5¯£ÍqíêðÝÇÓz-:À5¨í=+Î, ”éŠÎ4zˆ^d¯Ë¼ðÄéc²NÒò"°o¼ òËêÝ‘_VIú—ÀqŸËwǹêaéyŸ+WžCßßlB¡Á0‘ ׄƒíæÍMR²·ö,²þSÉÓÖendstream endobj 3958 0 obj << /Type /Page /Contents 3959 0 R /Resources 3957 0 R /MediaBox [0 0 609.714 789.041] /Parent 3956 0 R >> endobj 3960 0 obj << /D [3958 0 R /XYZ 95.641 729.265 null] >> endobj 3961 0 obj << /D [3958 0 R /XYZ 164.981 706.351 null] >> endobj 890 0 obj << /D [3958 0 R /XYZ 146.232 685.43 null] >> endobj 3962 0 obj << /D [3958 0 R /XYZ 95.641 680.448 null] >> endobj 3963 0 obj << /D [3958 0 R /XYZ 95.641 675.467 null] >> endobj 3964 0 obj << /D [3958 0 R /XYZ 95.641 641.096 null] >> endobj 3965 0 obj << /D [3958 0 R /XYZ 95.641 636.115 null] >> endobj 3966 0 obj << /D [3958 0 R /XYZ 95.641 626.152 null] >> endobj 3967 0 obj << /D [3958 0 R /XYZ 170.361 611.308 null] >> endobj 3968 0 obj << /D [3958 0 R /XYZ 184.887 611.308 null] >> endobj 3969 0 obj << /D [3958 0 R /XYZ 190.266 611.308 null] >> endobj 894 0 obj << /D [3958 0 R /XYZ 146.232 590.386 null] >> endobj 3970 0 obj << /D [3958 0 R /XYZ 95.641 585.405 null] >> endobj 3971 0 obj << /D [3958 0 R /XYZ 95.641 580.423 null] >> endobj 3972 0 obj << /D [3958 0 R /XYZ 95.641 546.052 null] >> endobj 3973 0 obj << /D [3958 0 R /XYZ 95.641 541.071 null] >> endobj 3974 0 obj << /D [3958 0 R /XYZ 95.641 531.108 null] >> endobj 3975 0 obj << /D [3958 0 R /XYZ 170.361 516.264 null] >> endobj 3976 0 obj << /D [3958 0 R /XYZ 184.887 516.264 null] >> endobj 3977 0 obj << /D [3958 0 R /XYZ 190.266 516.264 null] >> endobj 3978 0 obj << /D [3958 0 R /XYZ 217.748 516.264 null] >> endobj 898 0 obj << /D [3958 0 R /XYZ 146.232 495.342 null] >> endobj 3979 0 obj << /D [3958 0 R /XYZ 95.641 490.361 null] >> endobj 3980 0 obj << /D [3958 0 R /XYZ 95.641 485.38 null] >> endobj 3981 0 obj << /D [3958 0 R /XYZ 95.641 451.009 null] >> endobj 3982 0 obj << /D [3958 0 R /XYZ 95.641 446.027 null] >> endobj 3983 0 obj << /D [3958 0 R /XYZ 95.641 436.065 null] >> endobj 3984 0 obj << /D [3958 0 R /XYZ 170.361 421.22 null] >> endobj 902 0 obj << /D [3958 0 R /XYZ 146.232 400.299 null] >> endobj 3985 0 obj << /D [3958 0 R /XYZ 95.641 395.318 null] >> endobj 3986 0 obj << /D [3958 0 R /XYZ 95.641 390.336 null] >> endobj 3987 0 obj << /D [3958 0 R /XYZ 95.641 355.965 null] >> endobj 3988 0 obj << /D [3958 0 R /XYZ 95.641 350.984 null] >> endobj 3989 0 obj << /D [3958 0 R /XYZ 95.641 341.021 null] >> endobj 3990 0 obj << /D [3958 0 R /XYZ 181.121 326.177 null] >> endobj 906 0 obj << /D [3958 0 R /XYZ 146.232 305.255 null] >> endobj 3991 0 obj << /D [3958 0 R /XYZ 95.641 300.274 null] >> endobj 3992 0 obj << /D [3958 0 R /XYZ 95.641 295.293 null] >> endobj 3993 0 obj << /D [3958 0 R /XYZ 95.641 260.922 null] >> endobj 3994 0 obj << /D [3958 0 R /XYZ 95.641 255.94 null] >> endobj 3995 0 obj << /D [3958 0 R /XYZ 95.641 245.978 null] >> endobj 3996 0 obj << /D [3958 0 R /XYZ 181.121 231.133 null] >> endobj 910 0 obj << /D [3958 0 R /XYZ 146.232 210.212 null] >> endobj 3997 0 obj << /D [3958 0 R /XYZ 95.641 205.23 null] >> endobj 3998 0 obj << /D [3958 0 R /XYZ 95.641 200.249 null] >> endobj 3999 0 obj << /D [3958 0 R /XYZ 95.641 165.878 null] >> endobj 4000 0 obj << /D [3958 0 R /XYZ 95.641 160.897 null] >> endobj 4001 0 obj << /D [3958 0 R /XYZ 95.641 150.934 null] >> endobj 4002 0 obj << /D [3958 0 R /XYZ 181.121 136.09 null] >> endobj 914 0 obj << /D [3958 0 R /XYZ 146.232 115.168 null] >> endobj 4003 0 obj << /D [3958 0 R /XYZ 95.641 110.187 null] >> endobj 4004 0 obj << /D [3958 0 R /XYZ 95.641 105.206 null] >> endobj 4005 0 obj << /D [3958 0 R /XYZ 95.641 70.834 null] >> endobj 4006 0 obj << /D [3958 0 R /XYZ 95.641 65.853 null] >> endobj 3957 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4009 0 obj << /Length 1462 /Filter /FlateDecode >> stream xÚÅXKÛ6¾ï¯ðQ ÄŒø’(ì)I½‹-’ÝÀ1ÚCÓƒV¢m¡¶dHrœüû 9¤,YÚf‹-|5Îã›áÌÈtÂÎI"Ag1K‹ä,Û_…³ ìÜ]QÇA'*f3N¤Š ÃÛÕÕë[žÌ’D|¶Z[¾UþGðn›Z]_Ï™ F®ÿ\ýúúV¨™ÆÈ0 A¤äŽûýýíâýýÃâòõJJ¸ŒßÇåãÝò͇÷w(y¹¸],×4x·0g¯«ÎXÆŠd6﬽tgÎãDðdŒ$Tt y¶Ó;ôÛãý/Î ³Æf“ED%‰ã(õi]ìtɉàZâ]ýÊpŒ†$\9†O«¥qo,…‘H1Çôj,‚†$ŽÜöÛÇÇ÷c Œìl½qpË3ÜsJ)a1`"(Q‚[ÞF—9â}¨¯© ªMî‘PÛñÅu[¹çâQ4øò9 Ù(s :™œÍ%'lÚqĘÇ$’cP÷BŒ¿TEþœS‹.Z¿t{¬K4»L÷Úy¸Ægv¬‘©l‡X€³“p¼Èó¾0»²êðí׉Á½3½ž®|‘Æ®¿VU¶T3LŒ.{²ŸE̤øâÍÃ4ÁIÈ=h­nÚ±8Æ£ø¿¼?:eœ$JP7Ž9pו«²Ù6­Ó ŠnÑ´EÖô²W$AúOoã3òPåºL@Œ’ÿÝy$d@ “ƤÂÌ ×°* ‹¹¦…õf˜ÏM›–yj“:÷Ù ©}NèSQæÕÉ(ë!̈ ã¥>Tµ#ƒ,5¥‡GÁ“FÂF—ºN[#¹(‘Üž*\ì«\7¯psW”úLEZj‹6馷9K"¨±Ô7ce¥Œ0¸Ä_œFïtÆ[ç¸`$„øÌ!. TkÃàl¢ÔÛD™µi¤>=íÆØgµS!/´[ùÎAoNÞ qJ}á´[·•ëuzܵ·Wžl®IÝ´^:”÷¹ b˜8‰~jœsà<äŶ0Tñ9×Ch&óf² <{£)ÇŽÉEƒ Ïa´Ü\Hh4”äÜïƒCg«/´ñ ™¨Ðú‹‘ËÖ9[íŽûÒœWÊéW˜o—¿ou‰»6}‚Z`áâ[.>@Ãk.¾wÍÁhvª‹¶ÕNZ^à‘¬Ý}sò+d7zŒùáÐp/0ç~Ë mð‰ÖÁæpÐúZÇÒÞ7ØvÆýéÛ™B䜢u(.Aâ|Zߔ©:®ÚµF¯ò   …²B\ž¶E¶Å%–#íèVÐü9ô°îÀ°ÒàÈ8‘9Lâ]I6ÊáüD"‡„rÖOd˜¥»Î ¾|D0Dxaƒks &O"aï{|lôú¸3L¹f W±$ûi~XI•m:zó _:/6ˆ‰³zqOÕ×þ¦éøXt€ÂkѺ§;—ê‹. ð"T¾MdÕpÖ~8ö‹S5Ï ˜2iP6EU¦;¤ïª üªÊáô‰±š¨ÝF¥$‰À¯®j7Ž5Ÿs]Ó®šÂHû9] ˜µ1×>…f±)¾˜Ü1K¼è_î׌ƒÑøÌŽë©rAHmÝÁãiyä{¤1µ"æóæ¸áRÎ¥‘nbà ?ß(³¶Îpo#¼3x­ƒýÊÑ:¾Ru"ðF'ø@ФïCÏ!.ºéäTÕ9‹ÒuK¸J”ÓŸOU»ÅPÛ¾>5ÅD$V¾ûÞé6›R CLÜûüQÓ\$ßècÆbbR_‹òâÀ³ù7OàÆÊ¨Ÿ…Ky.0I4ÎB¦¢^™÷õ»ëQ¯›†ãg\Ü5e³çúãÍÔ„ÖMõ³ÖzœÌL;*±Ë¸ (P›r\ùØ2c$¶KWþ]lÉåsÅà ß¹D²É¿*D¨ˆ°ý»]$¿”mXžò"¿Œ’¦endstream endobj 4008 0 obj << /Type /Page /Contents 4009 0 R /Resources 4007 0 R /MediaBox [0 0 609.714 789.041] /Parent 3956 0 R >> endobj 4010 0 obj << /D [4008 0 R /XYZ 95.641 729.265 null] >> endobj 4011 0 obj << /D [4008 0 R /XYZ 95.641 741.22 null] >> endobj 4012 0 obj << /D [4008 0 R /XYZ 95.641 716.314 null] >> endobj 4013 0 obj << /D [4008 0 R /XYZ 170.361 706.351 null] >> endobj 4014 0 obj << /D [4008 0 R /XYZ 204.254 706.351 null] >> endobj 4015 0 obj << /D [4008 0 R /XYZ 209.634 706.351 null] >> endobj 4016 0 obj << /D [4008 0 R /XYZ 253.076 706.351 null] >> endobj 918 0 obj << /D [4008 0 R /XYZ 146.232 685.43 null] >> endobj 4017 0 obj << /D [4008 0 R /XYZ 95.641 680.448 null] >> endobj 4018 0 obj << /D [4008 0 R /XYZ 95.641 675.467 null] >> endobj 4019 0 obj << /D [4008 0 R /XYZ 95.641 641.096 null] >> endobj 4020 0 obj << /D [4008 0 R /XYZ 95.641 636.115 null] >> endobj 4021 0 obj << /D [4008 0 R /XYZ 95.641 626.152 null] >> endobj 4022 0 obj << /D [4008 0 R /XYZ 181.121 611.308 null] >> endobj 922 0 obj << /D [4008 0 R /XYZ 146.232 590.386 null] >> endobj 4023 0 obj << /D [4008 0 R /XYZ 95.641 585.405 null] >> endobj 4024 0 obj << /D [4008 0 R /XYZ 95.641 580.423 null] >> endobj 4025 0 obj << /D [4008 0 R /XYZ 95.641 546.052 null] >> endobj 4026 0 obj << /D [4008 0 R /XYZ 95.641 541.071 null] >> endobj 4027 0 obj << /D [4008 0 R /XYZ 95.641 531.108 null] >> endobj 4028 0 obj << /D [4008 0 R /XYZ 170.361 516.264 null] >> endobj 4029 0 obj << /D [4008 0 R /XYZ 209.096 516.264 null] >> endobj 4030 0 obj << /D [4008 0 R /XYZ 214.476 516.264 null] >> endobj 926 0 obj << /D [4008 0 R /XYZ 146.232 495.342 null] >> endobj 4031 0 obj << /D [4008 0 R /XYZ 95.641 490.361 null] >> endobj 4032 0 obj << /D [4008 0 R /XYZ 95.641 485.38 null] >> endobj 4033 0 obj << /D [4008 0 R /XYZ 95.641 451.009 null] >> endobj 4034 0 obj << /D [4008 0 R /XYZ 95.641 446.027 null] >> endobj 4035 0 obj << /D [4008 0 R /XYZ 95.641 436.065 null] >> endobj 4036 0 obj << /D [4008 0 R /XYZ 186.501 421.22 null] >> endobj 4037 0 obj << /D [4008 0 R /XYZ 205.868 421.22 null] >> endobj 4038 0 obj << /D [4008 0 R /XYZ 211.248 421.22 null] >> endobj 4039 0 obj << /D [4008 0 R /XYZ 254.69 421.22 null] >> endobj 4040 0 obj << /D [4008 0 R /XYZ 254.69 421.22 null] >> endobj 930 0 obj << /D [4008 0 R /XYZ 146.232 400.299 null] >> endobj 4041 0 obj << /D [4008 0 R /XYZ 95.641 395.318 null] >> endobj 4042 0 obj << /D [4008 0 R /XYZ 95.641 390.336 null] >> endobj 4043 0 obj << /D [4008 0 R /XYZ 95.641 355.965 null] >> endobj 4044 0 obj << /D [4008 0 R /XYZ 95.641 350.984 null] >> endobj 4045 0 obj << /D [4008 0 R /XYZ 95.641 341.021 null] >> endobj 4046 0 obj << /D [4008 0 R /XYZ 170.361 326.177 null] >> endobj 4047 0 obj << /D [4008 0 R /XYZ 194.57 326.177 null] >> endobj 4048 0 obj << /D [4008 0 R /XYZ 199.95 326.177 null] >> endobj 4049 0 obj << /D [4008 0 R /XYZ 243.392 326.177 null] >> endobj 4050 0 obj << /D [4008 0 R /XYZ 243.392 326.177 null] >> endobj 4051 0 obj << /D [4008 0 R /XYZ 281.454 326.177 null] >> endobj 4052 0 obj << /D [4008 0 R /XYZ 281.454 326.177 null] >> endobj 934 0 obj << /D [4008 0 R /XYZ 146.232 305.255 null] >> endobj 4053 0 obj << /D [4008 0 R /XYZ 95.641 300.274 null] >> endobj 4054 0 obj << /D [4008 0 R /XYZ 95.641 295.293 null] >> endobj 4055 0 obj << /D [4008 0 R /XYZ 95.641 242.491 null] >> endobj 4056 0 obj << /D [4008 0 R /XYZ 440.113 231.532 null] >> endobj 4057 0 obj << /D [4008 0 R /XYZ 208.113 220.573 null] >> endobj 4058 0 obj << /D [4008 0 R /XYZ 173.105 209.614 null] >> endobj 4059 0 obj << /D [4008 0 R /XYZ 374.844 176.737 null] >> endobj 4060 0 obj << /D [4008 0 R /XYZ 95.641 147.029 null] >> endobj 4061 0 obj << /D [4008 0 R /XYZ 95.641 147.029 null] >> endobj 4062 0 obj << /D [4008 0 R /XYZ 455.117 127.92 null] >> endobj 4063 0 obj << /D [4008 0 R /XYZ 200.249 116.961 null] >> endobj 4064 0 obj << /D [4008 0 R /XYZ 95.641 109.171 null] >> endobj 4065 0 obj << /D [4008 0 R /XYZ 95.641 109.171 null] >> endobj 4066 0 obj << /D [4008 0 R /XYZ 408.703 101.021 null] >> endobj 4007 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4069 0 obj << /Length 2148 /Filter /FlateDecode >> stream xÚÕYÝoÛ8ï_á·u€˜+Š¢>®OÝÖ)²H“"ñ-pØ.ªEÇÂÊ’kÉqÓ¿þf8$EÙò&{o?hH‡?·4Ÿðã“L²8â“$ÌXËÉró&˜<ÂÈÇ7ÜpÁdšàÐ/‹7?_‰l’±,“ÅJs,Šß§ï×ù¶S»‹Y(ƒiÈ.þXüúóU”NR`Œ‘1Š˜”Âpß\_Ío®oçÄç ”œ ™¾Ï÷wïß}út}û‘$ßϯæ÷óÛ >}?ǹoæ 3â)‹ŸÌÚãÌD°¾aÈ2¹ E²Çi7ô¹i 8Ùƒã‹2 nÛ´eW6u{1"™6ûn»ïˆîúæôi·jY~ ‚PÔ±»àé´] _m–MµßÔ–n4_QÖy§ÞÉkEŠÛµf½\3>î7ªîõdfÎxÀ2™i¼= @ ¦&YHxp²pzIÓ€­UËÆv ‹z.Ú‚õO³a²(ÈþV¿)K’Ôp,óš$6uõLÔWE‹í[ep”†g›?*ÚysÆÓáÖ7M¡FÀ$YižÛjOÄ7p»²CÝËX›U&ÓZ¨]•µY®ó]¾Ô€MíÒZ :œ“Ú«À®§Š "%ÖÍÚí+pµ`í6_¾Œ½¶ ‚G¾bq†¡Ð8¡ê6:Æ æ8ƒ,b-÷­ !çLk1kqø §ßö ª{<Ì8‚˜±›< :ŽÁU`[ÝÀ¼à¤të¼Ñm˜°$20¾pÕ/@Ý-DWJOÊO/HA_ÖÊRB •­½’›ñj e·Öž tÛíÊú‘è§¼‚-îµê ©5_¿jKŸs ¯`pTrQlP\Q4û¯•é´Úr¹†%ŒÚƒFVe¥NwAF±sa/Y‹ ‰:ߪY ™M5»Î0àÎmô½á±qݵ}/eEÜ©ŸuOy¼>Iù©%ãоm ú}šLK\ —Óôh Íf¸töÂïv«,7,'òGêŸöÕ@zŠ6Þ«¡¨º©g?”ÉÒº‡L ÜNK Î@ÚÎôv‚ÁFîS5&ØKÓcS‘n "Öˆ°Ã Ò}¦«G#lîö ±6ƒæIí\~òAhÌtkÛûÃÖ¸£Î×ïé¼÷,MücD@ÚÀ0˜^rÌf•>‹¡¹ÉëgbèÊjßštT^UÍ¡%ÞœºZÈJ=Ø2´) ›Ç]¾1’šû¨jµƒƒÜ¸šF88£Gv¤Eh»C#³ši©Qì!5Àf Ÿ>…€PßÕr¥ £öç“™InkØë¦óþ¶/‰(¨Wo¾žÎ$¥h9g‘°XÚ£_ÇSl<¾ƒÀ‰ &ŽQŸ®%Œ»Š²\©Èq#ET”¡u†|ß5›¼+—`Õg’·™…WÍÎ-g èô„T³^lt53ÕV³ö78m?̨î¼òÒÖÙ´Êõä»}wÖ³ydIºý®n3>7yu0´Üc® ©ö¤ð=îÕˆg‹w¼o¶ÏgpKr{,›m©Ï0X•pñÌK Ø­aCoNMA]úÔógú̡ҡwßÒ@i¥em µóõë™C—B• û¶=¬›Â¥k’ a  Œ`HoGP±#„‡ §­Ž¦¹Í !œt Ê¿¶Pjwv-í¼@-+pò'°³ºtÂë~™ÓãáæÆÜµP ¸Æe¦¶JJ`¯»“'” —FmÐZ•©î’ØeU¥+øšHæ‰1ž¡d¨6t›bÛã‰o¹“Þ‘ ”&8èlåJ2<:?9 vàŠÅ°œr¡ò?…Å >Z¨v¤K3ÄF["`­–!™uòGø nØaŽ™­ÂXîž©“¼,³žt2-õÊe]X6W5é]l€èÚt’óeÎyff ƒ„g!!Î9^$…´§º®nÂÎãÚ,2µ™cú{Æ£¾‡ýÍ¡ŒoÉ’jKa¶ÇŽ>³^d¥Üz§^Dsó"§Ê8 ð†Ž¬ÖÞ‡fBŤæÀ§Ÿðýd‚Þ5í:¡ûI­7)ðV[ZnÆŽŠ@œTþ0Óœ‰ÓýmÒ9íÉ ¹•”¹`ͨåäàÈ÷²ÕARÀ÷\ÖkÔ™,äÇéxKqXO /þ©@£È^ZaJ–e×ìžGìJ®qïÈÄvàÒwdDÂwqÿo@;§†ŽCø^]$ÑôÝÍÃü’æ jº˜![MßÃZÿ³‹º½FhÏâhÔÒ‘ºÝ*ÊBæ• ‚—ÒÏg8ÅFòXÛÊi‹<ú +5%ÿñƒ’²×Ðþy+µQ8ˆwƺ iuöb)$9|PÓaì¹#Ž˜Ò‡óäMþLb×ù“ÉG"Œá^Ÿ1ì•×&všsÁÛ½â†1ÞØ)©´IXâƒaÊxœ./Ä-Ì”ÓV›;I§ª#âj_/Í[ 6éàâãüÃû»ODÏ¿wp«Æ{0žªÁ.eLp©—üíîúƒÇ$¤.ïðµ–pðžJ˜Ÿ­¾¾28}‘•LØç‰‡ùâÏßF,ka/„¿=5Ì,‰XˆU \žÓHhÖB-+wÃÐ 7Oª³ïPH|­Fîøp™…r2“‚…¥ò¢èšq=¤,òèaä±<˹çåé|ð¸ÄV¶×·®GôÈA‚|„w·ÿ…eüCp4W” ,ŠXÒ9¯žqþÞ¯4F¡*Õ©Õ®ÙŒŠŒCÈNÑÿ‘E~¹»»• Ó—bƒKPŒ3Iä•›æIµÌŠrþfÌ>þ?.MÁÝšÉpðŸÇÙjdtî“ÀŸÿ_é!¬_endstream endobj 4068 0 obj << /Type /Page /Contents 4069 0 R /Resources 4067 0 R /MediaBox [0 0 609.714 789.041] /Parent 3956 0 R >> endobj 4070 0 obj << /D [4068 0 R /XYZ 95.641 729.265 null] >> endobj 4071 0 obj << /D [4068 0 R /XYZ 95.641 716.314 null] >> endobj 4072 0 obj << /D [4068 0 R /XYZ 95.641 716.314 null] >> endobj 4073 0 obj << /D [4068 0 R /XYZ 385.871 695.392 null] >> endobj 4074 0 obj << /D [4068 0 R /XYZ 362.249 668.493 null] >> endobj 4075 0 obj << /D [4068 0 R /XYZ 213.11 657.534 null] >> endobj 4076 0 obj << /D [4068 0 R /XYZ 453.828 657.534 null] >> endobj 4077 0 obj << /D [4068 0 R /XYZ 485.891 657.534 null] >> endobj 4078 0 obj << /D [4068 0 R /XYZ 95.641 638.785 null] >> endobj 4079 0 obj << /D [4068 0 R /XYZ 95.641 638.785 null] >> endobj 4080 0 obj << /D [4068 0 R /XYZ 143.462 597.758 null] >> endobj 4081 0 obj << /D [4068 0 R /XYZ 143.462 575.841 null] >> endobj 4082 0 obj << /D [4068 0 R /XYZ 278.251 575.841 null] >> endobj 4083 0 obj << /D [4068 0 R /XYZ 95.641 557.091 null] >> endobj 4084 0 obj << /D [4068 0 R /XYZ 95.641 557.091 null] >> endobj 4085 0 obj << /D [4068 0 R /XYZ 95.641 541.151 null] >> endobj 4086 0 obj << /D [4068 0 R /XYZ 95.641 541.151 null] >> endobj 4087 0 obj << /D [4068 0 R /XYZ 143.462 511.083 null] >> endobj 4088 0 obj << /D [4068 0 R /XYZ 95.641 492.334 null] >> endobj 4089 0 obj << /D [4068 0 R /XYZ 95.641 492.334 null] >> endobj 4090 0 obj << /D [4068 0 R /XYZ 95.641 421.599 null] >> endobj 4091 0 obj << /D [4068 0 R /XYZ 95.641 421.599 null] >> endobj 4092 0 obj << /D [4068 0 R /XYZ 439.947 413.45 null] >> endobj 1292 0 obj << /D [4068 0 R /XYZ 95.641 394.7 null] >> endobj 938 0 obj << /D [4068 0 R /XYZ 363.701 364.324 null] >> endobj 4093 0 obj << /D [4068 0 R /XYZ 95.641 364.173 null] >> endobj 4094 0 obj << /D [4068 0 R /XYZ 95.641 346.739 null] >> endobj 4095 0 obj << /D [4068 0 R /XYZ 95.641 340.711 null] >> endobj 4096 0 obj << /D [4068 0 R /XYZ 95.641 330.749 null] >> endobj 4097 0 obj << /D [4068 0 R /XYZ 170.361 315.009 null] >> endobj 4098 0 obj << /D [4068 0 R /XYZ 204.254 315.009 null] >> endobj 4099 0 obj << /D [4068 0 R /XYZ 209.634 315.009 null] >> endobj 942 0 obj << /D [4068 0 R /XYZ 146.232 294.087 null] >> endobj 4100 0 obj << /D [4068 0 R /XYZ 95.641 289.106 null] >> endobj 4101 0 obj << /D [4068 0 R /XYZ 95.641 284.125 null] >> endobj 4102 0 obj << /D [4068 0 R /XYZ 95.641 249.753 null] >> endobj 4103 0 obj << /D [4068 0 R /XYZ 95.641 244.772 null] >> endobj 4104 0 obj << /D [4068 0 R /XYZ 95.641 234.809 null] >> endobj 4105 0 obj << /D [4068 0 R /XYZ 170.361 219.965 null] >> endobj 4106 0 obj << /D [4068 0 R /XYZ 209.096 219.965 null] >> endobj 4107 0 obj << /D [4068 0 R /XYZ 214.476 219.965 null] >> endobj 4108 0 obj << /D [4068 0 R /XYZ 241.957 219.965 null] >> endobj 4109 0 obj << /D [4068 0 R /XYZ 274.443 219.965 null] >> endobj 946 0 obj << /D [4068 0 R /XYZ 146.232 199.044 null] >> endobj 4110 0 obj << /D [4068 0 R /XYZ 95.641 194.062 null] >> endobj 4111 0 obj << /D [4068 0 R /XYZ 95.641 189.081 null] >> endobj 4112 0 obj << /D [4068 0 R /XYZ 95.641 154.71 null] >> endobj 4113 0 obj << /D [4068 0 R /XYZ 95.641 149.729 null] >> endobj 4114 0 obj << /D [4068 0 R /XYZ 95.641 139.766 null] >> endobj 4115 0 obj << /D [4068 0 R /XYZ 170.361 124.922 null] >> endobj 4116 0 obj << /D [4068 0 R /XYZ 233.305 124.922 null] >> endobj 4117 0 obj << /D [4068 0 R /XYZ 238.685 124.922 null] >> endobj 4118 0 obj << /D [4068 0 R /XYZ 266.167 124.922 null] >> endobj 4119 0 obj << /D [4068 0 R /XYZ 298.652 124.922 null] >> endobj 950 0 obj << /D [4068 0 R /XYZ 146.232 104 null] >> endobj 4120 0 obj << /D [4068 0 R /XYZ 95.641 99.019 null] >> endobj 4121 0 obj << /D [4068 0 R /XYZ 95.641 94.037 null] >> endobj 4122 0 obj << /D [4068 0 R /XYZ 95.641 59.666 null] >> endobj 4067 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R /F26 1177 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4125 0 obj << /Length 516 /Filter /FlateDecode >> stream xÚÕ–QoÚ0…ßù~i¹µ¯}c[{Úª€˜ZVѼm{@J$P“jÒ~ýl↲6:©ÊÃäã“{>nãîÌÄJ00&6ÿÞãìÁ­Œz"(„‘`42 d´|L{WCi™K–.wºtñ¥½šm«ìq!ñ>Âà[úéj¨ 3N{¡R@$ƒúf> endobj 4126 0 obj << /D [4124 0 R /XYZ 95.641 729.265 null] >> endobj 4127 0 obj << /D [4124 0 R /XYZ 95.641 716.314 null] >> endobj 4128 0 obj << /D [4124 0 R /XYZ 95.641 716.314 null] >> endobj 4129 0 obj << /D [4124 0 R /XYZ 164.981 706.351 null] >> endobj 4130 0 obj << /D [4124 0 R /XYZ 194.032 706.351 null] >> endobj 4131 0 obj << /D [4124 0 R /XYZ 199.412 706.351 null] >> endobj 954 0 obj << /D [4124 0 R /XYZ 146.232 685.43 null] >> endobj 4132 0 obj << /D [4124 0 R /XYZ 95.641 680.448 null] >> endobj 4133 0 obj << /D [4124 0 R /XYZ 95.641 675.467 null] >> endobj 4134 0 obj << /D [4124 0 R /XYZ 95.641 641.096 null] >> endobj 4135 0 obj << /D [4124 0 R /XYZ 95.641 636.115 null] >> endobj 4136 0 obj << /D [4124 0 R /XYZ 95.641 626.152 null] >> endobj 4137 0 obj << /D [4124 0 R /XYZ 164.981 611.308 null] >> endobj 4138 0 obj << /D [4124 0 R /XYZ 189.191 611.308 null] >> endobj 4139 0 obj << /D [4124 0 R /XYZ 194.57 611.308 null] >> endobj 4140 0 obj << /D [4124 0 R /XYZ 222.052 611.308 null] >> endobj 958 0 obj << /D [4124 0 R /XYZ 146.232 590.386 null] >> endobj 4141 0 obj << /D [4124 0 R /XYZ 95.641 585.405 null] >> endobj 4142 0 obj << /D [4124 0 R /XYZ 95.641 580.423 null] >> endobj 4143 0 obj << /D [4124 0 R /XYZ 95.641 546.052 null] >> endobj 4144 0 obj << /D [4124 0 R /XYZ 95.641 541.071 null] >> endobj 4145 0 obj << /D [4124 0 R /XYZ 95.641 531.108 null] >> endobj 4146 0 obj << /D [4124 0 R /XYZ 164.981 516.264 null] >> endobj 4147 0 obj << /D [4124 0 R /XYZ 208.558 516.264 null] >> endobj 4148 0 obj << /D [4124 0 R /XYZ 213.938 516.264 null] >> endobj 4149 0 obj << /D [4124 0 R /XYZ 241.42 516.264 null] >> endobj 962 0 obj << /D [4124 0 R /XYZ 146.232 495.342 null] >> endobj 4150 0 obj << /D [4124 0 R /XYZ 95.641 490.361 null] >> endobj 4151 0 obj << /D [4124 0 R /XYZ 95.641 485.38 null] >> endobj 4152 0 obj << /D [4124 0 R /XYZ 95.641 451.009 null] >> endobj 4153 0 obj << /D [4124 0 R /XYZ 95.641 446.027 null] >> endobj 4154 0 obj << /D [4124 0 R /XYZ 95.641 436.065 null] >> endobj 4155 0 obj << /D [4124 0 R /XYZ 164.981 421.22 null] >> endobj 4156 0 obj << /D [4124 0 R /XYZ 213.4 421.22 null] >> endobj 4157 0 obj << /D [4124 0 R /XYZ 218.78 421.22 null] >> endobj 4158 0 obj << /D [4124 0 R /XYZ 246.261 421.22 null] >> endobj 966 0 obj << /D [4124 0 R /XYZ 146.232 400.299 null] >> endobj 4159 0 obj << /D [4124 0 R /XYZ 95.641 395.318 null] >> endobj 4160 0 obj << /D [4124 0 R /XYZ 95.641 390.336 null] >> endobj 4161 0 obj << /D [4124 0 R /XYZ 95.641 355.965 null] >> endobj 4162 0 obj << /D [4124 0 R /XYZ 95.641 350.984 null] >> endobj 4163 0 obj << /D [4124 0 R /XYZ 95.641 341.021 null] >> endobj 4164 0 obj << /D [4124 0 R /XYZ 164.981 326.177 null] >> endobj 4165 0 obj << /D [4124 0 R /XYZ 208.558 326.177 null] >> endobj 4166 0 obj << /D [4124 0 R /XYZ 213.938 326.177 null] >> endobj 970 0 obj << /D [4124 0 R /XYZ 146.232 305.255 null] >> endobj 4167 0 obj << /D [4124 0 R /XYZ 95.641 300.274 null] >> endobj 4168 0 obj << /D [4124 0 R /XYZ 95.641 295.293 null] >> endobj 4169 0 obj << /D [4124 0 R /XYZ 95.641 260.922 null] >> endobj 4170 0 obj << /D [4124 0 R /XYZ 95.641 255.94 null] >> endobj 4171 0 obj << /D [4124 0 R /XYZ 95.641 245.978 null] >> endobj 4172 0 obj << /D [4124 0 R /XYZ 164.981 231.133 null] >> endobj 4173 0 obj << /D [4124 0 R /XYZ 203.716 231.133 null] >> endobj 4174 0 obj << /D [4124 0 R /XYZ 209.096 231.133 null] >> endobj 974 0 obj << /D [4124 0 R /XYZ 146.232 210.212 null] >> endobj 4175 0 obj << /D [4124 0 R /XYZ 95.641 205.23 null] >> endobj 4176 0 obj << /D [4124 0 R /XYZ 95.641 200.249 null] >> endobj 4177 0 obj << /D [4124 0 R /XYZ 95.641 165.878 null] >> endobj 4178 0 obj << /D [4124 0 R /XYZ 95.641 160.897 null] >> endobj 4179 0 obj << /D [4124 0 R /XYZ 95.641 150.934 null] >> endobj 4180 0 obj << /D [4124 0 R /XYZ 164.981 136.09 null] >> endobj 4181 0 obj << /D [4124 0 R /XYZ 208.558 136.09 null] >> endobj 4182 0 obj << /D [4124 0 R /XYZ 213.938 136.09 null] >> endobj 978 0 obj << /D [4124 0 R /XYZ 146.232 115.168 null] >> endobj 4183 0 obj << /D [4124 0 R /XYZ 95.641 110.187 null] >> endobj 4184 0 obj << /D [4124 0 R /XYZ 95.641 105.206 null] >> endobj 4185 0 obj << /D [4124 0 R /XYZ 95.641 70.834 null] >> endobj 4186 0 obj << /D [4124 0 R /XYZ 95.641 65.853 null] >> endobj 4123 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4189 0 obj << /Length 535 /Filter /FlateDecode >> stream xÚÍ–KoÚ@…÷üŠYÂÂßy²jSƒ¨ò±ºi»p`H­C±‰”ßk< \)‰*ciޝÏù¸×c !þ€XI•¢™¥LI2žuBò„;ƒxEH8•FW[ŸãÎEŸ[b©UœÄÓµ"ž|ï^ýJ¥[ö&Ã.£½Ÿñ׋¾0Ä PUB!¨”Ü«¯‡ýèzx=Ժ݂(—ÚëîGwƒÑ§››áí ®<ŠúÑ(ºíA÷*ªîíDqcS€¡‚ ·¯ƒ\‡Táʵ š@Bn}n=D±Qm†ºÚc@%X/(ÒÇ,ÍŸ Wîè6aÑI#üÊð‡¤Ü}”ßE5cÛpéYÉ-«@3 I €Ák[ègj>­×$Ëê‹áÃg€%Ö‘œ²vé“|ìŠr¾<¿*£à\|mÏæççò+j±YÚåo,ŸB;WŒ]>qyy‚Ââý{À(œß–v,¿-„äÿƒÌœO_„w奟‰…ÃwIVÍÅ›ŒÅ*Oÿ¬Üñw¾–´~JS¦ù‹eL×ÍæÏžÈdµÈÒqR:OfºÌgžI…¤l×ßî†_‰(jì†HŽÿC1_©Ç Õèü#€€ýæ¨ ­Ã¦ù$mæåñ¥^+ÏmÚá|úßîåDxŽ*þáq•ý—ðh¹¾xN2lå×§l 'ÃUIK%Û;gO~Huê°wïÿ ¸>endstream endobj 4188 0 obj << /Type /Page /Contents 4189 0 R /Resources 4187 0 R /MediaBox [0 0 609.714 789.041] /Parent 3956 0 R >> endobj 4190 0 obj << /D [4188 0 R /XYZ 95.641 729.265 null] >> endobj 4191 0 obj << /D [4188 0 R /XYZ 95.641 716.314 null] >> endobj 4192 0 obj << /D [4188 0 R /XYZ 164.981 706.351 null] >> endobj 4193 0 obj << /D [4188 0 R /XYZ 213.4 706.351 null] >> endobj 4194 0 obj << /D [4188 0 R /XYZ 218.78 706.351 null] >> endobj 982 0 obj << /D [4188 0 R /XYZ 146.232 685.43 null] >> endobj 4195 0 obj << /D [4188 0 R /XYZ 95.641 680.448 null] >> endobj 4196 0 obj << /D [4188 0 R /XYZ 95.641 675.467 null] >> endobj 4197 0 obj << /D [4188 0 R /XYZ 95.641 641.096 null] >> endobj 4198 0 obj << /D [4188 0 R /XYZ 95.641 636.115 null] >> endobj 4199 0 obj << /D [4188 0 R /XYZ 95.641 626.152 null] >> endobj 4200 0 obj << /D [4188 0 R /XYZ 164.981 611.308 null] >> endobj 4201 0 obj << /D [4188 0 R /XYZ 218.242 611.308 null] >> endobj 4202 0 obj << /D [4188 0 R /XYZ 223.621 611.308 null] >> endobj 986 0 obj << /D [4188 0 R /XYZ 146.232 590.386 null] >> endobj 4203 0 obj << /D [4188 0 R /XYZ 95.641 585.405 null] >> endobj 4204 0 obj << /D [4188 0 R /XYZ 95.641 580.423 null] >> endobj 4205 0 obj << /D [4188 0 R /XYZ 95.641 546.052 null] >> endobj 4206 0 obj << /D [4188 0 R /XYZ 95.641 541.071 null] >> endobj 4207 0 obj << /D [4188 0 R /XYZ 95.641 531.108 null] >> endobj 4208 0 obj << /D [4188 0 R /XYZ 164.981 516.264 null] >> endobj 4209 0 obj << /D [4188 0 R /XYZ 227.925 516.264 null] >> endobj 4210 0 obj << /D [4188 0 R /XYZ 233.305 516.264 null] >> endobj 990 0 obj << /D [4188 0 R /XYZ 146.232 495.342 null] >> endobj 4211 0 obj << /D [4188 0 R /XYZ 95.641 490.361 null] >> endobj 4212 0 obj << /D [4188 0 R /XYZ 95.641 485.38 null] >> endobj 4213 0 obj << /D [4188 0 R /XYZ 95.641 451.009 null] >> endobj 4214 0 obj << /D [4188 0 R /XYZ 95.641 446.027 null] >> endobj 4215 0 obj << /D [4188 0 R /XYZ 95.641 436.065 null] >> endobj 4216 0 obj << /D [4188 0 R /XYZ 164.981 421.22 null] >> endobj 4217 0 obj << /D [4188 0 R /XYZ 227.925 421.22 null] >> endobj 4218 0 obj << /D [4188 0 R /XYZ 233.305 421.22 null] >> endobj 994 0 obj << /D [4188 0 R /XYZ 146.232 400.299 null] >> endobj 4219 0 obj << /D [4188 0 R /XYZ 95.641 395.318 null] >> endobj 4220 0 obj << /D [4188 0 R /XYZ 95.641 390.336 null] >> endobj 4221 0 obj << /D [4188 0 R /XYZ 95.641 355.965 null] >> endobj 4222 0 obj << /D [4188 0 R /XYZ 95.641 350.984 null] >> endobj 4223 0 obj << /D [4188 0 R /XYZ 95.641 341.021 null] >> endobj 4224 0 obj << /D [4188 0 R /XYZ 164.981 326.177 null] >> endobj 4225 0 obj << /D [4188 0 R /XYZ 208.558 326.177 null] >> endobj 4226 0 obj << /D [4188 0 R /XYZ 213.938 326.177 null] >> endobj 998 0 obj << /D [4188 0 R /XYZ 146.232 305.255 null] >> endobj 4227 0 obj << /D [4188 0 R /XYZ 95.641 300.274 null] >> endobj 4228 0 obj << /D [4188 0 R /XYZ 95.641 295.293 null] >> endobj 4229 0 obj << /D [4188 0 R /XYZ 95.641 260.922 null] >> endobj 4230 0 obj << /D [4188 0 R /XYZ 95.641 255.94 null] >> endobj 4231 0 obj << /D [4188 0 R /XYZ 95.641 245.978 null] >> endobj 4232 0 obj << /D [4188 0 R /XYZ 170.361 231.133 null] >> endobj 4233 0 obj << /D [4188 0 R /XYZ 209.096 231.133 null] >> endobj 4234 0 obj << /D [4188 0 R /XYZ 214.476 231.133 null] >> endobj 1002 0 obj << /D [4188 0 R /XYZ 146.232 210.212 null] >> endobj 4235 0 obj << /D [4188 0 R /XYZ 95.641 205.23 null] >> endobj 4236 0 obj << /D [4188 0 R /XYZ 95.641 200.249 null] >> endobj 4237 0 obj << /D [4188 0 R /XYZ 95.641 165.878 null] >> endobj 4238 0 obj << /D [4188 0 R /XYZ 95.641 160.897 null] >> endobj 4239 0 obj << /D [4188 0 R /XYZ 95.641 150.934 null] >> endobj 4240 0 obj << /D [4188 0 R /XYZ 170.361 136.09 null] >> endobj 4241 0 obj << /D [4188 0 R /XYZ 204.254 136.09 null] >> endobj 4242 0 obj << /D [4188 0 R /XYZ 209.634 136.09 null] >> endobj 1006 0 obj << /D [4188 0 R /XYZ 146.232 115.168 null] >> endobj 4243 0 obj << /D [4188 0 R /XYZ 95.641 110.187 null] >> endobj 4244 0 obj << /D [4188 0 R /XYZ 95.641 105.206 null] >> endobj 4245 0 obj << /D [4188 0 R /XYZ 95.641 70.834 null] >> endobj 4246 0 obj << /D [4188 0 R /XYZ 95.641 65.853 null] >> endobj 4187 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4249 0 obj << /Length 2150 /Filter /FlateDecode >> stream xÚ­YÝoã8Ÿ¿"o—Æ’- O³ÛÌ ‡™vÑÉ.°ØYœXiŒ‰íœ?Ú ÷¿)JþN;ƒ<˜¦(Ф~¤(‡/øñE$™ïñE "&|¹ØeïœÅŒ|zÇ]bá2(ðËæÝûn´ˆX介Í^Ëm’¿–¿âS­Ê«•ÎR°«¿7ÿ|ÿÑ !ú(èyLJ×H¾û¸þ|w¿þJr}…’3WFî·Ç‡O¾|¹»ÿDš××ëû+¾üusß­7­±ÂÅ%¢ÅªµvìÎÊ æÃSq¯uȓ֡?în8ê8(|F‘‘xŽªŠ²î‰YgÁ„À:ñÍ‘Î4’¹¡øºÞLUpŸBt*ø‰•ìbµ ó!¨+³Ðsµ¨6HÇ*Í“´Ræe{¦gÜü'=¦qi^Ÿ!’Ú©+ë¹XI—‰ É“ÊíªÓ˜„ÌãÑ[1 ¬Ä×Í#îúD .‡G×SÜaŒÞŒ¬ûFd¹pXäƒÐ‚wªŒk5Þ}yÅÃe‘ÑÛ§õ-"ôá ½æqfæTu™æOoÄÚázµ_>¿í4Ÿ ´ð@GôóÀw!Ⱦ¾»¿½›1‚ƒùFCÉ‚aˆëò*\66Â{zÖøƒ?§I@e·ž^Ô B\L ÁL”!=ÜåEÄÂfQøj ûø)‘ü×3wa»øéøpÿçœ r~،͛VàŽ^­|ÇYþwª ö^ÚµvE–ÅyR]¨6ºÿ›A‡!sG)x,Š“¥\ót0•íhPqReUä#h³E.×Ë:ÁB‡jÜæ *‘ëñå¾Éw5äqª•!–(^ˆ< `GA ð2=5G]ðý¤`*­‰¯°fňü@­Ef”ˆ´¢ÁØ()j•×)¬{Ö;`3Ô%¨o:±Á¬(€” QìñéÛ@ÜWÅ»Qve”Éâ31ñ³ÑçæYnÓºÔGJêãÎŒTU±KÁÕ„Þ_Òú0cß!ÍÞ '¼%ºîxÚuGv®‹\fÖT5±¶Š8 DP팗¸2õZZ ³} tŸ/½¶BöR».ú€ÈbTotj Ú*¨ zEZ05Víâœ[Eè¾`®ç\n*•°©UÉ"R4IêbÞ*ÉÚš' BXÄ>Z k‡8•;ÍØè Ä7H÷ªÅ'M`"Njt×VTÜD½ãîŠi»…/)I€Ó°:¬~¨Ã :ÝÈZ@à[}@$ Uä;uM$e—N3#ø‚Å£> t&p¨ª½"¹YÁx3…3”¦È·U÷VU­öe‘Í»AÇVTÒŸϪ²èÍr…dÒ~·Ðò‚~'ã‘Õ^hÃ0`uó‚16`X Fj+oæ…–tèÂ…: µ’ÞŒNzt?·…º=héì‰KÀÝPúøoû D¸>A€À:ÈZ÷f8Y¦ªê§…‘ë‚n–íEs>ÛR³Ô>>Vjàõ'E~<&÷R›k[ÎCŸzFÌ Š»>\°,¢>«ü‰j÷Jp•òÂh¥º)óqÕÈ› vkk£jãÖÀhV>)c0ÇV²®SöÃpQ =S5©þ=Ç=±tÐ_Ï4qŒ»¢=€º™Ük§c ¬SÓ¸E Ž:#Y ¬ ýg4ùÌó&‘Ô&p@˜Ò"— zu=b¶vêC 9ºtdÀ„•ébdÄhgûiÐÖ] xSªj}V*ÎùÒŒá¾ñúç—‚]õ mç‚ãk]äiÌŠ^ëø»ª¬Ü]¢ÇjˆŠ¤MùÕLc!AüØS‰! qÞ Ó{•iS·ìDÏrœï°Ü4ºÃÒŒ¬€ÈžI¶+-ÍZý 7MSô‚é†Ð?ºAŠ ¦³#QpÏ€¥žh4gDÁ^DAƒQäé/7øú]‰hÐk Z0$Ý êx«¤ÑÜÌJšÓ”Õtµ…/35uºØ'¼×¦mÓÜÕ4¼½ª¶²UÕ~4ÐÇ$Ÿ”Ñ[컜®Í°\¯¯´NT~‹KDÆlóÔ¿OÌù®ÍËÝ!=&óZ\È¥èu-öÛAu* ß›U#8dÅõÄioéUº=ÂΫ"ïg ·…Ûº„Ž1<é0âÛV:–¥NЍpý¢i¾Ë)VFÅ5±Hz1—[aaCb¸:s_‘ç­ãFñ¥"ÕŸK.»bªÕ;S¼§y Ë´ìcœšÙÏ £›$b3®,zëƒêç…ýø›lØA[ø¤†Ò~5HÒ_HßDþ(åU]”³ñ=¶Ÿ´uRú>Y!}{CŽö9±ÕJ|}sD¶?áÌæøŽÄ§½$háo¨æÂ¡n¬ì£ìVU;•'—r;ZWζ!"­#šÀ0ÀˤÞG “n•¾Ýé€÷:xI±ÂÚ%ŒþÑ—6meLî£Ï8_vÒ¶p¥Õ9Uûñ0žùˆWÐ0´U-y=˜>Píg¿⺅|ñb«›Ð…äí÷NìÚNêˆé:ç·pÌ-pбý»¹XÝöª‹Ÿ¬uO€»ÑkÌÎ"±=Óàw<Ž m>Jè©t»Ô{–Óèà¤ep¿‘h[x|¡O 8¡=4©.+û€…S¹ºmQšŸšzt²Ù}„voسë;ޝ!:@›N½ÿoÆÊ [àéC{'Åìÿžgž‡‡ÈkÍÈ`¬DBA³¬ÊÿäDÁÀendstream endobj 4248 0 obj << /Type /Page /Contents 4249 0 R /Resources 4247 0 R /MediaBox [0 0 609.714 789.041] /Parent 4310 0 R >> endobj 4250 0 obj << /D [4248 0 R /XYZ 95.641 729.265 null] >> endobj 4251 0 obj << /D [4248 0 R /XYZ 95.641 716.314 null] >> endobj 4252 0 obj << /D [4248 0 R /XYZ 170.361 706.351 null] >> endobj 4253 0 obj << /D [4248 0 R /XYZ 213.938 706.351 null] >> endobj 4254 0 obj << /D [4248 0 R /XYZ 219.318 706.351 null] >> endobj 1010 0 obj << /D [4248 0 R /XYZ 146.232 685.43 null] >> endobj 4255 0 obj << /D [4248 0 R /XYZ 95.641 680.448 null] >> endobj 4256 0 obj << /D [4248 0 R /XYZ 95.641 675.467 null] >> endobj 4257 0 obj << /D [4248 0 R /XYZ 95.641 641.096 null] >> endobj 4258 0 obj << /D [4248 0 R /XYZ 95.641 636.115 null] >> endobj 4259 0 obj << /D [4248 0 R /XYZ 95.641 626.152 null] >> endobj 4260 0 obj << /D [4248 0 R /XYZ 170.361 611.308 null] >> endobj 4261 0 obj << /D [4248 0 R /XYZ 218.78 611.308 null] >> endobj 4262 0 obj << /D [4248 0 R /XYZ 224.159 611.308 null] >> endobj 4263 0 obj << /D [4248 0 R /XYZ 267.601 611.308 null] >> endobj 1014 0 obj << /D [4248 0 R /XYZ 146.232 590.386 null] >> endobj 4264 0 obj << /D [4248 0 R /XYZ 95.641 585.405 null] >> endobj 4265 0 obj << /D [4248 0 R /XYZ 95.641 580.423 null] >> endobj 4266 0 obj << /D [4248 0 R /XYZ 95.641 546.052 null] >> endobj 4267 0 obj << /D [4248 0 R /XYZ 95.641 541.071 null] >> endobj 4268 0 obj << /D [4248 0 R /XYZ 95.641 531.108 null] >> endobj 4269 0 obj << /D [4248 0 R /XYZ 170.361 516.264 null] >> endobj 4270 0 obj << /D [4248 0 R /XYZ 194.57 516.264 null] >> endobj 4271 0 obj << /D [4248 0 R /XYZ 199.95 516.264 null] >> endobj 4272 0 obj << /D [4248 0 R /XYZ 227.432 516.264 null] >> endobj 1018 0 obj << /D [4248 0 R /XYZ 146.232 495.342 null] >> endobj 4273 0 obj << /D [4248 0 R /XYZ 95.641 490.361 null] >> endobj 4274 0 obj << /D [4248 0 R /XYZ 95.641 485.38 null] >> endobj 4275 0 obj << /D [4248 0 R /XYZ 95.641 485.38 null] >> endobj 4276 0 obj << /D [4248 0 R /XYZ 95.641 451.009 null] >> endobj 4277 0 obj << /D [4248 0 R /XYZ 95.641 441.046 null] >> endobj 4278 0 obj << /D [4248 0 R /XYZ 95.641 441.046 null] >> endobj 4279 0 obj << /D [4248 0 R /XYZ 208.02 431.183 null] >> endobj 4280 0 obj << /D [4248 0 R /XYZ 235.502 431.183 null] >> endobj 4281 0 obj << /D [4248 0 R /XYZ 279.643 431.183 null] >> endobj 4282 0 obj << /D [4248 0 R /XYZ 318.405 431.183 null] >> endobj 4283 0 obj << /D [4248 0 R /XYZ 373.306 431.183 null] >> endobj 1022 0 obj << /D [4248 0 R /XYZ 95.641 430.134 null] >> endobj 4284 0 obj << /D [4248 0 R /XYZ 95.641 405.28 null] >> endobj 4285 0 obj << /D [4248 0 R /XYZ 95.641 400.299 null] >> endobj 4286 0 obj << /D [4248 0 R /XYZ 95.641 347.497 null] >> endobj 4287 0 obj << /D [4248 0 R /XYZ 365.116 314.62 null] >> endobj 4288 0 obj << /D [4248 0 R /XYZ 95.641 298.466 null] >> endobj 4289 0 obj << /D [4248 0 R /XYZ 95.641 298.466 null] >> endobj 4290 0 obj << /D [4248 0 R /XYZ 396.423 265.803 null] >> endobj 4291 0 obj << /D [4248 0 R /XYZ 240.451 243.885 null] >> endobj 4292 0 obj << /D [4248 0 R /XYZ 493.878 243.885 null] >> endobj 4293 0 obj << /D [4248 0 R /XYZ 279.813 232.927 null] >> endobj 4294 0 obj << /D [4248 0 R /XYZ 95.641 225.136 null] >> endobj 4295 0 obj << /D [4248 0 R /XYZ 95.641 225.136 null] >> endobj 4296 0 obj << /D [4248 0 R /XYZ 175.493 216.986 null] >> endobj 4297 0 obj << /D [4248 0 R /XYZ 246.06 216.986 null] >> endobj 4298 0 obj << /D [4248 0 R /XYZ 95.641 165.36 null] >> endobj 4299 0 obj << /D [4248 0 R /XYZ 95.641 165.36 null] >> endobj 4300 0 obj << /D [4248 0 R /XYZ 196.514 157.21 null] >> endobj 4301 0 obj << /D [4248 0 R /XYZ 244.186 157.21 null] >> endobj 4302 0 obj << /D [4248 0 R /XYZ 313.757 157.21 null] >> endobj 4303 0 obj << /D [4248 0 R /XYZ 95.641 127.502 null] >> endobj 4304 0 obj << /D [4248 0 R /XYZ 95.641 127.502 null] >> endobj 4305 0 obj << /D [4248 0 R /XYZ 143.462 108.394 null] >> endobj 4306 0 obj << /D [4248 0 R /XYZ 143.462 97.435 null] >> endobj 4307 0 obj << /D [4248 0 R /XYZ 278.774 97.435 null] >> endobj 4308 0 obj << /D [4248 0 R /XYZ 95.641 89.644 null] >> endobj 4309 0 obj << /D [4248 0 R /XYZ 95.641 89.644 null] >> endobj 4247 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R /F27 1179 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4313 0 obj << /Length 2035 /Filter /FlateDecode >> stream xڽˎã6ì¾_‘c˜¨¶~ §v73˜¢»[̦í¡íÁã(£‰ØÎÎÎß—)Û‰ E¦(ŠâK$¥„³~á,5"Òá,–©‘™åûwÁìfîß…LÌ”0IŒS?®Þ}w§ÒY*ÒHÍVG±Zÿ1¿Í­­oÒs)nþZýôÝNf FH¨µ0F1õÏwËŸ>-¿Ý¡ …21Óýòøùþñ‡>ÝçÇåÝòqùé&œ¿_âÚwËU'¦¡U8[tÒž+²Pq "øJ)ÒPw iÓËéú”ímSÕ-Khz µHLd·¬é€C$¤ yúoûz ¨™x&Y¹³‘0©7Ä×lw¼ Ž‘"Ôž“#5õ<Ù7–ÇÕ†°­›ªlhüôJó%è{K ¡ ϼ@>O ûÏa¤„J HMJJ4M•Yk×ä*'ò-ÁõM˜Ìms°y[Àþ_íîõ& ù‹}‘jÇf™å[ØLƒ¤NL„õ¼( —Oy f›5Lä‰á%Bí ßÚK\aCÏk½öËÛÊS{¡{åIˆ(š¿-l±»S¥"N|ü×¶Â5o—ãÙn-¤€%œ“PöÛaWäE»{%<è\<—v-hšu„‰Ò¾ ¶m˜–ÜBèœl-˜õ¾N¤H¤<Ѷ‰ð¨'á|s,Á§MèéD¢)]÷OD"]ä!®¾IæÇmhÔmŽ$ÇÆE  ÑÈŽ÷¡)þiÊ›Ø >–O¦ñ^'œÔo™¦Þ±:ÇÁܱµ;sá$šKxWÕc¿†*6Éa‡¬¶e;íXHNar9k¡cÉÓù¶Ø­§¹D"ײF˜ŠDûmšC–diV3• /Ô¯32š‡måB@‰H‚äĘyu(œ!-lqµ§ñàÏ uÓÒ (GÝaAÀ8Z•16ÏPè3^äó5}Ÿ˜Èût0… &«KrÚ§*:ò©÷XBx (#‘¤é5öÓE ¥±ä7é‡D&oÔGL±.6 1–Û VJÄi2HZrêÀûáþÜÃÀûáÞJ«ÑZÊüÐ.„`²fÂê xL{Ç#–x0û-!í·Ü;Zžg%¤Žq„'©Ð‰üWÞqÌ^(Â]Ò@to ˜i³¿-‹30Np-dAåÏÂ)¯\‰Ô/GÀwW•®¢ê€ËŠPPu ¼’Úë­ƒ`ºÚ3vèGLò OƯLCÆqU¹mÚªžÌ‘&НÅßBa`i}¢ñÚ6¹-×Ù…dK!»dGgX¦¾|!ˆåKÊ„S¤,ÙÎè*À®‚õ³-m¹rsNíÒCçZ"/˜*{ɸ–±\CMæåR;jIµÚÇ›í‘ÊxÓØ§Ô®“ÀJ]žTñ¨;‘éÛÊ~'d\°£Sf\º)v}µûa;åà‡Í+§?x[¥§žì¸CÜÍ9wí|÷UwXŒšB¤ÐscÅ çpÇž‡9ÎÃYßÜÖÒxó°}yË©t^Z>Ä®Øè°WCe[¾'4×€ ׯ8F?|~’¾wÕË)âPA—õ´³bâè™DıÏ<¿]iÛÑ%1¤ð{òdG®¾)ÜÒq¿‰5öêø%=LŸDvç†&§œ…ã·bWdõëzB“žüÞ–E¹.¦ èHR÷|@Ýþ>£K²¸Š%‚oß¶©Î-€Þgm¾õ«3^ÛÖEùL¨—måQ½¿û«_€7²Ë64œ JŽûå‡÷Ÿ? ÑO!D(½/ß0BÚ7 ®{AÆÛ4Ùž¡l÷\ÕE»Ý{ wî à“ö8F-´å‚‹/dâ Nj¹ð­+kÏâá‰òÛKÃãç;¼2mU_ˆ%Є§\“¹N"æ4¯ªöšdwëõW‡ Ã/°‚ÅR ƒð¡œd)SÑÝ—Èí±.ù´îÎÁÚ›3õ: q—â¼Àäî ‰:|-ÖÇlÇãÆãÏY®nàŽ<­Ê6Ъõ5Ûô÷ýÂßhJúh~—ãùÞÅg&ÁìT$矷„°î2-“ ¯‹È¬> endobj 4314 0 obj << /D [4312 0 R /XYZ 95.641 729.265 null] >> endobj 4315 0 obj << /D [4312 0 R /XYZ 95.641 716.314 null] >> endobj 4316 0 obj << /D [4312 0 R /XYZ 95.641 716.314 null] >> endobj 4317 0 obj << /D [4312 0 R /XYZ 192.722 706.351 null] >> endobj 4318 0 obj << /D [4312 0 R /XYZ 254.708 706.351 null] >> endobj 4319 0 obj << /D [4312 0 R /XYZ 95.641 687.602 null] >> endobj 4320 0 obj << /D [4312 0 R /XYZ 183.245 668.493 null] >> endobj 4321 0 obj << /D [4312 0 R /XYZ 281.112 646.575 null] >> endobj 4322 0 obj << /D [4312 0 R /XYZ 335.002 646.575 null] >> endobj 4323 0 obj << /D [4312 0 R /XYZ 400.87 646.575 null] >> endobj 4324 0 obj << /D [4312 0 R /XYZ 179.929 624.658 null] >> endobj 4325 0 obj << /D [4312 0 R /XYZ 212.728 624.658 null] >> endobj 4326 0 obj << /D [4312 0 R /XYZ 284.831 624.658 null] >> endobj 4327 0 obj << /D [4312 0 R /XYZ 332.944 613.699 null] >> endobj 4328 0 obj << /D [4312 0 R /XYZ 434.639 602.74 null] >> endobj 4329 0 obj << /D [4312 0 R /XYZ 143.462 591.781 null] >> endobj 4330 0 obj << /D [4312 0 R /XYZ 185.882 580.822 null] >> endobj 4331 0 obj << /D [4312 0 R /XYZ 402.241 558.904 null] >> endobj 4332 0 obj << /D [4312 0 R /XYZ 95.641 540.154 null] >> endobj 4333 0 obj << /D [4312 0 R /XYZ 95.641 540.154 null] >> endobj 4334 0 obj << /D [4312 0 R /XYZ 155.328 521.046 null] >> endobj 4335 0 obj << /D [4312 0 R /XYZ 239.591 521.046 null] >> endobj 4336 0 obj << /D [4312 0 R /XYZ 378.896 510.087 null] >> endobj 4337 0 obj << /D [4312 0 R /XYZ 95.641 502.296 null] >> endobj 4338 0 obj << /D [4312 0 R /XYZ 95.641 502.296 null] >> endobj 4339 0 obj << /D [4312 0 R /XYZ 207.083 494.147 null] >> endobj 4340 0 obj << /D [4312 0 R /XYZ 95.641 486.356 null] >> endobj 4341 0 obj << /D [4312 0 R /XYZ 95.641 486.356 null] >> endobj 1293 0 obj << /D [4312 0 R /XYZ 95.641 437.539 null] >> endobj 1026 0 obj << /D [4312 0 R /XYZ 242.082 407.163 null] >> endobj 4342 0 obj << /D [4312 0 R /XYZ 95.641 404.668 null] >> endobj 4343 0 obj << /D [4312 0 R /XYZ 95.641 387.233 null] >> endobj 4344 0 obj << /D [4312 0 R /XYZ 95.641 381.206 null] >> endobj 4345 0 obj << /D [4312 0 R /XYZ 95.641 371.243 null] >> endobj 4346 0 obj << /D [4312 0 R /XYZ 170.361 357.848 null] >> endobj 4347 0 obj << /D [4312 0 R /XYZ 218.78 357.848 null] >> endobj 4348 0 obj << /D [4312 0 R /XYZ 224.159 357.848 null] >> endobj 4349 0 obj << /D [4312 0 R /XYZ 267.601 357.848 null] >> endobj 1030 0 obj << /D [4312 0 R /XYZ 146.232 336.927 null] >> endobj 4350 0 obj << /D [4312 0 R /XYZ 95.641 331.945 null] >> endobj 4351 0 obj << /D [4312 0 R /XYZ 95.641 326.964 null] >> endobj 4352 0 obj << /D [4312 0 R /XYZ 95.641 292.593 null] >> endobj 4353 0 obj << /D [4312 0 R /XYZ 95.641 287.611 null] >> endobj 4354 0 obj << /D [4312 0 R /XYZ 95.641 277.649 null] >> endobj 4355 0 obj << /D [4312 0 R /XYZ 170.361 262.804 null] >> endobj 4356 0 obj << /D [4312 0 R /XYZ 204.254 262.804 null] >> endobj 4357 0 obj << /D [4312 0 R /XYZ 209.634 262.804 null] >> endobj 4358 0 obj << /D [4312 0 R /XYZ 242.451 262.804 null] >> endobj 4359 0 obj << /D [4312 0 R /XYZ 275.268 262.804 null] >> endobj 1034 0 obj << /D [4312 0 R /XYZ 146.232 241.883 null] >> endobj 4360 0 obj << /D [4312 0 R /XYZ 95.641 236.902 null] >> endobj 4361 0 obj << /D [4312 0 R /XYZ 95.641 231.92 null] >> endobj 4362 0 obj << /D [4312 0 R /XYZ 95.641 197.549 null] >> endobj 4363 0 obj << /D [4312 0 R /XYZ 95.641 192.568 null] >> endobj 4364 0 obj << /D [4312 0 R /XYZ 95.641 182.605 null] >> endobj 4365 0 obj << /D [4312 0 R /XYZ 170.361 167.761 null] >> endobj 4366 0 obj << /D [4312 0 R /XYZ 218.78 167.761 null] >> endobj 4367 0 obj << /D [4312 0 R /XYZ 224.159 167.761 null] >> endobj 1038 0 obj << /D [4312 0 R /XYZ 146.232 146.839 null] >> endobj 4368 0 obj << /D [4312 0 R /XYZ 95.641 141.858 null] >> endobj 4369 0 obj << /D [4312 0 R /XYZ 95.641 136.877 null] >> endobj 4370 0 obj << /D [4312 0 R /XYZ 95.641 102.506 null] >> endobj 4371 0 obj << /D [4312 0 R /XYZ 95.641 97.524 null] >> endobj 4372 0 obj << /D [4312 0 R /XYZ 95.641 87.562 null] >> endobj 4311 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R /F26 1177 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4375 0 obj << /Length 1581 /Filter /FlateDecode >> stream xÚ­XKoã6¾çWøèk®HŠ…=ínœ EE6è¥Ûƒbѱ[ $9Aúë;Ã!eÑrœ-Zä !9Î|ótø$‚?>ÉKb>IEÆD¢&‹ÍI4y„“‹î8¸–L§b"™Ò)2|»?ù|.³IƲDNî—–ï¾øsú}•?w¦9 M;ýëþ·Ï籞h`L1Ž™RÒq_]žÏ¯.oæ?ˆo(Pq&Uêø~¿»½¸ûz}}ysA’ïæçó»ùÍ)Ÿ~ŸãÝ“ù}¯¬øD6™õÚî›3“iÄø Á2÷Åj§§7èÛË3gžF)Š„é,s¯MÙ™²*Ê›7TH½?#ñPLjÇpysv9–!8K…ÚÉà_XjÖ,MY¢’É,æLÇr§¡•ÓçÙ4m]ý/žˆêj÷]!wœM‹¼ËòÖŒU™qxt™)ÉÄ¿Ag™oÆÒ¤f©T¿ Îù×뱞2ž~M¢™Àh8 (X®ßŽCD7@gˆ`:"HîW¦uìËmµèʺjÝ[ëuýJä[ ’¶á+›º(—N‡Ü¹©¬ ™ª|M«‹ùÙ÷Ûk¢«ºp¯tÍ)×ScØŸ4T,ƒä¶¹Ù˜¼3öâ&•0ÕC¹ ‰ÀŒš§Ò¢Ÿ PÚ«K”ô…HB‰W´&ÓÜÊxÜnLÕy)$Ö1æn·*èÆK¾ÞºÃ¶kÊê±ýD ;Ýf“Hà¦~±µËéãëY:]Z–zsðX+w<Î õá¾hæëtÈG.žIèØBÈ [‹c5EQ/e±µÕ8Nœ%àµE탷]û€ Ö!±ò5é;ë'ÚÇÊ7n÷‘bZîžAáQ,Ö24¤Ò[}Gƒ-Òt¨¦"5©Ò਋Àæqç¨î[…?L ==ô\7Ý^kËŸL?ƒlòŠ‚–‹U^=šö½v‹bËmÉÛ}?ó3UŠ6\,GÔsq§®䢧ˆFÁÃò&§ÉƶnÛˆoU¸,[_Eim–x¸„ÞC뺢ón5ßÏa¶m«®\û_±­Ö¦mÇ¡JƹúµhŽ|Ä€“Çy£O¢~%¤úÉ|׫ÑKànS¸„É„ )e§+? KÁ0Ç!Çñê4ÙHKõôª¬ž(T`qÞDãa9eZÀPI ýÊúv{{u|¼lÌÒ4¦Z˜ÿ:|ÿ¸¿Ã_ã)U°D‹fL­áç„ fÌÂÀä¶)+¡-äð¥ÉÆíµÁ JSWݺ>ЧÓÒãA#ƒ‘<¢9ïæöl~µÂÁ %%ÿ lòØ2ͳ4€mlr€Í»ÀØíº¡zôdÞŠ2–?ßyŒï¸tã;’oõ–|¿¾Â‚ï«òo'ÀN¡î6M¼oýŽe`ØNÎÀ0ÿ6ÖŠñƒ¹ß]ª5aÙGè¸@Ö7¢voÑA} £fz¼÷õ]3{%HI´ønÛTþÍæTOíl › øíÜiŸ\ìEÈæ¸rú !°a!B,˜Y€†u´/™xgH•ø~Ë?¹Àô« 7l4!agU¸SWf°Ñß…“â$pË·‡xK(Õ±ýPÕ¼ùÌóÇëúa/=”3KÏFm|0/ SŽˆ"L°—päÔaÂÎÞÉÕa!t^ÇŸÄ?kÿ£3ó­!QøõàÿtâH³8ÁwìßS*Û—,‚ny‘ÿïmâdendstream endobj 4374 0 obj << /Type /Page /Contents 4375 0 R /Resources 4373 0 R /MediaBox [0 0 609.714 789.041] /Parent 4310 0 R >> endobj 4376 0 obj << /D [4374 0 R /XYZ 95.641 729.265 null] >> endobj 4377 0 obj << /D [4374 0 R /XYZ 170.361 706.351 null] >> endobj 4378 0 obj << /D [4374 0 R /XYZ 213.938 706.351 null] >> endobj 4379 0 obj << /D [4374 0 R /XYZ 219.318 706.351 null] >> endobj 1042 0 obj << /D [4374 0 R /XYZ 146.232 685.43 null] >> endobj 4380 0 obj << /D [4374 0 R /XYZ 95.641 680.448 null] >> endobj 4381 0 obj << /D [4374 0 R /XYZ 95.641 675.467 null] >> endobj 4382 0 obj << /D [4374 0 R /XYZ 95.641 641.096 null] >> endobj 4383 0 obj << /D [4374 0 R /XYZ 95.641 636.115 null] >> endobj 4384 0 obj << /D [4374 0 R /XYZ 95.641 626.152 null] >> endobj 4385 0 obj << /D [4374 0 R /XYZ 170.361 611.308 null] >> endobj 4386 0 obj << /D [4374 0 R /XYZ 209.096 611.308 null] >> endobj 4387 0 obj << /D [4374 0 R /XYZ 214.476 611.308 null] >> endobj 1046 0 obj << /D [4374 0 R /XYZ 146.232 590.386 null] >> endobj 4388 0 obj << /D [4374 0 R /XYZ 95.641 585.405 null] >> endobj 4389 0 obj << /D [4374 0 R /XYZ 95.641 580.423 null] >> endobj 4390 0 obj << /D [4374 0 R /XYZ 95.641 527.621 null] >> endobj 4391 0 obj << /D [4374 0 R /XYZ 357.606 516.663 null] >> endobj 4392 0 obj << /D [4374 0 R /XYZ 95.641 508.872 null] >> endobj 4393 0 obj << /D [4374 0 R /XYZ 95.641 508.872 null] >> endobj 4394 0 obj << /D [4374 0 R /XYZ 240.573 500.722 null] >> endobj 4395 0 obj << /D [4374 0 R /XYZ 307.416 489.763 null] >> endobj 4396 0 obj << /D [4374 0 R /XYZ 330.729 489.763 null] >> endobj 4397 0 obj << /D [4374 0 R /XYZ 328.625 456.887 null] >> endobj 4398 0 obj << /D [4374 0 R /XYZ 229.453 445.928 null] >> endobj 4399 0 obj << /D [4374 0 R /XYZ 435.698 445.928 null] >> endobj 4400 0 obj << /D [4374 0 R /XYZ 349.321 434.969 null] >> endobj 4401 0 obj << /D [4374 0 R /XYZ 95.641 416.219 null] >> endobj 4402 0 obj << /D [4374 0 R /XYZ 216.577 397.111 null] >> endobj 4403 0 obj << /D [4374 0 R /XYZ 279.351 397.111 null] >> endobj 1294 0 obj << /D [4374 0 R /XYZ 95.641 391.915 null] >> endobj 1050 0 obj << /D [4374 0 R /XYZ 244.095 358.944 null] >> endobj 4404 0 obj << /D [4374 0 R /XYZ 95.641 356.262 null] >> endobj 4405 0 obj << /D [4374 0 R /XYZ 95.641 338.827 null] >> endobj 4406 0 obj << /D [4374 0 R /XYZ 95.641 332.8 null] >> endobj 4407 0 obj << /D [4374 0 R /XYZ 95.641 322.837 null] >> endobj 4408 0 obj << /D [4374 0 R /XYZ 170.361 309.629 null] >> endobj 4409 0 obj << /D [4374 0 R /XYZ 213.938 309.629 null] >> endobj 4410 0 obj << /D [4374 0 R /XYZ 219.318 309.629 null] >> endobj 1054 0 obj << /D [4374 0 R /XYZ 146.232 288.707 null] >> endobj 4411 0 obj << /D [4374 0 R /XYZ 95.641 283.726 null] >> endobj 4412 0 obj << /D [4374 0 R /XYZ 95.641 278.745 null] >> endobj 4413 0 obj << /D [4374 0 R /XYZ 95.641 244.374 null] >> endobj 4414 0 obj << /D [4374 0 R /XYZ 95.641 239.392 null] >> endobj 4415 0 obj << /D [4374 0 R /XYZ 95.641 229.43 null] >> endobj 4416 0 obj << /D [4374 0 R /XYZ 170.361 214.585 null] >> endobj 4417 0 obj << /D [4374 0 R /XYZ 223.621 214.585 null] >> endobj 4418 0 obj << /D [4374 0 R /XYZ 229.001 214.585 null] >> endobj 1058 0 obj << /D [4374 0 R /XYZ 146.232 193.664 null] >> endobj 4419 0 obj << /D [4374 0 R /XYZ 95.641 188.682 null] >> endobj 4420 0 obj << /D [4374 0 R /XYZ 95.641 183.701 null] >> endobj 4421 0 obj << /D [4374 0 R /XYZ 95.641 130.899 null] >> endobj 4422 0 obj << /D [4374 0 R /XYZ 235.46 108.981 null] >> endobj 4423 0 obj << /D [4374 0 R /XYZ 319.845 108.981 null] >> endobj 4424 0 obj << /D [4374 0 R /XYZ 454.894 98.022 null] >> endobj 1295 0 obj << /D [4374 0 R /XYZ 95.641 79.273 null] >> endobj 4373 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R /F26 1177 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4427 0 obj << /Length 646 /Filter /FlateDecode >> stream xÚ½•MoÚ@†ïüŠ=ÂÁ“ýþPOmb"ª*‡V•š\³$VcÙ&j¤þø®?ƒBµâ`Ø}=3ï³Ã,AØ}2$'HQT %ŒîÜÎ倴 Œ­ª­óÁÙ˜dÀH†æËZ1_|žß‡«Òæ# <¤0ú>ÿx6æi'”•s‚µê«ÉØ¿šLý›F× (0¡Zݧ`v¼¿¾žL/›È?ö:"Ãs¿zwàÏ·er¢3‚¼mµÏx[ ¥`ß:¢ Xˆ®¥ë¸ˆìÃC˜Úl]¸ôJÇë4*ã,-Z¢ãO¦U Œˆ:À—Ùä¢#ĪÒQ Ú˜6ÅCýì‡".„Ü ¸Å÷i `ºþù,¸ø=]øýP€"rмk‰‹qÏEUt@s¶+¬&6|DôÐFYý\4kUiY~|?ÊÒÒT§qz×,+Å·SÛjÒla«ºš_qÚ<›dùSߎçÐ*'ЯÓÔ]¿»¼ÿ2ÁHÝ!fÞ­íí æ´|èeýz–¼÷Í<¨þ‹Ï3Rl€/Â2ü¶iPŒw?fñâ/!K½×•÷r·m’†‰m¾eË–Ä:oD®óê…ªçp={þ09Ùá*Ïîò09`¹Æc§$ ©z«ÁUs’Îãá’þî m^¸9÷ïnmLö*×|{oÄK{§¶è' ÞP å7«©R{Çþò)žŠÒ&o#=ø®¤¦/ŒÅë}žö—ÖeÛ$E™o@Xì•ÏÓÉ×VtïzÅÝk›Ñ‘$aºx~—bä¹fA÷îÑ£·¿ÄÇ.cÜ}ÿ¹a¨endstream endobj 4426 0 obj << /Type /Page /Contents 4427 0 R /Resources 4425 0 R /MediaBox [0 0 609.714 789.041] /Parent 4310 0 R >> endobj 4428 0 obj << /D [4426 0 R /XYZ 95.641 729.265 null] >> endobj 1062 0 obj << /D [4426 0 R /XYZ 238.996 706.351 null] >> endobj 4429 0 obj << /D [4426 0 R /XYZ 95.641 706.201 null] >> endobj 4430 0 obj << /D [4426 0 R /XYZ 95.641 688.766 null] >> endobj 4431 0 obj << /D [4426 0 R /XYZ 95.641 682.739 null] >> endobj 4432 0 obj << /D [4426 0 R /XYZ 95.641 672.776 null] >> endobj 4433 0 obj << /D [4426 0 R /XYZ 170.361 657.036 null] >> endobj 4434 0 obj << /D [4426 0 R /XYZ 189.728 657.036 null] >> endobj 4435 0 obj << /D [4426 0 R /XYZ 195.108 657.036 null] >> endobj 1066 0 obj << /D [4426 0 R /XYZ 146.232 636.115 null] >> endobj 4436 0 obj << /D [4426 0 R /XYZ 95.641 631.133 null] >> endobj 4437 0 obj << /D [4426 0 R /XYZ 95.641 626.152 null] >> endobj 4438 0 obj << /D [4426 0 R /XYZ 95.641 591.781 null] >> endobj 4439 0 obj << /D [4426 0 R /XYZ 95.641 586.8 null] >> endobj 4440 0 obj << /D [4426 0 R /XYZ 95.641 576.837 null] >> endobj 4441 0 obj << /D [4426 0 R /XYZ 170.361 561.993 null] >> endobj 4442 0 obj << /D [4426 0 R /XYZ 199.412 561.993 null] >> endobj 4443 0 obj << /D [4426 0 R /XYZ 204.792 561.993 null] >> endobj 1070 0 obj << /D [4426 0 R /XYZ 146.232 541.071 null] >> endobj 4444 0 obj << /D [4426 0 R /XYZ 95.641 536.09 null] >> endobj 4445 0 obj << /D [4426 0 R /XYZ 95.641 531.108 null] >> endobj 4446 0 obj << /D [4426 0 R /XYZ 95.641 496.737 null] >> endobj 4447 0 obj << /D [4426 0 R /XYZ 95.641 491.756 null] >> endobj 4448 0 obj << /D [4426 0 R /XYZ 95.641 481.793 null] >> endobj 4449 0 obj << /D [4426 0 R /XYZ 181.121 466.949 null] >> endobj 1074 0 obj << /D [4426 0 R /XYZ 146.232 446.027 null] >> endobj 4450 0 obj << /D [4426 0 R /XYZ 95.641 441.046 null] >> endobj 4451 0 obj << /D [4426 0 R /XYZ 95.641 436.065 null] >> endobj 4452 0 obj << /D [4426 0 R /XYZ 95.641 401.694 null] >> endobj 4453 0 obj << /D [4426 0 R /XYZ 95.641 396.712 null] >> endobj 4454 0 obj << /D [4426 0 R /XYZ 95.641 386.75 null] >> endobj 4455 0 obj << /D [4426 0 R /XYZ 181.121 371.905 null] >> endobj 1078 0 obj << /D [4426 0 R /XYZ 146.232 350.984 null] >> endobj 4456 0 obj << /D [4426 0 R /XYZ 95.641 346.003 null] >> endobj 4457 0 obj << /D [4426 0 R /XYZ 95.641 341.021 null] >> endobj 4458 0 obj << /D [4426 0 R /XYZ 95.641 306.65 null] >> endobj 4459 0 obj << /D [4426 0 R /XYZ 95.641 301.669 null] >> endobj 4460 0 obj << /D [4426 0 R /XYZ 95.641 291.706 null] >> endobj 4461 0 obj << /D [4426 0 R /XYZ 181.121 276.862 null] >> endobj 1082 0 obj << /D [4426 0 R /XYZ 146.232 255.94 null] >> endobj 4462 0 obj << /D [4426 0 R /XYZ 95.641 250.959 null] >> endobj 4463 0 obj << /D [4426 0 R /XYZ 95.641 245.978 null] >> endobj 4464 0 obj << /D [4426 0 R /XYZ 239.83 235.019 null] >> endobj 4465 0 obj << /D [4426 0 R /XYZ 95.641 211.607 null] >> endobj 4466 0 obj << /D [4426 0 R /XYZ 95.641 206.625 null] >> endobj 4467 0 obj << /D [4426 0 R /XYZ 95.641 196.663 null] >> endobj 4468 0 obj << /D [4426 0 R /XYZ 170.361 181.818 null] >> endobj 4469 0 obj << /D [4426 0 R /XYZ 199.412 181.818 null] >> endobj 4470 0 obj << /D [4426 0 R /XYZ 204.792 181.818 null] >> endobj 1086 0 obj << /D [4426 0 R /XYZ 146.232 160.897 null] >> endobj 4471 0 obj << /D [4426 0 R /XYZ 95.641 155.915 null] >> endobj 4472 0 obj << /D [4426 0 R /XYZ 95.641 150.934 null] >> endobj 4473 0 obj << /D [4426 0 R /XYZ 95.641 116.563 null] >> endobj 4474 0 obj << /D [4426 0 R /XYZ 95.641 111.582 null] >> endobj 4475 0 obj << /D [4426 0 R /XYZ 95.641 101.619 null] >> endobj 4425 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F26 1177 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4478 0 obj << /Length 713 /Filter /FlateDecode >> stream xÚ½V]š@}÷Wð¨I¹Ë|¤O»[ÜØìjã’&MÛtI‚Ûý÷aEÑ®ĭ‡2—3÷œû²ù K0àY.€9³æëžc-åÉC äð\l`ž« î‚ÞÍK€àÄ µ]ýìß¿„y3§að;øz3¤žåIC® )ƈ±~ ýÇÑØÖvm@†€0ר}›N¦·OO£ñƒFžúCê¨ï«o{~°su…°ì·Çtlâ:ÀåŠ1Dw„(ÛûÙCB:®:ÃÆà%ójG-+A

{+ãyÅg*†^…yÓb>u!îΙ‹@Îæ¥ä%\r˜—iÍM'ÉβHÒ¥Þ'éÁ‘²UŠ_©^çYº•)~ZÝë×ëqùGcœm‚„Ç(Ô ÌB7‰¦‰¤q Ù5tŒtUd&~i& ¤¸¬*¾OF_ºS„ƒ'šÀEñ¬ZvÁ0•âÒ˜ÝM&þíød]qþ^2» 0æ§{A’ÊN¨Æ@Óµ¿õv­ºV çÛpU@Ãj K¥¸ÿèB B wdàÐѨ‰ªuÞè ‡í:lMŒYV•ûЦ¢åû§Ä¦.xX®’(0|ò·„:P®tø×GÇØÊë¯È¿½*bendstream endobj 4477 0 obj << /Type /Page /Contents 4478 0 R /Resources 4476 0 R /MediaBox [0 0 609.714 789.041] /Parent 4310 0 R >> endobj 4479 0 obj << /D [4477 0 R /XYZ 95.641 729.265 null] >> endobj 4480 0 obj << /D [4477 0 R /XYZ 164.981 706.351 null] >> endobj 1090 0 obj << /D [4477 0 R /XYZ 146.232 685.43 null] >> endobj 4481 0 obj << /D [4477 0 R /XYZ 95.641 680.448 null] >> endobj 4482 0 obj << /D [4477 0 R /XYZ 95.641 675.467 null] >> endobj 4483 0 obj << /D [4477 0 R /XYZ 95.641 641.096 null] >> endobj 4484 0 obj << /D [4477 0 R /XYZ 95.641 636.115 null] >> endobj 4485 0 obj << /D [4477 0 R /XYZ 95.641 626.152 null] >> endobj 4486 0 obj << /D [4477 0 R /XYZ 181.121 611.308 null] >> endobj 4487 0 obj << /D [4477 0 R /XYZ 234.381 611.308 null] >> endobj 4488 0 obj << /D [4477 0 R /XYZ 239.761 611.308 null] >> endobj 1094 0 obj << /D [4477 0 R /XYZ 146.232 590.386 null] >> endobj 4489 0 obj << /D [4477 0 R /XYZ 95.641 585.405 null] >> endobj 4490 0 obj << /D [4477 0 R /XYZ 95.641 580.423 null] >> endobj 4491 0 obj << /D [4477 0 R /XYZ 95.641 546.052 null] >> endobj 4492 0 obj << /D [4477 0 R /XYZ 95.641 541.071 null] >> endobj 4493 0 obj << /D [4477 0 R /XYZ 95.641 531.108 null] >> endobj 4494 0 obj << /D [4477 0 R /XYZ 181.121 516.264 null] >> endobj 4495 0 obj << /D [4477 0 R /XYZ 224.697 516.264 null] >> endobj 4496 0 obj << /D [4477 0 R /XYZ 230.077 516.264 null] >> endobj 1098 0 obj << /D [4477 0 R /XYZ 146.232 495.342 null] >> endobj 4497 0 obj << /D [4477 0 R /XYZ 95.641 490.361 null] >> endobj 4498 0 obj << /D [4477 0 R /XYZ 95.641 485.38 null] >> endobj 4499 0 obj << /D [4477 0 R /XYZ 95.641 451.009 null] >> endobj 4500 0 obj << /D [4477 0 R /XYZ 95.641 446.027 null] >> endobj 4501 0 obj << /D [4477 0 R /XYZ 95.641 436.065 null] >> endobj 4502 0 obj << /D [4477 0 R /XYZ 181.121 421.22 null] >> endobj 4503 0 obj << /D [4477 0 R /XYZ 219.856 421.22 null] >> endobj 4504 0 obj << /D [4477 0 R /XYZ 225.235 421.22 null] >> endobj 4505 0 obj << /D [4477 0 R /XYZ 268.677 421.22 null] >> endobj 1102 0 obj << /D [4477 0 R /XYZ 146.232 400.299 null] >> endobj 4506 0 obj << /D [4477 0 R /XYZ 95.641 395.318 null] >> endobj 4507 0 obj << /D [4477 0 R /XYZ 95.641 390.336 null] >> endobj 4508 0 obj << /D [4477 0 R /XYZ 95.641 355.965 null] >> endobj 4509 0 obj << /D [4477 0 R /XYZ 95.641 350.984 null] >> endobj 4510 0 obj << /D [4477 0 R /XYZ 95.641 341.021 null] >> endobj 4511 0 obj << /D [4477 0 R /XYZ 181.121 326.177 null] >> endobj 4512 0 obj << /D [4477 0 R /XYZ 234.381 326.177 null] >> endobj 4513 0 obj << /D [4477 0 R /XYZ 239.761 326.177 null] >> endobj 4514 0 obj << /D [4477 0 R /XYZ 283.203 326.177 null] >> endobj 4515 0 obj << /D [4477 0 R /XYZ 326.645 326.177 null] >> endobj 1106 0 obj << /D [4477 0 R /XYZ 146.232 305.255 null] >> endobj 4516 0 obj << /D [4477 0 R /XYZ 95.641 300.274 null] >> endobj 4517 0 obj << /D [4477 0 R /XYZ 95.641 295.293 null] >> endobj 4518 0 obj << /D [4477 0 R /XYZ 95.641 260.922 null] >> endobj 4519 0 obj << /D [4477 0 R /XYZ 95.641 255.94 null] >> endobj 4520 0 obj << /D [4477 0 R /XYZ 95.641 245.978 null] >> endobj 4521 0 obj << /D [4477 0 R /XYZ 170.361 231.133 null] >> endobj 4522 0 obj << /D [4477 0 R /XYZ 194.57 231.133 null] >> endobj 4523 0 obj << /D [4477 0 R /XYZ 199.95 231.133 null] >> endobj 1110 0 obj << /D [4477 0 R /XYZ 146.232 210.212 null] >> endobj 4524 0 obj << /D [4477 0 R /XYZ 95.641 205.23 null] >> endobj 4525 0 obj << /D [4477 0 R /XYZ 95.641 200.249 null] >> endobj 4526 0 obj << /D [4477 0 R /XYZ 95.641 165.878 null] >> endobj 4527 0 obj << /D [4477 0 R /XYZ 95.641 160.897 null] >> endobj 4528 0 obj << /D [4477 0 R /XYZ 95.641 150.934 null] >> endobj 4529 0 obj << /D [4477 0 R /XYZ 181.121 136.09 null] >> endobj 4530 0 obj << /D [4477 0 R /XYZ 210.172 136.09 null] >> endobj 4531 0 obj << /D [4477 0 R /XYZ 215.552 136.09 null] >> endobj 1114 0 obj << /D [4477 0 R /XYZ 146.232 115.168 null] >> endobj 4532 0 obj << /D [4477 0 R /XYZ 95.641 110.187 null] >> endobj 4533 0 obj << /D [4477 0 R /XYZ 95.641 105.206 null] >> endobj 4534 0 obj << /D [4477 0 R /XYZ 95.641 70.834 null] >> endobj 4535 0 obj << /D [4477 0 R /XYZ 95.641 65.853 null] >> endobj 4476 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4538 0 obj << /Length 2796 /Filter /FlateDecode >> stream xÚ•ÙŽÛÈñÝ_!ûÀFm²y#AÇžq&°½ {¼› ÎCÔ’S¤ ’3Öß§®¦HНÁ‡¾ª«««ëf°ðá y¬’(X¤:W:‰«ý ±…•w/𡊳—þ~ÿâÕm˜/r•'áâ~C÷ëÿxovæÐÚãÕRǾ§ÕÕïÿùê6Ê&E*ŽC~w{óþîãÍg†"ŒÆ©Àýöé×wŸ^øp÷ñcþts{óéæãUཹÁ½/nî{2£ SQ,–=µÓ‹,ÃÔW ´Z«<ˆú Eñ™Nw¡ß½{+·ÀU?ÅE¨,Ïbs´v!ûƒ\…‰£ÿ«û—¬ˆU˜ ÀëÿžA‘¨<Î(‚¿›â3›–Q¦Ò@C¨, … « ó€(bUs0+隦©W…iíšÇOE»“h¢Ü{4ÇÂ<”3×YÂ}r/–±V™¯ùõêÕ·KŠt¤BíØTëYÖôœéªrK+?Ó _h̯kˆüL{mÍ3„z†öØÔOÕGn7f_”'îoÕOíí¾>ž®‚ ð®W59¦«–Hçb™æ ÀŠÀWyœ…B‚pšžè×¢= ا+Õ À{‘h¢:J`†oßìª-mÉkê’¯>«<"ŠÞšÖ<˜Æ^²6¹K"a-ãn»cÕÀaaèµ;äsy•Ù[žª7“¥Uwä}UË+k9욇ðD›®dØ¢’ÍE[Õ–¼ûPÛfæ:KIs™ÂñÞÍ~FôÃÔ7F1ºOè'L4vø>ØÃûŒ–F÷Á ‘·ÀCyêÀ†¤Ì‘ ºš¥Žäßáñ xýKÖû*õÓ9Öèy”ýÔ’øéÙM®|VÈà ÚÂLYâ,n±±ï‹Ê6—ÄÅ€ÎÏ{®÷×)´ÛëKÜ1ZÙ*4ª3ª¬•N^5gZ2”=JïçSÓÚ™7#ÀåÌ‚ýnW]kQp}ß+Zé4í‘ úl9¶ÝžEgÊpó}ÈÝ¿x€fš”ú>/ÿ¸ŠcßuýÔLö„=‡#ZS4ÍrôΖ%¿’P:|¤U½ßƒU!~jï,£Çú ³¬cÐi˜BhÏß{OEYr¯ª[¬W ÊÀtð&iˆÇ¡}àA»3ZžBŠ_;: âÞòE—I¬‚±>»Wö½¾ÝJ‹bìœw]•@ÀÉ œG'qý ÆÂ—­mÁÒ‚ÛjO—L´òýf!(a{4+Ò=õ‚>{ÞȽ0Ì8­C Û(žüm4És‡’á^3£²@ÅþØàoy{wPM÷p Ž".9wª#oèÄkD³†[=’^À̆/AÜÓ;À7{j¸w¦ÖÍ£)JŠ¥x­Q¯^3öµ(Ò$yËYÜ€ ®9>+ª‰J•å’ØKF®XË,À;¥ú<ÐQŽh ó¥×¹3óKü(Zr‚ÄE¯m!2¥ýSHšÛ6Óë0 ¤Ï¨ùõK:ýÕÕ2ð^íÚ}ù’Ø6“MËIàörÍž§cѧWL7%I¾>6’MAJ/Óäi±íÚC7ɵ ‹ý…1âmmuÍ£. 'XT(ž‹´K–Õ=,Ïr `sé‹!|‘«\Dz`—yªÈEå0q6ŒûWiD_ä>œF¯c³P½ˆ>þ5Ëâ›^Ú¦qSF&Á…J­A7(â–î³>èQ|íÙÙAØù´Ã²EÅHO+‰…´»#tz+¤µÜWpóKh—Pâi;;Ä…ö„Ñ…gtN f\8!ÿ™l®¯ ¯íC·).BÂ’&—~.“)Ña’{nŠ˜‹ã 2wÃC_yÃâÆžïótâ–è¥ÍðÕaÅVǯyz[?4=VrxÜ@ç‚ÖßQ³™…–¸HÑ ŒLš^h­úšÉÿ«Ù¤´5›ñ©\R<àÔ2Ô çì÷Q˜pÕ•î°O‘¦Žé·$7tå Tï\wbõžv§q)tHÖ0¥•²X4ñ;óØC#ö;=1ºûó"ä$èðhÊÎΖòp&TJ’IšxŠÏÑ}ˆ¤¤.Ûï7HÒ€S•}¬œ´çi²‘€À𰯶Ө¨Î{‰Éq¤4|™Èqh)Ä:§. =UøÈ­ó9’÷±z1\w<Ôͳ™ÅI=›. €¹J³‹!“ÿ‰Ÿôjõ¤•!·ú¹û;A1ÜàïŽ% >¨;s G"Xh•Ön—iÆ1¥¤EY¤Âl•JÔ•å^@¥ˆÌ{3¨;äÞ¾kd,-¬·æÙ˜Ã½M_,–}Eäý IÛa¿‘ƒJN–Hº²> Øô´+V»1f3ck‡)R,Aý(ÜàCñ05üá~¹jâ@--›MÐÀ ®(pÓ¢¤Úe¯Êм&¥s€…S~ó/¬bü+—© Iùï(•]ÉŸ*{o…e3&ÐíÆ¿eðÂÏÛ†L¥‘ûíñ` ñlæ Ì Ï:éÿ¹ùºZSÐ’Bèp,Pf©-g¿ùÇ'WýM©hÔRY .X{:XAÁ1–+X)BÐÀQ:ÝÖçHî`L k± ™ŠÒq‘Ö,Åþ)‡ÍزÆ@"yÌ0œ\Ìf3Œaqü`¹‘ö‘šâÑ$,‡çXÖìÚ¡5‚g Tïçâ²ÕŠC!@ƒï ÿ6ª{‰þ°„A†ÞZ³î«:—ÏûJ§ñß78L5ýuÜ‹"À¨X~?ûË;ÑÏýö‡ûÿjoUendstream endobj 4537 0 obj << /Type /Page /Contents 4538 0 R /Resources 4536 0 R /MediaBox [0 0 609.714 789.041] /Parent 4310 0 R >> endobj 4539 0 obj << /D [4537 0 R /XYZ 95.641 729.265 null] >> endobj 4540 0 obj << /D [4537 0 R /XYZ 95.641 741.22 null] >> endobj 4541 0 obj << /D [4537 0 R /XYZ 95.641 716.314 null] >> endobj 4542 0 obj << /D [4537 0 R /XYZ 170.361 706.351 null] >> endobj 4543 0 obj << /D [4537 0 R /XYZ 189.728 706.351 null] >> endobj 4544 0 obj << /D [4537 0 R /XYZ 195.108 706.351 null] >> endobj 1118 0 obj << /D [4537 0 R /XYZ 146.232 685.43 null] >> endobj 4545 0 obj << /D [4537 0 R /XYZ 95.641 680.448 null] >> endobj 4546 0 obj << /D [4537 0 R /XYZ 95.641 675.467 null] >> endobj 4547 0 obj << /D [4537 0 R /XYZ 95.641 622.665 null] >> endobj 4548 0 obj << /D [4537 0 R /XYZ 95.641 622.665 null] >> endobj 4549 0 obj << /D [4537 0 R /XYZ 187.455 611.706 null] >> endobj 4550 0 obj << /D [4537 0 R /XYZ 399.687 611.706 null] >> endobj 4551 0 obj << /D [4537 0 R /XYZ 270.963 600.747 null] >> endobj 4552 0 obj << /D [4537 0 R /XYZ 95.641 592.956 null] >> endobj 4553 0 obj << /D [4537 0 R /XYZ 95.641 592.956 null] >> endobj 4554 0 obj << /D [4537 0 R /XYZ 476.413 584.807 null] >> endobj 4555 0 obj << /D [4537 0 R /XYZ 360.339 573.848 null] >> endobj 4556 0 obj << /D [4537 0 R /XYZ 181.648 562.889 null] >> endobj 4557 0 obj << /D [4537 0 R /XYZ 291.267 562.889 null] >> endobj 4558 0 obj << /D [4537 0 R /XYZ 95.641 555.098 null] >> endobj 4559 0 obj << /D [4537 0 R /XYZ 95.641 555.098 null] >> endobj 4560 0 obj << /D [4537 0 R /XYZ 320.15 546.949 null] >> endobj 4561 0 obj << /D [4537 0 R /XYZ 362.86 546.949 null] >> endobj 4562 0 obj << /D [4537 0 R /XYZ 95.641 517.24 null] >> endobj 4563 0 obj << /D [4537 0 R /XYZ 162.851 509.091 null] >> endobj 4564 0 obj << /D [4537 0 R /XYZ 95.641 490.341 null] >> endobj 4565 0 obj << /D [4537 0 R /XYZ 162.962 482.192 null] >> endobj 4566 0 obj << /D [4537 0 R /XYZ 95.641 452.483 null] >> endobj 4567 0 obj << /D [4537 0 R /XYZ 162.63 444.334 null] >> endobj 4568 0 obj << /D [4537 0 R /XYZ 95.641 436.543 null] >> endobj 4569 0 obj << /D [4537 0 R /XYZ 163.789 428.394 null] >> endobj 4570 0 obj << /D [4537 0 R /XYZ 95.641 387.726 null] >> endobj 4571 0 obj << /D [4537 0 R /XYZ 162.535 379.577 null] >> endobj 4572 0 obj << /D [4537 0 R /XYZ 95.641 312.01 null] >> endobj 4573 0 obj << /D [4537 0 R /XYZ 95.641 233.504 null] >> endobj 4574 0 obj << /D [4537 0 R /XYZ 162.815 225.355 null] >> endobj 4575 0 obj << /D [4537 0 R /XYZ 266.252 214.396 null] >> endobj 4576 0 obj << /D [4537 0 R /XYZ 95.641 195.646 null] >> endobj 4577 0 obj << /D [4537 0 R /XYZ 162.792 187.497 null] >> endobj 4578 0 obj << /D [4537 0 R /XYZ 95.641 168.747 null] >> endobj 4579 0 obj << /D [4537 0 R /XYZ 203.242 160.598 null] >> endobj 1296 0 obj << /D [4537 0 R /XYZ 95.641 130.889 null] >> endobj 1122 0 obj << /D [4537 0 R /XYZ 222.24 100.513 null] >> endobj 4580 0 obj << /D [4537 0 R /XYZ 95.641 91.99 null] >> endobj 4581 0 obj << /D [4537 0 R /XYZ 162.206 83.527 null] >> endobj 4582 0 obj << /D [4537 0 R /XYZ 293.737 61.609 null] >> endobj 4583 0 obj << /D [4537 0 R /XYZ 95.641 60.201 null] >> endobj 4536 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R /F26 1177 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4586 0 obj << /Length 1455 /Filter /FlateDecode >> stream xÚ½XÝoã6 ï_ÜSrHTËòGŒ=õzi×!×zÁ^¶aPc91æØ™?ú±aÿûHQvìØiî0l(RQùI‘”d>²à—yùvÀlÏ­wÖh3·Üpð¹`sß æÎ}dø°º¸¼Á(`'F«Hó­ÂŸÇ×[¹/U>™Ù®5¶Ùä×Õ—7Î|4F‡¹®0ÜË»›Åòî~ñ…øÚ€.gÂõ ßç‡o®>}º»¿%ä‡ÅÍâaq?áãëÊ^,V²¶À%‚ѬÑöØœ™ð-æAkÛ,àNcãô¬ Zü´¸_3pÚòqVØÌöÃò&ÇÅ®Åd0x-¨mýÅr­¾;\&æ†áîþã]ÃæÌ·ÝÿÎøÊ=øjæ p–=š9œÍaX-;/JrW­¡î¨'•šñ,B0Ÿq—©ÁœŒ_³Šˆg©Ù’Ôä>gU§ æãr+ËÖ”*«<-h Ü*"ú@§VÈ(Ë xJ`qÆOqXɤF¨Á㢣5kÔ·X[Žú£¡Sàðüñòã$¼Ú~3|½Íã¢TiœnhZ«Wa•”0d3‚d Q–$Ùs#ßu̯Á˜¾fм^*dýFæ€ÍmO3GUºžÌ<ËoTù›1cü3™ñqŒ±@ éµ P0Á£ϦY¨ #O±7$ѶXѼS/H¼£±WŸ?5Ô)HÀïhˆ+¢ÞM«ý^å(XÊ 6õÒø›òšz[‘\ÇQ[Z3Îúœ¿=a £Z]H»'ØM2@±a/m~È’€›,Âd PeFm¡$F0^o©O‘„ øŒ³TG8ôu6D×<‘zVy3aXs4+®uƱËÂ8z5‹Cˆö#¯(s¬‚[_Ôê`œc¾z¡ÞZ& 1ÈõzéÐA8yp˜f4·ŒWÏq¡¦3¢Vë†y£³ ºöyœå`ÿŸêÀÐט IùXà–Ð$ É èJjÖí\ÆSZ„åV0”aZê¹à­ñTR¨ÓÈΡfvP¢öÕ¥%¸ÛZ‚{hZJÃí% +SbÐ ‹!.f $f{ƒ{ójhºkþAv ,nMõi×.ìBÁ`¤ž.±ÐÕf£û­RåjèË÷§ US¤¸É»‚8%5ÕØ1.F².AQVùh ÷œÓ­­sÆžé¡>Èå”–Ö>ìV(™+"ÖYZÄ¡ÊUhä0=°¥c©,‡yª=5Þ_ö+ÌÙÊmVÚç**šÔ8QÑ U"lº°†Å ,½ûZÆä«aeù6ãéCç„‘}Ÿ¶ Ø:lÔøÿøPAgvsúÀ6¿kõÓ¬ÖýøÜÑMÏ©íc’!ÿZA Ó q¿ÞR±µŸi†Øíãü?Òs9¬grFÏäÕózxÇå™-—gôìçõMuV;Ü8Z³g«†P8*µcëM;—œÅëX"¿íú„F¾U|›ž+<“œ h!™Äå+ ÁÓD·eÃs8·hœ®GÅtà %fܼ¡ (caÚ›¾’.èÔï±$Ÿ9žhã”§`D`>IGXh&p)ÇéÑ€µaDxØÕ ã-bö ¸°<É8‘‰¢ñª Ûtù–l__8qx/s¹Sú™Ž]zù žÆžwä³¾^Âgžœv¼*­®Ã0\æ5»ó­Þ€k?Íñº*8š¾ìÙ u‹mV%!ÑX°Mà6Ä?§î£‘ÄgQÒƒ{_‰zŽõ­¹ÅMѹ˞j¡ˆ^‰;A™c”mÛUdZ˜®bO*/šûÙÐVù³„SQ‰#•À;´è;Æ™3‡ÏÇ}5™9>\è …ý„lünâXá¡oßúä‰cld±Iª†ü .Éöendstream endobj 4585 0 obj << /Type /Page /Contents 4586 0 R /Resources 4584 0 R /MediaBox [0 0 609.714 789.041] /Parent 4608 0 R >> endobj 4587 0 obj << /D [4585 0 R /XYZ 95.641 729.265 null] >> endobj 4588 0 obj << /D [4585 0 R /XYZ 95.641 741.22 null] >> endobj 4589 0 obj << /D [4585 0 R /XYZ 209.634 706.351 null] >> endobj 4590 0 obj << /D [4585 0 R /XYZ 215.014 706.351 null] >> endobj 1126 0 obj << /D [4585 0 R /XYZ 146.232 685.43 null] >> endobj 4591 0 obj << /D [4585 0 R /XYZ 95.641 680.448 null] >> endobj 4592 0 obj << /D [4585 0 R /XYZ 95.641 675.467 null] >> endobj 4593 0 obj << /D [4585 0 R /XYZ 95.641 656.717 null] >> endobj 4594 0 obj << /D [4585 0 R /XYZ 95.641 616.473 null] >> endobj 4595 0 obj << /D [4585 0 R /XYZ 95.641 460.254 null] >> endobj 4596 0 obj << /D [4585 0 R /XYZ 95.641 193.176 null] >> endobj 4597 0 obj << /D [4585 0 R /XYZ 382.553 182.217 null] >> endobj 4598 0 obj << /D [4585 0 R /XYZ 443.814 182.217 null] >> endobj 4599 0 obj << /D [4585 0 R /XYZ 143.462 171.258 null] >> endobj 4600 0 obj << /D [4585 0 R /XYZ 417.953 171.258 null] >> endobj 4601 0 obj << /D [4585 0 R /XYZ 461.515 171.258 null] >> endobj 4602 0 obj << /D [4585 0 R /XYZ 143.462 160.299 null] >> endobj 4603 0 obj << /D [4585 0 R /XYZ 219.496 149.34 null] >> endobj 4604 0 obj << /D [4585 0 R /XYZ 95.641 149.126 null] >> endobj 4605 0 obj << /D [4585 0 R /XYZ 95.641 131.691 null] >> endobj 4606 0 obj << /D [4585 0 R /XYZ 95.641 126.71 null] >> endobj 4607 0 obj << /D [4585 0 R /XYZ 95.641 116.747 null] >> endobj 4584 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4611 0 obj << /Length 1291 /Filter /FlateDecode >> stream xÚ½WÝoã6 ï_‘Çht–lù{ÚÚ´Èp×mp° ƒc+ŽÐÄb¹Eÿû‘¢ì8qºvwðƒ(Š¤ÈŸHJæ#>>J$ >ŠDÂD(GÙö°r{Á„7ò™Œ#\úiqñéÆOF KB´XY‰EþÛøjîŒÚO¦BzcÁ&,~þtÄ£C &¥ï¤?ÏofŸçw³G’딜ù2rr¿<Üß>üøåËüî–,?Ìnf³» _ÍP÷b¶èÜ xÌŸ¦·§LýÈc!ŒB°„]@<øÙôõ~~í¢ÀU/ÂE²8IœD¡Œ.s½­‹ž\-¸Â[Áß=é ‘ÌZ‰ùÝõüϯC3¾ÏüX8¡Ë¡ î±(tË‹„ihC°°³®ðèòú”û“I8šœÅoeu®J£W¯„üNíëª$Ú¬÷«¦X£©ÛÓ×%$Â*ÍÔЗ)‡-…M¥ÏÄ?ÙœGN:ŠÞC9î@^œÃXÀ®ÿ‹Ž<8‚;€V´ñ=€ H_êÃ×fÿîò˜ð9‡2”?¾K&£Ëü ”!L]ïƒ\€ùrWÁb2wAúJM¦¾—ŒWM™]•5MSZt“çToÒå§Ü¯ª=ñMEc¡JµO“¾]_ÝqV«ý65DWÙ5¦§É1§DÛíª½±{à²Ç™XW[M€›'Ф«Žrœn6Ä "¯i¢KZµ{ ƒb*š-ô…¾<ѵ2ŒkD¯V4ëƒbyEcYZ×N[Õç|ÏÒZ¡jЇ g˜Ôµ=(ë°Ò2'¢© m¤)xF“ÅZ;cYZ±´r18V:mÖÎ ;Ê”bŸn/Rã¶Ôç|¶{`º5E¡j£ò6ãRÓRd¢h Í)§Øeí¼$²„\/&ì€xé,¾VMÏž‚u²/)´‹œ « ]–, ¬Ç·ª,TžUÛaEAÊ{¢í¡]†À¤Ú&<ÌR|È…’§äMVÙ1'IJ Tš­‰jóiíT)µ‰uéö( ›°­-PçeÿVéV[|ïÄš˜î<€ÚضúD“Ž©ÒÚ‘æ¥"ÂVŒïê‰CÅø¥r·*tÝq*èAkè/Q0fÄr©T[!ÎH}&£\<ÃŒÉ$ŠBðñ2Íž^Ò`\‚cÜ¥F/õF›× çÂn Ucå2uIŒÙ3Õ˜¡ÚÞ=ú‰­þWl±Ä;=FTØUö¢¯I¢ÍØ¿k>P—å¶Ê5¶ •£ ‘ç* ÖJª¿ÈYõž‡çõ«$> endobj 4612 0 obj << /D [4610 0 R /XYZ 95.641 729.265 null] >> endobj 4613 0 obj << /D [4610 0 R /XYZ 170.361 706.351 null] >> endobj 4614 0 obj << /D [4610 0 R /XYZ 218.78 706.351 null] >> endobj 4615 0 obj << /D [4610 0 R /XYZ 224.159 706.351 null] >> endobj 4616 0 obj << /D [4610 0 R /XYZ 268.301 706.351 null] >> endobj 4617 0 obj << /D [4610 0 R /XYZ 268.301 706.351 null] >> endobj 1130 0 obj << /D [4610 0 R /XYZ 146.232 685.43 null] >> endobj 4618 0 obj << /D [4610 0 R /XYZ 95.641 680.448 null] >> endobj 4619 0 obj << /D [4610 0 R /XYZ 95.641 675.467 null] >> endobj 4620 0 obj << /D [4610 0 R /XYZ 213.938 611.308 null] >> endobj 4621 0 obj << /D [4610 0 R /XYZ 219.318 611.308 null] >> endobj 4622 0 obj << /D [4610 0 R /XYZ 258.079 611.308 null] >> endobj 4623 0 obj << /D [4610 0 R /XYZ 258.079 611.308 null] >> endobj 1134 0 obj << /D [4610 0 R /XYZ 146.232 590.386 null] >> endobj 4624 0 obj << /D [4610 0 R /XYZ 95.641 585.405 null] >> endobj 4625 0 obj << /D [4610 0 R /XYZ 95.641 580.423 null] >> endobj 4626 0 obj << /D [4610 0 R /XYZ 95.641 546.052 null] >> endobj 4627 0 obj << /D [4610 0 R /XYZ 95.641 541.071 null] >> endobj 4628 0 obj << /D [4610 0 R /XYZ 95.641 531.108 null] >> endobj 4629 0 obj << /D [4610 0 R /XYZ 170.361 516.264 null] >> endobj 4630 0 obj << /D [4610 0 R /XYZ 213.938 516.264 null] >> endobj 4631 0 obj << /D [4610 0 R /XYZ 219.318 516.264 null] >> endobj 4632 0 obj << /D [4610 0 R /XYZ 274.219 516.264 null] >> endobj 4633 0 obj << /D [4610 0 R /XYZ 274.219 516.264 null] >> endobj 1138 0 obj << /D [4610 0 R /XYZ 146.232 495.342 null] >> endobj 4634 0 obj << /D [4610 0 R /XYZ 95.641 490.361 null] >> endobj 4635 0 obj << /D [4610 0 R /XYZ 95.641 485.38 null] >> endobj 4636 0 obj << /D [4610 0 R /XYZ 95.641 432.578 null] >> endobj 4637 0 obj << /D [4610 0 R /XYZ 343.649 421.619 null] >> endobj 4638 0 obj << /D [4610 0 R /XYZ 95.641 380.951 null] >> endobj 4639 0 obj << /D [4610 0 R /XYZ 95.641 380.951 null] >> endobj 4640 0 obj << /D [4610 0 R /XYZ 95.641 321.176 null] >> endobj 4641 0 obj << /D [4610 0 R /XYZ 95.641 321.176 null] >> endobj 4642 0 obj << /D [4610 0 R /XYZ 218.155 302.067 null] >> endobj 4643 0 obj << /D [4610 0 R /XYZ 95.641 288.299 null] >> endobj 4644 0 obj << /D [4610 0 R /XYZ 95.641 270.864 null] >> endobj 4645 0 obj << /D [4610 0 R /XYZ 95.641 265.883 null] >> endobj 4646 0 obj << /D [4610 0 R /XYZ 95.641 255.92 null] >> endobj 4647 0 obj << /D [4610 0 R /XYZ 170.361 243.885 null] >> endobj 4648 0 obj << /D [4610 0 R /XYZ 213.938 243.885 null] >> endobj 4649 0 obj << /D [4610 0 R /XYZ 219.318 243.885 null] >> endobj 1142 0 obj << /D [4610 0 R /XYZ 146.232 222.964 null] >> endobj 4650 0 obj << /D [4610 0 R /XYZ 95.641 217.983 null] >> endobj 4651 0 obj << /D [4610 0 R /XYZ 95.641 213.001 null] >> endobj 4652 0 obj << /D [4610 0 R /XYZ 95.641 178.63 null] >> endobj 4653 0 obj << /D [4610 0 R /XYZ 95.641 173.649 null] >> endobj 4654 0 obj << /D [4610 0 R /XYZ 95.641 163.686 null] >> endobj 4655 0 obj << /D [4610 0 R /XYZ 170.361 148.842 null] >> endobj 4656 0 obj << /D [4610 0 R /XYZ 233.305 148.842 null] >> endobj 4657 0 obj << /D [4610 0 R /XYZ 238.685 148.842 null] >> endobj 1146 0 obj << /D [4610 0 R /XYZ 146.232 127.92 null] >> endobj 4658 0 obj << /D [4610 0 R /XYZ 95.641 122.939 null] >> endobj 4659 0 obj << /D [4610 0 R /XYZ 95.641 117.958 null] >> endobj 4660 0 obj << /D [4610 0 R /XYZ 95.641 83.587 null] >> endobj 4661 0 obj << /D [4610 0 R /XYZ 95.641 78.605 null] >> endobj 4662 0 obj << /D [4610 0 R /XYZ 95.641 68.643 null] >> endobj 4609 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4665 0 obj << /Length 1183 /Filter /FlateDecode >> stream xÚµWÉnã8½ç+t”˜ÍU¢Ð§éÄ <è$Ä3—é>(m P$âx¾~Š*J¶le™CÃq)>ÖòªXf… E"É‚˜'„G*È^.h°‚Û æ%˜DÇ<DéØ |[\|¹I$ÁbÙÊ-ò«uº±f;™rECN&¿~¹‘:Ð 9A)‰RÂKŸß̾ÏïgO(w ¨*ör?nÿ¸»›ßß"òãìfö8»Ÿ°ðjæÎ^̽²\¸+’`Úk{jÎTÄ”Dðåœ$LöIuг3èï‡ùµ·ÂíÒØmòˆè$ñ+S­LžÕ/ÝÖÕêHØCÅœD\{éŸTÑs¯(":§Ùâ‚E$æüÁ¾z©ƒÇ¦Œ2SL%#ZŠN9³M­A·Ýή¯îpü“R^úõåvÂtX¿ÀL&áÆl›ºÂÆXw€Ã=\Sʼn¦¼Åþ¶ŸL…¡]JšÒ¤_¨—ø}ÄÂAº‰ àüK7æaZ–¸¾+Àw(–;ÓxV3WÖYêå³zS˜æ'i•£´ÓäÌw‚kpK­&}5ç¾ãŠP˜£ˆƒ;Cq‘XJçf’½Z0»Ç“”pÝÅk¹«2 æƒI<S×õ®ÌqüìI0…•-ÐØr‹»ª2™Ûišt»Ÿ0ÆB2B íèÎ:öŒ›' “]Ò^ ÞÖ˜ÊâB]u7/ë-.«7©-¦È.áÖ8¸à¹( Û£!¦@ž†¸þíqõµ¨w â³°°x ßmÊ"zæ8/lƒöœÞ½xýX›:¶FI¯ü«ß¤ž@þøŸaëÙ€hèÞ2® ‰MKóÇv’aá\êö>Êv[¼¹²hŒ]0BíÔiÙòLô$ðgjÄ-¡`ïë¼6^6­öp°Z¹D‰øÐˆ§w8ÈdrtÈç6WÛÄN_ºä?h³´¡åDÐèý bD±î¶¥§,@WbÂ9V§Å£+é§åUÄ$Rç ;P)!"Š?]SOïéK‰ôGe5Vt÷UUtBwµ‘V÷ínëýj#W[C]š¯ÆœÓUWAþ‡gŽ#?0 ^ëD|äœ8ùŒwÄÞÑ %ƒ7ç@­´éÈözJ¶·•¿šñhó>˜¹±i¶®ê|„…*‚ºÛs¾j¬Ió> g°RAE{ØÒXó,”þä]rIh,<¹Å';‡Ó+ºi"û|ú8†÷׳sèo¨ÒEœ/D½|ñÓ*yÚ+¶ÛÆÈí{ ‹Ù`ÞŒò¼­ƒÜg l›†Ó%vPÈûÆÁ­»ÆA$—¸3úÔ3”è .¡1³ës‹¡?ÔZž<ÎþÝÉ2³±Õà1ê_"Ž)í”Øo ®”Ec/½¹Z.ù°Q0ÖÓзÆ6}. 9Ôä3S" |O´Ä÷b'Ô„KúæfXÊ»šß>6ðí·fàÍe¡ÉGÙÌ¡}¡zÀæùýâœÌÇ5ÿDÇ—¡ãßßG n<¤rSük†e84¶Çœ¹šÃJ,Q|ô¯ƒ¤—‘³ù½A‘:Åv"OuÿQ3_endstream endobj 4664 0 obj << /Type /Page /Contents 4665 0 R /Resources 4663 0 R /MediaBox [0 0 609.714 789.041] /Parent 4608 0 R >> endobj 4666 0 obj << /D [4664 0 R /XYZ 95.641 729.265 null] >> endobj 4667 0 obj << /D [4664 0 R /XYZ 170.361 706.351 null] >> endobj 4668 0 obj << /D [4664 0 R /XYZ 242.989 706.351 null] >> endobj 4669 0 obj << /D [4664 0 R /XYZ 248.369 706.351 null] >> endobj 1150 0 obj << /D [4664 0 R /XYZ 146.232 685.43 null] >> endobj 4670 0 obj << /D [4664 0 R /XYZ 95.641 680.448 null] >> endobj 4671 0 obj << /D [4664 0 R /XYZ 95.641 675.467 null] >> endobj 4672 0 obj << /D [4664 0 R /XYZ 95.641 622.665 null] >> endobj 4673 0 obj << /D [4664 0 R /XYZ 472.171 611.706 null] >> endobj 4674 0 obj << /D [4664 0 R /XYZ 143.462 600.747 null] >> endobj 4675 0 obj << /D [4664 0 R /XYZ 368.295 600.747 null] >> endobj 4676 0 obj << /D [4664 0 R /XYZ 143.462 567.87 null] >> endobj 4677 0 obj << /D [4664 0 R /XYZ 285.917 567.87 null] >> endobj 4678 0 obj << /D [4664 0 R /XYZ 95.641 567.656 null] >> endobj 4679 0 obj << /D [4664 0 R /XYZ 95.641 550.222 null] >> endobj 4680 0 obj << /D [4664 0 R /XYZ 95.641 545.24 null] >> endobj 4681 0 obj << /D [4664 0 R /XYZ 95.641 535.278 null] >> endobj 4682 0 obj << /D [4664 0 R /XYZ 181.121 520.648 null] >> endobj 4683 0 obj << /D [4664 0 R /XYZ 200.488 520.648 null] >> endobj 4684 0 obj << /D [4664 0 R /XYZ 205.868 520.648 null] >> endobj 1154 0 obj << /D [4664 0 R /XYZ 146.232 499.726 null] >> endobj 4685 0 obj << /D [4664 0 R /XYZ 95.641 494.745 null] >> endobj 4686 0 obj << /D [4664 0 R /XYZ 95.641 489.763 null] >> endobj 4687 0 obj << /D [4664 0 R /XYZ 95.641 455.392 null] >> endobj 4688 0 obj << /D [4664 0 R /XYZ 95.641 450.411 null] >> endobj 4689 0 obj << /D [4664 0 R /XYZ 95.641 440.448 null] >> endobj 4690 0 obj << /D [4664 0 R /XYZ 181.121 425.604 null] >> endobj 4691 0 obj << /D [4664 0 R /XYZ 215.014 425.604 null] >> endobj 4692 0 obj << /D [4664 0 R /XYZ 220.393 425.604 null] >> endobj 1158 0 obj << /D [4664 0 R /XYZ 146.232 404.682 null] >> endobj 4693 0 obj << /D [4664 0 R /XYZ 95.641 399.701 null] >> endobj 4694 0 obj << /D [4664 0 R /XYZ 95.641 394.72 null] >> endobj 4695 0 obj << /D [4664 0 R /XYZ 95.641 341.918 null] >> endobj 4696 0 obj << /D [4664 0 R /XYZ 162.7 330.959 null] >> endobj 4697 0 obj << /D [4664 0 R /XYZ 264.736 330.959 null] >> endobj 4698 0 obj << /D [4664 0 R /XYZ 95.641 330.745 null] >> endobj 4699 0 obj << /D [4664 0 R /XYZ 95.641 313.31 null] >> endobj 4700 0 obj << /D [4664 0 R /XYZ 95.641 308.329 null] >> endobj 4701 0 obj << /D [4664 0 R /XYZ 95.641 298.366 null] >> endobj 4702 0 obj << /D [4664 0 R /XYZ 170.361 283.736 null] >> endobj 4703 0 obj << /D [4664 0 R /XYZ 218.78 283.736 null] >> endobj 4704 0 obj << /D [4664 0 R /XYZ 224.159 283.736 null] >> endobj 1162 0 obj << /D [4664 0 R /XYZ 146.232 262.814 null] >> endobj 4705 0 obj << /D [4664 0 R /XYZ 95.641 257.833 null] >> endobj 4706 0 obj << /D [4664 0 R /XYZ 95.641 252.852 null] >> endobj 4707 0 obj << /D [4664 0 R /XYZ 95.641 200.05 null] >> endobj 4708 0 obj << /D [4664 0 R /XYZ 296.82 189.091 null] >> endobj 4709 0 obj << /D [4664 0 R /XYZ 498.312 189.091 null] >> endobj 4710 0 obj << /D [4664 0 R /XYZ 143.462 178.132 null] >> endobj 4711 0 obj << /D [4664 0 R /XYZ 170.062 178.132 null] >> endobj 4712 0 obj << /D [4664 0 R /XYZ 212.761 178.132 null] >> endobj 4713 0 obj << /D [4664 0 R /XYZ 95.641 175.323 null] >> endobj 4714 0 obj << /D [4664 0 R /XYZ 95.641 157.888 null] >> endobj 4715 0 obj << /D [4664 0 R /XYZ 95.641 152.907 null] >> endobj 4716 0 obj << /D [4664 0 R /XYZ 95.641 142.944 null] >> endobj 4717 0 obj << /D [4664 0 R /XYZ 164.981 130.909 null] >> endobj 4718 0 obj << /D [4664 0 R /XYZ 208.558 130.909 null] >> endobj 4719 0 obj << /D [4664 0 R /XYZ 213.938 130.909 null] >> endobj 1166 0 obj << /D [4664 0 R /XYZ 146.232 109.988 null] >> endobj 4720 0 obj << /D [4664 0 R /XYZ 95.641 105.006 null] >> endobj 4721 0 obj << /D [4664 0 R /XYZ 95.641 100.025 null] >> endobj 4663 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R /F45 1307 0 R /F35 1187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4724 0 obj << /Length 185 /Filter /FlateDecode >> stream xÚuÏK ‚@ðû~Š9êÁqßîKV1ÔbÛ[tˆž— ¢ïOš"Èç7?Ú«PK·Èµ‚ó“P¸w’°QP¨LÖ·Ö¤…°`ÑjáöárˆòÇéõ¹¾ã„+qŒa“Ò€é î¡”¨”u]®®Z·Ü|¡b(T6ºß–~Õ4U[›½+œwmÌ¢Üõ³Ä…éMÉ JÁ ™¾ý’LD޲K=C‹Ñ´^ºDçó_+^H,endstream endobj 4723 0 obj << /Type /Page /Contents 4724 0 R /Resources 4722 0 R /MediaBox [0 0 609.714 789.041] /Parent 4608 0 R >> endobj 4725 0 obj << /D [4723 0 R /XYZ 95.641 729.265 null] >> endobj 4722 0 obj << /Font << /F39 1263 0 R /F48 1428 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4726 0 obj << /Type /Encoding /Differences [ 0 /.notdef 1/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring 10/.notdef 11/breve/minus 13/.notdef 14/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl 22/.notdef 30/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 127/.notdef 130/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE 141/.notdef 147/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe 157/.notdef 159/Ydieresis 160/.notdef 161/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] >> endobj 1428 0 obj << /Type /Font /Subtype /Type1 /Encoding 4726 0 R /BaseFont /Courier-Oblique >> endobj 1307 0 obj << /Type /Font /Subtype /Type1 /Encoding 4726 0 R /BaseFont /Courier >> endobj 1262 0 obj << /Length1 1642 /Length2 14039 /Length3 532 /Length 14925 /Filter /FlateDecode >> stream xÚíweP\ݶ-nA‚´qww îwh q‡àîwwî\ƒ‡ ÁÝ!¸¿|ßyçžWçÞ_ïÞ_¯Þ®ê]{Í1ט2Ö\UMM®ªÎ,nî` ’v°wafgah~ÒVÚÚÍÁŠÌr.@[À37 5õGèv°—º€Ú s€$È ÀÁ`çççG¡|tpô„€-­\t8è™þeùË`êùOäÏNg°¥=€æÏ‡ÈÖÁÑdïò‡âÿz£:p±,À¶ €ª¦„¢ÜGøŸ"ÌÁöiÈTÕÕÔlP›ìAô Àö €™ƒ½9ø¯ÒœYþp‰;€gGøOí 3ã_À±;;ÿù€– ½ËŸ¸8Àöf¶®æ%ðÇnáðwBއ?v°?dªÎ.Îf°£ àOTUIéäébtù+¶3ø p°øãiî`æúWIchþ .@°½3ÀäáòW,SÀììh ôüû™#üw®Î`{ËeÀ€€,s[³óš?Üuç_uþꎎ¶žïvøÛë?r»8ƒl-XPØ9þÄ4sùÛlÂú×Q‘³·p°³ýÃnîêøOÌ ù»Atú?IÍìm=æ Ve—?!tÿw*³üωü? ñÿˆÀÿ#òþ÷Äýwþ!þïÎó¿SK»ÚÚ*í@oüóŽ(þºdÀfÿÉh¶õü¯6ü»§6èY~YºÚ!ÿÿƒ^ÜÞò"Ìü,Üÿ°‚¥Á sU°‹™Àhû§WÛ5íÍA[°=覷ÀÌÎÆöo˜†ØÌÆþ¯æsÿÙ›ÿ{údú;yV =Y5 mÆÿ|¯þí§úG OGàÑVr0ÿÅ_,ofv^63'÷Ÿ±û3xü\ì>ÿEÄ¿‰ØÿµVº@À}666vÀŸ÷?ÿZþ”½™ƒù_'FÝhoþçý‡á÷ìä ’“üS9;;çßV3WäâßZñÏõßCy€ÌP–̃­Ó2Ó]jñs‡&$õû¾±Ã…8–6høW;ôø¥…oðWš<ׄ°4N ¼¶yþ8r|Ù‘gØù†gKÛ“:Ë'ö¡¤ï-À\¥éàeÜ d5*EK?ÖŽö>ŸW\‡ÓãaÓÚÝœPûdTòŒ@2ÙÁ A:¿£÷§t+ðÇ¡ºuD÷5K­Ãí|ß…U[xtL“xpwK;0:<4Øs ß»CʇL-è‡Fåï”C$ª§Y!UÕôà¼6¡1‚Ò=²%äoù,–ÝNYþõÙVÅ÷´Y'v{°>0['!5꘭÷ yЊi»lAI´à¼”… óã«­ðϸõÞÛ¼`´GÉ£Åbð:ëMÔº%-âlŰí¶[ßè®}›1Ûw׺m¬nw߯®ç˜8œjl«ƒºU½ù’üžÁ TgÃ]V±´PÔ…ò_è‚×ùÜ%¥YT,LÒÅ©ïÁé DðáÚ¦)Ú¹`îdZ*)æ"—Œ=bS錢u½Ñ+iøó}d$9ÚõoÉ©¦a ÓŽt¿Ù–Y2 ÜyÍ«Wküã`™&ôÐ|÷ø0¤¼É7†–„Ô ÷qJ´}FÈìl;—„OOJÄ?y…õæ‹<³cµVÉaÐP­6H碞K¶~7(· þ2kÞ€ÂÛÍ+xë0C*‰Èk4vÛý øº8ÜXïD—^g­­•ÇТlõ,,p ¼m¢r«SVFr˜A‡>=2LλõɵÃû–8‘†ib4kyšWÛåáÏÞ/[lÝp¡û¤R<à¬ß is{Ð| iÃò€÷é}´‘x nûmIÊžwì-©âà¾w¾¦5ÈôÿI¤TxNÙN‡ù€¬Ä,OÐ7·?lØÇMFžd+wFbÙ®î^Y •I ›F}T–Yi£Õ‰éÞÀ(k–7á"[K»t ‹ÒÞµ¶@š<¥sôűc î0ð ý ØtQ¸±£kÛÜèq{2o.*"ÄF€C(.vJÏ>í ¹L” ­EÛÂ#àÍú©ïxJ”ݪêh¥Ï¥Ñä½G¡÷F,ÐFQçTa„9p3—áµÄqþ;–´LøpEÅ^}³_„ÂÉl×Î 5/~w©0XíL 3ptUŸÐ8ì÷KžôÀW¬~K©H¥ÐÝŸÂæ™h5Ð.¿žµ|ªÉ•Ãfç1~¡{x–ÁÂwÇ”Ÿ¾h @k«Í[–¥· Ó-~+åÍ\¢·wèi›_GJŒ•Ȳ¨= C½ß2×й °³cI‘›‹jìb+ y1&¯¾œÒ“vÜc÷Öµ{ }ۃϟNb–fI"×™w›~E,1U9îñ•éï&Sóߊ|K…{0l^!m>;­ë팤Åu*ƒäóîó¦Bæ¿Á mûÙê>Þ½uC‚Ì‚%ÊÊ5Ö¾H›µ×ŽÖÐÃâvi}YH1½Wü"«b˜P÷éƒ&.¤h_ú²QPP‘™†œ¬Ÿ°ûˆ÷'î¾.r€w´;âÒƒ0bò‡| Í¡´Û&ÊFoë:<Ò¸ûô®ÔŒ`íW ¦9N?±aOíC¸ªÏ K¦}Ñ·Øžót—UTBwÉÐ6ÎB‘¦tß)/0/TÂÝÖ;–/™Ï”ü+Ìüâ×_—O×´à[›Þ=È›¾b£ ˆ.? ÅY-šÆÜju»Ø¥|X´¼|¸C!Æ‚¯ˆqŽñy< J©¸ gCR]©¸L«± á)úeØ'OPaü]”D ôéj¬KŸþ6!½ÍÒmî3ûÚ8¯ v`Âï«.º˘åþ`,µ6œK4õcÝZÞc̱xfþ¦ª$]W4oùL_¬Öêêeë õ>¢cì°n¾¥_’P$åVèï[22Ôz.ñ2g—¸ñÿ(ÝK#ν©­Õ(¿õéµwý!ëZ‡OâaášC‡¸Ÿ…Ù:6/[_ ÖÇñJuR%Å‹9ûÊ ˜è…/Ù”«7ârTGØcZûq36iˆ'(ÿfè¾Ñ+´Ø|¥>4ß_À@**huOTË'ð„œ@±ªaP8'±¸ujÆÃ4È=˜Òð^òW¿Ï‹9$íS>‚Ù§cäÍYëÉ“Æu?•¤B3¼jÒÓ2èšIÑö«útÏSÐ}‘t:Z-|óm0ÞÄ í\,4IŒÞ$ɧ°¹Gc9ðíSíçÜš™w%¾£áj‘>ðµ½8÷—Þ×Vw;?Ôû¢Zoê+ºHJŠ^Ž"Al[¦ÔÅeCé/–ŸÅ×J.£¹n£Œ?…¼è‚ÊrCˆåO?ïÁ|AÿÀ#<ê(Ø›`ULT/)ùwiªc­G¼vß×}:®gCHá8êXj*ƒË0Ÿ¡ç ð~üs“à•r#d œ% }ËåÉñCê#ä¾¼«L¦½¸ÓÖò­`_>­¬[ýiShç¨,(©³%Ä,ðÁõOPo,´9¥I’qFí€,oˆë…-Þ!ùòÛ/ê6©+"´¾9gDÕá3q›7\ >r¶¦˜æ2 YË@VË¢ˆÚ …P3ôm¿‰Ð5ÈÙÁ_hxÉmØEglÒc¸¯¡`ü(æcúþö{´¥µÌ¦Î§QÑy*™Æ,ˆèÇ«²MìS¯Ïé¼2y0¦§6Éžƒ*Š«Ú8UÏ×Ð7P OPÄû¾óT "9ÛûÊ#/·¡¡N/Ã2 ƒep4o7@€|÷™y×äÅtqqf©Ÿ‘·/¼è€ï‹þ©¯_4 V@…xI«hY“Ë̬–OŒvõ Šú#.*v“|yç>Xnb’ì 0ŽA'´„nâ(X´ÃGw¹fKæÁ[óEþi£:j|‹x6†íJÀYz¹”¦g 3/ú].ÆèñžJÃ퀩Ú'» CAœMá5|ª)˜€Cõ„Òêu{¸úóÚ1ÀLzEÀçÁߎö}“i+þÏ~Þ á‚®µÆÜ^n/¿„QÞï©Êc;Ió¸xŠ4ÞÌ*„q…rª•5^{ÖÉx'úûð´*”Ü" MP94*»/? J:ÄbR :‹›H?Ü6.Ä?Q¶ìäRí²Å…h ¤eG 0õK'¯t™aNTŽ]üm@å›:RåÕ$ä\Øn*|Eú5îbX*Ôâ{0ìbAnÏq6w¥Ô´5¿ôD,!Œ=rÖU*¯¡PËÑ(”µ%]ÃõÔÉyë,y‰UƧnd_åÖÆxÛUæÖމ¹0Ûw{XŠb÷‡0¸þ DšsÇò­„ö»–NU4wŠñz¥ûú|sÜ KáWàȬí~¼{©~6ð2*Œq6L5ZÓ`U탚‡Î²º¡³“e«ŠïhKŒº— ÖÂüÎ=mÎÿKáäÊ!B éG&úP[·Þeš±þç·})¦–ZY·´Ç¢–NÖŒwXQ°m¬×âîЫ&¬Ô¿Jô-¯l{x P SQ‡åòbéÂód÷<—ˆŽCJÏäÆN%I6EÅ¡´ÚiR;©Â$®ëª3U¯„øŸì9×l1Æ3uÒB²‰ßU;L\©ÈFÆ_ÀËppÛóMe¾J`Ó½¶T¶oÛn‚Ô­¤½ãeaÕR!\H cÊ––_ t}ò á6]ä )™#½h$Œ{¬ç 9^û¸ßa¸w#¤M°:uðÇ—yØoË,虵 ¾ëÛŒaøU%(™‘ÛBÓTc]µ ™Ψ'*qOšö*ùÁWíØ°×¾­¬ãêm²3íûð„ö^eD/øfmÊeÀ=hiÛâÓ‚2ìÍmp+{"O†¯"†t]+|,¨ð£±2]Ýt~û€µ(x¹»OŸ>ÜcÔ¾r_íö©` p´ÜíÕE³µœà¶aççjÀWb æav-2‰vøÿÈòŸì0µXFY8ÖãT_uÇ–.”¨³å<Â+OO:<÷ipŽ®ßGåøçâù2U‘ÅߪÞ43ædâÒC—ƒÊpÆnÓëšO¬£ÞrfÈs禥‡M3;…ì™CŽMR“—‚¼5ñT"è~‚p¨Š®ër‡Œè Ý(©w|D6˜†­ÀTÁ¬ ÔŽ”f³«Q;ü¶ñè*xìõä³uYyý-Ž˜C‰‚œF—{n¯A…Ã`|ÆòxFZLŸ`¥§¢E×ΙAp-ò%fû™¹!éà›Š6*ö‘CÛùò]<_ì_£t5þ{ÜÐîÂ…i£©ËD6#ølÏêRù÷Ð8™²¾p ô«¹«Ý|Džn þœ£ ½—ë^Èzy´†p_­•¬¤AÑ·÷{²f†2ªOrñ=Àº a 6T@úÉÜ7%qKs:1Š©ÆÔ£æ&o$èÜtïPMû‹q6üSø†œx?”¨£—¢Í»&¤Bøj*bÊâSâŠaÃ[z-Ø#SœÑz£p¸î’„3Ò~Òwk`v|õèjöÏ~=m¯¶Í"Cg¹†D?àž½ë‡>~ÌyÇEù¡DÌ÷¹ä»Zº®É:•øHûA½ÈdÛžl‚j'Z*ÊEÇ­øU—XíÞ O={œ R]RsŠd=XÁÿ%iºØWW5ºAám¿Ï‘–Ò®eY*”+“ÌÅ[ct¼º`Hw$Z/%+ÀÕmá|::S>Bª¤M˜>ÙÄÃ(üÀ ÓÈBèhù $e*±¬¡y}•BŸ€–Úï ¹»Ï`äF©ªÛÓpSA;ƒÎéŠ#_›ÚÍGn²xÔªê¦$‹åÇAÓ5'Ñg±'„F©wõQ‡á]Sx„O³à¾`x¤æ™6Ð æ¼jŽÿgû±w²Ae¸Có0«õ/£nPyÓKöˆn¶b€o‡$–*Qëûܨž¥³a¬…îΠœÈ 7òr©›ÊϦã¼ÀoJøUIFT~Çqv&_§7D;!T!íªˆäŸ„xázü¸/šiW_Êe«£~×6V7`_ÁäÝÊCa?1xšB§Z¢¡»î}9 Уع°¤‡ŒUá8øE¸ æð,8Ñ÷z9LÐEeÕ‡S’⼡ôªî˜2µtÕ¹¶ª0ìa¡wýLp†ùsÃÌØ{o†`RôÛÓ¿Æ:•¦ŠA×ï`ä‘™­­ð…¦Då7'PjªÀÓ¯/™ê…“} a᛾¦eNÀ)álÉKëëgX+¨ùáÔÙÌv¦Tžv9¡ò r–¨bAäÜ3Ø‘YÈŸGºws—÷xf¡î!î©O-:Ìnþ­>Uð›õz» YFÆêAönÿï<÷fdÒ×–ˆ{¬i-c…a±êßö¯’¾L`,‘§Hæ”W¼eÖOÑËš ýTÞÑëjÁ 0y£w9Ð{&ÔÄt‰ÉK³‘ÓjØÓðùÍ`èçñ¡4z N]|â½»ñ‡„ÔDæjSËoÚÖ±îèZû’3ЖŠYý#-Ý3Ú±C ɯ>Ðß‹7Å£Oî¿®z]~(X%ï¨û1Ó uêå¾m¯”ŒwzSÍõ—“* ƒQ¸ê9Æ;”´Êž‡P‘…æš_—»FV¹ ñˆefÁùÙÈ t³ ?‰Sq® ðŸ“Ùå—KÂðè1ëú«øyÓ/:·M ¾ÙMaáðŽ_êŸms{k·Ñ¥uRüøT<Ék’”pJ‚¼w åº•-ôꀚx´ˆGXQáß»¹êfK# .!†øßuŒÌF =«×=”ĵaš4¼œY°òl–ý49·•f¸”ÜædG}ØOG›|©G¨%I©˜ü:¥« à™þcŒîÚûhñYîhTQ™š;®ØñûྴâL¶ÈH5ŒßRÝà PòÚI+ZÝaÄTÇ;âéI—"ðG,ã´Ê¢…»XV' Uˆ“â~Ü {–ì%uárÌ9Ƕ̦¼<9[Êø#:׸œê{+£ìZsŠHÉ­ yصš vq¡z5_Øô¸pì„94 …˜|™¼€Bé¥2¨=÷˜‰ã´AnóÿUºÐ•gt¿ wŸÈÔ ç$Ø,Z×ïä%š£êcÍaI`Ú8ªPïr!'2?d\‚’¶pXù}artÈme§g¯Â^u£ôiëG€ù"ë…G- š² ïÒ ©f×W ÑFdN—¥J©–ñ§È`ßDJ&Xió­áëôn¾÷ý‘²d>bèRÎûüþÔužjbj0Ný¥³ÎÚÝ̈rœ0ÅrŒGÐã¢G‚¶EÓù/¤;ǽå¯7 ê„¡Ø“)pžîÙHí®”¦q‡~°¦¥¥²%BöA/@¤Ozý>~ÙO+šXžÃá{)¡&ˆn­f< xèsö{ýJQ½}ÈÖýöQ[¾Y¬Ú¥u‰j'6öÈ»’Ì÷aVd¸>1B–ÁNª IÉÂ#Ùç–Sýÿþªæ±tæ¨ÆG~‰;(vÕò@,çm3N UݧbÄ<(NÀ1.ù@®ØÎÚ«ovÑzî—·nÛ ÀCÙC%Ñ\kW¹ï&%n/i¼ï¶Í¤––¹S†¦ôGè¶±YŸ¦Ø›&”Ñíð@ûU•¢¿w°Ì(òK^¹ÃîÎm@VeÓ%3?$‰W! ê|Oÿ`Þ¦e–—|¾Êóp4ÚøßoÉDîWz9M^ÑëG߉ÐÎ…L)/)\‹f)Š«÷aA utE'–5]…Ò¸ÜÊtaWfÔb—×}o?¥þ8×Ù8 G:øLéQð˜ú…VãR%F}^†ÖáÃ%6p§ì±V%£«ÒAX|剣¼³{âq©‹€[#HÍïJ©ÕûXýÌÚü9C±A^uV’rS­òoa2X ‰Ì‰ù‰4¢ßw›‡[5T-º#͆¸Œì•’–ÇåÕÑ”ÃÓ¤jœ;tåøÚ{n¡u°´¦A‡´³c¤ÃïB‰ï×Ñ&2œj•Ó8ßù2‡H ;À3¹`–˜ÇÚ« ôܸôö÷1§c+𕦫°uô%4çHèQѲuËŠvÜÉ÷ô§³Ât¶ ÓNr¥Yœùï>7ÀüT²9ɪ#&_š¼bë>kB[ Ó˜à¹›$?ÙæOc`³œ)+³4Š]”å|’×úw¬LÍ8/'©û·ÛÊÉANýÇ[¨ý–sÌîòd5ŽŽ–:õg…«žPJ¢f*¾©” "òRXE•~Ö››µ#Š:Óõ2J\Nœ'6ã°'!ø$˜¯5³#ÙåÑ»åëß Ú}~lî*™ï¾ ÀHŽ×7: M3þ|Ì¿9¼«Øw»4v‡,[$ǘêİÁ§ÚŠwPŽE1IƲÔvîïO#ÒÆ”}»|\Ü·÷5ï·±~ žÖ´«ô0õÜržZìý’¹†¢ž•8Ë»`u}GH©ï—†ŒNæ†÷¤(7IÅ/ógn%pÒ DÈœ|õÛ¬ô DFÇθA²”DvènÑÐÕò û×þó×*äÉ>x•’Ш­/–T†è'+_6“»CœŠø 5R€ñÚç¼Ö=ÆíŸŸÉÕp¾3÷³! çÌš Ó[†U±›lC§v_‹RÈè'9ªý©]Øa²ÓY~uz Ëé.0pYL:¡ªç¿AÏ2îƒÌÕ#0‰;Tc˜×”Å^; qd_.G𣬋¹H–>ÞZÆÞ´Ô®6³ZÓüxÐêyŸ¸+^UoYçÐ65«,US_»¢Î4»ˆNˆÌÂ#ÝÑÈ oªæ–âÐæƒ×‘Îæm!PÚCa•­ö jÝILW‰ßw¤”êtÕ3ƒãgxÕHíÁ—ê=B=–Æ3Çjy:êIê–ÄR!\^ùɃX7º.Žx/æ®*œ_ ~À*f&FÙ³8Mï_EªîZp0ËÅ;Ö¨?hãÌÐ xçÿbÌÃ.X%×,Ñä`ÍVñÇ«õËE-ÊK§Ù„^Û‚Í+ÀrW;k¦­ÅÆ##My¼‚ÿ¼ï<ÇE!Ä#êánÒ6æzO½º£Ö¤ØˆúKÜûùdñ÷“r/‚Òܾ B ¤ò=!±xU‡+ܵH†H*PfŽî\ÌŸ2i¥¯‚±¯‚ Þ¦­sö’»|"¬ D<î}¹ºMÅ0Cà— îKvfËÃÄZ¬gÊm:?Ln « "sK!íë–„År'%q©Œ_Ù/Nkô2h§sv>í Šñ:û…íøY5J4u#Ùºù>’= ÃÏóÒÚä>¸8<핹ŒuÛò×$L4À#{²lLÓÒçxX2Â"hoêáÛqBq¯^Ÿv%˺Ý~›®ü™­E†‘o;Rçfdå@ß.:‚¾'r¶q ;8âíY¾JñÉîj^Íæ—n Å#õcø„^8ÖÝAÇÈÎÚ×ðôw™:h1ù„æ”N0'Þ$çÊ(#Û™æèú… Çvs9YL-¸ó„.:4ë¾]VíV=Õ¿Å=B7Ì!D(¿_½Fˆâ¾ü‚>-Ñ8ÁÂyÄ{E÷íÁTll4B©Àùnœa(PùEg*?¢¬Ÿ‰5Ó(þ¹ÆWöj𸮴›}ÍÏd`\‚¦ø×¯ABð'¸ëiMÎ^×Ê[ KlŽíÜP­£¾½ìsA˜žBª©³i[n©£Ï¶Î‡ËéÑÔòuæ>¬‚¸„\^dËžkçÖÄ,k‹í>8 ª^ÈEÜlº²Ì^NvrFì»ÃÂôsª—A~H|øtï‡ÅÌÏaè/d É7d–›•ÛIÏËd^T5FøbÊè mxÜÂýÀ‚UDï,epÅŸu$eØÇ¾UØØöü´Ç¨2ÁÊoy·P넸‹ßd¯Žwÿ™­U0O¤QÈT|xäpÐWˆ×¯mÆçz׆M$@H…é„ …!¦¤Í“},`åmôÀ4gh»¬ñþÿECñ¢6]¾žQ"·íHOà4±ªñT—sP¾ rµh…u›TR¬µªØ‘ÏÙ<TZùl­sÖ×ûRb’—êßÈ yB-ÕŽ‘Ù¾žû,[ÓÊ%MH¿£þ¢75‰½ÒgþóñŠVÿ;(4§såû”lç«^‹‚b£±!®eÚ6Qïçˆf û˶=Lbvh…®÷оzß4lÌŒÜZ1Á© ôP¦ú?§Ñ"­¡5Umsw ™èˆ·úé”»aE• È<<ÞçãP`¢»\Í^¤·MEÝÁ/Þhßÿ;¯eRzBËåì‘^¬9¡÷q̳íÔY£Y&r÷6o¹â'¨·9]G®ZyOö›‹ÉÉjG§æ WØbf~b¶oº”Ô,TQÓOÎȬúó;“ ŠÌšQ‰ñ™C¿± ¶rXûƒ5*6urúÅÞ÷x—‹_yã(Üä&à´Tø·;"›`=,‡‚ã0ƒ`‘2:l™¬äLÀáý-—8n]-¢³]õòE4r¼úr$ßâl`×Õ¼YûV§Hwq~:Š_rl¼Ã.µ~¯×pl¯pGKŽFªÒ„Y¡m¥4 ÑðŠBÄ{†¡Ä(2ao!;Aïa}íËZÞøÜ·…KñJ+óðsšê+xˆ^±µÚlìäœzcZðëi¢\:‡öÝi*sÖ‡§ô 4^Íâr1d´¦ˆ<“¼"Âl&CÕ1­ÖtWΣCncWKr­q>'/øcÆ™oU“ŸêhÃDa°izêmXGLDhY1{­<#JÁôL؈Å[A ;å“Ü¡O”M¤ LNøD¦²Ò®w<´FZO„-íópÃÂt« µOªEÕ~õÖØé~àÏl6`ƒ—Ile¹fã»t„ýé-…·õIÇÌÛ\á¥JºÐ'Ÿ=Ìáse$ô=W¿‘3)¦®®Îmë³!ï<ÁÝæ îA}Š/W^c¼¢‡Ì‚ŽnwPÛ4À^ŒWÈ7‡wн;šú3îZЗâx¦­ l p§~>’Ž‹ÕO…¥}ô°ïbü†E~·ý ‘t§½LµÞ–¤EºÒ%`_ýîà‰¼S_ÎH3Uvü@Q¡Ò…§›Duníg†Põiz ]V¨Òw¿ÜëI†ÂØ.ùƒ\\jFm¤Râ×® ?ÙŒf†ŸDà"›ò¶zm æÚà9fò^^[Qû»Á4›~O˜¡cX/ëH™b½îóݦ9îu µ¯z‘m8*Wý/«q Xáo}T@­K%êÚÊö²Çq \ &«›T)_¤ —M§¥Nß1¿#F¯nv¯Jâ4V*GÆUÀ° zN$XE¯ž˜%³`Éá“o>ä=U\"_q\dзEYb¿Æ.dé¼7+u,%γFEˆòBVhê´õ'éud!8Ó ôí¤TVYÇTŒñc;¼t¸dòrôƒÒ (6 øYFzà œˆ QS3Fæ Ë–Ä8Д Isµh‡`–ÇòŠ ,˜%䕆Íዚ¬\A 5£…R®j",ÿ·a¤]+¶(ü³aåEW¼= anD ‰Y…——†¶o¯áh툭yØÁb¢2 ˜lwàëß?ä­Ò´ŽÂ`Q8FyR&{áΑø6 Fü, H–!ëšFQ+_¦*ÉmŒ4h¨!Ë$MÅ{€ê£è}g÷\ÆUÚp1ÿó)Gm#+d°smÆ`©òø+BƒW4• ̧T7{£æ¶² Ðç㬠ºùüh0’ÈúɃotë2<³¡Qè“´y5JköE¨N¯Âè ²Oå¸É0 ¼çðj^ [w±¶ó«¤È;(Õº&‡ìEØœƒ’D¦’ë—ëÿd3=2®Ä>²»·¢S5ìŽÕ>ŠÃû’:°Ññ~L óÏ™(œ£šLŸßä±wÍi°A~‹Ö ™Ê™ UÖZ¢+%Z«”#ÑA$Úµ ñwVÔ.îQ=bœ7" z!~ì†ÓÀ¶[Ù©æ¤Ô1…ø,ºKÛTÓ&Yíáóq;{tk¨Š½ÅŸÃí#}ßYvZ„c3à¹>|QÜ£Y6g(ºŒ7›Ò‰ŒõãÞñ æöq£ŠüNùðvuÕ¦“éK¼pÎ9*’ áÃãñÃ0æEÒÔ#SUüÉxKþˆY&YÀÈk!ZjSK ÌQ#dù5¬ûvÉÅÆfjë Kåð·ðç*õzáBúĉF„ֆˋa‚„®TÂѯ\zÊPƒœnZŠW“¹[z˜·{*îÕ {ZÒî—LÛ žŠ2±ý©hd¤!EAoä%3‡£µ 4äjbÚ¸4_XH¸ÎqÐBÞ0«ÏM3Ï_>ñN óöprGV†CÛ÷SðJÖã`å"ÉAYµ˜‹¢_#îÉ6¨âa–†ÊéUŒ2Ší-x 2†!Ö÷éÀ>? JÉ\¬•M!ö^zuõ?D–O)ß[Ê Ãj/Ôì– šØ÷NC:sMˆ¶k°ƒÁN*Q!=Ìn»X“Ùìz Ky…£MEš(cÛØ˜jœí¼öôöô— ™j‘ò4Pb ü9ò‘6ÇÕl3ŠÎ_üC…íëjÂ6y“ø1ć½â(Ùuœ ×}Ôðúy¿«ºé ÞâE%ƒdëdŒüõÛ#—U‚ú{-/¾ƒ€øë½R%ïæú¶U“¤< ÁÑ ¸Ã5Û+«¢É„˜ƒ¼³HqƧsƒ(땘pãr©T§r€î/Nž˜ç….¦Á%5F9aÅC'FÜŸ3§ÖF¸×럒I?•¨ø=î×®òhbÄ@ê×ôw½&WäøÝê౸$xÌïfGH/9xFýýÑ€uéH,ünm†{䂾/ÔU§ÝiC¹ûû{›iŠÐ|b CÖ§µ4â厵ÝtM=q鿼N¶t ÂÉ—ä‹Â? I¶'RÓ\RÇ/ð æ‘6™Ó–z1(n^û½sC=j1ÓÞ“ïÑ 鵈, _ªAâÄr“UÕ!ŽdÏ.»¸AÐðs{ò1ïX)¿ÜP@É¥ÜÑ3óÌ7óÐíʱìÍË$LȤ~¶d&ðAÔfWŽpïHB1¹VþDx3}HyN#ºýØùÆ_oí*|åÝPéÛu¹ä‹‹ãMacf"hgÐn8*˜ºó­¨®“¡uIköDê:û6ßã |‹ò9M·G‡z~ê'ôûEÕf;ä$Ã-Kê÷ͬ‡nüi×*”.×äí~˜#%4Riàó'îývÙg§Ð0ïZAZúGS".ý¢¥øUd=D( È"ÌÉ\NHI½Äæ^Ñk·WågDÚŒá瘦͟ –Šåå_ÅÊ éôñI*löáý" ¾~<ÂÍW~¹º¥–8¦žÐý®ecØQ4¢TåaŠuñÌ*1yîQ jÙCÐf+‡å¾<}TßV;°k^üþ^•.4_·¹G}YÙl{XÔÊY.ÄE%Ìe“Ј ?f'wSêó-¶£ºÆ¤+BQ×+sü¥ÚMˆég“þT° bÑ€Q"U,qðï·…ç—ÃÝë-jZ1ӬŸ-EÙ¶ŽÀ¬›œNašÃÚ6¦jËñN#èký]Û÷1Øâ —ìãQY’ Úþx‰Ÿ™"4W?°hÓ‘Œq˜‰¤â,yUÕ3,ÈnŸy¦³§¾Aç(ï¤t¬1pe=­”OE¯=‘ੲ[.:Dœn-l¿ S©OÓÈŠTZ\‚.n:~4JÝ;@êäù…Álj nÖ*F¡v­|nYwI·õÌÄQþ¢1ñÃïW}öið0co¡‘ÑsfmÕ~KRn†y³Öèàf5”D¬S-¦„Èðl‹|È‚÷¹V2íОé:é~Ç…´½ÆW¦Ê*øï£@‹`L,lÓòláµü8µ·0“êÔ£6Â<ê„¢¶¾ß m.6ì â6"jÁ&jÌOWLáCÉ)µ‘óÕ2˜\,‡z#0]ȳÈ+Iè?3ðmfw²í–xH¾‡ËäÍ->ùT?3šOtuøC\‹Ü9¢£ê`H²†{ïEn!½A¬Ÿ™ã³ÐϽ7çè–Ó_!~¼zßA• ÿAÛ”ÇU7*slbì¨æ…g&Géü7»|·ÑSú§‡Ô»úM?+ zév¥PáJØS;“â•"˜Ûr|-·Ž|7ó°jáN=kì§ATËÑcÚ•©ß'Òh€Æ“L-¯k‰,ŠR!í&tó§ÅùoIî ’¡pn‹o¢‹õ7~PzßLèaã¼ËüZz:¦E)ï=ƒ4ù„eÑÀŸ4H$ºzƒÐÙá^×ýgû£]ð/tðÔ2ËÆßÉEÈ¿scÎ!Ú]/#Ñ{å‹Df³IÚº‰N~HæáGˆT5Â" ³%µÎiû9*9àwóäß;ÌMòJ1À 3ÆØyâ‚%"_eÔ Fî|‹ìF¯Ìº#Xkd¢ûed†D¦Ç`0]ýúåÓÁ^´„8ƒN?qÇêÆDÉOL,I<„‹yº#`åÚõF¬C*G[²·QòÔVAOìâóŒöûéyḨn/;!áo?oÎÇuLÛçý»ý©>¾ÏD’Ýòðú©*RLëÊZs+ªI·!µÏì_h$ѵ4¥7Q¾*0[,‡û¯­Cølnôš$Ã3áAM+sàÚo*¨Ö´…#GuÛ?ÐáV¢p?ÿb]û¤1™ŸvJÄ ‹ðJRgÑté™fÝø³Ô2ËbUr`YÅ’¼Ãù{±Û ÑBÁO¶ÇÃù8Òñx>Ÿh· ΆD:~.L“ÑŠµÁ ö­DŠcäãAZÚžå%Žœ9°{‰sd¤¬K¢«,p³¡…ƺ>üšÊ8Üeˆs°ø„MÐÌdM‹nGóh©i[±42º‹Eˆ1S!ÂÝÇB?Zxœqð?ÀJì$oÏ¿$„x\øÁ‚Ī}DD+Tô¡§SVû÷›$O× 9¼œ%™€óãF³§Ž%EÇE_¿a'I:,±2 ÇF’Æâ.«dä7dÚq}º8<´BzN”B JLdÅœd» ÕÞÖ{N)¸UvY £±KYwïä›ð0W3 )=±GÅA.o\¯g‹Cp²Äó|Ë)ÎÞWX"H\ ­˜ÞHšÆÄœ“‡€€­®þÌ[«exnÙ¼6Ìn´Pä¾Z´i,ìœöG êƒdëöwY<3Њ<<Ü•}•7Þ ¿Rà8)r}‘·Gy6a«ˆó U äc½Šñ¦üTågI¼¼:ޏ=” p¾´¿9%Rf»dh°|ŸÞ)/OL‰f‰±_–ã²~²ˆ‚:iÉ `³í·ª€=K&ËwÆHaÆ%Þn\1à½e½"jMYáG¬ñÚ™8C9`Í(ÌÇnX2äd:ºÚ`áB6œç1ñÐûlh9æ:`-æ)‘}¶‚×M¡¼ž}Þn1VX±aù M2·d‚a/¯.+| ¬ ©2Q¡_t°æÓ·#Óp —¨çE.ÍHÚtõˆaömÞÒ$ c@ZÛm(~dêZž1UP;7Ÿ*Âç”&¯}‹V)E¨"ªo^ÿ4ßÈþž@?¶S×ÝÖ‰ãò%ï8ªš©zëMÉ»¢Àáÿ2Întk™«ô¾å3®ÈoÅŸ*¡ú“d×½ó q]k䨂e/n(CÁÑÓˆ|Ÿè5*Íjèœë‘Ì«×Cä¼z _q¤èß8gK\Ô.Ì©5Ù¸ˆ|ÑS.óYd=e'íØÏlǧ«KC ÕFD ¡b±}»¤H¥2?wª—;feŸÛù($¬¦†ä_¦ dšŠL×Ñ%ýf(˜û$Ÿïç¢HÑ̲â.v(‹eüËÓiñÉ-/WD_ý¹ÛÎwT3UîOÝ`Ë+”³TObo§„£˜r¿¯n?ãóãeí.Z–ÑmOçA½×ARiñÜÄ)/éj>%žâÒ±”¼ÖÝ2†Êi½„«o<ïæsšgF†<ØMéܳj“éebª©Äªxø?PúË—=ª8/þ&˜º§vÃ)zýàN3vëÈVQZ[0Ù¹žAhêñ |d6Wwæ‰NàxÁÞÞ.Ð ãÜÐÕÛá2­F˜Ñ+¹ÂSÕØ¶õ£òÏ]ˆ~¹œxŒ y*Õt¦7Ò ín÷…ˆhP¼æ¤”Ó´ #…öpWPñûÛ\?aŵÜm=È=’¾ ¼ ŸYaÐ~ï%†ÙíÇ«©•& îov.í þø† çoÇNÏËŒ@ÿœÕ)ö¤jðB—·Òüó£|›îq3íGK®½288§ÐMçÓøÎ4ÆVëÙSòc™d¢LW•™âaFÍÏ5ô=ƒ^bú[ÖÈ ß-Db¢¶0ÀR·éñÚÅ4(AŒ÷` j93¼zq^˜I¸Qß÷o‰Õk8ƒ©9Ü¢QŽG>E±Îšcn_ƒ¯Å#³°ùêÏ]iHëó®C,ÎŒXíï[škOB&gP»Û¾™N¤^N‚Ü›ø2æ> ¦ÍZ4Ãq£0ûI)°ÀP[Ì¿Q~vEÓLØ‚eêŒÝš( s—OÁå(xN->p G¼œpõUAæ-|JÇŸ©È"‹hŒûÎÂÑ©”%Z9Röp’ûodKÖI¼GáÊ`\®_mW¶÷7ƒŽj^M wÕ편~¦¼Ì÷{RÊÛo¦ï¤lͯ‚Br‹Üî/e—~ŠüÊÒ)cËÙÝeXr]ý£3Œ¶nÆm_{­]¯êqE¬kU¿'ýcè“y@vÑeè·xeyš] IYÀ5ý ðZ3}¨Ld.€nËW(Ø4áÍdŒ »•mÍöå±7LÑuëQ hle×»?}wºïçÃ|ôí@¦Å8ì=¹¯mSÙþÌ€ØMÕI\c`g=/^ý"Ùj2Ùì©„mÒA÷Eê)í6HÞrÍï°±Ú˜UÙå‰w½µ3Òµ$¶„ž³lóqÌŽæÕ±=6¢ÆNø•¹ ãCl†"çrЩ@©~¡Ñœ„ܬ PÏê{i‰>ÚwEUHá,Ê(ú\&‚t׫둈0¡Üðbw'ÞjHã‹!&ÓG}ˆi®eÎEL?ºîÖÁ@ jJ­MqïÞ§O0?ž k5TT‹?i9èÙ.”C›šÀY&ˆa½a?xß™(H`Jб—¿c£Þ¡mƒZlj…ÞMKÔ<õ?¾óg˜×âkGE&>–ïÜ—O…_œÂiDy;œ¦!d8³ófÏÑþM#¡&Ø£ÅÊŽpî—æz“::ª„“[›O& ›hLžÞа¡Ô2•èLOŒ<:¬+§|ÝÖR’¹Š ßë¬ø™d ‰Ÿä^3#¢øÝTòAX~á_æ«!A ™lœv×ûÀáòD^¥îû<°®QE&Ö. ãý[¥tËU}¤bû³u›ôK`ϱÏÄü,L*ÄOE˜ümrZ¾åÚĆR¼³?YñÝïÆXl(­Ã©2šìe…ŠoA!“ŸeÙÁ¯º»­B½×+tø1hèl@B§æ‡Àvg,âfõɧ0—2Gm}ÃÜwbÕ$ZQCn¸F›‚7 _‹štƒD bÉÆûdm}ÑùJŽŽktRßs÷‚@¤Ò?¹¾@&x¥«„¡øÎû¬s€§,hM§&„jÐ-‡åséÉ2¾²(ñ#ï6}íõ›n^X3÷$i帚sÇXrwV_O*Oy+>ý‡sœ =¾å)“¦ø1è+uG9ìÇzÌÒÏ)žJnxOÛBìx«qÚ§[Rä –¶Ä§„êØ¼R|¾{Ê‘9n-’‰Ã?ίêl Ö”‹ÉìMFxªj=ãBw²)CötºF ?b®Â!‚‚Œxü¼ÒÄEµ³ÄºãVÏX'·â2¿§àu;ìÇD¾Oyó¬7g_93ü½Ñ„SjÀ¿o¦™ÎìN§Ìí`G#î `­.JÀó~ g¸âˆï4¢=è™ 3¼†=ȧäÀÉŠ/ˆî"î_(v«J4ðg|½±Rê2½=Í~ŠÊý8¿°?Ë•~¶øË¼Ê¬ÒÆ|XÛ)M*Ac÷žWh ;¨'ŽäèpÚJr+œH\ä„t_¹ÜØoÔ•sð“ÛŽŽwÝÿÖÐ"ÈEXÓÿŒLoÎGºXo­#òƒH%c¹Š5ÁSj ó?–I­Ù‰[BÄ2¬+TkùçeÊé|>â(D¸»û]çRs€Vny1Ž-3á3¨qÖx ž#ÜacDXÞ*u?¯caçÈÂJ8GüP1J̈b4V‡ß3ï ‰Ò¬ub&®RÓì4ï:>Ë—;“7àÖ^4rÜ!ðªü.V M»ÃäåìuµîQ:^¡F]¾íNEâëy ½nü+¤Ö&ÙšÛŠ£$âØäŠŒ‹EÚέ÷wy Õ?îöèd¶G²}áî»'y¡#]%‹ƒ£×yyÅk–ÒyrÛ«Ëá(V®ý ’=-ëòs€¬ÌÍ­AÊ;ù µUœWé5o¬>¶•Šì«§8÷/´\¯ß]‘m.²xE÷db¿å w§ò'Ô ö(šƒ[e*› ­öõ9Zãû‹Er0#7=C­Ëíg³uäÉ ç‡­0åÝ|®{«õ$jÜVcÛãÇ8³Ž¸<=|a»ÒÎR)‰=IçI°äú²ó¿Í9.`àA‰Äßv=`uæ êœÂ·AïXÉ²ß &iM¶+aУÎÔHyݦ¤$µVÀIÎ ÏBá!T´¯I:Îùi»¿ºðg\ë±öàÀ9#½óp•;ÿuÈþ£‘6.‘û.Ú—;\å Z—˜­/‡§åˆxQž _þù jQ¦Ž&DÇ0hõÌn'^äÀîàõí¿ù ü‚ÿ'ÌlA@ˆ‹ƒbƒò¿¡Êžendstream endobj 1263 0 obj << /Type /Font /Subtype /Type1 /Encoding 4726 0 R /FirstChar 2 /LastChar 118 /Widths 4727 0 R /BaseFont /TZHQBW+URWPalladioL-Ital /FontDescriptor 1261 0 R >> endobj 1261 0 obj << /Ascent 722 /CapHeight 693 /Descent -261 /FontName /TZHQBW+URWPalladioL-Ital /ItalicAngle -9 /StemV 78 /XHeight 482 /FontBBox [-170 -305 1010 941] /Flags 4 /CharSet (/fi/period/zero/one/two/three/four/five/six/seven/eight/nine/A/C/E/F/G/I/M/N/O/P/R/a/e/g/h/i/l/m/n/o/p/r/s/t/u/v) /FontFile 1262 0 R >> endobj 4727 0 obj [528 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 250 0 500 500 500 500 500 500 500 500 500 500 0 0 0 0 0 0 0 722 0 667 0 611 556 722 0 333 0 0 0 944 778 778 611 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 0 0 389 0 500 500 278 0 0 278 778 556 444 500 0 389 389 333 556 500 ] endobj 1194 0 obj << /Length1 1636 /Length2 15029 /Length3 532 /Length 15879 /Filter /FlateDecode >> stream xÚíyePeÝ’%îîvÂÝÝÝÝ].îî.…îîî^@áî^P¸»nÃ÷½~ý&Þô¯éþ517âFœ™{åÊ\["Î!#VT¡2µ7ŠÛÛ¹Ð1Ñ3rÔ”5llŒL-íeé„ímLŸf6X22' ‘‹¥½¨‘  4ˆMÌÌ&...X2€ˆ½ƒ§“¥¹… €òƒŠ††ö_–¿BÆžÿô|Ît¶4·>¸mìlv.Ÿÿ×U€@€‹`fi(ª ËJ‰(…>‹0µ´ˆ;}z]m,M²–&@;g ÀÌÞ `óÀÄÞÎÔò¯Òœé?±„œFg ‰¥‘ èatøËE p:ÙZ:;>,æNFv.Ÿ=p±XڙظšþEàÓnfÿ7!'ûÏÛOß'˜¢½³‹³‰“¥ƒ à3«¢¨ø?xºX¹ü•ÛÙòÓ °7ûŒ4µ7qý«¤¿}Ÿ0Ÿ^#K;g€ ÐÃå¯\Æ@€©¥³ƒ‘çgîO0'Ë¿i¸:[Ú™ÿ‹-À hnädjtvþ„ùÄþ«;ÿªð¿Uoäà`ãù÷lû¿£þ“ƒ¥‹3ÐÆŒ–‰ù3§‰ËgnsK;X†¿–Š”™=€‰ñvSW‡úÜ€N7ˆò¯5CõIÂÈÔÞÎÆ` 4ƒe·wùL  ü¿S™þNäÿ‰ÿGþ‘÷¿'î¿kô¿mâÿî~þwhqWy#[àß“ÿ\,l¾ÿEÆ¿˜þ5–3rq²ôè|–ý9ó¯âÿãÿ¯‘Þ¿ÁˆÙ™Ø›þµVT\ŒìL?—×þ£–Ž®@)ÑÏÊ™™˜X™ÿ¶š¸:9}jý÷9ðÙŠŽÿ^þ@ ÐveÉÞ„'Ä*-3Ý¥+whBT§¯‡ l(Ô¡´Qµ¨  Æ¾Û?íÛW¥ákm(}Ó÷ûÏŇ·=iêý‘LŠîàE>¾/)UoÊ:yÍ~ƒ~)Bú©F´÷å‚ì&¸6;£úþö„’²~É+$ÁT‹ôåU©[Aú×{D?“Ô†XŒNä&Ժ“SòÄ£‡{ŠÑá¡ÁîkˆÞ=<šœX27pò¨Ç<mµ ±ª&ˆ‹¹Q¦¼»ZDsKY´&&½W¡øMà‹¿HØœ»à]ì'ÆNñ»§[ѪŸÖ(78œŽê³ó§kO¿á?žSX$c‡þy$!kìˆI&9 Áñ޼æsh˜DpLd9Í œÌV’Ïà¶HZÐpw77ÄpâÃã£Ä@¥a†üª´­7çØnÁôòC劯 -?câ͆Îb§e¤bø"uaÐ:V¹³zt-xqxÀ@×Îp37Éq†À^ì2ít'µëaÑ206ã(­6ß0¢Sµº®†œI%Áx€g`kÓÊi^Ÿ³ùôE!‹××FüVB¸ä[÷lp>£›T¡½]M]Œ&~<~Ó×PQ¢)ƒ—'”ë•´ØÁ!Йdt!Óè:{Á‡ Ò8¬pebÕ –$LŒ,yr.”)äÖÈ-¨3D%Y³K€§{_ß”Áò!¬Ëït‹a¬8%{ôˆm²ÐÍ\}ÈdåÛøôô„.W®Ø¼;®‚ôK¸¬|»$Pp#i…²¡y)-×ûê±8e2Æ+†ªß-1Ý/minWiÉ¿H÷‚Öÿ¼Õ˜êιޖmˆVÌ.ô¥yÛÌt`3Q*-kîÜ½Ú µþàâ/öòÿÇ{ÄÖMcÞ«?R›†€þ\_lw]B®ÊRhdˆ‚.¸!²0r€¦(Ý]Ü%¸YLÇZK†IU fáÜ@?â!?ȰÛ*G–cÈ•Rq‡àÎ(eÆ4¤¼´Ðo¥_ Üx_îɂלx~“K—=Ô¨Ó˜¡é¶Ïã8 óƒPÆ5[ŦfCOŒ g#ǽ ó ÞÔm¤èº‹òàerÉ}#';¥Üã¼Ü ‰ ÈZ"ê#~eâe6¼}úK=b~lÁŸp Æ>H‘½{?C±XñêuÔãrß…ۘɰÆ÷ïÔB¼Ü_´Ý(eó긢I€õ„¬<²SqƒUb2Òæ#Y´M M`’'W|v ĸ òø}ñ”£Åàç>ÀÕœ‰“8e¬¿†Éèô1]ô1§xr¢ `°Èç|£¼.²WÏ­+Ì–#u3ÛBÐÆ³¨wÓÔÝ긳ÂV Íø0i“6ÃVð^î·Œƒ}¥S”½}9#¨šúç~Jn͇`‡&”ò £«v#‹¿ÞU>OsœnúOˆ¡`‰ÏJ¹Ã ÷n3dtË#¬‘æ:Rî+¥‡…4!Ÿ+Â Ž»®í»šŠqÀ º‡Ð0¢69q{dCbö2̤ñòÜy„8TQ•ÑC´§Õ†ÑÍ^q_õ%ý*ÈÁ}ô¾ý9y©OQ2¡‚|V "yà8a’LŠ@AëÈSØ‚qŸ£¯ë²f§áQ(qSÒðÅÄ'Ÿ~fœ0‡À¾”(R¾…þr†°•ɾcWq‚•—Ã9\•]ÝתîÏ7P,¾UÀr†Wæ7½"q²=;òªý¼£E¶þPÖ÷dÇÕÃ]}?¨+Ô/¯m,Ú»¢ =ûß Eœth3 ˆê5=i“¦Þî<ûb(J€ƒVY;Žq>fß‹þ´cwŠÄ˜íPÐï0ÁB´±,RY²o{_–SFt,¯¼Úy=žù‡»•ŒžÌmo3Œ¨0?º»Š*X ¸åV‰~[#çdæÅóLϳ¿=nr-*;tÿ9õÌ&¤In^þöž-]må«7xø¦ûñ4RþVV÷råråKù"¯p 2ùþÏZ­T.w7J“EA[=hž{ÛPÕ¡4pgßÕzó+ÛžoÃß¾]t¸ŒR÷ö¾0p³Vƒœ…[R0i- òƒ”t I‹Ü0Gk®qÓSH¥ù,ÏplÆ•Kž‘Ùô¸­9y¶ ä“-­ ³ vã\¥š‘È‹A0NíÖ{3;Ѱ™ð;©@bùF 3å‹ãm!˜¢­4„%Ä UÑuñPÍÔØÜÖDZ{Bp0Öh6zË?²T Ó#Ò¡ T©ÜŒ ø÷£º¥FÑ‘Z(â{š¬úD–ÏW-BÊà··,ØÄNìbÀBó%ÿÌÑ<_‹\5îV ¦$ÉÒÈ(QT“¤—.³gª[æÁoºÞ#=0€¸)‘6<ÉŸŸYªÌöh¼ÕÍeþÈî;×牗Çs®#ýcEü.dzØ8Ä$ª®¤åm!Ë4RÃ;ìüg)}ˆ²€ð5ž,±žöIîGx‘ÊÑjÿ††oèóÂk‡LmiÂì¬Q’Áa·#ì+ïS‡JYb.54ç6ùá>!‰qÓ,‰Në «I-Ø‘ÞS®ñêÖØ©¨Xã+¬ ®Ú Ì0 O›/–7T¶¹N"R«’-Fa)f ƒœä5XP’JÙ»Öþ¹Jê°*vz=¤¶â¨éLÄôþ¤Ãú¥ô·X¶ëÏÜFõðÖ7 fLEex÷êôSášv`£Y gNvz:_+EØ9CMÞWC,Æ”V‘<8OK=üÜäDïJ6H`/‘;ã(±ª¬—ßëÔ:•{Eâ•uTL— YGó¿‹Š7LuÙ¦&‰tnkÅæn†ÛN¥Â¼¾Ú(ó¦þøøã?AœA¶Ôÿ¬‘7.'G&JÃV–¿PQ06æÚ¸ŽªDz’:ˆkI°Ëz¶:þV°`!’ÐÕݺø‡N.Á—/êm $>ø’ãžÎæöÁ§cEB—äž_§úÎõ löaKNÍ7¡,Mî*Âcäù>6Ü:>"Œ3é¶:ÕJùøD ‡”½à}aét·È•ú#ÚuÉËÝ úsn‘ÓÓ”$õ檔'®1èµÔ=Ž|ZÚ¥(l¦¨ðhûkY´½X¢|ržÆtG /†ÆÂtäÈæ–u‘£#(a\Èàå”'¯ánê à~d&× ¸qãuw,Êf¦@ ¯ox—ýˬ«G-–¿{YXÓûrù}ƒÍq6£‰œ#`Ò\Oi íÞðe†íŒøëäê7‹È•{Sß,i<¨¸HØð°rëV! ªaGÍ&Êq±Ø´kîS4¥¿¡yš¯Õ¨Pô8›B¾±,Jáñqø*]™ëÜÙõ† Íåͼêͪe’ÓX†…*Íh/]¿)ð8¹âr´¨Á(¦o€&0½ù” $]Za‰{º­oñ‰ïœešúýOt¸˜ölx¿gL½$5ñÅD>*ß•«‚èhðx¶$1#liØËW/«ÐÒØÿÓ¾q¾ù Þ…œzZ7>Átš›*'¡†ƒXíNÄžÊOžéõ½ºy6Q ìè•´ç»é~ƒ{ß m½A2È–µÄÛªã Z¸ cŒyQ>uòÈŪóÜOZßù¸0VB##2ÀBʶ­­zÞ`ýª j ‘Æ=Ú<6‡8ÂСºå›Tþ‹:Q)ߦ¸¾5©’Äks\>>hØÿ¥(#ã’ ŒB4„*¹<ÙK{aÙg$ÈZí=FÊý–V0xàÇÂ{ SZÞXpP¿þáüHêŽ=o¸>]æ÷Ô/øÐñœÛA-(]®n†if! a`œÆKIÎHÌפ` °¹õ 0øHº¤À!›”E†‡žÛ.øå"¬Î§CBàvëKÓþ;z²l\W•iAj-£+ϧFTŸNœcÃA% Lÿž6¬'9~i€tS?G£ ?ÈxæqÐòuÚÊÂ=”Ö\Â9»{y5 g[YYõq ÁG—³³Œr+u‰¾Ó\´`qL÷”TðŠ\ü8£~aVÛÊZ:ÆÙ^~¾–Y@zSk³¿Ñì¡ôÖèI1Z5f•7oÚ[ræØŸ‹gVœ¹cY~M@>g=åôùÛ†ó$¿8%µŒV»—¯2üõn'‹È|¢{-9f[ÉOX¤Ä–œÑ—wutîn¤Ù€„/¢²¾åC"ý*Ýïå²VòEå6–¶3t¸.L¼òpÝ&êt½-,”…‹ôç|}RÎd vG•X¯OËqtÏ®â3‘œ®0mYŽÇœƒ[ÍÜÛ?_•4­|'3ȸøÇFK­%òêEêUV´ÀLÂç²Amˆux¬¼}a§æ_ÇùJ,~ úÁ˜tEWˆ¯ßûóÖw/&K©ô ñkJš»ÕÁngàž8|⟶¤­mK˜¯a{ª:#È•‚UùÏ,9Á©Šp¨¦#­BZÏ¿*ª-MÂeHžMÎúüìNè͸-΂ž8Ó <.̱-Ç©9„E!I@¾í­ È¥žƒR³y:¼Ç¡ÇC×t«É [„ðz¿:òr¨Š¬v—¨¼@ Ü#NtÎ(„´‡_è¤ÛâÈŒiûsθ?øvÙ‹§ný-¼PÇv>n:—Öl–0ÃÃouŒYg©Ï9v:èú|§?@[µ„n–ÂH§x ° Æv³UXu}ݽ0š¤Ù&^!1°)›ì¤Œ“V°T»”Ñ‹U ˜Â¥asîD¶l´v¢lß?jÉšàùý‚E©+ÍžÞ«f¡ •:ä.º> LGÅ|ø9>ÔŒ¶,\7µS vðÜÀÆ›(¡K¤’œOlꃆ{—vö, æB uhÃóÒ4M”ÏžT-i8H¡c’–æÖRxΞ‡Yý•`¥çJZëávÂ˯†Xð7ŠW8°îÆ%ÐÎ ½]zTCS©ªyòÒÓÇɈž_ ÔE%†“°£>p]T©0®¶]2Õ(ða·¬Û²\ââ?ŠŒòÈöB±çv¡q‰í¯ Ìñ¡· ÜõàaûS]Öõ7Ù”Ýß4èàŠg4ò”aß"Q‘cÅnV¾ü`²`ÖÁÚàŽ¢B. jîÅþ$‚©ªO8ÆñFH3z «¢”¿Ñˆá½pß_áé/_>"*!ÏX‰yyªø6w …g´­Âº ‰Ü]ÊèœY¢ŒÖûÌã8Q"ª*v¨_ ðœ_ë/P§<ßHmí~»¥¹Ãi·Ü¥¡éÊw{-ú.}€le"˜•ŽÉã$'i]%&0!ôEyh¦ÜUCf„ç¥#·›û³µ-òÏ;]”—Ý}–*ØÏÎùn«h3áAD%ÿ¨©ûé¤ùàH‘›fGÁ%­’áùüÕ „öñމÇ!rY2ê9–¨Ý+qþÇ0&\óôë!óQþ4ý<:}³WÁx.Ó>üpóÍJ?uw!µæ=ÆØ3üYêñ`Iõ‚"Ûà‰8„¥¤ÄÑýêúJDp×h?ˈ¦‹ß[‹ü¹ÊÕ®î#§2ߪ:µOˆ 䢅“¬¨nÂM2AvôÝjfœˆ„¾#¡ ˃8ÇÊ1ê¸`¦fÍ™ Ÿ’'ýä ‘ÛØµÉu¦H¡„qÐú&ƒeµ“Šb›˜²¶‚&ij´)T›Š o×@e‹KîÎ>|ŸñªH›‹O±oÓ«¡›{Ú}@±ùj÷c`øâÅóWM.ê)*lzɨò©”¶ìþ¼²eÆb›§‡`óÚ¯h’›!µ¬*$ü[› Cܤݡ˜‚¨æ¼sL½é‘çMÕúw5˜(jGÌìrvŠn}¤lZºº¼Ý‹ôAÈ„Ipmœåó}#ê¶ä©­8,¨¬Ê„ÓýH9wO—¼åHu‹`_‚Pp7C§½¨=*÷Îß.ÝÕ[»a(‰ÁYÖ\Sµ-/ñû:¯¼!ÏŠºŒrJòªÎEèé{¡Uê¸ä¤¶!ߦäÆU,ªkA:h“ÛÁ‡¾?íŽs‚æ³Ä8@0„ñJ¢3q7©ä½ÐÛ8ÅÇìÔÕ|o¾9ÐÍ•±ë/€ P4ÛYF|³®ˆòGê×|Ë.[äéOõ¢>­pM‘³Æ«…T0޽Nãì ‹N¶yÆÿ°âËõáK‹Ä—¾ ü-…ŸðkT,l0Š¥{Æ· ÊÛNÂý4{æÛw>\oÄŒ¯¬oSk”¯ë‘·BRÖ[þpä»S仚9­Å ›ÞÚ M°—ð‡»zœ•`±é””éÅÏÑûdüg·¡©Üqäèæ1²øŸÛÂHË .¤ÜŽ›à”qãñpÁ¬rù+‚µž‡>±·j@›Ûðx¡Ž¢ÛÂlH C*!O1JÏb:UÆ%©*¦ï®T^¼Hñ©EƒshXµkpg¥ÊÓ%.mM)ŽKMœ-j7µDyzá¤ÛC»ëÌ㸓:fc=dÞóºåD²í!nNç`èÞõ|™Ëõ`ÜvPJê]WS‹RËÜ’ãð4;î)Ò`g*1“1GŒëò÷ó±ÓЃAYµM::îUY¯®À U®ûÍUx똎ìù&Q ‡wþd ãHk—•Œka"öù_åMÈ› Ãê'¾¨8c‰lœ!èªB¢¯#¦¨6—{à@Ílƒi_‡ú‘`cñg ;“‘ç®å19ÏÆ°‘²—òƒI €H̲À‡-a¨æ¶õâ'·ãÝã/5}X¶?móž"ípFÐù;*S‡s_“,dîB úÌï©ðاÍD©ìŽPé˵Mì†ó{][9WDꆃè0À?8¨:›ÐOÔÎùEËž2åâQÂm-Çž¹l.tPÎ"5Ñ'=H¹|ðm´^´6¨c¢ÿ€ç‹—,«i}@w9¼Ž:¼r«ãFUF”¦Y­ç$(u‘2V Ù‰a¨:Kâ¥Ê—1"ÃzÊz^î‘!ÌùÝ-/¿DG+_g’ói ÔñV^Ô7(©Öd‰]œ©% ßE Ñ "3uýÑeñÚËvú3²‰V—‹þðDËü4S7Š!ˆ´vÅ.·pͤtQ-Ëzõ-Ο|IžseŸžqÍýHÒÁíè}xRºNçÐ_2¦}] '¸É$­Å‘Ï?4ý1ÀH£º^éAúyùb´Z35å’ïшmHg»•âº/p²Þ±ëémAÇ ȵPÁCBôiÄl¨ŽÀc)¥ËV‡ê%ÆaRS,‚&JüÃaÑbÙFЯ‡4}X”ìõ)¼¨4’œÄ<(üoæôézòfS¾T«ãy„ IX£1¨´’Âä8þ‘L5–é¸ùÂ#o½a¯U ÞK.#âDáÈÖeëÛËï#ˆJí¤ ˜Gòµ+_··ó,Ž“#TrË Ë Yf劑ËòÛ&¦›Ù§Õ¤Ï[ > × ]õ)p5ﺑŠLßµÖLÌOk·Ë>FóØîìVùQ7dPƒš˜sýªnäNXIfA·~õ ¥»™<Ú 0Lap¾ hÛ~u'T°Õ×Zâv å;ÑúÊ7ÄtSN¼ã˜5(ôp<ì~÷ÓŒ9ÄsJ€´âã`#¿dH\ñËíKz}ƒN†4EnÇ„~¾)#‹ Þ%Wa66/ksg8ô†Ú¹Ü?ßÿA¥:¥.gÕˆ'àlÚÁbù¾‡^hUË Á³ “ šyâ•!»:³0Žöç€{|©¡Î¿üÚ |n9·ëÂÑ››Kpô‡?£ÝqîÛC‡¬Lq½uL…ï¡H†ETãŒ@½åVåÍÄD 1(¥éá†'•ãÖe.9ÄK ÝÀ çwEÁgJ?¡kãŽU3Ì’™êIëHÈ_2\'hJç8NÂðeæà˜P_ÖZÕúd“­äHÐañ@xWmát¡•Ç'X*ÃNo€$š¿0çÁQ§žOÃû\ÓÖ$ÍÜ_×¥íA/•od/ ¤3äLE[µ tÜ·dŽôƒ¬ü/¸h«2FЊx‰ˆÑ|–å'J3:xà῞5ótÅec¤Ys½tw.ñµðsƒ§¶¹Ø\ÈDÞõÏ*Ä@îÙl龦SµËÒÓT¸I ­µÎ€o&\(Bç2ÞTïÍC1*;®¤"…ý…׿:Šˆe·Å‚.t¥FKh¹¯ÌØŸðl‘Ò¹åYm(W+:)ëÍ(3Ä‚k‰ÛÙ篛2úíl8ã´ËÑEmSV¿@fÈ|MAéªÙ8©¶#þ~œwCS$"Z¾ÍrWIJnè~ï¥(ߘ¡¹ N{Ö›#äsÏßÚÂë;üêŠwQlr¡ Ë;aû¦ñ$Ä»÷D¥y-<ÁDt æ¸cÞ§2çyˆã]H4™3¦ûâ!ˆåØ~^RR AdÚGfs;žØÌZ߈æ¥õsIæ7Yk+Üòxû:ÃB’÷êõØS_£Ô4*çµiUœ~·ÀlYÕ¦úå.L ÊK“ë dÜ+}ÞÄé_ެºé£ÖzÿH×н $X–褬Ç{Zß.…:èð*j¦º#Ø$±Jy›OOg:Ms´«¸ð¡pQ ŒÐI2Ô?H¼#ícvùúÐÖðcÓ´ÇN¹@¹/b ¨CY4–¹)ÀýÀµ9šœ4 "±Iø¡âqÇðÑß Hìû`•pk<ï£Ê×Ô–`¯W„–‘u˜·‰-MDiMè^Sk'Œ1Dÿ°Qð¹{¹U ^‘{A–=ô~T¶€=°*æ1ϯ“&cV†Ï«?Åá¸Ýkƒ¬hyQ¬üqžx%AÑvµÝzç`?2•´ny-*xÈi:¡ØÜ5‰t•¾ÛÓób“ùè7þÚ‹ƒ—²*ï+]§~ Z7¸<Éß3+E&®âN´=`XXŠßöqBÁ:{D¬§³$üÌm¸+UÝXd”Íš.jSKš/:©ï@œÐ­KíרœÓ³þÞŽfmøU’X+ݧe¡„Ç x4£ì¡@LÞÚÇ&¬B3šák_ØŒ’!S‘a(ôëŒ L £õrœø“Ÿ« ãÎi–!òe,=dµ‰›ÅOàê¤iRg¬Ÿ°µv -ê7ìÊP¬t?A¼ëàlAg/h š×½îØ~;²jâÑe„Ð:ÅÈ›<©ÅàÏ0ÎÒIØÛ8QSLÜ3³DŠÆ¸†(édß¹>rÞÀ8"{2Ë–SB¾G» Ô&ê:¬±DäàřއjQOSñ½wx+.T2Ï'Ž{o&>½ñ´ÛDÏ'ì‰E¨}óŒŠ*lð‘J@ÈxUμÒäÄs-)©.%xj+uŽÝõWSÔœDª‘?FÙ?…®%R®ÏÀqÛã° ML§â+¾Bé¨PBxèÓ830z¶Å fm³±èn®øLè00Ñe&–pÒ>CÚøïà± HaÔè¼ô2ç­–QÛ”µË9 ÝóFb™8ƒxþ™–¢7—!á8À­.ßF… ð9QoÀÁRðã@ç¡×$Ñ IÊ‹°üºØd'QxŒÆWôúÚâ$!ºéÝÄùÏO‰6~€Ç&ïçyë$Ö^ѱ½®kö+yëÞóq˜­óÏÞqGä>BH!«¦=U)ΡÙ?úKÉvÜLB'2ʆûŸ®ºNøi²€hÆ‹?ö¼ ®7®&Šb+‰…¡)¥c¿ƒß*Vµ*°˜Ãèx/zØÅVK…ûgtsÆùN%h>?´3k±ÔRó¦=úÎY@U(Ê—Ý9²†ÐÉÌ‘ñv` \Úe”Gj³dG|;M(fYõâ¢<õÆYb\ù!÷jÐ]l¹Jw‘eŸ©õ’õø ˆiÈZI„ÏÁÖâ›ýÁ÷MË9Q7~ï»en*ßy*L™k ‰çùyÐv|Ëö—Ю ¸ ±:¦ÞȱL©ðxÛHa¢ôXÖ”—;H¼Ê_^'pɃºRƒ09Kl“ÄÄøAê϶àDz,ýÃ(R¶Ô[”.«"övó›?í$.?Ÿ9&M:p:³<õ쥅õâ$ºC¬œ[B¿ ”„Åâq,ÑÊ:qÃ))ñ|èã,k5Ö…îƒÆ~=(aŒSË '¡}S§ãðÙ_òpžã}8تq—c6N…éU)LD<ÿ¤ÑõÊ$XùÄú*ôÉôûbqtÛ ÝÅ1‡Üqà8±ÓÇ,ªÌs|sr*]ÔñæJ{ 0Ì\m ûØ¡çÅïµfð˜/"V–CQ½¸¯JÍE†1t¿åÞG¹•Òƒá»#Š&¶%Y*ŠI£ªIZ¦%ß7vÊÙ_Û33sh¦ åœDùd‘L‚©9cALÂE7!ûBÞv·üô¹•ãáMªM‚cBÉa«fȯ„>µ…Ou?àA?4Slo;qqcWV†™HÐÜ©×NGx)ŽF.d.QSÀ“›ÃÉ_ŸƒjQÕÐëÕ¾ "G±ÐÀH 93[—rºd†“%œW˜xËË{’ÖŒå­Iöv{!á+öăéÂJ÷Þϯ8W·…9ÁŤ©S$±HÖÊî¿8l_6ÐÖóš ò“‘ó¤›ìï†2+Ç<¡7™nM¤Ç#kv„U~ÛB(ógü —Þ<öfIƺPf(¥Õ/d‹B¹i懢c–^¿ËVò˜¼¸èܨ<ޱÎÑøÉz}ŠÇ§)I ?ú] üÛ[\<Ÿ{‹ÿE4XêòÄf…~64Yß3õ ºß,™à-]ˆ3p‹ušHvH€&§œ¾f§&=Õ±÷©‰ ¨H9ѹ€·ÎÿÕÖÍÿkjJd›î#{cFn½d'¥]~QóîvG¡5r)Fxꀼ뫠M¸×‰:î•ÿäô%¸Òn©)µë2óKl:êö%#c¯Âäl°ýù4“)èr}àÈ„¸.ì,%´ö.1xÀ2’ÒI—³Êé3ä\p˜bË ©ÎIÒ߃úÈN¸ðr!ÊšÙª?Þïκ $.ÃêYÙÒ’»X%•z^âZ¨›xWqcoÍÀ!¶cÊÉŸÚŸTà‹Š¶vºúQ:£<2HsJ«MËUH­®qaÎw`sÚAV–eω$ÄiWK ŸÙ3^„eˆ åHËÌ6J‹ ˆb‚`zF‰qúSŸ7‡á£êQùëךûòÖ¥!‚‰åH1þ’ú|œ9kÁoɾ¦SC,íÄ£¯¦°b1+ä%~ÄO/÷æ)w÷´–0ÜÁ+øv¤NhÎuª§ï˜`‹;m»qÖ~AÙa&GI7|™D6‡<'ܬý*™¥qèîm'Q¯³Ú†6¥ÒÙžXŽÕØNA„ bjs»’7Aã¶Æð}aÏ®)‹ò8$Ò%¿ØozÖ5á~þq‡ŸÑ”÷ÊoAžšÄUS²Œá’£.>T\½¶äçܸnë×\…žm¥€:ýÓÛwÛðt ŠQÖ l@o;¥ââÏ ñýw¶ªjöJ”}+…º‘ËFÉôü ¹@Òµµ†’vA˜ì(QHîÇ=ïä×ÐÁ²Ø6¨ÆÂªÅûõÙv¯òéä0ä›ßõôœiM5+:å,ñ4ÞpeUµhYÑ é‚«“CÛôVò,Óê¤ðºƒr}гÆyž‹„«’5Gª„=jw¤ ùŠ;_1S—=XoK ÞšT<}†\Ìâþù5ü)nK‰gÅÉÂË EÐë[©Ž¦ykù=7þ0ƒÏŒ2¶8Eç¦eÝÚùeˆŽZŽÓãïÌT̲¶ÎJ[ 8¦`£Îöê ãÉ•`cÉGLù‘Ä\ÇÍWydlÛá‹bx¤ ‰ÚÌL9–·h­okp†/Á¤Ù+wž”‰MÊF‡£íA\Æ?ŸàuD³æ0,µs’ä\m´†)„-[9•¬í™I%ß0tCìÁ†§sû†QøÄ ²rý²d«¨Þ3æÄÈÑ}̧ü`)ªOµt‹îŸQI:Hþ”Ä4êÍ_ø*ùxãðšÖrî0¿|xKåеY/¶]«b‹V‹PðÛc-áMÝHp},~_P­Ð÷Z1?Ã}Iü9X?iŸ†¨eÛ´=}ûsn9GÕ2- ¤›€lt•a­ðç÷oËéT,'zÁÏP,vu´çñMæççÁã<²”T,P7ô¸ð=˜Ó Ʀ¢Ê-•–8Ëîá‘^M_p‹JQµ0?o}WHñ¨I˜ØÓ(Lª½Ýw„5B‹våÄ;ë0+«SyžpŒ™˜÷Œv ”œš‰.Sê•ûïçø™E]«GVåÏ;caM(ç-8%4©j–762D'ÒÎÌúNÁS•—¥¸`˜¾ïð ý`t£Ô%WÓô6Yâüt¤PRfl ;èIIK …IÓ' ô/ÇÕ¦#˜+Ýz„ôBó‰x¯/á£HâÚß(½WŒ3=KD‘"µ– †1-uúu`WœkèV1¶VW^!^šŽ“¯W£JöaÍð¶·¬¿0ˆ±#ƒhÃ}}Apû “Äö)(Ê¢¯e#)>Ï/ogK}ø,¥ZÔ"AîT3¢,§HHóÅ­H“?Ó25ÿ GW&sB/i\G±ìU]¤¾ŠØ…Lõ² K¹$‚†³™RúÇǶôc5’Ö’nPñy;†À#Û :ËWRT”r jä™;0H|aDª@Zùjõóá6•O¤,ÆpΦ÷æÃ†ù±DaªÀ¬.W^®GÄùºœ¡¸£=ë¬ €DÅqÃè4ËÞ*`VCNÑä®ZÞ÷¸sQÔï” ‰ïW<Ãz‚²¦D2CÉäy§²ñYd+{D¢ùä0šó׬ç%OŠÁIF`5©Y¿¬ÅT-×è¯-È;öÄšR¥Î\/ ¸‡¢öº]<” ޵F+Ð[l ø ¨4·Yµºy(l†¬<Ÿ˜yAq‡í/™c×9yîãE¸eoƶ$bº#pº ÆЃÄA¨®-Å.Ó”Y½F*ºšädíòD>íùêUp‡…®2Ãô]h‰7#øîŽÎÐcÂÿ¸¢¸‘§=sÒÀkæk¶‚æÔª*u(6öˆ±Â”B‚ÆÀ­„‹TÈ‹žBkBOL‘g†'Šª‘žºÖ£˜©^°ŽM)œ­èt7“ 7ùFLÊ Ñ ¥Ë}1uöo˶0dâÇT@±ÐbnÜT¨îÀnw 4ì'PÃíXsü3ªÐ´íª€àÊÒT„¿¥§á«c=°¶Œ€ªq_J6ÌpfË žnnÛ/–}L’<  °fnaVI'¦)` Ñ—3ÌŒå:™ýõT˜ãtCˆWè®#ß~”µœ‰<ôe‚?¶šEeÄS€P=äÏè ]ðüµodv;_¿V½bwßÙ2“Bº²ÞEUÏ/yƒ*;«~™êMV¦Å°Ò!déˆà§•òÄ"%Û̲üªY[ú™À-s«²ÚèRâc7‘Áæ›Û¬].kÜ ÜêæHû_¾Ìy1òñ^öÝ¿,ƒ§àTÇÅHóÏ.è.*Ü¿}+n­póaË~ÖÌ.ǵ,—ýµg¯—¸wí†.‘«‹ÃÉÏA Î¥yŒ˜õgÓ)S‹Ò‘ôÐáÕ“Ec»ì«-Ùˆ£`ß ºlr‚®\C¤§OòöÏØø¯%Iª7=³-ÂÍ5u wrFÛ^{Ýq X§|å„b£|A3Šô¯ª›®2ÕZ›bšîyŒuÃÉeRE%@ §¢Öºq´‡ÞˤƔF´œ‘1tû1]²0èI&ì!Èh8}X¾çšytï“è—G×E,æKm ö„0bœ$HZ—š>!_cˆ¸wTPÛ$¢j%Mú*°óvdÛ×#®_ØÅI%ù¤-øuÒÁD:î‘ë%Ií %I4ø¦âߦøI–)Œ”]ZvcÒu¹¬eˆ<òD{,=n Pq›RŒ«ö‚fó³n$+?™OS ÈVHò[&¾`ƒ)}ÏYþ\:å§B3Ú˜<û£éùÐ(_nÆÅÉ'g/:ŽÊv½óÜ©ã1S®ªÕ‹Lëå¹ûÚ\ó¿³&w|¥  CÏ kâ|õoóøÍ _»|Í_ÊÆyj7C‘vJ¨´^gnm1×v@+·sŒð–un™•»vø `UÕh+»lòK~¶&ëÓ1 ßy¢Y™O9#›ÐÈ©XÐþ‘7€e¶ÿ~ºã 8 ö(¦øÝ ÿ”ö§ÁÀ” ƒG“Ö6µ%qK}U€C‹H·:^úÁÍhòûdì.eÍA!¶å½,‡º¦å£ßáÎléY S¦ädà4£âk¸›Ì@c“]¾/ñŸeÎMù—ÎrÄ)8<”EPõÕ—XñR´L½}þ°²Ã úà i칈¤•LÍuyJ)†sIÈj?:™:"¶=_ƒÈ-ÂR,óó]R ¦™DÑàîÐv͆sOБ3Yu¦1íÅŠV©ÄZµ/¡¿ã±;mcê‘#ˆ…ž¼YTÞkºí1}K+ì¨h¾°pT‘u€Ás‡ ú´=?òÀ GLЉ ¢¦ÑQM\;ÞN¿–¯ 0øü0Õ g¡Ï-9fb&ˆféüAPõ/Qá^ ·6i“«×¶VK-ÖfX»w½lØóë‰ €­&aÝA)Îy®x¤ÐnªÞdüoþ`ÿ?Àÿ&6@#'{[#'kØÿ Mƒ×endstream endobj 1195 0 obj << /Type /Font /Subtype /Type1 /Encoding 4726 0 R /FirstChar 45 /LastChar 120 /Widths 4728 0 R /BaseFont /WKPMAF+URWPalladioL-Bold /FontDescriptor 1193 0 R >> endobj 1193 0 obj << /Ascent 708 /CapHeight 672 /Descent -266 /FontName /WKPMAF+URWPalladioL-Bold /ItalicAngle 0 /StemV 123 /XHeight 471 /FontBBox [-152 -301 1000 935] /Flags 4 /CharSet (/hyphen/period/one/two/seven/A/C/E/F/G/I/M/N/O/P/R/underscore/a/c/e/f/g/h/i/l/m/n/o/p/r/s/t/u/w/x) /FontFile 1194 0 R >> endobj 4728 0 obj [333 250 0 0 500 500 0 0 0 0 500 0 0 0 0 0 0 0 0 0 778 0 722 0 611 556 833 0 389 0 0 0 1000 833 833 611 0 722 0 0 0 0 0 0 0 0 0 0 0 0 500 0 500 0 444 0 500 389 556 611 333 0 0 333 889 611 556 611 0 389 444 333 611 0 833 500 ] endobj 1186 0 obj << /Length1 1638 /Length2 23654 /Length3 532 /Length 24569 /Filter /FlateDecode >> stream xÚ¬tct¥]·e*¶“ŠsbÛ¶m›':±mÛFÅvª’TlVT±í¤bv}ï×·oÛý«ûþxÆxö\s­¹÷¢ QVc1™ZH‚\X™yªZÊ&vv&æ@<ƒ*ÈÞð×ÍOA!ælaâ 9ˆ›¸Zð´,ÌâfVV <@ äèå ´²vPÿÅ ¡££ÿOÏ¿R¦^ÿù{Òhå üûãnar´·ppý ñÿ|PÍÂàjm°ÚY”5DåeÄÔ"›0:$ÿF•ÝLí€fy ™…ƒ‹ Àä °û·09˜ÿÕš ã_,€ ÀÅÑ hb°ð4³püWˆàháltqùûº¬œM\ÿÎÀ:˜Ù¹™ÿ‹À_¿%èBŽÎ ¿öcÁ”A.®.fÎ@GWÀߪÊâ’ÿæéjmâú¯Ú.À¿aÈòo¦9ÈÌí_-ýû ó7êjtp¸Zxºþ«–©Àèâhgâõ·ö_0Ggà?4Ü\€VÿÉ€àlaeâlngáâòæ/ö¿¦óŸ}þ·îMí¼þ9 ú'ëqººXØY2³°þ­iæú·¶Ðžé_WEÆÁ`aþ·ßÜÍñ?bîÎÿ ˆú_w†æ/ sƒÀÜžIäú·$€úÿMeÆÿ>‘ÿ$þoø¿EÞÿ?qÿ«FÿÛ#þÿ}ÏÿZÒÍÎNÑÄÞâŸC€ÿØ1yÀ¿–ŒÃÿ‘mb´óú¿åÿ×L-‹“ü¿Âȸšü…ˆƒÕ_9˜™ÿíºH=-Ì•®fÖK»¿súǯá`nált°ø«ç?£0°03ÿ—˜º5ÐÌÖá_ƒçøwÈÂÁü¿rÿ+Ñ?Ì™¤UDdE¥èþÏúOžò_í]Õ½ÿRûŸ­(€Ìÿ—ñ/QQ'À‡…“ÀÀÊÍö÷ɱ²xØÙüþ/ÿbùO[ÁÄÕè ÐûÛ63Ë?ÍÿÏï?-ƒÿ#á`2ÿ×mQs5q0ÿ{Áþ—ãÎèäf!#þ·sVö×2ssvþ«ö?›àï(þÃþçXXxZ˜Á¯,ÌøBm2s²\¾ OŠëõ÷²@ ‡9–7«+¬õdFnóT¿Õ‡1¶Ló~|÷Z‹qÝfý 9µß]·Aô"uù©ï9æ¹…óô`¬Å?f+ýE÷v;_%PíDõ¤V˜«gäòyâÝg@KRSÏÿõVÄ,#¥ŽÃÊ"õ²–\ÐMþe4š› ¬ÇKC]_]ƒ ¼áÞ4“Y ÑSÈsuQÐÏ$'‰Dw›â ËDÿ-{Uܘ£ã,WøÃÕfv² 2xjKHzŽl›–ì•ì¡Õic´iÆVŒ€¨6Àv…–^tü"õÙII|ošåµž¬Ð¼Š6cé€+žZ­ Ž•Fã ¦\SV8“ž ÚùÙªƒú6íëÓËV¹›yœAÙ9 ¾é÷ÜÚT㇫‰„<2à8³F0´š?¡ÔbñU†IAÿH`׊:|0Œ4gÁ{užª "üÀèö¨‹ÇªÉͦh.VUJ¦G(ÔØÈ*¬µö4ƒÿ6ïŠ3¹^ÍðêøK†Qª¹ª3& uÉÇhc×™ƒV upȹ»ù°Ÿ%>Î2T‘8%t¡}ƒÃ=¼Þô[O:¨…yدØâjX*Ê6õ® ÖI›Èy‡ìýVGµ¹âG‘òð^ú …vîMU“ÙéUV"M©Íš%ÏW¸ó‹4i*Y ¼=Pœ×½0Ÿ€êx}}9àƒoÇo[OÊ…Ÿî7YnPK›ÅB'µ>¶6Sô©h¯s®ŽMº;a §`÷BSì\!3 ý+øe»YöTà•Œ:]goAæñw<‚¨á¤îiQžF¤lÛp)µ]ÈÞ® 8AŒ‚<ȨÐ-pzSâðƒžÝm©wMäè¨æúˆÇ ¢ü®ÊrçP¼È£A’ƒiàê/²Ž8E;”eýðqŽžñÝX:ýZ­¼q—D{Há°V6[h;ûܓԹf¶;ÇZÖù.ê ÀïC:ëÜEÄÝme¢®9nbvæ¨üõb†¬qˆ)œ ldÞãÇDÔu¢üA„²$¥‚ö4‚–Ū—"Ž>?ó©ÐhÖ<ý0»±1%ò¶±ú0¹lÏÞ†–áo+½º›Àƒ^ÉŒ•BÚ¹ñ“”c……ø¦0óƒ­-†”ìû¢ö‚Úh“¥JçQµ§âU¬îWÆ-?kð¨fÙl#Òˆ‚ïÎe†E|ê©åëÄa†ñýKž‚çTýÄ»ä½uÏR“ Ì’t¿ÊÌúÚ0%õƒ”U)ȺHZLñ±çÏo]YÓšÒ×$Ó@R€÷ù@æRíAð[µaD(¦==-%b\£Žo0ÇÞo`íURZüYc{¾@hTÑÒÛÕ_µsàÇô ÇßmI®Vg‰Ú4#IiŒ€¦pˆ¥¶î«£¹Ëüý'þ5éÎ N²²\tFÙ¥ê1·Y?Ò¿WFöÈa ªO€UKxƒWG¢òÔàô,¬C¯Õv˦ko´d—òݬ€ î°Œîæö! 8ë=mÌtŸJ¶ßìTŒØ=Ê3ܸ)6H œTÒñõ¨ß½*”Ð ‡ªQU°ªƒ«ê½†á'ñM„pý³‚ñy ™æ&«—Ï€|ºoÖ²ÙS]e#ù•ý‹Ìk´lEMÿ†:³Z0Üò5¸’ëªfX[’-ðP¾ðÄLç2läДWµL³±Ô/fMÀÇTͯH‹"’Ä f_”mÿ@>\cÜ£ªÃ8¦é!+b,_˜ôÐ-ÜnÔcÈ…„\Â.Š õ\NÀ-žÌúå­+Ù^ÓøÄ6C¤Ý ž±”Q$än÷µY!ñŽLŽ€Û)¡ï~T`jWYj/¬Ça—Åyð=Ž"{ÃgE°ž¨ê ›©X±Ñ7ëúJ+†C‘3ß{‘½»N«Âa.µÚÇK?‰WžÚý:ùTÝC :å¶×½Ú”Y§S‰MɶíLhIöQ”ÀgÅŽ rò.а4nÑ[ñ/ǘÖðĵ÷RQë¬ÿ6*[Ò o¡Hâ\»¹qtO¸8¨û<mf:À=)6 þ*}êJ RØÝbàFl)ò^klQb‰YÈ]Mqèg¨‚gõ :³¥"5õ1œÊȘó õñuü•¹¬õrSÈJ9–´ú'5”ÿ©Uãq='´hê~ôLÕÐ|Sf÷ÄÝð7‘Úu¥ÉóÃáâÈQÓ%¸„€ZþÀÛ$Âél%ºkÉ«ÇZ£ªŽ.8ÿá³ëšîšhºL!|´õqü®âMýiÅ'¤J,Ǹºƒ©5o‰&§y=^@ BÔ‘hÖÌËiÂϘŽøZnËD‚`¯^xããMN¸îY˜â+x)ðZ8lÅÑÞ“Aê6Vܫ׀Z‹eþ³Nu.·ìÈY,¥E¸€P\ Evý †û6× ÐvS(>Ò þ²F¼,eå:ù™A,”zV‹l/ðóf"ÿÊ8³8Å•Y™ÅÌâ/Léw22[]9³ÓÜ­‚$RÛ>m••ÿ–›Vîœü„.Dî;æØQüÌ6ÅËÛªnŒ’dàYPˬTÞBv+šGf(âk-ݧ±ù³¡•ß.®Åë 3q`pB<µB´uêcS/"í3ë§fCÁ´öB¬z¤€¼j$˜€¬!ùJ%¥§!ûB­Öüâ¢Aß‘²”×,›ËFJX餞æÑ…”Ê„öcœ{®øoÇ4¸—…-Aõr ¡ È,zµh&ÍU—l±SŸÓð qázÞŠèÇã4Ûðçvh.xñ7›'a€õo2sefÙFÌYïîý'Vd›µµ{\Uu£êÙÀUÄe¤¸G[°wt9ªæBÅ'Ú2/ÄŠ;M&VB°(¦Ýü´b8¾W²Úß¿œkº§>Þb|æÆK«ëìMNšÿ ß\–¼ýÚ¾ög‰S!I†ÁFî>ÃCŠäñeeÅ»õg Ç|¿Û $´2´WšYâ2Pý $SbdxÛW#M/Z;'aS4©/K>ƒÛjø® 9eXï…'ÀdaÚ(žS‡¢br $ÿžS‹E%Å?ÎO¶®z¿ášÖ+e™Ëú\9¦mJ´„ãYÌÖ2Ðú}A5ÀÅß#/›)ÃÚ•UO†¨rjÔ€6zrÐÙ[Pöao ÓS¬D è¬t]'?R hÈ4øÚ­$ ˜¹CUw‘Ä:M¸"WÍڌեIÓQÞ#lÝ×#†½Œgæ}‡F %IRæ-¯—öø I6¥5Ÿ1Ça”eªHkûÕL—†ÈèMZÍšë§?·Ù£ºÂSíƒì!•V«S·)‰&4Ç t,êzìÕˆ.y•Ý2èÁ¾˜ášp*à[èDr¦ÝÎ5FkèQÓ¥%²Íäiа›©áú’P–:Zñã ;AàSš©} 5ïÎ|w^,CÆ1=Ž»ÊÒ¿+£–LJw,'~.²Ì•ÏBÍ”å›]މZCÆ$nJ¢@‹¶ªÑèÊ?…-S‘“DVH{12nÒ,á}š¬óçFQà£SoC“¿ñËœ¢:‹ÿ¦5’´ âuvÑ|ë^*-~õ©¯w«N7Cf­íÇsØK51»“¢EÃe®Æsì÷£=ý¤¡?ˆ]Ñà‘ˆóËœ²—æàBñ­}®±½-0·¯Â˜­÷Ïô ”býˆçTÑ <3<8íèWÃÅ 0ø‰-zr?#!ƒ×§-O!G›¯zá g–ÉnßJ*2ÌSRûúZÎU)Ö¬CÝA‹²”RJ(k6Eöú(ǯ?®ap'íEaö‡Ï7©-™}–*ÐòŸóÿÃÒIÞ1(bßÔ>S…SÈKr]]U™ ÿ¦l™Œää…­ñ^8!ñgZsÑ¥ÏÂ.ѶhÐzÔ—¦vXÞd‘†} çdz5éU-88ËQÕŸ…‡ƒë„›ŸÑj)D·k#›ùŠÀD$?;ÜôÈ aîR7ØrÐÁÇ&ËØUjš(·¡$¨&س‚àF~ÐËö‡).׳1oà&Ä¢oã"£±Å´Ë=D¡ßÍÛy›cCPu÷ía—Ðe|㘭½KF½®Û|…–Ö×úÈêýÁ†ŠFŠŸ;oG§ëÊÐP€½+Æ?½ã ™LN95¾(¬ÐÁå&Þ.Ê×Êù´¶Ý¾ †íàÈSs‰PžÃM1Iv6y[k>Ÿül ÊmFäÙ±螈uŽR-Á|}êæTYKlÞú‰|%ð!’Á'PŽ7pÄpry sÙÌ œ½%SvÕ“ñãv.2¥C7‡Ÿ®$dáû6«Ñ®|¯†Z>x”©0Bjà*E#TÍ‹õ¨âÏi÷܆O$Âð§:½ñš{µf”ü'%Ëùäy¶céÒÊÛN Tñ2º_’ÙÖ¾Ê]ÉÑ)hB7[_(‹CyÛ&h·‚K\¸ÂVTÞX$Bî2ž=¡-Ç#k6£úyü ~RûüiK¯Ýo^]»-¿ÍVL2î¢YÆ'îU¾]i¹LDƘþÓc³c­½O‡èÛ~F±¢Ù g€[}¸à£¬_ÝÛ|¥Wõ6QÁ•^û Ï¥®Ú,,Fõ<+¸¼ë ¿Ö‰å„ñ=¸Ëo#å÷qPÿÎ>”ûT4½êJNàþ µv3góÐRWÅéE}Î[¯m صA¡Ÿ°²  “<Ît “î2àRÈc¾€¶4-âX”„ :A¥YOë/M8ó J¡)ÛS=AÅq¥¸¦ ¶œc‘±×ó#ºI#õÖB‘Ë<`{¼û\tïµý¯'¡R87_#þ_—‘©(æúr }…nÚ~Su,˜4ÔôvL»Lù3ú:¿çœNiÐPûäì5e%ãuÒßGí僵FZmgžö¿ìošwyë]¦ò/sÍxÓ_:p‰ÿ.‘3í$»4j-4‚ºSZ_£]fõ35Æ‘#»Æ‘¨ßÀû:¦ek6æl€O]ð7ST‰æYí ìå‘®&Ìï$•¶í’ˆ”Tì£í~®ÌÓØ”J¦iì(-Ä`ñ$ý¦nžx>Ü­ks8.Ý\ÝÓÿÕ«¿5G#í/Æ•Û?åž‹Œ©Æ‰5‹ HW:PcG´€‰o,iŽKïWvö+ᔚ®ã‘>”¬ûvÍÚáW©ó3∶O|Ê»¾ðë¾â˜Â*±3_•JReϾ„ÍûWEç¯/݇T Ôêí¬êš”ñû:¯ÔÀÆ./8áêfBC¶@‹ ŸB’{÷,Í„˜f%‘ñ»`Æ(Ë·@#ß‘nlf?AÆMßgÎhtlüñ{²Òãq,8²þ´š²»•ÔÕûu9÷=µðã»ü<‘U½»Æ èrFñ‰ ‚sdæxóª2öÐŽŸGâ˜#µ‹"ç¹ý* ñPqn1©œnðX`ÐüÙ>Gp–hþWä1$ªW¾_ÑIØ—;ΚîDÁ0tUĽê{΄yÌ»C°mZ 8^+Ô´ò ï §¾EÔjoúU~^”ëkäÿ¢~øÔ¤Äu× ›P?m‘´¿ý¦4n!…6Vý”Ƚ€¹ÎEñ3–ïÿa£:øÚœ·;÷m0 q`Ä(DZ„\Ó“û.#Ó9àý°æe€üN‚+tIÒ< 2±³…¡Èû–§#KEŽ¿UéôX{ÚÛtIÎd d÷±ðã^'q6—_-*-ªš‚.ö úË–öCª‚â³Æðk»Û Ï$Û:° Ÿa¥Þ§Í¦LÖEÞ·û ¬:·Ùн¯gŠE:;*QW;í£Ê¨Øâ¹áäÚÜ–ØÍäâÑ—›±¥J™wÜ0b#A}î“)ó¢Ê°wg·+ Çú#ùaH‘k{r¶¸2ìœà‹~‰ÕŽšgs¾?ÆY:¹Á畵dÒçÒ¨¥/ÊQʶrTz0ƒH<($nµÔDôVcœìvðÂí« Ù¶œï\Gzù(è+—*Z­×hØ”³ÐéÏp_ŽEËOHºn¼0 Mw€À–·x"ØFê÷ ~Rç˜|Ž8§‹¯ Ϭ$àdN»PæVðÖnf.¼fm•zÂûŒ\ñŠÙ‹T9¬ÎléŒ|ð”€\ë¶òš$ìǧª~Q»«c4eZêôNÕÈŽŠ°½Êeí‘“•yÔh`Ú“†Ã-g¿£\šzºZï­JfG™bt-œž¬ÑÔÇnå÷5Ä0©™EÑ ¬ñjîj‹ºA†Ýa,:›Ìp"¿m×^+.öSŠ¢­®ÀÀÈíU«+£…ѹ½±â–xøP”ÄÔIR?~׳t*³ÀJ÷"^a ïWŸîºKT Ô\È=!q¥EÿE ËkÿtA“S 2CÌŽðÞ±@Ò,l‚]UBt|ù)õ.2Ô,®¾ëÝ_üÁ‹94®µ¦®Wr÷õy©ðý, 7fɦK¸õ—‰½o(ÃCÕA(j–êOéçƒQe€ÁÿIÖ$ÏV_ìr³™±ŸçT@ñîS ­¨“r åÆ bQHcÜBH„ŸNÿqÛìõ¼‡§X ºžë'‰b­±ÑŽÛën:® Ù ` WD/#8v7S«Æ]ß5ÞÌDÞ¢¨ÇÄ8{ož6Õ!›u—Èù@6iqœ@Š3‘3ÓiJÍÏL|i‚ n°q'rÛ ©»ƒqÕú §W­Diâ;Îæì‚Fé.꽑*ÒÖ»¨ïmwŒªÄ0å†Úy$ïæbèØ]6ÕE7Ò^ï5=Œ®e5Pœæ« *üaËü˜éß0/‡€1T¬ÜZ&²ê„àÍ H€Àí\üóŠï9G®¾N,gά>bɃá?È.ïsÌ%&‰©EâÎU¬‚m½H)Käm çžSÌwjðªùyÌjÓ9”¥»ÛA"|ؘŸ8–IåÕS7çñÅ ÚŽdÈyeÙ]ž LÎÓ÷:òÇqÅ‘9 ›DŒHÐ’%ÈšÔ=vq:™QTêÛ¬ûd†Ö¤DõAWAÃ*È6õšVªŠAæ±Ûu¶Ár0"ÆŽ»L³¹kÃÅ:îçÀÏçÆ¯½<ˆ¬'Îö›Øë¥ 2û܉àtÉ dܺ¶9¤I5ÞÈlÞ•™†k÷;0 rc ÌÈ:#qcg²Çmû[ê ®$YÐ5ŸQ^jÊj’Ýjå4µm™g€Œ.fM*or7÷›Ø¸’Nóãa›òû=šÜˆ2á^¢0Vçï3#âåøÂ_žÇÁË>è%iAÌ— þ —£?‡5\õŠ€6k3K2w/H%õ0üy@s-'P0›a?•J> ü5.Žíeöê$»ß½7üJàâÍ6ô¡Fj‚™tÞÈÖ‰ìÕIXKDùEó’~=a6t¼ÜùøÚ‚$¦"Œó†û»"ÉÂÙ”`ÃmuÞËPt–Ð3ì8¤`)–èp#eû¶qì¹Ë]Rë§ >bW—íÿùL§ƒÎOÜqÓ•í–ˆí½EAùº”êNNe±@®†gS^y™™ ‹qÀ1áÃÄ_9œÈ­=ûšNіíö@ëFpÛÚ®Ì]>É ÃqM3 ŨÙÍW‡b7ÿ‹ŽZö¥yzÚÍÿBê°¼täû¬hÞ]µ$¼þÀ¤âqiW$ÛÞY ¶a E#Ra÷­†#FÛ,&ú‚v5nIxsב§³]Å~v@ú@ dÊ©RÙ±òcÀŽ9’®W]ÌYú¥ÓD¼.Òª/ëÕ,‰w²cEfw“#ëY)CRQ›`« úJhß¡ñ-‰AÄ5;•:°Ü"ßù~Ù+T)M'«2ãe@>×ÜЙF"¥q8ÂXîjœð×m\ûÓ¥ÛÄŸÔ÷¸ìîO˜¸©e ‘ºš¯‰UóFTy¨ýÈñŧ×Ün—þ](«m4™!JÛòöžµ:Z#¿øçÂ3'!ÞÃL¿IAßT ÔN——çëÑk½ü¢ ±’ß²8‡ë”^0Ü÷÷oɲ슳9a(¿¼½\¥£j Ö} 2Ë5’–ÅY´G„uÆ+±b4:Ò^4jð‰x¸+wzLi_µ¨ýÜ õæÓsûpý˜™HU(¶‹è3Ö_ê¬s¤ˆþDqÈf4$s÷»@n“É ÔI‚&- ¥µâÌi½–Ùc*G >©XÀ{H ûsÂv™9ÂRÜ®jˆæ6± üÑ/:äð±$Pßg¼ŸUjüç³§ìöCFaV¥ ˾££•`ûµ‡ÍÀYÌöPòXÖ¤†‘[ç(X[Ê}”½s˜4Ù;“…ßNºÓ.?½±i³e_qeÐ)ƒôGN¡>¥¿u>᱋}u‰Ê/:4Áo"°·~Q¤ ›x§4)Yœ*•‰ÔtMpdÔ6:8©XçÒ¦çb OżŠÂl`6!)¿¼Á§¤yüb@AÒT¸MOɉdKXܽnt*¿¯6^Úå“n+õñÔŸ9´Iðw> K@ÀŽƒ!pˆ³«bׇŽð h]ÝÌ#QÊé˜`2=Kty‹º‘Ì—¼_7ֹצW…¦ñMD6ýÖ±Õ*"Ëãþ=¤b9\É 0¶Ä«Å±rO¸,³È\ðð ü Lf©ù–=ø°H,‚]2õ£*k´ú‰îfOÿ¾ì*$ t)¼TSÉšJÖ~äÓðÐQyí[Úw|L A°&§í'ê3‚l|Lÿ[ùýöôêFCqô›Ø«oD”\…ü•ú»;ºn7Ë¢ÏüåD,M™-£ËŠ9‡ËS™M”7|tƤ@_å\yÓE‚©eÙ_ö0çÄ„É(vgbžÍøV׬9“O! /zˆ Ih !ù8×ÐWý†ï̵Ý=Ôõ B]QAo·0ÃÈüÿ#<ëH´‹ÒŠ”œ#à:@Z3´1Ñ}Z¡7åÇýjð+ö—»QEsÕÂSétJL1—†ÚéP‹ 'GÚ+× !P[Æ¡Ä ø’òÌ’…Ñnœ º’§¿Ü¸ýØúG"ÕÒX§íò“ˆ×BÂjbÏ×’üÀ»¥ü0òi°Oý›¥AI¿o{xú÷í‡v£¶1ۂʱ\$â¨Á—üù¸ŽnåˆßB ¯7`ª\Ý,¬‚B¡Km 4˜j³IEâãn:/à§ž VÛ E‘&më•ïÔHR_I»­ÐEä4Gî 3B»XÀ§BC+´©nJ‹Y›ÔxIÓþ€ËŠð†cd}«±æÆRÞ;‰ÓH\QùÞåÞ¤½#\$ÊboDhœ Ú§x¡Âéªõb%T<ÅÅ~ÎôïD¦Ø[~P­ã ”ÿ*³ÓYš~?µG6ÓívÀ|óŒØqåÚL}mAìÎÞ%‡¥ô¾ÁFZÜð2ØicºjmÍQåÎavÛÀåT¼u±ðœ8×@ R…ÁJ¯—ô« H‹÷}Ÿ ¢Î±ïz&ÿðÚˆ-7 ¬‡2¾ê@‹Ÿjƒ?0HÉúݺ¦êpOÍ3j†T-dÊ!_%ªŒrlÃ2ø—f‡¢úw iy¨½6VØB½í©¸ðie×ÏY®mýÒ Çu«Ù·2ôï§ãë®io¯6 [ÚqÏ|@Š”LáBO,¼VC€/ú3SÏÓ݈¯yïcã×¶Ó–¿„ põ<÷aèËí˜;jYHļìUK›ãn]ÖΣßn?P³™—ï†j¼®À.)ÊE°¢ËÓ'Èb<²x,Ó…S 0O–¯nÇÚ<ɲ¬ñ|:™UéÎ-{ÉaT›ŒÉýQº¸É³ï²m±]þeÁ`l-˜ä«ã)ÍÁ‡«˜Š§Ž(ñ8•NÙ }`6™•¾ ׈àt5ýª éQ‹éL“óñ™²&VžŠÆ„M;‹«¤ø"¼YqÜõFEª/ -ŸÈ]÷!Îæªµ©¯‘= ™*éä¥ÑãŠ: ÒÔ„¥¹#Ñõ)™uù=KVQ] ÿ6tˆ¥N!ŠØjÛƒ™ÞO`çúKÞ2×`gKØ!ü†äiö‹ÜÙŽ^à:ý¦'¶ÓYÑÕ \(vÊÚJ¾Ö/þþ§¿.êƒÈ¸õáŒwÞxÖ$ü]mî\3ÂÂ-|Ÿ?¤ ütt 9õÁ׌v,SGúfe•K§ó›7rGXŸ¾nƒMì©¥ü" ë²>Á;1É”wÃÚþÛP­ã2Û°oFVúûµW´XÆÛWî2ûéãפš±‚ä9mŽŠ Æý¨ëašÉÒhnGïðæ ˆ¼ä®µpŒûwðäÃr$]÷߸7¿16ì3äÕLnfÄ  É_¯Ÿz¿ž& ?z„6R(L'Ï·ZÀˆ;ûts¤„±äj·+Bر¡$!!8´Îï}Ta¬Ú©ôÕ§¼Û á¿è9ËFÝŠ;霥÷¡%~ùíòº=ð¼üí{Ñ5³ð>û·´Ûú Y°TI{\Ö¹ÖÊŽíA§C¥¾ò ”îÊMѬø¶0ÉŽ\ú›üeNR1¯æN/ió*JãÙM>ï^þø°þˆÔ{©˜Gˆ™¡²óAø*hþ>gžâD/ìH2»ëÈ €‚«ËQ'û¬°9ÄLøÂ&žšáh¸¸¢º=¾eŒ©õy#/Ë ¢Cw…¾Ó,Û%Q‰Xê“ͺáO‹b ¼¡aj¶žç‰[u3¤èÇ`§ ‰†€uÊÐÇÖT.ý)/Îe”)ˆ¦’²Ñ˜ÞH£xÉîäýªÐY?Ø×–Mζ¹g¯[p`\d,þÅ}eZ¿RM4G0F¹Ú´`¢Í€Þœa[02’)Ë£Ú†x¥ß¶TÈÌ'Ê´‚¼õÔì¹ÜAÁõ\eH/Ss-O $­W«å]*=ö’ÏQ–»×pZeO}“¿q~®7ƒCÇ^s&‰˜tü*®»Díÿó;Y%uzÍÏD\gæy)KI†BŸ,_ü¸g—>&6†LybŒüÂ+Ê=d®´%gZ.dèCªaÊꋼTü9 ¸ÎCàggtuI»ü¸Æàâ8/¹È—|Ô² ÓК#gpýB{ëpp7P±(0ÚZ¡­Õiš.Þ“ ˆžNcØ&W«C›¢+J)–¸lRvÜÔ9ÇÒqEÊî«ø¯D˸Þõ»Ì›Ý"Ów%ß³ëb.g¦PƒÛá.´¡È]â¬sRÔæª×÷Ü{;íC¹iZ‘¢!¿:G‚”JjÊ5n0êEÎSõ‚Ô8Ÿ?lišíþޤ ]lÎFé­LëÓ$ÊüI²¦ü‡Û¸¶–æû@Á£Óº¦þõñ´³²ëR«µ¯Í~ ‘ÇW”Î~x5ìç;DŒ0*žúy§ãèÕzàëB=¨±Ïtí6±€ ’UõK¨ëÖ†gî'ÙSÌ wŸeß3R¬"§Ã âôíÂ\W‹>*Š •5È;yñ;×ô=’µ²6r_eWêMcÞ¸cû˜Z4S”–¬ÓjŒ6û÷@»|‘Òè+(†¹KˆÆÛÆ4?½í¼œaoÏÀölô^ïß«geKéÁú‘œ=¨­Ý ¬”‹>Oèe`]µK—T9 šh;G>Iš–Âëfd¿2¯BSÔ£º*Q'ÞÂ`Mp¨²}-5+$‘}½4M¡=V{ZØ^NúŸßTó4¦|™nŒx¶! C9fñVÞJý ¼ì¯·A¬?UÉâ”+¢òæî—]€ñNÊYäàÀ+Ø[ÿLÙ­A¸|lÔŠ›š.¤ÍÍ?y ½C®gzóšŽú÷Sæ`èÔœ`;v5ßlM¬Y åå#¢ß(É22X"dxÓ)EÕ/ëÍ÷s([õBI¥z$;ÿbïO³ Md„"žÕ†p.jÂúy£UÔÞiãqPÞv—µÒ^>½¡tž¶siB¡âœ?®˜N¾á8Ê”ÏI¸ÔùdoŠÛ+z2H9!çP`>ñE¯“ýë ’¢­˜ÊDëØ¸bÛ÷® ·XR8ŽíVÄ´0yÊú­8; MÊÙ¡ºx\ë¨ììA¨š¾{çÈœǘ¶µyŸÁÚßRAÍKO57%§d‰/‡oÇo¤²û¬éÑmsÑ&½WR¹n?¿‚à!¤òŸ½9ç¢;EàºÇ~X÷LMÖ’Åà*r¤üt}+»O4®V{¤kà=¬ò™L K.Žö(È¿Œ\ßÅá°sKÑ&à¥VânLg|cŸº-®?öhµk-.HÊßb ÍÜQ™y}_tút€>Î…WXâ 9ÌEsÖÃJ1Rzo&^î5à¾ÆDãQljC«á±dÀVüãódf`bŸŸ^P²K‰Œð8Žà*ž?žFL|Õ.׃yŸÇ)€Q§³úëÌ -N2±8šÐî½°´g6J& d˜SŸA¥[¶´h¹F£ÌˆUî®rƒž®RAùé5ó¿®¹gôΠ»áåQr¦ewQŸ|8Ü%::¥_‡ý`ýEÎ/ Ë8ìn?O²NœË2Žó1pBÞ@ò*œ±í˜Oˆ! ]¬Pà™AI‡ Žd.ØesÅ­[Íøö]½Œ„EbÃ> -Á¢þŠ^&&iÏçµlÖE²÷‹8ü¨GÄ•æéxôïãÓµ)‘4€(™ ¤üžoL6ìLõß †wîBRi¹ÛÑ‘ãžPÂyh/õ3ôeë›»q¿ø<êN©EÜEjLbG*×›æÞÈ ­Ò;²Ð»fƒ¡IÍ‘+~e¡[Š ¾«¤ÒÛ ^6ŽdÐ6}T)ËɸÑóÅÙ¯ë ¯ |g.þ¸ÿdIÿ¦%÷N÷¨Á!Å¿ƺ¦³_Žÿ°ÞðÚ-ÓñJ³B™ƒñmß&b•ˆ!f±Ú¯Ÿÿ³*àS´×‹Q¦}¯Í’·4ÅÚVÿºŠáæJ ½d/9{ìŒwœëŽÏæfÚ~èHß”ÝU½^í+¡®eÚÀiT-f/àÐ!Íx+^+ðÈåBã%N…}5&rÚÏc>­µ KBPŽ|[_µ64ýŒïsºsß=÷lãû: ÙlHJZ/Ó2‘ˆ¥yȧ© 8*‰ ÙŒ/YrxX\íÛ*eÅP€;8Óéé‰mø5¢Ãÿz¯áBüÔ€]^Úú>J;Z”ýÍqR[VË…DB–ˆþóùo>T¯Ç°‘^”+!œ·t¹o¿ûXxqÊÊÎI«6Ëfp¹$Â’äï°FŸžÈõÄzmq#ý[É5²tþq­ç¾ç×à×7,µ–Q_ø&£ô2À‚X°Xm—þP“¼–¶C€Å/¶¿äè-¹ b·¤ÀÆ“ &Qe3\\Çd{W§Ú§ Ä—„ðí:Qí FáF’úâM…ó5²%§%w`PâýY¹ßqNŽIx$=ÂH}0Öÿi—m«‹t«¤¦WÔ. )^Ø…À\š“0Úc³§æ:ÕÒÆ‡•:Š~^{11H#d.vÜãÎU™ÃzMÀ,%`Z±ÓÄŒ´ó¶‚_Ë’d (²Jäˆïåª Ðu`xËGÐ ø±{kH©¦n]6VJLP}éXx5ׄkr ]AwðGæÏÞV:â&]™˜â'ÚhÓhÚQ|^T‚|óôj˜ 9ŽköPêFÈÆ¯ßˆÝ¥PIe«ÁÐÌMˆ$^ÐK{j2GCxŸU°žeRÍ;\º„—‡ïŸënø²'ì23&PþxÉÁfÈd¼O$Ins=w ¶šâ¿¿“i6°ÆñI ¦|±/“.;Q9Ü#¼D®A¤ çvFaZ êÎÙ¼|kBüs ŽÀµu1º‰CAÙ‹¼u zoµ¤ñ ïräçÂØ`Ã(¤ð.ÿ®¢ó`™/VÈýœ<ÄäÔm¡ªD8š}u ~_!¯þF;|§ú ˆÀÎ>_3ìà0Š ¨†|/e2¤jÁ´jº:䈎›½¹^&p‰{Næx‹výÏ`Z²þ³X ½#R>šçTK„ r'’!º\FÍ‹h± ³?S\sÈâ¸gvÙþå"Î#û¡PÂ÷¥˜)Bwñ#óØÚ3ć‹á~©n¾–J—nòCs>R‹ùÀ±„‚–¡h,Û-û"þˆà‹Ç R‡wŽºõã›{>ñ -JL1=ôO×1>ÆÆ-ÄéÓ Ã;i]€¯çÍ—ÌØR6¨Õ(cæìðÏ»)r³´^µz§Žà9™¨£ˆäs!•Ž9|Q½'=K„þÖOÁ!`?¦#9–£Ðϧ(ðŠÏIíãL¶û­¡àÏ~ýÞ?ÛGÑý?m#• ùàÎtbNCÇÀѬ@±ûoBC5°ÐÄ5($æ+Îñbt+ë~7+_­€Ed\kÒpÚtë7ÀEÕ /Œ0ªÄ7íJ«î4®Ó§Hm€Ïé·} Ô]_PVôá¶s JjDä¨Ìª¦‘Ê1TFqirŒïîèáG—“¿Ï š *ýóXTžºUʨ)Õ1ΩŒ *Eé'}b‡¥“å‚.{ÌF„¥ÞØ5»»šÿ—"õÐ;HºÆ5¼¡F1#[Üñ7µRÐþ”¥±rï“ÉÓ2ø¦AkÍžo BˆÅuAô*xŠ4¼µOy8«teç²´Qçz‡=á‘õ­ŸÇ§t ßý…+ (˜¾ŸVŒÌí#Í­àËïRøƒ&è•{ òy1³Õ® ~àmêö0QfÁ+Y„OÁˆ—âmô‰XZ4š"Ű?äzDànÝ5gÅèÎþ\íÅ|æ®# &,88Ì@Ñx¡ÉO?íYétW“MG†ÄíÈØ•´c‚Õ ùt‡Â6Äi¹§~Æ-Rî£dfÛ?9@EY[Çñ–F¼ÉÏ2A¦ÝIÆIžZ0•ôÍ3á®ve;Ö¬â&`<¸‘‡ÞSú=töE—üfÚæ8è0ƒMysYRìÂèK?NE—A_ëž„õcÂB¸!FŠÞɱ93_s‘Ð.lI³Pÿè Nʳ „áôßFÿvT!ÇÅŽR_uaÊx“ü†ŠQPÏŠG{KáPh¥jžÌ”yø:tCWUq'kÛR¢DÀ¦ø£·á֬朌ªÝDNÙš›ÞÝ\œ´'«àƒ+-¦å0ž­µ„„Uy¿%ûñÆïeÁMøpCg¡nÔÎθöFºÆ/DÇs‘KŠä÷_/X™ßª@¬¦ë[ã'|Ùó÷¬’·êb db;(#ÌáápSÙ~c2+Ÿ»“§Ö½±Þloð«Ýž[͋Ԧش›­±½°fH–+›ŠO*7J¬*;‡0#ü˜¹â¨Oì@Ò‚øp~ãš2 êÜzÐCVÖhÃÖÎLª´þIçt£*­·ÃÓ«0lBHÓxî[´š'U¬vZ]ØF¥12ˆ¥a2"iÁj\qz¿Ö²¾#R6!´ºOÑÖ)üï7’ y(y+¯ùŠ:æ¨ã@¥ãí;óñ¯øNHÂø+‹ŠK «.¨ 죆è©•JW|íÝGÊŸuí(QÐ[`É/èý?‹ûAîñûɨºÐÇ?2Çó{²å¯Éû~ $ÿ>[OVEjÖ²>‚h%øºÁžñ«@zñ³J ÍÛVœf[й Py¢B"KÜÆ­'þ{Úvö’ý»¬Ø¦ze­m[ßfÞÒ—–Xûc”²²kÛež>-â»7Ðþ.Æ·¾îˆ¼Î‚ï-s–ZA¾n”F á6ôåçÞËÐüEÝ–æ:ž€Eõø–§÷]Ÿ¶]j·÷ű•ß]ÓÅ57 R;Q˜ÅôØ=$‘|Mœ[CÒ#Üë/5X‹XóÑ˵0ó¨õ¡èLòÇzLPàÞ?â¶a”c† Õ'l\ŠSæQ»)–¤›úßýÏÈ|ýkí*ÉXÄ ÕjÊD"Û~Ì ÉgTQ³ðPdñ>/¢y]YüšÚs—‚ð±‘<¡˜z›Bü]4tXôôÁ#u_\ïú¼öv¢Çom ò¹ÕâÌ‘B0{¬KÕøþ‘1X rր旊ùÇnúYÉŒixy ´ºA袖Ês}e„×Ô“÷vË¡ ÍÌ”ø¸»f)ø›-%ÅŸIé7;„H‹K­OYR…ŠÄ0õÀ˜.ctG• šdÎŽ© )Ê !#ò+ÍÑR!VÉk.Gi©ŸM³à¥Ü­ɰ}ã—ÍÅÙ§„¯‚jáEÕa팱»¢ûç˜àKÖ<¾ ”й[MÓ@âù"Þz}‘³½ªQ& ÎRÀ~˜,Vkñ¯?n€Z)nòã§XµÛ:Dúv mƒÜúžT1´b³1Å¡FøEŸßÑà ô0’¦múLúØÂõDZ !W$V忥ûåÙ‹¾”åIŠ# ™f–ç¼ ¤&è pšâæÕ/œƒ{sc§kÇa•€3Áå4·zÛ‹·;šŸõ1:eÃî}]Füi^DcõÕmpÒÊ+¥åfpšç”Š è½c0]H(¿È¯rTï0Ë5„„5…63!ã€?‡Îjê©ò8¡$p¯î>ñ=+ Ÿõo0Gà: ô9xkh‚kHËÀù–kï¬y¶½é±KŒñ"†ïƒæïéýžJ‰û‚¦åyš¶Ô`ž73ýžžë½°ZÓxžyÊ×Í ¤I»„N,öLòF81¡ ½® žqt”¸08›øÄÞÀñƒ¾ú,jXëÕp}´ «ƒí醤Øé+UóªÄkJs­R÷n ®÷:>‰š„+¬7-ì#üöU¯À,„é¢]×—ÿ+„«yªÒs¼¼CÐfük÷ü€Æ‘ ÷§ôõß®x•Xš/BÞÒVpëà0j$Ó„P›wž¶{3ËØÈb_ÂA¿ ÿè³wâoÚò ¨c¥t8Õ\?“/»‹£‚„C°€_'|èåYßk²$˜ÙÚòàYH®»ICÎ1´¢t­ì¿eSìRõñH¡ÊD-mŸâÆ«2g¸'IÙèU—iÌõy•2â è@ÓÓÐŃÜ· éf“›p𔄧JŠžXúݵcôœ>Jíz²Y³jºèˆ¼$’¦„B:~½šŸNçÝY°Ä~¡œß¤¾š™0•ÀÉTb³96f[uJ<3_W‡@œ‡]fì¡?œx„š|„ÃöêÝN´d*̬¬õÛ廊Eg³Ëe22Ë@t­«·¥™?Ùa]àoáf%(`ˆã„Þ!8UGx†u±6$Pwóy¤à¦tçó‚nµ¨æÆšÙ RWBeu¢Ûò;œ<èg¦r-Bï¢m<¡Uþ ¹í<³¸®îI΀rN5}VIÄOg Cßa-hôò^I­ŒH:䕱¶´s;e!´Æ‘‚KÜR½'YĪ~¼Ÿ€¨9¬œ®ÔiyÿÄ÷6q\ýpïphãl·ìÉ RŠËð@xDÞú~ÊßcÆå`ô %Wõ‚V£Ü;fƒÎ‹¦v|¡dc!´FÌÆ°´¨ õcY7¸÷Õ€Ù×;8E•x;^VE0‚bß-XYÃ+ÜÒo¿7j\>¹„D~\#+ ~€|Gœ?Ë|þd“Ç{¦]Ç¢—:¨ýöéq­@a pÖ®m×d·sM¶í&Û¶msònš\“m»&7Ù¶Îwß¿óœuï¿5fx£rÝbpÆÜÁ9°Ûñ'ì Þ÷Šs(]½9î´?D¨îœ‘t†´ôQOµYå8Û”á2Õ²:eUâ¾ÃaTïˆ÷ Øs®.Á½êòE²Ï IºYí¹#ŽÝukGGÔŽÅq–ù܆rD/~©§±ÅÆÒÀé kgV]Âá»Öó÷ø! 2’ˆfdSsåMSÙî+™»šéÚÈÚK¦=ºzöS—Å<MTjTy–d³SûðgŸ¹Í8äõûßýq1„­ßÝøè3V("8^ .C>¿è‘ï:LéèíQ`ðwü‹©qmŒ«oodù’.Îq‚þÉï¤IÅŒø²çä€þþygœuSmØÞŽã#”ÉŠ{DÀ-)ìï;u‚’”™©2Ëõ¾u©`ÌäX§¶{=ZE^S—0ή‹!9‡µô3úüÝU-#JBå[¡j´­²q>?WC IôRqCÙ’I¶ÑÂJ¸n-ÞOŽÐ"½Jo²jòMï¤ÀuÞ(‚âÞQüfã!íI» jÌ|„¬]§ˆØ–.9¿ª£õv4F/õ…RÕ2Ü/:¢üª…ÞÑÃÑ9Åñqÿ‡ÑîwÁˆZqÛˆVxëùuÍ~{’ëÕñ¦‚ÜHäa¼ŸÑ“K+W>ÂÈm¼Väò² ç"écÏeR‰Ö°$b@žàà$S#%ó‡Ó-jJ§â8V>wФ¿”~ÂU”Íp‹/yĉ°)'„½šW…¯+ˆ¾…šX®å² Ftijàƒ¾ã½AçáðÍ{€X¿‹r=láX¡fþR¿d‘#Ýgá_Z£YÓ›6oPÞî9IôVþ%4Õ+/Új…0sxÀßÄWß!ñØlÍÕMûPv$åzÝZ¶,MIÛÑuò%ÿBpdýÝ…MœjÅZ(ÄÉš÷ ÿ¹ßܰs•úå´ò3îÙ¼„áY7SŸvëÁYÂÛó €f¹íñÕ¸hU<™FðGwrÍ™ÅÝwm>ŸßCÑ!£Ä~PlþPaã¨cN~‘•Þp8¹gv ðÌíÏêf—ˆQDï@V°2\wq=#£E‡#f0{8±<¡#¹ \óÔGµ Š'ÁÒ7C …J¯Ã®#ñåá!)"4Í„_°ŠÑªÙ^Fœ¶ÊRáqZþ~*–K\©ï$(¸ }Q7ÿÎFÚþ>LýöV6 ßî¿ ã~¶¾…ÐŒý‡(.Y— ïº~h {Ì,dl´9vÞ(BAžò:AfãR³d¡›ê×yÝõ˜=ù;©óïaz9ÞÉ™õ ¢fUG`èd•“ÚÂugnÞÃQ»+¼×ݽä„ö¤ÎH;á%áI%Rº¸ûÎbe‚"3_œ7l~ËRH®‚§!3Œ‰ßíöO`Éì—8  u¼#:¯n$³S†Q5 Ç~¹=â±»é v£¯÷«¦=ý~ 0ö¾²À ¶C‹¦å84ˆ|²fÝk‘+»VŒA¡bó¯ß©Tp³áN"¹~'Ú”jü½ÝŠÁé¼EصŠbö‰Ç¥ªXÐHM» ÇÆ¹,pvWÊ[}¬v ¡¹§LDßßFÊÎyŠAÛê‡Í¶„›Fñ‹ÖM¬ÅYcÛЊã ü­¯s1¢ÎЇë¿Ï0û0™}1”½ _­îêíÆ«¶hk9¸|€¹3?smíM”ëîö$*4së i×CNgîr>[ØÕý"?µ8ŽbË|ÅÚ4Œ­«n‹Vé¼çÞ8oN J_àåî!¤¯;UIp ¨á©0Y—)É8 ºÀÕôÚ¹UÓöËÛˆ’%ˆdtáÉ1̶k>2¿úÁâÎq!ðïŠCÊAœº”³#Ja Å¸Haçê1©UB}M~†–,HŸØ”ù%±îº®jþ=0S¿€à *ŒA;8lÌ6`)fzzíxf¡`cCxSâ#¨Þ!z®ÐÉÒ/§:Gª}v¢“ò÷K‰Òe›}8ÞŒc¡:Ît3TCÒ/C7eAF‡ßW¯(±IÏ*w~ï³ñ`èÜŠñS$Òï@f)wõÔ›úŽ:„ý²•Â=ÖënÉÜ”èeÏieNsä¶„/$ÁT“åû\…ÖtÒÎð7$ÚV$< 8k²áÉ´Õ>ÞA¿p(ZÈ]O¤µ) #,x¾Ñ°× ³i»Ð¾Ä‰åGJEZHð,Jëà–È Ðdq}ÞM(›v*ro”­æ_=íî!UUY|×ǪSˆó)Ä<çÊ~¡âÝ3ÛÐôÓ& „ÌA8œÝÈŒ£rOéÂ|($ùÓtmlžRëu¸ñ³ÛL—>Vs ϸÊÜU“Ô¡`ðƒF‹!ð„¥•“ŘÚáaȽÈÓ¿'ˆ÷<V°¤xKîI¹OK±›A´kˆ,F$¸)X›ht>¾0Ò] c‰nÕLNήû¾ºäAòx ¡§{¨8€ob'”wÁ©ÞÒØÍ _Ü0Lx±‡wO²Ž§5L­Þaø=¥èÈ·åÅÀàUüÔÐ úß–d;œUƒ'ÖÞXþ¨‰ Y8ÏþÈ^¥Ì—-ùõ/<ÛXLZà'—6LÆëYÚŒA5Fy-"¤«åwç nç0âaÄ„>›ŽÜ÷áôͬĸQËßòãŠaO7x¯¥M©… ¥›²šbb aJÿLŠÚ¿Öw½Òí:ÏÑò«ÌîQ3=éÙ[ñÉ‹ò5×pà –ÔþÉÏãÚÐJTl¥Òšÿvw£GN–õÁ:¾z¦úÅ_‚íÂa„x+BpøuPT–ŸKžsú Ș…ò´ûű †ŽÄ fÂc¤0luô#½›~rχ:}BÑ‚³üx…²™T›M‰“ïP[I̸o€ÂÊR)Ì"!fÎÓ6Pßíycxß ƒ¦Š®ÓôÏ»tU~™Œ]§˜ðû±a[ÔmƒPÍ»’UœßÞ]áI·ÊEï˜S ÜŽw"‘ñºòöxg,L@‡vOóWÆBa5–K4E;äûmÿ–b÷óH¯ýŽæ¡Ò‰NôðoŸäLè£ gIü³Z°ë$Ý:SZ ªðsöåÛišXF¤+\˜ô÷èÄèÂÇë°#“±Aü°[í|PÞ'ŒEÕ9QÂÜà7ùï2&Á?Y¸,‚ï¢cÞýÓ È"õºuáv±VzÀi}D+¼Y÷ ]EôìÁŸß.í¾d‰ÅØ0(’ØÜ•êq¦†§Ààóå›:W†’-ô 5G’o?¯ Øbßè~#ŒañzªÚ¸b"m¦Œ´V[Å_÷ Ь›„~Aý:9ÔKJ($¦¯™¿Oñ•³Mc¤ªqYSëÖgV6vˆK•ÿ)7. jjJ:Bô‹ãþvnüÜ öY£HçsÜD²ÿMË‘R¦ìrvnþ ¨‹‡xÖÕàŽW»Š‹€Ð:©>(IIõÁ—è×££Ÿ·¨°§°nñ­ßw ÀÖ:q‰ÍªàË2U/¹¾nè®Q+oÉrô²WóW³µ1IüIŒ“å`Ø·f»úxæM×ï:FߥòÛ©63£pPM悘Üœ€’Ó¡5rrUøý±ï–r£‰-½ÂÛ žc,‚wsÕÄâ¦àÞ¾H%ánñ”â~¤Ð† üì‚–8™2Ls¿UWZãPÂÞå}Ž^‘WÂÑ¡R¤ú#ï~ÃÈG‹=Áè‚õ¿ê^¯Mõ7Ö¡½H:n;C ¼#œ…ÌáÈUãBœtkBƒÞ×Úhö¶)só»)€‚¸Kèú­cKîYèZFv~Ùâµ·ôtŠòþøVÊ—Áˆ§æI© -Á/åÙkÛ¬Q™¤®âÓ¤a¬ìÄg•žd»ôÛ‘ýß _Ò7„Ó8ßKæÃ)ŸÁj—gœØöŒ.ªÖî÷ß¾ð3Í‹^ªqë–N|6k‰fbHnM.Ì«^v@—’!˅й£WÏ*ž× JÃbQ.7t’˜ú¦¯Ë”ïчìÝìø *Ê…V*®ïØ;[Aÿö¥íøíšó˜7g*V?Ú|S;3b„½F·I³½ã;ê‘–Vü¼?Üô¶÷^h·¦v¾H¾h7(•›ÕP©ÒºãØÊö$z•ʣÌŒÄë®;Ù¦Z…*n¨pº‰F—@ѰK˜Þ7j>óH¢P*Em›eñòÇ·‚fñá –÷kÂH5Á‹¥O`aœÇÁÅÑùvR\»Ù‰é nl1⩹5^Ó„Lg¨ðš…GÇÆ¥º_ö¿š6^ >=úãÑåzÈ Yg­~Ʈά륗G]Š´Þp‹—’Ò´ÃûwÿÌfç`yµóMÝkŒuí«%ÏЙ$øÚuæ„í¸¬æý3âÛpØH=&þι~.w^¤p"b³`ª™ÁÞ³ SG³hŽ£·ïMeD(ßiÍW¶ÙßÌWŒHsæP‹Œòr#9âÃ#¢Üð”Ó¿ï°i™©‘ç‰e(zøàÜ–cÙÊQ*ÄÔ<8ÙWÚ\° (=¸~RTâÌv$ =*;8Ymóå‰6I]á/\O˜ä!Ä-å pâý“ÝCŒrzdlŸÍä¹Îïè]œ´q³ˆf©ø¾0ÃÉ»˜L²­uí7ûgÞƒhÿ†Y—¢b–e"GòLrÉ .h¢èÓañwÛ…öjL7EÁ‘vT65,‹ÎC[!]U°­á‹Æ„žQV…ÔÂ&"Äe5} SãvØ!«þ¦Ío©‡F4ÑmØB2P®æŸñðúR¼ GM´øÈÈTí¶ˆ{ȇŠn k@Gù}$#eUÉoàlk—Pç4’C7w›Ï©®£«Ëèh ó~ë9‚¥Ü±ýf±@E°DRô^Ø-WºîLoæ"œ\þÒVj>~Ò}ë‚ë¾?·¥5¢±Z_וQ6ÿ`¼U4j¶-üZ‚o¨Äc§ÃIJPõiÓ“òöBž¦¤`f6I^¸eæ02}¸çu}²°.XÊétè³°¿¯Zš2ß1áÝúk¸P°@rå43ܽ¦æò-±ÁžjwÙ‡Ýwͱ§c›Ü —”ä¦=ñSüɬø“ȆÎÉÓO8Žé§„³œïìã¿­Ö ~?[7ø¤Sô"g=Ð<£g÷¬ @ ˵ƖcW¦l±÷ü5ºô£¬qcZ„8aÑÔ Œ÷lšn±^ý!_ÊÏDµæÅÄ;à1 DlÈ$÷1÷=—­žmå´Á™¨×Ëe4zx#{GB6Þ/R™ïSUøÝÆÜÈŒUŸ3?ÖwJØòªÓ¡=ú¶_!J:Á³«¾¯ûÁ;ËIð\ŸN¯"ø7䜬«s”Eι?¸Æµ,ižEFë7ïîã¾$s">CÔ1üK ê!Ày3¸ð”›Ò2V¦b”Ì*Nö´Nó-€–.çžAÆ>ß Ï°hváQÍÝŽvÇM¾`PSºeÎe'Ó° ÓÝ~GÀ$m{ðÖì•–wsH yóÆŠmÝüÜ8oºá»Ü6VÄt@³.zš˜AÍqÇ25²–µY–ÒpKÚQ–¯Q5 vvXëþ2Œm¡‡Œãxîº/«¶HCæ~æ<Á(güÈZ2<Þ†%ÚåœÌÙ§5ÆÆ£Aa!J<èTÂøþTÍFúºüÁ/‚ßÇ ß_8ßN²ÃÒ-;Ë6g®s¿¸¡zqØsÚ"ÈERƒý†¥abÓPÖ'I* u‡%EOX¼ÖÖ HŸZÛÝÊùb/Ò»²èå?ì·HÅ¥úÜZEò Y,è^1ê%ó@¦ž[7#L³ù!:A¥ˆ¡céÀxJèbŠ!›iw”ÃJs#F3öäѽuyÃäwññД!ø.WÉ\õ·­±ˆç8y˼£0w°ûJ2¤ä;1ù®˜Ü§/¬’CÕ¾ž;_¿×F–·lìI€Î6pŒ?]¸ÌC~ÏfÓ’çý€Ù È;ÿ™o˜T„àoØ_Å’jðãT~QmK‘)žÕþÊ÷ßü…¸èS|ÒØ85×f‰!ú8  d¼ ñCªSùÝÄx™¸›¤Qüè|* ›…‡Å\HÒC ®¸¤)¹Y}@Òã9Åžïuš¨…mD5å¢ ¶óôÍr~ãð¶<÷¼UHóq8t¤€ƒš¡òe{p^ÿ•ºÒa¶$NœUÍTò9zbrðŠ­¤rv1^ÍÚÃS§êJGåòj‘/mIw£·•žòdÈ9ììzÏ?}á¥RYäÒª;yX£§Ä>\D†LÎHj¤sP>_ñ{FÅ%ûk3úL'I‘UbÂÊnˆ¿bÿ”c’4!z“4û€JÏ4Bôê=PTh9\]/‚!änÈ1ˆ+ØxHu½÷Ì,}¾~Ø.µ+{Dð“T(¡Ì¥O[Òlš¹µêi!lÅÇDË/s!o.]¼ Po¬û ‘’q V%w-üü˜Á²f_–å'ïuÑÿöžæš¿§0,Ò]º0w˜•dvÏsûWnñ+î÷äcŸvöøÄ^ŸÚ×›˜8JT#Þ.m^!Ú JüÖeã·o†®C®j]ØS8DW³ '·øóÕ¥úŒA@; Â}Œ•#“ æ6érädÉëêÑ:ÇiÆŠ4ó]«]c2™SëíŒDªöxu·(A‡“áQ|œ ®ýoüG´±OLž&‘wª¹~•8S=‚¦ÇézÒû£° GÁ…©\¸K¬ïy¤¡¦Ù@ O“Ölp}öW2„Ì1޹¨Fó´M§ä‚Zðo G´È‚…d‘{E†Ìwóés\åÜ[^ŽðZ3@´Â=¦£ÃE.ó¤ÌÙ Õèô<)û“>£2Õu—­Æ£ÞŸy»'éVsKÐp – êFLGZÖO|­ÔIŸN@ýXâŸo“ű"G¿.D\ SxÀBI‡8V|(oå‘¶–©a,%•Ðsˆ'­âÜw@ñˆ…Ôú—ôð;30ò€è­ã¦R·¸=y@Žvé'º¯Ýûã|šVOâ³t$"…c˜ë 3¹Ž­Y#J^t¥+¸ÙòïÐÓ õlÒ†2/BúéXU'{˜bsòó±<€¡}Gr’¹këZe§ŠÌpcò€ÝT€H?j|œ‡ŽÄ®¯eôL¹ã„^ágd7uXè8çÖZÌн4+D×VG«<ü ѽ¢f¡wu,Öµ[qíÙn:üwn²ª6ÅonÒ/Nzj5z@ðÐ ²À*0ΞWf®Æt¥èºí"¯*k#Vœ–é3ÙøÇmìÔñQPnZû¼æú%$T…ÐA Óà]S_±­!¶,5@ °öõ‹½JEZ@S²ã8 ™%Wžà¤Þ’oé‹7b±3JµdpZ®ë' ãY#z^6üáŠ;»SÜÜ7W#§:)è¹ßƒµ±¤<*ÔìÁÍ#OÀ‘ ¤­Ì8»&µ³ø€úNëÔqøÎ\‹òûZ¸S$ –Í×,ÁÓ„»2¼så:ɼ¸Å¨$î­d<õòHþÂ3v°0t]I”ïx…Ó6âÝ*ó›ZO‡ˆGYŽ{-t3DŒ<æxl°ÀTâÙ&Yh·ö¥žv3\Q_ž»Zjžðxú·ùðP@-ZD"[‡#½rºX:ú¶šO/§Tá”ÌÄ‚•øˆ$aêWº˜šî€Ššb>,4y1Õ–=4w¸’¦xHd¼ìÏ·Znþh¢¬<íi©™ÈeaÄd$‚M³ÀÕÁ®£÷_¶*'­kÒÎ¥ríÒóV¬cäsû¥Äæ,0dlµ±ž¯ r;ÿOI·çâ€Ë í“ãÐñÛƒz.— _hö^’ôS¨ddñÞAjîDi e(ÊîZ®+J¼Ÿ&ËQžµï«!g/2ƒÞÐî©6Êü¢šÏ«•¢ÌOŒûh=…Mb”ÔÈQûsX Éi¤§þGÄ¿EÍØ §™õóïu£qÔU!fP¼Ã)Ôßåö¥9@»fi³h꛼Ÿ¨Þœ§njõý„ëMÄ×;¬!4³ó¢d§ao[ëž©Zä*Dè“¶kj‘Òž#)F“•‰RRV* ïô‰éU U"Újâ>¿H þ[ЦßÀ}Eráæ5«Õ±Pd| [a<™ÁÇõ•«Á½ˆŽ€ö>{=ËÓO¯É„`$‹#ÎÄÞϸ«ü˜ ç–¨íÑ2ó, úˉ¹[¬Í°³¢Ágþú:nDßAxÆ õfÒ.ZÔCÍQß“KhºuÏ'±ð/¸Ø-&wqúˆôæž5 Óm&A*ÌåoTGG›"˜„J.’ Ìß¾nÁ1•W§¢¸…ˆ 9 1Nl®¡Ìyàïq~íÏ31ÙcsT¬T¼×í~ßsðgn…}ñHY7— ÞÞÜæögý†ô?à¿0³37qqs´7q±EúzŸendstream endobj 1187 0 obj << /Type /Font /Subtype /Type1 /Encoding 4726 0 R /FirstChar 2 /LastChar 122 /Widths 4729 0 R /BaseFont /HQAJBG+URWPalladioL-Roma /FontDescriptor 1185 0 R >> endobj 1185 0 obj << /Ascent 715 /CapHeight 680 /Descent -282 /FontName /HQAJBG+URWPalladioL-Roma /ItalicAngle 0 /StemV 84 /XHeight 469 /FontBBox [-166 -283 1021 943] /Flags 4 /CharSet (/fi/fl/quotedbl/numbersign/dollar/percent/quoteright/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z) /FontFile 1186 0 R >> endobj 4729 0 obj [605 608 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 371 500 500 840 0 278 333 333 0 0 250 333 250 606 500 500 500 500 500 500 500 500 500 500 250 250 0 0 0 0 747 778 611 709 774 611 556 763 832 337 333 726 611 946 831 786 604 0 668 525 613 778 722 1000 667 667 0 0 0 0 0 500 278 500 553 444 611 479 333 556 582 291 234 556 291 883 582 546 601 560 395 424 326 603 565 834 516 556 500 ] endobj 1179 0 obj << /Type /Font /Subtype /Type1 /Encoding 4726 0 R /BaseFont /Courier-Bold >> endobj 1177 0 obj << /Type /Font /Subtype /Type1 /Encoding 4726 0 R /BaseFont /Helvetica-Bold >> endobj 1180 0 obj << /Type /Pages /Count 6 /Parent 4730 0 R /Kids [1170 0 R 1182 0 R 1189 0 R 1298 0 R 1302 0 R 1326 0 R] >> endobj 1394 0 obj << /Type /Pages /Count 6 /Parent 4730 0 R /Kids [1346 0 R 1396 0 R 1442 0 R 1454 0 R 1458 0 R 1526 0 R] >> endobj 1630 0 obj << /Type /Pages /Count 6 /Parent 4730 0 R /Kids [1581 0 R 1632 0 R 1682 0 R 1736 0 R 1783 0 R 1838 0 R] >> endobj 1969 0 obj << /Type /Pages /Count 6 /Parent 4730 0 R /Kids [1903 0 R 1971 0 R 2041 0 R 2105 0 R 2167 0 R 2226 0 R] >> endobj 2344 0 obj << /Type /Pages /Count 6 /Parent 4730 0 R /Kids [2287 0 R 2346 0 R 2413 0 R 2485 0 R 2535 0 R 2591 0 R] >> endobj 2721 0 obj << /Type /Pages /Count 6 /Parent 4730 0 R /Kids [2648 0 R 2723 0 R 2771 0 R 2834 0 R 2900 0 R 2922 0 R] >> endobj 2931 0 obj << /Type /Pages /Count 6 /Parent 4731 0 R /Kids [2928 0 R 2933 0 R 3000 0 R 3053 0 R 3112 0 R 3174 0 R] >> endobj 3295 0 obj << /Type /Pages /Count 6 /Parent 4731 0 R /Kids [3236 0 R 3297 0 R 3360 0 R 3391 0 R 3407 0 R 3460 0 R] >> endobj 3579 0 obj << /Type /Pages /Count 6 /Parent 4731 0 R /Kids [3521 0 R 3581 0 R 3642 0 R 3698 0 R 3770 0 R 3835 0 R] >> endobj 3956 0 obj << /Type /Pages /Count 6 /Parent 4731 0 R /Kids [3891 0 R 3958 0 R 4008 0 R 4068 0 R 4124 0 R 4188 0 R] >> endobj 4310 0 obj << /Type /Pages /Count 6 /Parent 4731 0 R /Kids [4248 0 R 4312 0 R 4374 0 R 4426 0 R 4477 0 R 4537 0 R] >> endobj 4608 0 obj << /Type /Pages /Count 4 /Parent 4731 0 R /Kids [4585 0 R 4610 0 R 4664 0 R 4723 0 R] >> endobj 4730 0 obj << /Type /Pages /Count 36 /Parent 4732 0 R /Kids [1180 0 R 1394 0 R 1630 0 R 1969 0 R 2344 0 R 2721 0 R] >> endobj 4731 0 obj << /Type /Pages /Count 34 /Parent 4732 0 R /Kids [2931 0 R 3295 0 R 3579 0 R 3956 0 R 4310 0 R 4608 0 R] >> endobj 4732 0 obj << /Type /Pages /Count 70 /Kids [4730 0 R 4731 0 R] >> endobj 4733 0 obj << /Type /Outlines /First 3 0 R /Last 31 0 R /Count 4 >> endobj 1167 0 obj << /Title 1168 0 R /A 1165 0 R /Parent 31 0 R /Prev 1163 0 R >> endobj 1163 0 obj << /Title 1164 0 R /A 1161 0 R /Parent 31 0 R /Prev 1159 0 R /Next 1167 0 R >> endobj 1159 0 obj << /Title 1160 0 R /A 1157 0 R /Parent 31 0 R /Prev 1155 0 R /Next 1163 0 R >> endobj 1155 0 obj << /Title 1156 0 R /A 1153 0 R /Parent 31 0 R /Prev 1151 0 R /Next 1159 0 R >> endobj 1151 0 obj << /Title 1152 0 R /A 1149 0 R /Parent 31 0 R /Prev 1147 0 R /Next 1155 0 R >> endobj 1147 0 obj << /Title 1148 0 R /A 1145 0 R /Parent 31 0 R /Prev 1143 0 R /Next 1151 0 R >> endobj 1143 0 obj << /Title 1144 0 R /A 1141 0 R /Parent 31 0 R /Prev 1139 0 R /Next 1147 0 R >> endobj 1139 0 obj << /Title 1140 0 R /A 1137 0 R /Parent 31 0 R /Prev 1135 0 R /Next 1143 0 R >> endobj 1135 0 obj << /Title 1136 0 R /A 1133 0 R /Parent 31 0 R /Prev 1131 0 R /Next 1139 0 R >> endobj 1131 0 obj << /Title 1132 0 R /A 1129 0 R /Parent 31 0 R /Prev 1127 0 R /Next 1135 0 R >> endobj 1127 0 obj << /Title 1128 0 R /A 1125 0 R /Parent 31 0 R /Prev 1123 0 R /Next 1131 0 R >> endobj 1123 0 obj << /Title 1124 0 R /A 1121 0 R /Parent 31 0 R /Prev 1119 0 R /Next 1127 0 R >> endobj 1119 0 obj << /Title 1120 0 R /A 1117 0 R /Parent 31 0 R /Prev 1115 0 R /Next 1123 0 R >> endobj 1115 0 obj << /Title 1116 0 R /A 1113 0 R /Parent 31 0 R /Prev 1111 0 R /Next 1119 0 R >> endobj 1111 0 obj << /Title 1112 0 R /A 1109 0 R /Parent 31 0 R /Prev 1107 0 R /Next 1115 0 R >> endobj 1107 0 obj << /Title 1108 0 R /A 1105 0 R /Parent 31 0 R /Prev 1103 0 R /Next 1111 0 R >> endobj 1103 0 obj << /Title 1104 0 R /A 1101 0 R /Parent 31 0 R /Prev 1099 0 R /Next 1107 0 R >> endobj 1099 0 obj << /Title 1100 0 R /A 1097 0 R /Parent 31 0 R /Prev 1095 0 R /Next 1103 0 R >> endobj 1095 0 obj << /Title 1096 0 R /A 1093 0 R /Parent 31 0 R /Prev 1091 0 R /Next 1099 0 R >> endobj 1091 0 obj << /Title 1092 0 R /A 1089 0 R /Parent 31 0 R /Prev 1087 0 R /Next 1095 0 R >> endobj 1087 0 obj << /Title 1088 0 R /A 1085 0 R /Parent 31 0 R /Prev 1083 0 R /Next 1091 0 R >> endobj 1083 0 obj << /Title 1084 0 R /A 1081 0 R /Parent 31 0 R /Prev 1079 0 R /Next 1087 0 R >> endobj 1079 0 obj << /Title 1080 0 R /A 1077 0 R /Parent 31 0 R /Prev 1075 0 R /Next 1083 0 R >> endobj 1075 0 obj << /Title 1076 0 R /A 1073 0 R /Parent 31 0 R /Prev 1071 0 R /Next 1079 0 R >> endobj 1071 0 obj << /Title 1072 0 R /A 1069 0 R /Parent 31 0 R /Prev 1067 0 R /Next 1075 0 R >> endobj 1067 0 obj << /Title 1068 0 R /A 1065 0 R /Parent 31 0 R /Prev 1063 0 R /Next 1071 0 R >> endobj 1063 0 obj << /Title 1064 0 R /A 1061 0 R /Parent 31 0 R /Prev 1059 0 R /Next 1067 0 R >> endobj 1059 0 obj << /Title 1060 0 R /A 1057 0 R /Parent 31 0 R /Prev 1055 0 R /Next 1063 0 R >> endobj 1055 0 obj << /Title 1056 0 R /A 1053 0 R /Parent 31 0 R /Prev 1051 0 R /Next 1059 0 R >> endobj 1051 0 obj << /Title 1052 0 R /A 1049 0 R /Parent 31 0 R /Prev 1047 0 R /Next 1055 0 R >> endobj 1047 0 obj << /Title 1048 0 R /A 1045 0 R /Parent 31 0 R /Prev 1043 0 R /Next 1051 0 R >> endobj 1043 0 obj << /Title 1044 0 R /A 1041 0 R /Parent 31 0 R /Prev 1039 0 R /Next 1047 0 R >> endobj 1039 0 obj << /Title 1040 0 R /A 1037 0 R /Parent 31 0 R /Prev 1035 0 R /Next 1043 0 R >> endobj 1035 0 obj << /Title 1036 0 R /A 1033 0 R /Parent 31 0 R /Prev 1031 0 R /Next 1039 0 R >> endobj 1031 0 obj << /Title 1032 0 R /A 1029 0 R /Parent 31 0 R /Prev 1027 0 R /Next 1035 0 R >> endobj 1027 0 obj << /Title 1028 0 R /A 1025 0 R /Parent 31 0 R /Prev 1023 0 R /Next 1031 0 R >> endobj 1023 0 obj << /Title 1024 0 R /A 1021 0 R /Parent 31 0 R /Prev 1019 0 R /Next 1027 0 R >> endobj 1019 0 obj << /Title 1020 0 R /A 1017 0 R /Parent 31 0 R /Prev 1015 0 R /Next 1023 0 R >> endobj 1015 0 obj << /Title 1016 0 R /A 1013 0 R /Parent 31 0 R /Prev 1011 0 R /Next 1019 0 R >> endobj 1011 0 obj << /Title 1012 0 R /A 1009 0 R /Parent 31 0 R /Prev 1007 0 R /Next 1015 0 R >> endobj 1007 0 obj << /Title 1008 0 R /A 1005 0 R /Parent 31 0 R /Prev 1003 0 R /Next 1011 0 R >> endobj 1003 0 obj << /Title 1004 0 R /A 1001 0 R /Parent 31 0 R /Prev 999 0 R /Next 1007 0 R >> endobj 999 0 obj << /Title 1000 0 R /A 997 0 R /Parent 31 0 R /Prev 995 0 R /Next 1003 0 R >> endobj 995 0 obj << /Title 996 0 R /A 993 0 R /Parent 31 0 R /Prev 991 0 R /Next 999 0 R >> endobj 991 0 obj << /Title 992 0 R /A 989 0 R /Parent 31 0 R /Prev 987 0 R /Next 995 0 R >> endobj 987 0 obj << /Title 988 0 R /A 985 0 R /Parent 31 0 R /Prev 983 0 R /Next 991 0 R >> endobj 983 0 obj << /Title 984 0 R /A 981 0 R /Parent 31 0 R /Prev 979 0 R /Next 987 0 R >> endobj 979 0 obj << /Title 980 0 R /A 977 0 R /Parent 31 0 R /Prev 975 0 R /Next 983 0 R >> endobj 975 0 obj << /Title 976 0 R /A 973 0 R /Parent 31 0 R /Prev 971 0 R /Next 979 0 R >> endobj 971 0 obj << /Title 972 0 R /A 969 0 R /Parent 31 0 R /Prev 967 0 R /Next 975 0 R >> endobj 967 0 obj << /Title 968 0 R /A 965 0 R /Parent 31 0 R /Prev 963 0 R /Next 971 0 R >> endobj 963 0 obj << /Title 964 0 R /A 961 0 R /Parent 31 0 R /Prev 959 0 R /Next 967 0 R >> endobj 959 0 obj << /Title 960 0 R /A 957 0 R /Parent 31 0 R /Prev 955 0 R /Next 963 0 R >> endobj 955 0 obj << /Title 956 0 R /A 953 0 R /Parent 31 0 R /Prev 951 0 R /Next 959 0 R >> endobj 951 0 obj << /Title 952 0 R /A 949 0 R /Parent 31 0 R /Prev 947 0 R /Next 955 0 R >> endobj 947 0 obj << /Title 948 0 R /A 945 0 R /Parent 31 0 R /Prev 943 0 R /Next 951 0 R >> endobj 943 0 obj << /Title 944 0 R /A 941 0 R /Parent 31 0 R /Prev 939 0 R /Next 947 0 R >> endobj 939 0 obj << /Title 940 0 R /A 937 0 R /Parent 31 0 R /Prev 935 0 R /Next 943 0 R >> endobj 935 0 obj << /Title 936 0 R /A 933 0 R /Parent 31 0 R /Prev 931 0 R /Next 939 0 R >> endobj 931 0 obj << /Title 932 0 R /A 929 0 R /Parent 31 0 R /Prev 927 0 R /Next 935 0 R >> endobj 927 0 obj << /Title 928 0 R /A 925 0 R /Parent 31 0 R /Prev 923 0 R /Next 931 0 R >> endobj 923 0 obj << /Title 924 0 R /A 921 0 R /Parent 31 0 R /Prev 919 0 R /Next 927 0 R >> endobj 919 0 obj << /Title 920 0 R /A 917 0 R /Parent 31 0 R /Prev 915 0 R /Next 923 0 R >> endobj 915 0 obj << /Title 916 0 R /A 913 0 R /Parent 31 0 R /Prev 911 0 R /Next 919 0 R >> endobj 911 0 obj << /Title 912 0 R /A 909 0 R /Parent 31 0 R /Prev 907 0 R /Next 915 0 R >> endobj 907 0 obj << /Title 908 0 R /A 905 0 R /Parent 31 0 R /Prev 903 0 R /Next 911 0 R >> endobj 903 0 obj << /Title 904 0 R /A 901 0 R /Parent 31 0 R /Prev 899 0 R /Next 907 0 R >> endobj 899 0 obj << /Title 900 0 R /A 897 0 R /Parent 31 0 R /Prev 895 0 R /Next 903 0 R >> endobj 895 0 obj << /Title 896 0 R /A 893 0 R /Parent 31 0 R /Prev 891 0 R /Next 899 0 R >> endobj 891 0 obj << /Title 892 0 R /A 889 0 R /Parent 31 0 R /Prev 887 0 R /Next 895 0 R >> endobj 887 0 obj << /Title 888 0 R /A 885 0 R /Parent 31 0 R /Prev 883 0 R /Next 891 0 R >> endobj 883 0 obj << /Title 884 0 R /A 881 0 R /Parent 31 0 R /Prev 879 0 R /Next 887 0 R >> endobj 879 0 obj << /Title 880 0 R /A 877 0 R /Parent 31 0 R /Prev 875 0 R /Next 883 0 R >> endobj 875 0 obj << /Title 876 0 R /A 873 0 R /Parent 31 0 R /Prev 871 0 R /Next 879 0 R >> endobj 871 0 obj << /Title 872 0 R /A 869 0 R /Parent 31 0 R /Prev 867 0 R /Next 875 0 R >> endobj 867 0 obj << /Title 868 0 R /A 865 0 R /Parent 31 0 R /Prev 863 0 R /Next 871 0 R >> endobj 863 0 obj << /Title 864 0 R /A 861 0 R /Parent 31 0 R /Prev 859 0 R /Next 867 0 R >> endobj 859 0 obj << /Title 860 0 R /A 857 0 R /Parent 31 0 R /Prev 855 0 R /Next 863 0 R >> endobj 855 0 obj << /Title 856 0 R /A 853 0 R /Parent 31 0 R /Prev 851 0 R /Next 859 0 R >> endobj 851 0 obj << /Title 852 0 R /A 849 0 R /Parent 31 0 R /Prev 847 0 R /Next 855 0 R >> endobj 847 0 obj << /Title 848 0 R /A 845 0 R /Parent 31 0 R /Prev 843 0 R /Next 851 0 R >> endobj 843 0 obj << /Title 844 0 R /A 841 0 R /Parent 31 0 R /Prev 839 0 R /Next 847 0 R >> endobj 839 0 obj << /Title 840 0 R /A 837 0 R /Parent 31 0 R /Prev 835 0 R /Next 843 0 R >> endobj 835 0 obj << /Title 836 0 R /A 833 0 R /Parent 31 0 R /Prev 831 0 R /Next 839 0 R >> endobj 831 0 obj << /Title 832 0 R /A 829 0 R /Parent 31 0 R /Prev 827 0 R /Next 835 0 R >> endobj 827 0 obj << /Title 828 0 R /A 825 0 R /Parent 31 0 R /Prev 823 0 R /Next 831 0 R >> endobj 823 0 obj << /Title 824 0 R /A 821 0 R /Parent 31 0 R /Prev 819 0 R /Next 827 0 R >> endobj 819 0 obj << /Title 820 0 R /A 817 0 R /Parent 31 0 R /Prev 815 0 R /Next 823 0 R >> endobj 815 0 obj << /Title 816 0 R /A 813 0 R /Parent 31 0 R /Prev 811 0 R /Next 819 0 R >> endobj 811 0 obj << /Title 812 0 R /A 809 0 R /Parent 31 0 R /Prev 807 0 R /Next 815 0 R >> endobj 807 0 obj << /Title 808 0 R /A 805 0 R /Parent 31 0 R /Prev 803 0 R /Next 811 0 R >> endobj 803 0 obj << /Title 804 0 R /A 801 0 R /Parent 31 0 R /Prev 799 0 R /Next 807 0 R >> endobj 799 0 obj << /Title 800 0 R /A 797 0 R /Parent 31 0 R /Prev 795 0 R /Next 803 0 R >> endobj 795 0 obj << /Title 796 0 R /A 793 0 R /Parent 31 0 R /Prev 791 0 R /Next 799 0 R >> endobj 791 0 obj << /Title 792 0 R /A 789 0 R /Parent 31 0 R /Prev 787 0 R /Next 795 0 R >> endobj 787 0 obj << /Title 788 0 R /A 785 0 R /Parent 31 0 R /Prev 783 0 R /Next 791 0 R >> endobj 783 0 obj << /Title 784 0 R /A 781 0 R /Parent 31 0 R /Prev 779 0 R /Next 787 0 R >> endobj 779 0 obj << /Title 780 0 R /A 777 0 R /Parent 31 0 R /Prev 775 0 R /Next 783 0 R >> endobj 775 0 obj << /Title 776 0 R /A 773 0 R /Parent 31 0 R /Prev 771 0 R /Next 779 0 R >> endobj 771 0 obj << /Title 772 0 R /A 769 0 R /Parent 31 0 R /Prev 767 0 R /Next 775 0 R >> endobj 767 0 obj << /Title 768 0 R /A 765 0 R /Parent 31 0 R /Prev 763 0 R /Next 771 0 R >> endobj 763 0 obj << /Title 764 0 R /A 761 0 R /Parent 31 0 R /Prev 759 0 R /Next 767 0 R >> endobj 759 0 obj << /Title 760 0 R /A 757 0 R /Parent 31 0 R /Prev 755 0 R /Next 763 0 R >> endobj 755 0 obj << /Title 756 0 R /A 753 0 R /Parent 31 0 R /Prev 751 0 R /Next 759 0 R >> endobj 751 0 obj << /Title 752 0 R /A 749 0 R /Parent 31 0 R /Prev 747 0 R /Next 755 0 R >> endobj 747 0 obj << /Title 748 0 R /A 745 0 R /Parent 31 0 R /Prev 743 0 R /Next 751 0 R >> endobj 743 0 obj << /Title 744 0 R /A 741 0 R /Parent 31 0 R /Prev 739 0 R /Next 747 0 R >> endobj 739 0 obj << /Title 740 0 R /A 737 0 R /Parent 31 0 R /Prev 735 0 R /Next 743 0 R >> endobj 735 0 obj << /Title 736 0 R /A 733 0 R /Parent 31 0 R /Prev 731 0 R /Next 739 0 R >> endobj 731 0 obj << /Title 732 0 R /A 729 0 R /Parent 31 0 R /Prev 727 0 R /Next 735 0 R >> endobj 727 0 obj << /Title 728 0 R /A 725 0 R /Parent 31 0 R /Prev 723 0 R /Next 731 0 R >> endobj 723 0 obj << /Title 724 0 R /A 721 0 R /Parent 31 0 R /Prev 719 0 R /Next 727 0 R >> endobj 719 0 obj << /Title 720 0 R /A 717 0 R /Parent 31 0 R /Prev 715 0 R /Next 723 0 R >> endobj 715 0 obj << /Title 716 0 R /A 713 0 R /Parent 31 0 R /Prev 711 0 R /Next 719 0 R >> endobj 711 0 obj << /Title 712 0 R /A 709 0 R /Parent 31 0 R /Prev 707 0 R /Next 715 0 R >> endobj 707 0 obj << /Title 708 0 R /A 705 0 R /Parent 31 0 R /Prev 703 0 R /Next 711 0 R >> endobj 703 0 obj << /Title 704 0 R /A 701 0 R /Parent 31 0 R /Prev 699 0 R /Next 707 0 R >> endobj 699 0 obj << /Title 700 0 R /A 697 0 R /Parent 31 0 R /Prev 695 0 R /Next 703 0 R >> endobj 695 0 obj << /Title 696 0 R /A 693 0 R /Parent 31 0 R /Prev 691 0 R /Next 699 0 R >> endobj 691 0 obj << /Title 692 0 R /A 689 0 R /Parent 31 0 R /Prev 687 0 R /Next 695 0 R >> endobj 687 0 obj << /Title 688 0 R /A 685 0 R /Parent 31 0 R /Prev 683 0 R /Next 691 0 R >> endobj 683 0 obj << /Title 684 0 R /A 681 0 R /Parent 31 0 R /Prev 679 0 R /Next 687 0 R >> endobj 679 0 obj << /Title 680 0 R /A 677 0 R /Parent 31 0 R /Prev 675 0 R /Next 683 0 R >> endobj 675 0 obj << /Title 676 0 R /A 673 0 R /Parent 31 0 R /Prev 671 0 R /Next 679 0 R >> endobj 671 0 obj << /Title 672 0 R /A 669 0 R /Parent 31 0 R /Prev 667 0 R /Next 675 0 R >> endobj 667 0 obj << /Title 668 0 R /A 665 0 R /Parent 31 0 R /Prev 663 0 R /Next 671 0 R >> endobj 663 0 obj << /Title 664 0 R /A 661 0 R /Parent 31 0 R /Prev 659 0 R /Next 667 0 R >> endobj 659 0 obj << /Title 660 0 R /A 657 0 R /Parent 31 0 R /Prev 655 0 R /Next 663 0 R >> endobj 655 0 obj << /Title 656 0 R /A 653 0 R /Parent 31 0 R /Prev 651 0 R /Next 659 0 R >> endobj 651 0 obj << /Title 652 0 R /A 649 0 R /Parent 31 0 R /Prev 647 0 R /Next 655 0 R >> endobj 647 0 obj << /Title 648 0 R /A 645 0 R /Parent 31 0 R /Prev 643 0 R /Next 651 0 R >> endobj 643 0 obj << /Title 644 0 R /A 641 0 R /Parent 31 0 R /Prev 639 0 R /Next 647 0 R >> endobj 639 0 obj << /Title 640 0 R /A 637 0 R /Parent 31 0 R /Prev 635 0 R /Next 643 0 R >> endobj 635 0 obj << /Title 636 0 R /A 633 0 R /Parent 31 0 R /Prev 631 0 R /Next 639 0 R >> endobj 631 0 obj << /Title 632 0 R /A 629 0 R /Parent 31 0 R /Prev 627 0 R /Next 635 0 R >> endobj 627 0 obj << /Title 628 0 R /A 625 0 R /Parent 31 0 R /Prev 623 0 R /Next 631 0 R >> endobj 623 0 obj << /Title 624 0 R /A 621 0 R /Parent 31 0 R /Prev 619 0 R /Next 627 0 R >> endobj 619 0 obj << /Title 620 0 R /A 617 0 R /Parent 31 0 R /Prev 615 0 R /Next 623 0 R >> endobj 615 0 obj << /Title 616 0 R /A 613 0 R /Parent 31 0 R /Prev 611 0 R /Next 619 0 R >> endobj 611 0 obj << /Title 612 0 R /A 609 0 R /Parent 31 0 R /Prev 607 0 R /Next 615 0 R >> endobj 607 0 obj << /Title 608 0 R /A 605 0 R /Parent 31 0 R /Prev 603 0 R /Next 611 0 R >> endobj 603 0 obj << /Title 604 0 R /A 601 0 R /Parent 31 0 R /Prev 599 0 R /Next 607 0 R >> endobj 599 0 obj << /Title 600 0 R /A 597 0 R /Parent 31 0 R /Prev 595 0 R /Next 603 0 R >> endobj 595 0 obj << /Title 596 0 R /A 593 0 R /Parent 31 0 R /Prev 591 0 R /Next 599 0 R >> endobj 591 0 obj << /Title 592 0 R /A 589 0 R /Parent 31 0 R /Prev 587 0 R /Next 595 0 R >> endobj 587 0 obj << /Title 588 0 R /A 585 0 R /Parent 31 0 R /Prev 583 0 R /Next 591 0 R >> endobj 583 0 obj << /Title 584 0 R /A 581 0 R /Parent 31 0 R /Prev 579 0 R /Next 587 0 R >> endobj 579 0 obj << /Title 580 0 R /A 577 0 R /Parent 31 0 R /Prev 575 0 R /Next 583 0 R >> endobj 575 0 obj << /Title 576 0 R /A 573 0 R /Parent 31 0 R /Prev 571 0 R /Next 579 0 R >> endobj 571 0 obj << /Title 572 0 R /A 569 0 R /Parent 31 0 R /Prev 567 0 R /Next 575 0 R >> endobj 567 0 obj << /Title 568 0 R /A 565 0 R /Parent 31 0 R /Prev 563 0 R /Next 571 0 R >> endobj 563 0 obj << /Title 564 0 R /A 561 0 R /Parent 31 0 R /Prev 559 0 R /Next 567 0 R >> endobj 559 0 obj << /Title 560 0 R /A 557 0 R /Parent 31 0 R /Prev 555 0 R /Next 563 0 R >> endobj 555 0 obj << /Title 556 0 R /A 553 0 R /Parent 31 0 R /Prev 551 0 R /Next 559 0 R >> endobj 551 0 obj << /Title 552 0 R /A 549 0 R /Parent 31 0 R /Prev 547 0 R /Next 555 0 R >> endobj 547 0 obj << /Title 548 0 R /A 545 0 R /Parent 31 0 R /Prev 543 0 R /Next 551 0 R >> endobj 543 0 obj << /Title 544 0 R /A 541 0 R /Parent 31 0 R /Prev 539 0 R /Next 547 0 R >> endobj 539 0 obj << /Title 540 0 R /A 537 0 R /Parent 31 0 R /Prev 535 0 R /Next 543 0 R >> endobj 535 0 obj << /Title 536 0 R /A 533 0 R /Parent 31 0 R /Prev 531 0 R /Next 539 0 R >> endobj 531 0 obj << /Title 532 0 R /A 529 0 R /Parent 31 0 R /Prev 527 0 R /Next 535 0 R >> endobj 527 0 obj << /Title 528 0 R /A 525 0 R /Parent 31 0 R /Prev 523 0 R /Next 531 0 R >> endobj 523 0 obj << /Title 524 0 R /A 521 0 R /Parent 31 0 R /Prev 519 0 R /Next 527 0 R >> endobj 519 0 obj << /Title 520 0 R /A 517 0 R /Parent 31 0 R /Prev 515 0 R /Next 523 0 R >> endobj 515 0 obj << /Title 516 0 R /A 513 0 R /Parent 31 0 R /Prev 511 0 R /Next 519 0 R >> endobj 511 0 obj << /Title 512 0 R /A 509 0 R /Parent 31 0 R /Prev 507 0 R /Next 515 0 R >> endobj 507 0 obj << /Title 508 0 R /A 505 0 R /Parent 31 0 R /Prev 503 0 R /Next 511 0 R >> endobj 503 0 obj << /Title 504 0 R /A 501 0 R /Parent 31 0 R /Prev 499 0 R /Next 507 0 R >> endobj 499 0 obj << /Title 500 0 R /A 497 0 R /Parent 31 0 R /Prev 495 0 R /Next 503 0 R >> endobj 495 0 obj << /Title 496 0 R /A 493 0 R /Parent 31 0 R /Prev 491 0 R /Next 499 0 R >> endobj 491 0 obj << /Title 492 0 R /A 489 0 R /Parent 31 0 R /Prev 487 0 R /Next 495 0 R >> endobj 487 0 obj << /Title 488 0 R /A 485 0 R /Parent 31 0 R /Prev 483 0 R /Next 491 0 R >> endobj 483 0 obj << /Title 484 0 R /A 481 0 R /Parent 31 0 R /Prev 479 0 R /Next 487 0 R >> endobj 479 0 obj << /Title 480 0 R /A 477 0 R /Parent 31 0 R /Prev 475 0 R /Next 483 0 R >> endobj 475 0 obj << /Title 476 0 R /A 473 0 R /Parent 31 0 R /Prev 471 0 R /Next 479 0 R >> endobj 471 0 obj << /Title 472 0 R /A 469 0 R /Parent 31 0 R /Prev 467 0 R /Next 475 0 R >> endobj 467 0 obj << /Title 468 0 R /A 465 0 R /Parent 31 0 R /Prev 463 0 R /Next 471 0 R >> endobj 463 0 obj << /Title 464 0 R /A 461 0 R /Parent 31 0 R /Prev 459 0 R /Next 467 0 R >> endobj 459 0 obj << /Title 460 0 R /A 457 0 R /Parent 31 0 R /Prev 455 0 R /Next 463 0 R >> endobj 455 0 obj << /Title 456 0 R /A 453 0 R /Parent 31 0 R /Prev 451 0 R /Next 459 0 R >> endobj 451 0 obj << /Title 452 0 R /A 449 0 R /Parent 31 0 R /Prev 447 0 R /Next 455 0 R >> endobj 447 0 obj << /Title 448 0 R /A 445 0 R /Parent 31 0 R /Prev 443 0 R /Next 451 0 R >> endobj 443 0 obj << /Title 444 0 R /A 441 0 R /Parent 31 0 R /Prev 439 0 R /Next 447 0 R >> endobj 439 0 obj << /Title 440 0 R /A 437 0 R /Parent 31 0 R /Prev 435 0 R /Next 443 0 R >> endobj 435 0 obj << /Title 436 0 R /A 433 0 R /Parent 31 0 R /Prev 431 0 R /Next 439 0 R >> endobj 431 0 obj << /Title 432 0 R /A 429 0 R /Parent 31 0 R /Prev 427 0 R /Next 435 0 R >> endobj 427 0 obj << /Title 428 0 R /A 425 0 R /Parent 31 0 R /Prev 423 0 R /Next 431 0 R >> endobj 423 0 obj << /Title 424 0 R /A 421 0 R /Parent 31 0 R /Prev 419 0 R /Next 427 0 R >> endobj 419 0 obj << /Title 420 0 R /A 417 0 R /Parent 31 0 R /Prev 415 0 R /Next 423 0 R >> endobj 415 0 obj << /Title 416 0 R /A 413 0 R /Parent 31 0 R /Prev 411 0 R /Next 419 0 R >> endobj 411 0 obj << /Title 412 0 R /A 409 0 R /Parent 31 0 R /Prev 407 0 R /Next 415 0 R >> endobj 407 0 obj << /Title 408 0 R /A 405 0 R /Parent 31 0 R /Prev 403 0 R /Next 411 0 R >> endobj 403 0 obj << /Title 404 0 R /A 401 0 R /Parent 31 0 R /Prev 399 0 R /Next 407 0 R >> endobj 399 0 obj << /Title 400 0 R /A 397 0 R /Parent 31 0 R /Prev 395 0 R /Next 403 0 R >> endobj 395 0 obj << /Title 396 0 R /A 393 0 R /Parent 31 0 R /Prev 391 0 R /Next 399 0 R >> endobj 391 0 obj << /Title 392 0 R /A 389 0 R /Parent 31 0 R /Prev 387 0 R /Next 395 0 R >> endobj 387 0 obj << /Title 388 0 R /A 385 0 R /Parent 31 0 R /Prev 383 0 R /Next 391 0 R >> endobj 383 0 obj << /Title 384 0 R /A 381 0 R /Parent 31 0 R /Prev 379 0 R /Next 387 0 R >> endobj 379 0 obj << /Title 380 0 R /A 377 0 R /Parent 31 0 R /Prev 375 0 R /Next 383 0 R >> endobj 375 0 obj << /Title 376 0 R /A 373 0 R /Parent 31 0 R /Prev 371 0 R /Next 379 0 R >> endobj 371 0 obj << /Title 372 0 R /A 369 0 R /Parent 31 0 R /Prev 367 0 R /Next 375 0 R >> endobj 367 0 obj << /Title 368 0 R /A 365 0 R /Parent 31 0 R /Prev 363 0 R /Next 371 0 R >> endobj 363 0 obj << /Title 364 0 R /A 361 0 R /Parent 31 0 R /Prev 359 0 R /Next 367 0 R >> endobj 359 0 obj << /Title 360 0 R /A 357 0 R /Parent 31 0 R /Prev 355 0 R /Next 363 0 R >> endobj 355 0 obj << /Title 356 0 R /A 353 0 R /Parent 31 0 R /Prev 351 0 R /Next 359 0 R >> endobj 351 0 obj << /Title 352 0 R /A 349 0 R /Parent 31 0 R /Prev 347 0 R /Next 355 0 R >> endobj 347 0 obj << /Title 348 0 R /A 345 0 R /Parent 31 0 R /Prev 343 0 R /Next 351 0 R >> endobj 343 0 obj << /Title 344 0 R /A 341 0 R /Parent 31 0 R /Prev 339 0 R /Next 347 0 R >> endobj 339 0 obj << /Title 340 0 R /A 337 0 R /Parent 31 0 R /Prev 335 0 R /Next 343 0 R >> endobj 335 0 obj << /Title 336 0 R /A 333 0 R /Parent 31 0 R /Prev 331 0 R /Next 339 0 R >> endobj 331 0 obj << /Title 332 0 R /A 329 0 R /Parent 31 0 R /Prev 327 0 R /Next 335 0 R >> endobj 327 0 obj << /Title 328 0 R /A 325 0 R /Parent 31 0 R /Prev 323 0 R /Next 331 0 R >> endobj 323 0 obj << /Title 324 0 R /A 321 0 R /Parent 31 0 R /Prev 319 0 R /Next 327 0 R >> endobj 319 0 obj << /Title 320 0 R /A 317 0 R /Parent 31 0 R /Prev 315 0 R /Next 323 0 R >> endobj 315 0 obj << /Title 316 0 R /A 313 0 R /Parent 31 0 R /Prev 311 0 R /Next 319 0 R >> endobj 311 0 obj << /Title 312 0 R /A 309 0 R /Parent 31 0 R /Prev 307 0 R /Next 315 0 R >> endobj 307 0 obj << /Title 308 0 R /A 305 0 R /Parent 31 0 R /Prev 303 0 R /Next 311 0 R >> endobj 303 0 obj << /Title 304 0 R /A 301 0 R /Parent 31 0 R /Prev 299 0 R /Next 307 0 R >> endobj 299 0 obj << /Title 300 0 R /A 297 0 R /Parent 31 0 R /Prev 295 0 R /Next 303 0 R >> endobj 295 0 obj << /Title 296 0 R /A 293 0 R /Parent 31 0 R /Prev 291 0 R /Next 299 0 R >> endobj 291 0 obj << /Title 292 0 R /A 289 0 R /Parent 31 0 R /Prev 287 0 R /Next 295 0 R >> endobj 287 0 obj << /Title 288 0 R /A 285 0 R /Parent 31 0 R /Prev 283 0 R /Next 291 0 R >> endobj 283 0 obj << /Title 284 0 R /A 281 0 R /Parent 31 0 R /Prev 279 0 R /Next 287 0 R >> endobj 279 0 obj << /Title 280 0 R /A 277 0 R /Parent 31 0 R /Prev 275 0 R /Next 283 0 R >> endobj 275 0 obj << /Title 276 0 R /A 273 0 R /Parent 31 0 R /Prev 271 0 R /Next 279 0 R >> endobj 271 0 obj << /Title 272 0 R /A 269 0 R /Parent 31 0 R /Prev 267 0 R /Next 275 0 R >> endobj 267 0 obj << /Title 268 0 R /A 265 0 R /Parent 31 0 R /Prev 263 0 R /Next 271 0 R >> endobj 263 0 obj << /Title 264 0 R /A 261 0 R /Parent 31 0 R /Prev 259 0 R /Next 267 0 R >> endobj 259 0 obj << /Title 260 0 R /A 257 0 R /Parent 31 0 R /Prev 255 0 R /Next 263 0 R >> endobj 255 0 obj << /Title 256 0 R /A 253 0 R /Parent 31 0 R /Prev 251 0 R /Next 259 0 R >> endobj 251 0 obj << /Title 252 0 R /A 249 0 R /Parent 31 0 R /Prev 247 0 R /Next 255 0 R >> endobj 247 0 obj << /Title 248 0 R /A 245 0 R /Parent 31 0 R /Prev 243 0 R /Next 251 0 R >> endobj 243 0 obj << /Title 244 0 R /A 241 0 R /Parent 31 0 R /Prev 239 0 R /Next 247 0 R >> endobj 239 0 obj << /Title 240 0 R /A 237 0 R /Parent 31 0 R /Prev 235 0 R /Next 243 0 R >> endobj 235 0 obj << /Title 236 0 R /A 233 0 R /Parent 31 0 R /Prev 231 0 R /Next 239 0 R >> endobj 231 0 obj << /Title 232 0 R /A 229 0 R /Parent 31 0 R /Prev 227 0 R /Next 235 0 R >> endobj 227 0 obj << /Title 228 0 R /A 225 0 R /Parent 31 0 R /Prev 223 0 R /Next 231 0 R >> endobj 223 0 obj << /Title 224 0 R /A 221 0 R /Parent 31 0 R /Prev 219 0 R /Next 227 0 R >> endobj 219 0 obj << /Title 220 0 R /A 217 0 R /Parent 31 0 R /Prev 215 0 R /Next 223 0 R >> endobj 215 0 obj << /Title 216 0 R /A 213 0 R /Parent 31 0 R /Prev 211 0 R /Next 219 0 R >> endobj 211 0 obj << /Title 212 0 R /A 209 0 R /Parent 31 0 R /Prev 207 0 R /Next 215 0 R >> endobj 207 0 obj << /Title 208 0 R /A 205 0 R /Parent 31 0 R /Prev 203 0 R /Next 211 0 R >> endobj 203 0 obj << /Title 204 0 R /A 201 0 R /Parent 31 0 R /Prev 199 0 R /Next 207 0 R >> endobj 199 0 obj << /Title 200 0 R /A 197 0 R /Parent 31 0 R /Prev 195 0 R /Next 203 0 R >> endobj 195 0 obj << /Title 196 0 R /A 193 0 R /Parent 31 0 R /Prev 191 0 R /Next 199 0 R >> endobj 191 0 obj << /Title 192 0 R /A 189 0 R /Parent 31 0 R /Prev 187 0 R /Next 195 0 R >> endobj 187 0 obj << /Title 188 0 R /A 185 0 R /Parent 31 0 R /Prev 183 0 R /Next 191 0 R >> endobj 183 0 obj << /Title 184 0 R /A 181 0 R /Parent 31 0 R /Prev 179 0 R /Next 187 0 R >> endobj 179 0 obj << /Title 180 0 R /A 177 0 R /Parent 31 0 R /Prev 175 0 R /Next 183 0 R >> endobj 175 0 obj << /Title 176 0 R /A 173 0 R /Parent 31 0 R /Prev 171 0 R /Next 179 0 R >> endobj 171 0 obj << /Title 172 0 R /A 169 0 R /Parent 31 0 R /Prev 167 0 R /Next 175 0 R >> endobj 167 0 obj << /Title 168 0 R /A 165 0 R /Parent 31 0 R /Prev 163 0 R /Next 171 0 R >> endobj 163 0 obj << /Title 164 0 R /A 161 0 R /Parent 31 0 R /Prev 159 0 R /Next 167 0 R >> endobj 159 0 obj << /Title 160 0 R /A 157 0 R /Parent 31 0 R /Prev 155 0 R /Next 163 0 R >> endobj 155 0 obj << /Title 156 0 R /A 153 0 R /Parent 31 0 R /Prev 151 0 R /Next 159 0 R >> endobj 151 0 obj << /Title 152 0 R /A 149 0 R /Parent 31 0 R /Prev 147 0 R /Next 155 0 R >> endobj 147 0 obj << /Title 148 0 R /A 145 0 R /Parent 31 0 R /Prev 143 0 R /Next 151 0 R >> endobj 143 0 obj << /Title 144 0 R /A 141 0 R /Parent 31 0 R /Prev 139 0 R /Next 147 0 R >> endobj 139 0 obj << /Title 140 0 R /A 137 0 R /Parent 31 0 R /Prev 135 0 R /Next 143 0 R >> endobj 135 0 obj << /Title 136 0 R /A 133 0 R /Parent 31 0 R /Prev 131 0 R /Next 139 0 R >> endobj 131 0 obj << /Title 132 0 R /A 129 0 R /Parent 31 0 R /Prev 127 0 R /Next 135 0 R >> endobj 127 0 obj << /Title 128 0 R /A 125 0 R /Parent 31 0 R /Prev 123 0 R /Next 131 0 R >> endobj 123 0 obj << /Title 124 0 R /A 121 0 R /Parent 31 0 R /Prev 119 0 R /Next 127 0 R >> endobj 119 0 obj << /Title 120 0 R /A 117 0 R /Parent 31 0 R /Prev 115 0 R /Next 123 0 R >> endobj 115 0 obj << /Title 116 0 R /A 113 0 R /Parent 31 0 R /Prev 111 0 R /Next 119 0 R >> endobj 111 0 obj << /Title 112 0 R /A 109 0 R /Parent 31 0 R /Prev 107 0 R /Next 115 0 R >> endobj 107 0 obj << /Title 108 0 R /A 105 0 R /Parent 31 0 R /Prev 103 0 R /Next 111 0 R >> endobj 103 0 obj << /Title 104 0 R /A 101 0 R /Parent 31 0 R /Prev 99 0 R /Next 107 0 R >> endobj 99 0 obj << /Title 100 0 R /A 97 0 R /Parent 31 0 R /Prev 95 0 R /Next 103 0 R >> endobj 95 0 obj << /Title 96 0 R /A 93 0 R /Parent 31 0 R /Prev 91 0 R /Next 99 0 R >> endobj 91 0 obj << /Title 92 0 R /A 89 0 R /Parent 31 0 R /Prev 87 0 R /Next 95 0 R >> endobj 87 0 obj << /Title 88 0 R /A 85 0 R /Parent 31 0 R /Prev 83 0 R /Next 91 0 R >> endobj 83 0 obj << /Title 84 0 R /A 81 0 R /Parent 31 0 R /Prev 79 0 R /Next 87 0 R >> endobj 79 0 obj << /Title 80 0 R /A 77 0 R /Parent 31 0 R /Prev 75 0 R /Next 83 0 R >> endobj 75 0 obj << /Title 76 0 R /A 73 0 R /Parent 31 0 R /Prev 71 0 R /Next 79 0 R >> endobj 71 0 obj << /Title 72 0 R /A 69 0 R /Parent 31 0 R /Prev 67 0 R /Next 75 0 R >> endobj 67 0 obj << /Title 68 0 R /A 65 0 R /Parent 31 0 R /Prev 63 0 R /Next 71 0 R >> endobj 63 0 obj << /Title 64 0 R /A 61 0 R /Parent 31 0 R /Prev 59 0 R /Next 67 0 R >> endobj 59 0 obj << /Title 60 0 R /A 57 0 R /Parent 31 0 R /Prev 55 0 R /Next 63 0 R >> endobj 55 0 obj << /Title 56 0 R /A 53 0 R /Parent 31 0 R /Prev 51 0 R /Next 59 0 R >> endobj 51 0 obj << /Title 52 0 R /A 49 0 R /Parent 31 0 R /Prev 47 0 R /Next 55 0 R >> endobj 47 0 obj << /Title 48 0 R /A 45 0 R /Parent 31 0 R /Prev 43 0 R /Next 51 0 R >> endobj 43 0 obj << /Title 44 0 R /A 41 0 R /Parent 31 0 R /Prev 39 0 R /Next 47 0 R >> endobj 39 0 obj << /Title 40 0 R /A 37 0 R /Parent 31 0 R /Prev 35 0 R /Next 43 0 R >> endobj 35 0 obj << /Title 36 0 R /A 33 0 R /Parent 31 0 R /Next 39 0 R >> endobj 31 0 obj << /Title 32 0 R /A 29 0 R /Parent 4733 0 R /Prev 11 0 R /First 35 0 R /Last 1167 0 R /Count -284 >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 11 0 R /Prev 23 0 R >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 11 0 R /Prev 19 0 R /Next 27 0 R >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 11 0 R /Prev 15 0 R /Next 23 0 R >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 4733 0 R /Prev 7 0 R /Next 31 0 R /First 15 0 R /Last 27 0 R /Count -4 >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 4733 0 R /Prev 3 0 R /Next 11 0 R >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 4733 0 R /Next 7 0 R >> endobj 4734 0 obj << /Names [(1.0) 2 0 R (100) 1393 0 R (1000) 2218 0 R (1001) 2219 0 R (1002) 2220 0 R (1003) 2221 0 R (1004) 2222 0 R (1006) 2223 0 R (1007) 2224 0 R (1008) 2229 0 R (101) 1398 0 R (1010) 2230 0 R (1011) 2231 0 R (1012) 2232 0 R (1013) 2233 0 R (1014) 2234 0 R (1016) 2235 0 R (1017) 2236 0 R (1018) 2237 0 R (102) 1399 0 R (1020) 2238 0 R (1021) 2239 0 R (1022) 2240 0 R (1023) 2241 0 R (1024) 2242 0 R (1026) 2243 0 R (1027) 2244 0 R (1028) 2245 0 R (103) 1400 0 R (1030) 2246 0 R (1031) 2247 0 R (1032) 2248 0 R (1033) 2249 0 R (1034) 2250 0 R (1035) 2251 0 R (1037) 2252 0 R (1038) 2253 0 R (1039) 2254 0 R (104) 1401 0 R (1041) 2255 0 R (1042) 2256 0 R (1043) 2257 0 R (1044) 2258 0 R (1045) 2259 0 R (1047) 2260 0 R (1048) 2261 0 R (1049) 2262 0 R (105) 1402 0 R (1051) 2263 0 R (1052) 2264 0 R (1053) 2265 0 R (1054) 2266 0 R (1055) 2267 0 R (1057) 2268 0 R (1058) 2269 0 R (1059) 2270 0 R (106) 1403 0 R (1061) 2271 0 R (1062) 2272 0 R (1063) 2273 0 R (1064) 2274 0 R (1065) 2275 0 R (1067) 2276 0 R (1068) 2277 0 R (1069) 2278 0 R (107) 1404 0 R (1071) 2279 0 R (1072) 2280 0 R (1073) 2281 0 R (1074) 2282 0 R (1075) 2283 0 R (1077) 2284 0 R (1078) 2285 0 R (1079) 2290 0 R (108) 1405 0 R (1081) 2291 0 R (1082) 2292 0 R (1083) 2293 0 R (1084) 2294 0 R (1085) 2295 0 R (1086) 2296 0 R (1087) 2297 0 R (1089) 2298 0 R (109) 1406 0 R (1090) 2299 0 R (1091) 2300 0 R (1093) 2301 0 R (1094) 2302 0 R (1095) 2303 0 R (1096) 2304 0 R (1097) 2305 0 R (1099) 2306 0 R (11) 1264 0 R (110) 1407 0 R (1100) 2307 0 R (1101) 2308 0 R (1103) 2309 0 R (1104) 2310 0 R (1105) 2311 0 R (1106) 2312 0 R (1107) 2313 0 R (1109) 2314 0 R (111) 1408 0 R (1110) 2315 0 R (1111) 2316 0 R (1113) 2317 0 R (1114) 2318 0 R (1115) 2319 0 R (1116) 2320 0 R (1117) 2321 0 R (1119) 2322 0 R (112) 1409 0 R (1120) 2323 0 R (1121) 2324 0 R (1123) 2325 0 R (1124) 2326 0 R (1125) 2327 0 R (1126) 2328 0 R (1127) 2329 0 R (1129) 2330 0 R (113) 1410 0 R (1130) 2331 0 R (1131) 2332 0 R (1133) 2333 0 R (1135) 2334 0 R (1136) 2335 0 R (1138) 2336 0 R (1139) 2337 0 R (114) 1411 0 R (1140) 2338 0 R (1142) 2339 0 R (1144) 2340 0 R (1145) 2341 0 R (1147) 2342 0 R (1148) 2343 0 R (1149) 2349 0 R (115) 1412 0 R (1151) 2350 0 R (1152) 2351 0 R (1153) 2352 0 R (1154) 2353 0 R (1155) 2354 0 R (1157) 2355 0 R (1158) 2356 0 R (1159) 2357 0 R (116) 1413 0 R (1161) 2358 0 R (1162) 2359 0 R (1163) 2360 0 R (1164) 2361 0 R (1165) 2362 0 R (1167) 2363 0 R (1168) 2364 0 R (1169) 2365 0 R (117) 1414 0 R (1170) 2366 0 R (1171) 2367 0 R (1172) 2368 0 R (1173) 2369 0 R (1174) 2370 0 R (1175) 2371 0 R (1176) 2372 0 R (1178) 2373 0 R (1179) 2374 0 R (118) 1415 0 R (1180) 2375 0 R (1181) 2376 0 R (1182) 2377 0 R (1183) 2378 0 R (1184) 2379 0 R (1185) 2380 0 R (1186) 2381 0 R (1187) 2382 0 R (1189) 2383 0 R (119) 1416 0 R (1190) 2384 0 R (1191) 2385 0 R (1192) 2386 0 R (1193) 2387 0 R (1194) 2388 0 R (1195) 2389 0 R (1196) 2390 0 R (1198) 2391 0 R (1199) 2392 0 R (120) 1417 0 R (1200) 2393 0 R (1201) 2394 0 R (1202) 2395 0 R (1203) 2396 0 R (1204) 2397 0 R (1205) 2398 0 R (1206) 2399 0 R (1207) 2400 0 R (1209) 2401 0 R (121) 1418 0 R (1210) 2402 0 R (1211) 2403 0 R (1212) 2404 0 R (1213) 2405 0 R (1214) 2406 0 R (1215) 2407 0 R (1216) 2408 0 R (1217) 2409 0 R (1218) 2410 0 R (122) 1419 0 R (1220) 2411 0 R (1221) 2417 0 R (1222) 2418 0 R (1223) 2419 0 R (1224) 2420 0 R (1225) 2421 0 R (1226) 2422 0 R (1227) 2423 0 R (1228) 2424 0 R (1229) 2425 0 R (123) 1420 0 R (1230) 2426 0 R (1231) 2427 0 R (1232) 2428 0 R (1233) 2429 0 R (1234) 2430 0 R (1235) 2431 0 R (1236) 2432 0 R (1237) 2433 0 R (1238) 2434 0 R (1239) 2435 0 R (124) 1421 0 R (1240) 2436 0 R (1241) 2437 0 R (1242) 2438 0 R (1243) 2439 0 R (1244) 2440 0 R (1245) 2441 0 R (1246) 2442 0 R (1247) 2443 0 R (1248) 2444 0 R (1249) 2445 0 R (125) 1422 0 R (1250) 2446 0 R (1251) 2447 0 R (1252) 2448 0 R (1253) 2449 0 R (1254) 2450 0 R (1255) 2451 0 R (1256) 2452 0 R (1257) 2453 0 R (1258) 2454 0 R (1259) 2455 0 R (126) 1423 0 R (1260) 2456 0 R (1261) 2457 0 R (1262) 2458 0 R (1263) 2459 0 R (1264) 2460 0 R (1265) 2461 0 R (1266) 2462 0 R (1267) 2463 0 R (1268) 2464 0 R (1269) 2465 0 R (127) 1424 0 R (1270) 2466 0 R (1271) 2467 0 R (1272) 2468 0 R (128) 1425 0 R (129) 1426 0 R (1290) 2470 0 R (1291) 2471 0 R (1292) 2472 0 R (1293) 2473 0 R (1294) 2474 0 R (1295) 2475 0 R (1296) 2476 0 R (1297) 2477 0 R (1298) 2478 0 R (1299) 2479 0 R (13) 1265 0 R (130) 1429 0 R (1300) 2480 0 R (1301) 2481 0 R (1302) 2482 0 R (1303) 2483 0 R (1304) 2488 0 R (1305) 2489 0 R (1306) 2490 0 R (1307) 2491 0 R (1308) 2416 0 R (131) 1430 0 R (1310) 2492 0 R (1311) 2493 0 R (1312) 2494 0 R (1313) 2495 0 R (1314) 2496 0 R (1315) 2497 0 R (1316) 2498 0 R (1317) 2499 0 R (1318) 2500 0 R (1319) 2501 0 R (132) 1431 0 R (1320) 2502 0 R (1321) 2503 0 R (1322) 2504 0 R (1323) 2505 0 R (1324) 2506 0 R (1325) 2507 0 R (1326) 2508 0 R (1327) 2509 0 R (1328) 2510 0 R (1329) 2511 0 R (133) 1432 0 R (1330) 2512 0 R (1331) 2513 0 R (1332) 2514 0 R (1333) 2515 0 R (1334) 2516 0 R (1335) 2517 0 R (1336) 2518 0 R (1337) 2519 0 R (1338) 2520 0 R (1339) 2521 0 R (134) 1433 0 R (1340) 2522 0 R (1341) 2523 0 R (1342) 2524 0 R (1343) 2525 0 R (1344) 2526 0 R (1345) 2527 0 R (1346) 2528 0 R (1347) 2529 0 R (1348) 2530 0 R (1349) 2531 0 R (135) 1434 0 R (1350) 2532 0 R (1351) 2533 0 R (1352) 1281 0 R (1354) 2538 0 R (1356) 2539 0 R (1357) 2540 0 R (1358) 2541 0 R (136) 1435 0 R (1360) 2542 0 R (1361) 2543 0 R (1362) 2544 0 R (1363) 2545 0 R (1364) 2546 0 R (1366) 2547 0 R (1367) 2548 0 R (1368) 2549 0 R (137) 1436 0 R (1370) 2550 0 R (1371) 2551 0 R (1372) 2552 0 R (1373) 2553 0 R (1374) 2554 0 R (1376) 2555 0 R (1377) 2556 0 R (1378) 2557 0 R (138) 1437 0 R (1380) 2558 0 R (1381) 2559 0 R (1382) 2560 0 R (1383) 2561 0 R (1384) 2562 0 R (1386) 2563 0 R (1387) 2564 0 R (1388) 2565 0 R (139) 1438 0 R (1390) 2566 0 R (1391) 2567 0 R (1392) 2568 0 R (1393) 2569 0 R (1394) 2570 0 R (1396) 2571 0 R (1397) 2572 0 R (1398) 2573 0 R (140) 1267 0 R (1400) 2574 0 R (1401) 2575 0 R (1402) 2576 0 R (1403) 2577 0 R (1404) 2578 0 R (1406) 2579 0 R (1407) 2580 0 R (1408) 2581 0 R (1410) 2582 0 R (1411) 2583 0 R (1412) 2584 0 R (1413) 2585 0 R (1414) 2586 0 R (1416) 2587 0 R (1417) 2588 0 R (1418) 2589 0 R (142) 1439 0 R (1420) 2594 0 R (1421) 2595 0 R (1422) 2596 0 R (1423) 2597 0 R (1424) 2598 0 R (1425) 2599 0 R (1426) 2600 0 R (1428) 2601 0 R (1429) 2602 0 R (143) 1440 0 R (1430) 2603 0 R (1432) 2604 0 R (1433) 2605 0 R (1434) 2606 0 R (1435) 2607 0 R (1436) 2608 0 R (1438) 2609 0 R (1439) 2610 0 R (144) 1268 0 R (1440) 2611 0 R (1442) 2612 0 R (1443) 2613 0 R (1444) 2614 0 R (1445) 2615 0 R (1446) 2616 0 R (1448) 2617 0 R (1449) 2618 0 R (1450) 2619 0 R (1452) 2620 0 R (1453) 2621 0 R (1454) 2622 0 R (1455) 2623 0 R (1456) 2624 0 R (1458) 2625 0 R (1459) 2626 0 R (146) 1445 0 R (1460) 2627 0 R (1462) 2628 0 R (1464) 2629 0 R (1465) 2630 0 R (1467) 2631 0 R (1468) 2632 0 R (1469) 2633 0 R (147) 1446 0 R (1471) 2634 0 R (1473) 2635 0 R (1474) 2636 0 R (1476) 2637 0 R (1477) 2638 0 R (1478) 2639 0 R (148) 1447 0 R (1480) 2640 0 R (1481) 2641 0 R (1482) 2642 0 R (1483) 2643 0 R (1484) 2644 0 R (1486) 2645 0 R (1487) 2646 0 R (1488) 2651 0 R (149) 1448 0 R (1490) 2652 0 R (1491) 2653 0 R (1492) 2654 0 R (1493) 2655 0 R (1494) 2656 0 R (1496) 2657 0 R (1497) 2658 0 R (1498) 2659 0 R (1499) 2660 0 R (15) 1304 0 R (150) 1449 0 R (1500) 2661 0 R (1501) 2662 0 R (1502) 2663 0 R (1503) 2664 0 R (1504) 2665 0 R (1506) 2666 0 R (1507) 2667 0 R (1508) 2668 0 R (1509) 2669 0 R (151) 1450 0 R (1510) 2670 0 R (1511) 2671 0 R (1512) 2672 0 R (1513) 2673 0 R (1514) 2674 0 R (1516) 2675 0 R (1517) 2676 0 R (1518) 2677 0 R (1519) 2678 0 R (152) 1451 0 R (1520) 2679 0 R (1521) 2680 0 R (1522) 2681 0 R (1523) 2682 0 R (1524) 2683 0 R (1525) 2684 0 R (1526) 2685 0 R (1527) 2686 0 R (1528) 2687 0 R (1529) 2688 0 R (153) 1452 0 R (1530) 2689 0 R (1531) 2690 0 R (1532) 2691 0 R (1533) 2692 0 R (1534) 2693 0 R (1535) 2694 0 R (1536) 2695 0 R (1537) 2696 0 R (1538) 2697 0 R (1539) 2698 0 R (154) 1269 0 R (1540) 2699 0 R (1541) 2700 0 R (1542) 2701 0 R (1543) 2702 0 R (1544) 2703 0 R (1545) 2704 0 R (1546) 2705 0 R (1547) 2706 0 R (1548) 2707 0 R (1549) 2708 0 R (1550) 2709 0 R (1551) 2710 0 R (1552) 2711 0 R (1553) 2712 0 R (1554) 2713 0 R (1555) 2714 0 R (1556) 2715 0 R (1557) 2716 0 R (1558) 2717 0 R (1559) 2718 0 R (1560) 2719 0 R (1561) 2720 0 R (1562) 2726 0 R (1563) 2727 0 R (1564) 2728 0 R (1565) 2729 0 R (1566) 1282 0 R (1568) 2730 0 R (157) 1461 0 R (1570) 2731 0 R (1571) 2732 0 R (1572) 2733 0 R (1573) 2734 0 R (1574) 2735 0 R (1575) 2736 0 R (1576) 2737 0 R (1577) 2738 0 R (1579) 2739 0 R (158) 1462 0 R (1580) 2740 0 R (1581) 2741 0 R (1582) 2742 0 R (1583) 2743 0 R (1584) 2744 0 R (1585) 2745 0 R (1586) 2746 0 R (1588) 2747 0 R (1589) 2748 0 R (159) 1463 0 R (1590) 2749 0 R (1591) 2750 0 R (1592) 2751 0 R (1593) 2752 0 R (1594) 2753 0 R (1595) 2754 0 R (1596) 2755 0 R (1597) 2756 0 R (1598) 2757 0 R (1599) 2758 0 R (16) 1305 0 R (160) 1464 0 R (1600) 1283 0 R (1602) 2759 0 R (1604) 2760 0 R (1605) 2761 0 R (1606) 2762 0 R (1608) 2763 0 R (1609) 2764 0 R (161) 1465 0 R (1610) 2765 0 R (1611) 2766 0 R (1612) 2767 0 R (1614) 2768 0 R (1615) 2769 0 R (1616) 2774 0 R (1618) 2775 0 R (1619) 2776 0 R (162) 1466 0 R (1620) 2777 0 R (1621) 2778 0 R (1622) 2779 0 R (1624) 2780 0 R (1625) 2781 0 R (1626) 2782 0 R (1628) 2783 0 R (1629) 2784 0 R (163) 1270 0 R (1630) 2785 0 R (1631) 2786 0 R (1632) 2787 0 R (1634) 2788 0 R (1635) 2789 0 R (1636) 2790 0 R (1638) 2791 0 R (1639) 2792 0 R (1640) 2793 0 R (1641) 2794 0 R (1642) 2795 0 R (1644) 2796 0 R (1645) 2797 0 R (1646) 2798 0 R (1648) 2799 0 R (1649) 2800 0 R (165) 1467 0 R (1650) 2801 0 R (1651) 2802 0 R (1652) 2803 0 R (1653) 2804 0 R (1655) 2805 0 R (1656) 2806 0 R (1657) 2807 0 R (1659) 2808 0 R (166) 1468 0 R (1660) 2809 0 R (1661) 2810 0 R (1662) 2811 0 R (1663) 2812 0 R (1665) 2813 0 R (1666) 2814 0 R (1667) 2815 0 R (1669) 2816 0 R (167) 1469 0 R (1670) 2817 0 R (1671) 2818 0 R (1672) 2819 0 R (1673) 2820 0 R (1674) 2821 0 R (1676) 2822 0 R (1677) 2823 0 R (1678) 2824 0 R (168) 1470 0 R (1680) 2825 0 R (1681) 2826 0 R (1682) 2827 0 R (1683) 2828 0 R (1684) 2829 0 R (1685) 2830 0 R (1687) 2831 0 R (1688) 2832 0 R (1689) 2837 0 R (169) 1471 0 R (1691) 2838 0 R (1692) 2839 0 R (1693) 2840 0 R (1694) 2841 0 R (1695) 2842 0 R (1697) 2843 0 R (1698) 2844 0 R (1699) 2845 0 R (17) 1308 0 R (170) 1472 0 R (1701) 2846 0 R (1702) 2847 0 R (1703) 2848 0 R (1704) 2849 0 R (1705) 2850 0 R (1706) 2851 0 R (1707) 2852 0 R (1709) 2853 0 R (171) 1473 0 R (1710) 2854 0 R (1711) 2855 0 R (1713) 2856 0 R (1714) 2857 0 R (1715) 2858 0 R (1716) 2859 0 R (1717) 2860 0 R (1718) 2861 0 R (172) 1474 0 R (1720) 2862 0 R (1721) 2863 0 R (1722) 2864 0 R (1724) 2865 0 R (1725) 2866 0 R (1726) 2867 0 R (1727) 2868 0 R (1728) 2869 0 R (1729) 2870 0 R (173) 1475 0 R (1731) 2871 0 R (1732) 2872 0 R (1733) 2873 0 R (1735) 2874 0 R (1736) 2875 0 R (1737) 2876 0 R (1738) 2877 0 R (1739) 2878 0 R (174) 1476 0 R (1740) 2879 0 R (1742) 2880 0 R (1743) 2881 0 R (1744) 2882 0 R (1746) 2883 0 R (1747) 2884 0 R (1748) 2885 0 R (1749) 2886 0 R (175) 1477 0 R (1750) 2887 0 R (1751) 2888 0 R (1753) 2889 0 R (1754) 2890 0 R (1755) 2891 0 R (1757) 2892 0 R (1758) 2893 0 R (1759) 2894 0 R (176) 1478 0 R (1760) 2895 0 R (1761) 2896 0 R (1763) 2897 0 R (1764) 2904 0 R (1765) 2905 0 R (1766) 2906 0 R (1767) 2907 0 R (1768) 2908 0 R (1769) 2909 0 R (177) 1479 0 R (1770) 2910 0 R (1771) 2911 0 R (1772) 2912 0 R (1773) 2913 0 R (1774) 2914 0 R (1775) 2915 0 R (1776) 2916 0 R (1777) 2917 0 R (1778) 2918 0 R (1779) 2919 0 R (178) 1480 0 R (1780) 2920 0 R (1781) 2925 0 R (1782) 2926 0 R (1785) 2903 0 R (1787) 2936 0 R (1788) 2937 0 R (1789) 2938 0 R (179) 1481 0 R (1790) 2939 0 R (1791) 2940 0 R (1792) 2941 0 R (1793) 2942 0 R (1794) 2943 0 R (1795) 2944 0 R (1796) 2945 0 R (1797) 2946 0 R (1798) 2947 0 R (1799) 2948 0 R (18) 1309 0 R (180) 1482 0 R (1800) 2949 0 R (1801) 2950 0 R (1802) 2951 0 R (1803) 2952 0 R (1804) 2953 0 R (1805) 2954 0 R (1806) 2955 0 R (1807) 2956 0 R (1808) 2957 0 R (1809) 2958 0 R (181) 1483 0 R (1810) 2959 0 R (1811) 2960 0 R (1812) 2961 0 R (1813) 2962 0 R (1814) 2963 0 R (1815) 2964 0 R (1816) 2965 0 R (1817) 2966 0 R (1818) 2967 0 R (1819) 2968 0 R (182) 1484 0 R (1820) 2969 0 R (1821) 2970 0 R (1822) 2971 0 R (1823) 2972 0 R (1824) 2973 0 R (1825) 2974 0 R (1826) 2975 0 R (1827) 2976 0 R (1828) 1284 0 R (183) 1485 0 R (1830) 2977 0 R (1832) 2978 0 R (1833) 2979 0 R (1834) 2980 0 R (1836) 2981 0 R (1837) 2982 0 R (1838) 2983 0 R (1839) 2984 0 R (184) 1486 0 R (1840) 2985 0 R (1842) 2986 0 R (1843) 2987 0 R (1844) 2988 0 R (1846) 2989 0 R (1847) 2990 0 R (1848) 2991 0 R (1849) 2992 0 R (185) 1487 0 R (1850) 2993 0 R (1851) 2994 0 R (1852) 2995 0 R (1854) 2996 0 R (1855) 2997 0 R (1856) 2998 0 R (1858) 3003 0 R (1859) 3004 0 R (186) 1488 0 R (1860) 3005 0 R (1861) 3006 0 R (1862) 3007 0 R (1863) 3008 0 R (1865) 3009 0 R (1866) 3010 0 R (1867) 3011 0 R (1869) 3012 0 R (187) 1489 0 R (1870) 3013 0 R (1871) 3014 0 R (1872) 3015 0 R (1873) 3016 0 R (1875) 3017 0 R (1876) 3018 0 R (1877) 3019 0 R (1879) 3020 0 R (188) 1490 0 R (1880) 3021 0 R (1881) 3022 0 R (1882) 3023 0 R (1883) 3024 0 R (1884) 3025 0 R (1885) 3026 0 R (1886) 3027 0 R (1887) 3028 0 R (1888) 3029 0 R (1889) 3030 0 R (189) 1491 0 R (1890) 3031 0 R (1891) 3032 0 R (1892) 1285 0 R (1894) 3033 0 R (1896) 3034 0 R (1897) 3035 0 R (1898) 3036 0 R (19) 1310 0 R (190) 1492 0 R (1900) 3037 0 R (1901) 3038 0 R (1902) 3039 0 R (1903) 3040 0 R (1904) 3041 0 R (1906) 3042 0 R (1907) 3043 0 R (1908) 3044 0 R (191) 1493 0 R (1910) 3045 0 R (1911) 3046 0 R (1912) 3047 0 R (1913) 3048 0 R (1914) 3049 0 R (1916) 3050 0 R (1917) 3051 0 R (1918) 3056 0 R (192) 1494 0 R (1920) 3057 0 R (1921) 3058 0 R (1922) 3059 0 R (1923) 3060 0 R (1924) 3061 0 R (1926) 3062 0 R (1927) 3063 0 R (1928) 3064 0 R (193) 1495 0 R (1930) 3065 0 R (1931) 3066 0 R (1932) 3067 0 R (1933) 3068 0 R (1934) 3069 0 R (1936) 3070 0 R (1937) 3071 0 R (1938) 3072 0 R (194) 1496 0 R (1940) 3073 0 R (1941) 3074 0 R (1942) 3075 0 R (1943) 3076 0 R (1944) 3077 0 R (1946) 3078 0 R (1947) 3079 0 R (1948) 3080 0 R (195) 1497 0 R (1950) 3081 0 R (1951) 3082 0 R (1952) 3083 0 R (1953) 3084 0 R (1954) 3085 0 R (1956) 3086 0 R (1957) 3087 0 R (1958) 3088 0 R (196) 1498 0 R (1960) 3089 0 R (1961) 3090 0 R (1962) 3091 0 R (1963) 3092 0 R (1964) 3093 0 R (1966) 3094 0 R (1967) 3095 0 R (1968) 3096 0 R (197) 1499 0 R (1970) 3097 0 R (1971) 3098 0 R (1972) 3099 0 R (1973) 3100 0 R (1974) 3101 0 R (1976) 3102 0 R (1977) 3103 0 R (1978) 3104 0 R (1979) 3105 0 R (198) 1500 0 R (1980) 3106 0 R (1981) 3107 0 R (1982) 3108 0 R (1983) 3109 0 R (1985) 3110 0 R (1986) 3115 0 R (1987) 3116 0 R (1988) 3117 0 R (1989) 3118 0 R (199) 1501 0 R (1990) 3119 0 R (1991) 3120 0 R (1992) 3121 0 R (1994) 3122 0 R (1995) 3123 0 R (1996) 3124 0 R (1997) 3125 0 R (1998) 3126 0 R (1999) 3127 0 R (2.0) 6 0 R (20) 1311 0 R (200) 1502 0 R (2000) 3128 0 R (2001) 3129 0 R (2002) 3130 0 R (2003) 3131 0 R (2004) 3132 0 R (2005) 3133 0 R (2006) 3134 0 R (2007) 3135 0 R (2008) 3136 0 R (2009) 3137 0 R (201) 1503 0 R (2010) 3138 0 R (2011) 3139 0 R (2012) 3140 0 R (2013) 3141 0 R (2014) 3142 0 R (2015) 3143 0 R (2016) 3144 0 R (2017) 3145 0 R (2018) 3146 0 R (2019) 3147 0 R (202) 1504 0 R (2020) 3148 0 R (2021) 3149 0 R (2022) 3150 0 R (2023) 3151 0 R (2024) 3152 0 R (2025) 3153 0 R (2026) 3154 0 R (2027) 3155 0 R (2028) 3156 0 R (2029) 3157 0 R (203) 1505 0 R (2030) 3158 0 R (2031) 3159 0 R (2032) 1286 0 R (2034) 3160 0 R (2036) 3161 0 R (2037) 3162 0 R (2038) 3163 0 R (204) 1506 0 R (2040) 3164 0 R (2041) 3165 0 R (2042) 3166 0 R (2043) 3167 0 R (2044) 3168 0 R (2045) 3169 0 R (2047) 3170 0 R (2048) 3171 0 R (2049) 3172 0 R (205) 1507 0 R (2051) 3177 0 R (2052) 3178 0 R (2053) 3179 0 R (2054) 3180 0 R (2055) 3181 0 R (2056) 3182 0 R (2058) 3183 0 R (2059) 3184 0 R (206) 1508 0 R (2060) 3185 0 R (2062) 3186 0 R (2063) 3187 0 R (2064) 3188 0 R (2065) 3189 0 R (2066) 3190 0 R (2067) 3191 0 R (2069) 3192 0 R (207) 1509 0 R (2070) 3193 0 R (2071) 3194 0 R (2073) 3195 0 R (2074) 3196 0 R (2075) 3197 0 R (2076) 3198 0 R (2077) 3199 0 R (2078) 3200 0 R (2079) 3201 0 R (208) 1510 0 R (2081) 3202 0 R (2082) 3203 0 R (2083) 3204 0 R (2085) 3205 0 R (2086) 3206 0 R (2087) 3207 0 R (2088) 3208 0 R (2089) 3209 0 R (209) 1511 0 R (2091) 3210 0 R (2092) 3211 0 R (2093) 3212 0 R (2095) 3213 0 R (2097) 3214 0 R (2098) 3215 0 R (21) 1312 0 R (210) 1512 0 R (2100) 3216 0 R (2101) 3217 0 R (2102) 3218 0 R (2104) 3219 0 R (2105) 3220 0 R (2106) 3221 0 R (2107) 3222 0 R (2108) 3223 0 R (2109) 3224 0 R (211) 1513 0 R (2111) 3225 0 R (2112) 3226 0 R (2113) 3227 0 R (2115) 3228 0 R (2116) 3229 0 R (2117) 3230 0 R (2118) 3231 0 R (2119) 3232 0 R (212) 1514 0 R (2121) 3233 0 R (2122) 3234 0 R (2123) 3239 0 R (2125) 3240 0 R (2126) 3241 0 R (2127) 3242 0 R (2128) 3243 0 R (2129) 3244 0 R (213) 1515 0 R (2131) 3245 0 R (2132) 3246 0 R (2133) 3247 0 R (2135) 3248 0 R (2136) 3249 0 R (2137) 3250 0 R (2138) 3251 0 R (2139) 3252 0 R (214) 1516 0 R (2141) 3253 0 R (2142) 3254 0 R (2143) 3255 0 R (2145) 3256 0 R (2146) 3257 0 R (2147) 3258 0 R (2148) 3259 0 R (2149) 3260 0 R (215) 1517 0 R (2151) 3261 0 R (2152) 3262 0 R (2153) 3263 0 R (2155) 3264 0 R (2156) 3265 0 R (2157) 3266 0 R (2158) 3267 0 R (2159) 3268 0 R (216) 1518 0 R (2161) 3269 0 R (2162) 3270 0 R (2163) 3271 0 R (2165) 3272 0 R (2166) 3273 0 R (2167) 3274 0 R (2168) 3275 0 R (2169) 3276 0 R (217) 1271 0 R (2171) 3277 0 R (2172) 3278 0 R (2173) 3279 0 R (2175) 3280 0 R (2176) 3281 0 R (2177) 3282 0 R (2178) 3283 0 R (2179) 3284 0 R (2181) 3285 0 R (2182) 3286 0 R (2183) 3287 0 R (2185) 3288 0 R (2186) 3289 0 R (2187) 3290 0 R (2188) 3291 0 R (2189) 3292 0 R (219) 1519 0 R (2191) 3293 0 R (2192) 3294 0 R (2193) 3300 0 R (2195) 3301 0 R (2196) 3302 0 R (2197) 3303 0 R (2198) 3304 0 R (2199) 3305 0 R (22) 1313 0 R (220) 1520 0 R (2200) 3306 0 R (2202) 3307 0 R (2203) 3308 0 R (2204) 3309 0 R (2206) 3310 0 R (2207) 3311 0 R (2208) 3312 0 R (2209) 3313 0 R (221) 1521 0 R (2210) 3314 0 R (2212) 3315 0 R (2213) 3316 0 R (2214) 3317 0 R (2216) 3318 0 R (2217) 3319 0 R (2218) 3320 0 R (2219) 3321 0 R (222) 1522 0 R (2220) 3322 0 R (2221) 3323 0 R (2222) 3324 0 R (2223) 3325 0 R (2224) 3326 0 R (2225) 3327 0 R (2226) 3328 0 R (2227) 3329 0 R (2228) 3330 0 R (2229) 3331 0 R (223) 1523 0 R (2230) 3332 0 R (2231) 3333 0 R (2232) 3334 0 R (2233) 3335 0 R (2234) 3336 0 R (2235) 3337 0 R (2236) 3338 0 R (2237) 3339 0 R (2238) 3340 0 R (2239) 3341 0 R (224) 1524 0 R (2240) 3342 0 R (2241) 3343 0 R (2242) 3344 0 R (2243) 3345 0 R (2244) 3346 0 R (2245) 3347 0 R (2246) 3348 0 R (2247) 3349 0 R (2248) 3350 0 R (2249) 3351 0 R (225) 1530 0 R (2250) 3352 0 R (2251) 3353 0 R (2252) 3354 0 R (2253) 3355 0 R (2254) 3356 0 R (2255) 3357 0 R (2256) 3358 0 R (2257) 3363 0 R (2258) 3364 0 R (2259) 3365 0 R (226) 1531 0 R (2260) 3366 0 R (2261) 3367 0 R (2262) 3368 0 R (227) 1532 0 R (2274) 3370 0 R (2275) 3371 0 R (2276) 3372 0 R (2277) 3373 0 R (228) 1272 0 R (23) 1314 0 R (230) 1533 0 R (231) 1534 0 R (2316) 3375 0 R (2317) 3376 0 R (2318) 3377 0 R (2319) 3378 0 R (232) 1535 0 R (233) 1536 0 R (2331) 3380 0 R (2332) 3381 0 R (2333) 3382 0 R (2334) 3383 0 R (234) 1537 0 R (235) 1538 0 R (236) 1539 0 R (2364) 3385 0 R (2365) 3386 0 R (2366) 3387 0 R (2367) 3388 0 R (237) 1540 0 R (238) 1541 0 R (239) 1542 0 R (24) 1315 0 R (240) 1543 0 R (241) 1544 0 R (2415) 3394 0 R (2416) 3395 0 R (2417) 3396 0 R (2418) 3397 0 R (2419) 3398 0 R (242) 1545 0 R (243) 1546 0 R (244) 1547 0 R (245) 1548 0 R (2450) 3400 0 R (2451) 3401 0 R (2452) 3402 0 R (2453) 3403 0 R (246) 1549 0 R (247) 1550 0 R (248) 1551 0 R (249) 1552 0 R (2496) 3405 0 R (2497) 1287 0 R (2499) 3410 0 R (25) 1316 0 R (250) 1553 0 R (2501) 3411 0 R (2502) 3412 0 R (2503) 3413 0 R (2505) 3414 0 R (2506) 3415 0 R (2507) 3416 0 R (2508) 3417 0 R (2509) 3418 0 R (251) 1554 0 R (2511) 3419 0 R (2512) 3420 0 R (2513) 3421 0 R (2515) 3422 0 R (2516) 3423 0 R (2517) 3424 0 R (2518) 3425 0 R (2519) 3426 0 R (252) 1555 0 R (2520) 3427 0 R (2521) 3428 0 R (2522) 3429 0 R (2523) 3430 0 R (2524) 3431 0 R (2525) 3432 0 R (2526) 1288 0 R (2528) 3433 0 R (253) 1556 0 R (2530) 3434 0 R (2531) 3435 0 R (2532) 3436 0 R (2534) 3437 0 R (2535) 3438 0 R (2536) 3439 0 R (2537) 3440 0 R (2538) 3441 0 R (2539) 3442 0 R (254) 1557 0 R (2540) 3443 0 R (2541) 3444 0 R (2543) 3445 0 R (2544) 3446 0 R (2545) 3447 0 R (2547) 3448 0 R (2548) 3449 0 R (2549) 3450 0 R (255) 1558 0 R (2550) 3451 0 R (2551) 3452 0 R (2552) 3453 0 R (2553) 3454 0 R (2554) 3455 0 R (2556) 3456 0 R (2557) 3457 0 R (2558) 3458 0 R (256) 1559 0 R (2560) 3463 0 R (2561) 3464 0 R (2562) 3465 0 R (2563) 3466 0 R (2564) 3467 0 R (2565) 3468 0 R (2566) 3469 0 R (2568) 3470 0 R (2569) 3471 0 R (257) 1560 0 R (2570) 3472 0 R (2572) 3473 0 R (2573) 3474 0 R (2574) 3475 0 R (2575) 3476 0 R (2576) 3477 0 R (2577) 3478 0 R (2578) 3479 0 R (2579) 3480 0 R (258) 1561 0 R (2581) 3481 0 R (2582) 3482 0 R (2583) 3483 0 R (2585) 3484 0 R (2586) 3485 0 R (2587) 3486 0 R (2588) 3487 0 R (2589) 3488 0 R (259) 1562 0 R (2590) 3489 0 R (2591) 3490 0 R (2592) 3491 0 R (2593) 3492 0 R (2594) 3493 0 R (2595) 3494 0 R (2596) 3495 0 R (2597) 3496 0 R (2598) 3497 0 R (2599) 3498 0 R (26) 1317 0 R (260) 1563 0 R (2600) 3499 0 R (2601) 3500 0 R (2602) 3501 0 R (2603) 3502 0 R (2604) 3503 0 R (2605) 3504 0 R (2606) 3505 0 R (2607) 3506 0 R (2608) 3507 0 R (2609) 3508 0 R (261) 1564 0 R (2610) 3509 0 R (2611) 3510 0 R (2612) 3511 0 R (2613) 3512 0 R (2614) 3513 0 R (2615) 3514 0 R (2616) 3515 0 R (2617) 3516 0 R (2618) 3517 0 R (2619) 3518 0 R (262) 1565 0 R (2620) 3519 0 R (2621) 3524 0 R (2622) 3525 0 R (2623) 3526 0 R (2624) 1289 0 R (2626) 3527 0 R (2628) 3528 0 R (2629) 3529 0 R (263) 1566 0 R (2630) 3530 0 R (2632) 3531 0 R (2633) 3532 0 R (2634) 3533 0 R (2635) 3534 0 R (2636) 3535 0 R (2637) 3536 0 R (2638) 3537 0 R (264) 1567 0 R (2640) 3538 0 R (2641) 3539 0 R (2642) 3540 0 R (2644) 3541 0 R (2645) 3542 0 R (2646) 3543 0 R (2647) 3544 0 R (2648) 3545 0 R (2649) 3546 0 R (265) 1568 0 R (2650) 3547 0 R (2652) 3548 0 R (2653) 3549 0 R (2654) 3550 0 R (2656) 3551 0 R (2657) 3552 0 R (2658) 3553 0 R (2659) 3554 0 R (266) 1569 0 R (2660) 3555 0 R (2662) 3556 0 R (2663) 3557 0 R (2664) 3558 0 R (2666) 3559 0 R (2667) 3560 0 R (2668) 3561 0 R (2669) 3562 0 R (267) 1570 0 R (2670) 3563 0 R (2671) 3564 0 R (2672) 3565 0 R (2674) 3566 0 R (2675) 3567 0 R (2676) 3568 0 R (2678) 3569 0 R (2679) 3570 0 R (268) 1571 0 R (2680) 3571 0 R (2681) 3572 0 R (2682) 3573 0 R (2683) 3574 0 R (2684) 3575 0 R (2686) 3576 0 R (2687) 3577 0 R (2688) 3578 0 R (269) 1572 0 R (2690) 3584 0 R (2691) 3585 0 R (2692) 3586 0 R (2693) 3587 0 R (2694) 3588 0 R (2696) 3589 0 R (2697) 3590 0 R (2698) 3591 0 R (27) 1266 0 R (270) 1573 0 R (2700) 3592 0 R (2701) 3593 0 R (2702) 3594 0 R (2703) 3595 0 R (2704) 3596 0 R (2706) 3597 0 R (2707) 3598 0 R (2708) 3599 0 R (271) 1574 0 R (2710) 3600 0 R (2711) 3601 0 R (2712) 3602 0 R (2713) 3603 0 R (2714) 3604 0 R (2716) 3605 0 R (2717) 3606 0 R (2718) 3607 0 R (272) 1575 0 R (2720) 3608 0 R (2721) 3609 0 R (2722) 3610 0 R (2723) 3611 0 R (2724) 3612 0 R (2726) 3613 0 R (2727) 3614 0 R (2728) 3615 0 R (273) 1576 0 R (2730) 3616 0 R (2731) 3617 0 R (2732) 3618 0 R (2733) 3619 0 R (2734) 3620 0 R (2736) 3621 0 R (2737) 3622 0 R (2738) 3623 0 R (274) 1577 0 R (2740) 3624 0 R (2741) 3625 0 R (2742) 3626 0 R (2743) 3627 0 R (2744) 3628 0 R (2745) 3629 0 R (2746) 3630 0 R (2747) 3631 0 R (2748) 3632 0 R (2749) 3633 0 R (275) 1578 0 R (2750) 3634 0 R (2751) 3635 0 R (2752) 3636 0 R (2753) 3637 0 R (2754) 3638 0 R (2755) 3639 0 R (2756) 3640 0 R (2757) 3645 0 R (2758) 3646 0 R (2759) 3647 0 R (276) 1579 0 R (2760) 3648 0 R (2761) 3649 0 R (2762) 3650 0 R (2763) 3651 0 R (2764) 1290 0 R (2766) 3652 0 R (2768) 3653 0 R (2769) 3654 0 R (277) 1584 0 R (2770) 3655 0 R (2772) 3656 0 R (2773) 3657 0 R (2774) 3658 0 R (2775) 3659 0 R (2776) 3660 0 R (2778) 3661 0 R (2779) 3662 0 R (278) 1585 0 R (2780) 3663 0 R (2782) 3664 0 R (2783) 3665 0 R (2784) 3666 0 R (2785) 3667 0 R (2786) 3668 0 R (2788) 3669 0 R (2789) 3670 0 R (279) 1529 0 R (2790) 3671 0 R (2792) 3672 0 R (2793) 3673 0 R (2794) 3674 0 R (2795) 3675 0 R (2796) 3676 0 R (2798) 3677 0 R (2799) 3678 0 R (280) 1586 0 R (2800) 3679 0 R (2802) 3680 0 R (2803) 3681 0 R (2804) 3682 0 R (2805) 3683 0 R (2806) 3684 0 R (2808) 3685 0 R (2809) 3686 0 R (281) 1587 0 R (2810) 3687 0 R (2812) 3688 0 R (2813) 3689 0 R (2814) 3690 0 R (2815) 3691 0 R (2816) 3692 0 R (2817) 3693 0 R (2819) 3694 0 R (282) 1588 0 R (2820) 3695 0 R (2821) 3696 0 R (2823) 3701 0 R (2824) 3702 0 R (2825) 3703 0 R (2826) 3704 0 R (2827) 3705 0 R (2828) 3706 0 R (283) 1589 0 R (2830) 3707 0 R (2831) 3708 0 R (2832) 3709 0 R (2834) 3710 0 R (2835) 3711 0 R (2836) 3712 0 R (2837) 3713 0 R (2838) 3714 0 R (2839) 3715 0 R (284) 1590 0 R (2840) 3716 0 R (2841) 3717 0 R (2842) 3718 0 R (2844) 3719 0 R (2845) 3720 0 R (2846) 3721 0 R (2848) 3722 0 R (2849) 3723 0 R (285) 1591 0 R (2850) 3724 0 R (2851) 3725 0 R (2852) 3726 0 R (2853) 3727 0 R (2854) 3728 0 R (2855) 3729 0 R (2856) 3730 0 R (2858) 3731 0 R (2859) 3732 0 R (286) 1592 0 R (2860) 3733 0 R (2862) 3734 0 R (2863) 3735 0 R (2864) 3736 0 R (2865) 3737 0 R (2866) 3738 0 R (2868) 3739 0 R (2869) 3740 0 R (287) 1593 0 R (2870) 3741 0 R (2872) 3742 0 R (2873) 3743 0 R (2874) 3744 0 R (2875) 3745 0 R (2876) 3746 0 R (2877) 3747 0 R (2878) 3748 0 R (288) 1594 0 R (2880) 3749 0 R (2881) 3750 0 R (2882) 3751 0 R (2884) 3752 0 R (2885) 3753 0 R (2886) 3754 0 R (2887) 3755 0 R (2888) 3756 0 R (2889) 3757 0 R (289) 1595 0 R (2890) 3758 0 R (2892) 3759 0 R (2893) 3760 0 R (2894) 3761 0 R (2896) 3762 0 R (2897) 3763 0 R (2898) 3764 0 R (2899) 3765 0 R (29) 1318 0 R (290) 1596 0 R (2900) 3766 0 R (2902) 3767 0 R (2903) 3768 0 R (2904) 3773 0 R (2906) 3774 0 R (2907) 3775 0 R (2908) 3776 0 R (2909) 3777 0 R (291) 1597 0 R (2910) 3778 0 R (2911) 3779 0 R (2913) 3780 0 R (2914) 3781 0 R (2915) 3782 0 R (2917) 3783 0 R (2918) 3784 0 R (2919) 3785 0 R (292) 1598 0 R (2920) 3786 0 R (2921) 3787 0 R (2922) 3788 0 R (2924) 3789 0 R (2925) 3790 0 R (2926) 3791 0 R (2928) 3792 0 R (2929) 3793 0 R (293) 1599 0 R (2930) 3794 0 R (2931) 3795 0 R (2932) 3796 0 R (2933) 3797 0 R (2935) 3798 0 R (2936) 3799 0 R (2937) 3800 0 R (2939) 3801 0 R (294) 1600 0 R (2940) 3802 0 R (2941) 3803 0 R (2942) 3804 0 R (2943) 3805 0 R (2944) 3806 0 R (2946) 3807 0 R (2947) 3808 0 R (2948) 3809 0 R (295) 1601 0 R (2950) 3810 0 R (2951) 3811 0 R (2952) 3812 0 R (2953) 3813 0 R (2954) 3814 0 R (2955) 3815 0 R (2957) 3816 0 R (2958) 3817 0 R (2959) 3818 0 R (296) 1602 0 R (2961) 3819 0 R (2962) 3820 0 R (2963) 3821 0 R (2964) 3822 0 R (2965) 3823 0 R (2967) 3824 0 R (2968) 3825 0 R (2969) 3826 0 R (297) 1603 0 R (2971) 3827 0 R (2972) 3828 0 R (2973) 3829 0 R (2974) 3830 0 R (2975) 3831 0 R (2977) 3832 0 R (2978) 3833 0 R (2979) 3838 0 R (298) 1604 0 R (2981) 3839 0 R (2982) 3840 0 R (2983) 3841 0 R (2984) 3842 0 R (2985) 3843 0 R (2987) 3844 0 R (2988) 3845 0 R (2989) 3846 0 R (299) 1605 0 R (2991) 3847 0 R (2992) 3848 0 R (2993) 3849 0 R (2994) 3850 0 R (2995) 3851 0 R (2996) 3852 0 R (2998) 3853 0 R (2999) 3854 0 R (3.0) 10 0 R (3.1.1) 14 0 R (3.2.1) 18 0 R (3.3.1) 22 0 R (3.4.1) 26 0 R (30) 1319 0 R (300) 1606 0 R (3000) 3855 0 R (3002) 3856 0 R (3003) 3857 0 R (3004) 3858 0 R (3005) 3859 0 R (3006) 3860 0 R (3007) 3861 0 R (3009) 3862 0 R (301) 1607 0 R (3010) 3863 0 R (3011) 3864 0 R (3013) 3865 0 R (3014) 3866 0 R (3015) 3867 0 R (3016) 3868 0 R (3017) 3869 0 R (3018) 3870 0 R (3019) 3871 0 R (302) 1608 0 R (3020) 3872 0 R (3021) 3873 0 R (3022) 3874 0 R (3023) 3875 0 R (3024) 3876 0 R (3025) 3877 0 R (3026) 3878 0 R (3027) 3879 0 R (3028) 3880 0 R (3029) 3881 0 R (303) 1609 0 R (3030) 3882 0 R (3031) 3883 0 R (3032) 3884 0 R (3033) 3885 0 R (3034) 3886 0 R (3035) 3887 0 R (3036) 3888 0 R (3037) 3889 0 R (3038) 3894 0 R (3039) 3895 0 R (304) 1610 0 R (3040) 3896 0 R (3041) 3897 0 R (3042) 3898 0 R (3043) 3899 0 R (3044) 3900 0 R (3045) 3901 0 R (3046) 3902 0 R (3047) 3903 0 R (3048) 3904 0 R (3049) 3905 0 R (305) 1611 0 R (3050) 3906 0 R (3051) 3907 0 R (3052) 3908 0 R (3053) 3909 0 R (3054) 3910 0 R (3055) 3911 0 R (3056) 3912 0 R (3057) 3913 0 R (3058) 3914 0 R (3059) 3915 0 R (306) 1612 0 R (3060) 3916 0 R (3061) 3917 0 R (3062) 3918 0 R (3063) 3919 0 R (3064) 3920 0 R (3065) 3921 0 R (3066) 3922 0 R (3067) 3923 0 R (3068) 3924 0 R (3069) 3925 0 R (307) 1613 0 R (3070) 3926 0 R (3071) 3927 0 R (3072) 3928 0 R (3073) 1291 0 R (3075) 3929 0 R (3077) 3930 0 R (3078) 3931 0 R (3079) 3932 0 R (308) 1614 0 R (3081) 3933 0 R (3083) 3934 0 R (3084) 3935 0 R (3086) 3936 0 R (3087) 3937 0 R (3088) 3938 0 R (309) 1615 0 R (3090) 3939 0 R (3091) 3940 0 R (3092) 3941 0 R (3093) 3942 0 R (3094) 3943 0 R (3095) 3944 0 R (3097) 3945 0 R (3098) 3946 0 R (3099) 3947 0 R (31) 1320 0 R (310) 1616 0 R (3101) 3948 0 R (3102) 3949 0 R (3103) 3950 0 R (3104) 3951 0 R (3105) 3952 0 R (3107) 3953 0 R (3108) 3954 0 R (3109) 3955 0 R (311) 1617 0 R (3111) 3961 0 R (3113) 3962 0 R (3114) 3963 0 R (3116) 3964 0 R (3117) 3965 0 R (3118) 3966 0 R (312) 1618 0 R (3120) 3967 0 R (3121) 3968 0 R (3122) 3969 0 R (3123) 3970 0 R (3124) 3971 0 R (3126) 3972 0 R (3127) 3973 0 R (3128) 3974 0 R (313) 1619 0 R (3130) 3975 0 R (3131) 3976 0 R (3132) 3977 0 R (3133) 3978 0 R (3134) 3979 0 R (3135) 3980 0 R (3137) 3981 0 R (3138) 3982 0 R (3139) 3983 0 R (314) 1620 0 R (3141) 3984 0 R (3143) 3985 0 R (3144) 3986 0 R (3146) 3987 0 R (3147) 3988 0 R (3148) 3989 0 R (315) 1621 0 R (3150) 3990 0 R (3152) 3991 0 R (3153) 3992 0 R (3155) 3993 0 R (3156) 3994 0 R (3157) 3995 0 R (3159) 3996 0 R (316) 1622 0 R (3161) 3997 0 R (3162) 3998 0 R (3164) 3999 0 R (3165) 4000 0 R (3166) 4001 0 R (3168) 4002 0 R (317) 1623 0 R (3170) 4003 0 R (3171) 4004 0 R (3173) 4005 0 R (3174) 4006 0 R (3175) 4012 0 R (3177) 4013 0 R (3178) 4014 0 R (3179) 4015 0 R (318) 1624 0 R (3180) 4016 0 R (3181) 4017 0 R (3182) 4018 0 R (3184) 4019 0 R (3185) 4020 0 R (3186) 4021 0 R (3188) 4022 0 R (319) 1625 0 R (3190) 4023 0 R (3191) 4024 0 R (3193) 4025 0 R (3194) 4026 0 R (3195) 4027 0 R (3197) 4028 0 R (3198) 4029 0 R (3199) 4030 0 R (320) 1626 0 R (3200) 4031 0 R (3201) 4032 0 R (3203) 4033 0 R (3204) 4034 0 R (3205) 4035 0 R (3207) 4036 0 R (3208) 4037 0 R (3209) 4038 0 R (321) 1627 0 R (3210) 4039 0 R (3211) 4040 0 R (3212) 4041 0 R (3213) 4042 0 R (3215) 4043 0 R (3216) 4044 0 R (3217) 4045 0 R (3219) 4046 0 R (322) 1628 0 R (3220) 4047 0 R (3221) 4048 0 R (3222) 4049 0 R (3223) 4050 0 R (3224) 4051 0 R (3225) 4052 0 R (3226) 4053 0 R (3227) 4054 0 R (3228) 4055 0 R (3229) 4056 0 R (323) 1629 0 R (3230) 4057 0 R (3231) 4058 0 R (3232) 4059 0 R (3233) 4060 0 R (3234) 4061 0 R (3235) 4062 0 R (3236) 4063 0 R (3237) 4064 0 R (3238) 4065 0 R (3239) 4066 0 R (324) 1635 0 R (3240) 4071 0 R (3241) 4072 0 R (3242) 4073 0 R (3243) 4011 0 R (3245) 4074 0 R (3246) 4075 0 R (3247) 4076 0 R (3248) 4077 0 R (3249) 4078 0 R (325) 1636 0 R (3250) 4079 0 R (3251) 4080 0 R (3252) 4081 0 R (3253) 4082 0 R (3254) 4083 0 R (3255) 4084 0 R (3256) 4085 0 R (3257) 4086 0 R (3258) 4087 0 R (3259) 4088 0 R (326) 1637 0 R (3260) 4089 0 R (3261) 4090 0 R (3262) 4091 0 R (3263) 4092 0 R (3264) 1292 0 R (3266) 4093 0 R (3268) 4094 0 R (3269) 4095 0 R (327) 1638 0 R (3270) 4096 0 R (3272) 4097 0 R (3273) 4098 0 R (3274) 4099 0 R (3275) 4100 0 R (3276) 4101 0 R (3278) 4102 0 R (3279) 4103 0 R (328) 1639 0 R (3280) 4104 0 R (3282) 4105 0 R (3283) 4106 0 R (3284) 4107 0 R (3285) 4108 0 R (3286) 4109 0 R (3287) 4110 0 R (3288) 4111 0 R (329) 1640 0 R (3290) 4112 0 R (3291) 4113 0 R (3292) 4114 0 R (3294) 4115 0 R (3295) 4116 0 R (3296) 4117 0 R (3297) 4118 0 R (3298) 4119 0 R (3299) 4120 0 R (33) 1321 0 R (330) 1641 0 R (3300) 4121 0 R (3302) 4122 0 R (3303) 4127 0 R (3304) 4128 0 R (3306) 4129 0 R (3307) 4130 0 R (3308) 4131 0 R (3309) 4132 0 R (331) 1642 0 R (3310) 4133 0 R (3312) 4134 0 R (3313) 4135 0 R (3314) 4136 0 R (3316) 4137 0 R (3317) 4138 0 R (3318) 4139 0 R (3319) 4140 0 R (332) 1643 0 R (3320) 4141 0 R (3321) 4142 0 R (3323) 4143 0 R (3324) 4144 0 R (3325) 4145 0 R (3327) 4146 0 R (3328) 4147 0 R (3329) 4148 0 R (333) 1644 0 R (3330) 4149 0 R (3331) 4150 0 R (3332) 4151 0 R (3334) 4152 0 R (3335) 4153 0 R (3336) 4154 0 R (3338) 4155 0 R (3339) 4156 0 R (334) 1645 0 R (3340) 4157 0 R (3341) 4158 0 R (3342) 4159 0 R (3343) 4160 0 R (3345) 4161 0 R (3346) 4162 0 R (3347) 4163 0 R (3349) 4164 0 R (335) 1273 0 R (3350) 4165 0 R (3351) 4166 0 R (3352) 4167 0 R (3353) 4168 0 R (3355) 4169 0 R (3356) 4170 0 R (3357) 4171 0 R (3359) 4172 0 R (3360) 4173 0 R (3361) 4174 0 R (3362) 4175 0 R (3363) 4176 0 R (3365) 4177 0 R (3366) 4178 0 R (3367) 4179 0 R (3369) 4180 0 R (337) 1646 0 R (3370) 4181 0 R (3371) 4182 0 R (3372) 4183 0 R (3373) 4184 0 R (3375) 4185 0 R (3376) 4186 0 R (3377) 4191 0 R (3379) 4192 0 R (338) 1647 0 R (3380) 4193 0 R (3381) 4194 0 R (3382) 4195 0 R (3383) 4196 0 R (3385) 4197 0 R (3386) 4198 0 R (3387) 4199 0 R (3389) 4200 0 R (339) 1648 0 R (3390) 4201 0 R (3391) 4202 0 R (3392) 4203 0 R (3393) 4204 0 R (3395) 4205 0 R (3396) 4206 0 R (3397) 4207 0 R (3399) 4208 0 R (34) 1322 0 R (340) 1649 0 R (3400) 4209 0 R (3401) 4210 0 R (3402) 4211 0 R (3403) 4212 0 R (3405) 4213 0 R (3406) 4214 0 R (3407) 4215 0 R (3409) 4216 0 R (341) 1650 0 R (3410) 4217 0 R (3411) 4218 0 R (3412) 4219 0 R (3413) 4220 0 R (3415) 4221 0 R (3416) 4222 0 R (3417) 4223 0 R (3419) 4224 0 R (342) 1651 0 R (3420) 4225 0 R (3421) 4226 0 R (3422) 4227 0 R (3423) 4228 0 R (3425) 4229 0 R (3426) 4230 0 R (3427) 4231 0 R (3429) 4232 0 R (343) 1652 0 R (3430) 4233 0 R (3431) 4234 0 R (3432) 4235 0 R (3433) 4236 0 R (3435) 4237 0 R (3436) 4238 0 R (3437) 4239 0 R (3439) 4240 0 R (344) 1653 0 R (3440) 4241 0 R (3441) 4242 0 R (3442) 4243 0 R (3443) 4244 0 R (3445) 4245 0 R (3446) 4246 0 R (3447) 4251 0 R (3449) 4252 0 R (345) 1654 0 R (3450) 4253 0 R (3451) 4254 0 R (3452) 4255 0 R (3453) 4256 0 R (3455) 4257 0 R (3456) 4258 0 R (3457) 4259 0 R (3459) 4260 0 R (346) 1655 0 R (3460) 4261 0 R (3461) 4262 0 R (3462) 4263 0 R (3463) 4264 0 R (3464) 4265 0 R (3466) 4266 0 R (3467) 4267 0 R (3468) 4268 0 R (347) 1656 0 R (3470) 4269 0 R (3471) 4270 0 R (3472) 4271 0 R (3473) 4272 0 R (3474) 4273 0 R (3475) 4274 0 R (3476) 4275 0 R (3478) 4276 0 R (3479) 4277 0 R (348) 1657 0 R (3480) 4278 0 R (3481) 4279 0 R (3482) 4280 0 R (3483) 4281 0 R (3484) 4282 0 R (3485) 4283 0 R (3486) 4284 0 R (3487) 4285 0 R (3488) 4286 0 R (3489) 4287 0 R (349) 1658 0 R (3490) 4288 0 R (3491) 4289 0 R (3492) 4290 0 R (3493) 4291 0 R (3494) 4292 0 R (3495) 4293 0 R (3496) 4294 0 R (3497) 4295 0 R (3498) 4296 0 R (3499) 4297 0 R (35) 1323 0 R (350) 1659 0 R (3500) 4298 0 R (3501) 4299 0 R (3502) 4300 0 R (3503) 4301 0 R (3504) 4302 0 R (3505) 4303 0 R (3506) 4304 0 R (3507) 4305 0 R (3508) 4306 0 R (3509) 4307 0 R (351) 1274 0 R (3510) 4308 0 R (3511) 4309 0 R (3512) 4315 0 R (3513) 4316 0 R (3514) 4317 0 R (3515) 4318 0 R (3516) 4319 0 R (3517) 4320 0 R (3518) 4321 0 R (3519) 4322 0 R (3520) 4323 0 R (3521) 4324 0 R (3522) 4325 0 R (3523) 4326 0 R (3524) 4327 0 R (3525) 4328 0 R (3526) 4329 0 R (3527) 4330 0 R (3528) 4331 0 R (3529) 4332 0 R (353) 1660 0 R (3530) 4333 0 R (3531) 4334 0 R (3532) 4335 0 R (3533) 4336 0 R (3534) 4337 0 R (3535) 4338 0 R (3536) 4339 0 R (3537) 4340 0 R (3538) 4341 0 R (3539) 1293 0 R (354) 1661 0 R (3541) 4342 0 R (3543) 4343 0 R (3544) 4344 0 R (3545) 4345 0 R (3547) 4346 0 R (3548) 4347 0 R (3549) 4348 0 R (355) 1662 0 R (3550) 4349 0 R (3551) 4350 0 R (3552) 4351 0 R (3554) 4352 0 R (3555) 4353 0 R (3556) 4354 0 R (3558) 4355 0 R (3559) 4356 0 R (356) 1663 0 R (3560) 4357 0 R (3561) 4358 0 R (3562) 4359 0 R (3563) 4360 0 R (3564) 4361 0 R (3566) 4362 0 R (3567) 4363 0 R (3568) 4364 0 R (357) 1664 0 R (3570) 4365 0 R (3571) 4366 0 R (3572) 4367 0 R (3573) 4368 0 R (3574) 4369 0 R (3576) 4370 0 R (3577) 4371 0 R (3578) 4372 0 R (358) 1665 0 R (3580) 4377 0 R (3581) 4378 0 R (3582) 4379 0 R (3583) 4380 0 R (3584) 4381 0 R (3586) 4382 0 R (3587) 4383 0 R (3588) 4384 0 R (359) 1666 0 R (3590) 4385 0 R (3591) 4386 0 R (3592) 4387 0 R (3593) 4388 0 R (3594) 4389 0 R (3595) 4390 0 R (3596) 4391 0 R (3597) 4392 0 R (3598) 4393 0 R (3599) 4394 0 R (36) 1324 0 R (360) 1667 0 R (3600) 4395 0 R (3601) 4396 0 R (3602) 4397 0 R (3603) 4398 0 R (3604) 4399 0 R (3605) 4400 0 R (3606) 4401 0 R (3607) 4402 0 R (3608) 4403 0 R (3609) 1294 0 R (361) 1668 0 R (3611) 4404 0 R (3613) 4405 0 R (3614) 4406 0 R (3615) 4407 0 R (3617) 4408 0 R (3618) 4409 0 R (3619) 4410 0 R (362) 1669 0 R (3620) 4411 0 R (3621) 4412 0 R (3623) 4413 0 R (3624) 4414 0 R (3625) 4415 0 R (3627) 4416 0 R (3628) 4417 0 R (3629) 4418 0 R (363) 1670 0 R (3630) 4419 0 R (3631) 4420 0 R (3632) 4421 0 R (3633) 4422 0 R (3634) 4423 0 R (3635) 4424 0 R (3636) 1295 0 R (3638) 4429 0 R (364) 1671 0 R (3640) 4430 0 R (3641) 4431 0 R (3642) 4432 0 R (3644) 4433 0 R (3645) 4434 0 R (3646) 4435 0 R (3647) 4436 0 R (3648) 4437 0 R (365) 1672 0 R (3650) 4438 0 R (3651) 4439 0 R (3652) 4440 0 R (3654) 4441 0 R (3655) 4442 0 R (3656) 4443 0 R (3657) 4444 0 R (3658) 4445 0 R (366) 1673 0 R (3660) 4446 0 R (3661) 4447 0 R (3662) 4448 0 R (3664) 4449 0 R (3666) 4450 0 R (3667) 4451 0 R (3669) 4452 0 R (367) 1275 0 R (3670) 4453 0 R (3671) 4454 0 R (3673) 4455 0 R (3675) 4456 0 R (3676) 4457 0 R (3678) 4458 0 R (3679) 4459 0 R (3680) 4460 0 R (3682) 4461 0 R (3684) 4462 0 R (3685) 4463 0 R (3686) 4464 0 R (3688) 4465 0 R (3689) 4466 0 R (369) 1674 0 R (3690) 4467 0 R (3692) 4468 0 R (3693) 4469 0 R (3694) 4470 0 R (3695) 4471 0 R (3696) 4472 0 R (3698) 4473 0 R (3699) 4474 0 R (370) 1675 0 R (3700) 4475 0 R (3702) 4480 0 R (3704) 4481 0 R (3705) 4482 0 R (3707) 4483 0 R (3708) 4484 0 R (3709) 4485 0 R (371) 1676 0 R (3711) 4486 0 R (3712) 4487 0 R (3713) 4488 0 R (3714) 4489 0 R (3715) 4490 0 R (3717) 4491 0 R (3718) 4492 0 R (3719) 4493 0 R (372) 1677 0 R (3721) 4494 0 R (3722) 4495 0 R (3723) 4496 0 R (3724) 4497 0 R (3725) 4498 0 R (3727) 4499 0 R (3728) 4500 0 R (3729) 4501 0 R (373) 1678 0 R (3731) 4502 0 R (3732) 4503 0 R (3733) 4504 0 R (3734) 4505 0 R (3735) 4506 0 R (3736) 4507 0 R (3738) 4508 0 R (3739) 4509 0 R (374) 1679 0 R (3740) 4510 0 R (3742) 4511 0 R (3743) 4512 0 R (3744) 4513 0 R (3745) 4514 0 R (3746) 4515 0 R (3747) 4516 0 R (3748) 4517 0 R (375) 1680 0 R (3750) 4518 0 R (3751) 4519 0 R (3752) 4520 0 R (3754) 4521 0 R (3755) 4522 0 R (3756) 4523 0 R (3757) 4524 0 R (3758) 4525 0 R (376) 1276 0 R (3760) 4526 0 R (3761) 4527 0 R (3762) 4528 0 R (3764) 4529 0 R (3765) 4530 0 R (3766) 4531 0 R (3767) 4532 0 R (3768) 4533 0 R (3770) 4534 0 R (3771) 4535 0 R (3772) 4541 0 R (3774) 4542 0 R (3775) 4543 0 R (3776) 4544 0 R (3777) 4545 0 R (3778) 4546 0 R (3779) 4547 0 R (378) 1685 0 R (3780) 4548 0 R (3781) 4549 0 R (3782) 4550 0 R (3783) 4551 0 R (3784) 4552 0 R (3785) 4553 0 R (3786) 4554 0 R (3787) 4555 0 R (3788) 4556 0 R (3789) 4557 0 R (3790) 4558 0 R (3791) 4559 0 R (3792) 4560 0 R (3793) 4561 0 R (3794) 4562 0 R (3795) 4563 0 R (3796) 4564 0 R (3797) 4565 0 R (3798) 4566 0 R (3799) 4567 0 R (38) 1328 0 R (380) 1686 0 R (3800) 4568 0 R (3801) 4569 0 R (3802) 4570 0 R (3803) 4571 0 R (3804) 4572 0 R (3805) 4573 0 R (3806) 4574 0 R (3807) 4575 0 R (3808) 4576 0 R (3809) 4577 0 R (381) 1687 0 R (3810) 4578 0 R (3811) 4579 0 R (3812) 1296 0 R (3814) 4580 0 R (3815) 4581 0 R (3816) 4582 0 R (3817) 4583 0 R (3819) 4540 0 R (382) 1688 0 R (3824) 4589 0 R (3825) 4590 0 R (3826) 4591 0 R (3827) 4592 0 R (3828) 4593 0 R (3829) 4594 0 R (383) 1689 0 R (3830) 4595 0 R (3831) 4596 0 R (3832) 4597 0 R (3833) 4598 0 R (3834) 4599 0 R (3835) 4600 0 R (3836) 4601 0 R (3837) 4602 0 R (3838) 4603 0 R (3839) 4604 0 R (3841) 4605 0 R (3842) 4606 0 R (3843) 4607 0 R (3845) 4613 0 R (3846) 4614 0 R (3847) 4615 0 R (3848) 4616 0 R (3849) 4617 0 R (385) 1690 0 R (3850) 4618 0 R (3851) 4619 0 R (3853) 4588 0 R (3858) 4620 0 R (3859) 4621 0 R (386) 1691 0 R (3860) 4622 0 R (3861) 4623 0 R (3862) 4624 0 R (3863) 4625 0 R (3865) 4626 0 R (3866) 4627 0 R (3867) 4628 0 R (3869) 4629 0 R (387) 1692 0 R (3870) 4630 0 R (3871) 4631 0 R (3872) 4632 0 R (3873) 4633 0 R (3874) 4634 0 R (3875) 4635 0 R (3876) 4636 0 R (3877) 4637 0 R (3878) 4638 0 R (3879) 4639 0 R (388) 1693 0 R (3880) 4640 0 R (3881) 4641 0 R (3882) 4642 0 R (3883) 4643 0 R (3885) 4644 0 R (3886) 4645 0 R (3887) 4646 0 R (3889) 4647 0 R (3890) 4648 0 R (3891) 4649 0 R (3892) 4650 0 R (3893) 4651 0 R (3895) 4652 0 R (3896) 4653 0 R (3897) 4654 0 R (3899) 4655 0 R (39) 1329 0 R (390) 1694 0 R (3900) 4656 0 R (3901) 4657 0 R (3902) 4658 0 R (3903) 4659 0 R (3905) 4660 0 R (3906) 4661 0 R (3907) 4662 0 R (3909) 4667 0 R (391) 1695 0 R (3910) 4668 0 R (3911) 4669 0 R (3912) 4670 0 R (3913) 4671 0 R (3914) 4672 0 R (3915) 4673 0 R (3916) 4674 0 R (3917) 4675 0 R (3918) 4676 0 R (3919) 4677 0 R (392) 1696 0 R (3920) 4678 0 R (3922) 4679 0 R (3923) 4680 0 R (3924) 4681 0 R (3926) 4682 0 R (3927) 4683 0 R (3928) 4684 0 R (3929) 4685 0 R (393) 1697 0 R (3930) 4686 0 R (3932) 4687 0 R (3933) 4688 0 R (3934) 4689 0 R (3936) 4690 0 R (3937) 4691 0 R (3938) 4692 0 R (3939) 4693 0 R (394) 1698 0 R (3940) 4694 0 R (3941) 4695 0 R (3942) 4696 0 R (3943) 4697 0 R (3944) 4698 0 R (3946) 4699 0 R (3947) 4700 0 R (3948) 4701 0 R (3950) 4702 0 R (3951) 4703 0 R (3952) 4704 0 R (3953) 4705 0 R (3954) 4706 0 R (3955) 4707 0 R (3956) 4708 0 R (3957) 4709 0 R (3958) 4710 0 R (3959) 4711 0 R (396) 1699 0 R (3960) 4712 0 R (3961) 4713 0 R (3963) 4714 0 R (3964) 4715 0 R (3965) 4716 0 R (3967) 4717 0 R (3968) 4718 0 R (3969) 4719 0 R (397) 1700 0 R (3970) 4720 0 R (3971) 4721 0 R (398) 1701 0 R (399) 1702 0 R (4.0) 30 0 R (4.10.1) 54 0 R (4.100.1) 414 0 R (4.101.1) 418 0 R (4.102.1) 422 0 R (4.103.1) 426 0 R (4.104.1) 430 0 R (4.105.1) 434 0 R (4.106.1) 438 0 R (4.107.1) 442 0 R (4.108.1) 446 0 R (4.109.1) 450 0 R (4.11.1) 58 0 R (4.110.1) 454 0 R (4.111.1) 458 0 R (4.112.1) 462 0 R (4.113.1) 466 0 R (4.114.1) 470 0 R (4.115.1) 474 0 R (4.116.1) 478 0 R (4.117.1) 482 0 R (4.118.1) 486 0 R (4.119.1) 490 0 R (4.12.1) 62 0 R (4.120.1) 494 0 R (4.121.1) 498 0 R (4.122.1) 502 0 R (4.123.1) 506 0 R (4.124.1) 510 0 R (4.125.1) 514 0 R (4.126.1) 518 0 R (4.127.1) 522 0 R (4.128.1) 526 0 R (4.129.1) 530 0 R (4.13.1) 66 0 R (4.130.1) 534 0 R (4.131.1) 538 0 R (4.132.1) 542 0 R (4.133.1) 546 0 R (4.134.1) 550 0 R (4.135.1) 554 0 R (4.136.1) 558 0 R (4.137.1) 562 0 R (4.138.1) 566 0 R (4.139.1) 570 0 R (4.14.1) 70 0 R (4.140.1) 574 0 R (4.141.1) 578 0 R (4.142.1) 582 0 R (4.143.1) 586 0 R (4.144.1) 590 0 R (4.145.1) 594 0 R (4.146.1) 598 0 R (4.147.1) 602 0 R (4.148.1) 606 0 R (4.149.1) 610 0 R (4.15.1) 74 0 R (4.150.1) 614 0 R (4.151.1) 618 0 R (4.152.1) 622 0 R (4.153.1) 626 0 R (4.154.1) 630 0 R (4.155.1) 634 0 R (4.156.1) 638 0 R (4.157.1) 642 0 R (4.158.1) 646 0 R (4.159.1) 650 0 R (4.16.1) 78 0 R (4.160.1) 654 0 R (4.161.1) 658 0 R (4.162.1) 662 0 R (4.163.1) 666 0 R (4.164.1) 670 0 R (4.165.1) 674 0 R (4.166.1) 678 0 R (4.167.1) 682 0 R (4.168.1) 686 0 R (4.169.1) 690 0 R (4.17.1) 82 0 R (4.170.1) 694 0 R (4.171.1) 698 0 R (4.172.1) 702 0 R (4.173.1) 706 0 R (4.174.1) 710 0 R (4.175.1) 714 0 R (4.176.1) 718 0 R (4.177.1) 722 0 R (4.178.1) 726 0 R (4.179.1) 730 0 R (4.18.1) 86 0 R (4.180.1) 734 0 R (4.181.1) 738 0 R (4.182.1) 742 0 R (4.183.1) 746 0 R (4.184.1) 750 0 R (4.185.1) 754 0 R (4.186.1) 758 0 R (4.187.1) 762 0 R (4.188.1) 766 0 R (4.189.1) 770 0 R (4.19.1) 90 0 R (4.190.1) 774 0 R (4.191.1) 778 0 R (4.192.1) 782 0 R (4.193.1) 786 0 R (4.194.1) 790 0 R (4.195.1) 794 0 R (4.196.1) 798 0 R (4.197.1) 802 0 R (4.198.1) 806 0 R (4.199.1) 810 0 R (4.20.1) 94 0 R (4.200.1) 814 0 R (4.201.1) 818 0 R (4.202.1) 822 0 R (4.203.1) 826 0 R (4.204.1) 830 0 R (4.205.1) 834 0 R (4.206.1) 838 0 R (4.207.1) 842 0 R (4.208.1) 846 0 R (4.209.1) 850 0 R (4.21.1) 98 0 R (4.210.1) 854 0 R (4.211.1) 858 0 R (4.212.1) 862 0 R (4.213.1) 866 0 R (4.214.1) 870 0 R (4.215.1) 874 0 R (4.216.1) 878 0 R (4.217.1) 882 0 R (4.218.1) 886 0 R (4.219.1) 890 0 R (4.22.1) 102 0 R (4.220.1) 894 0 R (4.221.1) 898 0 R (4.222.1) 902 0 R (4.223.1) 906 0 R (4.224.1) 910 0 R (4.225.1) 914 0 R (4.226.1) 918 0 R (4.227.1) 922 0 R (4.228.1) 926 0 R (4.229.1) 930 0 R (4.23.1) 106 0 R (4.230.1) 934 0 R (4.231.1) 938 0 R (4.232.1) 942 0 R (4.233.1) 946 0 R (4.234.1) 950 0 R (4.235.1) 954 0 R (4.236.1) 958 0 R (4.237.1) 962 0 R (4.238.1) 966 0 R (4.239.1) 970 0 R (4.24.1) 110 0 R (4.240.1) 974 0 R (4.241.1) 978 0 R (4.242.1) 982 0 R (4.243.1) 986 0 R (4.244.1) 990 0 R (4.245.1) 994 0 R (4.246.1) 998 0 R (4.247.1) 1002 0 R (4.248.1) 1006 0 R (4.249.1) 1010 0 R (4.25.1) 114 0 R (4.250.1) 1014 0 R (4.251.1) 1018 0 R (4.252.1) 1022 0 R (4.253.1) 1026 0 R (4.254.1) 1030 0 R (4.255.1) 1034 0 R (4.256.1) 1038 0 R (4.257.1) 1042 0 R (4.258.1) 1046 0 R (4.259.1) 1050 0 R (4.26.1) 118 0 R (4.260.1) 1054 0 R (4.261.1) 1058 0 R (4.262.1) 1062 0 R (4.263.1) 1066 0 R (4.264.1) 1070 0 R (4.265.1) 1074 0 R (4.266.1) 1078 0 R (4.267.1) 1082 0 R (4.268.1) 1086 0 R (4.269.1) 1090 0 R (4.27.1) 122 0 R (4.270.1) 1094 0 R (4.271.1) 1098 0 R (4.272.1) 1102 0 R (4.273.1) 1106 0 R (4.274.1) 1110 0 R (4.275.1) 1114 0 R (4.276.1) 1118 0 R (4.277.1) 1122 0 R (4.278.1) 1126 0 R (4.279.1) 1130 0 R (4.28.1) 126 0 R (4.280.1) 1134 0 R (4.281.1) 1138 0 R (4.282.1) 1142 0 R (4.283.1) 1146 0 R (4.284.1) 1150 0 R (4.285.1) 1154 0 R (4.286.1) 1158 0 R (4.287.1) 1162 0 R (4.288.1) 1166 0 R (4.29.1) 130 0 R (4.30.1) 134 0 R (4.31.1) 138 0 R (4.32.1) 142 0 R (4.33.1) 146 0 R (4.34.1) 150 0 R (4.35.1) 154 0 R (4.36.1) 158 0 R (4.37.1) 162 0 R (4.38.1) 166 0 R (4.39.1) 170 0 R (4.40.1) 174 0 R (4.41.1) 178 0 R (4.42.1) 182 0 R (4.43.1) 186 0 R (4.44.1) 190 0 R (4.45.1) 194 0 R (4.46.1) 198 0 R (4.47.1) 202 0 R (4.48.1) 206 0 R (4.49.1) 210 0 R (4.5.1) 34 0 R (4.50.1) 214 0 R (4.51.1) 218 0 R (4.52.1) 222 0 R (4.53.1) 226 0 R (4.54.1) 230 0 R (4.55.1) 234 0 R (4.56.1) 238 0 R (4.57.1) 242 0 R (4.58.1) 246 0 R (4.59.1) 250 0 R (4.6.1) 38 0 R (4.60.1) 254 0 R (4.61.1) 258 0 R (4.62.1) 262 0 R (4.63.1) 266 0 R (4.64.1) 270 0 R (4.65.1) 274 0 R (4.66.1) 278 0 R (4.67.1) 282 0 R (4.68.1) 286 0 R (4.69.1) 290 0 R (4.7.1) 42 0 R (4.70.1) 294 0 R (4.71.1) 298 0 R (4.72.1) 302 0 R (4.73.1) 306 0 R (4.74.1) 310 0 R (4.75.1) 314 0 R (4.76.1) 318 0 R (4.77.1) 322 0 R (4.78.1) 326 0 R (4.79.1) 330 0 R (4.8.1) 46 0 R (4.80.1) 334 0 R (4.81.1) 338 0 R (4.82.1) 342 0 R (4.83.1) 346 0 R (4.84.1) 350 0 R (4.85.1) 354 0 R (4.86.1) 358 0 R (4.87.1) 362 0 R (4.88.1) 366 0 R (4.89.1) 370 0 R (4.9.1) 50 0 R (4.90.1) 374 0 R (4.91.1) 378 0 R (4.92.1) 382 0 R (4.93.1) 386 0 R (4.94.1) 390 0 R (4.95.1) 394 0 R (4.96.1) 398 0 R (4.97.1) 402 0 R (4.98.1) 406 0 R (4.99.1) 410 0 R (40) 1330 0 R (400) 1703 0 R (402) 1704 0 R (403) 1705 0 R (404) 1706 0 R (405) 1707 0 R (407) 1708 0 R (408) 1709 0 R (409) 1710 0 R (41) 1331 0 R (410) 1711 0 R (411) 1712 0 R (413) 1713 0 R (414) 1714 0 R (415) 1715 0 R (416) 1716 0 R (418) 1717 0 R (419) 1718 0 R (42) 1332 0 R (420) 1719 0 R (421) 1720 0 R (423) 1721 0 R (424) 1722 0 R (425) 1723 0 R (426) 1724 0 R (427) 1725 0 R (428) 1726 0 R (43) 1333 0 R (430) 1727 0 R (431) 1728 0 R (432) 1729 0 R (433) 1730 0 R (435) 1731 0 R (436) 1732 0 R (437) 1733 0 R (438) 1734 0 R (44) 1334 0 R (440) 1739 0 R (441) 1740 0 R (442) 1741 0 R (443) 1742 0 R (445) 1743 0 R (446) 1744 0 R (447) 1745 0 R (448) 1746 0 R (45) 1335 0 R (450) 1747 0 R (451) 1748 0 R (452) 1749 0 R (453) 1750 0 R (454) 1751 0 R (455) 1752 0 R (456) 1753 0 R (457) 1754 0 R (458) 1755 0 R (459) 1756 0 R (46) 1336 0 R (460) 1757 0 R (461) 1758 0 R (462) 1759 0 R (463) 1760 0 R (464) 1761 0 R (465) 1762 0 R (466) 1763 0 R (467) 1764 0 R (468) 1765 0 R (469) 1766 0 R (47) 1337 0 R (470) 1767 0 R (471) 1768 0 R (472) 1769 0 R (473) 1277 0 R (475) 1770 0 R (476) 1771 0 R (477) 1772 0 R (478) 1773 0 R (479) 1774 0 R (48) 1338 0 R (480) 1775 0 R (481) 1776 0 R (482) 1777 0 R (483) 1778 0 R (484) 1779 0 R (485) 1780 0 R (49) 1339 0 R (50) 1340 0 R (503) 1786 0 R (504) 1278 0 R (506) 1787 0 R (508) 1788 0 R (509) 1789 0 R (51) 1341 0 R (510) 1790 0 R (512) 1791 0 R (513) 1792 0 R (514) 1793 0 R (515) 1794 0 R (516) 1795 0 R (517) 1796 0 R (518) 1797 0 R (52) 1342 0 R (520) 1798 0 R (521) 1799 0 R (522) 1800 0 R (524) 1801 0 R (525) 1802 0 R (526) 1803 0 R (527) 1804 0 R (528) 1805 0 R (529) 1806 0 R (53) 1343 0 R (531) 1807 0 R (532) 1808 0 R (533) 1809 0 R (535) 1810 0 R (536) 1811 0 R (537) 1812 0 R (538) 1813 0 R (539) 1814 0 R (54) 1344 0 R (540) 1815 0 R (541) 1816 0 R (543) 1817 0 R (544) 1818 0 R (545) 1819 0 R (547) 1820 0 R (548) 1821 0 R (549) 1822 0 R (55) 1348 0 R (550) 1823 0 R (551) 1824 0 R (552) 1825 0 R (554) 1826 0 R (555) 1827 0 R (556) 1828 0 R (558) 1829 0 R (559) 1830 0 R (56) 1349 0 R (560) 1831 0 R (561) 1832 0 R (562) 1833 0 R (563) 1834 0 R (565) 1835 0 R (566) 1836 0 R (567) 1841 0 R (569) 1842 0 R (57) 1350 0 R (570) 1843 0 R (571) 1844 0 R (572) 1845 0 R (573) 1846 0 R (574) 1847 0 R (576) 1848 0 R (577) 1849 0 R (578) 1850 0 R (58) 1351 0 R (580) 1851 0 R (581) 1852 0 R (582) 1853 0 R (583) 1854 0 R (584) 1855 0 R (586) 1856 0 R (587) 1857 0 R (588) 1858 0 R (59) 1352 0 R (590) 1859 0 R (591) 1860 0 R (592) 1861 0 R (593) 1862 0 R (594) 1863 0 R (596) 1864 0 R (597) 1865 0 R (598) 1866 0 R (60) 1353 0 R (600) 1867 0 R (601) 1868 0 R (602) 1869 0 R (603) 1870 0 R (604) 1871 0 R (606) 1872 0 R (607) 1873 0 R (608) 1874 0 R (61) 1354 0 R (610) 1875 0 R (611) 1876 0 R (612) 1877 0 R (613) 1878 0 R (614) 1879 0 R (615) 1880 0 R (617) 1881 0 R (618) 1882 0 R (619) 1883 0 R (62) 1355 0 R (621) 1884 0 R (622) 1885 0 R (623) 1886 0 R (624) 1887 0 R (625) 1888 0 R (626) 1889 0 R (628) 1890 0 R (629) 1891 0 R (63) 1356 0 R (630) 1892 0 R (632) 1893 0 R (633) 1894 0 R (634) 1895 0 R (635) 1896 0 R (636) 1897 0 R (637) 1898 0 R (638) 1899 0 R (64) 1357 0 R (640) 1900 0 R (641) 1901 0 R (642) 1906 0 R (644) 1907 0 R (645) 1908 0 R (646) 1909 0 R (647) 1910 0 R (648) 1911 0 R (649) 1912 0 R (65) 1358 0 R (650) 1913 0 R (652) 1914 0 R (653) 1915 0 R (654) 1916 0 R (656) 1917 0 R (657) 1918 0 R (658) 1919 0 R (659) 1920 0 R (66) 1359 0 R (660) 1921 0 R (662) 1922 0 R (663) 1923 0 R (664) 1924 0 R (666) 1925 0 R (667) 1926 0 R (668) 1927 0 R (669) 1928 0 R (67) 1360 0 R (670) 1929 0 R (671) 1930 0 R (673) 1931 0 R (674) 1932 0 R (675) 1933 0 R (677) 1934 0 R (678) 1935 0 R (679) 1936 0 R (68) 1361 0 R (680) 1937 0 R (681) 1938 0 R (682) 1939 0 R (684) 1940 0 R (685) 1941 0 R (686) 1942 0 R (688) 1943 0 R (689) 1944 0 R (69) 1362 0 R (690) 1945 0 R (691) 1946 0 R (692) 1947 0 R (693) 1948 0 R (695) 1949 0 R (696) 1950 0 R (697) 1951 0 R (699) 1952 0 R (70) 1363 0 R (700) 1953 0 R (701) 1954 0 R (702) 1955 0 R (703) 1956 0 R (704) 1957 0 R (706) 1958 0 R (707) 1959 0 R (708) 1960 0 R (71) 1364 0 R (710) 1961 0 R (711) 1962 0 R (712) 1963 0 R (713) 1964 0 R (714) 1965 0 R (715) 1966 0 R (717) 1967 0 R (718) 1968 0 R (719) 1974 0 R (72) 1365 0 R (721) 1975 0 R (722) 1976 0 R (723) 1977 0 R (724) 1978 0 R (725) 1979 0 R (726) 1980 0 R (727) 1981 0 R (728) 1982 0 R (729) 1983 0 R (73) 1366 0 R (730) 1984 0 R (731) 1985 0 R (732) 1986 0 R (733) 1987 0 R (734) 1988 0 R (735) 1989 0 R (736) 1990 0 R (737) 1991 0 R (738) 1992 0 R (739) 1993 0 R (74) 1367 0 R (740) 1994 0 R (741) 1995 0 R (742) 1996 0 R (743) 1997 0 R (744) 1998 0 R (745) 1999 0 R (746) 2000 0 R (747) 2001 0 R (748) 2002 0 R (749) 2003 0 R (75) 1368 0 R (750) 2004 0 R (751) 2005 0 R (752) 2006 0 R (753) 2007 0 R (754) 2008 0 R (755) 2009 0 R (756) 2010 0 R (757) 2011 0 R (758) 2012 0 R (759) 1279 0 R (76) 1369 0 R (761) 2013 0 R (763) 2014 0 R (764) 2015 0 R (765) 2016 0 R (767) 2017 0 R (768) 2018 0 R (769) 2019 0 R (77) 1370 0 R (770) 2020 0 R (771) 2021 0 R (773) 2022 0 R (774) 2023 0 R (775) 2024 0 R (777) 2025 0 R (778) 2026 0 R (779) 2027 0 R (78) 1371 0 R (780) 2028 0 R (781) 2029 0 R (783) 2030 0 R (784) 2031 0 R (785) 2032 0 R (787) 2033 0 R (788) 2034 0 R (789) 2035 0 R (79) 1372 0 R (790) 2036 0 R (791) 2037 0 R (793) 2038 0 R (794) 2039 0 R (795) 2044 0 R (797) 2045 0 R (798) 2046 0 R (799) 2047 0 R (80) 1373 0 R (800) 2048 0 R (801) 2049 0 R (803) 2050 0 R (804) 2051 0 R (805) 2052 0 R (807) 2053 0 R (808) 2054 0 R (809) 2055 0 R (81) 1374 0 R (810) 2056 0 R (811) 2057 0 R (813) 2058 0 R (814) 2059 0 R (815) 2060 0 R (817) 2061 0 R (818) 2062 0 R (819) 2063 0 R (82) 1375 0 R (820) 2064 0 R (821) 2065 0 R (823) 2066 0 R (824) 2067 0 R (825) 2068 0 R (827) 2069 0 R (828) 2070 0 R (829) 2071 0 R (83) 1376 0 R (830) 2072 0 R (831) 2073 0 R (832) 2074 0 R (833) 2075 0 R (834) 2076 0 R (836) 2077 0 R (837) 2078 0 R (838) 2079 0 R (84) 1377 0 R (840) 2080 0 R (841) 2081 0 R (842) 2082 0 R (843) 2083 0 R (844) 2084 0 R (845) 2085 0 R (846) 2086 0 R (847) 2087 0 R (849) 2088 0 R (85) 1378 0 R (850) 2089 0 R (851) 2090 0 R (853) 2091 0 R (854) 2092 0 R (855) 2093 0 R (856) 2094 0 R (857) 2095 0 R (858) 2096 0 R (859) 2097 0 R (86) 1379 0 R (860) 2098 0 R (861) 2099 0 R (862) 2100 0 R (863) 2101 0 R (864) 2102 0 R (865) 2103 0 R (866) 1280 0 R (868) 2108 0 R (87) 1380 0 R (870) 2109 0 R (871) 2110 0 R (872) 2111 0 R (874) 2112 0 R (875) 2113 0 R (876) 2114 0 R (877) 2115 0 R (878) 2116 0 R (879) 2117 0 R (88) 1381 0 R (880) 2118 0 R (882) 2119 0 R (883) 2120 0 R (884) 2121 0 R (886) 2122 0 R (887) 2123 0 R (888) 2124 0 R (889) 2125 0 R (89) 1382 0 R (890) 2126 0 R (891) 2127 0 R (892) 2128 0 R (893) 2129 0 R (895) 2130 0 R (896) 2131 0 R (897) 2132 0 R (899) 2133 0 R (90) 1383 0 R (900) 2134 0 R (901) 2135 0 R (902) 2136 0 R (903) 2137 0 R (905) 2138 0 R (906) 2139 0 R (907) 2140 0 R (909) 2141 0 R (91) 1384 0 R (910) 2142 0 R (911) 2143 0 R (912) 2144 0 R (913) 2145 0 R (915) 2146 0 R (916) 2147 0 R (917) 2148 0 R (919) 2149 0 R (92) 1385 0 R (920) 2150 0 R (921) 2151 0 R (922) 2152 0 R (923) 2153 0 R (924) 2154 0 R (926) 2155 0 R (927) 2156 0 R (928) 2157 0 R (93) 1386 0 R (930) 2158 0 R (931) 2159 0 R (932) 2160 0 R (933) 2161 0 R (934) 2162 0 R (936) 2163 0 R (937) 2164 0 R (938) 2165 0 R (94) 1387 0 R (940) 2170 0 R (941) 2171 0 R (942) 2172 0 R (943) 2173 0 R (944) 2174 0 R (946) 2175 0 R (947) 2176 0 R (948) 2177 0 R (95) 1388 0 R (950) 2178 0 R (951) 2179 0 R (952) 2180 0 R (953) 2181 0 R (954) 2182 0 R (956) 2183 0 R (957) 2184 0 R (958) 2185 0 R (96) 1389 0 R (960) 2186 0 R (961) 2187 0 R (962) 2188 0 R (963) 2189 0 R (964) 2190 0 R (966) 2191 0 R (967) 2192 0 R (968) 2193 0 R (97) 1390 0 R (970) 2194 0 R (971) 2195 0 R (972) 2196 0 R (973) 2197 0 R (974) 2198 0 R (976) 2199 0 R (977) 2200 0 R (978) 2201 0 R (98) 1391 0 R (980) 2202 0 R (981) 2203 0 R (982) 2204 0 R (983) 2205 0 R (984) 2206 0 R (986) 2207 0 R (987) 2208 0 R (988) 2209 0 R (99) 1392 0 R (990) 2210 0 R (991) 2211 0 R (992) 2212 0 R (993) 2213 0 R (994) 2214 0 R (996) 2215 0 R (997) 2216 0 R (998) 2217 0 R (Doc-Start) 1174 0 R (docbook) 1175 0 R (page.1) 1173 0 R (page.10) 1634 0 R (page.11) 1684 0 R (page.12) 1738 0 R (page.13) 1785 0 R (page.14) 1840 0 R (page.15) 1905 0 R (page.16) 1973 0 R (page.17) 2043 0 R (page.18) 2107 0 R (page.19) 2169 0 R (page.2) 1184 0 R (page.20) 2228 0 R (page.21) 2289 0 R (page.22) 2348 0 R (page.23) 2415 0 R (page.24) 2487 0 R (page.25) 2537 0 R (page.26) 2593 0 R (page.27) 2650 0 R (page.28) 2725 0 R (page.29) 2773 0 R (page.3) 1191 0 R (page.30) 2836 0 R (page.31) 2902 0 R (page.32) 2924 0 R (page.33) 2930 0 R (page.34) 2935 0 R (page.35) 3002 0 R (page.36) 3055 0 R (page.37) 3114 0 R (page.38) 3176 0 R (page.39) 3238 0 R (page.4) 1300 0 R (page.40) 3299 0 R (page.41) 3362 0 R (page.42) 3393 0 R (page.43) 3409 0 R (page.44) 3462 0 R (page.45) 3523 0 R (page.46) 3583 0 R (page.47) 3644 0 R (page.48) 3700 0 R (page.49) 3772 0 R (page.5) 1444 0 R (page.50) 3837 0 R (page.51) 3893 0 R (page.52) 3960 0 R (page.53) 4010 0 R (page.54) 4070 0 R (page.55) 4126 0 R (page.56) 4190 0 R (page.57) 4250 0 R (page.58) 4314 0 R (page.59) 4376 0 R (page.6) 1456 0 R (page.60) 4428 0 R (page.61) 4479 0 R (page.62) 4539 0 R (page.63) 4587 0 R (page.64) 4612 0 R (page.65) 4666 0 R (page.66) 4725 0 R (page.7) 1460 0 R (page.8) 1528 0 R (page.9) 1583 0 R (table.1) 1781 0 R (table.2) 2469 0 R (table.3) 3369 0 R (table.4) 3374 0 R (table.5) 3379 0 R (table.6) 3384 0 R (table.7) 3389 0 R (table.8) 3399 0 R (table.9) 3404 0 R] /Limits [(1.0) (table.9)] >> endobj 4735 0 obj << /Kids [4734 0 R] >> endobj 4736 0 obj << /Dests 4735 0 R >> endobj 4737 0 obj << /Type /Catalog /Pages 4732 0 R /Outlines 4733 0 R /Names 4736 0 R /PageMode /UseOutlines /URI<> /ViewerPreferences<<>> /OpenAction 1169 0 R >> endobj 4738 0 obj << /Producer (pdfTeX-0.14h) /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX14.h)/Keywords() /Creator (TeX) /CreationDate (D:20070806132400) >> endobj xref 0 4739 0000001176 65535 f 0000000009 00000 n 0000026949 00000 n 0000540453 00000 n 0000000048 00000 n 0000000122 00000 n 0000040757 00000 n 0000540368 00000 n 0000000161 00000 n 0000000196 00000 n 0000043470 00000 n 0000540244 00000 n 0000000235 00000 n 0000000291 00000 n 0000043595 00000 n 0000540170 00000 n 0000000333 00000 n 0000000364 00000 n 0000044484 00000 n 0000540083 00000 n 0000000406 00000 n 0000000451 00000 n 0000058433 00000 n 0000539996 00000 n 0000000493 00000 n 0000000545 00000 n 0000060406 00000 n 0000539922 00000 n 0000000587 00000 n 0000000622 00000 n 0000064227 00000 n 0000539805 00000 n 0000000662 00000 n 0000000724 00000 n 0000064733 00000 n 0000539731 00000 n 0000000766 00000 n 0000000809 00000 n 0000068160 00000 n 0000539644 00000 n 0000000851 00000 n 0000000878 00000 n 0000071502 00000 n 0000539557 00000 n 0000000920 00000 n 0000000949 00000 n 0000083634 00000 n 0000539470 00000 n 0000000991 00000 n 0000001021 00000 n 0000084650 00000 n 0000539383 00000 n 0000001063 00000 n 0000001097 00000 n 0000085665 00000 n 0000539296 00000 n 0000001140 00000 n 0000001176 00000 n 0000087378 00000 n 0000539209 00000 n 0000001219 00000 n 0000001249 00000 n 0000087629 00000 n 0000539122 00000 n 0000001292 00000 n 0000001314 00000 n 0000087943 00000 n 0000539035 00000 n 0000001357 00000 n 0000001380 00000 n 0000088257 00000 n 0000538948 00000 n 0000001423 00000 n 0000001447 00000 n 0000088634 00000 n 0000538861 00000 n 0000001490 00000 n 0000001512 00000 n 0000089011 00000 n 0000538774 00000 n 0000001555 00000 n 0000001579 00000 n 0000089323 00000 n 0000538687 00000 n 0000001622 00000 n 0000001645 00000 n 0000089701 00000 n 0000538600 00000 n 0000001688 00000 n 0000001710 00000 n 0000090014 00000 n 0000538513 00000 n 0000001753 00000 n 0000001776 00000 n 0000090328 00000 n 0000538426 00000 n 0000001819 00000 n 0000001842 00000 n 0000090769 00000 n 0000538337 00000 n 0000001885 00000 n 0000001911 00000 n 0000091081 00000 n 0000538246 00000 n 0000001955 00000 n 0000001978 00000 n 0000094086 00000 n 0000538154 00000 n 0000002022 00000 n 0000002048 00000 n 0000094401 00000 n 0000538062 00000 n 0000002092 00000 n 0000002117 00000 n 0000094716 00000 n 0000537970 00000 n 0000002161 00000 n 0000002185 00000 n 0000096180 00000 n 0000537878 00000 n 0000002229 00000 n 0000002258 00000 n 0000098260 00000 n 0000537786 00000 n 0000002302 00000 n 0000002352 00000 n 0000098894 00000 n 0000537694 00000 n 0000002396 00000 n 0000002449 00000 n 0000099527 00000 n 0000537602 00000 n 0000002493 00000 n 0000002542 00000 n 0000100224 00000 n 0000537510 00000 n 0000002586 00000 n 0000002639 00000 n 0000100857 00000 n 0000537418 00000 n 0000002683 00000 n 0000002732 00000 n 0000101491 00000 n 0000537326 00000 n 0000002776 00000 n 0000002816 00000 n 0000103144 00000 n 0000537234 00000 n 0000002860 00000 n 0000002906 00000 n 0000103713 00000 n 0000537142 00000 n 0000002950 00000 n 0000002991 00000 n 0000104281 00000 n 0000537050 00000 n 0000003035 00000 n 0000003074 00000 n 0000104847 00000 n 0000536958 00000 n 0000003118 00000 n 0000003155 00000 n 0000105481 00000 n 0000536866 00000 n 0000003199 00000 n 0000003246 00000 n 0000106114 00000 n 0000536774 00000 n 0000003290 00000 n 0000003337 00000 n 0000106805 00000 n 0000536682 00000 n 0000003381 00000 n 0000003428 00000 n 0000108408 00000 n 0000536590 00000 n 0000003472 00000 n 0000003518 00000 n 0000108977 00000 n 0000536498 00000 n 0000003562 00000 n 0000003599 00000 n 0000109611 00000 n 0000536406 00000 n 0000003643 00000 n 0000003683 00000 n 0000110240 00000 n 0000536314 00000 n 0000003727 00000 n 0000003767 00000 n 0000110874 00000 n 0000536222 00000 n 0000003811 00000 n 0000003851 00000 n 0000111507 00000 n 0000536130 00000 n 0000003895 00000 n 0000003936 00000 n 0000112136 00000 n 0000536038 00000 n 0000003980 00000 n 0000004020 00000 n 0000115022 00000 n 0000535946 00000 n 0000004064 00000 n 0000004104 00000 n 0000117307 00000 n 0000535854 00000 n 0000004148 00000 n 0000004208 00000 n 0000117813 00000 n 0000535762 00000 n 0000004252 00000 n 0000004291 00000 n 0000118382 00000 n 0000535670 00000 n 0000004335 00000 n 0000004374 00000 n 0000118951 00000 n 0000535578 00000 n 0000004418 00000 n 0000004457 00000 n 0000120957 00000 n 0000535486 00000 n 0000004501 00000 n 0000004543 00000 n 0000121526 00000 n 0000535394 00000 n 0000004587 00000 n 0000004629 00000 n 0000122096 00000 n 0000535302 00000 n 0000004673 00000 n 0000004715 00000 n 0000122850 00000 n 0000535210 00000 n 0000004759 00000 n 0000004846 00000 n 0000123612 00000 n 0000535118 00000 n 0000004890 00000 n 0000004979 00000 n 0000124366 00000 n 0000535026 00000 n 0000005023 00000 n 0000005108 00000 n 0000125875 00000 n 0000534934 00000 n 0000005152 00000 n 0000005188 00000 n 0000126510 00000 n 0000534842 00000 n 0000005232 00000 n 0000005279 00000 n 0000127269 00000 n 0000534750 00000 n 0000005323 00000 n 0000005384 00000 n 0000127838 00000 n 0000534658 00000 n 0000005428 00000 n 0000005471 00000 n 0000128407 00000 n 0000534566 00000 n 0000005515 00000 n 0000005557 00000 n 0000129039 00000 n 0000534474 00000 n 0000005601 00000 n 0000005650 00000 n 0000129606 00000 n 0000534382 00000 n 0000005694 00000 n 0000005734 00000 n 0000131080 00000 n 0000534290 00000 n 0000005778 00000 n 0000005818 00000 n 0000131649 00000 n 0000534198 00000 n 0000005862 00000 n 0000005903 00000 n 0000132219 00000 n 0000534106 00000 n 0000005947 00000 n 0000005987 00000 n 0000132785 00000 n 0000534014 00000 n 0000006031 00000 n 0000006071 00000 n 0000133355 00000 n 0000533922 00000 n 0000006115 00000 n 0000006156 00000 n 0000133924 00000 n 0000533830 00000 n 0000006200 00000 n 0000006241 00000 n 0000134490 00000 n 0000533738 00000 n 0000006285 00000 n 0000006324 00000 n 0000136010 00000 n 0000533646 00000 n 0000006368 00000 n 0000006406 00000 n 0000136579 00000 n 0000533554 00000 n 0000006450 00000 n 0000006490 00000 n 0000137213 00000 n 0000533462 00000 n 0000006534 00000 n 0000006577 00000 n 0000137779 00000 n 0000533370 00000 n 0000006621 00000 n 0000006662 00000 n 0000138349 00000 n 0000533278 00000 n 0000006706 00000 n 0000006748 00000 n 0000138918 00000 n 0000533186 00000 n 0000006792 00000 n 0000006832 00000 n 0000139482 00000 n 0000533094 00000 n 0000006876 00000 n 0000006917 00000 n 0000141192 00000 n 0000533002 00000 n 0000006961 00000 n 0000007008 00000 n 0000141761 00000 n 0000532910 00000 n 0000007052 00000 n 0000007095 00000 n 0000142329 00000 n 0000532818 00000 n 0000007139 00000 n 0000007178 00000 n 0000142895 00000 n 0000532726 00000 n 0000007222 00000 n 0000007260 00000 n 0000143465 00000 n 0000532634 00000 n 0000007304 00000 n 0000007344 00000 n 0000143906 00000 n 0000532542 00000 n 0000007388 00000 n 0000007431 00000 n 0000144346 00000 n 0000532450 00000 n 0000007475 00000 n 0000007517 00000 n 0000145934 00000 n 0000532358 00000 n 0000007561 00000 n 0000007603 00000 n 0000146503 00000 n 0000532266 00000 n 0000007647 00000 n 0000007689 00000 n 0000147197 00000 n 0000532174 00000 n 0000007733 00000 n 0000007808 00000 n 0000147892 00000 n 0000532082 00000 n 0000007852 00000 n 0000007928 00000 n 0000148459 00000 n 0000531990 00000 n 0000007972 00000 n 0000008035 00000 n 0000149154 00000 n 0000531898 00000 n 0000008079 00000 n 0000008154 00000 n 0000149847 00000 n 0000531806 00000 n 0000008198 00000 n 0000008273 00000 n 0000153726 00000 n 0000531714 00000 n 0000008317 00000 n 0000008384 00000 n 0000164897 00000 n 0000531622 00000 n 0000008428 00000 n 0000008464 00000 n 0000165404 00000 n 0000531530 00000 n 0000008508 00000 n 0000008550 00000 n 0000165972 00000 n 0000531438 00000 n 0000008594 00000 n 0000008634 00000 n 0000166541 00000 n 0000531346 00000 n 0000008678 00000 n 0000008715 00000 n 0000167110 00000 n 0000531254 00000 n 0000008759 00000 n 0000008800 00000 n 0000167678 00000 n 0000531162 00000 n 0000008844 00000 n 0000008887 00000 n 0000168247 00000 n 0000531070 00000 n 0000008932 00000 n 0000008974 00000 n 0000169946 00000 n 0000530978 00000 n 0000009019 00000 n 0000009068 00000 n 0000170513 00000 n 0000530886 00000 n 0000009113 00000 n 0000009151 00000 n 0000171083 00000 n 0000530794 00000 n 0000009196 00000 n 0000009233 00000 n 0000171649 00000 n 0000530702 00000 n 0000009278 00000 n 0000009316 00000 n 0000172091 00000 n 0000530610 00000 n 0000009361 00000 n 0000009402 00000 n 0000172532 00000 n 0000530518 00000 n 0000009447 00000 n 0000009487 00000 n 0000173098 00000 n 0000530426 00000 n 0000009532 00000 n 0000009571 00000 n 0000176058 00000 n 0000530334 00000 n 0000009616 00000 n 0000009655 00000 n 0000176685 00000 n 0000530242 00000 n 0000009700 00000 n 0000009769 00000 n 0000177317 00000 n 0000530150 00000 n 0000009814 00000 n 0000009882 00000 n 0000177886 00000 n 0000530058 00000 n 0000009927 00000 n 0000009988 00000 n 0000182695 00000 n 0000529966 00000 n 0000010033 00000 n 0000010075 00000 n 0000183199 00000 n 0000529874 00000 n 0000010120 00000 n 0000010183 00000 n 0000183766 00000 n 0000529782 00000 n 0000010228 00000 n 0000010291 00000 n 0000184332 00000 n 0000529690 00000 n 0000010336 00000 n 0000010399 00000 n 0000184837 00000 n 0000529598 00000 n 0000010444 00000 n 0000010478 00000 n 0000185344 00000 n 0000529506 00000 n 0000010523 00000 n 0000010562 00000 n 0000186865 00000 n 0000529414 00000 n 0000010607 00000 n 0000010646 00000 n 0000187432 00000 n 0000529322 00000 n 0000010691 00000 n 0000010730 00000 n 0000188002 00000 n 0000529230 00000 n 0000010775 00000 n 0000010814 00000 n 0000188631 00000 n 0000529138 00000 n 0000010859 00000 n 0000010905 00000 n 0000189201 00000 n 0000529046 00000 n 0000010950 00000 n 0000010990 00000 n 0000189834 00000 n 0000528954 00000 n 0000011035 00000 n 0000011081 00000 n 0000190462 00000 n 0000528862 00000 n 0000011126 00000 n 0000011169 00000 n 0000191996 00000 n 0000528770 00000 n 0000011214 00000 n 0000011250 00000 n 0000192691 00000 n 0000528678 00000 n 0000011295 00000 n 0000011344 00000 n 0000193324 00000 n 0000528586 00000 n 0000011389 00000 n 0000011432 00000 n 0000193953 00000 n 0000528494 00000 n 0000011477 00000 n 0000011522 00000 n 0000194586 00000 n 0000528402 00000 n 0000011567 00000 n 0000011611 00000 n 0000195217 00000 n 0000528310 00000 n 0000011656 00000 n 0000011701 00000 n 0000195783 00000 n 0000528218 00000 n 0000011746 00000 n 0000011783 00000 n 0000197913 00000 n 0000528126 00000 n 0000011828 00000 n 0000011896 00000 n 0000284786 00000 n 0000528034 00000 n 0000011941 00000 n 0000011976 00000 n 0000285291 00000 n 0000527942 00000 n 0000012021 00000 n 0000012062 00000 n 0000285988 00000 n 0000527850 00000 n 0000012107 00000 n 0000012161 00000 n 0000288233 00000 n 0000527758 00000 n 0000012206 00000 n 0000012254 00000 n 0000288802 00000 n 0000527666 00000 n 0000012299 00000 n 0000012339 00000 n 0000289370 00000 n 0000527574 00000 n 0000012384 00000 n 0000012424 00000 n 0000290127 00000 n 0000527482 00000 n 0000012469 00000 n 0000012510 00000 n 0000290634 00000 n 0000527390 00000 n 0000012555 00000 n 0000012595 00000 n 0000291203 00000 n 0000527298 00000 n 0000012640 00000 n 0000012679 00000 n 0000292735 00000 n 0000527206 00000 n 0000012724 00000 n 0000012765 00000 n 0000293304 00000 n 0000527114 00000 n 0000012810 00000 n 0000012850 00000 n 0000293872 00000 n 0000527022 00000 n 0000012895 00000 n 0000012934 00000 n 0000294438 00000 n 0000526930 00000 n 0000012979 00000 n 0000013020 00000 n 0000295008 00000 n 0000526838 00000 n 0000013065 00000 n 0000013107 00000 n 0000295576 00000 n 0000526746 00000 n 0000013152 00000 n 0000013190 00000 n 0000296144 00000 n 0000526654 00000 n 0000013235 00000 n 0000013299 00000 n 0000299091 00000 n 0000526562 00000 n 0000013344 00000 n 0000013410 00000 n 0000299718 00000 n 0000526470 00000 n 0000013455 00000 n 0000013525 00000 n 0000301808 00000 n 0000526378 00000 n 0000013570 00000 n 0000013614 00000 n 0000302307 00000 n 0000526286 00000 n 0000013659 00000 n 0000013700 00000 n 0000304092 00000 n 0000526194 00000 n 0000013745 00000 n 0000013787 00000 n 0000304725 00000 n 0000526102 00000 n 0000013832 00000 n 0000013873 00000 n 0000305359 00000 n 0000526010 00000 n 0000013918 00000 n 0000013959 00000 n 0000306051 00000 n 0000525918 00000 n 0000014004 00000 n 0000014046 00000 n 0000306493 00000 n 0000525826 00000 n 0000014091 00000 n 0000014134 00000 n 0000307126 00000 n 0000525734 00000 n 0000014179 00000 n 0000014225 00000 n 0000307692 00000 n 0000525642 00000 n 0000014270 00000 n 0000014312 00000 n 0000309200 00000 n 0000525550 00000 n 0000014357 00000 n 0000014401 00000 n 0000309768 00000 n 0000525458 00000 n 0000014446 00000 n 0000014489 00000 n 0000310338 00000 n 0000525366 00000 n 0000014534 00000 n 0000014576 00000 n 0000310903 00000 n 0000525274 00000 n 0000014621 00000 n 0000014664 00000 n 0000311473 00000 n 0000525182 00000 n 0000014709 00000 n 0000014752 00000 n 0000312042 00000 n 0000525090 00000 n 0000014797 00000 n 0000014848 00000 n 0000312608 00000 n 0000524998 00000 n 0000014893 00000 n 0000014939 00000 n 0000316183 00000 n 0000524906 00000 n 0000014984 00000 n 0000015035 00000 n 0000316752 00000 n 0000524814 00000 n 0000015080 00000 n 0000015135 00000 n 0000317322 00000 n 0000524722 00000 n 0000015180 00000 n 0000015233 00000 n 0000326709 00000 n 0000524630 00000 n 0000015278 00000 n 0000015313 00000 n 0000327216 00000 n 0000524538 00000 n 0000015358 00000 n 0000015408 00000 n 0000327786 00000 n 0000524446 00000 n 0000015453 00000 n 0000015496 00000 n 0000328412 00000 n 0000524354 00000 n 0000015541 00000 n 0000015587 00000 n 0000329110 00000 n 0000524262 00000 n 0000015632 00000 n 0000015695 00000 n 0000329870 00000 n 0000524170 00000 n 0000015740 00000 n 0000015805 00000 n 0000333290 00000 n 0000524078 00000 n 0000015850 00000 n 0000015910 00000 n 0000334050 00000 n 0000523986 00000 n 0000015955 00000 n 0000016025 00000 n 0000334940 00000 n 0000523894 00000 n 0000016070 00000 n 0000016150 00000 n 0000338307 00000 n 0000523802 00000 n 0000016195 00000 n 0000016241 00000 n 0000338942 00000 n 0000523710 00000 n 0000016286 00000 n 0000016336 00000 n 0000339634 00000 n 0000523618 00000 n 0000016381 00000 n 0000016433 00000 n 0000340204 00000 n 0000523526 00000 n 0000016478 00000 n 0000016518 00000 n 0000340901 00000 n 0000523434 00000 n 0000016563 00000 n 0000016611 00000 n 0000341595 00000 n 0000523342 00000 n 0000016656 00000 n 0000016707 00000 n 0000343710 00000 n 0000523250 00000 n 0000016752 00000 n 0000016801 00000 n 0000344279 00000 n 0000523158 00000 n 0000016846 00000 n 0000016888 00000 n 0000344848 00000 n 0000523066 00000 n 0000016933 00000 n 0000016976 00000 n 0000345414 00000 n 0000522974 00000 n 0000017021 00000 n 0000017067 00000 n 0000345984 00000 n 0000522882 00000 n 0000017112 00000 n 0000017156 00000 n 0000346678 00000 n 0000522790 00000 n 0000017201 00000 n 0000017252 00000 n 0000349533 00000 n 0000522698 00000 n 0000017297 00000 n 0000017333 00000 n 0000350037 00000 n 0000522606 00000 n 0000017378 00000 n 0000017421 00000 n 0000350604 00000 n 0000522514 00000 n 0000017466 00000 n 0000017509 00000 n 0000351170 00000 n 0000522422 00000 n 0000017554 00000 n 0000017602 00000 n 0000351739 00000 n 0000522330 00000 n 0000017647 00000 n 0000017694 00000 n 0000352372 00000 n 0000522238 00000 n 0000017739 00000 n 0000017786 00000 n 0000353987 00000 n 0000522146 00000 n 0000017831 00000 n 0000017882 00000 n 0000354812 00000 n 0000522054 00000 n 0000017927 00000 n 0000017983 00000 n 0000355638 00000 n 0000521962 00000 n 0000018028 00000 n 0000018087 00000 n 0000356204 00000 n 0000521870 00000 n 0000018132 00000 n 0000018173 00000 n 0000356902 00000 n 0000521778 00000 n 0000018218 00000 n 0000018277 00000 n 0000357598 00000 n 0000521686 00000 n 0000018322 00000 n 0000018375 00000 n 0000358164 00000 n 0000521594 00000 n 0000018420 00000 n 0000018456 00000 n 0000359910 00000 n 0000521502 00000 n 0000018501 00000 n 0000018544 00000 n 0000360479 00000 n 0000521410 00000 n 0000018589 00000 n 0000018628 00000 n 0000361113 00000 n 0000521318 00000 n 0000018673 00000 n 0000018711 00000 n 0000361741 00000 n 0000521226 00000 n 0000018756 00000 n 0000018796 00000 n 0000362373 00000 n 0000521134 00000 n 0000018841 00000 n 0000018881 00000 n 0000363006 00000 n 0000521042 00000 n 0000018926 00000 n 0000018974 00000 n 0000363572 00000 n 0000520950 00000 n 0000019019 00000 n 0000019062 00000 n 0000366496 00000 n 0000520858 00000 n 0000019107 00000 n 0000019146 00000 n 0000367129 00000 n 0000520766 00000 n 0000019191 00000 n 0000019240 00000 n 0000367761 00000 n 0000520674 00000 n 0000019285 00000 n 0000019334 00000 n 0000368388 00000 n 0000520582 00000 n 0000019379 00000 n 0000019428 00000 n 0000374533 00000 n 0000520490 00000 n 0000019473 00000 n 0000019514 00000 n 0000374912 00000 n 0000520398 00000 n 0000019559 00000 n 0000019601 00000 n 0000375545 00000 n 0000520306 00000 n 0000019646 00000 n 0000019692 00000 n 0000376114 00000 n 0000520214 00000 n 0000019737 00000 n 0000019773 00000 n 0000377493 00000 n 0000520122 00000 n 0000019818 00000 n 0000019857 00000 n 0000378062 00000 n 0000520030 00000 n 0000019902 00000 n 0000019938 00000 n 0000378696 00000 n 0000519938 00000 n 0000019983 00000 n 0000020024 00000 n 0000379136 00000 n 0000519846 00000 n 0000020069 00000 n 0000020110 00000 n 0000379578 00000 n 0000519754 00000 n 0000020155 00000 n 0000020193 00000 n 0000380019 00000 n 0000519662 00000 n 0000020238 00000 n 0000020276 00000 n 0000380459 00000 n 0000519570 00000 n 0000020321 00000 n 0000020359 00000 n 0000382999 00000 n 0000519478 00000 n 0000020404 00000 n 0000020453 00000 n 0000383440 00000 n 0000519386 00000 n 0000020498 00000 n 0000020541 00000 n 0000384010 00000 n 0000519294 00000 n 0000020586 00000 n 0000020630 00000 n 0000384700 00000 n 0000519202 00000 n 0000020675 00000 n 0000020726 00000 n 0000385524 00000 n 0000519110 00000 n 0000020771 00000 n 0000020824 00000 n 0000390462 00000 n 0000519018 00000 n 0000020869 00000 n 0000020931 00000 n 0000390969 00000 n 0000518926 00000 n 0000020976 00000 n 0000021017 00000 n 0000391667 00000 n 0000518834 00000 n 0000021062 00000 n 0000021114 00000 n 0000392364 00000 n 0000518742 00000 n 0000021159 00000 n 0000021217 00000 n 0000393841 00000 n 0000518650 00000 n 0000021262 00000 n 0000021300 00000 n 0000394473 00000 n 0000518558 00000 n 0000021345 00000 n 0000021387 00000 n 0000395106 00000 n 0000518466 00000 n 0000021432 00000 n 0000021478 00000 n 0000395732 00000 n 0000518374 00000 n 0000021523 00000 n 0000021570 00000 n 0000396302 00000 n 0000518282 00000 n 0000021615 00000 n 0000021656 00000 n 0000396871 00000 n 0000518190 00000 n 0000021701 00000 n 0000021741 00000 n 0000397437 00000 n 0000518098 00000 n 0000021786 00000 n 0000021827 00000 n 0000398921 00000 n 0000518006 00000 n 0000021872 00000 n 0000021914 00000 n 0000399490 00000 n 0000517914 00000 n 0000021959 00000 n 0000022002 00000 n 0000400060 00000 n 0000517822 00000 n 0000022047 00000 n 0000022092 00000 n 0000400626 00000 n 0000517730 00000 n 0000022137 00000 n 0000022182 00000 n 0000401196 00000 n 0000517636 00000 n 0000022227 00000 n 0000022269 00000 n 0000401765 00000 n 0000517540 00000 n 0000022315 00000 n 0000022357 00000 n 0000402332 00000 n 0000517443 00000 n 0000022403 00000 n 0000022444 00000 n 0000405435 00000 n 0000517346 00000 n 0000022490 00000 n 0000022533 00000 n 0000406068 00000 n 0000517249 00000 n 0000022579 00000 n 0000022631 00000 n 0000406701 00000 n 0000517152 00000 n 0000022677 00000 n 0000022722 00000 n 0000407460 00000 n 0000517055 00000 n 0000022768 00000 n 0000022847 00000 n 0000413375 00000 n 0000516958 00000 n 0000022893 00000 n 0000022937 00000 n 0000413946 00000 n 0000516861 00000 n 0000022983 00000 n 0000023038 00000 n 0000414645 00000 n 0000516764 00000 n 0000023084 00000 n 0000023138 00000 n 0000415214 00000 n 0000516667 00000 n 0000023184 00000 n 0000023229 00000 n 0000417762 00000 n 0000516570 00000 n 0000023275 00000 n 0000023319 00000 n 0000418332 00000 n 0000516473 00000 n 0000023365 00000 n 0000023407 00000 n 0000419477 00000 n 0000516376 00000 n 0000023453 00000 n 0000023498 00000 n 0000419983 00000 n 0000516279 00000 n 0000023544 00000 n 0000023590 00000 n 0000420553 00000 n 0000516182 00000 n 0000023636 00000 n 0000023684 00000 n 0000422102 00000 n 0000516085 00000 n 0000023730 00000 n 0000023774 00000 n 0000422610 00000 n 0000515988 00000 n 0000023820 00000 n 0000023866 00000 n 0000423179 00000 n 0000515891 00000 n 0000023912 00000 n 0000023960 00000 n 0000423621 00000 n 0000515794 00000 n 0000024006 00000 n 0000024051 00000 n 0000424063 00000 n 0000515697 00000 n 0000024097 00000 n 0000024141 00000 n 0000424505 00000 n 0000515600 00000 n 0000024187 00000 n 0000024231 00000 n 0000425138 00000 n 0000515503 00000 n 0000024277 00000 n 0000024320 00000 n 0000426692 00000 n 0000515406 00000 n 0000024366 00000 n 0000024408 00000 n 0000427262 00000 n 0000515309 00000 n 0000024454 00000 n 0000024504 00000 n 0000427833 00000 n 0000515212 00000 n 0000024550 00000 n 0000024598 00000 n 0000428463 00000 n 0000515115 00000 n 0000024644 00000 n 0000024699 00000 n 0000429162 00000 n 0000515018 00000 n 0000024745 00000 n 0000024811 00000 n 0000429730 00000 n 0000514921 00000 n 0000024857 00000 n 0000024900 00000 n 0000430297 00000 n 0000514824 00000 n 0000024946 00000 n 0000024988 00000 n 0000434108 00000 n 0000514727 00000 n 0000025034 00000 n 0000025072 00000 n 0000436452 00000 n 0000514630 00000 n 0000025118 00000 n 0000025159 00000 n 0000438807 00000 n 0000514533 00000 n 0000025205 00000 n 0000025248 00000 n 0000441940 00000 n 0000514436 00000 n 0000025294 00000 n 0000025348 00000 n 0000442385 00000 n 0000514339 00000 n 0000025394 00000 n 0000025446 00000 n 0000443084 00000 n 0000514242 00000 n 0000025492 00000 n 0000025547 00000 n 0000444159 00000 n 0000514145 00000 n 0000025593 00000 n 0000025636 00000 n 0000444729 00000 n 0000514048 00000 n 0000025682 00000 n 0000025729 00000 n 0000446863 00000 n 0000513951 00000 n 0000025775 00000 n 0000025824 00000 n 0000447876 00000 n 0000513854 00000 n 0000025870 00000 n 0000025913 00000 n 0000448447 00000 n 0000513757 00000 n 0000025959 00000 n 0000026005 00000 n 0000449267 00000 n 0000513660 00000 n 0000026051 00000 n 0000026096 00000 n 0000450282 00000 n 0000513578 00000 n 0000026142 00000 n 0000026184 00000 n 0000026636 00000 n 0000027010 00000 n 0000026238 00000 n 0000026760 00000 n 0000026823 00000 n 0000026886 00000 n 0000001178 00000 f 0000511599 00000 n 0000001306 00000 f 0000511504 00000 n 0000511696 00000 n 0000027664 00000 n 0000027477 00000 n 0000027098 00000 n 0000027601 00000 n 0000510585 00000 n 0000485717 00000 n 0000510409 00000 n 0000040818 00000 n 0000030281 00000 n 0000027766 00000 n 0000040694 00000 n 0000031011 00000 n 0000485165 00000 n 0000468986 00000 n 0000484988 00000 n 0000031156 00000 n 0000031301 00000 n 0000031447 00000 n 0000031593 00000 n 0000031738 00000 n 0000031883 00000 n 0000032030 00000 n 0000032177 00000 n 0000032324 00000 n 0000032471 00000 n 0000032617 00000 n 0000032764 00000 n 0000032910 00000 n 0000033056 00000 n 0000033203 00000 n 0000033350 00000 n 0000033496 00000 n 0000033642 00000 n 0000033789 00000 n 0000033935 00000 n 0000034082 00000 n 0000034228 00000 n 0000034375 00000 n 0000034521 00000 n 0000034668 00000 n 0000034814 00000 n 0000034961 00000 n 0000035107 00000 n 0000035254 00000 n 0000035400 00000 n 0000035547 00000 n 0000035693 00000 n 0000035840 00000 n 0000035986 00000 n 0000036134 00000 n 0000036281 00000 n 0000036429 00000 n 0000036576 00000 n 0000036724 00000 n 0000036871 00000 n 0000037019 00000 n 0000037166 00000 n 0000037314 00000 n 0000037461 00000 n 0000037608 00000 n 0000037754 00000 n 0000037902 00000 n 0000038049 00000 n 0000038196 00000 n 0000038342 00000 n 0000038490 00000 n 0000038637 00000 n 0000038784 00000 n 0000038930 00000 n 0000039078 00000 n 0000039225 00000 n 0000039373 00000 n 0000039520 00000 n 0000039666 00000 n 0000039812 00000 n 0000039960 00000 n 0000040107 00000 n 0000040255 00000 n 0000040402 00000 n 0000040548 00000 n 0000468332 00000 n 0000453108 00000 n 0000468156 00000 n 0000043407 00000 n 0000043532 00000 n 0000044421 00000 n 0000058370 00000 n 0000060343 00000 n 0000064164 00000 n 0000064670 00000 n 0000068097 00000 n 0000071439 00000 n 0000083571 00000 n 0000084587 00000 n 0000085602 00000 n 0000086172 00000 n 0000096117 00000 n 0000098197 00000 n 0000117245 00000 n 0000124870 00000 n 0000163903 00000 n 0000182632 00000 n 0000184774 00000 n 0000284723 00000 n 0000290064 00000 n 0000301745 00000 n 0000325159 00000 n 0000328351 00000 n 0000338244 00000 n 0000349470 00000 n 0000374470 00000 n 0000390401 00000 n 0000413312 00000 n 0000419414 00000 n 0000420996 00000 n 0000436389 00000 n 0000041314 00000 n 0000041127 00000 n 0000040948 00000 n 0000041251 00000 n 0000044989 00000 n 0000043283 00000 n 0000041388 00000 n 0000043657 00000 n 0000043720 00000 n 0000001427 00000 f 0000453018 00000 n 0000043783 00000 n 0000043847 00000 n 0000043910 00000 n 0000043974 00000 n 0000044038 00000 n 0000044102 00000 n 0000044166 00000 n 0000044229 00000 n 0000044293 00000 n 0000044357 00000 n 0000044546 00000 n 0000044609 00000 n 0000044673 00000 n 0000044737 00000 n 0000044800 00000 n 0000044862 00000 n 0000044926 00000 n 0000047872 00000 n 0000046675 00000 n 0000045119 00000 n 0000046799 00000 n 0000046862 00000 n 0000046925 00000 n 0000046988 00000 n 0000047051 00000 n 0000047115 00000 n 0000047178 00000 n 0000047240 00000 n 0000047304 00000 n 0000047368 00000 n 0000047432 00000 n 0000047494 00000 n 0000047557 00000 n 0000047620 00000 n 0000047683 00000 n 0000047746 00000 n 0000047809 00000 n 0000053263 00000 n 0000050220 00000 n 0000048002 00000 n 0000050344 00000 n 0000050407 00000 n 0000050471 00000 n 0000050535 00000 n 0000050599 00000 n 0000050663 00000 n 0000050727 00000 n 0000050791 00000 n 0000050855 00000 n 0000050919 00000 n 0000050982 00000 n 0000051046 00000 n 0000051110 00000 n 0000051173 00000 n 0000051237 00000 n 0000051301 00000 n 0000051364 00000 n 0000051428 00000 n 0000051492 00000 n 0000051556 00000 n 0000051619 00000 n 0000051682 00000 n 0000051746 00000 n 0000051810 00000 n 0000051874 00000 n 0000051938 00000 n 0000052001 00000 n 0000052064 00000 n 0000052128 00000 n 0000052191 00000 n 0000052254 00000 n 0000052317 00000 n 0000052379 00000 n 0000052442 00000 n 0000052505 00000 n 0000052569 00000 n 0000052632 00000 n 0000052696 00000 n 0000052759 00000 n 0000052823 00000 n 0000052887 00000 n 0000052950 00000 n 0000053013 00000 n 0000053076 00000 n 0000053138 00000 n 0000053201 00000 n 0000511821 00000 n 0000058620 00000 n 0000055762 00000 n 0000053365 00000 n 0000055886 00000 n 0000055949 00000 n 0000056013 00000 n 0000056077 00000 n 0000056141 00000 n 0000056204 00000 n 0000056267 00000 n 0000056331 00000 n 0000056395 00000 n 0000056459 00000 n 0000056523 00000 n 0000056586 00000 n 0000056649 00000 n 0000056713 00000 n 0000056777 00000 n 0000056840 00000 n 0000056903 00000 n 0000056966 00000 n 0000057029 00000 n 0000057093 00000 n 0000057157 00000 n 0000057221 00000 n 0000057285 00000 n 0000057349 00000 n 0000057413 00000 n 0000057477 00000 n 0000057541 00000 n 0000057605 00000 n 0000057669 00000 n 0000000000 00000 f 0000452920 00000 n 0000057733 00000 n 0000057797 00000 n 0000057861 00000 n 0000057925 00000 n 0000057988 00000 n 0000058051 00000 n 0000058114 00000 n 0000058178 00000 n 0000058242 00000 n 0000058306 00000 n 0000058495 00000 n 0000058558 00000 n 0000060974 00000 n 0000060156 00000 n 0000058750 00000 n 0000060280 00000 n 0000060468 00000 n 0000060531 00000 n 0000060595 00000 n 0000060658 00000 n 0000060722 00000 n 0000060785 00000 n 0000060849 00000 n 0000060912 00000 n 0000061537 00000 n 0000061350 00000 n 0000061104 00000 n 0000061474 00000 n 0000068600 00000 n 0000063977 00000 n 0000061611 00000 n 0000064101 00000 n 0000064289 00000 n 0000064352 00000 n 0000064415 00000 n 0000064479 00000 n 0000064543 00000 n 0000064606 00000 n 0000064794 00000 n 0000064857 00000 n 0000064921 00000 n 0000064985 00000 n 0000065049 00000 n 0000065113 00000 n 0000065176 00000 n 0000065239 00000 n 0000065302 00000 n 0000065366 00000 n 0000065430 00000 n 0000065494 00000 n 0000065558 00000 n 0000065622 00000 n 0000065686 00000 n 0000065750 00000 n 0000065814 00000 n 0000065877 00000 n 0000065940 00000 n 0000066003 00000 n 0000066066 00000 n 0000066130 00000 n 0000066194 00000 n 0000066258 00000 n 0000066322 00000 n 0000066385 00000 n 0000066448 00000 n 0000066511 00000 n 0000066574 00000 n 0000066638 00000 n 0000066702 00000 n 0000066766 00000 n 0000066830 00000 n 0000066894 00000 n 0000066958 00000 n 0000067022 00000 n 0000067086 00000 n 0000067150 00000 n 0000067214 00000 n 0000067278 00000 n 0000067342 00000 n 0000067406 00000 n 0000067470 00000 n 0000067534 00000 n 0000067598 00000 n 0000067662 00000 n 0000067724 00000 n 0000067786 00000 n 0000067848 00000 n 0000067910 00000 n 0000067972 00000 n 0000068034 00000 n 0000068222 00000 n 0000068285 00000 n 0000068349 00000 n 0000068412 00000 n 0000068475 00000 n 0000068538 00000 n 0000074552 00000 n 0000070999 00000 n 0000068730 00000 n 0000071123 00000 n 0000071186 00000 n 0000071248 00000 n 0000071311 00000 n 0000071375 00000 n 0000071564 00000 n 0000071627 00000 n 0000071691 00000 n 0000071755 00000 n 0000071819 00000 n 0000071883 00000 n 0000071947 00000 n 0000072011 00000 n 0000072075 00000 n 0000072139 00000 n 0000072203 00000 n 0000072266 00000 n 0000072329 00000 n 0000072392 00000 n 0000072456 00000 n 0000072519 00000 n 0000072583 00000 n 0000072647 00000 n 0000072710 00000 n 0000072773 00000 n 0000072837 00000 n 0000072901 00000 n 0000072964 00000 n 0000073027 00000 n 0000073090 00000 n 0000073153 00000 n 0000073217 00000 n 0000073281 00000 n 0000073345 00000 n 0000073407 00000 n 0000073470 00000 n 0000073534 00000 n 0000073598 00000 n 0000073662 00000 n 0000073725 00000 n 0000073789 00000 n 0000073853 00000 n 0000073917 00000 n 0000073981 00000 n 0000074045 00000 n 0000074109 00000 n 0000074172 00000 n 0000074236 00000 n 0000074300 00000 n 0000074363 00000 n 0000074426 00000 n 0000074489 00000 n 0000079913 00000 n 0000076806 00000 n 0000074682 00000 n 0000076930 00000 n 0000076993 00000 n 0000077056 00000 n 0000077120 00000 n 0000077183 00000 n 0000077246 00000 n 0000077310 00000 n 0000077374 00000 n 0000077438 00000 n 0000077502 00000 n 0000077566 00000 n 0000077630 00000 n 0000077693 00000 n 0000077757 00000 n 0000077821 00000 n 0000077885 00000 n 0000077948 00000 n 0000078012 00000 n 0000078075 00000 n 0000078138 00000 n 0000078201 00000 n 0000078265 00000 n 0000078329 00000 n 0000078393 00000 n 0000078456 00000 n 0000078519 00000 n 0000078582 00000 n 0000078645 00000 n 0000078708 00000 n 0000078771 00000 n 0000078834 00000 n 0000078898 00000 n 0000078961 00000 n 0000079024 00000 n 0000079088 00000 n 0000079152 00000 n 0000079216 00000 n 0000079280 00000 n 0000079344 00000 n 0000079408 00000 n 0000079472 00000 n 0000079535 00000 n 0000079598 00000 n 0000079661 00000 n 0000079724 00000 n 0000079787 00000 n 0000079850 00000 n 0000511946 00000 n 0000086235 00000 n 0000082681 00000 n 0000080029 00000 n 0000082805 00000 n 0000082868 00000 n 0000082931 00000 n 0000082995 00000 n 0000083059 00000 n 0000083123 00000 n 0000083187 00000 n 0000083251 00000 n 0000083315 00000 n 0000083379 00000 n 0000083443 00000 n 0000083507 00000 n 0000083695 00000 n 0000083758 00000 n 0000083822 00000 n 0000083886 00000 n 0000083950 00000 n 0000084014 00000 n 0000084076 00000 n 0000084140 00000 n 0000084204 00000 n 0000084268 00000 n 0000084332 00000 n 0000084396 00000 n 0000084459 00000 n 0000084523 00000 n 0000084712 00000 n 0000084775 00000 n 0000084839 00000 n 0000084903 00000 n 0000084966 00000 n 0000085029 00000 n 0000085092 00000 n 0000085156 00000 n 0000085220 00000 n 0000085284 00000 n 0000085348 00000 n 0000085412 00000 n 0000085476 00000 n 0000085539 00000 n 0000085726 00000 n 0000085789 00000 n 0000085853 00000 n 0000085917 00000 n 0000085981 00000 n 0000086045 00000 n 0000086108 00000 n 0000091270 00000 n 0000087191 00000 n 0000086365 00000 n 0000087315 00000 n 0000087440 00000 n 0000087503 00000 n 0000087566 00000 n 0000087691 00000 n 0000087754 00000 n 0000087817 00000 n 0000087880 00000 n 0000088005 00000 n 0000088068 00000 n 0000088131 00000 n 0000088194 00000 n 0000088319 00000 n 0000088382 00000 n 0000088444 00000 n 0000088508 00000 n 0000088571 00000 n 0000088695 00000 n 0000088758 00000 n 0000088821 00000 n 0000088885 00000 n 0000088948 00000 n 0000089073 00000 n 0000089136 00000 n 0000089197 00000 n 0000089260 00000 n 0000089385 00000 n 0000089448 00000 n 0000089511 00000 n 0000089575 00000 n 0000089638 00000 n 0000089763 00000 n 0000089825 00000 n 0000089888 00000 n 0000089951 00000 n 0000090076 00000 n 0000090139 00000 n 0000090202 00000 n 0000090265 00000 n 0000090390 00000 n 0000090453 00000 n 0000090516 00000 n 0000090579 00000 n 0000090643 00000 n 0000090706 00000 n 0000090831 00000 n 0000090894 00000 n 0000090957 00000 n 0000091019 00000 n 0000091144 00000 n 0000091207 00000 n 0000097000 00000 n 0000093773 00000 n 0000091386 00000 n 0000093897 00000 n 0000093960 00000 n 0000094023 00000 n 0000094149 00000 n 0000094212 00000 n 0000094275 00000 n 0000094338 00000 n 0000094464 00000 n 0000094527 00000 n 0000094590 00000 n 0000094653 00000 n 0000094779 00000 n 0000094841 00000 n 0000094904 00000 n 0000094967 00000 n 0000095031 00000 n 0000095095 00000 n 0000095159 00000 n 0000095223 00000 n 0000095287 00000 n 0000095350 00000 n 0000095414 00000 n 0000095478 00000 n 0000095542 00000 n 0000095606 00000 n 0000095670 00000 n 0000095734 00000 n 0000095798 00000 n 0000095862 00000 n 0000095926 00000 n 0000095990 00000 n 0000096054 00000 n 0000096243 00000 n 0000096306 00000 n 0000096370 00000 n 0000096434 00000 n 0000096498 00000 n 0000096561 00000 n 0000096624 00000 n 0000096687 00000 n 0000096750 00000 n 0000096813 00000 n 0000096876 00000 n 0000096938 00000 n 0000101801 00000 n 0000097947 00000 n 0000097130 00000 n 0000098071 00000 n 0000098134 00000 n 0000098323 00000 n 0000098386 00000 n 0000098449 00000 n 0000098511 00000 n 0000098574 00000 n 0000098638 00000 n 0000098702 00000 n 0000098766 00000 n 0000098830 00000 n 0000098957 00000 n 0000099020 00000 n 0000099083 00000 n 0000099146 00000 n 0000099209 00000 n 0000099271 00000 n 0000099335 00000 n 0000099399 00000 n 0000099463 00000 n 0000099590 00000 n 0000099653 00000 n 0000099716 00000 n 0000099778 00000 n 0000099841 00000 n 0000099904 00000 n 0000099968 00000 n 0000100032 00000 n 0000100096 00000 n 0000100160 00000 n 0000100286 00000 n 0000100349 00000 n 0000100412 00000 n 0000100475 00000 n 0000100538 00000 n 0000100601 00000 n 0000100665 00000 n 0000100729 00000 n 0000100793 00000 n 0000100920 00000 n 0000100983 00000 n 0000101046 00000 n 0000101109 00000 n 0000101172 00000 n 0000101235 00000 n 0000101299 00000 n 0000101363 00000 n 0000101427 00000 n 0000101554 00000 n 0000101617 00000 n 0000101677 00000 n 0000101739 00000 n 0000107118 00000 n 0000102638 00000 n 0000101931 00000 n 0000102762 00000 n 0000102825 00000 n 0000102888 00000 n 0000102952 00000 n 0000103016 00000 n 0000103080 00000 n 0000103206 00000 n 0000103269 00000 n 0000103332 00000 n 0000103395 00000 n 0000103458 00000 n 0000103521 00000 n 0000103585 00000 n 0000103649 00000 n 0000103776 00000 n 0000103839 00000 n 0000103902 00000 n 0000103965 00000 n 0000104028 00000 n 0000104091 00000 n 0000104155 00000 n 0000104218 00000 n 0000104344 00000 n 0000104407 00000 n 0000104469 00000 n 0000104532 00000 n 0000104595 00000 n 0000104658 00000 n 0000104721 00000 n 0000104784 00000 n 0000104910 00000 n 0000104973 00000 n 0000105036 00000 n 0000105099 00000 n 0000105162 00000 n 0000105225 00000 n 0000105289 00000 n 0000105353 00000 n 0000105417 00000 n 0000105544 00000 n 0000105607 00000 n 0000105670 00000 n 0000105733 00000 n 0000105795 00000 n 0000105858 00000 n 0000105922 00000 n 0000105986 00000 n 0000106050 00000 n 0000106177 00000 n 0000106239 00000 n 0000106302 00000 n 0000106365 00000 n 0000106428 00000 n 0000106491 00000 n 0000106554 00000 n 0000106617 00000 n 0000106680 00000 n 0000106743 00000 n 0000106868 00000 n 0000106931 00000 n 0000106994 00000 n 0000107056 00000 n 0000112449 00000 n 0000107838 00000 n 0000107234 00000 n 0000107962 00000 n 0000108025 00000 n 0000108088 00000 n 0000108152 00000 n 0000108216 00000 n 0000108280 00000 n 0000108344 00000 n 0000108470 00000 n 0000108533 00000 n 0000108596 00000 n 0000108659 00000 n 0000108722 00000 n 0000108785 00000 n 0000108849 00000 n 0000108913 00000 n 0000109040 00000 n 0000109103 00000 n 0000109166 00000 n 0000109229 00000 n 0000109292 00000 n 0000109355 00000 n 0000109419 00000 n 0000109483 00000 n 0000109547 00000 n 0000109674 00000 n 0000109737 00000 n 0000109799 00000 n 0000109862 00000 n 0000109925 00000 n 0000109988 00000 n 0000110051 00000 n 0000110114 00000 n 0000110177 00000 n 0000110303 00000 n 0000110366 00000 n 0000110429 00000 n 0000110492 00000 n 0000110555 00000 n 0000110618 00000 n 0000110682 00000 n 0000110746 00000 n 0000110810 00000 n 0000110937 00000 n 0000111000 00000 n 0000111063 00000 n 0000111126 00000 n 0000111188 00000 n 0000111251 00000 n 0000111315 00000 n 0000111379 00000 n 0000111443 00000 n 0000111570 00000 n 0000111632 00000 n 0000111695 00000 n 0000111758 00000 n 0000111821 00000 n 0000111884 00000 n 0000111947 00000 n 0000112010 00000 n 0000112073 00000 n 0000112199 00000 n 0000112262 00000 n 0000112325 00000 n 0000112387 00000 n 0000512071 00000 n 0000119263 00000 n 0000114516 00000 n 0000112565 00000 n 0000114640 00000 n 0000114703 00000 n 0000114766 00000 n 0000114830 00000 n 0000114894 00000 n 0000114958 00000 n 0000115084 00000 n 0000115147 00000 n 0000115210 00000 n 0000115273 00000 n 0000115336 00000 n 0000115399 00000 n 0000115463 00000 n 0000115527 00000 n 0000115591 00000 n 0000115655 00000 n 0000115719 00000 n 0000115783 00000 n 0000115847 00000 n 0000115910 00000 n 0000115973 00000 n 0000116037 00000 n 0000116101 00000 n 0000116165 00000 n 0000116229 00000 n 0000116293 00000 n 0000116357 00000 n 0000116420 00000 n 0000116483 00000 n 0000116547 00000 n 0000116610 00000 n 0000116673 00000 n 0000116737 00000 n 0000116801 00000 n 0000116863 00000 n 0000116925 00000 n 0000116989 00000 n 0000117053 00000 n 0000117117 00000 n 0000117181 00000 n 0000117370 00000 n 0000117433 00000 n 0000117496 00000 n 0000117558 00000 n 0000117621 00000 n 0000117685 00000 n 0000117749 00000 n 0000117876 00000 n 0000117939 00000 n 0000118002 00000 n 0000118065 00000 n 0000118128 00000 n 0000118190 00000 n 0000118254 00000 n 0000118318 00000 n 0000118445 00000 n 0000118508 00000 n 0000118571 00000 n 0000118633 00000 n 0000118696 00000 n 0000118759 00000 n 0000118823 00000 n 0000118887 00000 n 0000119013 00000 n 0000119076 00000 n 0000119139 00000 n 0000119201 00000 n 0000124932 00000 n 0000120515 00000 n 0000119393 00000 n 0000120639 00000 n 0000120702 00000 n 0000120765 00000 n 0000120829 00000 n 0000120893 00000 n 0000121019 00000 n 0000121082 00000 n 0000121145 00000 n 0000121208 00000 n 0000121271 00000 n 0000121334 00000 n 0000121398 00000 n 0000121462 00000 n 0000121589 00000 n 0000121652 00000 n 0000121715 00000 n 0000121778 00000 n 0000121841 00000 n 0000121904 00000 n 0000121968 00000 n 0000122032 00000 n 0000122159 00000 n 0000122222 00000 n 0000122284 00000 n 0000122347 00000 n 0000122410 00000 n 0000122473 00000 n 0000122536 00000 n 0000122599 00000 n 0000122662 00000 n 0000122725 00000 n 0000122787 00000 n 0000122913 00000 n 0000122976 00000 n 0000123039 00000 n 0000123102 00000 n 0000123165 00000 n 0000123228 00000 n 0000123292 00000 n 0000123356 00000 n 0000123420 00000 n 0000123484 00000 n 0000123548 00000 n 0000123675 00000 n 0000123738 00000 n 0000123800 00000 n 0000123863 00000 n 0000123926 00000 n 0000123989 00000 n 0000124052 00000 n 0000124115 00000 n 0000124178 00000 n 0000124240 00000 n 0000124303 00000 n 0000124429 00000 n 0000124492 00000 n 0000124555 00000 n 0000124618 00000 n 0000124682 00000 n 0000124746 00000 n 0000124808 00000 n 0000129984 00000 n 0000125688 00000 n 0000125048 00000 n 0000125812 00000 n 0000125938 00000 n 0000126001 00000 n 0000126064 00000 n 0000126127 00000 n 0000126190 00000 n 0000126254 00000 n 0000126318 00000 n 0000126382 00000 n 0000126446 00000 n 0000126573 00000 n 0000126636 00000 n 0000126699 00000 n 0000126762 00000 n 0000126823 00000 n 0000126886 00000 n 0000126950 00000 n 0000127014 00000 n 0000127078 00000 n 0000127141 00000 n 0000127205 00000 n 0000127332 00000 n 0000127394 00000 n 0000127457 00000 n 0000127520 00000 n 0000127583 00000 n 0000127646 00000 n 0000127710 00000 n 0000127774 00000 n 0000127901 00000 n 0000127964 00000 n 0000128027 00000 n 0000128090 00000 n 0000128153 00000 n 0000128215 00000 n 0000128279 00000 n 0000128343 00000 n 0000128470 00000 n 0000128533 00000 n 0000128596 00000 n 0000128658 00000 n 0000128721 00000 n 0000128784 00000 n 0000128848 00000 n 0000128912 00000 n 0000128976 00000 n 0000129101 00000 n 0000129164 00000 n 0000129227 00000 n 0000129290 00000 n 0000129353 00000 n 0000129416 00000 n 0000129480 00000 n 0000129543 00000 n 0000129669 00000 n 0000129732 00000 n 0000129795 00000 n 0000129858 00000 n 0000129921 00000 n 0000134803 00000 n 0000130703 00000 n 0000130114 00000 n 0000130827 00000 n 0000130890 00000 n 0000130954 00000 n 0000131017 00000 n 0000131142 00000 n 0000131205 00000 n 0000131268 00000 n 0000131331 00000 n 0000131394 00000 n 0000131457 00000 n 0000131521 00000 n 0000131585 00000 n 0000131712 00000 n 0000131775 00000 n 0000131838 00000 n 0000131901 00000 n 0000131964 00000 n 0000132027 00000 n 0000132091 00000 n 0000132155 00000 n 0000132282 00000 n 0000132345 00000 n 0000132407 00000 n 0000132470 00000 n 0000132533 00000 n 0000132596 00000 n 0000132659 00000 n 0000132722 00000 n 0000132848 00000 n 0000132911 00000 n 0000132974 00000 n 0000133037 00000 n 0000133100 00000 n 0000133163 00000 n 0000133227 00000 n 0000133291 00000 n 0000133418 00000 n 0000133481 00000 n 0000133544 00000 n 0000133607 00000 n 0000133669 00000 n 0000133732 00000 n 0000133796 00000 n 0000133860 00000 n 0000133987 00000 n 0000134049 00000 n 0000134112 00000 n 0000134175 00000 n 0000134238 00000 n 0000134301 00000 n 0000134364 00000 n 0000134427 00000 n 0000134553 00000 n 0000134616 00000 n 0000134679 00000 n 0000134741 00000 n 0000139795 00000 n 0000135568 00000 n 0000134919 00000 n 0000135692 00000 n 0000135755 00000 n 0000135818 00000 n 0000135882 00000 n 0000135946 00000 n 0000136072 00000 n 0000136135 00000 n 0000136198 00000 n 0000136261 00000 n 0000136324 00000 n 0000136387 00000 n 0000136451 00000 n 0000136515 00000 n 0000136642 00000 n 0000136705 00000 n 0000136768 00000 n 0000136831 00000 n 0000136894 00000 n 0000136957 00000 n 0000137021 00000 n 0000137085 00000 n 0000137149 00000 n 0000137276 00000 n 0000137339 00000 n 0000137401 00000 n 0000137464 00000 n 0000137527 00000 n 0000137590 00000 n 0000137653 00000 n 0000137716 00000 n 0000137842 00000 n 0000137905 00000 n 0000137968 00000 n 0000138031 00000 n 0000138094 00000 n 0000138157 00000 n 0000138221 00000 n 0000138285 00000 n 0000138412 00000 n 0000138475 00000 n 0000138538 00000 n 0000138601 00000 n 0000138663 00000 n 0000138726 00000 n 0000138790 00000 n 0000138854 00000 n 0000138981 00000 n 0000139043 00000 n 0000139106 00000 n 0000139169 00000 n 0000139232 00000 n 0000139295 00000 n 0000139358 00000 n 0000139420 00000 n 0000139545 00000 n 0000139608 00000 n 0000139671 00000 n 0000139733 00000 n 0000144659 00000 n 0000140622 00000 n 0000139911 00000 n 0000140746 00000 n 0000140809 00000 n 0000140872 00000 n 0000140936 00000 n 0000141000 00000 n 0000141064 00000 n 0000141128 00000 n 0000141254 00000 n 0000141317 00000 n 0000141380 00000 n 0000141443 00000 n 0000141506 00000 n 0000141569 00000 n 0000141633 00000 n 0000141697 00000 n 0000141824 00000 n 0000141887 00000 n 0000141950 00000 n 0000142013 00000 n 0000142076 00000 n 0000142139 00000 n 0000142203 00000 n 0000142266 00000 n 0000142392 00000 n 0000142455 00000 n 0000142517 00000 n 0000142580 00000 n 0000142643 00000 n 0000142706 00000 n 0000142769 00000 n 0000142832 00000 n 0000142958 00000 n 0000143021 00000 n 0000143084 00000 n 0000143147 00000 n 0000143210 00000 n 0000143273 00000 n 0000143337 00000 n 0000143401 00000 n 0000143528 00000 n 0000143591 00000 n 0000143654 00000 n 0000143717 00000 n 0000143779 00000 n 0000143842 00000 n 0000143969 00000 n 0000144031 00000 n 0000144094 00000 n 0000144157 00000 n 0000144220 00000 n 0000144283 00000 n 0000144409 00000 n 0000144472 00000 n 0000144535 00000 n 0000144597 00000 n 0000512196 00000 n 0000150094 00000 n 0000145492 00000 n 0000144775 00000 n 0000145616 00000 n 0000145679 00000 n 0000145742 00000 n 0000145806 00000 n 0000145870 00000 n 0000145996 00000 n 0000146059 00000 n 0000146122 00000 n 0000146185 00000 n 0000146248 00000 n 0000146311 00000 n 0000146375 00000 n 0000146439 00000 n 0000146566 00000 n 0000146629 00000 n 0000146692 00000 n 0000146755 00000 n 0000146817 00000 n 0000146879 00000 n 0000146942 00000 n 0000147006 00000 n 0000147070 00000 n 0000147134 00000 n 0000147259 00000 n 0000147322 00000 n 0000147385 00000 n 0000147448 00000 n 0000147511 00000 n 0000147574 00000 n 0000147637 00000 n 0000147701 00000 n 0000147765 00000 n 0000147829 00000 n 0000147954 00000 n 0000148017 00000 n 0000148080 00000 n 0000148142 00000 n 0000148205 00000 n 0000148268 00000 n 0000148331 00000 n 0000148395 00000 n 0000148521 00000 n 0000148584 00000 n 0000148647 00000 n 0000148710 00000 n 0000148773 00000 n 0000148836 00000 n 0000148899 00000 n 0000148963 00000 n 0000149027 00000 n 0000149091 00000 n 0000149216 00000 n 0000149279 00000 n 0000149340 00000 n 0000149403 00000 n 0000149466 00000 n 0000149529 00000 n 0000149592 00000 n 0000149656 00000 n 0000149720 00000 n 0000149784 00000 n 0000149909 00000 n 0000149968 00000 n 0000150031 00000 n 0000157651 00000 n 0000153096 00000 n 0000150224 00000 n 0000153220 00000 n 0000153283 00000 n 0000153345 00000 n 0000153408 00000 n 0000153471 00000 n 0000153534 00000 n 0000153598 00000 n 0000153662 00000 n 0000153788 00000 n 0000153851 00000 n 0000153914 00000 n 0000153977 00000 n 0000154040 00000 n 0000154103 00000 n 0000154167 00000 n 0000154231 00000 n 0000154295 00000 n 0000154358 00000 n 0000154420 00000 n 0000154482 00000 n 0000154546 00000 n 0000154610 00000 n 0000154673 00000 n 0000154736 00000 n 0000154800 00000 n 0000154864 00000 n 0000154928 00000 n 0000154992 00000 n 0000155055 00000 n 0000155118 00000 n 0000155182 00000 n 0000155245 00000 n 0000155309 00000 n 0000155373 00000 n 0000155436 00000 n 0000155499 00000 n 0000155563 00000 n 0000155627 00000 n 0000155691 00000 n 0000155755 00000 n 0000155819 00000 n 0000155883 00000 n 0000155946 00000 n 0000156009 00000 n 0000156073 00000 n 0000156137 00000 n 0000156201 00000 n 0000156265 00000 n 0000156327 00000 n 0000156391 00000 n 0000156454 00000 n 0000156517 00000 n 0000156580 00000 n 0000156643 00000 n 0000156706 00000 n 0000156769 00000 n 0000156832 00000 n 0000156895 00000 n 0000156959 00000 n 0000157023 00000 n 0000157086 00000 n 0000157149 00000 n 0000157212 00000 n 0000157274 00000 n 0000157336 00000 n 0000157399 00000 n 0000157462 00000 n 0000157525 00000 n 0000157588 00000 n 0000163966 00000 n 0000160798 00000 n 0000157781 00000 n 0000160922 00000 n 0000160985 00000 n 0000161049 00000 n 0000161113 00000 n 0000161177 00000 n 0000161241 00000 n 0000161303 00000 n 0000161365 00000 n 0000161429 00000 n 0000161493 00000 n 0000161557 00000 n 0000161621 00000 n 0000161685 00000 n 0000161749 00000 n 0000161813 00000 n 0000161877 00000 n 0000161940 00000 n 0000162003 00000 n 0000162067 00000 n 0000162131 00000 n 0000162194 00000 n 0000162257 00000 n 0000162321 00000 n 0000162385 00000 n 0000162449 00000 n 0000162513 00000 n 0000162577 00000 n 0000162640 00000 n 0000162703 00000 n 0000162766 00000 n 0000162829 00000 n 0000162892 00000 n 0000162955 00000 n 0000163019 00000 n 0000163082 00000 n 0000163145 00000 n 0000163209 00000 n 0000163272 00000 n 0000163335 00000 n 0000163398 00000 n 0000163461 00000 n 0000163524 00000 n 0000163587 00000 n 0000163650 00000 n 0000163713 00000 n 0000163776 00000 n 0000163839 00000 n 0000168625 00000 n 0000164710 00000 n 0000164082 00000 n 0000164834 00000 n 0000164960 00000 n 0000165023 00000 n 0000165086 00000 n 0000165149 00000 n 0000165212 00000 n 0000165276 00000 n 0000165340 00000 n 0000165467 00000 n 0000165530 00000 n 0000165593 00000 n 0000165656 00000 n 0000165717 00000 n 0000165780 00000 n 0000165844 00000 n 0000165908 00000 n 0000166035 00000 n 0000166097 00000 n 0000166160 00000 n 0000166223 00000 n 0000166286 00000 n 0000166349 00000 n 0000166413 00000 n 0000166477 00000 n 0000166604 00000 n 0000166667 00000 n 0000166730 00000 n 0000166793 00000 n 0000166856 00000 n 0000166918 00000 n 0000166982 00000 n 0000167046 00000 n 0000167173 00000 n 0000167236 00000 n 0000167299 00000 n 0000167361 00000 n 0000167424 00000 n 0000167487 00000 n 0000167551 00000 n 0000167614 00000 n 0000167740 00000 n 0000167803 00000 n 0000167866 00000 n 0000167929 00000 n 0000167992 00000 n 0000168055 00000 n 0000168119 00000 n 0000168183 00000 n 0000168310 00000 n 0000168373 00000 n 0000168436 00000 n 0000168499 00000 n 0000168562 00000 n 0000173411 00000 n 0000169441 00000 n 0000168755 00000 n 0000169565 00000 n 0000169628 00000 n 0000169692 00000 n 0000169756 00000 n 0000169820 00000 n 0000169883 00000 n 0000170008 00000 n 0000170071 00000 n 0000170134 00000 n 0000170197 00000 n 0000170260 00000 n 0000170323 00000 n 0000170387 00000 n 0000170450 00000 n 0000170576 00000 n 0000170639 00000 n 0000170702 00000 n 0000170765 00000 n 0000170828 00000 n 0000170891 00000 n 0000170955 00000 n 0000171019 00000 n 0000171146 00000 n 0000171209 00000 n 0000171271 00000 n 0000171334 00000 n 0000171397 00000 n 0000171460 00000 n 0000171523 00000 n 0000171586 00000 n 0000171712 00000 n 0000171775 00000 n 0000171838 00000 n 0000171901 00000 n 0000171964 00000 n 0000172027 00000 n 0000172154 00000 n 0000172217 00000 n 0000172280 00000 n 0000172343 00000 n 0000172405 00000 n 0000172468 00000 n 0000172595 00000 n 0000172657 00000 n 0000172720 00000 n 0000172783 00000 n 0000172846 00000 n 0000172909 00000 n 0000172972 00000 n 0000173035 00000 n 0000173161 00000 n 0000173224 00000 n 0000173287 00000 n 0000173349 00000 n 0000180479 00000 n 0000175616 00000 n 0000173527 00000 n 0000175740 00000 n 0000175803 00000 n 0000175866 00000 n 0000175930 00000 n 0000175994 00000 n 0000176120 00000 n 0000176183 00000 n 0000176246 00000 n 0000176309 00000 n 0000176372 00000 n 0000176435 00000 n 0000176497 00000 n 0000176559 00000 n 0000176622 00000 n 0000176747 00000 n 0000176810 00000 n 0000176873 00000 n 0000176936 00000 n 0000176999 00000 n 0000177062 00000 n 0000177125 00000 n 0000177189 00000 n 0000177253 00000 n 0000177379 00000 n 0000177442 00000 n 0000177505 00000 n 0000177568 00000 n 0000177631 00000 n 0000177694 00000 n 0000177758 00000 n 0000177822 00000 n 0000177948 00000 n 0000178011 00000 n 0000178074 00000 n 0000178137 00000 n 0000178200 00000 n 0000178263 00000 n 0000178327 00000 n 0000178390 00000 n 0000178453 00000 n 0000178517 00000 n 0000178581 00000 n 0000178644 00000 n 0000178707 00000 n 0000178770 00000 n 0000178833 00000 n 0000178897 00000 n 0000178960 00000 n 0000179023 00000 n 0000179086 00000 n 0000179149 00000 n 0000179213 00000 n 0000179277 00000 n 0000179341 00000 n 0000179405 00000 n 0000179469 00000 n 0000179533 00000 n 0000179596 00000 n 0000179659 00000 n 0000179722 00000 n 0000179785 00000 n 0000179848 00000 n 0000179911 00000 n 0000179973 00000 n 0000180035 00000 n 0000180098 00000 n 0000180161 00000 n 0000180225 00000 n 0000180289 00000 n 0000180353 00000 n 0000180416 00000 n 0000512321 00000 n 0000185657 00000 n 0000182193 00000 n 0000180609 00000 n 0000182317 00000 n 0000182380 00000 n 0000182443 00000 n 0000182506 00000 n 0000182569 00000 n 0000182757 00000 n 0000182820 00000 n 0000182882 00000 n 0000182945 00000 n 0000183008 00000 n 0000183071 00000 n 0000183135 00000 n 0000183260 00000 n 0000183323 00000 n 0000183386 00000 n 0000183449 00000 n 0000183512 00000 n 0000183575 00000 n 0000183638 00000 n 0000183702 00000 n 0000183828 00000 n 0000183891 00000 n 0000183954 00000 n 0000184017 00000 n 0000184079 00000 n 0000184141 00000 n 0000184204 00000 n 0000184268 00000 n 0000184394 00000 n 0000184457 00000 n 0000184520 00000 n 0000184583 00000 n 0000184646 00000 n 0000184710 00000 n 0000184900 00000 n 0000184963 00000 n 0000185026 00000 n 0000185089 00000 n 0000185152 00000 n 0000185216 00000 n 0000185280 00000 n 0000185407 00000 n 0000185470 00000 n 0000185533 00000 n 0000185595 00000 n 0000190775 00000 n 0000186425 00000 n 0000185801 00000 n 0000186549 00000 n 0000186612 00000 n 0000186675 00000 n 0000186739 00000 n 0000186802 00000 n 0000186927 00000 n 0000186990 00000 n 0000187053 00000 n 0000187116 00000 n 0000187179 00000 n 0000187242 00000 n 0000187306 00000 n 0000187369 00000 n 0000187495 00000 n 0000187558 00000 n 0000187621 00000 n 0000187684 00000 n 0000187747 00000 n 0000187810 00000 n 0000187874 00000 n 0000187938 00000 n 0000188065 00000 n 0000188128 00000 n 0000188190 00000 n 0000188253 00000 n 0000188316 00000 n 0000188379 00000 n 0000188442 00000 n 0000188505 00000 n 0000188568 00000 n 0000188694 00000 n 0000188757 00000 n 0000188820 00000 n 0000188883 00000 n 0000188946 00000 n 0000189009 00000 n 0000189073 00000 n 0000189137 00000 n 0000189264 00000 n 0000189327 00000 n 0000189390 00000 n 0000189453 00000 n 0000189515 00000 n 0000189578 00000 n 0000189642 00000 n 0000189706 00000 n 0000189770 00000 n 0000189897 00000 n 0000189959 00000 n 0000190022 00000 n 0000190085 00000 n 0000190148 00000 n 0000190211 00000 n 0000190274 00000 n 0000190337 00000 n 0000190400 00000 n 0000190525 00000 n 0000190588 00000 n 0000190651 00000 n 0000190713 00000 n 0000196034 00000 n 0000191554 00000 n 0000190891 00000 n 0000191678 00000 n 0000191741 00000 n 0000191804 00000 n 0000191868 00000 n 0000191932 00000 n 0000192058 00000 n 0000192121 00000 n 0000192184 00000 n 0000192247 00000 n 0000192310 00000 n 0000192373 00000 n 0000192437 00000 n 0000192500 00000 n 0000192563 00000 n 0000192627 00000 n 0000192754 00000 n 0000192817 00000 n 0000192880 00000 n 0000192943 00000 n 0000193006 00000 n 0000193069 00000 n 0000193133 00000 n 0000193197 00000 n 0000193260 00000 n 0000193387 00000 n 0000193450 00000 n 0000193512 00000 n 0000193575 00000 n 0000193638 00000 n 0000193701 00000 n 0000193764 00000 n 0000193827 00000 n 0000193890 00000 n 0000194016 00000 n 0000194079 00000 n 0000194142 00000 n 0000194205 00000 n 0000194268 00000 n 0000194331 00000 n 0000194395 00000 n 0000194459 00000 n 0000194523 00000 n 0000194649 00000 n 0000194712 00000 n 0000194775 00000 n 0000194838 00000 n 0000194900 00000 n 0000194963 00000 n 0000195027 00000 n 0000195090 00000 n 0000195153 00000 n 0000195280 00000 n 0000195342 00000 n 0000195405 00000 n 0000195468 00000 n 0000195531 00000 n 0000195594 00000 n 0000195657 00000 n 0000195720 00000 n 0000195846 00000 n 0000195909 00000 n 0000195972 00000 n 0000199918 00000 n 0000198671 00000 n 0000197283 00000 n 0000196150 00000 n 0000197407 00000 n 0000197470 00000 n 0000197532 00000 n 0000197595 00000 n 0000197658 00000 n 0000197721 00000 n 0000197785 00000 n 0000197849 00000 n 0000197975 00000 n 0000198038 00000 n 0000198101 00000 n 0000198164 00000 n 0000198227 00000 n 0000198291 00000 n 0000198355 00000 n 0000198417 00000 n 0000198480 00000 n 0000198543 00000 n 0000198607 00000 n 0000199380 00000 n 0000199067 00000 n 0000198801 00000 n 0000199191 00000 n 0000199254 00000 n 0000199317 00000 n 0000279258 00000 n 0000199794 00000 n 0000199468 00000 n 0000279195 00000 n 0000512446 00000 n 0000286363 00000 n 0000281928 00000 n 0000279383 00000 n 0000282052 00000 n 0000282115 00000 n 0000282179 00000 n 0000282243 00000 n 0000282307 00000 n 0000282371 00000 n 0000282435 00000 n 0000282499 00000 n 0000282563 00000 n 0000282626 00000 n 0000282689 00000 n 0000282753 00000 n 0000282817 00000 n 0000282881 00000 n 0000282945 00000 n 0000283008 00000 n 0000283071 00000 n 0000283135 00000 n 0000283199 00000 n 0000283261 00000 n 0000283325 00000 n 0000283389 00000 n 0000283453 00000 n 0000283516 00000 n 0000283579 00000 n 0000283641 00000 n 0000283705 00000 n 0000283768 00000 n 0000283831 00000 n 0000283895 00000 n 0000283959 00000 n 0000284022 00000 n 0000284085 00000 n 0000284149 00000 n 0000284213 00000 n 0000284277 00000 n 0000284341 00000 n 0000284405 00000 n 0000284469 00000 n 0000284533 00000 n 0000284596 00000 n 0000284659 00000 n 0000284849 00000 n 0000284912 00000 n 0000284975 00000 n 0000285038 00000 n 0000285101 00000 n 0000285165 00000 n 0000285228 00000 n 0000285354 00000 n 0000285417 00000 n 0000285479 00000 n 0000285542 00000 n 0000285605 00000 n 0000285668 00000 n 0000285732 00000 n 0000285796 00000 n 0000285860 00000 n 0000285924 00000 n 0000286051 00000 n 0000286114 00000 n 0000286177 00000 n 0000286239 00000 n 0000286301 00000 n 0000291515 00000 n 0000287790 00000 n 0000286493 00000 n 0000287914 00000 n 0000287977 00000 n 0000288041 00000 n 0000288105 00000 n 0000288169 00000 n 0000288295 00000 n 0000288358 00000 n 0000288421 00000 n 0000288484 00000 n 0000288547 00000 n 0000288610 00000 n 0000288674 00000 n 0000288738 00000 n 0000288865 00000 n 0000288928 00000 n 0000288991 00000 n 0000289054 00000 n 0000289117 00000 n 0000289180 00000 n 0000289244 00000 n 0000289307 00000 n 0000289433 00000 n 0000289496 00000 n 0000289558 00000 n 0000289621 00000 n 0000289684 00000 n 0000289747 00000 n 0000289810 00000 n 0000289873 00000 n 0000289936 00000 n 0000290000 00000 n 0000290190 00000 n 0000290253 00000 n 0000290316 00000 n 0000290379 00000 n 0000290442 00000 n 0000290506 00000 n 0000290570 00000 n 0000290697 00000 n 0000290760 00000 n 0000290822 00000 n 0000290885 00000 n 0000290948 00000 n 0000291011 00000 n 0000291075 00000 n 0000291139 00000 n 0000291266 00000 n 0000291329 00000 n 0000291391 00000 n 0000291453 00000 n 0000296394 00000 n 0000292295 00000 n 0000291645 00000 n 0000292419 00000 n 0000292482 00000 n 0000292545 00000 n 0000292609 00000 n 0000292672 00000 n 0000292797 00000 n 0000292860 00000 n 0000292923 00000 n 0000292986 00000 n 0000293049 00000 n 0000293112 00000 n 0000293176 00000 n 0000293240 00000 n 0000293367 00000 n 0000293430 00000 n 0000293493 00000 n 0000293556 00000 n 0000293619 00000 n 0000293682 00000 n 0000293746 00000 n 0000293809 00000 n 0000293935 00000 n 0000293998 00000 n 0000294060 00000 n 0000294123 00000 n 0000294186 00000 n 0000294249 00000 n 0000294312 00000 n 0000294375 00000 n 0000294501 00000 n 0000294564 00000 n 0000294627 00000 n 0000294690 00000 n 0000294753 00000 n 0000294816 00000 n 0000294880 00000 n 0000294944 00000 n 0000295071 00000 n 0000295134 00000 n 0000295197 00000 n 0000295260 00000 n 0000295322 00000 n 0000295385 00000 n 0000295449 00000 n 0000295513 00000 n 0000295639 00000 n 0000295701 00000 n 0000295764 00000 n 0000295827 00000 n 0000295890 00000 n 0000295953 00000 n 0000296016 00000 n 0000296080 00000 n 0000296206 00000 n 0000296269 00000 n 0000296332 00000 n 0000302745 00000 n 0000298587 00000 n 0000296524 00000 n 0000298711 00000 n 0000298774 00000 n 0000298837 00000 n 0000298900 00000 n 0000298963 00000 n 0000299027 00000 n 0000299153 00000 n 0000299216 00000 n 0000299279 00000 n 0000299342 00000 n 0000299405 00000 n 0000299468 00000 n 0000299530 00000 n 0000299593 00000 n 0000299656 00000 n 0000299780 00000 n 0000299843 00000 n 0000299906 00000 n 0000299969 00000 n 0000300033 00000 n 0000300097 00000 n 0000300160 00000 n 0000300223 00000 n 0000300287 00000 n 0000300351 00000 n 0000300415 00000 n 0000300479 00000 n 0000300543 00000 n 0000300606 00000 n 0000300669 00000 n 0000300733 00000 n 0000300796 00000 n 0000300860 00000 n 0000300924 00000 n 0000300987 00000 n 0000301050 00000 n 0000301113 00000 n 0000301176 00000 n 0000301239 00000 n 0000301302 00000 n 0000301365 00000 n 0000301428 00000 n 0000301491 00000 n 0000301555 00000 n 0000301618 00000 n 0000301681 00000 n 0000301871 00000 n 0000301934 00000 n 0000301996 00000 n 0000302059 00000 n 0000302118 00000 n 0000302181 00000 n 0000302244 00000 n 0000302370 00000 n 0000302433 00000 n 0000302496 00000 n 0000302559 00000 n 0000302621 00000 n 0000302683 00000 n 0000308005 00000 n 0000303715 00000 n 0000302889 00000 n 0000303839 00000 n 0000303902 00000 n 0000303966 00000 n 0000304029 00000 n 0000304154 00000 n 0000304217 00000 n 0000304280 00000 n 0000304344 00000 n 0000304407 00000 n 0000304470 00000 n 0000304533 00000 n 0000304597 00000 n 0000304661 00000 n 0000304788 00000 n 0000304851 00000 n 0000304914 00000 n 0000304978 00000 n 0000305041 00000 n 0000305104 00000 n 0000305167 00000 n 0000305231 00000 n 0000305295 00000 n 0000305422 00000 n 0000305485 00000 n 0000305547 00000 n 0000305611 00000 n 0000305675 00000 n 0000305738 00000 n 0000305801 00000 n 0000305864 00000 n 0000305927 00000 n 0000305989 00000 n 0000306114 00000 n 0000306177 00000 n 0000306240 00000 n 0000306303 00000 n 0000306366 00000 n 0000306429 00000 n 0000306556 00000 n 0000306619 00000 n 0000306682 00000 n 0000306745 00000 n 0000306807 00000 n 0000306870 00000 n 0000306934 00000 n 0000306998 00000 n 0000307062 00000 n 0000307189 00000 n 0000307251 00000 n 0000307314 00000 n 0000307377 00000 n 0000307440 00000 n 0000307503 00000 n 0000307566 00000 n 0000307629 00000 n 0000307755 00000 n 0000307818 00000 n 0000307881 00000 n 0000307943 00000 n 0000312921 00000 n 0000308758 00000 n 0000308121 00000 n 0000308882 00000 n 0000308945 00000 n 0000309008 00000 n 0000309072 00000 n 0000309136 00000 n 0000309262 00000 n 0000309325 00000 n 0000309388 00000 n 0000309451 00000 n 0000309514 00000 n 0000309577 00000 n 0000309641 00000 n 0000309704 00000 n 0000309831 00000 n 0000309894 00000 n 0000309957 00000 n 0000310020 00000 n 0000310083 00000 n 0000310146 00000 n 0000310210 00000 n 0000310274 00000 n 0000310401 00000 n 0000310464 00000 n 0000310526 00000 n 0000310589 00000 n 0000310652 00000 n 0000310715 00000 n 0000310778 00000 n 0000310840 00000 n 0000310966 00000 n 0000311029 00000 n 0000311092 00000 n 0000311155 00000 n 0000311218 00000 n 0000311281 00000 n 0000311345 00000 n 0000311409 00000 n 0000311536 00000 n 0000311599 00000 n 0000311662 00000 n 0000311725 00000 n 0000311787 00000 n 0000311850 00000 n 0000311914 00000 n 0000311978 00000 n 0000312105 00000 n 0000312167 00000 n 0000312230 00000 n 0000312293 00000 n 0000312356 00000 n 0000312419 00000 n 0000312482 00000 n 0000312545 00000 n 0000312671 00000 n 0000312734 00000 n 0000312797 00000 n 0000312859 00000 n 0000512571 00000 n 0000319798 00000 n 0000315678 00000 n 0000313037 00000 n 0000315802 00000 n 0000315865 00000 n 0000315928 00000 n 0000315992 00000 n 0000316055 00000 n 0000316119 00000 n 0000316245 00000 n 0000316308 00000 n 0000316371 00000 n 0000316434 00000 n 0000316497 00000 n 0000316560 00000 n 0000316624 00000 n 0000316688 00000 n 0000316815 00000 n 0000316878 00000 n 0000316941 00000 n 0000317004 00000 n 0000317067 00000 n 0000317130 00000 n 0000317194 00000 n 0000317258 00000 n 0000317385 00000 n 0000317448 00000 n 0000317510 00000 n 0000317573 00000 n 0000317636 00000 n 0000317699 00000 n 0000317763 00000 n 0000317827 00000 n 0000317890 00000 n 0000317953 00000 n 0000318016 00000 n 0000318080 00000 n 0000318144 00000 n 0000318208 00000 n 0000318271 00000 n 0000318334 00000 n 0000318398 00000 n 0000318462 00000 n 0000318526 00000 n 0000318590 00000 n 0000318654 00000 n 0000318717 00000 n 0000318780 00000 n 0000318844 00000 n 0000318908 00000 n 0000318972 00000 n 0000319034 00000 n 0000319097 00000 n 0000319161 00000 n 0000319225 00000 n 0000319289 00000 n 0000319353 00000 n 0000319417 00000 n 0000319480 00000 n 0000319544 00000 n 0000319607 00000 n 0000319670 00000 n 0000319734 00000 n 0000323004 00000 n 0000321122 00000 n 0000319914 00000 n 0000321246 00000 n 0000321309 00000 n 0000321373 00000 n 0000321437 00000 n 0000321500 00000 n 0000321564 00000 n 0000321627 00000 n 0000321690 00000 n 0000321753 00000 n 0000321816 00000 n 0000321879 00000 n 0000321938 00000 n 0000322001 00000 n 0000322064 00000 n 0000322127 00000 n 0000322191 00000 n 0000322254 00000 n 0000322317 00000 n 0000322380 00000 n 0000322443 00000 n 0000322505 00000 n 0000322568 00000 n 0000322630 00000 n 0000322692 00000 n 0000322755 00000 n 0000322817 00000 n 0000322880 00000 n 0000322942 00000 n 0000325222 00000 n 0000324213 00000 n 0000323120 00000 n 0000324337 00000 n 0000324400 00000 n 0000324463 00000 n 0000324527 00000 n 0000324591 00000 n 0000324654 00000 n 0000324717 00000 n 0000324780 00000 n 0000324843 00000 n 0000324907 00000 n 0000324970 00000 n 0000325033 00000 n 0000325096 00000 n 0000330247 00000 n 0000326522 00000 n 0000325338 00000 n 0000326646 00000 n 0000326772 00000 n 0000326835 00000 n 0000326898 00000 n 0000326961 00000 n 0000327024 00000 n 0000327088 00000 n 0000327152 00000 n 0000327279 00000 n 0000327342 00000 n 0000327405 00000 n 0000327468 00000 n 0000327531 00000 n 0000327594 00000 n 0000327658 00000 n 0000327722 00000 n 0000327849 00000 n 0000327912 00000 n 0000327975 00000 n 0000328038 00000 n 0000328101 00000 n 0000328164 00000 n 0000328228 00000 n 0000328290 00000 n 0000328475 00000 n 0000328538 00000 n 0000328601 00000 n 0000328664 00000 n 0000328727 00000 n 0000328791 00000 n 0000328855 00000 n 0000328919 00000 n 0000328983 00000 n 0000329046 00000 n 0000329173 00000 n 0000329236 00000 n 0000329299 00000 n 0000329362 00000 n 0000329425 00000 n 0000329487 00000 n 0000329551 00000 n 0000329615 00000 n 0000329679 00000 n 0000329742 00000 n 0000329806 00000 n 0000329933 00000 n 0000329996 00000 n 0000330059 00000 n 0000330121 00000 n 0000330184 00000 n 0000336779 00000 n 0000332783 00000 n 0000330377 00000 n 0000332907 00000 n 0000332970 00000 n 0000333034 00000 n 0000333098 00000 n 0000333162 00000 n 0000333226 00000 n 0000333352 00000 n 0000333415 00000 n 0000333478 00000 n 0000333541 00000 n 0000333604 00000 n 0000333667 00000 n 0000333731 00000 n 0000333795 00000 n 0000333859 00000 n 0000333923 00000 n 0000333987 00000 n 0000334113 00000 n 0000334176 00000 n 0000334239 00000 n 0000334302 00000 n 0000334365 00000 n 0000334428 00000 n 0000334492 00000 n 0000334556 00000 n 0000334620 00000 n 0000334684 00000 n 0000334748 00000 n 0000334812 00000 n 0000334876 00000 n 0000335003 00000 n 0000335066 00000 n 0000335128 00000 n 0000335191 00000 n 0000335254 00000 n 0000335317 00000 n 0000335380 00000 n 0000335444 00000 n 0000335508 00000 n 0000335572 00000 n 0000335635 00000 n 0000335698 00000 n 0000335762 00000 n 0000335826 00000 n 0000335890 00000 n 0000335953 00000 n 0000336017 00000 n 0000336081 00000 n 0000336145 00000 n 0000336208 00000 n 0000336271 00000 n 0000336335 00000 n 0000336399 00000 n 0000336463 00000 n 0000336527 00000 n 0000336590 00000 n 0000336653 00000 n 0000336716 00000 n 0000341972 00000 n 0000337867 00000 n 0000336895 00000 n 0000337991 00000 n 0000338054 00000 n 0000338117 00000 n 0000338180 00000 n 0000338370 00000 n 0000338433 00000 n 0000338496 00000 n 0000338559 00000 n 0000338622 00000 n 0000338686 00000 n 0000338750 00000 n 0000338814 00000 n 0000338878 00000 n 0000339005 00000 n 0000339068 00000 n 0000339131 00000 n 0000339194 00000 n 0000339257 00000 n 0000339320 00000 n 0000339383 00000 n 0000339445 00000 n 0000339508 00000 n 0000339571 00000 n 0000339697 00000 n 0000339760 00000 n 0000339823 00000 n 0000339886 00000 n 0000339949 00000 n 0000340012 00000 n 0000340076 00000 n 0000340140 00000 n 0000340267 00000 n 0000340330 00000 n 0000340393 00000 n 0000340456 00000 n 0000340518 00000 n 0000340581 00000 n 0000340645 00000 n 0000340709 00000 n 0000340773 00000 n 0000340837 00000 n 0000340964 00000 n 0000341023 00000 n 0000341086 00000 n 0000341149 00000 n 0000341212 00000 n 0000341275 00000 n 0000341339 00000 n 0000341403 00000 n 0000341467 00000 n 0000341531 00000 n 0000341658 00000 n 0000341721 00000 n 0000341784 00000 n 0000341847 00000 n 0000341910 00000 n 0000512696 00000 n 0000347493 00000 n 0000343331 00000 n 0000342102 00000 n 0000343455 00000 n 0000343518 00000 n 0000343582 00000 n 0000343646 00000 n 0000343772 00000 n 0000343835 00000 n 0000343898 00000 n 0000343961 00000 n 0000344024 00000 n 0000344087 00000 n 0000344151 00000 n 0000344215 00000 n 0000344342 00000 n 0000344405 00000 n 0000344468 00000 n 0000344531 00000 n 0000344594 00000 n 0000344657 00000 n 0000344721 00000 n 0000344784 00000 n 0000344911 00000 n 0000344974 00000 n 0000345036 00000 n 0000345099 00000 n 0000345162 00000 n 0000345225 00000 n 0000345288 00000 n 0000345351 00000 n 0000345477 00000 n 0000345540 00000 n 0000345603 00000 n 0000345666 00000 n 0000345729 00000 n 0000345792 00000 n 0000345856 00000 n 0000345920 00000 n 0000346047 00000 n 0000346110 00000 n 0000346173 00000 n 0000346236 00000 n 0000346298 00000 n 0000346361 00000 n 0000346425 00000 n 0000346487 00000 n 0000346550 00000 n 0000346614 00000 n 0000346741 00000 n 0000346803 00000 n 0000346866 00000 n 0000346929 00000 n 0000346992 00000 n 0000347055 00000 n 0000347119 00000 n 0000347181 00000 n 0000347243 00000 n 0000347306 00000 n 0000347368 00000 n 0000347430 00000 n 0000352746 00000 n 0000348837 00000 n 0000347609 00000 n 0000348961 00000 n 0000349024 00000 n 0000349088 00000 n 0000349152 00000 n 0000349216 00000 n 0000349279 00000 n 0000349342 00000 n 0000349406 00000 n 0000349596 00000 n 0000349658 00000 n 0000349721 00000 n 0000349784 00000 n 0000349847 00000 n 0000349911 00000 n 0000349974 00000 n 0000350100 00000 n 0000350163 00000 n 0000350226 00000 n 0000350289 00000 n 0000350351 00000 n 0000350414 00000 n 0000350478 00000 n 0000350541 00000 n 0000350667 00000 n 0000350729 00000 n 0000350792 00000 n 0000350855 00000 n 0000350918 00000 n 0000350981 00000 n 0000351044 00000 n 0000351107 00000 n 0000351233 00000 n 0000351296 00000 n 0000351359 00000 n 0000351422 00000 n 0000351485 00000 n 0000351547 00000 n 0000351611 00000 n 0000351675 00000 n 0000351802 00000 n 0000351865 00000 n 0000351928 00000 n 0000351991 00000 n 0000352054 00000 n 0000352117 00000 n 0000352181 00000 n 0000352245 00000 n 0000352309 00000 n 0000352435 00000 n 0000352497 00000 n 0000352560 00000 n 0000352622 00000 n 0000352684 00000 n 0000358477 00000 n 0000353544 00000 n 0000352876 00000 n 0000353668 00000 n 0000353731 00000 n 0000353795 00000 n 0000353859 00000 n 0000353923 00000 n 0000354049 00000 n 0000354112 00000 n 0000354175 00000 n 0000354238 00000 n 0000354301 00000 n 0000354364 00000 n 0000354428 00000 n 0000354492 00000 n 0000354556 00000 n 0000354620 00000 n 0000354684 00000 n 0000354748 00000 n 0000354875 00000 n 0000354938 00000 n 0000355001 00000 n 0000355064 00000 n 0000355127 00000 n 0000355190 00000 n 0000355254 00000 n 0000355318 00000 n 0000355382 00000 n 0000355446 00000 n 0000355510 00000 n 0000355574 00000 n 0000355701 00000 n 0000355764 00000 n 0000355826 00000 n 0000355889 00000 n 0000355952 00000 n 0000356015 00000 n 0000356078 00000 n 0000356141 00000 n 0000356267 00000 n 0000356330 00000 n 0000356393 00000 n 0000356456 00000 n 0000356519 00000 n 0000356582 00000 n 0000356646 00000 n 0000356710 00000 n 0000356774 00000 n 0000356838 00000 n 0000356965 00000 n 0000357028 00000 n 0000357091 00000 n 0000357154 00000 n 0000357216 00000 n 0000357279 00000 n 0000357343 00000 n 0000357407 00000 n 0000357470 00000 n 0000357534 00000 n 0000357661 00000 n 0000357723 00000 n 0000357786 00000 n 0000357849 00000 n 0000357912 00000 n 0000357975 00000 n 0000358038 00000 n 0000358101 00000 n 0000358227 00000 n 0000358290 00000 n 0000358353 00000 n 0000358415 00000 n 0000363885 00000 n 0000359404 00000 n 0000358593 00000 n 0000359528 00000 n 0000359591 00000 n 0000359654 00000 n 0000359718 00000 n 0000359782 00000 n 0000359846 00000 n 0000359972 00000 n 0000360035 00000 n 0000360098 00000 n 0000360161 00000 n 0000360224 00000 n 0000360287 00000 n 0000360351 00000 n 0000360415 00000 n 0000360542 00000 n 0000360605 00000 n 0000360668 00000 n 0000360732 00000 n 0000360795 00000 n 0000360858 00000 n 0000360921 00000 n 0000360985 00000 n 0000361049 00000 n 0000361176 00000 n 0000361239 00000 n 0000361301 00000 n 0000361365 00000 n 0000361428 00000 n 0000361491 00000 n 0000361554 00000 n 0000361617 00000 n 0000361679 00000 n 0000361804 00000 n 0000361867 00000 n 0000361930 00000 n 0000361994 00000 n 0000362057 00000 n 0000362120 00000 n 0000362183 00000 n 0000362247 00000 n 0000362310 00000 n 0000362436 00000 n 0000362499 00000 n 0000362562 00000 n 0000362626 00000 n 0000362689 00000 n 0000362751 00000 n 0000362814 00000 n 0000362878 00000 n 0000362942 00000 n 0000363069 00000 n 0000363131 00000 n 0000363194 00000 n 0000363257 00000 n 0000363320 00000 n 0000363383 00000 n 0000363446 00000 n 0000363509 00000 n 0000363635 00000 n 0000363698 00000 n 0000363761 00000 n 0000363823 00000 n 0000369778 00000 n 0000366054 00000 n 0000364001 00000 n 0000366178 00000 n 0000366241 00000 n 0000366304 00000 n 0000366368 00000 n 0000366432 00000 n 0000366558 00000 n 0000366621 00000 n 0000366684 00000 n 0000366747 00000 n 0000366810 00000 n 0000366873 00000 n 0000366937 00000 n 0000367001 00000 n 0000367065 00000 n 0000367192 00000 n 0000367255 00000 n 0000367318 00000 n 0000367381 00000 n 0000367444 00000 n 0000367507 00000 n 0000367571 00000 n 0000367634 00000 n 0000367697 00000 n 0000367824 00000 n 0000367887 00000 n 0000367949 00000 n 0000368012 00000 n 0000368075 00000 n 0000368138 00000 n 0000368201 00000 n 0000368263 00000 n 0000368325 00000 n 0000368451 00000 n 0000368514 00000 n 0000368577 00000 n 0000368640 00000 n 0000368702 00000 n 0000368764 00000 n 0000368828 00000 n 0000368892 00000 n 0000368956 00000 n 0000369020 00000 n 0000369084 00000 n 0000369148 00000 n 0000369211 00000 n 0000369274 00000 n 0000369338 00000 n 0000369401 00000 n 0000369464 00000 n 0000369527 00000 n 0000369590 00000 n 0000369654 00000 n 0000369716 00000 n 0000376488 00000 n 0000372061 00000 n 0000369894 00000 n 0000372185 00000 n 0000372248 00000 n 0000372311 00000 n 0000372374 00000 n 0000372438 00000 n 0000372501 00000 n 0000372564 00000 n 0000372627 00000 n 0000372690 00000 n 0000372754 00000 n 0000372818 00000 n 0000372882 00000 n 0000372946 00000 n 0000373010 00000 n 0000373074 00000 n 0000373138 00000 n 0000373200 00000 n 0000373262 00000 n 0000373326 00000 n 0000373390 00000 n 0000373454 00000 n 0000373518 00000 n 0000373581 00000 n 0000373644 00000 n 0000373707 00000 n 0000373770 00000 n 0000373833 00000 n 0000373896 00000 n 0000373960 00000 n 0000374024 00000 n 0000374087 00000 n 0000374150 00000 n 0000374214 00000 n 0000374278 00000 n 0000374342 00000 n 0000374406 00000 n 0000374596 00000 n 0000374659 00000 n 0000374722 00000 n 0000374785 00000 n 0000374848 00000 n 0000374975 00000 n 0000375038 00000 n 0000375101 00000 n 0000375164 00000 n 0000375226 00000 n 0000375289 00000 n 0000375353 00000 n 0000375417 00000 n 0000375481 00000 n 0000375608 00000 n 0000375670 00000 n 0000375733 00000 n 0000375796 00000 n 0000375859 00000 n 0000375922 00000 n 0000375986 00000 n 0000376050 00000 n 0000376177 00000 n 0000376240 00000 n 0000376303 00000 n 0000376365 00000 n 0000376427 00000 n 0000512821 00000 n 0000380772 00000 n 0000377242 00000 n 0000376618 00000 n 0000377366 00000 n 0000377429 00000 n 0000377555 00000 n 0000377618 00000 n 0000377681 00000 n 0000377744 00000 n 0000377807 00000 n 0000377870 00000 n 0000377934 00000 n 0000377998 00000 n 0000378125 00000 n 0000378188 00000 n 0000378251 00000 n 0000378314 00000 n 0000378377 00000 n 0000378440 00000 n 0000378504 00000 n 0000378568 00000 n 0000378632 00000 n 0000378759 00000 n 0000378822 00000 n 0000378884 00000 n 0000378947 00000 n 0000379010 00000 n 0000379073 00000 n 0000379199 00000 n 0000379262 00000 n 0000379325 00000 n 0000379388 00000 n 0000379451 00000 n 0000379514 00000 n 0000379641 00000 n 0000379704 00000 n 0000379767 00000 n 0000379830 00000 n 0000379892 00000 n 0000379955 00000 n 0000380082 00000 n 0000380144 00000 n 0000380207 00000 n 0000380270 00000 n 0000380333 00000 n 0000380396 00000 n 0000380522 00000 n 0000380585 00000 n 0000380648 00000 n 0000380710 00000 n 0000386475 00000 n 0000382431 00000 n 0000380888 00000 n 0000382555 00000 n 0000382618 00000 n 0000382680 00000 n 0000382743 00000 n 0000382807 00000 n 0000382871 00000 n 0000382935 00000 n 0000383061 00000 n 0000383124 00000 n 0000383187 00000 n 0000383250 00000 n 0000383313 00000 n 0000383376 00000 n 0000383503 00000 n 0000383566 00000 n 0000383629 00000 n 0000383692 00000 n 0000383755 00000 n 0000383818 00000 n 0000383882 00000 n 0000383946 00000 n 0000384073 00000 n 0000384136 00000 n 0000384198 00000 n 0000384261 00000 n 0000384324 00000 n 0000384387 00000 n 0000384450 00000 n 0000384513 00000 n 0000384576 00000 n 0000384638 00000 n 0000384763 00000 n 0000384826 00000 n 0000384889 00000 n 0000384952 00000 n 0000385015 00000 n 0000385078 00000 n 0000385142 00000 n 0000385205 00000 n 0000385268 00000 n 0000385332 00000 n 0000385396 00000 n 0000385460 00000 n 0000385587 00000 n 0000385650 00000 n 0000385713 00000 n 0000385776 00000 n 0000385840 00000 n 0000385904 00000 n 0000385968 00000 n 0000386032 00000 n 0000386095 00000 n 0000386158 00000 n 0000386221 00000 n 0000386285 00000 n 0000386348 00000 n 0000386411 00000 n 0000392609 00000 n 0000388820 00000 n 0000386591 00000 n 0000388944 00000 n 0000389007 00000 n 0000389070 00000 n 0000389133 00000 n 0000389197 00000 n 0000389261 00000 n 0000389324 00000 n 0000389388 00000 n 0000389452 00000 n 0000389515 00000 n 0000389578 00000 n 0000389642 00000 n 0000389706 00000 n 0000389770 00000 n 0000389833 00000 n 0000389896 00000 n 0000389959 00000 n 0000390022 00000 n 0000390086 00000 n 0000390149 00000 n 0000390212 00000 n 0000390275 00000 n 0000390338 00000 n 0000390525 00000 n 0000390588 00000 n 0000390651 00000 n 0000390714 00000 n 0000390777 00000 n 0000390841 00000 n 0000390905 00000 n 0000391032 00000 n 0000391095 00000 n 0000391158 00000 n 0000391221 00000 n 0000391284 00000 n 0000391347 00000 n 0000391411 00000 n 0000391475 00000 n 0000391539 00000 n 0000391603 00000 n 0000391730 00000 n 0000391793 00000 n 0000391856 00000 n 0000391918 00000 n 0000391981 00000 n 0000392044 00000 n 0000392108 00000 n 0000392172 00000 n 0000392236 00000 n 0000392300 00000 n 0000392423 00000 n 0000392485 00000 n 0000392547 00000 n 0000397750 00000 n 0000393336 00000 n 0000392739 00000 n 0000393460 00000 n 0000393523 00000 n 0000393586 00000 n 0000393649 00000 n 0000393713 00000 n 0000393777 00000 n 0000393903 00000 n 0000393966 00000 n 0000394029 00000 n 0000394092 00000 n 0000394155 00000 n 0000394218 00000 n 0000394282 00000 n 0000394346 00000 n 0000394409 00000 n 0000394536 00000 n 0000394599 00000 n 0000394662 00000 n 0000394725 00000 n 0000394788 00000 n 0000394851 00000 n 0000394915 00000 n 0000394979 00000 n 0000395043 00000 n 0000395169 00000 n 0000395232 00000 n 0000395294 00000 n 0000395357 00000 n 0000395420 00000 n 0000395483 00000 n 0000395546 00000 n 0000395607 00000 n 0000395669 00000 n 0000395795 00000 n 0000395858 00000 n 0000395921 00000 n 0000395984 00000 n 0000396047 00000 n 0000396110 00000 n 0000396174 00000 n 0000396238 00000 n 0000396365 00000 n 0000396428 00000 n 0000396491 00000 n 0000396554 00000 n 0000396616 00000 n 0000396679 00000 n 0000396743 00000 n 0000396807 00000 n 0000396934 00000 n 0000396996 00000 n 0000397059 00000 n 0000397122 00000 n 0000397185 00000 n 0000397248 00000 n 0000397311 00000 n 0000397374 00000 n 0000397500 00000 n 0000397563 00000 n 0000397626 00000 n 0000397688 00000 n 0000402646 00000 n 0000398482 00000 n 0000397866 00000 n 0000398606 00000 n 0000398669 00000 n 0000398732 00000 n 0000398796 00000 n 0000398858 00000 n 0000398983 00000 n 0000399046 00000 n 0000399109 00000 n 0000399172 00000 n 0000399235 00000 n 0000399298 00000 n 0000399362 00000 n 0000399426 00000 n 0000399553 00000 n 0000399616 00000 n 0000399679 00000 n 0000399742 00000 n 0000399805 00000 n 0000399868 00000 n 0000399932 00000 n 0000399996 00000 n 0000400123 00000 n 0000400186 00000 n 0000400248 00000 n 0000400311 00000 n 0000400374 00000 n 0000400437 00000 n 0000400500 00000 n 0000400563 00000 n 0000400689 00000 n 0000400752 00000 n 0000400815 00000 n 0000400878 00000 n 0000400941 00000 n 0000401004 00000 n 0000401068 00000 n 0000401132 00000 n 0000401259 00000 n 0000401322 00000 n 0000401385 00000 n 0000401448 00000 n 0000401510 00000 n 0000401573 00000 n 0000401637 00000 n 0000401701 00000 n 0000401829 00000 n 0000401891 00000 n 0000401954 00000 n 0000402017 00000 n 0000402080 00000 n 0000402143 00000 n 0000402206 00000 n 0000402269 00000 n 0000402396 00000 n 0000402459 00000 n 0000402522 00000 n 0000402584 00000 n 0000409162 00000 n 0000404993 00000 n 0000402762 00000 n 0000405117 00000 n 0000405180 00000 n 0000405243 00000 n 0000405307 00000 n 0000405371 00000 n 0000405498 00000 n 0000405561 00000 n 0000405624 00000 n 0000405687 00000 n 0000405750 00000 n 0000405813 00000 n 0000405877 00000 n 0000405940 00000 n 0000406004 00000 n 0000406132 00000 n 0000406195 00000 n 0000406258 00000 n 0000406321 00000 n 0000406384 00000 n 0000406447 00000 n 0000406511 00000 n 0000406574 00000 n 0000406637 00000 n 0000406765 00000 n 0000406828 00000 n 0000406890 00000 n 0000406952 00000 n 0000407015 00000 n 0000407078 00000 n 0000407141 00000 n 0000407204 00000 n 0000407268 00000 n 0000407332 00000 n 0000407396 00000 n 0000407523 00000 n 0000407585 00000 n 0000407648 00000 n 0000407711 00000 n 0000407774 00000 n 0000407837 00000 n 0000407900 00000 n 0000407964 00000 n 0000408028 00000 n 0000408092 00000 n 0000408156 00000 n 0000408219 00000 n 0000408282 00000 n 0000408346 00000 n 0000408409 00000 n 0000408471 00000 n 0000408533 00000 n 0000408596 00000 n 0000408659 00000 n 0000408722 00000 n 0000408785 00000 n 0000408848 00000 n 0000408912 00000 n 0000408975 00000 n 0000409038 00000 n 0000409100 00000 n 0000512946 00000 n 0000415591 00000 n 0000411408 00000 n 0000409292 00000 n 0000411532 00000 n 0000411595 00000 n 0000411658 00000 n 0000411721 00000 n 0000411785 00000 n 0000411849 00000 n 0000411912 00000 n 0000411976 00000 n 0000412040 00000 n 0000412104 00000 n 0000412167 00000 n 0000412231 00000 n 0000412295 00000 n 0000412359 00000 n 0000412423 00000 n 0000412486 00000 n 0000412550 00000 n 0000412614 00000 n 0000412678 00000 n 0000412741 00000 n 0000412804 00000 n 0000412868 00000 n 0000412932 00000 n 0000412996 00000 n 0000413059 00000 n 0000413122 00000 n 0000413186 00000 n 0000413249 00000 n 0000413439 00000 n 0000413502 00000 n 0000413565 00000 n 0000413628 00000 n 0000413691 00000 n 0000413755 00000 n 0000413818 00000 n 0000413882 00000 n 0000414010 00000 n 0000414073 00000 n 0000414136 00000 n 0000414199 00000 n 0000414262 00000 n 0000414325 00000 n 0000414389 00000 n 0000414453 00000 n 0000414517 00000 n 0000414581 00000 n 0000414709 00000 n 0000414772 00000 n 0000414834 00000 n 0000414897 00000 n 0000414960 00000 n 0000415023 00000 n 0000415087 00000 n 0000415150 00000 n 0000415278 00000 n 0000415341 00000 n 0000415404 00000 n 0000415467 00000 n 0000415529 00000 n 0000421058 00000 n 0000417383 00000 n 0000415721 00000 n 0000417507 00000 n 0000417570 00000 n 0000417634 00000 n 0000417698 00000 n 0000417825 00000 n 0000417888 00000 n 0000417951 00000 n 0000418014 00000 n 0000418077 00000 n 0000418140 00000 n 0000418204 00000 n 0000418268 00000 n 0000418396 00000 n 0000418459 00000 n 0000418522 00000 n 0000418585 00000 n 0000418649 00000 n 0000418712 00000 n 0000418775 00000 n 0000418839 00000 n 0000418903 00000 n 0000418967 00000 n 0000419031 00000 n 0000419095 00000 n 0000419159 00000 n 0000419223 00000 n 0000419286 00000 n 0000419350 00000 n 0000419541 00000 n 0000419604 00000 n 0000419667 00000 n 0000419728 00000 n 0000419791 00000 n 0000419855 00000 n 0000419919 00000 n 0000420047 00000 n 0000420110 00000 n 0000420173 00000 n 0000420236 00000 n 0000420299 00000 n 0000420361 00000 n 0000420425 00000 n 0000420489 00000 n 0000420617 00000 n 0000420680 00000 n 0000420743 00000 n 0000420806 00000 n 0000420869 00000 n 0000420933 00000 n 0000425517 00000 n 0000421915 00000 n 0000421188 00000 n 0000422039 00000 n 0000422166 00000 n 0000422229 00000 n 0000422292 00000 n 0000422355 00000 n 0000422418 00000 n 0000422482 00000 n 0000422546 00000 n 0000422674 00000 n 0000422737 00000 n 0000422800 00000 n 0000422863 00000 n 0000422924 00000 n 0000422987 00000 n 0000423051 00000 n 0000423115 00000 n 0000423243 00000 n 0000423305 00000 n 0000423368 00000 n 0000423431 00000 n 0000423494 00000 n 0000423557 00000 n 0000423685 00000 n 0000423748 00000 n 0000423811 00000 n 0000423874 00000 n 0000423937 00000 n 0000423999 00000 n 0000424127 00000 n 0000424190 00000 n 0000424253 00000 n 0000424315 00000 n 0000424378 00000 n 0000424441 00000 n 0000424568 00000 n 0000424631 00000 n 0000424694 00000 n 0000424757 00000 n 0000424820 00000 n 0000424883 00000 n 0000424946 00000 n 0000425010 00000 n 0000425074 00000 n 0000425202 00000 n 0000425265 00000 n 0000425328 00000 n 0000425391 00000 n 0000425454 00000 n 0000430611 00000 n 0000426441 00000 n 0000425647 00000 n 0000426565 00000 n 0000426628 00000 n 0000426755 00000 n 0000426818 00000 n 0000426881 00000 n 0000426944 00000 n 0000427007 00000 n 0000427070 00000 n 0000427134 00000 n 0000427198 00000 n 0000427326 00000 n 0000427389 00000 n 0000427452 00000 n 0000427515 00000 n 0000427578 00000 n 0000427641 00000 n 0000427705 00000 n 0000427769 00000 n 0000427897 00000 n 0000427960 00000 n 0000428022 00000 n 0000428085 00000 n 0000428148 00000 n 0000428211 00000 n 0000428274 00000 n 0000428337 00000 n 0000428400 00000 n 0000428527 00000 n 0000428590 00000 n 0000428653 00000 n 0000428716 00000 n 0000428779 00000 n 0000428842 00000 n 0000428906 00000 n 0000428970 00000 n 0000429034 00000 n 0000429098 00000 n 0000429226 00000 n 0000429289 00000 n 0000429352 00000 n 0000429415 00000 n 0000429477 00000 n 0000429540 00000 n 0000429604 00000 n 0000429667 00000 n 0000429794 00000 n 0000429856 00000 n 0000429919 00000 n 0000429982 00000 n 0000430045 00000 n 0000430108 00000 n 0000430171 00000 n 0000430234 00000 n 0000430361 00000 n 0000430424 00000 n 0000430487 00000 n 0000430549 00000 n 0000436764 00000 n 0000433604 00000 n 0000430727 00000 n 0000433728 00000 n 0000433791 00000 n 0000433853 00000 n 0000433916 00000 n 0000433980 00000 n 0000434044 00000 n 0000434171 00000 n 0000434234 00000 n 0000434297 00000 n 0000434360 00000 n 0000434423 00000 n 0000434487 00000 n 0000434551 00000 n 0000434615 00000 n 0000434678 00000 n 0000434741 00000 n 0000434805 00000 n 0000434869 00000 n 0000434933 00000 n 0000434997 00000 n 0000435060 00000 n 0000435123 00000 n 0000435186 00000 n 0000435249 00000 n 0000435311 00000 n 0000435375 00000 n 0000435438 00000 n 0000435502 00000 n 0000435565 00000 n 0000435628 00000 n 0000435691 00000 n 0000435755 00000 n 0000435818 00000 n 0000435882 00000 n 0000435944 00000 n 0000436007 00000 n 0000436071 00000 n 0000436135 00000 n 0000436198 00000 n 0000436262 00000 n 0000436325 00000 n 0000436515 00000 n 0000436576 00000 n 0000436639 00000 n 0000436702 00000 n 0000439946 00000 n 0000438430 00000 n 0000436894 00000 n 0000438554 00000 n 0000438617 00000 n 0000438679 00000 n 0000438743 00000 n 0000438870 00000 n 0000438933 00000 n 0000438996 00000 n 0000439059 00000 n 0000439122 00000 n 0000439185 00000 n 0000439248 00000 n 0000439312 00000 n 0000439376 00000 n 0000439440 00000 n 0000439504 00000 n 0000439568 00000 n 0000439632 00000 n 0000439695 00000 n 0000439758 00000 n 0000439821 00000 n 0000439883 00000 n 0000513071 00000 n 0000445104 00000 n 0000441434 00000 n 0000440062 00000 n 0000441558 00000 n 0000441621 00000 n 0000441685 00000 n 0000441748 00000 n 0000441812 00000 n 0000441876 00000 n 0000442003 00000 n 0000442066 00000 n 0000442129 00000 n 0000442193 00000 n 0000442257 00000 n 0000442321 00000 n 0000442449 00000 n 0000442512 00000 n 0000442575 00000 n 0000442638 00000 n 0000442701 00000 n 0000442764 00000 n 0000442828 00000 n 0000442892 00000 n 0000442956 00000 n 0000443020 00000 n 0000443148 00000 n 0000443211 00000 n 0000443273 00000 n 0000443336 00000 n 0000443400 00000 n 0000443463 00000 n 0000443526 00000 n 0000443589 00000 n 0000443652 00000 n 0000443716 00000 n 0000443779 00000 n 0000443842 00000 n 0000443905 00000 n 0000443967 00000 n 0000444031 00000 n 0000444095 00000 n 0000444223 00000 n 0000444286 00000 n 0000444349 00000 n 0000444411 00000 n 0000444474 00000 n 0000444537 00000 n 0000444601 00000 n 0000444665 00000 n 0000444792 00000 n 0000444855 00000 n 0000444918 00000 n 0000444980 00000 n 0000445042 00000 n 0000450472 00000 n 0000446484 00000 n 0000445220 00000 n 0000446608 00000 n 0000446671 00000 n 0000446735 00000 n 0000446799 00000 n 0000446926 00000 n 0000446989 00000 n 0000447052 00000 n 0000447115 00000 n 0000447179 00000 n 0000447243 00000 n 0000447307 00000 n 0000447370 00000 n 0000447433 00000 n 0000447496 00000 n 0000447559 00000 n 0000447621 00000 n 0000447684 00000 n 0000447748 00000 n 0000447812 00000 n 0000447940 00000 n 0000448003 00000 n 0000448066 00000 n 0000448129 00000 n 0000448192 00000 n 0000448255 00000 n 0000448319 00000 n 0000448383 00000 n 0000448511 00000 n 0000448574 00000 n 0000448636 00000 n 0000448699 00000 n 0000448761 00000 n 0000448825 00000 n 0000448888 00000 n 0000448950 00000 n 0000449013 00000 n 0000449076 00000 n 0000449140 00000 n 0000449203 00000 n 0000449331 00000 n 0000449394 00000 n 0000449457 00000 n 0000449519 00000 n 0000449582 00000 n 0000449646 00000 n 0000449710 00000 n 0000449774 00000 n 0000449838 00000 n 0000449901 00000 n 0000449964 00000 n 0000450027 00000 n 0000450090 00000 n 0000450154 00000 n 0000450218 00000 n 0000450346 00000 n 0000450409 00000 n 0000451041 00000 n 0000450854 00000 n 0000450588 00000 n 0000450978 00000 n 0000451129 00000 n 0000468655 00000 n 0000485473 00000 n 0000511084 00000 n 0000513178 00000 n 0000513304 00000 n 0000513430 00000 n 0000513503 00000 n 0000540525 00000 n 0000597017 00000 n 0000597058 00000 n 0000597098 00000 n 0000597273 00000 n trailer << /Size 4739 /Root 4737 0 R /Info 4738 0 R >> startxref 597467 %%EOF lifelines-3.0.61/docs/ll-reportmanual.sv.html0000700002540200244210000052250510270226757021345 0ustar prappDomain Users LIFELINES PROGRAMMERINGSSYSTEM OCH RAPPORTGENERATOR

LIFELINES PROGRAMMERINGSSYSTEM OCH RAPPORTGENERATOR

LifeLines Version 3.0.36

Thomas T. Wetmore , IV



Manual för rapportprogrammering

INTRODUKTION

Med LifeLines programmeringssystem kan du skapa rapporter i valfri stil och layout. Du kan generera filer i troff, Postscript, TeX, SGML, eller annat valfritt ASCII-baserat format för ytterligare textbehandling och utskrifter. Du kommer åt rapportgeneratorn genom att välja kommandot r från huvudmenyn. Du kan också använda programmeringssystemet för att skapa förfrågningsprogram och andra behandlande program, vars resultat skrivs ut direkt till skärmen. Det finns till exempel ett LifeLinesprogram som beräknar relationen mellan vilka två personer som helst i en databas.

Alla LifeLinesprogram är skrivna i LifeLines programmeringsspråk, och programmen sparas i vanliga filer. När du begär att LifeLines ska köra ett program, så frågar LifeLines dig efter namnet på programfilen, frågar var du vill att utmatningen från programmet ska skrivas, och kör därefter programmet.

Anta till exempel att du vill att LifeLines ska skapa en antavla. En sådan rapport skulle kunna se ut så här:

Exempel 1. Exempel på antavelrapport


1. Thomas Trask WETMORE IV
b. 18 December 1949, New London, Connecticut
2. Thomas Trask WETMORE III
b. 15 October 1925, New London, Connecticut
3. Joan Marie HANCOCK
b. 6 June 1928, New London, Connecticut
4. Thomas Trask WETMORE Jr
b. 5 May 1896, New London, Connecticut
d. 8 November 1970, New London, Connecticut
5. Vivian Genevieve BROWN
b. 5 April 1896, Mondovi, Wisconsin
6. Richard James HANCOCK
b. 18 August 1904, New London, Connecticut
d. 24 December 1976, Waterford, Connecticut
7. Muriel Armstrong SMITH
b. 28 October 1905, New Haven, Connecticut
8. Thomas Trask WETMORE Sr
b. 13 March 1866, St. Mary's Bay, Nova Scotia
d. 17 February 1947, New London, Connecticut
9. Margaret Ellen KANEEN
b. 27 October 1859, Liverpool, England
d. 10 May 1900, New London, Connecticut
... och mycket mer

Här är ett LifeLinesprogram som genererar en sådan rappport:

Exempel 2. Exempel på rapportskript för en antavelrapport


proc main ()
  {
    getindi(indi)
    list(ilist)
    list(alist)
    enqueue(ilist, indi)
    enqueue(alist, 1)
    while(indi, dequeue(ilist)) {
      set(ahnen, dequeue(alist))
      d(ahnen) ". " name(indi) nl()
      if (e, birth(indi)) { " b. " long(e) nl() }
      if (e, death(indi)) { " d. " long(e) nl() }
      if (par, father(indi)) {
	enqueue(ilist, par)
	enqueue(alist, mul(2,ahnen))
      }
      if (par,mother(indi)) {
	enqueue(ilist, par)
	enqueue(alist, add(1,mul(2,ahnen)))
      }
    }
  }

Anta att det här programmet finns i filen anor.ll. När du väljer kommandot r från huvudmenyn, så frågar LifeLines:

Vad är namnet på programmet?
Förvald sökväg: .
skriv in filnamn (*.ll)

Du skriver in anor. Eftersom programmet genererar en rapport, så frågar LifeLines var det ska skriva rapporten:

Vad är namnet på utmatningsfilen?
skriv in filnamn:

Du skriver in ett filnamn, till exempel mina.anor. LifeLines läser in programmet anor.ll, kör programmet, och skriver ut rapporten till mina.anor. LifeLines rapporterar alla syntax- eller körningsfel som hittas medan programmet körs.

Ett LifeLinesprogram består av procedurer och funktioner; alla program måste innehålla minst en procedur benämnd main. Proceduren main körs först; det kan anropa andra procedurer, funktioner och inbyggda funktioner. I exemplet med antavlan finns det bara en procedur.

En procedurkropp består av en följd av deklarationer. I exempelprogrammet är de fem första deklarationerna följande:

getindi(indi)
list(ilist)
list(alist)
enqueue(ilist, indi)
enqueue(alist, 1)

Den första deklarationen anropar den inbyggda funktionen getindi (get individual - hämta person), vilken får LifeLines att be dig identifiera en person i den kortfattade stilen för identifiering.

Skriv in sträng för program
skriv in namn, nyckel, refn eller lista:

Efter att du har identifierat en person, så tilldelas han eller hon variabeln indi. De följande två deklarationerna anger två listvariabler, ilist och alist. Listor innehåller sekvenser av saker; det finns operationer för att placera saker i listor, plocka bort saker därifrån, och för att iterera genom listelementen. I exemplet innehåller ilist en lista med anor i antavelordning som ännu inte rapporterats, och alist innehåller deras respektive annummer.

De följande två deklarationerna anropar funktionen enqueue, varvid de första medlemmarna läggs till i båda listorna. Personen som identifierats av funktionen getindi blir den första medlemmen i ilist, och numret ett, denna persons antavelnummer, blir den första medlemmen i alist.

Den återstående delen av programmet är:

while(indi, dequeue(ilist)) {
  set(ahnen, dequeue(alist))
  d(ahnen) ". " name(indi) nl()
  if (e, birth(indi)) { " b. " long(e) nl() }
  if (e, death(indi)) { " d. " long(e) nl() }
  if (par, father(indi)) {
    enqueue(ilist, par)
    enqueue(alist, mul(2,ahnen))
  }
  if (par, mother(indi)) {
    enqueue(ilist, par)
   enqueue(alist, add(1,mul(2,ahnen)))
  }
}

Detta är en loop som iterativt tar bort personer och deras antavelnummer från de två listorna, och därefter skriver ut deras namn och födelse- och dödsdata. Om personerna har föräldrar i databasen, så placeras föräldrarna och föräldrarnas antavelnummer på slutet av respektive lista. Loopen itererar till dess listan är tom.

Loopen är en loopdeklaration av typen while. Raden:

while(indi, dequeue(ilist)) {
tar (via dequeue) en person från ilist, och tilldelar personen till variabeln indi. Så länge som det finns personer i ilist, så följer ytterligare en iteration av loopen.

Deklarationen:

set(ahnen, dequeue(alist))
är en deklaration av typen tilldelning. Det andra argumentet utvärderas; Dess värde tilldelas till det första argumentet, som måste vara en variabel. Här tas nästa nummer i alist bort, och tilldelas till variabeln ahnen. Detta är antavelnumret på personen som just togs bort från ilist.

Raden:

d(ahnen) ". " name(indi) nl()
innehåller fyra deklarationer av typen uttryck; när uttryck används som deklarationer, så behandlas deras värden, om något, som strängar och skrivs direkt till rapportfilen. Funktionen d konverterar dess heltalsargument till en numerisk sträng. ". " är ett bokstavligt (konstant) strängvärde. Funktionen name returnerar den förvalda formen av en persons namn. Funktionen nl returnerar en sträng som innehåller tecknet för ny rad.

De nästa två raderna:

if(e, birth(indi)) { " b. " long(e) nl() }
if(e, death(indi)) { " d. " long(e) nl() }
skriver ut grundläggande födelse- och dödsdata för en person. Dessa rader är if-deklarationer. Det andra argumentet i villkorssatsen utvärderas och tilldelas till det första argumentet, vilket måste vara en variabel. Den första if-deklarationen anropar födelsefunktionen , varvid den första födelseposten i en personpost returneras. Om födelseposten finns så tilldelas den variabeln e, och kroppen (det som finns mellan klammerparenteserna) för if-deklarationen exekveras. Kroppen består av tre deklarationer av typen uttryck: en ordagrann, samt anrop till funktionerna long och nl. Long tar en händelse och skickar tillbaka värdet på den första DATE-raden och PLAC-raden i händelsen.

Den sista delen av programmet är:

if (par, father(indi)) {
enqueue(ilist,par)
enqueue(alist,mul(2,ahnen))
}
if (par,mother(indi)) {
enqueue(ilist,par)
enqueue(alist,add(1,mul(2,ahnen)))
}

De här raderna lägger till fadern och modern till den aktuella personen, om endera av dem, eller båda, finns i databasen, i ilist. De beräknar också och lägger till föräldrarnas antavelnummer i alist. En fars annummer är det dubbla jämfört med sitt barns. En mors annummer är det dubbla jämfört med sitt barns plus ett. Dessa värden beräknas med funktionerna mul och add.


PROGRAMMERINGSREFERENS FÖR LIFELINES

LifeLinesprogram lagras i filer som du redigerar med textredigeraren. Man redigerar dem inte från LifeLines, istället redigerar du dem som vilken textfil som helst. Programmen kan sparas i vilken katalog som helst; de behöver inte sparas i eller anknytas till LifeLinesdatabaser. Du kan sätta skalvariabeln LLPROGRAMS till att innehålla ett antal kataloger som LifeLines automatiskt kommer att söka i efter program när du begär att ett program ska köras.


Procedurer och Funktioner

Ett LifeLinesprogram består av en eller flera procedurer och funktioner. En procedur har formatet:
proc namn(parametrar) { deklarationer }

Namn är namnet på proceduren, parametrar är en (icke-obligatorisk) kommaseparerad lista över parametrar, och deklarationer är en lista över deklarationer som utgör procedurkroppen. Rapportgenereringen börjar med den första deklarationen i proceduren som benämns main. Procedurer får anropa andra procedurer och funktioner. Procedurer anropas med deklarationen call som beskrivs nedan. När en procedur anropas, exekveras de deklarationer som utgör dess kropp.

En funktion har formatet:
func namn(parametrar) { deklarationer }

Namn, parametrar och deklarationer definieras som i procedurer. Funktioner får anropa andra procedurer och funktioner. När en funktion anropas, exekveras de deklarationer som den utgörs av. En funktion skiljer sig från en procedur genom att den returnerar ett värde till proceduren eller funktionen som anropar den. Värden returneras av deklarationen return, som beskrivs nedan. Rekursiva funktioner är tillåtna. En funktion anropas genom att anropa det i ett uttryck.

Funktions- och procedurparametrar skickas via värde, utom för list-, set- och tabletyperna vilka skickas via referens. Vid återdeklaration av en parameter instantieras en ny variabel av den angivna eller underförstådda typen. Den föregående instansen fortsätter att existera inom räckviden för anroparen.


Kommentarer

Du kan lägga in kommentarer i dina LifeLinesprogram genom att använda följande skrivsätt:

	/*...kommentartext innehållande vilka tecken som helst utom
	*/... */

Kommentarer inleds med /* och avslutas med */. Kommentarer får förekomma på rader för sig själva, eller på rader där det finns programkod. Kommentarer får sträcka sig över flera rader. Man får inte nästla kommentarer (ha en kommentar i en annan kommentar).


Deklarationer

Det finns ett antal typer av deklarationer. De enklaste är av typen uttryck, ett uttryck som inte är en del av någon annan deklaration eller annat uttryck. En mer fullständig definition av uttryck återfinns nedan. En uttrycksdeklaration utvärderas, och om dess värde är icke-noll, antas det vara en sträng, och skrivs till den skapade rapportfilen. Om dess värde är noll, så skrivs ingenting ut till rapportfilen. Uttrycket
name(indi)
exempelvis, där indi är en person, returnerar personens namn och skriver ut det till rapportfilen. Uttrycket
set(n,nspouses(indi))
å andra sidan tilldelar variabeln n det antal makar som personen indi har haft, men eftersom set returnerar noll, så skrivs ingenting till rapportfilen.

Programmeringsspråket inbegriper if-deklarationer, while-deklarationer och proceduranropsdeklarationer, med följande format:
if ([varb,] uttr) { deklarationer } 
		  [ elsif ([varb], uttr) { deklarationer } ]*
		  [ else { deklarationer } ]
	
while ([varb,] uttr ) { deklarationer }
call namn(argt)

Hakparenteserna anger vilka delar av syntaxen för deklarationer som är valfria att ha med. En if-deklaration exekveras genom att det första villkorsuttrycket i if-satsen utvärderas. Om det är icke-noll, så utvärderas deklarationerna i if-satsen, och den övriga delen av if-deklarationen, om den finns, hoppas över. Om värdet är noll, och en elsif-sats följer, så utvärderas villkorssatsen i elsif-satsen, och om den är icke-noll, så exekveras deklarationerna i den satsen. Villkorssatser utvärderas till dess en av dem är icke-noll, eller till dess det inte finns några fler. Om inga villkorssatser är icke-noll, och om if-satsen slutar med en else-sats, så exekveras deklarationerna i else-satsen. Det finns två typer av villkorliga uttryck. Om Villkorssatsen är ett enda uttryck, så utvärderas det bara. Om villkorssatsen är en variabel följd av ett uttryck, så utvärderas uttrycket och dess värde tilldelas till variabeln.

Lägg märke till att if behandlar noll-strängar som falska, men tomma strängar som sanna. Fördelen med detta är att

if(birth(indi))

returnerar sant om det finns en BIRT-post, till och med om den är tom, men returnerar falskt om det inte finns någon BIRT-post överhuvudtaget.

While-deklarationen tillhandahåller en loopmekanism. Villkorssatsen utvärderas, och om den är icke-noll, så exekveras loopkroppen. Efter varje iterering återutvärderas uttrycket; så länge som det är icke-noll, så upprepas loopen.

Call-deklarationen tillhandahåller proceduranrop. Namn måste matcha en av de procedurer som definieras i rapportprogrammet. Argt är en kommaseparerad lista över argumentuttryck. Rekursion är tillåten. När ett call exekveras, så blir värdena för dess argument utvärderade och använda för att initiera procedurens parametrar. Proceduren exekveras därefter. När proceduren är avslutad, så börjar exekveringen om vid den punkt som följer närmast efter anropet.

Följande rapportspråksuttryck påträffas vanligen endast nära början av en rapport:
char_encoding(sträng)
require(sträng)
option(sträng)
include(sträng)
global(varb)

Deklarationen char_encoding anger vilken teckenkodning som används i rapporten, så att rapportprocessorn kan korrekt tolka bytes som inte finns i ASCII (t. ex. åäö, bokstäver med accent). Ett exempel, som anger en teckenkodning som är vanlig i Västeuropa:

char_encoding("ISO-8859-1")
Deklarationen option tillåter rapportförfattaren att ange valbara inställningar. Den enda valbara inställningen som finns tillgänglig för närvarande är "explicitvars", vilken får all användning av variabler som inte tidigare deklarerats eller angivits att rapporteras som parsningsfel. Deklarationen require tillåter rapportförfattaren att ange att rapporten ifråga kräver en version av rapporttolken som inte är äldre än den angivna. Deklarationen include lägger till innehållet i en annan fil i den aktuella filen; dess stränguttryck är namnet på en annan LifeLinesprogramfil. Det beskrivs mer i detalj nedan. Deklarationen global måste användas utanför alla procedurer och funktion; den deklarerar att en variabel gäller globalt.

Rapportspråket inbegriper också följande typer av deklarationer, vilka härmar några vanliga programmeringsspråk:
set(varb, uttr)
continue()
break()
return([uttr])

Deklarationen set är tilldelningsvariabeln; uttrycket utvärderas, och dess värde tilldelas till variabeln. Deklarationen continue hoppar till slutet av den aktuella loopen, men lämnar inte loopen. Deklarationen break bryter ut från den närmast nästlade loopen. Deklarationen return återgår från den aktuella proceduren eller funktionen. Procedurer har return-deklarationer utan uttryck; funktioner har return-deklarationer med uttryck. Ingen av dessa deklarationer returnerar ett värde, så ingen har någon direkt effekt på programmets utdata.

Förutom dessa konventionella deklarationer tillhandahåller rapportgeneratorn andra itereringsdeklarationer för att loopa igenom genealogiska och andra typer av data. Deklarationen children exempelvis, itererar igenom barnen i en familj, deklarationen spouses itererar igenom de makar en person haft, och deklarationen families itererar igenom de familjer som en person är maka/make eller förälder i. Ett antal argument till iteratorn sätts med värden för varje iterering. När itereringen slutförts, har dessa variabler värdet "null". Dessa itereringstyper och andra typer beskrivs mer i detalj längre fram under respektive datatyp.


Uttryck

Det finns fyra typer av uttryck: bokstavliga, heltal, variabler och inbyggda eller användardefinierade funktionsanrop.

En bokstavlig är vilken sträng som helst som är innesluten i citationstecken; den är sitt eget värde. Ett heltal är vilken heltals- eller flyttalskonstant som helst; den är sitt eget värde. En variabel är en namnad plats som kan tilldelas olika värden under programkörningen. Värdet för en variabel är det senaste värdet som det tilldelats. Variabler har inte någon fast typ; vid olika tidpunkter i ett program kan samma variabel tilldelas data av helt olika typer. En identifierare följd av en kommaseparerad lista av uttryck omgivna av parenteser, är antingen ett anrop till en inbyggd funktion eller ett anrop till en användardefinierad funktion.


Egenskapen Include

Programmeringsspråket i LifeLines tillhandahåller en inkluderingsfunktion. Med den kan ett LifeLinesprogram hänvisa till andra LifeLinesprogram. Funktionen tillhandahålls genom deklarationen include:
include(sträng)
där sträng är en sträng inom citationstecken som är namnet på en annan LifeLinesprogramfil. När en include-deklaration påträffas, så läses det program som hänvisas till in, som om innehållet i filen som hänvisas till hade funnits i originalfilen just då. Detta gör det möjligt för dig att skapa biblioteksfiler för LifeLinesprogram, som kan användas av många program. Inkluderade filer kan i sin tur innehålla include-deklarationer, och så vidare. LifeLines använder skalvariabeln LLPROGRAMS, om den är inställd, för att söka efter inkluderade filer. De filer som inkluderats med en include-deklaration läses bara in en gång. Om flera include-deklarationer påträffas där samma fil är inkluderad, så har endast den första deklarationen någon effekt.

Den enda main-proceduren som faktiskt körs är den i den rapport som användaren valt. Main-procedurer i andra rapporter som inkluderas körs inte. Detta möjliggör att en modul avsedd att inkluderas i andra program kan ha en main-procedur for testsyften. Om flerfaldiga funktioner eller procedurer med samma namn inkluderas (förutom med namnet main), så genereras ett körningsfel och programmet körs inte.


Inbyggda funktioner

Det finns en lång rad med inbyggda funktioner, och den kommer att fortsätta att växa en tid framöver. I den första underavdelningen nedan beskrivs de typer av värden som används i LifeLinesprogram; det är de olika typerna av variabler, funktionsparametrar och returneringsvärden för funktioner. I de återstående avdelningarna delas de inbyggda funktionerna in i logiska kategorier och beskrivs.


Typer av värden

VALFRI

union av alla typer

BOOL

boolesk (0 representerar falskt; allt annat representerar sant)

HÄNDELSE

händelse; referens till understruktur av noder i en GEDCOM-post (referens)

FAM

familj; referens till en FAM-post i GEDCOM (referens)

FLYTTAL

flyttalsnummer (får användas överallt där ett HELTAL får användas)

INDI

person; referens till en INDI-post i GEDCOM (referens)

HELTAL

heltal (på de flesta system ett 32-bitars signerat värde)

LISTA

lista av godtycklig längd, med vilka värden som helst (referens)

NOD

GEDCOM-nod; referens till en rad i ett GEDCOM-träd/post (referens)

TAL

union av alla aritmetiska typer (HELTAL och FLYTTAL)

SET

personuppsättning av godtycklig längd (referens)

STRÄNG

textsträng

TABELL

söktabell med nyckelvärden (referens)

TOM

typ med inga värden

I summeringarna av de inbyggda funktionerna nedan, visas varje funktion tillsammans med dess argumenttyper och dess returneringstyp. Typerna kommer från den föregående listan. Ibland måste ett argument till en inbyggd funktion vara en variabel; när detta är fallet anges dess typ med XXX_V, där XXX är en av typerna ovan. De inbyggda funktionerna kontrollerar inte vilka typer av argument de har. Variabler kan innehålla värden av alla typer, men vid varje tidpunkt kommer de att innehålla värden av endast en typ. Lägg märke till att HÄNDELSE är en undertyp till NOD, och att BOOL är en undertyp till HELTAL. Inbyggda funktioner av typen TOM returnerar faktiskt nollvärden.

Referenstyper (angivna ovan inom parentes) följer "pekarsemantik", med vilket avses att tilldelning av en variabel till en annan resulterar i att båda variablerna pekar på samma data (ingen kopia görs). Därför, om du skickar en sträng till en funktion som förändrar strängen, så ser inte anroparen förändringen, eftersom en sträng inte är en referenstyp. Om du å andra sidan skickar en tabell till en funktion som förändrar tabellen, så ser inte anroparen förändringen, eftersom en tabell är en referenstyp.


Aritmetiska och logiska funktioner

HELTAL add(HELTAL, HELTAL ...);

addition - två till 32 argument

HELTAL sub(HELTAL, HELTAL);

subtraktion

HELTAL mul(HELTAL, HELTAL ...);

multiplikation - två till 32 argument

HELTAL div(HELTAL, HELTAL);

division

HELTAL mod(HELTAL, HELTAL);

modulus (rest)

TAL exp(TAL, HELTAL);

exponentiering

TAL neg(HELTAL);

negering

FLYTTAL float(HELTAL);

konvertera heltal till flyttal

HELTAL int(FLYTTAL);

konvertera flyttal till heltal

TOM incr(HELTAL);

addera ett till variabel

TOM decr(HELTAL);

subtrahera ett från variabel

BOOL and(BOOL, BOOL ...);

logiskt och - från två till 32 argument

BOOL or(BOOL, BOOL ...);

logiskt eller - från två till 32 argument

BOOL not(BOOL);

logiskt inte

BOOL eq(VALFRI, VALFRI);

likhet (ej strängar)

BOOL ne(VALFRI, VALFRI);

olikhet

BOOL lt(VALFRI, VALFRI);

mindre än

BOOL gt(VALFRI, VALFRI );

större än

BOOL le(VALFRI, VALFRI);

mindre än eller lika med

BOOL ge(VALFRI, VALFRI);

större än eller lika med

Add, sub, mul och div gör vanlig aritmetik på hel- eller flyttalsvärden. Om någon av operanderna är ett flyttal, så blir resultatet ett flyttal. Funktionerna add och mul kan ha två till 32 argument; summan eller produkten av den fullständiga uppsättningen argument beräknas. Funktionerna sub och div har två argument vardera; sub subtraherar sitt andra argument från sitt första, och div dividerar sitt första argument med sitt andra. Funktionen mod returnerar resten till divisionen av den första parametern med den andra. Om det andra argumentet till div eller mod är noll, så returnerar dessa funktioner 0 och genererar ett körningsfel. Exp utför heltalsexponentiering. Neg negerar sitt argument. Funktionerna float och int kan användas för att explicit konvertera ett värde till flyttal eller heltal vid behov.

Incr och decr ökar respektive minskar värdet av en variabel med ett. Argumentet till båda funktionerna måste vara en variabel.

And och or utför logiska operationer. Båda funktionerna tar från två till 32 argument. Alla argument "och"-as respektive "eller"-as ihop. Argumenten utvärderas från vänster till höger, men endast fram till den punkt där slutvärdet av funktionen blir känt. Not utför den logiska inte-operationen.

Eq, ne, lt, le, gt och ge utvärderar de sex ordningsrelationerna mellan två heltal.


Personfunktioner

STRÄNG name(INDI, BOOL);

förvald namntyp för

STRÄNG fullname(INDI, BOOL, BOOL, HELTAL);

många namnformer för

STRÄNG surname(INDI);

efternamn för

STRÄNG givens(INDI);

förnamn för

STRÄNG trimname(INDI, HELTAL);

förkortat namn för

HÄNDELSE birth(INDI);

första födelsehändelse för

HÄNDELSE death(INDI);

första dödshändelse för

HÄNDELSE baptism(INDI);

första dophändelse för

HÄNDELSE burial(INDI);

första begravningshändelse för

INDI father(INDI);

första fader till

INDI mother(INDI);

första moder till

INDI nextsib(INDI);

nästa (yngre) syskon till

INDI prevsib(INDI);

föregående (äldre) syskon till

STRÄNG sex(INDI);

kön för

BOOL male(INDI);

sant om argumentet är man, falskt annars

BOOL female(INDI);

sant om argumentet är kvinna, falskt annars

STRÄNG pn(INDI, HELTAL);

pronomen hänvisande till

HELTAL nspouses(INDI);

antal makar till

HELTAL nfamilies(INDI);

antal familjer (som maka/make/förälder) för

FAM parents(INDI);

första föräldrarnas familj för

STRÄNG title(INDI);

första titel för

STRÄNG key(INDI|FAM, BOOL);

intern nyckel för (fungerar också för familjer)

STRÄNG soundex(INDI);

SOUNDEX-kod för

NOD inode(INDI);

GEDCOM-rotnod för

NOD root(INDI);

GEDCOM-rotnod för

INDI indi(STRÄNG);

finn person med nyckelvärde

INDI firstindi(void);

första personen i databasen i nyckelordning

INDI lastindi(void);

sista personen i databasen i nyckelordning

INDI nextindi(INDI);

nästa person i databasen i nyckelordning

INDI previndi(INDI);

föregående person i databasen i nyckelordning

spouses (INDI, INDI, FAM, HELTAL) { kommandon }

loopa igenom alla makar till

families (INDI, FAM, INDI, HELTAL) { kommandon }

loopa igenom alla familjer (som maka/make) för

forindi (INDI, HELTAL) { kommandon }

loopa igenom alla personer i databasen

mothers (INDI, INDI_V, FAM_V, HELTAL) { kommandon }

loopa igenom alla kvinnliga föräldrar till en person

fathers (INDI, INDI_V, FAM_V, HELTAL) { kommandon }

loopa igenom alla manliga föräldrar till en person

Parents (INDI, FAM, HELTAL) { kommandon }

loopa igenom alla familjer en person är ett barn i

Dessa funktioner tar en person som parameter och returnerar information om honom eller henne.

Name returnerar det förvalda namnet för en person; detta är det namn som återfinns på den första 1 NAME-raden i personens post; snedstrecken tas bort och efternamnet sätts i versaler; name kan ha en eventuell andra parameter - om den är sann så beter sig funktionen som beskrivits ovan; om den är falsk, så bibehålls efternamnet som exakt så som det ser ut i posten.

Fullname returnerar namnet för en person i ett antal olika format. Om den andra parametern är sann, så visas efternamnet med versaler; om inte så visas efternamnet som det skrivs i posten. Om den tredje parametern är sann, så visas delarna i namnet i den ordning som de återfinns i posten; om inte så skrivs efternamnet först, följt av ett komma, och därefter de övriga namndelarna. Den fjärde parametern anger den maximala längden på fältet som kan användas för att visa namnet; diverse konverteringar sker om det är nödvändigt att korta namnet för att passa in det i denna längd.

Surname returnerar efternamnet för personen, som det ser ut på den första 1 NAME-raden; snedstrecken tas bort. Givens returnerar förnamnen för personen i samma ordning och format som det står skrivet i den första 1 NAME-raden i posten. Trimname returnerar det förvalda namnet för personen förkortat till det maximala antalet tecken som angivits i den andra variabeln.

Birth, death, baptism och burial returnerar den första födelse- respektive döds-, dop- och begravningshändelsen i personposten. En händelse är en GEDCOM-nod på nivå 1. Om det inte finns någon matchande händelse så returnerar dessa funktioner noll.

Father, mother, nextsib och prevsib returnerar fader respektive moder, nästa yngre syskon och nästa äldre syskon till personen. Om personen har fler än en fader (moder) så returnerar funktionen father (mother) den första av dem. Dessa funktioner returnerar noll om det inte finns någon person i rollen.

Sex returnerar värdet för personens kön som strängen M om personen är en man, F om personen är en kvinna, eller U om könet för personen är okänt. Male och female returnerar sant om personen är man respektive kvinna, eller falskt om inte.

Pn genererar pronomen, användbart för att generera text; den andra parametern väljer typ av pronomen:

0Han/Hon
1han/hon
2Hans/Hennes
3hans/hennes
4honom/henne

Nspouses returnerar antalet makar personen har i databasen, och nfamilies returnerar antalet familjer som personen är förälder/maka/make i; dessa två värden är inte nödvändigtvis identiska. Parents returnerar den första familjen som personen är barn i.

Title returnerar värdet på den första 1 TITL-raden i posten. Key returnerar nyckelvärdet för en person eller familj; om det finns en andra parameter och den är icke-noll, så tas det inledande I:et eller F:et bort. Soundex returnerar soundex-koden för personen.

Root och Inode returnerar rotnoden i personens GEDCOM-nodträd. Lägg märke till att ett INDI-värde inte är ett NOD-värde. Om du vill behandla noderna inom en persons nodträd, så måste du först använda root- eller inode-funktionen för att få fram rotnoden i personens nodträd. Root och inode är synonyma.

Indi returnerar den person vars nyckel skickats som argument; om ingen person har nyckeln, så returnerar indi noll.

Firstindi, nextindi och previndi låter dig iterera genom samtliga personer i databasen. Firstindi returnerar den första personen i databasen efter nyckelordning. Nextindi returnerar nästa person efter personen i argumentet i nyckelordning. Previndi returnerar den föregående personen innan argumentpersonen i nyckelordning.

Spouses är en iterator som loopar igenom varje maka/make till en person. Det första argumentet är en person. Det andra argumentet är en personvariabel som itererar igenom den första personens makar. Det tredje argumentet är en familjevariabel som itererar igenom de familjer som personen och varje maka/make finns i. Det fjärde argumentet är en heltalsvariabel som räknar itereringarna.

Families är en iterator som loopar igenom de familjer som en person var maka/make/förälder i. Det första argumentet är en person. Det andra argumentet är en familjevariabel som itererar igenom familjerna som den första personen var maka/make/förälder i. Det tredje argumentet itererar igenom makarna från familjerna; om det inte finns någon maka/make i en viss familj, så sätts variabeln till noll för den itereringen. Det fjärde argumentet är en heltalsvariabel som räknar antalet itereringar.

Forindi är en iterator som loopar igenom varje person i databasen i ökande nyckelordning. Dess första parameter är en variabel som itererar igenom personerna; dess andra parameter är en heltalsräknarvariabel som räknar personerna med början på ett.

Parents är en iterator som loopar igenom alla familjer som en person är barn i. OBS: Denna iterators namn börjar med stort P. Det finns en annan funktion med samma namn som börjar med litet p. Dess första parameter är en person; dess andra parameter är en familjevariabel som itererar igenom de familjer som personen är barn i; och den tredje parametern är en variabel som räknar familjerna med början på ett.

Forindi är en iterator som loopar igenom alla personer i databasen i stigande nyckelordning. Dess första parameter är en variabel som itererar igenom personerna; dess andra variabel är en heltalsräknare som räknar personerna med början på ett.


Familjefunktioner

HÄNDELSE marriage(FAM);

första giftermålshändelse för

INDI husband(FAM);

första make/fader till

INDI wife(FAM);

första maka/moder till

HELTAL nchildren(FAM);

antal barn i

INDI firstchild(FAM);

första barn till

INDI lastchild(FAM);

sista barn till

STRÄNG key(FAM|INDI, BOOL);

internt nyckelvärde för (fungerar också för personer)

NOD fnode(FAM);

GEDCOM-rotnod för

NOD root(FAM);

GEDCOM-rotnod för

FAM fam(STRÄNG);

finn familj via nyckel

FAM firstfam(void);

första familjen i databasen i nyckelordning

FAM lastfam(void);

sista familjen i databasen i nyckelordning

FAM nextfam(FAM);

nästa familj i databasen i nyckelordning

FAM prevfam(FAM);

föregående familj i databasen i nyckelordning

children (FAM, INDI_V, HELTAL_V) { kommandon }

loopa igenom barn i familj

forfam (FAM_V, HELTAL_V) { kommandon }

loopa igenom alla familjer i databasen

Dessa funktioner tar en familj som ett argument och returnerar information om den.

Marriage returnerar den första giftermålshändelsen som hittas i familjeposten, om någon; den returnerar noll om det inte finns någon giftermålshändelse.

Husband returnerar den första maken/fadern i familjen, om någon; wife returnerar den första makan/modern i familjen, om någon. Båda returnerar noll om den efterfrågade personen inte finns i familjen.

Nchildren returnerar antalet barn i familjen.

Firstchild och lastchild returnerar det första respektive sista barnet i en familj.

Key beskrevs i avsnittet om personfunktioner.

Root och fnode returnerar rotnoden i GEDCOM-nodträdet för en familj. Lägg märke till att ett FAM-värde inte är ett NOD-värde. Om du vill behandla noderna inom nodträdet för en familj, måste du först använda funktionerna root eller fnode för att få fram roten i nodträdet för familjen. Root och fnode är synonyma.

Fam returnerar den familj vars nyckel skickats som argument; om ingen familj har nyckeln så returnerar fam noll.

Firstfam, nextfam och prevfam låter dig iterera igenom alla familjer i databasen. Firstfam returnerar den första familjen i databasen i nyckelordning. Nextfam returnerar den familj som är närmast efterföljande i nyckelordning från familjen i argumentet. Prevfam returnerar den familj som är närmast föregående i nyckelordning från familjen i argumentet.

Children är en iterator som loopar igenom barnen i en familj. Dess första parameter är ett familjeuttryck; dess andra parameter är en variabel som itererar igenom varje barn; dess tredje parameter är ett heltalsräknarvariabel som räknar barnen, med början på ett. Dessa två variabler får användas inom inom loopkroppen.

Forfam är en iterator som loopar igenom varje familj i databasen i stigande nyckelordning. Dess första parameter är en variabel som itererar igenom familjerna; dess andra parameter är en heltalsräknarvariabel som räknar igenom familjerna med början på ett.


Andra typer av poster

forsour (NOD_V, HELTAL) { kommandon }

loopa igenom alla källor i databasen

foreven (NOD_V, HELTAL) { kommandon }

loopa igenom alla EVEN-noder in databasen

forothr (NOD_V, HELTAL) { kommandon }

loopa igenom alla övriga (notiser, etc.) noder i databasen

Forsour är en iterator som loopar igenom alla källnoder i databasen. Dess första argument är SOUR-posten och dess andra argument är en heltalsräknarvariabel som räknar källelementen med början på ett. Foreven är en iterator som loopar igenom alla händelsenoder i databasen. Dess första argument är EVEN-posten och dess andra argument är en heltalsräknarvariabel som räknar händelseelementen med början på ett. Forothr är en iterator som loopar igenom alla övriga noder i databasen. Dess första argument är posten (NOTE, etc.) och dess andra argument är en heltalsräknarvariabel som räknar noderna med början på ett.


Listfunktioner

TOM list(LISTA_V);

deklarera en lista

BOOL empty(LISTA);

kontrollera om listan är tom

HELTAL length(LISTA);

listans längd

TOM enqueue(LISTA, VALFRI);

köa element i lista

VALFRI dequeue(LISTA);

avköa och returnera element från listan

TOM requeue(LISTA, VALFRI);

återköa ett element i lista

TOM push(LISTA, VALFRI);

lägg på element i lista

VALFRI pop(LISTA);

ta bort och returnera element från lista

TOM setel(LISTA, HELTAL, VALFRI);

vektorelementstilldelning

VALFRI getel(LISTA, HELTAL);

välj vektorelement

BOOL inlist(LISTA, VALFRI);

är andra argumentet i listan

TOM sort(LISTA, LISTA);

sortera listelement

TOM rsort(LISTA, LISTA);

sortera listelement i omvänd ordning

LISTA dup(LISTA);

duplicera en lista

forlist (LISTA, VALFRI_V, HELTAL_V) { kommandon }

loopa igenom alla element i lista

LifeLines tillhandahåller listor för allmänna syften som kan åtkommas som köer, stackar eller vektorer. En lista måste deklareras med funktionen list innan den kan användas. Att återdeklarera en befintlig variabel med list tömmer den och återställer den till att vara en tom lista. Om argumentet till list() är namnet på en parameter till den aktuella rutinen, så tas referensen till de anropande rutinerna bort, och en ny lista skapas.

En lista kan ha valfritt antal element. Empty returnerar sant om listan inte har några element och falskt i annat fall. Length returnerar längden på listan. Den enda parametern för båda är en lista. Följande diagram anger hur de olika åtkomstfunktionerna för en lista påverkar varandra:

Enqueue, dequeue och requeue tillhandahåller köåtkomst till en lista. Enqueue lägger till ett element längst bak i en kö, dequeue tar bort och returnerar elementet från längst fram i en kö, och requeue lägger till ett element längst fram i en kö. Den första parametern till alla tre är en lista, och den andra parametern till enqueue och requeue är värdet som ska läggas till i kön och kan vara vilket värde som helst.

Push och pop tillhandahåller stackåtkomst till en lista. Push lägger på element på stacken, och pop tar bort och returnerar det senast pålagda elementet från stacken. Den första parametern för båda är en lista, och den andra parametern för push är värdet som ska läggas på stacken och kan vara av vilken typ som helst.

Setel och getel tillhandahåller vektoråtkomst till en lista. Setel anger ett värde för ett vektorelement, och getel returnerar värdet för ett vektorelement. Den första parametern för båda är en lista; den andra parametern för båda är en heltalsposition i vektorn; och den tredje parametern för setel är värdet att tilldela till vektorelementet och kan vara av vilken typ som helst. Vektorelement numreras med början på ett. Otilldelade element antas vara noll (0). Vektorer växer automatiskt i storlek för att anpassas till den största använda positionsangivelsen. Att ange 0 refererar till det sista elementet i andra änden från 1, -1 den före det, o. s. v.

Inlist jämför det andra argumentet med varje element i listan. Om det finner ett matchande element, så returnerar inlist sant.

sort och rsort sorterar en lista, och använder elemententen i den andra vektorn för att bestämma den nya ordningen. Båda listorna ordnas om, så i grunden sorteras båda med användning av sorteringsordningen i det andra argumentet. (Om bara ett argument anges, så sorteras det mot sina egna element.) rsort sorterar i omvänd ordning mot sort. Den ordning som sort skapar placerar det minsta elementet på position 1, och det största elementet på slutet av listan, på så sätt att dequeue kommer att ta bort det minsta elementet.

dup skapar en kopia av en lista. Om b är en lista, så gör funktionen set(a,b) variabeln a till en referens till listan b. Om du vill skapa en ny lista, måste du använda set(a,dup(b)).

Forlist är en iterator som loopar igenom elementet i en lista. Dess första parameter är ett LIST-uttryck; dess andra parameter är en variabel som itererar igenom listelementen; och dess tredje parameter är en heltalsräknarvariabel som räknar listelementen med början på ett.


Tabellfunktioner

TOM table(TABELL_V);

deklarera en tabell

TOM insert(TABELL, STRÄNG, VALFRI);

lägg in objekt i en tabell

VALFRI lookup(TABELL, STRÄNG);

leta upp och returnera objekt från tabell

Dessa funktioner tillhandahåller tabeller med nycklar för allmänna syften. En tabell måste deklareras med funktionen table innan den kan användas.

Insert lägger in ett objekt och dess nyckel i en tabell. Dess första parameter är en tabell; dess andra parameter är objektets nyckel; och den tredje parametern är objektet självt. Nyckeln måste vara en sträng och objektet kan vara vilket värde som helst. Om det redan finns ett objekt i tabellen med denna nyckel, så ersätts det gamla objektet med det nya.

Lookup hämtar ett objekt från en tabell. Dess första parameter är en tabell, och den andra parametern är objektets nyckel. Funktionen returnerar objektet som har den nyckeln från tabellen; om det inte finns något sådant objekt, returneras noll.


Funktioner för GEDCOM-noder

STRÄNG xref(NOD);

korsreferensvärde för

STRÄNG tag(NOD);

etikett för

STRÄNG value(NOD);

värde för

NOD parent(NOD);

föräldranod för

NOD child(NOD);

första barnnod till

NOD sibling(NOD);

nästa syskonnod till

NOD savenode(NOD);

kopiera en nodstruktur

HELTAL level(NOD);

nivå för en nod

fornodes (NOD, NOD_V) { kommandon }

loopa igenom barnnoder

fornotes (VALFRI, STRÄNG) { kommandon }

loopa igenom notiser i en nod

traverse (NOD, NOD_V, HELTAL_V) { kommandon }

loopa igenom alla ättlinganoder

Dessa funktioner ger tillgång till komponenterna i en GEDCOM-nod. Alla tar en GEDCOM-nod som enda parameter, och alla returnerar ett annat värde med anknytning till noden.

Xref returnerar korsreferensvärdet för noden, om det finns; tag returnerar etiketten för noden; och value returnerar värdet för noden, om det finns. Om det inte finns någon korsreferens, så returnerar xref noll; om det inte finns något värde, så returnerar value noll.

Parent returnerar föräldranoden till noden, om den finns; child returnerar den första barnnoden till noden, om den finns; och syskon returnerar den nästa syskonnoden till noden, om den finns. När det inte finns någon nod som är relaterad på sättet ifråga, så returnerar dessa funktioner noll. Dessa tre funktioner möjliggör enkel navigation genom ett GEDCOM-nodträd.

Savenode gör en kopia av noden, och understrukturen i noder under noden, som delats ut till den. Varning: Minnet som används för att göra kopian lämnas aldrig tillbaka till systemet.

Funktionen level returnerar nivån för noden.

Fornodes är en iterator som loopar igenom barnnoderna i en GEDCOM-nod. Dess första argument är ett noduttryck, och dess andra parameter är en variabel som itererar igenom varje direkt barnnod till den första noden.

Fornotes är en iterator som loopar igenom NOTE-noderna i en GEDCOM-nod. Dess första argument är ett noduttryck, och dess andra argument är en variabel som returnerar värdet för NOTE-noden. Värdet inkluderar behandlade underliggande CONC- och CONT-poster.

Traverse är en iterator som tillhandahåller en allmän metod för att gå igenom GEDCOM-träd. Dess första parameter är ett noduttryck; dess andra parameter är en variabel som itererar genom alla noder under den valda noden, i riktning uppifrån och ned och från vänster till höger; och dess tredje parameter är en variabel som är satt till nivån för den aktuella noden i itereringen.


Händelse- och datumfunktioner

STRÄNG date(HÄNDELSE);

datum för, värde för den första DATE-raden

STRÄNG place(HÄNDELSE);

plats för, värde för den första PLAC-raden

STRÄNG year(HÄNDELSE);

år, eller första sträng med 3-4 siffror i första DATE-raden

STRÄNG long(HÄNDELSE);

datum och plats, värden för första DATE- och PLAC-raderna

STRÄNG short(HÄNDELSE);

datum och plats för, förkortad form

HÄNDELSE gettoday(void);

returnerar "händelsen" dagens datum

TOM dayformat(HELTAL);

ställ in dagformat för anrop till stddate

TOM monthformat(HELTAL);

ställ in månadsformat för anrop till stddate

TOM yearformat(HELTAL);

ställ in årsformat för anrop till stddate

TOM eraformat(HELTAL);

ställ in eraformat för anrop till stddate

TOM dateformat(HELTAL);

ställ in datumformat för anrop till stddate

TOM datepic(STRÄNG);

ställ in anpassat datumformat för anrop till stddate

STRÄNG stddate(HÄNDELSE);

datum för, i aktuellt format

TOM complexformat(HELTAL);

set complex date format

TOM complexpic(HELTAL, STRÄNG);

ställ in anpassad komplex datumbildssträng

STRÄNG complexdate(HÄNDELSE|STRÄNG);

datum för, i aktuellt komplext format

Dessa funktioner extraherar information om datum och plats för händelser.

Date returnerar värdet för den första DATE-raden i en händelse, en nod i trädet för en GEDCOM-post. Date letar upp den första DATE-raden som ligger en nivå djupare än händelsenoden. Place returnerar värdet för den första PLAC-raden i en händelse. Year returnerar det första tre- eller fyrsiffriga numret i värdet för den första DATE-raden i en händelse; detta nummer antas vara året för händelsen.

Long returnerar det bokstavliga värdet på de första DATE- och PLAC-raderna i en händelse, sammanlänkade, avdelade med ett komma. Short förkortar information från de första DATE- och PLACraderna, sammanlänkar den förkortade informationen, avdelad med ett komma, och returnerar den. Ett förkortat datum är dess år; en förkortad plats är den sista komponenten i dess värde, ytterligare förkortat om komponenten finns med i platsförkortningstabellen.

Gettoday skapar en händelse som har dagens datum i DATE-raden.

De nästa sju funktionerna används för att formatera datum på ett antal olika sätt. Med Dayformat, monthformat, yearformat, eraformat, och dateformat väljer man stil för dag, månad, år, era och datumstrukturen som helhet; stddate returnerar datum i den valda stilen. Datepic möjliggör specifikation av ett anpassat mönster som upphäver datumformatet som valts med dateformat. Den angivna strängen anger placeringen av dag, månad och år i strängen med %d, %m och %y. Ett nollargument avaktiverar det upphävda formatet. Argumentet till stddate är normalt en händelse och datumet extraheras från händelsen och formateras. Om argumentet är en datumsträng konverteras den med användning av aktuellt datumformat.

De nästa tre funktionerna möjliggör mer komplex formatering av datum, med bestämningarna ABT, EST, CAL, BEF, AFT, FROM för GEDCOM-datum i åtanke. Complexformat väljer formatet att använda. Formatet påverkar endast den komplexa bilden, inte formatet på datumet i sig självt. Funktionen complexpic kan användas för att ange en anpassad bildsträng för någon av eller alla de nio anpassade formatsträngarna. Den anpassade strängen kan avbrytas genom att skicka noll för strängen. När en anpassad bildsträng anges upphäver den både de förkortade och den fullständiga bildsträngarna. Complexdate formaterar datumet på samma sätt som stddate, men med tillägg av den valda komplexa datumformatsträngen.

De dagformatkoder som skickas till dayformat är:

0sätt in blanksteg före ensiffriga dagar
1 sätt in 0 före ensiffriga dagar
2 varken blanksteg eller 0 före ensiffriga dagar

De månadsformateringskoder som skickas till monthformat är:

0 numrera med blanksteg före ensiffriga månader
1 numrera med nolla före ensiffriga månader
2 numrera utan varken blanksteg eller 0 före ensiffriga månader
3 förkortning med versaler (t. ex. JAN, FEB) (lokaliserad)
4 förkortning med inledande versal (t, ex. Jan, Feb) (lokaliserad)
5 hela ordet i versaler (tex., JANUARI, FEBRUARI) (lokaliserad)
6 hela ordet med inledande stor bokstav (tex., Januari, Februari) (lokaliserad)
7 förkortning med gemener (t. ex. jan, feb) (lokaliserad)
8 hela ordet med gemener (t. ex. januari, februari) (lokaliserad)
9 förkortning med versaler på engelska som i GEDCOM (t. ex. JAN, FEB)
10 romerska siffror med gemener (t. ex. i, ii)
11 romerska siffror med versaler (t. ex. I, II)

Årformatskoderna som skickas till yearformat är:

0 använd inledande blanksteg före år med mindre än fyra siffror
1 använd inledande 0 före år med mindre än fyra siffror
2 varken blanksteg eller inledande 0 före år

De eraformatskoder som skickas till eraformat är:

0 inga markörer för f. kr./e. kr.
1 efterföljande e. kr. där det passar
2 efterföljande e. kr. eller f. kr.
11 efterföljande f. kr. där det passar
12 efterföljande e. kr. eller f. kr.
21 efterföljande B. C. E (before common era) om det passar
22 efterföljande C. E. eller B. C. E.
31 efterföljande BC om det passar
32 efterföljande CE eller BCE

De fullständiga datumformaten som skickas till stddate är:

0 da må år
1 må da, år
2 må/da/år
3 da/må/år
4 må-da-år
5 da-må-år
6 mådaår
7 damåår
8 år må da
9 år/må/da
10 år-må-da
11 årmåda
12 år (endast år, utelämnar allt annat)
13 da/må år
14 (Som i GEDCOM)

De komplexa datumformat som väljs av complexformat och används av complexdate är:

  Typ Exempel
3 använd förkortningar med versaler UNG 1 JAN 2002
4 använd förkortningar med inledande versal Ung 1 JAN 2002
5 använd fullständiga ord med versaler UNGEFÄR 1 JAN 2002
6 använd fullständiga ord med inledande versal Ungefär 1 JAN 2002
7 använd förkortningar med gemener ung 1 JAN 2002
8 använd fullständiga ord med gemener ungefär 1 JAN 2002

De komplexa datumsträngsbilderna som kan upphävas med complexpic är:

  Förkortning Fullständigt ord
0 ung %1 ungefär %1
1 upp %1 uppskattat %1
2 ber %1 beräknat %1
3 för %1 före %1
4 eft %1 efter %1
5 mel %1 och %2 mellan %1 och %2
6 fr %1 från %1
7 till %1 t %1
8 fr %1 t %2 från %1 till $2


Funktioner för värdeextrahering

TOM extractdate(NOD, HELTAL_V, HELTAL_V, HELTAL_V);

extrahera ett datum

TOM extractnames(NOD, LISTA_V, HELTAL_V, HELTAL_V);

extrahera ett namn

TOM extractplaces(NOD, LISTA_V, HELTAL_V);

extrahera en plats

TOM extracttokens(STRÄNG, LISTA_V, HELTAL_V, STRÄNG);

extrahera objekt

TOM extractdatestr(VARB, VARB, VARB, VARB, VARB, STRÄNG);

extrahera datum från sträng

Funktionerna för värdeextrahering läser värdena för vissa rader och returnerar dessa värden i extraherad form.

Extractdate extraherar datumvärden från antingen en händelse- eller en DATE-nod. Den första parametern måste vara en nod; om dess etikett är DATE, så extraheras datumet från värdet på noden; om dess etikett inte är DATE, så extraheras datumet från den första DATE-raden en nivå nedanför argumentnoden. De återstående tre argumenten är variabler. Den första tilldelas heltalsvärdet för den extraherade dagen; den andra tilldelas heltalsvärdet för den extraherade månaden; och den tredje tilldelas heltalsvärdet för det extraherade året.

Extractnames extraherar namnkomponenter från en NAME-rad. Dess första argument är antingen en INDI- eller en NAME-nod. Om det är en NAME-rad, så extraheras komponenterna från värdet av den noden; om det är en INDI-rad, så extraheras komponenterna från värdet av den första NAME-raden i personposten. Det andra argumentet är en lista som kommer att innehålla de extraherade komponenterna. Det tredje argumentet är en heltalsvariabel som sätts till antalet extraherade komponenter. Det fjärde argumentet är en variabel som är satt till positionen (med början på ett) i efternamnskomponenten; de omgivande /-tecknen tas bort från efternamnskomponenten. Om det inte finns något efternamn så sätts denna variabel till noll.

Extractplaces extraherar platskomponenter från en PLAC-nod. Det första argumentet är en nod; om dess etikett är PLAC, så extraheras dessa från nodens värde; om dess etikett inte är PLAC, så extraheras platser från den första PLAC-raden en nivå nedanför noden för argumentet. Den andra parametern är en lista som ska innehålla de extraherade komponenterna. Det tredje argumentet är en heltalsvariabel som sätts till antalet extraherade komponenter. Platskomponenter definieras av de komma-separerade bitarna av värdet för PLAC; inledande och efterföljande blanksteg tas bort från komponenterna, medan alla blanksteg inom etiketten bibehålls.

Extracttokens extraherar objekt från en sträng och placerar dem i en lista. Det första argumentet är den sträng som objekten ska extraheras från. Det andra argumentet är listan som ska innehålla objekten. Det tredje argumentet är en heltalsvariabel som sätts till det antal objekt som extraherats. Den fjärde parametern är den sträng av avgränsande tecken som extracttokens använder för att dela upp strängen med indata i objekt.


Funktioner för interaktion med användaren

TOM getindi(INDI_V, STRÄNG);

identifiera person via användargränssnitt

TOM getindiset(SET_V, STRÄNG);

identifiera uppsättning med personer via användargränssnitt

TOM getfam(FAM_V);

identifiera familj via användargränssnitt

TOM getint(HELTAL_V, STRÄNG);

hämta heltal via användargränssnitt

TOM getstr(STRÄNG_V, STRÄNG);

hämta sträng via användargränssnitt

INDI choosechild(INDI|FAM);

välj barn till person/i familj via användargränssnitt

FAM choosefam(INDI);

välj familj som person finns i som maka/make

INDI chooseindi(SET);

välj person från uppsättning med personer

INDI choosespouse(INDI);

välj maka/make till person

SET choosesubset(SET);

välj en delmängd av en uppsättning med personer

HELTAL menuchoose(LISTA, STRÄNG);

gör ett val från en lista

Dessa funktioner interagerar med användaren för att hämta den information som behövs för programmet.

Getindi ber användaren att identifiera en person. Det första argumentet är en variabel som sätts till den valda personen. Det andra (inte obligatoriskt) är en sträng att använda som fråga. Getindiset ber användaren att identifiera en uppsättning med personer. Getfam ber användaren att identifiera en familj. Getint och getstr ber användaren skriva in ett heltal respektive en sträng.

Choosechild ber användaren att välja ett barn i en familj eller till en person; dess enda argument är en person eller en familj; den returnerar barnet. Choosefam ber användaren att välja en familj som en person finns i som maka/make; dess argument är en person; den returnerar familjen. Chooseindi ber användaren att välja en person ur en uppsättning med personer; dess argument är en uppsättning med personer; den returnerar den valda personen. Choosespouse ber användaren att välja en maka/make till en person; dess argument är en person; den returnerar den valda maka/maken. Choosesubset ber användaren att välja en delmängd personer ur en uppsättning med personer; dess argument är den valda delmängden.

Menuchoose låter användaren göra val ur en godtycklig meny. Dess första argument är en lista med strängar som utgör alternativen i menyn; det andra (inte obligatoriska) argumentet är en frågesträng för menyn; menuchoose returnerar heltalsindexet för det menyalternativ som användaren valt; om användaren inte väljer något alternativ, returneras noll.


Strängfunktioner

STRÄNG lower(STRÄNG);

konvertera till gemener

STRÄNG upper(STRÄNG);

konvertera till versaler

STRÄNG capitalize(STRÄNG);

sätt inledande versal

STRÄNG titlecase(STRÄNG);

sätt inledande versal på varje ord

STRÄNG trim(STRÄNG, HELTAL);

korta av till viss längd

STRÄNG rjustify(STRÄNG, HELTAL);

högerjustera i fält

STRÄNG concat(STRÄNG, STRÄNG ...);

sammanlänka två strängar

STRÄNG strconcat(STRÄNG, STRÄNG ...);

sammanlänka två strängar

HELTAL strlen(STRÄNG);

antal tecken i sträng

STRÄNG substring((STRÄNG, HELTAL, HELTAL);

delsträngsfunktion

HELTAL index(STRÄNG, STRÄNG, HELTAL);

positionsfunktion

STRÄNG d(HELTAL);

tal som heltalssträng

STRÄNG f(FLYTTAL, HELTAL);

tal som flyttalssträng

STRÄNG card(HELTAL);

tal i grundtalsform (en, två, ...)

STRÄNG ord(HELTAL);

tal i ordningstalsform (första, andra, ...)

STRÄNG alpha(HELTAL);

konvertera tal till latinsk bokstav (a, b, ...)

STRÄNG roman(HELTAL);

tal i romersk form (i, ii, ...)

STRÄNG strsoundex(STRÄNG);

finn SOUNDEX-värde för godtycklig sträng

HELTAL strtoint(STRÄNG);

konvertera talsträng till heltal

HELTAL atoi(STRÄNG);

konvertera talsträng till heltal

HELTAL strcmp(STRÄNG, STRÄNG);

allmän jämförelse av strängar

BOOL eqstr(STRÄNG, STRÄNG);

jämför om likhet mellan strängar

BOOL nestr(STRÄNG, STRÄNG);

jämför om olikhet mellan strängar

Dessa funktioner tillhandahåller stränghantering. I versionerna före 3.0.6 använde många av dem en metod för minneshantering som var vald för absolut minimal minnesanvändning. En funktion som använder denna metod konstruerade sin utmatningssträng i sin egen strängbuffert, och återanvände denna buffert varje gång den anropades. När ett funktion som använde denna metod returnerade ett strängvärde returnerade det sin buffert. Som en konsekvens av detta måste de strängar som returnerades av dessa funktioner antingen användas eller sparas innan funktionen anropades igen.

Lower och upper konverterar bokstäverna i sina argument till gemener respektive versaler. Capitalize konverterar den första bokstaven i argumentet, om det är en bokstav, till en versal. Lower och upper använde historiskt buffertreturneringsmetoden; capitalize opererar på och returnerar sitt argument. Titlecase konverterar den första bokstaven på varje ord, om det är en bokstav, till versaler, och alla andra bokstäver till gemener.

Trim kortar av en sträng till den längd som specificerats i den andra parametern. Om strängen redan har den längden eller kortare så ändras inte strängen. Rjustify högerjusterar en sträng till en annan sträng av den längd som specificerats i den andra parametern. Om den ursprungliga strängen är kortare än den högerjusterade strängen är kortare än den högerjusterade strängen, så sätts blanksteg in till vänster om den ursprungliga strängen; om strängen är längre än den justerade strängen, så kapas strängen på högra sidan. Trim använde historiskt buffertreturneringsmetoden; rjustify skapar och returnerar en ny sträng.

Concat och strconcat slår samman strängar och returnerar resultatet. De är identiska funktioner. De får ta från två till 32 strängargument; nollargument är tillåtna. Argumenten slås samman till en enda, nyskapad sträng, som returneras.

Strlen returnerar längden av strängargumentet.

Substring returnerar en delsträng av strängen i det första argumentet. De andra och tredje argumenten är positionerna för de första och sista tecknen i argumentsträngen som ska användas för att skapa delsträngen. Positionerna räknas från ett. Substring använde historiskt buffertreturneringsmetoden.

Index returnerar teckenpositionen för det n-te uppträdandet av en delsträng i en sträng. Positionen är räknad från ett från början av delsträngen. Det första argumentet är strängen; det andra argumentet är delsträngen; och det tredje argumentet är numret för den gång i ordningen som delsträngen uppträder.

D, card, ord, alpha och roman konverterar heltal till strängar. D konverterar ett heltal till en numerisk sträng; card konverterar ett heltal till en grundtalssträng (t. ex. en, två, tre); ord konverterar ett heltal till ett ordningstal (t. ex. första, andra, tredje); alpha konverterar ett heltal till en bokstav (t. ex. a, b, c); och roman konverterar ett heltal till en romersk siffra (tex., i, ii, iii).

Funktionen f konverterar ett flyttal till en sträng. Det andra argumentet (inte obligatoriskt) anger precisionen för utdata. Den förinställda precisionen är 2.

Strsoundex konverterar en godtycklig sträng till ett SOUNDEX-värde. Tecken som inte ingår i teckenkodningen ASCII hoppas över.

Strtoint konverterar en numerisk sträng till ett heltal. Atoi är identisk med strtoint.

Strcmp jämför två strängar och returnerar ett heltal som är mindre än noll, lika med noll, eller större än noll, om den första strängen är lexikografiskt mindre än, respektive lika med, eller större än den andra strängen. Eqstr och nestr returnerar huruvida två strängar är lika respektive olika. Strcmp, eqstr och nestr behandlar alla tre nollsträngar som tomma strängar, det vill säga att de låtsas att en nollsträng faktiskt är "". Detta betyder att alla nollsträngar och tomma strängar kommer att räknas som lika.


Funktioner för utmatningsläge

TOM linemode(void);

använd radutmatningsläge

TOM pagemode(HELTAL, HELTAL);

använd sidutmatningsläge med angiven sidstorlek

TOM col(HELTAL);

positionera till kolumn i utmatning

HELTAL getcol(void);

hämta aktuell position på aktuell rad i utmatning

TOM row(HELTAL);

positionera till rad i utmatning

TOM pos(HELTAL, HELTAL);

positionera till (rad, kol)-koordinat i utmatning

TOM pageout(void);

mata ut sidbuffert

STRÄNG nl(void);

nyradstecken

STRÄNG sp(void);

blankstegstecken

STRÄNG qt(void);

citationstecken

TOM newfile(STRÄNG, BOOL);

skicka programutmatning till denna fil

STRÄNG outfile(void);

returnera namnet på aktuell programutmatningsfil

TOM copyfile(STRÄNG);

kopiera filinnehållet till programutmatningsfilen

TOM print(STRÄNG, STRÄNG ...);

skriv ut sträng till standardutmatningsfönstret

Rapporter kan genereras i två lägen, radläge och sidläge. Linemode väljer radläge och pagemode väljer sidläge; radläge är det förvalda. Den första parametern till pagemode är antal rader per sida; den andra parametern är antal tecken för radlängd. I radläget skrivs rapportutdata direkt till utmatningsfilen medan programmet körs, rad för rad. I sidläget buffras utdata till sidor som skrivs till utmatningsfilen när pageout anropas. Sidläget är användbart för att generera tex. an- eller stamtavelträd, eller tabeller med rutor, där det är praktiskt att kunna beräkna den två-dimensionella positionen för utdata.

Col positionerar utdata till den angivna positionen på en rad. Om den angivna positionen är större än argumentet, så positionerar col utdata på den angivna positionen på nästa rad. Col fungerar i båda lägena. Getcol returnerar aktuell position på aktuell rad i utmatningen.

Row positionerar utdata vid det första tecknet i den angivna raden; row kan bara användas i sidläget.

Pos positionerar utdata till en angiven rad- och radpositionskoordinat; det första argumentet anger vilken rad, och den andra anger vilken position på rad. Pos kan bara användas i sidläget.

Nl skriver ut ett nyradstecken till utmatningsfilen; sp skriver ut ett blanksteg till utmatningsfilen; och qt skriver ut ett citationstecken till utmatningsfilen. Lägg märke till att \n och \" kan användas inom strängvärden för att representera radmatningar respektive citationstecken.

Newfile anger namnet på utmatningsfilen för rapporten. Dess första argument är filens namn; dess andra argument är en flagga för inläggning i filen - om dess värde är icke-noll så läggs rapporttexten till i filen; om dess värde är noll så skrivs innehållet i filen över. Newfile kan anropas många gånger; detta gör det möjligt att låta ett enda rapportprogram generera många filer med utdata från rapporten under en körning. Det är inte obligatoriskt för program att använda newfile; om den inte används så ber LifeLines automatiskt om ett namn för utmatningsfilen från rapporten.

Outfile returnerar namnet på den aktuella utmatningsfilen från rapporten.

Copyfile kopierar innehållet i en fil till utmatningsfilen för rapporten; dess argument är en sträng vars värde är namnet på en fil; om filnamnet inte är angivet med vare sig absolut eller relativ sökväg, så används miljövariabeln LLPROGRAMS, om den är inställd, för att söka efter filen; filen öppnas och dess innehåll kopieras till utmatningsfilen för rapporten.

Print skriver ut sin argumentsträng till standardutmatningsfönstret; print kan ha från ett till 32 argument.


Funktioner för personuppsättningar och GEDCOM-extrahering

TOM indiset(SET_V);

deklarera en uppsättningsvariabel

SET addtoset(SET, INDI, VALFRI);

lägg till en person till en uppsättning

SET deletefromset(SET, INDI, BOOL);

ta bort en person från en uppsättning

HELTAL lengthset(SET);

storlek på en uppsättning

SET union(SET, SET);

union av två uppsättningar

SET intersect(SET, SET);

skärningspunkter mellan två uppsättningar

SET difference(SET, SET);

skillnad mellan två uppsättningar

SET parentset(SET);

uppsättning med alla föräldrar

SET childset(SET);

uppsättning med alla barn

SET spouseset(SET);

uppsättning med alla makar

SET siblingset(SET);

uppsättning med alla syskon

SET ancestorset(SET);

uppsättning med alla anor

SET descendentset(SET);

uppsättning av alla ättlingar

SET descendantset(SET);

samma som descendentset; stavning

SET uniqueset(SET);

ta bort dubbletter från uppsättning

TOM namesort(SET);

sortera indiset efter namn

TOM keysort(SET);

sortera indiset efter nyckelvärden

TOM valuesort(SET);

sortera indiset efter hjälpvärden

TOM genindiset(STRÄNGSET);

skapa indiset från namnsträng i GEDCOM-form

BOOL inset(SET, INDI);

Sant om personen finns i uppsättningen.

forindiset (SET, INDI_V, VALFRI_V, HELTAL_V) { kommandon }

loopa igenom alla personer i uppsättning med personer

Dessa funktioner låter dig manipulera uppsättningar med personer. En uppsättning med personer är potentiellt ett stort antal personer; varje person kan ha ett godtyckligt värde associerat med sig. En uppsättning med personer måste deklareras med funktionen indiset innan den kan användas.

Addtoset lägger till en person till en uppsättning. Det första argumentet är uppsättningen; det andra argumentet är personen; och det tredje argumentet kan vara vilket värde som helst. Samma person kan läggas till i en uppsättning mer än en gång, med olika värden varje gång. Deletefromset tar bort en person från en personuppsättning. Det första argumentet är uppsättningen; det andra argumentet är personen; om den tredje parametern är sann, tas personen bort från uppsättningen på alla ställen där han/hon finns med; om den är falsk så tas han/hon bara bort på det första stället som han/hon finns med. Lengthset returnerar antalet personer i en personuppsättning.

Union, intersect och difference returnerar uppsättningarna med unionerna respektive skärningarna och skillnaderna mellan två personuppsättningar. Var och en av funktionerna tar två personuppsättningar som argument, och returnerar en tredje personuppsättning. Funktionerna modifierar faktiskt sina argumentuppsättningar, genom att ordna om den i nyckelordning och ta bort alla dubletter (dessa operationer är nödvändiga för att enkelt kunna implementera dessa typer av uppsättningsfunktioner).

Parentset, childset, spouseset och siblingset returnerar uppsättningen med alla föräldrar, respektive alla barn, alla makar och alla syskon, till uppsättningen av personer i sina argument. I inget av fallen sker någon förändring av personuppsättningen i argumentet.

Ancestorset returnerar uppsättningen med alla anor till alla personer i personuppsättningen i argumentet. Descendentset returnerar uppsättningen med alla ättlingar till alla personer i personuppsättningen i argumentet. Descendantset är samma som descendentset; det tillåter en alternativ stavning.

Uniqueset sorterar en personuppsättning efter nyckelvärde och tar sedan bort alla poster där nycklarna är dubblerade; den ursprungliga uppsättningen modifieras och returneras.

Namesort, keysort och valuesort sorterar en personuppsättning efter namn respektive efter nyckel och efter associerat värde.

Varje person i en personuppsättning har ett associerat värde. När en person läggs till till en personuppsättning med addtoset, så tilldelas värdet explicit. När nya uppsättningar skapas av andra funktioner, så används ett antal regler för att associera värden med personer allt eftersom de läggs till i de nya uppsättningarna. För parentset, childset och spouseset kopieras värdena från den första personen i en första uppsättning som får den nya personen att läggas till i uppsättningen. För union, intersect och difference kopieras värdena från värdena i den första uppsättningen, utom för union, där personerna tas enbart från den andra uppsättningen, och där värdena kommer därifrån. För ancestorset och descendantset sätts värdet till det antal generationer bort som den nya personen är från den första personen i den första uppsättningen som den nya personen är släkt med. Om den nya personen är släkt med mer än en person i den första uppsättningen, sätts värdet till det närmaste släktskapet; d. v. s. värdet blir så lågt som möjligt. Valuesort sorterar en personuppsättning efter värdet på dessa hjälpvärden.

Genindiset genererar den personuppsättning som matchar en sträng vars värde är ett namn i GEDCOM-format. Genindiset använder samma algoritm som matchar namn som skrivits in vid bläddringsprompten eller av funktionen för användarinteraktion getindiset.

Inset returnerar sant om den angivna personen finns i uppsättningen.

Forindiset är en iterator som loopar igenom varje person i en personuppsättning. Den första parametern är en personuppsättning. Den andra parametern är en variabel som itererar genom varje person i uppsättningen. Den tredje parametern itererar genom de värden som är associerade med personerna. Den fjärde parametern är en heltalsvariabel som räknar itereringarna.


Funktioner för postuppdatering

NOD createnode(STRÄNG, STRÄNG);

skapa en GEDCOM-nod

TOM addnode(NOD, NOD, NOD);

lägg till en nod till ett GEDCOM-träd

TOM detachnode(NOD);

ta bort en nod från ett GEDCOM-träd

TOM writeindi(INDI);

skriv en person tillbaka till databasen

TOM writefam(FAM);

skriv en familj tillbaka till databasen

Dessa funktioner låter dig modifiera ett internt GEDCOM-nodträd.

Createnode skapar en GEDCOM-nod; de två argumenten är etikett- respektive värdesträngar; värdesträngen kan vara noll. Addnode lägger till en nod till ett nodträd. Det första argumentet är den nya noden; den andra är den nod i trädet som blir förälder till den nya noden; den tredje är den nod i trädet som blir föregående syskon till den nya noden; detta argument är noll om den nya noden ska bli första barn till föräldern. Deletenode tar bort en nod från ett nodträd. Writeindi skriver en person tillbaka till databasen, och writefam skriver en familjepost tillbaka till databasen, vilket möjliggör för rapporten att göra permanenta ändringar i databasen.

Nodfunktionerna ändrar endast data i minnet; det har ingen effekt på databasen förrän och endast om writeindi eller writefam anropas. Dessa funktioner kan komma att ändras eller utökas i framtiden för att tillåta att ändringar görs i databasen.


Länkningsfunktioner för poster

BOOL reference(STRÄNG);

avgör om en sträng är en korsreferens

NOD dereference(STRÄNG);

referera korsreferens eller nyckel till nodträd

NOD getrecord(STRÄNG);

samma som dereference

Dessa funktioner möjliggör för dig att känna igen värden som är korsreferenser och att läsa de poster som de hänvisar till. Reference returnerar sant om dess strängargument är ett korsreferensvärde, d. v. s. det interna nyckelvärdet för en av posterna i databasen. Dereference returnerar nodträdet för posten som hänvisas till av dess strängargument för korsreferensen. Getrecord är en synonym för dereference.


Diverse funktioner

TOM lock(INDI|FAM);

lås en person eller familj i minnet

TOM unlock(INDI|FAM);

lås upp en person eller familj från minnet

STRÄNG database(void);

returnera namnet på den aktuella databasen

STRÄNG program(void);

returnera namnet på det aktuella programmet

STRÄNG version(void);

returnera version av LifeLines

TOM system(STRÄNG);

exekvera sträng som ett skalkommando i UNIX

HELTAL heapused(void);

storlek på "heap" använd för windows

STRÄNG getproperty(STRÄNG);

extrahera system- eller användaregenskaper. Funktion tillgänglig efter v3.0.5.

STRÄNG setlocale(STRÄNG);

ställ in lokal

STRÄNG bytecode(STRÄNG, STRÄNG);

koda en sträng i en teckenkodning

STRÄNG convertcode(STRÄNG, STRÄNG, STRÄNG);

konvertera sträng från en teckenkodning till en annan

TOM debug(BOOL);

ställ in avbuggningsläge för tolk

STRÄNG pvalue(VALFRI);

visa information om en pvalue

TOM free(VALFRI);

fritt utrymme associerat med en variabel

Lock och unlock används för att låsa en person eller family i RAM-minnet, respektive för att låsa upp en person eller familj från RAM-minnet.

Database returnerar namnet på den aktuella databasen; användbart för rubriksättning av rapporter. Version returnerar vilken version av LifeLines som körs, t. ex. 3.0.36.

System exekverar sitt strängargument som ett skalkommando i UNIX (eller MS-Windows, om så är aktuellt), genom att invokera systemskalet. Detta händer inte om användaren har valt att inte tillåta systemanrop från rapporter (via användarinställningen DenySystemCalls).

Funktionen heapused returnerar storleken på system-"heap" vid användning vid aktuell tidpunkt. Detta är endast implementerat i windows.

Funktionen getproperty extraherar system- eller användaregenskaper. Egenskaperna benämns grupp.undergrupp.egenskap eller grupp.egenskap eller till och med enbart egenskap. De nycklar som finns tillgängliga för närvarande återfinns i ll-userguide under system- och användaregenskaper.

Funktionen setlocale ställer in lokalen och returnerar den tidigare inställningen för lokalen.

Funktionen bytecode konverterar den givna strängen med kontrollkoder för den aktuella kodningen, eller för kodningen som angivits i den andra parametern (ej obligatorisk), om angiven. En kontrollkod är ett dollartecken ($) följt av två hex-tecken, t. ex. $C1.

Funktionen convertcode konverterar en sträng till en annan kodning. I tvåargumentsformen är det andra argumentet målkodningen, och källkodningen är den interna kodningen. I treargumentsformen är det andra argumentet källkodningen och det tredje argument målkodningen.

Funktionen debug slår på eller stänger av programmfelsökning. När påslaget, så skrivs klumpar av information ut allteftersom ett LifeLinesprogram körs. Detta kan vara användbart för att komma på varför ett program inte uppträder som förväntat.

Funktionen pvalue returnerar en sträng som representerar innehållet i en variabel i tolken. Detta finns tillgängligt för felsökningssyften.

Funktionen free avallokerar utrymme associerat med variabeln som angivits i argument 1. Försiktighet krävs när free används i en funktion på en variabel som är en parameter till funktionen. Free påverkar inte variabeln i det anropande programmet.


Föråldrade funktioner

Funktionaliteten i de följande tre funktionerna, getindimsg, getintmsg och getstrmsg finns nu tillgänglig genom att använda den valbara parametern i getindi, getint och getstr. Dessa funktioner bör inte längre användas, eftersom de kommer att tas bort från en framtida version av Lifelines.

TOM getindimsg(INDI_V, STRÄNG);

identifiera person genom användargränssnitt

TOM getintmsg(HELTAL_V, STRÄNG);

hämta heltal genom användargränssnitt

TOM getstrmsg(STRÄNG_V, STRÄNG);

hämta sträng genom användargränssnitt

Tre funktioner finns tillgängliga för att generera utdata i GEDCOM-format till rapportutmatningsfilen över alla personer i personuppsättningen i argumentet. Dessa funktioner genererar i de flesta fall inte konsistent och användbar utdata. Detta kan göras med ett program, men antagligen är dessa rutiner inte vad du egentligen ville ha.

Utdata från gengedcom innehåller en personpost för varje person i uppsättningen, och alla familjeposter som länkar samman minst två personer i uppsättningen. Denna funktion tillhandahålls för bakåtkompatibilitet. Länkar till käll-, händelse- och övriga (X) poster utmatas oförändrade, men inga av deras poster utmatas - detta ger inkonsistent utdata.

Utdata från gengedcomweak innehåller inte länkar till käll-, händelse- eller övriga (X) poster, eller deras poster. Gengedcomstrong inkluderar länkar till käll-, händelse- och övriga (X) poster och alla toppnivånoder som hänvisas till av dem.

TOM gengedcom(SET);

generera GEDCOM-fil från personuppsättning

TOM gengedcomweak(SET);

generera GEDCOM-fil från personuppsättning

TOM gengedcomstrong(SET);

generera GEDCOM-fil från personuppsättning

Från och med version 3.0.6 är alla strängvärden lokala kopior, och därmed bör inte funktionerna save och strsave längre behöva användas. Save finns tillgänglig endast av kompatibilitetsskäl. Tidigare duplicerade det sitt argument (för att förhindra strängar från att bli gamla; det är inte längre nödvändigt (och denna funktion gör inte längre någonting)). Strsave är samma funktion som save.

STRÄNG save(STRÄNG);

spara och returnera kopia av sträng

STRÄNG strsave(STRÄNG);

samma som funktionen save

Använd detachnode istället för deletenode.

TOM deletenode(NOD);

ta bort en nod från ett GEDCOM-träd

lifelines-3.0.61/docs/ll-reportmanual.txt0000700002540200244210000026335410656417420020572 0ustar prappDomain Users THE LIFELINES PROGRAMMING SUBSYSTEM AND REPORT GENERATOR LifeLines Version 3.0.61 Thomas T. Wetmore , IV _____________________________________________________________ Table of Contents Report Programming Manual Introduction Tutorial Ahnentafel report Template for creating new reports Invoking Reports LIFELINES PROGRAMMING REFERENCE Procedures and Functions Comments Statements Expressions Include Feature Built-in Functions Value Types Iterators Arithmetic and Logic Functions Trigonometric and Spherical Calculations Person Functions Family Functions Other types of records List Functions Table Functions GEDCOM Node Functions Event and Date Functions Date Arithmetic Value Extraction Functions User Interaction Functions String Functions Output Mode Functions Person Set Functions and GEDCOM Extraction Record Update Functions Record Linking Functions Miscellaneous Functions Deprecated Functions _____________________________________________________________ Report Programming Manual Introduction The LifeLines programming subsystem lets you produce reports in any style or layout. You may generate files in troff, Postscript, TeX, SGML or any other ASCII-based format, for further text processing and printing. You access the report generator by choosing the r command from the main menu. You may also use the programming subsystem to create query and other processing programs that write their results directly upon the screen. For example, there is a LifeLines program that computes the relationship between any two persons in a database. Each LifeLines program is written in the LifeLines programming language, and the programs are stored in normal files. When you direct LifeLines to run a program, it asks you for the name of the program file, asks you where you want the program's output written, and then runs the program. _____________________________________________________________ Tutorial Ahnentafel report For example, say you want LifeLines to generate an ahnentafel (ancestor) report for Tom Wetmore. Such a report would show Tom Wetmore, his parents, grandparents, great-grandparents, and so on. It would like like the following: Example 1. Example of ahnentafel report 1. Thomas Trask WETMORE IV b. 18 December 1949, New London, Connecticut 2. Thomas Trask WETMORE III b. 15 October 1925, New London, Connecticut 3. Joan Marie HANCOCK b. 6 June 1928, New London, Connecticut 4. Thomas Trask WETMORE Jr b. 5 May 1896, New London, Connecticut d. 8 November 1970, New London, Connecticut 5. Vivian Genevieve BROWN b. 5 April 1896, Mondovi, Wisconsin 6. Richard James HANCOCK b. 18 August 1904, New London, Connecticut d. 24 December 1976, Waterford, Connecticut 7. Muriel Armstrong SMITH b. 28 October 1905, New Haven, Connecticut 8. Thomas Trask WETMORE Sr b. 13 March 1866, St. Mary's Bay, Nova Scotia d. 17 February 1947, New London, Connecticut 9. Margaret Ellen KANEEN b. 27 October 1859, Liverpool, England d. 10 May 1900, New London, Connecticut ... lots more Here is a LifeLines program that generates this report: Example 2. Example of ahnentafel report script /* * @progname ahnentafel_tutorial.ll * @version 1.0 * @author Wetmore * @category sample * @output text * @description * * Generate an ahnentafel chart for the selected person (tutorial sample). */ proc main () { getindi(indi) list(ilist) list(alist) enqueue(ilist, indi) /* list of people needing to be displayed */ enqueue(alist, 1) /* ancestor numbers for people on ilist */ /* Our basic loop is we take the next person who needs to be displayed , display them, and then record their parents as needing to be displa yed. */ while (indi, dequeue(ilist)) { /* display person we just pulled off list */ set(ahnen, dequeue(alist)) d(ahnen) ". " name(indi) nl() if (e, birth(indi)) { " b. " long(e) nl() } if (e, death(indi)) { " d. " long(e) nl() } /* add person's parents to list to display */ if (par, father(indi)) { enqueue(ilist, par) enqueue(alist, mul(2,ahnen)) } if (par,mother(indi)) { enqueue(ilist, par) enqueue(alist, add(1,mul(2,ahnen))) } } } Say this program is in the file ahnentafel_tutorial. When you choose the r option from the main menu, LifeLines asks: What is the name of the report program? enter string: You enter ahnentafel_tutorial. Since the program generates a report, LifeLines asks where to write that report: What is the name of the output file? enter file name: You enter a file name, say my.ahnen. LifeLines reads the program ahnen, executes the program, and writes the report output to my.ahnen. LifeLines reports any syntax or run-time errors found while trying to run the program. A LifeLines program is made up of procedures and functions; every program must contain at least one procedure named main. The main procedure runs first; it may call other procedures, functions and built-in functions. In the ahnentafel example there is only one procedure. In the example program, there are some comments at the top, to tell the reader a bit about the program. The comments run from /* to */, and are not necessary (but are suggested). A procedure body is a sequence of statements. In the example program, the first five statements are: getindi(indi) list(ilist) list(alist) enqueue(ilist, indi) enqueue(alist, 1) The first statement calls the getindi (get individual) built-in function, which causes LifeLines to ask you to identify a person using the zip browse style of identification: Identify person for interpreted report enter name: After you identify a person, he or she is assigned to the variable indi. The next two statements declare two list variables, ilist and alist. Lists hold sequences of things; there are operations for placing things on lists, taking things off, and iterating through the list elements. In the example, ilist holds a list of ancestors, in ahnentafel order, who have not yet been reported on, and alist holds their respective ahnentafel numbers. The next two statements call the enqueue function, adding the first members to both lists. The person identified by the getindi function is made the first member of ilist, and the number one, this person's ahnentafel number, is made the first member of alist. The rest of the program is: while (indi, dequeue(ilist)) { set(ahnen, dequeue(alist)) d(ahnen) ". " name(indi) nl() if (e, birth(indi)) { " b. " long(e) nl() } if (e, death(indi)) { " d. " long(e) nl() } if (par, father(indi)) { enqueue(ilist, par) enqueue(alist, mul(2,ahnen)) } if (par, mother(indi)) { enqueue(ilist, par) enqueue(alist, add(1,mul(2,ahnen))) } } This is a loop that iteratively removes persons and their ahnentafel numbers from the two lists, and then prints their names and birth and death information. If the persons have parents in the database, their parents and their parents' ahnentafel numbers are then put at the ends of the lists. The loop iterates until the list is empty. The loop is a while loop statement. The line: while (indi, dequeue(ilist)) { removes (via dequeue) a person from ilist, and assigns the person to variable indi. As long as there are persons on ilist, another iteration of the loop follows. The statement: set(ahnen, dequeue(alist)) is an assignment statement. The second argument is evaluated; its value is assigned to the first argument, which must be a variable. Here the next number in alist is removed and assigned to variable ahnen. This is the ahnentafel number of the person just removed from ilist. The line: d(ahnen) ". " name(indi) nl() contains four expression statements; when expressions are used as statements, their values, if any, are treated as strings and written directly to the report output file. The d function converts its integer argument to a numeric string. The ". " is a literal (constant) string value. The name function returns the default form of a person's name. The nl function returns a string containing the newline character. The next two lines: if (e, birth(indi)) { " b. " long(e) nl() } if (e, death(indi)) { " d. " long(e) nl() } write out basic birth and death information about a person. These lines are if statements. The second argument in the conditional is evaluated and assigned to the first argument, which must be a variable. The first if statement calls the birth function, returning the first birth event in a person's record. If the event exists it is assigned to variable e, and the body (the items between the curly brackets) of the if statement is executed. The body consists of three expression statements: a literal, and calls to the long and nl functions. Long takes an event and returns the values of the first DATE and PLAC lines in the event. Finally in the program is: if (par, father(indi)) { enqueue(ilist,par) enqueue(alist,mul(2,ahnen)) } if (par,mother(indi)) { enqueue(ilist,par) enqueue(alist,add(1,mul(2,ahnen))) } These lines add the father and mother of the current person, if either or both are in the database, to ilist. They also compute and add the parents' ahnentafel numbers to alist. A father's ahnentafel number is twice that of his child. A mother's ahnentafel number is twice that of her child plus one. These values are computed with the mul and add functions. _____________________________________________________________ Template for creating new reports The following is a good template to use when creating a new report from scratch. /* * @progname reportname * @version Version Number. * @author report author and possible email address * @category ???? * @output Format of Report Output * @description The following paragraph is used to populate index.html. * * This report .... (Note, the text in the 1st paragraph following the @key word * lines is used as a description in the automatically generated index.html * file. The text following the @description is not used for this purpose.) * The description lines can be written with or without the *'s on the left * they will be removed when generating index.html. * * Additional descriptive text */ proc main() { } _____________________________________________________________ Invoking Reports As mentioned earlier, reports may be invoked interactively from the main menu via the r option from the main menu. Alternatively, llines may be called with the -x option to have it immediately run a report. For example, to have lifelines run the example ahnentafel report above, on a database named wetmore, this command llines -x ahnentafel_tutorial wetmore would be used. For more efficient operation from scripts, the lifelines distribution includes a smaller program llexec which includes all functionality of lifelines except the curses GUI. llexec is made specifically, therefore, for invocations such as llexec -x ahnentafel_tutorial wetmore _____________________________________________________________ LIFELINES PROGRAMMING REFERENCE LifeLines programs are stored in files you edit with a screen editor. Programs are not edited from within the LifeLines program; edit them as you would any text file. The programs may be stored in any directories; they do not have to be kept in or associated with LifeLines databases. You may set the LLPROGRAMS shell variable to hold a list of directories that LifeLines will use to automatically search for programs when you request program execution. _____________________________________________________________ Procedures and Functions A LifeLines program is made up of one or more procedures and functions. A procedure has format: proc name(params) { statements } Name is the name of the procedure, params is an optional list of parameters separated by commas, and statements is a list of statements that make up the procedure body. Report generation begins with the first statement in the procedure named main. Procedures may call other procedures and functions. Procedures are called with the call statement described below.When a procedure is called, the statements making up its body are executed. A function has format: func name(params) { statements } Name, params and statements are defined as in procedures. Functions may call other procedures and functions. When a function is called the statements that make it up are executed. A function differs from a procedure by returning a value to the procedure or function that calls it. Values are returned by the return statement, described below. Recursive functions are allowed. A function is called by invoking it in an expression. Function and procedure parameters are passed by value except for list, set and table types which are passed by reference. Redeclaration of a parameter instantiates a new variable of the stated or implied type. The previous instance continues to exist in the scope of the caller. _____________________________________________________________ Comments You may comment your LifeLines programs using the following notation: /*...comment text including any characters except */... */ These comments may be inserted anywhere in the program file. You should put in some report header comments, because they will provide useful text for your report when it is included in the report list seen by the user who uses the lifelines pick report menu function. Report header comments are some specific comments at the top of the report, with keywords preceded by @ signs. The following is an illustration of report header comments, with explanations inside them: /* * @progname The name of the report without the extension. This shows in the pick report option. * @version Version Number of the report. This is stored here and not in the report name. * @author Name of the author of this report and email address if he/she desires. * @category ???? * @output Modifies Database | text | HTML | GEDCOM | RTF | XML | PostScript | etc. * @description The first paragraph after this is used to generate the description in the index.html. This report .... */ Comments begin with a /* and end with a */. Comments may appear on lines of their own or on lines that have program constructs. Comments may span many lines. Comments may not be nested. _____________________________________________________________ Statements There are a number of statement types. The simplest is an expression statement, an expression that is not part of any other statement or expression. Expressions are defined more fully below. An expression statement is evaluated, and if its value is non-null (non-zero), it is assumed to be a string, and written to the program output file. If its value is null, nothing is written to the output file. For example, the expression name(indi) , where indi is a person, returns the person's name and writes it to the output file. On the other hand, the expression set(n, nspouses(indi)) assigns the variable n the number of spouses that person indi has, but since set returns null, nothing is written to the output file. The programming language includes if statements, while statements and procedure call statements, with the following formats: if ([varb,] expr) { statements } [ elsif ([varb], expr) { statements } ]* [ else { statements } ] while ([varb,] expr ) { statements } call name(args) Square brackets indicate optional parts of the statement syntax. An if statement is executed by first evaluating the conditional expression in the if clause. If non-zero, the statements in the if clause are evaluated, and the rest of the if statement, if any, is ignored. If the value is zero, and there is an elsif clause following, the conditional in the elsif clause is evaluated, and if non-zero, the statements in that clause are executed. Conditionals are evaluated until one of them is non-zero, or until there are no more. If no conditional is non-zero, and if the if statement ends with an else clause, the statements in the else clause are executed. There are two forms of conditional expressions. If the conditional is a single expression, it is simply evaluated. If the conditional is a variable followed by an expression, the expression is evaluated and its value is assigned to the variable. Note that if treats null strings as false, but empty strings as true. This has the benefit that if (birth(indi)) will return true if there is a BIRT record, even if it is empty, but will return false if there is no BIRT record at all. The while statement provides a looping mechanism. The conditional is evaluated, and if non-zero, the body of the loop is executed. After each iteration the expression is reevaluated; as long as it remains non-zero, the loop is repeated. The call statement provides procedure calls. Name must match one of the procedures defined in the report program. Args is a list of argument expressions separated by commas. Recursion is allowed. When a call is executed, the values of its arguments are evaluated and used to initialize the procedure's parameters. The procedure is then executed. When the procedure completes, execution resumes with the first item after the call. The following report language statements are commonly encountered only near the top of a report: char_encoding(string) require(string) option(string) include(string) global(varb) The char_encoding statement specifies what character encoding scheme is used by the report, so that the report processor can correctly interpret bytes not in ASCII (e.g., accented letters). An example specifying a character encoding common in Western Europe: char_encoding("ISO-8859-1") The option statement allows the report writer to specify options. The only option currently available is "explicitvars", which causes any use of variables not previously declared or set to be reported as a parsing error. The require statement allows the report writer to specify that this report needs a version of the report interpreter no older than that specified. The include statement includes the contents of another file into the current file; its string expression is the name of another LifeLines program file. It is described in more detail below. The global statement must be used outside the scope of any procedure or function; it declares a variable to have global scope. The variable is initialized to 0. The report language also includes the following statements, which mimic some common programming languages: set(varb, expr) continue() break() return([expr]) The set statement is the assignment statement; the expression is evaluated, and its value is assigned to the variable. The continue statement jumps to the bottom of the current loop, but does not leave the loop. The break statement breaks out of the most closely nested loop. The return statement returns from the current procedure or function. Procedures have return statements without expressions; functions have return statements with expressions. None of these statements return a value, so none has a direct effect on program output. _____________________________________________________________ Expressions There are four types of expressions: literals, numbers, variables and built-in or user defined function calls. A literal is any string enclosed in double quotes; its value is itself. A number is any integer or floating point constant; its value is itself. A variable is a named location that can be assigned different values during program execution. The value of a variable is the last value assigned to it. Variables do not have fixed type; at different times in a program, the same variable may be assigned data of completely different types. An identifier followed by comma-separated list of expressions enclosed in parentheses, is either a call to a built-in function or a call to a user-defined function. _____________________________________________________________ Include Feature The LifeLines programming language provides an include feature. Using this feature one LifeLines program can refer to other LifeLines programs. This feature is provided by the include statement: include(string) where string is a quoted string that is the name of another LifeLines program file. When an include statement is encountered, the program that it refers to is read at that point, exactly as if the contents of included file had been in the body of the original file at that point. This allows you to create LifeLines program library files that can be used by many programs. Included files may in turn contain include statements, and so on to any depth. LifeLines will use the LLPROGRAMS shell variable, if set, to search for the include files. Each file included with a include statement is only read once. If multiple include statements are encountered that include the same file, only the first statement has any effect. The only main procedure actually executed is the one in the report the user chose. main procedures in other reports which are included do not get run. This allows a module intended to be included in other programs to have a main procedure for test purposes. If multiple functions or procedures with the same name are included (other than the name main) a runtime error is generated and the program is not run. _____________________________________________________________ Built-in Functions There is a long list of built-in functions, and this list will continue to grow for some time. The first subsection below describes the value types used in LifeLines programs; these are the types of variables, function parameters and function return values. In the remaining sections the built-in functions are separated into logical categories and described. _____________________________________________________________ Value Types ANY union of all types BOOL boolean (0 represents false; anything else represents true) EVENT event; reference to substructure of nodes in a GEDCOM record (reference) FAM family; reference to a GEDCOM FAM record (reference) FLOAT floating point number (may be used anywhere an INT may be used) INDI person; reference to a GEDCOM INDI record (reference) INT integer (on most systems a 32-bit signed value) LIST arbitrary length list of any values (reference) NODE GEDCOM node; reference to a line in a GEDCOM tree/record (reference) NUMBER union of all arithmetic types (INT and FLOAT) SET a collection of persons each with a value (see person sets below). STRING text string TABLE keyed look-up table (reference) VOID type with no values In the summaries of built-in functions below, each function is shown with its argument types and its return type. The types are from the preceding list. Sometimes an argument to a built-in function must be a variable; when this is so its type is given as XXX_V, where XXX is one of the types above. The built-ins do not check the types of their arguments. Variables can hold values of any type, though at any one time they will hold values of only one type. Note that EVENT is a subtype of NODE, and BOOL is a subtype of INT. Built-ins with type VOID actually return null (zero) values. Reference types (denoted above in parentheses) obey "pointer semantics", which is to say that assigning one to another variable results in both variables pointing at the same data (no copy is made). Therefore, if you pass a string to a function which changes the string, the caller does not see the change, because a string is not a reference type. On the other hand, if you pass a table to a function which alters the table, the caller does see the change, because a table is a reference type. _____________________________________________________________ Iterators The report generator provides a number of iterator statements for looping through genealogical and other types of data. For example, the children statement iterates through the children of a family, the spouses statement iterates through the spouses of a person, and the families statement iterates through the families that a person is a spouse or parent in. Usually the first argument to the iterator is an expression that evaluates to an individual or a family. The other arguments of the iterator are variable names that are set with values for each iteration. The last argument is often a variable name used as a counter. It starts with the value of one and is increased by one for each iteration of the loop. After completion of the iteration, these variables have the value null. children(afam,indi,cnt) { commands } For example, the first argument to children is the family that the iterator will operate on. This iterator will execute the block of commands for each child in the specified family. The second argument is set to each child in the family in the order they are listed in the family and the third argument is the loop counter which starts at one and is incremented by one each time the the block of commands is executed. The two variables indi and cnt will have the value null after the iteration has completed. For the purpose of traversing all records in the database, the following iterators may be used: forindi Iterate over all people forfam Iterate over all families forsour Iterate over all sources foreven Iterate over all events forothr Iterate over all other recoure types All the iterators are described in more detail later in the section where their definition occurs. _____________________________________________________________ Arithmetic and Logic Functions NUMBER add(NUMBER, NUMBER ...); addition - two to 32 arguments NUMBER sub(NUMBER, NUMBER); subtraction NUMBER mul(NUMBER, NUMBER ...); multiplication - two to 32 arguments NUMBER div(NUMBER, NUMBER); division INT mod(INT, INT); modulus (remainder) NUMBER exp(NUMBER, INT); exponentiation NUMBER neg(NUMBER); negation FLOAT float(INT); convert int to float INT int(FLOAT); convert float to int VOID incr(NUMBER,NUMBER); increment variable by second argument (or by 1 if no second argument) VOID decr(NUMBER,NUMBER); decrement variable by second argument (or by 1 if no second argument) BOOL and(BOOL, BOOL ...); logical and - two to 32 arguments BOOL or(BOOL, BOOL ...); logical or - two to 32 arguments BOOL not(BOOL); logical not BOOL eq(ANY, ANY); equality (not strings) BOOL ne(ANY, ANY); non-equality BOOL lt(ANY, ANY); less than BOOL gt(ANY, ANY ); greater than BOOL le(ANY, ANY); less than or equal BOOL ge(ANY, ANY); greater than or equal Add, sub, mul and div do normal arithmetic of integer or floating values. If any operand is float, the result is float. Functions add and mul can have two to 32 arguments; the sum or product of the full set of arguments is computed. Functions sub and div have two arguments each; sub subtracts its second argument from its first, and div divides its first argument by its second. The mod function returns the remainder after dividing the first parameter by the second. If the second argument to div or mod is zero, these functions return 0 and generate a run time error. Exp performs integer exponentiation. Neg negates its argument. The functions float and int can be used to explicitly convert a value to float or int where needed. Incr and decr increment by one and decrement by one, respectively, the value of a variable. The argument to both functions must be a variable. These functions take an optional second argument which is the amount to increment or decrement the variable by. And and or do logical operations. Both functions take two to 32 arguments. All arguments are and'ed or or'ed together, respectively. The arguments are evaluated from left to right, but only up to the point where the final value of the function becomes known. Not does the logical not operation. Eq, ne, lt, le, gt and ge evaluate the six ordering relationships between two integers. _____________________________________________________________ Trigonometric and Spherical Calculations FLOAT sin(FLOAT); compute sine of argument in degrees FLOAT cos(FLOAT); compute cosine of argument in degrees FLOAT tan(FLOAT); compute tangent of argument in degrees FLOAT arcsin(FLOAT); compute inverse sine of argument FLOAT arccos(FLOAT); compute inverse cosine of argument FLOAT arctan(FLOAT); compute inverse tangent of argument VOID dms2deg(INT degree, INT minute, INT second, FLOAT_V decimal); convert (degree, minute, second) to decimal degrees void deg2dms(FLOAT decimal, INT_V degree, INT_V minute, INT_V second); convert decimal degrees to (degree, minute, second) FLOAT spdist(FLOAT lat0, FLOAT long0, FLOAT lat1, FLOAT long1); compute distance between two locations The trigonometric functions specify angles using degrees. The functions deg2dms and dms2deg are provided to convert between (degree,minute,second) notation and decimal degree representations for angles. spdist estimates the distance between two spherical coordinates. The arguments provided are, in order, first latitude, first longitude, second latitude, second longitude. The result is in kilometers. _____________________________________________________________ Person Functions STRING name(INDI, BOOL); default name of STRING fullname(INDI, BOOL, BOOL, INT); many name forms of STRING surname(INDI); surname of STRING givens(INDI); given names of STRING trimname(INDI, INT); trimmed name of EVENT birth(INDI); first birth event of EVENT death(INDI); first death event of EVENT burial(INDI); first burial event of INDI father(INDI); first father of INDI mother(INDI); first mother of INDI nextsib(INDI); next (younger) sibling of INDI prevsib(INDI); previous (older) sibling of STRING sex(INDI); sex of BOOL male(INDI); male predicate BOOL female(INDI); female predicate STRING pn(INDI, INT); pronoun referring to INT nspouses(INDI); number of spouses of INT nfamilies(INDI); number of families (as spouse/parent) of FAM parents(INDI); first parents' family of STRING title(INDI); first title of STRING key(RECORD, BOOL); internal key of (works for any record type) STRING soundex(INDI); SOUNDEX code of NODE inode(INDI); root GEDCOM node of NODE root(INDI); root GEDCOM node of INDI indi(STRING); find person with key value INDI firstindi(void); first person in database in key order INDI lastindi(void); last person in database in key order INDI nextindi(INDI); next person in database in key order INDI previndi(INDI); previous person in database in key order spouses (INDI, INDI_V, FAM_V, INT_V) { commands } loop through all spouses of families (INDI, FAM_V, INDI_V, INT_V) { commands } loop through all families (as spouse) of forindi (INDI_V, INT_V) { commands } loop through all persons in database mothers (INDI, INDI_V, FAM_V, INT_V) { commands } loop through all female parents of a person fathers (INDI, INDI_V, FAM_V, INT_V) { commands } loop through all male parents of a person Parents (INDI, FAM, INT_V) { commands } loop through all familes a person is a child of These functions take a person as a parameter and return information about him or her. Name returns the default name of a person; this is the name found on the first 1 NAME line in the person's record; the slashes are removed and the surname is made all capitals; name can take an optional second parameter - if it is true the function acts as described above; if false, the surname is kept exactly as it is in the record. Fullname returns the name of a person in a variety of formats. If the second parameter is true the surname is shown in upper case; otherwise the surname is as in the record. If the third parameter is true the parts of the name are shown in the order as found in the record; otherwise the surname is given first, followed by a comma, followed by the other name parts. The fourth parameter specifies the maximum length field that can be used to show the name; various conversions occur if it is necessary to shorten the name to fit this length. Surname returns the surname of the person, as found in the first 1 NAME line; the slashes are removed. Givens returns the given names of the person in the same order and format as found in the first 1 NAME line of the record. Trimname returns the default name of the person trimmed to the maximum character length given in the second variable. Birth, death, and burial return the first birth, death, and burial event in the person's record, respectively. An event is a level 1 GEDCOM node. If there is no matching event these functions return null. Father, mother, nextsib and prevsib return the father, mother, next younger sibling and next older sibling of the person, respectively. If the person has more than one father (mother) the father (mother) function returns the first one. These functions return null if there is no person in the role. Sex returns the person's sex as the string M if the person is male, F if the person is female, or U if the sex of the person is not known. Male and female return true if the person is male or female, respectively, or false if not. Pn generates pronouns, useful when generating English text; the second parameter selects the type of pronoun: 0 He/She 1 he/she 2 His/Her 3 his/her 4 him/her Nspouses returns the number of spouses the person has in the database, and nfamilies returns the number of families the person is a parent/spouse in; these two values are not necessarily the same. Parents returns the first family that the person is a child in. Title returns the value of the first 1 TITL line in the record. Key returns the key value of a person (or any record); if there is a second parameter and it is non-null, the leading I (or F or S or E or X) will be stripped. For example, if key(curindi) returns I23, then key(curindi,1) returns 23. Soundex returns the Soundex code of the person. Root and Inode return the root node of the person's GEDCOM node tree. Note that an INDI value is not a NODE value. If you want to process the nodes within a person node tree, you must first use the root or inode function to get the root of the person node tree. Root and inode are synonyms. Indi returns the person whose key is passed as an argument; if no person has the key indi returns null. INDI keys are accepted either as Innn or @Innn@. Firstindi, nextindi and previndi allow you to iterate through all persons in the database. Firstindi returns the first person in the database in key order. Nextindi returns the next person after the argument person in key order. Previndi returns the previous person before the argument person in key order. Spouses is an iterator that loops through each spouse a person has. The first argument is a person. The second argument is a person variable that iterates through the first person's spouses. The third argument is a family variable that iterates through the families the person and each spouse are in. The fourth argument is an integer variable that counts the iterations. The spouses iterator skips any family that has no spouse, whereas the families iterator does not. Families is an iterator that loops through the families a person was a spouse/parent in. The first argument is a person. The second argument is a family variable that iterates through the families the first person was a spouse/parent in. The third argument iterates through the spouses from the families; if there is no spouse in a particular family, the variable is set to null for that iteration. The fourth argument is an integer variable that counts the iterations. Families and Spouses behave the same except for one situation. If the person is a spouse in a family that only has one spouse identified, that family does not show up with the spouses iterator, but it does show up with the families iterator. One caution, this situation causes the 3rd argument of the families iterator to be set to null. You must check for this. Forindi is an iterator that loops through every person in the database in ascending key order. Its first parameter is a variable that iterates through the persons; its second parameter is an integer counter variable that counts the persons starting at one. mothers is an iterator that loops through every female parent of the specified individual. Its first parameter is a person; its third parameter is a family variable that iterates through the familes that the person is a child in; its second parameter is a person variable that is the female parent associated with the family in the third parameter; The fourth parameter is a variable that counts the families returned starting at one. Parents is an iterator that loops through every family that a person is a child in. Note: This iterator's name begins with a capital P. There is another function of the same name that begins with a lower case p. Its first parameter is a person; its second parameter is a family variable that iterates through the familes that the person is a child in; and the third parameter is a variable that counts the families returned starting at one. Forindi is an iterator that loops through every person in the database in ascending key order. Its first parameter is a variable that iterates through the persons; its second parameter is an integer counter variable that counts the persons starting at one. fathers and mothers are iterators that loop through each family the specified individual is in returns each father or mother found. If a non-traditional family is processed, there will be separate iterations for each father or mother found. _____________________________________________________________ Family Functions EVENT marriage(FAM); first marriage event of INDI husband(FAM); first husband/father of INDI wife(FAM); first wife/mother of INT nchildren(FAM); number of children in INDI firstchild(FAM); first child of INDI lastchild(FAM); last child of STRING key(FAM|INDI, BOOL); internal key of (works for persons also) NODE fnode(FAM); root GEDCOM node of NODE root(FAM); root GEDCOM node of FAM fam(STRING); find family from key FAM firstfam(void); first family in database in key order FAM lastfam(void); last family in database in key order FAM nextfam(FAM); next family in database in key order FAM prevfam(FAM); previous family in database in key order children (FAM, INDI_V, INT_V) { commands } loop through children of family spouses (FAM, INDI_V, INT_V) { commands } loop through all husbands and wives of a family forfam (FAM_V, INT_V) { commands } loop through all families in database These functions take a family as an argument and return information about it. Marriage returns the first marriage event found in the family record, if any; it returns null if there is no marriage event. Husband returns the first husband/father of the family, if any; and wife returns the first wife/mother of the family, if any. Each returns null if the requested person is not in the family. Nchildren returns the number of children in the family. Firstchild and lastchild return the first child and last child in a family, respectively. Key was described in the section on person functions. Root and fnode return the root node of a family GEDCOM node tree. Note that a FAM value is not a NODE value. If you want to process the nodes within a family node tree, you must first use root or fnode function to get the root of the family node tree. Root and fnode are synonyms. Fam returns the family who's key is passed as an argument; if no family has the key fam returns null. Family keys are accepted either as Fnnn or @Fnnn@. Firstfam, nextfam and prevfam allow you to iterate through all families in the database. Firstfam returns the first family in the database in key order. Nextfam returns the next family after the argument family in key order. Prevfam returns the previous family before the argument family in key order. Children is an iterator that loops through the children in a family. Its first parameter is a family expression; its second parameter is a variable that iterates through each child; its third parameter is an integer counter variable that counts the children starting at one. These two variables may be used within the loop body. spouses is an iterator that loops through all the husbands and wives of a family. Its first parameter is a family expression; its second parameter is a variable that iterates through each parent; its third parameter is an integer counter variable that counts the parents starting at one. These two variables may be used within the loop body. Forfam is an iterator that loops through every family in the database in ascending key order. Its first parameter is a variable that iterates through the families; its second parameter is an integer counter variable that counts the families starting at one. _____________________________________________________________ Other types of records forsour (NODE_V, INT_V) { commands } loop through all sources in database foreven (NODE_V, INT_V) { commands } loop through all EVEN nodes in database forothr (NODE_V, INT_V) { commands } loop through all other (notes, etc.) nodes in database forsour is an iterator that loops through all the Source nodes in the database. Its first argument is the SOUR record and its second parameter is an integer counter variable that counts the sources elements starting at one. foreven is an iterator that loops through all the Event nodes in the database. Its first argument is the EVEN record and its second parameter is an integer counter variable that counts the events elements starting at one. forothr is an iterator that loops through all the Other nodes in the database. Its first argument is the record (NOTE, etc.) and its second parameter is an integer counter variable that counts the nodes starting at one. _____________________________________________________________ List Functions VOID list(LIST_V); declare a list VOID clear(LIST); clear a list BOOL empty(LIST); check if list is empty INT length(LIST); length of list VOID enqueue(LIST, ANY); enqueue element on list ANY dequeue(LIST); dequeue and return element from list VOID requeue(LIST, ANY); requeue an element on list VOID push(LIST, ANY); push element on list ANY pop(LIST); pop and return element from list VOID setel(LIST, INT, ANY); array element assignment ANY getel(LIST, INT); array element selection BOOL inlist(LIST, ANY); is second argument in list. VOID sort(LIST, LIST); sort list elements VOID rsort(LIST, LIST); reverse sort list elements LIST dup(LIST); duplicate a list forlist (LIST, ANY_V, INT_V) { commands } loop through all elements of list LifeLines provides general purpose lists that can be accessed as queues, stacks or arrays. A list must be declared with the list function before it can be used. Redeclaring an existing variable with the list clears it and restores it to being an empty list. If the argument to list() is the name of a parameter to the current routine, the reference to the calling routines list is removed and a new list is created. A list can have any number of elements. Empty returns true if the list has no elements and false otherwise. Length returns the length of the list. The only parameter to both is a list. The following diagram indicates how the various access functions for a list interact: [listops.jpg] Enqueue, dequeue and requeue provide queue access to a list. Enqueue adds an element to the back of a queue, dequeue removes and returns the element from the front of a queue, and requeue adds an element to the front of a queue. The first parameter to all three is a list, and the second parameter to enqueue and requeue is the value to be added to the queue and can be any value. Push and pop provide stack access to a list. Push pushes an element on the stack, and pop removes and returns the most recently pushed element from the stack. The first parameter to both is a list, and the second parameter to push is the value to be pushed on the stack and can be of any type. Setel and getel provide array access to a list. Setel sets a value of an array element, and getel returns the value of an array element. The first parameter to both is a list; the second parameter to both is an integer index into the array; and the third parameter to setel is the value to assign to the array element and can be of any type. Array elements are indexed starting at one. Unassigned elements are assumed to be null (0). Arrays automatically grow in size to accommodate the largest index value that is used. Passing 0 references the last element at the other end from 1, and -1 the one before it, etc. inlist compares the second argument with each element in the list. If it finds a match inlist returns true. sort and rsort sort a list, using the elements of the second array to determine the new order. Both lists are reordered, so essentially both are sorted using the sort order of the second argument. (If only one argument is given, it is sorted on its own elements.) rsort sorts in order reverse of sort. The order that sort produces places the smallest element at position 1, and the largest element at the end of the list, such that dequeue will remove the smallest element. dup creates a copy of a list. If b is a list, the function set(a,b) makes the variable a a reference to the list b. If you want to make a new list, you must use set(a,dup(b)). Forlist is an iterator that loops through the element in a list. Its first parameter is a LIST expression; its second parameter is a variable that iterates through the list elements; and its third parameter is an integer counter variable that counts the list elements starting at one. _____________________________________________________________ Table Functions VOID table(TABLE_V); declare a table VOID insert(TABLE, STRING, ANY); insert entry in table ANY lookup(TABLE, STRING); lookup and return entry from table INT length(TABLE); size of the table BOOL empty(TABLE); check if table is empty These functions provide general purpose, keyed tables. A table must be declared with the table function before it can be used. Insert adds an object and its key to a table. Its first parameter is a table; the second parameter is the object's key; and the third parameter is the object itself. The key must be a string and the object can be any value. If there already is an object in the table with that key, the old object is replaced with the new. Lookup retrieves an object from a table. Its first parameter is a table, and the second parameter is the object's key. The function returns the object with that key from the table; if there is no such object, null is returned. length returns the number of elements in the table. _____________________________________________________________ GEDCOM Node Functions STRING xref(NODE); cross reference index of STRING tag(NODE); tag of STRING value(NODE); value of NODE parent(NODE); parent node of NODE child(NODE); first child of NODE sibling(NODE); next sibling of NODE savenode(NODE); copy a node structure INT level(NODE); level of a node fornodes (NODE, NODE_V) { commands } loop through child nodes fornotes (NODE, STRING_V) { commands } loop through notes on a node traverse (NODE, NODE_V, INT_V) { commands } loop through all descendent nodes These functions provide access to the components of a GEDCOM node. All take a GEDCOM node as their only parameter, and each returns a different value associated with the node. Xref returns the cross reference index of the node, if any; tag returns the tag of the node; and value returns the value of the node, if any. If there is no cross reference, xref returns null; if there is no value, value returns null. Parent returns the parent node of the node, if any; child returns the first child node of the node, if any; and sibling returns the next sibling node of the node, if any. Whenever there is no such related node, these functions return null. These three functions allow simple navigation through a GEDCOM node tree. Savenode makes a copy of the node, and the substructure of nodes below the node, that is passed to it. Beware: the memory used to make the copy is never returned to the system. The level function returns the level of the node. Fornodes is an iterator that loops through the child nodes of a GEDCOM node. Its first argument is a node expression, and its second parameter is a variable that iterates through each direct child node of the first node. Fornotes is an iterator that loops through the NOTE nodes of a GEDCOM node. Its first argument is a node expression, and its second parameter is a variable that returns the value of the NOTE. The value includes processed sub CONC and CONT records. Traverse is an iterator providing a general method for traversing GEDCOM trees. Its first parameter is a node expression; its second parameter is a variable that iterates over every node under the first node in a top down, left to right manner; and its third parameter is a variable that is set to the level of the current node in the iteration. _____________________________________________________________ Event and Date Functions STRING date(EVENT); date of, value of first DATE line STRING place(EVENT); place of, value of first PLAC line STRING year(EVENT); year or, 1st string of 3-4 digits in 1st DATE line STRING long(EVENT); date and place, values of 1st DATE and PLAC lines STRING short(EVENT); date and place of, abbreviated from EVENT gettoday(void); returns the `event' of the current date VOID setdate(VARSTRING); creates an event with specified date and assigns to specified variable VOID dayformat(INT); set day format for stddate calls VOID monthformat(INT); set month format for stddate calls VOID yearformat(INT); set year format for stddate calls VOID eraformat(INT); set era format for stddate calls VOID dateformat(INT); set date format for stddate calls VOID datepic(STRING); set custom date format for stddate calls STRING stddate(EVENT|STRING); date of, in current format VOID complexformat(INT); set complex date format VOID complexpic(INT, STRING); set custom complex date picture string STRING complexdate(EVENT|STRING); date of, in current complex format STRING dayofweek(EVENT|STRING); day of week, in appropriate language These functions extract information about the dates and places of events. Date returns the value of the first DATE line in an event, a node in a GEDCOM record tree. Date finds the first DATE line one level deeper than the event node. Place returns the value of the first PLAC line in an event. Year returns the first three or four digit number in the value of the first DATE line in an event; this number is assumed to be the year of the event. Long returns the verbatim values of the first DATE and PLAC lines in an event, concatenated together and separated by a comma. Short abbreviates information from the first DATE and PLAC lines, concatenates the shortened information together with a comma separator and returns it. An abbreviated date is its year; an abbreviated place is the last component in the value, further abbreviated if the component has an entry in the place abbreviation table. Gettoday creates an event that has today's date in the DATE line. Setdate creates an event that has the specified date in the DATE line, and assigns the new event to the specified variable. The next seven functions are used to format dates in a variety of ways. Dayformat, monthformat, yearformat, eraformat, and dateformat select style options for formatting the day, month, year, era, and overall date structure; stddate returns dates in the selected style. datepic allows specifying a custom pattern that overrides the date format selected with dateformat. The string supplied specifies the placement of the day, month and year in the string with %d, %m and %y. A null argument disables the overrided format. The argument to stddate is normally an event and the date is extracted from the event and formatted. If the argument is a date string it is converted using the current date formats. The next three functions provide for more complex formatting of dates. Taking into account the abt, est, cal, bef, aft, fr and to qualifiers on GEDCOM dates. complexformat selects the format to use. The format effects only the complex picture, not the format of the date itself. The function complexpic can be used to specify a custom picture string for any or all of the 9 custom format strings. The custom string can be canceled by passing a null for the string. When a custom picture string is provided it overrides both the abbreviated and full word picture strings. complexdate formats the date similarly to stddate, but with the addition of the complex date format string selected. The day format codes passed to dayformat are: 0 leave space before single digit days 1 use leading 0 before single digit days 2 no space or leading 0 before single digit days The month format codes passed to monthformat are: 0 number with space before single digit months 1 number with leading zero before single digit months 2 number with no space or zero before single digit months 3 upper case abbreviation (eg, JAN, FEB) (localized) 4 capitalized abbreviation (eg, Jan, Feb) (localized) 5 upper case full word (eg, JANUARY, FEBRUARY) (localized) 6 capitalized full word (eg, January, February) (localized) 7 lower case abbreviation (eg, jan, feb) (localized) 8 lower case full word (eg, january, february) (localized) 9 upper case abbreviation in English per GEDCOM (eg, JAN, FEB) 10 lower case roman letter (eg, i, ii) 11 upper case roman letter (eg, I, II) The year format codes passed to yearformat are: 0 use leading spaces before years with less than four digits 1 use leading 0 before years with less than four digits 2 no space or leading 0 before years The era format codes passed to eraformat are: 0 no AD/BC markers 1 trailing B.C. if appropriate 2 trailing A.D. or B.C. 11 trailing BC if appropriate 12 trailing AD or BC 21 trailing B.C.E. if appropriate 22 trailing C.E. or B.C.E. 31 trailing BC if appropriate 32 trailing CE or BCE The full date formats passed to stddate are: 0 da mo yr 1 mo da, yr 2 mo/da/yr 3 da/mo/yr 4 mo-da-yr 5 da-mo-yr 6 modayr 7 damoyr 8 yr mo da 9 yr/mo/da 10 yr-mo-da 11 yrmoda 12 yr (year only, omitting all else) 13 da/mo yr 14 (As in GEDCOM) The complex date formats selected by the complexformat and used by complexdate are: Mode Example 3 use abbreviations in uppercase ABT 1 JAN 2002 4 use abbreviations in titlecase Abt 1 JAN 2002 5 use uppercased full words ABOUT 1 JAN 2002 6 use titlecased full words About 1 JAN 2002 7 use abbreviations in lowercase abt 1 JAN 2002 8 use lowercase full words about 1 JAN 2002 The complex date string pictures that can be overridden with the complexpic are: Abbreviation Full word 0 abt %1 about %1 1 est %1 estimated %1 2 cal %1 calculated %1 3 bef %1 before %1 4 aft %1 after %1 5 bet %1 and %2 between %1 and %2 6 fr %1 from %1 7 to %1 to %1 8 fr %1 to %2 from %1 to $2 The function dayofweek is a way to access the (localized) day name, eg, "Thursday", for a given date. _____________________________________________________________ Date Arithmetic FLOAT date2jd(EVENT|STRING); julian date number is number of days since origin (-4712/01/01 12h00 UT) of specified date EVENT jd2date(FLOAT); Convert julian date number to date (actually to event structure with subordinate date) These functions allow adding or subtracting days from dates. date2jd converts a date into a number of days, which can then be adjusted by simple arithmetic. Finally, jd2date converts the number of days back into a date. Julian calendar is used before 4 OCT 1582, and Gregorian calendar afterwards. As with other date functions, calendar escapes (eg, "@#DRENCH R#@") are not respected, and the only the first date of the DATE record is used. _____________________________________________________________ Value Extraction Functions VOID extractdate(NODE, INT_V, INT_V, INT_V); extract a date VOID extractnames(NODE, LIST_V, INT_V, INT_V); extract a name VOID extractplaces(NODE, LIST_V, INT_V); extract a place VOID extracttokens(STRING, LIST_V, INT_V, STRING); extract tokens VOID extractdatestr(VARB, VARB, VARB, VARB, VARB, STRING); extract date from string Value extraction functions read the values of certain lines and return those values in extracted form. Extractdate extracts date values from either an event node or DATE node. The first parameter must be a node; if its tag is DATE, the date is extracted from the value of that node; if its tag is not DATE, the date is extracted from the first DATE line one level below the argument node. The remaining three arguments are variables. The first is assigned the integer value of the extracted day; the second is assigned the integer value of the extracted month; and the third is assigned the integer value of the extracted year. Extractnames extracts name components from a NAME line. Its first argument is either an INDI or a NAME node. If it is a NAME line, the components are extracted from the value of that node; if it is an INDI line, the components are extracted from the value of the first NAME line in the person record. The second argument is a list that will hold the extracted components. The third argument is an integer variable that is set to the number of extracted components. The fourth argument is a variable that is set to the index (starting at one) of the surname component; the / characters are removed from around the surname component. If there is no surname this argument variable is set to zero. Extractplaces extracts place components from a PLAC node. The first argument is a node; if its tag is PLAC, the places are extracted from the value of the node; if its tag is not PLAC, places are extracted from the first PLAC line one level below the argument node. The second parameter is a list that will hold the extracted components. The third argument is an integer variable that is set to the number of extracted components. Place components are defined by the comma-separated portions of the PLAC value; leading and trailing white space is removed from the components, while all internal white space is retained. Extracttokens extracts tokens from a string and places them in a list. The first argument is the string to extract tokens from. The second argument is the list to hold the tokens. The third argument is an integer variable that is set to the number of tokens extracted. The fourth parameter is the string of delimiter characters that extracttokens uses to break the input string into tokens. extractdatestr extracts date values from a . STRING. It is intended for internal verification of date extraction code. The remaining five arguments are variables. The second is assigned the integer value of the extracted day; the third is assigned the integer value of the extracted month; and the fourth is assigned the integer value of the extracted year. _____________________________________________________________ User Interaction Functions VOID getindi(INDI_V, STRING); identify person through user interface VOID getindiset(SET_V, STRING); identify set of persons through user interface VOID getfam(FAM_V); identify family through user interface VOID getint(INT_V, STRING); get integer through user interface VOID getstr(STRING_V, STRING); get string through user interface INDI choosechild(INDI|FAM); select child of person/family through user interface FAM choosefam(INDI); select family person is in as spouse INDI chooseindi(SET); select person from set of persons INDI choosespouse(INDI); select spouse of person SET choosesubset(SET); select a subset of persons from set of persons INT menuchoose(LIST, STRING); select from a list of options These functions interact with the user to get information needed by the program. Getindi asks the user to identify a person. The first argument is a variable that is set to the person. The second is an optional string to use as a prompt. Getindiset asks the user to identify a set of persons. Getfam asks the user identify a family. Getint and getstr ask the user enter an integer and string, respectively. Choosechild asks the user select a child of a family or person; its single argument is a person or family; it return the child. Choosefam has the user select a family that a person is in as a spouse; its argument is a person; it returns the family. Chooseindi has the user select one person from a set of persons; its argument in a set of persons; it returns the chosen person. Choosespouse has the user select a spouse of a person; its argument is a person; it returns the chosen spouse. Choosesubset has the user select a subset of persons from a set of persons; its argument is the chosen subset. Menuchoose allows the user to select from an arbitrary menu. The first argument is a list of strings making up the items in the menu; the second, optional argument is a prompt string for the menu; menuchoose returns the integer index of the item selected by the user; if the user doesn't select an item, zero is returned. _____________________________________________________________ String Functions STRING lower(STRING); convert to lower case STRING upper(STRING); convert to upper case STRING capitalize(STRING); capitalize first letter STRING titlecase(STRING); capitalize first letter of each word STRING trim(STRING, INT); trim to length STRING rjustify(STRING, INT); right justify in field STRING concat(STRING, STRING ...); catenate two strings STRING strconcat(STRING, STRING ...); catenate two strings INT strlen(STRING); number of characters in string STRING substring((STRING, INT, INT); substring function INT index(STRING, STRING, INT); index function STRING d(INT); number as decimal string STRING f(FLOAT, INT); number as floating point string STRING card(INT); number in cardinal form (one, two, ...) STRING ord(INT); number in ordinal form (first, second, ...) STRING alpha(INT); convert number to Latin letter (a, b, ...) STRING roman(INT); number in Roman numeral form (i, ii, ...) STRING strsoundex(STRING); find SOUNDEX value of arbitrary string INT strtoint(STRING); convert numeric string to integer INT atoi(STRING); convert numeric string to integer INT strcmp(STRING, STRING); general string compare BOOL eqstr(STRING, STRING); compare strings for equality BOOL nestr(STRING, STRING); compare strings for inequality These functions provide string handling. Prior to version 3.0.6, many of them used an approach to memory management chosen for absolute minimal memory footprint. A function using this approach constructed its output string in its own string buffer, reusing that buffer each time it was called. When a function using this approach returned a string value it returned its buffer. In consequence the strings returned by these functions were to be either used or saved before the function was called again. Lower and upper convert the letters in their arguments to lower or upper case, respectively. Capitalize converts the first character of the argument, if it is a letter, to upper case. Lower and upper historically used the buffer return method; capitalize operates on and returns its argument. titlecase converts the first letter of each word if it is a letter, to upper case and all other characters to lower case. Trim shortens a string to the length specified by the second parameter. If the string is already of that length or shorter the string is not changed. Rjustify right justifies a string into another string of the length specified by the second parameter. If the original string is shorter than the justified string, blanks are inserted to the left of the original string; if the string is longer than the justified string, the original string is truncated on the right. Trim historically used the buffer return method; rjustify creates and returns a new string. Concat and strconcat catenate strings and return the result. They are identical functions. They may take two to 32 string arguments; null arguments are allowed. The arguments are concatenated together into a single, newly allocated string, which is returned. Strlen returns the length of the string argument. Substring returns a substring of the first argument string. The second and third arguments are the indices of the first and last characters in the argument string to use to form the substring. The indexes are relative one. Substring historically used the buffer return method. Index returns the character index of the nth occurrence of a substring within a string. The index is the relative one character offset to the beginning of the substring. The first argument is the string; the second argument is the substring; and the third argument is the occurrence number. D, card, ord, alpha and roman convert integers to strings. D converts an integer to a numeric string; card converts an integer to a cardinal number string (eg, one, two, three); ord converts an integer to an ordinal number (eg, first, second, third); alpha converts an integer to a letter (eg, a, b, c); and roman converts an integer to a Roman numeral (eg, i, ii, iii). The f function converts a float to a string. The optional second argument specifies the precision of the output. The default precision is 2. Strsoundex converts an arbitrary string to a SOUNDEX value. Non-ASCII text characters are ignored in the string. Strtoint converts a numeric string to an integer. Atoi is identical to strtoint. Strcmp compares two strings and returns an integer that is less than zero, equal to zero, or greater than zero, if, respectively, the first string is lexicographically less than, equal to, or greater than the second string. Eqstr and nestr return whether two strings are equal or not equal, respectively. Strcmp, Eqstr, and nestr all treat null strings as empty strings, which is to say they pretend that a null string is actually "". This means that all null and empty strings compare as equal. _____________________________________________________________ Output Mode Functions VOID linemode(void); use line output mode VOID pagemode(INT, INT); use page output mode with given page size VOID col(INT); position to column in output INT getcol(void); get current column in output VOID row(INT); position to row in output VOID pos(INT, INT); position to (row, col) coordinate in output VOID pageout(void); output page buffer STRING nl(void); newline character STRING sp(void); space character STRING qt(void); double quote character VOID newfile(STRING, BOOL); send program output to this file STRING outfile(void); return name of current program output file VOID copyfile(STRING); copy file contents to program output file BOOLEAN test(STRING, STRING); tests for characteristics of a file VOID print(STRING, STRING ...); print string to standard output window Reports can be generated in two modes, line mode and page mode. Linemode selects line mode and pagemode selects page mode; line mode is the default. The first parameter to pagemode is the number of rows per page; the second parameter is the number of columns per page. When in the line mode report output is written directly to the output file as the program runs, line by line. When in page mode output is buffered into pages which are written to the output file when pageout is called. Page mode is useful for generating charts (eg, pedigree charts or box charts) where it is convenient to compute the two-dimensional location of output. Col positions output to the given column. If the current column is greater than the argument, col positions output to the given column on the next line. Col works in both modes. Getcol returns the current column in the output. Row positions output to the first character in the given row; row can only be used in page mode. Pos positions output to a specified row and column coordinate; the first argument specifies the row, and the second specifies the column. Pos can only be used in page mode. Nl write a new line character to the output file; sp writes a space character to the output file; and qt writes a quote character to the output file. Note that \n and \' can be used within string values to represent the newline and double quote characters. Newfile specifies the name of the report output file. Its first argument is the file's name; its second argument is an append flag - if its value is non-zero the report appends to this file; if its value is zero the report overwrites the contents of the file. Newfile can be called many times; this allows a single report program to generate many report output files during one execution. Programs are not required to use newfile; if it is not used then LifeLines automatically asks for the name of the report output file. Outfile returns the name of the current report output file. Copyfile copies the contents of a file to the report output file; its argument is a string whose value is the name of a file; if the file name is not absolute nor relative, then the LLPROGRAMS environment variable, if set, will be used to search for the file; the file is opened and its contents copied to the report output file. Test will check for a specified property of the specified file. The first argument is the property, the second argument is the filename. Supported properties are: r - file is readable w - file is writeable x - file is executable s - file has non-zero size z - file has zero size e - file exists f - check if argument is a file d - check if argument is a directory The return value is TRUE or FALSE, depending on whether the file had the specified property or not. Print prints its argument string to the standard output window; print may have one to 32 arguments. _____________________________________________________________ Person Set Functions and GEDCOM Extraction VOID indiset(SET_V); declare a set variable VOID addtoset(SET, INDI, ANY); add a person to a set VOID deletefromset(SET, INDI, BOOL); remove a person from a set INT length(SET); size of a set SET union(SET, SET); union of two sets SET intersect(SET, SET); intersection of two sets SET difference(SET, SET); difference of two sets SET parentset(SET); set of all parents SET childset(SET); set of all children SET spouseset(SET); set of all spouses SET siblingset(SET); set of all siblings SET ancestorset(SET); set of all ancestors SET descendentset(SET); set of all descendents SET descendantset(SET); same as descendentset; spelling SET uniqueset(SET); remove duplicates from set VOID namesort(SET); sort indiset by name VOID keysort(SET); sort indiset by key values VOID valuesort(SET); sort indiset by auxiliary values VOID genindiset(STRING, SET); generate indiset from GEDCOM name string BOOL inset(SET, INDI); true if the Individual is in the set. forindiset( SET, INDI_V, ANY_V, INT_V ) { commands } loop through all persons in person set These functions allow you to manipulate person sets. A person set is a potentially large set of persons; each person may have an arbitrary value associated with him/her. A person set must be declared with the indiset function before it can be used. Addtoset adds a person to a set. The first argument is the set; the second argument is the person; and the third argument may be any value. The same person may be added to a set more than once, each time with a different value. Deletefromset removes a person from a set. The first argument is the set; the second argument is the person; if the third parameter is true all of the person's entries are removed from the set; if false only the first entry is removed. Length returns the number of persons in a person set. Union, intersect and difference return the set union, set intersection and set difference, respectively, of two person sets. Each functions takes two person sets as arguments and returns a third person set. The functions actually modify their argument sets, both reordering them into canonical key order and removing any duplicates (these operations are necessary to easily implement these types of set functions). Parentset, childset, spouseset and siblingset return the set of all parents, set of all children, set of all spouses and set of all siblings, respectively, of the set of persons in their argument. In all cases there is no change to the argument person set. Ancestorset returns the set all ancestors of all persons in the argument set. Descendentset returns the set of all descendents of all persons in the argument set. Descendantset is the same as descendentset; it allows an alternate spelling. Uniqueset sorts a person set by key value and then removes all entries with duplicate keys; the input set is modified and returned. Namesort, keysort and valuesort sort a set of persons by name, by key and by associated value, respectively. Each person in a person set has an associated value. When a person is added to a set with addtoset, the value is explicitly assigned. When new sets are created by other functions, a number of rules are used to associate values with persons as they are added to the new sets. For parentset, childset and spouseset the values are copied from the first input set person that causes the new person to be added to the set. For union, intersect and difference, the values are copied from the values in the first input set, except in the case of union, when persons are taken from the second set alone, in which case the values come from there. For ancestorset and descendantset the value is set to the number of generations the new person is away from the first person in the input set that the new person is related to. If the new person is related to more than one person in the input set, the value is set for the nearest relationship; that is, the value is as low as possible. Valuesort sorts a person set by the values of these auxiliary values. Genindiset generates the set of persons that matches a string whose value is a name in GEDCOM format. Genindiset uses the same algorithm that matches names entered at the browse prompt or by the user interaction getindiset function. Inset returns true if the the specified individual is in the SET. Forindiset is an iterator that loops through each person in an indiset. The first parameter is an indiset. The second parameter is a variable that iterates through each person in the set. The third parameter iterates through the values associated with the persons. The fourth parameter is an integer variable that counts the iterations. _____________________________________________________________ Record Update Functions NODE createnode(STRING, STRING); create a GEDCOM node VOID addnode(NODE, NODE, NODE); add a node to a GEDCOM tree VOID detachnode(NODE); delete a node from a GEDCOM tree VOID writeindi(INDI); write a person back to the database VOID writefam(FAM); write a family back to the database These functions allow you to modify an internal GEDCOM node tree. Createnode creates a GEDCOM node; the two arguments are tag and value strings, respectively; the value string can be null. Addnode adds a node to a node tree. The first argument is the new node; the second is the node in the tree that becomes the parent of the new node; the third is the node in the tree that becomes the previous sibling of the new node; this argument is null if the new node is to become the first child of the parent. Detachnode removes a node from a node tree. writeindi writes an individual record back to the database, and writefam writes a family record back to the database, allowing the report to make permanent changes to the database. The node functions only change data in memory; there is no effect on the database until and unless writeindi or writefam are called. _____________________________________________________________ Record Linking Functions BOOL reference(STRING); determine if string is a cross reference NODE dereference(STRING); reference cross reference or key to node tree These functions allow you to recognize values that are cross references and to read the records they refer to. Reference returns true if its string argument is a cross reference value, that is, the internal key of one of the records in the database. Dereference returns the node tree of the record referred to by its cross-reference string argument. _____________________________________________________________ Miscellaneous Functions VOID lock(RECORD|NODE); lock a record (or record containing specified node) in memory VOID unlock(RECORD|NODE); unlock a record (or record containing specified node) from memory STRING database(void); return name of current database STRING program(void); return name of current program STRING version(void); return version of LifeLines program VOID system(STRING); execute string as a UNIX shell command INT heapused(void); amount of heap used for windows STRING getproperty(STRING); extract system or user property. Function available after v3.0.5. STRING setlocale(STRING); set the locale STRING bytecode(STRING, STRING); encode a string in a codeset STRING convertcode(STRING, STRING, STRING); convert string from one codeset to another VOID debug(BOOLEAN); set interperter debug mode STRING pvalue(ANY); dump information about a pvalue VOID free(ANY); free space associated with a variable Lock and unlock are used to lock a person or family into RAM memory, and to unlock a person or family from RAM memory, respectively. Database returns the name of the current database, useful in titling reports. program returns the name of the current report program. Version returns the version of the running LifeLines program, eg, 3.0.61. System executes its string argument as a UNIX (or MS-Windows as appropriate) shell command, by invoking the system shell. This will not occur if the user has chosen to disallow report system calls (via the DenySystemCalls user option). The heapused function returns the amount of system heap that is in use at the time. This is implemented only on windows. The getproperty function extracts system or user properties. Properties are named group.subgroup.property, group.property or even property. The keys are available at the moment can be found in the ll-userguide under System and User Properties. The setlocale function sets the locale and returns the previous setting of locale. The bytecode function converts the supplied string with escape codes to the current codeset from the internal codeset or from the codeset specified by the optional second parameter if specified. A escaped code is a dollar sign ($) followed by 2 hex characters, e.g. $C1. The convertcode function converts a string to another codeset. In the two argument form, the second argument is the destination codeset, and the source codeset is the internal codeset. In the 3 argument form, the second argument is the source codeset and the third argument is the destination codeset. (See the section of the LifeLines User Guide on codeset conversions.) For example, if your internal codeset is UTF-8, and the report codeset is UTF-8, the following code, "

\n" convertcode(str,"UTF-8//html") writes the first line of output as it is written, but will apply the html sub-conversion to all the characters in the string str. The special html codes, like the less than or greater than, will be escaped when printing the second string, but not when printing the first string. The debug function turns on or off programming debugging. When enabled gobs of information is printed as a LifeLines program is run. This can be useful to figure out why a program is not behaving as expected. The pvalue function returns a string that represents the contents of a variable in the interpreter. This is present for debug purposes. The function free deallocates space associated with the variable provided as argument 1. Care must be taken when free is used in a function on a variable which is a parameter to the function. free will not effect the variable in the calling program. _____________________________________________________________ Deprecated Functions The baptism finds christening (CHR) events. The types of events desired to be found, depend on the nature of the report being written. It is recommended that custom access routines be used instead of baptism. EVENT baptism(INDI); first baptism event of If you want a routine that returns the first event for an individual that is a baptism, LDS baptism, Christening or Adult Christening, the following routine can be used. func get_baptism(indi) { fornodes(indi,node) { if (index(" BAPM BAPL CHR CHRA ",upper(tag(node)),1)) { return(node) } } return(0) } If you want to search for additional events or fewer events you can modify the string in the index call acccordingly. Likewise, if you want the to prioritize the results, finding a christening event if one exists, else finding a baptism event if one exists, then finding an LDS baptism event, and finally a christening event, the following function is suggested. /* get_baptism(indi) returns a baptism event if found events CHR, BAPM, BAPL, and CHRA are considered, in that order */ func get_baptism(indi, prefs) { set(chr, 0) set(bapm, 0) set(bapl, 0) set(chra, 0) fornodes(indi,node) { if (and(eq(upper(tag(node)), "CHR"), not(chr)) { set(chr, node) } if (and(eq(upper(tag(node)), "BAPM"), not(bapm)) { set(bapm, node) } if (and(eq(upper(tag(node)), "BAPL"), not(bapl)) { set(bapl, node) } if (and(eq(upper(tag(node)), "CHRA"), not(chra)) { set(chra, node) } } if (chr) { return(chr) } if (bapm) { return(bapm) } if (bapl) { return(bapl) } return(chra) } The functionality of the following three functions, getindimsg, getintmsg and getstrmsg is now available using the optional parameter of getindi, getint and getstr. These functions should no longer be used as they will be removed from a future version of Lifelines. VOID getindimsg(INDI_V, STRING); identify person through user interface VOID getintmsg(INT_V, STRING); get integer through user interface VOID getstrmsg(STRING_V, STRING); get string through user interface Three functions are available for to generate GEDCOM format output to the report output file of all persons in the argument person set. These functions do not in most cases generate consistent and usable output. This can be done with a program, but it is suggested that these routines are probably not what you really wanted. Gengedcom output contains a person record for each person in the set, and all the family records that link at least two of the persons in the set together. This function is provided for backward compatibility. Source, Event and Other(X) record pointers are output unmodified, but none of their records are output - this yields an inconsistent output. Gengedcomweak output does not contain Source, Event or Other(X) record pointers or their records. Gengedcomstrong includes the Source, Event and Other(X) record pointers and all top-level nodes referenced by them. VOID gengedcom(SET); generate GEDCOM file from person set VOID gengedcomweak(SET); generate GEDCOM file from person set VOID gengedcomstrong(SET); generate GEDCOM file from person set By the release of version 3.0.6, all string values are local copies, and the save and strsave functions should be entirely unnecessary. Save is present only for compatibility reasons. Previously it duplicated its argument (to prevent strings from becoming stale; this is not currently necessary (and this function no longer does anything). Strsave is the same function as save. STRING save(STRING); save and return copy of string STRING strsave(STRING); same as save function Use detachnode instead of deletenode. VOID deletenode(NODE); delete a node from a GEDCOM tree In releases after version 3.0.39, the length function accepts an argument of type list, set or table. the lengthset function is no longer needed. INT lengthset(SET); size of a set lifelines-3.0.61/docs/ll-reportmanual.xml0000700002540200244210000051277410655637143020563 0ustar prappDomain Users ]> THE <application>LIFELINES</application> PROGRAMMING SUBSYSTEM AND REPORT GENERATOR Thomas T. Wetmore IV LifeLines Version &llversion; Report Programming Manual Introduction The LifeLines programming subsystem lets you produce reports in any style or layout. You may generate files in troff, Postscript, TeX, SGML or any other ASCII-based format, for further text processing and printing. You access the report generator by choosing the r command from the main menu. You may also use the programming subsystem to create query and other processing programs that write their results directly upon the screen. For example, there is a LifeLines program that computes the relationship between any two persons in a database. Each LifeLines program is written in the LifeLines programming language, and the programs are stored in normal files. When you direct LifeLines to run a program, it asks you for the name of the program file, asks you where you want the program's output written, and then runs the program. Tutorial Ahnentafel report For example, say you want LifeLines to generate an ahnentafel (ancestor) report for Tom Wetmore. Such a report would show Tom Wetmore, his parents, grandparents, great-grandparents, and so on. It would like like the following: Example of ahnentafel report 1. Thomas Trask WETMORE IV b. 18 December 1949, New London, Connecticut 2. Thomas Trask WETMORE III b. 15 October 1925, New London, Connecticut 3. Joan Marie HANCOCK b. 6 June 1928, New London, Connecticut 4. Thomas Trask WETMORE Jr b. 5 May 1896, New London, Connecticut d. 8 November 1970, New London, Connecticut 5. Vivian Genevieve BROWN b. 5 April 1896, Mondovi, Wisconsin 6. Richard James HANCOCK b. 18 August 1904, New London, Connecticut d. 24 December 1976, Waterford, Connecticut 7. Muriel Armstrong SMITH b. 28 October 1905, New Haven, Connecticut 8. Thomas Trask WETMORE Sr b. 13 March 1866, St. Mary's Bay, Nova Scotia d. 17 February 1947, New London, Connecticut 9. Margaret Ellen KANEEN b. 27 October 1859, Liverpool, England d. 10 May 1900, New London, Connecticut ... lots more Here is a LifeLines program that generates this report: Example of ahnentafel report script /* * @progname ahnentafel_tutorial.ll * @version 1.0 * @author Wetmore * @category sample * @output text * @description * * Generate an ahnentafel chart for the selected person (tutorial sample). */ proc main () { getindi(indi) list(ilist) list(alist) enqueue(ilist, indi) /* list of people needing to be displayed */ enqueue(alist, 1) /* ancestor numbers for people on ilist */ /* Our basic loop is we take the next person who needs to be displayed, display them, and then record their parents as needing to be displayed. */ while (indi, dequeue(ilist)) { /* display person we just pulled off list */ set(ahnen, dequeue(alist)) d(ahnen) ". " name(indi) nl() if (e, birth(indi)) { " b. " long(e) nl() } if (e, death(indi)) { " d. " long(e) nl() } /* add person's parents to list to display */ if (par, father(indi)) { enqueue(ilist, par) enqueue(alist, mul(2,ahnen)) } if (par,mother(indi)) { enqueue(ilist, par) enqueue(alist, add(1,mul(2,ahnen))) } } } Say this program is in the file ahnentafel_tutorial. When you choose the r option from the main menu, LifeLines asks: What is the name of the report program? enter string: You enter ahnentafel_tutorial. Since the program generates a report, LifeLines asks where to write that report: What is the name of the output file? enter file name: You enter a file name, say my.ahnen. LifeLines reads the program ahnen, executes the program, and writes the report output to my.ahnen. LifeLines reports any syntax or run-time errors found while trying to run the program. A LifeLines program is made up of procedures and functions; every program must contain at least one procedure named main. The main procedure runs first; it may call other procedures, functions and built-in functions. In the ahnentafel example there is only one procedure. In the example program, there are some comments at the top, to tell the reader a bit about the program. The comments run from /* to */, and are not necessary (but are suggested). A procedure body is a sequence of statements. In the example program, the first five statements are: getindi(indi) list(ilist) list(alist) enqueue(ilist, indi) enqueue(alist, 1) The first statement calls the getindi (get individual) built-in function, which causes LifeLines to ask you to identify a person using the zip browse style of identification: Identify person for interpreted report enter name: After you identify a person, he or she is assigned to the variable indi. The next two statements declare two list variables, ilist and alist. Lists hold sequences of things; there are operations for placing things on lists, taking things off, and iterating through the list elements. In the example, ilist holds a list of ancestors, in ahnentafel order, who have not yet been reported on, and alist holds their respective ahnentafel numbers. The next two statements call the enqueue function, adding the first members to both lists. The person identified by the getindi function is made the first member of ilist, and the number one, this person's ahnentafel number, is made the first member of alist. The rest of the program is: while (indi, dequeue(ilist)) { set(ahnen, dequeue(alist)) d(ahnen) ". " name(indi) nl() if (e, birth(indi)) { " b. " long(e) nl() } if (e, death(indi)) { " d. " long(e) nl() } if (par, father(indi)) { enqueue(ilist, par) enqueue(alist, mul(2,ahnen)) } if (par, mother(indi)) { enqueue(ilist, par) enqueue(alist, add(1,mul(2,ahnen))) } } This is a loop that iteratively removes persons and their ahnentafel numbers from the two lists, and then prints their names and birth and death information. If the persons have parents in the database, their parents and their parents' ahnentafel numbers are then put at the ends of the lists. The loop iterates until the list is empty. The loop is a while loop statement. The line: while (indi, dequeue(ilist)) { removes (via dequeue) a person from ilist, and assigns the person to variable indi. As long as there are persons on ilist, another iteration of the loop follows. The statement: set(ahnen, dequeue(alist))is an assignment statement. The second argument is evaluated; its value is assigned to the first argument, which must be a variable. Here the next number in alist is removed and assigned to variable ahnen. This is the ahnentafel number of the person just removed from ilist. The line: d(ahnen) ". " name(indi) nl()contains four expression statements; when expressions are used as statements, their values, if any, are treated as strings and written directly to the report output file. The d function converts its integer argument to a numeric string. The ". " is a literal (constant) string value. The name function returns the default form of a person's name. The nl function returns a string containing the newline character. The next two lines: if (e, birth(indi)) { " b. " long(e) nl() } if (e, death(indi)) { " d. " long(e) nl() } write out basic birth and death information about a person. These lines are if statements. The second argument in the conditional is evaluated and assigned to the first argument, which must be a variable. The first if statement calls the birth function, returning the first birth event in a person's record. If the event exists it is assigned to variable e, and the body (the items between the curly brackets) of the if statement is executed. The body consists of three expression statements: a literal, and calls to the long and nl functions. Long takes an event and returns the values of the first DATE and PLAC lines in the event. Finally in the program is: if (par, father(indi)) { enqueue(ilist,par) enqueue(alist,mul(2,ahnen)) } if (par,mother(indi)) { enqueue(ilist,par) enqueue(alist,add(1,mul(2,ahnen))) } These lines add the father and mother of the current person, if either or both are in the database, to ilist. They also compute and add the parents' ahnentafel numbers to alist. A father's ahnentafel number is twice that of his child. A mother's ahnentafel number is twice that of her child plus one. These values are computed with the mul and add functions. Template for creating new reports The following is a good template to use when creating a new report from scratch. /* * @progname reportname * @version Version Number. * @author report author and possible email address * @category ???? * @output Format of Report Output * @description The following paragraph is used to populate index.html. * * This report .... (Note, the text in the 1st paragraph following the @keyword * lines is used as a description in the automatically generated index.html * file. The text following the @description is not used for this purpose.) * The description lines can be written with or without the *'s on the left * they will be removed when generating index.html. * * Additional descriptive text */ proc main() { } Invoking Reports As mentioned earlier, reports may be invoked interactively from the main menu via the r option from the main menu. Alternatively, llines may be called with the -x option to have it immediately run a report. For example, to have lifelines run the example ahnentafel report above, on a database named wetmore, this command llines -x ahnentafel_tutorial wetmore would be used. For more efficient operation from scripts, the lifelines distribution includes a smaller program llexec which includes all functionality of lifelines except the curses GUI. llexec is made specifically, therefore, for invocations such as llexec -x ahnentafel_tutorial wetmore <application>LIFELINES</application> PROGRAMMING REFERENCE LifeLines programs are stored in files you edit with a screen editor. Programs are not edited from within the LifeLines program; edit them as you would any text file. The programs may be stored in any directories; they do not have to be kept in or associated with LifeLines databases. You may set the LLPROGRAMS shell variable to hold a list of directories that LifeLines will use to automatically search for programs when you request program execution. Procedures and Functions A LifeLines program is made up of one or more procedures and functions. A procedure has format:proc name(params) { statements } Name is the name of the procedure, params is an optional list of parameters separated by commas, and statements is a list of statements that make up the procedure body. Report generation begins with the first statement in the procedure named main. Procedures may call other procedures and functions. Procedures are called with the call statement described below.When a procedure is called, the statements making up its body are executed. A function has format:func name(params) { statements } Name, params and statements are defined as in procedures. Functions may call other procedures and functions. When a function is called the statements that make it up are executed. A function differs from a procedure by returning a value to the procedure or function that calls it. Values are returned by the return statement, described below. Recursive functions are allowed. A function is called by invoking it in an expression. Function and procedure parameters are passed by value except for list, set and table types which are passed by reference. Redeclaration of a parameter instantiates a new variable of the stated or implied type. The previous instance continues to exist in the scope of the caller. Comments You may comment your LifeLines programs using the following notation: /*...comment text including any characters except */... */ These comments may be inserted anywhere in the program file. You should put in some report header comments, because they will provide useful text for your report when it is included in the report list seen by the user who uses the lifelines pick report menu function. Report header comments are some specific comments at the top of the report, with keywords preceded by @ signs. The following is an illustration of report header comments, with explanations inside them: /* * @progname The name of the report without the extension. This shows in the pick report option. * @version Version Number of the report. This is stored here and not in the report name. * @author Name of the author of this report and email address if he/she desires. * @category ???? * @output Modifies Database | text | HTML | GEDCOM | RTF | XML | PostScript | etc. * @description The first paragraph after this is used to generate the description in the index.html. This report .... */ Comments begin with a /* and end with a */. Comments may appear on lines of their own or on lines that have program constructs. Comments may span many lines. Comments may not be nested. Statements There are a number of statement types. The simplest is an expression statement, an expression that is not part of any other statement or expression. Expressions are defined more fully below. An expression statement is evaluated, and if its value is non-null (non-zero), it is assumed to be a string, and written to the program output file. If its value is null, nothing is written to the output file. For example, the expression name(indi), where indi is a person, returns the person's name and writes it to the output file. On the other hand, the expression set(n, nspouses(indi)) assigns the variable n the number of spouses that person indi has, but since set returns null, nothing is written to the output file. The programming language includes if statements, while statements and procedure call statements, with the following formats: if ([varb,] expr) { statements } [ elsif ([varb], expr) { statements } ]* [ else { statements } ] while ([varb,] expr ) { statements } call name(args) Square brackets indicate optional parts of the statement syntax. An if statement is executed by first evaluating the conditional expression in the if clause. If non-zero, the statements in the if clause are evaluated, and the rest of the if statement, if any, is ignored. If the value is zero, and there is an elsif clause following, the conditional in the elsif clause is evaluated, and if non-zero, the statements in that clause are executed. Conditionals are evaluated until one of them is non-zero, or until there are no more. If no conditional is non-zero, and if the if statement ends with an else clause, the statements in the else clause are executed. There are two forms of conditional expressions. If the conditional is a single expression, it is simply evaluated. If the conditional is a variable followed by an expression, the expression is evaluated and its value is assigned to the variable. Note that if treats null strings as false, but empty strings as true. This has the benefit that if (birth(indi)) will return true if there is a BIRT record, even if it is empty, but will return false if there is no BIRT record at all. The while statement provides a looping mechanism. The conditional is evaluated, and if non-zero, the body of the loop is executed. After each iteration the expression is reevaluated; as long as it remains non-zero, the loop is repeated. The call statement provides procedure calls. Name must match one of the procedures defined in the report program. Args is a list of argument expressions separated by commas. Recursion is allowed. When a call is executed, the values of its arguments are evaluated and used to initialize the procedure's parameters. The procedure is then executed. When the procedure completes, execution resumes with the first item after the call. The following report language statements are commonly encountered only near the top of a report: char_encoding(string) require(string) option(string) include(string) global(varb) The char_encoding statement specifies what character encoding scheme is used by the report, so that the report processor can correctly interpret bytes not in ASCII (e.g., accented letters). An example specifying a character encoding common in Western Europe: char_encoding("ISO-8859-1") The option statement allows the report writer to specify options. The only option currently available is "explicitvars", which causes any use of variables not previously declared or set to be reported as a parsing error. The require statement allows the report writer to specify that this report needs a version of the report interpreter no older than that specified. The include statement includes the contents of another file into the current file; its string expression is the name of another LifeLines program file. It is described in more detail below. The global statement must be used outside the scope of any procedure or function; it declares a variable to have global scope. The variable is initialized to 0. The report language also includes the following statements, which mimic some common programming languages: set(varb, expr) continue() break() return([expr]) The set statement is the assignment statement; the expression is evaluated, and its value is assigned to the variable. The continue statement jumps to the bottom of the current loop, but does not leave the loop. The break statement breaks out of the most closely nested loop. The return statement returns from the current procedure or function. Procedures have return statements without expressions; functions have return statements with expressions. None of these statements return a value, so none has a direct effect on program output. Expressions There are four types of expressions: literals, numbers, variables and built-in or user defined function calls. A literal is any string enclosed in double quotes; its value is itself. A number is any integer or floating point constant; its value is itself. A variable is a named location that can be assigned different values during program execution. The value of a variable is the last value assigned to it. Variables do not have fixed type; at different times in a program, the same variable may be assigned data of completely different types. An identifier followed by comma-separated list of expressions enclosed in parentheses, is either a call to a built-in function or a call to a user-defined function. Include Feature The LifeLines programming language provides an include feature. Using this feature one LifeLines program can refer to other LifeLines programs. This feature is provided by the include statement:include(string)where string is a quoted string that is the name of another LifeLines program file. When an include statement is encountered, the program that it refers to is read at that point, exactly as if the contents of included file had been in the body of the original file at that point. This allows you to create LifeLines program library files that can be used by many programs. Included files may in turn contain include statements, and so on to any depth. LifeLines will use the LLPROGRAMS shell variable, if set, to search for the include files. Each file included with a include statement is only read once. If multiple include statements are encountered that include the same file, only the first statement has any effect. The only main procedure actually executed is the one in the report the user chose. main procedures in other reports which are included do not get run. This allows a module intended to be included in other programs to have a main procedure for test purposes. If multiple functions or procedures with the same name are included (other than the name main) a runtime error is generated and the program is not run. Built-in Functions There is a long list of built-in functions, and this list will continue to grow for some time. The first subsection below describes the value types used in LifeLines programs; these are the types of variables, function parameters and function return values. In the remaining sections the built-in functions are separated into logical categories and described. Value Types ANY union of all types BOOL boolean (0 represents false; anything else represents true) EVENT event; reference to substructure of nodes in a GEDCOM record (reference) FAM family; reference to a GEDCOM FAM record (reference) FLOAT floating point number (may be used anywhere an INT may be used) INDI person; reference to a GEDCOM INDI record (reference) INT integer (on most systems a 32-bit signed value) LIST arbitrary length list of any values (reference) NODE GEDCOM node; reference to a line in a GEDCOM tree/record (reference) NUMBER union of all arithmetic types (INT and FLOAT) SET a collection of persons each with a value (see person sets below). STRING text string TABLE keyed look-up table (reference) VOID type with no values In the summaries of built-in functions below, each function is shown with its argument types and its return type. The types are from the preceding list. Sometimes an argument to a built-in function must be a variable; when this is so its type is given as XXX_V, where XXX is one of the types above. The built-ins do not check the types of their arguments. Variables can hold values of any type, though at any one time they will hold values of only one type. Note that EVENT is a subtype of NODE, and BOOL is a subtype of INT. Built-ins with type VOID actually return null (zero) values. Reference types (denoted above in parentheses) obey "pointer semantics", which is to say that assigning one to another variable results in both variables pointing at the same data (no copy is made). Therefore, if you pass a string to a function which changes the string, the caller does not see the change, because a string is not a reference type. On the other hand, if you pass a table to a function which alters the table, the caller does see the change, because a table is a reference type. Iterators The report generator provides a number of iterator statements for looping through genealogical and other types of data. For example, the children statement iterates through the children of a family, the spouses statement iterates through the spouses of a person, and the families statement iterates through the families that a person is a spouse or parent in. Usually the first argument to the iterator is an expression that evaluates to an individual or a family. The other arguments of the iterator are variable names that are set with values for each iteration. The last argument is often a variable name used as a counter. It starts with the value of one and is increased by one for each iteration of the loop. After completion of the iteration, these variables have the value null. children(afam,indi,cnt) { commands } For example, the first argument to children is the family that the iterator will operate on. This iterator will execute the block of commands for each child in the specified family. The second argument is set to each child in the family in the order they are listed in the family and the third argument is the loop counter which starts at one and is incremented by one each time the the block of commands is executed. The two variables indi and cnt will have the value null after the iteration has completed. For the purpose of traversing all records in the database, the following iterators may be used: forindi Iterate over all people forfam Iterate over all families forsour Iterate over all sources foreven Iterate over all events forothr Iterate over all other recoure types All the iterators are described in more detail later in the section where their definition occurs. Arithmetic and Logic Functions NUMBER add NUMBER, NUMBER ... addition - two to 32 arguments NUMBER sub NUMBER, NUMBER subtraction NUMBER mul NUMBER, NUMBER ... multiplication - two to 32 arguments NUMBER div NUMBER, NUMBER division INT mod INT, INT modulus (remainder) NUMBER exp NUMBER, INT exponentiation NUMBER neg NUMBER negation FLOAT float INT convert int to float INT int FLOAT convert float to int VOID incr NUMBER,NUMBER increment variable by second argument (or by 1 if no second argument) VOID decr NUMBER,NUMBER decrement variable by second argument (or by 1 if no second argument) BOOL and BOOL, BOOL ... logical and - two to 32 arguments BOOL or BOOL, BOOL ... logical or - two to 32 arguments BOOL not BOOL logical not BOOL eq ANY, ANY equality (not strings) BOOL ne ANY, ANY non-equality BOOL lt ANY, ANY less than BOOL gt ANY, ANY greater than BOOL le ANY, ANY less than or equal BOOL ge ANY, ANY greater than or equal Add, sub, mul and div do normal arithmetic of integer or floating values. If any operand is float, the result is float. Functions add and mul can have two to 32 arguments; the sum or product of the full set of arguments is computed. Functions sub and div have two arguments each; sub subtracts its second argument from its first, and div divides its first argument by its second. The mod function returns the remainder after dividing the first parameter by the second. If the second argument to div or mod is zero, these functions return 0 and generate a run time error. Exp performs integer exponentiation. Neg negates its argument. The functions float and int can be used to explicitly convert a value to float or int where needed. Incr and decr increment by one and decrement by one, respectively, the value of a variable. The argument to both functions must be a variable. These functions take an optional second argument which is the amount to increment or decrement the variable by. And and or do logical operations. Both functions take two to 32 arguments. All arguments are and'ed or or'ed together, respectively. The arguments are evaluated from left to right, but only up to the point where the final value of the function becomes known. Not does the logical not operation. Eq, ne, lt, le, gt and ge evaluate the six ordering relationships between two integers. Trigonometric and Spherical Calculations FLOAT sin FLOAT compute sine of argument in degrees FLOAT cos FLOAT compute cosine of argument in degrees FLOAT tan FLOAT compute tangent of argument in degrees FLOAT arcsin FLOAT compute inverse sine of argument FLOAT arccos FLOAT compute inverse cosine of argument FLOAT arctan FLOAT compute inverse tangent of argument VOID dms2deg INT degree, INT minute, INT second, FLOAT_V decimal convert (degree, minute, second) to decimal degrees void deg2dms FLOAT decimal, INT_V degree, INT_V minute, INT_V second convert decimal degrees to (degree, minute, second) FLOAT spdist FLOAT lat0, FLOAT long0, FLOAT lat1, FLOAT long1 compute distance between two locations The trigonometric functions specify angles using degrees. The functions deg2dms and dms2deg are provided to convert between (degree,minute,second) notation and decimal degree representations for angles. spdist estimates the distance between two spherical coordinates. The arguments provided are, in order, first latitude, first longitude, second latitude, second longitude. The result is in kilometers. Person Functions STRING name INDI, BOOL default name of STRING fullname INDI, BOOL, BOOL, INT many name forms of STRING surname INDI surname of STRING givens INDI given names of STRING trimname INDI, INT trimmed name of EVENT birth INDI first birth event of EVENT death INDI first death event of EVENT burial INDI first burial event of INDI father INDI first father of INDI mother INDI first mother of INDI nextsib INDI next (younger) sibling of INDI prevsib INDI previous (older) sibling of STRING sex INDI sex of BOOL male INDI male predicate BOOL female INDI female predicate STRING pn INDI, INT pronoun referring to INT nspouses INDI number of spouses of INT nfamilies INDI number of families (as spouse/parent) of FAM parents INDI first parents' family of STRING title INDI first title of STRING key RECORD, BOOL internal key of (works for any record type) STRING soundex INDI SOUNDEX code of NODE inode INDI root GEDCOM node of NODE root INDI root GEDCOM node of INDI indi STRING find person with key value INDI firstindi first person in database in key order INDI lastindi last person in database in key order INDI nextindi INDI next person in database in key order INDI previndi INDI previous person in database in key order spouses (INDI, INDI_V, FAM_V, INT_V) { commands } loop through all spouses of families (INDI, FAM_V, INDI_V, INT_V) { commands } loop through all families (as spouse) of forindi (INDI_V, INT_V) { commands } loop through all persons in database mothers (INDI, INDI_V, FAM_V, INT_V) { commands } loop through all female parents of a person fathers (INDI, INDI_V, FAM_V, INT_V) { commands } loop through all male parents of a person Parents (INDI, FAM, INT_V) { commands } loop through all familes a person is a child of These functions take a person as a parameter and return information about him or her. Name returns the default name of a person; this is the name found on the first 1 NAME line in the person's record; the slashes are removed and the surname is made all capitals; name can take an optional second parameter - if it is true the function acts as described above; if false, the surname is kept exactly as it is in the record. Fullname returns the name of a person in a variety of formats. If the second parameter is true the surname is shown in upper case; otherwise the surname is as in the record. If the third parameter is true the parts of the name are shown in the order as found in the record; otherwise the surname is given first, followed by a comma, followed by the other name parts. The fourth parameter specifies the maximum length field that can be used to show the name; various conversions occur if it is necessary to shorten the name to fit this length. Surname returns the surname of the person, as found in the first 1 NAME line; the slashes are removed. Givens returns the given names of the person in the same order and format as found in the first 1 NAME line of the record. Trimname returns the default name of the person trimmed to the maximum character length given in the second variable. Birth, death, and burial return the first birth, death, and burial event in the person's record, respectively. An event is a level 1 GEDCOM node. If there is no matching event these functions return null. Father, mother, nextsib and prevsib return the father, mother, next younger sibling and next older sibling of the person, respectively. If the person has more than one father (mother) the father (mother) function returns the first one. These functions return null if there is no person in the role. Sex returns the person's sex as the string M if the person is male, F if the person is female, or U if the sex of the person is not known. Male and female return true if the person is male or female, respectively, or false if not. Pn generates pronouns, useful when generating English text; the second parameter selects the type of pronoun: 0 He/She 1 he/she 2 His/Her 3 his/her 4 him/her Nspouses returns the number of spouses the person has in the database, and nfamilies returns the number of families the person is a parent/spouse in; these two values are not necessarily the same. Parents returns the first family that the person is a child in. Title returns the value of the first 1 TITL line in the record. Key returns the key value of a person (or any record); if there is a second parameter and it is non-null, the leading I (or F or S or E or X) will be stripped. For example, if key(curindi) returns I23, then key(curindi,1) returns 23. Soundex returns the Soundex code of the person. Root and Inode return the root node of the person's GEDCOM node tree. Note that an INDI value is not a NODE value. If you want to process the nodes within a person node tree, you must first use the root or inode function to get the root of the person node tree. Root and inode are synonyms. Indi returns the person whose key is passed as an argument; if no person has the key indi returns null. INDI keys are accepted either as Innn or @Innn@. Firstindi, nextindi and previndi allow you to iterate through all persons in the database. Firstindi returns the first person in the database in key order. Nextindi returns the next person after the argument person in key order. Previndi returns the previous person before the argument person in key order. Spouses is an iterator that loops through each spouse a person has. The first argument is a person. The second argument is a person variable that iterates through the first person's spouses. The third argument is a family variable that iterates through the families the person and each spouse are in. The fourth argument is an integer variable that counts the iterations. The spouses iterator skips any family that has no spouse, whereas the families iterator does not. Families is an iterator that loops through the families a person was a spouse/parent in. The first argument is a person. The second argument is a family variable that iterates through the families the first person was a spouse/parent in. The third argument iterates through the spouses from the families; if there is no spouse in a particular family, the variable is set to null for that iteration. The fourth argument is an integer variable that counts the iterations. Families and Spouses behave the same except for one situation. If the person is a spouse in a family that only has one spouse identified, that family does not show up with the spouses iterator, but it does show up with the families iterator. One caution, this situation causes the 3rd argument of the families iterator to be set to null. You must check for this. Forindi is an iterator that loops through every person in the database in ascending key order. Its first parameter is a variable that iterates through the persons; its second parameter is an integer counter variable that counts the persons starting at one. mothers is an iterator that loops through every female parent of the specified individual. Its first parameter is a person; its third parameter is a family variable that iterates through the familes that the person is a child in; its second parameter is a person variable that is the female parent associated with the family in the third parameter; The fourth parameter is a variable that counts the families returned starting at one. Parents is an iterator that loops through every family that a person is a child in. Note: This iterator's name begins with a capital P. There is another function of the same name that begins with a lower case p. Its first parameter is a person; its second parameter is a family variable that iterates through the familes that the person is a child in; and the third parameter is a variable that counts the families returned starting at one. Forindi is an iterator that loops through every person in the database in ascending key order. Its first parameter is a variable that iterates through the persons; its second parameter is an integer counter variable that counts the persons starting at one. fathers and mothers are iterators that loop through each family the specified individual is in returns each father or mother found. If a non-traditional family is processed, there will be separate iterations for each father or mother found. Family Functions EVENT marriage FAM first marriage event of INDI husband FAM first husband/father of INDI wife FAM first wife/mother of INT nchildren FAM number of children in INDI firstchild FAM first child of INDI lastchild FAM last child of STRING key FAM|INDI, BOOL internal key of (works for persons also) NODE fnode FAM root GEDCOM node of NODE root FAM root GEDCOM node of FAM fam STRING find family from key FAM firstfam first family in database in key order FAM lastfam last family in database in key order FAM nextfam FAM next family in database in key order FAM prevfam FAM previous family in database in key order children (FAM, INDI_V, INT_V) { commands } loop through children of family spouses (FAM, INDI_V, INT_V) { commands } loop through all husbands and wives of a family forfam (FAM_V, INT_V) { commands } loop through all families in database These functions take a family as an argument and return information about it. Marriage returns the first marriage event found in the family record, if any; it returns null if there is no marriage event. Husband returns the first husband/father of the family, if any; and wife returns the first wife/mother of the family, if any. Each returns null if the requested person is not in the family. Nchildren returns the number of children in the family. Firstchild and lastchild return the first child and last child in a family, respectively. Key was described in the section on person functions. Root and fnode return the root node of a family GEDCOM node tree. Note that a FAM value is not a NODE value. If you want to process the nodes within a family node tree, you must first use root or fnode function to get the root of the family node tree. Root and fnode are synonyms. Fam returns the family who's key is passed as an argument; if no family has the key fam returns null. Family keys are accepted either as Fnnn or @Fnnn@. Firstfam, nextfam and prevfam allow you to iterate through all families in the database. Firstfam returns the first family in the database in key order. Nextfam returns the next family after the argument family in key order. Prevfam returns the previous family before the argument family in key order. Children is an iterator that loops through the children in a family. Its first parameter is a family expression; its second parameter is a variable that iterates through each child; its third parameter is an integer counter variable that counts the children starting at one. These two variables may be used within the loop body. spouses is an iterator that loops through all the husbands and wives of a family. Its first parameter is a family expression; its second parameter is a variable that iterates through each parent; its third parameter is an integer counter variable that counts the parents starting at one. These two variables may be used within the loop body. Forfam is an iterator that loops through every family in the database in ascending key order. Its first parameter is a variable that iterates through the families; its second parameter is an integer counter variable that counts the families starting at one. Other types of records forsour (NODE_V, INT_V) { commands } loop through all sources in database foreven (NODE_V, INT_V) { commands } loop through all EVEN nodes in database forothr (NODE_V, INT_V) { commands } loop through all other (notes, etc.) nodes in database forsour is an iterator that loops through all the Source nodes in the database. Its first argument is the SOUR record and its second parameter is an integer counter variable that counts the sources elements starting at one. foreven is an iterator that loops through all the Event nodes in the database. Its first argument is the EVEN record and its second parameter is an integer counter variable that counts the events elements starting at one. forothr is an iterator that loops through all the Other nodes in the database. Its first argument is the record (NOTE, etc.) and its second parameter is an integer counter variable that counts the nodes starting at one. List Functions VOID list LIST_V declare a list VOID clear LIST clear a list BOOL empty LIST check if list is empty INT length LIST length of list VOID enqueue LIST, ANY enqueue element on list ANY dequeue LIST dequeue and return element from list VOID requeue LIST, ANY requeue an element on list VOID push LIST, ANY push element on list ANY pop LIST pop and return element from list VOID setel LIST, INT, ANY array element assignment ANY getel LIST, INT array element selection BOOL inlist LIST, ANY is second argument in list. VOID sort LIST, LIST sort list elements VOID rsort LIST, LIST reverse sort list elements LIST dup LIST duplicate a list forlist (LIST, ANY_V, INT_V) { commands } loop through all elements of list LifeLines provides general purpose lists that can be accessed as queues, stacks or arrays. A list must be declared with the list function before it can be used. Redeclaring an existing variable with the list clears it and restores it to being an empty list. If the argument to list() is the name of a parameter to the current routine, the reference to the calling routines list is removed and a new list is created. A list can have any number of elements. Empty returns true if the list has no elements and false otherwise. Length returns the length of the list. The only parameter to both is a list. The following diagram indicates how the various access functions for a list interact: Enqueue, dequeue and requeue provide queue access to a list. Enqueue adds an element to the back of a queue, dequeue removes and returns the element from the front of a queue, and requeue adds an element to the front of a queue. The first parameter to all three is a list, and the second parameter to enqueue and requeue is the value to be added to the queue and can be any value. Push and pop provide stack access to a list. Push pushes an element on the stack, and pop removes and returns the most recently pushed element from the stack. The first parameter to both is a list, and the second parameter to push is the value to be pushed on the stack and can be of any type. Setel and getel provide array access to a list. Setel sets a value of an array element, and getel returns the value of an array element. The first parameter to both is a list; the second parameter to both is an integer index into the array; and the third parameter to setel is the value to assign to the array element and can be of any type. Array elements are indexed starting at one. Unassigned elements are assumed to be null (0). Arrays automatically grow in size to accommodate the largest index value that is used. Passing 0 references the last element at the other end from 1, and -1 the one before it, etc. inlist compares the second argument with each element in the list. If it finds a match inlist returns true. sort and rsort sort a list, using the elements of the second array to determine the new order. Both lists are reordered, so essentially both are sorted using the sort order of the second argument. (If only one argument is given, it is sorted on its own elements.) rsort sorts in order reverse of sort. The order that sort produces places the smallest element at position 1, and the largest element at the end of the list, such that dequeue will remove the smallest element. dup creates a copy of a list. If b is a list, the function set(a,b) makes the variable a a reference to the list b. If you want to make a new list, you must use set(a,dup(b)). Forlist is an iterator that loops through the element in a list. Its first parameter is a LIST expression; its second parameter is a variable that iterates through the list elements; and its third parameter is an integer counter variable that counts the list elements starting at one. Table Functions VOID table TABLE_V declare a table VOID insert TABLE, STRING, ANY insert entry in table ANY lookup TABLE, STRING lookup and return entry from table INT length TABLE size of the table BOOL empty TABLE check if table is empty These functions provide general purpose, keyed tables. A table must be declared with the table function before it can be used. Insert adds an object and its key to a table. Its first parameter is a table; the second parameter is the object's key; and the third parameter is the object itself. The key must be a string and the object can be any value. If there already is an object in the table with that key, the old object is replaced with the new. Lookup retrieves an object from a table. Its first parameter is a table, and the second parameter is the object's key. The function returns the object with that key from the table; if there is no such object, null is returned. length returns the number of elements in the table. GEDCOM Node Functions STRING xref NODE cross reference index of STRING tag NODE tag of STRING value NODE value of NODE parent NODE parent node of NODE child NODE first child of NODE sibling NODE next sibling of NODE savenode NODE copy a node structure INT level NODE level of a node fornodes (NODE, NODE_V) { commands } loop through child nodes fornotes (NODE, STRING_V) { commands } loop through notes on a node traverse (NODE, NODE_V, INT_V) { commands } loop through all descendent nodes These functions provide access to the components of a GEDCOM node. All take a GEDCOM node as their only parameter, and each returns a different value associated with the node. Xref returns the cross reference index of the node, if any; tag returns the tag of the node; and value returns the value of the node, if any. If there is no cross reference, xref returns null; if there is no value, value returns null. Parent returns the parent node of the node, if any; child returns the first child node of the node, if any; and sibling returns the next sibling node of the node, if any. Whenever there is no such related node, these functions return null. These three functions allow simple navigation through a GEDCOM node tree. Savenode makes a copy of the node, and the substructure of nodes below the node, that is passed to it. Beware: the memory used to make the copy is never returned to the system. The level function returns the level of the node. Fornodes is an iterator that loops through the child nodes of a GEDCOM node. Its first argument is a node expression, and its second parameter is a variable that iterates through each direct child node of the first node. Fornotes is an iterator that loops through the NOTE nodes of a GEDCOM node. Its first argument is a node expression, and its second parameter is a variable that returns the value of the NOTE. The value includes processed sub CONC and CONT records. Traverse is an iterator providing a general method for traversing GEDCOM trees. Its first parameter is a node expression; its second parameter is a variable that iterates over every node under the first node in a top down, left to right manner; and its third parameter is a variable that is set to the level of the current node in the iteration. Event and Date Functions STRING date EVENT date of, value of first DATE line STRING place EVENT place of, value of first PLAC line STRING year EVENT year or, 1st string of 3-4 digits in 1st DATE line STRING long EVENT date and place, values of 1st DATE and PLAC lines STRING short EVENT date and place of, abbreviated from EVENT gettoday returns the `event' of the current date VOID setdate VARSTRING creates an event with specified date and assigns to specified variable VOID dayformat INT set day format for stddate calls VOID monthformat INT set month format for stddate calls VOID yearformat INT set year format for stddate calls VOID eraformat INT set era format for stddate calls VOID dateformat INT set date format for stddate calls VOID datepic STRING set custom date format for stddate calls STRING stddate EVENT|STRING date of, in current format VOID complexformat INT set complex date format VOID complexpic INT, STRING set custom complex date picture string STRING complexdate EVENT|STRING date of, in current complex format STRING dayofweek EVENT|STRING day of week, in appropriate language These functions extract information about the dates and places of events. Date returns the value of the first DATE line in an event, a node in a GEDCOM record tree. Date finds the first DATE line one level deeper than the event node. Place returns the value of the first PLAC line in an event. Year returns the first three or four digit number in the value of the first DATE line in an event; this number is assumed to be the year of the event. Long returns the verbatim values of the first DATE and PLAC lines in an event, concatenated together and separated by a comma. Short abbreviates information from the first DATE and PLAC lines, concatenates the shortened information together with a comma separator and returns it. An abbreviated date is its year; an abbreviated place is the last component in the value, further abbreviated if the component has an entry in the place abbreviation table. Gettoday creates an event that has today's date in the DATE line. Setdate creates an event that has the specified date in the DATE line, and assigns the new event to the specified variable. The next seven functions are used to format dates in a variety of ways. Dayformat, monthformat, yearformat, eraformat, and dateformat select style options for formatting the day, month, year, era, and overall date structure; stddate returns dates in the selected style. datepic allows specifying a custom pattern that overrides the date format selected with dateformat. The string supplied specifies the placement of the day, month and year in the string with %d, %m and %y. A null argument disables the overrided format. The argument to stddate is normally an event and the date is extracted from the event and formatted. If the argument is a date string it is converted using the current date formats. The next three functions provide for more complex formatting of dates. Taking into account the abt, est, cal, bef, aft, fr and to qualifiers on GEDCOM dates. complexformat selects the format to use. The format effects only the complex picture, not the format of the date itself. The function complexpic can be used to specify a custom picture string for any or all of the 9 custom format strings. The custom string can be canceled by passing a null for the string. When a custom picture string is provided it overrides both the abbreviated and full word picture strings. complexdate formats the date similarly to stddate, but with the addition of the complex date format string selected. The day format codes passed to dayformat are: 0 leave space before single digit days 1 use leading 0 before single digit days 2 no space or leading 0 before single digit days The month format codes passed to monthformat are: 0 number with space before single digit months 1 number with leading zero before single digit months 2 number with no space or zero before single digit months 3 upper case abbreviation (eg, JAN, FEB) (localized) 4 capitalized abbreviation (eg, Jan, Feb) (localized) 5 upper case full word (eg, JANUARY, FEBRUARY) (localized) 6 capitalized full word (eg, January, February) (localized) 7 lower case abbreviation (eg, jan, feb) (localized) 8 lower case full word (eg, january, february) (localized) 9 upper case abbreviation in English per GEDCOM (eg, JAN, FEB) 10 lower case roman letter (eg, i, ii) 11 upper case roman letter (eg, I, II) The year format codes passed to yearformat are: 0 use leading spaces before years with less than four digits 1 use leading 0 before years with less than four digits 2 no space or leading 0 before years The era format codes passed to eraformat are: 0 no AD/BC markers 1 trailing B.C. if appropriate 2 trailing A.D. or B.C. 11 trailing BC if appropriate 12 trailing AD or BC 21 trailing B.C.E. if appropriate 22 trailing C.E. or B.C.E. 31 trailing BC if appropriate 32 trailing CE or BCE The full date formats passed to stddate are: 0 da mo yr 1 mo da, yr 2 mo/da/yr 3 da/mo/yr 4 mo-da-yr 5 da-mo-yr 6 modayr 7 damoyr 8 yr mo da 9 yr/mo/da 10 yr-mo-da 11 yrmoda 12 yr (year only, omitting all else) 13 da/mo yr 14 (As in GEDCOM) The complex date formats selected by the complexformat and used by complexdate are: Mode Example 3 use abbreviations in uppercase ABT 1 JAN 2002 4 use abbreviations in titlecase Abt 1 JAN 2002 5 use uppercased full words ABOUT 1 JAN 2002 6 use titlecased full words About 1 JAN 2002 7 use abbreviations in lowercase abt 1 JAN 2002 8 use lowercase full words about 1 JAN 2002 The complex date string pictures that can be overridden with the complexpic are: Abbreviation Full word 0 abt %1 about %1 1 est %1 estimated %1 2 cal %1 calculated %1 3 bef %1 before %1 4 aft %1 after %1 5 bet %1 and %2 between %1 and %2 6 fr %1 from %1 7 to %1 to %1 8 fr %1 to %2 from %1 to $2 The function dayofweek is a way to access the (localized) day name, eg, "Thursday", for a given date. Date Arithmetic FLOAT date2jd EVENT|STRING julian date number is number of days since origin (-4712/01/01 12h00 UT) of specified date EVENT jd2date FLOAT Convert julian date number to date (actually to event structure with subordinate date) These functions allow adding or subtracting days from dates. date2jd converts a date into a number of days, which can then be adjusted by simple arithmetic. Finally, jd2date converts the number of days back into a date. Julian calendar is used before 4 OCT 1582, and Gregorian calendar afterwards. As with other date functions, calendar escapes (eg, "@#DRENCH R#@") are not respected, and the only the first date of the DATE record is used. Value Extraction Functions VOID extractdate NODE, INT_V, INT_V, INT_V extract a date VOID extractnames NODE, LIST_V, INT_V, INT_V extract a name VOID extractplaces NODE, LIST_V, INT_V extract a place VOID extracttokens STRING, LIST_V, INT_V, STRING extract tokens VOID extractdatestr VARB, VARB, VARB, VARB, VARB, STRING extract date from string Value extraction functions read the values of certain lines and return those values in extracted form. Extractdate extracts date values from either an event node or DATE node. The first parameter must be a node; if its tag is DATE, the date is extracted from the value of that node; if its tag is not DATE, the date is extracted from the first DATE line one level below the argument node. The remaining three arguments are variables. The first is assigned the integer value of the extracted day; the second is assigned the integer value of the extracted month; and the third is assigned the integer value of the extracted year. Extractnames extracts name components from a NAME line. Its first argument is either an INDI or a NAME node. If it is a NAME line, the components are extracted from the value of that node; if it is an INDI line, the components are extracted from the value of the first NAME line in the person record. The second argument is a list that will hold the extracted components. The third argument is an integer variable that is set to the number of extracted components. The fourth argument is a variable that is set to the index (starting at one) of the surname component; the / characters are removed from around the surname component. If there is no surname this argument variable is set to zero. Extractplaces extracts place components from a PLAC node. The first argument is a node; if its tag is PLAC, the places are extracted from the value of the node; if its tag is not PLAC, places are extracted from the first PLAC line one level below the argument node. The second parameter is a list that will hold the extracted components. The third argument is an integer variable that is set to the number of extracted components. Place components are defined by the comma-separated portions of the PLAC value; leading and trailing white space is removed from the components, while all internal white space is retained. Extracttokens extracts tokens from a string and places them in a list. The first argument is the string to extract tokens from. The second argument is the list to hold the tokens. The third argument is an integer variable that is set to the number of tokens extracted. The fourth parameter is the string of delimiter characters that extracttokens uses to break the input string into tokens. extractdatestr extracts date values from a . STRING. It is intended for internal verification of date extraction code. The remaining five arguments are variables. The second is assigned the integer value of the extracted day; the third is assigned the integer value of the extracted month; and the fourth is assigned the integer value of the extracted year. User Interaction Functions VOID getindi INDI_V, STRING identify person through user interface VOID getindiset SET_V, STRING identify set of persons through user interface VOID getfam FAM_V identify family through user interface VOID getint INT_V, STRING get integer through user interface VOID getstr STRING_V, STRING get string through user interface INDI choosechild INDI|FAM select child of person/family through user interface FAM choosefam INDI select family person is in as spouse INDI chooseindi SET select person from set of persons INDI choosespouse INDI select spouse of person SET choosesubset SET select a subset of persons from set of persons INT menuchoose LIST, STRING select from a list of options These functions interact with the user to get information needed by the program. Getindi asks the user to identify a person. The first argument is a variable that is set to the person. The second is an optional string to use as a prompt. Getindiset asks the user to identify a set of persons. Getfam asks the user identify a family. Getint and getstr ask the user enter an integer and string, respectively. Choosechild asks the user select a child of a family or person; its single argument is a person or family; it return the child. Choosefam has the user select a family that a person is in as a spouse; its argument is a person; it returns the family. Chooseindi has the user select one person from a set of persons; its argument in a set of persons; it returns the chosen person. Choosespouse has the user select a spouse of a person; its argument is a person; it returns the chosen spouse. Choosesubset has the user select a subset of persons from a set of persons; its argument is the chosen subset. Menuchoose allows the user to select from an arbitrary menu. The first argument is a list of strings making up the items in the menu; the second, optional argument is a prompt string for the menu; menuchoose returns the integer index of the item selected by the user; if the user doesn't select an item, zero is returned. String Functions STRING lower STRING convert to lower case STRING upper STRING convert to upper case STRING capitalize STRING capitalize first letter STRING titlecase STRING capitalize first letter of each word STRING trim STRING, INT trim to length STRING rjustify STRING, INT right justify in field STRING concat STRING, STRING ... catenate two strings STRING strconcat STRING, STRING ... catenate two strings INT strlen STRING number of characters in string STRING substring( STRING, INT, INT substring function INT index STRING, STRING, INT index function STRING d INT number as decimal string STRING f FLOAT, INT number as floating point string STRING card INT number in cardinal form (one, two, ...) STRING ord INT number in ordinal form (first, second, ...) STRING alpha INT convert number to Latin letter (a, b, ...) STRING roman INT number in Roman numeral form (i, ii, ...) STRING strsoundex STRING find SOUNDEX value of arbitrary string INT strtoint STRING convert numeric string to integer INT atoi STRING convert numeric string to integer INT strcmp STRING, STRING general string compare BOOL eqstr STRING, STRING compare strings for equality BOOL nestr STRING, STRING compare strings for inequality These functions provide string handling. Prior to version 3.0.6, many of them used an approach to memory management chosen for absolute minimal memory footprint. A function using this approach constructed its output string in its own string buffer, reusing that buffer each time it was called. When a function using this approach returned a string value it returned its buffer. In consequence the strings returned by these functions were to be either used or saved before the function was called again. Lower and upper convert the letters in their arguments to lower or upper case, respectively. Capitalize converts the first character of the argument, if it is a letter, to upper case. Lower and upper historically used the buffer return method; capitalize operates on and returns its argument. titlecase converts the first letter of each word if it is a letter, to upper case and all other characters to lower case. Trim shortens a string to the length specified by the second parameter. If the string is already of that length or shorter the string is not changed. Rjustify right justifies a string into another string of the length specified by the second parameter. If the original string is shorter than the justified string, blanks are inserted to the left of the original string; if the string is longer than the justified string, the original string is truncated on the right. Trim historically used the buffer return method; rjustify creates and returns a new string. Concat and strconcat catenate strings and return the result. They are identical functions. They may take two to 32 string arguments; null arguments are allowed. The arguments are concatenated together into a single, newly allocated string, which is returned. Strlen returns the length of the string argument. Substring returns a substring of the first argument string. The second and third arguments are the indices of the first and last characters in the argument string to use to form the substring. The indexes are relative one. Substring historically used the buffer return method. Index returns the character index of the nth occurrence of a substring within a string. The index is the relative one character offset to the beginning of the substring. The first argument is the string; the second argument is the substring; and the third argument is the occurrence number. D, card, ord, alpha and roman convert integers to strings. D converts an integer to a numeric string; card converts an integer to a cardinal number string (eg, one, two, three); ord converts an integer to an ordinal number (eg, first, second, third); alpha converts an integer to a letter (eg, a, b, c); and roman converts an integer to a Roman numeral (eg, i, ii, iii). The f function converts a float to a string. The optional second argument specifies the precision of the output. The default precision is 2. Strsoundex converts an arbitrary string to a SOUNDEX value. Non-ASCII text characters are ignored in the string. Strtoint converts a numeric string to an integer. Atoi is identical to strtoint. Strcmp compares two strings and returns an integer that is less than zero, equal to zero, or greater than zero, if, respectively, the first string is lexicographically less than, equal to, or greater than the second string. Eqstr and nestr return whether two strings are equal or not equal, respectively. Strcmp, Eqstr, and nestr all treat null strings as empty strings, which is to say they pretend that a null string is actually "". This means that all null and empty strings compare as equal. Output Mode Functions VOID linemode use line output mode VOID pagemode INT, INT use page output mode with given page size VOID col INT position to column in output INT getcol get current column in output VOID row INT position to row in output VOID pos INT, INT position to (row, col) coordinate in output VOID pageout output page buffer STRING nl newline character STRING sp space character STRING qt double quote character VOID newfile STRING, BOOL send program output to this file STRING outfile return name of current program output file VOID copyfile STRING copy file contents to program output file BOOLEAN test STRING STRING tests for characteristics of a file VOID print STRING, STRING ... print string to standard output window Reports can be generated in two modes, line mode and page mode. Linemode selects line mode and pagemode selects page mode; line mode is the default. The first parameter to pagemode is the number of rows per page; the second parameter is the number of columns per page. When in the line mode report output is written directly to the output file as the program runs, line by line. When in page mode output is buffered into pages which are written to the output file when pageout is called. Page mode is useful for generating charts (eg, pedigree charts or box charts) where it is convenient to compute the two-dimensional location of output. Col positions output to the given column. If the current column is greater than the argument, col positions output to the given column on the next line. Col works in both modes. Getcol returns the current column in the output. Row positions output to the first character in the given row; row can only be used in page mode. Pos positions output to a specified row and column coordinate; the first argument specifies the row, and the second specifies the column. Pos can only be used in page mode. Nl write a new line character to the output file; sp writes a space character to the output file; and qt writes a quote character to the output file. Note that \n and \' can be used within string values to represent the newline and double quote characters. Newfile specifies the name of the report output file. Its first argument is the file's name; its second argument is an append flag - if its value is non-zero the report appends to this file; if its value is zero the report overwrites the contents of the file. Newfile can be called many times; this allows a single report program to generate many report output files during one execution. Programs are not required to use newfile; if it is not used then LifeLines automatically asks for the name of the report output file. Outfile returns the name of the current report output file. Copyfile copies the contents of a file to the report output file; its argument is a string whose value is the name of a file; if the file name is not absolute nor relative, then the LLPROGRAMS environment variable, if set, will be used to search for the file; the file is opened and its contents copied to the report output file. Test will check for a specified property of the specified file. The first argument is the property, the second argument is the filename. Supported properties are: r - file is readable w - file is writeable x - file is executable s - file has non-zero size z - file has zero size e - file exists f - check if argument is a file d - check if argument is a directory The return value is TRUE or FALSE, depending on whether the file had the specified property or not. Print prints its argument string to the standard output window; print may have one to 32 arguments. Person Set Functions and GEDCOM Extraction VOID indiset SET_V declare a set variable VOID addtoset SET, INDI, ANY add a person to a set VOID deletefromset SET, INDI, BOOL remove a person from a set INT length SET size of a set SET union SET, SET union of two sets SET intersect SET, SET intersection of two sets SET difference SET, SET difference of two sets SET parentset SET set of all parents SET childset SET set of all children SET spouseset SET set of all spouses SET siblingset SET set of all siblings SET ancestorset SET set of all ancestors SET descendentset SET set of all descendents SET descendantset SET same as descendentset; spelling SET uniqueset SET remove duplicates from set VOID namesort SET sort indiset by name VOID keysort SET sort indiset by key values VOID valuesort SET sort indiset by auxiliary values VOID genindiset STRING, SET generate indiset from GEDCOM name string BOOL inset SET, INDI true if the Individual is in the set. forindiset( SET, INDI_V, ANY_V, INT_V ) { commands } loop through all persons in person set These functions allow you to manipulate person sets. A person set is a potentially large set of persons; each person may have an arbitrary value associated with him/her. A person set must be declared with the indiset function before it can be used. Addtoset adds a person to a set. The first argument is the set; the second argument is the person; and the third argument may be any value. The same person may be added to a set more than once, each time with a different value. Deletefromset removes a person from a set. The first argument is the set; the second argument is the person; if the third parameter is true all of the person's entries are removed from the set; if false only the first entry is removed. Length returns the number of persons in a person set. Union, intersect and difference return the set union, set intersection and set difference, respectively, of two person sets. Each functions takes two person sets as arguments and returns a third person set. The functions actually modify their argument sets, both reordering them into canonical key order and removing any duplicates (these operations are necessary to easily implement these types of set functions). Parentset, childset, spouseset and siblingset return the set of all parents, set of all children, set of all spouses and set of all siblings, respectively, of the set of persons in their argument. In all cases there is no change to the argument person set. Ancestorset returns the set all ancestors of all persons in the argument set. Descendentset returns the set of all descendents of all persons in the argument set. Descendantset is the same as descendentset; it allows an alternate spelling. Uniqueset sorts a person set by key value and then removes all entries with duplicate keys; the input set is modified and returned. Namesort, keysort and valuesort sort a set of persons by name, by key and by associated value, respectively. Each person in a person set has an associated value. When a person is added to a set with addtoset, the value is explicitly assigned. When new sets are created by other functions, a number of rules are used to associate values with persons as they are added to the new sets. For parentset, childset and spouseset the values are copied from the first input set person that causes the new person to be added to the set. For union, intersect and difference, the values are copied from the values in the first input set, except in the case of union, when persons are taken from the second set alone, in which case the values come from there. For ancestorset and descendantset the value is set to the number of generations the new person is away from the first person in the input set that the new person is related to. If the new person is related to more than one person in the input set, the value is set for the nearest relationship; that is, the value is as low as possible. Valuesort sorts a person set by the values of these auxiliary values. Genindiset generates the set of persons that matches a string whose value is a name in GEDCOM format. Genindiset uses the same algorithm that matches names entered at the browse prompt or by the user interaction getindiset function. Inset returns true if the the specified individual is in the SET. Forindiset is an iterator that loops through each person in an indiset. The first parameter is an indiset. The second parameter is a variable that iterates through each person in the set. The third parameter iterates through the values associated with the persons. The fourth parameter is an integer variable that counts the iterations. Record Update Functions NODE createnode STRING, STRING create a GEDCOM node VOID addnode NODE, NODE, NODE add a node to a GEDCOM tree VOID detachnode NODE delete a node from a GEDCOM tree VOID writeindi INDI write a person back to the database VOID writefam FAM write a family back to the database These functions allow you to modify an internal GEDCOM node tree. Createnode creates a GEDCOM node; the two arguments are tag and value strings, respectively; the value string can be null. Addnode adds a node to a node tree. The first argument is the new node; the second is the node in the tree that becomes the parent of the new node; the third is the node in the tree that becomes the previous sibling of the new node; this argument is null if the new node is to become the first child of the parent. Detachnode removes a node from a node tree. writeindi writes an individual record back to the database, and writefam writes a family record back to the database, allowing the report to make permanent changes to the database. The node functions only change data in memory; there is no effect on the database until and unless writeindi or writefam are called. Record Linking Functions BOOL reference STRING determine if string is a cross reference NODE dereference STRING reference cross reference or key to node tree These functions allow you to recognize values that are cross references and to read the records they refer to. Reference returns true if its string argument is a cross reference value, that is, the internal key of one of the records in the database. Dereference returns the node tree of the record referred to by its cross-reference string argument. Miscellaneous Functions VOID lock RECORD|NODE lock a record (or record containing specified node) in memory VOID unlock RECORD|NODE unlock a record (or record containing specified node) from memory STRING database return name of current database STRING program return name of current program STRING version return version of LifeLines program VOID system STRING execute string as a UNIX shell command INT heapused amount of heap used for windows STRING getproperty STRING extract system or user property. Function available after v3.0.5. STRING setlocale STRING set the locale STRING bytecode STRING, STRING encode a string in a codeset STRING convertcode STRING, STRING, STRING convert string from one codeset to another VOID debug BOOLEAN set interperter debug mode STRING pvalue ANY dump information about a pvalue VOID free ANY free space associated with a variable Lock and unlock are used to lock a person or family into RAM memory, and to unlock a person or family from RAM memory, respectively. Database returns the name of the current database, useful in titling reports. program returns the name of the current report program. Version returns the version of the running LifeLines program, eg, &llversion;. System executes its string argument as a UNIX (or MS-Windows as appropriate) shell command, by invoking the system shell. This will not occur if the user has chosen to disallow report system calls (via the DenySystemCalls user option). The heapused function returns the amount of system heap that is in use at the time. This is implemented only on windows. The getproperty function extracts system or user properties. Properties are named group.subgroup.property, group.property or even property. The keys are available at the moment can be found in the ll-userguide under System and User Properties. The setlocale function sets the locale and returns the previous setting of locale. The bytecode function converts the supplied string with escape codes to the current codeset from the internal codeset or from the codeset specified by the optional second parameter if specified. A escaped code is a dollar sign ($) followed by 2 hex characters, e.g. $C1. The convertcode function converts a string to another codeset. In the two argument form, the second argument is the destination codeset, and the source codeset is the internal codeset. In the 3 argument form, the second argument is the source codeset and the third argument is the destination codeset. (See the section of the LifeLines User Guide on codeset conversions.) For example, if your internal codeset is UTF-8, and the report codeset is UTF-8, the following code, "<p>\n" convertcode(str,"UTF-8//html") writes the first line of output as it is written, but will apply the html sub-conversion to all the characters in the string str. The special html codes, like the less than or greater than, will be escaped when printing the second string, but not when printing the first string. The debug function turns on or off programming debugging. When enabled gobs of information is printed as a LifeLines program is run. This can be useful to figure out why a program is not behaving as expected. The pvalue function returns a string that represents the contents of a variable in the interpreter. This is present for debug purposes. The function free deallocates space associated with the variable provided as argument 1. Care must be taken when free is used in a function on a variable which is a parameter to the function. free will not effect the variable in the calling program. Deprecated Functions The baptism finds christening (CHR) events. The types of events desired to be found, depend on the nature of the report being written. It is recommended that custom access routines be used instead of baptism. EVENT baptism INDI first baptism event of If you want a routine that returns the first event for an individual that is a baptism, LDS baptism, Christening or Adult Christening, the following routine can be used. func get_baptism(indi) { fornodes(indi,node) { if (index(" BAPM BAPL CHR CHRA ",upper(tag(node)),1)) { return(node) } } return(0) } If you want to search for additional events or fewer events you can modify the string in the index call acccordingly. Likewise, if you want the to prioritize the results, finding a christening event if one exists, else finding a baptism event if one exists, then finding an LDS baptism event, and finally a christening event, the following function is suggested. /* get_baptism(indi) returns a baptism event if found events CHR, BAPM, BAPL, and CHRA are considered, in that order */ func get_baptism(indi, prefs) { set(chr, 0) set(bapm, 0) set(bapl, 0) set(chra, 0) fornodes(indi,node) { if (and(eq(upper(tag(node)), "CHR"), not(chr)) { set(chr, node) } if (and(eq(upper(tag(node)), "BAPM"), not(bapm)) { set(bapm, node) } if (and(eq(upper(tag(node)), "BAPL"), not(bapl)) { set(bapl, node) } if (and(eq(upper(tag(node)), "CHRA"), not(chra)) { set(chra, node) } } if (chr) { return(chr) } if (bapm) { return(bapm) } if (bapl) { return(bapl) } return(chra) } The functionality of the following three functions, getindimsg, getintmsg and getstrmsg is now available using the optional parameter of getindi, getint and getstr. These functions should no longer be used as they will be removed from a future version of Lifelines. VOID getindimsg INDI_V, STRING identify person through user interface VOID getintmsg INT_V, STRING get integer through user interface VOID getstrmsg STRING_V, STRING get string through user interface Three functions are available for to generate GEDCOM format output to the report output file of all persons in the argument person set. These functions do not in most cases generate consistent and usable output. This can be done with a program, but it is suggested that these routines are probably not what you really wanted. Gengedcom output contains a person record for each person in the set, and all the family records that link at least two of the persons in the set together. This function is provided for backward compatibility. Source, Event and Other(X) record pointers are output unmodified, but none of their records are output - this yields an inconsistent output. Gengedcomweak output does not contain Source, Event or Other(X) record pointers or their records. Gengedcomstrong includes the Source, Event and Other(X) record pointers and all top-level nodes referenced by them. VOID gengedcom SET generate GEDCOM file from person set VOID gengedcomweak SET generate GEDCOM file from person set VOID gengedcomstrong SET generate GEDCOM file from person set By the release of version 3.0.6, all string values are local copies, and the save and strsave functions should be entirely unnecessary. Save is present only for compatibility reasons. Previously it duplicated its argument (to prevent strings from becoming stale; this is not currently necessary (and this function no longer does anything). Strsave is the same function as save. STRING save STRING save and return copy of string STRING strsave STRING same as save function Use detachnode instead of deletenode. VOID deletenode NODE delete a node from a GEDCOM tree In releases after version 3.0.39, the length function accepts an argument of type list, set or table. the lengthset function is no longer needed. INT lengthset SET size of a set lifelines-3.0.61/docs/ll-userguide.html0000700002540200244210000053440010656377040020176 0ustar prappDomain Users LifeLines Documentation

LifeLines Documentation

LifeLines Version 3.0.61

Thomas T. Wetmore , IV



Users' Manual

INTRODUCTION

LifeLines is a genealogy program that runs on UNIX systems. It maintains genealogical records (persons, families, sources, events and others) in a database, and generates reports from those records. There are no practical limits on the number of records that can be stored in a LifeLines database, nor on the amounts or kinds of data that can be kept in the records. LifeLines does not contain built-in reports. Instead it provides a programming subsystem that you use to program your own reports and charts. The programming subsystem also lets you query your databases and process your data in any way. LifeLines uses the terminal independent features of UNIX to provide a screen and menu based user interface.

LifeLines is a non-commercial, experimental system that is use at your own risk software. I developed LifeLines for personal use and shared it with friends. Enough of a demand arose through word of mouth and internet, that I have made the LifeLines source code and other information freely available under an MIT-style license reproduced below:

" Copyright (c) 1991-1999 Thomas T. Wetmore IV Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. "

The source code, documentation and a collection of report scripts are located at http://lifelines.sourceforge.net/. You can also find binary kits for some platforms. If you are a developer and wish to contribute enhancements, please sign up on sourceforge and contact Marc Nozell who is currently managing the project.

Note

Prior to 1999, Lifelines was available on the ftp sites, ftp.cac.psu.edu and hoth.stsci.edu. Please use sourceforge instead.

Other sources of information include:


INSTALLATION

You may be installing LifeLines from a source distribution package or as an executable program already prepared for your UNIX (or MS-Windows) system. The source distribution comes with the readme, build script and make files necessary to build LifeLines. Follow the instructions in the readme file. A number of executables are built which can be put it in a directory in your execution path. If you get the program in executable form, follow whatever instructions came with it. The following executables are included:

btedit

a low-level editor for advanced debugging of broken LifeLines databases.

dbverify

a utility program to verify LifeLines databases.

llexec

a stripped down version of the LifeLines program, without the user interface for non-interactive processing of report programs

llines

the LifeLines program with full user interface

The source distribution package also contains documentation and some LifeLines programs to demonstrate the capabilities of the report language. Included with these in the reports directory is a brief overview of the reports in the file index.html.


STARTING LIFELINES AND CREATING DATABASES

You normally start LifeLines with the command: llines database where database is the name of a LifeLines database. If LifeLines finds the database, LifeLines opens the database and takes you to the program's main menu. If the database doesn't exist, LifeLines asks whether it should create it, and if you answer yes, does so. You may create any number of databases, but only one can be accessed by LifeLines at a time.

The full command line interface to LifeLines is:

        llines [-acdfiklnortuwxzCFI][database]
     

The following options are supported:

-CSpecify configuration file location (e.g. -C/home/bill/lifelines/.linesrc2 ) see the section on System and User Properties below
-FFinnish option (only available if so compiled)
-I Specify a user property (e.g. -ILLEDITOR=gvim)
-alog dynamic memory operation (for debugging)
-csupply cache values (eg, -ci400,4000f400,4000 sets direct indi & fam caches to 400, and indirect indi & fam caches to 4000)
-d debug mode (signal protection disabled for convenience with breakpoints)
-f force open the database - use only in emergency
-i open database with immutable access (no protection against other access -- for use on read-only media)
-k always show keys (normally keys are suppressed if REFN available)
-l lock (-ly) or unlock (-ln) a database for use with read only media (access to a locked database is treated as immutable)
-n do not use traditional family rules
-o Specify program output filename (eg, -o/tmp/mytests)
-r open database with read-only access (protect against other writer access)
-t trace function calls in report programs (for debugging)
-u specify window size (eg, -u120,34 specifies 120 columns by 34 rows)
-w open database with writeable access (protect against other writer or reader access)
-x execute a single lifelines report program directly
-z Use normal ASCII characters for drawing lines in user interface rather than the vt100 special characters.

the -o option specifies the initial filename to use for output when running reports. It only applies to reports run with the -x option. This option has no effect on interactively run programs.

The -r option opens the database with read-only access. When in this mode LifeLines will not let you modify the database; no other operations are affected. The -w option opens the database with writeable access. If the database cannot be opened with the requested mode LifeLines quits immediately. When you open a database with neither the -r or -w options, LifeLines first tries to open the database with writeable access; if not possible LifeLines then tries to open the database with read-only access; and if this is not possible LifeLines quits. A LifeLines database may be open simultaneously by any number of programs with read-only access; however, if a database is open by a program with writeable access, then it cannot be opened by any other other program.

In rare situations the read/write mode mechanism can fail; when this happens a database may appear unopenable. If this happens use the -f option to force open the database; this will open the database and reset the mode mechanism. This is a dangerous feature; you can use it to open the same database with writeable access more than once; the results are unpredictable and generally disastrous.

The multiuser protection supplied by this reader/writer access mechanism is provided via a flag setting in the database, so both read-only and writeable access actually alter the database (read-only access only alters the value of this flag). For truly read-only access, e.g., for use with read-only media, the best solution is to lock (-ly) the database before copying it to the read-only media. This annotates the database itself as being for immutable access. Alternatively, to use a database already on read-only media and not so annotated, use the immutable (-i) flag.

By default lifelines supports a traditional family concept, that is, each family has at most one father and one mother. The -n flag relaxes this restriction. However, not all the code in lifelines supports these relaxations. For example, the default family browse screen will only display two parents, however by switching to one of the gedcom modes of displaying the family you can see all the data.

If you don't give the name of a database on the command line, LifeLines will prompt you for it. If the name you supply is an absolute pathname or a relative pathname it is used as the path to the database. If you provided a simple filename and you use the LLDATABASES variable or user options (described later), LifeLines will search for the database in the directories named in the variable; this can be very convenient. If LLDATABASES is not set the filename you enter is looked for in the current working directory.

If you would like to choose a database from a list of existing ones, enter a single question mark and press return when LifeLines prompts you for the database name. LifeLines will then display a list of all databases that it can find, and you may select one from the list.


INTRODUCTION TO GEDCOM

LifeLines records are stored in GEDCOM format; you organize, edit and maintain your data in this format. GEDCOM is a standard that defines a file format for moving genealogical data between computer systems. LifeLines has adopted this format for structuring the records in its databases. This approach provides a structured yet flexible method for storing all the data you wish to record. There are few restrictions on the format, amount or type of information you may store in a LifeLines database.

GEDCOM is defined at two levels. At the syntactic level GEDCOM is a simple set of rules for organizing and structuring data into records, with no concern about the types of records, types or formats of information in the records, or the relationships between records. At the semantic level GEDCOM adds an additional set of rules that specify what record types are allowed, how records must be structured, how data within the records must be identified and formatted, and what specific relationships between the record types are allowed. In principle there can be multiple semantic versions of GEDCOM, though in practice there is only one, lineage-linked GEDCOM. Unfortunately this semantic version of GEDCOM is poorly defined, and every genealogical system has interpreted it in different ways.

LifeLines uses GEDCOM primarily at the syntactic level, though it does impose a few of the generally accepted lineage-linked semantic restrictions. This means some important things. It means that you can store all your genealogical data in your LifeLines database, and that you have wide freedom in how you choose your own conventions for structuring and formatting your data. But it also means that the way you store data in your databases can be different from the way that someone else stores their data. This can be a problem if you share data with others or share report programs with other LifeLines users. My recommendation is to use GEDCOM lineage-linking conventions wherever possible.

LifeLines does not use forms or screens to guide you through entering or changing data. Instead you use a screen editor and directly edit the data records. This requires you to understand the GEDCOM format, and be able to edit data in GEDCOM format, before you can use LifeLines. The GEDCOM format is quite simple; this introduction will provide all you need to know about GEDCOM in order to use LifeLines.

Here is an example GEDCOM person record:

Example 1. GEDCOM person record


  0 @I25@ INDI
  1 NAME Thomas Trask /Wetmore/ Sr
  1 SEX M
  1 BIRT
    2 DATE 13 March 1866
    2 PLAC St. Mary's Bay, Digby, Nova Scotia
    2 SOUR Social Security application
  1 NATU
    2 NAME Thomas T. Wetmore
    2 DATE 26 October 1888
    2 PLAC Norwich, New London, Connecticut
    2 AGE 22 years
    2 COUR New London County Court of Common Pleas
    2 SOUR court record from National Archives
  1 OCCU Antiques Dealer
  1 DEAT
    2 NAME Thomas Trask Wetmore
    2 DATE 17 February 1947
    2 PLAC New London, New London, Connecticut
    2 AGE 80 years, 11 months, 4 days
    2 CAUS Heart Attack
    2 SOUR New London Death Records
  1 FAMC @F11@
  1 FAMS @F6@
  1 FAMS @F12@

A GEDCOM record is made up of lines. Each line has a level number and a tag, and most lines have a value following the tag. The first line in every record has a cross-reference index between the level number and the tag.

Level numbers allow data to be structured to any degree of detail; lines with higher level numbers expand on lines with lower numbers. Each record begins at level 0, and each deeper level increments the level by one. LifeLines does not restrict the structuring depth. Tags are uppercase (by convention) code words that specify the kind of information on the line or on the higher numbered lines that follow. The information after the tag, if any, is the value of the line.

The first line in a record indicates its type. There are four fixed record types in LifeLines databases: person, family, source and event. The first, 0 level line in these records have tags INDI, FAM, SOUR and EVEN, respectively. Besides these record types, you may create your own record types by using any other tag on the 0 level line of a record. The lines that begin records are the only level 0 lines used in LifeLines. Each level 0 line has a cross-reference index between the level number and the tag. This index is the record's internal reference key; other records may refer to this record by using this index. Cross-reference indexes are bracketed by @ characters.

The first line in the example record has the INDI tag, identifying it as a person. The cross-reference index value, I25, can be used by other records to refer to this record.

The second line in the example has the person's name. Each person record in a LifeLines database must have at least one 1 NAME line, and its value must be in GEDCOM name format. This format allows names to be as long as needed, but the surname, which may be placed anywhere in the name, must be separated from the rest of the name by one or two slashes. For example:

Example 2. Example of NAME formats


1 NAME John/Smith
1 NAME John /Smith/
1 NAME John/Smith/Jr.

The second slash is required only if name elements follow the surname. White space is optional before the first slash and after the second. If you don't know a person's surname, or the person doesn't have a surname, you may use / or // or no slashes at all. For example:

Example 3. Example of searching on NAMEs


1 NAME Mary//
1 NAME Mary/
1 NAME Mary
are all ways to enter a person named Mary with no known surname. A person may have any number, including zero, given names and/or initials. A LifeLines person record may have any number of 1 NAME lines, though the person will be displayed with the first name value only. Persons are indexed under all their names, however, so you will be able to search for persons by any of their names.

The next line in the example gives the person's sex. LifeLines doesn't require a 1 SEX line, but you should include it. The value of the line should be M or F if the sex is known; it can be left blank or set to U or ?, say, if not known. A person must have a 1 SEX line with a value of either M or F before he or she can be made a spouse or parent in a family.

The example record also contains three events: birth, naturalization, and death. An event begins with a level 1 line whose tag indicates the event type. For example, BIRT is the tag for a birth event.

Events usually have at least a 2 DATE and a 2 PLAC line and often a 2 SOUR line. The DATE and PLAC lines give the date and place of the event. The value of a LifeLines DATE line is free format, though LifeLines will try to parse it for specific day, month and year information. The value of a PLAC line is usually a comma-separated list of geopolitical units, starting with the most specific, ending with the most general. The SOUR line indicates the source of information about the event. The SOUR line can be the root of a full description of the source, or the value of the SOUR line can be a cross-reference key that refers to the source record that describes the source.

The naturalization event (with tag NATU) shows a few other lines. The 2 NAME line gives the person's name as recorded in the source (only 1 NAME lines must follow GEDCOM format). The 2 AGE line gives the person's age at the time of the event. The 2 COUR line indicates the court where naturalization occurred.

The final event is a death event (tag DEAT). The 2 CAUS line gives the cause of death.

At the end of the record are three lines that refer to family records. A 1 FAMC line refers to a family record that the person belongs to as a child; its value is the cross-reference index value of that family. A 1 FAMS line refers to a family record that the person belongs to as a spouse or parent.

When using LifeLines to edit a person, you will not be able to edit the cross reference values on the 0 INDI, 1 FAMC or 1 FAMS lines; these are maintained by LifeLines.

Here is an example family record:

Example 4. Example family record


  0 @F6@ FAM
  1 HUSB @I25@
  1 WIFE @I26@
  1 MARR
    2 DATE 31 March 1891
    2 PLAC New London, New London, Connecticut
    2 SOUR New London Vital Records
  1 CHIL @I27@
  1 CHIL @I17@

The 0 FAM line assigns the family the cross-reference index of F6. The record contains 1 HUSB and 1 WIFE lines that refer to the two spouses/parents. The record also holds a marriage event (tag MARR) and two 1 CHIL lines that refer to two children in the family. When editing family records, you cannot edit the 0 FAM, 1 HUSB, 1 WIFE, or 1 CHIL lines; these are maintained by LifeLines.

When you create new records for your database, you are free to invent tags and structure your data in any way you see fit. However, it is good practice to use standard GEDCOM tags and value formats. LifeLines does enforce a small set of conventions that you must obey. Within person records, LifeLines requires that you use 1 NAME and 1 SEX lines with their special meanings and value formats. Though not required, LifeLines assumes that you will use 1 BIRT, 1 DEAT, 1 CHR, and 1 BURI lines for birth, death, baptism and burial events, respectively. In family records, LifeLines assumes you will use the 1 MARR event for marriage events. Within person records, you are not allowed to use 0 INDI, 1 FAMC or 1 FAMS lines, since these are used to maintain linkage information. Within family records, you are not allowed to use 0 FAM, 1 HUSB, 1 WIFE or 1 CHIL lines.

The indentation shown in the examples is not part of GEDCOM format. When LifeLines prepares records for you to edit, however, it always indents the records, making them easier to read and understand. You do not need to follow this indentation scheme when you edit the records. Indentation is removed from the data before it is stored in the database.


MAIN MENU

After LifeLines opens an existing database, or creates a new one, it presents you with the main menu:

Please choose an operation:
   b Browse the persons in the database
   s Search database
   a Add information to the database
   d Delete information from the database
   p Pick a report from list and run
   r Generate report by entering report name
   t Modify character translation tables
   u Miscellaneous utilities
   x Handle source, event and other records
   Q Quit current database
   q Quit program

Select an operation by striking the proper selection letter.

The browse operation lets you browse the database and perform many operations on the data. The search operation provides some simple wildcard search capabilities, which lead into browsing particular records. The add operation lets you add new information, and the delete operation removes information. The report operations read report programs and generates output reports. The modify character translation tables operation changes the translation tables. The miscellaneous utilities operation provides such things as backup and restore. The handle source, event and other records operation gives you access to these three record types. The quit operation closes the database and returns to UNIX.

The browse operation deserves special mention, because it provides a rich environment for searching, viewing, adding, modifying, merging and deleting information in the database. You will find that you operate from the browsing modes most of the time. The operations are all described in later sections.


CODESET

After you have created a new database, and before you actually add any data to it, is the time to set the codeset to be used in the database.

The codeset (or character encoding, to use precise Unicode terminology) is the decision as to how letters will be represented by the computer. If you have only ever used English letters in computing, you may not have had to encounter this issue, because as it happens, the English letters (a-z and A-Z) are stored numerically in the same fashion in almost all codesets used by computers. However, in the field of genealogy, you are especially likely to meet letters outside of the English alphabet (for example, accented vowels).

You have fundamentally three choices as to what codeset to use in your database, listed below from easiest to most powerful.

First, you may leave it entirely unspecified. This will give the traditional lifelines behavior. This is really only suitable if either (a), you only use English (ASCII) data, or (b), you work in an environment which entirely uses the same 8-bit codeset (eg, a GNU/Linux box which is all ISO-8859-15), and you only run lifelines in English. If you use any non-English data on MS-Windows, this is not likely to be suitable, because the lifelines screens run in the console, but you are likely to use MS-Windows applications either for editing or for viewing output, and the MS-Windows console uses a different codeset from MS-Windows applications. Also, if you use lifelines in a different language than English, this may not be suitable, because the gettext message catalogs (for non-English interface) will not be converted into your codeset.

Second, you may specify a particular 8-bit codeset. Assuming that you have iconv and gettext installed (or you are using the MS-Windows version, which comes with these), you may specify any 8-bit codeset supported by iconv, and iconv supports quite many. A natural choice for Western European languages would be ISO-8859-1, or (for MS-Windows only) CP-1252. With this option, gettext language files will be converted to your codeset.

Third, you may specify the use of UTF-8. This is a Unicode encoding, and is by far the most powerful option. In fact, this is the only really convenient way to be able to store, for example, names in English, names in Russian, and names in Greek, all in the same database, in their native scripts (alphabets). In recent versions, lifelines has become more knowledgeable about handling UTF-8, so that, for example, upper & lower casing only work correctly with versions from 3.0.28 on.

To actually specify a codeset, enter it via the u(tility) o(ptions) page (which is documented below). From the main menu, in the English version, press u to reach the utility page, and then o to edit the user options. To set a codeset of, e.g., ISO-8859-1, enter this string on its own line, without the surrounding quotes: "codeset=ISO-8859-1". Or, to specify the use of UTF-8, "codeset=UTF-8".

Further information about codeset conversion is found in the later chapter of that name (for example, information about producing reports which make use of HTML entity names for non-ASCII characters).


ENTERING THE FIRST PERSON

Note: Before you add the first person to your database, you specify internal codeset (review the Codeset chapter for information).

Normally you add persons to the database from the browsing modes, but when entering the first person there is no one in the database to browse to. To add the first person to a LifeLines database, first select the add operation from the main menu. You will be prompted with the add menu (described later). Strike p to add a person. LifeLines creates a template of a GEDCOM person record, and puts you in a screen editor to edit the template. The default template is:

Example 5. Default person record template


  0 INDI
  1 NAME Fname /Surname/
  1 SEX MF
  1 BIRT
    2 DATE
    2 PLAC
    2 SOUR
  1 DEAT
    2 DATE
    2 PLAC
    2 SOUR

Edit the template to create the new person's record. Change the name to the person's name. Assign the person's sex by deleting either M or F. Fill out the birth and death events as best you can. If the person is alive, remove the death event. Remove any DATE and PLAC lines you do not have the information for.

The default template provides lines for one birth and one death event. You can expand the record with other events (even more birth or death events) and lines. Indentation makes it easier to read and edit the record, but isn't necessary. You may change the default edit template by defining the user option INDIREC (described later).

Here is how I might edit the template when creating a record about myself:

Example 6. Example editing of template record


  0 INDI
  1 NAME Thomas Trask /Wetmore/ IV
  1 SEX M
  1 BIRT
    2 DATE 18 December 1949
    2 PLAC New London, New London, Connecticut
    2 SOUR Birth Certificate
  1 OCCU Software Engineer
  1 RESI
    2 DATE 1982 to 1995
    2 PLAC Newburyport, Essex, Massachusetts
    2 ADDR 2 Barton Street, Newburyport, MA 01950

... lots of other events and facts

When you edit a person record, don't add or modify INDI, FAMC or FAMS lines. LifeLines creates and maintains these lines through specific user commands.

When you finish editing and leave the editor, you automatically return to LifeLines. If you made an error (eg, didn't use proper level numbers or didn't follow the proper name convention), LifeLines displays an error message, and asks if you want to re-edit the record. If you don't, LifeLines doesn't add the person to the database.

When the record is in proper format, LifeLines asks if you are sure you want to add the person to the database. If you answer yes, the person is added; if you answer no, the person isn't. In both cases LifeLines returns to the main menu.


SCREEN EDITORS AND ENVIRONMENT VARIABLES

With LifeLines you maintain the database records using a screen editor. This is different than other genealogical programs where screens or forms are used to gather the data.The default screen editor for LifeLines is vi. (The MS-Windows version defaults instead to notepad.exe.) This can be overridden by the ED, EDITOR or LLEDITOR environment variables. For example, if you prefer the emacs screen editor, and if you use a bourne-compatible shell, you may add the line: ED=emacs to your login profile file, and LifeLines will use emacs for editing.

There are four other, LifeLines specific environment variables. They are LLDATABASES, LLARCHIVES, LLPROGRAMS and LLREPORTS. LLDATABASES and LLPROGRAMS are UNIX path list variables.

There is also a configuration file, and entries in it may be used in lieu of environment variables. It is ordinarily named .linesrc under UNIX, and lines.cfg under MS-Windows. A sample configuration file should have been included in the distribution.

See the section on System and User properties for more details.

LLDATABASES can be set to a list of directories that hold LifeLines databases. When you execute the LifeLines program, these directories will be searched in turn for the database mentioned on the command line. For example, LLDATABASES=.:/home/ttw4/LifeLines/Databases indicates that databases should be searched for in the current directory first, and if not found there, then searched for in: /home/ttw4/LifeLines/Databases

Each LifeLines database is implemented as a directory with specific contents. The LLDATABASES variable should be set to a list of directories that contain these database directories, not to a list of database directories themselves.

The environment variable LLPROGRAMS is used in the same way, but to specify the search path for LifeLines report generating and other programs (described later).

LLARCHIVES and LLREPORTS can each be set to specify a single directory. LLARCHIVES is used to select a directory where all database backup files will be stored, and LLREPORTS is used to select a directory where all generated reports and program outputs will be placed.

New databases without explicit paths will be created in the first directory listed in the LLDATABASES path. (This is a change; versions from 3.0.6 to 3.0.31 used a now obsolete variable LLNEWDBDIR).

You are not required to use these environment variables; when a variable is not defined, LifeLines uses the current directory as its default value. If you do use the variables, you can override their use by specifying files and directories as either absolute or relative paths.

You may use the configuration file in lieu of environment variables. This is especially oriented towards users on MS-Windows systems, on which environment variables are not as common a configuration technique.

LifeLines uses the curses library for terminal independent I/O. This requires you to specify your terminal type with the TERM environment variable. (This is not relevant in the MS-Windows version.)


BASICS OF BROWSING

You will use the browsing screens of LifeLines most of the time. When in these modes you can quickly search for or browse through the persons and families in the database. When you find a person or family you are interested in, you can then edit their records.

The browsing screens also allow you to add new persons and families to the database, add spouses to families, add children to families, swap the order of spouses and children, merge persons and merge families, and perform other operations. The browsing screens also lets you remove spouses from families and remove children from families.

There are six browsing screens. The person and family screens concentrate on a single person and family, respectively. The list screen allows you to browse through a list of persons. The two person browse screen shows two persons at once, and the two family browse screen shows two families at once. The auxiliary screen is used browsing any other type of records (e.g., events, sources, notes).

Each browsing screen has multiple view modes. The view mode affects how the information is displayed on the screen, but does not affect the menu choices available at the bottom of the screen. Menu commands are available on each screen to change amongst the view modes available for that screen.

The person screen has the most view modes. It has normal mode, which shows a summary of the vital records of the person. It (like all other screens) has GEDCOM mode, which shows the actual GEDCOM data of the record, and also expanded GEDCOM mode, which shows the actual GEDCOM data, but augments it with information on each line that contains a cross-reference (GEDCOM xref). It has two pedigree or tree modes, one showing an ancestral tree and one showing a descendant tree. The depth of the pedigree trees shown may be adjusted via menu commands.

The two person browse screen has the same modes as the person screen.

The two family browse screen and tandem family screen alike have normal mode (showing a summary of vitals), GEDCOM mode, and expanded GEDCOM mode.

The auxiliary screen has only GEDCOM mode and expanded GEDCOM mode. (The list screen has no view modes at present).


IDENTIFYING A PERSON OR LIST OF PERSONS TO BROWSE

To enter the browsing modes from the main menu strike b. LifeLines asks you to identify a person or list of persons to browse to:

Please identify person or persons to browse to.
Enter name, key, refn or list:

Enter either a name or partial name, or an internal key value, or a user-defined reference key (described later) or the name of a previously defined list of persons (described later), and strike return.

LifeLines allows wide flexibility in how to enter names. You may enter a name in upper or lower case or any combination. You may leave out all but the first given name, and, for given names, you may leave out any letters except the first. You may leave vowels out of the surname, and after four or five consonants have been typed, you may leave them out too. You must separate the given names from the surname by a slash, and if you enter given names after the surname (as in Chinese names), or any modifiers (such as Jr, Sr, IV, etc.), they must be separated from the surname by another slash. Here are a few of the ways I can enter my name:

Example 7. Example of entering a name


Thomas Trask /Wetmore/ IV
thomas/wetmore/iv
t t/wetmr/i
th tr/Wetmore
t/wtmr/iv

You may browse to the list of all persons with the same surname by using the * character as the first initial. For example:

Example 8. Example of using wildcard in browsing

*/wetmore

matches all persons with surname Wetmore. This is the only wildcard feature supported in browsing. (However, the search operation provides some simple wildcards for finding individual name fragments, or searching by user-defined reference keys. The search operation is accessed via a different choice off of the main menu.)

After you enter a name, LifeLines searches for all persons who match. There are three possibilities: no one matches; one person matches; or more than one person matches. In the first case LifeLines writes:
There is no one in the database with that name or key.
and leaves you in the main menu.

If one person matches, LifeLines enters the person browse mode displaying the matched person. If more than one person matches, LifeLines enters the list browsing mode with the list of matching persons.

You may also identify a person by entering his or her internal, cross-reference key value. The internal key values of all person records are an I followed by digits. When you enter a key value you may omit the I. If LifeLines finds a person with the key value you provide, LifeLines enters the person browsing mode displaying that person. You can also browse to a Family, Source, or Note by entering its key, but you must include the letter identifing the key type, thus F11, S1, or N3 would browse to the family, source or note corresponding to the key if it exists.

The browse command b is also available from most browsing modes. The command works the same way from those modes as it does from the main menu.


ZIP IDENTIFYING A NEW PERSON

Some LifeLines operations need you to identify a person, not for the purpose of browsing, but for the purpose of completing an operation you have requested. For example, when you add a child to a family, LifeLines may ask you to identify the child. When this happens a panel pops up that asks you to identify a person. You respond by typing a name or key exactly as you would for the b command. If no one matches, LifeLines returns to the previous browsing mode. If the name matches persons in the database LifeLines displays something like:

Please choose from among these records.
  >Thomas Trask Wetmore, b. 1826, N.B. (42)
   Thomas Trask Wetmore IV, b. 1949, Conn. (1)
   Thomas Trask Wetmore III, b. 1925, Conn. (6)
   Thomas Trask Wetmore Jr, b. 1896, Conn. (11)
   Thomas Trask Wetmore Sr, b. 1866, N.S. (23)
   Thomas Trask Wetmore V, b. 1982, Mass. (5)
_______________________________________________
Commands: j Move down k Move up i Select q Quit

Use the j and k commands to move the selection cursor (>) to the correct person, and then use the i command to select that person. There may be more persons in the list than you can see at once. If this is so then you can use the j and k commands to scroll through the full list. If you don't find the proper person, use the q command and LifeLines asks whether you want to enter another name.

With version 3.0.15, lists may also be navigated with the up and down arrows, PageUp and PageDown keys, Home and End keys, and the Enter key. Shift-PageUp and Shift-PageDown move more than one page at a time in a given direction. The keyboard equivalents are j=UpArrow, k=DownArrow, u=PageUp, d=PageDown, ^=Home, $=End, U=Shift-PageUp, D=Shift-PageDown, i=Enter.

When LifeLines creates a list of names for you to select from, it tries to add extra information to the name; this helps determine which name to choose, and is important in databases where many persons have the same name. LifeLines also places the person's key value at the end of each menu line; this may be helpful in large databases.

Some browse screens provide the z command, which allows you to browse to a new person using the zip style of identification rather than the b style.


BROWSE DISPLAY BASICS

The screen display for each browsing screen is made up of panels. At the bottom of each display is a message panel used for one line messages. Each display contains one or two data panels showing information from the database. And each display has a panel with the operation menu available for that screen.


PERSON BROWSE SCREEN

After you identify a person to browse to, LifeLines enters the person browse screen. The top panel in the display gives basic information about the person (in the normal, or vitals, mode, which is the default). The middle panel provides a menu of commands. For example:

person: Thomas Trask WETMORE Sr (25)
  born: 13 March 1866, St. Mary's Bay, Digby, Nova Scotia
  died: 17 February 1947, New London, New London, Connecticut
  father: Daniel Lorenzo WETMORE, b. 1821, N.S., d. 1903, Conn. (48)
  mother: Mary Ann DOTY, b. 1824, N.S., d. 1897, Conn. (59)
  spouse: Margaret Ellen KANEEN, b. 1855, Eng., d. 1900, Conn. (26)
    child: Portia Louise WETMORE, b. 1892, Conn., d. 1921, Conn. (27)
    child: Thomas Trask WETMORE, b. 1896, Conn., d. 1970, Conn. (17)
  spouse: Arleen M KEENEY, m. 1914, Conn. (75)
_______________________________________________________________________
Please choose an operation:             (pg 1/3)
  e  Edit the person       g  Browse to family    p  Pedigree mode
  f  Browse to father      u  Browse to parents   n  Create new person
  m  Browse to mother      b  Browse to persons   a  Create new family
  s  Browse to spouse/s    h  Add as spouse       x  Swap two families
  c  Browse to children    i  Add as child        tt Enter tandem mode
  o  Browse to older sib   r  Remove as spouse    ?  Other menu choices
  y  Browse to younger sib d  Remove as child     q  Return to main menu
_______________________________________________________________________
LifeLines -- Person Browse Screen

The commands perform a wide variety of functions.

e Edit the person.

Edit the person's database record. LifeLines puts the record in a file, and then runs a screen editor so you can edit the record. When you return from the editor, LifeLines asks you to confirm any changes; the person is changed only if you answer yes.

f Browse to father.

Browse to the person's father. If the father isn't in the database, LifeLines doesn't change the display. If there are more than one father, LifeLines asks you to select one.

m Browse to mother.

Browse to the person's mother. If the mother isn't in the database, LifeLines doesn't change the display. If there are more than one mother, LifeLines asks you to select one.

s Browse to spouse/s.

Browse to the person's spouse. If the person has more than one spouse, LifeLines asks you to select one. If the person has no spouse, the display does not change.

c Browse to children.

Browse to one of the person's children. If there is more than one child, LifeLines asks you to select one. If the person has no children, the display does not change.

o Browse to older sib.

Browse to the person's next older sibling. If the person has no such sibling, the display does not change. Only siblings from the same family are browsed by this command.

y Browse to younger sib.

Browse to the person's next younger sibling. If the person has no such sibling, the display does not change. Only siblings from the same family are browsed by this command.

g Browse to family.

Browse to the family the person is a spouse or parent in, and switch to the family browse mode. If the person is in more than one family, LifeLines asks you to identify which one. If the person is not a spouse or parent in any family, the display does not change.

u Browse to parents.

Browse to the family the person is a child in, and switch to the family browse mode. If the person is not a child in a family, the display does not change. If the person is a child in more than one family, LifeLines asks you to identify which one.

b Browse to persons.

Browse to a new person or list of persons. LifeLines asks you to identify a person or persons by name, key or list name, and depending on how many persons are identified, switches either to the list browse mode, or remains in the person browse mode.

h Add as spouse.

Add the person as a spouse/parent to an existing family. LifeLines asks you to identify the family, and then asks you to confirm the request.

i Add as child.

Add the person as a child to an existing family. The person may already be a child in another family. LifeLines asks you to identify the family, and then asks you to confirm the request.

r Remove as spouse.

Remove the person as a spouse or parent from an existing family. If the person is a spouse or parent in more than one family, LifeLines asks you to identify the family.

d Remove as child.

Remove the person as a child in an existing family.

n Create new person.

Create and add a new person to the database. LifeLines creates a record template and puts you into the screen editor to edit the record. When you return from the editor, LifeLines asks you to confirm the operation. If you do, the new person is added and becomes the current person. If not, the new person is not added, and LifeLines returns to the original display.

a Create new family.

Create and add a new family to the database. The new family may have the current person as either a spouse/parent or as a child; LifeLines asks which. If you choose to create a family with the person as a spouse/parent, LifeLines asks you to identify the other spouse if he or she is known. In either case LifeLines creates a family template, and places you in the screen editor. When you return from the editor, LifeLines asks you to confirm the operation. If you do, LifeLines adds the family and shifts into family browse mode. If the command you ran just before the a command were the n command, and you choose to create a family with the person as a spouse/parent, LifeLines guesses that the other spouse in the family will be the person displayed just before the new person was created. LifeLines asks you if this is the case, and if so, automatically make that person the other spouse in the new family. If this is not the case, LifeLines asks you to identify the other spouse.

p Pedigree mode.

Change to pedigree browse mode. The person becomes the root person in the pedigree display.

x Swap two families.

Swap (change chronological order) any two families that the person belongs to as a spouse or parent. LifeLines asks you to identify the two families and then swaps them.

tt Enter tandem mode.

Change to the tandem person browse mode. LifeLines first asks you to identify the second person.

? Other menu choices.

Go to the next page of menu choices. This will have no effect on the upper (data) portion of the screen, but it allows you to page through all available commands for this display screen.

q Return to main menu.

Return to the LifeLines main menu.

z Zip browse to person.

Zip browse to a new person. LifeLines asks you to identify a person by name or key value, and if you do so, browses to that person.


LIST BROWSE SCREEN

This browse screen handles lists of persons. The top panel shows information about one person in the list. The left panel shows a list of up to 12 persons. The person shown in the top panel is identified by the > character. The right panel is the menu of available commands.

person: Thomas Trask WETMORE Sr (25)
  born: 13 March 1866, St. Mary's Bay, Digby, Nova Scotia
  died: 17 February 1947, New London, New London, Connecticut
  father: Daniel Lorenzo WETMORE, b. 1821, N.S., d. 1903, Conn. (48)
  mother: Mary Ann DOTY, b. 1824, N.S., d. 1897, Conn. (59)
  spouse: Margaret Ellen KANEEN, b. 1855, Eng., d. 1900, Conn. (26)
_______________________________________________________________________
  Thomas Trask WETMORE (42)                Choose an operation:
  Thomas Trask WETMORE III (6)              j Move down list
  Thomas Trask WETMORE IV (1)               k Move up list
  Thomas Trask WETMORE (11)                 e Edit this person
 >Thomas Trask WETMORE Sr (23)              i Browse this person
  Thomas Trask WETMORE (5)                  m Mark this person
                                            r Remove from list
                                            t Enter tandem mode
                                            n Name this list
                                            b Browse new persons
                                            a Add to this list
                                            x Swap mark/current
                                            q Return to main menu
_______________________________________________________________________
LifeLines -- List Browse Screen

j Move down list.

Move down the list one person. The list panel is only large enough to show 12 persons. However, the list may contain many more persons. Use the j and k commands to scroll to these other persons.

k Move up list.

Move up the list one person. The list panel is only large enough to show 12 persons. However, the list may contain many more persons. Use the j and k commands to scroll to these other persons.

With version 3.0.15, lists may also be navigated with the up and down arrows, PageUp and PageDown keys, Home and End keys, and the Enter key. Shift-PageUp and Shift-PageDown move more than one page at a time in a given direction. The keyboard equivalents are j=UpArrow, k=DownArrow, u=PageUp, d=PageDown, ^=Home, $=End, U=Shift-PageUp, D=Shift-PageDown, i=Enter.

e Edit this person.

Edit the displayed person's database record. LifeLines runs the editor on the person's record. When you return from the editor, LifeLines asks you to confirm any changes, and then leaves you in the list browse screen.

i Browse this person.

Change to the person browse screen with the current person.

m Mark this person.

Mark the current person if he/she is not marked; unmark the person is he/she is. The marked person is shown with an x by his/her name. Marked persons are used by the t and x commands. Only one person may be marked at a time.

r Remove from list.

Remove the current person from the browse list (not from the database).

t Enter tandem mode.

Change to the tandem person mode with the current person and the marked person as the two persons. If no person is marked there is no change.

n Name this list.

Lists of persons may be named, allowing you to quickly browse back to them by giving a list name in response to the b command from different modes. LifeLines will prompt you for the name. List names are most convenient when short.

b Browse new persons.

Browse to a new person or list of persons. You can identify a person or list of persons by name, internal or user key or by list name.

a Add to this list.

Add more persons to the current browse list. LifeLines asks you to identify a new person or list of persons by name, key or list name, and they are added to and name-sorted into the current list.

x Swap mark/current.

Swap the current person with the marked person in the list.

q Return to main menu.

Return to the LifeLines main menu.


FAMILY BROWSE SCREEN

This browse screen displays information about a family. The top panel shows basic information about the family. The bottom panel shows the menu of available commands. If the database contains more than two parents for this family only the first two are displayed.

father: Thomas Trask WETMORE IV (1)
  born: 18 December 1949, New London, New London, Connecticut
  died:
mother: Luann Frances GRENDA (2)
  born: 10 July 1949, Pittsburgh, Allegheny, Pennsylvania
  died:
married: 1 August 1970, Governors Island, New York, New York
  child: Anna Vivian Wetmore, b. 1974, Alaska (3)
  child: Marie Margaret WETMORE, b. 1979, Conn. (4)
  child: Thomas Trask WETMORE V, b. 1982, Mass. (5)
_______________________________________________________________________
Please choose an operation:            (pg 1/4)
 e  Edit the family       %s  Add source           r  Remove spouse from
 f  Browse to father      %e  Add event            d  Remove child from
 m  Browse to mother      %o  Add other            x  Swap two children
 c  Browse to children    s  Add spouse to family  ?  Other menu choices
 n  Create new person     a  Add child to family   q  Return to main menu
_______________________________________________________________________
LifeLines -- Family Browse Screen (* toggles menu)

e Edit the family.

Edit the family's record. LifeLines writes the record to a file and puts you into an editor to edit the file. When you return from the editor, LifeLines asks you to confirm the update; the family is changed only if you do so.

f Browse to father.

Browse to the father/husband of the family, switching to person browse screen. If the father is not there, there is no change.

mBrowse to mother.

Browse to the mother/wife of the family, switching to person browse screen. If the mother is not there, there is no change.

c Browse to children.

Browse to a child in the family, switching to the person browse screen. If the family has more than one child, LifeLines asks you to identify a specific child.

n Create new person.

Create and add a new person to the database. LifeLines creates a record template and puts you into the screen editor to edit the record. When you return from the editor, LifeLines asks you to confirm the operation. If you do, the new person is added to the database. If not, the new person is not added. In both cases the display does not change.

s Add spouse to family.

Add a spouse to the family. LifeLines asks you to identify the new spouse. If the command you ran just before the s command were the n command, LifeLines guesses that the new spouse will be the person just created. LifeLines asks if this is the case, and if so, makes that person the second spouse in the family. If not, LifeLines asks you to identify the other spouse.

a Add child to family.

Add a child to the family. LifeLines asks you to identify the new child. If the command you ran just before the a command were the n command, LifeLines guesses that the new child will be the person just created. LifeLines asks if this is the case, and if so, adds that child to the family. If not, LifeLines asks you to identify the child. If the family already has children, LifeLines also asks where to place the new child in the family.

r Remove spouse from.

Remove a parent/spouse from the family. LifeLines asks you to identify the person, and if you do, removes him or her. The person is not removed from the database.

d Remove child from.

Remove a child from the family. LifeLines asks you to identify the child should, and if you do, removes the child from the family. The person is not removed from the database.

x Swap two children.

Swap (change the chronological order) of any two children in the family. LifeLines asks you to identify the two children and then swaps them.

t Enter family tandem.

This command takes you to the tandem family browse screen. LifeLines asks you to identify a second family, and then takes you to the tandem family screen, displaying both the two families.

b Browse to persons.

Browse to a new person or list of persons. You can identify a person or list by name, by key, or by list name. If you successfully identify a new person or persons you will switch into the person or list browse screens.

z Browse to person.

Zip browse to a new person. LifeLines asks you to identify a person by name or key value, and if you do, browses to that person.

q Return to main menu.

Return to the LifeLines main menu.


TANDEM PERSON BROWSE MODE

The tandem person browse screen displays information about two persons. Its main use it to support the person merging operation. The top two panels show two persons in the format used in the person and list screen displays. The bottom panel gives the menu of available commands. For example:

  person: Thomas Trask WETMORE Sr (25)
  born: 13 March 1866, St. Mary's Bay, Digby, Nova Scotia
  died: 17 February 1947, New London, New London, Connecticut
  father: Daniel Lorenzo WETMORE, b. 1821, N.S., d. 1903, Conn. (48)
  mother: Mary Ann DOTY, b. 1824, N.S., d. 1897, Conn. (59)
  spouse: Margaret Ellen KANEEN, b. 1855, Eng., d. 1900, Conn. (26)
______________________________________________________________________
person: Thomas Trask WETMORE IV (1)
  born: 18 December 1949, New London, New London, Connecticut
  died:
  father: Thomas Trask WETMORE III, b. 1925, Conn. (6)
  mother: Joan Marie HANCOCK, b. 1928, Conn. (7)
  spouse: Luann Frances GRENDA, m. 1970, N.Y. (2)
______________________________________________________________________
Please choose an operation:
 e Edit top person    s Browse top spouse/s   a Add family
 t Browse to top      c Browse top children   j Merge bottom to top
 f Browse top father  b Browse to persons     x Switch top/bottom
 m Browse top mother  d Copy top to bottom    q Return to main menu
______________________________________________________________________
LifeLines - Two Person Browse Screen

e Edit top person.

Edit the top person's record. LifeLines writes the record to a file, and puts you in the screen editor to edit the file. When you return from the editor, LifeLines asks you to confirm the update; the person is changed only if you do so.

t Browse to top.

Switch to the person display with the top person as current person.

f Browse top father.

Replace the top person with his/her father.

m Browse top mother.

Replace the top person with his/her mother.

s Browse top spouse/s.

Replace the the top person with his/her spouse. If the person has more than one spouse, LifeLines asks you to identify one.

c Browse top children.

Replace the top person with one of his/her children. If the person has more than one child, LifeLines asks you to identify the one.

b Browse to persons.

Browse to a new person or list of persons. LifeLines asks you to identify a new person or persons by name, key or list name, and then does as described in the section on identifying a person.

d Copy top to bottom.

Copy the top person into the bottom person. A new person is not created; the same person is displayed twice.

a Add family.

Create a new family record; LifeLines assumes the two displayed persons are to become the spouses/parents in the new family; they must be of opposite sex.

j Merge bottom to top.

Merge the bottom person into the top person. LifeLines combines the two person records and places you in the screen editor to edit the combined record. When you are done, if you confirm the operation, LifeLines removes the bottom person from the database, and the top person is given the combined record. See the section on merging.

x Switch top/bottom.

Swap the two persons in the display.

q Return to main menu.

Return to the LifeLines main menu.


TANDEM FAMILY BROWSE MODE

The tandem family browse screen displays information about two families. Its main use it to support the family merging operation.The top two panels provide information about the two families you are browsing, and the bottom panel holds the menu of available commands. For example:

father: Thomas Trask WETMORE IV (1)
  born: 18 December 1949, New London, New London, Connecticut
mother: Luann Frances GRENDA (2)
  born: 10 July 1949, Pittsburgh, Allegheny, Pennsylvania
married: 1 August 1970, Governors Island, New York, New York
  child: Anna Vivian WETMORE, b. 1974, Alaska (3)
__________________________________________________________________
father: Thomas Trask WETMORE III (6)
  born: 26 October 1925, New London, New London, Connecticut
wife: Joan Marie Hancock (7)
  born: 6 June 1928, New London, New London, Connecticut
married: 5 February 1949, New London, New London, Connecticut
  child: Thomas Trask WETMORE IV, b. 1949, Conn. (1)
__________________________________________________________________
Please choose an operation:            (pg 1/3)
 e  Edit top person       m  Browse to mothers     )b Scroll bottom down
 t  Browse to top         (t Scroll top up         (( Scroll both up
 b  Browse to bottom      )t Scroll top down       ?  Other menu choices
 f  Browse to fathers     (b Scroll bottom up      q  Return to main menu
__________________________________________________________________
LifeLines -- Two Family Browse Screen (* toggles menu)

e Edit top family.

This command lets you edit the top family's record. LifeLines writes the record into a file, and then puts you into an editor to edit that information. When you return from the editor, LifeLines asks you whether you are sure you want to update the family in the database. The family is changed only if you answer yes.

t Browse to top.

Change to the family browse screen with the top family the current family.

b Browse to bottom.

Change to the single family browse screen with the bottom family the current family.

f Browse to fathers.

Change to the tandem person screen with the fathers of the two families as the two persons.

m Browse to mothers.

Change to the tandem person screen with the mothers of the two families as the two persons.

(t Scroll top up.

TODO

)t Scroll top down.

TODO

(b Scroll bottom up.

TODO

)b Scroll bottom down.

TODO

(( Scroll both up.

TODO

)) Scroll both down.

TODO

# Toggle childnos.

TODO

(1-9) Browse to child.

TODO

j Merge bottom to top.

Merge the bottom family into the top family. LifeLines combines the two family records and places you in the screen editor to edit the combined record. When you are done, if you confirm the operation, LifeLines deletes the bottom family from the database, and the top family is given the combined record. See the section on merging.

x Switch top/bottom.

Swap the two families in the display.

[There are some more miscellaneous commands available on the menus.]

q Return to main menu.

Return to the LifeLines main menu.


PEDIGREE BROWSE MODE

The pedigree browse screen displays a four-generation pedigree for the current person. The top panel holds the pedigree, and the bottom panel holds the menu of available commands. For example:

                  John WETMORE [1755-1848] (32)
            Daniel Van Cott WETMORE [1791-1881] (41)
                  Anna VAN COTT [1757-1802] (33)
      Daniel Lorenzo WETMORE [1821-1903] (48)
                  Thomas TRASK [-1836] (81)
            Hannah TRASK [1797-1829] (46)
                  Susannah PORTER [1754-] (82)
Thomas Trask WETMORE Sr [1866-1947] (25)
                  Samuel DOTY [1759-] (501)
            Samuel DOTY [1787-] (74)
                  Hephzibah PORTER [1764-1853] (502)
      Mary Ann DOTY [1827-1897] (59)
                  Nathan SAVERY [1748-1826] (510)
            Lydia SAVERY [1806-] (75)
                  Deidamia SABEAN [1765-1845] (511)
__________________________________________________________________
Please choose an operation:
 e Edit the person   m Browse to mother    g Browse to family
 i Browse to person  s Browse to spouse/s  b Browse to persons
 f Browse to father  c Browse to children  q Return to main menu
__________________________________________________________________
LifeLines - Pedigree Browse Mode

e Edit the person.

Edit the current person.

i Browse to person.

Change to the person display mode with the current person.

f Browse to father.

Browse to the father of the current person, shifting the pedigree one generation back. If the father is not in the database, there is no change.

m Browse to mother.

Browse to the mother of the current person, shifting the pedigree one generation back. If the mother is not in the database, there is no change.

s Browse to spouse/s.

Browse to a spouse of the current person, shifting the display to the pedigree of that person. If the current person has more than one spouse, LifeLines asks you to identify the spouse; if the person has no spouse there is no change.

c Browse to children.

Browse to a child of the current person, shifting the pedigree one generation forward. If the current person has more than one child, LifeLines asks you to identify the child; if the person has no children there is no change.

g Browse to family.

Change to the family display; the family will be the one that the current person belongs to as spouse or parent. If there are more than one, LifeLines asks you to identify the proper one.

b Browse to persons.

Browse to another person or list of persons; if you identify a single person the display remains in the pedigree display; if you identify more than one person the display changes to the list browse mode.

q Return to main menu.

Leave the pedigree browsing mode and return to the main menu.


SEARCH MENU

If you choose Search database from the main menu, LifeLines displays the search menu:

How would you like to find a record?
  v Review visit history (12 records)
  c Review change history (3 records)
  f Full database scan
  q Return to previous menu
The first two items will depend on your previous activity. If you have browsed to individuals or family records in the database, the first item will appear similar to what's shown above, if you haven't it will just contain a note that the visit history is empty. The second item will appear similar to what's shown above if you have changed individual records in this session with LifeLines, otherwise it will contain a note that the change history is empty.

Selecting a non-empty visit history or change history will bring up a list of individuals (or families) that are in the history, allowing you to browse to that individual or family.

If you choose Full database scan off the search menu, LifeLines displays the fullscan menu.

What scan type?
  f  Full name scan
  n  Name fragment (whitespace-delimited) scan
  r  Refn scan
  q  Return to previous menu
The first two items on this menu allow you to search all the NAME records in the current database. If you choose Full name scan you are prompted for a search pattern and then LifeLines searches for all the individual NAME records whose value matches the pattern supplied. If you choose the Name fragment scan, you will be prompted for a search pattern and then LifeLines will search for whitespace delimited words within individual NAME records that match the pattern supplied.


Search Patterns

The pattern supplied to the search commands is used to match against the names in the database. The following characters have special meaning when used in a pattern:

?Matches any single character
* Matches zero or more occurrences of any character
SUB a control Z (^Z) is similar to '*', this matches zero or more occurences of any characters other than '.'. (of course you probably can't type this on unix)
[ab] A set of characters enclosed in square brackets matches the single characters listed between the brackets. If the dash '-' character is to be included, it must immediately follow the opening bracket '['. If the closing bracket ']' character is to be included, it must be preceded by a quote '`'.
[a-z] Matches a single character in the range 'a' to 'z'. Ranges and sets may be combined within the same set of brackets.
!R Matches a single character not in the range 'R'. If range 'R' includes the dash '-' character, the dash must immediately follow the '!'.
! Makes the following pattern match any string except those what it would normally match.
QUOTE (On DOS this is `, on UNIX it is \) Makes the next character a regular (nonspecial) character. Note that to match the quote character itself, it must be quoted. Note that this character must be escaped if used within string constants ("\\").

Upper and lower case alphabetic characters are considered identical, i.e., 'a' and 'A' match each other. (What constitutes a lowercase letter depends on the current locale settings.)

Spaces and control characters (other than control z) are treated as normal characters,

As an example, consider the following NAME record:

1 NAME John /Smith/
When doing a full name search, the value searched is the complete gedcom name value including the slashes used to delimit the surname. in order to have a match, the search pattern must match the slashes. Thus

*smith
will not match this name, whereas

*smith/
will match.

When doing a name fragment search, the slashes are removed from the surname before trying to match the name, thus

smith
smi*
joh*
*hn
will all match this NAME record.


ADD OPERATION

If you choose the add operation from the main menu, LifeLines displays the add menu:

What do you want to add?
  p Person - add new person to the database
  f Family - create family record from one or two spouses
  c Child - add a child to an existing family
  s Spouse - add a spouse to an existing family
  q Quit - return to the previous menu

These operations work in a straightforward way. LifeLines asks you the necessary questions, and lets you cancel at any time. The operations provided by this menu are also available from the browsing modes, and are often easier to perform there.


DELETE OPERATION

If you choose the delete operation at the main menu, LifeLines displays the delete menu:

What do you want to delete?
  c Child - remove a child from his/her family
  s Spouse - remove a spouse from a family
  p Person - remove a person completely
  q Quit - return to the previous menu

These operations also work in a straightforward way. LifeLines asks you the necessary questions and lets you cancel at any time.

You may also remove a child from his/her family, or remove a spouse/parent from his/her family, from the person browsing mode. In both cases, only a relationship is removed, not a person. On the other hand, the delete menu must be used if you want to completely remove a person from the database; this cannot be done from the browsing mode.

There is no special operation for removing a family record. LifeLines silently removes any family record that has no parent or child associated with it.


CODESET CONVERSION

(This section was previously entitled CHARACTER TRANSLATION.)

The intention is that you need only specify the internal codeset for each database you create (and this step may be automated via the NewDbProps property), and all else works pretty well without tuning. That is, lifelines tries to guess the correct codeset for your environment (including guessing the console and windows codesets when operating under MS-Windows, which it should do fairly well).

However, you may encounter situations where you wish to alter the codeset behavior, or the codeset conversion is not operating correctly (in which case we hope you will report the problem to the mailing list and/or sourceforge bugs list).

There are two ways to amend codeset conversion. The first method is by changing configuration variables. For example, if you wish to generate an HTML report of all your data, which includes names in Russian (in Cyrillic letters), for your cousin, and you know that your cousin's computer has no font for Cyrillic letters, you might wish to temporarily adjust your report output codeset so that you will get interpolated ASCII letters for the Russian letters. You could do this by temporarily altering the configuration variable ReportCodesetOut to be "ASCII" (actually, if any of your data has characters in it that are reserved in HTML, such as the less than sign, or the ampersand, you would probaby want "ASCII//HTML").

The second way to change codeset conversion, and the only way in lifelines 3.0.6, is to edit the embedded character translation tables, in which you actually specify the letters you want converted, letter by letter, and how you want them converted. This method, unlike the first, even works in databases with no specified internal codeset.

If you choose the modify character translation tables operation from the main menu, LifeLines displays the character translation menu:

Which character mapping do you want to edit?
   e Editor to Internal mapping
   m Internal to Editor mapping
   i GEDCOM to Internal mapping
   x Internal to GEDCOM mapping
   d Internal to Display mapping
   r Internal to Report mapping
   q Return to main menu

LifeLines can do codeset conversion in changing text from one form to another, and lifelines supports five different forms.

internal

for records in the database

editor

for records being edited

display

for records being displayed

report

for records written to output file

GEDCOM

for records read in from or written out to GEDCOM

When converting text from one form to another LifeLines normally uses iconv conversion, and codesets specified in configuration variables. This may be augmented by codeset translation or extension using the text conversion (*.tt) files in the tt subdirectory. To use the tables in the tt subdirectory, you need to set the property "TTPATH" in your LifeLines configuration file to the path of the tt directory. There are two types of files in this directory.

Files of the form <codeset>_<codeset1>.tt convert from one codeset to another. For example, CP1250_UTF-8.tt can be used to convert characters in codeset CP1250 to their representations in UTF-8.

Files of the form <codeset>__<subcodeset>.tt apply a conversion within the codeset, for example, UTF-8__html.tt is a sub-conversion that converts UTF-8 characters that have special escape codes within html to those special codes. For example, specifing the report codeset to be UTF-8//html will apply the html sub-conversion to all the data being written. Probably not what you really wanted. See the report language function convertcode() in the reportmanual for details.

If your system lacks iconv, or you need more specialized conversion than provided with iconv, you may either write a text conversion file (a tt file), or you may edit one of the in-database translation tables.

The in-database translation tables convert between forms (as listed above). Every translation table converts either to the internal form, or from the internal form. That is, the internal form is used as an intermediate step in all operations. There are six supported translation tables. The following table shows the six tables and describes when they are applied:

internal to editor

when converting from internal, database form to editor form

editor to internal

when converting from editor form back to internal, database form

GEDCOM to internal

when reading GEDCOM input records and writing them to database

internal to GEDCOM

when writing internal database records to external GEDCOM file

internal to display

when displaying a record in a browsing mode display screen

internal to report

when writing internal database records to external report file

After you select a translation table you are placed in the editor to edit the table. Translation tables are made up of lines that look like:
pattern pattern
where a tab separates the patterns. Each pattern is an arbitrary sequence of verbatim ASCII characters and escape sequences. Translation occurs by finding all occurrences that match left patterns and replacing them with the corresponding right patterns.

There are five escape mechanisms used in patterns:

#nnn

nnn is a decimal character value

$hh

hh is a hexadecimal character value

\ #

represents the # character

\$

represents the $ character

\\

represents the \ character

It is possible, and desirable, to provide a short name for the translation table, using the "##!name: " command. An example would be


##!name: UTF-8 to latex

Naming the translation table is desirable because these names are displayed, at least in part and if they fit, on the translation table menu.

It is possible to format the file using a character other than tab as the separator between source and destination code. To do requires using the "##!sep" command. Those exact six characters must begin the line, and then the next character is the new separator for all following lines. For clarity, this should only occur once, and near the top of the file before any actual translation lines, and a fairly clear separator should be used (e.g., the equal sign "=").

Any line which is blank, or which begins with two hash marks (##), is ignored. Therefore, comments begin with two hash marks.

For advanced users, it is possible to mix different types of conversion, for example iconv conversion and also translation table conversion, in the same form step. For example, it is possible to convert internal database text (internal form) first via the "internal to GEDCOM" in-database translation table, and then via the iconv conversion from configured internal codeset to configured GEDCOM codeset. In-database translation tables are always applied in the internal codeset, so when converting to the internal form, they are applied after iconv and/or tt conversions, and when converting from internal form, they are applied first.

An example of adding a mixin in-database translation table might be to escape certain characters which are control characters to an output computer language, e.g., latex. One could create an "Internal to Report" mapping in UTF-8 (if the database is internally UTF-8) to escape any characters that may occur in place names or textual descriptions and inadvertently cause grief in latex processing.

However, in this case, one could also write a tt file to achieve the same results, and be shared across databases, by naming it, eg, UTF-8__latex.tt. The double underscore ("__") signifies that this is a conversion to be applied to text which is in UTF-8, and to trigger lifelinesn to use this, one must specify a report codeset such as "UTF-8//latex" (if UTF-8 output is desired, but with the latex conversion first applied), or "ISO-8859-1//latex" (if ISO-8859-1 output is desired, but with the latex conversion first applied).


MISCELLANEOUS UTILITIES

If you choose the miscellaneous utilities operation, LifeLines displays the utilities menu:

What utility do you want to perform?
  s Save the database in a GEDCOM file
  r Read in data from a GEDCOM file
  R  Pick a GEDCOM file and read in
  k Find a person's key value
  i Identify a person from key value
  d Show database statistics
  m Show memory statistics
  e Edit the place abbreviation file
  o Edit the user options file
  c  Character set options
  q Return to the main menu

s Save the database in a GEDCOM file.

This command saves the complete LifeLines database in a GEDCOM file. All person, family, event, source and user-defined records are stored. This command may be used to periodically back up your database. When you use this command, LifeLines asks you for the name of the file. If you have defined the LLARCHIVE shell variable, LifeLines will store the file in the directory named in the variable.

r Read in data from a GEDCOM file.

This command allows you restore a complete database from a GEDCOM file. When you select this command, LifeLines asks you for the name of the GEDCOM file. This command can also be used to import data from a GEDCOM file to an existing database. When LifeLines performs this command, it first reads the entire GEDCOM file and checks it for validity. If there are problems in the file, LifeLines describes them, writing them to the file err.log, and does not add any records to the database. If there are no problems, LifeLines adds all the records found in the file to the database (only header and trailer records are not stored in the database).

Normally, LifeLines will replace the XREF's (the identifiers for individuals, families, sources, notes, etc.) in the GEDCOM with its own. These identifiers are reserved by the GEDCOM for internal use of genealogy programs. However, if the identifiers are compatible with LifeLines internal representation and there are no conflicts with existing identifiers, LifeLines will ask you if you want to perserve the identifiers in the GEDCOM file rather than assign new values.

k Find a person's key value.

This command finds the internal key value of a person.

i Identify a person from key value.

This command identifies the person that has a particular internal key value.

d Show database statistics.

This command summarizes the contents of the current database. It displays the number of person, family, source, event and other records in the database.

m Show memory statistics.

This command is used by the author for debugging.

e Edit the place abbreviation file.

This command allows you to edit the place abbreviations file. This file defines the abbreviations that are used by LifeLines when it creates lists of persons for you to select from. Each line in the file has the format:
word:
     abbr 
where word is a word to be abbreviated, and abbr is its abbreviation. The word and its abbreviation are separated by a colon. For example:

Example 9. Example of using abbreviations

Connecticut:Conn.
Massachusetts:Mass.
Nova Scotia:N.S.

When LifeLines constructs lists of persons for you to select from, it looks up the last component of certain PLAC lines in this file, and if it finds that component, replaces it with its abbreviation.

o Edit the user options file.

This command allows you to edit the user options file. The user options file is a record kept in the database that holds user selectable options. Each option has a name and a string value. Each line in the options file has the format:
option=value
where option is the name of an option and value is the option's string value. If the value is more than one line long, then the last character in each non-final line must be a backslash. The escapes \n and \t are also recognized in version 3.0.7 and better (to represent a carriage return and a tab, respectively). These (\n and \t) are primarily for use in custom record templates. In version 3.0.14 there are 39 options. Note that all of these may also be specified in the configuration file, to apply to all databases, but if specified in both places, the entry in the database (user options table) governs. For more information, see the sample configuration file; each option is preceded by a brief explanation.

The list of options can be found in the section 'System and User Properties' below.

For example if you would like to replace the default person record template with the following:

Example 10. Example of replacing the default person record template


  0 INDI
  1 NAME //
  1 SEX
you would edit the user option file to contain:

Example 11. Example of replaced default person record template

INDIREC=0 INDI\
  1 NAME //\
  1 SEX

or, using the \n escape so as to keep the entry on one line:

Example 12. Example of replaced single line default person record template

INDIREC=0 INDI\n1 NAME //\n1 SEX

q Return to main menu.

This command returns you to the main menu.


IMPORT ERRORS

Errors generated during a GEDCOM import are logged to a file, by default named errs.log.

A number of errors are related to having an incorrect XREF value. An XREF is the internal name used to Identify a family, individual, note, source or other record. An XREF is bracked by two @ signs. As an example

  0 @F6@ FAM
  1 HUSB @I25@
  1 WIFE @I26@
  1 CHIL @I17@

Here F6 is the internal name of this family. The family refers to other individuals by specifing their XREF values. Also I25, I26 and I17 are XREF values of individuals.

XREF values used within LifeLines are totally under the control of LifeLines. The values that are used are always of the form, a single letter, followed by a number. However, when importing a gedcom LifeLines should accept almost anything as an XREF, converting it to what is needed for internal use. For the curious, the letters that LifeLines uses are I for Individual, F for Family, S for Source, E for Events, and X for other records.

Bad NAME syntax.

A level 1 NAME record must have a value, and the value must not be a pointer, and may have no more than two slashes.

Example 13. Example of bad NAME syntax (too many slashes in this case)

  0 @I99@ INDI
  1 NAME Mary /Smith/ nee /Jones/
Family F13 has an incorrect key.

Person XYZ has an incorrect key: skipped.

The XREF values must be unique. These error messages are generated if a XREF is found to refer to two different records. For example, the XREF for a family is the same as one for an individual.

Example 14. Example of XREF XYZ being defined twice

  0 @XYZ@ INDI
  1 NAME Mary /Smith/ nee /Jones/
  0 @XYZ@ FAM
  1 HUSB @I48@
Person defined here has no name.

Each INDI record must have at least one level 1 NAME record, if the configuration option RequireNames is non-zero.

Person INDI_XYZ is multiply defined: skipped.

No XREF value of an INDI may be reused. This message indicates that INDI_XYZ has been used to identify two different persons.

Example 15. Example of person multiply defined

  0 @INDI_XYZ@ INDI
  1 NAME John /Smith/
  0 @INDI_XYZ@ INDI
  1 NAME Jack /Smith/
The family defined here has no key.

Each FAM record must have an XREF value. (The XREF is the letters between "0" and "FAM".)

Example 16. Example of family record missing key

  0 FAM
  1 HUSB @I1@
Family F123 is referred to but not defined.

A FAMS or FAMC record on an Individual refers to a family but there is no FAM record with that XREF.

The person defined here has no key: skipped.

Each INDI record must have an XREF value. (The XREF is the letters between "0" and "INDI".)

Example 17. Example of person record missing key

  0 INDI
  1 NAME John /Smith/
This line has a level number that is too large.

A child level must be one higher than its parent level.

Example 18. Example of level number which is too high

  0 @I99@ INDI
  1 NAME //
  3 NOTE name is missing
This FAMS line is missing a value field (INDI I99).

Lineage-linking tags must have a value, including tags FAMC, FAMS, FATH, MOTH, HUSB, WIFE, CHIL.

Example 19. Example of lineage-linking line which is missing required value

  0 @I99@ INDI
  1 NAME John /Smith/
  2 FAMS

HANDLING SOURCE, EVENT AND USER-DEFINED RECORDS

LifeLines supports source, event and other, user-defined record types. You can access these features in two ways: either through the x operation from the main menu, or via commands in the individual and family browse screens. The first approach might be most convenient when you are solely working with these record types. The second makes it easier to work with source, event and user-defined records in parallel with your person and family records; this can be useful for instance when you want to create references from your person and family record to your source, event and user defined records as you create them, and to view and edit records that you have referenced from within a person or family record.

Using the first of these two possibilities LifeLines displays the following menu:

What activity do you want to perform?

  s  Browse source records
  e  Browse event records
  x  Browse other records
  1  Add a source record to the database
  2  Edit source record from the database
  3  Add an event record to the database
  4  Edit event record from the database
  5  Add an other record to the database
  6  Edit other record from the database
  q  Return to main menu
Using the second variant (from the person and family browse screens), the following six commands are available. The first three are described alongside with their counterparts in the x menu (they do mostly, but not entirely, the same things); the last three are described separately:

  %s  Add source
  %e  Add event
  %o  Add other

  $s  List sources
  $n  List notes
  $$  List references

The handling of source, event and user-defined records in LifeLines is still in development. For example, sources cannot yet be searched by REFN or be deleted.

s Browse source records.

This will bring up a list of all source records by number, showing REFN, title, and author for each. A record may be selected from this list to edit.

e Browse event records.

This will bring up a list of all event records by number. As of yet this does not display any information about each event. (Suggestions as to how to summarize events are welcome). A record may be selected from this list to edit.

x Browse other records.

This will bring up a list of all other records by number, showing the 0 level line as summary. A record may be selected from this list to edit.

1 Add a source record to the database.

This operation (or alternatively %s from the person, family or auxiliary browse screens) is used to add a new source record to the database. LifeLines creates a template source and puts you in the screen editor to edit the template. The default template is:
  0 SOUR
  1 REFN
  1 TITL Title
  1 AUTH Author

Do not change the 0 SOUR line. Otherwise you may edit this record any way you like. The 1 REFN line is a special line you can use to give the source a symbolic name that can be used in other records to refer to the source record. See the section on using REFN values. Because many sources have a title and an author, the default template has these lines. You may adjust the source template via the SOURREC user option (either at the database level, via the user options, or globally, via the configuration file). Here is how I recorded one of the sources in my database:

Example 20. Example of a source record

0 SOUR
  1 REFN jcw
  1 TITL The Wetmore Family of America, and its Collateral Branches: with
    2 CONT Genealogical, Biographical, and Historical Notices
  1 AUTH James Carnahan Wetmore
  1 PUBL
    2 DATE 1861
    2 PLAC Albany, New York
    2 INST Munsell and Rowland
    2 ADDR 78 State Street

The add source command in the x menu is equivalent to the %s command available in the person or family browse screen, in terms of entering the source record; after saving the source record though, there is one significant difference, in that that you then are presented with the following prompt (also, the key value of the new record is displayed in the status bar at this point):


Please choose from the following options:
  1: Insert xref automatically at bottom of current record.
  2: Edit current record now to add xref manually.
  3: Browse new record (without adding xref).
  4: Return to current record (without adding xref).

 Commands:   j Move down     k Move up    i Select     q Quit

The four options perform the following actions:

1: LifeLines adds a reference to the new source record at the bottom of the person or family record that was visible in the display screen when you prompted LifeLines to create the new source record.

2: LifeLines will open the person or family record that was visible in the display screen when you prompted LifeLines to create the new source record, so that you can manually enter a reference to the newly created source record (perhaps as a source reference to an event that you are planning to add).

3: LifeLines lets you browse (and optionally reopen for editing) your newly added source record.

4: You are returned to the person or family record that was visible in the display screen when you prompted LifeLines to create the new source record. No reference is added to the new record.

2 Edit source record from the database.

Use this operation to edit an existing source record already in the database. When you select this operation LifeLines asks you to identify a source:

Which source record do you want to edit?
enter key or refn:

Identify a source by entering its key value, with or without the leading S, or by entering its REFN value. LifeLines retrieves the record and puts you in the editor with the record.

3 Add an event record to the database.

This operation (or alternatively %e from the person, family or auxiliary browse screens) adds a new event record to the database. LifeLines creates a template event and puts you in the screen editor to edit the template. The default template is:
0 EVEN
  1 REFN
  1 DATE
  1 PLAC
  1 INDI
    2 NAME
    2 ROLE
  1 SOUR

You may adjust the event template via the EVENREC user option (either at the database level, via the user options, or globally, via the configuration file).

Do not change the 0 EVEN line. Otherwise you may edit this record any way you like. The 1 REFN line allows you to give this event a symbolic name you can use when you want to refer to this event from other records. See the section on using REFN values. The default template suggests that an event has a date, a place, and refers to persons in roles with respect to the event. There is far less experience with event-based GEDCOM than there is with simple person and family GEDCOM. You may even be wondering why you would need event records when you can simply tuck events away in person and family records. This is a topic that may get covered in an appendix.

The add event command in the x menu is equivalent to the %e command available in the person or family browse screen, in terms of entering the event record; after saving the event record though, there is one significant difference, in that that you then are presented with the following prompt (also, the key value of the new record is displayed in the status bar at this point):


Please choose from the following options:
  1: Insert xref automatically at bottom of current record.
  2: Edit current record now to add xref manually.
  3: Browse new record (without adding xref).
  4: Return to current record (without adding xref).

 Commands:   j Move down     k Move up    i Select     q Quit

The four options perform the following actions:

1: LifeLines adds a reference to the new event record at the bottom of the person or family record that was visible in the display screen when you prompted LifeLines to create the new event record.

2: LifeLines will open the person or family record that was visible in the display screen when you prompted LifeLines to create the new event record, so that you can manually enter a reference to the newly created event record.

3: LifeLines lets you browse (and optionally reopen for editing) your newly added event record.

4: You are returned to the person or family record that was visible in the display screen when you prompted LifeLines to create the new event record. No reference is added to the new record.

4 Edit event record from the database.

Use this operation to edit an existing event record from the database . When you select this operation LifeLines asks you to identify an event:

Which event record do you want to edit?
enter key or refn:

You identify a event by entering its key value, with or without the leading E, or by entering its REFN value. LifeLines retrieves the record and places you in the screen editor with the record.

5 Add an other record to the database.

This operation (or alternatively %o from the person, family or auxiliary browse screens) adds a new user-defined record to the database. LifeLines creates a template and puts you in the screen editor to edit the template. The default template is
0 XXXX
1 REFN

Replace XXXX with the tag string you select for the type of the new record. You are free to choose any tag value except INDI, FAM, SOUR and EVEN. For example, if you keep record information about the ships that your North American immigrant ancestors arrived on, you would keep records about those ships in your database; the tag SHIP suggests itself for such records. The 1 REFN line allows you to give this record a symbolic name you can use when you want to refer to it from other records. See the section on using REFN values. You may adjust the other template via the OTHR user option (either at the database level, via the user options, or globally, via the configuration file).

The add other record command in the x menu is equivalent to the %o command available in the person or family browse screen, in terms of entering the other record; after saving the record though, there is one significant difference, in that that you then are presented with the following prompt (also, the key value of the new record is displayed in the status bar at this point):


Please choose from the following options:
  1: Insert xref automatically at bottom of current record.
  2: Edit current record now to add xref manually.
  3: Browse new record (without adding xref).
  4: Return to current record (without adding xref).

 Commands:   j Move down     k Move up    i Select     q Quit

The four options perform the following actions:

1: LifeLines adds a reference to the new other record at the bottom of the person or family record that was visible in the display screen when you prompted LifeLines to create the new other record.

2: LifeLines will open the person or family record that was visible in the display screen when you prompted LifeLines to create the new other record, so that you can manually enter a reference to the newly created other record (perhaps as a note reference to an event that you are planning to add).

3: LifeLines lets you browse (and optionally reopen for editing) your newly added other record.

4: You are returned to the person or family record that was visible in the display screen when you prompted LifeLines to create the new other record. No reference is added to the new record.

6 Edit other record from the database.

Use this operation to edit an existing user-defined record from the database. When you select this operation LifeLines asks you to identify the record:

What record do you want to edit?
enter key or refn:

You identify a record by entering its key value, with or without the leading X, or by entering its REFN value. LifeLines retrieves the record and places you in the screen editor with the record.

$s List sources

This command is available in the person and family browse screens. It will bring up a list of all source records that are referenced within the currently displayed person or family record, by the order they appear in the person/family record, showing REFN, title, and author for each. A record may be selected from this list to view in the auxiliary browse screen (and optionally be edited from there).

$n List notes

This command is available in the person and family browse screens. It will bring up a list of all note records that are referenced within the currently displayed person or family record, by the order they appear in the person/family record, showing REFN, title, and author for each. A record may be selected from this list to view in the auxiliary browse screen (and optionally be edited from there).

$$ List all references

This command is available in the person and family browse screens. It will bring up a list of all records that are referenced within the currently displayed person or family record, by the order they appear in the person/family record, showing REFN, title, and author for each. A record may be selected from this list to view in the auxiliary browse screen (and optionally be edited from there).


FAMILY STRUCTURE AND MERGING PERSONS AND FAMILIES

LifeLines 3.0.2 has relaxed most of restrictions on family structure that were imposed by earlier versions. For example, a family record may have more than one parent/spouse of the same sex; a person may be a child in more than family. This is a controversial issue. Some users insist that family relationships should imply biological relatedness, and that all other relationships should be handled by different means. Others insist that non-traditional families (any number of parents/spouses of any sex) should be allowed, and that children can be members of more than one family (eg, natural family and adoptive family). LifeLines no longer takes a position on this matter; you are free to set up families any way you like; the operations that add spouses and children to families no longer check for non-traditional arrangements. It is possible that a future release will include a user option to either disallow or to ask for confirmation about non-traditional relationships.

LifeLines provides features for merging persons together and for merging families together. The person merging feature is accessed from the tandem person browse mode, and the family merging feature is accessed from the tandem family browse mode. You browse to the two persons or families you want to merge and then use the j command. Merging is necessary when you discover that two or more person records, or two or more family records, represent the same person or family, respectively.

Versions of LifeLines prior to 3.0.2 required that persons and families meet certain criteria before they could be merged. The criteria ensured that the merged persons and families would still meet traditional family structuring rules. With the relaxation of the structuring rules, restrictions on merging have also been removed. It is now possible to create non-traditional relationships by merging traditional persons and/or families. For example, if you merge two persons that happen to be children in two different families, the merged person will be a child in both families. If you want to maintain only traditional relationships in your database you may have to makes further to changes to relationships after you complete a merge operation.


LINKING RECORDS TOGETHER AND USING THE REFN FEATURE

Records in a LifeLines database may refer to other records via cross-reference links. The lineage-linked references are maintained directly by LifeLines through operations found in the browsing mode menus. These references are the links from a person to families (1 FAMC and 1 FAMS), and the links from a family to persons (1 HUSB, 1 WIFE and 1 CHIL). Because LifeLines maintains these links you are not allowed to change these lines when you are editing records. There are a couple of seeming exceptions to this rule. For example, you may change the order of 1 CHIL lines in a family record in order to change the order of children in a family, and you may change the order of 1 FAMS lines in a person record to change the order of families the person was a spouse or parent in. These operations are allowed because they don't affect which person records refer to which family records and vice versa.

Besides the lineage-links that are maintained by LifeLines, you may place your own links in records. Probably the most common example of this is referring events within a person record to the record of the information source for the event. For example:

Example 21. Example of referring events from a person record

0 @I23@ INDI
  1 NAME Thomas/Whitmore/
  1 BIRT
    2 DATE about 1615
    2 PLAC England
    2 SOUR @S3@
...
0 @S3@ SOUR
  1 REFN cat
  1 TITL New England Marriages Prior to 1700
  1 AUTH Clarence Almon Torrey
...

The 2 SOUR @S3@ line in the person record refers to the source record. LifeLines allows any specific structure within a record (in this case a birth event) to refer to another record. It is not possible to refer to a specific location within another record, though this may be supported eventually.

This example implies that when linking one record to another you must know the key of the target record (S3 in the example). This is not desirable because internal record keys may change when the records are exported from one database or imported to another.

Because internal key values are not permanent, LifeLines allows you to assign a permanent user-defined key to any record in the database using the 1 REFN line. The value of this line is a string that you choose as your permanent key value for the record. When adding a link to a record that has a user REFN key value, you may use that value instead of the internal key value. For example, when adding the person in the previous example you could edit the new record as follows:

Example 22. Example of adding a new person

0 INDI
  1 NAME Thomas/Whitmore/
  1 BIRT
    2 DATE about 1615
    2 PLAC England
    2 SOUR <cat>

Instead of using the actual key value of the source, S3, the REFN value cat was used. The REFN value must be enclosed by angle brackets when used this way. LifeLines automatically replaces the REFN link with the proper internal key value when the record is stored in the database.

The REFN value may also be used when searching for person, source, event and user-defined records. You should not add more than one REFN line to a record, and every REFN value should be unique.


System and User Properties

There are a number of properties that can be specified to customize the behavior of LifeLines. These properties can be specified in LifeLines configuration files, in each LifeLines database or in some cases by environment variables.

System Properties are properties that have a predefined meaning to lifelines, such as LLEDITOR (see its meaning below). User Properties typically have no predefined meanings as they are simply a string that a report looks up in the property tables. It can be anything a user desires. To simplify report writing a number of User Properties are predefined with specific meanings. These User Property Names begin with 'user.' and are listed below. For example, many reports have abstracted the concept of the user's name to the property user.fullname. By defining this property in your llines startup file, it allows a report to reference your name as the source of the data being printed without having it hard-coded in the report.

When LifeLines begins execution, it reads any specified configuration files and extracts Properties from the files read. It is possible for multiple configuration files to be read. Properties defined in these files will be stored in the global property table. If multiple definitions of the same property are seen, the latest definition overrides prior definitions. Configuration files are read as follows:

Note: If a configuration file defines LLCONFIGFILE, it is not entered in the global table, but the value of this parameter is read as a configuration file after completion of reading the current file.
Note: In the following, the name of a user configuration file is listed as .linesrc. On windows versions of lifelines this name is lines.cfg.
1 If a configuration file name is passed to the program with the -C option, or if LLCONFIGFILE is defined as an environment variable use the value supplied as the name of the configuration file. Do not read configuration information from the files listed in 2a, 2b, 2c, or 2d.
2a If the file /etc/lifelines.conf exists, read it. '/etc' is a placeholder for the standard location for system configuration files as defined when lifelines was built. It is often /etc or /usr/local/etc.
2b. If the file $HOME/.linesrc exists, load parameters from it.
2c. If the file .linesrc exists in the current directory read parameters from it.
2d If LLCONFIGFILE is defined in the command line or database table and its value is the name of a file, load parameters from that file.

When LifeLines searches for a property it looks for it as follows:

cmdline table

First, LifeLines looks in the cmdline table. This table contains the values that have been specified using the -I option to LifeLines.

database table

Next, LifeLines looks in the database table. This table contains the values which have been stored in the current database.

global table

Next, LifeLines looks in the global table. This table contains the values found when reading in the configuration files.

environment table

Finally, LifeLines looks in the environment table. Only a handful of properties may be set from the environment, namely LLPROGRAMS, LLREPORTS, LLARCHIVES, LLDATABASES, and LLEDITOR.

Properties are named group.subgroup.property or group.property, or even just property. The following keys are available at the moment:

LLPROGRAMS

LLPROGRAMS is the search path for LifeLines report generating and other programs.

LLREPORTS

LLREPORTS is used to select a directory where all generated reports and program outputs will be placed.

LLARCHIVES

LLARCHIVES is used to select a directory where all database backup files will be stored

LLDATABASES

LLDATABASES is a list of directories that contain database directories used to locate database directories themselves

LLNEWDBDIR

LLNEWDBDIR a single directory where new databases specified without paths will be created. This is a convenience for users who generally put all their databases under a single common directory.

LLEDITOR

Overrides the default screen editor

Codeset Information:

For the following parameters related to codeset, the values are a String denoting code set in use in data. Special handling is provided for UTF-8, which may be entered as "UTF-8", "utf-8", or "65001". (The official, and preferred, name is UTF-8.

codeset

Is a property that report programs can read whose value is the codeset of the current database.

GedcomCodeset

Specifies the default Codeset to use when processing Gedcom files. There are actually 3 properties. GedcomCodesetOut and GedcomCodesetIn can be used to specify the codeset for output or input. If either of these is not specified GedcomCodeset is used. Most Gedcom files should contain a codeset property, so this is not usually relevant when reading a Gedcom file, unless the input Gedcom file lacks a codeset property. This is used, however, when writing out a Gedcom file. NB: This is ignored if the database has no internal codeset specified.

EditorCodeset

Specifies the codeset to use for editing. There are actually 3 properties. EditorCodesetOut and EditorCodesetIn can be used to specify the codeset for output or input. If either of these is not specified EditorCodeset is used. This property allows lifelines to convert from its internal codeset to the one you use in your editor, so this is important when your editor does not use the same codeset as your database. NB: This is ignored if the database has no internal codeset specified.

ReportCodeset

Specifies the codeset to use for reports. There are actually 3 properties. ReportCodesetOut and ReportCodesetIn can be used to specify the codeset for output or input. If either of these is not specified ReportCodeset is used. Recently created reports may actually specify their codeset, in which case this is not used, but for reports which do not include a specification of codeset, the ReportCodesetIn (or ReportCodeset) specifies how the report will be understood. In any case, the output of a report program will be written in the codeset given by ReportCodesetOut (or ReportCodeset). NB: This is ignored if the database has no internal codeset specified.

GuiCodeset

Specifies the codeset to use for interaction with the graphical user interface. There are actually 3 properties. GuiCodesetOut and GuiCodesetIn can be used to specify the codeset for output or input. If either of these is not specified GuiCodeset is used.

LongDisplayDate

Six comma separated numbers. Specifing the format for days, months, years, date format, era format, and complex format. If string does not contain 6 comma separated numbers all formats are set to 0, except date format is set to 14. These formats are used by LifeLines to display dates in long format.

LongDisplayDatePic

a custom ymd date picture. A string in which %y, %m and %d will be converted to the corresponding year, month and day. This picture is used by LifeLines to display dates in long format.

ShortDisplayDate

Six comma separated numbers. Specifing the format for days, months, years, date format, era format, and complex format. If string does not contain 6 comma separated numbers all formats are set to 0, except date format is set to 14. These formats are used by LifeLines to display dates in short format.

ShortDisplayDatePic

a custom ymd date picture. A string in which %y, %m and %d will be converted to the corresponding year, month and day. This picture is used by LifeLines to display dates in short format.

LocaleDir

run-time specification of locale directory

NewDbProps

if specified, properties to add to a newly created database. The string is of the form "option1=value1\noption2=value2".

IllegalChar

Apparently not used at this time.

DenySystemCalls

If set to a non-zero value will disable use of the system function.

UiLocaleCollate

ui collating sequence

UiLocaleMessages

ui messages locale

RptLocaleCollate

Report Collating Sequence

RptLocaleMessages

Report Messages Locale

ShortOmitString

If defined this string replaces characters at the end of an event being printed.

DisplayKeyTags

If set to 1 an i or f is prepended to individual and family keys when shown on-screen.

AnnotatePointers

If set to 1 a descriptive comment is added to pointers when editing family or individual records to help identify who is being refered to. These tags are removed when the edit is finished and not stored in the database.

TTPATH

list of directories to search for translation table files (*.tt)

TTPATH.debug

if defined, LifeLines outputs debug information related to translation table processing.

InputPath

path to look for in when reading in gedcom files

INDIREC

The default template to use whenever creating a new individual. If not specified, the concatenation of the following is used:

"0 INDI\n1 NAME Fname/Surname\n1 SEX MF\n"
"1 BIRT\n  2 DATE\n  2 PLAC\n"
"1 DEAT\n  2 DATE\n  2 PLAC\n1 SOUR\n"

FAMRECBODY

The default template to use whenever creating a new family. If not specified, the following is used:

"1 MARR\n  2 DATE\n  2 PLAC\n  2 SOUR\n"
Note: Unlike the others, this should not include the 0 level FAM tag.)

SOURREC

The default template to use whenever creating a new source. If not specified, the following is used in english:

"0 SOUR\n1 REFN\n1 TITL Title\n1 AUTH Author"

EVENREC

The default template to use whenever creating a new event. If not specified, the following is used in english:

"0 EVEN\n1 REFN\n1 DATE\n1 PLAC\n1 INDI\n  2 NAME\n  2 ROLE\n1 SOUR"

OTHR

The default template to use whenever creating a new other record. If not specified, the following is used in english:

"0 XXXX\n1 REFN"

HDR_SUBM

string to use when writing gedcom files for the SUBM. Default is

"1 SUBM".

HDR_GEDC

String containing the GEDC block for the header record when exporting GEDCOM. The default is

"1 GEDC\n2 VERS 5.5\n2 FORM LINEAGE-LINKED".

HDR_CHAR

Normally lifelines will populate the CHAR block in the header record automatically when exporting GEDCOM, with the actual character encoding being used in the export; this can be found in the settings displayed in the u(ser) c(harset settings) page. However, if desired, the HDR_CHAR variable may be used to overwrite the entire CHAR line. String containing the CHAR block for the header record when exporting GEDCOM. An example HDR_CHAR value would be "1 CHAR ASCII".

ReportLog

name of file to print report program errors to, if not specified use stdout curses window.

CrashLog_llexec

file to write crash log into for llexec. If not set, log is written to the file CrashLog_llexec.log.

CrashLog_llines

file to write crash log into for llines. If not set, log is written to the file CrashLog_llines.log.

LLTTEXPORT

directory to write translation tables to. Default is the current directory.

ImportLog

where to log errors found while importing a gedcom file. default is errs.log.

gettext.path

for windows, if specified path to (re)load gettext dll

iconv.path

for Windows, path to link dynamically to gettext and iconv

user.fullname

The full name of the current user. If not found as a property it is fetched from the system when possible.

user.email

The email address of the current user. If not found as a property it is fetched from the system when possible.

user.address

Postal address of the current user.

user.phone

The phone number of the current user.

user.url

URL to the users home page.


Other Executables

dbverify

dbverify is a utility to check an existing database and report on various inconsistencies. It can also repair a number of issues found.

dbverify supports the following options:

-aPerform all checks (does not include fixes)
-D Fix bad delete entries
-e Check events
-f Check families
-F Alter any bad family lineage pointers (to _badptr)
-g Check for ghosts (names/refns)
-G Check for & fix ghosts (names/refns)
-h Display help text (this text)
-i Check individuals
-l Check database structure
-m Check for records missing data entries
-M Fix records missing data entries
-n Noisy (echo every record processed)
-s Check sours
-x Check others


btedit

This program edits raw binary btree blocks in a LifeLines lifelines database file. Some information about its usage is provided by running:

btedit -h
Do NOT use this unless you know what you are doing and you have backed up your database.

The LifeLines database has proven rather robust over the years. However, it is important to make frequent backups of any database. If you experience database corruption, make sure you save a copy of the database before trying any recovery process. Only work on a copy of the data so that the data is not further damaged.

Try exporting the database to a gedcom file from within llines. Compare the saved file with previously saved versions. Editing the gedcom file to correct issues is often easier than using btedit.


llexec

llexec envokes the LifeLines report execution program without a GUI for non-interactive processing of report programs. The supported options are the same as for llines.

An example usage, which will open the database 'myfamily' and run the report eol.ll is:

llexec myfamily -x eol 
Programs that require input, will prompt for that data and read from standard input. If a program required the input of a 0 or 1 to control the output, the following is one way to allow use of llexec in a script:

echo "1" | llexec myfamily -x myprog 

lifelines-3.0.61/docs/ll-userguide.pdf0000700002540200244210000157327510656377047020030 0ustar prappDomain Users%PDF-1.3 1 0 obj << /S /GoTo /D (1.0) >> endobj 4 0 obj (LifeLines Documentation) endobj 5 0 obj << /S /GoTo /D (2.0) >> endobj 8 0 obj (Table of Contents) endobj 9 0 obj << /S /GoTo /D (3.0) >> endobj 12 0 obj (Chapter 1. Users' Manual ) endobj 13 0 obj << /S /GoTo /D (3.1.1) >> endobj 16 0 obj (INTRODUCTION) endobj 17 0 obj << /S /GoTo /D (3.2.1) >> endobj 20 0 obj (INSTALLATION) endobj 21 0 obj << /S /GoTo /D (3.3.1) >> endobj 24 0 obj (btedit) endobj 25 0 obj << /S /GoTo /D (3.4.1) >> endobj 28 0 obj (dbverify) endobj 29 0 obj << /S /GoTo /D (3.5.1) >> endobj 32 0 obj (llexec) endobj 33 0 obj << /S /GoTo /D (3.6.1) >> endobj 36 0 obj (llines) endobj 37 0 obj << /S /GoTo /D (3.7.1) >> endobj 40 0 obj (STARTING LIFELINES AND CREATING DATABASES) endobj 41 0 obj << /S /GoTo /D (3.8.1) >> endobj 44 0 obj (INTRODUCTION TO GEDCOM) endobj 45 0 obj << /S /GoTo /D (3.9.1) >> endobj 48 0 obj (MAIN MENU) endobj 49 0 obj << /S /GoTo /D (3.10.1) >> endobj 52 0 obj (CODESET) endobj 53 0 obj << /S /GoTo /D (3.11.1) >> endobj 56 0 obj (ENTERING THE FIRST PERSON) endobj 57 0 obj << /S /GoTo /D (3.12.1) >> endobj 60 0 obj (SCREEN EDITORS AND ENVIRONMENT VARIABLES) endobj 61 0 obj << /S /GoTo /D (3.13.1) >> endobj 64 0 obj (BASICS OF BROWSING) endobj 65 0 obj << /S /GoTo /D (3.14.1) >> endobj 68 0 obj (IDENTIFYING A PERSON OR LIST OF PERSONS TO BROWSE) endobj 69 0 obj << /S /GoTo /D (3.15.1) >> endobj 72 0 obj (ZIP IDENTIFYING A NEW PERSON) endobj 73 0 obj << /S /GoTo /D (3.16.1) >> endobj 76 0 obj (BROWSE DISPLAY BASICS) endobj 77 0 obj << /S /GoTo /D (3.17.1) >> endobj 80 0 obj (PERSON BROWSE SCREEN) endobj 81 0 obj << /S /GoTo /D (3.18.1) >> endobj 84 0 obj (e Edit the person. ) endobj 85 0 obj << /S /GoTo /D (3.19.1) >> endobj 88 0 obj (f Browse to father.) endobj 89 0 obj << /S /GoTo /D (3.20.1) >> endobj 92 0 obj (m Browse to mother.) endobj 93 0 obj << /S /GoTo /D (3.21.1) >> endobj 96 0 obj (s Browse to spouse/s.) endobj 97 0 obj << /S /GoTo /D (3.22.1) >> endobj 100 0 obj (c Browse to children.) endobj 101 0 obj << /S /GoTo /D (3.23.1) >> endobj 104 0 obj (o Browse to older sib.) endobj 105 0 obj << /S /GoTo /D (3.24.1) >> endobj 108 0 obj (y Browse to younger sib.) endobj 109 0 obj << /S /GoTo /D (3.25.1) >> endobj 112 0 obj (g Browse to family.) endobj 113 0 obj << /S /GoTo /D (3.26.1) >> endobj 116 0 obj (u Browse to parents.) endobj 117 0 obj << /S /GoTo /D (3.27.1) >> endobj 120 0 obj (b Browse to persons.) endobj 121 0 obj << /S /GoTo /D (3.28.1) >> endobj 124 0 obj (h Add as spouse.) endobj 125 0 obj << /S /GoTo /D (3.29.1) >> endobj 128 0 obj (i Add as child.) endobj 129 0 obj << /S /GoTo /D (3.30.1) >> endobj 132 0 obj (r Remove as spouse.) endobj 133 0 obj << /S /GoTo /D (3.31.1) >> endobj 136 0 obj (d Remove as child.) endobj 137 0 obj << /S /GoTo /D (3.32.1) >> endobj 140 0 obj (n Create new person.) endobj 141 0 obj << /S /GoTo /D (3.33.1) >> endobj 144 0 obj (a Create new family.) endobj 145 0 obj << /S /GoTo /D (3.34.1) >> endobj 148 0 obj (p Pedigree mode.) endobj 149 0 obj << /S /GoTo /D (3.35.1) >> endobj 152 0 obj (x Swap two families.) endobj 153 0 obj << /S /GoTo /D (3.36.1) >> endobj 156 0 obj (tt Enter tandem mode.) endobj 157 0 obj << /S /GoTo /D (3.37.1) >> endobj 160 0 obj (? Other menu choices.) endobj 161 0 obj << /S /GoTo /D (3.38.1) >> endobj 164 0 obj (q Return to main menu.) endobj 165 0 obj << /S /GoTo /D (3.39.1) >> endobj 168 0 obj (z Zip browse to person.) endobj 169 0 obj << /S /GoTo /D (3.40.1) >> endobj 172 0 obj (LIST BROWSE SCREEN) endobj 173 0 obj << /S /GoTo /D (3.41.1) >> endobj 176 0 obj (j Move down list.) endobj 177 0 obj << /S /GoTo /D (3.42.1) >> endobj 180 0 obj (k Move up list.) endobj 181 0 obj << /S /GoTo /D (3.43.1) >> endobj 184 0 obj (e Edit this person.) endobj 185 0 obj << /S /GoTo /D (3.44.1) >> endobj 188 0 obj (i Browse this person.) endobj 189 0 obj << /S /GoTo /D (3.45.1) >> endobj 192 0 obj (m Mark this person.) endobj 193 0 obj << /S /GoTo /D (3.46.1) >> endobj 196 0 obj (r Remove from list.) endobj 197 0 obj << /S /GoTo /D (3.47.1) >> endobj 200 0 obj (t Enter tandem mode.) endobj 201 0 obj << /S /GoTo /D (3.48.1) >> endobj 204 0 obj (n Name this list.) endobj 205 0 obj << /S /GoTo /D (3.49.1) >> endobj 208 0 obj (b Browse new persons.) endobj 209 0 obj << /S /GoTo /D (3.50.1) >> endobj 212 0 obj (a Add to this list.) endobj 213 0 obj << /S /GoTo /D (3.51.1) >> endobj 216 0 obj (x Swap mark/current.) endobj 217 0 obj << /S /GoTo /D (3.52.1) >> endobj 220 0 obj (q Return to main menu.) endobj 221 0 obj << /S /GoTo /D (3.53.1) >> endobj 224 0 obj (FAMILY BROWSE SCREEN) endobj 225 0 obj << /S /GoTo /D (3.54.1) >> endobj 228 0 obj (e Edit the family.) endobj 229 0 obj << /S /GoTo /D (3.55.1) >> endobj 232 0 obj (f Browse to father.) endobj 233 0 obj << /S /GoTo /D (3.56.1) >> endobj 236 0 obj (mBrowse to mother. ) endobj 237 0 obj << /S /GoTo /D (3.57.1) >> endobj 240 0 obj (c Browse to children.) endobj 241 0 obj << /S /GoTo /D (3.58.1) >> endobj 244 0 obj (n Create new person.) endobj 245 0 obj << /S /GoTo /D (3.59.1) >> endobj 248 0 obj (s Add spouse to family.) endobj 249 0 obj << /S /GoTo /D (3.60.1) >> endobj 252 0 obj (a Add child to family.) endobj 253 0 obj << /S /GoTo /D (3.61.1) >> endobj 256 0 obj (r Remove spouse from.) endobj 257 0 obj << /S /GoTo /D (3.62.1) >> endobj 260 0 obj (d Remove child from.) endobj 261 0 obj << /S /GoTo /D (3.63.1) >> endobj 264 0 obj (x Swap two children.) endobj 265 0 obj << /S /GoTo /D (3.64.1) >> endobj 268 0 obj (t Enter family tandem.) endobj 269 0 obj << /S /GoTo /D (3.65.1) >> endobj 272 0 obj (b Browse to persons.) endobj 273 0 obj << /S /GoTo /D (3.66.1) >> endobj 276 0 obj (z Browse to person.) endobj 277 0 obj << /S /GoTo /D (3.67.1) >> endobj 280 0 obj (q Return to main menu.) endobj 281 0 obj << /S /GoTo /D (3.68.1) >> endobj 284 0 obj (TANDEM PERSON BROWSE MODE) endobj 285 0 obj << /S /GoTo /D (3.69.1) >> endobj 288 0 obj (e Edit top person.) endobj 289 0 obj << /S /GoTo /D (3.70.1) >> endobj 292 0 obj (t Browse to top.) endobj 293 0 obj << /S /GoTo /D (3.71.1) >> endobj 296 0 obj (f Browse top father.) endobj 297 0 obj << /S /GoTo /D (3.72.1) >> endobj 300 0 obj (m Browse top mother.) endobj 301 0 obj << /S /GoTo /D (3.73.1) >> endobj 304 0 obj (s Browse top spouse/s.) endobj 305 0 obj << /S /GoTo /D (3.74.1) >> endobj 308 0 obj (c Browse top children.) endobj 309 0 obj << /S /GoTo /D (3.75.1) >> endobj 312 0 obj (b Browse to persons.) endobj 313 0 obj << /S /GoTo /D (3.76.1) >> endobj 316 0 obj (d Copy top to bottom.) endobj 317 0 obj << /S /GoTo /D (3.77.1) >> endobj 320 0 obj (a Add family.) endobj 321 0 obj << /S /GoTo /D (3.78.1) >> endobj 324 0 obj (j Merge bottom to top.) endobj 325 0 obj << /S /GoTo /D (3.79.1) >> endobj 328 0 obj (x Switch top/bottom.) endobj 329 0 obj << /S /GoTo /D (3.80.1) >> endobj 332 0 obj (q Return to main menu.) endobj 333 0 obj << /S /GoTo /D (3.81.1) >> endobj 336 0 obj (TANDEM FAMILY BROWSE MODE) endobj 337 0 obj << /S /GoTo /D (3.82.1) >> endobj 340 0 obj (e Edit top family.) endobj 341 0 obj << /S /GoTo /D (3.83.1) >> endobj 344 0 obj (t Browse to top.) endobj 345 0 obj << /S /GoTo /D (3.84.1) >> endobj 348 0 obj (b Browse to bottom.) endobj 349 0 obj << /S /GoTo /D (3.85.1) >> endobj 352 0 obj (f Browse to fathers.) endobj 353 0 obj << /S /GoTo /D (3.86.1) >> endobj 356 0 obj (m Browse to mothers.) endobj 357 0 obj << /S /GoTo /D (3.87.1) >> endobj 360 0 obj (\(t Scroll top up.) endobj 361 0 obj << /S /GoTo /D (3.88.1) >> endobj 364 0 obj (\)t Scroll top down.) endobj 365 0 obj << /S /GoTo /D (3.89.1) >> endobj 368 0 obj (\(b Scroll bottom up.) endobj 369 0 obj << /S /GoTo /D (3.90.1) >> endobj 372 0 obj (\)b Scroll bottom down.) endobj 373 0 obj << /S /GoTo /D (3.91.1) >> endobj 376 0 obj (\(\( Scroll both up.) endobj 377 0 obj << /S /GoTo /D (3.92.1) >> endobj 380 0 obj (\)\) Scroll both down.) endobj 381 0 obj << /S /GoTo /D (3.93.1) >> endobj 384 0 obj (\043 Toggle childnos.) endobj 385 0 obj << /S /GoTo /D (3.94.1) >> endobj 388 0 obj (\(19\) Browse to child.) endobj 389 0 obj << /S /GoTo /D (3.95.1) >> endobj 392 0 obj (j Merge bottom to top.) endobj 393 0 obj << /S /GoTo /D (3.96.1) >> endobj 396 0 obj (x Switch top/bottom.) endobj 397 0 obj << /S /GoTo /D (3.97.1) >> endobj 400 0 obj (q Return to main menu.) endobj 401 0 obj << /S /GoTo /D (3.98.1) >> endobj 404 0 obj (PEDIGREE BROWSE MODE) endobj 405 0 obj << /S /GoTo /D (3.99.1) >> endobj 408 0 obj (e Edit the person.) endobj 409 0 obj << /S /GoTo /D (3.100.1) >> endobj 412 0 obj (i Browse to person.) endobj 413 0 obj << /S /GoTo /D (3.101.1) >> endobj 416 0 obj (f Browse to father.) endobj 417 0 obj << /S /GoTo /D (3.102.1) >> endobj 420 0 obj (m Browse to mother.) endobj 421 0 obj << /S /GoTo /D (3.103.1) >> endobj 424 0 obj (s Browse to spouse/s.) endobj 425 0 obj << /S /GoTo /D (3.104.1) >> endobj 428 0 obj (c Browse to children.) endobj 429 0 obj << /S /GoTo /D (3.105.1) >> endobj 432 0 obj (g Browse to family.) endobj 433 0 obj << /S /GoTo /D (3.106.1) >> endobj 436 0 obj (b Browse to persons.) endobj 437 0 obj << /S /GoTo /D (3.107.1) >> endobj 440 0 obj (q Return to main menu.) endobj 441 0 obj << /S /GoTo /D (3.108.1) >> endobj 444 0 obj (SEARCH MENU) endobj 445 0 obj << /S /GoTo /D (3.108.1.2) >> endobj 448 0 obj (Search Patterns) endobj 449 0 obj << /S /GoTo /D (3.109.1) >> endobj 452 0 obj (ADD OPERATION) endobj 453 0 obj << /S /GoTo /D (3.110.1) >> endobj 456 0 obj (DELETE OPERATION) endobj 457 0 obj << /S /GoTo /D (3.111.1) >> endobj 460 0 obj (CODESET CONVERSION) endobj 461 0 obj << /S /GoTo /D (3.112.1) >> endobj 464 0 obj (internal) endobj 465 0 obj << /S /GoTo /D (3.113.1) >> endobj 468 0 obj (editor) endobj 469 0 obj << /S /GoTo /D (3.114.1) >> endobj 472 0 obj (display) endobj 473 0 obj << /S /GoTo /D (3.115.1) >> endobj 476 0 obj (report) endobj 477 0 obj << /S /GoTo /D (3.116.1) >> endobj 480 0 obj (GEDCOM) endobj 481 0 obj << /S /GoTo /D (3.117.1) >> endobj 484 0 obj (internal to editor) endobj 485 0 obj << /S /GoTo /D (3.118.1) >> endobj 488 0 obj (editor to internal) endobj 489 0 obj << /S /GoTo /D (3.119.1) >> endobj 492 0 obj (GEDCOM to internal) endobj 493 0 obj << /S /GoTo /D (3.120.1) >> endobj 496 0 obj (internal to GEDCOM) endobj 497 0 obj << /S /GoTo /D (3.121.1) >> endobj 500 0 obj (internal to display) endobj 501 0 obj << /S /GoTo /D (3.122.1) >> endobj 504 0 obj (internal to report) endobj 505 0 obj << /S /GoTo /D (3.123.1) >> endobj 508 0 obj (\043nnn) endobj 509 0 obj << /S /GoTo /D (3.124.1) >> endobj 512 0 obj (\044hh) endobj 513 0 obj << /S /GoTo /D (3.125.1) >> endobj 516 0 obj ( \043) endobj 517 0 obj << /S /GoTo /D (3.126.1) >> endobj 520 0 obj () endobj 521 0 obj << /S /GoTo /D (3.127.1) >> endobj 524 0 obj () endobj 525 0 obj << /S /GoTo /D (3.128.1) >> endobj 528 0 obj (MISCELLANEOUS UTILITIES) endobj 529 0 obj << /S /GoTo /D (3.129.1) >> endobj 532 0 obj (s Save the database in a GEDCOM file.) endobj 533 0 obj << /S /GoTo /D (3.130.1) >> endobj 536 0 obj (r Read in data from a GEDCOM file.) endobj 537 0 obj << /S /GoTo /D (3.131.1) >> endobj 540 0 obj (k Find a person's key value.) endobj 541 0 obj << /S /GoTo /D (3.132.1) >> endobj 544 0 obj (i Identify a person from key value.) endobj 545 0 obj << /S /GoTo /D (3.133.1) >> endobj 548 0 obj (d Show database statistics.) endobj 549 0 obj << /S /GoTo /D (3.134.1) >> endobj 552 0 obj (m Show memory statistics.) endobj 553 0 obj << /S /GoTo /D (3.135.1) >> endobj 556 0 obj (e Edit the place abbreviation file.) endobj 557 0 obj << /S /GoTo /D (3.136.1) >> endobj 560 0 obj (o Edit the user options file. ) endobj 561 0 obj << /S /GoTo /D (3.137.1) >> endobj 564 0 obj (q Return to main menu.) endobj 565 0 obj << /S /GoTo /D (3.138.1) >> endobj 568 0 obj (IMPORT ERRORS) endobj 569 0 obj << /S /GoTo /D (3.139.1) >> endobj 572 0 obj (Bad NAME syntax.) endobj 573 0 obj << /S /GoTo /D (3.140.1) >> endobj 576 0 obj (Family F13 has an incorrect key.) endobj 577 0 obj << /S /GoTo /D (3.141.1) >> endobj 580 0 obj (Person XYZ has an incorrect key: skipped.) endobj 581 0 obj << /S /GoTo /D (3.142.1) >> endobj 584 0 obj (Person defined here has no name.) endobj 585 0 obj << /S /GoTo /D (3.143.1) >> endobj 588 0 obj (Person INDIXYZ is multiply defined: skipped.) endobj 589 0 obj << /S /GoTo /D (3.144.1) >> endobj 592 0 obj (The family defined here has no key.) endobj 593 0 obj << /S /GoTo /D (3.145.1) >> endobj 596 0 obj (Family F123 is referred to but not defined.) endobj 597 0 obj << /S /GoTo /D (3.146.1) >> endobj 600 0 obj (The person defined here has no key: skipped.) endobj 601 0 obj << /S /GoTo /D (3.147.1) >> endobj 604 0 obj (This line has a level number that is too large.) endobj 605 0 obj << /S /GoTo /D (3.148.1) >> endobj 608 0 obj (This FAMS line is missing a value field \(INDI I99\).) endobj 609 0 obj << /S /GoTo /D (3.149.1) >> endobj 612 0 obj (HANDLING SOURCE, EVENT AND USERDEFINED RECORDS) endobj 613 0 obj << /S /GoTo /D (3.150.1) >> endobj 616 0 obj (s Browse source records.) endobj 617 0 obj << /S /GoTo /D (3.151.1) >> endobj 620 0 obj (e Browse event records.) endobj 621 0 obj << /S /GoTo /D (3.152.1) >> endobj 624 0 obj (x Browse other records.) endobj 625 0 obj << /S /GoTo /D (3.153.1) >> endobj 628 0 obj (1 Add a source record to the database.) endobj 629 0 obj << /S /GoTo /D (3.154.1) >> endobj 632 0 obj (2 Edit source record from the database.) endobj 633 0 obj << /S /GoTo /D (3.155.1) >> endobj 636 0 obj (3 Add an event record to the database.) endobj 637 0 obj << /S /GoTo /D (3.156.1) >> endobj 640 0 obj (4 Edit event record from the database.) endobj 641 0 obj << /S /GoTo /D (3.157.1) >> endobj 644 0 obj (5 Add an other record to the database.) endobj 645 0 obj << /S /GoTo /D (3.158.1) >> endobj 648 0 obj (6 Edit other record from the database.) endobj 649 0 obj << /S /GoTo /D (3.159.1) >> endobj 652 0 obj (\044s List sources) endobj 653 0 obj << /S /GoTo /D (3.160.1) >> endobj 656 0 obj (\044n List notes) endobj 657 0 obj << /S /GoTo /D (3.161.1) >> endobj 660 0 obj (\044\044 List all references) endobj 661 0 obj << /S /GoTo /D (3.162.1) >> endobj 664 0 obj (FAMILY STRUCTURE AND MERGING PERSONS AND FAMILIES) endobj 665 0 obj << /S /GoTo /D (3.163.1) >> endobj 668 0 obj (LINKING RECORDS TOGETHER AND USING THE REFN FEATURE) endobj 669 0 obj << /S /GoTo /D (3.164.1) >> endobj 672 0 obj (System and User Properties) endobj 673 0 obj << /S /GoTo /D (3.165.1) >> endobj 676 0 obj (cmdline table) endobj 677 0 obj << /S /GoTo /D (3.166.1) >> endobj 680 0 obj (database table) endobj 681 0 obj << /S /GoTo /D (3.167.1) >> endobj 684 0 obj (global table) endobj 685 0 obj << /S /GoTo /D (3.168.1) >> endobj 688 0 obj (environment table) endobj 689 0 obj << /S /GoTo /D (3.169.1) >> endobj 692 0 obj (LLPROGRAMS) endobj 693 0 obj << /S /GoTo /D (3.170.1) >> endobj 696 0 obj (LLREPORTS) endobj 697 0 obj << /S /GoTo /D (3.171.1) >> endobj 700 0 obj (LLARCHIVES) endobj 701 0 obj << /S /GoTo /D (3.172.1) >> endobj 704 0 obj (LLDATABASES) endobj 705 0 obj << /S /GoTo /D (3.173.1) >> endobj 708 0 obj (LLNEWDBDIR) endobj 709 0 obj << /S /GoTo /D (3.174.1) >> endobj 712 0 obj (LLEDITOR) endobj 713 0 obj << /S /GoTo /D (3.175.1) >> endobj 716 0 obj (codeset) endobj 717 0 obj << /S /GoTo /D (3.176.1) >> endobj 720 0 obj (GedcomCodeset) endobj 721 0 obj << /S /GoTo /D (3.177.1) >> endobj 724 0 obj (EditorCodeset) endobj 725 0 obj << /S /GoTo /D (3.178.1) >> endobj 728 0 obj (ReportCodeset) endobj 729 0 obj << /S /GoTo /D (3.179.1) >> endobj 732 0 obj (GuiCodeset) endobj 733 0 obj << /S /GoTo /D (3.180.1) >> endobj 736 0 obj (LongDisplayDate) endobj 737 0 obj << /S /GoTo /D (3.181.1) >> endobj 740 0 obj (LongDisplayDatePic) endobj 741 0 obj << /S /GoTo /D (3.182.1) >> endobj 744 0 obj (ShortDisplayDate) endobj 745 0 obj << /S /GoTo /D (3.183.1) >> endobj 748 0 obj (ShortDisplayDatePic) endobj 749 0 obj << /S /GoTo /D (3.184.1) >> endobj 752 0 obj (LocaleDir) endobj 753 0 obj << /S /GoTo /D (3.185.1) >> endobj 756 0 obj (NewDbProps) endobj 757 0 obj << /S /GoTo /D (3.186.1) >> endobj 760 0 obj (IllegalChar) endobj 761 0 obj << /S /GoTo /D (3.187.1) >> endobj 764 0 obj (DenySystemCalls) endobj 765 0 obj << /S /GoTo /D (3.188.1) >> endobj 768 0 obj (UiLocaleCollate) endobj 769 0 obj << /S /GoTo /D (3.189.1) >> endobj 772 0 obj (UiLocaleMessages) endobj 773 0 obj << /S /GoTo /D (3.190.1) >> endobj 776 0 obj (RptLocaleCollate) endobj 777 0 obj << /S /GoTo /D (3.191.1) >> endobj 780 0 obj (RptLocaleMessages) endobj 781 0 obj << /S /GoTo /D (3.192.1) >> endobj 784 0 obj (ShortOmitString) endobj 785 0 obj << /S /GoTo /D (3.193.1) >> endobj 788 0 obj (DisplayKeyTags) endobj 789 0 obj << /S /GoTo /D (3.194.1) >> endobj 792 0 obj (AnnotatePointers) endobj 793 0 obj << /S /GoTo /D (3.195.1) >> endobj 796 0 obj (TTPATH) endobj 797 0 obj << /S /GoTo /D (3.196.1) >> endobj 800 0 obj (TTPATH.debug) endobj 801 0 obj << /S /GoTo /D (3.197.1) >> endobj 804 0 obj (InputPath) endobj 805 0 obj << /S /GoTo /D (3.198.1) >> endobj 808 0 obj (INDIREC) endobj 809 0 obj << /S /GoTo /D (3.199.1) >> endobj 812 0 obj (FAMRECBODY) endobj 813 0 obj << /S /GoTo /D (3.200.1) >> endobj 816 0 obj (SOURREC) endobj 817 0 obj << /S /GoTo /D (3.201.1) >> endobj 820 0 obj (EVENREC) endobj 821 0 obj << /S /GoTo /D (3.202.1) >> endobj 824 0 obj (OTHR) endobj 825 0 obj << /S /GoTo /D (3.203.1) >> endobj 828 0 obj (HDRSUBM) endobj 829 0 obj << /S /GoTo /D (3.204.1) >> endobj 832 0 obj (HDRGEDC) endobj 833 0 obj << /S /GoTo /D (3.205.1) >> endobj 836 0 obj (HDRCHAR) endobj 837 0 obj << /S /GoTo /D (3.206.1) >> endobj 840 0 obj (ReportLog) endobj 841 0 obj << /S /GoTo /D (3.207.1) >> endobj 844 0 obj (CrashLogllexec) endobj 845 0 obj << /S /GoTo /D (3.208.1) >> endobj 848 0 obj (CrashLogllines) endobj 849 0 obj << /S /GoTo /D (3.209.1) >> endobj 852 0 obj (LLTTEXPORT) endobj 853 0 obj << /S /GoTo /D (3.210.1) >> endobj 856 0 obj (ImportLog) endobj 857 0 obj << /S /GoTo /D (3.211.1) >> endobj 860 0 obj (gettext.path) endobj 861 0 obj << /S /GoTo /D (3.212.1) >> endobj 864 0 obj (iconv.path) endobj 865 0 obj << /S /GoTo /D (3.213.1) >> endobj 868 0 obj (user.fullname) endobj 869 0 obj << /S /GoTo /D (3.214.1) >> endobj 872 0 obj (user.email) endobj 873 0 obj << /S /GoTo /D (3.215.1) >> endobj 876 0 obj (user.address) endobj 877 0 obj << /S /GoTo /D (3.216.1) >> endobj 880 0 obj (user.phone) endobj 881 0 obj << /S /GoTo /D (3.217.1) >> endobj 884 0 obj (user.url) endobj 885 0 obj << /S /GoTo /D (3.218.1) >> endobj 888 0 obj (Other Executables) endobj 889 0 obj << /S /GoTo /D (3.218.2.2) >> endobj 892 0 obj (dbverify) endobj 893 0 obj << /S /GoTo /D (3.218.3.2) >> endobj 896 0 obj (btedit) endobj 897 0 obj << /S /GoTo /D (3.218.4.2) >> endobj 900 0 obj (llexec) endobj 901 0 obj << /S /GoTo /D [902 0 R /Fit ] >> endobj 904 0 obj << /Length 246 /Filter /FlateDecode >> stream xÚ;kÄ0„{ÿ •2Ä­´«Gò áJq)BŠã¢K\؆³óÿ³:®I ¨ÐJûÍ *#Ubð„*ØÖ³:QŸ²yjp##«¯_–3¢U%ðì+r—›ÛGë©|ºùãMïúSÙõc™Û÷ü"HPèÁW&ZÉðx?¿‡2.‡¥ŸÆ ?(;LV„AR=¤È¹pôUmæû–.çYÏÕ¾³!j<^•NʨBN£ä±ƒdè¢Ï_Óp˜WYn£Ñ°Î¯­c]–a:—õãf½ž÷Õ¶yÈ×ÎÐ$I“Ás€ÿßúÃwc/endstream endobj 902 0 obj << /Type /Page /Contents 904 0 R /Resources 903 0 R /MediaBox [0 0 609.714 789.041] /Parent 912 0 R >> endobj 905 0 obj << /D [902 0 R /XYZ 95.641 729.265 null] >> endobj 906 0 obj << /D [902 0 R /XYZ 95.641 716.314 null] >> endobj 907 0 obj << /D [902 0 R /XYZ 95.641 716.314 null] >> endobj 2 0 obj << /D [902 0 R /XYZ 404.461 704.609 null] >> endobj 903 0 obj << /Font << /F26 909 0 R /F27 911 0 R >> /ProcSet [ /PDF /Text ] >> endobj 915 0 obj << /Length 233 /Filter /FlateDecode >> stream xÚ•?OÃ0Å÷|Šm _}þoFDA ŽVP‡¶¸!‰Ô¤C¿=N ÈÃý~ïu²‚hѯ"*gaßTÞ‹òXÑL hôxûE_ªP #™‘¹KÕâA9ƒt¸ éí•­êC^Õmîù&=ÄC,ˆKH!ÌÜ}·?5¹¶Cݵ\(Øílù‘µ3ÿŒ^s+Y>r²¬¿†k”èhrjûí4zSªÄhã%`w.ž’‘>ºfÛÏ=÷†áÔ¿ð¨Xš®Ì,O7SyZ3ªeº®O‚p6¢-ÿýëæ?‡xdEendstream endobj 914 0 obj << /Type /Page /Contents 915 0 R /Resources 913 0 R /MediaBox [0 0 609.714 789.041] /Parent 912 0 R >> endobj 916 0 obj << /D [914 0 R /XYZ 95.641 729.265 null] >> endobj 913 0 obj << /Font << /F26 909 0 R /F27 911 0 R /F35 919 0 R >> /ProcSet [ /PDF /Text ] >> endobj 922 0 obj << /Length 2498 /Filter /FlateDecode >> stream xÚíÝ]oÛF€áûü Ý- ¬§œá3¼”¥‘Í®D$"[ôÂI”­×)luÑþû•DZQI«ÄaâÄ/r!Ùf8|$~œ3r¬ÿÉQ‰XË‘Q‰Pq4zóÛ‹`ôŸõ_Î^Èf -­Ðáæ§, D,íßÿÔÛ¢hïX ´"öwòd 4hР!¬hРAƒ 4hРAÃ4hРAƒ šoX#;%}‘ؾ…ÈP„Q·ôu÷žfU‘O/'Ušgí†l Be·¤D«Cåýès„á‹îäÉ4„ 4hРAƒ 4hxÐBƒ 4hРAƒæÉh>©Lˆ$JެS–•o´7žÏÇ›×CõJ£…iã? GÖqB½ 44hРAƒ 4hÐð EXÑ Aƒ 4hÐ<ûêkS{-üÐxUšmZûa¦ƒ‘]o¹¢:Zµ ›ÍçéÌÍÓÌ•õvû{ŒÖI³Ý8›ÖÓKO ×Tu×ûÞþfZÿ¼möÔ—Þ¸¬÷ö·@éM¨’¾ªÕ_½àË' 4hРAƒÍÃNÔÐ=&÷fvÙÞSW¾´^^¿?sÓI¾¾¯^´Bj-ŒûzQJ#sSͧ 4hРAƒ aEƒ 4hРAó 5zØtðbœ6ià…Ë.ÛmÅJX­ûzRh©Hú¢Aƒ Š 4hРAƒ 4.«\±[L :wõ›YZ”Uýö¾ôÊî*òR&½ ‘±Œ<4hРAƒ  „ 4hРAƒ†tîçZvR8×L_ê¦i½UQÖ¿Ø­"ë²—©/½"Ï.kÒ¼/})¥7.ÒñéüÐ ²VDÆôåzkÈõ¢Aƒ 4hРI†½Ù=—餹·Ígõëi‘ÿTnú3´;+V¦wâþ@†ÜÀ¢Aƒ 4hРAƒ aEƒ 4hРAƒfèÈ ½—Í&êˆê‰=ª‘N]V¥³W»ÁŸãÝxÏÍ`Ϻª²é%T¿§BJ-õ†Mý¥îi´WƒqØPÄ&êëBd¢„¥“Ñ Aƒæ[¿tÉO½tWøÿwzQ_iú®a™û©¹F­/`õõ¬Ý ÖB[Õw5b 4hРAƒ  ’„ 4hРAóDrmjØ\[SÌÙfÓ¦iy1oŠ¿jJ=õœvrM…BiÛ»D©e° 4hРAƒ 4hÐV4hРAƒ šï'S›©ß¸±Ÿµoæ„íäèc†q_Ž^Ú˜.°hРAƒ 4hР!¬hРAƒ 4hžAzýÃHG$×#iûf—ˆ s¡Aƒ 4hРAƒ 5 4hРAƒ 4h¾ LÝe—íÖL$dл¨ž”ôuEƒ ‚ 4hРAƒ 4> endobj 924 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.462 687.306 219.556 694.619] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 928 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [509.091 687.306 514.072 694.619] /Subtype /Link /A << /S /GoTo /D (11) >> >> endobj 929 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 673.856 247.7 680.975] /Subtype /Link /A << /S /GoTo /D (13) >> >> endobj 930 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [509.091 673.856 514.072 680.975] /Subtype /Link /A << /S /GoTo /D (13) >> >> endobj 931 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 662.898 242.121 670.016] /Subtype /Link /A << /S /GoTo /D (51) >> >> endobj 932 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [509.091 662.898 514.072 670.016] /Subtype /Link /A << /S /GoTo /D (51) >> >> endobj 933 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 651.939 409.871 659.057] /Subtype /Link /A << /S /GoTo /D (85) >> >> endobj 936 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [509.091 651.939 514.072 659.057] /Subtype /Link /A << /S /GoTo /D (85) >> >> endobj 937 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 640.98 312.158 648.098] /Subtype /Link /A << /S /GoTo /D (189) >> >> endobj 938 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [509.091 640.98 514.072 648.098] /Subtype /Link /A << /S /GoTo /D (189) >> >> endobj 939 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 630.021 230.216 637.139] /Subtype /Link /A << /S /GoTo /D (360) >> >> endobj 940 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [509.091 630.021 514.072 637.139] /Subtype /Link /A << /S /GoTo /D (360) >> >> endobj 941 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 619.062 213.489 626.18] /Subtype /Link /A << /S /GoTo /D (369) >> >> endobj 942 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [509.091 619.062 514.072 626.18] /Subtype /Link /A << /S /GoTo /D (369) >> >> endobj 943 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 608.103 314.768 615.221] /Subtype /Link /A << /S /GoTo /D (379) >> >> endobj 944 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [509.091 608.103 514.072 615.221] /Subtype /Link /A << /S /GoTo /D (379) >> >> endobj 945 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 597.144 415.949 604.262] /Subtype /Link /A << /S /GoTo /D (423) >> >> endobj 946 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [509.091 597.144 514.072 604.262] /Subtype /Link /A << /S /GoTo /D (423) >> >> endobj 947 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 586.185 275.446 593.303] /Subtype /Link /A << /S /GoTo /D (479) >> >> endobj 948 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 586.185 514.072 593.303] /Subtype /Link /A << /S /GoTo /D (479) >> >> endobj 949 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 575.226 451.047 582.345] /Subtype /Link /A << /S /GoTo /D (490) >> >> endobj 950 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 575.226 514.072 582.345] /Subtype /Link /A << /S /GoTo /D (490) >> >> endobj 951 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 564.267 331.854 571.386] /Subtype /Link /A << /S /GoTo /D (516) >> >> endobj 952 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 564.267 514.072 571.386] /Subtype /Link /A << /S /GoTo /D (516) >> >> endobj 953 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 553.309 290.62 560.427] /Subtype /Link /A << /S /GoTo /D (531) >> >> endobj 954 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 553.309 514.072 560.427] /Subtype /Link /A << /S /GoTo /D (531) >> >> endobj 955 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 542.35 293.708 549.468] /Subtype /Link /A << /S /GoTo /D (534) >> >> endobj 956 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 542.35 514.072 549.468] /Subtype /Link /A << /S /GoTo /D (534) >> >> endobj 957 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 531.391 274.391 538.509] /Subtype /Link /A << /S /GoTo /D (703) >> >> endobj 958 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 531.391 514.072 538.509] /Subtype /Link /A << /S /GoTo /D (703) >> >> endobj 959 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 520.432 290.759 527.55] /Subtype /Link /A << /S /GoTo /D (791) >> >> endobj 960 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 520.432 514.072 527.55] /Subtype /Link /A << /S /GoTo /D (791) >> >> endobj 961 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 509.473 332.472 516.591] /Subtype /Link /A << /S /GoTo /D (901) >> >> endobj 962 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 509.473 514.072 516.591] /Subtype /Link /A << /S /GoTo /D (901) >> >> endobj 963 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 498.514 329.523 505.632] /Subtype /Link /A << /S /GoTo /D (988) >> >> endobj 964 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 498.514 514.072 505.632] /Subtype /Link /A << /S /GoTo /D (988) >> >> endobj 965 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 487.555 294.864 494.673] /Subtype /Link /A << /S /GoTo /D (1096) >> >> endobj 966 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 487.555 514.072 494.673] /Subtype /Link /A << /S /GoTo /D (1096) >> >> endobj 967 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 476.596 242.48 483.714] /Subtype /Link /A << /S /GoTo /D (1159) >> >> endobj 968 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 476.596 514.072 483.714] /Subtype /Link /A << /S /GoTo /D (1159) >> >> endobj 969 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [191.283 465.637 258.958 473.059] /Subtype /Link /A << /S /GoTo /D (1171) >> >> endobj 970 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 465.637 514.072 473.059] /Subtype /Link /A << /S /GoTo /D (1171) >> >> endobj 971 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 454.678 252.214 461.797] /Subtype /Link /A << /S /GoTo /D (1211) >> >> endobj 972 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 454.678 514.072 461.797] /Subtype /Link /A << /S /GoTo /D (1211) >> >> endobj 973 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 443.72 267.207 450.838] /Subtype /Link /A << /S /GoTo /D (1218) >> >> endobj 974 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 443.72 514.072 450.838] /Subtype /Link /A << /S /GoTo /D (1218) >> >> endobj 975 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 432.761 283.785 439.879] /Subtype /Link /A << /S /GoTo /D (1228) >> >> endobj 976 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 432.761 514.072 439.879] /Subtype /Link /A << /S /GoTo /D (1228) >> >> endobj 977 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 421.802 303.571 428.92] /Subtype /Link /A << /S /GoTo /D (1333) >> >> endobj 978 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 421.802 514.072 428.92] /Subtype /Link /A << /S /GoTo /D (1333) >> >> endobj 979 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 410.843 247.999 417.961] /Subtype /Link /A << /S /GoTo /D (1438) >> >> endobj 980 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 410.843 514.072 417.961] /Subtype /Link /A << /S /GoTo /D (1438) >> >> endobj 981 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 398.464 458.828 407.002] /Subtype /Link /A << /S /GoTo /D (1511) >> >> endobj 982 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 398.464 514.072 407.002] /Subtype /Link /A << /S /GoTo /D (1511) >> >> endobj 983 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 388.925 466.787 396.043] /Subtype /Link /A << /S /GoTo /D (1676) >> >> endobj 984 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 388.925 514.072 396.043] /Subtype /Link /A << /S /GoTo /D (1676) >> >> endobj 985 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 377.966 479.061 385.084] /Subtype /Link /A << /S /GoTo /D (1685) >> >> endobj 986 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 377.966 514.072 385.084] /Subtype /Link /A << /S /GoTo /D (1685) >> >> endobj 987 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 364.412 289.254 374.429] /Subtype /Link /A << /S /GoTo /D (1734) >> >> endobj 988 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 364.412 514.072 374.429] /Subtype /Link /A << /S /GoTo /D (1734) >> >> endobj 989 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.372 356.048 247.511 363.47] /Subtype /Link /A << /S /GoTo /D (2030) >> >> endobj 990 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 356.048 514.072 363.47] /Subtype /Link /A << /S /GoTo /D (2030) >> >> endobj 991 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [191.283 342.494 228.971 352.511] /Subtype /Link /A << /S /GoTo /D (2032) >> >> endobj 992 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 342.494 514.072 352.511] /Subtype /Link /A << /S /GoTo /D (2032) >> >> endobj 993 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [191.283 334.13 217.046 341.553] /Subtype /Link /A << /S /GoTo /D (2085) >> >> endobj 994 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 334.13 514.072 341.553] /Subtype /Link /A << /S /GoTo /D (2085) >> >> endobj 995 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [191.283 323.172 216.189 330.594] /Subtype /Link /A << /S /GoTo /D (2094) >> >> endobj 996 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.11 323.172 514.072 330.594] /Subtype /Link /A << /S /GoTo /D (2094) >> >> endobj 923 0 obj << /D [921 0 R /XYZ 95.641 729.265 null] >> endobj 6 0 obj << /D [921 0 R /XYZ 217.509 705.673 null] >> endobj 920 0 obj << /Font << /F27 911 0 R /F39 927 0 R /F35 919 0 R /F40 935 0 R /F41 999 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1036 0 obj << /Length 97 /Filter /FlateDecode >> stream xÚ3T0BCKS=3Cs#K=#3S…ä\.…t Œ;—!T…‰¡…ž‰1ˆ‡ER&«kfa¤g4 I‘S—¾PÈRÏÒÌX!$ ¬'$%Z#³L36Ä‹Ë5¿%.H gendstream endobj 1035 0 obj << /Type /Page /Contents 1036 0 R /Resources 1034 0 R /MediaBox [0 0 609.714 789.041] /Parent 912 0 R >> endobj 1037 0 obj << /D [1035 0 R /XYZ 95.641 729.265 null] >> endobj 1034 0 obj << /Font << /F41 999 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1040 0 obj << /Length 2917 /Filter /FlateDecode >> stream xÚksâÈñûþ ×~‰¨2cI£çV¥R¬×J08€ïQI> be…Ä!É>ç×§3î²—Úòª§§§§§»§ƒwåÂ?ï* ExW±Ÿ ? ¯òí÷j 3_>x†"ðH]˜ìÛÙ¾/E˜úHóyþáæÞ¯¼@„It5_í|ùçv£v­Þ÷ú~œ8žèõÃ0ržÀx¡Óü‰ñªêy®Ó©²÷¯ù_™“/Ü0dN} _FÄ/ϧ=ßu&wÏ·ól2æ{•ˆ4¢ƒX$>HçE"MbZ4*VzTTºaj^¥@-‘:ôE$}#lÑôú/ÅŸµ®´*ëõw sâÔëžçìÕ–qíFµ í{‰ÓU†A]ñ÷yœýÄPóÖ´z KÁˆÌ¬Ûª¢jᯱ{öQÈ«¾¬ï¹" ¥)rPS_º®Còè˜Ö.ÆÿÓ ÝÞ7uÕ\3f¥¶EYhúiê4uG rm ô‹®Ú†gUµddÝn€ póx\T†€‡KÕª…j´aËPr×Èœ’̨ýj5òŽS#ò®Þ·±b¥nyÔnêFSNðÄ|£yއêxPÕüÝíUÞ²¢pXÛÂnˆ¦á­ìšn»`…ÉÕ…#IŽtûÆð2öœœ—P Íߦ­ÑEhÕ’Q…!Qçîê¾Ad<ð÷=Õó­§ëøV  SWV<#ŒÚ¢0ÇLè;_‹jÙ°§yi ‚(993(¢ï')íÃ!:°Ÿºt`D|Õ;3E’Xå&é·ºÎKƒƒÿïó{BÚÓ×äO Ü UÓ-âÁ¢+ʶoGG>'øÄ¾Bt9=qVÁUh¯ì…¶Wþ¥Xâ†8£N&Ö¶Eµæ¹¦[˜kN4ÆE`â­îÕ¡w#\ä[>Ò=OÕ¯Õo:£½@QÄ·|£è„4˜“8dEü‘¬Ä¥lj†Jm9“ÔüÒéýÛ·gÈz`sAH–É ìîgF˜õ-Av.©à«ª7^Õ[Ïó<ç’Ä®p#ÿ;ÆA˜¬k´‘€]½ÓQˆð$H°Ô; ÿU-O¯´j9Jš#ö}בçŸß“Ð5!´,~\‡Š?MÎL5œ¿23¤.¶ºêBÍd×Pt 1þ‚Ì+•ë ZA„" ¾ã¥Qx”ï$äcÅŸª®úy½Ýr|Í ´PyÍsúWÈ(ØRöÌÁÕ6®eÉž†Ž0Ž :6û¢ùj’Ku¬Ù¦^µ¯&¸cÙ„N†ðHVe½ÓË ¾áF"ò¿Ç7¤H‚ØÐ­0(âœ4ñ€¸Ñdš:„uc˜ÀïkÑnxÍj_€Ù8ãE.DÖôä\êîÖ@-±L ¯TüYê-§_ß7™¢¤RƒÇfµï¼š¨jxFï[³ƒa&Ùw*ÝÂäµåG¦ÁR„ùmÔ‹Ùj«Àiϯ5^3•û.T‘Þwh<ÉáÖ¾ ½~Ľ1˜ÉŒÕ‚[U`¤­j Lp8·2·¨|cõ¢ŠR-Jホ¼·ìØqùSžè1›÷ÀEûMûVš[Z¹®30Á–õ¾ì@ÄÜÞʸà맃’W/±–Îm½{Ûë ÆH¸X”å\Kᬗ¦dÞ4åá|SoUcà^8‚á{©tt»­ß«°×ü}ÂÖ4—4’îne ¤Åã!øƒõ—×<²š»``Îú’R ­±¾@µã3èàa¾,<_/0ùrrIÈ™‰ hÀÌÆí†d„Õ|½u’e¿4 š¦Î (ÍxYçÄžþ%§4N¸èØõK ô+Iáìqæãì(œ|D3\óž ¿K×׆ÙaíñRÆà}¯»–éMŽh÷EŽ’¾E•—Ý5r.òa¹Œ®MÍpÌ•ä;AÖüí¸â‹°ÞÙ‘)0IÔ¶^«#Lâ˜H¾Öf¼ëeÑlÌhY Ð‹®µÓPœj˜Ûs%È}(ÞÔT.C ÐeÉX§à?dcÇ‘­°Ã¾s1D5#vèËíÆÞå”àuÃMBhùFÄ÷’K¼ËO\¾ Ún_ÁáÙ¥Lžô²æqS_3´ðo·§T¦ …Nª.áâO÷°ì\dg£ Nb¯6PÜgóñpf–Ý£Ä øóĬ{2væÙíóÀs¡žž§O“ =Ò`Œ ‡žn<gãûi»¿ ‡c›p23õxÂãá8O¨ÙÃ`4b,™gÈðàyþ0™Î.lOJYo'O?O³/s>LFwÃ錟‡\œ²ÁçÑq÷v![9ŒÙã5SÞÁÞƒÇÁ—áŒÇ–xj¿¤ä|¢[?À2xZAc<6~ô ¿<Žü p·“ñ| ¨-Æ­ÎV`¢‰aÈÒþÇl6¼¾ Ö`šÍŒ§Á‰§:^Ça§ó;ûÆU%‹¢6Çã¡ÆpY˜‚üQ³ÉñÕ;f‚$çáÿy6ä’‡É\#=wÃÁ儻Öõ»¹'» FA‰œN_Ê·{RâŠCLAàÙ:ò%ö²”öK)•]P–:oó˜ÿÞ;›ò}±ÃKk V”u޵ Õ´m_ÄI|b¨MÛî>ÝÜ”P÷–X÷ŠwáW‡W µPyßjb8sœðÛ‘›^I‘&!ñóÎ g&¡…x§œ‰~F­R‹Û7ÀšF>q©â,›: ht©…üW~ £\fž½šzkÒÛ®T-VÚ‡&H…LN;³lÅJ¡÷ÒÎ»êŒ ¼C“¶?1‘µO³aBª¼J¡¦ á±®6ªÊ5š¹¹fÒ]©Uc¦›bmÌÚíŒy« ^{lc„ošmz1Â<º®óسÇÈyv\ÿ‹›s“Eðyd2ÿB¯#‚øÄdP¼˜¾1›w{VZÕbCÍ¿ªÔš ‹À¾ ½¿#`I"¯ã‡î‹ KpJÚ›XÒnãºÕŸ˜6ôŽ:µDøÒö¼O`:Xj}S®ƒCQØ’\3 š¹žtvlF½â«½j˜Tá;üKÏ[/a…txóˆëF3íªÝ1¦)ð-¸˜MpB†ŽÈU.vM'4´YVò\OS:›ä@zy~ºDHtniì{t_ÊPÄ>̥в†6ÐZЦmòââ†!¾´_pA›:¸ãýÿ–ñd|áÎèà‰¨Îz¿6È‚_Źÿôc4UÜ#jš)_r3LOHïÏ÷Œ°¯P¶K¶Á‘qT ZUéƒsJSد¬q‘ l½S(çÆ‘ÿû±í÷›”R$©}Ô+¨¹FqÆLpX 5¨ý‹ÞS1ôw¢÷ sÃÿ;¯Ô/bÓn/]ñÄùc²G©p½na$ Ö7¥hý‘½ÜEÉw›Þš• +ÞEoÔû~ô¬ê¥úŠžy“¯‹þo¢úÍ«úWý—ûg:qÿÒy\8çý}Î?÷ËDa"’ ½üK¡AÈ?Ò€Ì|ío€Þ·<Øð›_ÿ ²tJendstream endobj 1039 0 obj << /Type /Page /Contents 1040 0 R /Resources 1038 0 R /MediaBox [0 0 609.714 789.041] /Parent 912 0 R >> endobj 1000 0 obj << /D [1039 0 R /XYZ 95.641 716.314 null] >> endobj 10 0 obj << /D [1039 0 R /XYZ 277.662 705.673 null] >> endobj 1001 0 obj << /D [1039 0 R /XYZ 95.641 697.682 null] >> endobj 14 0 obj << /D [1039 0 R /XYZ 187.812 668.437 null] >> endobj 1041 0 obj << /D [1039 0 R /XYZ 95.641 662.259 null] >> endobj 1042 0 obj << /D [1039 0 R /XYZ 95.641 662.259 null] >> endobj 1043 0 obj << /D [1039 0 R /XYZ 369.808 651.45 null] >> endobj 1044 0 obj << /D [1039 0 R /XYZ 285.808 618.574 null] >> endobj 1045 0 obj << /D [1039 0 R /XYZ 317.22 607.615 null] >> endobj 1046 0 obj << /D [1039 0 R /XYZ 293.524 574.738 null] >> endobj 1047 0 obj << /D [1039 0 R /XYZ 154.71 563.779 null] >> endobj 1048 0 obj << /D [1039 0 R /XYZ 95.641 555.989 null] >> endobj 1049 0 obj << /D [1039 0 R /XYZ 95.641 555.989 null] >> endobj 1050 0 obj << /D [1039 0 R /XYZ 250.084 536.88 null] >> endobj 1051 0 obj << /D [1039 0 R /XYZ 163.723 514.962 null] >> endobj 1052 0 obj << /D [1039 0 R /XYZ 95.641 496.213 null] >> endobj 1053 0 obj << /D [1039 0 R /XYZ 95.641 496.213 null] >> endobj 1054 0 obj << /D [1039 0 R /XYZ 95.641 329.443 null] >> endobj 1055 0 obj << /D [1039 0 R /XYZ 143.462 307.739 null] >> endobj 1056 0 obj << /D [1039 0 R /XYZ 250.808 285.822 null] >> endobj 1057 0 obj << /D [1039 0 R /XYZ 95.641 283.012 null] >> endobj 1058 0 obj << /D [1039 0 R /XYZ 95.641 268.068 null] >> endobj 1061 0 obj << /D [1039 0 R /XYZ 430.302 260.649 null] >> endobj 1062 0 obj << /D [1039 0 R /XYZ 163.387 250.786 null] >> endobj 1063 0 obj << /D [1039 0 R /XYZ 95.641 224.883 null] >> endobj 1064 0 obj << /D [1039 0 R /XYZ 313.522 213.924 null] >> endobj 1065 0 obj << /D [1039 0 R /XYZ 95.641 193.784 null] >> endobj 1066 0 obj << /D [1039 0 R /XYZ 95.641 193.784 null] >> endobj 1002 0 obj << /D [1039 0 R /XYZ 95.641 78.079 null] >> endobj 1038 0 obj << /Font << /F27 911 0 R /F40 935 0 R /F35 919 0 R /F51 1060 0 R /F41 999 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1069 0 obj << /Length 2016 /Filter /FlateDecode >> stream xÚ•X[oã¶~ß_á·•˜©{ßÒtS¸HӃƋs¶û@Ë´-DÔâu}g8¤,Ù^¬ ?pH‘Cr.ß|4Ÿøðã“,bqÈ'‰È˜ˆ£I^}ð'øòëngø“€Ei‚Ÿ~^|¸‚ÙËâ`²X›‹Õïq+w­ÚOg"ò=Ψý¬Õ^$ùwYw²œ~]üöáÓ¢Wò”…ŸÌúÎ7ŸõS„`ûSˆdÂó£hxŒùËëbšùÞÃóó¶‹ù/¸çýS&, ‘Ç,Kc³ðÿÓLxM7IàUòHÂRQ[Ôº•eYÔRú“”ŨŒû´…öÏÅZ=µÒ—»F‚qèÓ¼õ~ÊS¯©H¿¤F7Îí¶«B·ûbÙµESÓÈNæSî½ÉÑì­m[;O}›áàŠQȲ(Á7-î­ò®•ËUÄ©·£“lö²¢Yš%WÇá µ“Ô®htmöሧ6Òç—ùÿHúË|÷ý÷×Ù§QF\5 _8ë£nUŨ³Ø*s`tÒ¡AD f¨i0o*0·E»%©ÝÚ%î.,Pw4¶ìŠrE¢Î÷Å®%YÖv°’ofu÷ðEé´×*WZËýÑnÑ\91©¾±(¾!FBˆužÚy˜E<ñžš²l$Óµ@ÀˆÜOS¯Ë18´<›Õ_ÞöÍuÐVõ5uW-Mî‚ܬ©Uß\˜hФ$€d£ËÚ€€ajnÞ’xØù–Ä#Ò|¶ÓvT¸ÖNØdàb«”{yÛ[ÃhaÝ "…®0G„”øm'±»eÔ›¯iÞó…²{’Â>øgW´àPY´GêŒpL;Ô;*˜%ÁèPþ‚Ðiƒ[ 5е̕­{T[?%L™uSÏÌ| ù®Fþˆ‡‹è‹(µ5°Ù·îÖ×=Ï_>½^Ñs¨C^~c%©÷øç'KÿA»ùe–fÌlþóŒþðêtŽ&IX…öyŒŸQ u^Gê!\´rß^†h²$æ7$,`„ï¨Ø ¸È^!!~êMÕ/ÎR…ÎRCˆ‰ý­ä`Øà¬‚\9HÀ’^×a«,Ÿ08„= ¦cM³P¿×؆tn¨ ÅA £ ?É+¨&Hï-ϧ8:»#õ@ô.ôF10éðß©ÅÈ®Wš”Úk„ýfw—›àxG2JÙ<{hnvÊÀ_bs êÄÀ¢8LÃGð&ÑÔ;Ò;•0Ë|ÞÚXûhUWÒÐW˜øÚ1DfìïÚƒ ¯q:JÄÁÒõÇ;øº ¿»öΘˆ¢ŒÏý>k¥~Ó´ „\‹Qg6)ZÔPöñµ†rn4­=U§0“¥ÌÈšZ´X°$Yëƒ!çP]ŽJß¹¤7©è0N @‡þÀê58+Xj¿¹×ÊøF·cmv¯%2™Àç^S—vYS[]æÉd&]+2ÇG¨£ÔË+¼Œ›°óFž ÛQ½h‹J1k@?ðˆñ¯–…'0¦ˆQô~Æ×AQ÷õÑÑò ÇŠ/ãPÄÙ¿cù…>¡á)!ÑÝ<4ü+ñ(š]ýĈßÅà—™ÌWëâ­lo»Ã·¿Ÿæ_-ŽŠa€s'î _œW¿^)"<ÀüÀlaÌ wc»õÏ:*Â;÷ˆ·¯¸Ì½ât·ÃR¬ù1Ÿù¶(ÍqR”z¯;•ãÃz¢FÛtÀ_4õeÙ.›Ü2-úùŠmìŸv³Çû-0®{à9å} ¾0æ»g¥á†JãýRnND,ãñŸ7J1­òÓ®®}Å¿@µå§}}îIéÕvjoy¾ÂÇ6U&·uÄËŸgOXõ9÷žŠº.ôvhæÓ ÎÒšM¾Ë¢¤·½ \Ë‹tÓÇ÷®(ÕÊ]xø'&x%Ž2‰Ñ˜ßý«T|ïOP¸üýȪendstream endobj 1068 0 obj << /Type /Page /Contents 1069 0 R /Resources 1067 0 R /MediaBox [0 0 609.714 789.041] /Parent 912 0 R >> endobj 18 0 obj << /D [1068 0 R /XYZ 181.869 706.351 null] >> endobj 1070 0 obj << /D [1068 0 R /XYZ 95.641 700.173 null] >> endobj 1071 0 obj << /D [1068 0 R /XYZ 246.286 689.365 null] >> endobj 1072 0 obj << /D [1068 0 R /XYZ 347.245 678.406 null] >> endobj 1073 0 obj << /D [1068 0 R /XYZ 393.303 678.406 null] >> endobj 1074 0 obj << /D [1068 0 R /XYZ 169.026 656.488 null] >> endobj 1075 0 obj << /D [1068 0 R /XYZ 95.641 623.397 null] >> endobj 1076 0 obj << /D [1068 0 R /XYZ 95.641 605.963 null] >> endobj 1077 0 obj << /D [1068 0 R /XYZ 95.641 605.963 null] >> endobj 22 0 obj << /D [1068 0 R /XYZ 170.58 595.218 null] >> endobj 1078 0 obj << /D [1068 0 R /XYZ 95.641 590.112 null] >> endobj 1079 0 obj << /D [1068 0 R /XYZ 95.641 585.131 null] >> endobj 1080 0 obj << /D [1068 0 R /XYZ 398.324 574.296 null] >> endobj 1081 0 obj << /D [1068 0 R /XYZ 95.641 550.884 null] >> endobj 1082 0 obj << /D [1068 0 R /XYZ 95.641 550.884 null] >> endobj 26 0 obj << /D [1068 0 R /XYZ 182.017 539.925 null] >> endobj 1083 0 obj << /D [1068 0 R /XYZ 95.641 532.882 null] >> endobj 1084 0 obj << /D [1068 0 R /XYZ 95.641 527.9 null] >> endobj 1085 0 obj << /D [1068 0 R /XYZ 280.775 519.004 null] >> endobj 1086 0 obj << /D [1068 0 R /XYZ 95.641 495.592 null] >> endobj 1087 0 obj << /D [1068 0 R /XYZ 95.641 495.592 null] >> endobj 30 0 obj << /D [1068 0 R /XYZ 170.909 484.633 null] >> endobj 1088 0 obj << /D [1068 0 R /XYZ 95.641 479.527 null] >> endobj 1089 0 obj << /D [1068 0 R /XYZ 95.641 474.546 null] >> endobj 1090 0 obj << /D [1068 0 R /XYZ 304.121 463.711 null] >> endobj 1091 0 obj << /D [1068 0 R /XYZ 95.641 429.34 null] >> endobj 1092 0 obj << /D [1068 0 R /XYZ 95.641 429.34 null] >> endobj 34 0 obj << /D [1068 0 R /XYZ 168.936 418.381 null] >> endobj 1093 0 obj << /D [1068 0 R /XYZ 95.641 413.275 null] >> endobj 1094 0 obj << /D [1068 0 R /XYZ 95.641 408.294 null] >> endobj 1095 0 obj << /D [1068 0 R /XYZ 179.696 397.46 null] >> endobj 1096 0 obj << /D [1068 0 R /XYZ 95.641 355.616 null] >> endobj 1097 0 obj << /D [1068 0 R /XYZ 465.654 344.658 null] >> endobj 1003 0 obj << /D [1068 0 R /XYZ 95.641 314.949 null] >> endobj 38 0 obj << /D [1068 0 R /XYZ 387.884 284.573 null] >> endobj 1098 0 obj << /D [1068 0 R /XYZ 95.641 278.329 null] >> endobj 1099 0 obj << /D [1068 0 R /XYZ 238.223 267.587 null] >> endobj 1100 0 obj << /D [1068 0 R /XYZ 391.075 267.587 null] >> endobj 1101 0 obj << /D [1068 0 R /XYZ 391.075 267.587 null] >> endobj 1102 0 obj << /D [1068 0 R /XYZ 432.918 267.587 null] >> endobj 1105 0 obj << /D [1068 0 R /XYZ 266.665 256.628 null] >> endobj 1106 0 obj << /D [1068 0 R /XYZ 375.729 256.628 null] >> endobj 1107 0 obj << /D [1068 0 R /XYZ 143.462 245.669 null] >> endobj 1108 0 obj << /D [1068 0 R /XYZ 252.717 234.71 null] >> endobj 1109 0 obj << /D [1068 0 R /XYZ 197.399 212.792 null] >> endobj 1110 0 obj << /D [1068 0 R /XYZ 95.641 205.001 null] >> endobj 1111 0 obj << /D [1068 0 R /XYZ 297.732 196.852 null] >> endobj 1112 0 obj << /D [1068 0 R /XYZ 95.641 186.675 null] >> endobj 1113 0 obj << /D [1068 0 R /XYZ 186.501 177.026 null] >> endobj 1114 0 obj << /D [1068 0 R /XYZ 224.159 177.026 null] >> endobj 1115 0 obj << /D [1068 0 R /XYZ 325.838 177.026 null] >> endobj 1118 0 obj << /D [1068 0 R /XYZ 95.641 141.26 null] >> endobj 1119 0 obj << /D [1068 0 R /XYZ 95.641 127.492 null] >> endobj 1120 0 obj << /D [1068 0 R /XYZ 95.641 112.548 null] >> endobj 1121 0 obj << /D [1068 0 R /XYZ 95.641 112.548 null] >> endobj 1067 0 obj << /Font << /F41 999 0 R /F27 911 0 R /F35 919 0 R /F40 935 0 R /F26 909 0 R /F60 1104 0 R /F62 1117 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1124 0 obj << /Length 2768 /Filter /FlateDecode >> stream xÚ]oã¸ñ}EžZ°QÔ'‚>ì]wÛ¶-p—¢mh™²‰•%Ÿ%%ëûõá õe%]‚€äâ|p,îøwyì'‘¸KÃÜ“ø®8}î°ó—‚OH!a+½“~œ¥xà‡çŸá›ÜÏy÷\ÚsÏû{?Õ¹Ó—ûmžðiüg«/íiþ7U÷ªºÿïóO>=Dû"‰î¶†% [™~‚cì‡ÑH„Œo‰Ø>Ýo¥Èï—³.Ly%ÌŠ†¾uä/÷"óšó½ðô¥ãSÿ â@û¦|ûôå˧??=ãÁüü§Ã‹9Áä®­ˆ}J‰קIêU;Ý_ku2-NúÔ:±4g}QiêiÙ0Y{½ëSn0…„ ¯ÌBéµýù\ñ……*Žš¦/ªê‘¥vÂÐaÃü& ‚ ü¥›ÐN«;þ`o¬\tÑÑÚÔ{C³?ÐPªÓ©ðZK%(&K 5ðó8·¤v DT¬„z?ÞºŠ'Ê×ñ0u“+ƒA@Û÷D!ˆ(’'k¡ÙëQ*­9Ô È¯fæÐAƒbö¦U»J3ÍƒŠŠ¦~ѵÑuÁ×½šîH³1¥¾ÂÅçÆÔ];Uc˜øa&ˆ¾Òido…OÜU`Œ¼sÝ«éÜ©–ÛÁ”ù›ÚÙáoõIÛ[@ãu͈@Ô0O&èˈ‚9m˜Ó©ïP ¬Á¢ÐíĶêæmñ©ƒ2uËúm€Ÿ‹»Ø¯Ùnß2 AâVid1ï·#ï'´Å½Qï›ÅW4‹DxªzUW& =6¯4ûª¯SÞàÂærR•C1n+"€¿O¤uÛ:c1%?úüwþäE™ ù–cW¬“ª)¾ŽDl««ý€Øwò¨áP7;WçÔšNo¥9Ú­“çÒ N$:"±Ú·.ï¼ñ Íñ7ÈŠ“Èœã®`ÌpiçN*ÞLï •²ÜÐ$r{{6źé|vµ7`—€¤VÕ^ŒãòrŸy}¥ÛµÀŽ—æ©˜'¶öÃÅŨcnwî;'« ¬4$½…›‡ît~8];ÝÎãÔ« Ƈ0ü]ñ…¥—N¼ó}×|½˜ntÓÂ&’ö­œ×!‰¹@ñºðUöõ$à:£µ˜™ïž›Kw#Ìö÷$Ä5$"¯jèò‰óêÖü†Œ¬©¢a°‘ŸÃ Pu.ÛÀ¦‹øUªºcî3"ÿõM1!I&¿C“VúoÇÚߥE+Ɖ•üÆg3òY‹îýðù T Ìoºè;=‹6-èÈ‘^x©+S;Y¾£õeáQ­¦¬ßµH±œt~ޱ™æùñé‰u˜ LDÐ."ßþ¢À0ŽÆ8gšcu©[_ÊÁ®¡\;®IŽ £Z&í—N µš•#tF?t(ý\¾QãTÙÁ]n‚®H|)Wå6t`Zcžf| 9;G”H¦Ü‰qKGªV!6}á"rI.¸¤‹¥¡“%˜sïâô^dÚ!…Òºf!ˉÚ[ŸNp2F+\‘ãd^ƒÑÛ¡E|:ü/k83µ»Õðý¶¿!}+3xŠ™Y|1¥þbõ†‘8ô˜#¯¦Â*I¨IìUº#È2´Z›$pײˆ@Çâ£ûœö9¤"hx²µ´ @<§µë=û46Uñºª„惪^WT!0 UEIäT%ìÊU…+R•aBQnAÈ &\<•4Îîž(T2¥p•øI6ãl‡¶Å–$,âpÎv±”qB"ûµ‡²‡N6Й×ì@¤™/ <ÿפŸÅN>¿ö"ƒâk×½Jáùf‹„Z")ಹ;R®ŽDˆÉ-’%‹ÅŒ& NÔÚàb=òıŸé{A "Ïeå éG™|ÏNð†|f'íæö QW~XC?Ř.XgX/60£ 00#ÈJ‹ƒºðƒ,[dG™Ä@‚E²3PébI$³iåƒd´‡O)Z§FÀ¹i[ƒgo½ R©üNöÒÌÉ»³6(ð5â{¸jhllötf`˜P“Üp(Ópâ¸â|”†ËA‹v}œ ¯8R˜´)¤Áäî3PZš÷"Œ§>ãÓÝײŒÀx£ÃïÝ-|‘¸"eRè¦àìŠ[`0ß1Œ‹b˜µƒA_uªÖMßVî ª¶“Ø«ûÓÎViøuIã´˜¤÷­ø)MSnM™+·…÷Hëcóª_Sy‚У>£‚7•ñ¿h³¡ÌOù¡ÀdzeÅ› Ïït^ø;J6CºŸY¦so¬zxðî&M$û˜†ºß½VH~ówÂd:!n^fX´OXÇäðˆÓ^žÆº~ȉ9W ö ÷ù¢§‚©ÿfgº€’Ù´'º¨P|©LõHS*)q—}`G( µÃ¦VÄ3ñ?êI]i‚Ÿ)Läq…JeíÓ&&? ÌF4°èÝm +ääÖë’ÈB—¶åjh–"Y¤p{eC㤈Ëy¼D˜Êt%ÞÈtV·ÈAR°Á¥t戰›¯èÅs ËVLö2>Îj¨Í>_Ps>ž”4foè¥>PG<Û\ j­ºžP>„J4˜9À„d4v­Àd0HÈ.ˆPØmí«gC—fìlô3\²ÇßÒ{j¦ý½ñy×Ô…~\¼ôXl¸ÆVǬ=Ø×ÜÜ›bÚIu½ð8ëel2bӹ휰VœñÙò ¦|œ†ž¬2ŽoZ°xÄþH`0àjw¥“ÎÔ“IWàÁ5 ì:xxê«°å¾dlÛ齘½>P&¿Øî!ÖË8ÄXIHu XZGïDXØ8Œ$VW’cÉÚê ŸohÜ56l&ÉMG¨mªžû Åܷ݃,u-m€L[Ú«é|zîÀ;]‰»Es¾ZËÁÅ26 w,տĄOÛ.r¡'BUÿj6»c ã–V¨št…Ö«Èo„ ˜ @$a9ÿe(m}:ÿ £Vöñok#|©lhÏÊNrD€¢õ¤êÀë*Çæ•VÑ„ûÒWûûC<ʉ¶q;uc+wx¶m–­u¿Y=›ñ 2è•höƒíøÀK— ›èUGëÊ íC\¶¸w>»ÆDià@­}¬ÚÛÚG˜kíã¼°MÿBŸ» pTŒÁ´‚”ŠãòËÐ5wS·š!ZÛY@7×4)•k ÈðǨÅÕ[POú Hü GåÐ^©Ô7+ —d³Ã.ä S¸6@ÿ:+Y¯öé¯íÛ(õ3(X¶ L¨aå÷öß›øBxï×~¹¼9òsÛª˜\ø?Ÿå¡Äendstream endobj 1123 0 obj << /Type /Page /Contents 1124 0 R /Resources 1122 0 R /MediaBox [0 0 609.714 789.041] /Parent 1143 0 R >> endobj 1125 0 obj << /D [1123 0 R /XYZ 95.641 385.476 null] >> endobj 1126 0 obj << /D [1123 0 R /XYZ 159.798 374.517 null] >> endobj 1127 0 obj << /D [1123 0 R /XYZ 305.659 363.559 null] >> endobj 1128 0 obj << /D [1123 0 R /XYZ 95.641 344.809 null] >> endobj 1129 0 obj << /D [1123 0 R /XYZ 165.711 336.659 null] >> endobj 1130 0 obj << /D [1123 0 R /XYZ 143.462 325.7 null] >> endobj 1131 0 obj << /D [1123 0 R /XYZ 164.761 314.742 null] >> endobj 1132 0 obj << /D [1123 0 R /XYZ 321.576 303.783 null] >> endobj 1133 0 obj << /D [1123 0 R /XYZ 299.169 292.824 null] >> endobj 1134 0 obj << /D [1123 0 R /XYZ 327.521 292.824 null] >> endobj 1135 0 obj << /D [1123 0 R /XYZ 382.023 292.824 null] >> endobj 1136 0 obj << /D [1123 0 R /XYZ 378.796 281.865 null] >> endobj 1137 0 obj << /D [1123 0 R /XYZ 426.041 270.906 null] >> endobj 1138 0 obj << /D [1123 0 R /XYZ 143.462 259.947 null] >> endobj 1139 0 obj << /D [1123 0 R /XYZ 95.641 230.239 null] >> endobj 1140 0 obj << /D [1123 0 R /XYZ 407.883 211.13 null] >> endobj 1141 0 obj << /D [1123 0 R /XYZ 95.641 170.463 null] >> endobj 1142 0 obj << /D [1123 0 R /XYZ 95.641 88.769 null] >> endobj 1122 0 obj << /Font << /F41 999 0 R /F35 919 0 R /F40 935 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1146 0 obj << /Length 3177 /Filter /FlateDecode >> stream xÚ¥ZÝÛFÏ_±oõkUß×—&MÚÛC’ÍwÀõf-y-ÄÒ¸’Ç÷×ÉG’×j»À!Ä!g8¿†ÞàÆ§ÁM‘xiÜdaá…ir³i^ù7ODùéU 3ü›ÈKòŒIo^}û#Í.¼"n¶2ã¡ü÷ê‡9 Uw»xøþÚW]ÿ à¦=šýíþñêÝÃÈ:r/Ž‚›õ¸ÃóÍ×Qæ{)}ÃÐ+‚x"J®…0ûýí:Гհ«HW@Õ-0ûÛ`Uo«}ÝV=0ýñp°ÝÐK{]ÒÝùªÚ›¯f¨mÛ{˜þ£í@®¾šæ°¯îžmYV[s¤MöÆ[ÓÔû3œ¤\¾W$…Hû(üíI¶ËýU¿Á†Kš«S-Ç!Šm‰@eÝöæŒ ÃÉ{0XÙý0;{ª¾ðuð¼G]ÜŸêa³«Û'  ²mU»UåZܧªÜØ—ÙZ{€¼ˆ¿*YM'ç %*a@U ðÙlL  ¯tš\ßÅÂÒ ÆeI¼"QîiÏ8ŠÀ‹Ò¶ß Ÿê/ áÂ@k…¬,ŒWF—ûGÓ;bûl·1m‰Ì‹Böïßädz)›^äû^žj€ïɲދeÉĹ&¡—E‘Γ«åc­£$òR?¾Ðô†ÑèHaäT«-›cêÁ†5ÁhŒœ•IXE(¶oÑ>/ìAÝÓØ<övtÉÁ ;e@4·™Ñyà fO_/X XDaHrò7my|ì«QÌ@ö²ÓÙÌO±V¿ ãMyÀó±ù+gdºªìK]ŽàÓ×䣴‡nñ›ï‡ûj¯÷ú`›%,/BÀû÷o_ßÒ÷á6‹W¯ß¼þôî_LW›Ç½N“ ÙvŽãßüÄ''Útõ£ˆL(ÒmÕ>X²3 Aþµ­ÝÌùJ” ±b³cs&•Ž>WÌœ‚Ñ6/É5 a3Ø®– ÂêJЯ8Å|çðµ.Ò@ñI÷¢€u's~cÛ/U[St“Û÷õö½‹øÙ]„¾šéÚªýõÕÊhP—†àO–DÛÈ•ÍØì­ý ³  /!¶@,Ëͱs!‘ìd»Ïµ Œs’Iœoƒ X]ƹ` ta¨/p²Ç} p_®±·„%»µ=l‡ÔÙ}Òh«±#ãXõ «V_ yK–v¦”œèÌ’è§-zš¹× ~?Výzá9…’ÆèºÓ}&ˆ.\‚+£à¾UßcˆÑpìZÌ;íhÛ+—’Ø âì¡7ðŠ¢ÐySpÕÍpó´ ®–00’ WˆÔȽk1Ö¡Ÿ’éÅýÿ™4TÎÄÉ<Px•¬ÃîÆSŽg´ÁGoˆ¨rCLÀÂBÒ¥œ=0ÃÎ ˜Të"¸!ØìÛòNY°ú™¬ &¢«9ÓW47²”Ê—Y´ñሸKˆþÜUÓ/øZèó]&/ª¶ßeËÄØ””…%’§…*Ñz.¹…0%K%³œŸgÍ Ò`w›¯ŽŠLˆ¹‹0Ï—ìI³!E¸Â¯ ?à 2 MfÃ5³ºÆM»e2Q fÕ°pt‰Et©NÂ$\5Õ°³%`. ÄÚ5C…®?‡Î“ÐUð!¯~§³,¾ª’_Õàÿ°«FÇbîóÁ¶:ÍÓÁê¼·Â)$(TéA‘ëÕÝk{ä|Ë0ŸJfžȈ‚Üâ[·XW;~r$æ'1£ï» ››ÌŒÒؤïEcš Z<èõEÉü‘ã<9Š2T"Q®nÚŠ Ó‘ÉxbO¾½Rïf6 mGTÝ1w4à%e´c³hc’—òt%f¹‡µ&ÎuÒyDT×aºàW)+ˆ“'­cáewàDÛè­Î£¢qSu­nôhðËåY $ÎôÙ¸ 1ß+»˜Ûá kº`^jýjÄÈÏ’ŽLŸMÛ£ ±«KŽ1Ôâ*yÀŠ9Î ¾GzÝŠɊ|²<6ø’C™@툩Y³wl”±´d{µ€=K‘¨6õöŒP|Ñ—¢§ —î|’WQŒ²§Š‹&íìi‰….lŽ\?ñªÇJx@g|®×Ô¥¦&µî^…×V ªîIУN«Ë[y`ÔìÅâÄ„Dœ»ô:@ç²%ÔÃŽÂZãÅPœi,½Â'sYGq>³ØÙ@œ_뛉& rM*çTîat¯Üäµ›ñÌçk¤ö„ø6Çý ³¯ “I†…¼{I’Úį ë¼Ã€òØñiXZO¹ÊMš²O¡=‚»jÜ¥;»A¥,¹Ñcžª5}ùÕw­X ùÛ_ýÊ^>[zº «||árÃm:N>D VKª`9éÞÚÎ1#þÆË ‹JžÎRw_–]Ò_ãrŠŽªºTC ÔüÒÕ—×€ç»C¢ï~yªny¶zöœ5ç¥úì¢K÷ç…x”¹2K‘MÊ(R6*z(¢mH$©; ‰ÞŸÇLÆx _w MF‘á<ô-­Û¤–jÓʃ˜Õ7KtQöIa’¥¸«,Õ½ `wä g ÍfS¡®äì‡Ý™ g¶¥WµŽ´Vƒ5•iìm³”³(#“徑XZe”:™O«{E*Ð"Ñ5%€ë4vN†gõ¥þÓÉ 5,Z£¶ÅHÄE†êv¶`Ñ0^ö:JÝ£C,ë êŒA8P事 P¿›•¾Ký܆’*“!Ë)E7²Ýâ2ÀK‰™Ý–/jìZ?u¦éÑB– Ùb¡éD^F/zmdáa; 1Ä÷Ã_—ù›¦jKW¥FhÕó—”.8S†;.±—ÆÑÅÉæ©slvª—ðÏnp”DzØÿ‹ûÉrÏÔÿ/©¤…Ó â}æ® \h3?£4JD7·˜ýö¦üQ¬žŽµü‚H(m³£áÞ$É0EzÆø]-,”'·ØMû´£Ëv¿y~ì'+W°`Ý·”­ ÿèäkC‰±";c Æóß ÍÝ%Þ—iøÉÊgmfÎTLBŠiø‘Ëw%F]?˜.umĘüû±žœÒϸ“½-,¤ï±-Éú(Q­T’„Jø‘ŸNOy& ö%ì£ÎÔŸVãøâ, ©‡úhŽ)ß%ÏÓJ«˜öâ‚ï±ÚÚ©íç~8#]SšqDDzæ‰qî%yþמHóâÀÍÛ>Õ¼šK¥ #-RIÃʅ7øwê~Eæù~úìu…ŸV¸]1ÀDËãF];u?(‡™?o+„~OêOSZ.Q¼à§b¦~n‘6‹ñIÍŽº_ ×þïæ^›ÅÔEE^>^®Hуâæ?šü}ÖkÒ¢š\Ö‚VµÇ€E§cŠô„ÈP­Î»ô†¿©4ÅühžWø¡lúnÎ6Xó_@$þL7ÊýÃmÀÌË»¢ÀÍ÷ZxyˆŽ¶»N‰×÷÷aò=Àûoï}Ó<ˆæ ~|ýá6ÞÓÙˆ™—&Ny;Ûð3€§?t¦ÿ ðÛVC#³Uõ-PŸrÐZy]oýéÝ¿v½0s%݇%v˜pÍîÍý/Ïÿbdüý M / /þfäÿ:%þ£¿;ñçËÿÞKVÚendstream endobj 1145 0 obj << /Type /Page /Contents 1146 0 R /Resources 1144 0 R /MediaBox [0 0 609.714 789.041] /Parent 1143 0 R >> endobj 1147 0 obj << /D [1145 0 R /XYZ 95.641 676.643 null] >> endobj 1148 0 obj << /D [1145 0 R /XYZ 444.333 668.493 null] >> endobj 1149 0 obj << /D [1145 0 R /XYZ 200.476 635.616 null] >> endobj 1150 0 obj << /D [1145 0 R /XYZ 465.654 635.616 null] >> endobj 1151 0 obj << /D [1145 0 R /XYZ 207.594 613.699 null] >> endobj 1152 0 obj << /D [1145 0 R /XYZ 95.641 594.949 null] >> endobj 1153 0 obj << /D [1145 0 R /XYZ 297.609 575.841 null] >> endobj 1154 0 obj << /D [1145 0 R /XYZ 143.462 564.882 null] >> endobj 1004 0 obj << /D [1145 0 R /XYZ 95.641 548.727 null] >> endobj 42 0 obj << /D [1145 0 R /XYZ 265.022 515.756 null] >> endobj 1155 0 obj << /D [1145 0 R /XYZ 95.641 509.578 null] >> endobj 1156 0 obj << /D [1145 0 R /XYZ 95.641 509.578 null] >> endobj 1157 0 obj << /D [1145 0 R /XYZ 288.233 498.77 null] >> endobj 1158 0 obj << /D [1145 0 R /XYZ 251.484 487.811 null] >> endobj 1159 0 obj << /D [1145 0 R /XYZ 353.428 476.852 null] >> endobj 1160 0 obj << /D [1145 0 R /XYZ 422.398 443.975 null] >> endobj 1161 0 obj << /D [1145 0 R /XYZ 95.641 436.184 null] >> endobj 1162 0 obj << /D [1145 0 R /XYZ 95.641 436.184 null] >> endobj 1163 0 obj << /D [1145 0 R /XYZ 400.971 428.035 null] >> endobj 1164 0 obj << /D [1145 0 R /XYZ 324.319 395.158 null] >> endobj 1165 0 obj << /D [1145 0 R /XYZ 236.946 351.323 null] >> endobj 1166 0 obj << /D [1145 0 R /XYZ 143.462 340.364 null] >> endobj 1167 0 obj << /D [1145 0 R /XYZ 367.922 340.364 null] >> endobj 1168 0 obj << /D [1145 0 R /XYZ 95.641 321.614 null] >> endobj 1169 0 obj << /D [1145 0 R /XYZ 95.641 321.614 null] >> endobj 1170 0 obj << /D [1145 0 R /XYZ 217.022 313.465 null] >> endobj 1171 0 obj << /D [1145 0 R /XYZ 143.462 280.588 null] >> endobj 1172 0 obj << /D [1145 0 R /XYZ 257.385 236.752 null] >> endobj 1173 0 obj << /D [1145 0 R /XYZ 468.354 236.752 null] >> endobj 1174 0 obj << /D [1145 0 R /XYZ 95.641 218.003 null] >> endobj 1175 0 obj << /D [1145 0 R /XYZ 95.641 218.003 null] >> endobj 1176 0 obj << /D [1145 0 R /XYZ 284.934 187.935 null] >> endobj 1177 0 obj << /D [1145 0 R /XYZ 489.355 187.935 null] >> endobj 1178 0 obj << /D [1145 0 R /XYZ 292.05 176.976 null] >> endobj 1179 0 obj << /D [1145 0 R /XYZ 365.404 176.976 null] >> endobj 1180 0 obj << /D [1145 0 R /XYZ 401.241 166.017 null] >> endobj 1181 0 obj << /D [1145 0 R /XYZ 143.462 155.059 null] >> endobj 1182 0 obj << /D [1145 0 R /XYZ 95.641 149.889 null] >> endobj 1183 0 obj << /D [1145 0 R /XYZ 230.266 139.118 null] >> endobj 1184 0 obj << /D [1145 0 R /XYZ 346.828 139.118 null] >> endobj 1185 0 obj << /D [1145 0 R /XYZ 95.641 100.702 null] >> endobj 1186 0 obj << /D [1145 0 R /XYZ 191.88 83.527 null] >> endobj 1187 0 obj << /D [1145 0 R /XYZ 186.501 73.664 null] >> endobj 1144 0 obj << /Font << /F41 999 0 R /F35 919 0 R /F40 935 0 R /F27 911 0 R /F39 927 0 R /F26 909 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1190 0 obj << /Length 2417 /Filter /FlateDecode >> stream xÚµËrã8îÞ_‘[äªX-ê­™K»óèí®$=5qv;{ e:VÅ–<·ÿ~´d[I:µéò  ˆeqâÁOœd‘‡â$ñ3×£“|ùÁ;y€•/S"€¥ä$p£4A‚Ïã¯`Oæfqp2žºñô?Îù\®´ªC?òáÒxߨº9%øF–k¹üwüíÃåx'@x‘+âðd¸“p¨Â03×Ëð}7a«…w’‚qW 0Œ=Ϲ/QÒÇ+?n‰‚Ä£Œ)E@¤7²ÎçŠ4ŽiW—õ· 37Å#·Rþ¸¿"åN»;1ÛÓ†àÏr{Æz‚…s[=IÂÞå•.ä[4¹û~ÿçkšTyæ'r•¯ëBoi&W«E‘†Â‘º¨Ê¹aê†"íÊ´õv4¾Gz¸F7éÕìvtóÚMŒçÕR²iÆl®¿”^Vµz‹ ~âÎý˜H¿çºš ¯Ò­§é;ßúmUoŠ|Η|«6\Wå´*{ޝÊRåºÈ×ú-Œ¾ôÔwýdwP¦Ü*Y7}¬‰ø˜õùëŽtpÞW­KëO×x8MÓjfÑË¥%ÿc¡dóΞƒXY«¼ª§ÏêjÉ÷îMF·q0‚Ð/žTó—ÿ~~~ÿŒ&)k2*uñÏZ±K_(¹_{æ°}"..Gã÷ªZ6¿2°DB¤WjR¯!ÓqdeaòÞ‘ÕKG.)e¿*ÂR¯a,Lðý›ëyÃi=$ÜTn߈£û»Wlñ/Í?ÒZæïP½Þ¬¹\þ‰Q†¶ž¾)€®F7ç}ºâ“qt¯ŸîÎÒÅ?G&üO¤Iµ Ê£(…b7ñ# PèHâÈùryqþý†àz RÇÆ)ኆƥœ*‚Ö+1§á¸(JÕ¸_Jì#,– ¹d‡ØY¨§pÔ‚fåz 3Sˆp*Ëi‡8r´|8c¬ðùá0ÜžbY5pýœÜ¨Aà\>)‚K–9Or±f̬Z,ªMQ>ÐTÏ‚\‚Æõ·çùu—=1+J¨'…AŽà¡áH‰f§¹Y¬šfØs b0S4–¹¢v±(§ê¥7Jh?ÌHkÄ‚-!CNlëIVŒ¼–ÐÏÊÜ,4b¯y{óv¼©$q$ÚˆðS©%Aº¢Å‰¢y£ëAê¬s½&­§ûd²Ü2õ@¼Ïø L•–ÅâwBòí!~þP`|ád^<Ì©pXŒOY«:NÔ•9=¯8Z×pc8dµAsu¸4#FèèZ7QEÉ̤fV­.ÞY®¤8ŠXû!^­ŒxÀÚí€.àì%yŠZªR7„&/Ý'l U•Ê=N=¾±o³Øu1SׯG™!æùCtÓÊØ ¸–•&1¤ Üu‘kZBeðŒC?…½b蘭  ðžWzî<d¾#šIbŽØ´Z‘ûç8Âbÿö"ÏœÈóª|›@{XaqSEІ¯‰yë9ÝNê4+•³­E«½ JÚ…¹¡Œµ ,gU½¤·-ðHW”ÌRÝ%–ijÎkmžãX±<Ë×è ÈY„&ÁV.áÆj“µ÷”4q?Û½>»‘?0­€I(3› ¶!Zts°‰&‚Õì` •ÞÏ%‚›- ð͛8!3…a`ò&b$ ‡Á…8¸†"—mb¦ ¸fXoW Հ㹲Žcøu'3Ów£8Ô⇚>/ 9ZA=¾}y)‚àEù6‚ ]Nd£šß€s9àÓiÑp2“Ëb±3€À“;Å]_5¼Ù”V{"çSÏ1ò¹bmµ£NÖ„‡Ÿ&mñÁ 7íijŠb´¥S?ärµàÉQ2HÙé:[R“E¯€ AG2ÛRŠ@‹¶»%í¥:ிš¿èÕ¯¬Ï˜U¹~õ#†rYÚ÷¼³å‚ι+òŽÈúª»8Û5•íl·Y7Oõ_JÀS¨(ˆvE*ˆ©!b#±¹8•¹œ›+Ø£ 3žbR&D)—¦-rIKEâŽ*G°ü?²ôÍ©8(ú໡ç,׿ÍîJ)àLžñ½&í"ôíÄ5ö[®èYÙ/J‡ºº ™›F!S¢QÏX”)Ä!¾¡ÂØ×ïžnÆØNÁRhæ³½ãÛoø|ECÛ4öœ»ÇrÁÏÜ\ŠYáW/v°M»—A“|JWøÒ”Ü'NÔ¬j+yÒv•íg3Àò¹Lwkàø•ÚiE®Üë~ÒôöÉÛhªSM³Çe8‚«Bsø¿ê0ÎÜ „!ÊÜÈïýc5b¾}éoÝèqèf&ùwþ1£ÀAendstream endobj 1189 0 obj << /Type /Page /Contents 1190 0 R /Resources 1188 0 R /MediaBox [0 0 609.714 789.041] /Parent 1143 0 R >> endobj 1191 0 obj << /D [1189 0 R /XYZ 95.641 729.265 null] >> endobj 1192 0 obj << /D [1189 0 R /XYZ 202.64 706.351 null] >> endobj 1193 0 obj << /D [1189 0 R /XYZ 202.64 696.488 null] >> endobj 1194 0 obj << /D [1189 0 R /XYZ 202.64 686.625 null] >> endobj 1195 0 obj << /D [1189 0 R /XYZ 202.64 666.899 null] >> endobj 1196 0 obj << /D [1189 0 R /XYZ 202.64 657.036 null] >> endobj 1197 0 obj << /D [1189 0 R /XYZ 202.64 647.173 null] >> endobj 1198 0 obj << /D [1189 0 R /XYZ 197.26 637.31 null] >> endobj 1199 0 obj << /D [1189 0 R /XYZ 202.64 627.447 null] >> endobj 1200 0 obj << /D [1189 0 R /XYZ 202.64 617.584 null] >> endobj 1201 0 obj << /D [1189 0 R /XYZ 191.88 607.721 null] >> endobj 1202 0 obj << /D [1189 0 R /XYZ 202.64 587.995 null] >> endobj 1203 0 obj << /D [1189 0 R /XYZ 202.64 578.132 null] >> endobj 1204 0 obj << /D [1189 0 R /XYZ 202.64 568.269 null] >> endobj 1205 0 obj << /D [1189 0 R /XYZ 197.26 558.406 null] >> endobj 1206 0 obj << /D [1189 0 R /XYZ 202.64 548.543 null] >> endobj 1207 0 obj << /D [1189 0 R /XYZ 202.64 538.68 null] >> endobj 1208 0 obj << /D [1189 0 R /XYZ 95.641 473.325 null] >> endobj 1209 0 obj << /D [1189 0 R /XYZ 153.854 462.366 null] >> endobj 1210 0 obj << /D [1189 0 R /XYZ 95.641 432.658 null] >> endobj 1211 0 obj << /D [1189 0 R /XYZ 373.431 402.59 null] >> endobj 1212 0 obj << /D [1189 0 R /XYZ 95.641 361.923 null] >> endobj 1213 0 obj << /D [1189 0 R /XYZ 143.462 342.815 null] >> endobj 1214 0 obj << /D [1189 0 R /XYZ 253.124 331.856 null] >> endobj 1215 0 obj << /D [1189 0 R /XYZ 282.124 331.856 null] >> endobj 1216 0 obj << /D [1189 0 R /XYZ 310.396 331.856 null] >> endobj 1217 0 obj << /D [1189 0 R /XYZ 362.337 331.856 null] >> endobj 1218 0 obj << /D [1189 0 R /XYZ 143.462 298.979 null] >> endobj 1219 0 obj << /D [1189 0 R /XYZ 95.641 260.907 null] >> endobj 1220 0 obj << /D [1189 0 R /XYZ 336.62 250.162 null] >> endobj 1221 0 obj << /D [1189 0 R /XYZ 95.641 231.412 null] >> endobj 1222 0 obj << /D [1189 0 R /XYZ 143.462 212.304 null] >> endobj 1223 0 obj << /D [1189 0 R /XYZ 342.227 212.304 null] >> endobj 1224 0 obj << /D [1189 0 R /XYZ 143.462 201.345 null] >> endobj 1225 0 obj << /D [1189 0 R /XYZ 378.07 179.427 null] >> endobj 1226 0 obj << /D [1189 0 R /XYZ 95.641 141.011 null] >> endobj 1227 0 obj << /D [1189 0 R /XYZ 181.121 133.699 null] >> endobj 1228 0 obj << /D [1189 0 R /XYZ 181.121 123.836 null] >> endobj 1229 0 obj << /D [1189 0 R /XYZ 181.121 113.973 null] >> endobj 1230 0 obj << /D [1189 0 R /XYZ 95.641 88.07 null] >> endobj 1188 0 obj << /Font << /F41 999 0 R /F40 935 0 R /F26 909 0 R /F35 919 0 R /F62 1117 0 R /F39 927 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1233 0 obj << /Length 3021 /Filter /FlateDecode >> stream xÚµZ_oÛ8ï§È[ fEŠ¢¤íÃÕm“nMwѦ·ÜÞm˱PGÊYrS÷Óß g(‹–Üf8øACr4ä œ?”åY?y–'Âhy–ª\(“œ-îŸEgw0òî™dŽè,I–âÐëÛg/®€;¹‰ÏnWŽãvù¯É›µ}h‹íùT%ÑD z~nŠmóœè[íìæüß·vyÛ‰Ö2:–gÓn†ãɧq O¥D.u·ˆ8.¢Ùm+{_\ÀŒy4©·ôl×°>9iꊚ˺hªç-5Öö+sYz„²öõŽˆ{»"Ë'»†ù_„³½8jW5ËÛØf]4hXíTF"Or·jÛ’…ìfÃv»ªÙÅ7{ÿ°)~Á·@弯20ˆ<ŠˆKâcëƒ1ϧI…ÝõŠžMaÁ Ûź¬îx¤¢ç‡ÙÍeCSéè,ƒ©ŒŸ*&ËÜTò|j"â%Ve¬q* hE»qc·{°Æ@Þ”¹¦¹ÈLü¿ý?Èd ÷@Õ‰T°UJÑV€² 4“¸_D<Ú}CT[Ó³¨è, ={< W°Kj¹ÙINÙ®™ƒå|©êG~‰ñ(¨5JEdÁŸ6°jODµ»ŸÃêR=Ap›hRV‹ÍnIp€ñï…Ó²¾ æ]ùµ¨øMX@ã¥-_8”º÷˶´›FÐÐl¸=p`à˜¶÷ûrU¼/«¢=‘"’ó±v¨Ô4֑Љt£ÍXÔî‰ÖLS>Ÿ@°â@‘â©ñŠ»N8 nr£“K™)ž}€Ÿþ:cp–ÊsnP— ’Û®ëÝÝÚÓMÜmt>–6@Íy}˲yØØ}±$Me¦…ŽBMÈ ™@üEjÛ ëÈÔ¤8!¨\ã«Ý옩®6ûs)å„aó»[ƒ5sY-‹oCrmr…—Û~¾@¯ëÇâ«GS~ä-šš\ ùO X} æì—ìÜ{¨¶<®n±¦®•÷ˆ(bÏ"ª}èãübt‹ÝÒÀgBøÂ¥Ý¢%cêßZ¤”ÛHê++z¶Ä¤&x`½7Å6žŠ&àñ§ñ9w7Å71rb-ý´“`<ÀºH…ri×þ³+ýöa§¢9…ÈjÒÌtŠŒ&Žl}ºüçpv%…Nó¾y»ç»–ÚPôKøÍÒƒ‰GTË »]ƒí¸³ÍÕ¢ÉúÇ2&Þ{V—B<нun†ËÏDšzÕ9R ™jf¸úñûåñ:acÙšq$2Ê}À—Í4"Ïý’è²¥çÂVDÐÉ&›bÅCó­¾éžâ)à18CL&âÈoÐç1 ŒÉ~lÈxþm~"Oýû¼ K¾„›Î.)&8mOeAôŒÇ™Ó®aFçšÉ×Aò)¦C#Pi–‡nyµq,´î{er]ïi<¤bÂùžbÌNÒ@ôÿ!Ò²ä'HëBÊÕߟ«úà“ÕÄÎ!ÚÍšH@Ì û—<Ä65%¨¨âÖ–Ô%Œ}c?p¨8-9´ìví}ÙE¾ íyP©}šŠ„ýùC`ÆnÈjâ^ÔUkKôáØj×ô¿ ÁÖ‡ìjÏËm»¾ Öʶ»­Ý”ßm[ÖwB"BœKœÓ¶kAÍY5’ ‘t€]¦»skyÆÁ^K 0nˆ”ÄBhÂŽÇuÝ0ÙÚ;" z– ‹ë.Z3OoÊvÿ€ùŠs¾&Ó] Ak#¼z}ýñv,Cu,}˦ €LØ»£Ê[ë ËU&xààF¶øW2µN¡âÐà”^i¹ò{6…m˜´c¹TxËUtˆßÎnGr+Èôré»ÛÞ2Áý¦]Œd‘¿¿Ÿ½™™

cþ0»©}”†”ÝoÈ”$ªÊdžD[êYDÔ.ùwC.0 êźŒ‘DGéÀÉ[¢àÔRÕ(†¿î6!ñ· &¸MHèÎÐõ[î 7ϹEt­Õ‘˜`ÏÙØ] zžH'O¼þJ;ÈûT„S‡Ó®êͦ~ô.]¦a•÷îòí›ßnàt%:«ófÔ{ÄÿºNW«uî?8 Øq.ç]ÐéjJwÖ¯¡øÖl±Øm‰i)º³Ÿ(=<ÆÒ¸‹Ç #¬’iwx%uì²Ô\Öä Ñwâ\ƒ×M<øÞ^ÎnGÏu’¤½s-Hþ©¬CΑ}gŸ?Ú7éò{¶¯ìð‚3´^ù…¥²Z¦g¼¢l6Yäî×:»ÍŽâÞM¢K§‡åÈ÷ߦºíá¢/ÊehºÕBÆâmÛ…Aƒjš›ëùþln E2áø/q“™p£®¨ÉHšrHÓjV€A:èóW|“ÛŠží ¿˜§½S~®?¼½Á¸³<é®’ŒÐ±zŠcЄ°øèž4̪D,Ó§`E5eó²¯nSPëà5¡qoKw«—(A×|?ò¿ÎH0MßÒ?Î`_¼!9p_¡¿ØßÐÙ*øÄÜ·BÉÎÝ_ý €û €fà¯e[”¾¹ÝÀ{5þèŸ÷AòêÊ¼ê¶ÆÅÁ÷_?zÍü×*yu’ïë«ËŽÏœæ»™}tI‘[Wøpxòì…Ù-~SDRf¹|Ò? W‹'gù€ò¾¯«¥s.‡{Ï§î¢Æå#uU‹¶\ìÚ¿²’C‘ùÔ•ý²ÅÄ ÉY°’åÈ?>:öâͯ×ï»=K_ÿgªS‘á÷XäTÁzNþuÈœúSPÔý¿Œ€Gcendstream endobj 1232 0 obj << /Type /Page /Contents 1233 0 R /Resources 1231 0 R /MediaBox [0 0 609.714 789.041] /Parent 1143 0 R >> endobj 1234 0 obj << /D [1232 0 R /XYZ 95.641 729.265 null] >> endobj 1235 0 obj << /D [1232 0 R /XYZ 232.168 695.392 null] >> endobj 1236 0 obj << /D [1232 0 R /XYZ 95.641 656.976 null] >> endobj 1237 0 obj << /D [1232 0 R /XYZ 181.121 639.801 null] >> endobj 1238 0 obj << /D [1232 0 R /XYZ 181.121 629.938 null] >> endobj 1239 0 obj << /D [1232 0 R /XYZ 181.121 620.075 null] >> endobj 1240 0 obj << /D [1232 0 R /XYZ 432.898 588.194 null] >> endobj 1241 0 obj << /D [1232 0 R /XYZ 288.644 577.235 null] >> endobj 1242 0 obj << /D [1232 0 R /XYZ 95.641 547.527 null] >> endobj 1243 0 obj << /D [1232 0 R /XYZ 378.008 539.377 null] >> endobj 1244 0 obj << /D [1232 0 R /XYZ 508.095 539.377 null] >> endobj 1245 0 obj << /D [1232 0 R /XYZ 444.573 528.418 null] >> endobj 1246 0 obj << /D [1232 0 R /XYZ 465.524 528.418 null] >> endobj 1247 0 obj << /D [1232 0 R /XYZ 311.771 517.46 null] >> endobj 1248 0 obj << /D [1232 0 R /XYZ 332.505 517.46 null] >> endobj 1249 0 obj << /D [1232 0 R /XYZ 151.251 506.501 null] >> endobj 1250 0 obj << /D [1232 0 R /XYZ 301.613 506.501 null] >> endobj 1251 0 obj << /D [1232 0 R /XYZ 322.58 506.501 null] >> endobj 1252 0 obj << /D [1232 0 R /XYZ 95.641 487.751 null] >> endobj 1253 0 obj << /D [1232 0 R /XYZ 490.162 468.643 null] >> endobj 1254 0 obj << /D [1232 0 R /XYZ 95.641 449.893 null] >> endobj 1255 0 obj << /D [1232 0 R /XYZ 287.036 441.743 null] >> endobj 1256 0 obj << /D [1232 0 R /XYZ 358.717 441.743 null] >> endobj 1257 0 obj << /D [1232 0 R /XYZ 478.207 441.743 null] >> endobj 1258 0 obj << /D [1232 0 R /XYZ 186.244 430.785 null] >> endobj 1259 0 obj << /D [1232 0 R /XYZ 234.864 430.785 null] >> endobj 1260 0 obj << /D [1232 0 R /XYZ 152.656 419.826 null] >> endobj 1261 0 obj << /D [1232 0 R /XYZ 205.288 419.826 null] >> endobj 1262 0 obj << /D [1232 0 R /XYZ 359.221 419.826 null] >> endobj 1263 0 obj << /D [1232 0 R /XYZ 411.599 408.867 null] >> endobj 1264 0 obj << /D [1232 0 R /XYZ 266.723 386.949 null] >> endobj 1265 0 obj << /D [1232 0 R /XYZ 192.733 375.99 null] >> endobj 1266 0 obj << /D [1232 0 R /XYZ 173.668 365.031 null] >> endobj 1267 0 obj << /D [1232 0 R /XYZ 95.641 348.877 null] >> endobj 1268 0 obj << /D [1232 0 R /XYZ 297.977 338.132 null] >> endobj 1269 0 obj << /D [1232 0 R /XYZ 458.404 338.132 null] >> endobj 1270 0 obj << /D [1232 0 R /XYZ 396.707 327.173 null] >> endobj 1271 0 obj << /D [1232 0 R /XYZ 143.462 316.214 null] >> endobj 1272 0 obj << /D [1232 0 R /XYZ 251.126 316.214 null] >> endobj 1273 0 obj << /D [1232 0 R /XYZ 162.63 305.255 null] >> endobj 1274 0 obj << /D [1232 0 R /XYZ 95.641 300.06 null] >> endobj 1275 0 obj << /D [1232 0 R /XYZ 299.617 289.315 null] >> endobj 1276 0 obj << /D [1232 0 R /XYZ 350.974 289.315 null] >> endobj 1277 0 obj << /D [1232 0 R /XYZ 95.641 281.524 null] >> endobj 1278 0 obj << /D [1232 0 R /XYZ 458.076 273.375 null] >> endobj 1279 0 obj << /D [1232 0 R /XYZ 314.363 251.457 null] >> endobj 1280 0 obj << /D [1232 0 R /XYZ 95.641 232.707 null] >> endobj 1281 0 obj << /D [1232 0 R /XYZ 201.062 224.558 null] >> endobj 1282 0 obj << /D [1232 0 R /XYZ 241.09 213.599 null] >> endobj 1283 0 obj << /D [1232 0 R /XYZ 283.617 213.599 null] >> endobj 1284 0 obj << /D [1232 0 R /XYZ 337.287 213.599 null] >> endobj 1285 0 obj << /D [1232 0 R /XYZ 143.462 202.64 null] >> endobj 1286 0 obj << /D [1232 0 R /XYZ 95.641 197.471 null] >> endobj 1287 0 obj << /D [1232 0 R /XYZ 296.895 186.7 null] >> endobj 1288 0 obj << /D [1232 0 R /XYZ 95.641 148.284 null] >> endobj 1289 0 obj << /D [1232 0 R /XYZ 202.64 91.656 null] >> endobj 1290 0 obj << /D [1232 0 R /XYZ 202.64 81.793 null] >> endobj 1291 0 obj << /D [1232 0 R /XYZ 202.64 71.93 null] >> endobj 1231 0 obj << /Font << /F41 999 0 R /F35 919 0 R /F39 927 0 R /F40 935 0 R /F26 909 0 R /F62 1117 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1294 0 obj << /Length 2868 /Filter /FlateDecode >> stream xÚ­ËrÜ8ðmÛUÝŠH½w/“‡“x+ÎÎ$Ne¶vö K´[µÔ%wü÷  Þq\[)‚  l‹3þÄY8¡/Î"™82 βÃ3÷ìfÞ>Lá ¦¢3Ï â ^^?{þÖ$Nzg×·†î:ÿÏæÕ>=¶ª9ßÉÀ݇¾Ÿµjôß¾J«.-Ïÿ{ýÏg×ý úg»~‡¹;/Hœ88ÛIé$„pÏb" !Îw¡ën^½»|OÐo—"ú ÷|þÆ ¡wÂu¢X‡NJ³ôz¯ˆÆ=ˆ aÞ.q|óâjÉÏÑü€ Ë¢Rç;‘ÈMªuqWi´{ÆÞ¦‡s±)ʇ>kÎE¼©µÞ@Ý*úVU®¾XßÒ÷MèpM\ĆÖdµùæÌ¹®Ú´AÜ à$¨Ž:Râ»ÏŸ^®œ4q"ߪ$­ò%Ké‚μ©A¾\¾¹Xòò]G€Í­¦¼È¤-Aƒ"h¢Æ¯G*3ˆSM€>ÖVúù1eµÚ¡™kK;W âÒR×(žÄ– +"6"íë2G‘\ ÄO°9¤MS¤wŠêö¡‰¿ÜÀmÓ»’(ÌçC^½øøq©éc30¼e•o<䂯:2–+n¿´Þ’x¦e·×2l0Ö²ËZæ} "ÛeÎz%mIÏwן¸MQµ´Æ‘ÆÏÑÉ…‡¦¾ì©¼h‹ênBh&¦VÒ[Â>Ô‘fiUÕíÀcØré‡q‘E<åö Çõ¬‰¶KN`A7œªú—#t\<Î(êMz¡ï„ž7Ñäúm‘¾¸qÏÜÄTPÓÒã ¦ùÑ=×áØ3þAlAŸZÈ÷‰"H |©œP7Äw…çæmx_ܪ÷Æí–öH»V(üu'ˆ©¤ã6ÒMÈ X©ÒVѸR'fþCÈÛº±ëAôŽyÚ¦7©VÛïáȸ”<«ߢ¢«opéocn,ºmÎãM—í̑܉qÛβ÷„›6¡4™‹$<`÷@ˆSúÐS ¯ÿËueëü®>ADjÎ!®m™SË_Mïê:'̱I³¶È˜‹¹ñðí4#t gI9R.Ïðöâõ«]ièòñ½PpÀà>-;Eà-*¼9¤Ž—~‰]F?w“@:®°±.¯離[2³9ˆ’^Ò²dPµ4…ù Ár;v5!L˜§¨1a{~`¤oõ¨C§Uߨ!´ÁÌ—ó }ïñ`þ…O]ÑÜ"¦-4!!ø}äxLJ!›\‰ï·® ÀŠ gɃAr4í2ûË( ÄkéÿË«õ”íö)ûGéßOf‰éÓÅŸ+ÑÇwd_\Ù¼‚·ƒ 2'QEC#}TY‘–48¨´‚üÁKØó¼Áó|¼óävft½¯»»=™=ñØ›žÙäÄs•æ+¶ °zŠ×û¾PÒº;àqò+„(äp*ÐcZµ“€˜îñT©//?^¯¦  ¿+«)È gÅÙë‹¿†Ñ«wkÅ ï½Çlé뎃ùMü<;¾üüñre¨‡‚Y-)…äбï¦hÚý–9$‚mK¡4A±&Owá©ô4¯æÛîØ÷j¨pð²âm¹¤è»þ;–~|ÌŸxV-]+²mN¦Ã(iÐQ2Öë$!$܇djÊõBÕ 6Jqõ‹|IÉA8ªMZsh08>RwcC±+ måX&~Š$\© Eq.'¸OÙHn.3 %æD‚9‘ë,‚VDÎjÅ˯/×k¼ä‘ÏwüyõEç«Uez}‘´ZÈA!äÉ«Oë¬Ä$”né°ºàæ‘l ‘õÄNO/ÖP÷@I jÊ 25”Þ}ñg°°ËW24 ŠŠ¢-äN‡ˆ'ÖŠþ>¬–øÒ”ødN„'’PlF,›s\P£fD„btÕ¶NÉ_Ð@Ë‹_Ѭ0Z/ù±u üÇ]$ƒÿ¯Öçz[@:L<[o‹þ-dçGžyq££a!7z_Ÿ*;GßÖ«ïéáXb(BÊBÖ˜hÍÂb ¿¶ŒDrr ‡&LÁ¿ˆ’î“ã#”u‰Í–Gò%û0€2^kbÛ&Ķˆ¹Þ‡/¶š[÷ওB‘Xhã7-¡Vgn¤;%­l¼%#°ÄcŸ>¤_Mƒ„¦ƒ Hª ìÓ ¶¦/·B9Q˜†èöoL!ïâßçøpÔY΋y  s°|ok¼pV‚B¯4SÿP¤e ª"ødÚ6„Œ> –!ò9–Ál)ó¨ØÌx’¶œ>Ô÷(0NPVÎKI©½2«â¶›Zc;üjúê–§¹Ã¥„år5J°m¹©&’¨&™û‘K|·Œ¡ ŽøÝçò¬ŒâÍÕŇÏ+e5/:/‰C³äÅ-¾¦.;…ÐñŸØ'ôtõQQOƒ•2}Õ÷BóŒï;aÓÛ4ôšl»š>¦Ù6„•]b:MàÄ·M“çÛÞÉøxƒO_©Ôç‡á‰!Uu_PRJÒÒï%ÜE/Û×µ…ñœø…£7 µ0}á†ï#Ê0A]“.¨›úd×y°}¤NBÕŒÂ*Ï:ÝÀ—W|Ri“íFœÁ‹<·ûô9•7D!ê'oÎl^«RµjÎY1ÛÛ/Ι‰à÷"ûÊz¦O£Ž5Fwfˆì™iYèÖš„Ejºjɹ¡¹·ªƒYÇloéÁà]ª1Þ;§ªÒÊرY7é·ùÚcSß5éaíG¾9£_M>{e@S¾¸æÎ‘&ù…ã*>”Õ&wž‚.cJôgÜR¶uúÀÞ¿ Òó¾lnˆ‰¹Á&6 Rà40ѳ'‘ùŠÖ²êýߌèq€#Ð ^!~ ¢:€ú½Ör¤9†Ç¿ó €ì¯ ‡u9Õ''pb¬C²†î‹Ü0€ÑõÙé«.bs*Ê<³ïv4;cœ¥Çô¦ 'Ý®H{ÚÙžÞÌJSS …MP¯3Ê€Á²®Åd]™6„Z¦tÄ’¥ð™.g¶c™ýŒ‰"I1嬕}ŒÄ<†ö%(bc&çˆðdÃhTHhšŸö1ˆa¡--š «5“Ù »´ww¼d|^–ÚÝÜqøc|ݵǮsY(ôÀq áQ\3¯³×V¢I^hcÇ*ò"d†ô¸èYµâšqÀ˜84 Ñ€þ`â$0èC%b!Tr˜ä=w+MÝ GÎ.btgü ì2ÍK`A>2‰Á›4ûÚ‰„ا„¾ÄsKâ°çèŒë5ÿV`˜·„³¿ø1Ë•ËNÑZ†þJ‹z“{ 4w…ñ=©çÀÇÌ,SšÉMÿúý2~‘—¿j’‡£1™CC 2|31!#Æ£nVB1¥g‘zˆŒðņ«d’£íšÊ®ážüó‡Ë?·eN¢°L¢‰†¼¾Z5¤$˜ì߀q D¾ù8…/v*K;ËÇ5™{Τ4ј@‡UÝÓ{o]­éäÀ¿òòc¢çŽÃ5¸Þ–&ï uF¹ì@ð&ôöuGAÔ•ö·^AѪGkÀÙÿMì‚Ø bø†Aârõ?'|á9>¾Ñ>öÑœsà¸ævÄð&»ìendstream endobj 1293 0 obj << /Type /Page /Contents 1294 0 R /Resources 1292 0 R /MediaBox [0 0 609.714 789.041] /Parent 1143 0 R >> endobj 1295 0 obj << /D [1293 0 R /XYZ 95.641 729.265 null] >> endobj 1006 0 obj << /D [1293 0 R /XYZ 95.641 741.22 null] >> endobj 1296 0 obj << /D [1293 0 R /XYZ 95.641 680.448 null] >> endobj 1297 0 obj << /D [1293 0 R /XYZ 162.052 669.489 null] >> endobj 1298 0 obj << /D [1293 0 R /XYZ 143.462 658.531 null] >> endobj 1299 0 obj << /D [1293 0 R /XYZ 203.804 658.531 null] >> endobj 1300 0 obj << /D [1293 0 R /XYZ 269.206 647.572 null] >> endobj 1301 0 obj << /D [1293 0 R /XYZ 339.398 647.572 null] >> endobj 1302 0 obj << /D [1293 0 R /XYZ 429.623 636.613 null] >> endobj 1303 0 obj << /D [1293 0 R /XYZ 466.363 636.613 null] >> endobj 1304 0 obj << /D [1293 0 R /XYZ 508.095 636.613 null] >> endobj 1305 0 obj << /D [1293 0 R /XYZ 184.817 625.654 null] >> endobj 1306 0 obj << /D [1293 0 R /XYZ 356.412 625.654 null] >> endobj 1307 0 obj << /D [1293 0 R /XYZ 95.641 617.863 null] >> endobj 1308 0 obj << /D [1293 0 R /XYZ 143.462 587.796 null] >> endobj 1309 0 obj << /D [1293 0 R /XYZ 302.732 587.796 null] >> endobj 1310 0 obj << /D [1293 0 R /XYZ 366.887 576.837 null] >> endobj 1311 0 obj << /D [1293 0 R /XYZ 143.462 565.878 null] >> endobj 1312 0 obj << /D [1293 0 R /XYZ 204.041 565.878 null] >> endobj 1313 0 obj << /D [1293 0 R /XYZ 203.209 554.919 null] >> endobj 1314 0 obj << /D [1293 0 R /XYZ 370.557 554.919 null] >> endobj 1315 0 obj << /D [1293 0 R /XYZ 412.132 554.919 null] >> endobj 1316 0 obj << /D [1293 0 R /XYZ 453.707 554.919 null] >> endobj 1317 0 obj << /D [1293 0 R /XYZ 508.095 554.919 null] >> endobj 1318 0 obj << /D [1293 0 R /XYZ 143.462 533.001 null] >> endobj 1319 0 obj << /D [1293 0 R /XYZ 307.278 533.001 null] >> endobj 1320 0 obj << /D [1293 0 R /XYZ 313.583 522.042 null] >> endobj 1321 0 obj << /D [1293 0 R /XYZ 354.125 522.042 null] >> endobj 1322 0 obj << /D [1293 0 R /XYZ 403.826 522.042 null] >> endobj 1323 0 obj << /D [1293 0 R /XYZ 172.134 500.125 null] >> endobj 1324 0 obj << /D [1293 0 R /XYZ 208.149 500.125 null] >> endobj 1325 0 obj << /D [1293 0 R /XYZ 249.155 500.125 null] >> endobj 1326 0 obj << /D [1293 0 R /XYZ 299.974 500.125 null] >> endobj 1327 0 obj << /D [1293 0 R /XYZ 95.641 493.509 null] >> endobj 1328 0 obj << /D [1293 0 R /XYZ 400.394 484.184 null] >> endobj 1329 0 obj << /D [1293 0 R /XYZ 143.462 473.225 null] >> endobj 1005 0 obj << /D [1293 0 R /XYZ 95.641 435.153 null] >> endobj 46 0 obj << /D [1293 0 R /XYZ 165.281 402.182 null] >> endobj 1330 0 obj << /D [1293 0 R /XYZ 95.641 396.004 null] >> endobj 1331 0 obj << /D [1293 0 R /XYZ 169.912 385.196 null] >> endobj 1332 0 obj << /D [1293 0 R /XYZ 95.641 364.06 null] >> endobj 1333 0 obj << /D [1293 0 R /XYZ 95.641 220.015 null] >> endobj 1334 0 obj << /D [1293 0 R /XYZ 95.641 201.265 null] >> endobj 1335 0 obj << /D [1293 0 R /XYZ 314.16 105.445 null] >> endobj 1336 0 obj << /D [1293 0 R /XYZ 95.641 100.249 null] >> endobj 1292 0 obj << /Font << /F41 999 0 R /F40 935 0 R /F35 919 0 R /F62 1117 0 R /F27 911 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1339 0 obj << /Length 3050 /Filter /FlateDecode >> stream xÚ•Z[oÛØ~ϯ0òÐÊ€Äð"RT>xS;ëE6YÄ m·”t$¡H-­ûë;3ß’²h´…83gÎmîsäàÆ§¿àf{É<¸Y„K/Lâ›Íñ³§‘oåðo"/N<ôÃêÍ»â^zË$ºYí„cµýçäý!;5¦¾…±? <|¿ZSÛ?þ9+Û¬¸ý×ê§7÷«néyzó(¸™u;¼Ü|-|/¡ozË`Þ"Н‘—´×<4ÃÀr²ÍšlYãþ÷Ûe8©Z ç¼(Àõ›ï‡åÖMÍ@Ï`\Nª“©³Æ€º«oƒtR_l´ù|Ll^îA<¨Ab:¶ml¾u1~èM’w-N‡líbî$ðþÈŽ§ÂŒ:ÛlœCÑßI8…eD.1F”¡È€étÈ®-·¤Í²QuÏÙ%!åØª|ÃyŽÇÄ>91Vøž%òHÏúá¢Ä„æâÇ5(}>¸¾I¦»×ÚkäfÂLfsc›:ˆ¨¶FЉäQïÚbDym9ODi Í3pd¯y\ñqÅéKÊ!–B™ÚÒžXŽ›\Œnë¼gÑ¡}î–khÆÁÁu¶Í9]gÊVä;Sä¥K]kCjË«.6.RÝ)\,5 §mÕ` ×I¶ÍIÜ…=ßákr²Ç8Ø|¦ƒKЛr·Ž¦t`¿:÷ŽØžÞ?>º4ƒâlL»lÚQ€Ykag§´AÀ¹ª¿1¤–p nÊïPDU²Ù‚x>䛸^(Š:³Å‘$€ )­s]¤·`=œÙº1„óɇO_ß}ÌËö ëJ€¨;Jˆ<Ë_ { <>}ž¥i¼$[TI˰„hp{*Î!r|Bê[ºB ¸·l dU†7rZN Q¢epÉD )¦”U9ëJâ*+†8˜ó÷ç§Ù¯·1yC¹­Î’hÊm\‘»Êb ,–p@LkÜYã¥xS5täÆYèG. \œQ«å¦)•à„úÊÅä UÄU!É—°uÛ€…Ð}š]Ð\œ÷µÞ"žîH—¢³Ó© ì©}Dk87cX»Ù÷YÏ{Æcq³—<ßss–nƒ‘ªm(!NÀf|­áxq.¡éÅG ŸCÔéôÙRL !ì dÁŽÅä¾J%dÃðjCYlpw¤»ÂVS€vBWâ‡j‹ ÕËŒ¥;ÛõÉG,Sj‚Ê}›í 0êòJ@jØSGgíZ RÚ1 6ËÀZ§÷ö©d5I,¡Àžóý:óh¬åݯÏKÒàÚCë‚>·ráxœÅrJçõ.Û ¢Ä£%µp7— i—ª¡¦ïB\D’½ìaFÒà“¡¶RZjE*¦Hñ³S$Ãà)«›|ÓY ²‹žQ—ÿ=0ÞYËÐÖ¹¾ûb'Öò,!9ßfÌ›¤Oä*×€ÄÏKË5‹Ü>tP.§3±wlÎ×Ú¸sæ= bøÊŒi‰•[Ÿ)84¢óÕ¥b£’Ýi•ÑÓÜcM£Q¼T¹¥—k¼Ô LT'I¢m8¸Tsî>*è™9×:CE+ˆ 2µ2 §…ªßÉÎ¥— éx%Êcø>eÖ´5×'Œ  #&àW.-Y7T²Õ%h÷-"ÅÉdJqîiž«VŠô$„5Ó·Ï¯Ö á¼÷F®Bž¤ÎB;]ÆÞÿ2 Â8ô€¹ÑìŒÖLæœh›‘έ%ßvQ›ûaár¯VwœúGÝþÒ9ÿOפÒN$(Þø®.Òv”ÞŠßÕ5¾&÷ýÇà×ÕÃ,õkqø÷Í”É=02xr±«Áœµn»#ÿzõ‘%îjñ¸«ÅñÙDâðÇ_ |òzÇ®mfuYGÑUµ¦%è¢Ú%\­Þ”9Ò‘ΙŽAþ±ÆÎx¢µ0FF>\K,"H4#qߎ ¹ÌŽ(--SãA¾eH&_Zö›g¥ò¨xGWû eÎ7Ç+6†W%¿Ðò6ŒÓ‹W7ÀK•¼ºä58ÈÃ¥;‘y›:?IWNˆ4Ú˜j_)u }wRY/\дS°œ§']V¹ïol8¨²'d1Ý»eÿoeu¦ø¾7P3dëªm0J~+µšd"ˆOÁg+Ð8ë(I£F8T!‘)8øÓH5Z°åªÃfš@¸W#ôµQCs§Riºq‰7Ò «|ÆzÙÈó½0uk_„A:xΕÁàe4І‘€‡ðÑd<¿Ô@¶¨²TN}Ó¡ÐÁúnò"o\ü¤ÑŠ‰â«¶'ž#T3®ß‰PXñw[mÆ^Û£>Wp%m½Zã<¢° hœ5]ÿG“Û)F©ãê»BúäͼîéQ;@m/¥!¡Q !¤8ôlþ+Ïö-Ã}m,÷—&™}—S5`šY‚¡RÇ#€\ìcLß\¹Açhú‘z™èNÑ ëûp"E:áƒ7cÚe§‡0ÞÞ›‚öZ…1«„]òcÈ65Ì}§|óF«³Rا٢бŽÑeZ˜~Õ–Ûn½ßÛª1ö/@ÞêéÿÚrDÐÁ[ýuäs÷Ì7|¤w¦~ñÚŽ."î’žü2¥Á€ánc!¾󮇶Ö_jKŠüþ(} h.ð$þà™@jµRíMçZ|w,­ÆtÖšt¿×Èt÷«Ó«c¤RùZ{%‚úb1h"éÙ¼ì°AòñõìLã³ëÏ„Á!ªm»šÝ#½‰Bp/Çì›îÚ=ýÈ[&~\ýüqD…üÓ¨Ž4¥IÀv=wOïéD9Ý/ýóåÿðÛÕý§Õý—ÇOô1ìÇ{_žV¹ÿòôùÓùq ‹}"Ce;MƒÉäRßuþ•:Ë# „µ9„P±"òT 6 \¹G1§~QUôëöVúhåE‡œ­][ÛNÉ/<â}' ÝS÷“ÄP°s1”ëgã@ÅB (°zIø½$pg;¼t'žþg0`ƒŒ—ÝC(ÃîÇUëÒ9ùÇU—J ¯6´Ìa6å´6Aèž( † ¢S”¤U”rt%G°Ô wI6 Vyˆ3¯dþzÔÒ]¦£k†ë28?fn·/;ᵦ{» :»Ê`Ôsÿ&%£Nب©Ë Cýüc¾3ÝCò¥í“žÃ Q¾auøÒœ­ToTÉèÎNYªû ÿÙzT½Ž \ JàÞËÿè;‰—^^ü‡À«ÿ‹¾ö_þpú 'åµendstream endobj 1338 0 obj << /Type /Page /Contents 1339 0 R /Resources 1337 0 R /MediaBox [0 0 609.714 789.041] /Parent 1143 0 R >> endobj 1340 0 obj << /D [1338 0 R /XYZ 95.641 729.265 null] >> endobj 50 0 obj << /D [1338 0 R /XYZ 153.914 657.225 null] >> endobj 1341 0 obj << /D [1338 0 R /XYZ 95.641 651.047 null] >> endobj 1342 0 obj << /D [1338 0 R /XYZ 95.641 624.085 null] >> endobj 1343 0 obj << /D [1338 0 R /XYZ 95.641 540.518 null] >> endobj 1344 0 obj << /D [1338 0 R /XYZ 95.641 512.897 null] >> endobj 1345 0 obj << /D [1338 0 R /XYZ 95.641 398.326 null] >> endobj 1346 0 obj << /D [1338 0 R /XYZ 95.641 327.592 null] >> endobj 1347 0 obj << /D [1338 0 R /XYZ 95.641 256.857 null] >> endobj 1348 0 obj << /D [1338 0 R /XYZ 95.641 197.081 null] >> endobj 1007 0 obj << /D [1338 0 R /XYZ 95.641 159.223 null] >> endobj 54 0 obj << /D [1338 0 R /XYZ 277.824 128.847 null] >> endobj 1349 0 obj << /D [1338 0 R /XYZ 95.641 122.669 null] >> endobj 1350 0 obj << /D [1338 0 R /XYZ 95.641 93.111 null] >> endobj 1351 0 obj << /D [1338 0 R /XYZ 195.682 63.044 null] >> endobj 1337 0 obj << /Font << /F41 999 0 R /F35 919 0 R /F27 911 0 R /F40 935 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1354 0 obj << /Length 2169 /Filter /FlateDecode >> stream xÚµYÝoÛ8ï_á·:@ÌŠÔ'÷žÒÄÝË¡i‰{»‡Û{-ÚjK('õ¿3œ‘,Yjº¹ÛEh8$ç‹Ãá´œxð'':Q '±ÒBEádµãM6ÐóóÉ#|éCW<ñE˜Ä8àýâÍ»0G ù“ÅÚ[dÿ™^oÓÇÚT3zS)èûŚʾ%ú.-éîâ¿‹¼™/ZÒ …Œ‚ɬÕpnÂÌ=ÁW)¡eÐá‡C#þ}¡Õ´< B=}Îw;¢–†¾Õ…L¦å Íš1õ–¨z˃Ҍûö¦`I¿y¡—»ªòe3q—‚³À'Oõô¡®ò¯–Xž L¹bR#¡ô& x‘3é jçËÇ|m>æ…±4°ënè‰XûìóÊ9eÀ òýÄ©ñA½Ù?î.ä:ˆQ®;ýÉôçùÍõç;ê"“ˆOâV¥ûf—<§Èˆx<Ô–æ]œ•=½– 2>™±±]×L–×%§ EÉs<æÐJx]8ŸMWfÖéaWwÆ‘›ÐÊíO1ÝMèÚóþù·fðx9 AzèyÓ›®Ð6$žVŽìLÙ`ùÀÁ8=ZDIâôx³äÞ~º¹u±+´H"2BRç§«»9ÉŠÔI–‹(Lx…?éÞÐèw‡ [ï†êg™³¹dœ#!¬ã¾36-Žíæî–»ŽÍvè‡OEBë¦`}H‘ZøaáfÛ …;­\•¤Ã 5—÷¢äººMŸL·ÎCyÍ‹uYíÓ:wõz ySAËûÂ÷BðqKŸ}¾Ù—{0¬…WÏ[û´=ØÚ(¤ôd5v-©"£Â£5»õkAZÄ ­ÇFƒs,æl€ƒ¸“¾ýé€ «qÀ¶Ø–{<,pø¢JíWo¿˜7ê Òékú×ÿäzš{@î¯Áq#¾6eÂCaGî—˜üØ’p*|Ï3ý({AÑ'„K8öcYdeqÉ«Ñãbh›žë²€*Qç+È»WXrB€ßµä=•W§ÄTu¾ÎW£‚Yˆ@Ž-äçëë/?È¡‡r]?§ãþy±âlª×dËýüáöÿ_^ð`¬æ´´:üó—vy¨ŽeUóâÍ-O¦ïR\V¨ö«-T׺¶¯Ñ~usó£åä‘ïӪƃÍ%A]SŸRly@zÞ]ÑדÎâ¡E¡2†eƒjR… 9»²æê€Ë}é¨G’u9m†¸ó‰uºªG¼ÞµäWž}-›AUÝ×®>#£¹Ú"=8q‘ ÛëmMdŠH9#Ú!&øîË,_ NÄÂKdçdŒ~ùË¡ŒHøIØ`þ«»1È™*Ug÷†lÅ'+}’ñ0.Ó]Ø*Æ’ ü UüŠWíéÑW™—Ñi^Ôðo[ä`Oø¢¡ë-!ØÃfK ûhV9ÂŽÕ9ÔX•û=È·¢}qAC:H€²ByÍ«‡oZˆ_ì–Ztn¨A¦±3Ö=¼F±‘<˜úå™ÐôP—äWénw$Å¡>Tl”‘A¤}Ü$íz¼bWPu{çsÞúQ"¤ê-ÞÁ” Ø.BÌ3C,„èø5E·¢&,³¹¤ÑYžЄ2|Ÿx4> endobj 1355 0 obj << /D [1353 0 R /XYZ 95.641 729.265 null] >> endobj 1356 0 obj << /D [1353 0 R /XYZ 143.462 695.392 null] >> endobj 1357 0 obj << /D [1353 0 R /XYZ 293.73 695.392 null] >> endobj 1358 0 obj << /D [1353 0 R /XYZ 371.763 684.433 null] >> endobj 1359 0 obj << /D [1353 0 R /XYZ 95.641 646.017 null] >> endobj 1360 0 obj << /D [1353 0 R /XYZ 191.88 618.979 null] >> endobj 1361 0 obj << /D [1353 0 R /XYZ 186.501 609.116 null] >> endobj 1362 0 obj << /D [1353 0 R /XYZ 95.641 504.309 null] >> endobj 1363 0 obj << /D [1353 0 R /XYZ 361.345 482.391 null] >> endobj 1364 0 obj << /D [1353 0 R /XYZ 382.451 482.391 null] >> endobj 1365 0 obj << /D [1353 0 R /XYZ 143.462 460.473 null] >> endobj 1366 0 obj << /D [1353 0 R /XYZ 189.818 460.473 null] >> endobj 1367 0 obj << /D [1353 0 R /XYZ 95.641 452.683 null] >> endobj 1368 0 obj << /D [1353 0 R /XYZ 376.256 411.656 null] >> endobj 1369 0 obj << /D [1353 0 R /XYZ 95.641 403.866 null] >> endobj 1370 0 obj << /D [1353 0 R /XYZ 478.781 395.716 null] >> endobj 1371 0 obj << /D [1353 0 R /XYZ 95.641 357.3 null] >> endobj 1372 0 obj << /D [1353 0 R /XYZ 191.88 330.262 null] >> endobj 1373 0 obj << /D [1353 0 R /XYZ 186.501 320.399 null] >> endobj 1374 0 obj << /D [1353 0 R /XYZ 202.64 300.673 null] >> endobj 1375 0 obj << /D [1353 0 R /XYZ 202.64 290.81 null] >> endobj 1376 0 obj << /D [1353 0 R /XYZ 202.64 280.947 null] >> endobj 1377 0 obj << /D [1353 0 R /XYZ 191.88 271.084 null] >> endobj 1378 0 obj << /D [1353 0 R /XYZ 202.64 251.358 null] >> endobj 1379 0 obj << /D [1353 0 R /XYZ 202.64 241.495 null] >> endobj 1380 0 obj << /D [1353 0 R /XYZ 202.64 231.632 null] >> endobj 1381 0 obj << /D [1353 0 R /XYZ 95.641 186.003 null] >> endobj 1382 0 obj << /D [1353 0 R /XYZ 390.543 175.044 null] >> endobj 1383 0 obj << /D [1353 0 R /XYZ 421.067 175.044 null] >> endobj 1384 0 obj << /D [1353 0 R /XYZ 462.688 175.044 null] >> endobj 1385 0 obj << /D [1353 0 R /XYZ 143.462 164.085 null] >> endobj 1386 0 obj << /D [1353 0 R /XYZ 95.641 156.294 null] >> endobj 1387 0 obj << /D [1353 0 R /XYZ 463.163 148.145 null] >> endobj 1388 0 obj << /D [1353 0 R /XYZ 230.108 126.227 null] >> endobj 1389 0 obj << /D [1353 0 R /XYZ 281.294 115.268 null] >> endobj 1390 0 obj << /D [1353 0 R /XYZ 95.641 107.477 null] >> endobj 1391 0 obj << /D [1353 0 R /XYZ 305.632 99.328 null] >> endobj 1392 0 obj << /D [1353 0 R /XYZ 275.585 77.41 null] >> endobj 1008 0 obj << /D [1353 0 R /XYZ 95.641 69.619 null] >> endobj 1352 0 obj << /Font << /F41 999 0 R /F35 919 0 R /F40 935 0 R /F39 927 0 R /F62 1117 0 R /F26 909 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1396 0 obj << /Length 3206 /Filter /FlateDecode >> stream xÚ•Ùrã¸ñ}¾Âo¡ª$š÷±©<2âêþZFî¿Ý>,<ºÿrs¿fä·EâXW ׺½úxwóˆ¬^~öÃá¬Al'0âFvšD´ß÷EZE»câÀ¹H€8BbÏ·“À¶îŠ­¾+*Ýœ/:vêxB÷ZwÀLZ{UT-üç^»Ó äªUÕHï¸pKg5µyÃrî˜åZOÜSLÙdL«eA-L‹ËfÄzW4 ²N^À*Û2|±Š;B890¦ÄêVó’U»Xù Êv§*†j`÷ˆ p¡+­Êú©È¬V2ò@ë§£Ú7<ãe'‹qwàVÆkYn[Í5žÐ5:gжfÌ“"&ygÂ6‹Ò H”öºïé­êÊ–;iA¥ì#Ø.ίÛ<;rßuÝAhèŠæ|¡ÔvÃHÆŸ‹óà,1œ… læè7'tú£|y\±VVyýÒ0îÞaQWæ¬r«ž/*Ž¦×Šb Uð`…¦Õ*ÇK‘UÝêƒÊmý§¶a_—±F<+SOØhFÔ°ù±ÈsÖ=ÏÚ¼r+JíÁ;á. odÿõA&¹½»ƒ‘ÕÌ}ÔqÊø\°rU{RLD>«c¡6¥nlî¦5‘úOµ?”wŽ#«Ø2–Ÿ ¬¦z«…œùÅy{•5<©ÎÇʨái-™\Uù ß´]›¡3FqSwÇJ¯²zPmü3ºÙé²\žÌÝ«W™›çŒáÆV jøk‘ ZäE¾íFFÏn®ÿÆ$‘3R´ØN}cÀøÌgÊ €IfÖfËµŽ²?<þŠÕÍwÁÈ»þD b ~sN†‡á¥Ø/Þô‰D©8é;M«¡{)ÊÒXH}¾¦6=u|Zð¾Yn[‹¯Ãû.ª'›Ïè&‘¥)¡¬¡ƒqKœh0\‰Ã*Ý‘Ñl4IkÎm‹Ø¡ó_q1×ÑtV 03Þáìq ãÇDÀì+>ùX1^Y<¹º»»ë+dx®>^=Þ<.ÙøÞÝ]<|úûí·î—‡¯??\}yû]¡ÅvSx¸ù°[ëGÛŸ-=ó„h ¼‚ñÚ¤4FăܣGÿ•;ð”v •EÓ24Ùcîî|4©è|ÂÀReS3Fq“ÕèsQØOÝž+šZÄ÷ºL´td˜Ò?º‘5+F-÷é-#°Ñ< έ' wÝñX½eÌèn猤1†Ã}·lcëV†È€C+áDQiùÊF­R{d‡m´( ÑdŒéà\®Åf2yßþºd/(&#„mŸú9fø«–G. ùôBë pÎd´bŸÊ‘½-¸ÙÕ°qWæÜÝ©gذ½öp¬ìr:¬^–í'9èɱØt¸þŒ‚ð9 œ3 ¿fMš‰b׎}#/û§Ë]½×—mû\öB¾¼V8ó½Î„²)ˆÜ8Txë%´¤þQ J é ´F¡{SÂ3§7î§›MhAú…˜ $‰2¥©ÄIdÝq”Ϥáä’_™-˱i—Ücsžräˆm…¶¦5uf¸5>dÙ÷«ƒ7Ñ–©(ªŸÎÕ<òÀÍ ±r-¼€·¤¿’F&äFes™l`{Ñ{ž³ áQtòœá©$•ib¨w¨¿tFP´Üœ§¼ä²apÐ`¬ K‘ÂõN‚•8´£Èÿ_± X0LP=Å%¨Âƒ#{‰)@Í­âFì%@d/ãpÆ^Râ „ 9¦¤žÑšÑEIŽÒðÉŠC&nóÒ!ÕŸ6È-ñ£{ïµotùüVT¾Qlw’a¾*0£œFc0JwxŽcS1¦5 ƒO袰ú”;ø]ÆSnÒí« wú‡é4æ›MÜ£ÄvýàÿL&X„‡ú(¢Æ:Æ ÕÓ¶ðàíNü¼T>8Ù \7„æÙ—`˜Y›”ÂMm'ð§®þJ¢kð4qÂÛ…1Ó°aO3–¤Óø¾ E>*NXµ&„0"•àà\¥fÔô…âUÙ3w0f‚ÛfË\¨´Ö’°š›SË ¨qˆâïRH{ÕÆÞFe¿w†9 ”mÙ7ɬƴbåd¢cÚ8&27#y"–N­œ :M§ÁE¸9ó#Éä40‰OxÑ"³è dͲŸ‘R‰Îuí¡kEÁ$í øÊ‰¾T™ÎgÞù½~Áô+y\è²®»–ÇôŸ‡²È éÈ¿ï=Þ [©È™`-ò»žT4Ÿ*÷楗Ça)ÏO­¢z³¦–}ÖÌãÚ›A®•q²JÒCª‡M¶SÕ“þ+w¤h&[óžçù¶cG<@¦ ZDù.ÃbëØU ¢ª_f¯7M]êVOQ“ÔÞß|y\¼¾}ÌÁäÆþµH=‹Š@)RJ(i`iþÑ ’Íy€ØN±î„©™à8ÆEPcÆvZM|Ÿ-£ Lz¡œögÄè5Œíù1ÅÇ© P *|~çÁGbÇQø®\Âq¡ëXw#I˘Æw‘;¼K ÚX׫d^Ñ Ð†±ó¬Ê£i¤¼Ý2Ž2¢¬¹¥BžÙ›,xâØq< Hz1¢£K)å%¡”O#eSÍ=X«82 G…T@ˆÉÆz=ùŸ$¬Ò±¥Hf¢•V\¶GBµ™»$ÐÕÎèª MyApYųÜmóC]õb)Xz‰0’pÇs9}BçÁš»œ¥ÇRA Å:€9¯{Ó"öåù{lÉiÉ ñëÜ+aqÄêc#®ÕsA\‡ß¹¤ÊOàœUáq¬¡*^9R0¥ /¨@¯Œ –eN€øþs~`\èãB%æsAS„P%ÆôH µŠVg»ªøüìN ? ’Â0œ¼BÏ•ÔÔsC|…=²,6GEQ¾+9/R@ì³/*U2¤§þÐUâöò«Í„ktþ,€;µ‰aª¦“w#¯c\Æ ¿õÕé¯Q€ï(LíЛüåÍß¼¸Î[?gqÆóÿ ÈÆfEendstream endobj 1395 0 obj << /Type /Page /Contents 1396 0 R /Resources 1394 0 R /MediaBox [0 0 609.714 789.041] /Parent 1393 0 R >> endobj 1397 0 obj << /D [1395 0 R /XYZ 95.641 729.265 null] >> endobj 58 0 obj << /D [1395 0 R /XYZ 396.008 706.351 null] >> endobj 1398 0 obj << /D [1395 0 R /XYZ 95.641 700.173 null] >> endobj 1399 0 obj << /D [1395 0 R /XYZ 167.305 689.365 null] >> endobj 1400 0 obj << /D [1395 0 R /XYZ 306.072 667.447 null] >> endobj 1401 0 obj << /D [1395 0 R /XYZ 365.679 667.447 null] >> endobj 1402 0 obj << /D [1395 0 R /XYZ 402.989 667.447 null] >> endobj 1403 0 obj << /D [1395 0 R /XYZ 410.963 656.488 null] >> endobj 1404 0 obj << /D [1395 0 R /XYZ 429.662 656.488 null] >> endobj 1405 0 obj << /D [1395 0 R /XYZ 481.425 656.488 null] >> endobj 1406 0 obj << /D [1395 0 R /XYZ 406.628 634.57 null] >> endobj 1407 0 obj << /D [1395 0 R /XYZ 406.628 634.57 null] >> endobj 1408 0 obj << /D [1395 0 R /XYZ 424.561 634.57 null] >> endobj 1409 0 obj << /D [1395 0 R /XYZ 212.871 623.611 null] >> endobj 1410 0 obj << /D [1395 0 R /XYZ 300.771 623.611 null] >> endobj 1411 0 obj << /D [1395 0 R /XYZ 95.641 615.821 null] >> endobj 1412 0 obj << /D [1395 0 R /XYZ 257.965 607.671 null] >> endobj 1413 0 obj << /D [1395 0 R /XYZ 143.462 596.712 null] >> endobj 1414 0 obj << /D [1395 0 R /XYZ 219.545 596.712 null] >> endobj 1415 0 obj << /D [1395 0 R /XYZ 289.023 596.712 null] >> endobj 1416 0 obj << /D [1395 0 R /XYZ 381.601 596.712 null] >> endobj 1417 0 obj << /D [1395 0 R /XYZ 443.667 596.712 null] >> endobj 1418 0 obj << /D [1395 0 R /XYZ 162.819 585.753 null] >> endobj 1419 0 obj << /D [1395 0 R /XYZ 250.649 585.753 null] >> endobj 1420 0 obj << /D [1395 0 R /XYZ 95.641 577.963 null] >> endobj 1421 0 obj << /D [1395 0 R /XYZ 376.717 558.854 null] >> endobj 1422 0 obj << /D [1395 0 R /XYZ 496.1 558.854 null] >> endobj 1423 0 obj << /D [1395 0 R /XYZ 95.641 540.105 null] >> endobj 1424 0 obj << /D [1395 0 R /XYZ 95.641 524.164 null] >> endobj 1425 0 obj << /D [1395 0 R /XYZ 95.641 524.164 null] >> endobj 1426 0 obj << /D [1395 0 R /XYZ 416.079 516.015 null] >> endobj 1427 0 obj << /D [1395 0 R /XYZ 255.982 505.056 null] >> endobj 1428 0 obj << /D [1395 0 R /XYZ 143.462 483.138 null] >> endobj 1429 0 obj << /D [1395 0 R /XYZ 143.462 483.138 null] >> endobj 1430 0 obj << /D [1395 0 R /XYZ 215.193 483.138 null] >> endobj 1431 0 obj << /D [1395 0 R /XYZ 213.628 461.22 null] >> endobj 1432 0 obj << /D [1395 0 R /XYZ 95.641 455.531 null] >> endobj 1433 0 obj << /D [1395 0 R /XYZ 167.729 445.28 null] >> endobj 1434 0 obj << /D [1395 0 R /XYZ 143.462 434.321 null] >> endobj 1435 0 obj << /D [1395 0 R /XYZ 95.641 416.747 null] >> endobj 1436 0 obj << /D [1395 0 R /XYZ 259.405 407.422 null] >> endobj 1437 0 obj << /D [1395 0 R /XYZ 211.596 396.463 null] >> endobj 1438 0 obj << /D [1395 0 R /XYZ 95.641 388.673 null] >> endobj 1439 0 obj << /D [1395 0 R /XYZ 95.641 388.673 null] >> endobj 1440 0 obj << /D [1395 0 R /XYZ 235.655 380.523 null] >> endobj 1441 0 obj << /D [1395 0 R /XYZ 143.462 369.564 null] >> endobj 1442 0 obj << /D [1395 0 R /XYZ 198.274 358.605 null] >> endobj 1443 0 obj << /D [1395 0 R /XYZ 95.641 339.856 null] >> endobj 1444 0 obj << /D [1395 0 R /XYZ 95.641 302.72 null] >> endobj 1445 0 obj << /D [1395 0 R /XYZ 172.227 282.889 null] >> endobj 1446 0 obj << /D [1395 0 R /XYZ 95.641 253.181 null] >> endobj 1447 0 obj << /D [1395 0 R /XYZ 264.435 234.072 null] >> endobj 1448 0 obj << /D [1395 0 R /XYZ 95.641 215.323 null] >> endobj 1449 0 obj << /D [1395 0 R /XYZ 95.641 215.323 null] >> endobj 1450 0 obj << /D [1395 0 R /XYZ 298.84 196.214 null] >> endobj 1451 0 obj << /D [1395 0 R /XYZ 170.958 185.255 null] >> endobj 1009 0 obj << /D [1395 0 R /XYZ 95.641 178.187 null] >> endobj 62 0 obj << /D [1395 0 R /XYZ 231.064 147.088 null] >> endobj 1452 0 obj << /D [1395 0 R /XYZ 95.641 140.91 null] >> endobj 1453 0 obj << /D [1395 0 R /XYZ 314.994 130.102 null] >> endobj 1454 0 obj << /D [1395 0 R /XYZ 95.641 92.03 null] >> endobj 1394 0 obj << /Font << /F41 999 0 R /F27 911 0 R /F35 919 0 R /F40 935 0 R /F26 909 0 R /F60 1104 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1457 0 obj << /Length 2502 /Filter /FlateDecode >> stream xÚ}YY“ã6~Ÿ_á·µ«Új‰¶®¼m&=³š#5íM*µÙÚ¢mîèpY’»ýïuØš”‚ ðAf>ü‚YzÑ:˜Å*õTÎvÅ;v€žï‘X+èŠg+/LbøyóîñŒI½4ZÍ6{’Ûdÿ™¿?êSc΋¥ ýyàñ÷ßµ9×ÿ`ú³.[/þ»ùõÝÓ¦3ø¡DëÙ²³p a¹Š}/‚¯R^¬;«ð„-‹å*Læõî¼’¹1eÍ ×S¹i„w­Z&X¶¨.FFŸª¶6"µ§Þª–.ln]Ÿ.³i »£Í3f–7jÀ€vø^¦„Úéôº¾ÐK×Ôµ9Ö>Lü¹6jû†D0ß.P½Öädv€Î²ö˜ êxì Ö¥*E)N ÂqåC"cW•;S6g݈ ̵CS.'ævÈÑ#*è,"­K•1-Fƒ ˜?0‡ ×'³kìÅHŸÇ}4•òç¹­fõHEyžƒ˜æ¢ƒ“[ç*֙ю¢`bbnÍ«=~c7°ï1ƒ¡DóZ1ÑMzGV¡o„ÛGÝw&„«}X†î׸´Ó X¿‡ÍªTÚ-íJ%7Ho˜tP k<ÌqäƒàÀáxqˆJY#ð3ÝhæÒ„†CÆÓ~`)>§Q!Õ2È2o'àá‹ò _óR©hÝÁB·TÈ•´î±F¬ÀG¬¢³ôëöPPuA) ¶¶¶Äx†Xqxð"L¡‘íå™- S²€‚ڣі*hiar®ë%{k/•H,€ÐÏ!™¿‰§vb=‹^ôH<äœLf®‚â¬sXŽ;íg:EèœÆq+v3ŸxŠ—ÌÔ€²†b*gvÓ["¡Œ¥DG4ÔÒü¦  ËtÙŒux,ŧ É`9îÁVû› u3eì’–d+Dë-iLË‘¼iý¯­ FÊwZä8‡XBr"þQ#“´á BE ƒŠ…3¢«x9+‹Wp8Zæ>áÖw“îÍü(Ñ=D¬ä¹(rw+Ó£¢*|S’àž-îuÜáô…äQ»›…KÁHSyp¿²ø}ÄÐ1Ãók ɺX3íÝ:am )·…T@Ý®ç=¸"LÖvv&¤¼¼jXbst¶B[V‹‘\D>>€n9ô§JÐQÁÆÎ —Ž–6ì–5Åó\&)¡Éö]Ù „›­¨iÌÐb—.¶jë\LŒPF.¾P­Œíƒ«45‡!F©Cx›°ÝfSkç¦=—Þt`vYûï7Ý:è6{qèyµÞó¹S\™7»…”ß\™E‰¢‹®¯ÈÀƯË5 ôªì?)µÜ ’%:az~ÂŒéíZ.1—‚rè¯öt¢‘눿ޱvñYË ŸÞ¨·*¶¶¤RÖcNŒ>­×PÁa±LJðþÄÖq8;p®…{°SN¬³Û+QŒ«úÀ¥(_Å£ˆ'ލE„Ò Šp¹†6£C^ÕJýKÕI×߀sk–0o;(]=.ðǭÎ(ƒV&ŽXgr=¿€³s¹uˆùµ\èÃþRCtº ¯%Œ‘Øs¶rÏ6þÆ4¿u˜G7Ã`þûÔƒ6iz| °—)9ñIží¤*wɽÅ0%üøJz.·ÿ_uõ|¦^¨&ÿÁZû‰·ŽR ÿî´ ¸Õ"ŠG9•ÿ¨qYqendstream endobj 1456 0 obj << /Type /Page /Contents 1457 0 R /Resources 1455 0 R /MediaBox [0 0 609.714 789.041] /Parent 1393 0 R >> endobj 1458 0 obj << /D [1456 0 R /XYZ 95.641 729.265 null] >> endobj 1459 0 obj << /D [1456 0 R /XYZ 95.641 690.197 null] >> endobj 1460 0 obj << /D [1456 0 R /XYZ 95.641 627.826 null] >> endobj 1461 0 obj << /D [1456 0 R /XYZ 95.641 579.009 null] >> endobj 1462 0 obj << /D [1456 0 R /XYZ 95.641 497.315 null] >> endobj 1463 0 obj << /D [1456 0 R /XYZ 95.641 481.375 null] >> endobj 1464 0 obj << /D [1456 0 R /XYZ 95.641 454.476 null] >> endobj 1010 0 obj << /D [1456 0 R /XYZ 95.641 427.577 null] >> endobj 66 0 obj << /D [1456 0 R /XYZ 447.975 397.201 null] >> endobj 1465 0 obj << /D [1456 0 R /XYZ 95.641 391.022 null] >> endobj 1466 0 obj << /D [1456 0 R /XYZ 411.543 380.214 null] >> endobj 1467 0 obj << /D [1456 0 R /XYZ 95.641 356.483 null] >> endobj 1468 0 obj << /D [1456 0 R /XYZ 95.641 313.664 null] >> endobj 1469 0 obj << /D [1456 0 R /XYZ 95.641 273.719 null] >> endobj 1470 0 obj << /D [1456 0 R /XYZ 95.641 273.719 null] >> endobj 1471 0 obj << /D [1456 0 R /XYZ 423.778 188.135 null] >> endobj 1472 0 obj << /D [1456 0 R /XYZ 95.641 149.719 null] >> endobj 1455 0 obj << /Font << /F41 999 0 R /F35 919 0 R /F27 911 0 R /F40 935 0 R /F39 927 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1475 0 obj << /Length 2705 /Filter /FlateDecode >> stream xÚ¥Yësã¶ÿ~…¿EÎØ ßt&3Éõ.u&q¯µÓ›´éd`вS„N ìø¿ïîþõpÆIí\,ØÅbŸPtÒtVeAžFgE\qžÕ«7áÙ=Í|û&RŠð, ²²à©onß|ñž¨« Ê“³Û…PÜÎÿ3{»4ë¡Ùœ_ÆY8‹|tÍÆ}øÓoMwþßÛïÞ¼»·N£2H“èìräpÈü2) §oU”ŽB$Ù±?WñÌn‰ašÍVæ™|v·9Ê™}r &«ße‚®uPv¯é:L­é¶wÀ>µÃò`©3+ÝÕm7ý8¸SÖ[×ö÷{K²Ù瘪—Fäºd•ü—QTY%ç0õ¨JãðÅr~Ãx#òÒ íÛ¡5ªûýy4³º®ùͬÖ]ó%ïNʪ¦Ê"‚  aõtzo—%m•…á>Z´B_: qÑè©íæµÙ̽$øÞmHÑ|hðÍöùÒãHø~þÅS3¬¬¨ ñ*ùXæWf¨— >‰\ãuð×ÁШ{|d#Øí{»lu¾)4ÊÛwÏ~G9¯›³h̰U!•ÕúÔ­ífhXq UÐw´;RGÔÏaþÍ>5t½E:»wK€#õ6à_/²td3´V÷\cÏÇvκ‘5våW·zeOOâNÈ»;)1§~+¥aK0mNr°³ J­š ÅÆÜ¯š~pû=Ü(ó¸8@“É4°òy#œDG4•.0Ùôµrxhž]°'n)âÞzëwSõ°iNÔÃV¨Þbj:AÝ8רy>¶Fgð™· Þf@ý©^Ú¶ÞY=Sì»Àè†+ã-ž4² èb£Qnò®VþõB9IËÙ3Ç¥$-˜™Ç`XÃp˜4<+Éarv˜(Š‚¼È5¶}ß.šïÛ¾qÇž•EAYÆJ·Óxq‘»f>p#Âì܈°OK ¬¸\˜>Z=¯œøée”S°¦‹™ÚÓ°ÓÓ=®­sí]ÛQtjÜ—Àõ̆ŒÞöJ¤.þŒF4„-“ÐMzªTLNÖÚQ< KÓl®»›’rÕyÕÿ^x­kNÜKHš¯^s/Ä5¬”îiÓ¬‹£íHŸL—Peœ{ƒßDy›æ/ë¿rD™èñÙó0šÍÍ`îXdA#<‚À º‡ø²ì²Á—<.x9V#›^½¨kÌc£.&ö<üS×à41ñŽ=Ï-¯ÈŸ’Òßã­—™^íáNyE˜eõ åÇAœJ'>çÀ qÿ€¥ÕÌ´Q)ì\ ç­[wæY‚›ßžUA”{žá%ÌeÊ"À€ÏÌßíò¶ËèBVq€lB‹=¡‹8&]$Õ«"Éz  pWžZ;U8ä9ÂdîûîÞú"JB90, A÷ôá3­p”q±†¡æ1rI¢cÀtNBU4“ EçhÏ@PŒWJð®’ãâîh„2 …ðÊ%‚1Û1Ñõ¦»À°†œ»<‘«˜€<çDb}4Ý–kŽ8‰5k%‰nM"KNM$ÏDÈ–QÒ¼?#Á¿F‘‡ÄâÑœhQâ+ ¶ë¨Þ˜c$Y™&çí=»è QÆ—Mâ,HYU>¦¬ªEFÀ€SÏ,Ù0îŒæíªÁïhî*‚üáØ¢)çE¯rî$÷ÎÆaS£!JëD6M),Í÷w’ÆþHqšh#ܤî:“’ ÌâWe„2Éýö×î`—ý9- 1«îFsÓ˜Ä3tD2¯ÁÇ¥4ÈË}—Ý…"ò¼]£”Qd4VÿPÅOZ&"ì¤zŠfïͪíˆÝxIKÈ‹B¹n.Ôé7˜¸¶ƒ±¿lê’<ßšRøÆ ‰z;€€oáD"ßJt)iN7u·ÝÐÊ$ ã$2 —bº9‡ 1f]†;J\>¯åc­å²ÓÖzEçŒ7‘rDÚç:ÁøÉn»9P{*,E…Ç6†ÊktïônTçT›\ˆ6)˜ÖvÏwkëKx¿ö ãlœ©µˆmß#R€>¿Ñ´ÞžôÎoªíj¥Íó'Óº;-ˆ G©:s×麶Za´²È Ù¡•ËÜ\ ´l'‰g{lOvópØ%k_ÎyÉèé§üC¹ç¥uÍ.¹ý†Û+inýÌÁ/tpú¸8‹â Ì2©ðÒ‚ ;~Ê(ƒˆ¢ ý﫜nËÙÕ_ß]ß^½ÿéêú[ ¾ÆçúÝGÞýóæï×DZÄoåAUbÓîcjyúª"¡J=ÝØXq\ÍÒYßpI2‰ŒbCã/ÜJ21 >n8ôºÞÐd¾cÒíf-7Á»ÛBXQE¸Á¦†Â»ÆBØ5Ž|WMv¥×ü%#¢y@5@cix~×FòG$`Iõ. xÚ'JÖÔçÀ½'¦Çæ¨//,!WáœZ¦˜ù\|¨"ê#*ÝÍìE…ã¬SåA”F¯ºØ”tj}ú¬<ÜÃ`žûäBµ½@Ò$‹ËÒjïNDvé3TqžE••‘×ë¦×ÁìÚôMÌÚ®Û50èU„Ú=蜶Îx¹cÄD@¿í¤Öf ŸàŽCî$d"sâ­Žìñy=fSµK÷R´ž<§uBÊ]ݳ®p@jÅŒ©€@<¶¤é.Ëßa,1“«Ò"¤è•…gßœ8ÂË AÓM'¯ªŸÂÒ×OÐȰÝÈ=å%Ԝ뻨~šÇÖn•d?h3†ChPš»¼Ú­×ǹ¼ŸõÄ ª480§Ýsë©ÆrìoO`üˆüÁ–\k(çîªvÍI×>põp²aÏò £roÚ° ÞØwÞõÒZ/6œ0"[ºä€x?vížfÓP*Ÿk"&m9é&(s¼Ð~u»´+£·q[?Ê'Çîýï`#èàuð"ùÙ1Ç7ª,HÊ)‡ßg€ÁÕ¿Ui¥ŒÞÚ¾ŸpЦaËÕ+I÷Ý±Š³Ó¬ò?Ïê»Í‘æªü…ý'º9f“ï.èfÂ%Nþ<—ãË)ceòƒqnÂ%™pá¥SN¿œúãûøåÅ¿cqߢNãW?æù«JaUÔ¹}ê!ìÃáçyØRÕ5]SëÃÕ'|þ±m‡“¯UINàµêGüÎãÛê•~ÅE+0ÖŠÒ)µÅäJÄ™¬ç!¤õmY½¥ µÁ«ô+QéÞ&ãÒ±F¯ á.@vºž$ré·•£…¦)Y5ü!Ñ)6i^ bó×©Ê°Æ ÀN^¡ÊÙí9Þ<ü T©?”p§Ü¦T“Çbáß$o<§i*SÿNÈ*#½DXDäט¾–W‘C-"ò_é-’Ê+èäæPYê³FâöC½}Zý +&·¯M³ÐgŸ®;y(Lnïù=!ó 2+f‹­<­gÐGPÒ`æ_þ‰jnûÏàðf±·ËøãιX‰¢¼¹ð`ëš¾Ÿ0[2¨Qíç¬ýƒ¼6A¢“.jI¹Ñÿ&9>ý>ÿÉo:9eö»/©êWqþþ;¶FyVY¼÷ ð‹¿5GñK?#‡Óõÿd¾ ,endstream endobj 1474 0 obj << /Type /Page /Contents 1475 0 R /Resources 1473 0 R /MediaBox [0 0 609.714 789.041] /Parent 1393 0 R >> endobj 1476 0 obj << /D [1474 0 R /XYZ 95.641 729.265 null] >> endobj 1477 0 obj << /D [1474 0 R /XYZ 95.641 716.314 null] >> endobj 1478 0 obj << /D [1474 0 R /XYZ 308.073 695.392 null] >> endobj 1479 0 obj << /D [1474 0 R /XYZ 95.641 656.976 null] >> endobj 1480 0 obj << /D [1474 0 R /XYZ 95.641 586.979 null] >> endobj 1481 0 obj << /D [1474 0 R /XYZ 255.138 578.829 null] >> endobj 1482 0 obj << /D [1474 0 R /XYZ 253.458 556.912 null] >> endobj 1483 0 obj << /D [1474 0 R /XYZ 95.641 546.735 null] >> endobj 1484 0 obj << /D [1474 0 R /XYZ 95.641 508.374 null] >> endobj 1485 0 obj << /D [1474 0 R /XYZ 250.352 500.224 null] >> endobj 1486 0 obj << /D [1474 0 R /XYZ 370.302 489.265 null] >> endobj 1487 0 obj << /D [1474 0 R /XYZ 95.641 470.516 null] >> endobj 1488 0 obj << /D [1474 0 R /XYZ 354.562 440.448 null] >> endobj 1489 0 obj << /D [1474 0 R /XYZ 247.314 429.489 null] >> endobj 1490 0 obj << /D [1474 0 R /XYZ 95.641 388.822 null] >> endobj 1011 0 obj << /D [1474 0 R /XYZ 95.641 361.923 null] >> endobj 70 0 obj << /D [1474 0 R /XYZ 291.891 331.547 null] >> endobj 1491 0 obj << /D [1474 0 R /XYZ 95.641 325.369 null] >> endobj 1492 0 obj << /D [1474 0 R /XYZ 171.226 314.56 null] >> endobj 1493 0 obj << /D [1474 0 R /XYZ 339.603 292.643 null] >> endobj 1494 0 obj << /D [1474 0 R /XYZ 185.865 259.766 null] >> endobj 1495 0 obj << /D [1474 0 R /XYZ 249.105 248.807 null] >> endobj 1496 0 obj << /D [1474 0 R /XYZ 95.641 236.035 null] >> endobj 1497 0 obj << /D [1474 0 R /XYZ 95.641 124.174 null] >> endobj 1498 0 obj << /D [1474 0 R /XYZ 143.462 69.38 null] >> endobj 1473 0 obj << /Font << /F41 999 0 R /F35 919 0 R /F39 927 0 R /F40 935 0 R /F27 911 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1501 0 obj << /Length 2532 /Filter /FlateDecode >> stream xÚÅY[Û¸~ϯ˜‡‘±"ê® Å$ã´ÛÍeOÝvA[´­F–¼’<Žóë{n´­±âæ­3"?žÉcuåÁ¿ºÊ"7ÕUâg®GWóõ3ïj #{¦„#P %W¥ 2¼zxöâ ÌÉÜ,®Ä÷ÿÓy½Ò›Î4£±yŽrùû©5MûœÛïtµÕåè_ÿx6y8, ¼ÈUqx5>¬ðÂ8H<7†¯ï»™  ‚èÄçQ9E·Ch<š‘rš¶¨+î®çªèš;eƒm×ro­÷ÜÐe[c+tf†)•~,–º39“wñÝÊ0i»‘¹•ðäõN–ÔM3R©SïÚkÜ9À+ÏÍ¢ŒàÞë¥ù“ýăɀ'ç6ÒïHö¾š=Ìûqæü½^Ëž3iRå}¶ÓA‚ˆ”IŶð”RŽË#ÓU±èÆ‚ä"‰ ‚ô„ï€8$¯kв´h«ÒëVš8§®„´¹ÜÒ|™£+Ö2PT'©³D=!æ/0ïÀ¢.Ó`ƒç a‹³Z7Z$óóç¶xÔ¥©Èà@Ðl˜În>mnÑWÄX#`¸æ¡¯7hˆÛãH`G¶7¬´k˜ßX«õ-¢ß é®9þrF“ö§Q,,oÅ!ýîæDá$”ÈÅ [2 Á~v™ÈÍ "ÉÿW , CˆzW)DGŒÑᦡ„ÈÛbaÞ•i™ï4Š"åF‰/|sV8>h,P1ÙD%7mÇ„zÁ”J¯-Ï|€hûzË”®fB‹±X‚í¸»`}®¯™«r×V”¨óœ æ[×hÚó8U®Å=“¬½Ö»Ÿ4ßOC h Ì—2¶*Z&®L¹‘fnP±ÊY•ÌØ­Šùê8¹/w¾ªë–, 8µr‹õ†Ãa<à ®p¿žø»—9¹î4,=Ó-m(»•9„0®uµçÖ2j]µÜYiŠ>O"I-!Åbv¼!Q®¯âŸr‡0SÂÇy‘”zÎìš!''^Ò³#I"Aú¡‚»bÚ!2„áV8($áqŠ¡l ò-1-€”µ©¶Ü*îK;±heX‹ø™ˆZ>Á¸‹mÉ}R5ÎæÈ_å 4Ù [46åÔ¥Î̦té·*­‚„ 3<¹p°Bã;æõ Ê) =¸4uY‚\nSÑìzx]K×ü©Ìn`KlNÛ¶¨–ÜDžó½Øp£íö%ªŒ{¨Ê79¤ÌâwÏóç6¶€ÚènezNô=™³£Dë€~r¥|Úk&nêãÉžÂÙŸÎWG¾ç|Á¼ÏÓ M©s÷ëôþ-äeå9_˜òjxÎíô××ÓswµBUìf) }àØOLÄý¼hÁ÷Ü¡¤… v6lTÍ Àƒßå²ÞðKªK8î*Êy­ËýÛŽÇ; jVw]½>L:ÏâüAxÄ‹ryøjþ@òmåd iÑ’›ÛÍ™s‡34ä4)ŠzZ—»“áUçuÕé¢j|Œe†  !Gîj&P^#k™Ú®êžì¨[ì÷r72ÛÓ‡9;Ù†§Ëô[J@=…GÄçWºe¯ÔüEa“ot=®!l0!]žÓ xÔE©g¥°²÷p tâø_ùY￟|œ~x/>> Ó×'“÷ÿÃçcu»à›ž $ƒ¨P¢ö³Ø3A3Ã!9©Ã[7{‰Fá‘w}~Œ¨$u£ÃñpéñÜ(Œ„Ïàí¥±¤mX` ? /ÿDøÈ\ôÏuðÓ®Æ8 ¢ƒ…1b*c¦è$þº,ñÔEú oam1ç^ÿN7«·ÝQñw/òx­ˆôiy*S½(bàÅðXtpÂâm#un®™.gR)ì#@ÈÍBo1Ãt°.¾¸øÀ£ÕEž—Âi³OÎ&‘§eQ>_@g/Pà”@Æ“«•÷Ýëüæ›^oJó˹Ÿàä ¼4>9Ž~cϬõÃ’Ún¿róóh¬œÉû'L˜6üEõún–`¦œ„££ðYÝXÑ*àï;Ý þˆ”Æñµìp ÷À².(^é½°ÜË™m¿¯µLœ×]¡­RŽ+ç…ÉíÊ ߘY³ÑBÍ„¤)ç=œÓD{[Wy]Ù5©¯ëªÂ÷ÎÜîlÑÂ²ì® ´1‹hLõ½æå>³&Eà̵Êð•]ÙºÒÌíhæ'Ü£úÃ5w0AϺ>Áóî°õÛªˆ¾ˆN`„`¤Y2 #ʆ!´›zÛš#„¥nLǽIYšŠWÿíö=dÓ3D‘&Õr@#Þ0?î9$É žùª(­cÜ× úŽXh[`z»d Ì?]ð ÏÁ~Oð }üdX=§pƒïšø"šäÚQçˆf|®¢žÉn›Òq—wüù L5ù‚bd…õaQ/šDý{IâÁ?”ÿÇOÿpŸ+ù¾4šmëÉ#‘ÛZöÅw‹1_.`ßI*°7KÙØ‹àÇ9„)}4/ıé<À†=‰B츾W ¤ÄYów¡×E‰‡_ˆ³„ñÞäŲ1ŠGÐ@ƹ(”ßzÑöãb’Ê0 7^ çëK ÌQÙ\¸AÊÁ]g› Kp&,³KXìcš°èKX@iˆwžv.,Áþý¢%uÕ@Xo±¬AnÑžò‘õ<ç›pMwz#âv§Æ#$¦ˆð H(úzÀ ’âGHˆ€ J:›=¹~Hâàü7kQ4t•úºÌ­°¶˜‘ò•ÓÈ„†KŠCº!‡ý«0~` º»HÀ‘næCÊÙ_ÀwåjyD…Bf’ä.U´ÿ<ðuÛ¦z⺳‡ þŸ2Óñ’N Æc9˜$oЈé¼1¶¤Ø/¸Cp`ÿäò ×@)lÈS ¢ /нw×.¬RñœGݦÛ÷K‹mEÞöøxê-¸AÙ\ˆ#N…Ø’r7ÉF*ÂÄážc‡ëhæGðŒ€;­ÏuS+"²"ø^O"*`!Á¾>¹'¥h.òåe6ùn˜ýT•ME‰ðm¶]û‡]ËÓRÐö¥œ…_ͬДTLäw+ŸUüjò7ûµºf”:[*[ù‰‚}naõ b Ýôq¸æ/?.ýÔ™ë.n1xh<ÕM "õ© ËÇqƒý…Ý-ÕGN% ”$t®‡ßÇÍ]VzàÙJ7Ü}¨˜cñdžy3,z fɇ¡KEXŸ¯è皥i_Ê.êdÇç ´©F$ÜK“3±®èèÅáãªd!AÕÿù¥ÝÙJÛ^ê’§?ŸŠ q”¹‘?øZè¥n£+^úý^LOd#‹Ï³¬Èÿ[¬[óendstream endobj 1500 0 obj << /Type /Page /Contents 1501 0 R /Resources 1499 0 R /MediaBox [0 0 609.714 789.041] /Parent 1393 0 R >> endobj 1502 0 obj << /D [1500 0 R /XYZ 95.641 729.265 null] >> endobj 1503 0 obj << /D [1500 0 R /XYZ 95.641 741.22 null] >> endobj 1504 0 obj << /D [1500 0 R /XYZ 95.641 716.314 null] >> endobj 1505 0 obj << /D [1500 0 R /XYZ 95.641 654.725 null] >> endobj 1506 0 obj << /D [1500 0 R /XYZ 172.946 646.575 null] >> endobj 1507 0 obj << /D [1500 0 R /XYZ 414.678 624.658 null] >> endobj 1508 0 obj << /D [1500 0 R /XYZ 95.641 597.544 null] >> endobj 1012 0 obj << /D [1500 0 R /XYZ 95.641 568.05 null] >> endobj 74 0 obj << /D [1500 0 R /XYZ 251.846 537.674 null] >> endobj 1509 0 obj << /D [1500 0 R /XYZ 95.641 531.496 null] >> endobj 1013 0 obj << /D [1500 0 R /XYZ 95.641 480.02 null] >> endobj 78 0 obj << /D [1500 0 R /XYZ 256.885 449.644 null] >> endobj 1510 0 obj << /D [1500 0 R /XYZ 95.641 443.466 null] >> endobj 1511 0 obj << /D [1500 0 R /XYZ 322.053 432.658 null] >> endobj 1512 0 obj << /D [1500 0 R /XYZ 95.641 387.009 null] >> endobj 1513 0 obj << /D [1500 0 R /XYZ 95.641 166.655 null] >> endobj 1514 0 obj << /D [1500 0 R /XYZ 95.641 147.906 null] >> endobj 1515 0 obj << /D [1500 0 R /XYZ 95.641 147.906 null] >> endobj 1516 0 obj << /D [1500 0 R /XYZ 95.641 130.471 null] >> endobj 1517 0 obj << /D [1500 0 R /XYZ 95.641 130.471 null] >> endobj 1518 0 obj << /D [1500 0 R /XYZ 151.771 122.321 null] >> endobj 82 0 obj << /D [1500 0 R /XYZ 229.678 122.321 null] >> endobj 1519 0 obj << /D [1500 0 R /XYZ 95.641 115.278 null] >> endobj 1520 0 obj << /D [1500 0 R /XYZ 95.641 110.297 null] >> endobj 1521 0 obj << /D [1500 0 R /XYZ 315.877 101.4 null] >> endobj 1522 0 obj << /D [1500 0 R /XYZ 163.387 79.482 null] >> endobj 1499 0 obj << /Font << /F41 999 0 R /F35 919 0 R /F40 935 0 R /F27 911 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1525 0 obj << /Length 1408 /Filter /FlateDecode >> stream xÚ½XKoã6¾çWøˆ¾ôºnÑ-RlÑKzZô Ør,Ô¦ŒHFêßy‰’â$v‚î"‡Ãáp¾o¨qôLÁŸžIœ:=ËL›4™-wWjö+¿]i±P3'y†K_î¯n¿‚u©Ý¯Éâ~õ=úeSî»êi¾0‰ŠtÌã_mõÔ^³üGéåvþ÷ýïW¿Þ×Nç±³z¶'¼<|a3§0:[—„ LvÄŽÊòèËÓܨ¨™ë$zn+Öu ë²Û@˜©ŠbŒåö«M?$“ÌFÁ¨É%øÒyÔç,ù¡q3בèöpËÆ_·<“2'ân}ºEŒH®[݉è{S²3Ѫìʇ²­n8X§f9›b°V,“««×Õ·ÚWíé­½åBý’‚ìWMÅÇÚ¤ˆ–›Ò?V(ç|4*Wu»ß–ǹÖo‚*¼‰ØPZIJOvÍ0CËÒ³¾ñb0äç•K™¬ˆ3ãÎ_*ÑqQ±+ÛÈ®juœétrÕcs` `l«mµìX†°„cB-z&XÛŒ™°;O®]s)¹Ì ¹¬Ë:'L˜…jqÏ̲Â,²bñ–`DëÂ,T#³lÏ,Tüf©³@æ£Õ)³”0‹m}Ô˜YjÂ,²$f©žYdð³r]\Ä,Wäo0+ûÌjÏ3«Ý7‡¶ºm?þh%){¡q#Š}Œé©… öóÁxa޶,oJÚ’à`ÛR ŽÁç+P¨I߇Bë  -i³£‡´g’vÒÞ­ÅjS±Ð_eº ¾÷!Ñ’“°¥§*OšJÈ ¯áÁ)!ôËóÐ/çZE›z»zªüÇŸ]ð³¢ ÇÈ ¢Y³‚®‰ŠáAõOC‚¾p(iïÖâm(QT×-«:°g¤å«©×ÿýÁb@î˜ Pî` ÄYˆ­e1@fb€àÅÅ-©¸y±q N²µë÷~€ Íy.4ÛõXø"Ô L!ES¹“Ǿú·cÛþ> endobj 1526 0 obj << /D [1524 0 R /XYZ 95.641 729.265 null] >> endobj 1527 0 obj << /D [1524 0 R /XYZ 149.549 687.92 null] >> endobj 86 0 obj << /D [1524 0 R /XYZ 229.976 687.92 null] >> endobj 1528 0 obj << /D [1524 0 R /XYZ 95.641 682.815 null] >> endobj 1529 0 obj << /D [1524 0 R /XYZ 95.641 677.833 null] >> endobj 1530 0 obj << /D [1524 0 R /XYZ 465.654 666.999 null] >> endobj 1531 0 obj << /D [1524 0 R /XYZ 443.111 656.04 null] >> endobj 1532 0 obj << /D [1524 0 R /XYZ 95.641 621.669 null] >> endobj 1533 0 obj << /D [1524 0 R /XYZ 95.641 621.669 null] >> endobj 1534 0 obj << /D [1524 0 R /XYZ 155.088 610.71 null] >> endobj 90 0 obj << /D [1524 0 R /XYZ 241.603 610.71 null] >> endobj 1535 0 obj << /D [1524 0 R /XYZ 95.641 605.604 null] >> endobj 1536 0 obj << /D [1524 0 R /XYZ 95.641 600.623 null] >> endobj 1537 0 obj << /D [1524 0 R /XYZ 465.654 589.788 null] >> endobj 1538 0 obj << /D [1524 0 R /XYZ 443.606 578.829 null] >> endobj 1539 0 obj << /D [1524 0 R /XYZ 95.641 544.458 null] >> endobj 1540 0 obj << /D [1524 0 R /XYZ 95.641 544.458 null] >> endobj 1541 0 obj << /D [1524 0 R /XYZ 151.771 533.499 null] >> endobj 94 0 obj << /D [1524 0 R /XYZ 248.308 533.499 null] >> endobj 1542 0 obj << /D [1524 0 R /XYZ 95.641 526.456 null] >> endobj 1543 0 obj << /D [1524 0 R /XYZ 95.641 521.475 null] >> endobj 1544 0 obj << /D [1524 0 R /XYZ 163.387 501.619 null] >> endobj 1545 0 obj << /D [1524 0 R /XYZ 95.641 467.248 null] >> endobj 1546 0 obj << /D [1524 0 R /XYZ 95.641 467.248 null] >> endobj 1547 0 obj << /D [1524 0 R /XYZ 151.771 456.289 null] >> endobj 98 0 obj << /D [1524 0 R /XYZ 243.775 456.289 null] >> endobj 1548 0 obj << /D [1524 0 R /XYZ 95.641 451.183 null] >> endobj 1549 0 obj << /D [1524 0 R /XYZ 95.641 446.202 null] >> endobj 1550 0 obj << /D [1524 0 R /XYZ 465.654 435.367 null] >> endobj 1551 0 obj << /D [1524 0 R /XYZ 95.641 400.996 null] >> endobj 1552 0 obj << /D [1524 0 R /XYZ 95.641 400.996 null] >> endobj 1553 0 obj << /D [1524 0 R /XYZ 152.319 390.037 null] >> endobj 102 0 obj << /D [1524 0 R /XYZ 247.192 390.037 null] >> endobj 1554 0 obj << /D [1524 0 R /XYZ 95.641 384.932 null] >> endobj 1555 0 obj << /D [1524 0 R /XYZ 95.641 379.95 null] >> endobj 1556 0 obj << /D [1524 0 R /XYZ 95.641 323.786 null] >> endobj 1557 0 obj << /D [1524 0 R /XYZ 95.641 323.786 null] >> endobj 1558 0 obj << /D [1524 0 R /XYZ 151.771 312.827 null] >> endobj 106 0 obj << /D [1524 0 R /XYZ 261.438 312.827 null] >> endobj 1559 0 obj << /D [1524 0 R /XYZ 95.641 305.629 null] >> endobj 1560 0 obj << /D [1524 0 R /XYZ 95.641 300.648 null] >> endobj 1561 0 obj << /D [1524 0 R /XYZ 95.641 246.575 null] >> endobj 1562 0 obj << /D [1524 0 R /XYZ 95.641 246.575 null] >> endobj 1563 0 obj << /D [1524 0 R /XYZ 152.319 235.616 null] >> endobj 110 0 obj << /D [1524 0 R /XYZ 233.513 235.616 null] >> endobj 1564 0 obj << /D [1524 0 R /XYZ 95.641 228.419 null] >> endobj 1565 0 obj << /D [1524 0 R /XYZ 95.641 223.437 null] >> endobj 1566 0 obj << /D [1524 0 R /XYZ 411.767 203.736 null] >> endobj 1567 0 obj << /D [1524 0 R /XYZ 95.641 158.406 null] >> endobj 1568 0 obj << /D [1524 0 R /XYZ 95.641 158.406 null] >> endobj 1569 0 obj << /D [1524 0 R /XYZ 152.319 147.447 null] >> endobj 114 0 obj << /D [1524 0 R /XYZ 241.653 147.447 null] >> endobj 1570 0 obj << /D [1524 0 R /XYZ 95.641 140.404 null] >> endobj 1571 0 obj << /D [1524 0 R /XYZ 95.641 135.422 null] >> endobj 1572 0 obj << /D [1524 0 R /XYZ 346.955 104.608 null] >> endobj 1523 0 obj << /Font << /F41 999 0 R /F27 911 0 R /F35 919 0 R /F40 935 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1575 0 obj << /Length 2066 /Filter /FlateDecode >> stream xÚ¥YK“Û6 ¾çWøVyf­ˆ¤¨Çô”dšN:饳Ú´–©±¥­%gë_¼(“¶³ë´ãAAâ#Òj‘ÀO-Jg©Z二ufëÝ«dñ ¾üøJ‰„Q>å Û"G·÷¯^¿‡1e\ffq¿!¹ûú÷è][=NÍ~¹Ò6‰TÌí¯c³¿cúçª?TÛåŸ÷?½úá~ž@%6VYºXÍ3œ›°2ygÐj—*Ðù¥0U^Do÷KDÃRÙèil˜7 Ü>‚À‡~ŒÑ˜×ï=)R@i s%Ð*Ò ÊT ¬(µ¬(Í¢Š»}óÄ}P J™9ì¹ÝvãÄ_‡ sXÊM&‹¦ÎhêÂÆ6Ïd%»Mó±ë›ñÒF›ÄìËUãç‘5‡OÅÚ¨«›~ê6ÇÀ\Z~­P-,Ódq ›¯`¹¶$…¼Sò ‹¹óp䶯vÍ“Ÿ›£7 MÜ¢C©ª¯™¨›Ç¦¯»þ“ ’ÙÚ቉]ÕÉÑÒ$°±¢5cKYæI¢›úŽYãS7­Ûf©¢‘M7µ„M ж¢@ìêÁw5ôwC݈JS$ xò]Õõ¢½ëÏ4 . &€3|8¯ M›œaØ2|ßÔK•D5wª‘Ûñq8Ê$z Óš”½©ÉVL6zIj Cº¬ýõ£ìz?ÉÐA¤dTóì£øÕF›j×mK¥Ttë°v8î·a=‡È`Ý8¬Â:Ù$*6V›íá¶šW „gÙs›"£¢^¸<P<~¸]=âm¿;SÍô÷¡§½Ú=ãÕ5òÚn[ߧȧƙcÒ†ÄD¥È«¸»F½">È‘<ù¹éû=©â7ë4î:ÊT[Þ‡ª>²ŽP]9bˆÖ9#h«~˜ZPMúÏCI%&ÎŒ½ JY^†Píì\ ȹ:óaƒ\òmhų³æ ãLGµHeÁÉ* ­ÿGËyÑ/AiϨù¥Ù ˜ý¾4ÿ3F "R¢]˜Ð^˜Ð&°åOóZò´AÌ™ Ç¿ E^ä@ØhXõ tÈü°¹fˆVtÚÕ4+ÏÉ0L wÉ6hm¨dbòÂ2|*#0µ•ð‡žXY†KHB]•få T±ÊÏ29LŠ#‚J.¨DÓj6”™309‡§Tq&Xùå‘y =õóèùÆX4cÇGõŒ GÔÊAhÉå†;'$­‡0~߸¶ž×ðnßT“¬ ‰ÅáyIxÛÉx'ñ”•™$jG`ãjÃÒ;6¥”ge&ûD]MÕC56×òd’Åešß„$“9¹õlß虓IXYÔŠ¥ÂjçÊA[\­Ç-­ÓXÍëDâñ0a:±ŠC²ºžòPœ~€Åަç>ÎTwž?’ùxg#CCcžê·Ö)š'e¹é°¿Vkù±Æ¡P+šç鵓›•qaÍm¹Deg¹Ä 0 ç’0À#›€« ¢š:õ9¼)§Jáîlb‰3 £Kà$—é…BjŒM-$9 þ›ºkD€·ˆõa ÓÈ`u1wÐ6l!+ß±–y áû4 œä¯¼Yh•Ww]¸Àj(äÒ›\P&.Æž€0†v>þûÔõpÿ¤”[`'@û™8¢M¬ŠB‰>%”g …&ì—ÅËiV]“Tµ#¸‘‹¦vh¾ë™ˆ &¦)ž@—B q¨dûª*Üh«/"7¹Óu1<_^fONµ&ÒÜïÖ¥8Ðëü.fN,@iÙ,¨>üþJdÔ nê&œØÄ„Gô>µÝº™¦Ó-ž>Žƒ¹Ž“"=+T‡K£9„c»ö|g°üc¶Û\¤á&ÚÊ VFχh*ËO#/®ZWb”.’8¹1'dYPðòUɨ8‡àuY™fRnd¹_g®Î º‹O3))wÐí6,ÍÂRhA;:FüŒ•ÌðDÁºzþ<Ãè5€÷ré&ÑôõâÒWN2ð ŸMI…«¸Á³"£Œ¸£œw'B;æÚä ÂXª ƒ Dô J713$ÁXQbå$];c”Ú /›:îtÅKŸÏfP†–ÆÜ”„7#œ„íÃÙžÌËfž&ÈfاŒòG„ËiLh®TšÇ9WÍ/¼˜ÂZ×ô`Ü#†Õ€)Nà×m¦‘¸JA®/¼Ê€¿ÊÐ' þ?w’·+±ÇÏo¼i9\Œé>ëè¯>/!ë¡Ù îå û¼9Exì;ÝÔyjN¢®4Ê龃}EØö˜KI…'h Xrí! õ۷ÀREa·9HsCŠlH•ÔËüPˆ]ŒaÞà›bXŠo¹·¼ÿèØæîrÿ .Äc3:kªI¢5^·Êðíg.®‰)¥=]PåÜEøŒ|ê¶[æ>4˜ ùš+ˆF*iö3 ù~&q5\rµxÓ%¤%J@œ7L‘+J½+¢;r@89»d»s9.n¬9{³BY:Æ$K‹ʵX¥’Ȭ†W{±åÉ7©SaúÌ#âWž'½·/èñ‚ãóMV7 ( W™-c«¯þo’&…¼B<÷·²çºQDó(§ò_–}Çendstream endobj 1574 0 obj << /Type /Page /Contents 1575 0 R /Resources 1573 0 R /MediaBox [0 0 609.714 789.041] /Parent 1627 0 R >> endobj 1576 0 obj << /D [1574 0 R /XYZ 95.641 729.265 null] >> endobj 1577 0 obj << /D [1574 0 R /XYZ 95.641 716.314 null] >> endobj 1578 0 obj << /D [1574 0 R /XYZ 95.641 716.314 null] >> endobj 1579 0 obj << /D [1574 0 R /XYZ 152.319 706.351 null] >> endobj 118 0 obj << /D [1574 0 R /XYZ 244.273 706.351 null] >> endobj 1580 0 obj << /D [1574 0 R /XYZ 95.641 699.308 null] >> endobj 1581 0 obj << /D [1574 0 R /XYZ 95.641 694.326 null] >> endobj 1582 0 obj << /D [1574 0 R /XYZ 348.963 685.43 null] >> endobj 1583 0 obj << /D [1574 0 R /XYZ 95.641 629.141 null] >> endobj 1584 0 obj << /D [1574 0 R /XYZ 95.641 629.141 null] >> endobj 1585 0 obj << /D [1574 0 R /XYZ 152.319 618.182 null] >> endobj 122 0 obj << /D [1574 0 R /XYZ 226.051 618.182 null] >> endobj 1586 0 obj << /D [1574 0 R /XYZ 95.641 611.138 null] >> endobj 1587 0 obj << /D [1574 0 R /XYZ 95.641 606.157 null] >> endobj 1588 0 obj << /D [1574 0 R /XYZ 413.973 597.26 null] >> endobj 1589 0 obj << /D [1574 0 R /XYZ 95.641 562.889 null] >> endobj 1590 0 obj << /D [1574 0 R /XYZ 95.641 562.889 null] >> endobj 1591 0 obj << /D [1574 0 R /XYZ 149.001 551.93 null] >> endobj 126 0 obj << /D [1574 0 R /XYZ 210.808 551.93 null] >> endobj 1592 0 obj << /D [1574 0 R /XYZ 95.641 546.824 null] >> endobj 1593 0 obj << /D [1574 0 R /XYZ 95.641 541.843 null] >> endobj 1594 0 obj << /D [1574 0 R /XYZ 267.022 520.05 null] >> endobj 1595 0 obj << /D [1574 0 R /XYZ 95.641 485.679 null] >> endobj 1596 0 obj << /D [1574 0 R /XYZ 95.641 485.679 null] >> endobj 1597 0 obj << /D [1574 0 R /XYZ 150.107 474.72 null] >> endobj 130 0 obj << /D [1574 0 R /XYZ 243.127 474.72 null] >> endobj 1598 0 obj << /D [1574 0 R /XYZ 95.641 467.676 null] >> endobj 1599 0 obj << /D [1574 0 R /XYZ 95.641 462.695 null] >> endobj 1600 0 obj << /D [1574 0 R /XYZ 358.856 442.839 null] >> endobj 1601 0 obj << /D [1574 0 R /XYZ 95.641 408.468 null] >> endobj 1602 0 obj << /D [1574 0 R /XYZ 95.641 408.468 null] >> endobj 1603 0 obj << /D [1574 0 R /XYZ 152.319 397.509 null] >> endobj 134 0 obj << /D [1574 0 R /XYZ 233.414 397.509 null] >> endobj 1604 0 obj << /D [1574 0 R /XYZ 95.641 392.404 null] >> endobj 1605 0 obj << /D [1574 0 R /XYZ 95.641 387.422 null] >> endobj 1606 0 obj << /D [1574 0 R /XYZ 95.641 353.176 null] >> endobj 1607 0 obj << /D [1574 0 R /XYZ 95.641 353.176 null] >> endobj 1608 0 obj << /D [1574 0 R /XYZ 152.319 342.217 null] >> endobj 138 0 obj << /D [1574 0 R /XYZ 243.924 342.217 null] >> endobj 1609 0 obj << /D [1574 0 R /XYZ 95.641 335.173 null] >> endobj 1610 0 obj << /D [1574 0 R /XYZ 95.641 330.192 null] >> endobj 1611 0 obj << /D [1574 0 R /XYZ 370.334 321.295 null] >> endobj 1612 0 obj << /D [1574 0 R /XYZ 233.24 299.377 null] >> endobj 1613 0 obj << /D [1574 0 R /XYZ 215.741 277.46 null] >> endobj 1614 0 obj << /D [1574 0 R /XYZ 95.641 254.047 null] >> endobj 1615 0 obj << /D [1574 0 R /XYZ 95.641 254.047 null] >> endobj 1616 0 obj << /D [1574 0 R /XYZ 151.771 243.088 null] >> endobj 142 0 obj << /D [1574 0 R /XYZ 238.156 243.088 null] >> endobj 1617 0 obj << /D [1574 0 R /XYZ 95.641 236.045 null] >> endobj 1618 0 obj << /D [1574 0 R /XYZ 95.641 231.064 null] >> endobj 1619 0 obj << /D [1574 0 R /XYZ 384.968 211.208 null] >> endobj 1620 0 obj << /D [1574 0 R /XYZ 443.434 200.249 null] >> endobj 1621 0 obj << /D [1574 0 R /XYZ 465.654 189.29 null] >> endobj 1622 0 obj << /D [1574 0 R /XYZ 259.32 167.372 null] >> endobj 1623 0 obj << /D [1574 0 R /XYZ 163.387 156.413 null] >> endobj 1624 0 obj << /D [1574 0 R /XYZ 406.303 134.496 null] >> endobj 1625 0 obj << /D [1574 0 R /XYZ 254.532 112.578 null] >> endobj 1626 0 obj << /D [1574 0 R /XYZ 163.387 90.66 null] >> endobj 1573 0 obj << /Font << /F41 999 0 R /F27 911 0 R /F35 919 0 R /F40 935 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1630 0 obj << /Length 1632 /Filter /FlateDecode >> stream xÚ¥XYsÛ6~÷¯Ð[©™ˆx3éäP2n}tlµ™¶éd ’ÐP„JRvœ_ß]ì’¢,¹Ñ4ÉËÅî·'`É€ÿrÇ~ÉAä~ăÙúL –ðåý™d 1ý8KñÓëÉÙów ûy& '1™ÿé½Y©M£«á(ˆ…'}Z­uUÿ@ô¥*·ªþ5ùél<éTG2ó£PF…ÇÆGa*üÖ ðsu ‚ôÄL¥™÷Ë0žž›e¥5qÖvŽ”ð|ðü]ïK ‚ô XeëL¹„a$¼Æâ*½S8”™§ùËÔíì}­Iøôi²Òí©ª¶%Ëë™]ëš>4+ÖBJls(oÊ( G0Æ9ùº‡#<7õ¦PC)eëg?H£ÖÑ0òÔýBá¹½Wºæ~Q²´Y¨µ)Œ®¿´Àéb%yä}±˜qƒ<öf+r²´…]šT³Ž;×ÈK’Tå}kî-qZ Ì^©†ø.~Èj#†ôT¶\Ö,aDMáÇ8ñ-õÆnkM´­hÝ(ŠjÙ°ß‘dàw‚~ç™/$WÛ…Yè S¶ƒðÄ`1måTý™­>Ø-XT¸š9˜1‹æ® yDÏ{]Î;ÁÒ97’@Ëäž5$¢¦’Áõ‰¥Ð4”ôqImŒÅõú»:(19+Û”ÉÄéJÏ©†m—Aé÷î©§Ò óÈÏEzR"b Hî£AU7¤™³eE&Ð.+.ÄAûQºaN”ðjhiJŠ`7NŒöÕkÐÄÁ^CJ¥ð¶´›!½²fvj÷½GìAN>àê Qê/ Qå2@|Ä›[¢f­-·›¬LMÔ½) ¢Vê®ÕÈ&4äpéZè›piì[ßn6ÎA q*ÌU£\·™g¶jŒ;Ÿ„VÒ“^=ãQW>£/ÓmC„áU” ISFñ¼¥•]w©Â¶ËUwŽ©;e 5-Xfõê´>ua«¶½L½?{©*:°'VÃ?”ôÝl«’{gðZ™r¿@NkÀNW,xÚˆö"Ùo¥Døaž6ÒDÎrŒ tb õ2”~r“jô+9ò‡áËšÝ]6ÐrÔð=¿±l€¿ë¨oøKJ³G$ãé“Ñćm©ï‰Øk×½Ù¡4?eȃ‡É£!Ÿµã¤g¹7ä«úæ2*ÕZóXϤ/â`¯êÚ¢û¬¹ÌîT±ÕψVí2 ZùªÊää×Э–¥w1ªWˆ»_L3 Ø¥6Iý4J£°%„íâüvBy{}ƒ9½‚Š·c~^¼¹¯¥~àÝ•À–8E(ÒÈó‰7ie*³\5DntªÜ%u$ô\èý± Ûvliláfo$ü~ÆÀ¼Žïu»Æ§¡£+èe"? GÒO.¯oÆÄ¸­hÅ»,ˆ»› `¥Ø~†… ʧ¶jUËÖKUÍVÌÊ’ä+lЄ߉<üÀ(^«yk–Ó–¾²wŠÎlcT—å¹ÑóÖrJë;=­¶ š¹y”:mÒ»ÂYˆ¼ xÄØ²µq”ûÆ–%\óf¶ëƒÑ…Âw ›}«JƒÉ$•.¿Z2÷"É §~Œ@¶–ý[ŸÉyû5a¿ ”aäú‰žµíá¹ì\U– ñzò;Ç #úYž‡çÇ!Ð_;KUé†vã¢Ð%YÿùÕLƃˆÄ1³ÆåòHDÄq(AÒATä§£ÿ0„ŸNþד>^öOµQ¿…\îPS@öåΓ•µ8è‘Vœ$ êFð‹Ãèžbèü­œï¬RxFYû¿91öŽ­ÎÝ4DÊÜÿgñ7Ê*“ìþçÇÆp†Ÿ)gýc;RÀeõã¹áR£*R½{`ûaÖ7øòÛåþè {¡4<°*º«Ÿ2ÛÿÕgÔÞüIœûq°÷»Ï“¿0Éä©Dÿü¿G“ØVendstream endobj 1629 0 obj << /Type /Page /Contents 1630 0 R /Resources 1628 0 R /MediaBox [0 0 609.714 789.041] /Parent 1627 0 R >> endobj 1631 0 obj << /D [1629 0 R /XYZ 95.641 729.265 null] >> endobj 1632 0 obj << /D [1629 0 R /XYZ 95.641 716.314 null] >> endobj 1633 0 obj << /D [1629 0 R /XYZ 95.641 716.314 null] >> endobj 1634 0 obj << /D [1629 0 R /XYZ 152.319 706.351 null] >> endobj 146 0 obj << /D [1629 0 R /XYZ 226.41 706.351 null] >> endobj 1635 0 obj << /D [1629 0 R /XYZ 95.641 699.153 null] >> endobj 1636 0 obj << /D [1629 0 R /XYZ 95.641 694.172 null] >> endobj 1637 0 obj << /D [1629 0 R /XYZ 95.641 651.059 null] >> endobj 1638 0 obj << /D [1629 0 R /XYZ 95.641 651.059 null] >> endobj 1639 0 obj << /D [1629 0 R /XYZ 151.771 640.1 null] >> endobj 150 0 obj << /D [1629 0 R /XYZ 240.158 640.1 null] >> endobj 1640 0 obj << /D [1629 0 R /XYZ 95.641 633.056 null] >> endobj 1641 0 obj << /D [1629 0 R /XYZ 95.641 628.075 null] >> endobj 1642 0 obj << /D [1629 0 R /XYZ 261.397 608.219 null] >> endobj 1643 0 obj << /D [1629 0 R /XYZ 95.641 573.848 null] >> endobj 1644 0 obj << /D [1629 0 R /XYZ 95.641 573.848 null] >> endobj 1645 0 obj << /D [1629 0 R /XYZ 152.867 562.889 null] >> endobj 154 0 obj << /D [1629 0 R /XYZ 248.835 562.889 null] >> endobj 1646 0 obj << /D [1629 0 R /XYZ 95.641 557.783 null] >> endobj 1647 0 obj << /D [1629 0 R /XYZ 95.641 552.802 null] >> endobj 1648 0 obj << /D [1629 0 R /XYZ 358.294 541.968 null] >> endobj 1649 0 obj << /D [1629 0 R /XYZ 95.641 507.597 null] >> endobj 1650 0 obj << /D [1629 0 R /XYZ 95.641 507.597 null] >> endobj 1651 0 obj << /D [1629 0 R /XYZ 152.319 496.638 null] >> endobj 158 0 obj << /D [1629 0 R /XYZ 250.669 496.638 null] >> endobj 1652 0 obj << /D [1629 0 R /XYZ 95.641 491.532 null] >> endobj 1653 0 obj << /D [1629 0 R /XYZ 95.641 486.55 null] >> endobj 1654 0 obj << /D [1629 0 R /XYZ 95.641 430.386 null] >> endobj 1655 0 obj << /D [1629 0 R /XYZ 95.641 430.386 null] >> endobj 1656 0 obj << /D [1629 0 R /XYZ 152.319 419.427 null] >> endobj 162 0 obj << /D [1629 0 R /XYZ 254.624 419.427 null] >> endobj 1657 0 obj << /D [1629 0 R /XYZ 95.641 412.384 null] >> endobj 1658 0 obj << /D [1629 0 R /XYZ 95.641 407.402 null] >> endobj 1659 0 obj << /D [1629 0 R /XYZ 223.78 398.506 null] >> endobj 1660 0 obj << /D [1629 0 R /XYZ 95.641 375.093 null] >> endobj 1661 0 obj << /D [1629 0 R /XYZ 95.641 375.093 null] >> endobj 1662 0 obj << /D [1629 0 R /XYZ 151.213 364.134 null] >> endobj 166 0 obj << /D [1629 0 R /XYZ 254.235 364.134 null] >> endobj 1663 0 obj << /D [1629 0 R /XYZ 95.641 357.091 null] >> endobj 1664 0 obj << /D [1629 0 R /XYZ 95.641 352.11 null] >> endobj 1665 0 obj << /D [1629 0 R /XYZ 293.178 343.213 null] >> endobj 1014 0 obj << /D [1629 0 R /XYZ 95.641 274.471 null] >> endobj 170 0 obj << /D [1629 0 R /XYZ 232.1 241.285 null] >> endobj 1666 0 obj << /D [1629 0 R /XYZ 95.641 235.107 null] >> endobj 1667 0 obj << /D [1629 0 R /XYZ 95.641 181.245 null] >> endobj 1628 0 obj << /Font << /F41 999 0 R /F27 911 0 R /F35 919 0 R /F40 935 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1670 0 obj << /Length 1549 /Filter /FlateDecode >> stream xÚíËŽÛFì¾_áCÈÀJ«½Qø4Nƒb·)/rhÚ`lm%–äHò:þû’CJ–e7u[ §î†Ã×’CKŒ\ø£$pB_Œ"™82 F‹üÆ­€òã`Ox@ŠFžÄ2¼˜Ýܽ™ÄIBo4[¾Yú«õÃZm]m¸–ph}¬uU?#øA;µÿ6ûéf:ënàˆÐÙÝ Cl/Hœ8ÙR:‰ðF¸£ŒûFÌÖe®ê±º®5«Tý™À÷ÓÙÛ·SÚ|p7Û«2'ÚƒªX¤Yg¬g .”Ú=’2p’@Žl0½‡+bz«óòI¼¬JV·ÉêÆº}‘†ˆÓ„˦ŠT³L^¦ú\¦ âÏ*×Cû.2'⋪Ü×,Rè}ߣú\Hýyšò!åu‡}%⻽ڲǻŮªtqýK³fW§'å*cL®‹µ¥:‘8‰úÇ‹x©¯þëqŸ›xŸ-õ}VhvÛ¶i½G÷»À¢†6¸ï•Ö&Kî^ɨ_và;2 ÚOP Ql=”céZ˜/¸K˱¬}A;Œ°Cz¼à¨G$±\X¥Qö`2Îs%h@i„š5£ÌE¨,E×îÐf¶ ëŒw« ½!oœÄ7fSÕXÄÖŠ¥tQîVk>¶¤µ^cT² ª‹ƒÄX̉‡&ıõºÜë'(È·n“°õqÜZ¨\X”JÂ2ùA„‚)yiìbÑþ 6 B£j jr ª'Bš›ËwsôÈqÂd(Ñsp‘×r|>W`{¾ïI|…E™ƒñiMmC‡k½0^”›Í) G¤ŸX%ÀÜ`;/ÏÎn3Åó/lÙ…´Ûm¯O8ÑO¸Ä3²¸Ò…%~{a€¢tà˜n°™­Û2ú˜k˜‚Ú™t3â&ݳ—n°íÒ -IˆÓ 0ÿ§Û–n&ÈðúFûûqXYcú€€Üªê¬4½Èµ<ÇuDpK qM ÅÔ¦. 5×´ê)[©F§Ä°ïs_”y°b| OÛûU‘KûúöB2ü¢VúѤmÈ ò%)€Ýg}¨o |]æzÀ;mŽ-:¹ÂöUg¾±Ârhûn-û›–µn@Ü@ÂiM„Øq Š~&Å\ê‹JâܰræÍrfÉŠÂ*{¢'l``šÑQ‹&3-].héúè弤RM‰¤¿ì²'µ§¿&ÕZŠÔO“Çíóö¦Æ‰Äb4z&襡$§”Ý„"téVÓI{…·”©¿OðêxóÝd á+RÞ>Nº¨uù²‡ìéÉ&t“Ð-®l²ÜV§iÖDSBP>øÄ›vxÍËN:<s^al³z»QS¢m;Ïj&ªF£sU37ߥHʇöfé GÂPí¦3ëaær—‡]x6Šz`škËŠ`Sû¢ëàU 8’ú²1Þ¶Ž©^ÿ~­ ‚å®Ï S#Þ*¡–”I9í¸MDdpq»?÷_†Ž/ÅUþûQ'øAQŸ˜òäá{a³ÇQäÄ0ï‘DZüາÊ)³ÌC‚Àjv¥ëÛv¸ hƒµ¯ž4·ns¦ÉÍ¢ãdFó~!4o[ >ió0šþeSêe”±/*h0­õ?ÏgÑþ6,Vúì¡é¿-§æi°>õ€öô&œhÀ†§hú*¯¬Ûœ‡#óÓïßÕ-ëhG ™ mJç.³%áÖú®nÌÙ€+ʆø[J§ßvWätF‚þÓp§xŒÀ±Öó¦™á¸"½„›¸ó„Ü¢VÖæ±6Xk@¯Í;„;¾UŒùJËü@hˆá€,°;åšO}èëÆ'"´ïĹŻZsũËoåó•sÂL=plZó·ˆ7f²DÈ<‘ÃÔ3S‰9A·63 Ô¬|f†Î\•]e~èßKª¯üïŽàíw†+òŸz$n=òDlØ+Ž]?‘Pþý¹4¾9øààWgøUÇbx6` ƒÄ äÅï:¾;¾Óì·>+‰h¨XbIR­Ê?kãendstream endobj 1669 0 obj << /Type /Page /Contents 1670 0 R /Resources 1668 0 R /MediaBox [0 0 609.714 789.041] /Parent 1627 0 R >> endobj 1671 0 obj << /D [1669 0 R /XYZ 95.641 729.265 null] >> endobj 1672 0 obj << /D [1669 0 R /XYZ 95.641 591.681 null] >> endobj 1673 0 obj << /D [1669 0 R /XYZ 95.641 591.681 null] >> endobj 1674 0 obj << /D [1669 0 R /XYZ 95.641 574.247 null] >> endobj 1675 0 obj << /D [1669 0 R /XYZ 95.641 574.247 null] >> endobj 1676 0 obj << /D [1669 0 R /XYZ 149.001 563.288 null] >> endobj 174 0 obj << /D [1669 0 R /XYZ 222.833 563.288 null] >> endobj 1677 0 obj << /D [1669 0 R /XYZ 95.641 556.244 null] >> endobj 1678 0 obj << /D [1669 0 R /XYZ 95.641 551.263 null] >> endobj 1679 0 obj << /D [1669 0 R /XYZ 480.057 531.407 null] >> endobj 1680 0 obj << /D [1669 0 R /XYZ 507.985 531.407 null] >> endobj 1681 0 obj << /D [1669 0 R /XYZ 95.641 497.036 null] >> endobj 1682 0 obj << /D [1669 0 R /XYZ 95.641 497.036 null] >> endobj 1683 0 obj << /D [1669 0 R /XYZ 151.771 486.077 null] >> endobj 178 0 obj << /D [1669 0 R /XYZ 211.914 486.077 null] >> endobj 1684 0 obj << /D [1669 0 R /XYZ 95.641 479.034 null] >> endobj 1685 0 obj << /D [1669 0 R /XYZ 95.641 474.052 null] >> endobj 1686 0 obj << /D [1669 0 R /XYZ 480.057 454.197 null] >> endobj 1687 0 obj << /D [1669 0 R /XYZ 507.985 454.197 null] >> endobj 1688 0 obj << /D [1669 0 R /XYZ 95.641 435.447 null] >> endobj 1689 0 obj << /D [1669 0 R /XYZ 95.641 360.05 null] >> endobj 1690 0 obj << /D [1669 0 R /XYZ 95.641 360.05 null] >> endobj 1691 0 obj << /D [1669 0 R /XYZ 151.771 349.091 null] >> endobj 182 0 obj << /D [1669 0 R /XYZ 229.678 349.091 null] >> endobj 1692 0 obj << /D [1669 0 R /XYZ 95.641 342.047 null] >> endobj 1693 0 obj << /D [1669 0 R /XYZ 95.641 337.066 null] >> endobj 1694 0 obj << /D [1669 0 R /XYZ 364.672 328.169 null] >> endobj 1695 0 obj << /D [1669 0 R /XYZ 389.808 317.211 null] >> endobj 1696 0 obj << /D [1669 0 R /XYZ 95.641 282.839 null] >> endobj 1697 0 obj << /D [1669 0 R /XYZ 95.641 282.839 null] >> endobj 1698 0 obj << /D [1669 0 R /XYZ 149.001 271.881 null] >> endobj 186 0 obj << /D [1669 0 R /XYZ 243.725 271.881 null] >> endobj 1699 0 obj << /D [1669 0 R /XYZ 95.641 264.837 null] >> endobj 1700 0 obj << /D [1669 0 R /XYZ 95.641 259.856 null] >> endobj 1701 0 obj << /D [1669 0 R /XYZ 95.641 227.547 null] >> endobj 1702 0 obj << /D [1669 0 R /XYZ 95.641 227.547 null] >> endobj 1703 0 obj << /D [1669 0 R /XYZ 155.088 216.588 null] >> endobj 190 0 obj << /D [1669 0 R /XYZ 237.428 216.588 null] >> endobj 1704 0 obj << /D [1669 0 R /XYZ 95.641 209.544 null] >> endobj 1705 0 obj << /D [1669 0 R /XYZ 95.641 204.563 null] >> endobj 1706 0 obj << /D [1669 0 R /XYZ 95.641 150.336 null] >> endobj 1707 0 obj << /D [1669 0 R /XYZ 95.641 150.336 null] >> endobj 1708 0 obj << /D [1669 0 R /XYZ 150.107 139.377 null] >> endobj 194 0 obj << /D [1669 0 R /XYZ 233.304 139.377 null] >> endobj 1709 0 obj << /D [1669 0 R /XYZ 95.641 134.272 null] >> endobj 1710 0 obj << /D [1669 0 R /XYZ 95.641 129.29 null] >> endobj 1668 0 obj << /Font << /F41 999 0 R /F40 935 0 R /F27 911 0 R /F35 919 0 R /F39 927 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1713 0 obj << /Length 1641 /Filter /FlateDecode >> stream xÚXmsÓ8þÞ_‘oçÌ4®ä·Ø|+2eJaJ†9nÅVOm)ø¥¹üûÛÕÊŽÓ¤G8˜Á«Õj_íŠðƒ¿|”„nðÑÔK\/ GiyÁF+ØywÁ­ùnOqëõüâê¤7‰üÑ|i$æÙ_ΛµØ4²O¼9ܥ¬ê?ˆþ T+Šñßó÷³y¯:à±ø|4é-<7>ñ§ÌàëynÂƒÞ ozìD¦¦±3Sä P™,‰.u&bŽ‹^\Ýøá^Ê Áƒ/ï"R+8àO¹Óhü2§Yw «é © änófmeésÒ¶ªÆ Š¼n~UÏ(¹I8äû£—ôµÒ¢;$|g!‰¡À\vI´( ½ÍÕŠV;ÝaÊ ßŸmž>cîìh½0¡ëmmU-DúxxÒSž¨ÌAä¬ò'c-¦Ž FJ”2yÀ­\‡2]o I´ƒ€!îXém¥º, Xp±$OK’Èò%.—r3BPÖ6ËÅ刮ÍÐ÷»|)ïr%ëãr„¾ëy‘½dÛ¼(@oì;ðÍÚß4Ä2© bÏYêŠ8˜ÈÁ°]âÝQ.,³&¦èð†üR×VcªÕ“T¹T`¬1)ŸXw†Îo×Ò‚¹^ëª9˜ áëj ]Ay蘒#OI³¤Å:tÎé¯YØ,àRÉ-­ûLLò(†³ì¤0Ñö2#ãÛ8ñ1àA(âæT<_îˆ-ต!#QodŠF^ê0öÎ#¨Í݇Z]Úv€VA;7+mp`ȶîfÀ£´Çtu¨†Lw Ϭ” B\gcΜÌvýÿ»Éu†J’€ÖÁÎgl7l™¢±®µã°ÃΰO ÀÀþðžyÌwyÄíýù¯{ÆÝ€ùVNÔÖêWè‰&Æ ÒÀt+¼0pÃ(8¨£š— Ú}b ']!³JÕ´0õJöe‡TÓNEÂ*:) MsBqHœ•ïï¶Yd™™2‰ è|tÞâcRÃuî†ÀN?wi‹àÛ—¥CØ™¸ú‡€óy+6ö‘3ð Úλëöì¡SÏ<NÛ-8lÞG†³÷`6«g‚¿ÜO éA6m¥ïL)rË)±³ÂÅ=ïÞôºB‹FëÚæ#æú‰äA7K¬œõ Ó!U»’{. C sš¸,ˆG“F˜›qÌœë·wc}ü›mêØÔ?ŽAÙ×Ï3[æ7³Ùý±ÁÔ¡š¹IsÓT|>`]§T[8>á[o ±³Ò¹‚ÉWŠ&7mb¡ÛÆ’t`)Ê0PìÆœsÇ%æ|mÕ7zCÄF(YÐ&Ì4DMM«…¨óôĽ94ííMÙÀqch´?0œy·µÐMƒ ¤;û@¢}4î…öu <¬QfL¡¹'‘bQXx§LNx‰oó(Mbz”&q×ac'€ðì Fˆ¨iUBzßGð”P–2o^ 6¢»wöÐ’:U?$EáZ«Žê]øÎ˜WÕÍ Ïû—µ¾ŒmùeöÂ+h¤–կƓšö|­K|»º‚^Oä×ñ„;³ù‡3bÜ~¡ïw2ÿpãx5…èFãKFWÊjæ1}ßÊT– dž›É%’ܹǡ€¼;­2­.iqšûF+%Ó&OÛ>#{£Y.³W4|Ž*õ Ø»V(EäM%T*kòäÝÃìþíõ>@ï¼}ß·X¼ƒà˜ó)o0…M½h«ÕÚ2¯‹B®à…¸ë„¤Rõ®x*¿–¨*³Mv­úvÕâ$W¦ °–Þé'x(éÊVú¶.þÏ3þMW§x§3‘®ó¢sàZ)AÔø‡°9þ*›}Е´jnï]Ðç@'ö¹÷ûܳ—¬}{O®D%›#ÔLPr÷ö‚_Û{éŽÌæhoG¾½ËÎϺ {£Ç¥ýqòZúqöŸôqhŸ iZ:“®µîè®læ¾0à…)˜zÖëÍÊÆuÕ'møʤ_Q˜¸¡wð+Ê‹¿×@—xá§6<ÿ/óµæendstream endobj 1712 0 obj << /Type /Page /Contents 1713 0 R /Resources 1711 0 R /MediaBox [0 0 609.714 789.041] /Parent 1627 0 R >> endobj 1714 0 obj << /D [1712 0 R /XYZ 95.641 729.265 null] >> endobj 1715 0 obj << /D [1712 0 R /XYZ 95.641 716.314 null] >> endobj 1716 0 obj << /D [1712 0 R /XYZ 95.641 716.314 null] >> endobj 1717 0 obj << /D [1712 0 R /XYZ 149.549 706.351 null] >> endobj 198 0 obj << /D [1712 0 R /XYZ 245.518 706.351 null] >> endobj 1718 0 obj << /D [1712 0 R /XYZ 95.641 701.245 null] >> endobj 1719 0 obj << /D [1712 0 R /XYZ 95.641 696.264 null] >> endobj 1720 0 obj << /D [1712 0 R /XYZ 95.641 651.059 null] >> endobj 1721 0 obj << /D [1712 0 R /XYZ 95.641 651.059 null] >> endobj 1722 0 obj << /D [1712 0 R /XYZ 152.319 640.1 null] >> endobj 202 0 obj << /D [1712 0 R /XYZ 219.864 640.1 null] >> endobj 1723 0 obj << /D [1712 0 R /XYZ 95.641 634.994 null] >> endobj 1724 0 obj << /D [1712 0 R /XYZ 95.641 630.013 null] >> endobj 1725 0 obj << /D [1712 0 R /XYZ 163.387 597.26 null] >> endobj 1726 0 obj << /D [1712 0 R /XYZ 95.641 562.889 null] >> endobj 1727 0 obj << /D [1712 0 R /XYZ 95.641 562.889 null] >> endobj 1728 0 obj << /D [1712 0 R /XYZ 152.319 551.93 null] >> endobj 206 0 obj << /D [1712 0 R /XYZ 254.096 551.93 null] >> endobj 1729 0 obj << /D [1712 0 R /XYZ 95.641 544.887 null] >> endobj 1730 0 obj << /D [1712 0 R /XYZ 95.641 539.905 null] >> endobj 1731 0 obj << /D [1712 0 R /XYZ 95.641 496.638 null] >> endobj 1732 0 obj << /D [1712 0 R /XYZ 95.641 496.638 null] >> endobj 1733 0 obj << /D [1712 0 R /XYZ 151.771 485.679 null] >> endobj 210 0 obj << /D [1712 0 R /XYZ 223.63 485.679 null] >> endobj 1734 0 obj << /D [1712 0 R /XYZ 95.641 480.573 null] >> endobj 1735 0 obj << /D [1712 0 R /XYZ 95.641 475.592 null] >> endobj 1736 0 obj << /D [1712 0 R /XYZ 366.548 464.757 null] >> endobj 1737 0 obj << /D [1712 0 R /XYZ 95.641 419.427 null] >> endobj 1738 0 obj << /D [1712 0 R /XYZ 95.641 419.427 null] >> endobj 1739 0 obj << /D [1712 0 R /XYZ 151.771 408.468 null] >> endobj 214 0 obj << /D [1712 0 R /XYZ 244.233 408.468 null] >> endobj 1740 0 obj << /D [1712 0 R /XYZ 95.641 401.425 null] >> endobj 1741 0 obj << /D [1712 0 R /XYZ 95.641 396.443 null] >> endobj 1742 0 obj << /D [1712 0 R /XYZ 95.641 364.134 null] >> endobj 1743 0 obj << /D [1712 0 R /XYZ 95.641 364.134 null] >> endobj 1744 0 obj << /D [1712 0 R /XYZ 152.319 353.176 null] >> endobj 218 0 obj << /D [1712 0 R /XYZ 254.624 353.176 null] >> endobj 1745 0 obj << /D [1712 0 R /XYZ 95.641 346.132 null] >> endobj 1746 0 obj << /D [1712 0 R /XYZ 95.641 341.151 null] >> endobj 1747 0 obj << /D [1712 0 R /XYZ 223.78 332.254 null] >> endobj 1015 0 obj << /D [1712 0 R /XYZ 95.641 274.471 null] >> endobj 222 0 obj << /D [1712 0 R /XYZ 248.435 241.285 null] >> endobj 1748 0 obj << /D [1712 0 R /XYZ 95.641 235.107 null] >> endobj 1749 0 obj << /D [1712 0 R /XYZ 95.641 178.65 null] >> endobj 1711 0 obj << /Font << /F41 999 0 R /F27 911 0 R /F35 919 0 R /F40 935 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1752 0 obj << /Length 1861 /Filter /FlateDecode >> stream xÚµXKÛF ¾çWøRÄ*VÚ™‘4’ÐC‘IÑ"Ef‹š"¥ñZ-¹–wÿ}ù˜ÑËê®ÓÇîAŠCr†äGZr!à_.²8Б\$* ”ŽÅî™XÜÛïžI+Ê^%‹0ˆÓ^Þ=»}{² ÓáânMrwå¯ËW›|4ÏW±XÊ€Ÿ¿´æÐ>gúǼ>å[ï·»ž½¾ë HRG ¿³0uÁu¨pá+d2ꋜÐC'ŒçK%ÄòuY=_uÜ&Öù®Ú>x~¤„\~ÕZÁeÉ¯Ûæt(Pûög³k>Ûýí¾9{Ù:}‡f‡‡Ë~¤xàÀÚî|yhÎNòØ8ÀPjôÀL=0ŸM N'È,g(6Õ(³¿{Äþ®Úo¦öí[²ÿ§}ùîœï­’sãÜ@'ªmy0õ¥ýâûxÚå«<¸ ÜðåqÔHò[ûü‰=¥3™ú„”íMU˜öÒ¥Úîzu0ùѪ¯Í™‰=äg¡ùÔ#òøoJañG¦ãéPOn¯)¯êŸèša:tïãìnþxõß@úòüo«µy[Õp5ä‰ïóó=ˆ¦h¡†>b1Öó"_»£Ýßo<¼“hðöJ†ˆàë(qæJR%©­H¤¨"‘ «ôd¼|ðR± XQ÷Š$P*†ÂðT¤ÍªÑÒªÑÊFäyËìƒ'Ó¥)z–Vé*¤HƒDZ¼èïæÂx,¨ÃrçCu4íÄðØ”}Ùð3g‘B¨­±¬ºdæþä`Ë‹D|]Õ°—2n.HB< ç¶·˜cÕ¤jiàüÍi²ey–C®¥Î.‚p.߃¹ •,Ø^ê¼ç¼Åõš€)cMÖ`-o.ïRiè쪻TÊÉåí§–u£/tâPJ€öltb:´¢©ñ4‡/Ù1 NûÊù›!7ʺòDfÕZ ›¼¾7%/šº{½æ'ߥµØ6ÁeRû.Ã(!,ØcCõ(PŒ™LDIÞ¸'¬ÒOç7«|ÉQ`=ZØ|ÂB-uÞnNíÊæX_;9ºžî"¤”8zÕž«#Z}?Ö ª q¹š8М(¦´ ‚ôýz×ã†÷_7ÇNŠ•Ý¸5ŠYÓ-ÃÐ]ŽÝc°ÍO_ 4£@d¶Ø²Ðž¬ðö YÏo(™+`¬s8Þ( ÀFa Öõ!ä­&¦‡! a¸õËPt!pmþÊÏæ‚âéŠ(<)–vøòšuFšð™ã#uM9ØmIbcEÇU€¼§ ÁP]·©› €v±ðxð# Ãp ‹À)¸ŒË‘6yëb4¼òã†àÐɸ[÷hÈš]É NÒ+PœÔâCت„Á³Z[s ‚{S  ˆ½…ó šK%UI5Ê„š£í†.¤ál˜¼ ؉w®«ÇW|a¬,Ó¶›"Q:1v¸îKJÛ2Ó®6õzG¾Ê[33 (¡ƒ,J®êj¡vrEç_;pG_ èÖÜÎçÞ§â4ágÍ0gö[:g+>'ûŽ a,9€È¢‘(ÎÝxˆ¼FKvd 9+Ï#Ãhçtp"Sï7NQgt07Ì${?D(×”||ˆÐ0ªÆáU鬥§³ré¬ìè¥ÆƒrãÂ$D~¬BQXSïRÒ)Àþ3Ù‚¹Ä#db¤ÇJ šø„d4„EÒŠp°")GKF ‚æ»ÃIR ‡ZÌš (Gñ¼ÄØ ,¿·r+€ÿ™È`¹4ë²j!ÓÜôc¦ÍàKпåÒ~Q"Ä—¼p?êÆCÑ— þ¬›~“Ih~9?œ^¤Q¯t½YRçí`î¨V®É¸0R£ŒCí”0C»=€Ž¼ 0:_©¼ÆÐ;IN/¨D1 hv;¹ÄåhÕG8¿ŸÚ#³VfÝw“Äeo"9j¬èÜ[‰êE뱨œ«ÓP(úôäµùNrxœû“i)C™`Ã;:Ê0Á9/û„Aæ¹Ún™Z™‰|W@ó]àfD¿ŒPxî§ŸJ\óUÀ'ãÆ‰fªµýµ¢T†“_+š›²též¶Õ$Ty7̳M+åßðl r@h—2ÝF¼¤ú\úgwL;M]}¡Öš•ਈ3;:]– TÉ5áþgcFB'—ýÀÊǙÛ ŠQÈÞä3xÓ—ÿrT9¡HhÐý  wáÒQ¤O"N$2¼*ó¢TŽ3Ìpóig·¿Ë‘\DÀ±£ÑÔhD:F™9´I'h£c÷M"¶h„E Fhkû5$æ/Ú*ò$ÑCÀJ[½Öìÿ‡6*® ¢î3í°*Ì\L‘Ç`ƒÔÊLÄ»BÚ^PnäÞǛ8 ’H^UBé´„"û…‚ü¨Úéwst+¬gA¬f¿œG"¥©E<úá^fSÝ(¢x—Sù/–>Xendstream endobj 1751 0 obj << /Type /Page /Contents 1752 0 R /Resources 1750 0 R /MediaBox [0 0 609.714 789.041] /Parent 1627 0 R >> endobj 1753 0 obj << /D [1751 0 R /XYZ 95.641 729.265 null] >> endobj 1754 0 obj << /D [1751 0 R /XYZ 95.641 611.407 null] >> endobj 1755 0 obj << /D [1751 0 R /XYZ 95.641 611.407 null] >> endobj 1756 0 obj << /D [1751 0 R /XYZ 95.641 593.973 null] >> endobj 1757 0 obj << /D [1751 0 R /XYZ 95.641 593.973 null] >> endobj 1758 0 obj << /D [1751 0 R /XYZ 151.771 583.014 null] >> endobj 226 0 obj << /D [1751 0 R /XYZ 221.687 583.014 null] >> endobj 1759 0 obj << /D [1751 0 R /XYZ 95.641 575.97 null] >> endobj 1760 0 obj << /D [1751 0 R /XYZ 95.641 570.989 null] >> endobj 1761 0 obj << /D [1751 0 R /XYZ 272.097 562.092 null] >> endobj 1762 0 obj << /D [1751 0 R /XYZ 424.077 551.133 null] >> endobj 1763 0 obj << /D [1751 0 R /XYZ 95.641 516.762 null] >> endobj 1764 0 obj << /D [1751 0 R /XYZ 95.641 516.762 null] >> endobj 1765 0 obj << /D [1751 0 R /XYZ 149.549 505.803 null] >> endobj 230 0 obj << /D [1751 0 R /XYZ 229.976 505.803 null] >> endobj 1766 0 obj << /D [1751 0 R /XYZ 95.641 500.697 null] >> endobj 1767 0 obj << /D [1751 0 R /XYZ 95.641 495.716 null] >> endobj 1768 0 obj << /D [1751 0 R /XYZ 95.641 450.511 null] >> endobj 1769 0 obj << /D [1751 0 R /XYZ 95.641 450.511 null] >> endobj 1770 0 obj << /D [1751 0 R /XYZ 152.319 439.552 null] >> endobj 234 0 obj << /D [1751 0 R /XYZ 241.603 439.552 null] >> endobj 1771 0 obj << /D [1751 0 R /XYZ 95.641 434.446 null] >> endobj 1772 0 obj << /D [1751 0 R /XYZ 95.641 429.465 null] >> endobj 1773 0 obj << /D [1751 0 R /XYZ 95.641 384.259 null] >> endobj 1774 0 obj << /D [1751 0 R /XYZ 95.641 384.259 null] >> endobj 1775 0 obj << /D [1751 0 R /XYZ 151.771 373.3 null] >> endobj 238 0 obj << /D [1751 0 R /XYZ 243.775 373.3 null] >> endobj 1776 0 obj << /D [1751 0 R /XYZ 95.641 368.194 null] >> endobj 1777 0 obj << /D [1751 0 R /XYZ 95.641 363.213 null] >> endobj 1778 0 obj << /D [1751 0 R /XYZ 304.965 341.42 null] >> endobj 1779 0 obj << /D [1751 0 R /XYZ 95.641 318.008 null] >> endobj 1780 0 obj << /D [1751 0 R /XYZ 95.641 318.008 null] >> endobj 1781 0 obj << /D [1751 0 R /XYZ 152.319 307.049 null] >> endobj 242 0 obj << /D [1751 0 R /XYZ 243.924 307.049 null] >> endobj 1782 0 obj << /D [1751 0 R /XYZ 95.641 300.005 null] >> endobj 1783 0 obj << /D [1751 0 R /XYZ 95.641 295.024 null] >> endobj 1784 0 obj << /D [1751 0 R /XYZ 370.334 286.127 null] >> endobj 1785 0 obj << /D [1751 0 R /XYZ 233.24 264.209 null] >> endobj 1786 0 obj << /D [1751 0 R /XYZ 95.641 218.879 null] >> endobj 1787 0 obj << /D [1751 0 R /XYZ 95.641 218.879 null] >> endobj 1788 0 obj << /D [1751 0 R /XYZ 151.771 207.92 null] >> endobj 246 0 obj << /D [1751 0 R /XYZ 254.245 207.92 null] >> endobj 1789 0 obj << /D [1751 0 R /XYZ 95.641 200.877 null] >> endobj 1790 0 obj << /D [1751 0 R /XYZ 95.641 195.895 null] >> endobj 1791 0 obj << /D [1751 0 R /XYZ 282.81 186.999 null] >> endobj 1792 0 obj << /D [1751 0 R /XYZ 465.654 176.04 null] >> endobj 1793 0 obj << /D [1751 0 R /XYZ 434.147 165.081 null] >> endobj 1794 0 obj << /D [1751 0 R /XYZ 182.854 143.163 null] >> endobj 1795 0 obj << /D [1751 0 R /XYZ 95.641 119.751 null] >> endobj 1796 0 obj << /D [1751 0 R /XYZ 95.641 119.751 null] >> endobj 1797 0 obj << /D [1751 0 R /XYZ 151.771 108.792 null] >> endobj 250 0 obj << /D [1751 0 R /XYZ 242.519 108.792 null] >> endobj 1798 0 obj << /D [1751 0 R /XYZ 95.641 101.749 null] >> endobj 1799 0 obj << /D [1751 0 R /XYZ 95.641 96.767 null] >> endobj 1800 0 obj << /D [1751 0 R /XYZ 281.1 87.871 null] >> endobj 1801 0 obj << /D [1751 0 R /XYZ 465.654 76.912 null] >> endobj 1802 0 obj << /D [1751 0 R /XYZ 417.128 65.953 null] >> endobj 1750 0 obj << /Font << /F41 999 0 R /F40 935 0 R /F27 911 0 R /F35 919 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1805 0 obj << /Length 1364 /Filter /FlateDecode >> stream xÚ•XK“Û6 ¾ï¯ð­òÌZ!©÷u;i§ôÒ:‡¾\Y^k"‹®)Çu}’I¯“hÇ‚ ‰çG²\øÉE•Åy*…ªb•g‹zÿ /°òãƒäb‘ÄYYàÒÓúáݰ»Š«=ÊÈ3<ºbà6¡¢ÇªŽô3%ýlyŸ­)°‚J^ èËY5#MK?;Ô–$2.dä˜2–òÑ&AŸ¢Üóƒmjã’<=ò¦q‰ªxÏŠ n`% +ß#$8.ž`R8Åáñ^ h-4—¶!H<›a÷ afì&À(Ü6væå&h¤±´âصv`ÎÇvOGÒî¿/«$ràƒI­Y§ö^hEÏQò|¹ñ^ï]«^f¸îÆOÍ0u@™OË$)<é:\ @ØS]7ÖnO]Çç<üÁL“Ð>=µ“ÒŒòQF«;–c”n§sÛuã³ÒõnlEÇGËoF'm@þ‚b×x^Z¼ ¶sÁöß[À6ïú£=p¦|ë`îB5çÅõ㽫ð +Ï΢’³•˰øi5ßIn$tDb†;øÊ™ r:&!èˆÏº;ѧ¤W=èSÒË;µ³iåƆåjüÄaL¾•ÄÆ&s8û0y{Ý2g#ô §¹_ ,+°®y£\ÄI5¯q¼Vl¶ d‚Ud‘ÿá¿Ê‹¸H¡PäYg*øôÿ⟠J|éÿáŸÿàÁUendstream endobj 1804 0 obj << /Type /Page /Contents 1805 0 R /Resources 1803 0 R /MediaBox [0 0 609.714 789.041] /Parent 1627 0 R >> endobj 1806 0 obj << /D [1804 0 R /XYZ 95.641 729.265 null] >> endobj 1807 0 obj << /D [1804 0 R /XYZ 95.641 741.22 null] >> endobj 1808 0 obj << /D [1804 0 R /XYZ 413.279 706.351 null] >> endobj 1809 0 obj << /D [1804 0 R /XYZ 394.358 695.392 null] >> endobj 1810 0 obj << /D [1804 0 R /XYZ 95.641 661.021 null] >> endobj 1811 0 obj << /D [1804 0 R /XYZ 95.641 661.021 null] >> endobj 1812 0 obj << /D [1804 0 R /XYZ 150.107 650.062 null] >> endobj 254 0 obj << /D [1804 0 R /XYZ 253.787 650.062 null] >> endobj 1813 0 obj << /D [1804 0 R /XYZ 95.641 643.019 null] >> endobj 1814 0 obj << /D [1804 0 R /XYZ 95.641 638.037 null] >> endobj 1815 0 obj << /D [1804 0 R /XYZ 355.352 629.141 null] >> endobj 1816 0 obj << /D [1804 0 R /XYZ 95.641 583.811 null] >> endobj 1817 0 obj << /D [1804 0 R /XYZ 95.641 583.811 null] >> endobj 1818 0 obj << /D [1804 0 R /XYZ 152.319 572.852 null] >> endobj 258 0 obj << /D [1804 0 R /XYZ 244.273 572.852 null] >> endobj 1819 0 obj << /D [1804 0 R /XYZ 95.641 567.746 null] >> endobj 1820 0 obj << /D [1804 0 R /XYZ 95.641 562.765 null] >> endobj 1821 0 obj << /D [1804 0 R /XYZ 303.53 551.93 null] >> endobj 1822 0 obj << /D [1804 0 R /XYZ 95.641 506.6 null] >> endobj 1823 0 obj << /D [1804 0 R /XYZ 95.641 506.6 null] >> endobj 1824 0 obj << /D [1804 0 R /XYZ 151.771 495.641 null] >> endobj 262 0 obj << /D [1804 0 R /XYZ 241.712 495.641 null] >> endobj 1825 0 obj << /D [1804 0 R /XYZ 95.641 488.598 null] >> endobj 1826 0 obj << /D [1804 0 R /XYZ 95.641 483.616 null] >> endobj 1827 0 obj << /D [1804 0 R /XYZ 163.387 463.761 null] >> endobj 1828 0 obj << /D [1804 0 R /XYZ 95.641 440.349 null] >> endobj 1829 0 obj << /D [1804 0 R /XYZ 95.641 440.349 null] >> endobj 1830 0 obj << /D [1804 0 R /XYZ 149.549 429.39 null] >> endobj 266 0 obj << /D [1804 0 R /XYZ 247.391 429.39 null] >> endobj 1831 0 obj << /D [1804 0 R /XYZ 95.641 422.346 null] >> endobj 1832 0 obj << /D [1804 0 R /XYZ 95.641 417.365 null] >> endobj 1833 0 obj << /D [1804 0 R /XYZ 443.655 408.468 null] >> endobj 1834 0 obj << /D [1804 0 R /XYZ 95.641 363.138 null] >> endobj 1835 0 obj << /D [1804 0 R /XYZ 95.641 363.138 null] >> endobj 1836 0 obj << /D [1804 0 R /XYZ 152.319 352.179 null] >> endobj 270 0 obj << /D [1804 0 R /XYZ 244.273 352.179 null] >> endobj 1837 0 obj << /D [1804 0 R /XYZ 95.641 345.136 null] >> endobj 1838 0 obj << /D [1804 0 R /XYZ 95.641 340.154 null] >> endobj 1839 0 obj << /D [1804 0 R /XYZ 95.641 285.928 null] >> endobj 1840 0 obj << /D [1804 0 R /XYZ 95.641 285.928 null] >> endobj 1841 0 obj << /D [1804 0 R /XYZ 151.213 274.969 null] >> endobj 274 0 obj << /D [1804 0 R /XYZ 237.628 274.969 null] >> endobj 1842 0 obj << /D [1804 0 R /XYZ 95.641 267.925 null] >> endobj 1843 0 obj << /D [1804 0 R /XYZ 95.641 262.944 null] >> endobj 1844 0 obj << /D [1804 0 R /XYZ 293.178 254.047 null] >> endobj 1845 0 obj << /D [1804 0 R /XYZ 95.641 219.676 null] >> endobj 1846 0 obj << /D [1804 0 R /XYZ 95.641 219.676 null] >> endobj 1847 0 obj << /D [1804 0 R /XYZ 152.319 208.717 null] >> endobj 278 0 obj << /D [1804 0 R /XYZ 254.624 208.717 null] >> endobj 1848 0 obj << /D [1804 0 R /XYZ 95.641 201.674 null] >> endobj 1849 0 obj << /D [1804 0 R /XYZ 95.641 196.692 null] >> endobj 1850 0 obj << /D [1804 0 R /XYZ 223.78 187.796 null] >> endobj 1016 0 obj << /D [1804 0 R /XYZ 95.641 130.012 null] >> endobj 1803 0 obj << /Font << /F41 999 0 R /F35 919 0 R /F40 935 0 R /F27 911 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1853 0 obj << /Length 1589 /Filter /FlateDecode >> stream xÚÅXmoÛ6þž_áo•šõ®îS^œ.m≷ X‡‚–h[›%z’7ûõ;ꎲb ©tX TGòxÏsÇ#y4ØðbŸ„NÌœÀ$ù‰=XÀÈûN.wa(¸ÌB­p>=9½‚91‹w07zÓô7ëb)Öµ,‡#Ç·-ÎðûK%Ëê Ê·¢ØˆÕð÷釓ñ´à¶Ïxà F-Â>…‘Ç#æ¹ 8‹¹×²pÂw˜íû]Óal[g“Ëñ- †‘õi|ÿp7Aùü~èØÖÝÈ<>Œ±ïöîr¬9^¹þÎ)/d‘ˆ<`q á¥„·jQ¤2ײm­Á=U`ÿ¬òÈRÛŠôª¤é’ÆÓ¬Z¯†ÜÏvdÅ\•¹¨3cAÌÔ¦&­ê"T »¯kš›‹¬Ð´Áë·YìÇ ÉçqleµþFV­°]mÖkUÖØ¨—G }ݙˆî"+8¨`´!ÇPaº$ÛµZ“ñ-Y_‹B®*BZªíþ0úÐÃ7Óžû2r|׈`'8“¢„j®Qsvq–GWYE3_„ÚMè!î §ÆÌLÕµÊɤöǰJÙ“¬v ‡ÌsYl0¯Õ¿âId+1[Il&*Ï*ÒŠ6Õ¢Ý!¿‰|½’ï0ï<{AÞ:ï '†ôóôôÝpØ6W¹¨H.Eõ'ŠËÜšÞÞݱã¡ÄïÛ·þçÆ0¬3 ÏTiÌr¿·¢L–ÔÁ[2¦³Æb­Êóbp.žIå2[ÌŒ=AvþÐ𞤷-³‹LMJE‰òK8WTdbó‹m;+ù–ú RZoj2÷¬híy1;æ=EwhÜ÷ÊåÀ’¬UC›¾½iH‚áœÇ¥$³»Ð(æ©nÏñ”ã„Ö ¡…žõö0²®í4ïÏïFvd4»žÂuGKH¤ì6‰*4ÿ2§n“›uªßhµüio`÷ä°­Œ¬&KQ,ð‘Çsç"Ï÷@S­;Ìï‘ÉM×cnÈÍiÚ> endobj 1854 0 obj << /D [1852 0 R /XYZ 95.641 729.265 null] >> endobj 282 0 obj << /D [1852 0 R /XYZ 296.641 706.351 null] >> endobj 1855 0 obj << /D [1852 0 R /XYZ 95.641 700.173 null] >> endobj 1856 0 obj << /D [1852 0 R /XYZ 95.641 413.5 null] >> endobj 1857 0 obj << /D [1852 0 R /XYZ 95.641 413.5 null] >> endobj 1858 0 obj << /D [1852 0 R /XYZ 95.641 396.065 null] >> endobj 1859 0 obj << /D [1852 0 R /XYZ 95.641 396.065 null] >> endobj 1860 0 obj << /D [1852 0 R /XYZ 151.771 385.106 null] >> endobj 286 0 obj << /D [1852 0 R /XYZ 227.456 385.106 null] >> endobj 1861 0 obj << /D [1852 0 R /XYZ 95.641 378.062 null] >> endobj 1862 0 obj << /D [1852 0 R /XYZ 95.641 373.081 null] >> endobj 1863 0 obj << /D [1852 0 R /XYZ 290.562 364.184 null] >> endobj 1864 0 obj << /D [1852 0 R /XYZ 465.654 353.226 null] >> endobj 1865 0 obj << /D [1852 0 R /XYZ 95.641 318.854 null] >> endobj 1866 0 obj << /D [1852 0 R /XYZ 95.641 318.854 null] >> endobj 1867 0 obj << /D [1852 0 R /XYZ 149.549 307.896 null] >> endobj 290 0 obj << /D [1852 0 R /XYZ 218.39 307.896 null] >> endobj 1868 0 obj << /D [1852 0 R /XYZ 95.641 300.852 null] >> endobj 1869 0 obj << /D [1852 0 R /XYZ 95.641 295.871 null] >> endobj 1870 0 obj << /D [1852 0 R /XYZ 95.641 263.562 null] >> endobj 1871 0 obj << /D [1852 0 R /XYZ 95.641 263.562 null] >> endobj 1872 0 obj << /D [1852 0 R /XYZ 149.549 252.603 null] >> endobj 294 0 obj << /D [1852 0 R /XYZ 236.064 252.603 null] >> endobj 1873 0 obj << /D [1852 0 R /XYZ 95.641 245.559 null] >> endobj 1874 0 obj << /D [1852 0 R /XYZ 95.641 240.578 null] >> endobj 1875 0 obj << /D [1852 0 R /XYZ 95.641 208.269 null] >> endobj 1876 0 obj << /D [1852 0 R /XYZ 95.641 208.269 null] >> endobj 1877 0 obj << /D [1852 0 R /XYZ 155.088 197.31 null] >> endobj 298 0 obj << /D [1852 0 R /XYZ 247.69 197.31 null] >> endobj 1878 0 obj << /D [1852 0 R /XYZ 95.641 190.267 null] >> endobj 1879 0 obj << /D [1852 0 R /XYZ 95.641 185.285 null] >> endobj 1880 0 obj << /D [1852 0 R /XYZ 95.641 152.976 null] >> endobj 1881 0 obj << /D [1852 0 R /XYZ 95.641 152.976 null] >> endobj 1882 0 obj << /D [1852 0 R /XYZ 151.771 142.018 null] >> endobj 302 0 obj << /D [1852 0 R /XYZ 254.395 142.018 null] >> endobj 1883 0 obj << /D [1852 0 R /XYZ 95.641 134.974 null] >> endobj 1884 0 obj << /D [1852 0 R /XYZ 95.641 129.993 null] >> endobj 1885 0 obj << /D [1852 0 R /XYZ 199.023 110.137 null] >> endobj 1851 0 obj << /Font << /F41 999 0 R /F27 911 0 R /F35 919 0 R /F40 935 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1889 0 obj << /Length 1652 /Filter /FlateDecode >> stream xÚ]oÛ6ð=¿Âo“X©ïö)ÍG‘!i‡Ä[1¬{ -:æj‘ž(Åõ¿ß‘GÉ’í®B€ðx:Þ÷&“þÈ$ý$"“”æ>Mâɲ¼&¯ðåãqÁ$ôã,5Ÿ>Ì/®î:÷ó$œÌW–b^üåݬٶæÕtFãÀ#>®¿k^é_~b²a›éßó_/îæëˆd~’ɬ“p,|¦ŸÀJ©Ÿ“¨S‚¦§J,ATšyª) <5%±·ÓqµÚ"°œ’À[‹MQqéu®îÃøÀŠDcÀJ,×g¾Ý°¥áCs¯^O‰×–'[0SIgÞN‰Å*É¥VˆX }µ¶>‚ èjLIæU,öaÕŠqg¬á<Óˆ,žji™4†€fÔŽs«6ŠÏ/˜K45 &˜šS£|ž;×=Š’ëS—ÄÀ3hé˜þ¦‘í^5Ô WQpY‹ÕÞa×N<ÄÁ“ܹºµ!‰ÑBùaŠÎ^ü_q—<¸Eÿ,€Ôòü`½¥Qè…¹Çp+ù÷¯©*\7B×øÕF1l#ÒŠî;”d‘ŸGã<šæÑУÀ=æNÁ¬ïÑ¡º&Ú°‰ý4 AïLÈ(š‘VaD.ö¸JVòK¿ñ=âÚÚ<¤‚#^0ÄÖÉ(wŒ™[ SzY‰wÔBv§Î¤©æËZX•M®Èa* ùŠ†Ë–wcÍÙtr‘ïeSs… ³?jmB-T]«r\3VÀ&„"´ nÃ/¤iç|ƒÒpС˜>©®q±yöjÞòÑx@ªK,}VóâýAÀ¿BèZ§¹œ0ŽuÅ[ MmoCdŠu~K>Ò­ ýv]˜^ê|¼b¥Ø —³ÀW˜7-&CbË,H,Ï=ÂHºÄΦŸVýŒ„#ªø4>ô3Ý”˜Ã±ëYØ)ú~‚m¯”@[ׄm1’4õƒ”BÐ6ƨݣk‹z«ÍõÕ–™”ÆK vÑòˆ=zä}÷Ù5Û²±ke¹JZ¹u»UZXG9Û÷‘!þ£ú„½ª"Íûå2,!¨q!· 3ïÕ*Ôz€Ži`¬£iâÕà0[Â;RâiÇ4 ~ž%£Úq–v†PåÂ’ õÃŒ@åŒ3׃cêgQêžaåÙÚÍ££”Õˆd²@À ¶WâÖ6wûÚ•ÜCSBF«ý/ªùÌ릒Ã.T2á0%xLjÆNøŽWošu·ê0U“ —cGf§• “lVêqŒf¦¹DÙd–ÃÁC?Ÿæwýéöî Mº7÷êõÓÃã”Àhü§›“ŸÍœüy Ì¿¼Ü¹žýùöîT¥(õ30w3w/-+ÁÆ+ ½2›ÛŽNw.àýÁöýNdö6zL¶×ˆr¥ª’¹[¨¦vBlR´×>âjwØúé´+=Æh%!Föº»­ªqƒ¹_;ýÙ/ ‹èÚ?o“МµUl€c½e’o42Ü¢Þ`&uz ‘³®ØúáIÞž´MÐÈ>ï<€;lžI¿Ñ¦ó=(é¾ÛþÓçØÝš[\«M¡HMî{%º9½1±a‹MûfTe â´{Èß+;¤X˜gåvÃßVG`ë5£‰å¼b »z7%A©¦JóB°pO¿À\áÝÍŸ>?ß!âá\¿q@à±*ƒ¾iÅ×tˆ¯DUIÇ™d¸Þò%/æum±ð»4 ñ>™ÙÉà•,Ìd7ç±7JJÓ_—;ëŽ%—ªgÕcäDð¾brÉ5Šüø|÷éöú` gI€ë¯Éß÷›É~âÕzÑT¯k‡¼Þlø+ÜÙû–ˆK©÷›7&;þ¥eÖ6€$Îý˜~kùá¯:”þè› þ?Àò¿Œendstream endobj 1888 0 obj << /Type /Page /Contents 1889 0 R /Resources 1887 0 R /MediaBox [0 0 609.714 789.041] /Parent 1886 0 R >> endobj 1890 0 obj << /D [1888 0 R /XYZ 95.641 729.265 null] >> endobj 1891 0 obj << /D [1888 0 R /XYZ 95.641 716.314 null] >> endobj 1892 0 obj << /D [1888 0 R /XYZ 95.641 716.314 null] >> endobj 1893 0 obj << /D [1888 0 R /XYZ 151.771 706.351 null] >> endobj 306 0 obj << /D [1888 0 R /XYZ 249.862 706.351 null] >> endobj 1894 0 obj << /D [1888 0 R /XYZ 95.641 699.308 null] >> endobj 1895 0 obj << /D [1888 0 R /XYZ 95.641 694.326 null] >> endobj 1896 0 obj << /D [1888 0 R /XYZ 208.976 674.471 null] >> endobj 1897 0 obj << /D [1888 0 R /XYZ 95.641 651.059 null] >> endobj 1898 0 obj << /D [1888 0 R /XYZ 95.641 651.059 null] >> endobj 1899 0 obj << /D [1888 0 R /XYZ 152.319 640.1 null] >> endobj 310 0 obj << /D [1888 0 R /XYZ 244.273 640.1 null] >> endobj 1900 0 obj << /D [1888 0 R /XYZ 95.641 633.056 null] >> endobj 1901 0 obj << /D [1888 0 R /XYZ 95.641 628.075 null] >> endobj 1902 0 obj << /D [1888 0 R /XYZ 348.336 619.178 null] >> endobj 1903 0 obj << /D [1888 0 R /XYZ 95.641 573.848 null] >> endobj 1904 0 obj << /D [1888 0 R /XYZ 95.641 573.848 null] >> endobj 1905 0 obj << /D [1888 0 R /XYZ 152.319 562.889 null] >> endobj 314 0 obj << /D [1888 0 R /XYZ 246.804 562.889 null] >> endobj 1906 0 obj << /D [1888 0 R /XYZ 95.641 555.846 null] >> endobj 1907 0 obj << /D [1888 0 R /XYZ 95.641 550.864 null] >> endobj 1908 0 obj << /D [1888 0 R /XYZ 95.641 507.597 null] >> endobj 1909 0 obj << /D [1888 0 R /XYZ 95.641 507.597 null] >> endobj 1910 0 obj << /D [1888 0 R /XYZ 151.771 496.638 null] >> endobj 318 0 obj << /D [1888 0 R /XYZ 204.423 496.638 null] >> endobj 1911 0 obj << /D [1888 0 R /XYZ 95.641 489.594 null] >> endobj 1912 0 obj << /D [1888 0 R /XYZ 95.641 484.613 null] >> endobj 1913 0 obj << /D [1888 0 R /XYZ 289.2 475.716 null] >> endobj 1914 0 obj << /D [1888 0 R /XYZ 95.641 441.345 null] >> endobj 1915 0 obj << /D [1888 0 R /XYZ 95.641 441.345 null] >> endobj 1916 0 obj << /D [1888 0 R /XYZ 149.001 430.386 null] >> endobj 322 0 obj << /D [1888 0 R /XYZ 248.019 430.386 null] >> endobj 1917 0 obj << /D [1888 0 R /XYZ 95.641 423.188 null] >> endobj 1918 0 obj << /D [1888 0 R /XYZ 95.641 418.207 null] >> endobj 1919 0 obj << /D [1888 0 R /XYZ 365.373 409.465 null] >> endobj 1920 0 obj << /D [1888 0 R /XYZ 388.008 387.547 null] >> endobj 1921 0 obj << /D [1888 0 R /XYZ 95.641 342.217 null] >> endobj 1922 0 obj << /D [1888 0 R /XYZ 95.641 342.217 null] >> endobj 1923 0 obj << /D [1888 0 R /XYZ 151.771 331.258 null] >> endobj 326 0 obj << /D [1888 0 R /XYZ 241.334 331.258 null] >> endobj 1924 0 obj << /D [1888 0 R /XYZ 95.641 324.214 null] >> endobj 1925 0 obj << /D [1888 0 R /XYZ 95.641 319.233 null] >> endobj 1926 0 obj << /D [1888 0 R /XYZ 95.641 286.924 null] >> endobj 1927 0 obj << /D [1888 0 R /XYZ 95.641 286.924 null] >> endobj 1928 0 obj << /D [1888 0 R /XYZ 152.319 275.965 null] >> endobj 330 0 obj << /D [1888 0 R /XYZ 254.624 275.965 null] >> endobj 1929 0 obj << /D [1888 0 R /XYZ 95.641 268.922 null] >> endobj 1930 0 obj << /D [1888 0 R /XYZ 95.641 263.94 null] >> endobj 1931 0 obj << /D [1888 0 R /XYZ 223.78 255.044 null] >> endobj 1017 0 obj << /D [1888 0 R /XYZ 95.641 197.26 null] >> endobj 334 0 obj << /D [1888 0 R /XYZ 288.191 164.075 null] >> endobj 1932 0 obj << /D [1888 0 R /XYZ 95.641 157.897 null] >> endobj 1933 0 obj << /D [1888 0 R /XYZ 95.641 101.44 null] >> endobj 1887 0 obj << /Font << /F41 999 0 R /F27 911 0 R /F35 919 0 R /F40 935 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1936 0 obj << /Length 1411 /Filter /FlateDecode >> stream xÚÅXmÛ6 þ~¿"ßê ‹kÉoñ¾ mw×õÐî†.k1¬C¡8Jb4‘R¿4¸?R¤c;¹æÒaÃZ´¢hŠ|øˆ”t'Fü£,ö“HŒR™ù2‰Gùö*­àËË+Á¡áS: ýxš¢ÁóÙÕÓX“ùYŽfKg7[üé½X«]­ËñDÆ'|¯tY=!ù2ÚŒÿšÝ^]ÏDû"‰F“C„c“0 üF)ýLDˆ`4IÄV•e¡?Œ'I(hxÖ¬šªfU–ã‰ð¾§éKûE—Æ–M_Ueüí½'á[~zH‡©~?MF“ÌŸ"!_›À3cIïŠ/…2$¿¿ž½A wo¯ÙíÜ? ‹Xõl£ªO¼øC!ü'\ÄÉIÈþÁ/þCÖ.@Ð÷½TõZ—œÏlm·Š¹š•ÂÅ$Ä<¾zÕ!OÈO€ÏmiصLh¼Ëk;Ç2">dìøó¯­YXs¼í kŒÎë"oê¯0¶/–šßÚv_Þ(¨V&·˜Uþ©K$½(Îã¶1úÄtWü;I ‹=¦áFÏËF•÷mlL"ÊÎFº,þÙBÿZa\Ï0~¯0ÞTüô;¶ÅÿTð¿n´ªxëòµµ­ÜV‰ÝéRá⺰¸ç©dÀ»§ô´ëÕØ§}çàK ýõ¢à©¶;Àme!F$¡>¶l÷¼´û@miÜZìH ; (²˜Ó‡ßòÒn6̯­ki·4_ؽ9͵>Æ‹#ƒÉÕ§!È2$ð߃pÖTù`|c~&‚I„ !ç¸,‘ÁÀû‘}Þ!YLœ6 €}-r]=pÚAB'!ñN¤|…÷–sä%Dá3{}«ë¦4G»‰»¤ Óƒèjþ¸rþË’ §áëÂhnàÉ„yÏoÔ¶Øàb>Uúì@òZ›®m¿kÓ[­6­C̪m‰§72í? r|™%mwÈtÊÍ’ÛX–ˆÁ4ð|rÆ#’ŒáÀ(·Ùº€øåv»…{&];uäÝÛ†Tš‚;Ì‚‹ ‚‹|ÿ„=•c1õtnݸ`ý‡ˆ”‰?G:bOÇ'l¶/‹ZWG†¡¨(dšÀúȈYœ¹Å…ÁR’œP4|¹Ñp¨ÊiæQÚ ¿†¤]ã‰}8{Ò %¶ä¥¶ÓµÎKÅXxfiË­ÂãÐ'åûC,ŒÀåÖƒL©Q/„RxK§p].%1€jÆFðZ;!Zð`Ì.àYø‰lSE¾]êm¿ÖtB ´ ež¦IÕàã•ÊÔ¤‚螊c_ 1ȵÙ-T[*3ÞÛ0à¢"%¶þà#Ø«9\A>égk^}X6®²A—¯•YéM¬9|^’†68ÄË«Úkت’¦÷ºòO›qÒ6Qùa*Úûïy9–põaºÎ§æ<4éc )ÚŸ,ý0àÇg÷(yNõ°¯1®rÚWX0ßx¡ 58'jÞæ€Öã{ôÈÛD‚N[öÛÙZ>Îݨø©ú6Êdò©òg œuzKÊö1…ò t`Î¥Ó_Úñ*šÛåÀ„=Gs<šíTÕÙõ9›Rïì¹È Íã-GIn'Žž€wÜzâ¸õDGÈ;¢ÁqÓaÛ‰Ó¶Ýs'ޏoâ@´Ä1Ç P<s—ý3î(O~ª"Gð0qâËlð–hv¾0ó»Ÿî.Ž,‹¼ Ý4—íY?~ÿ7&“(õ§`3IâÌ僿3‰‚©%x=žû• }£‰¤U­Ë¿”¸¶Ÿendstream endobj 1935 0 obj << /Type /Page /Contents 1936 0 R /Resources 1934 0 R /MediaBox [0 0 609.714 789.041] /Parent 1886 0 R >> endobj 1937 0 obj << /D [1935 0 R /XYZ 95.641 729.265 null] >> endobj 1938 0 obj << /D [1935 0 R /XYZ 95.641 522.64 null] >> endobj 1939 0 obj << /D [1935 0 R /XYZ 95.641 522.64 null] >> endobj 1940 0 obj << /D [1935 0 R /XYZ 95.641 505.206 null] >> endobj 1941 0 obj << /D [1935 0 R /XYZ 95.641 505.206 null] >> endobj 1942 0 obj << /D [1935 0 R /XYZ 151.771 494.247 null] >> endobj 338 0 obj << /D [1935 0 R /XYZ 222.235 494.247 null] >> endobj 1943 0 obj << /D [1935 0 R /XYZ 95.641 487.203 null] >> endobj 1944 0 obj << /D [1935 0 R /XYZ 95.641 482.222 null] >> endobj 1945 0 obj << /D [1935 0 R /XYZ 389.791 473.325 null] >> endobj 1946 0 obj << /D [1935 0 R /XYZ 266.977 451.407 null] >> endobj 1947 0 obj << /D [1935 0 R /XYZ 95.641 417.036 null] >> endobj 1948 0 obj << /D [1935 0 R /XYZ 95.641 417.036 null] >> endobj 1949 0 obj << /D [1935 0 R /XYZ 149.549 406.077 null] >> endobj 342 0 obj << /D [1935 0 R /XYZ 218.39 406.077 null] >> endobj 1950 0 obj << /D [1935 0 R /XYZ 95.641 399.034 null] >> endobj 1951 0 obj << /D [1935 0 R /XYZ 95.641 394.052 null] >> endobj 1952 0 obj << /D [1935 0 R /XYZ 95.641 361.744 null] >> endobj 1953 0 obj << /D [1935 0 R /XYZ 95.641 361.744 null] >> endobj 1954 0 obj << /D [1935 0 R /XYZ 152.319 350.785 null] >> endobj 346 0 obj << /D [1935 0 R /XYZ 239.421 350.785 null] >> endobj 1955 0 obj << /D [1935 0 R /XYZ 95.641 345.679 null] >> endobj 1956 0 obj << /D [1935 0 R /XYZ 95.641 340.698 null] >> endobj 1957 0 obj << /D [1935 0 R /XYZ 95.641 295.492 null] >> endobj 1958 0 obj << /D [1935 0 R /XYZ 95.641 295.492 null] >> endobj 1959 0 obj << /D [1935 0 R /XYZ 149.549 284.533 null] >> endobj 350 0 obj << /D [1935 0 R /XYZ 235.964 284.533 null] >> endobj 1960 0 obj << /D [1935 0 R /XYZ 95.641 279.427 null] >> endobj 1961 0 obj << /D [1935 0 R /XYZ 95.641 274.446 null] >> endobj 1962 0 obj << /D [1935 0 R /XYZ 95.641 229.24 null] >> endobj 1963 0 obj << /D [1935 0 R /XYZ 95.641 229.24 null] >> endobj 1964 0 obj << /D [1935 0 R /XYZ 155.088 218.282 null] >> endobj 354 0 obj << /D [1935 0 R /XYZ 247.59 218.282 null] >> endobj 1965 0 obj << /D [1935 0 R /XYZ 95.641 213.176 null] >> endobj 1966 0 obj << /D [1935 0 R /XYZ 95.641 208.194 null] >> endobj 1967 0 obj << /D [1935 0 R /XYZ 95.641 162.989 null] >> endobj 1968 0 obj << /D [1935 0 R /XYZ 95.641 162.989 null] >> endobj 1969 0 obj << /D [1935 0 R /XYZ 152.867 152.03 null] >> endobj 358 0 obj << /D [1935 0 R /XYZ 216.328 152.03 null] >> endobj 1970 0 obj << /D [1935 0 R /XYZ 95.641 144.986 null] >> endobj 1971 0 obj << /D [1935 0 R /XYZ 95.641 140.005 null] >> endobj 1972 0 obj << /D [1935 0 R /XYZ 95.641 107.696 null] >> endobj 1973 0 obj << /D [1935 0 R /XYZ 95.641 107.696 null] >> endobj 1974 0 obj << /D [1935 0 R /XYZ 152.867 96.737 null] >> endobj 362 0 obj << /D [1935 0 R /XYZ 230.016 96.737 null] >> endobj 1975 0 obj << /D [1935 0 R /XYZ 95.641 89.694 null] >> endobj 1976 0 obj << /D [1935 0 R /XYZ 95.641 84.712 null] >> endobj 1934 0 obj << /Font << /F41 999 0 R /F40 935 0 R /F27 911 0 R /F35 919 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1979 0 obj << /Length 815 /Filter /FlateDecode >> stream xÚµVQo›0~ï¯@ÚÃ@Z\p€×n뤩U¥•impO€³@šõßïì34$«Š*UUäóqÜ÷Ýw>æQøc^ÆÉ¤ŽYJâˆy³á|%”Ìa C’±x &§$î)§ €KRÿ¶Ø!õuUá~¡»N×hï6Äð8¿ŒøsVȆÂÊlº<`©óåƒg}t“(a=8›^ê€qß¼F!|j~/²XOàèÌü^CŸªÀ[šð!ò èUÀ¨¿ª$ú ³[«ªltû^â³Yö¬À `‹m‰N‘y&¿ãưWÁ °äéIì¹tzâ<Ø„©¿‚\,ã~0íì>¯±—൪žp«tü€ºh?D3Æ|G$¦^ DæH$"1 ݈_©¥¼RlOsJ"ž¸¸B×  ±ß °{ž%2„$Pb‘„g %Ô «yßV* m×ÒD ¢hJ46•(¤s>éªÁÕ‚£-0‹t$ÔYªrbœvnð½éØ;´1‚Î_kHkèÓoË&„8oá¦ÔüdÌÄWKt …nî) ·5n-¨7r+:¥›OÿéIš’4É&õ„§}\)+ÙÙF8Ñç¨+QFây:ªni‹2Ñ1urÅDXˆÖ”hü¶MÆ7ó]Œ=pæ©Ã°NÕ¢o¥M“FIŸ{`Ü'=0Î[Ù'‡—N{ÑÊÂè‡ÿÿúµvC¤š™6ÎÝ…ºW^ÃØž£vÓîÛ½Ø ”ÞfŒa5Q¶52Æ¡|Æ.U ‡þ`Hm­œd±M~—¯åpà \nZ];«Ö‡þZµ…™‰ªÔ;‡º×ÐA·BUbQɱŠC µlv-y˜¦äTî‡ìvÛf| ÖB9d4*ï¦Ý‰C.ŽÝ“;™9ÜNY4ib2ÚOŒcåê$Ç_O³8!)™ÍyFx8ú~zñK-Œ_ú£‡ïÿâ°ƒÌendstream endobj 1978 0 obj << /Type /Page /Contents 1979 0 R /Resources 1977 0 R /MediaBox [0 0 609.714 789.041] /Parent 1886 0 R >> endobj 1980 0 obj << /D [1978 0 R /XYZ 95.641 729.265 null] >> endobj 1981 0 obj << /D [1978 0 R /XYZ 95.641 716.314 null] >> endobj 1982 0 obj << /D [1978 0 R /XYZ 95.641 716.314 null] >> endobj 1983 0 obj << /D [1978 0 R /XYZ 155.636 706.351 null] >> endobj 366 0 obj << /D [1978 0 R /XYZ 237.359 706.351 null] >> endobj 1984 0 obj << /D [1978 0 R /XYZ 95.641 699.308 null] >> endobj 1985 0 obj << /D [1978 0 R /XYZ 95.641 694.326 null] >> endobj 1986 0 obj << /D [1978 0 R /XYZ 95.641 662.017 null] >> endobj 1987 0 obj << /D [1978 0 R /XYZ 95.641 662.017 null] >> endobj 1988 0 obj << /D [1978 0 R /XYZ 155.636 651.059 null] >> endobj 370 0 obj << /D [1978 0 R /XYZ 251.047 651.059 null] >> endobj 1989 0 obj << /D [1978 0 R /XYZ 95.641 644.015 null] >> endobj 1990 0 obj << /D [1978 0 R /XYZ 95.641 639.034 null] >> endobj 1991 0 obj << /D [1978 0 R /XYZ 95.641 606.725 null] >> endobj 1992 0 obj << /D [1978 0 R /XYZ 95.641 606.725 null] >> endobj 1993 0 obj << /D [1978 0 R /XYZ 152.867 595.766 null] >> endobj 374 0 obj << /D [1978 0 R /XYZ 222.415 595.766 null] >> endobj 1994 0 obj << /D [1978 0 R /XYZ 95.641 588.722 null] >> endobj 1995 0 obj << /D [1978 0 R /XYZ 95.641 583.741 null] >> endobj 1996 0 obj << /D [1978 0 R /XYZ 95.641 551.432 null] >> endobj 1997 0 obj << /D [1978 0 R /XYZ 95.641 551.432 null] >> endobj 1998 0 obj << /D [1978 0 R /XYZ 152.867 540.473 null] >> endobj 378 0 obj << /D [1978 0 R /XYZ 236.104 540.473 null] >> endobj 1999 0 obj << /D [1978 0 R /XYZ 95.641 533.43 null] >> endobj 2000 0 obj << /D [1978 0 R /XYZ 95.641 528.448 null] >> endobj 2001 0 obj << /D [1978 0 R /XYZ 95.641 496.139 null] >> endobj 2002 0 obj << /D [1978 0 R /XYZ 95.641 496.139 null] >> endobj 2003 0 obj << /D [1978 0 R /XYZ 151.771 485.181 null] >> endobj 382 0 obj << /D [1978 0 R /XYZ 229.937 485.181 null] >> endobj 2004 0 obj << /D [1978 0 R /XYZ 95.641 477.983 null] >> endobj 2005 0 obj << /D [1978 0 R /XYZ 95.641 473.001 null] >> endobj 2006 0 obj << /D [1978 0 R /XYZ 95.641 440.847 null] >> endobj 2007 0 obj << /D [1978 0 R /XYZ 95.641 440.847 null] >> endobj 2008 0 obj << /D [1978 0 R /XYZ 167.262 429.888 null] >> endobj 386 0 obj << /D [1978 0 R /XYZ 243.765 429.888 null] >> endobj 2009 0 obj << /D [1978 0 R /XYZ 95.641 422.844 null] >> endobj 2010 0 obj << /D [1978 0 R /XYZ 95.641 417.863 null] >> endobj 2011 0 obj << /D [1978 0 R /XYZ 95.641 385.554 null] >> endobj 2012 0 obj << /D [1978 0 R /XYZ 95.641 385.554 null] >> endobj 2013 0 obj << /D [1978 0 R /XYZ 149.001 374.595 null] >> endobj 390 0 obj << /D [1978 0 R /XYZ 248.019 374.595 null] >> endobj 2014 0 obj << /D [1978 0 R /XYZ 95.641 367.397 null] >> endobj 2015 0 obj << /D [1978 0 R /XYZ 95.641 362.416 null] >> endobj 2016 0 obj << /D [1978 0 R /XYZ 356.789 353.674 null] >> endobj 2017 0 obj << /D [1978 0 R /XYZ 352.266 331.756 null] >> endobj 2018 0 obj << /D [1978 0 R /XYZ 95.641 286.426 null] >> endobj 2019 0 obj << /D [1978 0 R /XYZ 95.641 286.426 null] >> endobj 2020 0 obj << /D [1978 0 R /XYZ 151.771 275.467 null] >> endobj 394 0 obj << /D [1978 0 R /XYZ 241.334 275.467 null] >> endobj 2021 0 obj << /D [1978 0 R /XYZ 95.641 268.423 null] >> endobj 2022 0 obj << /D [1978 0 R /XYZ 95.641 263.442 null] >> endobj 2023 0 obj << /D [1978 0 R /XYZ 95.641 246.755 null] >> endobj 2024 0 obj << /D [1978 0 R /XYZ 95.641 215.193 null] >> endobj 2025 0 obj << /D [1978 0 R /XYZ 95.641 215.193 null] >> endobj 2026 0 obj << /D [1978 0 R /XYZ 152.319 204.234 null] >> endobj 398 0 obj << /D [1978 0 R /XYZ 254.624 204.234 null] >> endobj 2027 0 obj << /D [1978 0 R /XYZ 95.641 197.191 null] >> endobj 2028 0 obj << /D [1978 0 R /XYZ 95.641 192.209 null] >> endobj 2029 0 obj << /D [1978 0 R /XYZ 223.78 183.313 null] >> endobj 1018 0 obj << /D [1978 0 R /XYZ 95.641 125.529 null] >> endobj 1977 0 obj << /Font << /F41 999 0 R /F27 911 0 R /F35 919 0 R /F40 935 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2032 0 obj << /Length 1428 /Filter /FlateDecode >> stream xÚµXÛrÛ6}÷Wè­ÔŒI ÁKûdÇr.µc̦ÓI=H¢DNDB!©¦Ê×w,/"%ÙÉ4ÎL‹ƒ³{ÀRddÃ?2 ™å¹däÓТͳ3{´‚‘×g-âÀ?r,øÒà*:»¸9¡zÎ(Z*»hñÑx•ðMc“2Û –~þQÆEù‹nßñ|Ë×ã§èÝÙ$j 6³ˆçŽÌf…>Ó%å:Ð Ô ‰Û° þˆPËf¬Kãarýöõt25ýÀ¸šŽ©mÜaù?ñÝÝýõD²¸¸qXë†ë[…5ˆg…§ ¢$–3c/Ò11VŘFŒ/gª'¾–Ø/çõ01rýj‘–›5ß•ºÇåƒK±U†æ*Îã‚W©ÈÛUV0yo•¥(t£Òd¨1ßÚ"¯êyOúA0‰m…,T”"—BP†¾@£ÝØð<^˦k$b½(q¸¶Slʹ~ÅóEÏh&ªJd5žt\C²ƒYœouK,ñž®ç³u¬³f.² .1¡nfXü/Ï6°â:þU‹éÚ£Äô¤˜¡gŽˆ!ˆªÅ|'ˆ³gC"L¢»ûéDw>Ÿ1“n06‰ñ¤_þm3Û¡ð?QÔL‡ZÔG& Éd´kž§ÒUiý#ð+ˆFw ‰Ø.X& %\Ò,1\á2Ï9â_¾Güû(jYûgË%h—µÓ²ö\‹±àë[QÄù71 pØ:Ûér à!n”ˆŒ—Ú8š^>þŽ,¡ãu@TŒÉ©¸¾áàv2D‚ðI©»´¼!|Ü–¸‡ûi4™¶ñsÍ'í¯bÖQ»Nž#þ¼ü| jE xDÏõ;4)kà‡è<ÛÖª\ßGµC³ƒÁìg£w)ð»H¾rOîM¼I¾¥³#‘ó\9Ô`Î=z*õîx±ÓÆØC†•ò*u»qcቬ{Ï«¤Þz—&ÓÖ_7@4ÚM?FìSÑ»Ý-R~.°½nø$®ÏN„ï:N> endobj 2033 0 obj << /D [2031 0 R /XYZ 95.641 729.265 null] >> endobj 402 0 obj << /D [2031 0 R /XYZ 254.208 706.351 null] >> endobj 2034 0 obj << /D [2031 0 R /XYZ 95.641 700.173 null] >> endobj 2035 0 obj << /D [2031 0 R /XYZ 95.641 654.675 null] >> endobj 2036 0 obj << /D [2031 0 R /XYZ 95.641 414.595 null] >> endobj 2037 0 obj << /D [2031 0 R /XYZ 95.641 414.595 null] >> endobj 2038 0 obj << /D [2031 0 R /XYZ 95.641 397.161 null] >> endobj 2039 0 obj << /D [2031 0 R /XYZ 95.641 397.161 null] >> endobj 2040 0 obj << /D [2031 0 R /XYZ 151.771 386.202 null] >> endobj 406 0 obj << /D [2031 0 R /XYZ 226.908 386.202 null] >> endobj 2041 0 obj << /D [2031 0 R /XYZ 95.641 379.158 null] >> endobj 2042 0 obj << /D [2031 0 R /XYZ 95.641 374.177 null] >> endobj 2043 0 obj << /D [2031 0 R /XYZ 95.641 341.868 null] >> endobj 2044 0 obj << /D [2031 0 R /XYZ 95.641 341.868 null] >> endobj 2045 0 obj << /D [2031 0 R /XYZ 149.001 330.909 null] >> endobj 410 0 obj << /D [2031 0 R /XYZ 235.416 330.909 null] >> endobj 2046 0 obj << /D [2031 0 R /XYZ 95.641 323.866 null] >> endobj 2047 0 obj << /D [2031 0 R /XYZ 95.641 318.884 null] >> endobj 2048 0 obj << /D [2031 0 R /XYZ 95.641 286.575 null] >> endobj 2049 0 obj << /D [2031 0 R /XYZ 95.641 286.575 null] >> endobj 2050 0 obj << /D [2031 0 R /XYZ 149.549 275.617 null] >> endobj 414 0 obj << /D [2031 0 R /XYZ 229.976 275.617 null] >> endobj 2051 0 obj << /D [2031 0 R /XYZ 95.641 270.511 null] >> endobj 2052 0 obj << /D [2031 0 R /XYZ 95.641 265.529 null] >> endobj 2053 0 obj << /D [2031 0 R /XYZ 95.641 220.324 null] >> endobj 2054 0 obj << /D [2031 0 R /XYZ 95.641 220.324 null] >> endobj 2055 0 obj << /D [2031 0 R /XYZ 155.088 209.365 null] >> endobj 418 0 obj << /D [2031 0 R /XYZ 241.603 209.365 null] >> endobj 2056 0 obj << /D [2031 0 R /XYZ 95.641 204.259 null] >> endobj 2057 0 obj << /D [2031 0 R /XYZ 95.641 199.278 null] >> endobj 2058 0 obj << /D [2031 0 R /XYZ 95.641 154.072 null] >> endobj 2059 0 obj << /D [2031 0 R /XYZ 95.641 154.072 null] >> endobj 2060 0 obj << /D [2031 0 R /XYZ 151.771 143.113 null] >> endobj 422 0 obj << /D [2031 0 R /XYZ 248.308 143.113 null] >> endobj 2061 0 obj << /D [2031 0 R /XYZ 95.641 136.07 null] >> endobj 2062 0 obj << /D [2031 0 R /XYZ 95.641 131.089 null] >> endobj 2063 0 obj << /D [2031 0 R /XYZ 443.971 111.233 null] >> endobj 2030 0 obj << /Font << /F41 999 0 R /F27 911 0 R /F35 919 0 R /F40 935 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2066 0 obj << /Length 1747 /Filter /FlateDecode >> stream xÚXK“Û6 ¾ï¯ð-òÌZõVsè4™¤i'Éa³™Ú¸e³‘%G’×ã_ÌRîu…+çuê9ÏAÓ·lÀýÑcÀ‡ RxfºÐÝ¡’ç7F”E™ÈIWSê‰&Ž:m”ýs<%ÅÓœªjê-zÑ<"QÇc‡ñiŽä„{Ë#r¥Õï2 ¯ Ö&!BeÓÉNÅ)ÝçtcÈ3±xtý0œCôŸéµB¸™Íîßà\AïÓÌÁæPtºp^ˆ¯‡çñ…бéþGÞ1ç=‘8²nèiÓf\h ¯Ò]o8%ÃãëÞ0C—,JσS-™ÙAf¬Ôò ôÙ_ã D~/uÝ!#vtÍ œcƒøiŽ…¥ñ‘àŒL ¬‰ÈMö˜!Y«¬™6 g8âÊS‚>ت§Xžùvf³÷`½³†3%ë‚ Þd¬[¸÷°™H©ú8^[ø®Etï8q“0^m202f‡}ÿËÝ»|½Ïï¿|[Þ,LÜ€¿±›¥1mÂDx@仦¡×ôWÅÙ&ßñ¼½|vµäëîyƘóc<²ÐøK9bú/+Ÿ!ÜÍ›"¿›;Ýh"%%?Ü4›'%´ã§¥¡'…P£ÐÇæ´ÞĞ眚#ö:H’S¨ôwÅÆ*ö„SêÚIZ•7mñ3Yg'7Å‹€òG–¹SZ™cu§{&w€ú¦=³â¿¼ÈþTg,aب3_êÌM©¼¨4xÎ’e>±L"5Fg].ëå¦ÖFôè%Ì÷`T<žíA <Œã2Òã±É“»§‡1Øîù-%[˜ô'LÐ!äÒ^í;æqQGªP…aAšòhHÀny k®É¼×º‡¢&° Dh;zú¨`ÌIæ Ó¿Íó”ð€§$>— m#‚4›’s~-Œ ½Ü@Xïß>á.^=Álã äá€ï‚èNñvrÑât<¯¨„Ь7'ÊòÐi<4˜çoyʵ"°µ"$Ç`!xÕžŒÀùçØ^ÞÔ=ç˜H^…«˜Á-SŠÍó@žEòW£ÑQ5ð0 b”ðÀJ>&D­±™"_ÁÄ Ôà+Ø7ú ¨@Që0îÁ}àÅ\r °Ø5@f–öòû¤*8Áî¯bÖ,Çc¿Ó†Ó©ŽJLcVNºß]H³pp¦Ï§Yøš …M³·¬’ºŸ“æêPhù¤Ê˜jÊI7J!Ì¿_¤ý’è‡Â)ûÅÇŒií#ÊWp%NYÓO‘il­G#7 ¹ä©Jåümé§ CMýɆwÇ  É!/â„[ð ¡’­.Ș;õÐ'8¦öDÓ· Æ’GÝÍpf@'bZ&"ó™¢'fpiÜ>öü3<ZKßì&AYU͉í…r⮆Çy5òÇCÇ> endobj 2067 0 obj << /D [2065 0 R /XYZ 95.641 729.265 null] >> endobj 2068 0 obj << /D [2065 0 R /XYZ 95.641 716.314 null] >> endobj 2069 0 obj << /D [2065 0 R /XYZ 95.641 716.314 null] >> endobj 2070 0 obj << /D [2065 0 R /XYZ 151.771 706.351 null] >> endobj 426 0 obj << /D [2065 0 R /XYZ 243.775 706.351 null] >> endobj 2071 0 obj << /D [2065 0 R /XYZ 95.641 701.245 null] >> endobj 2072 0 obj << /D [2065 0 R /XYZ 95.641 696.264 null] >> endobj 2073 0 obj << /D [2065 0 R /XYZ 412.123 674.471 null] >> endobj 2074 0 obj << /D [2065 0 R /XYZ 95.641 640.1 null] >> endobj 2075 0 obj << /D [2065 0 R /XYZ 95.641 640.1 null] >> endobj 2076 0 obj << /D [2065 0 R /XYZ 152.319 629.141 null] >> endobj 430 0 obj << /D [2065 0 R /XYZ 233.513 629.141 null] >> endobj 2077 0 obj << /D [2065 0 R /XYZ 95.641 621.943 null] >> endobj 2078 0 obj << /D [2065 0 R /XYZ 95.641 616.961 null] >> endobj 2079 0 obj << /D [2065 0 R /XYZ 424.048 597.26 null] >> endobj 2080 0 obj << /D [2065 0 R /XYZ 95.641 562.889 null] >> endobj 2081 0 obj << /D [2065 0 R /XYZ 95.641 562.889 null] >> endobj 2082 0 obj << /D [2065 0 R /XYZ 152.319 551.93 null] >> endobj 434 0 obj << /D [2065 0 R /XYZ 244.273 551.93 null] >> endobj 2083 0 obj << /D [2065 0 R /XYZ 95.641 544.887 null] >> endobj 2084 0 obj << /D [2065 0 R /XYZ 95.641 539.905 null] >> endobj 2085 0 obj << /D [2065 0 R /XYZ 95.641 485.679 null] >> endobj 2086 0 obj << /D [2065 0 R /XYZ 95.641 485.679 null] >> endobj 2087 0 obj << /D [2065 0 R /XYZ 152.319 474.72 null] >> endobj 438 0 obj << /D [2065 0 R /XYZ 254.624 474.72 null] >> endobj 2088 0 obj << /D [2065 0 R /XYZ 95.641 467.676 null] >> endobj 2089 0 obj << /D [2065 0 R /XYZ 95.641 462.695 null] >> endobj 1019 0 obj << /D [2065 0 R /XYZ 95.641 396.015 null] >> endobj 442 0 obj << /D [2065 0 R /XYZ 185.377 362.829 null] >> endobj 2090 0 obj << /D [2065 0 R /XYZ 95.641 356.651 null] >> endobj 2091 0 obj << /D [2065 0 R /XYZ 377.888 345.843 null] >> endobj 2092 0 obj << /D [2065 0 R /XYZ 95.641 324.707 null] >> endobj 2093 0 obj << /D [2065 0 R /XYZ 353.91 210.849 null] >> endobj 2094 0 obj << /D [2065 0 R /XYZ 95.641 192.1 null] >> endobj 2095 0 obj << /D [2065 0 R /XYZ 95.641 154.242 null] >> endobj 2096 0 obj << /D [2065 0 R /XYZ 374.413 146.092 null] >> endobj 2097 0 obj << /D [2065 0 R /XYZ 95.641 124.956 null] >> endobj 2064 0 obj << /Font << /F41 999 0 R /F27 911 0 R /F35 919 0 R /F40 935 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2100 0 obj << /Length 2074 /Filter /FlateDecode >> stream xÚYY“Ó8~çW^’¡ãÛ/[° [P»0Slql¡ØJâ">ˆí ïßnuK±g˜Ú¢ÀRGG_j gbÃg² ¬Ðw&‘»´Ü0˜$ù={²_þ¼çðÏñà§hâYAဧ—÷=‡9Kkz“˵w™~šý¾U#÷ 7°gŽEß«Zîë)µ_‹¢»‹/—/ï=»48v`9¡?Y˜†*,¼È¶Bøº®µt|£„œ*q¹• Ï gŸmÛÝ× v‚Ys(Iš52¯IV$j¶YM­\-ý&v»ò@›²åq%ýVK±¿pâY²%9ŒåMôÖož¼~F-5P&å…CÍ”wÊÌÞݺ/ÛZKeCÒîibê»Î,X‰ZZÔ}±¦/©d[–µ¤öóVé­Bä,«Q ¦ ü{¥:eáKI².÷<ŽWè3D³ÑÂ_`¬£™(Rl(  ˜±'1„+Äp…DÒᘽÊÖòUVÈšÆuÃÀÚQÈãŽJÀPµ‹RwQA@‰ 6²"Í®³§FPP𶤚'_‹]K‘Y8Žkŀˮ™¹hHOïˆ ð Ùº­ª]&aÍÔ"‰Š|)Ð0Që.ò†‚†¶íÅ&'àzÂù`C¦B ­UF±Ò²UàFîB|S¿Uì °CD‚£At"ß mÿNQŒÂ˜Ç‘ÖcÛ¯)OTû°…T­+‘Hê§r—å9 Àò"·’ŒŒ–9t Ý ¼ 6cvaXØö,lˆ‹h¨¥b®…’GA‡"kKˆ¸rM´†HP ϶\/Rê¾GÓ]{–\8ö —âÙ_ž=£G|ˆ± -ß‹4´<«`C£Ehp‡¾‰³PJ‡—ÃI™çèš~Íj’¶õpm=ˆÄFdkoa$žcÌ zn—Ë\ÏaC@¾.‘s³bCÝd+ö"»jêoŵ¤u%“L…Ĺ…™s@”ªV«r9¥NÆBAÚc­¤[8•ü ²É®x­óã*Š0l´C%üåQ=c*@ÒuÕ*a?tú«ü””Ô+ù”ÌmËéLŽÌŸè‰åz ÆøÖÁêêéÅÂYböòà²hhcÆûGú|¶ûßð¯Ã™Á»Õà¸,Ïv‚lXáéÃé\ƒ_Íïh_ܳ¯k8ÌC3¼ÀŠTºˆ95X{°¤ÕÛ"ü9§ÖÔ:Z§ý–”í¾fsªÄ%eWbµÓ›ˆbÊ™ÞÜTrhk9†é¶È~(*V2&‘ðI¬¾À|Pû„ý+›~X{Æ?À5»²Ö\¦‰«þÞŠ®'W0ç›lÆaȉázÆ»C§î²Ú0èJ6<¹d1XRoËn~±üžŠš)rº˜ÑÚÙÆÕj¬þÉÀm*SF\¦¸­¹•å¹âÙL4Røc PYI¦‡£ö¬à§é9+ H8ïT·þ"_n±‚Ù±’Ãù ÃôÀŠ#™š˜°™œ×ßÛ²á±Ó¯ íÔº„‹Ÿ€B'”$´¦ìÀ|ê™2ÄÀ^½³˜Xâ§vê;e45à7ˆesVdz-óééA~9ê›Ë3ÉuÄë9çÜ#—¶ÿ?P±ƒ¿УøxK+¦âñªª”v±ÏŒ È-K„BqŒ ÕVÀ‹w…„D½Ó0‡=Ε²”ê+É C¿h²DìæÜ·¤ÅMbeÜGk1}‚qŸŽXkÊzXYèÕWŒè£@Õ(eMÛPÅ+„‡¬ÅÛÙŠ"ÙPÌ ÊJ)ÏRI_¾CÄýwZ,«€é ‹Ú2åÕÁKŸÊ`¼7OŸ“R˜Ž:í;áî•—º¶<™üó˜]½ÊŒFIaŠ)Që㙨³3F#>ïéï(žå5мÚɹQ†Ñ=.z´»¹ýrûøô.û”]Â2XÚ<Ÿ®²áq¨Y!Änó/ËmAƒ½Ï!ÇÞ\> endobj 2101 0 obj << /D [2099 0 R /XYZ 95.641 729.265 null] >> endobj 2102 0 obj << /D [2099 0 R /XYZ 205.373 684.433 null] >> endobj 2103 0 obj << /D [2099 0 R /XYZ 318.066 662.516 null] >> endobj 1020 0 obj << /D [2099 0 R /XYZ 95.641 648.747 null] >> endobj 446 0 obj << /D [2099 0 R /XYZ 226.245 621.32 null] >> endobj 2104 0 obj << /D [2099 0 R /XYZ 95.641 615.704 null] >> endobj 2105 0 obj << /D [2099 0 R /XYZ 143.462 582.964 null] >> endobj 2106 0 obj << /D [2099 0 R /XYZ 95.641 567.522 null] >> endobj 2107 0 obj << /D [2099 0 R /XYZ 95.641 567.522 null] >> endobj 2108 0 obj << /D [2099 0 R /XYZ 95.641 298.492 null] >> endobj 2109 0 obj << /D [2099 0 R /XYZ 95.641 257.824 null] >> endobj 2110 0 obj << /D [2099 0 R /XYZ 95.641 241.884 null] >> endobj 2111 0 obj << /D [2099 0 R /XYZ 95.641 220.962 null] >> endobj 2112 0 obj << /D [2099 0 R /XYZ 181.121 213.909 null] >> endobj 2113 0 obj << /D [2099 0 R /XYZ 95.641 158.297 null] >> endobj 2114 0 obj << /D [2099 0 R /XYZ 95.641 118.726 null] >> endobj 2115 0 obj << /D [2099 0 R /XYZ 95.641 84.38 null] >> endobj 2098 0 obj << /Font << /F41 999 0 R /F35 919 0 R /F40 935 0 R /F27 911 0 R /F26 909 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2119 0 obj << /Length 1865 /Filter /FlateDecode >> stream xÚÍXÝ“ã4 ¿¿¢o¤Ì6ç;ðÀ,»=8æn÷Ø-0 ðà&îÅ&%v·ô¿G²ì4ýØ›=ž˜>D–eK¶¤Ÿä²I?6)?Ù$ ?L“I¹~L>ÂÌw¯˜•&‘ŸäN}»xõú H~‘F“ÅÊH,ªß¼›šo´è§³0 <æÓ÷'%zõÑïy»åÍôůæ‹aë˜å~±ÉlÐpª|eŸÂ7 ý‚Å#‚IF¤c#ÔZêUÀxVø9šHì/Ϲvõî—u‹Ì×o¢d|ÈYøEÈŒÈN6 ‰;bÍuY©k©ˆº»~?*.¼~ÊrO”ùV>)³ ý IPÃ,ÎüöŸÅ¹ÏÈ’ëÛ[XåÞý‡ùÃõ´¼ÅÛû»sãÜJ–úEžš¥oWÓY†Þ¾Û"Á¼²î:%ˆ©kKðª"¢ÛL™'z®e×ge,íÖ'+Ö Ç¥•Y‹v{EæŒ}ƱŸ%…õÈ;¹ïd+Ô¹Ý óÓ0¶r•T›†ïÕ‘BfLDÍÂ"õ£<‚S‚`w\ƒ|un8‹?CºŠ_j®§³4¼ª£¯¹$v¼µSÚNq¸æUß )KÇ¡±!¡ÓxOHÏÜºŠˆVìˆØ€îås2c ×|ÉÁ'g¸"7|-›ý‘š²\Ûõ+œF V¤Çð²V¬zôR]kÅ!ôHÿ΢6ÝV‘[ŽÕ—4S˦º|Hn­9HhsT;kO,þ‘JËöãÈÜý…Ô¤éGcÍ'Õ©A„üõYºþ¦é·Riê…Þö—ýļM/ž$h&6†Üy$Ïl¨D)è ®E-ÐØ0+޲Kk×õ…É„9Îi¨tÏåÇZ¯º~Ç! ¯²+ø~Êóü šÆÉ‹Ž.á¸úËcòm0gFN+J¡ï÷6÷R¸Ã¨8ʽ¿·B™]Á’(O ¡Qâ5B+bѾÀ*y[ŠÆÊiâñvO -×Â'ÞÂè^·]Llžd%*’XîiÆ‚-pŒghkB[çctNgnTgû‰Ë†/AÃÜ‚[öÒx Û)Zç»J˜#ãæÈHX…fЭ´h‰\IWµU 'ßÙ¥ƒc/…ŠBš™3ÜÎßÍóÏ/ ÙPp¥õy6†‘ÿ¡B¡AàH;ÜaCUÓÒA|Í]ƒ`åŪ¹‘æáË‚4OΪÂȾ ì3ÆQpæpJ¸›Ï( É縑]É3µáYÔìź{gÀiêÌ)ZC0¿ÆøˆyA€&j$ºø§µ<_ë.hÙ ÍÌ$Ën½Á»ú¿€p”@Jæ (‹Å@™(Æ9üä€ÅËÇpœ8ÆEŸ€ãúéõ?`ïŽak ›.¿€0p­’`1<ñ•(mc„¦¸ãP¿jJœV¹û€cIÝ8Ão¾¿~¸¾YÌh¸x¸¾{|w=ÍbÓÍù ‡] 2Çtk5ngTãPÑW›¦)*#@´Âh ™E¤”ˆR®önÙhÛ¾ÅÅQ‰Ý®°šEBpóWPÃvÐxž?%Ý…y·†ylîêR»\Ji±!ŠŠ K»‚ou·¶‡á“än±¸»ÛåÊÓÝÏ> Éô¯òÊîå4Ó?7@ˆF]J{ì ÌV…ó¦Ö{ï­-Lìu[MU¡~ÛBÖú4^+@Lš äacòÐ u/²£ïG(àÊîGÇ+À ½Í$íä–s«W®R‚/,%Ú'IwÑ®‡ÒˆNmÙl+B5`ÍÈ”cá†zÔ5®Þ¶¶€ïd[$:cŽíjÑ^°ÌÂÃÐm[¹—ÑûÇÙ/SDرyçžW»Z–CfÛlƒÛv8Pupdï =ƒÎöOÿe@3? þg|öÍ0îÏÊ`¼þ_¡9š”endstream endobj 2118 0 obj << /Type /Page /Contents 2119 0 R /Resources 2117 0 R /MediaBox [0 0 609.714 789.041] /Parent 2116 0 R >> endobj 2120 0 obj << /D [2118 0 R /XYZ 95.641 729.265 null] >> endobj 2121 0 obj << /D [2118 0 R /XYZ 95.641 716.314 null] >> endobj 1021 0 obj << /D [2118 0 R /XYZ 95.641 640.682 null] >> endobj 450 0 obj << /D [2118 0 R /XYZ 195.683 607.711 null] >> endobj 2122 0 obj << /D [2118 0 R /XYZ 95.641 601.533 null] >> endobj 2123 0 obj << /D [2118 0 R /XYZ 388.221 590.725 null] >> endobj 2124 0 obj << /D [2118 0 R /XYZ 95.641 569.589 null] >> endobj 2125 0 obj << /D [2118 0 R /XYZ 95.641 484.722 null] >> endobj 2126 0 obj << /D [2118 0 R /XYZ 362.107 473.763 null] >> endobj 1022 0 obj << /D [2118 0 R /XYZ 95.641 444.055 null] >> endobj 454 0 obj << /D [2118 0 R /XYZ 217.129 413.679 null] >> endobj 2127 0 obj << /D [2118 0 R /XYZ 95.641 407.501 null] >> endobj 2128 0 obj << /D [2118 0 R /XYZ 380.144 396.692 null] >> endobj 2129 0 obj << /D [2118 0 R /XYZ 95.641 375.557 null] >> endobj 2130 0 obj << /D [2118 0 R /XYZ 95.641 300.553 null] >> endobj 2131 0 obj << /D [2118 0 R /XYZ 379.121 289.594 null] >> endobj 2132 0 obj << /D [2118 0 R /XYZ 95.641 270.844 null] >> endobj 2133 0 obj << /D [2118 0 R /XYZ 95.641 211.069 null] >> endobj 2134 0 obj << /D [2118 0 R /XYZ 414.471 202.919 null] >> endobj 1023 0 obj << /D [2118 0 R /XYZ 95.641 184.17 null] >> endobj 458 0 obj << /D [2118 0 R /XYZ 238.308 153.793 null] >> endobj 2135 0 obj << /D [2118 0 R /XYZ 95.641 147.615 null] >> endobj 2136 0 obj << /D [2118 0 R /XYZ 95.641 129.016 null] >> endobj 2117 0 obj << /Font << /F41 999 0 R /F40 935 0 R /F35 919 0 R /F27 911 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2139 0 obj << /Length 1726 /Filter /FlateDecode >> stream xÚ­XÝoã6 ï_Ü˹@âZvlÇ{¶ÞW‡Ü2 ÃnJ¬ÄÞÙVfÙÍå¿)RŽÓtm·ú`’¢¨Ÿø%¦bÀŸ˜d±ŸÌÅ$ 3?Lâɺ¾&[Xy!X#,¥“È)*ü¸¼¸z{2?K¢Ércõ–ùïÞu!wj/gax§ï/Fµæ5Ñw²éeuùÇò§‹·ËáľHæ“ÙpÂC³( ü¾aègb>€ˆâsô^݈tîMáÔtátDæÕò@Õ¬ußT›²ëeWêÆÐò¾€j´ÌûA^š‚D&‰¬#]¡H¶Ö¹2ª#éJò~†7x3øYœY˜¥ .bO£‘Åœ€àhÄ2ͽº^k#‰JCßFw´SïT wh¶nKKWXwÕDŸƒ8(ÒÞåº`MiøÌ=ÁdæˆÂËŸ£ß—UE!¥Svºíˆ§±³+zU©söÙX£–eE€©JÃd“_iN"£{kf­6Ú[Þ»ê·æ¸®éæ`Æ~6·(—Ç8FaèÉ1Óí5{y0,b‰¬U“iÀné‘°aðI°,ØÞç [Ãjµê Í&J¶¾:°‰B6[¼ö¹WÁ:šÙö­ÍFÌ Ø»—m)Á‹ë)M¼wÖ7° ¾ÊzW©)‰Ë I9Y“!YNÖ|×`Ž(’J¶ÿaywK’“PŠްfU=ö€¡±Íe'§Dº¼²lÖUÞ³\N5n¾ŸzcJÉÌœ@_ZH¯rM\¥:¨1ƒ!æC6š>B€r6eÃë@ã…å ö¾4zV›ìHÆ–‚˜-½6Žƒà×»žª…ä•FÓw£›Ž¬,ðÇø§¤4 ¨ËmÁ‡ÛH¶é˜@½¨bY€…%“ùŸ=&eG,aGÍqqE÷Ýôzf‡ž‚ºF“|€ *n\Ü:í›åNW=§¾]X¨?ü|}sšóáºÈ$ä$º‚z ÒCÜ‘±ê¶µù$øí2 =‹F•“Ý\;K¶ @b %'þÛ”mc¡ êE¥gC©÷Ézòšœö±ïHj‹ <²b­WöÁ,–kxL*À"„°íä¶8lmh€–G© ÖÑ#PmÊEY„£ëä]à±^ì·£/‡¨c§†hƒ­Ð»Wùé^¬þ)‘¦ÇÒµÛ3È& û "É;M¹mx§2ëŸã‡.¡(§Ô°©€ØStG \ÉÕ—eÃ/ùøê Á¾úç^Ý*õŒ‚ØæDïéÁO¹¦Ô|Y‘Êêˆx×Û§$ÎLçlë¦:<°l›|«r£à5³MØÈ‡…í@Â>^Ýa]<Çð!E§ ¨^©<ÇH!7DµZ S¹¼E™}¦Ä”,t­8soCnZÎìÔºÜާŸ£ª9L…{Z†È¤‚}MaJ<é“–ãQææ1áüÀ”±?±,F–OMZÃ>­,‹GJo.çXßTåõ`Þà'šU”-‡Æ¥bû…牒EX+˜X¼/»‚¨†çë>´©r·îÙÈÊ=I¶q<’ª7XüЙèÖØæ ­íÆí x tNÁ± Ç@VŽ6ˆÖØòU;ZÝPqÕ'$8~±Ì;ýqÂXL0Q'4Qý{ ~kÜ*ŽGï´‚Œçï¼4»ÊÎT'Î_åÓçA€ñÝ9Œ›Ÿ‰Ì_„‰=äWJî$81Œl-w;¼<^$À‡¿ÖÛHPŽ!ÕñÖà÷6N"ñEGÁIx58I‘Ê[PÑíé¶Š7žUF»£•údGujÇÚF+í3VJZÿöÍõÇ»ÿŒåëSX¬m´r÷Œ•ü)+o0Ð vÉ'Í´O™±/0šéž±ò—Óïú¶9µAYn)…¦ú93s‘ް¾ ÃãE̾¶C«Hmj…bü‹OŒŸâm‘¡’›û­´S_;’ªSà £ˆ€Ñ©&ûR|ŽtW©H‡AwÆðN:÷è=ÂfÕïpš1ÇNxÏ…™CÂ|‚Hø×’{v‚ñÉa:þ¥=‹"?J©› ]ïÌiP¯Y¨B@’‹7î‡ÿ8¥uùƒÖ;4 ׃Ï1ÌœñhH•*Õè·ãX©ág)Ú¤‘÷ùó©ó]†8Ö= Bü;ÜR_Š£¥²ÝÿàŒ}[Âûí"Ãoß藅˧ê…QâîõíÀH(óÓÜ•âlÝ%0Ë÷й»ÐÕø?S³y O|“8óãðÑÿM̓…?Oðõ{ê_caöÐ6ª„´Ë™ü„Ý@Ûendstream endobj 2138 0 obj << /Type /Page /Contents 2139 0 R /Resources 2137 0 R /MediaBox [0 0 609.714 789.041] /Parent 2116 0 R >> endobj 2140 0 obj << /D [2138 0 R /XYZ 95.641 729.265 null] >> endobj 2141 0 obj << /D [2138 0 R /XYZ 95.641 716.314 null] >> endobj 2142 0 obj << /D [2138 0 R /XYZ 95.641 676.643 null] >> endobj 2143 0 obj << /D [2138 0 R /XYZ 95.641 573.031 null] >> endobj 2144 0 obj << /D [2138 0 R /XYZ 95.641 524.214 null] >> endobj 2145 0 obj << /D [2138 0 R /XYZ 143.462 505.106 null] >> endobj 2146 0 obj << /D [2138 0 R /XYZ 95.641 492.334 null] >> endobj 2147 0 obj << /D [2138 0 R /XYZ 95.641 390.336 null] >> endobj 2148 0 obj << /D [2138 0 R /XYZ 95.641 390.336 null] >> endobj 2149 0 obj << /D [2138 0 R /XYZ 95.641 360.628 null] >> endobj 2150 0 obj << /D [2138 0 R /XYZ 95.641 360.628 null] >> endobj 2151 0 obj << /D [2138 0 R /XYZ 95.641 343.193 null] >> endobj 462 0 obj << /D [2138 0 R /XYZ 179.447 335.044 null] >> endobj 2152 0 obj << /D [2138 0 R /XYZ 95.641 329.938 null] >> endobj 2153 0 obj << /D [2138 0 R /XYZ 95.641 324.957 null] >> endobj 2154 0 obj << /D [2138 0 R /XYZ 95.641 290.71 null] >> endobj 466 0 obj << /D [2138 0 R /XYZ 171.138 279.751 null] >> endobj 2155 0 obj << /D [2138 0 R /XYZ 95.641 274.645 null] >> endobj 2156 0 obj << /D [2138 0 R /XYZ 95.641 269.664 null] >> endobj 2157 0 obj << /D [2138 0 R /XYZ 95.641 235.417 null] >> endobj 470 0 obj << /D [2138 0 R /XYZ 177.594 224.458 null] >> endobj 2158 0 obj << /D [2138 0 R /XYZ 95.641 217.415 null] >> endobj 2159 0 obj << /D [2138 0 R /XYZ 95.641 212.433 null] >> endobj 2160 0 obj << /D [2138 0 R /XYZ 95.641 180.125 null] >> endobj 474 0 obj << /D [2138 0 R /XYZ 172.443 169.166 null] >> endobj 2161 0 obj << /D [2138 0 R /XYZ 95.641 162.122 null] >> endobj 2162 0 obj << /D [2138 0 R /XYZ 95.641 157.141 null] >> endobj 2163 0 obj << /D [2138 0 R /XYZ 95.641 124.832 null] >> endobj 478 0 obj << /D [2138 0 R /XYZ 188.294 113.873 null] >> endobj 2164 0 obj << /D [2138 0 R /XYZ 95.641 108.767 null] >> endobj 2165 0 obj << /D [2138 0 R /XYZ 95.641 103.786 null] >> endobj 2137 0 obj << /Font << /F41 999 0 R /F35 919 0 R /F40 935 0 R /F27 911 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2168 0 obj << /Length 1764 /Filter /FlateDecode >> stream xÚµÙnÛFðÝ_!ä¥Ta1Ë[,‚m'-4@ô¡)Œµ6¥H¤,«_ß¹H‘’\$M ?pvvvîKöf þ¼Y¹qèÍ?uý8šå›+5»‡›7WžP¨YàF˯~È®žßuê¦q0Ëîˆ"[ÿî¼*ô¶3Í|áGÊñ\þ~lMÓ~Ãð{]ít9ÿ#ûùêu6°½¥Þl1H8¾åÆðõ}7õÂA‰ :Wâ·ÂT -œ¼®æžcšÎV÷ŒêÌcÇÐ]3÷–N½Á“ïÔ•tݪ«£«º+À(P¬V³%ŒQ ï)× Xì;{gÞÙÊ´L8Ö,Rn$BW]–²kቱ¤m¯÷¹€¹±rÓÄŸ-@T¥ÄàÜiëêh•íÖ äõÚ´¦kùÔnMn?)å¹¶UOV!ú~×è¸0òA7V¯JÓº|Î K|)Œ0€Ð?l:Ÿ?©H}ëv|½£ü’ü [r>ínµ¶|“/.¨ÞÕÍaîyžCÎX:Ù<…ü@8Áp1’¹¦#¿1’}œô—"RE¦ r`Íw‡zÇ@eØ£ g>#Žn9i·Ò¾z–ePÁïçIèdoŸ šŒ [’a éRnÅŸ•Äiä ÝyE¡¸Ÿa2!ŠDs@luW0Tß\‘—à;De Ì ±ñ’1úx€÷ûZ€Ã–5Ÿ-’Ð ÕrW–«FYIYÀ·ãŒè’½/#7…¶‡Ìn,±¼€øâ—ìA€[Hà…΋4çJxyûBjÂ{é¢ÅHÉ)-‡cC"®•ay <¤˜ðŒžE‚¾-AØ]ÆÜÔÍ…¨›G½Ù–²-ˆ•óêƒFÞ~ÌnKV#öœ\W|‹ŽHó5cH’ š2/t£shô-ŸmÕõz’ø¸\¨³ÂXìqNnàPu”U'!ú~ µŸ‡Ææ°O/@HGH"| ·/ *EcŽ’èí–Z30ÐŒ™´8ï-äJu"Cø\_ðÿ5»x9 ž(··E·)Y8à(ã”$ÇÔ5é1ö-Ä‘vÄŽ_£3<9w¡PyˆÍ ˜Êt0m®·rAV18X 0êÌUy £²¨[´|šð#.Ã7ì oâ ï8« ù_LH"õIRSÂù˜m*æ<äJˆÉÏŸ³ªˆØÛ²dR½U)Êô°g$=õ;â˜?<.áqy|z®ïZw¿ Âj¢q†à¾±Œ:—O¸ÒW0:ŒZBŠ/B4‚¡8xe ³WXýj lDZ–ØMp.uu¿Ó÷—T½ÛUyß¾UŸPèV­2V±Áä¡MšIÅ‚” ¯t„å\Ç&j:mËvZª$ó'ì–*àaDP{h;³a¸ÔùŸ-ƒ¼É DDMô¡8<0ÚÔý< †œö¯þzLìÔZ ™§v ´ç¬Gƒâ©6~”ÈØ†› ­G€1–ú1!1ކњ1²Ç‚µŸJUê89cZk4£y0Ærᵈ%’^‰Ø1k+bp€œ[ÔÁ!¶Z`Æ®t+ˆ~Y‡Ôèd9<‹fFY—S6ˆ˜ì|„Ð+,ššéxôÁaeº½1BˆýZˆÈ—¶¥•a½ªÈ.Ÿ_«K[ètñL<6„APôé[( †ø%ÒØð[µ…šk*Ês8¡Š× R(5þ9ñÏï\³Ë]Ù¶˜í¾,˜9àIv Ÿ‡Eà§ý¬ y ¿Õèå2Bw <¸íï„–º"°ÜÁëökÄeýzêK 0úxnöñ‚ín‹mvÙet‚e<äÝRþ ö®.ËzOæ~DÇTmQï[Á=„ø1’ &CÞØ•lƒ'EÍ¿¹ öIE;€5ëïxö“ñOLàîBÆq¬F±]JÊ,©ëæ|öò#`šøþ‰&R üó'šdÕhGÁY×Ò_'%+N¤díV½ÇÛ3S½>Aè oQë‘9ƒ‘ÿ¥AÔ¥¤v&ú¯ ÿO-éå?møg™öæõ¯~yÿ¯LóNL“y¼lx“º¸]ìº1iÎÓi-û,'©,ÈÅ“¦~–—“QTû²ØMôñÀ¾c.Z8dáãøíØM2ð¾Â²µm·¥žû°(}¡yüò0X¨/Y2úé¦=ÉŠ“xßo7°,M¸òšq3ÕטØà~…¿çî SôŠàxµœFqüß¼E˜¸KPiG©ù“ÿç=ùŸÃ@=õOA5~ÿ7¢‚•¹endstream endobj 2167 0 obj << /Type /Page /Contents 2168 0 R /Resources 2166 0 R /MediaBox [0 0 609.714 789.041] /Parent 2116 0 R >> endobj 2169 0 obj << /D [2167 0 R /XYZ 95.641 729.265 null] >> endobj 2170 0 obj << /D [2167 0 R /XYZ 95.641 741.22 null] >> endobj 2171 0 obj << /D [2167 0 R /XYZ 95.641 716.314 null] >> endobj 2172 0 obj << /D [2167 0 R /XYZ 353.697 706.351 null] >> endobj 2173 0 obj << /D [2167 0 R /XYZ 166.918 662.516 null] >> endobj 2174 0 obj << /D [2167 0 R /XYZ 95.641 643.766 null] >> endobj 2175 0 obj << /D [2167 0 R /XYZ 95.641 605.908 null] >> endobj 2176 0 obj << /D [2167 0 R /XYZ 95.641 535.173 null] >> endobj 2177 0 obj << /D [2167 0 R /XYZ 95.641 499.91 null] >> endobj 2178 0 obj << /D [2167 0 R /XYZ 95.641 442.521 null] >> endobj 2179 0 obj << /D [2167 0 R /XYZ 95.641 425.086 null] >> endobj 482 0 obj << /D [2167 0 R /XYZ 222.066 416.936 null] >> endobj 2180 0 obj << /D [2167 0 R /XYZ 95.641 411.831 null] >> endobj 2181 0 obj << /D [2167 0 R /XYZ 95.641 406.849 null] >> endobj 2182 0 obj << /D [2167 0 R /XYZ 95.641 372.603 null] >> endobj 486 0 obj << /D [2167 0 R /XYZ 222.066 361.644 null] >> endobj 2183 0 obj << /D [2167 0 R /XYZ 95.641 356.538 null] >> endobj 2184 0 obj << /D [2167 0 R /XYZ 95.641 351.557 null] >> endobj 2185 0 obj << /D [2167 0 R /XYZ 95.641 317.31 null] >> endobj 2186 0 obj << /D [2167 0 R /XYZ 95.641 317.31 null] >> endobj 490 0 obj << /D [2167 0 R /XYZ 239.222 306.351 null] >> endobj 2187 0 obj << /D [2167 0 R /XYZ 95.641 301.245 null] >> endobj 2188 0 obj << /D [2167 0 R /XYZ 95.641 296.264 null] >> endobj 2189 0 obj << /D [2167 0 R /XYZ 226.879 285.43 null] >> endobj 2190 0 obj << /D [2167 0 R /XYZ 95.641 262.017 null] >> endobj 2191 0 obj << /D [2167 0 R /XYZ 194.39 251.059 null] >> endobj 494 0 obj << /D [2167 0 R /XYZ 239.222 251.059 null] >> endobj 2192 0 obj << /D [2167 0 R /XYZ 95.641 245.953 null] >> endobj 2193 0 obj << /D [2167 0 R /XYZ 95.641 240.971 null] >> endobj 2194 0 obj << /D [2167 0 R /XYZ 387.933 230.137 null] >> endobj 2195 0 obj << /D [2167 0 R /XYZ 95.641 206.725 null] >> endobj 498 0 obj << /D [2167 0 R /XYZ 228.522 195.766 null] >> endobj 2196 0 obj << /D [2167 0 R /XYZ 95.641 188.722 null] >> endobj 2197 0 obj << /D [2167 0 R /XYZ 95.641 183.741 null] >> endobj 2198 0 obj << /D [2167 0 R /XYZ 95.641 151.432 null] >> endobj 502 0 obj << /D [2167 0 R /XYZ 223.371 140.473 null] >> endobj 2199 0 obj << /D [2167 0 R /XYZ 95.641 133.43 null] >> endobj 2200 0 obj << /D [2167 0 R /XYZ 95.641 128.448 null] >> endobj 2166 0 obj << /Font << /F41 999 0 R /F35 919 0 R /F40 935 0 R /F27 911 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2203 0 obj << /Length 1755 /Filter /FlateDecode >> stream xÚ­XÝÛ6 ¿¿"»˜H\&v=ܺ^qº=,}Z÷ ØJ,œ?2˹\þû‘"e'®»†!¢(Rú‘¢H:þ̃Ÿ?Kcwù³uºÁ*žeÕ7ÛÃÊÇŸ%B?„¥õ,tãd?onÞ>€Nꦫp¶Ù¹Mþ§ó¾‡N¶wË öߥñ³–­þ‘èO¢>Šòî¯Í¯76ý¾»þ*š-ûÆ–áÚsW0›úQ"Œ¿q¿#ÞÚ97G"´,eÖ-hèZQëRtª©™!¶w¾SÊ‘ªhïüÄa̉VV¯àE™«®á“»fàÄàœRºDoîRÏA Kô °ô=7ScHg”4Ñ"˜T"gêx€1JfGóRÕV£+DÇ̦y²ËOòžúöaÌð⊼¸ôS7 bá :p&`Xy^?1:מcÜ4ŒÎ©=ÀheÜ z×ZD p|Ǡå‚EùíÒôƒÈŠ«š(VËv ­&<}ÿÇûÇG B'+]§iš‹:'BêL$Ñæ8Î0`ÕßdkÀl²ìh7ÚžiüâyA«zÏû—å…,9·@9Üb%:ã¼F¹c¦õ Âˉ¦]1véX²"ꤺ¢ç‘5 D ·Qûž»÷—e‘Æn ›‹Ç+šÿÌtïR4If°g!j¥+6á¨% êk9nƒõu &nÈæu=§Ø)6«oQŽŽèýf†\fª%ûÃÆMŸÑøà+K{B¹ášNxSßABϦ(&òEL‚ÏëÁ|ñÔ։3•{8r8dÝéQ¨ÌÇz5Œ7¯òÊw¼ùÏŒ/þ ìÕ1Œáä8p6{Ä”®éša<4Z+Èí šRº"—ZµbX0å ŒæY™´ŸR9ƒAMË[×¢âµ)G©->é¸ê¥\øŒ£Æ·>•xØÐÛùüÜýOmº¨*ÀÍåþ¿ïQJÖ=5Ç’Ÿó–£5ò¾Uw†s°ð|Þ<,"Ñ 8‚ °¯ï¼|¯ý&*N`±µ#y!^‘hÞ_<\M·2X¼€í;äÎCíD÷MfPv÷ÈDo0sm}œHÛšQ@¡«>4‰‹žÇbªI‡"ÑXAŠ"³.ˆs‘?qÚ šÉ^fß ¹¡°E@BèÑöÜ34í„×¶²;I [„aêèæhnk±qn³S5»Y“c†BPº§a¹†x|¾ó÷Qñç¶e <äá³Ð(|¸%Fÿ"¾†»)E Ïk^G3­^ˆ¸ê@ÂÄ©ŽšE¶rob˜ÊÀÃ.oA$E -ÖÄb±Ä©åK7Úž¦J6¬åiöp äqb }n_ §,›=5à›æÓ¥¥+œ•¢UÝùÎ÷}gAk]A|L`” B èòL\ÓYfF–úÖRÀ ÞñOd®›â„›âÄ:±Ho%ÚÃ7AGž™Èº£©»¨  nkxS 9_/¬RÎ ;¡Ú’÷ÉJ ä¥#qJV_"O8¬ÇMÐ/ö¤»w£ê½¨í ´ÚÙ÷ö§[Pñ¯:•¿{c G •@×®LKéqHÀ¸-Eý´ eú®I/ÅL4jÖ¦&¸Ý©!¢º ÅJ´O¼%Ú0Ÿ#¬ÅåY‰£ö5_©#°Ò7‘SŸFö¾Cê²}&ÔÜbNdhØS4ÓH´‰ThB6ôá2ógQ›O>œñSvA4~×™QÓ8dKœa¶Ä±ÂWD)ïØ¨šµ»óAò¢8fM Ÿ*‚ŒOÚY0¶žN”TÂܳ¾P§9¥À(§ªb]ÕàÚp­¾ †ªI³$cÓ^ …¥€µéG.Í&5£Çmá½÷á¨i¼p¾æ†FBcE1¶±ÿÇpGF.¸ÐVǤ8¤0ÊÔ•$"Ũ³ë^Ðj~V‚õ'3Èí°QDÔ†%±óñÃ/ïÿtKU/sóAÄhw]QÓ6Z°È¹"¶™– f‡ïyä œåDªÐÜÌA¤PsXÑ ´ÐÒý‘q/ìI© jÙÑ„zÌo)’ÉWj.ÍÁ~küD¾Š6oÕÿ—^þ»‚ ¢<‰³]8JeÞ,˜´ÿ¡£¿]omÑ,hÍD9pOÆ·Èá(¢ÂMÎŒþZFkè=a\Å©“ÿAE^âF«èû ,ôÇ{£H@ZvËИ4ßendstream endobj 2202 0 obj << /Type /Page /Contents 2203 0 R /Resources 2201 0 R /MediaBox [0 0 609.714 789.041] /Parent 2116 0 R >> endobj 2204 0 obj << /D [2202 0 R /XYZ 95.641 729.265 null] >> endobj 2205 0 obj << /D [2202 0 R /XYZ 95.641 716.314 null] >> endobj 2206 0 obj << /D [2202 0 R /XYZ 186.501 675.567 null] >> endobj 2207 0 obj << /D [2202 0 R /XYZ 143.462 643.686 null] >> endobj 2208 0 obj << /D [2202 0 R /XYZ 95.641 624.937 null] >> endobj 2209 0 obj << /D [2202 0 R /XYZ 95.641 613.978 null] >> endobj 2210 0 obj << /D [2202 0 R /XYZ 95.641 596.543 null] >> endobj 506 0 obj << /D [2202 0 R /XYZ 167.263 588.394 null] >> endobj 2211 0 obj << /D [2202 0 R /XYZ 95.641 583.412 null] >> endobj 2212 0 obj << /D [2202 0 R /XYZ 95.641 578.431 null] >> endobj 2213 0 obj << /D [2202 0 R /XYZ 95.641 544.06 null] >> endobj 510 0 obj << /D [2202 0 R /XYZ 161.175 533.101 null] >> endobj 2214 0 obj << /D [2202 0 R /XYZ 95.641 526.924 null] >> endobj 2215 0 obj << /D [2202 0 R /XYZ 95.641 521.943 null] >> endobj 2216 0 obj << /D [2202 0 R /XYZ 95.641 488.767 null] >> endobj 514 0 obj << /D [2202 0 R /XYZ 154.54 477.808 null] >> endobj 2217 0 obj << /D [2202 0 R /XYZ 95.641 472.702 null] >> endobj 2218 0 obj << /D [2202 0 R /XYZ 95.641 467.721 null] >> endobj 2219 0 obj << /D [2202 0 R /XYZ 95.641 433.474 null] >> endobj 518 0 obj << /D [2202 0 R /XYZ 151.771 422.516 null] >> endobj 2220 0 obj << /D [2202 0 R /XYZ 95.641 416.339 null] >> endobj 2221 0 obj << /D [2202 0 R /XYZ 95.641 411.357 null] >> endobj 2222 0 obj << /D [2202 0 R /XYZ 95.641 378.182 null] >> endobj 522 0 obj << /D [2202 0 R /XYZ 149.001 367.223 null] >> endobj 2223 0 obj << /D [2202 0 R /XYZ 95.641 362.117 null] >> endobj 2224 0 obj << /D [2202 0 R /XYZ 95.641 357.136 null] >> endobj 2225 0 obj << /D [2202 0 R /XYZ 95.641 304.458 null] >> endobj 2226 0 obj << /D [2202 0 R /XYZ 95.641 269.768 null] >> endobj 2227 0 obj << /D [2202 0 R /XYZ 95.641 252.564 null] >> endobj 2228 0 obj << /D [2202 0 R /XYZ 95.641 223.044 null] >> endobj 2229 0 obj << /D [2202 0 R /XYZ 95.641 152.309 null] >> endobj 2230 0 obj << /D [2202 0 R /XYZ 95.641 125.41 null] >> endobj 2201 0 obj << /Font << /F41 999 0 R /F35 919 0 R /F62 1117 0 R /F27 911 0 R /F40 935 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2233 0 obj << /Length 2665 /Filter /FlateDecode >> stream xÚ¥ÛnÛÊñ=_aø%4`1¼_úR¤©sŽ‹ä¤ˆž=E°&WÒ"©r);þûÎmy‘dÔ@¡ÎÎÎÎÎmgfWáE¿ð¢Lý, /ò¨ô£,½¨vo‚‹ Ìüò&Šà"öÓ"Ç©¿Ü¿y÷¨K¿Ìâ‹û5QÜ×ÿò>lÕ~ÐýÕ*J/ôùûÍêÞ¾eø³jª¹ú÷ýßÞÜܬ“°ð“8¼X;o¾ŠóÀÏàE~&£qz*İոYæ™dia;­»~wÍ P<#”{ª¿ OèÕ~ß]Ë`-ŠŸªkÛÖï:Aq44]k¯G*fÿ´ÕíH´BµAÆUøeZ’¬°p0톳&aºæÒ(ýUè±Á¨@0W ˜+xAÔÛÁwMý2¡MߣLeééŸj·o4:`¿fPÕ5Ë„0væ§‘U¦]ÕjP@¯¬,zÕÚF `A¨Çxg6[´TYx޼l¥ö‚«4irÎHƒÂ½ã,òª­êUv±<~ÚšjËàh¢ëÚÙœ_ˆÄY žâqwö‡Á-ÞŒÎÇQ£ÚÍAmô5µ¿ñ¯ÏÈÊëŸðeè}iÁ6šáª;4µ€,!â8 ½y;yÐlœÐûª÷]?\2r®Ÿ„ž‘…ß`›û«‚Gi`Ö ó€uä)q,´g$wqÖ`D™÷ Y³‡9‹èÑW€S­ÐÎÍJÄ[5ðÌN=3ª«@ÊêÐóˆD‡é}£*aÖª¶Œí„ L9Hš8¶1z³Ç@³ómí΋ª1ˆ`y;4r>*u°r:6½ÑkGË_òƒ{Ž—J[ †>sj~íž4òÏc!ˆˆ ~‡­± U`j™ìZ-8ŽUc;†žz3ȼ&}ALǶ‘©A¨Uµ5°·ÛM †cˆËšÁÊîh•SëÑù‹JÏnå´ÔÈç'2’yŒB†$Íà万0#¯e¿vâp&‹õf³Á¬B&lÌZ7¦Õ¶Å1gDÄS°´¹fEâv;0ÊîueÖÏŒVŒc+bÎ`tÕÁaÑnÁ j˘K’üÝ;òÕåBÞb4>å“8b-t™2Šc1F„§ÒH@]3æI ÐͰebÎIq4º8:rMäj/Pèò úÿš‘”"€òòöî˪(Òò\ÁGµVQ0ËŒp0¦e¡2jÔ(Y£`¡^3òÁQ‰Rî0"Ê)„K¥‚¹R0©&(ǼûåaäiŠ=Ì*Éý"Â~§ðÃ,'m>ßÞ}¸ùôéýo7_¾Ý—¼Ü~º½¿½¹có.È13¿,˜Áí“Bá=ƒ*ÝájÛu–ÒGî2J¥ÚVºŠ§»ƒå¹Ã`3-Ãn¯{*ó×¼s\°s†;GØ;&™taŸ Â?a„ŸŠª'E$tµ±P ží‘(Ó¾è^¨ ŸGÅ"@wº=üéT …lÑ ŽÏ<¨;þ>£=xÂSäµB;È4h‹mãŸIØ:Ï.VÀÕÞ–‰î¦fZ¶`*»8Â\‘¡ïyøËÍ_?|ùÌðÚ4câ›÷<ùU«zÎùÊÂûD„W”ÿrþ TÌþÝT?–Ë—ºI0ŠÑÏÅ9á,ì>G®FÚ®}+¶ú¡ÅÈY5‡32¦¸­¡ŒS’;á6š™ìŽ9Ÿç*RÝm»§s>²„5¥Wh÷íéòÝñòÞuýób±©pù™Å²ÇMm†£@‘>ˆ4|xè5™ÅH#ý²»B‘èé\—„¡wžM%ÑðÁµq¢Žæ,^Pê?.H‡Cß.Í(ÍN¹ÈÅVBé0æ¼1¬ä\%¥‡©;X˜åî ¤.qª`ÖÓˆ qžS±‡¡‹c„]+žš… I”Q ©2JѾ÷ÒÈaßí¨œãÀ¼ä'"€«Ó OóO˜f~œÄ¯KƒaéÒà¨rçÎ2äÞ0•Š©˜¡R>·yï!£7¤È ;F‹BÈÇËW1­´ÅaÈ-„ËÌ£Æ«Ê CÛ¨æQgTÜÏÀ¸Ððý¬Ö(A«eŠ‹¤ôpµ•…ã¥v¯öy [§œ•O›º>ÄYFM~!®ÑY.W· u3]m*¾¹­Â¤FÔ{þ>£F9ûú<ü.æBÂ|©õBŒ´óvŽ»síÊ|¦þÅ‘æÅ+üùIâÊŸ²?`³$HXðª€tLˆi©ÓG¨[ówœÃÜ®Xm©4!4s›cMQS$þQÌ@§ñõï·ÿ¸ÁF+‡»t >ªÞà½þŒîa”@З¯PûXûŸŒc= ¥W̧#ËÝ1.¦ÉZZ´j LŒ(´ÇÓ*ÌS?ÄG¥Å]w|?aÀ©äŸËK’ bP-]aÆÄÂ…yÊ>…f„ÖýäzÄ‘ËJWcmþSZÎS Ü›¦{’ Žcä28‘ŠŒY‹³œ£éõi¶`Ì<€r¡vz ø4á{IpÅÔ øE^4øÀ£ôç(Iý _•5ã YœžÅÆtzxWy˜pï1 ièAÕL ‰;Oš‰Ëò霡ÿ$ƒzt¢+åjÝóõ ;ç…d0œdÒìø¶†¸E¹WÀEYNÇtæ’I¬ù]+Ê!Ãÿľ„.ì€%Aœ$·z"†sfx'€Vè¤S¶ÌY<[Ž'¼;]‰` Ïbµ´úanÕ€«n”zØŽa ã1<£dz8‰ä&Ž@µÕ†¸9~)B€NÑÔx%À’è3ŽîJ%ØùFj>§"H;Ǻå¯K«ÇÏ(Ù¹ / _•43òüö@ï%rzß”äm†ñu#±MLëžÞ´ü¦Û#hêÎmÓvƒÌÕ’^³î¬ËìJÏ‚qš6ˆ¤º¦âÌtY’aH–çÇù)sÍ-smÇß¹ÎÝD!™diòªFH’IíDUX–Di®ÊÜÏÂ|¡îië“Å\²^–pmÈÜÃG6³:L’W¦ÉÄ[¾©g ½Zt-½cÝý3ø0â6z­}ÏDg$bê±¶Â]y£S—¶|!+¥óÖør±|ý ?ubÜ^ž¸$)ü°Ì_×eËþ \DÉm) R×eÞ?¿Þ||kF“ÉœIº?Ò[a/óÒYá?Cµy4õõµdÎØbnj˜ ?&ñ¬=f ™RƒuÝP•/O•@NL¤UCÄx5X^`Ú –QÝSë3t¿Õ8;)n´ŒU/¾˜Jñ×ý#9 =ÜÎÿÅ(ƒ©XÎþlZ~2ŸUËnµ‚ñÌC9~›^í¬üçÁ¯ãjü@Nÿ7¬ÿéß·ÀÖ~-þë{ñ_Å8zéÃ`¾þ¿ç-‘òendstream endobj 2232 0 obj << /Type /Page /Contents 2233 0 R /Resources 2231 0 R /MediaBox [0 0 609.714 789.041] /Parent 2116 0 R >> endobj 2234 0 obj << /D [2232 0 R /XYZ 95.641 729.265 null] >> endobj 2235 0 obj << /D [2232 0 R /XYZ 95.641 687.602 null] >> endobj 2236 0 obj << /D [2232 0 R /XYZ 95.641 627.826 null] >> endobj 1024 0 obj << /D [2232 0 R /XYZ 95.641 557.091 null] >> endobj 526 0 obj << /D [2232 0 R /XYZ 260.405 526.715 null] >> endobj 2237 0 obj << /D [2232 0 R /XYZ 95.641 520.537 null] >> endobj 2238 0 obj << /D [2232 0 R /XYZ 372.708 509.729 null] >> endobj 2239 0 obj << /D [2232 0 R /XYZ 95.641 488.593 null] >> endobj 2240 0 obj << /D [2232 0 R /XYZ 100.623 349.529 null] >> endobj 2241 0 obj << /D [2232 0 R /XYZ 95.641 332.095 null] >> endobj 2242 0 obj << /D [2232 0 R /XYZ 95.641 332.095 null] >> endobj 2243 0 obj << /D [2232 0 R /XYZ 151.771 321.136 null] >> endobj 530 0 obj << /D [2232 0 R /XYZ 326.224 321.136 null] >> endobj 2244 0 obj << /D [2232 0 R /XYZ 95.641 316.03 null] >> endobj 2245 0 obj << /D [2232 0 R /XYZ 95.641 311.049 null] >> endobj 2246 0 obj << /D [2232 0 R /XYZ 319.73 300.214 null] >> endobj 2247 0 obj << /D [2232 0 R /XYZ 432.615 300.214 null] >> endobj 2248 0 obj << /D [2232 0 R /XYZ 195.565 267.338 null] >> endobj 2249 0 obj << /D [2232 0 R /XYZ 163.387 256.379 null] >> endobj 2250 0 obj << /D [2232 0 R /XYZ 287.736 256.379 null] >> endobj 2251 0 obj << /D [2232 0 R /XYZ 95.641 222.008 null] >> endobj 2252 0 obj << /D [2232 0 R /XYZ 95.641 222.008 null] >> endobj 2253 0 obj << /D [2232 0 R /XYZ 150.107 211.049 null] >> endobj 534 0 obj << /D [2232 0 R /XYZ 310.095 211.049 null] >> endobj 2254 0 obj << /D [2232 0 R /XYZ 95.641 205.943 null] >> endobj 2255 0 obj << /D [2232 0 R /XYZ 95.641 200.962 null] >> endobj 2256 0 obj << /D [2232 0 R /XYZ 448.591 190.127 null] >> endobj 2257 0 obj << /D [2232 0 R /XYZ 308.458 179.168 null] >> endobj 2258 0 obj << /D [2232 0 R /XYZ 489.355 179.168 null] >> endobj 2259 0 obj << /D [2232 0 R /XYZ 451.891 168.209 null] >> endobj 2260 0 obj << /D [2232 0 R /XYZ 298.562 157.25 null] >> endobj 2261 0 obj << /D [2232 0 R /XYZ 208.925 146.291 null] >> endobj 2262 0 obj << /D [2232 0 R /XYZ 181.798 135.333 null] >> endobj 2263 0 obj << /D [2232 0 R /XYZ 409.041 124.374 null] >> endobj 2264 0 obj << /D [2232 0 R /XYZ 95.641 95.387 null] >> endobj 2265 0 obj << /D [2232 0 R /XYZ 211.584 86.516 null] >> endobj 2266 0 obj << /D [2232 0 R /XYZ 317.295 75.557 null] >> endobj 2267 0 obj << /D [2232 0 R /XYZ 234.88 64.598 null] >> endobj 2231 0 obj << /Font << /F41 999 0 R /F35 919 0 R /F27 911 0 R /F40 935 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2270 0 obj << /Length 1588 /Filter /FlateDecode >> stream xÚ¥XKÛ6¾ï¯ð-2°f%QÏzh·› E’ˆ‹Úh›^ +‹†DÙq~}‡œ¡–7pZø á"¿ùæE9˜ùð fyÌ’(˜¥aÎÂ$ž­÷wþìfÞÝ´‚¦Ògq–š?/ï~x ïä,Oøl¹µë–›¿¼Ç8hYÏaì{Ã笛7(U+Êù?Ë_ݳ ‰f‹î„K û,ÉâÙ" YD OQè„Ó’Ì+6²ÒÅß¾£Ê=Qσ̣ùµÚ„.V%O…Þl`œ?Ë`ÛÄlÄ‹SN›(¶òCQÉÏæçn]QØjwÆSøh«*‚4¼jƒ2@'€°; Ä$€bø,s»qoAš{•ÂçZU`&/ÖÚØ™’)vJ~)]TÏ8QrÅØ4gYœÜdl§´îT”%î/šΪE$Åv¤È½“¨4JZ‘™˜‹ùÈÌà“õQbÜ KA¸t©Qþ.–½{úåñ·(›Å%éka¦Å‚^MS<“\É GQ¶²ahy˜ö–/CE1ží Úú¶°ŽIàã`Ü{ªÞÌß#ç¼H£<ãà8}ph|MÉv'†ÀOˆ'.wÙQ¼ö\2¶Ú4—¬ãçâ/ò<°Eµ%6ða ªí/Ж÷Ö;Ûó+àx[‹ÕÞŒÒk\ÜJDø-"Ò±a8×ÅFi'š1¢Öź-EÝÑø*‡7Eáñy§ŒÙ'm„+ÑH5¦84Æaźù.R>à ½¦…A]|•4‰ñP.4ÐCjëøÑt[c‘ÁDå@†Ã÷×mŠæPŠó`w“Îþ(«v¿rç" Ù¿ÇÁVì‹ò<‚À#M¦«Ö"XKÒÉ#‚1Îq.V}.#ܵ²OþÅeUè͸ÉWûk¾ÚË=œº˜Ewd}ƒ»¾™»NÙ6’4«ó4tE«wŠÌÞ:a#Wíó3TùM£P{Ú%ò=dk)Ö$ŠÕª¶Ùy4±è:Ltõûr”‡Qo°ˆ²T';c{0Jh ö)-63e±a³¯6ëó#£íÃ;5îíFÚ‰=í"X‘…h°=XÞŸ`f¨ZD|ЈAM> |vå aÎnèª>Ë"×}O;YឦÅi×xªÐ’•P+Ddó T˜_¤41B—‰€¥Ð²‡cS6¦(÷d)×”h[{”ÚÓ=îI¬w(•Y]¤Ø¶1tšË’ñã„e¸j±,ÏG!zên^¶´¨”˜Q€™ Z1 ‘:X´¢WG¡)7÷¤­h/;mUn×B7Ó7mA1ý×Î,w—¸¦ÁÛ×íÚØE’¶³Óúû'‰Ú ×á*T‰(@~ëÊü"ö‡R’x>¼ƒ/8ÄpYHO¸Ž¾À/óEìûcµk mc£ê¹‡ÞçöăþÈwªª j¡Uë#³;™]ó.yÀ§Z7fÄ®pøIÉîÏk¥ ñð‰}îÖqˆšOüÓ¤æ4<3Æ“›’<Š\C+nt=ϼïî>ï2Úße4ÐCz,ü `ÃK6 AÑ%0è\ßã”­õð,•z¡£Úª\ï^¤ËülÄI)ób–Øï%Ua#ÎbgÔ²Ö¢¨ºtì;AÇcH–þþá§Ç)aʸïH+-avS[VੱWf®ˆß£ƒÝ¬#aì/ÀYìŠõú=ÚD!‹“±¡ô‘fšŒ»AP%¤¯©ë¹Õ5Ç{¯zµ÷BpÖ(©ƒk9pEþí6LíÖ \»52ÆM‚íÖ<±ÝZ ~>GH=œdÐcÍ`yÓb”(q%=Ç8C1‡ öÁòQq7TPàMÎä)Ü%ž{;Uâ°ÃJÌ _ú0&Œ ×¹Îæô´‘ mĵk­ØË‹ë(ÈfüÚî¿ \û¼}}­}öôýÿ^š`À¡Q“rÅC_á”z?^ë¦ÜU)üL¼øÛf‘¤,…ÛÊ"‰s‡Wÿ¸‰üŒE‰9ä[ÿq~¹·Yâ[nË.}Þðendstream endobj 2269 0 obj << /Type /Page /Contents 2270 0 R /Resources 2268 0 R /MediaBox [0 0 609.714 789.041] /Parent 2317 0 R >> endobj 2271 0 obj << /D [2269 0 R /XYZ 95.641 729.265 null] >> endobj 2272 0 obj << /D [2269 0 R /XYZ 317.96 706.351 null] >> endobj 2273 0 obj << /D [2269 0 R /XYZ 343.243 695.392 null] >> endobj 2274 0 obj << /D [2269 0 R /XYZ 294.862 684.433 null] >> endobj 2275 0 obj << /D [2269 0 R /XYZ 95.641 661.021 null] >> endobj 2276 0 obj << /D [2269 0 R /XYZ 95.641 661.021 null] >> endobj 2277 0 obj << /D [2269 0 R /XYZ 151.771 650.062 null] >> endobj 538 0 obj << /D [2269 0 R /XYZ 274.907 650.062 null] >> endobj 2278 0 obj << /D [2269 0 R /XYZ 95.641 643.019 null] >> endobj 2279 0 obj << /D [2269 0 R /XYZ 95.641 638.037 null] >> endobj 2280 0 obj << /D [2269 0 R /XYZ 95.641 605.729 null] >> endobj 2281 0 obj << /D [2269 0 R /XYZ 95.641 605.729 null] >> endobj 2282 0 obj << /D [2269 0 R /XYZ 149.001 594.77 null] >> endobj 542 0 obj << /D [2269 0 R /XYZ 303.53 594.77 null] >> endobj 2283 0 obj << /D [2269 0 R /XYZ 95.641 587.726 null] >> endobj 2284 0 obj << /D [2269 0 R /XYZ 95.641 582.745 null] >> endobj 2285 0 obj << /D [2269 0 R /XYZ 95.641 550.436 null] >> endobj 2286 0 obj << /D [2269 0 R /XYZ 95.641 550.436 null] >> endobj 2287 0 obj << /D [2269 0 R /XYZ 152.319 539.477 null] >> endobj 546 0 obj << /D [2269 0 R /XYZ 273.423 539.477 null] >> endobj 2288 0 obj << /D [2269 0 R /XYZ 95.641 534.371 null] >> endobj 2289 0 obj << /D [2269 0 R /XYZ 95.641 529.39 null] >> endobj 2290 0 obj << /D [2269 0 R /XYZ 95.641 484.184 null] >> endobj 2291 0 obj << /D [2269 0 R /XYZ 95.641 484.184 null] >> endobj 2292 0 obj << /D [2269 0 R /XYZ 155.088 473.225 null] >> endobj 550 0 obj << /D [2269 0 R /XYZ 271.859 473.225 null] >> endobj 2293 0 obj << /D [2269 0 R /XYZ 95.641 466.182 null] >> endobj 2294 0 obj << /D [2269 0 R /XYZ 95.641 461.201 null] >> endobj 2295 0 obj << /D [2269 0 R /XYZ 95.641 428.892 null] >> endobj 2296 0 obj << /D [2269 0 R /XYZ 95.641 428.892 null] >> endobj 2297 0 obj << /D [2269 0 R /XYZ 151.771 417.933 null] >> endobj 554 0 obj << /D [2269 0 R /XYZ 298.538 417.933 null] >> endobj 2298 0 obj << /D [2269 0 R /XYZ 95.641 410.889 null] >> endobj 2299 0 obj << /D [2269 0 R /XYZ 95.641 405.908 null] >> endobj 2300 0 obj << /D [2269 0 R /XYZ 314.338 386.052 null] >> endobj 2301 0 obj << /D [2269 0 R /XYZ 95.641 362.321 null] >> endobj 2302 0 obj << /D [2269 0 R /XYZ 95.641 362.321 null] >> endobj 2303 0 obj << /D [2269 0 R /XYZ 190.645 355.268 null] >> endobj 2304 0 obj << /D [2269 0 R /XYZ 427.215 313.524 null] >> endobj 2305 0 obj << /D [2269 0 R /XYZ 95.641 270.127 null] >> endobj 2306 0 obj << /D [2269 0 R /XYZ 95.641 213.898 null] >> endobj 2307 0 obj << /D [2269 0 R /XYZ 191.747 202.939 null] >> endobj 2308 0 obj << /D [2269 0 R /XYZ 278.649 191.98 null] >> endobj 2309 0 obj << /D [2269 0 R /XYZ 95.641 157.609 null] >> endobj 2310 0 obj << /D [2269 0 R /XYZ 95.641 157.609 null] >> endobj 2311 0 obj << /D [2269 0 R /XYZ 152.319 146.65 null] >> endobj 558 0 obj << /D [2269 0 R /XYZ 274.309 146.65 null] >> endobj 2312 0 obj << /D [2269 0 R /XYZ 95.641 139.607 null] >> endobj 2313 0 obj << /D [2269 0 R /XYZ 95.641 134.625 null] >> endobj 2314 0 obj << /D [2269 0 R /XYZ 95.641 91.039 null] >> endobj 2315 0 obj << /D [2269 0 R /XYZ 95.641 91.039 null] >> endobj 2316 0 obj << /D [2269 0 R /XYZ 201.046 83.985 null] >> endobj 2268 0 obj << /Font << /F41 999 0 R /F35 919 0 R /F40 935 0 R /F27 911 0 R /F62 1117 0 R /F39 927 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2320 0 obj << /Length 1600 /Filter /FlateDecode >> stream xÚ½ËnÛFðî¯Ð-4 Ñ\¾Ù¢@ÝD\ÀNà(@€¦‡µ’“K•»ê×wfg–¢)š vvfvÞ»3”˜xð“,rãPL?sý8šäÕ•7Ùåý•`o¸Qš é—ÅÕÍpgn“ÅÚp,V¿9o·rשæzæGž#\Z?·ªißü u/Ëëß¿^̓èP¤nˆÉlÐpª|Dž§Ñdæûn&ÂÁŠ :·âu &ˆÔQ 3 œz×µ&¸hq nËD-+˶¦UêÓc!àV„|‘e¯Æ¢‚ƒ(:ð†5´ØàzC[sÐ%Æû5Œ ÏÍ¢ÌMbüdP QkUþÀ®Ûª5£Êb€j½™Z>¥ˆ©²íÊ·²‘9å 51§’ù– ]ëÙWÏó5¤ë ãÜîª7"Sá,­’·2nAáÂàj±eÕær§ZÚ|A¨ù¨‰3ãX¬|ÇMÙÖ6sT^otñ—âS‹y‚£ÜÁ&p=7¹`8銰»ãš œ¯^äu5Á¤wGK«tGhIK.›¦5æíúF3“ÎÜ\NÇœíNå]ñ¢Ê=h¤‹`xZu°ÃÆ…Å=H&Hxž ÷Pô¾³kŠJ6E¹'Úºnß·¶|5!rÈ_]ŽäTm+¢wªÚ•²S­-^>wˆ1 1Æ"äÇ·ÏZuž€ £ѽ1òSßy¬;Î5Ô¹-²$¢¹£†D‘T%÷§¥±d¹À>­ºÀ‘×雾‘`ª&<"K5½tMQGÚv;ÛÀ? Œ•¬$¤[¶ªòïˆP¬i=6 8Œa@XÖÝ– ˆy> { EØìY–>¡Y­ŒÆj‚Äc ˆÐÆ›6p¦T\C°ÝÔWÊìîj>2z€`Wh(§ #¦§„i“ÈÄH(†£¬/ˆñþ‘z¿A O0Àæ-„•ïc®V òµ"ärO«ämS¨5 û"©^wP¹YhôòƒÃãF¯XÂ%¢›Ü¼¸Pi%pŸzzªb.ªØUÁÈÙlÀ¾ù´oá ÑFÚ3Ÿ)ÀüѸSïTÓÊtI£ev!Heýz ÷‹Ü˜ h{>ôÃÈwSÏ7 ”®Ð§môC.:@î란׺/9t°+‹gE©cXùݬA¦mX©µìËŽDƒÕ­qt85z;Bûv€ ŽO¿¦¾Y๋ëº/¡iþ€DèîÙ¸»ÏÏMSÊÜ|p' ”q=‹<ï_s4X*x£¨†üààÖ–õÇœ_¸¼ìHF…Þ$£b4 ô&1 % 'ä‚w=‹ÁŽûÇw÷ÖÁÌMÑ ">Þ>Ì º¹ù&Ó§ùÂhÄ™Y…3_vÊ+X‰yeƒÕªèNåûQÁ`.Ý=æ®i…ÛÉBÿC¢‹Yÿ* jõŸc<îÀš¿ýÉ£c¸ÅþhºY*Ž M%¡››Û»ÄÉÙ˜ÌXÖH3”|:Sæó¹ÇƒÁ¦]…™#Ûãà?+¸|Çì»ÑÔveÎeß(ÿ»…>•#uÿ_úôq¢ Z”(}œ–›;?9’fn Èõ?€3I';l" k% ÆT0* Èž{n§}h±>· ÛòºªxÖóFC SùÉ͆Ô eÍ)mµ‚/ŠÌM7 áª'‘ëù4ðÝ?|üðtí{΂¬ž?™Ý‡§Oçf‡‰›úXô1lBEÐP³iÀ¼ÀÎFi-³ŒÛUß˜Ú |)¢ÞÏß½ýð@pQíê¦#x5qSÖ› É bh±s”Ù`“Fž¡n‰ß_« ×N5Më‚ä MûNž£ûêg½†¶X¼¸ª#'³‘©ÍPÉ>Û›9[ùB¾{=â eÌm­#Ò—§ùí÷boõ)ËÈ¿Øå ßô]• ûšâlѬÊÝÈ÷+¸üÅz?ú¶òµ¬p´B˜wÇŒ¶«â¥XÁÇ5#4ÌÑSžƒëÞ¸‘£x¤ž½Í´nP'áØÎùí¥\ÏeKøœ|V'óX÷Ê…ÿ3݃¶ØÐp ¨[>(íÓÈOÑÉÃ=ˆ£Ìü£¾ù?½ä—þbðÆçÿØQj“endstream endobj 2319 0 obj << /Type /Page /Contents 2320 0 R /Resources 2318 0 R /MediaBox [0 0 609.714 789.041] /Parent 2317 0 R >> endobj 2321 0 obj << /D [2319 0 R /XYZ 95.641 729.265 null] >> endobj 2322 0 obj << /D [2319 0 R /XYZ 95.641 610.889 null] >> endobj 2323 0 obj << /D [2319 0 R /XYZ 95.641 549.938 null] >> endobj 2324 0 obj << /D [2319 0 R /XYZ 193.474 528.02 null] >> endobj 2325 0 obj << /D [2319 0 R /XYZ 95.641 484.623 null] >> endobj 2326 0 obj << /D [2319 0 R /XYZ 347.644 426.8 null] >> endobj 2327 0 obj << /D [2319 0 R /XYZ 95.641 383.402 null] >> endobj 2328 0 obj << /D [2319 0 R /XYZ 400.585 332.154 null] >> endobj 2329 0 obj << /D [2319 0 R /XYZ 95.641 288.757 null] >> endobj 2330 0 obj << /D [2319 0 R /XYZ 100.623 259.427 null] >> endobj 2331 0 obj << /D [2319 0 R /XYZ 95.641 241.993 null] >> endobj 2332 0 obj << /D [2319 0 R /XYZ 95.641 241.993 null] >> endobj 2333 0 obj << /D [2319 0 R /XYZ 152.319 231.034 null] >> endobj 562 0 obj << /D [2319 0 R /XYZ 254.624 231.034 null] >> endobj 2334 0 obj << /D [2319 0 R /XYZ 95.641 223.99 null] >> endobj 2335 0 obj << /D [2319 0 R /XYZ 95.641 219.009 null] >> endobj 1025 0 obj << /D [2319 0 R /XYZ 95.641 168.269 null] >> endobj 566 0 obj << /D [2319 0 R /XYZ 196.961 135.083 null] >> endobj 2336 0 obj << /D [2319 0 R /XYZ 95.641 128.905 null] >> endobj 2337 0 obj << /D [2319 0 R /XYZ 95.641 99.348 null] >> endobj 2318 0 obj << /Font << /F41 999 0 R /F35 919 0 R /F39 927 0 R /F40 935 0 R /F27 911 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2340 0 obj << /Length 1649 /Filter /FlateDecode >> stream xÚµXÝoÛ6Ï_á·É€Åˆú²´§¤½¤H‚¡M±në0( •)×”’zýîxG[Ž40äAÇãñx¼ß#üÉAžˆ4–ƒq˜‹0M³åI0¸‡ŸO$KD2‚­ñ I6F7·'§S8“‹<·s+w[þá½]«V­‡~˜žôýhÔÚü@ôu¡»¢þyûîdr»½@‰i<ð·7<5Á’\dÉÀC‘ËxgD0ÈÀˆ´oD0ôÓ ðΦéQÓók¼¶}P‚ƒ”¤½‹Þ°üe˜œ=+÷ëåt²•KŸ—{{qyåääØÊN£dç*_bœÂC‘‡Ò½ÉÌSà¢qìMSüF^ehÝ.x£ÒàZ Þ³ÛºX2¿™;A:yóbYÕ›¡”Ò´wë”ð–£[çVаB¸rÍFè²z¨JˆËÜmÜÓáy’Û˜•šUŸƒ Ô÷fPPq|z?™õPÔÝPzÊp^œ×¦! ìIÀºéì 35¢#“'“¥[ç«lìÆº8Ü{þ'B$:ˆÅØ $½aÖØoI0u: Çý¶ê‡™ˆòتzS`䯙ws~=!Êlt[|‡~ÿæa²×eÎñÖ "õ j"%}X]’³E Î(b/;LY]Ѝ‚>.FÌ"ÈÎ8+Ü.‘NGîé†Êé»}m«†rÑÖîa*m{²Øáì P+m5ý6ɧ™‚KYÆÔ…Y(çð(ßw84‰€Zúä[±\Õ¬JúýC?ξÇw=çÎF'ηî 8:D’ mœ‘Pú{¦¸¶å¬®˜3+Œ‚“òHÑqÎ Îý±ç2Ïyî¹¼ùéòÙA…ÌDêºXoˆ:ý°„¾wJ ”èH»ó®ú<=LQ? DŠpå"Jè†é0„v 56”‰·¡LʈˆEaˆ°‘o¥m¶yk5k‰óEÑÁ,Ø!| @I«þ—axˆX‰gVòé·ß_PÚÔÿÈ%ô¥Z­Tùº¢1 z›ÒÞüº$Ç–År®¾vMa§ óÕšZüš*cŠ{§¦‡n)´&­ÖEKƒ €õœezvVŠÍŸ 1g [6°²}!‹wsß>»µõŒ.‰9¥ºíëᕦۊªbÄJC›é²I1[Ðdb½ÔÓ´¥].TØå¼‚9µ* M”b@`Ó„¸×´’ôa ?¸‚g#[©iÜϾïÖ…¿—ê4y·UÃùÛ¬vô{õµ«Hÿ øÂPqýA7Úÿ›Ê´92?øÎE çøùx ³þÚBhźDïjìÖÕªåÛðý½È&yÄ À4ËS2±Ì…•ŒkŠ"rlËGÖ‹’O:ƒ0S âÝÚÆ‰*E<˜„òž›HŸ@MÏ v²0®¶‡‚bU7†À±šo\­s{?†ŸÀ^Á€Üh;úÿýð“ &~ø¦I.’ðèÿ?â~Ç¥80¿ôï—(yªEB:åTþ"qŒ„endstream endobj 2339 0 obj << /Type /Page /Contents 2340 0 R /Resources 2338 0 R /MediaBox [0 0 609.714 789.041] /Parent 2317 0 R >> endobj 2341 0 obj << /D [2339 0 R /XYZ 95.641 729.265 null] >> endobj 2342 0 obj << /D [2339 0 R /XYZ 95.641 716.314 null] >> endobj 2343 0 obj << /D [2339 0 R /XYZ 95.641 666.611 null] >> endobj 2344 0 obj << /D [2339 0 R /XYZ 95.641 637.091 null] >> endobj 2345 0 obj << /D [2339 0 R /XYZ 256.671 628.941 null] >> endobj 2346 0 obj << /D [2339 0 R /XYZ 444.054 628.941 null] >> endobj 2347 0 obj << /D [2339 0 R /XYZ 312.294 607.024 null] >> endobj 2348 0 obj << /D [2339 0 R /XYZ 163.161 585.106 null] >> endobj 2349 0 obj << /D [2339 0 R /XYZ 95.641 573.933 null] >> endobj 2350 0 obj << /D [2339 0 R /XYZ 95.641 556.498 null] >> endobj 570 0 obj << /D [2339 0 R /XYZ 231.481 545.753 null] >> endobj 2351 0 obj << /D [2339 0 R /XYZ 95.641 538.71 null] >> endobj 2352 0 obj << /D [2339 0 R /XYZ 95.641 533.729 null] >> endobj 2353 0 obj << /D [2339 0 R /XYZ 95.641 511.064 null] >> endobj 2354 0 obj << /D [2339 0 R /XYZ 95.641 475.457 null] >> endobj 2355 0 obj << /D [2339 0 R /XYZ 95.641 429.888 null] >> endobj 574 0 obj << /D [2339 0 R /XYZ 295.55 418.929 null] >> endobj 2356 0 obj << /D [2339 0 R /XYZ 95.641 411.886 null] >> endobj 2357 0 obj << /D [2339 0 R /XYZ 95.641 406.904 null] >> endobj 2358 0 obj << /D [2339 0 R /XYZ 95.641 385.554 null] >> endobj 578 0 obj << /D [2339 0 R /XYZ 344.406 374.595 null] >> endobj 2359 0 obj << /D [2339 0 R /XYZ 95.641 367.552 null] >> endobj 2360 0 obj << /D [2339 0 R /XYZ 95.641 362.57 null] >> endobj 2361 0 obj << /D [2339 0 R /XYZ 95.641 331.542 null] >> endobj 2362 0 obj << /D [2339 0 R /XYZ 95.641 293.34 null] >> endobj 2363 0 obj << /D [2339 0 R /XYZ 95.641 228.045 null] >> endobj 582 0 obj << /D [2339 0 R /XYZ 305.433 217.086 null] >> endobj 2364 0 obj << /D [2339 0 R /XYZ 95.641 211.98 null] >> endobj 2365 0 obj << /D [2339 0 R /XYZ 95.641 206.999 null] >> endobj 2366 0 obj << /D [2339 0 R /XYZ 95.641 161.793 null] >> endobj 586 0 obj << /D [2339 0 R /XYZ 360.795 150.834 null] >> endobj 2367 0 obj << /D [2339 0 R /XYZ 95.641 143.791 null] >> endobj 2368 0 obj << /D [2339 0 R /XYZ 95.641 138.81 null] >> endobj 2369 0 obj << /D [2339 0 R /XYZ 95.641 116.145 null] >> endobj 2338 0 obj << /Font << /F41 999 0 R /F40 935 0 R /F35 919 0 R /F27 911 0 R /F39 927 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2372 0 obj << /Length 1050 /Filter /FlateDecode >> stream xÚ­VmoÛ6þž_!äËh ¢IÉzÛ§¤™½¸hZ`qÑvë0Ð6m –eC’ÝåßïŽGÙVìÄM;0ïHžîx÷$À´1#==(ÎÏQ"žû¶*¾ÃHbT¶ ¢:ª;ª£Q%Ì:Žu³d¨^ÚÙ†çÇ5@Ò›$ïyŽqÿÉ£WÜKÿÉæ2:OùQÚÐ:Ï ‹ªX”]1XÙêÜBÙ¿“.ÇæÝSÉM¢^Y åÊ@ŽŽ=æÎß(û>Éš¤Yn“˜kŠÁÜù•¥Î¸)‚‰¾—°4›§Í{â²ÅÈêÊIV‹úà£üµ8ˆ_Â~MZ±±yBî§ÙÄ’?³ñP¢@À¸_õfI’×½&º'Þ'¾Ýôad7j©IÂql ûO|;Pÿn«YÇÏâ•hH±ÇÚÖ\AÐ HÅv¦ói£‚Zjp~dð÷õ¬wà_͵ q,ŒK1ªæI¶Uì›VEáÐ4§+R³b’o¦'>ÑÜLW-õ¡¥âßèîêD“ºÿ€óxq[ñÓpзâíÝðúwÈG=€G$<ðZÏðgü~øÜ[^Úÿ† Uendstream endobj 2371 0 obj << /Type /Page /Contents 2372 0 R /Resources 2370 0 R /MediaBox [0 0 609.714 789.041] /Parent 2317 0 R >> endobj 2373 0 obj << /D [2371 0 R /XYZ 95.641 729.265 null] >> endobj 2374 0 obj << /D [2371 0 R /XYZ 95.641 693.838 null] >> endobj 2375 0 obj << /D [2371 0 R /XYZ 95.641 628.543 null] >> endobj 590 0 obj << /D [2371 0 R /XYZ 310.683 617.584 null] >> endobj 2376 0 obj << /D [2371 0 R /XYZ 95.641 610.541 null] >> endobj 2377 0 obj << /D [2371 0 R /XYZ 95.641 605.559 null] >> endobj 2378 0 obj << /D [2371 0 R /XYZ 95.641 583.616 null] >> endobj 2379 0 obj << /D [2371 0 R /XYZ 95.641 547.288 null] >> endobj 2380 0 obj << /D [2371 0 R /XYZ 95.641 501.719 null] >> endobj 594 0 obj << /D [2371 0 R /XYZ 341.009 490.76 null] >> endobj 2381 0 obj << /D [2371 0 R /XYZ 95.641 483.716 null] >> endobj 2382 0 obj << /D [2371 0 R /XYZ 95.641 478.735 null] >> endobj 2383 0 obj << /D [2371 0 R /XYZ 95.641 435.467 null] >> endobj 598 0 obj << /D [2371 0 R /XYZ 359.639 424.508 null] >> endobj 2384 0 obj << /D [2371 0 R /XYZ 95.641 417.465 null] >> endobj 2385 0 obj << /D [2371 0 R /XYZ 95.641 412.483 null] >> endobj 2386 0 obj << /D [2371 0 R /XYZ 95.641 390.541 null] >> endobj 2387 0 obj << /D [2371 0 R /XYZ 95.641 354.212 null] >> endobj 2388 0 obj << /D [2371 0 R /XYZ 95.641 308.643 null] >> endobj 602 0 obj << /D [2371 0 R /XYZ 355.972 297.684 null] >> endobj 2389 0 obj << /D [2371 0 R /XYZ 95.641 290.486 null] >> endobj 2390 0 obj << /D [2371 0 R /XYZ 95.641 285.505 null] >> endobj 2391 0 obj << /D [2371 0 R /XYZ 95.641 273.953 null] >> endobj 2392 0 obj << /D [2371 0 R /XYZ 95.641 238.346 null] >> endobj 2393 0 obj << /D [2371 0 R /XYZ 95.641 182.914 null] >> endobj 606 0 obj << /D [2371 0 R /XYZ 373.894 171.955 null] >> endobj 2394 0 obj << /D [2371 0 R /XYZ 95.641 164.757 null] >> endobj 2395 0 obj << /D [2371 0 R /XYZ 95.641 159.776 null] >> endobj 2396 0 obj << /D [2371 0 R /XYZ 95.641 138.441 null] >> endobj 2370 0 obj << /Font << /F41 999 0 R /F39 927 0 R /F40 935 0 R /F27 911 0 R /F35 919 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2399 0 obj << /Length 1899 /Filter /FlateDecode >> stream xÚXKsÛ6¾çWèN©“!øfzhDnÝIÜÛi§Óö‰‰)*AZñ¿ï.|H¤=MG.‹Åb_ø ¶ráÇVièD[Å^êxQ¸Ú•¯ÜÕÌüøŠ Ÿù0¯|'LbxwÿêͬI4òW÷{-wŸýa½Ïù¡ÍÚöB×b}?+Ѩo‰þÄ«Žë¿î~µ¹6`nè°(XÙÃç&Ø~è:Q®lÏsR VøéÜŠÍ^ ±¶/µ˜ÍR0$ “S~½§o!+Á„½fHþ-«‡‘OÔ1—»œH©è[J¥ÉFüÓÉFdx*°Àf®“†©¶ä‘@>¸Ë]%`h„†‚D­Ð°Ä µ »¶#×µ~¸NÓˆ¼¾ùpÝk9^ßü!‹ëî—Ï·ï74Øüº¹¹'„ˆø|·¹µ?lÀW×7üݼÿåöÃÝüìA ‡†€²ÈI!Ö¸ßG¹ÁÝŠ¤ýp iÈE&®ª;ꦅx ³TÝ5k–X;¶%®%EÕÒ¯2"ê6‡tŒë‚Æä".²30Wüéº^%Œ¨æ‹]­¿†×>„rˆþ}zVÝÑ^;^™v¶ö¸m,F'ÚÆX¡’‰µ¼…½Év¡ˆ)+#w¬‰8ò'õ–æ„Ôg0zô²º{ÈÅD|!áú ÞÊÚèÛ“xy"œX%ï7,EÕ]œ$n¢M/Ø~äY’#Á¬]]–àUEl\Ž\­‘™|”Ö¶žÐÀ‰=/eñDô–¬9*ABjGNú%îs3…‘iTK\~8ÐJu8/²R>ä÷Àµ¶‚¾e­ gWW’2#`Ö|Ÿ‹ŠO:œ Åɨºh2ÒǺ¡–  ¢úxcÚ¬ ™{ÈÆSÍÍV°H{‰¿1 ÑZ²%–àJbØ‘nkšCkˆC¦ uRz!XB•€#Þo1fþ˜ö¨ó4í ëøÂ÷@ޱÌçx Η†½_ÒH;ý ŠJ'"ˆPAÑç œoͬïh¢Í±Ñ¢8Õ:²0ÇØwfß}Ý!+ÕòjgDŽ9º -šä:p+,¸4¶L*òVLmÛ“ÏèV$7©(ÒÞ…VS“Øâp[dró¥äâôè>&wyadû-ÈLú8žM‰L¶/l׿¼7œŸ"ç‚°ÁÌåñ§MÌ!3*—>ƒû® þRmÐÝ›æ v„Nh3>Ó}޲¦MºcÒZ÷ì2ó-6“ÚP"ØÊB¶²¿ÇNnü8h“š‹ì¥ <ãör™T‡n‚3»öuQÔÇÁÞ¯²ª{;ßÀRäib F¤•þ¦‚ˆ€ïZhÚí²š¾:/€@c#7­™OCÝ•ßkŽ@&6ÚÁVæØ»†ú<.ÁŒÞºÁ d¨YÍ‘ŠXXlnõqíº/ ëèæy3ë.³Ìxäyƒ#— >БÐ>ã-ßr%A—V½ÑÕñ¼Rˆ&:£Áôþªý™ÕÕ3®új«ƒ™Õ‹:uM‚Õ_atøœÑ³8}µÑÑÌèEÿÃèŒæ[ÑvMuZ„¡4Å7/dÛÔ†í±“ã÷P …w>òFÒ݃?ÝÐ4¿é²Ö¼iy0äýú¡ç=…[žMáhfg*Ç®²€U$âË8šÀ@°)¹,ø¶Mj,‡ÄØFã¨G°¢_4jˆàöåV÷}Ô^ÔÕƒ’™™5(#Ö&˦·§«–Ð '¦Ð}È)´U“‰ÕˆÅéSè”óÍŸKz‚%§ÑÄB¤Ú3ø­ºr;ük¡Wçîá,úí‚ÈV¶…¸xöi€ý¢kó!…w´ óå<ÆWk ÜÓy( ±k—Q¹y±ENÐ<ñàœÿågG±PyQ˜:¡·ø§_à&N`¼ôŸ£Ÿë‘Ä£U½Ê@þ{oendstream endobj 2398 0 obj << /Type /Page /Contents 2399 0 R /Resources 2397 0 R /MediaBox [0 0 609.714 789.041] /Parent 2317 0 R >> endobj 2400 0 obj << /D [2398 0 R /XYZ 95.641 729.265 null] >> endobj 2401 0 obj << /D [2398 0 R /XYZ 95.641 685.315 null] >> endobj 1026 0 obj << /D [2398 0 R /XYZ 95.641 609.016 null] >> endobj 610 0 obj << /D [2398 0 R /XYZ 447.915 575.831 null] >> endobj 2402 0 obj << /D [2398 0 R /XYZ 95.641 567.778 null] >> endobj 2403 0 obj << /D [2398 0 R /XYZ 95.641 567.778 null] >> endobj 2404 0 obj << /D [2398 0 R /XYZ 95.641 463.382 null] >> endobj 2405 0 obj << /D [2398 0 R /XYZ 319.051 455.233 null] >> endobj 2406 0 obj << /D [2398 0 R /XYZ 95.641 442.461 null] >> endobj 2407 0 obj << /D [2398 0 R /XYZ 95.641 260.344 null] >> endobj 2408 0 obj << /D [2398 0 R /XYZ 95.641 223.413 null] >> endobj 2409 0 obj << /D [2398 0 R /XYZ 95.641 168.11 null] >> endobj 2410 0 obj << /D [2398 0 R /XYZ 406.621 157.151 null] >> endobj 2411 0 obj << /D [2398 0 R /XYZ 95.641 143.382 null] >> endobj 2412 0 obj << /D [2398 0 R /XYZ 95.641 125.948 null] >> endobj 2413 0 obj << /D [2398 0 R /XYZ 95.641 125.948 null] >> endobj 2414 0 obj << /D [2398 0 R /XYZ 151.771 117.798 null] >> endobj 614 0 obj << /D [2398 0 R /XYZ 264.527 117.798 null] >> endobj 2415 0 obj << /D [2398 0 R /XYZ 95.641 112.693 null] >> endobj 2416 0 obj << /D [2398 0 R /XYZ 95.641 107.711 null] >> endobj 2397 0 obj << /Font << /F41 999 0 R /F39 927 0 R /F40 935 0 R /F27 911 0 R /F35 919 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2419 0 obj << /Length 2273 /Filter /FlateDecode >> stream xÚ½]sÛ8"/7'ÏÄZ}ËÊ=%mºíN6í¤îÜìÜÞ-Ó–¶’èÓGï¯?€eÉ–7——?„@@¤Ý+~îUÚQà^Å^b{Qx•–-|ùùËΕo‡‹?Ý-ßýô¨;‰ü«åFS,×ÿ²Þgb×Êz6÷BÇrm¿7²nþNð¯¢êD1û÷ò—w÷Ëžuà.ìÀw¯æ½„Sás?vìFϳ7è•ðâs%$ˆŠÖ]=óKÍÜÐÚ7Œ“8{–UKÓZ¦JS­uúé£ù¹y!ˆt`t5ëe–7³¹ïÖ>Ÿ¹VQÐdUçÕ–Àn‡£o šyÓBm#h‘oIÒqõÌÝP× }_ècÕ•+0iX6}¸eˆ£o$³iY;ßZ+ÉD•jqg`š¹ û½uÞì <T­È«ªKÑæªâ/+Õ¡©üÀ’"Í©õ¶ þÝ oÝv+\Ôð*[EK3µ"|«éÊRÔùŸrB3ͽ¡`dšìe‘ªR‚DW·4ã?È~„.õöX1ƒF2m%ÞhZUÒŒ,‡9Lãr·Ãh››ððÛ)<^.Gžj3}.ÞuÞ ê¼ØÁ&s œpÔy1E¢ ° li‚a¢¿Ñºà¨J8 ¼Džæ{ ¸pì]®göRašà¼ÂhPMyW°•)3×u­io^veü?\é’¯n×3×ÑzÀDÐШN»/•§þ¤y VS fL³­X  Žõ–\ã- ’v²6§¦xèTM°( ÝVð,`¶É€mü NŒk&G¶{L0°äÂaåñª®i²e^X1­…k‰îE§Ã}ª1+â´Ç8¤@˜»al;Ñ(š”Ü-«Ï5,MBKïÆ®ÑN"r`ÄzÍá!Ä\kO°v ðÒNIÂó8œáCƒEÆ+ìÀ¹Z€]"´‹%¶Ë=äù!=a@HG~ä2ïG´D  d| 3G°+YBn%Í@“ÀRF‰jMÀ®ÃŒˆÐ¨4WÌ$Ó&½5iŽÑŽÒtêˆCˆ0Ôæé2›:¸k¹]aŽS¯9ÎòææÜ|°4ŽôÁZx‘æ9"rëÛ—ïO†?|DÒiÃO÷/~\~^> È; òc;Éü˼-ä¹2s&:çyû}ùéž·]›Ïü> gqiÙ1]¤ý€V¨èj ÍDµ•·™ìEõ\‘Ä>‹:1ÑXžYb*¦W›Ø~Ál¾Ï–rÀ:جó&ìõ o‚àì€ NwìÅ­‚#CŽ……®ƒìÉÙ{9µ¹0±ã d•O\|¶¹ ›3¡Å®Õìdš‹Â7T½>©¨ˆ°kä8ño!?šò ™™It€%¸8Ê9í>›{£s°REžR[S‰RÔf¢¥Î†4ÔŠ?q(ç/¦úúÚɨíÓÌTÿü³1´Múp’0ŽK ?›ß¤<®> endobj 2420 0 obj << /D [2418 0 R /XYZ 95.641 729.265 null] >> endobj 2421 0 obj << /D [2418 0 R /XYZ 95.641 716.314 null] >> endobj 2422 0 obj << /D [2418 0 R /XYZ 95.641 716.314 null] >> endobj 2423 0 obj << /D [2418 0 R /XYZ 151.771 706.351 null] >> endobj 618 0 obj << /D [2418 0 R /XYZ 257.931 706.351 null] >> endobj 2424 0 obj << /D [2418 0 R /XYZ 95.641 701.245 null] >> endobj 2425 0 obj << /D [2418 0 R /XYZ 95.641 696.264 null] >> endobj 2426 0 obj << /D [2418 0 R /XYZ 95.641 640.1 null] >> endobj 2427 0 obj << /D [2418 0 R /XYZ 95.641 640.1 null] >> endobj 2428 0 obj << /D [2418 0 R /XYZ 151.771 629.141 null] >> endobj 622 0 obj << /D [2418 0 R /XYZ 256.965 629.141 null] >> endobj 2429 0 obj << /D [2418 0 R /XYZ 95.641 624.035 null] >> endobj 2430 0 obj << /D [2418 0 R /XYZ 95.641 619.054 null] >> endobj 2431 0 obj << /D [2418 0 R /XYZ 95.641 573.848 null] >> endobj 2432 0 obj << /D [2418 0 R /XYZ 95.641 573.848 null] >> endobj 2433 0 obj << /D [2418 0 R /XYZ 151.771 562.889 null] >> endobj 626 0 obj << /D [2418 0 R /XYZ 326.972 562.889 null] >> endobj 2434 0 obj << /D [2418 0 R /XYZ 95.641 557.783 null] >> endobj 2435 0 obj << /D [2418 0 R /XYZ 95.641 552.802 null] >> endobj 2436 0 obj << /D [2418 0 R /XYZ 304.375 541.968 null] >> endobj 2437 0 obj << /D [2418 0 R /XYZ 432.535 531.009 null] >> endobj 2438 0 obj << /D [2418 0 R /XYZ 95.641 496.319 null] >> endobj 2439 0 obj << /D [2418 0 R /XYZ 211.806 469.539 null] >> endobj 2440 0 obj << /D [2418 0 R /XYZ 211.806 459.676 null] >> endobj 2441 0 obj << /D [2418 0 R /XYZ 95.641 423.91 null] >> endobj 2442 0 obj << /D [2418 0 R /XYZ 249.86 412.951 null] >> endobj 2443 0 obj << /D [2418 0 R /XYZ 223.132 401.993 null] >> endobj 2444 0 obj << /D [2418 0 R /XYZ 237.485 380.075 null] >> endobj 2445 0 obj << /D [2418 0 R /XYZ 209.643 336.239 null] >> endobj 2446 0 obj << /D [2418 0 R /XYZ 95.641 297.823 null] >> endobj 2447 0 obj << /D [2418 0 R /XYZ 211.806 280.648 null] >> endobj 2448 0 obj << /D [2418 0 R /XYZ 211.806 270.785 null] >> endobj 2449 0 obj << /D [2418 0 R /XYZ 222.565 260.922 null] >> endobj 2450 0 obj << /D [2418 0 R /XYZ 211.806 251.059 null] >> endobj 2451 0 obj << /D [2418 0 R /XYZ 222.565 231.333 null] >> endobj 2452 0 obj << /D [2418 0 R /XYZ 222.565 221.47 null] >> endobj 2453 0 obj << /D [2418 0 R /XYZ 222.565 211.607 null] >> endobj 2454 0 obj << /D [2418 0 R /XYZ 222.565 201.744 null] >> endobj 2455 0 obj << /D [2418 0 R /XYZ 95.641 175.841 null] >> endobj 2456 0 obj << /D [2418 0 R /XYZ 427.14 164.882 null] >> endobj 2457 0 obj << /D [2418 0 R /XYZ 95.641 108.274 null] >> endobj 2417 0 obj << /Font << /F41 999 0 R /F27 911 0 R /F35 919 0 R /F39 927 0 R /F40 935 0 R /F62 1117 0 R /F26 909 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2460 0 obj << /Length 2272 /Filter /FlateDecode >> stream xÚˮۺqŸ¯ð¦¨ ÄŠ¨·Î¦Hç"Emâ´(z» -úX7²äZ’ó÷eIÖ n /4çÍáV ~j‘EnªEâg®G‹Ýñ…·x„™_^(¡TSÉ"p£4A‚?o^¼zk27‹ƒÅfOt›ü_Λƒ>µæ¼\ù‘ç(—¿ßsnþÈðG]uº\þ{ó—ëM/@y‘«âp±ê%LUXaä^€ï&É@ o‘‚ñH‹úxÔUÞ<,W*õ<ç·å*†ÏÇúbÊk˜q®Õrx0ü>ïN m@Á㯦4»V¨ÿø¿uE‹v¼zD7G¬@Ët±ò=7ó)³96}_wâ˜úÔuÕðàdÎûú|D™Óވ˲¾Õ#õŽV< @0r¥"7 ™¿+ýL9нùPT¦á¡Îs ñç¼T™cö•:¦ÚF·µ|‚¨Ì•õZKÉ w5}sáÝâ×»­ÞÖm[®÷Ö'¾ê­/EYÑÔ ?œúÌß½>å±H^*g ÐíÄñU7 \Š¦Ø–†…°dùäEs*µ0mvÌùVŒºŒ,yª;NDT!«ó‘Ú)©=t:„‰œ _a­[‰fVv.zä\˜;׉³qÓ‘H^‹²d¨>YS`ÀŸ³o‘âÌßÞ·ßE•“c‘»–"éæ[S9Ö·3¡µŽÆí%âe„ÈËA”޽LS+qˆŽÅïб¸Äã9¡cq<¶ï%/k„zUŽ~8;fƾs¤²E>´©¸ÆÁ„f Ko.@·à½ZÀƒà@Sæã¬Éyn”@p ùÕ‹<ÙHPl›‡kÉFÍŸùTë:È]2¾æʃ¥6ƒµ@ì$”mÉU¬ÔUÕ—«žWžƒºj.HçÐ¥sè'NiÚ†'H[NŽkcxŒ€êÎô\J948É:ÁV¨x¼ÇœGÀäØÓ‚ЍQ/Bf9(÷™PlžuãÏvlø€Y8ÿ\f¾Ã©ܼD¡Ôä¶;Wœ÷¡$z`;è÷/Âh ~íþExš"¼ƒ…Fä{Aëeÿ⸨&r`ÿÎÕe®—‡õriÏÚ¿ž­—=a¢w O6³63€mfÄ“.0Á›e73LL}NDŸê™À=“äEÓ'¦«ÍÕAc®ÏùÕ;?œ÷ @Û’Ð Ÿ+5¬MRg-Cd†ïqêÀøL‘óxOƒÄÁºëVo5f>¸÷톕>è7¾ñ>Áд•B9η cÐh¤1¤#BZfÌXÅ…Ã á4áhq)¡ÌŸQX9Ye qgrì|ìkK# ÆF­¦ºç°ä‹a÷§‚:ÃTzÀ[ÎÝ9-Ñ^&tºùÞL„ÛŒ(r(Åþi¦šfàŽ‡{ ÝÌÜ:XL‹Ôżbwàžï¤Ç¤$È¥Åv´f˜Ô@઱ø"ÔÊFëOÖ Ír!ÅwóÄ@}¶RöÕý `}N™÷½¡äœÆÏ¸CAôV¦IeRX®M’¸è²3/yöZ´ÆRéB Äu×ò˜÷<”<Â5u¾ÊzXuŸ.[jàÔ@¡"dfìßÌŒc7ê3âËúݧ{Oø *Òݽ+\¢ß•YÊõ•¥ã-Ñž s¡f-µp:ê¥3ng!­+N]+ôÒ†*ie™zd¥¸1eÙÈ1˜µ\1Øó£ºö?Ö29¦¹½Î—ª/WÔ!$Ô‘CÇÍ-ÂLU³ÍÏÿ]Ï|¹?ÑöO"ÚþRÃpˆ}™ °.!*˜¼>Çm6`zn’Ú(ÿÁÌÆL±5a/'óå#9Š_ò ï¡¹³ Ý¢,ôYЃƅc%n€·ÜÙæ¸á¾®àx:IÛþðÍ!†-£™ö0â⇶ߌƕw’Öàæ0 W^{‘ußíØjͺ…VŒõåFá$AEu/“d÷R›ì€âd÷änáÙË0ÖIÔ2ªÏu¤«yfƒ•i¯“ËøÅçf¯»ÒRך¢™©òž”÷ˆH<.´ë¿¯©º,`u˳b[~Ƶ[&ß¾Þ¬Ÿüë‡×ož|ÿéíû^.h= ð™âÓë3¼eòËçkÉλõ"áëço_f:ÄN:Fx§ö}®Ÿ¦pc¢2@2ÿÖ5-#¥þ%}&¤·ñÄ¥ÐRtì—õÆv ]¼RÛø3+‚gçô@Ü}L5ªb ª”/fáÚ ò¨ë>Û±­´e½¥û‡RÊy–Ñ®®~õ<ÿ±ë+ Sšû©ù»ä6~Ge;»^Æ«GÃC1n|ॱ«Ù§“ć bà+¡,a×»,í3zñZ4†‡|CiNÄð&Cˆû2„îî °@W²à*+åÇn©Q,˜¿ ßI7s†ÅÊÍÒXôì¨;Ë|8:n–1Wïi Ã"Un"€x,.B&F$)Šdš1ÍÓq[—ÅŽG•>š;ÙB¾ Õed!=!à[Cטgß?è™…¤á›F=|¹À+Ìè D4ŒúM„àíÄÂQÍ[™Ihð(æè4.O|5Æò 1»¹ §kÆŽýv v]÷! Ü0H~Þl¥n˜„Ãf‹ÔžT™è+3nµGM÷øhj8Cûú‡½¬?<н7„RÀ‘É }”š–jSCzÄÁˆÚ1Jš1DöQhxLa@bjI·éPÚºº4‚–ö·çÒœøyÀ½Lú» o¦(@sï<{Mïy!Ô0l˜ Z!WÞ0°`(à K_ÎS¿¬ß¾ùü‘'ÁcÛ›hœ îkħ)Ž ïT ¼P̼CÑf·^ jËtyâvbÀ Ÿ€E=ÚJõ¼ÖUn{}@_OÃ+bê®Ì×w{¹ç”˜üÛ°JŠÑb‡p[ƒ†læÿ†ÐƒT±!üÙßA6å$>¯²,ÿ ùTendstream endobj 2459 0 obj << /Type /Page /Contents 2460 0 R /Resources 2458 0 R /MediaBox [0 0 609.714 789.041] /Parent 2492 0 R >> endobj 2461 0 obj << /D [2459 0 R /XYZ 95.641 729.265 null] >> endobj 2462 0 obj << /D [2459 0 R /XYZ 95.641 685.118 null] >> endobj 2463 0 obj << /D [2459 0 R /XYZ 95.641 667.776 null] >> endobj 2464 0 obj << /D [2459 0 R /XYZ 95.641 632.513 null] >> endobj 2465 0 obj << /D [2459 0 R /XYZ 95.641 581.101 null] >> endobj 2466 0 obj << /D [2459 0 R /XYZ 95.641 556.797 null] >> endobj 2467 0 obj << /D [2459 0 R /XYZ 95.641 500.722 null] >> endobj 2468 0 obj << /D [2459 0 R /XYZ 95.641 500.722 null] >> endobj 2469 0 obj << /D [2459 0 R /XYZ 151.771 489.763 null] >> endobj 630 0 obj << /D [2459 0 R /XYZ 330.747 489.763 null] >> endobj 2470 0 obj << /D [2459 0 R /XYZ 95.641 484.658 null] >> endobj 2471 0 obj << /D [2459 0 R /XYZ 95.641 479.676 null] >> endobj 2472 0 obj << /D [2459 0 R /XYZ 302.165 457.883 null] >> endobj 2473 0 obj << /D [2459 0 R /XYZ 95.641 445.111 null] >> endobj 2474 0 obj << /D [2459 0 R /XYZ 95.641 402.291 null] >> endobj 2475 0 obj << /D [2459 0 R /XYZ 229.965 380.374 null] >> endobj 2476 0 obj << /D [2459 0 R /XYZ 287.368 380.374 null] >> endobj 2477 0 obj << /D [2459 0 R /XYZ 95.641 346.003 null] >> endobj 2478 0 obj << /D [2459 0 R /XYZ 95.641 346.003 null] >> endobj 2479 0 obj << /D [2459 0 R /XYZ 151.771 335.044 null] >> endobj 634 0 obj << /D [2459 0 R /XYZ 326.464 335.044 null] >> endobj 2480 0 obj << /D [2459 0 R /XYZ 95.641 329.938 null] >> endobj 2481 0 obj << /D [2459 0 R /XYZ 95.641 324.956 null] >> endobj 2482 0 obj << /D [2459 0 R /XYZ 304.173 314.122 null] >> endobj 2483 0 obj << /D [2459 0 R /XYZ 383.881 303.163 null] >> endobj 2484 0 obj << /D [2459 0 R /XYZ 95.641 271.069 null] >> endobj 2485 0 obj << /D [2459 0 R /XYZ 95.641 166.476 null] >> endobj 2486 0 obj << /D [2459 0 R /XYZ 95.641 136.767 null] >> endobj 2487 0 obj << /D [2459 0 R /XYZ 249.517 128.618 null] >> endobj 2488 0 obj << /D [2459 0 R /XYZ 225.374 117.659 null] >> endobj 2489 0 obj << /D [2459 0 R /XYZ 226.824 95.741 null] >> endobj 2490 0 obj << /D [2459 0 R /XYZ 324.51 73.823 null] >> endobj 2491 0 obj << /D [2459 0 R /XYZ 213.659 62.864 null] >> endobj 2458 0 obj << /Font << /F41 999 0 R /F40 935 0 R /F35 919 0 R /F27 911 0 R /F62 1117 0 R /F39 927 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2495 0 obj << /Length 2383 /Filter /FlateDecode >> stream xÚYÝsã¶¿¿B/™Ê3C€ßÉCç’Úëä®éÅ×4Óä!‹µD("iÙÿ}ö )Ò3nì.Àîb±øíR‹þÕ¢H‚4V‹LN“Åzÿ.\<@Ïßß).¢ É3ìúîîÝ×·0ºŠ4ZÜmhÄ]ùßå÷[shíñj¥“p©þ~iì±ù ÓMÝ™ÝÕowÿxws׋ŽUÄ‘Z¬z —ÊWQiž,VZ…Š{+¢djÅñJåK»vô-›«UåËÓÖÖL½¸‰b¹¾RKS3ÝTûÃî…´Ýú‘)ûdëV˜“‘þJæ`>,ÍIÓÔ%÷o̾ò².l pé`æJ…A‘dîݶjØ;þkøÓºCµrkZ¦öh91,Ã=YVSŠ˜ZÄøïá`ë²z>+O‚"ÝÇ€ñ%NNC^2óÖn¿§E!Ÿ…`‰eÆ3·÷¶î˜"ëQÂï]õdv½˜Ö1g‚°gÅyÏtª!ðRÙ¹¯üˆÁ®ª4ˆu$Î&¡ÍO¦Ú­hQ+A˜#ÇšûÚªyÇ´S`ÇÈ~ ²uØïŽüõ;‡ô=ùÔß`¸°Ÿm}ͼJæCÌïµá/,ß«úAo1V˜öÖ—ÑñíLp˜ §Héecž@‰Ä&mÙ$[c‘2—íº‡íu?•‡aSÑÆ!ÛÕ"±©jTõkêµñ’Ëjƒ“62·^Ûk™_{±¤Ó%H쪔O-F­²¥ñ† ûÀ}W2ëTëüžV,ÝnçNì]àð<·ÇÙ2ë×0 Í®q×£ÉéòѾ0Ú‰@Ú245¿¶'>F—žžØ²j;óryûxºiMÛÉð{#éOuÛcÀÁUu Ö«oø(Äá"‡£2À­Tä:!Ã~ÜYƒÁ™†ár½uÎÓ›£Û3ÂY?±Ï>æ;´•«Ò²€åféb²ñÌlÐN£>ÔÞ-ÓÏG»aÊt­Û’^­ÍO ±eà½k[o‚“)ëîx¤ÅƽXöptV«EíMYµ¯ÎCZ-kw’E:Ñ^–—vî)Ûì^f4E¢é»#Ÿp¤i§ÇzB $\(¢ëÚ^WïHT‡û5£$%ŸmÛ뱹ㅡ† ¥oT¸J‚(§¸ÈtÊI˜1¶v¥rÿ?žöÒS¥£á© ¡ùxÙß0±Qqû'»³ëVFÿμuU;Åj1FÃéÑz˜`0ü:‰y‰< w{ܸãž3Y{|>ßxJÖƒXå/ŒÓH‡Ëªý¡ª-"™V讆; øì ‹Çáf`7c©–ÀéóÜ¢juà'ú˜Gc~Ôy`½«tá”'œ‚àÛ§ <Í€!ÐÉS¨0ød&žª¦âlJD²;tâÙÍZ’È­™ÅµŽd„¢‡TDâ©Ùs¥Â_mZëaMÑøœü&x:Sœ è8)ƒæ©Úí˜r¿h°. úÄKb‰=Χ8N“É¥(Ý€HÑtöj,5ÄP÷ê̦zã”(òþ´øX#ÿR×p•0€\ _ïRLmVº¶B°W#Ý{xãÕ]3³qYNÝã—(‡à<_¹ÅYæ~+Þö,[Œ%_s£¯:3>…dE÷\í*LíKé”+¼‹I¤ék»Øp5%‰¿å$)Ýr€Áùˆ®‘Giñ GJ†d¦H¥ŒH|zOzÿÏ}¡~ ª*2]íúü݈á¼ÐHÁ¨<?Ù=Ä:Wº¹Ä?‡Ž@…^oÁsÓt":@Œ ïüì8Èy£iY¯4`þWÚév~´Ý¿Rõ´çÊáÕ'¾š‡ŒÄÿ¿)v+y,˜Å¤1J¶St‹ºâDüîÕLÐ-VZ†dþ… ‹ óÀœ¦(&c2}zÃ1Ý×# äå RèMí,6•» ô\ÖKÔëÓÅ@tšø°È91÷Ï„…¯,,µ4ï+pýÒ¦~a‚£üsðìóÚÚ©ïTyâàç¿}˜q^¨ÈÇõõTFD…Ï·ï?΂W˜åoðÓ?¿|ž1Â@y+ñ€LRYê¼ù÷Í\ŠKà{( Ø/·´à+ûl$ÔñÉ'ˆ!’ÇO¿p—ª6ü媈GkH¥3&0¼Æ§Agd˜{ÊûHÊ[I¶l¶Õ¡ñ<ü¦íu™ú䎴H¾ßCºÇKëÅJ«4 ²ÌN“"Hôè'¥W¼ŠÃ×~— ‡óÿQ©³endstream endobj 2494 0 obj << /Type /Page /Contents 2495 0 R /Resources 2493 0 R /MediaBox [0 0 609.714 789.041] /Parent 2492 0 R >> endobj 2496 0 obj << /D [2494 0 R /XYZ 95.641 729.265 null] >> endobj 2497 0 obj << /D [2494 0 R /XYZ 95.641 687.602 null] >> endobj 2498 0 obj << /D [2494 0 R /XYZ 426.033 679.452 null] >> endobj 2499 0 obj << /D [2494 0 R /XYZ 95.641 622.844 null] >> endobj 2500 0 obj << /D [2494 0 R /XYZ 95.641 545.242 null] >> endobj 2501 0 obj << /D [2494 0 R /XYZ 95.641 527.9 null] >> endobj 2502 0 obj << /D [2494 0 R /XYZ 95.641 492.638 null] >> endobj 2503 0 obj << /D [2494 0 R /XYZ 95.641 452.184 null] >> endobj 2504 0 obj << /D [2494 0 R /XYZ 95.641 427.881 null] >> endobj 2505 0 obj << /D [2494 0 R /XYZ 95.641 371.806 null] >> endobj 2506 0 obj << /D [2494 0 R /XYZ 95.641 371.806 null] >> endobj 2507 0 obj << /D [2494 0 R /XYZ 151.771 360.847 null] >> endobj 638 0 obj << /D [2494 0 R /XYZ 324.152 360.847 null] >> endobj 2508 0 obj << /D [2494 0 R /XYZ 95.641 355.741 null] >> endobj 2509 0 obj << /D [2494 0 R /XYZ 95.641 350.76 null] >> endobj 2510 0 obj << /D [2494 0 R /XYZ 253.867 328.966 null] >> endobj 2511 0 obj << /D [2494 0 R /XYZ 95.641 316.194 null] >> endobj 2512 0 obj << /D [2494 0 R /XYZ 95.641 273.375 null] >> endobj 2513 0 obj << /D [2494 0 R /XYZ 228.16 251.457 null] >> endobj 2514 0 obj << /D [2494 0 R /XYZ 284.36 251.457 null] >> endobj 2515 0 obj << /D [2494 0 R /XYZ 95.641 217.086 null] >> endobj 2516 0 obj << /D [2494 0 R /XYZ 95.641 217.086 null] >> endobj 2517 0 obj << /D [2494 0 R /XYZ 151.771 206.127 null] >> endobj 642 0 obj << /D [2494 0 R /XYZ 325.497 206.127 null] >> endobj 2518 0 obj << /D [2494 0 R /XYZ 95.641 201.021 null] >> endobj 2519 0 obj << /D [2494 0 R /XYZ 95.641 196.04 null] >> endobj 2520 0 obj << /D [2494 0 R /XYZ 303.97 185.206 null] >> endobj 2521 0 obj << /D [2494 0 R /XYZ 423.415 174.247 null] >> endobj 2522 0 obj << /D [2494 0 R /XYZ 95.641 139.557 null] >> endobj 2523 0 obj << /D [2494 0 R /XYZ 95.641 96.737 null] >> endobj 2524 0 obj << /D [2494 0 R /XYZ 200.632 85.778 null] >> endobj 2525 0 obj << /D [2494 0 R /XYZ 338.24 74.819 null] >> endobj 2526 0 obj << /D [2494 0 R /XYZ 367.773 74.819 null] >> endobj 2527 0 obj << /D [2494 0 R /XYZ 392.245 74.819 null] >> endobj 2528 0 obj << /D [2494 0 R /XYZ 438.827 74.819 null] >> endobj 2493 0 obj << /Font << /F41 999 0 R /F35 919 0 R /F39 927 0 R /F40 935 0 R /F27 911 0 R /F62 1117 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2531 0 obj << /Length 2540 /Filter /FlateDecode >> stream xÚYK“ÛÆ¾ëWðT°UK¼åC*vI±R²ãHërRqCb¸„bh<–ÚŸ~ ¢Jñ€žžG÷ôtÝ3 7üÂM‘øin2Uø*M6ûÓ‹`ó=}ʈ(Œ +ÛD~’g8àÛ‡/ßÀœÂ/Òhóp q忽ïŽúÜ›ön«’À }þþÜ™¶ûÓ?èfÐõÝþöâõÃ( ?LãÍv”p«Â6J?Í“ÍV)¿ãQ‹(YjQNÕc«›þnE¹§›½ézÛÞ…^'œ¶­žLÉ ÛÜ3ñl&.†µô4æÌ¬{foé[ºµvv A™×mg˜Û«³ ¨Ü.¨¶ ¿H Rd•"Ux¥îõN£nææôG#„~Ä©/ߤêºÉ0P~ž+Ùê‡ïßþÄc¦†P™Ÿ*7¤aÿ¯Yz¦>pó`EnØ‘ZìÒçþPj©K –ä"(¼Û¦Aà½ýæÇ¥Jqà«$‘‘uÕÐjp¬QìGa6³®k{uU‘ð™ Ñ[þ>ÂÁ!ƒ™*4טyš?ÝóigëjÏ­FŸÌͺ{ÝðrC']—£in]È—Dåa²üú}§¤j'`jn¨ßž¸eáx[°biðÁY‡üÆufßW¶‘ù 3‡®jVÜCÅ™ŸGbçõ£P¹g2âI׃q’ÿuW(‚Ö?ég>"•¥~$ûÍù€Ê߆ ¬$²/â™Ó¹Ö½tCZ°Âg‚Xѧ lOôŽãæÒ]§t{¶’!Ìž®kÚS'K´%ìÛ´#"X–`‹.ˆí¿ÁÍ<}l–y~¢Å7È–ÈCvx<Þ#å\¡ §Ó1Û6²@W=6úÍž!XeuÀ™ÉK֢ç5! – öV…©àVH›Æ9!ldÔØgnth¡’Y·qO9`D(æmç,@v†ŽžYªºîìýlr Ió™ ‹ã-ÕoÌ…£hiÓ@ì_u€,ÏÆ±%ðzPÈEf×ë~á;-qM–¡øu+mÕôª¯ØÓã`“ƒ§§\GlÃÂÏUJŠýT‚Ìmû£µŽ>´éHÁâ,ŸØv´6gH än¡ÍÖÆÂ”ùŠG½m˜z¦?µæÀ”z{Ò´zµ'Lb¶ ÜÙ¾w*X™²Ú–-Z±±è*V‰Ø×eÕvÒ¡×Ø‹lÒŠô²¼ÕóDE]ý¼")Iß¶Çb!:鹯|Ü(:"T"k4$Š›AëUH,BÞ›~h›¹ºó¡„¡_)p›øQN~‘‰_|ÇG» sÿOûÁ>É>KKB„  ùñ¶8Sþ7æöSC¢—Ñ¿3ïCÕ/¡X”Q=jš\t¿ažáÄÝM ¥Þ ×,6ñUŠ’ýÄWçÉ 5R™÷®:˜wP½uÜ{u\5jf\K!Á.fSI¤2‡ÂûγœÚµÚSdô7sß#Í`Ÿ_;Ï,z»‚0”lTžp¶‡¯K6*OW³ož:Pͱì˜xªºŠò6*Y’M „ ÏÓ¬Û0KªËÜU—@Œ°Šh€9ÛkHYÄ293.v¹ÊSŒNËÝùﹿ³®fåͲ.ËÓ¥ûP#ˆr‹Š&5Ö"+Ë~%" Jºu®)™á®㊓`"¢„\å;ÑÀ}×Ò¶u¸¢àÔ_µäj(Ö©Ò!ry™Ï G]«%­Z7͈NãBeù¹³M¬fN&Ԧ︃ä 1Ö–†ÛTÇ`•ã9ù0â• nÓ¥ Sb¹ÝƒŠ¨Ñ(Bzù–&ƒ ¸æ+CtÌrQMniÐí%1.Qx”é´CÞÃkn ©æ†ïXs½ð šL a ®ûD× ŽWlW͈×5fhŒ’p¶Øf\DŠŸa’pŽ‹ÄyR' 8¼ÁyÀÿ('šd X$oMMÌ¿|³Ÿù´+"''é¼sàìå³gûòÊ& êŠB%p•Šý(cgNan–K†”s ©rºSA*´ÔÀ¤¨2w=öäžxþÊ•N¤N ‰Ÿ)"%¥r % 8¾»åR‡e¶!Å£á|ªºžâ¹tׯT\¼àOâ¨[ñ×'Aú#Ûéï¯Í/œH§àÑI5¯ô-á™Ç;XÔúa”ûYæž°®À±°U¢w?ÖÝÇîF¸s€ª|«Ï7î°¨/VîPG~šg³ëÇ/GÝ/ËåRÊ[ÄkMí ]WýâýyY0KvÁtQ£D뤚WËíÃü(…-pÅ ØÊuÇàfæH೓!“›9N§§É0gU°ŸîŒ÷Ìä‹)r ®„ÃO®¡«û .iƼjáýó~%Ùò3OBŠàWiÌ@]OjYægáÿxRËü$M¦ojþòxUáƒÊ_çiã£*Û±o+È›+)>¯Ü”ŸŠ€¨Ý»⤉{‹GKü$‰oÞÜ zZQ%ìDîLÞ Fφ,þÛ:F¨wU'èÖaÞ˜Ú¯™dTJn<à*š¼Aƒ™ñôý‰Ø YkuM„4ÖM+W §¶¯VÁçRä¼íyºÔÈ4GÞdo°Šnzņʯ–Mü$‚´t‘@ eš¬Xþå€Lw)™–KãØI²*™gFûÏÜÕ/ç{1ëiÇÐw}\YIÜÎ\…\ŸŠÉõiñÏÌt²Pž‰ÝFàšUéóÙh騚›‰,þå—$®Ü Žîn Gƒq{/>Põµz> endobj 2532 0 obj << /D [2530 0 R /XYZ 95.641 729.265 null] >> endobj 2533 0 obj << /D [2530 0 R /XYZ 266.269 695.392 null] >> endobj 2534 0 obj << /D [2530 0 R /XYZ 457.449 695.392 null] >> endobj 2535 0 obj << /D [2530 0 R /XYZ 411.217 673.474 null] >> endobj 2536 0 obj << /D [2530 0 R /XYZ 95.641 643.766 null] >> endobj 2537 0 obj << /D [2530 0 R /XYZ 452.986 635.616 null] >> endobj 2538 0 obj << /D [2530 0 R /XYZ 95.641 579.009 null] >> endobj 2539 0 obj << /D [2530 0 R /XYZ 95.641 501.407 null] >> endobj 2540 0 obj << /D [2530 0 R /XYZ 95.641 484.065 null] >> endobj 2541 0 obj << /D [2530 0 R /XYZ 95.641 448.802 null] >> endobj 2542 0 obj << /D [2530 0 R /XYZ 95.641 397.39 null] >> endobj 2543 0 obj << /D [2530 0 R /XYZ 95.641 373.086 null] >> endobj 2544 0 obj << /D [2530 0 R /XYZ 95.641 317.011 null] >> endobj 2545 0 obj << /D [2530 0 R /XYZ 95.641 317.011 null] >> endobj 2546 0 obj << /D [2530 0 R /XYZ 151.771 306.052 null] >> endobj 646 0 obj << /D [2530 0 R /XYZ 323.186 306.052 null] >> endobj 2547 0 obj << /D [2530 0 R /XYZ 95.641 300.947 null] >> endobj 2548 0 obj << /D [2530 0 R /XYZ 95.641 295.965 null] >> endobj 2549 0 obj << /D [2530 0 R /XYZ 302.165 274.172 null] >> endobj 2550 0 obj << /D [2530 0 R /XYZ 95.641 261.4 null] >> endobj 2551 0 obj << /D [2530 0 R /XYZ 95.641 218.58 null] >> endobj 2552 0 obj << /D [2530 0 R /XYZ 241.1 196.663 null] >> endobj 2553 0 obj << /D [2530 0 R /XYZ 297.983 196.663 null] >> endobj 2554 0 obj << /D [2530 0 R /XYZ 95.641 162.291 null] >> endobj 2555 0 obj << /D [2530 0 R /XYZ 95.641 162.291 null] >> endobj 2556 0 obj << /D [2530 0 R /XYZ 157.31 151.333 null] >> endobj 650 0 obj << /D [2530 0 R /XYZ 215.8 151.333 null] >> endobj 2557 0 obj << /D [2530 0 R /XYZ 95.641 145.156 null] >> endobj 2558 0 obj << /D [2530 0 R /XYZ 95.641 140.174 null] >> endobj 2529 0 obj << /Font << /F41 999 0 R /F35 919 0 R /F62 1117 0 R /F39 927 0 R /F40 935 0 R /F27 911 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2561 0 obj << /Length 2922 /Filter /FlateDecode >> stream xÚÕÛrÛºñ=_á‡3SiÆ¢Á;9yJsì·‰Ó±vÎôô’ ‹5Eª"iÅß½%æòÒ‡Nf‚åb±X,ö Ù¿PðÏ¿Èc/‰ü‹4Ƚ ‰/V»7êâ f>¼ñ…B]„^œ¥8õçÇ7W7@{y^n‹ÖálUïvºZó#£™~ÑE©—¥tÅc»ÄNZWBkoô®(_^æ~6«,hV„0¦j<ÆÜ¶¼üX”¥]STO(=œoწqN²vûù"Œƒ™ÆÁŸ•t\DÔ™@8…çgﶪi\7Œl·s¦e±f—|cx¬VfÍ E»ÅÃój!^uÀæ ¤-ž±ë¢Ù—úVžŸ WWÏê½¶K{ÉÈ¥L²Òy%NaЂ[#Dz¿7Z&Šêd!oõ½Ïen¶õæþúæîRl hK#põºk·t04ƒÕ×kPá«­\ù;Æ{3n§­áXƒ1¥YµÆš›ÓΚ¡5^²…sÙÛš½ð¥0G†H'0²NÐÝ×¢,ôá•?—$ó`²€L–¿ÿP±âÃG½o‹ºóëe‘Y,4ÀŽÐ¼3ó>>ìæ±ŸºŽ½°ŽF^˜²£þòË©““µ#p0›¹[Ð`äöÁÿ¥ÛI†n$©¸="ÐíÊ„5({‡èïˆo·ºRëìùØÙ‘È:;/5Œ\u#OÇ9ötØì•WfV/î2:ûD>è(TçÒ^2žühEÛùÈßC2 ¡è`¾#» Èg‡ Î6v„5ÖÅÏuoý=Qƒ¿Ç¹Üy¢xCÌñtÀ½ãáÌÓŠ==—Ññt˜vœ7g{H®(ȹqîsÑèéSnžÿoÜ|ðq?ðT““'©—FÉÅ"=°Ì7ó töéöãÜÔìwvï‡Çû9|}yÿøåþšQïî~eàÓõý‡Û»üñ·ëû‡ÏpÙw'T=ÛÛë–$R„‡‰R/ƒj`á'^ž%$ÇÇbc>ÕT0Ãäq(•Gè)/À´϶š’k$w]ꯜ;ãÙ®æ<Kž¶$M{(V¨ÖFf+­ %Ð̳Y·j»!KÇâÏõ™*v ²……È9ʾuC2e …ùWÁƒÊ} ?^ðÒf å1榖)ó•‚üÙ¥ *¡°GˆÅRíåT‚ÔÕ˜ÓCÊÞð7 ;·2°EÓ|% AS†Ñ§PTy’ÔYiM¤ÆP²»È ¹rÉãŸ$NNp#±Ÿ‡Ðì%\¿„•—ªL誚Y—uõd¤hõ3] "å@ÝЕKIÁEÊ"ˆ"/ ¢Q­bs-†®šÛ·üñZw 85T"IÏH‘Ä)9knàÚ-q 99pÔ¯'ÌËâÙ¼f[Ù£†ðE>¡ÙÎiÙA¯§­f0Él¸ 2Çj2ë2ìOÈY©@à*uµ5«gFs­dSîW~8höÉìÐG<ÆÞ¶ß ·àzš‚ î8±Ç¼æaÓ  †&ØèFpRIc¬Ve·6‡„b)#¸–a˜$Hnj›Û5ø„Ê–QÆÄºyž8‰” CüJ‡¶û€.ë®e°¢`x¢´Xï Ác/~¢HQ¾-Rö’oе‘rc´U'a|º®c!fp°}â¦7±•´¬më'Ã!iûBxc«à“Õ¾5}²][™ pã>U˜¦¥Ó4…tj ÝQeü9âç0Œ@“ÂQ¯ äŠÉúê4L)Ý ÌÎÙI¶qªã‰ŒS¯©ŠÄ·Â(·eH6ÔC€ ‹“#aAÂ¥#,’ º¬{aO¶ù¡° Sª†ßçðFüpëüFëö¡, Ýq¬èï?ðžq"~½Z®G 9šùÈj«áJ #ö[ Bu½vëOœCu &~<û423?â@•AEr—ŸGÚ!±@ νÂê‹ÑjÂó"@¦ „N¦ô‡á“Wµ©g# ˜+¶P‚p¸ÆNÊŒ'âæÒØ‹Çb4îì¸òE¨ÒÙÐ)UGüš=´›Å ìfúJÖž£2§ ,U9¤¡T8ãÀ>g?‘·}Ïú°T„À‘+ŒÒN!È"þ§+X !_V:1)µÏo©TåX*S\ÄÎY°2‡V’ö}xi06¯t²‡›*¢6CáOž9 ´’ÊU*­*-¶EÜíq¾~Ä×TMן(ì«:ÙbÌÎ’Ø£N••@)yzÂg<7"Ž,%‚MKy1Rh‘£ìƒSÖyEßt’{ET˦4˜Ë‘äsL³í–'ItD÷½ïT)é0T9÷nJ^—qº%NÚ-/™d¢i"Ëqi!ݦÂwBÈ„[ÒãÆÀŒú»¾3E “}\…Õ@è+§RÁ/4ÝQðtÖlA@÷eËÚMÿã+†Êßݾ4­}t”¤ç˜='JG3ù0häÂÌó“”sÊíÝ_ûw¾ûë÷Ÿï•G¾Çymÿ‡ëÇß®ïOžý¾<Ȩ&»¶koîäQðúÝt÷´•ÇÂ=‹'£¼î÷$=¡èø›dÝQ]/?"†öGDúº™ctS…-©:z8Í©h=©!ü±²WOžÈϘ Ó}ˆ(C+€+¾÷£j&.›´2~±a…%Á °,ØjÌŸ/¥f7ï>½?Wm˜{²”Xtœñòs/é À×Ã¯Ä Ë ß.YF®á2[ÕfÊ*Ž3ü´qLɨ±ìÙÉüþèC–úæÉý,òTöâžüuB€’8÷â`ô÷ ßüKˆ(øÖ9(wý$“õendstream endobj 2560 0 obj << /Type /Page /Contents 2561 0 R /Resources 2559 0 R /MediaBox [0 0 609.714 789.041] /Parent 2492 0 R >> endobj 2562 0 obj << /D [2560 0 R /XYZ 95.641 729.265 null] >> endobj 2563 0 obj << /D [2560 0 R /XYZ 95.641 716.314 null] >> endobj 2564 0 obj << /D [2560 0 R /XYZ 95.641 716.314 null] >> endobj 2565 0 obj << /D [2560 0 R /XYZ 157.858 706.351 null] >> endobj 654 0 obj << /D [2560 0 R /XYZ 204.911 706.351 null] >> endobj 2566 0 obj << /D [2560 0 R /XYZ 95.641 700.174 null] >> endobj 2567 0 obj << /D [2560 0 R /XYZ 95.641 695.193 null] >> endobj 2568 0 obj << /D [2560 0 R /XYZ 95.641 618.182 null] >> endobj 2569 0 obj << /D [2560 0 R /XYZ 95.641 618.182 null] >> endobj 2570 0 obj << /D [2560 0 R /XYZ 157.31 607.223 null] >> endobj 658 0 obj << /D [2560 0 R /XYZ 241.931 607.223 null] >> endobj 2571 0 obj << /D [2560 0 R /XYZ 95.641 601.046 null] >> endobj 2572 0 obj << /D [2560 0 R /XYZ 95.641 596.065 null] >> endobj 1027 0 obj << /D [2560 0 R /XYZ 95.641 500.623 null] >> endobj 662 0 obj << /D [2560 0 R /XYZ 456.354 467.437 null] >> endobj 2573 0 obj << /D [2560 0 R /XYZ 95.641 461.259 null] >> endobj 2574 0 obj << /D [2560 0 R /XYZ 95.641 461.259 null] >> endobj 2575 0 obj << /D [2560 0 R /XYZ 337.378 373.738 null] >> endobj 2576 0 obj << /D [2560 0 R /XYZ 95.641 322.112 null] >> endobj 2577 0 obj << /D [2560 0 R /XYZ 95.641 322.112 null] >> endobj 2578 0 obj << /D [2560 0 R /XYZ 95.641 251.377 null] >> endobj 2579 0 obj << /D [2560 0 R /XYZ 195.042 243.228 null] >> endobj 1028 0 obj << /D [2560 0 R /XYZ 95.641 147.766 null] >> endobj 666 0 obj << /D [2560 0 R /XYZ 472.471 117.39 null] >> endobj 2580 0 obj << /D [2560 0 R /XYZ 95.641 111.212 null] >> endobj 2581 0 obj << /D [2560 0 R /XYZ 199.318 100.403 null] >> endobj 2582 0 obj << /D [2560 0 R /XYZ 399.933 89.445 null] >> endobj 2583 0 obj << /D [2560 0 R /XYZ 228.786 67.527 null] >> endobj 2584 0 obj << /D [2560 0 R /XYZ 287.648 67.527 null] >> endobj 2585 0 obj << /D [2560 0 R /XYZ 508.095 67.527 null] >> endobj 2559 0 obj << /Font << /F41 999 0 R /F27 911 0 R /F35 919 0 R /F40 935 0 R /F62 1117 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2588 0 obj << /Length 2410 /Filter /FlateDecode >> stream xÚí]oÛ8ò½¿Âoë1+Ф>‡Ã&ÝäšCÛ[4.úp{´,ÇBlÉäfóïo>HY²Ô¤=àÞA áp8Π烖³þä,5"Òr‡©#3Ëöo‚ÙÌüýtJ*˜ŠgJ˜$F‚ëå›··°&i¤fË Ñ-×ÿš¿ÛÚC›×‹Ðs)øû¥Éëæ†?Úòhwÿ^þãÍͲÛ@FÈHÏÝç",Tˆ¾a(R©;!¢p,Äû/÷׸ÃÛ[eN³¡Aì(.yº¿Ø­#7-/QÌ¿ÞÝÞŒù¨Th™8J[®Ç¬d*’0òz÷þîÃ/#Råwý#0¤±4ž_ç™=^Èy“óÌXá‰4ñk>›üCQæÍ˜70S±vt{[”-ü7È?š·ÛXÓV»¢|l|®Žð Od}×`’å6ï¯è-^ŒËªãaçPÕ† ¤oò|OÛ„I:ÏÿÌòC[T¤£$¡Ó ¾Ý CõE2?îrÁ£Ûªö íö¹ä+€½}fF^ÌÌî4¹ãÁâ ÝH)-bm~Äž¶:§ï06ó¢Äo„ŠÁáÆî‹Ý3ÃCíÉûBš4ßî@1z¸i>IgräÅnÍÛ8¾Ìßœ‰#¥œ_:9KàºfÚ7]âåW=a”vÚd_ÀOiW‰H’³{õñ~â–&"ü}öZUNMÀÞòðQ®r¨‘V•SßI C8ÿ†AÐ΂/ Ô1„Çd`äbW8¡q¼B}OÖÍZžkÕ‘®~H{Ò÷à/œ—-£ŠR0°t‘–VÀ×ú ‚»(r…áËïb=OܽuUþÒrN°d´É37~ÚÙ–Áî(:=LÀÈO9¤ã!‹ÎÙ;ê3à øVd¹ƒ`[Іà¨5É}7ÅšTx•€^aò…¦Þ ÛòäIQ0ð‘˜tãÕó8ćA*"¿ãuÒËE—ÌÀW0‡Íòn²f¨z*]X7 „õQèàc„ì䚈Â8û; «•]‘ŠãT¢æ{P`Õ´<Ȫýžì.^ò€‚¸(‹ºogÙšC4åßrpPH‹<|*`U9á[öÌyF–: ‹Ü#‚-út$cŸ®(7U½§»ÀˆÕ ¼ÿlªúl ‰îê¡[? š€­Pq¶MûÕ Ðˆ4Pt¤›NiXX-B¬ D¬Þ ZãU>iÎoïü}SW{çùzB­Ç.‰ Ʋ&"i—¿Þ…êWï>ývG–3ÄÑl´‘ê‡ÖOW]1<:¶*‘ñ¼ÜV{Û¼ýº-Ú}UçoÇR,ý˜ýõÝçe·?¸A"dŠß®–ß õÕܪ:¶L-#i¾·ÿ÷ß?\½{…ûMù°ëêÅãzÿÏ/ŸªïAÓ|_¥0r@,D§NÈ ·îÄë% }¾¹ýôŠ…2ÛþŒQ–w˯pü”?1­× >Zð]‹I’.;)¸.ðÚ ˆ÷–lÁψsõeùþqÞíl—xiÁŽ‚¥ªkg"\/\›d­Á>*’Ðy{>Ý:¤¾ä8 UçC¶Q$BÙ/O˜7~)!à¯9Âçáð„Û`êã…•ûB0ñ<únÌGL¤28q˜×S° …L'Ú Ç„¦Ÿ@žCžA˜9TKµyÖ»6V¸üÀ«ù3:7,†¾+ðdœ†Êl“÷–ªùª¨¡Ø% ESl×Ü¢Š)œ± ®3Ù :ª-,QsÁÈë)Q0²uÝñíÉv9Q…·Ûêø°õ©®p † V./5ÇëºÍ×½|tórÙ?¬³¤»ÈOBÚ 8(¤’\c!Ä¥L©Í|„Í(õá¸*ÝÊsÛƒŠ¿M¤ïƒØ›–™ DzzâÝ(œœ¬l) G‘Ëýpø“'Z. A'¼W ³=z XèWþ¬¢w_ç&´MQ[ç'¦WŽó6¯K»ãÑ™(c ÃñBHÍVUòÔ¿ Ò5ò€í¢„4ã2IO:Päœ7àÔ†«È=È`H´¶­]ñ5DtÍØ‚J¦nµyù’ÅzÒ¹®½J”é«GhT¾ÙÝ‘,LïE¤g ¢îm ž|9ød,Tücï4iäkýSÀ‹ÜÓ_@¸ü¥ƒ]1¥Bi50Y'Rê9“„_¬sŒÔx(cü9µc"øø3Ãã8©9¡×ô ¢g@~±1ÜÕŽŸ3¤¡J‡ ÷©æ´5”8ýŒÆ&ÞŠ;90ô’.‰Öl.éjãC`8-"ä1–I sp‘¬µïØâ €l[Uts€Ô6ÝdÍPOÓ8$D1®ÐNÎÜtþA}_éR…?ìzíJxØho4ÉíK71îp4¿ÎС`°¥œcŒÌ&AàývÚ>a,ŒñO‹|jãN}ɲ±ö¹€vó.  ´pR|§9¬_š6·ë¾Eý{ šî,¶iÉFÊ s§ÌzotÚG-ò¯`­N¼Oäôc«u]Ý•þ­¨ŽM×Òú±gì$ gÕqç“ߺhÏÚÃËàïõ©Ö7nE‡Ÿî×zEаœ¯»FÑžÉãtñcýàÿ›ÀÿYø2׿BI÷·‰šÚ¤BƉk;8óÝu×Ê$Î »t. Õ`†ÃîŽ'Ýýì­íœzƒKFÜ+Òé|šX„¯Ç™Ô;FoëŒCZâ^7éùÚ%‰0Ñ"1É(ILõZAª^@ëðLºÂƒÆÊa iÜA¦Xóhõ̳P(íÁª¶ÙcNo00³-ŽÝ:Ÿ°€Àö*ã³Ê"6`úø¿m©Žm…OWßô; Çz%lø×’IƒÉ0*zÅbÐ 'É)s?2?è2°<<1'€£'>+³½:L£Ï]`·M°S=±ê~:òu!¡ÿN }?±ºg;G›–Ѿ)ʳhŒ… l޵8ÿ©r¡c{ð…Û'L8ùc¥@ ^Η~+Õêœ7’„¼Ê³ü¶™Àendstream endobj 2587 0 obj << /Type /Page /Contents 2588 0 R /Resources 2586 0 R /MediaBox [0 0 609.714 789.041] /Parent 2492 0 R >> endobj 2589 0 obj << /D [2587 0 R /XYZ 95.641 729.265 null] >> endobj 1029 0 obj << /D [2587 0 R /XYZ 95.641 741.22 null] >> endobj 2590 0 obj << /D [2587 0 R /XYZ 172.978 706.351 null] >> endobj 2591 0 obj << /D [2587 0 R /XYZ 232.218 706.351 null] >> endobj 2592 0 obj << /D [2587 0 R /XYZ 315.14 706.351 null] >> endobj 2593 0 obj << /D [2587 0 R /XYZ 478.207 684.433 null] >> endobj 2594 0 obj << /D [2587 0 R /XYZ 252.348 662.516 null] >> endobj 2595 0 obj << /D [2587 0 R /XYZ 95.641 632.807 null] >> endobj 2596 0 obj << /D [2587 0 R /XYZ 353.099 624.658 null] >> endobj 2597 0 obj << /D [2587 0 R /XYZ 509.147 602.74 null] >> endobj 2598 0 obj << /D [2587 0 R /XYZ 95.641 564.324 null] >> endobj 2599 0 obj << /D [2587 0 R /XYZ 191.88 547.148 null] >> endobj 2600 0 obj << /D [2587 0 R /XYZ 202.64 527.422 null] >> endobj 2601 0 obj << /D [2587 0 R /XYZ 202.64 517.559 null] >> endobj 2602 0 obj << /D [2587 0 R /XYZ 191.88 478.107 null] >> endobj 2603 0 obj << /D [2587 0 R /XYZ 191.88 468.244 null] >> endobj 2604 0 obj << /D [2587 0 R /XYZ 191.88 458.381 null] >> endobj 2605 0 obj << /D [2587 0 R /XYZ 95.641 422.615 null] >> endobj 2606 0 obj << /D [2587 0 R /XYZ 163.357 411.656 null] >> endobj 2607 0 obj << /D [2587 0 R /XYZ 202.44 411.656 null] >> endobj 2608 0 obj << /D [2587 0 R /XYZ 465.654 411.656 null] >> endobj 2609 0 obj << /D [2587 0 R /XYZ 95.641 370.989 null] >> endobj 2610 0 obj << /D [2587 0 R /XYZ 95.641 324.767 null] >> endobj 2611 0 obj << /D [2587 0 R /XYZ 360.838 314.022 null] >> endobj 2612 0 obj << /D [2587 0 R /XYZ 454.701 303.064 null] >> endobj 2613 0 obj << /D [2587 0 R /XYZ 382.468 281.146 null] >> endobj 2614 0 obj << /D [2587 0 R /XYZ 427.235 259.228 null] >> endobj 2615 0 obj << /D [2587 0 R /XYZ 95.641 220.812 null] >> endobj 2616 0 obj << /D [2587 0 R /XYZ 191.88 203.636 null] >> endobj 2617 0 obj << /D [2587 0 R /XYZ 202.64 183.91 null] >> endobj 2618 0 obj << /D [2587 0 R /XYZ 202.64 174.047 null] >> endobj 2619 0 obj << /D [2587 0 R /XYZ 202.64 164.184 null] >> endobj 2620 0 obj << /D [2587 0 R /XYZ 95.641 138.282 null] >> endobj 2621 0 obj << /D [2587 0 R /XYZ 400.722 127.323 null] >> endobj 2622 0 obj << /D [2587 0 R /XYZ 162.555 116.364 null] >> endobj 2623 0 obj << /D [2587 0 R /XYZ 465.654 116.364 null] >> endobj 2624 0 obj << /D [2587 0 R /XYZ 263.828 105.405 null] >> endobj 2586 0 obj << /Font << /F41 999 0 R /F62 1117 0 R /F35 919 0 R /F40 935 0 R /F39 927 0 R /F26 909 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2627 0 obj << /Length 2499 /Filter /FlateDecode >> stream xÚYÝs㸠߿‰3ã0¢¾u··¹¦“Ëvî|sÓiû@Ët¬©,¹¦”¬ï¯/@€²¾œÝíøÁ$ ð#RráÁO.²HÄ¡\$~&ü8Zä‡ÞâF~þ ™Ã["Júqýáþ¸3‘ÅÁb½³ëí?—÷êØèÓíyK)èÿw£Oæ†Ú¿¨ªUåí¿×ûðiÝ-ÊT„\ÜuÆÂï‚Ä1üû¾ÈdØ)DS%Ö{îbÿ2R0ǯŸž‰¥?ßO„„)ÄòªÊVƒÎ2\ÔÑ—KSSgã­Ñ[j½íuEcF«Ó­L—ù¾¨^hpWŸ¨qcÔÕŠ:¦n‰Q¯h¦~ÕUCcªÚv,Óª¼¸ #‘%ÑâNz"‹2«ìVÿËóüÊ*&KË­óÚþo ê?n3Y·Ô1ûº-™½ªj¨­¥¤ËMÕDnöª¢V]ÍXÖ÷Sòk¦ ÓŒYÊ¢r+×,xNïéBf€Q0Íé<°Š…çìqU‰H&#ÿ&;[@{ô¶*þ ãr)h?YH_xQdE&‘‚@™b»ÞogÓèLNœÊÐ@äSëï§[ß[ÖGÛ÷–M¡ÍTÁ0©—±ÈÒØaÙ¹"HÁPƒþÅ˪=lpY$Õ;ú?Z>g%Y¸±¡9úI^Éu^ „A–·fÎÖ4õ¡øS»%´›¸W¯8 é l*Ø…Þ"…ÅöðIÆÎòOÅN?æ a@:˜ l-`45Ç»BšÝ 66Ìd÷ŽsÛAZQÍèG"ò³¯+I!;¾¼®pá—ö¤š¢fÑH)µYõ….“XDa80ŽVù~ª Ä´Z_×òœ&[Õ¨2Œ×šcnQ1¦ëäÈa‹ñ}¦]½dÍê@ˆ¯êT¨ ìDÐ’@6Ò@Ä (¢!=ÄÐ.ø„Îq†A-ó©>»îÅ2¤´ªlµ³kú/ÁFEÐäØ7-™uEe7.Ÿž>ýô¸ÆÕ?ÿŠ”<yFk.æëdag£Ëú ø(‹%î,GédãHkÎÇ"Wey&fÚT5ýOv7U—Å[`G¤|‚Óg¦tAȦ8K7À¤æ„À·Hœ©{ã4ýXŸ˜\ÖõXH{$’… %Bχ,¬a„X¾ÇfföHÊ,´GRf ¿:7” ‘ªˆh³š%lµ!,ÚeqlmSÚ»3õú{@ηSÑŒWvI‘ö»Ë1;p8¥%àfN ‰oE³ç|ïâgN#Γ‚†]ƒF‘(q¦±g¤QÐÛè—‚Ë '(^ÞX«%áRÜ ÔNImÌ;ôŽ¡Âa3ËÔh\AýŒȤ¿¨ˆ?–Xˆ áN#ž‹É øä“ÚæTÞ`€Ù‰RpA¤Ìõ±¡ŽÍK<:57Avuƒ|84 £WàgtâBËaHêL²kËg ¢ÿx¦ì5 "v©ÂŒ×ýfG£#ÛK3K)KŽGz›F::!'›)D„ˆP¿nÓÐð†T%Ù;N÷`;b'5ŒbW24Ƨ´_FRÍ=`ÀdA­FCL÷r<•… &\ÝrVÀLocJ˜Ñ¾,j´»¼ÞºI.õPh\v*:]&ù‹åi&„VSNöbWÍÛ“‚&‰¡~þ¢ó33:"ŽIa “.jËlÜ8>¨|pdšàÈ ž¦PugeqEžz ²9í±@˜I9M”@Û S©ôÝR^aÇé,ˆé±!²E/ô5¦uS@8&‚½b Ç¡-›âXòš“ùÁ) lmèe-¼iòC–~Ê{‚€ÜPØCÒEÐߊ²$²“E&GXêÓ îÔᥬ7Š'" ”$föðˆaãqÏ qІH53²#dr ÿDIux¶d($nƒù¥j´i¦òX\eNÅv6¨ÀAtÅÜ@Q¾LtÞDµD~(t.ù«;†ŠO©b–]mCÓNƒ0œÒUæ¹nô)áVn-h§q199,´)õ@k§ËÓÓÇÏÏ??<>}Zq¤à(R0 ]@mUÚè㘂Š‘H!Rôíå aÙ,dãâW^1¿v·¾zç†Gu¯wÏŽ‚-ío Ü™þ^7ù=€-º®x‚þZ™Õœ%І-vƒ Ü 1Á(?–*×ûºÜº³ŽBœæ³á8u5qµåê­Sç}“º5̯dôfö¾{Í/ý[zuµnp§êÚ77{Ó¥Ûþã(Õ›+gYT.:ì¾5§{ÜN‰v{Çy+ LÞ÷Þ_þúù—O÷3jMapÆyeí×e(3‡ÏbPg»(æç–«ñûÊØh<Ôô²j\)ï'™hË·øª¹óîÞQßÞ-†ê³-í^à“öa0Žf@±îƒÿÁ+x@ ‡îâôpà×ä {„È»8ýò †³8ÀA³›ƒEWbmï9¹x'® 3IG¾ÓÑü²s-ùûÈäû—¬Ô÷¿ó¹ñòIC›ÑIVƒ$æ4\‡i™šú“\ 8WÚçöË’‰?ÞAF¨È[v`’¢«n¥‡¹w² -?‚©°>ÅÉ4««D"Œ¾íêݧ ÚY nøÏW€à¢£¥ÒŶ×ô!CÒ|I÷’C`£ì žvKYt·¾jøy6Y6üäÞñC† eÃ+®MØÝ}þR]<öª‹ª+S¦¯æi b/ûî§ü©W}0dÛP‰¿i·_Ÿõ—+nM¿é•ßL‡n•…=™I²6ìSŠ\’šv„]‹í5ŒXïvÔÌ1y¢w+3ZÎ]J˜þ¶/ø)Ý+Ãd\gÝÛ»;_‰ÓxU…j6´‰½sß â(‘?ø{õ«o^û ëõçÿ&2uendstream endobj 2626 0 obj << /Type /Page /Contents 2627 0 R /Resources 2625 0 R /MediaBox [0 0 609.714 789.041] /Parent 2492 0 R >> endobj 2628 0 obj << /D [2626 0 R /XYZ 95.641 729.265 null] >> endobj 2629 0 obj << /D [2626 0 R /XYZ 95.641 741.22 null] >> endobj 2630 0 obj << /D [2626 0 R /XYZ 95.641 716.314 null] >> endobj 2631 0 obj << /D [2626 0 R /XYZ 162.275 706.351 null] >> endobj 2632 0 obj << /D [2626 0 R /XYZ 371.993 695.392 null] >> endobj 2633 0 obj << /D [2626 0 R /XYZ 143.462 684.433 null] >> endobj 670 0 obj << /D [2626 0 R /XYZ 256.426 646.267 null] >> endobj 2634 0 obj << /D [2626 0 R /XYZ 95.641 637.744 null] >> endobj 2635 0 obj << /D [2626 0 R /XYZ 154.929 618.321 null] >> endobj 2636 0 obj << /D [2626 0 R /XYZ 368.877 618.321 null] >> endobj 2637 0 obj << /D [2626 0 R /XYZ 165.928 607.362 null] >> endobj 2638 0 obj << /D [2626 0 R /XYZ 95.641 599.572 null] >> endobj 2639 0 obj << /D [2626 0 R /XYZ 95.641 495.96 null] >> endobj 2640 0 obj << /D [2626 0 R /XYZ 172.438 487.811 null] >> endobj 2641 0 obj << /D [2626 0 R /XYZ 95.641 441.166 null] >> endobj 2642 0 obj << /D [2626 0 R /XYZ 95.641 426.222 null] >> endobj 2643 0 obj << /D [2626 0 R /XYZ 95.641 426.222 null] >> endobj 2644 0 obj << /D [2626 0 R /XYZ 95.641 210.372 null] >> endobj 2645 0 obj << /D [2626 0 R /XYZ 172.284 199.413 null] >> endobj 2646 0 obj << /D [2626 0 R /XYZ 95.641 196.604 null] >> endobj 2647 0 obj << /D [2626 0 R /XYZ 95.641 179.169 null] >> endobj 674 0 obj << /D [2626 0 R /XYZ 207.033 171.02 null] >> endobj 2648 0 obj << /D [2626 0 R /XYZ 95.641 165.914 null] >> endobj 2649 0 obj << /D [2626 0 R /XYZ 95.641 160.932 null] >> endobj 2650 0 obj << /D [2626 0 R /XYZ 188.843 150.098 null] >> endobj 2651 0 obj << /D [2626 0 R /XYZ 346.996 139.139 null] >> endobj 2652 0 obj << /D [2626 0 R /XYZ 95.641 115.727 null] >> endobj 678 0 obj << /D [2626 0 R /XYZ 212.572 104.768 null] >> endobj 2653 0 obj << /D [2626 0 R /XYZ 95.641 99.662 null] >> endobj 2654 0 obj << /D [2626 0 R /XYZ 95.641 94.681 null] >> endobj 2655 0 obj << /D [2626 0 R /XYZ 189.216 83.846 null] >> endobj 2625 0 obj << /Font << /F41 999 0 R /F35 919 0 R /F62 1117 0 R /F27 911 0 R /F40 935 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2658 0 obj << /Length 1261 /Filter /FlateDecode >> stream xÚ•WKoã6¾çWèVˆ´"õÞ›“8ÛÞuà¸í¡í¶h[,eoþ}g8”ßÛª0`’Ãáðã7RÌòàǬ4t£€Y1O]…ÖbsçY+˜ùrÇŒ†Ï|˜Š-ß “fwŸžaMꦑoÍ–Zo–ýa?®ÅVÉzàðг™Kí¯¬›Ÿ¨ÿU”­(Í~¹Í0/tYXÎa‡KŽ{nmÀ\? x| bUTsØÃáqb+10Ï.$nùéÙê z<´îAËôÊoò»º'ÍÀ³ÐŒP“GnâÇÆú8_Êq^ÊæÚbØÀ"éUõÞˆ”Ûy‰-³ÕZ’à€ú€°.)ÌÖys"¥î¢*•ÈËæÂÆN­4Ú˪-3Äc9qLrËapª0ÕHökYûõ€%¶Y^®H› ² ØìOÏã«vÀìZ¨¼2 (,dãÒ¡OYw:ýÀõcâö <{—×îÙU¹‘¥úîàÚÌs^Š¢ø0ÆìnñC7Œy·p× Ù¹[ü(Ї÷£Y"d ¨ƒ¬gPaR-$X‹2[¶ɪ% ·dc+uë_’ظæ•£ÿϳ7âƒ:sIm#u–dkC#;HïIZŠ,Œ¥ñøu:ù2~}»ïÓÑëd:ðc{ö¦ÙFNáŒÇÃéãÏ/¿pú|<~âÀžáßðaø6‚ è&áàÖèée†X&S—ÎÚ¹ˆOñBUõI÷kÙE„Ö- ’*:»G¦£¨©Esö[щ|P U­Ú¶¸û7ÁÞÜÄÙ¶ '³Þäu¥ g°Ôßó‰6h6Ø5£fÚsÐÔdù9m :¥ 5m·3õX4F<‹÷vK}sC™åHÁ5a l¤­g}ùx m8H!šðoø0ðáÿmÔ7´.+)2ÅL€AM‘cQ }—°äŒ]8qR­…¢ió6 ñ 7?ZiäàŽk~Šj!I­éÑ¥5¬u´p箫ÿMã·ÑïOO/ÓžauPw8ݹØ4P>tE…þEä è$rpXʽQ5çiŒ•­\ä3úÖÁu¹ZCÑ«asƒ J­ ò馆vaÞT “KKèà£!‰0ªU ×O.Ë…Y‹•VwZ|!Sw¿®hñ skD¡¯t|W :m¯Èë0OÏ ÎƒÇa÷&&:õ“6Úlº—Þ9¥t÷õô®~@žL¦½²b²“ugÊí˜É¥h sW6†`,_¡ÌrUÕ?|j> endobj 2659 0 obj << /D [2657 0 R /XYZ 95.641 729.265 null] >> endobj 682 0 obj << /D [2657 0 R /XYZ 198.724 687.92 null] >> endobj 2660 0 obj << /D [2657 0 R /XYZ 95.641 680.722 null] >> endobj 2661 0 obj << /D [2657 0 R /XYZ 95.641 675.741 null] >> endobj 2662 0 obj << /D [2657 0 R /XYZ 190.224 666.999 null] >> endobj 2663 0 obj << /D [2657 0 R /XYZ 95.641 632.628 null] >> endobj 686 0 obj << /D [2657 0 R /XYZ 228.572 621.669 null] >> endobj 2664 0 obj << /D [2657 0 R /XYZ 95.641 616.563 null] >> endobj 2665 0 obj << /D [2657 0 R /XYZ 95.641 611.582 null] >> endobj 2666 0 obj << /D [2657 0 R /XYZ 198.959 600.747 null] >> endobj 2667 0 obj << /D [2657 0 R /XYZ 95.641 536.986 null] >> endobj 2668 0 obj << /D [2657 0 R /XYZ 95.641 512.259 null] >> endobj 2669 0 obj << /D [2657 0 R /XYZ 95.641 494.824 null] >> endobj 690 0 obj << /D [2657 0 R /XYZ 214.107 486.675 null] >> endobj 2670 0 obj << /D [2657 0 R /XYZ 95.641 481.569 null] >> endobj 2671 0 obj << /D [2657 0 R /XYZ 95.641 476.588 null] >> endobj 2672 0 obj << /D [2657 0 R /XYZ 95.641 476.588 null] >> endobj 2673 0 obj << /D [2657 0 R /XYZ 336.436 465.753 null] >> endobj 2674 0 obj << /D [2657 0 R /XYZ 95.641 431.382 null] >> endobj 694 0 obj << /D [2657 0 R /XYZ 203.596 420.423 null] >> endobj 2675 0 obj << /D [2657 0 R /XYZ 95.641 415.318 null] >> endobj 2676 0 obj << /D [2657 0 R /XYZ 95.641 410.336 null] >> endobj 2677 0 obj << /D [2657 0 R /XYZ 95.641 410.336 null] >> endobj 2678 0 obj << /D [2657 0 R /XYZ 95.641 365.131 null] >> endobj 698 0 obj << /D [2657 0 R /XYZ 207.113 354.172 null] >> endobj 2679 0 obj << /D [2657 0 R /XYZ 95.641 349.066 null] >> endobj 2680 0 obj << /D [2657 0 R /XYZ 95.641 344.085 null] >> endobj 2681 0 obj << /D [2657 0 R /XYZ 95.641 344.085 null] >> endobj 2682 0 obj << /D [2657 0 R /XYZ 95.641 298.879 null] >> endobj 702 0 obj << /D [2657 0 R /XYZ 215.133 287.92 null] >> endobj 2683 0 obj << /D [2657 0 R /XYZ 95.641 282.815 null] >> endobj 2684 0 obj << /D [2657 0 R /XYZ 95.641 277.833 null] >> endobj 2685 0 obj << /D [2657 0 R /XYZ 95.641 277.833 null] >> endobj 2686 0 obj << /D [2657 0 R /XYZ 95.641 232.628 null] >> endobj 706 0 obj << /D [2657 0 R /XYZ 210.421 221.669 null] >> endobj 2687 0 obj << /D [2657 0 R /XYZ 95.641 216.687 null] >> endobj 2688 0 obj << /D [2657 0 R /XYZ 95.641 211.706 null] >> endobj 2689 0 obj << /D [2657 0 R /XYZ 95.641 211.706 null] >> endobj 2690 0 obj << /D [2657 0 R /XYZ 95.641 155.417 null] >> endobj 710 0 obj << /D [2657 0 R /XYZ 192.876 144.458 null] >> endobj 2691 0 obj << /D [2657 0 R /XYZ 95.641 139.352 null] >> endobj 2692 0 obj << /D [2657 0 R /XYZ 95.641 134.371 null] >> endobj 2693 0 obj << /D [2657 0 R /XYZ 95.641 81.694 null] >> endobj 2656 0 obj << /Font << /F41 999 0 R /F27 911 0 R /F35 919 0 R /F40 935 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2697 0 obj << /Length 2367 /Filter /FlateDecode >> stream xÚ½YKã6¾Ï¯0ú5`3¢D½ö˜If0‹IHœÓ&µE·…•%Ã’»§ÿ}êEJj«Éaá‹U$U,V}U¤õ*„Ÿ^‰J^eQ¡¢4YíŽÂÕ=H>Ð2"\Å*É3ý°ýðý']¨"WÛ=ØVÿ >ÊÓ`Ï·›( ­¸ý½·çþ;¦.ÛKÙÜþ¹ý÷‡Ÿ¶~i£seb½Úø/<ÿø&ÎB•BEªÐÆ+'×J|êPÃÁ"¡ƒ}×4ÝcÝÞ3ÿTžË£={Ÿouئl%;ìºÊöv¸ÕÁš~Ň˜ÍÅÊ %/Á³Kæý6œý+ÛvƒôxY4è»Ñ¡*’‚ôÆ/m¢" êÚ¼.½0 ­à£åP*îýv²»ŒICÙV ŒÓÁ½Ìé¹=‘jÝC]Ñî`Ù=ÙD¿o?mò53õîÀìcùÄÄe™mñLqƒ Ê~AýZîfÍ}söc¯—¸I“0Ô7¸S„I¸%‹â=~á0ŒpS26ÅïÂîíY‘-$S´ßD6¥P¿ï?EÙÔ;`/*.bRÖ, ›:‘*J`,l,ŠhìX96)ž+6bГ=OÌåÀ+wêÎÃlì=ø›,²+ÛéвâÞã¡ÃÃFò¡¿b²îÝ„áÔ¦XÌK¯cwSµ¦Ϲ+{»`›ÛulTœišÿÙV»îøñ]vâäx€Q&ÑåàþûòÒ ÌuK’„" ˜ìêÀx<Ø–Yb»í{޲R,Ç/5¶W,?ò1Â1 AVî6 ˆôô$blŠéÑÖ¸2ízŠsy¢²ÂÎÌ,ôŸË‚‘òH™$‘áèËW ‚‰–üÒ^¯—•…n=ò$TžÂ4!¸¨˜CVN'Â[ßDiΟÎ,Pïqû&’ƒ2#à—qˆî2œ.p¼º–búËže¶ÖÍÙ»¥’,.Îê¹4d¢?¡XÜfÁ>ä%^[ÜíJÄÏaôÚ]ÒÆ-CaŠÁt ¸÷s×L9/‹ÃÜy úCwi*ìºv(˜QP:ž ϰ˜ã„Ö”CpPß±|88=¸ÍÉ*´-Ñvº«KïÜ5J\²%7p\Ø$W$fJGÐ|¦½Jô$²¯5w.-l±gZ‚6áösŸMdº)wÿ[JøÉ,žxSf<èçQ,Ú’%p†kñdÖLºGû^ãÖ<ü‘\ª•ι–Ä c;RQÀë YoÅ‚_~ø×‚Ú¢Ç$™Ô÷m7f>dì¹\Ú"TÅ´Ü ãPÊܶ“)˜=[ÊÓÐmÞ#fõNTþ©ª‡îüQ9Ž ‰H¦G‡E:fœ3#ƒ _­aV{¯˜1A[ì–cÑÖ!+Šbnæ§¿ ®q¤©¶ ';•8w¢éi½¼I¨’,}xs¼3«.oš«(+fÀ[ ¼E`"‡–Й7ž}á«°|DW` ÎUZds´ÄE#âÆqæyT@‹ŸÓA/§AØ3¶Ð”‰Ï-X%ËT®‹%³,L¨£)¦²óTŠ¿Äá„Ìg%ÈÊÆ!xœ©KÿÉN¡Vï¹Blê½…ªÖJ—ÌkÐm[€„;{^üȽz±“°3Å4±ËHÚ³·Be"wòjµÚdF%áÿ~ý|©ÿñeÂDi€u îiº$è°M8"ƒ@Þн¶FŽ’G@n n)p±Àî[9³€&ïË¿b]Ý߯DNo%ø(;&âo%Ú¿ÒÄK¹X­ÒÐ?Ñx{-z`šNå¥|[$W‹-¡S‚oâ³ÇÔüNöù–Þ:I"9|<‹¯‚’ƒ@&ôþ¬å½ÙÕ6Høü‹´ðüCO$=Àó=ϲz/ëSA¸Ç"V–{õÚk¸Þ=7‹«xDööO¬’¤˜ä`)”C!Ž•ÉÍ,¾víýujÊ[(*Ÿ~„ôü¾Š²þ‘£ÿ%“½Åÿèÿ„8Ï‚ör¼#£’>Žðå'0$ä&GzMÎ%dpx©Îkͽc×î¤Á“-Ï@/–öt…,¹æ·P½.¿³Gxy8žûm:„_ȰÏÇ_½ûgŸvùr\®h yCyê×Û,ýçá …–h(þ[&¥(¹$Nž;ãË.>pòýA®t0'\sß~ÛÙ“ÈÄ~!¦kùʳ%Š@ÅÄ–> endobj 2698 0 obj << /D [2696 0 R /XYZ 95.641 729.265 null] >> endobj 2699 0 obj << /D [2696 0 R /XYZ 95.641 741.22 null] >> endobj 2700 0 obj << /D [2696 0 R /XYZ 95.641 716.314 null] >> endobj 2701 0 obj << /D [2696 0 R /XYZ 95.641 681.624 null] >> endobj 2702 0 obj << /D [2696 0 R /XYZ 95.641 664.189 null] >> endobj 714 0 obj << /D [2696 0 R /XYZ 181.111 656.04 null] >> endobj 2703 0 obj << /D [2696 0 R /XYZ 95.641 650.934 null] >> endobj 2704 0 obj << /D [2696 0 R /XYZ 95.641 645.953 null] >> endobj 2705 0 obj << /D [2696 0 R /XYZ 95.641 600.747 null] >> endobj 718 0 obj << /D [2696 0 R /XYZ 222.624 589.788 null] >> endobj 2706 0 obj << /D [2696 0 R /XYZ 95.641 584.683 null] >> endobj 2707 0 obj << /D [2696 0 R /XYZ 95.641 579.701 null] >> endobj 2708 0 obj << /D [2696 0 R /XYZ 249.181 557.908 null] >> endobj 2709 0 obj << /D [2696 0 R /XYZ 351.078 557.908 null] >> endobj 2710 0 obj << /D [2696 0 R /XYZ 458.551 546.949 null] >> endobj 2711 0 obj << /D [2696 0 R /XYZ 95.641 479.701 null] >> endobj 722 0 obj << /D [2696 0 R /XYZ 211.546 468.742 null] >> endobj 2712 0 obj << /D [2696 0 R /XYZ 95.641 463.636 null] >> endobj 2713 0 obj << /D [2696 0 R /XYZ 95.641 458.655 null] >> endobj 2714 0 obj << /D [2696 0 R /XYZ 485.301 447.821 null] >> endobj 2715 0 obj << /D [2696 0 R /XYZ 233.805 436.862 null] >> endobj 2716 0 obj << /D [2696 0 R /XYZ 341.206 425.903 null] >> endobj 2717 0 obj << /D [2696 0 R /XYZ 95.641 369.614 null] >> endobj 726 0 obj << /D [2696 0 R /XYZ 215.063 358.655 null] >> endobj 2718 0 obj << /D [2696 0 R /XYZ 95.641 351.612 null] >> endobj 2719 0 obj << /D [2696 0 R /XYZ 95.641 346.63 null] >> endobj 2720 0 obj << /D [2696 0 R /XYZ 483.637 337.733 null] >> endobj 2721 0 obj << /D [2696 0 R /XYZ 233.528 326.775 null] >> endobj 2722 0 obj << /D [2696 0 R /XYZ 341.503 315.816 null] >> endobj 2723 0 obj << /D [2696 0 R /XYZ 431.194 293.898 null] >> endobj 2724 0 obj << /D [2696 0 R /XYZ 163.387 282.939 null] >> endobj 2725 0 obj << /D [2696 0 R /XYZ 439.354 271.98 null] >> endobj 2726 0 obj << /D [2696 0 R /XYZ 179.781 261.021 null] >> endobj 2727 0 obj << /D [2696 0 R /XYZ 95.641 226.65 null] >> endobj 730 0 obj << /D [2696 0 R /XYZ 199.372 215.691 null] >> endobj 2728 0 obj << /D [2696 0 R /XYZ 95.641 210.585 null] >> endobj 2729 0 obj << /D [2696 0 R /XYZ 95.641 205.604 null] >> endobj 2730 0 obj << /D [2696 0 R /XYZ 304.989 183.811 null] >> endobj 2731 0 obj << /D [2696 0 R /XYZ 391.125 183.811 null] >> endobj 2732 0 obj << /D [2696 0 R /XYZ 475.328 172.852 null] >> endobj 2733 0 obj << /D [2696 0 R /XYZ 95.641 138.481 null] >> endobj 734 0 obj << /D [2696 0 R /XYZ 224.637 127.522 null] >> endobj 2734 0 obj << /D [2696 0 R /XYZ 95.641 120.324 null] >> endobj 2735 0 obj << /D [2696 0 R /XYZ 95.641 115.343 null] >> endobj 2736 0 obj << /D [2696 0 R /XYZ 252.941 73.724 null] >> endobj 2695 0 obj << /Font << /F41 999 0 R /F35 919 0 R /F27 911 0 R /F40 935 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2739 0 obj << /Length 1092 /Filter /FlateDecode >> stream xÚíWKoÜ6¾ûW,•‹!©÷¡‡Ôn NÄ›SÓWâz èU‘{óë;äPòz׈Õs æpø˜of¾jÙŠÂ[•)ɶÊyIx–®ªö‚®îaå· æwÄ,†¥|“´Èí†_Öï>À™’”Y¼Zoݾuýgpµƒ‘cñ”ŒàøEËQÿ„òGÑíEþµþýâ×õl€Ñ”°,YE³…SQœS’Á˜0'é ‚çç nûîþZé¡!§ÁáZùIUÖæ»qú´ŸÄÓUÄ)ŒÌ€2aAµ×¦o­ çÛ•5܃Ҡ*³CV’à¦÷¸ Í¨º{”U‡K;UíPõö2Æ‚K?óDç ¼õãƒj\ÚxƒUß}“£‘µu¼Œ@NKÙô6²<0;‰BÕˆM}W#P¤Üd.» ŸÓó–—þJ›~IÅ Z¤hÁ‡¡‘Ç[B$Ìo¶8Îl‡“uïòÚ®7Ó.+°žÍ÷BlÎQЧ¥ DÉN”«†t¡q"ž¸H¤A‹¡è%Îåc%¿æ#1_„²òVN®(–Ö;©å3Ì…Ã|‡ásIÐK¢(Iš&Ë*‚–O„…ý8lI&/_ä~FI\žüüÇäÿ¿uþgZçDß;ÁM±´wÞö•häµõÊ1,‚}ÕúŠÑS#¬„Q½‡Óo}G·ñ¶×O%€±¬L?–¡ûC†, ®7ŸFËë~Ћ(­@Ìó't²¾DÍà ô0KIÛ“Qm eGQ×' :ùÐP¬Ð ÿ8pÛÜØmß‚šµ{ ¬}_VVÞTï±Yîž3Û¥ÏEëM?؈²Ÿ¿‰f/ÙW']?ØW´µüÍÂ,ß4¼ |å-Ëóûað±3ç¾Ϻ¤ð³SK7r,„u-;×®îÚÈö Œeù½ñó½ŸÎ]VLP»è»ÄT£Æ… Å‹Ÿ&זŦyjÿÏ ìstRÞÞ¹lµƒ~޼Ìs¿g»ï*›µ—¢Â³„pзô/ «òªoš×¿b0${…+wFMŸRZþ½—]%—åc2üQj `4€[à¿Ô‹H3Ahíéû©G5ØÙÿ<˜ïùg9ÌÝïê¹÷wè½-ÍÓ_.Q’“nˆà'¡eöÒo—„$IìKþ£ŸNI~z7l)8žš®üàFendstream endobj 2738 0 obj << /Type /Page /Contents 2739 0 R /Resources 2737 0 R /MediaBox [0 0 609.714 789.041] /Parent 2694 0 R >> endobj 2740 0 obj << /D [2738 0 R /XYZ 95.641 729.265 null] >> endobj 738 0 obj << /D [2738 0 R /XYZ 239.591 687.92 null] >> endobj 2741 0 obj << /D [2738 0 R /XYZ 95.641 680.722 null] >> endobj 2742 0 obj << /D [2738 0 R /XYZ 95.641 675.741 null] >> endobj 2743 0 obj << /D [2738 0 R /XYZ 454.453 656.04 null] >> endobj 2744 0 obj << /D [2738 0 R /XYZ 95.641 621.669 null] >> endobj 742 0 obj << /D [2738 0 R /XYZ 226.5 610.71 null] >> endobj 2745 0 obj << /D [2738 0 R /XYZ 95.641 603.666 null] >> endobj 2746 0 obj << /D [2738 0 R /XYZ 95.641 598.685 null] >> endobj 2747 0 obj << /D [2738 0 R /XYZ 252.941 556.912 null] >> endobj 2748 0 obj << /D [2738 0 R /XYZ 95.641 533.499 null] >> endobj 746 0 obj << /D [2738 0 R /XYZ 241.453 522.54 null] >> endobj 2749 0 obj << /D [2738 0 R /XYZ 95.641 515.497 null] >> endobj 2750 0 obj << /D [2738 0 R /XYZ 95.641 510.516 null] >> endobj 2751 0 obj << /D [2738 0 R /XYZ 454.453 490.66 null] >> endobj 2752 0 obj << /D [2738 0 R /XYZ 95.641 456.289 null] >> endobj 750 0 obj << /D [2738 0 R /XYZ 188.861 445.33 null] >> endobj 2753 0 obj << /D [2738 0 R /XYZ 95.641 440.224 null] >> endobj 2754 0 obj << /D [2738 0 R /XYZ 95.641 435.243 null] >> endobj 2755 0 obj << /D [2738 0 R /XYZ 95.641 400.996 null] >> endobj 754 0 obj << /D [2738 0 R /XYZ 205.11 390.037 null] >> endobj 2756 0 obj << /D [2738 0 R /XYZ 95.641 382.994 null] >> endobj 2757 0 obj << /D [2738 0 R /XYZ 95.641 378.013 null] >> endobj 2758 0 obj << /D [2738 0 R /XYZ 95.641 334.745 null] >> endobj 758 0 obj << /D [2738 0 R /XYZ 194.4 323.786 null] >> endobj 2759 0 obj << /D [2738 0 R /XYZ 95.641 316.588 null] >> endobj 2760 0 obj << /D [2738 0 R /XYZ 95.641 311.607 null] >> endobj 2761 0 obj << /D [2738 0 R /XYZ 95.641 279.452 null] >> endobj 762 0 obj << /D [2738 0 R /XYZ 226.868 268.493 null] >> endobj 2762 0 obj << /D [2738 0 R /XYZ 95.641 261.45 null] >> endobj 2763 0 obj << /D [2738 0 R /XYZ 95.641 256.468 null] >> endobj 2764 0 obj << /D [2738 0 R /XYZ 372.919 247.572 null] >> endobj 2765 0 obj << /D [2738 0 R /XYZ 95.641 224.159 null] >> endobj 766 0 obj << /D [2738 0 R /XYZ 218.201 213.2 null] >> endobj 2766 0 obj << /D [2738 0 R /XYZ 95.641 208.095 null] >> endobj 2767 0 obj << /D [2738 0 R /XYZ 95.641 203.113 null] >> endobj 2768 0 obj << /D [2738 0 R /XYZ 95.641 168.867 null] >> endobj 770 0 obj << /D [2738 0 R /XYZ 232.607 157.908 null] >> endobj 2769 0 obj << /D [2738 0 R /XYZ 95.641 150.71 null] >> endobj 2770 0 obj << /D [2738 0 R /XYZ 95.641 145.729 null] >> endobj 2771 0 obj << /D [2738 0 R /XYZ 95.641 113.574 null] >> endobj 774 0 obj << /D [2738 0 R /XYZ 224.836 102.615 null] >> endobj 2772 0 obj << /D [2738 0 R /XYZ 95.641 95.572 null] >> endobj 2773 0 obj << /D [2738 0 R /XYZ 95.641 90.59 null] >> endobj 2737 0 obj << /Font << /F41 999 0 R /F27 911 0 R /F35 919 0 R /F40 935 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2776 0 obj << /Length 1242 /Filter /FlateDecode >> stream xÚ¥WÛnã6}ÏWûR©X+¢.¶¼oNb·iã$p´@‹nh‰¶ˆÈ¤`Q1ò÷r(ù’+¤0`©áÌðÌ™¡D>üÈ`{£ˆ ÆÁÄ Fñ Û^øƒ <ùí‚X zq2Ö®Ò‹Ë9hO¼É(¤k£‘æÿ8×­۹à öâáø½f»ú”T4´tÿMÿ¸˜¥éˆ$^’Á°ópî|Ž}ocxuAã·A,+u'3Z²«kêßÙ¸Cøgµö{9ãÃRƒYF‚ÛY%wʆ«-l`£™¡U4rìxØZ #/£•§Bj|G=l¹zR;.6?q˜·kt–³¾–ãTÜFQ£-#ï\’8¬*iæ§ 3+èŽf;§ª5ÁP`•ÖöÁ VyÅ:'øSq¼~g¿á5„äÂá_ÿtIì0ý÷šº x2é¨û#‘§f:&ج$.À–#Pä8ÈAÑn4ˆÁXY˜˜€¹AV[k\äü…ç6WZËÂê¬é–—¯hô™½Z{û‚ \« ¹·!H1Ô§×¼I<1g¨3ôÍDOì¦BHE{t#È~§ÑëG]ƒX”XÄ@0gŒ&1˜RrañJñ† ™Ün1ó01¨iå¡êÌ$N…Y ˜g9W®Frƒó6Ð29ÑfßÅÇB¯q'#KçLš1¯qÑ8‡±`e¥¥±Ãs“IÅׯ¸°/¬·{Zöv6× Ç¼µé¡¬fhDÑÝMQ÷xÿV¾ÀÞ·ñ[ NªKƒa¤¶bM!óºhk™¢ ÙnËZBÔ›ÏíæTÑ­YO"¥é#ÔšïL݉錄÷ª¸’×ê´3äÜæ¢ãmƒ1Ñ!3D*+lÚ¥íüjGE]RÅe{º*ÙŒ’uÈÄþ¯žR0’OËËÙJ7šfÓ«@8+‚¤vÍõ+n‹üAÛFz[ì{q4²wÉ_³;.Þ»:âÀ‹á¦D=Ù¨ªQuk}ñ‘ ek‘ˆ::6:Ï‘¥w¤éœ8†Í¬Ñ•nJæÊÑ´ =BÈ ÿ°µÉ î)`|OjÜ ˆõÑ õÕPô"F¥Or_JùŒR—õ–±‡šÀÃêÆšw·I«µa9´SNô‹þþæv9»îwjŠúgÎÖ´)NÛV:v&qlj» ã‡›p‡3ÛÀ!+ØQbÓEalBw”.˜6¬5¤uXW,ãú–p]IL”]‰gRd—8ªœ¶;µÔ”(åþ€¨-&8@þí-Ÿ}ƒbŒŒ¯/¾;Aýh0ç÷ÓÅ ¥¹ x¸|jv ³cµ§Ù_(,æfùK{ð ³ =XÕ«ÛejtÀXó—o¦éì°LÚåÇ»éõÏ,Þ̦Ÿ±Ø†þð}yððÏâØ &èu®ßW¦  ÚÕÃ;ö¿{µ¤\8>¢\˜SÊÁjãê·”Xg¬ ñî†È:ì ÁñPÃÐN«Hë´£~9æa${ç[ËÿA) ðbº\~"=§ÚçY:FÛ?ú^*öÍ~aˆ’?³³B‘ íê¯íªKºSÁ[[Sžß¿\de“Ÿñm·ƒÌ”(ÎÝq´hïµ×Þ]Ç4Ãh ðÀ8Š'^œ|Ò|øñ%}ùÇûÿyßendstream endobj 2775 0 obj << /Type /Page /Contents 2776 0 R /Resources 2774 0 R /MediaBox [0 0 609.714 789.041] /Parent 2694 0 R >> endobj 2777 0 obj << /D [2775 0 R /XYZ 95.641 729.265 null] >> endobj 2778 0 obj << /D [2775 0 R /XYZ 95.641 741.22 null] >> endobj 2779 0 obj << /D [2775 0 R /XYZ 95.641 716.314 null] >> endobj 778 0 obj << /D [2775 0 R /XYZ 239.242 706.351 null] >> endobj 2780 0 obj << /D [2775 0 R /XYZ 95.641 699.153 null] >> endobj 2781 0 obj << /D [2775 0 R /XYZ 95.641 694.172 null] >> endobj 2782 0 obj << /D [2775 0 R /XYZ 95.641 662.017 null] >> endobj 782 0 obj << /D [2775 0 R /XYZ 221.15 651.059 null] >> endobj 2783 0 obj << /D [2775 0 R /XYZ 95.641 643.861 null] >> endobj 2784 0 obj << /D [2775 0 R /XYZ 95.641 638.879 null] >> endobj 2785 0 obj << /D [2775 0 R /XYZ 95.641 606.725 null] >> endobj 786 0 obj << /D [2775 0 R /XYZ 219.028 595.766 null] >> endobj 2786 0 obj << /D [2775 0 R /XYZ 95.641 588.568 null] >> endobj 2787 0 obj << /D [2775 0 R /XYZ 95.641 583.587 null] >> endobj 2788 0 obj << /D [2775 0 R /XYZ 95.641 540.473 null] >> endobj 790 0 obj << /D [2775 0 R /XYZ 225.942 529.514 null] >> endobj 2789 0 obj << /D [2775 0 R /XYZ 95.641 524.409 null] >> endobj 2790 0 obj << /D [2775 0 R /XYZ 95.641 519.427 null] >> endobj 2791 0 obj << /D [2775 0 R /XYZ 95.641 463.263 null] >> endobj 794 0 obj << /D [2775 0 R /XYZ 180.862 452.304 null] >> endobj 2792 0 obj << /D [2775 0 R /XYZ 95.641 447.323 null] >> endobj 2793 0 obj << /D [2775 0 R /XYZ 95.641 442.341 null] >> endobj 2794 0 obj << /D [2775 0 R /XYZ 95.641 407.97 null] >> endobj 798 0 obj << /D [2775 0 R /XYZ 213.32 397.011 null] >> endobj 2795 0 obj << /D [2775 0 R /XYZ 95.641 389.813 null] >> endobj 2796 0 obj << /D [2775 0 R /XYZ 95.641 384.832 null] >> endobj 2797 0 obj << /D [2775 0 R /XYZ 213.933 376.09 null] >> endobj 2798 0 obj << /D [2775 0 R /XYZ 95.641 341.719 null] >> endobj 802 0 obj << /D [2775 0 R /XYZ 189.101 330.76 null] >> endobj 2799 0 obj << /D [2775 0 R /XYZ 95.641 323.716 null] >> endobj 2800 0 obj << /D [2775 0 R /XYZ 95.641 318.735 null] >> endobj 2801 0 obj << /D [2775 0 R /XYZ 95.641 286.426 null] >> endobj 806 0 obj << /D [2775 0 R /XYZ 184.418 275.467 null] >> endobj 2802 0 obj << /D [2775 0 R /XYZ 95.641 270.361 null] >> endobj 2803 0 obj << /D [2775 0 R /XYZ 95.641 265.38 null] >> endobj 2804 0 obj << /D [2775 0 R /XYZ 95.641 230.814 null] >> endobj 2805 0 obj << /D [2775 0 R /XYZ 95.641 159.701 null] >> endobj 810 0 obj << /D [2775 0 R /XYZ 213.36 148.742 null] >> endobj 2806 0 obj << /D [2775 0 R /XYZ 95.641 143.636 null] >> endobj 2807 0 obj << /D [2775 0 R /XYZ 95.641 138.655 null] >> endobj 2808 0 obj << /D [2775 0 R /XYZ 95.641 104.09 null] >> endobj 2774 0 obj << /Font << /F41 999 0 R /F27 911 0 R /F35 919 0 R /F40 935 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2811 0 obj << /Length 1145 /Filter /FlateDecode >> stream xÚ½W[oêF~ϯ@y©‘bïúnŸ8à$œ¨À9ªÔTÕb/Áªñ"_Bóï;»³vÍE ç¥ÉÃ~sñÌì|ãHφÒ <ËwIo@‹ú^/ÞÝØ½W°<ÜíáLƒžcyÃtøÝ|¹‡g+ð^´Q~Qò‡1Þ²}Å‹¾I=Û žÏ%/ÊŸÏX^³¬ÿgôí&ŒÚÄö,â»=³ÍpZ‚é lˇ“R+ n[œ±Z1JŽø°å9S7¸è“¡ÁY•æ¯hghÈùA)jås ¦í!tÎrÏãôŶ)dáÉ.ʃkÀÅLE{*z#²L0ô4-ñ¬KžhMŽ'Ï_3°cû3võ{Cè†í2¡!C꫘·vßôm[5ï…8nNP^†÷ó®õMbL£'-¥UÆ»æÑsô¨Q]mEq‹y»4™ žgÑÀQÙÃïáüÇ(óI‡2Ÿv)“¢ ´-e€;”Ç e`gh@Ê€o^YhSlI£ÐéÎÙ’5üïlɾ}ÄÖD²5ŠÂ®î·§Ñ¸+Oç“©’Á—‚LQ=Í êå⩨yù”dªŠ^ô]˜˜Çå',ÓËCÚayxIJ”žu©ŠA:¡xˆÃÀ˜vFßX¨3±P©h—_Ñn^ YŽÎY©Ú|L½œPÿïÞï¿Ãß)ïW¾j“å_«ç¯³«X(«¢­^u«G »­Q‘ê&Ã^y‹d[2^6Ý(Nú#ëГ–flÔgЗn­ëoþN®Û2+}sÇŒXäKóVVõK ¢)´ÎDü7BuÍ#·-g ×Êã9C6R"þÏ^U›â_¶ñ¢éZÔt2¹¶}þQûäÔé·û{¸\!ò,OäþhŒ÷‹å ÑÓtŽBÎ_ÃÉôü8Z^Õÿ¹(v,ËÞqïfé†gi®& ÄCšeˆöb_ÃB[XoþæÓAeRHs#¡zߺ^ 5ŸR#u¬®ÄŽU—XHc]ŸÛ¾ €: JQ6x1»Ó^iµE„ù°¸’߇Ž·¬Y•##å±HÚ@kÞBµ>.Ô#+°]Ûöt)¿4Zµ}@3í¸Ö~螨ó¥³0%¯ä}JT'i ø]-0ÑÛk¼]£~±=¾ðÁAt>©«©âªy©¥*~Ò Œ={U_—>ŠƒZì׸CMºÁ3áeŠÌ%Ú‚µÈ‡ e3sJñÆŠ”­3mÞ±wk­Ð{Y†x ™b_*V.=ù‚{T¿éžœUi¿™$Tavé%ØBØnpˆeû; T:í<Ü,€¸`ºnzŠÏk<i¿™U@ÝYgÕBaÔú0øÈUoËड`}cY­mQg`NPR-X4ö>›j´O§¸?º¿Lw« Nß ,^üEàÚCËõÀý qƒÓØÒ…âSMÈ¥ NBendstream endobj 2810 0 obj << /Type /Page /Contents 2811 0 R /Resources 2809 0 R /MediaBox [0 0 609.714 789.041] /Parent 2694 0 R >> endobj 2812 0 obj << /D [2810 0 R /XYZ 95.641 729.265 null] >> endobj 2813 0 obj << /D [2810 0 R /XYZ 95.641 716.314 null] >> endobj 814 0 obj << /D [2810 0 R /XYZ 193.275 706.351 null] >> endobj 2814 0 obj << /D [2810 0 R /XYZ 95.641 701.245 null] >> endobj 2815 0 obj << /D [2810 0 R /XYZ 95.641 696.264 null] >> endobj 2816 0 obj << /D [2810 0 R /XYZ 95.641 610.311 null] >> endobj 818 0 obj << /D [2810 0 R /XYZ 191.621 599.352 null] >> endobj 2817 0 obj << /D [2810 0 R /XYZ 95.641 594.247 null] >> endobj 2818 0 obj << /D [2810 0 R /XYZ 95.641 589.265 null] >> endobj 2819 0 obj << /D [2810 0 R /XYZ 95.641 554.7 null] >> endobj 2820 0 obj << /D [2810 0 R /XYZ 95.641 503.313 null] >> endobj 822 0 obj << /D [2810 0 R /XYZ 171.288 492.354 null] >> endobj 2821 0 obj << /D [2810 0 R /XYZ 95.641 487.248 null] >> endobj 2822 0 obj << /D [2810 0 R /XYZ 95.641 482.267 null] >> endobj 2823 0 obj << /D [2810 0 R /XYZ 95.641 447.701 null] >> endobj 2824 0 obj << /D [2810 0 R /XYZ 95.641 396.314 null] >> endobj 826 0 obj << /D [2810 0 R /XYZ 199.91 385.355 null] >> endobj 2825 0 obj << /D [2810 0 R /XYZ 95.641 379.178 null] >> endobj 2826 0 obj << /D [2810 0 R /XYZ 95.641 374.197 null] >> endobj 2827 0 obj << /D [2810 0 R /XYZ 95.641 351.661 null] >> endobj 2828 0 obj << /D [2810 0 R /XYZ 95.641 300.274 null] >> endobj 830 0 obj << /D [2810 0 R /XYZ 199.362 289.315 null] >> endobj 2829 0 obj << /D [2810 0 R /XYZ 95.641 283.138 null] >> endobj 2830 0 obj << /D [2810 0 R /XYZ 95.641 278.157 null] >> endobj 2831 0 obj << /D [2810 0 R /XYZ 95.641 247.258 null] >> endobj 2832 0 obj << /D [2810 0 R /XYZ 95.641 193.275 null] >> endobj 834 0 obj << /D [2810 0 R /XYZ 199.352 182.316 null] >> endobj 2833 0 obj << /D [2810 0 R /XYZ 95.641 176.14 null] >> endobj 2834 0 obj << /D [2810 0 R /XYZ 95.641 171.158 null] >> endobj 2809 0 obj << /Font << /F41 999 0 R /F27 911 0 R /F35 919 0 R /F40 935 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2837 0 obj << /Length 1001 /Filter /FlateDecode >> stream xÚ­VÝoã6 ï_‘·Ù@ã“ä$¯»/tè°Ã!Ãì†AµåZ8Ç,åÚþ÷#E:‰û±s‡ƒHѤHþDR’ Ÿ\lò¤Èäb¥6‰*òE¹»‹[øóñB²†X¤I¾^ᯟ·o>€ö&Ùéb[mõWô¶Ñ{o†x©rÉ„èïÎ î'âÕÝA·ñßÛ_.Þo[grd©\,;_¦+‘@•J62;¡VOƒølö=† "Ýߢ¯7Òü¤'S9l%€Ê`Òé‹uõ5Ñ/B¨–e¾'ºlç‰b¹ŽÐ¡ ¿ôŽf Éàp]à2º$Þ²®gk·7¥E¦"ÁÁ±kç«þÀZåapÆa>èRBôù&Dg»ª¿‹7*J(ÛsT–cºi–¤+J÷í ]ØüÓBŠ2îc)"S~*lG`ò4 À ½¬gQ‰[#›F-€d€+Öx0È€ã{S&´¸ª‰ZP¨ Æ NöpGo *è!¨À¼ÔÅõú:Þˆh»}ÿç§ß>ÇÐ×ÛY•ZYêÒÒ÷ßÐÉ@¹`ƒhÐkµ¸mß±Lß´Æ&<ÆÞ™ZZO ;þmxhNòÖ±ÆÔ»”rns^í^1¾(ӻƳi–ᜑ™ #X×ý¡« È»±-[ZôímÇvšÈ­©Ê~G<CR= 8 §?3]p…Ãê/L"ŸìµofõM¨ûC˜î’㨉N‡*ö[ª™bôEä‚°N¶½®Æœ!¢ûñ,Ûv^2¶„ÊDô-^‹hN&jšÉqžG“lÂÓSµÝW ê ¯.[ê¶}Tá“øõxÚß·y©À4ÄdQÚ6Üs2Ù†~Pi„VÈeãÝ ²p·*×(˜6 ‚ÓU%¤xU“˜.J• dÚ‘HÓ’/à½üI,Û„ºÄˆŒ/›P ¸ G»SLOoV÷à¼áʇ&ãñ°ï³7دCÒì´mg•v€1-dD&ÕUE`9G„©•'p¢à N\^±A€3-ðæ8`U´Ò¼¯&2E%–·µ¬8"ú·ú„íùü8!Žÿ(t+ j@Læ”ç§ÞyÝrSœã‰‚¾~q¦ãà Ù Ò×EºoúÎÌ?û€K0 lwØÝŒÏê§aBtoŸI˜çOíe¶JÖàiYä›$W“Çö‹Ïú\¼ôbçöÿp&‡endstream endobj 2836 0 obj << /Type /Page /Contents 2837 0 R /Resources 2835 0 R /MediaBox [0 0 609.714 789.041] /Parent 2694 0 R >> endobj 2838 0 obj << /D [2836 0 R /XYZ 95.641 729.265 null] >> endobj 2839 0 obj << /D [2836 0 R /XYZ 95.641 716.314 null] >> endobj 838 0 obj << /D [2836 0 R /XYZ 194.022 706.351 null] >> endobj 2840 0 obj << /D [2836 0 R /XYZ 95.641 699.153 null] >> endobj 2841 0 obj << /D [2836 0 R /XYZ 95.641 694.172 null] >> endobj 2842 0 obj << /D [2836 0 R /XYZ 95.641 651.059 null] >> endobj 842 0 obj << /D [2836 0 R /XYZ 222.943 640.1 null] >> endobj 2843 0 obj << /D [2836 0 R /XYZ 95.641 632.902 null] >> endobj 2844 0 obj << /D [2836 0 R /XYZ 95.641 627.92 null] >> endobj 2845 0 obj << /D [2836 0 R /XYZ 163.387 608.219 null] >> endobj 2846 0 obj << /D [2836 0 R /XYZ 95.641 584.807 null] >> endobj 846 0 obj << /D [2836 0 R /XYZ 220.971 573.848 null] >> endobj 2847 0 obj << /D [2836 0 R /XYZ 95.641 566.65 null] >> endobj 2848 0 obj << /D [2836 0 R /XYZ 95.641 561.669 null] >> endobj 2849 0 obj << /D [2836 0 R /XYZ 163.387 541.968 null] >> endobj 2850 0 obj << /D [2836 0 R /XYZ 95.641 518.555 null] >> endobj 850 0 obj << /D [2836 0 R /XYZ 207.681 507.597 null] >> endobj 2851 0 obj << /D [2836 0 R /XYZ 95.641 502.491 null] >> endobj 2852 0 obj << /D [2836 0 R /XYZ 95.641 497.509 null] >> endobj 2853 0 obj << /D [2836 0 R /XYZ 95.641 463.263 null] >> endobj 854 0 obj << /D [2836 0 R /XYZ 192.916 452.304 null] >> endobj 2854 0 obj << /D [2836 0 R /XYZ 95.641 445.106 null] >> endobj 2855 0 obj << /D [2836 0 R /XYZ 95.641 440.125 null] >> endobj 2856 0 obj << /D [2836 0 R /XYZ 95.641 407.97 null] >> endobj 858 0 obj << /D [2836 0 R /XYZ 199.87 397.011 null] >> endobj 2857 0 obj << /D [2836 0 R /XYZ 95.641 389.813 null] >> endobj 2858 0 obj << /D [2836 0 R /XYZ 95.641 384.832 null] >> endobj 2859 0 obj << /D [2836 0 R /XYZ 95.641 352.677 null] >> endobj 862 0 obj << /D [2836 0 R /XYZ 192.089 341.719 null] >> endobj 2860 0 obj << /D [2836 0 R /XYZ 95.641 334.675 null] >> endobj 2861 0 obj << /D [2836 0 R /XYZ 95.641 329.694 null] >> endobj 2862 0 obj << /D [2836 0 R /XYZ 95.641 297.385 null] >> endobj 866 0 obj << /D [2836 0 R /XYZ 207.64 286.426 null] >> endobj 2863 0 obj << /D [2836 0 R /XYZ 95.641 281.32 null] >> endobj 2864 0 obj << /D [2836 0 R /XYZ 95.641 276.339 null] >> endobj 2865 0 obj << /D [2836 0 R /XYZ 95.641 231.133 null] >> endobj 870 0 obj << /D [2836 0 R /XYZ 192.149 220.174 null] >> endobj 2866 0 obj << /D [2836 0 R /XYZ 95.641 215.069 null] >> endobj 2867 0 obj << /D [2836 0 R /XYZ 95.641 210.087 null] >> endobj 2868 0 obj << /D [2836 0 R /XYZ 95.641 164.882 null] >> endobj 874 0 obj << /D [2836 0 R /XYZ 204.781 153.923 null] >> endobj 2869 0 obj << /D [2836 0 R /XYZ 95.641 148.817 null] >> endobj 2870 0 obj << /D [2836 0 R /XYZ 95.641 143.836 null] >> endobj 2871 0 obj << /D [2836 0 R /XYZ 95.641 109.589 null] >> endobj 878 0 obj << /D [2836 0 R /XYZ 196.562 98.63 null] >> endobj 2872 0 obj << /D [2836 0 R /XYZ 95.641 91.587 null] >> endobj 2873 0 obj << /D [2836 0 R /XYZ 95.641 86.605 null] >> endobj 2835 0 obj << /Font << /F41 999 0 R /F27 911 0 R /F35 919 0 R /F40 935 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2876 0 obj << /Length 1558 /Filter /FlateDecode >> stream xÚË’Û6ì¾_áS+ÏÔŒD½sk“lšNÖ9µ-ÑkÎʤ+Jöúï ”d{µiG$ˆ7@(Z„ðE‹2eY-r^2ž¥‹j.àäý]ä)â(†£|³´È‘à§õÝ«{¸S²2‹ë­£[×ovâÐÉv¹âiDŒÖ¯V¶ö{‚? Ý‹fù×ú—»wëQ@¦,Ê’Åj”p«Â*ÎC–ÁÊ9+£dT‚çÏ•èAÞ2 Ö·NÒ«û8¨"€x ŒBX#wáëoI»Îøu' @V–ÀÙû̓xXFdÄ4ˆ8 Ó™¯²œåI¶Xå) yé¸n葼Þ=-£0U߉ B´Ð'-‘I’³‚£É!ãqîxÔ›%ƒ£lÕöüܤp±Š2–Ä…§õt 2 ªŸó@ÚwªQ?sæÂYµ“Õ#m M«|R¶SújƒÎÂJÏM×D×.£"Óv„MGÑ*Ó[¯ƒ®Œ¶ÀPêjïöæ‚•’֧ʇŽÖÊé€h¬‰—$”Ï.A‹îAµýfÈ9³¥UYÛK¹­éuÍFÁ)+“[G•íh†½É€­þMcNä qè˜óz`a ÓÊy9˃_e»5í~°¡ñV¡ŸQ@R†iX›AEm¼áદ¯½ì?Ã?I ¤Ñ…ö1IØ[Ç)îÕÑoDM@-Ùy&Rwàº@Qª<8ñpñ, (\J¼p„+³ÄèÛ2N.‰·b uÃÛëwï¢?6cKú|£ªcúùýFi)†B3Jwc¢Ç†ýîºvô gI]+‹ÑJ²èJYãÕxØÛ]°Õ €ØKûŠ’l«'Ÿ¯.Y{ÃÞ»›É,ëï.B7 ö×ò^vãïÜÈŠ4x«ì¡ÞC;Ù|ŽÊ§n≺Sv:z‰«Â(æÙ¥öJ×ê¨jè̳lžß¨Åذv ÅŠ+±êz2kN2ÖC\ÌûnUÆ­µ7c¯Ðsv,=”:eõ i÷ ¥ðh*‹X|¡¿Í×k¯}4>eÏ“ßeµ3cá´gbx-Òg³CL%­•õK5ÚI|é"kúvV!4/O¯2Üà[3÷¦ÀÕ$aeLW7¬U÷_ÉÚ¥S Ü«þЊ=màuÖŠ<Ø(-Ð~ÜÜtäéÑÆ¸Æ»Ç€VAâ“pQ€ø ÅsÁ(Âý3þQmåGhö¹ž)gQ”{ºèGçøN™‰ÖaCO5”r³üqùøü>>ëJcËØÜ}³Ú˜~hËX]v˜ Æ5”›÷”ôÁÞœ‡ÜƒºÐ2íõs{ÑÝ%¼õéePVYbéÏÇÍ,·˜t<>YлbÀwÜÒ0`8¸Φ§ÍGmNv¢#h<¾xR*ÜwïýDY; Ž’¨¥§è#e;óØá™y×;ùÜGà 8ý?)±°Œ=ÝEwÊPUôAVŽa’Tʺ~4CØmzÛ-Pù`ë,ÔV0B6'¬øež?¥òwÿßÓ¸³‚Ù5IÒ+?à¬!4\ˆ9͸îÅ£$hKø§— ú¸?XBpÌÁÕ½§LnuèîÂ…€|:À¬#u%¯é ójn8s ì&4²È½ŽfÛÙR ™Ûâè·mTæàx@Ü€VäÞ«°q+ØÞÈ­™¸‚óÛ3%!²sÃCwõýÈ|dg§K(?]~Ñ/Ë“i‡Ž©¯ÆIÐÕ·ða’'Áé‘°ão‚è^$R·£Ý¶o}º9º=t‘¹©t½,¡m`Xà Ãyâ<€¨ƒÀEøpÛÐ*hîm°2{B©Li5œœô ík©œj‰§ð¿7Ô\ÓÌO]N#†oÌþ0¶+…1)ê¡ ,Ë®«aÐþ2Q+ÐGVñgÂö,µžš0H‹ó8#ôÚ®ü¯K6äàmœOÐvD/%º©2˰ |jut0þEÀ!uy¿13y&…UCt!1ôðXŒÃ õwvûï»~÷²´d)ŸýûM‚%Y ð·~¾i¢¸ä$œn ,ÿé. endstream endobj 2875 0 obj << /Type /Page /Contents 2876 0 R /Resources 2874 0 R /MediaBox [0 0 609.714 789.041] /Parent 2893 0 R >> endobj 2877 0 obj << /D [2875 0 R /XYZ 95.641 729.265 null] >> endobj 2878 0 obj << /D [2875 0 R /XYZ 95.641 716.314 null] >> endobj 882 0 obj << /D [2875 0 R /XYZ 179.407 706.351 null] >> endobj 2879 0 obj << /D [2875 0 R /XYZ 95.641 701.245 null] >> endobj 2880 0 obj << /D [2875 0 R /XYZ 95.641 696.264 null] >> endobj 1030 0 obj << /D [2875 0 R /XYZ 95.641 643.587 null] >> endobj 886 0 obj << /D [2875 0 R /XYZ 201.252 610.401 null] >> endobj 1031 0 obj << /D [2875 0 R /XYZ 95.641 610.25 null] >> endobj 890 0 obj << /D [2875 0 R /XYZ 185.872 580.164 null] >> endobj 2881 0 obj << /D [2875 0 R /XYZ 95.641 572.417 null] >> endobj 2882 0 obj << /D [2875 0 R /XYZ 95.641 544.976 null] >> endobj 2883 0 obj << /D [2875 0 R /XYZ 95.641 534.017 null] >> endobj 2884 0 obj << /D [2875 0 R /XYZ 95.641 519.074 null] >> endobj 2885 0 obj << /D [2875 0 R /XYZ 95.641 519.074 null] >> endobj 1032 0 obj << /D [2875 0 R /XYZ 95.641 279.275 null] >> endobj 894 0 obj << /D [2875 0 R /XYZ 173.292 247.294 null] >> endobj 2886 0 obj << /D [2875 0 R /XYZ 95.641 241.678 null] >> endobj 2887 0 obj << /D [2875 0 R /XYZ 365.104 230.856 null] >> endobj 2888 0 obj << /D [2875 0 R /XYZ 95.641 207.125 null] >> endobj 2889 0 obj << /D [2875 0 R /XYZ 95.641 162.996 null] >> endobj 2890 0 obj << /D [2875 0 R /XYZ 162.814 152.251 null] >> endobj 2891 0 obj << /D [2875 0 R /XYZ 95.641 111.583 null] >> endobj 2892 0 obj << /D [2875 0 R /XYZ 396.682 103.434 null] >> endobj 1033 0 obj << /D [2875 0 R /XYZ 95.641 73.725 null] >> endobj 2874 0 obj << /Font << /F41 999 0 R /F27 911 0 R /F35 919 0 R /F40 935 0 R /F39 927 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2896 0 obj << /Length 843 /Filter /FlateDecode >> stream xÚ½VKoÛ0 ¾÷W»ÔjÅ’ß=íµèÐ ;d§aÍQbc¶åYrÓûñ£D%uÜì „E‘Ÿ0õBøQ¯HHS/caiâ•íYèmáæúŒ:ЋH’gæêåêlyÚ)ÒÈ[m¬ÆjýÑUñ^‹a°$ô)AúA‰A#ÿ–w#oŸVoÎ^¯¦cš“8¢^pð0wDYHR Œ‘‚Æ,óhHФ˜¢h± ‰¿ ¡/Jãly%S´MÁa¾×¾­ K2_twò‹PxЕ0LîßÖq[w{ù° ¹/z9h÷žº–{{/·oQ°«u%G¶8Ê®?Ü ³‘ƒh1¹@S'» î “¼ÔõÀˆBº7\ ¥ênkdÌ— êoš¨Š Êªr¦ÔØE±~´Ò›ž9ÚB]˜¯x+N`å Kë"T©f)ɳâP›Ä'õ` ‰ãØ)ë"H‰XŽRÄöâä—±ÒÍÛ*l£â[qü®ªËʱuÓ '{áÞÙ8 ³æšæÊÎÛ‡ oëæáϼ[#3,rœ¿&Ù‚‘ išY©Õ%‡^¦ûÆ+HÎÒ£ÆKÃÐ߃ÀSp¬Ÿì^~µFÞOª ¢°r‚ý:ÖûraÝõ£¾@Þ¥):4KÛC'h™zÎ šÌ!‡Y:øàk÷Æ™Á;¥A {i=qNN¤ëš˜¥¡CŽfÈf¡¬QŠeI]då±¥ÐI!®YêÞJ¤¥ì4zkfFaf]ª¦Òl¹³h=+§ÜšÀá°Þ€róÙÑv`âÝ÷‹ Èé#QåP÷ú·%ÊJbç<£ÏùŽdÞk‹€úOû­}è¹E/f³F„Y/AœؾiHbŠãøNjœåé"7½ ÓœÅÅt‰ÛM}ÜÂ8ë”Ì  J8}=§{UX Y†ª?uPiÝ_.— ,p»{ˆ’£-v)6ØÀoé„^Ρ¸ÕãÈŸ„Ãþu8-¯-/[œ©òy'¿‰¦!% ܯÀÓ?Býkô[ ø'%/I¯F"Öãßg=þ?¸+©+¢´*ë“°Óˆdæû$ÊÁd’=A~êk)a?û:Âþåy]wendstream endobj 2895 0 obj << /Type /Page /Contents 2896 0 R /Resources 2894 0 R /MediaBox [0 0 609.714 789.041] /Parent 2893 0 R >> endobj 2897 0 obj << /D [2895 0 R /XYZ 95.641 729.265 null] >> endobj 898 0 obj << /D [2895 0 R /XYZ 173.653 706.351 null] >> endobj 2898 0 obj << /D [2895 0 R /XYZ 95.641 700.735 null] >> endobj 2899 0 obj << /D [2895 0 R /XYZ 170.341 667.995 null] >> endobj 2900 0 obj << /D [2895 0 R /XYZ 95.641 662.8 null] >> endobj 2901 0 obj << /D [2895 0 R /XYZ 95.641 630.919 null] >> endobj 2902 0 obj << /D [2895 0 R /XYZ 95.641 565.659 null] >> endobj 2894 0 obj << /Font << /F41 999 0 R /F27 911 0 R /F35 919 0 R /F39 927 0 R /F40 935 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2903 0 obj << /Type /Encoding /Differences [ 0 /.notdef 1/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring 10/.notdef 11/breve/minus 13/.notdef 14/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl 22/.notdef 30/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 127/.notdef 130/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE 141/.notdef 147/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe 157/.notdef 159/Ydieresis 160/.notdef 161/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] >> endobj 1117 0 obj << /Type /Font /Subtype /Type1 /Encoding 2903 0 R /BaseFont /Courier-Oblique >> endobj 1104 0 obj << /Type /Font /Subtype /Type1 /Encoding 2903 0 R /BaseFont /Courier-BoldOblique >> endobj 1060 0 obj << /Type /Font /Subtype /Type1 /Encoding 2903 0 R /BaseFont /Helvetica >> endobj 998 0 obj << /Length1 1642 /Length2 13200 /Length3 532 /Length 14047 /Filter /FlateDecode >> stream xÚíwePœÝ¶&î‚K‚—àîîÖ4и»»»»w÷à®Aƒ» Ámø¾sÏ=Sg÷×ÔtUw½{=k?Kž½v½MI¦¨Â dbk ·µqb`adæ¨)k(YY™€me¤œŒ¬ïfv$JJ‘ØÖFÔÈ ÄЙDA@++€…››‰ bkçî63wмsÐÒÓþ—å/€±û?‘÷Ž`3Õûƒ ÈÊÖÎdãôNñ½Q8™ƒ¦`+@QMXVJ@#ô^„ Ø îðŽ*:0d㢘Ú:¬þ±mmLÀ•æÈøÎ%ä08Ú€à÷ÚAn@Ý_Ðg€ÈÁìèøþ ;ÌŒlœÞ{àd Û­œMþJàÝnjûwBv¶ïÖïØ;™¢­£“#Ðlçxª(*þ<ÌœþŠí~‡¶¦ïž&¶@ç¿Jú{§yGŒÀ6Ž'›Ó_±ŒA°£•‘û{ìw2;ðßi8;‚mÌþ•Ág€ÈÌÈÁÄ äèøNóÎýWwþU'à«ÞÈÎÎÊýïݶ{ýg`'G•)# ë{L Ó{l3° Ó_GEÊÆÔÀÂü»‰³Ý?1Ãß ¢ùëÌо'adbkcå0™"1ÉÛ:½‡Ðüß©Ìø?'òÿ€Äÿ#ÿÈûß÷ß5ú߆ø¿;ÏÿN-île%od ú{àŸw @ð×%þîFÖ`+÷ÿjÿ{j€þ‘¥2ÈÌÙÊÈáßáÐ Ù˜½+ÂÀÍÈþ+ØQì2Q;ͦFVï½úÛ®fcr°Û€Þ5ý»fæÃTÍÁ@K›¿šÏþdcòïé¿ËôwòLZ’r²jÂôÿç½ú·Ÿâ»þNªîv Àѳ5ùÏÅ_,¶nONf3ûûؽ÷ïÿ"âßD,ÿZË99€Ý:ÌŒÌÌ,€÷ß~ÿµÒû71 ­É_'FÅÉÈÆäýý§á?z¶wI‰¾WÎÊÂò…ío+ÐÙÁá]ñ¿oƒ÷Vüsý÷€@n Òò¢-7È"-3Ý©7whBT§¯‡z(Ø®¤Aõ[_µm·oZØw…ásM0cãÏk›û‰ÝËž4ÝþHŽuw è<ŸÈ›œ¶·sªƒ“~?€I¿5ýT#Êób^vF›ƒY}{BIY¿øŽxªƒÍáâŽÖÜ¥À›âÖ͘Zû±£«¶ðä”*ñèî–z`txh°û ¶w>'‘’ו*ÒÏ>‡ð«¶Z¹XeÓƒãÆ„êȤï#;|~fÏ‚ÙíäßÀk^V >gý+š1»ƒõÙØ ©‘D̽ñd«Æí’IxÅQ¼ób¦†ޝVüK±›½·yA¨¢'?‹@ü›LG–‘›fÔð³åÃV».}£û6mÌ“Îu»Xß]}ªœ/ 0±Ù”˜×µ*{óEU¹Ýƒ)Îy†»Ìc¨!( ¥ãi‚6¹\EÅL Ó… (ïÁé „°aÆ)¹`ödj 1B§Œ"c=É%”¬E½þ+IØó}DžCr”ó-β}MÃ2¦ Éa³÷Ѝ™3â†G¯ú¸È`©ä‘Éþ³ÑÃü6×jÂw‘é¯í?ø€ç‡»¹Ä\Úb~É«L7ñÒF$˜ëµr¶ƒzJµš*™1¤; £IÝ2S¢øY“$Î·¶ãP$¢ðœúc·ß×>-A…ãüÒ¢ÕAmkåÐ3-Ýr. è42ºm¢°•ª“—G°ýyv¢—œwëkÓ“8‘†i ¢7„iyšWÚçàÎ>,ýÙºåE£¬P4íï¨ÓéÐæò öô5¸ Ë Ö»÷ÑRø-¨í·^KÞ©§¨:ˆðÃñµn¦ß¡\áy; æRƒ4^ßÜá°^;)%Z’•Ô9±Y»ŠkE5D&žVåIif…¥z'¦k½$0fÂI²–zù©½kc‘$yZê$Þ®cæ8à íͨé²p7cO˪¹Ñíö$xÞDE€ïCB4à-ËŒ­Ú a‚†:u '“rßé8ÄWóÊ“Õ>§FC ÖBö­#KYÍ3™†<‚í\º”b»ùI,q‰°á¾Oåõ;]ŸìûÖ–(y °ûË…AJç꘣ë:¡¿_òΰú±ÍÄ"äðB¶ö—øM2Qyj 2ÖžÕ½«ÉÖÊ ³óèãiž%°p]1¥g.ÛüQÛjó6JÓÛùaIö”pf.cÑÚØv7ŒÍ¯¡…ÇJƒð³LëGÏCê¤3Gæ¿|o8¾ Bʬó1–Õ>ïa|Ø÷ÑÔCZÿ¥Ü_å¼ûE§Œ—ÿÖKóX]F«…¢ Háêèf{Ÿ©WבíX»˜3ö,à÷®ûSíËÀøçgäŸ#ôÂüÁ+å¶,·Œ9X3Ï î!é€ò^³àÜß5'ð‘ö’>èåÛƱ[É{fªh¬_ÑÏð:2“R5>Ý`Õyäƒê ‚BÂÓ¿?DîÓR°M¬õ𠆿Q¥S;¬Ñ!Ã-ìU`†üÄ€¬ I0½¾÷Men‹ªÒç‚ &?žJ ›óÚ©ŸcÄ*§¼™¯Íí'BÕ‡Co\ãlS²û)9=Dv•ìý¼ŽŽ4!Ù¥§ T#ñ…^€ùíù·:lP'[Ý=µª„ä—ïþKwJ¤Ïæ"õÞÂþÁT.ðÄÝRÇg0Iʵ+¹Eª|ækÉc”™wdá*?4û„_€ýˆÙž+ÑPPäñK‹³,qÒã.8Me°&³ÑnŽ¥–*žÄ°ÂSp¾§+2éÙcµAGè–`¤r™âHí3aö~¾6!VÿDËi^WõføøO“?E)_?§&­ºK~d€üÓbCJúÉJ[DÅ6Ö8Us¾ ùÝi‡ðØú^ç”Y&Ì’¬ÿW†ÄñòÂc}˜fHºh èäG*fë8ü"œ8½æñ!ò9m“6õ!ç¯õ¹ð·«—Ó)†§,ñí P¥½|P~3³Š£Îãn5T´ò†Úq¥8$ ”ôE²Е­9}»–1M#Y;µŠfôZl1¥1kVÓ·ÖQ²‡ùÝiì~øvàhŽKf¦^é<ŽtD(B!âvžÝŽ= ›šÀâbr…qé)/ÂóƒWý³þ¶XÅ O<´Äz²ô©½?ª…»÷[VS¿¿Ù|æékÐ<¡Îoz¿b¥âl×ö‘†Áü+cã$5û’&uVײš(3ÕuêÂÒ×rƒsÃâªr€ ImžYRÀó½ —dš0T¤…>eZVn}p4²{»M?¤Á¤[cóÈ¢eÐý‡E1ù°GÓ¹îÉù°mt5Y‚N\eç%~U8¾’:§,÷«5½p_µ½ñ¯À¾èðßéäôôqÙ­¢Z} зHÚog…L>‡;ž†šþä~yÕDÐIÝ„8üŒ· KÿKÞÝ^£‘Q­QÀÙ»³ñuSsYÃ-Í㇯Չ¿—<Ž%àZÒë—ð³ÿ?cèðK¾CZ•uµýó–ËBVë§õCv¾©ôíØøEÁEͤü‹„"?"ÐFèQCæ˜fn6g"påf…ID[Ö´›o<$ S;:¬®1¯ì]Ïð%[é7ÊÒ0Çï[O\èù|yÄ#opáÉ9,ÆHwÍ»ª °ÊR-B<ÆÃ•†¢£?ƺ¡ï_D B÷8\À-ù*fúž½±2Lq‹-nHÔI!wEˆ³}ѵ#µ÷n;‹Xž¾v5"3ò|æ˜ñ ÇDB.‡ûxŠÑ‘@¯UAÀ©sáTÜ“×4¹È¥1”n|D¿’HÄxQgKÙ5 ã'ÂÆ”:Ü-²~u”äEŸ2$íDùÚRö’[¾Ær*첈Lƒ©L|mß-±°]¤C™sô'¯¶ÄEé -à7 ÇyFB”Xi"´Ç ›€ze0*]´'¬{yÃ÷L~Xnf÷5¦ækÈüò;ð“Û„j‡¢0jå–ª3óUS•Nâs´*fp,=Gm‰‰@›ï FXr®éwÝ9á¼”óDŒ8¼ËP]5‹3ú g˜Dž¢7ûe£f}¨«ïYù¡büÄpì5k¿·ÄS£ýq¬:, îÝ‘51äI_AÎì¦aS[5E¡Ñ,ä›O§®ghÇ»Û0ZmåìúñŸ©ó.®†,±c -ž|/á¯"*dË?Ÿ5Ï _¿"B{§‘äø>u~ ±Ï¬ÝpçÎo£Éãv^T¸‚ý$ó ÓÅüm^ÿsa³Ûp ÏÏß,½;¥d›ë ¡3†ÝÛLnÂ26L-ë  U#»±ç7¦' ™Ûè×úumt’m_0:NŶg‡Ý\F¢d §öŸÝ#µ4Ió×sEqZL¿sI7žìFÌÜžt$/ `PÍËÑœ¡ጊüš]öËK²w™2Ûáá$;Y5ÙßDZ@ZŠg:ÿù3jNÔ8~¡JÅ&'\êº×ÒJŸûœž´Íçäk8ª+ÜhWoÚ ŸFÜãt ]û>oƒjaDœÆ785ˆ¼YO®ÌqRm³æ®…ÙåXœVÈ$YQ¦Á“œ´Ðò]+Ì% lj_®‘ìጣÍ&Õ”R™³ ëtyá/0Gƒ9ȱû"ëZ°„‰FḒ„È#w© ð›Ès+í®oþþªyÞÕåã4·7hg窧”;Øe1úº\ 7-]CêkVÆß<bS°Qœ}×Q»1×õȇ`>þöøœ{û3_Œ cA—c݆ïL\ü¤Àæãæ¯øÁÄ Ïf6~äçìay«~¢¯Ç=Â…8AùŠŠ·sÆ)ð'8cáÇ)¸˜$FögŠ-Že\.PR7 PÐþ]ynq³‰HÎÙÖ’r»ÚÀªøLgŒ¶Æž¨£µJ4"Åt_žIÓ t¾Æ ¹—5y“›à& °[>Sp³R‘0¯`Ù—T/ä¢Åú'öµ.pɹ¤ŠˆñÅûºýÏé•;œôbÊ‹ÖÊr õ¥sòIi‰9"Í¥¼a7X÷pöÎ`\H¦nH¬¾•X}(Ç8…Æ4” AÉ4"×óX²jn7{¾.¥‘²m-KKæO}ÌJq1<ü—¡I4²»·6öÉÆö è{î–ƒ¯:Ô”JHÆÂÍ_øYÔ¯ }\-~áa¡›¬6¹ãU|•: JÆÑïq¸â˜Îƨù-óÐÒ¹œ˜APƒyK²ý)€it´Ë³ÞÝË›ÌNA¸e7¨Î’´±«ÃZjDæ¹ÕÈ¡ÉK€ZÚpßýGåÕðq”(B½±Å ¤"ÊÐÉ$oÜ·óGú^jIÛz—y‘¼Ïƒ~‚ávÿ÷l¬s¹¼¥ÕÍøºû%YR6®ãÞ,Ù³ÅO"ãfy1f1tâ‡énS=Øä¤™c¸R-ñnD‚ªl7Ö…,ÜÕö`‡×»`×”ö¡C…x"z]w¿‘ÁQSš¥ƒ!*ìÆP&È¡ÞÓ·þ«Deùïœãžk¨j) y”ß}ÝN£ŽCÄ)¶› Ü“ª¿èé|®/TßïO` ù¦páÛhÀ9²F¢®ëÔãs T÷œxÚ{B[¸i‰—¸Ô¦§ ât謘ù¦ÖéäEKñCXVT&Ûvm_ªíM¹¶_‚àëÀà,&U1(ᆠy£w’-±mËr=wv#K5MÔÔ‡æöMŠÐ¶>rZógÇÊG™çDÉb˜*¢&bXÔe5,:1Äx¯…æ·_ÂïSøÅJÚÏí†åÃÌŒ±¡±¯c‚‚Ýê?–T=K ñ4BÄÏm'ë³Ý£Ò¿8É örWõ’g¯)&ø°O¦Œ:~ydìA»Ü"ÿÔåT0Ô†}öên5Ã|~ýåG¨¥}…ûÐ$­ò´À#¹ù4ýzEÕK'˜qëcó›å—Go2ªPkÝ::îÝ\еîÛÜ.먘E³;Æ·I zx±WdçJ6O_Öˆ˜'ÑÃ1{©0WOä"ð ‡$•‡¯V)o6{] yúŒÖF587t2 ˆÓo¹*¾o'ÿíXg3içÛƒ“–jJ%)ÂOÂB£iz»K{DÑ·Wfd<£ô˜ùbNùmé.¹8 ƒ™Yø´´q~e]ô@52S&!‰×¨Æ×¡çwóÖj± ËŸ…íˆ Bœm0šD^WÀð“ÎY¤û+ˆ7 h\å7ômÝ_ñ.,œÎš».ê²ËNðº8>Gÿ•ñqîæ³®+ÕsoÈë¹¥öú·ØQ^Óº¨ŠžzqðìÈN3VŸQ¾áA½øsæwL»%^ééUU±Ò€xTcc!ZÒ%©Øü˜ò»êH˜‹ÇA»4M>»€ÏkúÚ\AY]¤UEå!çð{Ÿ¬P[(et9ñл¹ŒuBùác¬â‰³KâVEV¸·¿éÎP° TD3R3$¤»A´š…Ìh‡á!8 ¬RR˜Z½ñù¢þøA¹žkHjß`Ç#c"Ý€_n› Qàg÷æ´ù“’yÙõëmk£lŒº÷5D”Ä™î{v~¨?}fÇœ½QsÐ.¼ ©š¯•Ñ\csí+ñéÜ©”Û¥§!ïa9í)è0òÄ«$¯ñƒ,óÙðƒ;ÂúÐah:Bs#&ÁUü‰5Ïj¨ÝBCûÏwíW]A8…džÐTwqY¦d’ÇN~ZR…õ,qE§¡û =ÁÊ·ØÚoFâX”‘TÉèÌ|—é-ñVÛP\úú¡Ø.þºC‚ljÎC9­\+G°6]ðÃb¨|ƒ"ˆžîǸ×X'¿Z°±ù ÇDèÓ#žÑß‘¨›ó92`AL|ëïÝ9ÔýÊÎ9ñÓWJ«Tònù“AadÎõÚaÊe!cê.ÑÄÞ2“'æßiÓÐñºuCBB0 øÏP1\lŒ$' !gu§¶âêª Ì·JHG˜× ^ lq)«³/¿ Æ_4²6Øê¨Ðá btRS+{ [¾Ö·Õ™*µcÔña":â{!9/>Ë­0`*¶Hm ªr7Œ~´œ+úŠ·„·A[Mt’þÊÃFw‰ëX2¾£óLš`§4\þMÞ¿ÕXW(ù  )£œ¸“Ÿ¸Î†­ §ˆ†;6VæÑëo’TRú³Qádd˜M\ •Ò(øûyEC?ÁÒ´m¶Ë—Ãwø;jF¼]쉛p¢¡Ä)ôñ2 ¶iéûÜv`ÖÄðuZcf>ÿ´Þ¾pœ2úé–KëãÏÔ=Šb‹„ªž7a>冿S\j'z,ˆà^®³"H2ƒþÁý,´eLP¢Ý£hþÓÁÒÎÚî­Vå釃zÅYh²–?a~€˜O£µQâ¹yO³uù̽÷‘ž©»i¸¹ÎË— ktUUU ”@e^õ}ðWº¹Ø.Ð¥r8Ý7ž„½Y]Ò(ÏVtƳhŽ[¯ä”ÓÇèn%+bDºº—j+âþÑÑѽ²Â×uòJYÎõ!JK¡þæ±¢©:IšCcÌM‡‰l÷¯ëzž„¤y/{[s:®C®ÈçƒÝSŒŽòàÊbˆ²²jÍ¥×ÞTo‡AWúÕB™Z³À%Píúf𝑩RÙÑòíÉÆgLjYd+ÒkÜø% i ü*f<¨ŽF@„ííƒÚWyºNlD{ÂòégMÈ;\q ˆ@±üfM4PqÃзô#¡ӫܾÂK|i›©õËõt¤à8g/ƒ«¡AÊšÂæµY¥Déù|f‹r§A#Y#Ëw£¼ ÷X½1JYœ8ÇmÑq¤m¦:s|ºséÛ”³}ÙõOäiŒ+ø×¶<ŽºÕ£B³-©påÊ”PÉíQS6$þB áª4™£ìLïøNà^ð0a¼Å²õ¢YB k~ØA‘—X U¤WÖôšA Iö6Üî„Çm9êÙÙÄòÊ )B¥ó(T+Žš'‹8uLèî# ¯Y+ö«ëõ¥/ßY$ªL/êxeìÊBgcàë%&1WvÒüñfPùŒ‰x.B£âÃ*V¶×É(mÚÚ4,毎|“µœÌ/Øßœ,¾‘ lç‰ø§7wÜlÅBk¡ñœÑÀ6>¼ÆyjÅ Šàl’] ’ë‹ê½kw/4ja;DbyˆÙ/~u·Z.ÈÅpÀËÈ‹íäàØ’c™Ú¿à%ZÍt‘bGç?XÞ©ëÐÞH©$çZEÜHÀ»öøLgμrGw"¥|@4¯i¢‘X»±š¾â*Û.âôQivÀ@œ†”Ä(#Ð6:` ýþcƒeÔår›!Ùª‘[ä8Ùý.¤F^?ªÖŸ$ç¾áp²Çïј(qëSÜëê-å`œ×K›ß®[ÜÙ¶áMóúšBÞô¬¤é,€·Á¼ì§+šú™’eŒ$Š9•ÙÆéœ#׫KžnzàeŒTA AÙ’Óï¨|°ɳá1„ ÁëÚõk¨ ½rÛw— Àœ%·¯öÙ¤“·¸ocÚ‘¯*V·Cõs´Ûî›ìÞ«Bn3.ó+»ÀìE×~¸ƒúEâ>ûŒpkZ[ã‰.3ë/ ç”åÎÝÒúôGf…¼6_?éÒ7š[v(ËN³°vwhÓ1[ ›iÀ"B]çÙ±uB §Ñ¦·¾µwØÚ[“þ\Á,Côe*Ikß–/QvuB¨¿ßÖ:O¶)SXÚ—Õ—ï‘Â66`­nhÐvvG${óW³íQšž}vV.†¼+f)è½$“ÃP§ ¦tb²Ë©§o'DBSù`þ{ØÔòšª$ƒý˜/GÓ-M"Ý9,Té4.ÕEå¨] HŽÈ´ôP±®%ÙPȸ{£OK  gÉ#–Rp¡«Ûjà…AÃäcáîÔÕÌÇzÿÇÅÐÈ|Æc\‡yQuÒWˆçˆ¾U„w>f1mìÇ+ÔECâWýoq6}PúM¥ã6ß|yI#ùbŠ‘÷3þýËÀ_á»_Î)¥ñ‹‰Þ›%·82<ú)~åL«s'LhÿNAUŒ#±Îÿmß™ÎѦ‡ÖuÇCÙ_Ú`›H¥ó1?>n³ÌŒžh„¦4†ù%RÐTó"éÉ|+ŽŠM2;™w†›½m¢VúîX;ðòÓr Ð’] wèo+ …ùLSÖÔš¿ €¢ÓN­–€Æ^Ø*< ©@>aSÚ•.%rÿ´£¬?À‰þÕ~vpfœ¶¾-M$0vvù‰¬à~EXÓmCî€6’׃ùÈ—¸UžÖ±‰ÔÄ4àì³Aâ C³Á³äK\Y侤×0‰P‰D–¼Àj—ë¡×ëgh÷Zð–ìéG[g…Pý概©×§bqr _U [ïh–vûJÉiSúÎgàÀ•ÒŒ$ dñ·<¸}ÒŒg‰Æ:šDfŠÓôz:Ð…HýMN ¼9Iꓚ»”°ü¥b[Ëš‡FF•ÆáýA*5µ%ráb¦1ç qÊÕOûÀ˜R ‘•Ÿ»eLW÷®êjü}^ßZ«ú$ à¿/æÀ^£§ëBà#!?à.¬öZŠ.V!^{Š!E&øÕ®6-j¼²)—s$Ž[¬ ¢áH$-î´£§Êf14’c ˆÜÉ4U6ã-_Ù„¦¿­Žýô¹#Yp±ÁœiG¡Y!e[šd¨”Ws^ÙcÒUü­ú"á¢:ÄÌé„ í:ЬÕAOk;‚»3¶8Ï PÀ:·r`'s±=»m3[¬b¬<8a–¨íÏŠEðpÍ£›Ylô'ø *´„N/¤Ú*òëÚÍ-žJ6]€rñJGžó%íd{YX8JyZ¯ýòs ÖÖžÌíëôûÌ*@Øe´"xHcjr £_¦_–æp.‰› á fjçm`ó刿(…¨=H'sÿöà>’êl¶3ú¸§W­SO ¨aÚF—Dè¨þ†+ÙSpõÇ7éG˜ñ«“·Ì+†eUد Û.¹ßäaU/°‹ýãKtT(±ºÎª/û‰·—©»”èÕð„ÏþÖÀç×þèå¨ghÀ®¶yøx‘LÊb¾Êü[vn½¢¤Meù„bd6•—{ޏ„ŸóŽÖðøÏ—3ÓÊcKýžî›YNÇ/Kæ">¢(“–ЈˆT¤ëaÁhÖ±{^ L‰îÍ£øU~Ó•È\Ôõ0ì’Çûj Å'+–ä¿}ØP ×‰Î…¶¥$FZ>Ki@)èB%O¤ªQ@õ„¤övGp¶`³Uð.` µ„_iÛ$‘> {KØÝ“J*i?ƒ’sƒ·„¹ TÓÒ©ð™×zN¯o‡%§¶$_uYçùì)÷£;æò³Àm"û+]Ùzªj¨bÆi7ÝrXe‰ÍŸ=8L•œÃ¼2-:;ä‹í"Ë$41ÒbÉãÚ›òW˜U *“î…¬µ¼ï=r6K.ë‚ÌJΜXþ¨úVQê=ÍH3sû}¢ ¤§Ë‚gÎupVêEažgÓ=ÿ¸Õ×Ã*Kk*-¬m_ßÃŒM(ó]€qIñ‚TLf9Ï0÷לFÿ÷ˆÁß¡ãÑ·¢‹‡h.åw#Âväk`Ãutú ï ¨Îè¼sñÿÜ'!èÈÃxù&Ô¼Ù9­û.,aâMãìioÒ‡xf]5ä»kïQ¥mÚ±)Ü.5Bë²L2G‰X‚®N!ØU8¹õ3=šIHL.Á²ô³oÛU9 ~¸ë)0YA+µ(Y‚wCf²yÞ{À?)ñ)ëQ¬‘AKÈíekL¦4·Ø §x®öS‚úˆ^ë7]i³hÛi«µ´%I®CkŽ0íy5Äç¯ø¶¸bb’¢ cr¥/tJ˜ÒKÛÇÜPE9!Ø*|† =SâtB—Çê.r‘ÓIe-ø¯´Ü-S@ȤF!»á€d;mæìJG/ØÆöïÄw’èð˜\Ïró6ϳ’ú—ß)ÄI"ÌE@$—×6ñÑiS_Ÿ„š6éU£‚ïµ|¤ î¢×µc9þÈ4À»zü°®º½ë¢rÏØñ#Ï«ÿ˜‰ ¬pg7ò2üº›0¶ ØÃêêï˜â>ÖÑÓŸ M»KL_iœï,/Øß %]Yv hýáÚm ûƒZæ4õBÂ<©ˆ¶ºçèyê‹Ç’vn!Õu¥Ó“£VIð‡£oI²ˆÐöáX19ІP¯Hž×*=+z]šÆ”ÞoO§‘¥¥K[Â×_w>.Æ®tè’‰-ÑMg–D½•ømþ"l´!ÛJ”Ats¬®i˜† ä;45÷„›5¹½d˜áN¸È;1)£Õ”¦TÜ«'ÙfÊb¸6î:Ý_õd@0)<ŠØ„aŽ÷u»ç<Çæ¾u)=ãbÇ}þz¾È8QÈ4E4òDÄ`q–ãZk¡Z/7²@PÿÈ´c ä!=K‚®’hiðÊRÒq¨¿Š0ZþÜ‚V1 ÎC_ŽDA¦.•ÅÐÉ®à³hø,ÉîªBRß%–æân¶w¹/¬é‹Â8àXƒp@Þx+Aá o)~ì¾Ð÷C¦B!G­ÜÌ¢Ú?%0M2Ø4zæîCÔÚÕØ3n÷éV™Ê\l‘p·³lÙœåü™œ¨¬ƒàÔCì‚I•Îðõ-—`3.¥Åož=UÁA(‘WÔŸ@)\cÄ9ÆÓ‡5wêbMC´^zGiî{m*—+áAƒÊs0Ko/Q÷—¬Ks÷Ÿ=4뇕©VòJ †¨ÔƒÅŸÃå<ë¬sQ8Ê×ÛŒï¨?V¤ŸçÄ|!S7§-¶=uü ²Ø³(ŠJ/;s&Ú‡p¤•Ú2ÉÓîšXM\¯~§R”±{ëòzHò÷+Ë~,-Þ~Y‘E—:òÎ…ùóèöH#£r=ñÑvÀ¹«J÷ÉYSÀÂcð×)RÕ$>‘#xDC#wÒd™! ‹U!;{>e~_Ž¿Ê΄ÕjUãÏ’cO{&»qeD®gâm´Aråq;¦š@bXTrõÁÅ5~5_ÀÄ®Ç,6dWc_à32…—q6óºHEK£™b8]Ya?窾rÝtJ‘µ·Jø kXéªlf)“ÙVª>Ä׬U‡B/-L#àv}‹¨Û6VPû•ž$&% Äÿbb¥áœ½ú;Ñl÷Þ’'Ô Ñ}×´vBmÀÊdŸ€Ã`×Y]ÊO¦Nܘê(D9eœ9íñöQ½BÅÎ#%GûKb1Œr«éoÞ")bvG{o#ºúñL³owÖ•!Ï:Ä6 Ó»ÁÏhíU!d[¹“?Ä瑹f Ìec3ì* }ÁˆÐ~ý¼:§qPµàÁ¿ ÌàgëŽE¦Z®Õ€Ò"  \óJ±6úÂô¢íLÂêlƒKŠcÚÂhî‡.»Ð>ŽaÕ7™JœÝžávÜ1Ô†ÓÏIc›F÷7ŸjÆ8㎰ò¿0¤sC”ý.Ž[¸©•N//ê ?aÉÕÃ&Ì^WUòƒénm=­óä9PƒbàgV‘¦qô[’‘×BY ÞN¥UEîʈ$q¡´÷´/Æ‚Rñ;™6@@Hæ…uc*þš¬@e¨7ƒµSU}ñàQzr0Ï·zØ/ÒþºålWÚÚšúQís/k©42¶jK´ðyf4d¿…üɸ‰!¼¹Ý ªµ•“1åÂ÷H‰eÁ˜NøŒ—ÜeE‰‡ªYÎeÌ{ñ"&²-§à «cÙçºËœ-É9²k:¹¢ Ý\ÞŒ µ«%ø!aÀ"ä™)¿¯Tw;EÙÐÑÉfʜʥå¢h)Dwólµ8í8®H3(†O³í]¹ÇS`$DÚc­Îgùt¼ÕflÆÀû{»èöº×ÉêuR¤bè¢ñUÒ¤J2^~,Î/ Û–$`?Þwë1>ß–þjOC–%uòæb*]`[-åÔ”³ÐHª »$ôDÙfnÈâgÒAû+{%Ÿ6o’GRåH4í»ŠE` É/äcƒOŠ?£y½£}Ò„äÐèSãØ_-ë«ânÈzV®G›o‘b´jãJ€ÊÜ^üƒÚè@(Ž>}ÁOÓØ/Mý|Añ„gA™ONx á%žaäÛòJ´ ñ¶ð Bµ0m†Ðâ{X{Oà}YúË·®’_ä±°šVܬ>ÛpjŽ»à°”‡¤ßFõYÈQ†ÆVWysaé!qKÝ¡æÿñ0ÿf¯ÿ=†ˆ/úFo<³Ö^Å ¦m}WN€YF¦™ë¢,œŽ73$´Eü#±¤ òÙ}Vü70u‰·HBâÕb" ¦ì\Æ7JÏ×£ »ß×Å÷dûZÐ1„º™'zŒ€‘÷2c=\ˆß;‡ ©Ùµ]H´Ñ)~\ý²ò*ÔL¸*Êÿ3ñ¬m-Y2½`«ú•DyØ¢Ÿ°…oÛ}©f(»ø]Ï+ÄÖ•–ó µçþ?ŸŒçæ8"ͼ%ã@#p§®½Ýj_{ ùGö´:1vs`†ÑQ)ó1v$jz(oZRd¨¯›ôÒ ¦y£kŒÄàé: þÖ] “Î)²Vq"z”å5üYk·bvœªÇp¨ÆCë•Vøšh|W„q‹lƒd’3¦BeCŸUOm>!¸IŽ¥ŸÎ† é°v”ê8‚c·Zƒ(8é‹@ÛŽù–L\£$ç æ!])*ê& Ù£xTiS1; Ä5££ÖÉ•ë MñØÂ>öñ*^³U¬.Ù×/áN„~‚B&KjÖ[ âëh ‚(8—“Ò®\õ ñì&ú„@*ÑxXùLû0ƒÍJ¥Îò]ú‡øoô9«µ¸zK½TŽêp 0<$ËsÛo0¢îØxºóú”co–Yz.é^Réx£Ú\%Qÿ)2¿=Õ"Lè"©ëäßc}à /Í*OúäWHU;[+ߨj½JÉå&΄üï{ðAo°¼çžÉ̤?ó~—Na«½Ù‹5ç&qBt'=?Mh\fêîšü«BPfƤ`¼ˆ¥WÐq~ÈW¼²e :ãäÈ1΋ìOd“t$ª8âõW“ûðY› ‘ft‘„E„ OðÙIßG³§uõ)½Ï±[åA½p‹› B~Í‘IÀUFyA²³Þµ­¡¾Þ†ù_mÉTò–sÊA±Á8ž?CÎOj9º•¨’»3jÁzQibý ¿ÃMºt‰C^ƒŠ~õ–¨¨÷¯·[$²Sbü3ÉUPÒ NgŽÓÙ“¦ÜŽç9ë'fr·¸bÞñs²ÚH¾Wg>¯`CÊÞk)‡¬T×a r3Xƒ81;}eá ⟥êÜc0 {BDÓ.îeââ(¶ÔW9!Œb¾ûU¶œÞ4Êâì„-ºËŽñ€ÖTOLâÙŽðXÌ®×ÉöBñQÒ $¢haZìnˆú•-A[a‘:yUr¯C[“º<Ë`»ÄnïlúÀ15ê°ß·¼XGÒˆ1_#%åNkYjÇÀßHÌT=»µÜ«íhœá€”4pz÷4†#Îã»–•jÒ„²þ<}tjQý‰ÄG ÁVÜš½Å«QŸýñ“Ìùt ,¦#áŠèðj]ÝEÇÍ)ãaþ JN¸¼tž0Qi,aîFôkžXa‹Âù],ÍEæÁ±DÃÈìr`%F¢.ä bÿs±äË'Þ¤ Ú3m2E+rØÝ®2•ê_ê’:F³þJäfkŽë¡|߉©ÞabXX&÷ª žªçï©ÇÓãÁ˜ÂeÍùþ·qÀ?E„—Éú‰)[?iаN>È2ý’%°¿Ñè‰Ú7âØXÄ8~üò4û¡k±7ѹ‹yË .ÂÀ ƒh^à¾Õߛާ7{}W·o‘|bâRÐõñO6(k¶ÐϵkEÕ–+d‡+P‹=“þ¸NGz‚‘ø,ÇsØÀ:e,xq O?_®!ކ{€ôDô3}ü+Ü‚oMéï¨&|ë¯>MDa]üÙ­Ž“ºÛø¬ƒpÏK颔#MÍ¢4·Wo'ÒÖkÁLÀ–öÙÝ}ÙÜ6,Ѧ·~”/)r¸OvD›*ES ëI¢Í+ zObÚÒSf:‘!<ôX6¡D…žõP`h™lÞŸ9€~Ò‚œ!xádi$µÞärð9ÏÇë[nzD¯_ìL÷UÒo¶‚šw<`ÜtB‡Ð? qð€Ñk•¸È–j•¦¿8nj§Á9IÞžp©W_ڌ̇S ÄÜîf"¸Žà'¿í AI‘u#Æh?Yáé! ‹„]‰9hëCþkúY`žM)¡í@Ž]üÜh9Áð¯?ÆËåtªÞÆs\/lW¼±p,pl†÷禿}px¾”¿6S&õÜ©›Ò¿ãˆêÒ0•&Õ얻ϻË}óQ ÇX7¹I!ª°Š|n3ëÏ$0ZµÚ^ (Ûƒ;ÜuØkè.Üû¡¾D³ñ‚7J” ‹yÍm¾L7¸ +fºa{ù˱bM}u¥ºr´@ÊJ_Ýî$ÆÒÍÔYôhZ;â¤X»»÷SY°å¥ ÍĽË%úLRb‰ ¸ÓÇ7S°ž&œnMïL˜¹ú³ŽÝò%y¬3“ëhë±ûþ8ý°Fþs(µ¼‡‹A®˜ûƒ`‰&^â8ïÜ0 ¥>nÜÛE·H(5!—í$Üomsì¢D˜2)½¤Ä«~š[Á§‹¸àË>@ÁiÖK)Tj »Ew×’ùu)§JX³ûX››UF3 þÁ :! kiõ2ë‹+ƒ%5’Ìï¬êÚ‚xfA è™âq!B#´Êéz-ZP´Z=I ½‡j…Žf;€ó;<hÕîG„›!ÕÖ§+ŒÏó“úýÐ__Q¯wö›ê:ÕdÚ;¤¥Ógýê Ĥ¬”¨]w/G˜Ã2º!Ù/? !¢†DˆØðk7lq¡|YÍL )iªœ^ÛJ[RêZ‘0ëø$»ªŽO‰‹gÞBB ¹#·@rxèŽ[d Êø1åªÞˆ§®’Tä¬> E©Ö&Ç¢söDÂ"Çœ)ìUyÏ(™ÿ›¤ÿOðÿÐ däàdkmä`‰ô¿$endstream endobj 999 0 obj << /Type /Font /Subtype /Type1 /Encoding 2903 0 R /FirstChar 39 /LastChar 118 /Widths 2904 0 R /BaseFont /YHMLUB+URWPalladioL-Ital /FontDescriptor 997 0 R >> endobj 997 0 obj << /Ascent 722 /CapHeight 693 /Descent -261 /FontName /YHMLUB+URWPalladioL-Ital /ItalicAngle -9 /StemV 78 /XHeight 482 /FontBBox [-170 -305 1010 941] /Flags 4 /CharSet (/quoteright/hyphen/period/zero/one/two/three/four/five/six/seven/eight/nine/C/E/G/I/M/O/R/U/a/c/d/e/h/i/l/m/n/o/p/r/s/t/u/v) /FontFile 998 0 R >> endobj 2904 0 obj [278 0 0 0 0 0 333 250 0 500 500 500 500 500 500 500 500 500 500 0 0 0 0 0 0 0 0 0 667 0 611 0 722 0 333 0 0 0 944 0 778 0 0 667 0 0 778 0 0 0 0 0 0 0 0 0 0 0 444 0 407 500 389 0 0 500 278 0 0 278 778 556 444 500 0 389 389 333 556 500 ] endobj 935 0 obj << /Type /Font /Subtype /Type1 /Encoding 2903 0 R /BaseFont /Courier >> endobj 926 0 obj << /Length1 1636 /Length2 19902 /Length3 532 /Length 20818 /Filter /FlateDecode >> stream xÚ¬¸stå]°&ÛvN:tlÛ¶mëĶmÛv:ì c'³cÛÆ—÷½sçκ3Í7œµ~»ªöSOÕ³÷^«‰‚2­  ÐÈT hçLËHÇÀPURW0´±14±ÊÐ mL_fV822aGSCgK ˆ¡³)@ÝÔ bj `b0rrr‘„öŽ–æΊ/ Jjjšÿ²ü0òøOÏ×N'Ks;ùׇ«© ÐÞÖÔÎù âÿz£²©)ÀÙÂ`fic PP’‘P~abisüò*¸ÙXd,MíœL)f@G€Í,Æ@;ËJs¢ûÂtœìM- m¦îƦöÿ¸hö¦Ž¶–NN_ßK'€¹£¡óWœK;c“|ÙÍ€ÿ²w~EØ~ù¾À€NÎNÆŽ–ö΀¯¬ "bÿÁÓÙÂÐùŸÜN–_nÐì+ÒhìòOIÿú¾`¾¼Î†–vNgSwçr™L,ìm =¾rÙ;ZþKÃÅÉÒÎü¿ÐMÍ MlLœ¾`¾°ÿéÎÕ ø_ª7´··ñøw7ðߨÿÉÁÒÙÉÔÆŒŽ‘é+§±óWnsK;8úŽŠ¤ÀÈðvûÿô¹š:þÛ ŠÎ å C ÀÄÔ Ž^èü•@ñ§2Ýÿ;‘ÿHüÿDàÿ'òþÿ÷¿kô¿\âÿ¿÷ù¿C‹¹ØØÈÚšþ» ðŸo @ðÏ#ó¿ÚZÚxüŸÂÿ{¤ºépü?¡H:~5BÐÎüK :†ÿ0Z:‰Yº›š(X:[Ì m¾ºô¯]ÕÎÄÔÑÆÒÎôKÍ  ed`øo> Kck»ÚÎú.S;“ÿNýK ‰ÓK*+j‹Sÿï/ê¿q _Ê;«xØQû•ÈMþçâ!! ;À‹–‘• @ËÌÀøuá¾øp2³úü2þ Äø_kYCgGKw€öWÙ_;ÿ)þüþk¥ûß`DíŒ&ÿœegC;“¯ãõ? ÿ£–.¦’"_•312²0ýk5vqtüÒúßwà«ÿ¹þ÷ø›šº›í,¹ƒ­Ò³2œë±ó†&D´û~3‚…Ø—5©ú×{üÒ÷8« ÞêBè~Nq}´{,œØ¿ïIQíüƲùÑ“jzQ@àCJÙ[ˆú—ü;õ~ ½^bÆ©z´×å¼Ì&„ƒÚþö„¢’^éáÔ/fG˜ËGJR×BŒïöH¾Æiq˜(?AÐê‹NNÉ“Ž~ Œ ö\CöîáSçÆÁ’q»B ’Gù;äâók©VŠVÿ¤†¼hÏ‹2áÙ½kÉ](cÖ”·Ÿ˜ôZƒæ3FH*·9-qÆ¿ØOŠ›âs˰¢Q;­Uj´'<ÕcãËК:'x:þa‘‚Òüô¬éWlÊ·Ã`\¯Èk^ûÆIT~ÐÉ$æÓLŠÉµ@¹L.‹4Áyu77sLG^lp^ L4j&¨ïŠÛº³Œ¯íÊW¼?!Ñã ö3'Þmh;-#•ÃióƒÖqJ5£ëA Ãú:v›yÉóÔ„@ÑËôÓ=Ü´îÇË€¸Ì£ôºƒˆ ,•šúZrFåD£îA€­M+‡yCîæ3˜|6¬Ø­¸PixÏLPƒ«dж¶’6Vƒ àç÷â)ý×gÔë•ô¸Á!Ð?)ÆÜ‚Êî&Ñ¥ú´@Ç Òxì0%• æd,Ìàl9}rnÔ)”ÖÈ-è3$Ev³K€‡[_ß”þò!œój†Å0v¼"#âU‹,d3O*Eé6!##q‡Ó…3.ÿž³0ã>»À.ÂPJ¾|hNRÓå¡f,^‰L½éоzµ%¶çµM=Ýõ*=e‰t/ðïÝ{­‰Î¬Ëmù†HåÌ|_º—Íœþ/F ÅeÛÀ7;ÁÖvN¾O¿öxž#ÖâXó^½‘ºtDŒ—†»ëR: æ"CT áù‘t©ž’nÍZ–:2,Ê2p §FºwIh„AúÝVY²\ÎÔÊ{D7©(3Æ!¥½Àù~+½B¡¦‡ füæ¤ó›<Úœ¡&í¦L ×}öX‡iØ.L"i—eWêØ ]QJÜ0\oŒr¬ƒ4בâënŠƒ×ÉE·yöÜœÔ ÷ó Od2S–RAPo±+cO‹Ði”íÓ%µˆ¹±y?¢EX` [Ï~¦B‰ÂÕÛ¨ûå¾*—£A­Ï'þ©…X…ŸH‡aêæÕqe2?Ë YEd§Â šød¤/=õ+fŠH›(:ÿ$wžØÌ@°Q9ÔñÆÂ){‹~×>ÀÅœ‘ƒ$u¬¿–Ñðô)Cä)·dr¢Ð°Øû|£¼>²Wßµ;Ü–=m3ÇBÀÆ£¸oÓÄÍ긳ÒVÝè0y“&ÓVàAvUÚXåV0P‹¨ša|ݧ´éÖH6"9AàPÚW²„ë]¥Ó„t‡éŸ¯:è« |=¿Voe„ÔärǶ½¢Ó©ƒR|bÕ‹$\X»œ²cqâŠêÃa—_?UfÜ¥š1<1m+ò\U­Ð‹¤÷ض1ø¶MˆææC¶VpÐB„Ë%„s»ÙTUºÖ²ßäÏiiYÞ~‹X)Áz.ƒaIþ‘îþX A¡²ß Û&Òʧa€Îd»¹¬Q#ãÖ@Êãø‘J`”¡9IÓ'|¥4³&Tkù‹µÃ¿º〖T®"-TçÐΧͬp :¢ûŽ6ruD÷€Ì ¾PóQ\¨”æ=i©‹¨Wa‹ç챬2fU DÏ…8¢1ß_P¨}"[°xÛŸÛXj1j`?t’ >ÕÜ‹Pe [VN­ÒÆ5¼Ug;‘jüÒR"} „{öël ü9¿-¢¸òÇ1YhÈzQ•ÅtâuàÝ[#.ãËVðJ©.Iæ":) 5ÎÒ­Åow:ïÆ°OÕî¿ú¼—Ól¨A¾bŒüµsÙž« ÁLhð­ ,žþ§»îí8e tŠúë7g1jèi" -},Es¢"?7mvs·µcBhZå¼5HUÌÊŸŽÙˆ¥kD–õÔ„•³óÛ_ïþéÛžxhˆS£Ñ «4è»7î- ÐÆÏ&£bbòGö*ú{QÊýläáÍ{> ÷g¤NSqQÖÇOß·^xÛ·*Q6­Þ6¦åÀíoÜBýæ/u ôG jfX´~XKçIm|È{çU™ýxÞƒ ø³w—Ï«9bJSf†‚8ô¡lŒÐm¯“ÀàTÖO”¬&9Ã+9/Û÷­³z ˜.˜U-ŒY”b+ié/“.UÌŸ}÷á$ш›tný‚ïÓK¨A0qÅH0aåìó‚ÙmÑ5´j¿¸nÖc™iøÉæBí™(h¥¡¥§ekY¨jMNù½/NéÎtm‡‡ë>j-›¯fM H0+¹7m"ߨûõ!qøØ‰á#QQöKiã7B¯”-ÇÚDoäm/~ÛÏWàtAnámrÜ¢zG›9'Ï—1 që$7hbDa¢RbÓ‡fê¼®ïûà9­ZH—4bý0å/sÁ&äÑÎÖGŠg!Yƒ:ú“UÀÖîj´¤(®[ÞÒj€$…ê‹ôñ<¨œ!üyO®¶_e ÆñÆ;Su­Ž~õ>?¬^R¶ÏÍ DwKØ ²BÃFB"Š‘ŒRÇ: ;÷?A „¬¢ÿ…Æø³9™ iÐÆ«Kø¯:Ñ ¥t§k#^ø½“%¹¿h×L¹Ÿ3à0ßÐ~Nt*dÐ}½MöžAW3¤ÐS¨[û’^b©ˆ®Il¯ŸF©Mº|sãt º »…r*|K£ ý/ÈxÀ‚¡dˆˆ™Kí#rB(ªîiÐÜĉ³VKa2pœGÕE¯‚¤ýc†éXDªX¹å§[Ÿ”ÝóLÖ[™_-À¹II-¨²ÐP¶»©äÆÆÑ gaOº2Ÿ§RQôE¼õ/¿6þ]ÔËÝh–ø·YxURǶ_ÓÅ’÷uOÁwÞÓxŒÍ8d‘cfÕn”àú bÝØ†ßxíÒàSéÓÄ.ða³€Û²¶Í Kz(W *¬ñz%9® *GSV\7’7UFÂë3&Û†WÿÆ%? ñ²3L¤ÍYáB•,Š|ûk°Â]dz?ûRç8Thi_ÏyŸ]ek^èEYé@)Ñó‘1E(¤—Ö"ø1ì\ëè³$+›]®¢Ÿx8cÂ×M*]4NÄÒzötÝý )Aí¿­gì(ÊÍ–fL BÜæ20Á9óð;57nÞ^Ä|om\{y+t6Lvˆ Ü ËTÝĬ|MZnÄÜ*“?]½LŽ©\ŠŸúé¥cy.¬®”Â0ã‚åbîh=°sÍ6WÁÐ,vT"§[:å1¥šì‡{Ž0-?ýØÝRìÒÅYïË »¸ÐW~ ‡[˜~ØîâÉ3h5xXß§6:Rš ¯°ãZõ ;„pmv{‘bÂUñôG±+ê”#…ÄßÓ;¬¶¨msb¼«4>„Ö¼:ºø]€—Ì·Ceø(°|sÖʽР…"OÚü¬Š¿árÑLºð”ÃäjsLÓáH9‚@àIjþ)<Æ d"ÈÑ¢O}tº>9KH”J¥}‚ñ@Õö`Æ8û ƒ$õg·œÉÙ«JCΰPu(^ó€aŸ>(„æ3-§npŽõú.LÀkÂ{ü×Ûmç5Ÿ±É«p{r‘úƒ–‘Le~kMá6”D@"]`²Ûˆ·oaz)f k>YR¨Q'œæ¯š;[ËQ!ÅßÝ”U2­µbÓ‰NÞ+f¨=7‚¨ÆAusurXRùÈ"¡:@jšU<ô½ç£@hdBâËb_‘Àn¡«<”t ]L£°'÷e^Fì5[Ôüy£êŽŠô¹Í@PúP0 w`¾(A¡ãTºäg‚P[ÇÆ‹SÉ¡ÉâÅàˆ!üëÉŒÿéðÜÚ MT¶ÀP3•Ž6xÀXÞŸI„ieð¬Ñ@â®ØDniP8¼d1'H|§²ÚRà–`ù÷{IPzôˆë ÌwdÐ3· ‚¶:çÝUÑœÔíb¾B £žüˆ`wJy[{¡˜4¾T|yÅÎuÇv8½ã)Ú.¸¿A}R¾Æ•½9ÙKª拵}â—h¾VêUûø‰^”Z|â{)2×@¡%[æ bÌ'ýNµÉÖ$Ë•íV°ÁnWœC$·³“ä•Å¿‚-¡Kº—šËÅ;]Šžö™§4ú´®\êIâúûä/GäU¨ß| V4^-úÓí¤…[@_ {'Ë<`3‹.”± òä6O×úG›´»µç†Ûè*nÎò´@¿®„žÎEGØP†Ùøalø´!3Dù°-zà¡jŸKìÌe—“u‚ÐxsЧ‚ kÒÉûIJÍJ‚ 8¶¹´AÙ2¹œÁ™Òt‰W“ÐÁçí4CS¹È^É –y=–UáIý{‹®$á³¹Iüˆ+»¢´êì0ºB®™ŽLcÓda$’¡ëL71 MϹö¯)è@ovèú5±Q’ùêsUÚ%J^BßÈt{üm’ÒÝ&pf¾ÖRŠG¬Yó¸® +Âì}ê‡#lÜê aP**J77yަI‘r\²Ý]À9†Æs߉ÞÛjŠºÍ€¡nWžg‰†ð)0–ñG ‚/Â!çÝì¶L¦·˜í­Ž<«bÆ)g€4N>JV÷k®á¶9‚SOšèM%L^ò¸"\R[ô@l‰jy×ÅÍÖk™E­~‚ÝÀÂßÊÞ³œÇ3† °šÏò](†ÌÂíh³ù¾-\ãøŒÔìÑ`!ü§÷’u²k.Ò!ô#Ç”ò™lã²€ÐöD§™U?›‚”?ɬâU j@§’€"ñ@Ïüúƒô7«ѧ£­q߆¸jšØ+†ÁöQÿ¤¬(‡ü÷8ucÜÚ¸%:ŠÈ¶<©.(à ‘³-‘Ò~Ä-½@îUþß×qbÑ7ч˜™´ˆõ%îÞMgdaŸûë&òé;M%V>»÷³—]uNîÕbÎÒâiE¡kkâC")kôpô̈(SBçh7Dõ˜P¿MEÌðÂþ[m8ÞìZ‡{k/LGö |ý½˜Ü.ÆŒXF’Î@ÈØ+ó#<ñMÓJuE 3Òv¿¢?GP•´é}(þ²™\Êb›5–HÞnˆýŽ‚Ì¬³Ï=ßh&ÍÊ]Oœyú~æbÀ3uЊÂx<§N¤îN—s•¿ 9¸º¨’UM"»['ì©• Ÿ¡Ÿ¢™£ŒIW(ÙÌèð¼Áîù5}de©m3:CøÈ‹XVßר²eÕv±rî:J™ ÅöJ.Dé̈wßB%Syòûš5—{ëQz6ÏV>5“š !H_¼ÄÍ/’`üÑI~ûMÓט"g3¡XÂí¿Rëq«fçDeŠ2pŽ|©üÙND‚+¨Ö!fXƒ¿­åxR®Q†¨'_ù³ÎãJWß>>øÔ›A§º˜­õPŸÿ(q¥6Ñmä1‹*m±³š z’ÖõüÒsj/*°}í-Å”\·ì ÚÖS˜äxŸc -vîBô‚·ì’í„lEeÝO}=ìqŒN,Ò Ç›„qñ«‡H½6N.ÿˆ¢LÓ¬9@;U¿Eܼ(ulí ´ž<¤¼£© M_rŠS9åãZ@ø7à‡­WrEtüR„EÒ;h¢¤–B9ÀIGÛLc;È•0VÇ&™¶Icx¶{Ì”²ÔO¸ãç&ý{nÖÊ’A•î²ûñ)­œË‰êÁHtˆØ.¤kp5¿ô×®J™|VR\¥íÝÌ¿V­ÒâtqS…^8ûâ­žõÌRæüÈàØÆ%æy(³”Æ¿åòÆ!†C”mÌ8»~)F K»*°N0q1ŸXKö‰ àÙ=ž—9¨Ñ<¼ô`qŸu úè3~߻ت w‡0-Yrdæ'@â^„’£2‰Jóáý­^CûüìOC¢ÆŽÎßmÝFd¿Ýj_“²ûÑÓƒ:dç8–zçZa¨“t•gR™$Ç×ÛB¨e—i›IU¤´hlŽë™ùýðþðž¡ýí÷Ü `0QPöÔ(ÆxU”(<^ª“Šíeþ§óvÎ}ߨaÅËò=‹(ÙI Üðñ§–YíDÕÉ|3(h±ß¥?vÍ ß¿#éïÚŒ×É/r ¬è*aÔ™¶Ð"Ö©.ÊÇW^\áÝÈ¢T×qÀ†Øn°¾Îµÿ€T{α…óµEvìˆëPÇ¢L\V]þIЬ²¾\É3e;,˜Ñ\íÁïàÖ…@7Ô.[û‡ÅòÑo¨ýE3‰ï'¥kÚ(“ ]=jRAáT¼âŽ‘ouUBtÒn.¹,r‚Ë)yz¡o¶j‘uÕï»ùÓRŸÁ’”Û×IÅ­«ŒcO~R˜èË9‹š8>uãH±&Ȥ^.¬‚½ÛÐk| .qÖ¡f‰CÁ\µùŠéIûÖ¿=X³óEi¹ÄÇÀ֔Ãóc¶"„B4lL‚=³È,e»^(9gDuáØk÷B$½õ©¶Çb Ö¹~A/blnöYˆ„ÌŸÎË*UBÄÒlOx;fžÍvt\Û)²ã&ûüölð‡E‘œUy|@ßEîýŒ±>g®¬ÖÐ7› QüÇë´Åú× µ£È–;¯¢[ë`¿GdzDó\È0ÛfqàSÚ½Ò;·yFW\£ØÃ#¯Jnƒa†Nuvpé6= î\ʇ¥¸ÕŽrî¢^ïEuÛFJ¬ÔȸEæÜ¹„¨=Îg©…+*™G>]JÆK³Í·r2I V÷W7áæG¾œ•{tûwþòµü9ݪÓX,ZºÂªq›‘EyØ»çóïØš<ŠPè°³ÏÅδãHZärˆÔcE¸€ø‡R0Tãªý Ùë/Hj«}1󟥸‡hÖ¡’—.g§“ Œ=.¸ÌâUnøó×4Z{Î23VňÑùU•W¢mAô+¡d S7Pi·Cïª>¾WÆ/óüIdË©ѯÓ8wHÄ«xLûúâÎ-^7Sîg«üdP6GÝÍS¯ÑÂ-íÛ“¥6Ïh¥‹º’’lí^ç4âHßêß“A(‹Mg«"ȧŽÛÔY 1íó ˜*çâüçå GŒ¼™¸3î_1Ó âo^ô|™R©´„±ŸªrhãÔÓ?œ³Ìˆ Êèé€f[B<:ñ¶h@6=F>f`{͑웢$@ÃNN›ÿQàqPMWMÝãéŽl±ö¬__;÷'Å ~¨ôQøÀvNŠSßû~ùuEŒ÷%IR…&SH¾0®Ò÷$\(wð´ ã5ë£ÉÉëA'³¹¤wJ±‘¨5)fóS»²úwXÄW€0<‰z;E Em"®ïi•’Ø2S¨J®+›e¬ò‘þÒ‚¼ÔËÆùƈqcÜ 42/Ï쯢C—b­x)0çb½«7듫Ðß'ïÍi-Šd¼DÊ!F…Ákñ°h5P µˆ9Hƒy±šÒ7½Ò1L”ãr"9éMy ȉÔSÑ”¾r0ÆÚÖDý”º-¾^´¥¼±H»Çé'ýÛgÑtOûwßúñLAyS/¬  bpÌW/­€(8k OÌ ½0­X +­Üqä@óš±.°AòPñ=醅¶œB¶yÚ9éëùVo½® iý›ëCä6£2)ÐBHqćÅÁ6n ù ìÏø˜´™ÊÃ|Ť²ÖU˜&ÐJM÷6%Žó±9ÊEšò€~k’`½sÆ&«!ÑÅ”K¨¥ù;ÐÈЦU¬¿ø‚…ʦp,ØLÆ„Z`H™î¨·¨µ‘ »tõõ^?Ćyáéµ4ÜÞAZÞý ×úÅ.Ë2¶!-¢p2»,íöæÒ“§fÙf¸N±QÇ»TF»>iùUòd9Ú ¨É•¬âx°?ÎÁÿ,ƒØ4J×5váªñQC`Ìk3g‘Éq)–/#ÜyJ¸YF“kŸù't˜þ(©ÅÔÜBÈÉ>íöÿM„+½1ÙVÓ!ì\Y~î†nÒ¶‚ý5Ú¦Õ)DÈ“»“=á¯sÆ0¿@í£!Š @W¿R$51zÊ·œµ7ÅD7$-V²á?å÷‘çêwÖQŸìùHäVàªgî1™qñ¥dœIô§(–žê£b0õ,ø7egbæOoþQM—º³ËæS„Î|Ê4)F0ª~H&ÂN- á®i÷$ijëÐÛJ­o_s“ÆÉVÁ,ƒ !&–¬Â³Ë>À$·pN¤ÀXNmù¼¸Áϼ¥Ù‹¬4]1_‰\laÙ€»å‡é’ÌùZ #hP\â´+t?_ÝñÎ…ÑÛw¡!¡t~[ƒ¸k—lV‹ 6­ZZW£²Å­—e¯…‡',Ì)OÁu-²MÖ=.$KZµŸŒìÍøãÞ´Ù™‚r¦ÒÄúPn—ÝŨÍÅÁ¡†–ìA?uqšUR…ºØ8=©he šÉkt%3##™¨0ü»†¶à sYskd¯¯ÖšB³œûØ™HIíü3»ÐùøE6ñK¿w¦òr]£ˆPy?vs=°’^®Á+…?oŸ÷!®e€À+ß1>ص¤—dŠå¤÷r÷t5¤eä8Ÿ´ü#Ò¹{dþª_Œwfǘº¹³˜/ bxÛÝç]é >Dz‹ž:&­ìN;ÚxY;ã…ÛAQ¸TÁ#f%E„Q¯Í¢å?¦c¯n;%ÄŸz"2jç[¶o82r˜y\GýRhGj¹DÃW2äR™,ûÿ:lÕ“™ý¢ªŸg†wÿægoWêºÛDê1É¥Týh»¯®1õ0µ¢ˆ‘‘fòBYgJ*]ØxMÝu6›É'vo’ëÏ®ŸáÑ8G„Î1¸<%ó©¼ÊCop(¸8 8g”·ÕÉ$#l ¾£h³Ÿ‚ˆ9µmò¸õšªjwݽ„Ñp µêÈbXLÏv2‰ ¹}læa¶÷²—H³ùÁ!·šâ'úFÜù€0«Ö98³Ï9j E@süí5õI‘üÁí²žáν}Bá… †ä ƒQ ÿUëƒ2,Ë.…®Z%ü&y !©{$¤TÅÐöFQ’ Ýè£J¡Ô9¨7a *µC@…³øKq`Ø? ´Üæ÷FB˜J= ˜¾…)Fú>ó}jÉœ–™ƒWS|t™’âÙ @¾ýkj˜ÄiO?¡Ëëe)E±«ZîÐùXÒåþÇ!‰) ®ÔÓ9FuNB9âkSÔ8c‚¹¤%>Rv$Ï$ŒÁŠzKòoëc»MîC#}"±çs¯5uz…­‚{þûs/:Ø×ð¹æx“™˜ÍqS` RŸ>l;èµ SçnÁ‘ïFw9ò,¾˜ÙYPy% ä'mß‚ûƒ-GÄ„[ÕÄw”ÒqnÕç‹g&QËŽ¼vqt£×ÝÜKs<­ï~¥p…—Ví:µÄ ¸Êé«ÇEM÷¿iû™5÷§è@Æ7 á¬u¥ï1Íßš:,™Is²€¿Ø~6dØü[QÞ±É]jy|Lb=O* p·ˆ†t<½™[ÂF}&áA×=¹ú~Sõ£}ˆIùm].ƒ¤@è7i´L L2tǽ‰µSBÃŒËÑX¾%‰fS¸p\Ï_žÖeõœ¸„Í ^Ø<™5Шlr„m # !¥îˆ„ß¾¾›H¤Õª¿_ É'‹õ+]2 ¤‡Q´Y´¿iÕ+E‡Ê—âî´_RA¬Ð8>d ò„<Ì_£­b@c_‰tÈ>k.mÎŽé·†”ÅôPÀ{s›MåûÉÙyå¥ áÚL/õæ á² ÜA0Ÿ Žúû’~~/Š8 ¢Mò¯ª€²Ü…o–\€T³ó.ÚQN= ;[í@””G·U6h­QêÆûH·Þ0÷rWYœ ¹‘EØÔH çNiÍ: Õ"ê²ê<ö Eøߘ½•¿c‡ˆhEýž¹“WaøÁãý¥FØÝj1*ÊŽœ{A,…"ô\mô§Ûï‘ üšÒ‡2›ØÕ+HÕeÌÓL°úHÁ¢m&6Zʉ´j4\‚¯¹é=°æ5á¨á¨äµ >*[T¤uÚĘüvYräXÄ5\I¶ŸÅgÂZÚú†ê#h)߯dcn¦þ¾Pãa‹Ñ×T^RŽp‘ÌÚBã®"1v|‘äbd5vR³iÅJÛ yŸa™“BÀÒ±‚¤½Ø«0cPK'7P?‹vúÎŽ¼Dê´ÕLûO !*Çké œìðìÖCå&’Uœ ‰ –à´8"W&+;_òa¤ \+^TПcºVD„Ì£I«´‹¥jõR:«fÃ=ã$éKG‚QÓCËá–Ž©­¦`2‡v—[ûÚ¡! ÆI2êXçý÷Ö«)ˆáÈÚYüwïÑýÃF¦ÉûyÚºß5€äoa©åf%';šÐEïô§¾“Ê[VÛK¿çæéµŽ±ûç^öóOödê¼€õ/I'œ€&[Ä“ü¬RJ 0´—:ö¤!hZˆ>52~ ©qù÷¹T/Ô“Q»­¥,‚'¾ˆ©u b/¼Ä Ú|‹ÎH{¸ñ|§‘!‘^ùNî7ÐÌO?«£Ö´ø#(Ú¿ +IÓÂòåÞj•UÓ<0Æ`";qêd¶ Ôa ˆ›&ê°Gý8dyš¨µN”h EwkyÌ[ì5×f+iÜ]·Í>б^öz, ¯t~/¯³ã©€`Dz×C„›pêFåA »s] œ#õÉÄ„V¾–8øïþ3熞û!jñPeÖI\5+Õòg"ÒTG7¡Ú/Öòsß·W²´¥gÃ]ÜðßÛ:Å…áŽ3œ;}„;î¼§maͼئcQ-"´|rýbÄjØ-2>²†œ ŒÕw†×ÑÃ5KpY½âýR¹2y1p IÃ{´ Xµ0;Ò¡x&S€~Ë8à²aÙLg¿‚WÀbaU¨îþS‰ï‚\ÿ|‹âaçr‡Ï&gâÜñƒ·S£k"ô½åUŸOȬUBƒíŒaFú%ÿÃίT:”Ѥ2íæÈ‘X± Ó¹ñ%Òó·#“ýã;ê·ºÑâH%•.`1Ф¾ÊjÒ0C¿Ójn ?z“g©6ZÚ¶n7÷$kû׮؆_ fy¡ ¯ªöDN1ô·Î¯>p˜2pÉ–¹Tø+†ˆá©¼e‹ìØB…›4aÝúV{#[Õ)ôåB¸K»¿ÆïmøKLüYæJ5üI°ðˆP10 ¾UŒ´ë­ŸMºCø!©¬ù÷ëñ8¼¼ V·[BOnu“àa Yw–Ip,:;+‡ÏùQ"ð Õê/ˆ'IŸ …ꙿ¯ô·ˆU#Ï„y8œ;2I½þÀ9ñåë2ƒ.Ï' ÝGs+myÿµ†ï<–uf-QÑïIÖ0ËŽV÷„,ê¿§=·Lã~8Òa(oáDâaöö­µjÓwN^½ZgT¯çê°o*%;`ŽÚu™GN®,‹*Á,þ6ÆL|Ø5ÔBme –ß”`\7´ÀèÔ t~žZ#|R¥š‡øæNfYLûêàÿ°‹ë}ØŸ‘‘¨<‰Ÿfn 4š|‡Éãë´ \T3^E‚œf™Î*Yª[ÔÂRl“ux4%’½¦(ÿ¶Ôˆ¢åŒ¬³¡@'‘ Y=F‰:HW5®:Û9%±=jÆ Ç[dÌŒ¿&Eâäù§wDq칬 §˜µw†ŽÏ¤OíѬÓ}M»Í×Q³Cã³€1(4=®î‘åf·6Ýr,PÕ{%‰ÅÈ@²¢&‚V–ÑU&Šôha@kxþG ¡=…2ªQj[ =“Dµª„AÄøõáe6I“¨'¯ þk>^½ŽüQlªve&™šrƒ«¿CîÓžÞBû 0+•â­ÕІbÐÇq6wŽ,Ú¶¸†ÁÀÝ‹ñ¤CWÂSDç!«çæ4>&¡QµZIó„®)ÂÀGrnžc`g÷+›X.ÿ^dÕäèýÏ¿ ñ´Û¿ÆžEˆ hœ³ì4ÉK “Õº¾Ÿá6v¹9$rR oÉ¿~®õls³ôóÞ6ò÷œí@Â7UÛ%ú•Û¯Þ¹ ŸÙ¦XÖ ,Ö ‚>=&vÖ[V:egOqÞÎú|P…_Š$ BŒ½n6üE²¬8ê K63ÑœT-/%:{°˜kö±»žW1}eÄü«´\ÁŠT[Pã&®˜~÷óú‹~ _ŽèbxÈ&dåËæ#².úçY­¯Ioý"õƒU†PÏ—¡´Ë¡3Zâö$Ó@bç,^×d“A¬ÿ9Ò~ÊúH?ûi½òý€­Ã“Y“Y\†0ÑҨ¶Rõ'Ð96ðõSŸRZÑÃ*þ5 ¤ 6ýØ]A‹¼ùLüï¶”™¥Pæ“òDèêžÖýoõT•5è½ê63T¸ýÈàç4±¨& zi™¹´S-oƱªâ2jïd  ÝBHš¾$oÆ¿Ž,ôq’+4wB;•±(&óVÃpX›§iïôŒG SˆÝ†Ô˜|PY ý¬ñ & Ï8¡˜Š+º’Ô‚ŽVK@‡$þ´@r *Lâ~³˜¾ªî|ØÓÖ<Þ4¢Åíú¸CQ \äá.Ovéÿ{”’EMêuMUFEËód‡Æöj—‡ãá'ª4F?`ä:hµbîNª/вòÊBÿ“õ™µîÖ§v†ÙËÀ±U]×<ˆ:lKã³4þjÿ×Þ›ç8Û³±ÊxšXDâ¯B`)Ô©7íõ¨eŸºÈN´q‹“M| [qW“Ý]3Lµà´ â>‹WSwN|ù_'uõ°rË þgi§êëÇ?:ûüx6Ra¸«4.ErªzÈl¢8• GVyPjÆn³ÁÁÇàÚµ]8¤9U[nð°zg£¯šcY`«pˆ™ºÎ]œn¾7x(4T\é†#™ß ~µ›è)íaÀIT®ßþä>W7 ÆÏ(Ø×@6µÐø³àž,ym¤òã%;ý} ãÝ(Ûš· .kÍ}@pf S a?o9Ëò wõBGÇí«:Åaû,„û¶^ã|@ÒV;j×O!—ß+% &Œ]qž'Jä»étH,0Î8÷ä19ÿ`ã„L–T¼ë¹0êØ™çB §-2¬%óǧ’«ÛžlTý‰=['* Äö 3pÃ!‹¯No}¦aDGm´·ÐÇ7_B§BozžŽZb}ÎŽ´£A ã$N°ØL$û“0¸ïuL»ŸzÐ‘ØÆü°®â9Õ‚#kB¹še°È‡lÍDÒÆ‡Çä´¾ç(P=#‰ÜÅWhÂA&#sñ)‘m±ûαɰZq6›Ýb—’›»+’¶.åËBŒ× è¦Úݪ OIQtVÆÕFŸæöûÚV’ò¼”fb´6»~pq²ì¶}€Šsr:’lØ"æc¢àŒhGGÐ7–%ö÷ ì†5w-gǼª¥|o`󓊆SQ>JÉ7 Þ9ÚHâøAõyãhªgâ£ÛäǾÚù³û¸1…þ ÚÕCahþò•€úA÷[VY¼½2S Õ=h¾»ÖïX^ûú•ã3Íá7§±‹^ô©:oyQ4nÔ6£Y§Ly¹QîÊß'NZyžÙã‚êsáÈâæ ”;çÙ¬¦† èþÅmð?D-=ð±#Oq7Q“²]‹\‚ÍaÒ“_Õ¾£oÇ~Rú 2ähr[ž¿DœŠF¾Ï±ü)½˜±óýVf€èk›¡þÑví~úQq]]Á'S,; C9 `gG”½à¢M·jºØªDÄŽwC„ŒÊk Ðùfç'U`¢­ãŒ|8šAÜΉJuÅ]ÛŠ™½ài¢Œ´—ñ‡Î{¹!,8K¦¿»ÿ~V…Ë#ú¨üFâ„kcÙÉÂì|«½¸si£$©LD¹oPnÓ¥]Ò5vªõ#›^,÷اZSº…ÛâþT-ötãë©÷m£+eM“ »#æAP³n#Žåga `ÐA· —Z/ÎÉuš^©“Â0Mìd¡¼³ V‚¶Àîp¨/Ð)½Œ#^@°jÇ0§åm¤Ž>aâµî´»v@¨éîkAcE@G•~QD¹Ð}AÐxIìK»5 ¶ÊH¼Ê>´‡=Y;s^oú{âä÷V®y™;†öðԞܟXGÓ#O›–$ÚÚö¶p;üU Ïo>÷ªRaK³©Ü&°F­©äßrµðÔ~ëƒãÌ…kÐZ4Û;¿™ÿŒÃ/WÌ‹@uF Ûñ0wþÞ‚_ôLHÅàÑÖðIñ…›,*Û¹vè¡tPÁfž¦žBöÛÒû «àËÂï“&££øhöÚZ§ ä%6“8åT×sàTPé?š6ó›´=5,ör*wL磖v[ÝÇi *\:áœ7|–·÷Q´¨ÃâP@† YS®5=sDîëdq¶Ru}¯ùt‡ý‡í¾5‚Gèʆì¥ÝÄ3¦ûïñhz²#°È;ïÌxûˆj°!Ö1ýX/'F v”Å.+<¶ü÷öÚ t®é ³ £+4»i¤ö1kFÄêƒ`Z“ˆ†ÜÁѤÑpx†Šeß«`L›œYj zxX‡ò›3†œÎüÌpT›”@E]C"É ¹õ¸éqe[ÜŸèåx˜|‰ÀuØ–›Øë%®$Uª~!¥Â/qù/5Î$sÕô ™Vá[km¡ŒSšåä¦g_ qiJš@n§À÷n n•”¿›ñ)Yä73›ìZùoWïMÂ=}{£½ÉîQ¤Bü‘|Ìx?n·¯Ä È!P]k/(áà|®€²ÀIØ?äcΈ( ‹P{fadfá™Î/ö [ü#´E˜Ìê:ž8cÔ¸Qä„åà ó©ÕçŠPH™·bÙJÄ”¹R R¼D;tÄèìõp ž'«Ûëªo=­‡ôªÔã¾Q}ÌüvP›|rÄ—¡Ï+Cg:<©j¤­m Ák¯£MœBß=ç|˜7±:ØBÂkeh瞊A‚àV,þ±Ì¢Êò‘4Œá¨ÿ«¥Å"Õè$Ôù¶˜uj¨”Gv¡kµ¡«vŽÞYý鯸ɻI#WÀ9¤6%úîßMwo ©ï€B^¿µænèÂ/- -ü[V¨S{‰×aAå´FO®›9áLRÿI+õW–œR™5¦iÒ‹ƒ‰3v }±#û]ŸxId×”¬Ckë§9’D ú&œqÂîÞf‚Ë„,£ô”§¤‹0/Þ´Ÿ7ÝGÐFâ[ÒÚO±¨@?’˜Za£[E¦n½‡H!5¯C•ºå+¬bV>ˆ@L\‡˜lêØCU쮿KKË\Ih¿8Y¼øÕ¬¡Xû'”HD8¥_êΊˆUW’¸ŠàZ—Ÿµ½íA¦KÚ6¤g½¡!z|¶š°ÚﯲãM3ùAÖë`¤ ê7|‚Ýe¨÷ŽÅÓ|o+pëm_aÍT_\EoÀmbN,ÿŸ%?Ér‘UÔÌ ùbö9~+ýlÎ)p%@tŽ7^6=Ä‹½™©WÒ_ïc)d´lGή¦rÇëšà¾,5f^»ïMSè4'Q›Ûµ k?´g˨¶’ªþ(]{‘Ѫ¯„s…Îé¤Îüí—U[Ã@%¥k 1A` =Úh¥cH7ÒÝÔ$Fw3&)! *%ÝH;º ˆ"±ïýßÝû¼çœ»sq4OEèãLÐ qÀÝúñ˜Œ‘°_Ä9 ›wóÍDvx¹`—?Ïoê–mbòõª¶ Õ:…/À%¹4™å,©(WôŠ|Œ£ö†|ž;7gÂ9Un€ô x$ç…“WXä2°+ëªa¾ \øN§ŽŸ²ãDeŒø(qg…xÄ8<úaûƒb¡®à\Š=ºÛfG&ÑàC; þ€IðWƒÍùΓþÓOXÆcÕ|²AƒZ¸˜rÛÐõ–ïSXÉ¥ßâBÎ ü¼®·?"9×:6|E^%ßâØ“÷óƒà?aOLÝÉš “7´¦Go©$ššQ‹øqg¹-?ý}¨M; yδ°xmétÔD¢¹®Û;EÑëJ ÆõO©pÁV]¯ u ½ ópÌiéS¨V]Y§Ævû‰kýb™e”Åÿò!u›–œaBÔŸ]äÔmr5ŽCè´šyK^Ç›.4ÂíÎèßX€v’aZ®á,fÑö wÕ° ë˜:<ëPˆ¹ÉOvSrQ­^[([õ¤>)Et,f`ø"|'äqkf¾ß‹ Á’aðg:”﫸§×–l¥IÒ0É¿4Ù5 ¨»hµ(4U©ÝõiÝÎ å¬â;ÓDM$¬ƒÓŒúF‹ H‘Ûàëk™xO²vÎ 5j¦=¹¨¸§°è#FꃩŸ~gw0¢ÙTk… ß?ë©àû@ö&T*澎Åi-½íw6ݨTã’Ú/˜§ÿ‹¬DzÔ|pbzi!hVðhx$.aùä»Ïiº¾Š—”‹Þ†|ëß”ºçãéÚª¹%;Wëe\äG’@p8Óøª6QÓ¨BWºšˆÅöØx—¨{Øþhí’u¨–ýð×6g‘4óø ¯uÖZR©òÚV£š '%ë­Tkæ™S\ö^xʌ֓ “™ÉèÕ]nt¡rJ~ÕgùÎ5/sÆ`Ñãz•èÜ ÌìïE’ªtnOÈŸ÷¸EîD“s%&ç˜iÌÉ:¶{›ó&ž1ûøhô*N;êâÉ]‡”ãcô–‰«N†~³¿üèԺݧ?UGBžece.ì5ü[I+èrC7Bd)€÷bÑ”±ÐÄfˆS‹$4’Ç8#u~k¢Ñ H<*mU@<†óR##;þ;³>µŽw%Xg±B½ípwûOïKé^Çà´g1äÓ(yÎÙx½r!]Õ¼ô!—É ý”04< ®ŸX3€·¤,·n޼ÉËò"ž½ƒë‹ÚûÏÅz|J'Á‡Jòz,k.ZúE k§J‹gñóÞÝ#ÕJGü5¬Jß8ÆrÿÝ=ÙëàÒ’øü`/AXâ×å°¤J”Œ{u'o|¯ÖM.Å›}ÈŒJøÉk˜ò7|²mã°Ç"ßè5n¼Ñ„¾ÉÍñ«j˜¬˜|£ëõ¥·Ø˜À5Ñfø™Ø1§äÖ§5á¹»ª6 µäè»°ök¥¾Õ øìÞ¸‹÷–@¨ðº gLêÑä%ßwWç¹Û(ÃÖÌTQHqVDxò[¹ÊW7VÈüÝ•Î,«fY& çÂí×Fó[añqiÈÿ,ªOC[ë&ÀsõiÇßIܪjE/?0•®Èý@¡ Öêb³0ý«¯f¿åÛö¥–sQEd7‚‹ÓnlŒ†LÓñ§Ý¦˜eD¢»é‰<]#³StHÚZÑ$Þ$ºª.>°x1ö[·+½þÂN–n?džå¥\¶Ä¯¹\îy&B.;OÑpìì{Ð9¨4EÃW\(ö–íßJ×:F“öÊ`ïìîø‹]n@wû£: g“{Ø ßV÷QèÉG¿Ô?˜açÉØäªN¢zH’þË 4Š5K ÷&®Å>¼lk-R}W°'f´uGê:rn¡?nšË=äeòʉ•eÐx1 Û~‰Rú«'#*®5¾+tÝ— ºüÊ5YWˆ¾nǵ0ž*j=Ðoãßø—‚ÏÓȘçŸøªº¢îe¯m¢Y»•VëLóƒC© O¢3­ —–ÉAëѸDd­_mˆý–‘"Ò$oÿ\Åõ˜ Z(³9kÀžr€Ù;»¾"ò÷K’ôð)¿Òšr'%Ë™a‹³ê“¯º^_"®}…r{|,ËI·µñÂõcœá­tuX¼ax‘Ù¸9iÔš¡-‡ý-·‚ÎdÑ}’É{t*ÝÏm=ßonx'Ä£ë4¢ú˜åæœí¬?î¼í˜‡oØ®c[¯³ž¸Ï§ÖzJOSÁáÑÉâc®áqÏÉ9Æ$3ºT÷åK°»Ì‚ù²N­„l ŽÎÖD\zM3‹N–Fk´¥ù´ ºDŵ7Ðak‹ÎxK—“<Ù<.ú>‘”A(Uµ3« alåÙB¥ýç8öøá?ù\‚±BÅ 1ÙK^ÊHÿÀlà·ÎQ^¡tòz{yóœz¯×ë„Á ®*Û¯vŠ,åø¦2Þß‚R9¡šÂhŒ£å½i‚qÙ›C/FLÈTþˆ¯¦÷=IèN‡¬±Ýœä J“Bó|´æDçvîÀ´ˆG$[ÌÏ ¾1 ´ï>ÙyšgT\—ƒóëAúG¯ÌÈ· T1ßúþŸBäßä«VÇ.㊱L/¶–sõ1BPK+†9µAù.€; ³ ,¢´Û5Îm¿ÿjA¾6üð€UzǶÎkz¸ÜH?š Ú“ x×plxÿÍúKûƆ~„è$Þpp2ÀÕtïùrgßÒ-òÅ/×Òëw pýs¼jøNî_ u„]°!þ³b˜#ã”bPÙuGùõa%à(x[&õÇ44¬ƒVž?ÁêGYþ80{¸ê¨ &»7‚Ðl!œüäûBgw¹R”"í\ääËdû5&¼ãŸWxÌ=øÑ¶œéEZ4vé[ê  Tk„ä£üë¾vmŠº\çmmô[¶õÍVq7‡Wès§|wÀÐ…¿ˆzì&nÛ(g§1«Ýw-‹>Â9¹gßoI˜¨WyX?Üü+VW욯š~§êVå”ùU¬¸#ˆ;7Äé©6es{ÁµK-­ˆÎm#5Üèj¸·ŽÔ5›f4ñƒãîmÌ0Øx T„˜ìX‚ãa¿l•bû#,ÔHî1õ™ôOóÛ¯Eƿѵ¾¾0ÓÕë9ï3…#Ø VXäÚýÌý2=ùÖpSåÏ&_É^ª¡Ì+²Yƒ,ˆ®*»õF‘g Ÿ+MÑÊ»5Œ`¯­3ÍÁÒÒ €H<Ù£×co42sᨷr˜éÎÙ!™IVËÉF2<ÓYÕ¯ÈsÜ7¤–M^¸îøÐŸÀ~1“"ðXÞ,yßD¦YõÙÕÚ´÷süâ?Äf.gà‡°½ó=Ìây¡Z?ÅÔrÃ#HZàKëJ£¤ôÝ5–ù¤mo€4Úr¯~Õߤ~ˆ»ÂeâèçéÔw¦ÈøüÉ ÿì%Ê•”«úTÒ­¡YTûG_¯}–x^:KNÁ©ñƒ)Lzá¿òJRÛ8‹z¢Š| Á0ÀÃÛ¸/Èc†òxÔ&׿›•ä(w7hqÜ„õ)f¦Ãoa“²{èþ,|±~Iy™uZ1º| íª#_Îu¿a þÀ>¬Pswš»úü Jò+§„é}£qãÉ“‘ö>ÊðCUÍ'F*VL“#?{;`Û-Ÿò¢«¶Xf0|"Öž!¦²þŰ” <»Zí0zà·ñÙé-ì÷CgÿÅ:þ3$Ðew#Ws$Ÿº‚F›nêrÇl§ScLQÀÄQ6mÓUãìb³þüù–dlS^µÞ ÑðPL‡ÄqD.°¨ÁÁ{LêÖûÊ_œáY¡\Dùb ÓAûm‰±sá€Õ=){A4þ<ù³2‹b¦ÎñjYŒò@mXŸÈwȨ…UÍn(`}‹„ÝrƒÞç;Câ1ÃôôõÝÖø—盂åÝ*‘±•¿k|Ììt-´w¾zUý¢M— ÷P#Û²Y¾åmÃÊ|¨ Dén-^H=ß°%>ÇáKÆ.…rîâ]u–¥SÎ\¹/ž¹)¿yWCIh z‡ž¼!N€ämÄð MŽ@8odE uçwvÃ0=OžÇÆ~Æt†Ç:lù¾¡÷4ØLÝgù_žiƲlÞW­Ä–cÒõžÕÿ9VU¤¥¢Ò¨óªõV¨wT‡¿;å#"îYÆIøž…NÇš~r¹×6ͤQòXæÀ¡‡MG&”„‹g¾q\llèq™pÅV£Eÿó?óï‘fwêåH_._×MŒÒÝ9ÚŽ5ßý’ÊØbÛš¸ ëdpaaýÓaé侊SÁ|~;q°rB{8¹†µªY-C^-¿|Ýiò޼{,Q@×ã½t?¨+ šÑáÁ-©A8¤ÂB|ÿÏ–Ï—’´xòb’t­˜Z|5FJ˜%ì¸%¡ê×õ-R@uÏ=[–ñZÄÌ[qˆ½üÞèï÷-ÄEyÞY6VFz›Ç(/Üʳy†oþ5•Æ}¸r¹1ö¼g¾cÎU•70@8&Ï?MI»qâI×,´.ü»$^²¼ûú–.öS*Ù\脞&ÈÂþ œ˜+arJþ¨“AFF4sÅIõ°'`©QiT„¯½H¡eÁ8&ä4f—Dä˜äºbš*Ëüúd°)*=‹“¯Å3“ ¯ÊþšÎÛEéÏ!¦‰Ÿàšf›ÀiØW éÅ’dD\ÚÓ¶‘Ì(ݶ•)6÷©Zuñ¾à˜†Ad)ów{k°»]†WŽn!CÂjU®XƒóDŸ}ŠÀDÁØB²}ǂ޴—é㯇¶Ô>á¼^gß[W;ϯuFïYË«²Ð|"nå—ŸèfGœ}‘ØÄñ:'ÅM{ê•-Uy«ìsXŸÜ¤Oó¯ìEè)¦%¬¹&àÅ{P¾’ÕMJ´z!»Û›>X¬)zA·S¶ð­Zs„²iå*ú®õÚmÙÔ〽ódÐK-ïÛùFõ~é©”¸QÁ܆‡›NFtƒñå7P m³½3ÿ5…×>÷‰É/øí÷YÒpÖRÍD–¥sŠRxá7ÙC¡ÿ'$ÿüWlÝì­}ü<Ý­}\IþfD=Ùendstream endobj 927 0 obj << /Type /Font /Subtype /Type1 /Encoding 2903 0 R /FirstChar 2 /LastChar 121 /Widths 2905 0 R /BaseFont /ISQXCG+URWPalladioL-Bold /FontDescriptor 925 0 R >> endobj 925 0 obj << /Ascent 708 /CapHeight 672 /Descent -266 /FontName /ISQXCG+URWPalladioL-Bold /ItalicAngle 0 /StemV 123 /XHeight 471 /FontBBox [-152 -301 1000 935] /Flags 4 /CharSet (/fi/percent/quoteright/parenleft/parenright/hyphen/period/zero/one/two/three/four/five/six/seven/eight/nine/A/C/D/E/F/G/M/N/O/R/U/X/Y/Z/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y) /FontFile 926 0 R >> endobj 2905 0 obj [611 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 889 0 278 333 333 0 0 0 333 250 0 500 500 500 500 500 500 500 500 500 500 0 0 0 0 0 0 0 778 0 722 833 611 556 833 0 0 0 0 0 1000 833 833 0 0 722 0 0 778 0 0 667 667 667 0 0 0 0 0 0 500 611 444 611 500 389 556 611 333 333 611 333 889 611 556 611 611 389 444 333 611 556 833 500 556 ] endobj 918 0 obj << /Length1 1638 /Length2 25708 /Length3 532 /Length 26617 /Filter /FlateDecode >> stream xÚ¬wstf_³flÛycÛîØvÇÎÛîØF'Žm³cÛ¶mkúû}sçκ3ÍÜ?ÎZgWÕ~ê©zö®u‰’*ƒ°©½±™„½  #3/@]ESÉÈÆÆÈh/Ç bokøk怣 u23rÚÛ‰¹˜ñ4ÍLbf&VV @ÔÞÁÓ haé þ‹ACGGÿŸ–…Œ=ÿÃów§3ÐÂ@ù÷ÅÍÌÆÞÁÖÌÎå/ÄÿóFU33€‹¥ÀhcPR‘“P ÿ-ÂhpúëUr5¶šä€&fvÎf4s{'€Í¿{;Sà¿Jsfü‹%ì 08;˜™lf&fÿrÑÌœlÎÎß@g€…“‘Ë߸؀v&6®¦ÿ"ð×nnÿ!'û¿¶}Á”ì]œMœ€.€¿Y•Ä$þÍÓÅÒÈå_¹Ý{󿑦ö&®ÿ*éß_˜¿^# 3ÀÅÌÃå_¹ŒÍ¦@g#Ï¿¹ÿ‚98ÿ¡áê ´³øOô'3 #'S3gç¿0±ÿÕÿ¬ð¿Uoäà`ãùÏnû¢þ ‹³™9# ëßœ&.s[íà˜þuT¤íÌí,Ìÿ¶›º:ü‡ÏÍÌéŸQÿëÌÐü%adjogã 053‡cR°wù›@ýÿ¦2ãŸÈÿ ÿ·üß"ïÿŸ¸ÿU£ÿíÿÿÞçÿ -ájc£`dköÏ&ÀÌ€à_CÆîÿˆ6²Úxþßâÿk¤¦Ù¿Iþ_a¤]Œþ¶BØÎâ¯ÌŒÌÿ6%€f¦J@K€¹‘Íß>ýcW·35s²Ú™ýÕóŸVX˜™ÿ‹OÍhbm÷¯ÆsüÛefgú_¹ÿ•èæLbRÒ2ÚtÿçLý'Né¯ö.jž©ýÏRäíMÿ×â_(""öoNN+7Ûß+ÇÊàagóý¿düˆå?×òF.N@€Îß²™Yþ)þ>ÿ¹Òû/0âv&ö¦ÿ:-ª.Fv¦Øÿ2üÏ]ͤÅþVÎÊÂÂþï\&®NNÕþgümŬÿ¹fff&p+‹ö&|ÁVé™.5Ø¿ÇÅtz»YÀCŠëÕ òªì»üÓ÷yÊ ß«C&y?[=N>öeh†»±l¨ºRÍ.s |ÉhzòP7(۹肘ô‹3Î4£½¯æå¶ ¾s2kìŒ+«è½CN¶³9Á\=ѹå`?: ù™¤ÕÅav 4€ Õ䟞Q&?=Rõ tÝ@öìãÓeÇÁRð¹A RF8fã }W/¯hÖhÙíÒá2ö“XýQtÁ Él|Zò*K½´á‡ Ê üdÙcÐܬíâ³×åOL]Æ»Žl²|Ô˜XŽmÁªÚ z•¼ÆøÒŽõñØÂy~4ÔäÀ±–ý~»-È z¢rRù«kèòeìûOSBCÇïíVØ$-©ŠÃ Ì"ùº–ø»“t8’› ¤ËS]MW] ¬æÓ–4YÁCÈcuAÐÏ(3äû6Å3¦‘þûÏU1CŽ–³,`›‹ÕôxÄ/âýÈ-!©YmZ²7²ÇFÇáº)Q¢JëZz‘Ñ‹äGE±½I–·j²Ó2ZôÅ®XjÕß °¬¼ÐêQÅ2ߢ0èÉ œ ÈV­ìÔ.°hßž_·ŠuàßMcôŠÎY(ð[q+“ Ãì®Æâ~‘G™ÕƒÀ¡T…ø %ò®ÒŒ~÷t¬¨ÁAKqþþ(ÿ¥"Í„Ž×7¼=ìì¾jCr³)’…Y–”îflh`ÒXyšÆŠûëŠ3±ZUÿê4Í ÙTÅ ƒ„:ÿs¸¶ãÌN³…ÐØ¿ä\‹Þ|ÜÏŒeø?!t¡uƒÃðsp½nIG*°yзØà¢_(Â6ñ¡ÒN› øùã¢G@¦ ŠjsÅ—"éñ£ðQõÜ‹:£"½3&ܳ(_ŠR‹5Cޝ2`g†4a 2Q¬9@Œ×-'›€êx}}Ùÿ“oÇw[OÒ™Ÿn‰,+ (‚©ÅŽ‹l¦ŽR]™.òœ»×>[Å&Õ7‚ó{÷BCô\> #Ì ì²ÙäçDÀ•"´]{÷ïôgâV<‚ˆÁ„.îIžZÄŸÖ¡’ª»Ýc°‚è¿A|BoчtínK~h EFԇч=ew”Ná;ã…õ“LWgÈZbl—uC‡Ä8ºFw£ét+5Wð2Åœãm!¾…4²YCÙØf$ÏÖ³Ý;T²ÎuP·13½é,³vçµ”ˆ:f¹‰Ù™û ³×ó~cŽ‚OàŒa!iwŸ>Å£¬e÷Ã%(þnN!hX({ÍåèñÕ3ŽdÂÓ ±Q$o©‘ýáŽåÑ]Ó0X°Òý}xÐ-‘¦|CH;;z’tb(?[bz°µÅð‰üó!wÇ™ýwe¤Ñb©Ó0‡êsÞ*fçã–¯%XD½ÌOÒ°ß55<^íË øÔËS–ñƒ £û—<¿_’uãï÷Ö= YŒÆ0òS}KÓ«+CÕ’V%!ªòy ¨QyÇ :2&5¤®I&€DEîó¾ôÅÊ-‚ ÷rý°` [zZJ2„ØZmŸÀL[ß¾µ7 )±õí¹ßB@ƒ¢°†îŽÞ²û0x_¦XþN‹prÕ*s”º) JCxTùCLÍuom]æ·È»Ø·„{WX‰Òb‘)%ç²§¬zÝp¿ni™#Kø¾ˆVM8XÀ ^‰òS`ãË7mÒX­ˆ¦[¶ï¶ €~vIŸÍˆ óÈNno‚³îÓÚt·Ñ‰DÛÍv…°Ý£_ú7yzq2"Ó‚ŠÚ>îÕ»W9âšþ`*òU°eÝ×Ðü$>ñà.w+è_¢)®2ßc²nƒ÷M6»ÊËl¢„ñÙA¥ß"eŠ(*z7,ИUƒhd—¯iÄ]V5B𬬇r9'&Ú—¿È†}IyUŠ4j }£Ö¼U}s¥1)ÂIô¢öEØöä¢ÁÔGÝËr8 £êC1ÃF²¿‘º†Ú »8“‹ÛD$ŸË ¸ÆÑ“Y¾¾w$ÚjžX§ 7ëÅ22 ÿ¸ûÞy­G–N|#)àzJè³ÜQ”Ü ã~Øavô€ãÀ^³ÅY¤ãn_v…Å”§Pë“q}¥Å¡À™íµÀÞY¥Yb7›\nÇã©„È+Gívxªæ. •tÛíVn̬ݮȂªhÝt&´(S€HáŠH ðU²#¨”¸ Ô/ŒYðRxÅË4¤µ:]Šæ’ÿæ¾V«¢ýŒÿðÅeíûšHoª;t\¤åqì®ÂÿÎÇ›wý­k~‚ï÷ëoÏùÃF­iÄN=)…½juȵhæ»uªsÙeÎm™…$ÿ–«f֬ܨw𬌑3¢Ø©mŠ×÷=”ïQŠg Ó’¿æ6¢º§#¼1×ؽkË‘¾jùmb|¹®0âûúÇÁÅ’KDêQ¦p!?7uBÁS¾2þhÔDLjÍG«… È©„ƒÈ蓯”Rêpê³ÏWjÎ-,èõ¬¹"IzN³9o$…ŽëhÌ]H*i=Ÿe‰-9¤(þίh 2p¨K£ã]@dbÒ«F2i¬:ÿ=õ> MûVÍ[ùtœbúÒ Å'önõü`¹DfªÄ,S‹1íÕ¹ÿÌŠdµ¶ö€K ¢&ÏcP>°Š°ŒódMØòÛ M^V½¬>Gá™¶È¡ä^ƒ‰•$‚i7;%–ï¬ré }©¶Ï©¢sâó=Ê{v´°¼ÊvÁè¤þíæ2ÿ}føÖ›!F…(¾û!ü‹/#/Ö‰ ;¥?âÓj +àßÈÐ\jbŽË@ÕFI¦ÈÈð¾¯Jšú‘»vN(̦`T]”x»UÓª1¡_í‰'Àdf\+–Y…¬lt $oͬĤ’äå'[Õ ~ØpIé–4Ïb})Ñ2&Ú?ÂñÈck˜õolWñwöóFÿ‰÷“)ÍÒ…EGš¨tbX6r¢ßÉKPöqo ÃCw$_è¤tY'?Rô¯I×ÃîT”LÝ£¨9K`‹Ä]‘«dlØT¥IÑQÞÁo=T#„¼Ž¦ÿj…B &IPâ-®–to ‚ ›ÐŠ˜K›å0Ȱ V µÆ6ùNCdpˆ*¥jÉ5ÃéÇmò¤&ÿ\Ù¯÷s@¹Ñâ”ÁuB¼ÎÕá “ºÚ+L%lŠKNy·Ê_°'j°"” øü ž˜n3‚sžÁfÿ¤áËÒÞdôܯßÉTs}I(C©pˆ†þŒ'ð%ÅÔ<‚òëÞlwN4MÚ!5†»Ìܯ3­’LRžw$3v6¼È…ÏL͘¥À&S‡Dµ&m7)^ I[Vkpå—Ĉ¡ÀI"#¤µ3n÷1IÒþg#7àɱ»¦ÎÏð“eVAÅoÓQJáúgÍ‘\ã^ -~ù©W£v'Cz¥õçKÈk91»£‚YÍe–úKtëÑžnÂÀBG$X8ÂÜ2§Ì¥)˜Pl£{KtwC4ÄíÛ7ŒÆ¿óg²R¡zÈã2÷ŽŒv[! nl‹žÜ×@H¯ÆåùUÓCÈÁ @ÿm̉e¼Ógž’Š ã”Ô¶º’sU’5 óð{¿YQR!%¤%›{u„vÛ54nÿ¸­ôþàù&µ9³÷b jöK¶Â] Ä=ƒÖMå U(…œ×Õo¢«2£¼oK” ã᜼0^ó'$~Ló²Îßé3°òµÌj4Ÿ¾‹IQÛ-o²HÁ¼…r2=Ù×é”ÍÛ9ÉRUŸ…†‚i‡šžÑj ÈG6k!™øC‡%¾ØÝôH`ìR×XsøÓÁåE'JÛ”j)6!Ç©ÄÙ²ÚõÑËô†(,W³1oàÆE£oã"¡²E5Ë>F ÝÏÙx™bSuöì`åÓ¥pL—_‚$¢\Wm¾AI«+½etî° #cgÏ›‘Å>(E;ÒÔåaD@òðO/Aø~Œ'¦þ85}¹(¬ÐÀfÅß.ÈUJù4ý·Ý@QBvp䨹€DÈÏ ‚¡Æ$»5›¼_ϾÖÅVCrìXtÏÄÚGÉæ >ÞU³*¬ùVï½D >âøà‰`cÈÇ8¢8Y<úYìð& Žð^I»j‰ø1;éRÁ›ƒýÏWâ2p=›å¨×>W Ÿ/À ³r¸§ƒÖ×OÊù¼©êR\¢JÃõé3«°5(«ê•È!¯úµã§ÕÞm¢>H™†>«él#·æ –Œ%Y$èi=6j(Úþ¥Z?yºzá1jùX*ù”™íJD6¨v—}æŽBpO)rObz°{‘B} Ì”BžGCL²ÙµæŠs›ßЬ^‹òMïÕUJ½„Â|Ò)!;ѽi°«/ª rêhJœLKÂ=3jÆ ÿl+Óƒî׿²±¯;~{è*ëøÕ‚b5âÏ¥<ЮùÜ"ŸÆu¢ÙTÏv'Ü4š ie¸[Â%ö­ÄZDÎPØ^˜ÜïÇèÏ1-Y“)•¯ã¸q­óç-fß95­¦ì&k52‰˜‹ziï˜7¹fÅånA{2FÀä]—ÕŽY¤:Ö>‚OØÅŠF{$¬Ztùá¼·’\ywýA†NÙûX Wjå ŽKM¥þ›(ÕË´àò®ÜZ;:¦#zkP‡ïFÒÒq` ßÎ>¤Ûd$½ÊJf—à~¿¥V…g.ó@[¡‹Â䂲.ç­g”–8ÌÚoA¡?02 ö'¿ô8SÑ:‹€‹?žjð´¤hF"¼ÁÕJMêxzXg4`MÁ)…&¬Ou†àÄcê›2…GÞÎèÆ Ôs„/ñ€aì±n³‘Ý×¶3ÏB…°®>ü3—áÉȦº²5=9µ®Z¾U,4Ôô6L»LfÙSºÚâK³Ž'‡4¨ÈH=²¶2±Ú©öµ‡rAšC÷BÏÖŒSÏû û›¦^:—ÉüË\S^ôy—v\bKù²zö;¹þ‰ÎµšóµöI¯ ‘ÎÓºéê£Ha‚£ˆÔï`=-“2³VÀ縛 pªxÓŒf{¬¥Ï¡Ž:÷ôV’Rëf‰O„;EeÛH›?ë¿çh¬ %RÔwç£0y–¨ëÇ^w+úE›ìŽ‹E6‡÷tgj²t·fi¤üDy"²z'Ü`‚0T91Ç£1àé û*lˆæ1ð %Lqé}‹ÎfâN©éZž¨á‚É:/aÖ,íf~: 1# iyRðÄ&}è~»gÝW‘?P!Ös¢ó-SN£ìÚ÷¦ùÀVpÂ~í„?¤b VkfUÓ ŒÝ×{£ÖvxÂ~+¯'ÔWfûå  ÖÇj ‚Jcÿ6Æ6€=fšöèrÛ•t÷žGž=SÍ,„{¥®–Y;m&zkvqœNí8ÿ”žxËì)kR;Kg]—˜Î5î˳©Ð$£ÓÃeÑÌâÙÈÂî¡òB ³wÞ§‹2•1«û¦Ž†œ&i‚™µŸ­ &(ÂØÜ'âÕû9½=ó·M…õMñT¶úL˜Ï`ÊxFÊ‹ÃLÔœ3ÿÙ-6ùeT$í=Ò*4ULá·dƒD‰œºœ]ÍÉ‘š¨´ eM½ã¾Ñ×IÇ4}WôiL»UꚺÕd×9qj²8Î<0R-x'„ü~' öZ ãäjLè¢ìK¨Ga:ø$+‰´ï3zQ¶*ÉèŽTóS=û nê>sZ­CmÛÒ:e7„ûÓHPxõi9eg#50°Ö?¢{9ë#9ç³UnŽÈ¢Z”]}ÅþrJá™ œshêxó<@E6‰ÇwxY/¤{¹?øš`‘ª)d`Q¹Ìïñ®®=)ÛÚb=6)•Òîê!è$Õô¶-OÔ—æ×=2wµûËOK? £Ui d³& ѵϜÂpï²* b`<…Õd û0XíE«gÜï+dÁHýÉ· Zö¦€ª"öà–?GbC• ÂçY½ŸÊ5±1®QÉœ®p˜ Pü?½`ÍQý®È£HT®Ð}°ÑHØ——¦w" :JbÞt=¦BÜçÜÀÙ6Í®å+ù¾í &¿‡Ujmú–~]éªgÏP?~iPâÛwV P¾¬žµ –( ûìƒkËþˆgŠ\@_g!ûʵȵY©ô¿ÕÿÚ-èEDØ0 ‘æ"Ute}HK·÷y=®yê!}à ]’Ô÷)íl¡+ðþáiIáR–åoT<}'Öšô2^”5Z³7ƒýœo{ÐŽŸÎâFˆE(§§‹¾‚=ÀôÖzL–WxQ|+bw}FæiC´® ôTì~Þ¬Kg]à}Ĭr.ÙÃ>SÈÕÞQŽø}µÓ<¬„‚Õþ[,+”ü®yÞu‘MÐDÎ m¹K²yÇ º?ìɾgÃm æ©à ˜X‘Äwºý^à]<[nJ ó¡ŸrÓ<íRdc»­;¶<ƒ+r„ïÎE–f˜å¬?Ü– ÜÉÓÍ—ªàu0ݬðaqŠ¡]˜ýõF^p¸ç$gƒøo”õ¯)FàQáCË];¥Oº8Î(Ô@ãîæè·×ÑÇ Ge9ß-ÛEp|KÄoô›® ™±aåÏ «W'_tý€wçíåó&¶ %~)Ò…(j©Æ0( ‘ ò8~ƒˆÍ…u¹^É»™tõ‹N0F ‘1ˆSvH´4¾Î€‹Ù›©±dÑØÄ$mV/=Ñöeõ¾)ùOH†3®rmyZBû¿¿hu#CY’™ÕŒ¸J@YM‚br{nr×°ÆÖzkã¼ð¼Žûnb•RÁy!’µÁx™KYÐ-EH4z¾Äö\dcÀ#”À\Á7§›Y…³é“…‹²üsópëXpÌ2ëý(UÛMUÒTNqž9#JCÙzúo”‹1Ÿ§ÔèÕð9.Ï Ãj— lŸã@’ É–€(’“œÌíáß?íÁ‰©ÝÏVºµ‡Ä§M2ÆÐÍ,ôä9")!O%¯4º÷”Å.-^0ü!ÔÜè¦÷x)ØeSó›‚ 凹@ÃC8IÃF„å£8¤N‘w©OÛŽfÅç )'f“ß-4áé™ywñ3>@éêC”Q^òua‚ÅŸ†¿{PïšWèæ/YÙ:ªâ%Êå¸pcÕÎíaŽçrZ´ 6…\1ïeDHà~·nsáŸÓŸÁÝÁ”Ç|A zÙ%5µG¥žCf;íåÃ󄆿‚|UÂk44Ùý㡜îª]Gy%Ï?ðæÿÛ¹§VKzÈÇšªF+YëN˜4ÏzHS7¹Ã’S‘Ðü‰ÇrÎÚÄ»ó§5b]Ê„B„WFeáK”1GÚ*DµÄÞ'%±Ïv«¶whIijÞÜ¥7ÝëÝBw²¶NÏ¥XµÙ좇¥©Õ˜pž·åùßQ4À•`Äô8†tÔ);ä—‰é%Dù§%®K0ÛÜݰIÉ’Ù¥ÂÇ¥o ³âu½¬6ì»óCŒðŒ¡øŸˆ‡† Z:é½}6öÙKÎNÀ‘þvw…!D([Óm›e*7«ë½5v2>^=€¦± ªd¸ls1ÜSâ0‰=ªÁ_òif:½ÜhøÝ´l¡YÄwC—ºl…][Uá.•kD$¹¶ˆ2iÂlf÷={‘ãgÚ'¶Ã%ÊqPJ¡‚ 4ß±êÕV¸ßÑÓ׺ÅÐ\d÷#ÙáyÒ.¿L›O„¸ƒï4–$ȫؽ[@2£·,>$Öùt\‡—׬:|¬ 'BëlS©ÀÕ*פŸ³B£{UùyGËc-¹{hÁ)ÛR»æP3áîª*©P“69'gµ#­¡®T =Z uÁ>å“å 9æÌd7å8Èú0üYÅGj¾ãYlüÝìÁ`M z~¨íž;ô;K£z¶Htü’£íJì#{ïâÆ¬*sP¡ú¨³øˆ`dýš~c’Ùië­¾¨9kœ~Y þý¬Å@TáÜ +X3 Üì೎Kñ¹lâw¶–Čݎ4 ksgÄH÷½'©ò‰øJ²Ôƒ(* MNÌ4g¿Öý*M™òAlA)HéKÎ,+}×ÖÆU3·…Å…šá˜Uó‡#ÊøÙã½¹‰íŸ /_8VHbTŒüÁŸr‘žv( ÃÈh{I¦x€ïtsøý¿…l9 _<ߟÖåäS^ШæJ÷a!Ô¥vÍÒÖ¥[dw8hg©psÂ|€ÊÏvªwZ‡úm°p€¸X#+¦¸þëÖéÌ'= £¢’{ Å´  äIB­H~«a!ïç€ìž©‹a 9Fä÷«CmRV•=7¬9,ñlm ç¯÷2{²“ˆ~2Z©5¶˜agÕÌ»Íêã£Ø}h!~¢<65#Xÿ<ªF=èq ìƒ˜ålpÔu‹¡~?¬++ðià&B¶õÇñ™$«Y4¤¨):šU÷N%S¶¥‘ÞxC½¼Ø8¦_¿2+c¾R2 ·'QêÐÉüR5À.}¾MœòŒ5 Do#„9èâR ñì$IR„–eÝÝ2Ó‰½RDl`´Ç[/˜®J Þ«‡ˆîOī޿Éo—¬Ì[)õP®.€‡Mº@¬9§&)8)b¦Z:´°„`¹ž÷|/×[áX¾~¸dQ!•ÿJóH¸ÅZ/,Ê–6c‹ÚxÄè Ä,[¬õJ„pˆ… …¥>î©CÅýfoül»'BÊ}mš…×ö™Fƒ¬æ¿9r#`kpâa ÷Ûªrzຒ=ÚÕ„VEòÕY÷±»›©œ³4Ghøš®E§”ûUññ06—PÍkg¥G.hnÐW1 #2˜¡ ˆC|BNƃ?pºŽÇ¸³DZý¢ [±ö€}!ˆÝÖTÈôƒüe=Lï·øfÜŸsËö}ƒg¯EéDÊp/…‡Ë5†R_À)àÙ„ÛÑe¯¶ic½¿ß8/B7ë-nïìÝêÆ¬²×DkÕ÷Йjýwö"\ÜoâaáªçR¹u+ž \ff ‰TWžäaÜ~ü%\_N1Œý&͵ú¶’uŒB›Û…Y8SëQ;’b”ÇR\7‡p?dœ®7Îk5 0è›Ú+ø*Ýà.LQF$dßLCVw¼ÝtÃë"Âǵ˜ðŸD©Hž¹£ Œ&ÓɆ´T-ºð–±ÇÖ"zº•ÓÊû=WÞOgðôp'3ÕâÞ?àî:¾÷êØQ Ò`71ï?¤Lþüa÷Õ&–OêPh½”‰`мÏf^Càáaä8Ô²NeB‘/#¯ƒaʈØÓâß"4й™íäC$Ÿd‹Ð²I£ñ¦Ÿ¸Š…Gá •!œ37Ã’’û¥s6x‰ˆe:±{àׄý ±¤ÙšÙê°>™µjýóäˆó„bšn»ªZì¯pcX]G;>¯ôV_Xû3Uûu]–Cãô¬šìšºKñbAâÞóh1ÞªSi6¿Nvë­*‰K6OàíV"[¯ ¶ÆÈyù¡—>P€>Ö#\>Òq^]vq_"¦¤Å¬ vüDåCÛd+¤˜ÍÕ¶ŒJêˆÆ‡ãS¿¤Oµ[2P|™PŠÓÌïÏûähœÙÝÕÔ¿G0c¿ö-8² ØŽ¶qP2µ{j'¨eÁ ØU qË"ÙŒSÝ!Ë P„è ìÙ Õ\`£œß[såÆCß=ðyâjb‹?XÕR3÷ˆ´Ð¢Ïü´Üe£Ý|Wš1™®ñwg^Lå¨ï¨­0 ©=ÛÁû”ršÎW—ÚJ&'–,Ð)<¼š*¾€j± åìóÜH² Ñá£P‘m|È—®D¶ßjq*Џ„I‚žXEìééa% v¸¹†^ƒ>»j"–e|–”´Æ‚¢»Rçõ„²¡U³(¡ÄNa´rjµN¿Š ·cµ±mdÂpWé]ó¡ÆU¬Ö² ™•bˆÕ€‰(’“G¯YÃÞð4A{“çwþƒ*&pw‚Aš×ôÜv.7eŸv#¦ñ¤ƒ2-m“µÊ³þïÄ÷û·JNèXÅaôähÌÐ9T‚1’(0Q@çñŸ¿ÓU–ùJcUŽ9Ù:8õ5(áVTÍWàÕûLð U2Ô±³+sVRáÑ€žᵂ­v3Ê'¹šÌ»+Ekòêín[õþÎþšIyVfǽüAãjZÆ‚o;›ûÊ®5÷˜Ì§«–Ÿ/|áГc$½d‡êÓ¢ŸfÕª:H5–ööCsÒ0·Ç¥µþ½œ×¨ߤj\IG¶ÿ,H(~IÑT'²gK“)Cè]äŽìîÀODöfZ o€qÍn;æØ¶8¬¼.Äb$W$LS%¢´†ZšæQb5—·<È¢Ô<±K#{Yìù7<ÇþÜÂ+ˆñáã†ËÑ+,ëš$2³…d8á>'[xÌ”`‚ ó‡c 0ø¶ýT§¡,ÿç{—Ù'š»øƒmsµÅ&ò1ØÉÏÖîmš€àk*_[Cû»–]ý÷Ø10Èj˜ €±DCäQW#§ )!Õþ¬~_£<þ»Táëçµ»ñ.¿Ú ÚSÀvíΙ£§Ò¶Ð”±]šwvˆÚiL²WÔ@*|ÿ‹_pŒÈÏ~šPt#¥Ej{­©Y¾¦²˜3X_Ü·/†úÈ£ª„KÊÍ ‰£o1¡«3…l¸r[¬ä:ßÚ[Ãúåj´VÇí.}ä'ó(‰ÄC ÞÈ<‚sá¨æ™*+l¸iȵR ܱ,ˆò’Ÿ~—‡ÒB¤ê¬Gäè»ûö3Þ¸ùÎ&1'ZÑͨÝ6#Ùü°C#ÍC3mXŠÉqsÀ‰c&¸Aü}Êy&V²¦­ÎuÜE.ÝBœ‰M½COúÝd<Á‘‘òXsr„{cm<»Iúij-§|¡fOÉÆ +¨ñ$«:+ûZ®ùÞ—nœ¾e*Ò«ÂÉ.‹}Ú?.×äI?§ŽŠüS·Ñ-rŠãtDm®A”9÷÷ ¦ZYÓßaú\¯ž’#å<[æNÌÎN$ÒâšQêHã‡ö+0º"±šËŒ®è–Kñ' |kóú|ŒÈ‹åG+àLÌÝdî„1‚0f}²;$£ ËÇò&og1ßâWxÙ¶¯ÞNƒUô_}ØÚ_åšžß©Çv‡Çu®%r` Á¬-¤šý¶;Ÿ3*;)CÞS•©}q»(. JƒC߀-3æúáµv•õ¢çm-ƒG ¡™*üòηÝ`¡Ã߇p6hͶ’ùªN™…?ßJ;Á°“ ©j-ÈSó“5Pc~Ž< M’($G[%Ë×twa4¾™”‰yuâ”öpxº»Ë\uIDó°‹rü£eÛLƒ¬ZL÷¡sQRô1]WèmõëWEcÀ üyŒÁÁxYuÿ#Û'¥Þ;¥ÓARLñ¬ºpŒ@/&¿£Ë5˜´ŽTþBШ0eOÛø(I™¾ÒŸðJþoÖKûšnä2æ:t=Ïõ5¶d›‰±­±ð¤w~qgó‰ÔÞblƒ«Ÿ¾JÁ*Å’ ‰]¬6I‘+ìÁÃ8‚ů!9=¥1’r$4çúJ5¡FkÈHÉè7¶µúRŽ?b†§Û}5$¢YA L£§‘è,¹ Æý®`RŠZ?šPtà× %%J` öÖ·¼¿V¬n aÀWYÃßá¾–·zéØKäZ†BM´ ì\ó2øÃ‚–‰†ò@ú/ýýd†§VkLoHø_ûñ·_9mëôŸy¨ä°Nÿ^r«heì1.Iîêà÷ñ¶{£YüDYéëOBnrÈlš9º6`F]°Å •°Ûoj~¨Þ+δø*Ý.ߨ1<ªW+ׯÂJoåŒö}du©4×!æÀÕ‹ü™Š9âúàKFØ:–ßÂX{Çͽ70ý<½ßiªiŽewZ¶sÝÜþQ²á°Ws©¼_¡li7™('´ÜÙ¤h”,7(à•‘/Y‘›&½;¯Ã m¹Ô2­jp»R‹áAõäâ¹{Uüë&:=éf›ß°ò\ti2z„ÛŠ d  å0Ö’û„öòºãw#ÃÎÍ>‚õ¦n´VÐÚ~ò^r€OŠþkSÎÌѶîºQ·`\`â½áæù¸= Daì÷„½\™básl° MzÃXUüE–°àMÊ[?£þ¥ÛÇBûȬ¿-d‹! KC·Óض²ø;B…‡¨P½êL4¹uÃÉcËcyPË¥Ö$¦$ž‰pu™\Õ9$ö4­òøÇšGxI+]Q鳋´RÄŽNhмëêgöœ˜Zö2|S¾µýÍ·ÜÏ5>!JyY󢸋G韙X Г­›ê½bÞ[P—J.šX9¦¹]šþ¹RÉÚIYˆ–ÊTpªvzÝd¶yh,$˜Œ~Î_ÍÆÀyÀíùùx™jaÂà Ëí+ã$¦ºA#Û5y=zC1ÍF]l±ŒÆC˜ó¨ù´,>ÍôL`Ðl÷è¥å¬J7èAq—|ªá,Äw-ð9¯%õõWaäïý8YH Ÿ×ɬüÈ…˜´K¾È¥:×/-p}¡KËVë_tÞ«¯ÈD‘©×T‘?¼²ÆÖ ٕl%áØUƒ*kW·J^B༛9Žs)ÞÅ«vP”m×=PeêXI"~E;QÁýŒ¢öYïâdØ’:x|Î¥RMCñˆ¬Þˆ J“b*“¥`–¶@¹Y#2îdAßYê¸òS,G(ò¥?•Ÿ=뉤E;Ð-Î4w„}dÙ']pЯ{!ÊW:¤£õÙÙßZ‚WÛæ¼im‹ÿ¥¦©ZÔ#¾±%$HÃ6.òJ1‹fT”fd 7{ €ö£=êý28ªMVíåûS0"¬†»ÝÌ“ Þæںஶ(ZrÈy7áµ³ùßL#lÙ—’8$]‘ÀÖzêÞ/yºHêëm•Tì/æîfœ•Èa ©Vã.(SJnut£Aš™äu¿2VͧÑMU~ C7ÆDà ?Hÿœ[ÍÛ´I;ÇP9;iø³±që w7Âi¸{L·苳ÖÀŠDJhOtaâÚ]†Òf™bÎ'®0•¦ø eL²UûÎmøI À>‚íÎa~çl!ÁT2 ‘îü1ÓévcP:ø¨Ö½O½™hk Âì …æAø Š!óå:y®±É—ÄTÌI¢,Í;€¸·4äß²W¸'Ùtio ÛmÝžôÍý¾ò±&8†vòä6X»}Ê×e$*l¦ $àéº(¦¹ö?þðìðù×aæHðH¯~ŒtTŘɱ+eÉĸ'd2ÙÎaæÖ`Ê%ù|öºÄ-(y¶y–ÒÏå®7RÒKÁ­Ÿ —üi‰Ãeß3<ûÆÇóô-ôH_©%cGˆ²è4å¬äŒÑ‹ážAú«;d¯}·J*©Òã2k>¥e¨h¶¡TcoíúØHø¡‘MW¹L0¿ƒ!“â§Ø’œV Â? 2‘1õ5ÖÚ‚À®ÅD‹ÐÀ¹½h]ÓÄɯ ̌ڭ‰'¤8Ü\Û:¥%ví(_Ü”¾ß"š™ËKÈ9øÝ •Ï+ì—”c6ÅxÁr]v)m(CcñúPݨ³qÜic^pÂQÂX(¨Ù\j¨Î)…¹¶9бîl‚ 9JÛĺ².sâ:'îÍtþ¢wAþ.¦ r½9û«£‚éhÚ–DßB 3­ß "É/’¯°½—¦îˆƒufÄ%*É0¦|s7$5qö0Èu†g?¬šbþz ¾P•¼¹éÊ@›¨2–Ü®äôþhvî»Kf*‚ü¾€áG›ÿ s?£Em¡_蟔™ó’õë[¦;fØõª£V¬:uÁQéñJõ§tµÆŵÄÎ*Þý"7Ng§âƒIY…'&XòQ‚ºåBqKûþÕ·¤ùש}KÐÚw†«àó×xÞnãLÑ<`99ž©w&?‰¢ƒÈHNòEE#†#G(P:m()ÖªßÊší6=5¤üÎÌqPsÜü$ þ| ýÑfÂÜkVØ|O˜ ŽQ†\MAÏ ŸãÀµ‘ó+T˜É…ÇÅ<ï.‘¼ <&Os`Rˆxš='{¾xãW2`—Ôÿ*Õv R »²…† [­ò®ØªÌŒƒ¦z‚t±ChÔš#°u%²Õã½Òœgù » ÂA‘ú¦v±¢¬^¿V”²©`)šéY/Ô>/ŠvV %X|Ô<ø æ÷KÕ€jK½Òœ‘œÙvõ¢Ìš¶3¯â°¨’²£&§2"b|X`Ûeò ê€uñr*‰H=‹®SŒq˜ÄvvžÌ4E5ܳq~T¥ØòIs¶é © UªâJå–øëj ü‡dÚ̠ͽš{¡×¼g?ÔýlÑ-!øšá5dü+Z ›ˆÍs§äì¯Ù-s9{®ŸÝ´*UŽ»ô̤R Ë¡ƒP³\^RìÃ8I—XáRQ+÷ÚÉq1 v‹ ¶ ±zŒOãpÊžk’ÇíÛ©!žð#x¥®‡W¤â=Lò¯Þ]ì_žUÓ¤rG®/çÀYŇ+ˆr:ÓsfŸ˜)]„PXª(Ïß oÝáUþùTž ÜÓøÁ´¦ñG]~&¢ {M>”8T#S#–P [œf÷®Ý§þyg1ˆ.ø¿R±_~†ð© †Ç™3;“!·ªdÍt·,n³¨ÏYÀYX4¹{T(H—¥½ÆÃÑ!Ö› )PO7ü¬oè…5m C%Wu>Pxž›Œ…‰lŸ|eä˜ï¦ñ£Sƒ¤šqÖ™1íÝéH °”Ì‹ýOÁ¯—?¨i ÐàýU³'ÍF+BüUmìæàg˜Îè©i–D<èµS &ÈW?ºf†¼_ÎKQ{îÁ(Ðé}g5ë]¥æiÙùS_,_‹ë²!Ÿ¤®j‹s¡ ÆSnêÛ7 rL¬‹¬båÑÄX>C@dy‡42qî/Î"+½ÀNä-;&¬KÇ8– hZ_£¸„ˆ,ƒÈ®¦ñÂeîÊÜ€”lÅR z&gÛ3ßQ%íS d¾8ºÉ¶À‚nÀíeΤ®LaõHÓ ÔL ª¡zߌyÐ[QàVy?]ȆEnmóGæ*ë@…‰ éÀ b1Ï~ƒ"`)Ã-ú¥ÜB;™q@Pô&ß‘ò“@¬=Ý=hÕåÐ?ÁIä/ û3vû¼2 Λ½³'¹=6ñdKð§ÛçúÇ›ž'îO Aí”lº€B“Xööñ¢P|=|þ ³4èóAž—L§=ưÔ[Åmd²qwæ¿{­ãÅï?àúúesy@÷’õ,œToì±/>ó’Z•ÏßÞ#‹ []UÚ9éḖS?;SK¨7Lñ£ëœR„™i[Ûʱ¼×c)€P)ÃíûA’IAttÓ>ý]vv˜GƒÞ1Ž¿¤š…=ئµI×ñ~æ|Ñu¼ ›ÄiIXš§—Ò(A)²ºyžÛ&ä¦Qåã"ç Q-²Ádé·¹xf=’ß38€9׳$Žr;WaÝ6PS¥yˆ¸°7x7zùTЛSðS N²«`ȽÕö‚XŠ3¹µeÂéõ[›Pæ0lš*ŠÏ¸}ÙwØ„±äê‘|ûû膥 ˆ)ƒü!Œ½WÍ–þHX¾]ESIWúœ©!ï$Çx—¶M;†çÆë¢?6<VUõ\Ùy¿‰%½‚ûUëÊ+½çþF=`ÍèÉüœÔÈ,ØI/Mÿ—©ãÈ-¡ËZbØŠ–ô&$]år4&ߘ•?óíªÁX‹Ã¿ ×vw<^CJøF@]oìú†7ÏgK‚'ͦ¥áN©…/n Ä¡)aaZ™E=4¨ªj[$èÖ<5ؾC͆:8þyÙNëCÚ2,>ލö{úv‘H.ÊÖšüð“"Ö†¹ÎÝÙ55ò´‚xMÅüCÖqÌh]ñ7±N§Æ“~e[‚Uõ»éçÑrÙêÐÔšf»¤úšßçËkäxhYÌBJ³Fo…]÷,"±7è(曩á·ÅPÛ¯Qç?¶¦ ¦®¨‘MLJ¾ŠÂ…®–øv¯ÅS¡æJ\e ÖŸâçTŽRϵղ%$&%£t¿þìdãx¹lGÙý ¹…€˜'mö¾>ÍôVäPí…tNüá´›!Qn,d!Õœ½DZM}cÄ8]Úã„Ù-ª¼&=‹¶˜IÅ[C„ë]}„µðí™|  züöÍa;@¶±m›'<áÛ¶mÛ¶mÛ¶m''¶m;érŸàÎzu=ÀžÕZµ5ßf³Â;3™+Wçtð?žÎ}&QO^WÖŠÔæ`#4å¶±«}«*Ëa•qh·Âk n— {ÓöÁñ™´Ð6£&-8±2ë`AäHp$m“b¾Ì…(õÊJæ¨7¾7½ñâW€ZLÌJTD¾S}³¿ësË—­,âCn’ãþ{‚Bc¡VÕW@¶2)¿òª`ôwP«£¦¼ü#*{‚uv:û ˜DLI/^ß.Ó­.~2 ‡æñbU+ÿ*g'C€+} 9ó)í×lŸ— -“i§Ë Å&Ã{2”ßìñúäáw€| Z‚/g›På ¬þa³M-d­íÓÑÁÝ—CmD` iŽM˜ |·+Tqäâö—ÿ8Y)®À¯8ÑžKzíè¹ËšÜ÷ï’öQ;È/ŒJû±K›1má-%Æg„mÏŒùWÃyŒsóâ§Òp÷ÑÑÑ—å{­%Š<‘¦ñDJ½åÎCgÔ˜ãµq±I‚5prÔåúUÛŒþÀÆYò1ÈåÔe:.¶_µ§KïA Ÿ×,†9I-ÿÜ…muW…20ŠpѾsÛsqóåËòŸßî%îÌÎÝæž–9é¿F ‚·Zå@GÉrÞŸtW‘6}oÖ›±£íÐ,·“óŠßdþ…Ôâòy½†'ŠŸópókW"Ña&\[4à—ç%{TÞT%ÆcÕ9¢Š!ME‰uúDÆÊµGâÅÇÄa¦' Wßb)×{?£xtØ$i ¿¢µÛßNý‡­…¢hDSS&÷ç–¾$å$Ÿ½“;I©ãË­ ¶CžíËÂb(è#€”Ú¤è*Ù ®–ñ5iÞÕ×hØÀgªÒJþT„m\™ó]•®(*#o(ñeÛ³T8˜ûm3ˆ6TDÇ…ëÁU¨ëP èA=)Yv覷s’.ÿÓ_æ«®8î–äýzªbÑ*»¿¢Ñ‡NÅ5 O. «uûÇNñÔǽeßTp]WF7æÐN&P?|oü#‰]‹ -¼®º\Ìõ]91¬nÃé¤-gÆ GX¯¨»ð |‹#$2ÁE jYZ@]Çþ˜¢e“e£Å|É1«c¡Ü%‰Ël´t]àÀ`ì\9<|²GÀû¡º´M’ü‚vJÿœi-‘?lOc.– ™¥XïÞs±–{ÖÌ=¡Œk+G5hÐË&¸‘Rß‹ä´÷F·»|&Æf\T¤©÷³_^À#>7^ØGz‰ó¼XhñB#¶u‡ëÃ#í7jJ|Åg½ÊJÊèyhö‘¥’ì,0ƒišg:K—û•<©XµßÌ^U¦¢ÏÈê„ïnƒVÜhzÑyT­yð°x ©óÌõ9|ŽòªDYÐÅû/Ókr QNTÄ(N"Yôa³ø#èúA*pSÞE~ž¼YfŠà« ©´Kn­§“]»â“þË<("p󺋤+ÏÍî̽M\"«a 'ÊÌ=îur¾÷ä À?ˆö˜Š›Yâ½IðZ©¶fžs§©‹ÄO”™kœJjP–›4d²¦HZ°Æg‘$åï´"e×èÓ[u¸¤rg- *s°]¶`¡Ö«£3ÍæCW0)ò¬-a!\ ù®t –ãU+Ô=žME¶[1²Ñ¨äyLL¢+‚Ò æzï™jðBb0R¬8W¦L5x;~+ázÂdÄDR‚›k¸'+ôa´˜ö”æy;‚X{½£ºƒý%4®˜üÌ!.jâô‚ FøºV¨)b¥¨B×›F%ßs0·`HÆøùýí>Ä0òøÏ4îÜŒ—b Æ.Ÿ¢w>=3Sé~ ¶ "+ˆºOâŸètþX-qêYOJ)sN'ËýSÅ…>ÍâU5©á \Ì 7®úhÒ/_¿*{­k øhñ{rÞ€ÇH”DŠ!« óïKÔ¯Ä<»[èYQw…Ámä¶&’V€ÇJ¸4 Âj`/ç¤x¤¬cƹB­³.K4tXÒ­^ű)k%Vr!›ÂN–C 2„k"íŠñ£@§1`È›ÿ><]=[+[éQ>æ™\îv©þ‡‚<)¦Ò«g ?—ÚõÙ>~Ÿ$ÝGGó°ˆåED´½×.1æ:Õ¥‰@ÏI‡„šÐïAd!‰¦ÜðMø|üNï_Hböš3 _‰€S¤{Érv La÷˜hér 0  Û_;{D;aÿ¤ž!í”->–ý~Á–É 2tÊNÄ'+#b¡ênÞš3åh׿~Í[Nº\ìSiZ©±õZãW`M­ù2È *°óâXýE´€•}Ç™é6÷BWz L²í[*ætÈ“S¤M(W”÷èðaƒ§‰8Z¡ˆNH‰ó ©Š5+¥ƒ9•º1Dã¸2¥do*o#0>§"í‡\MœXÍÕÝvLÚú$3YE‹ÛØŒrζL´¥=×÷¦® wèJ߯½FÇ‚pg$W뙉±izäÝÿð¾îõÉ-òÖ°í€×Æ%ööüÈ£9ΪxGæ9?v-EÉùøuTƒlÊÖKd݇‹Y­¦¿kK>OÔ¯Š " *ÔW ôbùÁpC Ü_ýÓ@Æ«=æG!—=ÏüÜk£»ÉÖk,r§<Ùécñ,%†kðIké Sk•߯>oŽw6öq’¼GÙDaÝ*ß}¥¤hÚ»gòv$öRñÅMÌÉK pvd7ÞÚªŽÿ¥EUAOf¤yÄY| ÂÄíÊ‚5É£ø{ÔÖuÊÜ-W2: R8Ž{¡g‚„Ú»3ÐÇ01×jÛѨIæA&QûÛ»k±"PÏŒ0” ç„dk]'—æ×bËS}øÄ+ T^Ìëe—Z¨Ã!y„ò"·ž6y^4©ÕiÄrÑ˳‘(ªÞÔ†’{|Þ>_Ñ»T‰ª¿":žGŽ„ÚÂU!5šòRÕhûê*ŸcÆo¶4vg7ñòý‰ ˜ìqnq™_LV¨E*š3óØ8éÊĨà¨gˆ³‚ù“ÛŸÙp;´qí%¯¢[WŸë\)\}>‚@Š~Õ¡‹LŒ0›Ä¿Íw ó%`_¼á(pèÖà ºÑ¥2•j´4j„çkäôæ0©”7O¤…2/¢zt»;ltŽ^¶ªìûP2þò}Þ* Ê‘¶wç".jóÆÅ €»¬vãFäõl—_‚h Se\:¼²Ç´Ý¥xT'b=Ńô;˜Èf'ÀÑݸ¡3C¦^8â5ÐP#§PvyG½Ôð->U2ŒÞI²V ¯ð³!SCèjò¾—§²tÉpÒÊ5¬‰§“o -¹´«ê/\goz¾B‹H3ǎ숢æû“¼)®h¤Ó—jü3‡ jÈIòëd¤oÓ¤UóÑÙæÚb‡;Ö²Gh¡\ÙØ/1ÅW ˜WYgŽœ@x„û6{`UBÙ(¢!BPq]ÐUw²“ìBKÒG‘bÑ´~aª—ŠÒ ÉîŽN'Ë ážºKD߉Ý2k3‹#?kYxµŽÎ¬Ì+?]ï""ΰ[Ò1±oX_§§õµt”ÊÅ\*¸ñPèð)¥?gF‡S÷h,‘g~"à*!³Õ©¥¹â¢ø—%ä,×H†D‚Òû¶œàÙ¹›êKÔ§&ƒ ýD×b C§Ë´„°#4 ?LƒR‚1µÎ¿ð߬bsHG‡iÒ?¸ [à2´r”¿å°.ôíq½š¥=‰á zK÷Ë+Ž'÷÷šP_½†÷‹sQ\²ÁuÕ:º&ãîöûªÓÀûVÁ—ˆ×’œíCP>ž¾ÏáÇmÊžŽë„ò¹:þÚËPzéX@Ò&½É…‰Ó¨º:)î¥hfµGݳ™uâWk3Mä¶¢ Ž/ÂðAy¤mò(p«kžä;±Ò·•>= ¾tJ@OG"”sœà\Öé°Xà)Ì_ʹgíNÿ¸Ò§2ú,…Qz”¸'GHÁao€ËÏ߸¯·g<*Í¡F’S(Õ³i"ðÝRãÖÀ.ÒÓ¢ªBcÕ|÷ºe%Íèï ”úÎIbJÛì¦ÙR€ß«5¼(©žühM«¿\m‰&³LãrÔW<ìŠ{¦#=ÿoÚ€êf£d¹æ®uTÒ\^„©ý¤®UÊ|öY¨ÉKræ@?ÖL [gOåÉhhùC ~ÉçQÕ|ùý—ñL&FÄ—áí,P'Ä"1Tu ¾—[è`0åã„O3£„¬ºA’XüîU²ls8¾P–€ÊˆÄÔLè6ÎIÿã“€ûyØöKôšø''J3‰ùtÌãsùqtüÃç¡™8ÓÝŽ#ÈÛI•~öžH›Pu™CŠg¹°¿L@6Õ¨ÐBßT¶)uÕ áèøžáÔÍO7XÔña8’Ål)PÔ6‰íòçð1eXŸõE¯Mâctl”‚u¶b"€à†a%ø)ÆÊÂÂTg ˆØ<ªq&0½ç ñNK}¸è" %È•Ì2Àlâb#Š ¶‘ëÙfÛ«E·wB¼ôÜWo;ÔþÙø'Ú3éWÆÖ2»éµÿçbé¾°ÜeŸ°1O§¿(ªÚôSÂ&ž²Zc.¥\‰•3 ÄŸÎé¬HÑîÊŸîXr?%‰oê­J"ûK;ÙÝÖ¶ùÝÆe•n«^[¶*è.V'ðÓŸú¹:ïZA˜ñÂ= ‚2<Ÿ«±quÁ„ÄjÂ(’¿‡9ÄJ7õ•#f ù%ç—"²Æuˈ° RR#úúrŠx™ÝðÆ^€ë$¾)ñ‹r’½ÿžæ} µLrwaó*¯/ñoà+ gûFAÆø+˜’Í‚?nÕH±–ÝDxÁmdU­làÏá³Oy|€cJüÁWMÍLm»´møMeZCÊ/&÷¯–øñªª~ʼnHÔÄm.Ú[Øâš¸”XK&g ªÜ¿”ìàÖ´nQ>¡ÿÜ鵫N ý8Jp—ºXâ™ó~n5:ÞÖC d'–~|]¨ä%OĤˆ ×ÿsHMt*õ‘‰°C꺲0®ÍS©¿Nc[À_»mŽÞеÚðß„‚ÙC‰#“<Á½doì Ú’ý>íÉjR„m™÷ªž“ 2å°^õ¹.Ws; ”ÚFtdo!‰„–¢…‚f½gVº:,°c ª[7¤^u0þÁ(f˜M ‚/ÀNØž Ke¼vÀÀÀ л.lO/iL[üg9æÞªgÝþêñŸePZœg\36É\kO(Bb¿ ÕjlhÑ­PÆÃ"• ~\uÒêè˜DÎ`ezÇ@vm^ûôÅÖh:•@h6ëÎt“J[Vj“¾–P$^•›tjaÒÑN 4·ÁÙ—ªôÂå—ðz$u¾`ë#^ÍþIÁ|¼w>i-Mâêi. R)uÚßTSëÏÍ’kùð5iP ×Äbâ£ç<2—Ó_MF •¨@²üá*‹‡ßÚd40Æ)hƒØ`¹[A9’Ò°Û$°Î¬2Å>ø‚õ˜•‹Ú4â‘ÒWxµ"Z~Ì#à÷¹_“‰pŽ5äÇ bøÏЯ „8‹FKA9í³×4j Ì£ ‡çâÝ7O4£ã-'±õy¸…>äµVŒæ1ðØÜþ^ÃÑÌà+âmdoc˜*U Híß´J÷^zK)éý€ä“xLrW'ÑÄ®U×hK”€g㊃5…ÆöL~ðÍÃO‰›cSo¥ÆÎ¦N^Ç¿ê;YêÚÌÛ]h¦ÆùºÊˆè塇jEÔxm¾×’ª–°#FUc=z„¯þ×gï2õ„2r̉NÚ¸Ò³ŠD•—µÊiªÿw'Ÿ]£VËÖöèRõ³wxWáÝõÈúËIRïí«¾4@Äë=Ã¥œÒ!E`®“Ä.Ö¥‹7‰“ÿ÷¸Sò{ÝÑý´Ñ‡–¶±q ™ß1NJfZ0<ι[/ª¡¹pª`v ›¿¨—’#Hå¹îO¯ZWëƒëáäâþ â ãÔäYÙÐüsê¡r— ½^,BP’1>õ °¿”É7yJ§û’w Ç7æÂl~vù‹éV¢U²{¢2¹|^ÐkÕäb-]†;)üƒœõÇ™óÔˆq÷òÜ ¸’=’ÑI¬˜ÅFƒ›Ðúd£K—æjq­Éx]ðZ˦¢A¿k]¡¥[5V$#nDúe†O‰ôú¨Ê*›ûûÔÅÓ¶=µ¡3I•Døì ¿Ñ÷&`Š,@dö'¼>a*Ws¹¾÷ÄÏLCüƒYÙùùÒj:O,'ý¡Éß#ä™û©l7:‰syŒ`±Ôñ‚ÝŒN#¼ ³îâñ# ¥w§NŒ˜èæXÒ–Ùiz´(Wq™Ñqf¶_(£2š8†à$ЛV룷ÎFÁéÀ¹ÐïTj´aIÿ3ÔÈÃ6u5È¿¼ÄsElx>pó,ÜŠ[«B¹X–kV®ªõ»‚õƒ“î Žói×(ã±'qš¦Ùt»(Ý Ãœ»ÏÉç-pñ(0!xÕ…á-ž1ûq›ªVȰIªÆÖR¤ïŸ/É©0ûÙD›ç¡í"ÀQ|”òââ67t¾Ô=¨¿pjTuqkUA×c6]”BÚÀ<ñâ­ª/Æxâ—ÐùÚ/…È ã¬NK`Âô-¥‰üø^½û¶ôê^h2AVäP¿p+Ñ.ØÕêa°­ë¸€Œw¡ƒê„[ø$°ÔOÎñfltÀ÷ A70¹(~>þ)~ñÏ æ·™š!°)þ ,3|îú! œHÀý=ø ¾·‚Ë7bí.jyè÷x¶|Ö9.+ø¬Íîûi”eMÂѲ,ƒ[<Ú È÷HÍè/ÜDu]`úÛºû–ÇœÐ8SÊÒì Èü=´%σi+HÛ‡DžT ÁÔ~ ‡ºÓ6çÞeüJf©=76ŸOþL¹Z¾¯I7&Ã:'`ÜDŸf5Àö’;¥á·¶ž÷Ò親Pÿ{nðN MভREwfèž:dò"áË"æ/»Z^tü_Ô?`4‡èêŸá2sÐàw Tû&““O§F†»©05ôµã’ÌDhKIþ«e€T¹pü*óµ;àÌ !·ÝygG­XZ¤'¼ÒÞ•ìÝ…{À ‹tNÈ"Z6vì_4 B@‚Mæ“ÕO¼„g€ãÅ&fÓÒ|Ž`ÃéŸg&E/rm™R .òÕHñ]ýÞi{ï_ˆ=sìÀ|öÄCц]Æ>²Š`«‰ë snk®¡Î8ŸÍhÛ.ùÑFiQÆj©);x©£ç j˜ž_àKq¾ê®S»©ï2öp¤N“,W~NL£EQ_lPŸ"* å¶-–²ñQn£-QS5\Ô7Á¯˜4zùŸXRÖâ…õ½%`Ï6à0bŽIæØ)ãàliñŒ¹x"ÎÁH ?Å–Rò›O’§í ߺ¾Q¿B¢§Ïpå8£†§ô6”(¬dpŠÁ‚üÏ[(̶‚s¤Q¦m1lËœJÿ9cà\k~Åê¡¥YîÜþs¸²±18ð`ä|Åý•Û3êºVu@qÀ3ÒR&€ÜÁ;_¨ÌëÛ¾%lØBj/Ü6-I¤§T0JÑÍäT>;[úi…íÿÌBÖä<Ɇ‡ý¯‘ÃCé)ùuâݘË{ªNˆã±BcŸêÐW¹APÕ×ùõOÛF‡À˜†5W©‚Ï zÜ­o’±m‰Æ©µiädñ`‚,I¥rÍÚrº—ÊÚÏù³ê¦ÖOÓÆø¿ey‡ÚèÔ=4ú ÞOˆôYßUάŸ’Ýé´á›œ[[ãø!PB¼v¹q›¸2CÐ9POT¤õ•cÖ¾õzÆÉd‰ÛÖ;õi‘ÈÈßì‰ÉV¡³§§šÈEÈÂÄ[š=v¦^i(½—&“Ü5¡Q=âc_)8÷PÁ/$ÛÒÈê!›ín·žìfÛ§óáiæƒÇ|6Ù¿*Í`½hùo2¿ëÞÄ%,ã(¢ »ê…ëjîô`<ñÉP^áaÞîôä‰D£ü£À%¨#žêü¯hc ú…Ú(»Dÿ*”Dk éZ·Fæ ÎI?¨¦úsï€$* ¿ÐC+¹óôÉHçv·><è}vàˆEL8Jç´^€Jž¢FŽ)γ…!ˆ€;¾%¸¦Fióø2\( @Û dg: bˈœñ‘I\„ïUâvàœúÔO ›u·u´\Þ‡ØRRz\x! ã†Fm!ð¨]ˆ [HNŸº‰~€Æž2©¯ÚNñ!-mIÁºûÈ~XVÃ<Þúû‹Q‰´Ä¡Ú4ÎÊÕTü¶xb~tîÚÖq†~ˆ0N\ã`<ÊÄ  Ô•y[²øŽ@ó×4@Ê=±éîÇ×ä åçeÍ ²=©þm´°W ÛÁu#Q5¦` 椎äû¶V«B1Ò7Å%ta(öH–Ê{¾Âmïl¾¿*wÙcêמȶjVÑÌÛð‘¡‘RAìVˆe#ú/Ùy"¡†&²ÚC|’‹Û땎ºQòìnPÜL÷p­°.ùÔè:´>{%ÍA¦\ûÀb´yòÞ…ˆ:ˈ4mdP•£‹0š=ÖA(Á>‰tÃC‹‹VJ¸ò4»l« ¥i<õŒ~h'šO‡+ëa¼t´4üDNX­ÿ€ö3ÒB€ æflº¡¨iKçʇ¶Öþ‰ZU¢É‚&y[߃nÚ‚Øùâx“K@ÔŽ^%Y ®SåÖN¨ZP¢-ñ¼"Ýr¿¨S®#´ñ„;!Nþ•¬l‰@É€ŒÔI-6pˆâO¼öXH.Íf±ÇQ«# ôCܵ—f´+N çØ­ðb1tCÊ7’èìãÒÜK+×FEsóݶÒ)ˆŸþzIâá©V¨ÅP÷BÀáÍýC|ô=ß *vK9°Ì|ý¿ø“Ë9\ùÈP¦‘#c KϹ­ÐàkSûOôNYÆ!Ÿ/2„†ä¤¿›½’ï‹©Èk À–yû–~imýSÙ@ÖxÎ5 ¥õuá§qŠ—„|}<(Ñ:Är LðùõaúGoBæÞn¹ØuDøŽÛ&¶25h¬áJÍe| ¾b~…8íi…f…¢ÀN– i”¢Ÿ±/4;B#H`è€} ¨G·dßøÓIzîôZlW\ˆçß’/=ûÉŽÇi¬÷’±¶%¸žg“š3„Bdmm)Rz÷ü•œ5©Mm3 Î8¦¢mÌe¡ˆôf|î´mzæ4f6õ[ltUûƒ¶û”ŠÀ;#|¥L:]î µP‡}Ú¶¯0î[CÁ­<½œ%kèfÃßujX—ÑÖÁ‚GËe %îSPº—Áú°*pã¶›v›&’]zêléFXŠOäžÆK6•*D=ú×ßd|Å–ÝÎa½÷a]/e’ày4Ó‘Ü™’C¦ñÈç$ä¨Hö@6¤ñL¯|¬Ðd”8RpN{éiE)K x\W‹i,ƒ'ð %znЄ<›#ùOö$§’½Ü ]yrǰãðÿâ½IŠU¯%ª$€àЊì]ý(¢®ƒ0e 24aF&ô«ä2•¨èãÁCª¨žµÝ,´Àó““ÉäØ6‚¹¬Ñ½£'ï/&+Bàü€mÒ$§"„ˆQ3_¢†-3¦j5`ß%ö• h£Øw]Rƒb|<öŸÊGiGH§¾‰èC2‡`†Ò±êx¦I\j-G€Î)]ÍÆ…°€›"SòŸ¹&¡}~hî/’ÈÕ5°£;:t7e1æ%Ôo­PÌ‹ï…Ö§eáQõÎuºâ[u©v–ÿÄ·ßCA[ÁÊ‚qý5{%¾· ÷Çð{˜:^bˆr8·®°“û”ز…*ý DRqKh¤Q6ü4›{c &“”˜±wÊÉÔ€Zí“Lé[æ/Çu¢º¶õbŽ` Mð<¦6‘ Ž¯Ô¤ä_€~¨@#j7YT_Ô«8~ÒiPoóÏ*re,ªƒ¶K・a #y%•a;§ñ_–Á5—±:eXS´Üñ€ÂM¡øeëé¶Y#àäTzHg~ôøë¸Å+èjïÇÓa¦·\mœC“î#³³1Û¡x­ìÛª¶,hH[ ·†øA“–ÅÖ‹Ûg¶,ô É C׈.0i=Çí‡èil¢‰]ÿж©ß)=°Ô"Í„0ƒ&!ßžOT+ÓºAfAšœT=ùH±†´™‹Bñ4ºoê}bØÇ¢±DB±Âåˆï}0Yýmg èG«|ƒÐßCFü@­Ò+W‚ÞOÐ7ïœìfØÖaå,, ÿíµ8è>¨|h @ eRô±»2ÃŒ„ìçä:êåóêNG­q#Œ¦¼¿jïÄ/•³{9‹á0´šé•%ãÁESþÂýФÔ?n°¹£«tëx‘4ùøp£a€ý 3ËVž˜ÞæTÓP_Ý…W *âH}½ˆ!† -|›r¶É$”DdÃ/ئ¶~Äù“hÛ« ,XÏ¿}!þ2ÞÏS2¹(˜€ë…“_qì~:ºw¿r¯ãjKÄIQ½°¼±lžŽàc5ì­@¤|9Øþ“”ÔÖ­µ;€¤ú®lÃÌ!Š¢êŽGxÁNM ?¨\޾´éxâø_pޘŗzì¿b^ȶø2Ó,úÖ6ÂN8,²%,¬¶~Ï•/ZåaÂl—!Ìm5¡EH²ÒÇ×[fÃ£Ž”‰Î4ž}ÁºN²DÁé¤ðÈA'”…$Àø6cùlúç BYD^®ÝàŒµâq1¬?ç¬h'}©NwóøV(ÈL;žòhHÇ^òdeèzä™Xý‡÷ ?Rsš ]Bo/Ä݈‹p­”FÏ&/¥§9ÀïÀ#’‚''¸:Æ;‡¸£8šz— gøûÍðÁxÖ[¾} Ê5öXîÅnPãà±¥„ÆYsë±Æ/˜àšzoÅÆ>]õÍ’Z9RÁ ¤³ÒVç'W®áj) 7˜o_&\2J¸«¥)¯(V_”Û+Ð}pF\=ìý8[ØúäXÄHýÉž ¦%8i#n\‰ÿIsàÑÙ²œY’<‚£È¬¸b¬Cæ® ôž5Ûv‹xéaO͉ž¿1+ºêe– ÿZRÓ$>ÏðÜKV²E0þæÿÿ+FÖ&ŽÎv6ŽV0ÿa·|Üendstream endobj 919 0 obj << /Type /Font /Subtype /Type1 /Encoding 2903 0 R /FirstChar 2 /LastChar 148 /Widths 2906 0 R /BaseFont /DVHIJY+URWPalladioL-Roma /FontDescriptor 917 0 R >> endobj 917 0 obj << /Ascent 715 /CapHeight 680 /Descent -282 /FontName /DVHIJY+URWPalladioL-Roma /ItalicAngle 0 /StemV 84 /XHeight 469 /FontBBox [-166 -283 1021 943] /Flags 4 /CharSet (/fi/fl/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/quotedblleft/quotedblright) /FontFile 918 0 R >> endobj 2906 0 obj [605 608 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 371 500 500 840 778 278 333 333 389 0 250 333 250 606 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 444 747 778 611 709 774 611 556 763 832 337 333 726 611 946 831 786 604 786 668 525 613 778 722 1000 667 667 667 333 606 333 606 500 278 500 553 444 611 479 333 556 582 291 234 556 291 883 582 546 601 560 395 424 326 603 565 834 516 556 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 500 ] endobj 911 0 obj << /Type /Font /Subtype /Type1 /Encoding 2903 0 R /BaseFont /Helvetica-Bold >> endobj 909 0 obj << /Type /Font /Subtype /Type1 /Encoding 2903 0 R /BaseFont /Courier-Bold >> endobj 912 0 obj << /Type /Pages /Count 6 /Parent 2907 0 R /Kids [902 0 R 914 0 R 921 0 R 1035 0 R 1039 0 R 1068 0 R] >> endobj 1143 0 obj << /Type /Pages /Count 6 /Parent 2907 0 R /Kids [1123 0 R 1145 0 R 1189 0 R 1232 0 R 1293 0 R 1338 0 R] >> endobj 1393 0 obj << /Type /Pages /Count 6 /Parent 2907 0 R /Kids [1353 0 R 1395 0 R 1456 0 R 1474 0 R 1500 0 R 1524 0 R] >> endobj 1627 0 obj << /Type /Pages /Count 6 /Parent 2907 0 R /Kids [1574 0 R 1629 0 R 1669 0 R 1712 0 R 1751 0 R 1804 0 R] >> endobj 1886 0 obj << /Type /Pages /Count 6 /Parent 2907 0 R /Kids [1852 0 R 1888 0 R 1935 0 R 1978 0 R 2031 0 R 2065 0 R] >> endobj 2116 0 obj << /Type /Pages /Count 6 /Parent 2907 0 R /Kids [2099 0 R 2118 0 R 2138 0 R 2167 0 R 2202 0 R 2232 0 R] >> endobj 2317 0 obj << /Type /Pages /Count 6 /Parent 2908 0 R /Kids [2269 0 R 2319 0 R 2339 0 R 2371 0 R 2398 0 R 2418 0 R] >> endobj 2492 0 obj << /Type /Pages /Count 6 /Parent 2908 0 R /Kids [2459 0 R 2494 0 R 2530 0 R 2560 0 R 2587 0 R 2626 0 R] >> endobj 2694 0 obj << /Type /Pages /Count 6 /Parent 2908 0 R /Kids [2657 0 R 2696 0 R 2738 0 R 2775 0 R 2810 0 R 2836 0 R] >> endobj 2893 0 obj << /Type /Pages /Count 2 /Parent 2908 0 R /Kids [2875 0 R 2895 0 R] >> endobj 2907 0 obj << /Type /Pages /Count 36 /Parent 2909 0 R /Kids [912 0 R 1143 0 R 1393 0 R 1627 0 R 1886 0 R 2116 0 R] >> endobj 2908 0 obj << /Type /Pages /Count 20 /Parent 2909 0 R /Kids [2317 0 R 2492 0 R 2694 0 R 2893 0 R] >> endobj 2909 0 obj << /Type /Pages /Count 56 /Kids [2907 0 R 2908 0 R] >> endobj 2910 0 obj << /Type /Outlines /First 3 0 R /Last 11 0 R /Count 3 >> endobj 899 0 obj << /Title 900 0 R /A 897 0 R /Parent 887 0 R /Prev 895 0 R >> endobj 895 0 obj << /Title 896 0 R /A 893 0 R /Parent 887 0 R /Prev 891 0 R /Next 899 0 R >> endobj 891 0 obj << /Title 892 0 R /A 889 0 R /Parent 887 0 R /Next 895 0 R >> endobj 887 0 obj << /Title 888 0 R /A 885 0 R /Parent 11 0 R /Prev 883 0 R /First 891 0 R /Last 899 0 R /Count -3 >> endobj 883 0 obj << /Title 884 0 R /A 881 0 R /Parent 11 0 R /Prev 879 0 R /Next 887 0 R >> endobj 879 0 obj << /Title 880 0 R /A 877 0 R /Parent 11 0 R /Prev 875 0 R /Next 883 0 R >> endobj 875 0 obj << /Title 876 0 R /A 873 0 R /Parent 11 0 R /Prev 871 0 R /Next 879 0 R >> endobj 871 0 obj << /Title 872 0 R /A 869 0 R /Parent 11 0 R /Prev 867 0 R /Next 875 0 R >> endobj 867 0 obj << /Title 868 0 R /A 865 0 R /Parent 11 0 R /Prev 863 0 R /Next 871 0 R >> endobj 863 0 obj << /Title 864 0 R /A 861 0 R /Parent 11 0 R /Prev 859 0 R /Next 867 0 R >> endobj 859 0 obj << /Title 860 0 R /A 857 0 R /Parent 11 0 R /Prev 855 0 R /Next 863 0 R >> endobj 855 0 obj << /Title 856 0 R /A 853 0 R /Parent 11 0 R /Prev 851 0 R /Next 859 0 R >> endobj 851 0 obj << /Title 852 0 R /A 849 0 R /Parent 11 0 R /Prev 847 0 R /Next 855 0 R >> endobj 847 0 obj << /Title 848 0 R /A 845 0 R /Parent 11 0 R /Prev 843 0 R /Next 851 0 R >> endobj 843 0 obj << /Title 844 0 R /A 841 0 R /Parent 11 0 R /Prev 839 0 R /Next 847 0 R >> endobj 839 0 obj << /Title 840 0 R /A 837 0 R /Parent 11 0 R /Prev 835 0 R /Next 843 0 R >> endobj 835 0 obj << /Title 836 0 R /A 833 0 R /Parent 11 0 R /Prev 831 0 R /Next 839 0 R >> endobj 831 0 obj << /Title 832 0 R /A 829 0 R /Parent 11 0 R /Prev 827 0 R /Next 835 0 R >> endobj 827 0 obj << /Title 828 0 R /A 825 0 R /Parent 11 0 R /Prev 823 0 R /Next 831 0 R >> endobj 823 0 obj << /Title 824 0 R /A 821 0 R /Parent 11 0 R /Prev 819 0 R /Next 827 0 R >> endobj 819 0 obj << /Title 820 0 R /A 817 0 R /Parent 11 0 R /Prev 815 0 R /Next 823 0 R >> endobj 815 0 obj << /Title 816 0 R /A 813 0 R /Parent 11 0 R /Prev 811 0 R /Next 819 0 R >> endobj 811 0 obj << /Title 812 0 R /A 809 0 R /Parent 11 0 R /Prev 807 0 R /Next 815 0 R >> endobj 807 0 obj << /Title 808 0 R /A 805 0 R /Parent 11 0 R /Prev 803 0 R /Next 811 0 R >> endobj 803 0 obj << /Title 804 0 R /A 801 0 R /Parent 11 0 R /Prev 799 0 R /Next 807 0 R >> endobj 799 0 obj << /Title 800 0 R /A 797 0 R /Parent 11 0 R /Prev 795 0 R /Next 803 0 R >> endobj 795 0 obj << /Title 796 0 R /A 793 0 R /Parent 11 0 R /Prev 791 0 R /Next 799 0 R >> endobj 791 0 obj << /Title 792 0 R /A 789 0 R /Parent 11 0 R /Prev 787 0 R /Next 795 0 R >> endobj 787 0 obj << /Title 788 0 R /A 785 0 R /Parent 11 0 R /Prev 783 0 R /Next 791 0 R >> endobj 783 0 obj << /Title 784 0 R /A 781 0 R /Parent 11 0 R /Prev 779 0 R /Next 787 0 R >> endobj 779 0 obj << /Title 780 0 R /A 777 0 R /Parent 11 0 R /Prev 775 0 R /Next 783 0 R >> endobj 775 0 obj << /Title 776 0 R /A 773 0 R /Parent 11 0 R /Prev 771 0 R /Next 779 0 R >> endobj 771 0 obj << /Title 772 0 R /A 769 0 R /Parent 11 0 R /Prev 767 0 R /Next 775 0 R >> endobj 767 0 obj << /Title 768 0 R /A 765 0 R /Parent 11 0 R /Prev 763 0 R /Next 771 0 R >> endobj 763 0 obj << /Title 764 0 R /A 761 0 R /Parent 11 0 R /Prev 759 0 R /Next 767 0 R >> endobj 759 0 obj << /Title 760 0 R /A 757 0 R /Parent 11 0 R /Prev 755 0 R /Next 763 0 R >> endobj 755 0 obj << /Title 756 0 R /A 753 0 R /Parent 11 0 R /Prev 751 0 R /Next 759 0 R >> endobj 751 0 obj << /Title 752 0 R /A 749 0 R /Parent 11 0 R /Prev 747 0 R /Next 755 0 R >> endobj 747 0 obj << /Title 748 0 R /A 745 0 R /Parent 11 0 R /Prev 743 0 R /Next 751 0 R >> endobj 743 0 obj << /Title 744 0 R /A 741 0 R /Parent 11 0 R /Prev 739 0 R /Next 747 0 R >> endobj 739 0 obj << /Title 740 0 R /A 737 0 R /Parent 11 0 R /Prev 735 0 R /Next 743 0 R >> endobj 735 0 obj << /Title 736 0 R /A 733 0 R /Parent 11 0 R /Prev 731 0 R /Next 739 0 R >> endobj 731 0 obj << /Title 732 0 R /A 729 0 R /Parent 11 0 R /Prev 727 0 R /Next 735 0 R >> endobj 727 0 obj << /Title 728 0 R /A 725 0 R /Parent 11 0 R /Prev 723 0 R /Next 731 0 R >> endobj 723 0 obj << /Title 724 0 R /A 721 0 R /Parent 11 0 R /Prev 719 0 R /Next 727 0 R >> endobj 719 0 obj << /Title 720 0 R /A 717 0 R /Parent 11 0 R /Prev 715 0 R /Next 723 0 R >> endobj 715 0 obj << /Title 716 0 R /A 713 0 R /Parent 11 0 R /Prev 711 0 R /Next 719 0 R >> endobj 711 0 obj << /Title 712 0 R /A 709 0 R /Parent 11 0 R /Prev 707 0 R /Next 715 0 R >> endobj 707 0 obj << /Title 708 0 R /A 705 0 R /Parent 11 0 R /Prev 703 0 R /Next 711 0 R >> endobj 703 0 obj << /Title 704 0 R /A 701 0 R /Parent 11 0 R /Prev 699 0 R /Next 707 0 R >> endobj 699 0 obj << /Title 700 0 R /A 697 0 R /Parent 11 0 R /Prev 695 0 R /Next 703 0 R >> endobj 695 0 obj << /Title 696 0 R /A 693 0 R /Parent 11 0 R /Prev 691 0 R /Next 699 0 R >> endobj 691 0 obj << /Title 692 0 R /A 689 0 R /Parent 11 0 R /Prev 687 0 R /Next 695 0 R >> endobj 687 0 obj << /Title 688 0 R /A 685 0 R /Parent 11 0 R /Prev 683 0 R /Next 691 0 R >> endobj 683 0 obj << /Title 684 0 R /A 681 0 R /Parent 11 0 R /Prev 679 0 R /Next 687 0 R >> endobj 679 0 obj << /Title 680 0 R /A 677 0 R /Parent 11 0 R /Prev 675 0 R /Next 683 0 R >> endobj 675 0 obj << /Title 676 0 R /A 673 0 R /Parent 11 0 R /Prev 671 0 R /Next 679 0 R >> endobj 671 0 obj << /Title 672 0 R /A 669 0 R /Parent 11 0 R /Prev 667 0 R /Next 675 0 R >> endobj 667 0 obj << /Title 668 0 R /A 665 0 R /Parent 11 0 R /Prev 663 0 R /Next 671 0 R >> endobj 663 0 obj << /Title 664 0 R /A 661 0 R /Parent 11 0 R /Prev 659 0 R /Next 667 0 R >> endobj 659 0 obj << /Title 660 0 R /A 657 0 R /Parent 11 0 R /Prev 655 0 R /Next 663 0 R >> endobj 655 0 obj << /Title 656 0 R /A 653 0 R /Parent 11 0 R /Prev 651 0 R /Next 659 0 R >> endobj 651 0 obj << /Title 652 0 R /A 649 0 R /Parent 11 0 R /Prev 647 0 R /Next 655 0 R >> endobj 647 0 obj << /Title 648 0 R /A 645 0 R /Parent 11 0 R /Prev 643 0 R /Next 651 0 R >> endobj 643 0 obj << /Title 644 0 R /A 641 0 R /Parent 11 0 R /Prev 639 0 R /Next 647 0 R >> endobj 639 0 obj << /Title 640 0 R /A 637 0 R /Parent 11 0 R /Prev 635 0 R /Next 643 0 R >> endobj 635 0 obj << /Title 636 0 R /A 633 0 R /Parent 11 0 R /Prev 631 0 R /Next 639 0 R >> endobj 631 0 obj << /Title 632 0 R /A 629 0 R /Parent 11 0 R /Prev 627 0 R /Next 635 0 R >> endobj 627 0 obj << /Title 628 0 R /A 625 0 R /Parent 11 0 R /Prev 623 0 R /Next 631 0 R >> endobj 623 0 obj << /Title 624 0 R /A 621 0 R /Parent 11 0 R /Prev 619 0 R /Next 627 0 R >> endobj 619 0 obj << /Title 620 0 R /A 617 0 R /Parent 11 0 R /Prev 615 0 R /Next 623 0 R >> endobj 615 0 obj << /Title 616 0 R /A 613 0 R /Parent 11 0 R /Prev 611 0 R /Next 619 0 R >> endobj 611 0 obj << /Title 612 0 R /A 609 0 R /Parent 11 0 R /Prev 607 0 R /Next 615 0 R >> endobj 607 0 obj << /Title 608 0 R /A 605 0 R /Parent 11 0 R /Prev 603 0 R /Next 611 0 R >> endobj 603 0 obj << /Title 604 0 R /A 601 0 R /Parent 11 0 R /Prev 599 0 R /Next 607 0 R >> endobj 599 0 obj << /Title 600 0 R /A 597 0 R /Parent 11 0 R /Prev 595 0 R /Next 603 0 R >> endobj 595 0 obj << /Title 596 0 R /A 593 0 R /Parent 11 0 R /Prev 591 0 R /Next 599 0 R >> endobj 591 0 obj << /Title 592 0 R /A 589 0 R /Parent 11 0 R /Prev 587 0 R /Next 595 0 R >> endobj 587 0 obj << /Title 588 0 R /A 585 0 R /Parent 11 0 R /Prev 583 0 R /Next 591 0 R >> endobj 583 0 obj << /Title 584 0 R /A 581 0 R /Parent 11 0 R /Prev 579 0 R /Next 587 0 R >> endobj 579 0 obj << /Title 580 0 R /A 577 0 R /Parent 11 0 R /Prev 575 0 R /Next 583 0 R >> endobj 575 0 obj << /Title 576 0 R /A 573 0 R /Parent 11 0 R /Prev 571 0 R /Next 579 0 R >> endobj 571 0 obj << /Title 572 0 R /A 569 0 R /Parent 11 0 R /Prev 567 0 R /Next 575 0 R >> endobj 567 0 obj << /Title 568 0 R /A 565 0 R /Parent 11 0 R /Prev 563 0 R /Next 571 0 R >> endobj 563 0 obj << /Title 564 0 R /A 561 0 R /Parent 11 0 R /Prev 559 0 R /Next 567 0 R >> endobj 559 0 obj << /Title 560 0 R /A 557 0 R /Parent 11 0 R /Prev 555 0 R /Next 563 0 R >> endobj 555 0 obj << /Title 556 0 R /A 553 0 R /Parent 11 0 R /Prev 551 0 R /Next 559 0 R >> endobj 551 0 obj << /Title 552 0 R /A 549 0 R /Parent 11 0 R /Prev 547 0 R /Next 555 0 R >> endobj 547 0 obj << /Title 548 0 R /A 545 0 R /Parent 11 0 R /Prev 543 0 R /Next 551 0 R >> endobj 543 0 obj << /Title 544 0 R /A 541 0 R /Parent 11 0 R /Prev 539 0 R /Next 547 0 R >> endobj 539 0 obj << /Title 540 0 R /A 537 0 R /Parent 11 0 R /Prev 535 0 R /Next 543 0 R >> endobj 535 0 obj << /Title 536 0 R /A 533 0 R /Parent 11 0 R /Prev 531 0 R /Next 539 0 R >> endobj 531 0 obj << /Title 532 0 R /A 529 0 R /Parent 11 0 R /Prev 527 0 R /Next 535 0 R >> endobj 527 0 obj << /Title 528 0 R /A 525 0 R /Parent 11 0 R /Prev 523 0 R /Next 531 0 R >> endobj 523 0 obj << /Title 524 0 R /A 521 0 R /Parent 11 0 R /Prev 519 0 R /Next 527 0 R >> endobj 519 0 obj << /Title 520 0 R /A 517 0 R /Parent 11 0 R /Prev 515 0 R /Next 523 0 R >> endobj 515 0 obj << /Title 516 0 R /A 513 0 R /Parent 11 0 R /Prev 511 0 R /Next 519 0 R >> endobj 511 0 obj << /Title 512 0 R /A 509 0 R /Parent 11 0 R /Prev 507 0 R /Next 515 0 R >> endobj 507 0 obj << /Title 508 0 R /A 505 0 R /Parent 11 0 R /Prev 503 0 R /Next 511 0 R >> endobj 503 0 obj << /Title 504 0 R /A 501 0 R /Parent 11 0 R /Prev 499 0 R /Next 507 0 R >> endobj 499 0 obj << /Title 500 0 R /A 497 0 R /Parent 11 0 R /Prev 495 0 R /Next 503 0 R >> endobj 495 0 obj << /Title 496 0 R /A 493 0 R /Parent 11 0 R /Prev 491 0 R /Next 499 0 R >> endobj 491 0 obj << /Title 492 0 R /A 489 0 R /Parent 11 0 R /Prev 487 0 R /Next 495 0 R >> endobj 487 0 obj << /Title 488 0 R /A 485 0 R /Parent 11 0 R /Prev 483 0 R /Next 491 0 R >> endobj 483 0 obj << /Title 484 0 R /A 481 0 R /Parent 11 0 R /Prev 479 0 R /Next 487 0 R >> endobj 479 0 obj << /Title 480 0 R /A 477 0 R /Parent 11 0 R /Prev 475 0 R /Next 483 0 R >> endobj 475 0 obj << /Title 476 0 R /A 473 0 R /Parent 11 0 R /Prev 471 0 R /Next 479 0 R >> endobj 471 0 obj << /Title 472 0 R /A 469 0 R /Parent 11 0 R /Prev 467 0 R /Next 475 0 R >> endobj 467 0 obj << /Title 468 0 R /A 465 0 R /Parent 11 0 R /Prev 463 0 R /Next 471 0 R >> endobj 463 0 obj << /Title 464 0 R /A 461 0 R /Parent 11 0 R /Prev 459 0 R /Next 467 0 R >> endobj 459 0 obj << /Title 460 0 R /A 457 0 R /Parent 11 0 R /Prev 455 0 R /Next 463 0 R >> endobj 455 0 obj << /Title 456 0 R /A 453 0 R /Parent 11 0 R /Prev 451 0 R /Next 459 0 R >> endobj 451 0 obj << /Title 452 0 R /A 449 0 R /Parent 11 0 R /Prev 443 0 R /Next 455 0 R >> endobj 447 0 obj << /Title 448 0 R /A 445 0 R /Parent 443 0 R >> endobj 443 0 obj << /Title 444 0 R /A 441 0 R /Parent 11 0 R /Prev 439 0 R /Next 451 0 R /First 447 0 R /Last 447 0 R /Count -1 >> endobj 439 0 obj << /Title 440 0 R /A 437 0 R /Parent 11 0 R /Prev 435 0 R /Next 443 0 R >> endobj 435 0 obj << /Title 436 0 R /A 433 0 R /Parent 11 0 R /Prev 431 0 R /Next 439 0 R >> endobj 431 0 obj << /Title 432 0 R /A 429 0 R /Parent 11 0 R /Prev 427 0 R /Next 435 0 R >> endobj 427 0 obj << /Title 428 0 R /A 425 0 R /Parent 11 0 R /Prev 423 0 R /Next 431 0 R >> endobj 423 0 obj << /Title 424 0 R /A 421 0 R /Parent 11 0 R /Prev 419 0 R /Next 427 0 R >> endobj 419 0 obj << /Title 420 0 R /A 417 0 R /Parent 11 0 R /Prev 415 0 R /Next 423 0 R >> endobj 415 0 obj << /Title 416 0 R /A 413 0 R /Parent 11 0 R /Prev 411 0 R /Next 419 0 R >> endobj 411 0 obj << /Title 412 0 R /A 409 0 R /Parent 11 0 R /Prev 407 0 R /Next 415 0 R >> endobj 407 0 obj << /Title 408 0 R /A 405 0 R /Parent 11 0 R /Prev 403 0 R /Next 411 0 R >> endobj 403 0 obj << /Title 404 0 R /A 401 0 R /Parent 11 0 R /Prev 399 0 R /Next 407 0 R >> endobj 399 0 obj << /Title 400 0 R /A 397 0 R /Parent 11 0 R /Prev 395 0 R /Next 403 0 R >> endobj 395 0 obj << /Title 396 0 R /A 393 0 R /Parent 11 0 R /Prev 391 0 R /Next 399 0 R >> endobj 391 0 obj << /Title 392 0 R /A 389 0 R /Parent 11 0 R /Prev 387 0 R /Next 395 0 R >> endobj 387 0 obj << /Title 388 0 R /A 385 0 R /Parent 11 0 R /Prev 383 0 R /Next 391 0 R >> endobj 383 0 obj << /Title 384 0 R /A 381 0 R /Parent 11 0 R /Prev 379 0 R /Next 387 0 R >> endobj 379 0 obj << /Title 380 0 R /A 377 0 R /Parent 11 0 R /Prev 375 0 R /Next 383 0 R >> endobj 375 0 obj << /Title 376 0 R /A 373 0 R /Parent 11 0 R /Prev 371 0 R /Next 379 0 R >> endobj 371 0 obj << /Title 372 0 R /A 369 0 R /Parent 11 0 R /Prev 367 0 R /Next 375 0 R >> endobj 367 0 obj << /Title 368 0 R /A 365 0 R /Parent 11 0 R /Prev 363 0 R /Next 371 0 R >> endobj 363 0 obj << /Title 364 0 R /A 361 0 R /Parent 11 0 R /Prev 359 0 R /Next 367 0 R >> endobj 359 0 obj << /Title 360 0 R /A 357 0 R /Parent 11 0 R /Prev 355 0 R /Next 363 0 R >> endobj 355 0 obj << /Title 356 0 R /A 353 0 R /Parent 11 0 R /Prev 351 0 R /Next 359 0 R >> endobj 351 0 obj << /Title 352 0 R /A 349 0 R /Parent 11 0 R /Prev 347 0 R /Next 355 0 R >> endobj 347 0 obj << /Title 348 0 R /A 345 0 R /Parent 11 0 R /Prev 343 0 R /Next 351 0 R >> endobj 343 0 obj << /Title 344 0 R /A 341 0 R /Parent 11 0 R /Prev 339 0 R /Next 347 0 R >> endobj 339 0 obj << /Title 340 0 R /A 337 0 R /Parent 11 0 R /Prev 335 0 R /Next 343 0 R >> endobj 335 0 obj << /Title 336 0 R /A 333 0 R /Parent 11 0 R /Prev 331 0 R /Next 339 0 R >> endobj 331 0 obj << /Title 332 0 R /A 329 0 R /Parent 11 0 R /Prev 327 0 R /Next 335 0 R >> endobj 327 0 obj << /Title 328 0 R /A 325 0 R /Parent 11 0 R /Prev 323 0 R /Next 331 0 R >> endobj 323 0 obj << /Title 324 0 R /A 321 0 R /Parent 11 0 R /Prev 319 0 R /Next 327 0 R >> endobj 319 0 obj << /Title 320 0 R /A 317 0 R /Parent 11 0 R /Prev 315 0 R /Next 323 0 R >> endobj 315 0 obj << /Title 316 0 R /A 313 0 R /Parent 11 0 R /Prev 311 0 R /Next 319 0 R >> endobj 311 0 obj << /Title 312 0 R /A 309 0 R /Parent 11 0 R /Prev 307 0 R /Next 315 0 R >> endobj 307 0 obj << /Title 308 0 R /A 305 0 R /Parent 11 0 R /Prev 303 0 R /Next 311 0 R >> endobj 303 0 obj << /Title 304 0 R /A 301 0 R /Parent 11 0 R /Prev 299 0 R /Next 307 0 R >> endobj 299 0 obj << /Title 300 0 R /A 297 0 R /Parent 11 0 R /Prev 295 0 R /Next 303 0 R >> endobj 295 0 obj << /Title 296 0 R /A 293 0 R /Parent 11 0 R /Prev 291 0 R /Next 299 0 R >> endobj 291 0 obj << /Title 292 0 R /A 289 0 R /Parent 11 0 R /Prev 287 0 R /Next 295 0 R >> endobj 287 0 obj << /Title 288 0 R /A 285 0 R /Parent 11 0 R /Prev 283 0 R /Next 291 0 R >> endobj 283 0 obj << /Title 284 0 R /A 281 0 R /Parent 11 0 R /Prev 279 0 R /Next 287 0 R >> endobj 279 0 obj << /Title 280 0 R /A 277 0 R /Parent 11 0 R /Prev 275 0 R /Next 283 0 R >> endobj 275 0 obj << /Title 276 0 R /A 273 0 R /Parent 11 0 R /Prev 271 0 R /Next 279 0 R >> endobj 271 0 obj << /Title 272 0 R /A 269 0 R /Parent 11 0 R /Prev 267 0 R /Next 275 0 R >> endobj 267 0 obj << /Title 268 0 R /A 265 0 R /Parent 11 0 R /Prev 263 0 R /Next 271 0 R >> endobj 263 0 obj << /Title 264 0 R /A 261 0 R /Parent 11 0 R /Prev 259 0 R /Next 267 0 R >> endobj 259 0 obj << /Title 260 0 R /A 257 0 R /Parent 11 0 R /Prev 255 0 R /Next 263 0 R >> endobj 255 0 obj << /Title 256 0 R /A 253 0 R /Parent 11 0 R /Prev 251 0 R /Next 259 0 R >> endobj 251 0 obj << /Title 252 0 R /A 249 0 R /Parent 11 0 R /Prev 247 0 R /Next 255 0 R >> endobj 247 0 obj << /Title 248 0 R /A 245 0 R /Parent 11 0 R /Prev 243 0 R /Next 251 0 R >> endobj 243 0 obj << /Title 244 0 R /A 241 0 R /Parent 11 0 R /Prev 239 0 R /Next 247 0 R >> endobj 239 0 obj << /Title 240 0 R /A 237 0 R /Parent 11 0 R /Prev 235 0 R /Next 243 0 R >> endobj 235 0 obj << /Title 236 0 R /A 233 0 R /Parent 11 0 R /Prev 231 0 R /Next 239 0 R >> endobj 231 0 obj << /Title 232 0 R /A 229 0 R /Parent 11 0 R /Prev 227 0 R /Next 235 0 R >> endobj 227 0 obj << /Title 228 0 R /A 225 0 R /Parent 11 0 R /Prev 223 0 R /Next 231 0 R >> endobj 223 0 obj << /Title 224 0 R /A 221 0 R /Parent 11 0 R /Prev 219 0 R /Next 227 0 R >> endobj 219 0 obj << /Title 220 0 R /A 217 0 R /Parent 11 0 R /Prev 215 0 R /Next 223 0 R >> endobj 215 0 obj << /Title 216 0 R /A 213 0 R /Parent 11 0 R /Prev 211 0 R /Next 219 0 R >> endobj 211 0 obj << /Title 212 0 R /A 209 0 R /Parent 11 0 R /Prev 207 0 R /Next 215 0 R >> endobj 207 0 obj << /Title 208 0 R /A 205 0 R /Parent 11 0 R /Prev 203 0 R /Next 211 0 R >> endobj 203 0 obj << /Title 204 0 R /A 201 0 R /Parent 11 0 R /Prev 199 0 R /Next 207 0 R >> endobj 199 0 obj << /Title 200 0 R /A 197 0 R /Parent 11 0 R /Prev 195 0 R /Next 203 0 R >> endobj 195 0 obj << /Title 196 0 R /A 193 0 R /Parent 11 0 R /Prev 191 0 R /Next 199 0 R >> endobj 191 0 obj << /Title 192 0 R /A 189 0 R /Parent 11 0 R /Prev 187 0 R /Next 195 0 R >> endobj 187 0 obj << /Title 188 0 R /A 185 0 R /Parent 11 0 R /Prev 183 0 R /Next 191 0 R >> endobj 183 0 obj << /Title 184 0 R /A 181 0 R /Parent 11 0 R /Prev 179 0 R /Next 187 0 R >> endobj 179 0 obj << /Title 180 0 R /A 177 0 R /Parent 11 0 R /Prev 175 0 R /Next 183 0 R >> endobj 175 0 obj << /Title 176 0 R /A 173 0 R /Parent 11 0 R /Prev 171 0 R /Next 179 0 R >> endobj 171 0 obj << /Title 172 0 R /A 169 0 R /Parent 11 0 R /Prev 167 0 R /Next 175 0 R >> endobj 167 0 obj << /Title 168 0 R /A 165 0 R /Parent 11 0 R /Prev 163 0 R /Next 171 0 R >> endobj 163 0 obj << /Title 164 0 R /A 161 0 R /Parent 11 0 R /Prev 159 0 R /Next 167 0 R >> endobj 159 0 obj << /Title 160 0 R /A 157 0 R /Parent 11 0 R /Prev 155 0 R /Next 163 0 R >> endobj 155 0 obj << /Title 156 0 R /A 153 0 R /Parent 11 0 R /Prev 151 0 R /Next 159 0 R >> endobj 151 0 obj << /Title 152 0 R /A 149 0 R /Parent 11 0 R /Prev 147 0 R /Next 155 0 R >> endobj 147 0 obj << /Title 148 0 R /A 145 0 R /Parent 11 0 R /Prev 143 0 R /Next 151 0 R >> endobj 143 0 obj << /Title 144 0 R /A 141 0 R /Parent 11 0 R /Prev 139 0 R /Next 147 0 R >> endobj 139 0 obj << /Title 140 0 R /A 137 0 R /Parent 11 0 R /Prev 135 0 R /Next 143 0 R >> endobj 135 0 obj << /Title 136 0 R /A 133 0 R /Parent 11 0 R /Prev 131 0 R /Next 139 0 R >> endobj 131 0 obj << /Title 132 0 R /A 129 0 R /Parent 11 0 R /Prev 127 0 R /Next 135 0 R >> endobj 127 0 obj << /Title 128 0 R /A 125 0 R /Parent 11 0 R /Prev 123 0 R /Next 131 0 R >> endobj 123 0 obj << /Title 124 0 R /A 121 0 R /Parent 11 0 R /Prev 119 0 R /Next 127 0 R >> endobj 119 0 obj << /Title 120 0 R /A 117 0 R /Parent 11 0 R /Prev 115 0 R /Next 123 0 R >> endobj 115 0 obj << /Title 116 0 R /A 113 0 R /Parent 11 0 R /Prev 111 0 R /Next 119 0 R >> endobj 111 0 obj << /Title 112 0 R /A 109 0 R /Parent 11 0 R /Prev 107 0 R /Next 115 0 R >> endobj 107 0 obj << /Title 108 0 R /A 105 0 R /Parent 11 0 R /Prev 103 0 R /Next 111 0 R >> endobj 103 0 obj << /Title 104 0 R /A 101 0 R /Parent 11 0 R /Prev 99 0 R /Next 107 0 R >> endobj 99 0 obj << /Title 100 0 R /A 97 0 R /Parent 11 0 R /Prev 95 0 R /Next 103 0 R >> endobj 95 0 obj << /Title 96 0 R /A 93 0 R /Parent 11 0 R /Prev 91 0 R /Next 99 0 R >> endobj 91 0 obj << /Title 92 0 R /A 89 0 R /Parent 11 0 R /Prev 87 0 R /Next 95 0 R >> endobj 87 0 obj << /Title 88 0 R /A 85 0 R /Parent 11 0 R /Prev 83 0 R /Next 91 0 R >> endobj 83 0 obj << /Title 84 0 R /A 81 0 R /Parent 11 0 R /Prev 79 0 R /Next 87 0 R >> endobj 79 0 obj << /Title 80 0 R /A 77 0 R /Parent 11 0 R /Prev 75 0 R /Next 83 0 R >> endobj 75 0 obj << /Title 76 0 R /A 73 0 R /Parent 11 0 R /Prev 71 0 R /Next 79 0 R >> endobj 71 0 obj << /Title 72 0 R /A 69 0 R /Parent 11 0 R /Prev 67 0 R /Next 75 0 R >> endobj 67 0 obj << /Title 68 0 R /A 65 0 R /Parent 11 0 R /Prev 63 0 R /Next 71 0 R >> endobj 63 0 obj << /Title 64 0 R /A 61 0 R /Parent 11 0 R /Prev 59 0 R /Next 67 0 R >> endobj 59 0 obj << /Title 60 0 R /A 57 0 R /Parent 11 0 R /Prev 55 0 R /Next 63 0 R >> endobj 55 0 obj << /Title 56 0 R /A 53 0 R /Parent 11 0 R /Prev 51 0 R /Next 59 0 R >> endobj 51 0 obj << /Title 52 0 R /A 49 0 R /Parent 11 0 R /Prev 47 0 R /Next 55 0 R >> endobj 47 0 obj << /Title 48 0 R /A 45 0 R /Parent 11 0 R /Prev 43 0 R /Next 51 0 R >> endobj 43 0 obj << /Title 44 0 R /A 41 0 R /Parent 11 0 R /Prev 39 0 R /Next 47 0 R >> endobj 39 0 obj << /Title 40 0 R /A 37 0 R /Parent 11 0 R /Prev 35 0 R /Next 43 0 R >> endobj 35 0 obj << /Title 36 0 R /A 33 0 R /Parent 11 0 R /Prev 31 0 R /Next 39 0 R >> endobj 31 0 obj << /Title 32 0 R /A 29 0 R /Parent 11 0 R /Prev 27 0 R /Next 35 0 R >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 11 0 R /Prev 23 0 R /Next 31 0 R >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 11 0 R /Prev 19 0 R /Next 27 0 R >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 11 0 R /Prev 15 0 R /Next 23 0 R >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 2910 0 R /Prev 7 0 R /First 15 0 R /Last 887 0 R /Count -218 >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 2910 0 R /Prev 3 0 R /Next 11 0 R >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 2910 0 R /Next 7 0 R >> endobj 2911 0 obj << /Names [(1.0) 2 0 R (100) 1112 0 R (1000) 1945 0 R (1001) 1946 0 R (1003) 1947 0 R (1004) 1948 0 R (1005) 1949 0 R (1006) 1950 0 R (1007) 1951 0 R (1009) 1952 0 R (101) 1113 0 R (1010) 1953 0 R (1011) 1954 0 R (1012) 1955 0 R (1013) 1956 0 R (1015) 1957 0 R (1016) 1958 0 R (1017) 1959 0 R (1018) 1960 0 R (1019) 1961 0 R (102) 1114 0 R (1021) 1962 0 R (1022) 1963 0 R (1023) 1964 0 R (1024) 1965 0 R (1025) 1966 0 R (1027) 1967 0 R (1028) 1968 0 R (1029) 1969 0 R (103) 1115 0 R (1030) 1970 0 R (1031) 1971 0 R (1033) 1972 0 R (1034) 1973 0 R (1035) 1974 0 R (1036) 1975 0 R (1037) 1976 0 R (1039) 1981 0 R (104) 1118 0 R (1040) 1982 0 R (1041) 1983 0 R (1042) 1984 0 R (1043) 1985 0 R (1045) 1986 0 R (1046) 1987 0 R (1047) 1988 0 R (1048) 1989 0 R (1049) 1990 0 R (105) 1119 0 R (1051) 1991 0 R (1052) 1992 0 R (1053) 1993 0 R (1054) 1994 0 R (1055) 1995 0 R (1057) 1996 0 R (1058) 1997 0 R (1059) 1998 0 R (106) 1120 0 R (1060) 1999 0 R (1061) 2000 0 R (1063) 2001 0 R (1064) 2002 0 R (1065) 2003 0 R (1066) 2004 0 R (1067) 2005 0 R (1069) 2006 0 R (1070) 2007 0 R (1071) 2008 0 R (1072) 2009 0 R (1073) 2010 0 R (1075) 2011 0 R (1076) 2012 0 R (1077) 2013 0 R (1078) 2014 0 R (1079) 2015 0 R (1080) 2016 0 R (1081) 2017 0 R (1083) 2018 0 R (1084) 2019 0 R (1085) 2020 0 R (1086) 2021 0 R (1087) 2022 0 R (1088) 2023 0 R (1090) 2024 0 R (1091) 2025 0 R (1092) 2026 0 R (1093) 2027 0 R (1094) 2028 0 R (1095) 2029 0 R (1096) 1018 0 R (1098) 2034 0 R (1099) 2035 0 R (11) 1000 0 R (1100) 2036 0 R (1101) 2037 0 R (1103) 2038 0 R (1104) 2039 0 R (1105) 2040 0 R (1106) 2041 0 R (1107) 2042 0 R (1109) 2043 0 R (1110) 2044 0 R (1111) 2045 0 R (1112) 2046 0 R (1113) 2047 0 R (1115) 2048 0 R (1116) 2049 0 R (1117) 2050 0 R (1118) 2051 0 R (1119) 2052 0 R (1121) 2053 0 R (1122) 2054 0 R (1123) 2055 0 R (1124) 2056 0 R (1125) 2057 0 R (1127) 2058 0 R (1128) 2059 0 R (1129) 2060 0 R (1130) 2061 0 R (1131) 2062 0 R (1132) 2063 0 R (1134) 2068 0 R (1135) 2069 0 R (1136) 2070 0 R (1137) 2071 0 R (1138) 2072 0 R (1139) 2073 0 R (1141) 2074 0 R (1142) 2075 0 R (1143) 2076 0 R (1144) 2077 0 R (1145) 2078 0 R (1146) 2079 0 R (1148) 2080 0 R (1149) 2081 0 R (1150) 2082 0 R (1151) 2083 0 R (1152) 2084 0 R (1154) 2085 0 R (1155) 2086 0 R (1156) 2087 0 R (1157) 2088 0 R (1158) 2089 0 R (1159) 1019 0 R (1161) 2090 0 R (1162) 2091 0 R (1163) 2092 0 R (1164) 2093 0 R (1165) 2094 0 R (1166) 2095 0 R (1167) 2096 0 R (1168) 2097 0 R (1169) 2102 0 R (1170) 2103 0 R (1171) 1020 0 R (1173) 2104 0 R (1174) 2105 0 R (1175) 2106 0 R (1202) 2108 0 R (1203) 2109 0 R (1204) 2110 0 R (1205) 2111 0 R (1206) 2112 0 R (1207) 2113 0 R (1208) 2114 0 R (1209) 2115 0 R (1210) 2121 0 R (1211) 1021 0 R (1213) 2122 0 R (1214) 2123 0 R (1215) 2124 0 R (1216) 2125 0 R (1217) 2126 0 R (1218) 1022 0 R (1220) 2127 0 R (1221) 2128 0 R (1222) 2129 0 R (1223) 2130 0 R (1224) 2131 0 R (1225) 2132 0 R (1226) 2133 0 R (1227) 2134 0 R (1228) 1023 0 R (1230) 2135 0 R (1231) 2136 0 R (1232) 2141 0 R (1233) 2142 0 R (1234) 2143 0 R (1235) 2144 0 R (1236) 2145 0 R (1237) 2146 0 R (1238) 2147 0 R (1239) 2148 0 R (1240) 2149 0 R (1241) 2150 0 R (1243) 2151 0 R (1244) 2152 0 R (1245) 2153 0 R (1247) 2154 0 R (1248) 2155 0 R (1249) 2156 0 R (1251) 2157 0 R (1252) 2158 0 R (1253) 2159 0 R (1255) 2160 0 R (1256) 2161 0 R (1257) 2162 0 R (1259) 2163 0 R (1260) 2164 0 R (1261) 2165 0 R (1262) 2171 0 R (1263) 2172 0 R (1264) 2173 0 R (1265) 2174 0 R (1266) 2175 0 R (1267) 2176 0 R (1268) 2177 0 R (1269) 2178 0 R (1271) 2179 0 R (1272) 2180 0 R (1273) 2181 0 R (1275) 2182 0 R (1276) 2183 0 R (1277) 2184 0 R (1279) 2185 0 R (1280) 2186 0 R (1281) 2187 0 R (1282) 2188 0 R (1283) 2189 0 R (1285) 2190 0 R (1286) 2191 0 R (1287) 2192 0 R (1288) 2193 0 R (1289) 2194 0 R (1291) 2195 0 R (1292) 2196 0 R (1293) 2197 0 R (1295) 2198 0 R (1296) 2199 0 R (1297) 2200 0 R (1298) 2205 0 R (1299) 2170 0 R (13) 1001 0 R (1301) 2206 0 R (1302) 2207 0 R (1303) 2208 0 R (1304) 2209 0 R (1306) 2210 0 R (1307) 2211 0 R (1308) 2212 0 R (1310) 2213 0 R (1311) 2214 0 R (1312) 2215 0 R (1314) 2216 0 R (1315) 2217 0 R (1316) 2218 0 R (1318) 2219 0 R (1319) 2220 0 R (1320) 2221 0 R (1322) 2222 0 R (1323) 2223 0 R (1324) 2224 0 R (1325) 2225 0 R (1326) 2226 0 R (1327) 2227 0 R (1328) 2228 0 R (1329) 2229 0 R (1330) 2230 0 R (1331) 2235 0 R (1332) 2236 0 R (1333) 1024 0 R (1335) 2237 0 R (1336) 2238 0 R (1337) 2239 0 R (1338) 2240 0 R (1340) 2241 0 R (1341) 2242 0 R (1342) 2243 0 R (1343) 2244 0 R (1344) 2245 0 R (1345) 2246 0 R (1346) 2247 0 R (1347) 2248 0 R (1348) 2249 0 R (1349) 2250 0 R (1351) 2251 0 R (1352) 2252 0 R (1353) 2253 0 R (1354) 2254 0 R (1355) 2255 0 R (1356) 2256 0 R (1357) 2257 0 R (1358) 2258 0 R (1359) 2259 0 R (1360) 2260 0 R (1361) 2261 0 R (1362) 2262 0 R (1363) 2263 0 R (1364) 2264 0 R (1365) 2265 0 R (1366) 2266 0 R (1367) 2267 0 R (1368) 2272 0 R (1369) 2273 0 R (1370) 2274 0 R (1372) 2275 0 R (1373) 2276 0 R (1374) 2277 0 R (1375) 2278 0 R (1376) 2279 0 R (1378) 2280 0 R (1379) 2281 0 R (1380) 2282 0 R (1381) 2283 0 R (1382) 2284 0 R (1384) 2285 0 R (1385) 2286 0 R (1386) 2287 0 R (1387) 2288 0 R (1388) 2289 0 R (1390) 2290 0 R (1391) 2291 0 R (1392) 2292 0 R (1393) 2293 0 R (1394) 2294 0 R (1396) 2295 0 R (1397) 2296 0 R (1398) 2297 0 R (1399) 2298 0 R (1400) 2299 0 R (1401) 2300 0 R (1402) 2301 0 R (1403) 2302 0 R (1404) 2303 0 R (1405) 2304 0 R (1407) 2305 0 R (1408) 2306 0 R (1409) 2307 0 R (1410) 2308 0 R (1412) 2309 0 R (1413) 2310 0 R (1414) 2311 0 R (1415) 2312 0 R (1416) 2313 0 R (1417) 2314 0 R (1418) 2315 0 R (1419) 2316 0 R (1420) 2322 0 R (1421) 2323 0 R (1422) 2324 0 R (1424) 2325 0 R (1425) 2326 0 R (1427) 2327 0 R (1428) 2328 0 R (1430) 2329 0 R (1431) 2330 0 R (1433) 2331 0 R (1434) 2332 0 R (1435) 2333 0 R (1436) 2334 0 R (1437) 2335 0 R (1438) 1025 0 R (1440) 2336 0 R (1441) 2337 0 R (1442) 2342 0 R (1443) 2343 0 R (1444) 2344 0 R (1445) 2345 0 R (1446) 2346 0 R (1447) 2347 0 R (1448) 2348 0 R (1449) 2349 0 R (1451) 2350 0 R (1452) 2351 0 R (1453) 2352 0 R (1454) 2353 0 R (1456) 2354 0 R (1458) 2355 0 R (1459) 2356 0 R (1460) 2357 0 R (1462) 2358 0 R (1463) 2359 0 R (1464) 2360 0 R (1465) 2361 0 R (1467) 2362 0 R (1469) 2363 0 R (1470) 2364 0 R (1471) 2365 0 R (1473) 2366 0 R (1474) 2367 0 R (1475) 2368 0 R (1476) 2369 0 R (1478) 2374 0 R (1480) 2375 0 R (1481) 2376 0 R (1482) 2377 0 R (1483) 2378 0 R (1485) 2379 0 R (1487) 2380 0 R (1488) 2381 0 R (1489) 2382 0 R (1491) 2383 0 R (1492) 2384 0 R (1493) 2385 0 R (1494) 2386 0 R (1496) 2387 0 R (1498) 2388 0 R (1499) 2389 0 R (15) 1041 0 R (1500) 2390 0 R (1501) 2391 0 R (1503) 2392 0 R (1505) 2393 0 R (1506) 2394 0 R (1507) 2395 0 R (1508) 2396 0 R (1510) 2401 0 R (1511) 1026 0 R (1513) 2402 0 R (1514) 2403 0 R (1515) 2404 0 R (1516) 2405 0 R (1517) 2406 0 R (1518) 2407 0 R (1519) 2408 0 R (1520) 2409 0 R (1521) 2410 0 R (1522) 2411 0 R (1524) 2412 0 R (1525) 2413 0 R (1526) 2414 0 R (1527) 2415 0 R (1528) 2416 0 R (1530) 2421 0 R (1531) 2422 0 R (1532) 2423 0 R (1533) 2424 0 R (1534) 2425 0 R (1536) 2426 0 R (1537) 2427 0 R (1538) 2428 0 R (1539) 2429 0 R (1540) 2430 0 R (1542) 2431 0 R (1543) 2432 0 R (1544) 2433 0 R (1545) 2434 0 R (1546) 2435 0 R (1547) 2436 0 R (1548) 2437 0 R (1549) 2438 0 R (1550) 2439 0 R (1551) 2440 0 R (1552) 2441 0 R (1553) 2442 0 R (1554) 2443 0 R (1555) 2444 0 R (1556) 2445 0 R (1558) 2446 0 R (1559) 2447 0 R (1560) 2448 0 R (1561) 2449 0 R (1562) 2450 0 R (1563) 2451 0 R (1564) 2452 0 R (1565) 2453 0 R (1566) 2454 0 R (1567) 2455 0 R (1568) 2456 0 R (1569) 2457 0 R (1570) 2462 0 R (1571) 2463 0 R (1572) 2464 0 R (1573) 2465 0 R (1574) 2466 0 R (1576) 2467 0 R (1577) 2468 0 R (1578) 2469 0 R (1579) 2470 0 R (1580) 2471 0 R (1581) 2472 0 R (1582) 2473 0 R (1583) 2474 0 R (1584) 2475 0 R (1585) 2476 0 R (1587) 2477 0 R (1588) 2478 0 R (1589) 2479 0 R (1590) 2480 0 R (1591) 2481 0 R (1592) 2482 0 R (1593) 2483 0 R (1594) 2484 0 R (1595) 2485 0 R (1596) 2486 0 R (1597) 2487 0 R (1598) 2488 0 R (1599) 2489 0 R (16) 1042 0 R (1600) 2490 0 R (1601) 2491 0 R (1602) 2497 0 R (1603) 2498 0 R (1604) 2499 0 R (1605) 2500 0 R (1606) 2501 0 R (1607) 2502 0 R (1608) 2503 0 R (1609) 2504 0 R (1611) 2505 0 R (1612) 2506 0 R (1613) 2507 0 R (1614) 2508 0 R (1615) 2509 0 R (1616) 2510 0 R (1617) 2511 0 R (1618) 2512 0 R (1619) 2513 0 R (1620) 2514 0 R (1622) 2515 0 R (1623) 2516 0 R (1624) 2517 0 R (1625) 2518 0 R (1626) 2519 0 R (1627) 2520 0 R (1628) 2521 0 R (1629) 2522 0 R (163) 1125 0 R (1630) 2523 0 R (1631) 2524 0 R (1632) 2525 0 R (1633) 2526 0 R (1634) 2527 0 R (1635) 2528 0 R (1636) 2533 0 R (1637) 2534 0 R (1638) 2535 0 R (1639) 2536 0 R (164) 1126 0 R (1640) 2537 0 R (1641) 2538 0 R (1642) 2539 0 R (1643) 2540 0 R (1644) 2541 0 R (1645) 2542 0 R (1646) 2543 0 R (1648) 2544 0 R (1649) 2545 0 R (165) 1127 0 R (1650) 2546 0 R (1651) 2547 0 R (1652) 2548 0 R (1653) 2549 0 R (1654) 2550 0 R (1655) 2551 0 R (1656) 2552 0 R (1657) 2553 0 R (1659) 2554 0 R (166) 1128 0 R (1660) 2555 0 R (1661) 2556 0 R (1662) 2557 0 R (1663) 2558 0 R (1665) 2563 0 R (1666) 2564 0 R (1667) 2565 0 R (1668) 2566 0 R (1669) 2567 0 R (167) 1129 0 R (1671) 2568 0 R (1672) 2569 0 R (1673) 2570 0 R (1674) 2571 0 R (1675) 2572 0 R (1676) 1027 0 R (1678) 2573 0 R (1679) 2574 0 R (168) 1130 0 R (1680) 2575 0 R (1681) 2576 0 R (1682) 2577 0 R (1683) 2578 0 R (1684) 2579 0 R (1685) 1028 0 R (1687) 2580 0 R (1688) 2581 0 R (1689) 2582 0 R (169) 1131 0 R (1690) 2583 0 R (1691) 2584 0 R (1692) 2585 0 R (1693) 2590 0 R (1694) 2591 0 R (1695) 2592 0 R (1696) 2593 0 R (1697) 2594 0 R (1698) 2595 0 R (1699) 2596 0 R (17) 1043 0 R (170) 1132 0 R (1700) 2597 0 R (1702) 2598 0 R (1703) 2599 0 R (1704) 2600 0 R (1705) 2601 0 R (1706) 2602 0 R (1707) 2603 0 R (1708) 2604 0 R (1709) 2605 0 R (171) 1133 0 R (1710) 2606 0 R (1711) 2607 0 R (1712) 2608 0 R (1713) 2609 0 R (1714) 2610 0 R (1715) 2611 0 R (1716) 2612 0 R (1717) 2613 0 R (1718) 2614 0 R (172) 1134 0 R (1720) 2615 0 R (1721) 2616 0 R (1722) 2617 0 R (1723) 2618 0 R (1724) 2619 0 R (1725) 2620 0 R (1726) 2621 0 R (1727) 2622 0 R (1728) 2623 0 R (1729) 2624 0 R (173) 1135 0 R (1730) 2630 0 R (1731) 2631 0 R (1732) 2632 0 R (1733) 2633 0 R (1734) 1029 0 R (1736) 2634 0 R (1737) 2635 0 R (1738) 2636 0 R (1739) 2637 0 R (174) 1136 0 R (1740) 2638 0 R (1741) 2639 0 R (1742) 2640 0 R (1743) 2641 0 R (1744) 2642 0 R (175) 1137 0 R (176) 1138 0 R (1768) 2644 0 R (1769) 2645 0 R (177) 1139 0 R (1770) 2646 0 R (1772) 2647 0 R (1773) 2648 0 R (1774) 2649 0 R (1775) 2650 0 R (1776) 2651 0 R (1778) 2652 0 R (1779) 2653 0 R (178) 1140 0 R (1780) 2654 0 R (1781) 2655 0 R (1783) 2629 0 R (1784) 2660 0 R (1785) 2661 0 R (1786) 2662 0 R (1788) 2663 0 R (1789) 2664 0 R (179) 1141 0 R (1790) 2665 0 R (1791) 2666 0 R (1792) 2667 0 R (1793) 2668 0 R (1795) 2669 0 R (1796) 2670 0 R (1797) 2671 0 R (1798) 2672 0 R (1799) 2673 0 R (18) 1044 0 R (180) 1142 0 R (1801) 2674 0 R (1802) 2675 0 R (1803) 2676 0 R (1804) 2677 0 R (1806) 2678 0 R (1807) 2679 0 R (1808) 2680 0 R (1809) 2681 0 R (181) 1147 0 R (1811) 2682 0 R (1812) 2683 0 R (1813) 2684 0 R (1814) 2685 0 R (1816) 2686 0 R (1817) 2687 0 R (1818) 2688 0 R (1819) 2689 0 R (182) 1148 0 R (1821) 2690 0 R (1822) 2691 0 R (1823) 2692 0 R (1824) 2693 0 R (1825) 2700 0 R (1826) 2701 0 R (1828) 2702 0 R (1829) 2703 0 R (183) 1149 0 R (1830) 2704 0 R (1832) 2705 0 R (1833) 2706 0 R (1834) 2707 0 R (1835) 2708 0 R (1836) 2709 0 R (1837) 2710 0 R (1839) 2711 0 R (184) 1150 0 R (1840) 2712 0 R (1841) 2713 0 R (1842) 2714 0 R (1843) 2715 0 R (1844) 2716 0 R (1846) 2717 0 R (1847) 2718 0 R (1848) 2719 0 R (1849) 2720 0 R (185) 1151 0 R (1850) 2721 0 R (1851) 2722 0 R (1852) 2723 0 R (1853) 2724 0 R (1854) 2725 0 R (1855) 2726 0 R (1857) 2727 0 R (1858) 2728 0 R (1859) 2729 0 R (186) 1152 0 R (1860) 2730 0 R (1861) 2731 0 R (1862) 2732 0 R (1864) 2733 0 R (1865) 2734 0 R (1866) 2735 0 R (1867) 2736 0 R (1869) 2699 0 R (187) 1153 0 R (1870) 2741 0 R (1871) 2742 0 R (1872) 2743 0 R (1874) 2744 0 R (1875) 2745 0 R (1876) 2746 0 R (1877) 2747 0 R (1879) 2748 0 R (188) 1154 0 R (1880) 2749 0 R (1881) 2750 0 R (1882) 2751 0 R (1884) 2752 0 R (1885) 2753 0 R (1886) 2754 0 R (1888) 2755 0 R (1889) 2756 0 R (189) 1004 0 R (1890) 2757 0 R (1892) 2758 0 R (1893) 2759 0 R (1894) 2760 0 R (1896) 2761 0 R (1897) 2762 0 R (1898) 2763 0 R (1899) 2764 0 R (19) 1045 0 R (1901) 2765 0 R (1902) 2766 0 R (1903) 2767 0 R (1905) 2768 0 R (1906) 2769 0 R (1907) 2770 0 R (1909) 2771 0 R (1910) 2772 0 R (1911) 2773 0 R (1913) 2779 0 R (1914) 2780 0 R (1915) 2781 0 R (1917) 2782 0 R (1918) 2783 0 R (1919) 2784 0 R (192) 1155 0 R (1921) 2785 0 R (1922) 2786 0 R (1923) 2787 0 R (1925) 2788 0 R (1926) 2789 0 R (1927) 2790 0 R (1929) 2791 0 R (193) 1156 0 R (1930) 2792 0 R (1931) 2793 0 R (1933) 2794 0 R (1934) 2795 0 R (1935) 2796 0 R (1936) 2797 0 R (1938) 2798 0 R (1939) 2799 0 R (194) 1157 0 R (1940) 2800 0 R (1942) 2801 0 R (1943) 2802 0 R (1944) 2803 0 R (1945) 2804 0 R (1947) 2805 0 R (1948) 2806 0 R (1949) 2807 0 R (195) 1158 0 R (1950) 2808 0 R (1952) 2813 0 R (1953) 2814 0 R (1954) 2815 0 R (1955) 2778 0 R (1957) 2816 0 R (1958) 2817 0 R (1959) 2818 0 R (196) 1159 0 R (1960) 2819 0 R (1962) 2820 0 R (1963) 2821 0 R (1964) 2822 0 R (1965) 2823 0 R (1967) 2824 0 R (1968) 2825 0 R (1969) 2826 0 R (197) 1160 0 R (1970) 2827 0 R (1972) 2828 0 R (1973) 2829 0 R (1974) 2830 0 R (1975) 2831 0 R (1977) 2832 0 R (1978) 2833 0 R (1979) 2834 0 R (198) 1161 0 R (1981) 2839 0 R (1982) 2840 0 R (1983) 2841 0 R (1985) 2842 0 R (1986) 2843 0 R (1987) 2844 0 R (1988) 2845 0 R (199) 1162 0 R (1990) 2846 0 R (1991) 2847 0 R (1992) 2848 0 R (1993) 2849 0 R (1995) 2850 0 R (1996) 2851 0 R (1997) 2852 0 R (1999) 2853 0 R (2.0) 6 0 R (20) 1046 0 R (200) 1163 0 R (2000) 2854 0 R (2001) 2855 0 R (2003) 2856 0 R (2004) 2857 0 R (2005) 2858 0 R (2007) 2859 0 R (2008) 2860 0 R (2009) 2861 0 R (201) 1164 0 R (2011) 2862 0 R (2012) 2863 0 R (2013) 2864 0 R (2015) 2865 0 R (2016) 2866 0 R (2017) 2867 0 R (2019) 2868 0 R (202) 1165 0 R (2020) 2869 0 R (2021) 2870 0 R (2023) 2871 0 R (2024) 2872 0 R (2025) 2873 0 R (2027) 2878 0 R (2028) 2879 0 R (2029) 2880 0 R (203) 1166 0 R (2030) 1030 0 R (2032) 1031 0 R (2034) 2881 0 R (2035) 2882 0 R (2036) 2883 0 R (2037) 2884 0 R (204) 1167 0 R (205) 1168 0 R (206) 1169 0 R (207) 1170 0 R (208) 1171 0 R (2085) 1032 0 R (2087) 2886 0 R (2088) 2887 0 R (2089) 2888 0 R (209) 1172 0 R (2090) 2889 0 R (2091) 2890 0 R (2092) 2891 0 R (2093) 2892 0 R (2094) 1033 0 R (2096) 2898 0 R (2097) 2899 0 R (2098) 2900 0 R (2099) 2901 0 R (21) 1047 0 R (210) 1173 0 R (2100) 2902 0 R (211) 1174 0 R (212) 1175 0 R (213) 1176 0 R (214) 1177 0 R (215) 1178 0 R (216) 1179 0 R (217) 1180 0 R (218) 1181 0 R (219) 1182 0 R (22) 1048 0 R (220) 1183 0 R (221) 1184 0 R (224) 1185 0 R (225) 1186 0 R (226) 1187 0 R (227) 1192 0 R (228) 1193 0 R (229) 1194 0 R (23) 1049 0 R (230) 1195 0 R (231) 1196 0 R (232) 1197 0 R (233) 1198 0 R (234) 1199 0 R (235) 1200 0 R (236) 1201 0 R (237) 1202 0 R (238) 1203 0 R (239) 1204 0 R (24) 1050 0 R (240) 1205 0 R (241) 1206 0 R (242) 1207 0 R (243) 1208 0 R (244) 1209 0 R (245) 1210 0 R (246) 1211 0 R (247) 1212 0 R (248) 1213 0 R (249) 1214 0 R (25) 1051 0 R (250) 1215 0 R (251) 1216 0 R (252) 1217 0 R (253) 1218 0 R (254) 1219 0 R (255) 1220 0 R (256) 1221 0 R (257) 1222 0 R (258) 1223 0 R (259) 1224 0 R (26) 1052 0 R (260) 1225 0 R (262) 1226 0 R (263) 1227 0 R (264) 1228 0 R (265) 1229 0 R (266) 1230 0 R (267) 1235 0 R (269) 1236 0 R (27) 1053 0 R (270) 1237 0 R (271) 1238 0 R (272) 1239 0 R (273) 1240 0 R (274) 1241 0 R (275) 1242 0 R (276) 1243 0 R (277) 1244 0 R (278) 1245 0 R (279) 1246 0 R (28) 1054 0 R (280) 1247 0 R (281) 1248 0 R (282) 1249 0 R (283) 1250 0 R (284) 1251 0 R (285) 1252 0 R (286) 1253 0 R (287) 1254 0 R (288) 1255 0 R (289) 1256 0 R (29) 1055 0 R (290) 1257 0 R (291) 1258 0 R (292) 1259 0 R (293) 1260 0 R (294) 1261 0 R (295) 1262 0 R (296) 1263 0 R (297) 1264 0 R (298) 1265 0 R (299) 1266 0 R (3.0) 10 0 R (3.1.1) 14 0 R (3.10.1) 50 0 R (3.100.1) 410 0 R (3.101.1) 414 0 R (3.102.1) 418 0 R (3.103.1) 422 0 R (3.104.1) 426 0 R (3.105.1) 430 0 R (3.106.1) 434 0 R (3.107.1) 438 0 R (3.108.1) 442 0 R (3.108.1.2) 446 0 R (3.109.1) 450 0 R (3.11.1) 54 0 R (3.110.1) 454 0 R (3.111.1) 458 0 R (3.112.1) 462 0 R (3.113.1) 466 0 R (3.114.1) 470 0 R (3.115.1) 474 0 R (3.116.1) 478 0 R (3.117.1) 482 0 R (3.118.1) 486 0 R (3.119.1) 490 0 R (3.12.1) 58 0 R (3.120.1) 494 0 R (3.121.1) 498 0 R (3.122.1) 502 0 R (3.123.1) 506 0 R (3.124.1) 510 0 R (3.125.1) 514 0 R (3.126.1) 518 0 R (3.127.1) 522 0 R (3.128.1) 526 0 R (3.129.1) 530 0 R (3.13.1) 62 0 R (3.130.1) 534 0 R (3.131.1) 538 0 R (3.132.1) 542 0 R (3.133.1) 546 0 R (3.134.1) 550 0 R (3.135.1) 554 0 R (3.136.1) 558 0 R (3.137.1) 562 0 R (3.138.1) 566 0 R (3.139.1) 570 0 R (3.14.1) 66 0 R (3.140.1) 574 0 R (3.141.1) 578 0 R (3.142.1) 582 0 R (3.143.1) 586 0 R (3.144.1) 590 0 R (3.145.1) 594 0 R (3.146.1) 598 0 R (3.147.1) 602 0 R (3.148.1) 606 0 R (3.149.1) 610 0 R (3.15.1) 70 0 R (3.150.1) 614 0 R (3.151.1) 618 0 R (3.152.1) 622 0 R (3.153.1) 626 0 R (3.154.1) 630 0 R (3.155.1) 634 0 R (3.156.1) 638 0 R (3.157.1) 642 0 R (3.158.1) 646 0 R (3.159.1) 650 0 R (3.16.1) 74 0 R (3.160.1) 654 0 R (3.161.1) 658 0 R (3.162.1) 662 0 R (3.163.1) 666 0 R (3.164.1) 670 0 R (3.165.1) 674 0 R (3.166.1) 678 0 R (3.167.1) 682 0 R (3.168.1) 686 0 R (3.169.1) 690 0 R (3.17.1) 78 0 R (3.170.1) 694 0 R (3.171.1) 698 0 R (3.172.1) 702 0 R (3.173.1) 706 0 R (3.174.1) 710 0 R (3.175.1) 714 0 R (3.176.1) 718 0 R (3.177.1) 722 0 R (3.178.1) 726 0 R (3.179.1) 730 0 R (3.18.1) 82 0 R (3.180.1) 734 0 R (3.181.1) 738 0 R (3.182.1) 742 0 R (3.183.1) 746 0 R (3.184.1) 750 0 R (3.185.1) 754 0 R (3.186.1) 758 0 R (3.187.1) 762 0 R (3.188.1) 766 0 R (3.189.1) 770 0 R (3.19.1) 86 0 R (3.190.1) 774 0 R (3.191.1) 778 0 R (3.192.1) 782 0 R (3.193.1) 786 0 R (3.194.1) 790 0 R (3.195.1) 794 0 R (3.196.1) 798 0 R (3.197.1) 802 0 R (3.198.1) 806 0 R (3.199.1) 810 0 R (3.2.1) 18 0 R (3.20.1) 90 0 R (3.200.1) 814 0 R (3.201.1) 818 0 R (3.202.1) 822 0 R (3.203.1) 826 0 R (3.204.1) 830 0 R (3.205.1) 834 0 R (3.206.1) 838 0 R (3.207.1) 842 0 R (3.208.1) 846 0 R (3.209.1) 850 0 R (3.21.1) 94 0 R (3.210.1) 854 0 R (3.211.1) 858 0 R (3.212.1) 862 0 R (3.213.1) 866 0 R (3.214.1) 870 0 R (3.215.1) 874 0 R (3.216.1) 878 0 R (3.217.1) 882 0 R (3.218.1) 886 0 R (3.218.2.2) 890 0 R (3.218.3.2) 894 0 R (3.218.4.2) 898 0 R (3.22.1) 98 0 R (3.23.1) 102 0 R (3.24.1) 106 0 R (3.25.1) 110 0 R (3.26.1) 114 0 R (3.27.1) 118 0 R (3.28.1) 122 0 R (3.29.1) 126 0 R (3.3.1) 22 0 R (3.30.1) 130 0 R (3.31.1) 134 0 R (3.32.1) 138 0 R (3.33.1) 142 0 R (3.34.1) 146 0 R (3.35.1) 150 0 R (3.36.1) 154 0 R (3.37.1) 158 0 R (3.38.1) 162 0 R (3.39.1) 166 0 R (3.4.1) 26 0 R (3.40.1) 170 0 R (3.41.1) 174 0 R (3.42.1) 178 0 R (3.43.1) 182 0 R (3.44.1) 186 0 R (3.45.1) 190 0 R (3.46.1) 194 0 R (3.47.1) 198 0 R (3.48.1) 202 0 R (3.49.1) 206 0 R (3.5.1) 30 0 R (3.50.1) 210 0 R (3.51.1) 214 0 R (3.52.1) 218 0 R (3.53.1) 222 0 R (3.54.1) 226 0 R (3.55.1) 230 0 R (3.56.1) 234 0 R (3.57.1) 238 0 R (3.58.1) 242 0 R (3.59.1) 246 0 R (3.6.1) 34 0 R (3.60.1) 250 0 R (3.61.1) 254 0 R (3.62.1) 258 0 R (3.63.1) 262 0 R (3.64.1) 266 0 R (3.65.1) 270 0 R (3.66.1) 274 0 R (3.67.1) 278 0 R (3.68.1) 282 0 R (3.69.1) 286 0 R (3.7.1) 38 0 R (3.70.1) 290 0 R (3.71.1) 294 0 R (3.72.1) 298 0 R (3.73.1) 302 0 R (3.74.1) 306 0 R (3.75.1) 310 0 R (3.76.1) 314 0 R (3.77.1) 318 0 R (3.78.1) 322 0 R (3.79.1) 326 0 R (3.8.1) 42 0 R (3.80.1) 330 0 R (3.81.1) 334 0 R (3.82.1) 338 0 R (3.83.1) 342 0 R (3.84.1) 346 0 R (3.85.1) 350 0 R (3.86.1) 354 0 R (3.87.1) 358 0 R (3.88.1) 362 0 R (3.89.1) 366 0 R (3.9.1) 46 0 R (3.90.1) 370 0 R (3.91.1) 374 0 R (3.92.1) 378 0 R (3.93.1) 382 0 R (3.94.1) 386 0 R (3.95.1) 390 0 R (3.96.1) 394 0 R (3.97.1) 398 0 R (3.98.1) 402 0 R (3.99.1) 406 0 R (30) 1056 0 R (300) 1267 0 R (301) 1268 0 R (302) 1269 0 R (303) 1270 0 R (304) 1271 0 R (305) 1272 0 R (306) 1273 0 R (307) 1274 0 R (308) 1275 0 R (309) 1276 0 R (31) 1057 0 R (310) 1277 0 R (311) 1278 0 R (312) 1279 0 R (313) 1280 0 R (314) 1281 0 R (315) 1282 0 R (316) 1283 0 R (317) 1284 0 R (318) 1285 0 R (319) 1286 0 R (32) 1058 0 R (320) 1287 0 R (322) 1288 0 R (323) 1289 0 R (324) 1290 0 R (325) 1291 0 R (326) 1296 0 R (327) 1297 0 R (328) 1298 0 R (329) 1299 0 R (33) 1061 0 R (330) 1300 0 R (331) 1301 0 R (332) 1302 0 R (333) 1303 0 R (334) 1304 0 R (335) 1305 0 R (336) 1306 0 R (337) 1307 0 R (338) 1308 0 R (339) 1309 0 R (34) 1062 0 R (340) 1310 0 R (341) 1311 0 R (342) 1312 0 R (343) 1313 0 R (344) 1314 0 R (345) 1315 0 R (346) 1316 0 R (347) 1317 0 R (348) 1318 0 R (349) 1319 0 R (35) 1063 0 R (350) 1320 0 R (351) 1321 0 R (352) 1322 0 R (353) 1323 0 R (354) 1324 0 R (355) 1325 0 R (356) 1326 0 R (357) 1327 0 R (358) 1328 0 R (359) 1329 0 R (36) 1064 0 R (360) 1005 0 R (362) 1330 0 R (363) 1331 0 R (364) 1332 0 R (365) 1333 0 R (366) 1334 0 R (367) 1335 0 R (368) 1336 0 R (369) 1006 0 R (37) 1065 0 R (371) 1341 0 R (372) 1342 0 R (373) 1343 0 R (374) 1344 0 R (375) 1345 0 R (376) 1346 0 R (377) 1347 0 R (378) 1348 0 R (379) 1007 0 R (381) 1349 0 R (382) 1350 0 R (383) 1351 0 R (384) 1356 0 R (385) 1357 0 R (386) 1358 0 R (388) 1359 0 R (389) 1360 0 R (390) 1361 0 R (391) 1362 0 R (392) 1363 0 R (393) 1364 0 R (394) 1365 0 R (395) 1366 0 R (396) 1367 0 R (397) 1368 0 R (398) 1369 0 R (399) 1370 0 R (401) 1371 0 R (402) 1372 0 R (403) 1373 0 R (404) 1374 0 R (405) 1375 0 R (406) 1376 0 R (407) 1377 0 R (408) 1378 0 R (409) 1379 0 R (410) 1380 0 R (411) 1381 0 R (412) 1382 0 R (413) 1383 0 R (414) 1384 0 R (415) 1385 0 R (416) 1386 0 R (417) 1387 0 R (418) 1388 0 R (419) 1389 0 R (420) 1390 0 R (421) 1391 0 R (422) 1392 0 R (423) 1008 0 R (425) 1398 0 R (426) 1399 0 R (427) 1400 0 R (428) 1401 0 R (429) 1402 0 R (430) 1403 0 R (431) 1404 0 R (432) 1405 0 R (433) 1406 0 R (434) 1407 0 R (435) 1408 0 R (436) 1409 0 R (437) 1410 0 R (438) 1411 0 R (439) 1412 0 R (440) 1413 0 R (441) 1414 0 R (442) 1415 0 R (443) 1416 0 R (444) 1417 0 R (445) 1418 0 R (446) 1419 0 R (447) 1420 0 R (448) 1421 0 R (449) 1422 0 R (450) 1423 0 R (451) 1424 0 R (452) 1425 0 R (453) 1426 0 R (454) 1427 0 R (455) 1428 0 R (456) 1429 0 R (457) 1430 0 R (458) 1431 0 R (459) 1432 0 R (460) 1433 0 R (461) 1434 0 R (462) 1435 0 R (463) 1436 0 R (464) 1437 0 R (465) 1438 0 R (466) 1439 0 R (467) 1440 0 R (468) 1441 0 R (469) 1442 0 R (470) 1443 0 R (471) 1444 0 R (472) 1445 0 R (473) 1446 0 R (474) 1447 0 R (475) 1448 0 R (476) 1449 0 R (477) 1450 0 R (478) 1451 0 R (479) 1009 0 R (481) 1452 0 R (482) 1453 0 R (483) 1454 0 R (484) 1459 0 R (485) 1460 0 R (486) 1461 0 R (487) 1462 0 R (488) 1463 0 R (489) 1464 0 R (490) 1010 0 R (492) 1465 0 R (493) 1466 0 R (494) 1467 0 R (495) 1468 0 R (496) 1469 0 R (497) 1470 0 R (498) 1471 0 R (500) 1472 0 R (501) 1477 0 R (502) 1478 0 R (504) 1479 0 R (505) 1480 0 R (506) 1481 0 R (507) 1482 0 R (508) 1483 0 R (509) 1484 0 R (51) 1002 0 R (510) 1485 0 R (511) 1486 0 R (512) 1487 0 R (513) 1488 0 R (514) 1489 0 R (515) 1490 0 R (516) 1011 0 R (518) 1491 0 R (519) 1492 0 R (520) 1493 0 R (521) 1494 0 R (522) 1495 0 R (523) 1496 0 R (524) 1497 0 R (525) 1498 0 R (526) 1504 0 R (527) 1505 0 R (528) 1506 0 R (529) 1507 0 R (53) 1070 0 R (530) 1508 0 R (531) 1012 0 R (533) 1509 0 R (534) 1013 0 R (536) 1510 0 R (537) 1511 0 R (538) 1512 0 R (539) 1513 0 R (54) 1071 0 R (540) 1514 0 R (541) 1515 0 R (543) 1516 0 R (544) 1517 0 R (545) 1518 0 R (546) 1519 0 R (547) 1520 0 R (548) 1521 0 R (549) 1522 0 R (55) 1072 0 R (551) 1503 0 R (553) 1527 0 R (554) 1528 0 R (555) 1529 0 R (556) 1530 0 R (557) 1531 0 R (559) 1532 0 R (56) 1073 0 R (560) 1533 0 R (561) 1534 0 R (562) 1535 0 R (563) 1536 0 R (564) 1537 0 R (565) 1538 0 R (567) 1539 0 R (568) 1540 0 R (569) 1541 0 R (57) 1074 0 R (570) 1542 0 R (571) 1543 0 R (572) 1544 0 R (574) 1545 0 R (575) 1546 0 R (576) 1547 0 R (577) 1548 0 R (578) 1549 0 R (579) 1550 0 R (58) 1075 0 R (581) 1551 0 R (582) 1552 0 R (583) 1553 0 R (584) 1554 0 R (585) 1555 0 R (587) 1556 0 R (588) 1557 0 R (589) 1558 0 R (590) 1559 0 R (591) 1560 0 R (593) 1561 0 R (594) 1562 0 R (595) 1563 0 R (596) 1564 0 R (597) 1565 0 R (598) 1566 0 R (60) 1076 0 R (600) 1567 0 R (601) 1568 0 R (602) 1569 0 R (603) 1570 0 R (604) 1571 0 R (605) 1572 0 R (607) 1577 0 R (608) 1578 0 R (609) 1579 0 R (61) 1077 0 R (610) 1580 0 R (611) 1581 0 R (612) 1582 0 R (614) 1583 0 R (615) 1584 0 R (616) 1585 0 R (617) 1586 0 R (618) 1587 0 R (619) 1588 0 R (62) 1078 0 R (621) 1589 0 R (622) 1590 0 R (623) 1591 0 R (624) 1592 0 R (625) 1593 0 R (626) 1594 0 R (628) 1595 0 R (629) 1596 0 R (63) 1079 0 R (630) 1597 0 R (631) 1598 0 R (632) 1599 0 R (633) 1600 0 R (635) 1601 0 R (636) 1602 0 R (637) 1603 0 R (638) 1604 0 R (639) 1605 0 R (64) 1080 0 R (641) 1606 0 R (642) 1607 0 R (643) 1608 0 R (644) 1609 0 R (645) 1610 0 R (646) 1611 0 R (647) 1612 0 R (648) 1613 0 R (650) 1614 0 R (651) 1615 0 R (652) 1616 0 R (653) 1617 0 R (654) 1618 0 R (655) 1619 0 R (656) 1620 0 R (657) 1621 0 R (658) 1622 0 R (659) 1623 0 R (66) 1081 0 R (660) 1624 0 R (661) 1625 0 R (662) 1626 0 R (664) 1632 0 R (665) 1633 0 R (666) 1634 0 R (667) 1635 0 R (668) 1636 0 R (67) 1082 0 R (670) 1637 0 R (671) 1638 0 R (672) 1639 0 R (673) 1640 0 R (674) 1641 0 R (675) 1642 0 R (677) 1643 0 R (678) 1644 0 R (679) 1645 0 R (68) 1083 0 R (680) 1646 0 R (681) 1647 0 R (682) 1648 0 R (684) 1649 0 R (685) 1650 0 R (686) 1651 0 R (687) 1652 0 R (688) 1653 0 R (69) 1084 0 R (690) 1654 0 R (691) 1655 0 R (692) 1656 0 R (693) 1657 0 R (694) 1658 0 R (695) 1659 0 R (697) 1660 0 R (698) 1661 0 R (699) 1662 0 R (70) 1085 0 R (700) 1663 0 R (701) 1664 0 R (702) 1665 0 R (703) 1014 0 R (705) 1666 0 R (706) 1667 0 R (707) 1672 0 R (708) 1673 0 R (710) 1674 0 R (711) 1675 0 R (712) 1676 0 R (713) 1677 0 R (714) 1678 0 R (715) 1679 0 R (716) 1680 0 R (718) 1681 0 R (719) 1682 0 R (72) 1086 0 R (720) 1683 0 R (721) 1684 0 R (722) 1685 0 R (723) 1686 0 R (724) 1687 0 R (725) 1688 0 R (727) 1689 0 R (728) 1690 0 R (729) 1691 0 R (73) 1087 0 R (730) 1692 0 R (731) 1693 0 R (732) 1694 0 R (733) 1695 0 R (735) 1696 0 R (736) 1697 0 R (737) 1698 0 R (738) 1699 0 R (739) 1700 0 R (74) 1088 0 R (741) 1701 0 R (742) 1702 0 R (743) 1703 0 R (744) 1704 0 R (745) 1705 0 R (747) 1706 0 R (748) 1707 0 R (749) 1708 0 R (75) 1089 0 R (750) 1709 0 R (751) 1710 0 R (753) 1715 0 R (754) 1716 0 R (755) 1717 0 R (756) 1718 0 R (757) 1719 0 R (759) 1720 0 R (76) 1090 0 R (760) 1721 0 R (761) 1722 0 R (762) 1723 0 R (763) 1724 0 R (764) 1725 0 R (766) 1726 0 R (767) 1727 0 R (768) 1728 0 R (769) 1729 0 R (770) 1730 0 R (772) 1731 0 R (773) 1732 0 R (774) 1733 0 R (775) 1734 0 R (776) 1735 0 R (777) 1736 0 R (779) 1737 0 R (78) 1091 0 R (780) 1738 0 R (781) 1739 0 R (782) 1740 0 R (783) 1741 0 R (785) 1742 0 R (786) 1743 0 R (787) 1744 0 R (788) 1745 0 R (789) 1746 0 R (79) 1092 0 R (790) 1747 0 R (791) 1015 0 R (793) 1748 0 R (794) 1749 0 R (795) 1754 0 R (796) 1755 0 R (798) 1756 0 R (799) 1757 0 R (80) 1093 0 R (800) 1758 0 R (801) 1759 0 R (802) 1760 0 R (803) 1761 0 R (804) 1762 0 R (806) 1763 0 R (807) 1764 0 R (808) 1765 0 R (809) 1766 0 R (81) 1094 0 R (810) 1767 0 R (812) 1768 0 R (813) 1769 0 R (814) 1770 0 R (815) 1771 0 R (816) 1772 0 R (818) 1773 0 R (819) 1774 0 R (82) 1095 0 R (820) 1775 0 R (821) 1776 0 R (822) 1777 0 R (823) 1778 0 R (825) 1779 0 R (826) 1780 0 R (827) 1781 0 R (828) 1782 0 R (829) 1783 0 R (83) 1096 0 R (830) 1784 0 R (831) 1785 0 R (833) 1786 0 R (834) 1787 0 R (835) 1788 0 R (836) 1789 0 R (837) 1790 0 R (838) 1791 0 R (839) 1792 0 R (84) 1097 0 R (840) 1793 0 R (841) 1794 0 R (843) 1795 0 R (844) 1796 0 R (845) 1797 0 R (846) 1798 0 R (847) 1799 0 R (848) 1800 0 R (849) 1801 0 R (85) 1003 0 R (850) 1802 0 R (851) 1808 0 R (852) 1809 0 R (854) 1810 0 R (855) 1811 0 R (856) 1812 0 R (857) 1813 0 R (858) 1814 0 R (859) 1815 0 R (861) 1816 0 R (862) 1817 0 R (863) 1818 0 R (864) 1819 0 R (865) 1820 0 R (866) 1821 0 R (868) 1822 0 R (869) 1823 0 R (870) 1824 0 R (871) 1825 0 R (872) 1826 0 R (873) 1827 0 R (875) 1828 0 R (876) 1829 0 R (877) 1830 0 R (878) 1831 0 R (879) 1832 0 R (88) 1098 0 R (880) 1833 0 R (882) 1834 0 R (883) 1835 0 R (884) 1836 0 R (885) 1837 0 R (886) 1838 0 R (888) 1839 0 R (889) 1840 0 R (89) 1099 0 R (890) 1841 0 R (891) 1842 0 R (892) 1843 0 R (893) 1844 0 R (895) 1845 0 R (896) 1846 0 R (897) 1847 0 R (898) 1848 0 R (899) 1849 0 R (90) 1100 0 R (900) 1850 0 R (901) 1016 0 R (903) 1855 0 R (904) 1807 0 R (905) 1856 0 R (906) 1857 0 R (908) 1858 0 R (909) 1859 0 R (91) 1101 0 R (910) 1860 0 R (911) 1861 0 R (912) 1862 0 R (913) 1863 0 R (914) 1864 0 R (916) 1865 0 R (917) 1866 0 R (918) 1867 0 R (919) 1868 0 R (92) 1102 0 R (920) 1869 0 R (922) 1870 0 R (923) 1871 0 R (924) 1872 0 R (925) 1873 0 R (926) 1874 0 R (928) 1875 0 R (929) 1876 0 R (93) 1105 0 R (930) 1877 0 R (931) 1878 0 R (932) 1879 0 R (934) 1880 0 R (935) 1881 0 R (936) 1882 0 R (937) 1883 0 R (938) 1884 0 R (939) 1885 0 R (94) 1106 0 R (941) 1891 0 R (942) 1892 0 R (943) 1893 0 R (944) 1894 0 R (945) 1895 0 R (946) 1896 0 R (948) 1897 0 R (949) 1898 0 R (95) 1107 0 R (950) 1899 0 R (951) 1900 0 R (952) 1901 0 R (953) 1902 0 R (955) 1903 0 R (956) 1904 0 R (957) 1905 0 R (958) 1906 0 R (959) 1907 0 R (96) 1108 0 R (961) 1908 0 R (962) 1909 0 R (963) 1910 0 R (964) 1911 0 R (965) 1912 0 R (966) 1913 0 R (968) 1914 0 R (969) 1915 0 R (97) 1109 0 R (970) 1916 0 R (971) 1917 0 R (972) 1918 0 R (973) 1919 0 R (974) 1920 0 R (976) 1921 0 R (977) 1922 0 R (978) 1923 0 R (979) 1924 0 R (98) 1110 0 R (980) 1925 0 R (982) 1926 0 R (983) 1927 0 R (984) 1928 0 R (985) 1929 0 R (986) 1930 0 R (987) 1931 0 R (988) 1017 0 R (99) 1111 0 R (990) 1932 0 R (991) 1933 0 R (992) 1938 0 R (993) 1939 0 R (995) 1940 0 R (996) 1941 0 R (997) 1942 0 R (998) 1943 0 R (999) 1944 0 R (Doc-Start) 906 0 R (docbook) 907 0 R (page.1) 905 0 R (page.10) 1397 0 R (page.11) 1458 0 R (page.12) 1476 0 R (page.13) 1502 0 R (page.14) 1526 0 R (page.15) 1576 0 R (page.16) 1631 0 R (page.17) 1671 0 R (page.18) 1714 0 R (page.19) 1753 0 R (page.2) 916 0 R (page.20) 1806 0 R (page.21) 1854 0 R (page.22) 1890 0 R (page.23) 1937 0 R (page.24) 1980 0 R (page.25) 2033 0 R (page.26) 2067 0 R (page.27) 2101 0 R (page.28) 2120 0 R (page.29) 2140 0 R (page.3) 923 0 R (page.30) 2169 0 R (page.31) 2204 0 R (page.32) 2234 0 R (page.33) 2271 0 R (page.34) 2321 0 R (page.35) 2341 0 R (page.36) 2373 0 R (page.37) 2400 0 R (page.38) 2420 0 R (page.39) 2461 0 R (page.4) 1037 0 R (page.40) 2496 0 R (page.41) 2532 0 R (page.42) 2562 0 R (page.43) 2589 0 R (page.44) 2628 0 R (page.45) 2659 0 R (page.46) 2698 0 R (page.47) 2740 0 R (page.48) 2777 0 R (page.49) 2812 0 R (page.5) 1191 0 R (page.50) 2838 0 R (page.51) 2877 0 R (page.52) 2897 0 R (page.6) 1234 0 R (page.7) 1295 0 R (page.8) 1340 0 R (page.9) 1355 0 R (table.1) 1066 0 R (table.2) 1121 0 R (table.3) 2107 0 R (table.4) 2643 0 R (table.5) 2885 0 R] /Limits [(1.0) (table.5)] >> endobj 2912 0 obj << /Kids [2911 0 R] >> endobj 2913 0 obj << /Dests 2912 0 R >> endobj 2914 0 obj << /Type /Catalog /Pages 2909 0 R /Outlines 2910 0 R /Names 2913 0 R /PageMode /UseOutlines /URI<> /ViewerPreferences<<>> /OpenAction 901 0 R >> endobj 2915 0 obj << /Producer (pdfTeX-0.14h) /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX14.h)/Keywords() /Creator (TeX) /CreationDate (D:20070807092600) >> endobj xref 0 2916 0000000908 65535 f 0000000009 00000 n 0000019446 00000 n 0000366463 00000 n 0000000048 00000 n 0000000089 00000 n 0000033405 00000 n 0000366378 00000 n 0000000128 00000 n 0000000163 00000 n 0000037210 00000 n 0000366264 00000 n 0000000202 00000 n 0000000246 00000 n 0000037335 00000 n 0000366190 00000 n 0000000288 00000 n 0000000319 00000 n 0000041325 00000 n 0000366103 00000 n 0000000361 00000 n 0000000392 00000 n 0000041895 00000 n 0000366016 00000 n 0000000434 00000 n 0000000459 00000 n 0000042272 00000 n 0000365929 00000 n 0000000501 00000 n 0000000528 00000 n 0000042648 00000 n 0000365842 00000 n 0000000570 00000 n 0000000595 00000 n 0000043024 00000 n 0000365755 00000 n 0000000637 00000 n 0000000662 00000 n 0000043465 00000 n 0000365668 00000 n 0000000704 00000 n 0000000764 00000 n 0000053121 00000 n 0000365581 00000 n 0000000806 00000 n 0000000847 00000 n 0000073191 00000 n 0000365494 00000 n 0000000889 00000 n 0000000917 00000 n 0000077138 00000 n 0000365407 00000 n 0000000960 00000 n 0000000986 00000 n 0000077767 00000 n 0000365320 00000 n 0000001029 00000 n 0000001073 00000 n 0000086585 00000 n 0000365233 00000 n 0000001116 00000 n 0000001175 00000 n 0000090142 00000 n 0000365146 00000 n 0000001218 00000 n 0000001255 00000 n 0000093741 00000 n 0000365059 00000 n 0000001298 00000 n 0000001366 00000 n 0000098359 00000 n 0000364972 00000 n 0000001409 00000 n 0000001456 00000 n 0000102293 00000 n 0000364885 00000 n 0000001499 00000 n 0000001539 00000 n 0000102480 00000 n 0000364798 00000 n 0000001582 00000 n 0000001621 00000 n 0000103111 00000 n 0000364711 00000 n 0000001664 00000 n 0000001702 00000 n 0000105275 00000 n 0000364624 00000 n 0000001745 00000 n 0000001783 00000 n 0000105778 00000 n 0000364537 00000 n 0000001826 00000 n 0000001864 00000 n 0000106283 00000 n 0000364450 00000 n 0000001907 00000 n 0000001947 00000 n 0000106725 00000 n 0000364361 00000 n 0000001990 00000 n 0000002031 00000 n 0000107167 00000 n 0000364270 00000 n 0000002075 00000 n 0000002117 00000 n 0000107545 00000 n 0000364178 00000 n 0000002161 00000 n 0000002205 00000 n 0000107924 00000 n 0000364086 00000 n 0000002249 00000 n 0000002288 00000 n 0000108367 00000 n 0000363994 00000 n 0000002332 00000 n 0000002372 00000 n 0000111256 00000 n 0000363902 00000 n 0000002416 00000 n 0000002456 00000 n 0000111698 00000 n 0000363810 00000 n 0000002500 00000 n 0000002536 00000 n 0000112139 00000 n 0000363718 00000 n 0000002580 00000 n 0000002615 00000 n 0000112579 00000 n 0000363626 00000 n 0000002659 00000 n 0000002698 00000 n 0000113021 00000 n 0000363534 00000 n 0000002742 00000 n 0000002780 00000 n 0000113400 00000 n 0000363442 00000 n 0000002824 00000 n 0000002864 00000 n 0000113969 00000 n 0000363350 00000 n 0000002908 00000 n 0000002948 00000 n 0000116868 00000 n 0000363258 00000 n 0000002992 00000 n 0000003028 00000 n 0000117244 00000 n 0000363166 00000 n 0000003072 00000 n 0000003112 00000 n 0000117685 00000 n 0000363074 00000 n 0000003156 00000 n 0000003197 00000 n 0000118128 00000 n 0000362982 00000 n 0000003241 00000 n 0000003282 00000 n 0000118506 00000 n 0000362890 00000 n 0000003326 00000 n 0000003368 00000 n 0000118948 00000 n 0000362798 00000 n 0000003412 00000 n 0000003455 00000 n 0000119263 00000 n 0000362706 00000 n 0000003499 00000 n 0000003537 00000 n 0000121695 00000 n 0000362614 00000 n 0000003581 00000 n 0000003618 00000 n 0000122202 00000 n 0000362522 00000 n 0000003662 00000 n 0000003697 00000 n 0000122770 00000 n 0000362430 00000 n 0000003741 00000 n 0000003780 00000 n 0000123277 00000 n 0000362338 00000 n 0000003824 00000 n 0000003865 00000 n 0000123656 00000 n 0000362246 00000 n 0000003909 00000 n 0000003948 00000 n 0000124035 00000 n 0000362154 00000 n 0000003992 00000 n 0000004031 00000 n 0000126447 00000 n 0000362062 00000 n 0000004075 00000 n 0000004115 00000 n 0000126824 00000 n 0000361970 00000 n 0000004159 00000 n 0000004196 00000 n 0000127263 00000 n 0000361878 00000 n 0000004240 00000 n 0000004281 00000 n 0000127641 00000 n 0000361786 00000 n 0000004325 00000 n 0000004364 00000 n 0000128083 00000 n 0000361694 00000 n 0000004408 00000 n 0000004448 00000 n 0000128462 00000 n 0000361602 00000 n 0000004492 00000 n 0000004534 00000 n 0000128777 00000 n 0000361510 00000 n 0000004578 00000 n 0000004618 00000 n 0000131522 00000 n 0000361418 00000 n 0000004662 00000 n 0000004700 00000 n 0000132028 00000 n 0000361326 00000 n 0000004744 00000 n 0000004783 00000 n 0000132407 00000 n 0000361234 00000 n 0000004827 00000 n 0000004866 00000 n 0000132784 00000 n 0000361142 00000 n 0000004910 00000 n 0000004951 00000 n 0000133224 00000 n 0000361050 00000 n 0000004995 00000 n 0000005035 00000 n 0000133729 00000 n 0000360958 00000 n 0000005079 00000 n 0000005122 00000 n 0000134361 00000 n 0000360866 00000 n 0000005166 00000 n 0000005208 00000 n 0000136860 00000 n 0000360774 00000 n 0000005252 00000 n 0000005293 00000 n 0000137303 00000 n 0000360682 00000 n 0000005337 00000 n 0000005377 00000 n 0000137740 00000 n 0000360590 00000 n 0000005421 00000 n 0000005461 00000 n 0000138182 00000 n 0000360498 00000 n 0000005505 00000 n 0000005547 00000 n 0000138624 00000 n 0000360406 00000 n 0000005591 00000 n 0000005631 00000 n 0000139003 00000 n 0000360314 00000 n 0000005675 00000 n 0000005714 00000 n 0000139446 00000 n 0000360222 00000 n 0000005758 00000 n 0000005800 00000 n 0000141730 00000 n 0000360130 00000 n 0000005844 00000 n 0000005889 00000 n 0000142168 00000 n 0000360038 00000 n 0000005933 00000 n 0000005971 00000 n 0000142675 00000 n 0000359946 00000 n 0000006015 00000 n 0000006051 00000 n 0000143053 00000 n 0000359854 00000 n 0000006095 00000 n 0000006135 00000 n 0000143431 00000 n 0000359762 00000 n 0000006179 00000 n 0000006219 00000 n 0000143808 00000 n 0000359670 00000 n 0000006263 00000 n 0000006305 00000 n 0000146283 00000 n 0000359578 00000 n 0000006349 00000 n 0000006391 00000 n 0000146724 00000 n 0000359486 00000 n 0000006435 00000 n 0000006475 00000 n 0000147165 00000 n 0000359394 00000 n 0000006519 00000 n 0000006560 00000 n 0000147544 00000 n 0000359302 00000 n 0000006604 00000 n 0000006637 00000 n 0000147985 00000 n 0000359210 00000 n 0000006681 00000 n 0000006723 00000 n 0000148492 00000 n 0000359118 00000 n 0000006767 00000 n 0000006807 00000 n 0000148871 00000 n 0000359026 00000 n 0000006851 00000 n 0000006893 00000 n 0000149184 00000 n 0000358934 00000 n 0000006937 00000 n 0000006982 00000 n 0000151477 00000 n 0000358842 00000 n 0000007026 00000 n 0000007064 00000 n 0000151984 00000 n 0000358750 00000 n 0000007108 00000 n 0000007144 00000 n 0000152362 00000 n 0000358658 00000 n 0000007188 00000 n 0000007227 00000 n 0000152741 00000 n 0000358566 00000 n 0000007271 00000 n 0000007311 00000 n 0000153118 00000 n 0000358474 00000 n 0000007355 00000 n 0000007395 00000 n 0000153495 00000 n 0000358382 00000 n 0000007439 00000 n 0000007477 00000 n 0000153872 00000 n 0000358290 00000 n 0000007521 00000 n 0000007561 00000 n 0000155443 00000 n 0000358198 00000 n 0000007605 00000 n 0000007646 00000 n 0000155822 00000 n 0000358106 00000 n 0000007690 00000 n 0000007733 00000 n 0000156201 00000 n 0000358014 00000 n 0000007777 00000 n 0000007817 00000 n 0000156580 00000 n 0000357922 00000 n 0000007861 00000 n 0000007903 00000 n 0000156958 00000 n 0000357830 00000 n 0000007947 00000 n 0000007988 00000 n 0000157337 00000 n 0000357738 00000 n 0000008032 00000 n 0000008075 00000 n 0000157716 00000 n 0000357646 00000 n 0000008119 00000 n 0000008161 00000 n 0000158223 00000 n 0000357554 00000 n 0000008205 00000 n 0000008245 00000 n 0000158665 00000 n 0000357462 00000 n 0000008289 00000 n 0000008331 00000 n 0000160788 00000 n 0000357370 00000 n 0000008375 00000 n 0000008415 00000 n 0000161293 00000 n 0000357278 00000 n 0000008459 00000 n 0000008497 00000 n 0000161672 00000 n 0000357186 00000 n 0000008542 00000 n 0000008581 00000 n 0000162051 00000 n 0000357094 00000 n 0000008626 00000 n 0000008665 00000 n 0000162430 00000 n 0000357002 00000 n 0000008710 00000 n 0000008749 00000 n 0000162809 00000 n 0000356910 00000 n 0000008794 00000 n 0000008835 00000 n 0000165378 00000 n 0000356818 00000 n 0000008880 00000 n 0000008921 00000 n 0000165817 00000 n 0000356726 00000 n 0000008966 00000 n 0000009005 00000 n 0000166258 00000 n 0000356634 00000 n 0000009050 00000 n 0000009090 00000 n 0000166635 00000 n 0000356542 00000 n 0000009135 00000 n 0000009177 00000 n 0000166886 00000 n 0000356411 00000 n 0000009222 00000 n 0000009253 00000 n 0000170098 00000 n 0000356346 00000 n 0000009300 00000 n 0000009335 00000 n 0000173300 00000 n 0000356254 00000 n 0000009380 00000 n 0000009413 00000 n 0000173743 00000 n 0000356162 00000 n 0000009458 00000 n 0000009494 00000 n 0000174375 00000 n 0000356070 00000 n 0000009539 00000 n 0000009577 00000 n 0000177364 00000 n 0000355978 00000 n 0000009622 00000 n 0000009650 00000 n 0000177615 00000 n 0000355886 00000 n 0000009695 00000 n 0000009721 00000 n 0000177867 00000 n 0000355794 00000 n 0000009766 00000 n 0000009793 00000 n 0000178119 00000 n 0000355702 00000 n 0000009838 00000 n 0000009864 00000 n 0000178371 00000 n 0000355610 00000 n 0000009909 00000 n 0000009935 00000 n 0000181334 00000 n 0000355518 00000 n 0000009980 00000 n 0000010018 00000 n 0000181586 00000 n 0000355426 00000 n 0000010063 00000 n 0000010101 00000 n 0000181899 00000 n 0000355334 00000 n 0000010146 00000 n 0000010184 00000 n 0000182277 00000 n 0000355242 00000 n 0000010229 00000 n 0000010267 00000 n 0000182593 00000 n 0000355150 00000 n 0000010312 00000 n 0000010351 00000 n 0000182845 00000 n 0000355058 00000 n 0000010396 00000 n 0000010434 00000 n 0000185548 00000 n 0000354966 00000 n 0000010479 00000 n 0000010506 00000 n 0000185799 00000 n 0000354874 00000 n 0000010551 00000 n 0000010577 00000 n 0000186051 00000 n 0000354782 00000 n 0000010622 00000 n 0000010647 00000 n 0000186302 00000 n 0000354690 00000 n 0000010692 00000 n 0000010712 00000 n 0000186554 00000 n 0000354598 00000 n 0000010757 00000 n 0000010777 00000 n 0000190368 00000 n 0000354506 00000 n 0000010822 00000 n 0000010865 00000 n 0000190875 00000 n 0000354414 00000 n 0000010910 00000 n 0000010967 00000 n 0000191572 00000 n 0000354322 00000 n 0000011012 00000 n 0000011066 00000 n 0000194871 00000 n 0000354230 00000 n 0000011111 00000 n 0000011159 00000 n 0000195249 00000 n 0000354138 00000 n 0000011204 00000 n 0000011259 00000 n 0000195626 00000 n 0000354046 00000 n 0000011304 00000 n 0000011351 00000 n 0000196004 00000 n 0000353954 00000 n 0000011396 00000 n 0000011441 00000 n 0000196383 00000 n 0000353862 00000 n 0000011486 00000 n 0000011541 00000 n 0000197332 00000 n 0000353770 00000 n 0000011586 00000 n 0000011636 00000 n 0000200472 00000 n 0000353678 00000 n 0000011681 00000 n 0000011723 00000 n 0000200723 00000 n 0000353586 00000 n 0000011768 00000 n 0000011801 00000 n 0000203524 00000 n 0000353494 00000 n 0000011846 00000 n 0000011882 00000 n 0000203901 00000 n 0000353402 00000 n 0000011927 00000 n 0000011979 00000 n 0000204152 00000 n 0000353310 00000 n 0000012024 00000 n 0000012085 00000 n 0000204528 00000 n 0000353218 00000 n 0000012130 00000 n 0000012182 00000 n 0000204779 00000 n 0000353126 00000 n 0000012227 00000 n 0000012291 00000 n 0000206599 00000 n 0000353034 00000 n 0000012336 00000 n 0000012391 00000 n 0000206977 00000 n 0000352942 00000 n 0000012436 00000 n 0000012499 00000 n 0000207228 00000 n 0000352850 00000 n 0000012544 00000 n 0000012608 00000 n 0000207606 00000 n 0000352758 00000 n 0000012653 00000 n 0000012720 00000 n 0000207984 00000 n 0000352666 00000 n 0000012765 00000 n 0000012838 00000 n 0000210654 00000 n 0000352574 00000 n 0000012883 00000 n 0000012949 00000 n 0000211538 00000 n 0000352482 00000 n 0000012994 00000 n 0000013038 00000 n 0000214583 00000 n 0000352390 00000 n 0000013083 00000 n 0000013126 00000 n 0000214958 00000 n 0000352298 00000 n 0000013171 00000 n 0000013214 00000 n 0000215337 00000 n 0000352206 00000 n 0000013259 00000 n 0000013317 00000 n 0000220122 00000 n 0000352114 00000 n 0000013362 00000 n 0000013421 00000 n 0000220819 00000 n 0000352022 00000 n 0000013466 00000 n 0000013524 00000 n 0000225124 00000 n 0000351930 00000 n 0000013569 00000 n 0000013627 00000 n 0000225818 00000 n 0000351838 00000 n 0000013672 00000 n 0000013730 00000 n 0000230405 00000 n 0000351746 00000 n 0000013775 00000 n 0000013833 00000 n 0000231096 00000 n 0000351654 00000 n 0000013878 00000 n 0000013916 00000 n 0000234802 00000 n 0000351562 00000 n 0000013961 00000 n 0000013997 00000 n 0000235180 00000 n 0000351470 00000 n 0000014042 00000 n 0000014090 00000 n 0000235432 00000 n 0000351378 00000 n 0000014135 00000 n 0000014204 00000 n 0000236001 00000 n 0000351286 00000 n 0000014249 00000 n 0000014320 00000 n 0000244750 00000 n 0000351194 00000 n 0000014365 00000 n 0000014411 00000 n 0000245699 00000 n 0000351102 00000 n 0000014456 00000 n 0000014489 00000 n 0000246078 00000 n 0000351010 00000 n 0000014534 00000 n 0000014568 00000 n 0000247983 00000 n 0000350918 00000 n 0000014613 00000 n 0000014645 00000 n 0000248298 00000 n 0000350826 00000 n 0000014690 00000 n 0000014727 00000 n 0000248740 00000 n 0000350734 00000 n 0000014772 00000 n 0000014802 00000 n 0000249119 00000 n 0000350642 00000 n 0000014847 00000 n 0000014876 00000 n 0000249434 00000 n 0000350550 00000 n 0000014921 00000 n 0000014951 00000 n 0000249749 00000 n 0000350458 00000 n 0000014996 00000 n 0000015027 00000 n 0000250063 00000 n 0000350366 00000 n 0000015072 00000 n 0000015102 00000 n 0000250378 00000 n 0000350274 00000 n 0000015147 00000 n 0000015175 00000 n 0000253627 00000 n 0000350182 00000 n 0000015220 00000 n 0000015247 00000 n 0000253878 00000 n 0000350090 00000 n 0000015292 00000 n 0000015325 00000 n 0000254322 00000 n 0000349998 00000 n 0000015370 00000 n 0000015403 00000 n 0000254766 00000 n 0000349906 00000 n 0000015448 00000 n 0000015481 00000 n 0000255463 00000 n 0000349814 00000 n 0000015526 00000 n 0000015556 00000 n 0000255907 00000 n 0000349722 00000 n 0000015601 00000 n 0000015636 00000 n 0000257631 00000 n 0000349630 00000 n 0000015681 00000 n 0000015719 00000 n 0000257945 00000 n 0000349538 00000 n 0000015764 00000 n 0000015800 00000 n 0000258258 00000 n 0000349446 00000 n 0000015845 00000 n 0000015884 00000 n 0000258572 00000 n 0000349354 00000 n 0000015929 00000 n 0000015958 00000 n 0000258823 00000 n 0000349262 00000 n 0000016003 00000 n 0000016033 00000 n 0000259074 00000 n 0000349170 00000 n 0000016078 00000 n 0000016109 00000 n 0000259324 00000 n 0000349078 00000 n 0000016154 00000 n 0000016189 00000 n 0000259639 00000 n 0000348986 00000 n 0000016234 00000 n 0000016269 00000 n 0000259889 00000 n 0000348894 00000 n 0000016314 00000 n 0000016350 00000 n 0000260140 00000 n 0000348802 00000 n 0000016395 00000 n 0000016431 00000 n 0000262073 00000 n 0000348710 00000 n 0000016476 00000 n 0000016513 00000 n 0000262325 00000 n 0000348618 00000 n 0000016558 00000 n 0000016593 00000 n 0000262576 00000 n 0000348526 00000 n 0000016638 00000 n 0000016672 00000 n 0000262828 00000 n 0000348434 00000 n 0000016717 00000 n 0000016753 00000 n 0000263080 00000 n 0000348342 00000 n 0000016798 00000 n 0000016824 00000 n 0000263331 00000 n 0000348250 00000 n 0000016869 00000 n 0000016901 00000 n 0000263645 00000 n 0000348158 00000 n 0000016946 00000 n 0000016975 00000 n 0000263896 00000 n 0000348066 00000 n 0000017020 00000 n 0000017047 00000 n 0000264210 00000 n 0000347974 00000 n 0000017092 00000 n 0000017122 00000 n 0000266048 00000 n 0000347882 00000 n 0000017167 00000 n 0000017194 00000 n 0000266300 00000 n 0000347790 00000 n 0000017239 00000 n 0000017266 00000 n 0000266613 00000 n 0000347698 00000 n 0000017311 00000 n 0000017335 00000 n 0000266928 00000 n 0000347606 00000 n 0000017380 00000 n 0000017407 00000 n 0000267242 00000 n 0000347514 00000 n 0000017452 00000 n 0000017479 00000 n 0000267557 00000 n 0000347422 00000 n 0000017524 00000 n 0000017551 00000 n 0000269189 00000 n 0000347330 00000 n 0000017596 00000 n 0000017625 00000 n 0000269441 00000 n 0000347238 00000 n 0000017670 00000 n 0000017704 00000 n 0000269754 00000 n 0000347146 00000 n 0000017749 00000 n 0000017783 00000 n 0000270069 00000 n 0000347054 00000 n 0000017828 00000 n 0000017858 00000 n 0000270321 00000 n 0000346962 00000 n 0000017903 00000 n 0000017932 00000 n 0000270572 00000 n 0000346870 00000 n 0000017977 00000 n 0000018009 00000 n 0000270823 00000 n 0000346778 00000 n 0000018054 00000 n 0000018084 00000 n 0000271075 00000 n 0000346686 00000 n 0000018129 00000 n 0000018162 00000 n 0000271325 00000 n 0000346594 00000 n 0000018207 00000 n 0000018237 00000 n 0000271577 00000 n 0000346502 00000 n 0000018282 00000 n 0000018314 00000 n 0000271829 00000 n 0000346410 00000 n 0000018359 00000 n 0000018389 00000 n 0000274015 00000 n 0000346318 00000 n 0000018434 00000 n 0000018462 00000 n 0000274267 00000 n 0000346201 00000 n 0000018507 00000 n 0000018544 00000 n 0000274392 00000 n 0000346122 00000 n 0000018591 00000 n 0000018619 00000 n 0000274833 00000 n 0000346029 00000 n 0000018666 00000 n 0000018692 00000 n 0000276638 00000 n 0000345950 00000 n 0000018739 00000 n 0000018765 00000 n 0000019143 00000 n 0000019506 00000 n 0000018817 00000 n 0000019263 00000 n 0000019324 00000 n 0000019385 00000 n 0000000910 00000 f 0000344265 00000 n 0000000934 00000 f 0000344169 00000 n 0000344359 00000 n 0000020085 00000 n 0000019904 00000 n 0000019591 00000 n 0000020024 00000 n 0000343038 00000 n 0000316125 00000 n 0000342864 00000 n 0000033465 00000 n 0000022761 00000 n 0000020183 00000 n 0000033344 00000 n 0000023437 00000 n 0000315357 00000 n 0000294243 00000 n 0000315183 00000 n 0000023582 00000 n 0000023727 00000 n 0000023870 00000 n 0000024015 00000 n 0000024160 00000 n 0000024305 00000 n 0000001059 00000 f 0000294154 00000 n 0000024450 00000 n 0000024595 00000 n 0000024740 00000 n 0000024885 00000 n 0000025031 00000 n 0000025177 00000 n 0000025322 00000 n 0000025467 00000 n 0000025613 00000 n 0000025759 00000 n 0000025905 00000 n 0000026051 00000 n 0000026197 00000 n 0000026342 00000 n 0000026488 00000 n 0000026633 00000 n 0000026779 00000 n 0000026924 00000 n 0000027069 00000 n 0000027214 00000 n 0000027359 00000 n 0000027503 00000 n 0000027649 00000 n 0000027794 00000 n 0000027939 00000 n 0000028083 00000 n 0000028229 00000 n 0000028374 00000 n 0000028520 00000 n 0000028665 00000 n 0000028812 00000 n 0000028958 00000 n 0000029104 00000 n 0000029250 00000 n 0000029397 00000 n 0000029543 00000 n 0000029690 00000 n 0000029836 00000 n 0000029982 00000 n 0000030127 00000 n 0000030274 00000 n 0000030420 00000 n 0000030566 00000 n 0000030711 00000 n 0000030858 00000 n 0000031004 00000 n 0000031151 00000 n 0000031297 00000 n 0000031444 00000 n 0000031590 00000 n 0000031737 00000 n 0000031883 00000 n 0000032030 00000 n 0000032176 00000 n 0000032322 00000 n 0000032467 00000 n 0000032614 00000 n 0000032760 00000 n 0000032906 00000 n 0000033051 00000 n 0000033198 00000 n 0000293567 00000 n 0000279223 00000 n 0000293392 00000 n 0000037147 00000 n 0000037272 00000 n 0000038917 00000 n 0000043402 00000 n 0000053058 00000 n 0000073128 00000 n 0000070893 00000 n 0000077704 00000 n 0000082910 00000 n 0000090079 00000 n 0000093678 00000 n 0000098296 00000 n 0000102231 00000 n 0000102418 00000 n 0000119200 00000 n 0000128714 00000 n 0000139698 00000 n 0000149122 00000 n 0000158917 00000 n 0000166823 00000 n 0000170035 00000 n 0000173237 00000 n 0000173680 00000 n 0000174313 00000 n 0000190305 00000 n 0000200660 00000 n 0000210591 00000 n 0000235369 00000 n 0000235938 00000 n 0000239246 00000 n 0000274204 00000 n 0000274330 00000 n 0000274770 00000 n 0000275340 00000 n 0000033953 00000 n 0000033767 00000 n 0000033589 00000 n 0000033890 00000 n 0000038979 00000 n 0000037024 00000 n 0000034026 00000 n 0000037397 00000 n 0000037460 00000 n 0000037523 00000 n 0000037586 00000 n 0000037650 00000 n 0000037713 00000 n 0000037777 00000 n 0000037840 00000 n 0000037903 00000 n 0000037966 00000 n 0000038029 00000 n 0000038093 00000 n 0000038156 00000 n 0000038219 00000 n 0000038282 00000 n 0000038346 00000 n 0000038410 00000 n 0000038473 00000 n 0000001103 00000 f 0000279131 00000 n 0000038536 00000 n 0000038600 00000 n 0000038664 00000 n 0000038727 00000 n 0000038791 00000 n 0000038854 00000 n 0000044798 00000 n 0000041202 00000 n 0000039105 00000 n 0000041387 00000 n 0000041450 00000 n 0000041514 00000 n 0000041578 00000 n 0000041642 00000 n 0000041706 00000 n 0000041769 00000 n 0000041832 00000 n 0000041956 00000 n 0000042019 00000 n 0000042082 00000 n 0000042146 00000 n 0000042209 00000 n 0000042334 00000 n 0000042397 00000 n 0000042458 00000 n 0000042522 00000 n 0000042585 00000 n 0000042710 00000 n 0000042773 00000 n 0000042836 00000 n 0000042900 00000 n 0000042962 00000 n 0000043086 00000 n 0000043149 00000 n 0000043212 00000 n 0000043275 00000 n 0000043338 00000 n 0000043527 00000 n 0000043590 00000 n 0000043654 00000 n 0000043718 00000 n 0000043782 00000 n 0000001116 00000 f 0000279029 00000 n 0000043846 00000 n 0000043910 00000 n 0000043974 00000 n 0000044038 00000 n 0000044101 00000 n 0000044165 00000 n 0000044228 00000 n 0000044292 00000 n 0000044355 00000 n 0000044419 00000 n 0000044483 00000 n 0000000000 00000 f 0000278931 00000 n 0000044547 00000 n 0000044609 00000 n 0000044672 00000 n 0000044735 00000 n 0000049067 00000 n 0000047800 00000 n 0000044951 00000 n 0000047924 00000 n 0000047987 00000 n 0000048051 00000 n 0000048115 00000 n 0000048178 00000 n 0000048242 00000 n 0000048304 00000 n 0000048368 00000 n 0000048432 00000 n 0000048496 00000 n 0000048560 00000 n 0000048624 00000 n 0000048688 00000 n 0000048752 00000 n 0000048816 00000 n 0000048879 00000 n 0000048942 00000 n 0000049005 00000 n 0000344480 00000 n 0000055280 00000 n 0000052424 00000 n 0000049166 00000 n 0000052548 00000 n 0000052611 00000 n 0000052675 00000 n 0000052739 00000 n 0000052803 00000 n 0000052867 00000 n 0000052930 00000 n 0000052994 00000 n 0000053183 00000 n 0000053246 00000 n 0000053309 00000 n 0000053372 00000 n 0000053436 00000 n 0000053500 00000 n 0000053564 00000 n 0000053627 00000 n 0000053690 00000 n 0000053754 00000 n 0000053818 00000 n 0000053882 00000 n 0000053946 00000 n 0000054010 00000 n 0000054073 00000 n 0000054136 00000 n 0000054200 00000 n 0000054264 00000 n 0000054328 00000 n 0000054392 00000 n 0000054455 00000 n 0000054518 00000 n 0000054582 00000 n 0000054646 00000 n 0000054709 00000 n 0000054773 00000 n 0000054837 00000 n 0000054901 00000 n 0000054964 00000 n 0000055028 00000 n 0000055092 00000 n 0000055155 00000 n 0000055217 00000 n 0000060569 00000 n 0000057916 00000 n 0000055418 00000 n 0000058040 00000 n 0000058103 00000 n 0000058166 00000 n 0000058229 00000 n 0000058292 00000 n 0000058355 00000 n 0000058418 00000 n 0000058481 00000 n 0000058543 00000 n 0000058606 00000 n 0000058669 00000 n 0000058732 00000 n 0000058795 00000 n 0000058858 00000 n 0000058921 00000 n 0000058984 00000 n 0000059047 00000 n 0000059109 00000 n 0000059172 00000 n 0000059236 00000 n 0000059299 00000 n 0000059362 00000 n 0000059425 00000 n 0000059489 00000 n 0000059553 00000 n 0000059617 00000 n 0000059681 00000 n 0000059745 00000 n 0000059809 00000 n 0000059872 00000 n 0000059935 00000 n 0000059998 00000 n 0000060062 00000 n 0000060126 00000 n 0000060190 00000 n 0000060253 00000 n 0000060316 00000 n 0000060380 00000 n 0000060444 00000 n 0000060508 00000 n 0000067618 00000 n 0000063810 00000 n 0000060708 00000 n 0000063934 00000 n 0000063997 00000 n 0000064061 00000 n 0000064124 00000 n 0000064188 00000 n 0000064252 00000 n 0000064316 00000 n 0000064380 00000 n 0000064444 00000 n 0000064507 00000 n 0000064571 00000 n 0000064635 00000 n 0000064699 00000 n 0000064763 00000 n 0000064826 00000 n 0000064889 00000 n 0000064953 00000 n 0000065017 00000 n 0000065080 00000 n 0000065143 00000 n 0000065207 00000 n 0000065270 00000 n 0000065334 00000 n 0000065398 00000 n 0000065462 00000 n 0000065526 00000 n 0000065590 00000 n 0000065654 00000 n 0000065718 00000 n 0000065782 00000 n 0000065846 00000 n 0000065910 00000 n 0000065973 00000 n 0000066037 00000 n 0000066100 00000 n 0000066164 00000 n 0000066228 00000 n 0000066292 00000 n 0000066356 00000 n 0000066420 00000 n 0000066483 00000 n 0000066545 00000 n 0000066609 00000 n 0000066673 00000 n 0000066736 00000 n 0000066800 00000 n 0000066864 00000 n 0000066927 00000 n 0000066991 00000 n 0000067054 00000 n 0000067118 00000 n 0000067182 00000 n 0000067245 00000 n 0000067308 00000 n 0000067370 00000 n 0000067433 00000 n 0000067495 00000 n 0000067557 00000 n 0000073694 00000 n 0000070706 00000 n 0000067757 00000 n 0000070830 00000 n 0000070955 00000 n 0000071018 00000 n 0000071082 00000 n 0000071146 00000 n 0000071210 00000 n 0000071274 00000 n 0000071338 00000 n 0000071402 00000 n 0000071466 00000 n 0000071530 00000 n 0000071594 00000 n 0000071658 00000 n 0000071721 00000 n 0000071785 00000 n 0000071849 00000 n 0000071913 00000 n 0000071977 00000 n 0000072041 00000 n 0000072105 00000 n 0000072169 00000 n 0000072233 00000 n 0000072297 00000 n 0000072361 00000 n 0000072425 00000 n 0000072489 00000 n 0000072553 00000 n 0000072617 00000 n 0000072681 00000 n 0000072745 00000 n 0000072809 00000 n 0000072873 00000 n 0000072937 00000 n 0000073000 00000 n 0000073064 00000 n 0000073253 00000 n 0000073316 00000 n 0000073380 00000 n 0000073442 00000 n 0000073505 00000 n 0000073568 00000 n 0000073631 00000 n 0000078017 00000 n 0000076951 00000 n 0000073820 00000 n 0000077075 00000 n 0000077200 00000 n 0000077263 00000 n 0000077326 00000 n 0000077389 00000 n 0000077452 00000 n 0000077515 00000 n 0000077578 00000 n 0000077641 00000 n 0000077829 00000 n 0000077892 00000 n 0000077954 00000 n 0000082972 00000 n 0000080379 00000 n 0000078129 00000 n 0000080503 00000 n 0000080566 00000 n 0000080630 00000 n 0000080693 00000 n 0000080757 00000 n 0000080820 00000 n 0000080883 00000 n 0000080947 00000 n 0000081010 00000 n 0000081074 00000 n 0000081138 00000 n 0000081202 00000 n 0000081266 00000 n 0000081329 00000 n 0000081393 00000 n 0000081456 00000 n 0000081520 00000 n 0000081581 00000 n 0000081644 00000 n 0000081708 00000 n 0000081771 00000 n 0000081833 00000 n 0000081896 00000 n 0000081959 00000 n 0000082022 00000 n 0000082085 00000 n 0000082148 00000 n 0000082211 00000 n 0000082275 00000 n 0000082339 00000 n 0000082403 00000 n 0000082467 00000 n 0000082530 00000 n 0000082594 00000 n 0000082658 00000 n 0000082722 00000 n 0000082785 00000 n 0000082848 00000 n 0000344605 00000 n 0000090391 00000 n 0000086398 00000 n 0000083111 00000 n 0000086522 00000 n 0000086647 00000 n 0000086710 00000 n 0000086774 00000 n 0000086838 00000 n 0000086902 00000 n 0000086966 00000 n 0000087030 00000 n 0000087094 00000 n 0000087158 00000 n 0000087221 00000 n 0000087284 00000 n 0000087347 00000 n 0000087411 00000 n 0000087475 00000 n 0000087538 00000 n 0000087602 00000 n 0000087666 00000 n 0000087730 00000 n 0000087794 00000 n 0000087858 00000 n 0000087922 00000 n 0000087986 00000 n 0000088050 00000 n 0000088113 00000 n 0000088177 00000 n 0000088239 00000 n 0000088302 00000 n 0000088365 00000 n 0000088428 00000 n 0000088492 00000 n 0000088556 00000 n 0000088620 00000 n 0000088684 00000 n 0000088748 00000 n 0000088811 00000 n 0000088874 00000 n 0000088937 00000 n 0000089001 00000 n 0000089064 00000 n 0000089128 00000 n 0000089192 00000 n 0000089255 00000 n 0000089318 00000 n 0000089382 00000 n 0000089446 00000 n 0000089510 00000 n 0000089573 00000 n 0000089635 00000 n 0000089699 00000 n 0000089762 00000 n 0000089826 00000 n 0000089889 00000 n 0000089952 00000 n 0000090015 00000 n 0000090204 00000 n 0000090266 00000 n 0000090330 00000 n 0000094309 00000 n 0000093113 00000 n 0000090530 00000 n 0000093237 00000 n 0000093300 00000 n 0000093363 00000 n 0000093426 00000 n 0000093489 00000 n 0000093552 00000 n 0000093615 00000 n 0000093803 00000 n 0000093866 00000 n 0000093930 00000 n 0000093993 00000 n 0000094056 00000 n 0000094119 00000 n 0000094182 00000 n 0000094246 00000 n 0000098927 00000 n 0000097220 00000 n 0000094434 00000 n 0000097344 00000 n 0000097407 00000 n 0000097470 00000 n 0000097534 00000 n 0000097597 00000 n 0000097660 00000 n 0000097724 00000 n 0000097788 00000 n 0000097851 00000 n 0000097914 00000 n 0000097978 00000 n 0000098042 00000 n 0000098105 00000 n 0000098169 00000 n 0000098233 00000 n 0000098421 00000 n 0000098484 00000 n 0000098547 00000 n 0000098611 00000 n 0000098675 00000 n 0000098739 00000 n 0000098802 00000 n 0000098865 00000 n 0000103424 00000 n 0000101665 00000 n 0000099052 00000 n 0000101789 00000 n 0000101852 00000 n 0000101914 00000 n 0000101977 00000 n 0000102040 00000 n 0000102104 00000 n 0000102168 00000 n 0000102355 00000 n 0000102542 00000 n 0000102605 00000 n 0000102669 00000 n 0000102732 00000 n 0000102795 00000 n 0000102858 00000 n 0000102921 00000 n 0000102984 00000 n 0000103047 00000 n 0000103173 00000 n 0000103236 00000 n 0000103299 00000 n 0000103361 00000 n 0000108620 00000 n 0000105025 00000 n 0000103536 00000 n 0000105149 00000 n 0000105212 00000 n 0000105336 00000 n 0000105399 00000 n 0000105462 00000 n 0000105526 00000 n 0000105589 00000 n 0000105652 00000 n 0000105715 00000 n 0000105839 00000 n 0000105902 00000 n 0000105965 00000 n 0000106029 00000 n 0000106093 00000 n 0000106156 00000 n 0000106219 00000 n 0000106345 00000 n 0000106408 00000 n 0000106471 00000 n 0000106535 00000 n 0000106598 00000 n 0000106661 00000 n 0000106787 00000 n 0000106850 00000 n 0000106913 00000 n 0000106977 00000 n 0000107040 00000 n 0000107103 00000 n 0000107230 00000 n 0000107293 00000 n 0000107355 00000 n 0000107418 00000 n 0000107481 00000 n 0000107608 00000 n 0000107671 00000 n 0000107734 00000 n 0000107797 00000 n 0000107860 00000 n 0000107987 00000 n 0000108050 00000 n 0000108113 00000 n 0000108177 00000 n 0000108240 00000 n 0000108303 00000 n 0000108430 00000 n 0000108493 00000 n 0000108556 00000 n 0000114666 00000 n 0000110879 00000 n 0000108732 00000 n 0000111003 00000 n 0000111066 00000 n 0000111129 00000 n 0000111192 00000 n 0000111319 00000 n 0000111382 00000 n 0000111445 00000 n 0000111508 00000 n 0000111571 00000 n 0000111634 00000 n 0000111761 00000 n 0000111824 00000 n 0000111887 00000 n 0000111950 00000 n 0000112013 00000 n 0000112076 00000 n 0000112201 00000 n 0000112264 00000 n 0000112327 00000 n 0000112390 00000 n 0000112453 00000 n 0000112516 00000 n 0000112641 00000 n 0000112704 00000 n 0000112767 00000 n 0000112831 00000 n 0000112894 00000 n 0000112957 00000 n 0000113084 00000 n 0000113147 00000 n 0000113210 00000 n 0000113273 00000 n 0000113336 00000 n 0000113463 00000 n 0000113526 00000 n 0000113589 00000 n 0000113653 00000 n 0000113716 00000 n 0000113779 00000 n 0000113842 00000 n 0000113905 00000 n 0000114032 00000 n 0000114095 00000 n 0000114158 00000 n 0000114222 00000 n 0000114286 00000 n 0000114349 00000 n 0000114412 00000 n 0000114476 00000 n 0000114540 00000 n 0000114604 00000 n 0000344730 00000 n 0000119450 00000 n 0000116491 00000 n 0000114778 00000 n 0000116615 00000 n 0000116678 00000 n 0000116741 00000 n 0000116804 00000 n 0000116930 00000 n 0000116993 00000 n 0000117056 00000 n 0000117119 00000 n 0000117182 00000 n 0000117305 00000 n 0000117368 00000 n 0000117431 00000 n 0000117495 00000 n 0000117558 00000 n 0000117621 00000 n 0000117748 00000 n 0000117811 00000 n 0000117874 00000 n 0000117938 00000 n 0000118001 00000 n 0000118064 00000 n 0000118191 00000 n 0000118254 00000 n 0000118316 00000 n 0000118379 00000 n 0000118442 00000 n 0000118569 00000 n 0000118632 00000 n 0000118695 00000 n 0000118758 00000 n 0000118821 00000 n 0000118884 00000 n 0000119011 00000 n 0000119074 00000 n 0000119136 00000 n 0000119324 00000 n 0000119387 00000 n 0000124223 00000 n 0000121192 00000 n 0000119562 00000 n 0000121316 00000 n 0000121379 00000 n 0000121442 00000 n 0000121505 00000 n 0000121568 00000 n 0000121631 00000 n 0000121758 00000 n 0000121821 00000 n 0000121884 00000 n 0000121948 00000 n 0000122012 00000 n 0000122075 00000 n 0000122138 00000 n 0000122265 00000 n 0000122328 00000 n 0000122391 00000 n 0000122455 00000 n 0000122519 00000 n 0000122582 00000 n 0000122644 00000 n 0000122706 00000 n 0000122833 00000 n 0000122896 00000 n 0000122959 00000 n 0000123023 00000 n 0000123087 00000 n 0000123150 00000 n 0000123213 00000 n 0000123340 00000 n 0000123403 00000 n 0000123466 00000 n 0000123529 00000 n 0000123592 00000 n 0000123719 00000 n 0000123782 00000 n 0000123845 00000 n 0000123908 00000 n 0000123971 00000 n 0000124098 00000 n 0000124161 00000 n 0000128965 00000 n 0000126070 00000 n 0000124348 00000 n 0000126194 00000 n 0000126257 00000 n 0000126320 00000 n 0000126383 00000 n 0000126510 00000 n 0000126573 00000 n 0000126636 00000 n 0000126699 00000 n 0000126762 00000 n 0000126885 00000 n 0000126948 00000 n 0000127011 00000 n 0000127074 00000 n 0000127137 00000 n 0000127200 00000 n 0000127325 00000 n 0000127388 00000 n 0000127451 00000 n 0000127514 00000 n 0000127577 00000 n 0000127703 00000 n 0000127766 00000 n 0000127829 00000 n 0000127893 00000 n 0000127956 00000 n 0000128019 00000 n 0000128146 00000 n 0000128209 00000 n 0000128272 00000 n 0000128335 00000 n 0000128398 00000 n 0000128525 00000 n 0000128588 00000 n 0000128651 00000 n 0000128840 00000 n 0000128903 00000 n 0000134736 00000 n 0000131019 00000 n 0000129077 00000 n 0000131143 00000 n 0000131206 00000 n 0000131269 00000 n 0000131332 00000 n 0000131395 00000 n 0000131458 00000 n 0000131585 00000 n 0000131647 00000 n 0000131710 00000 n 0000131774 00000 n 0000131838 00000 n 0000131901 00000 n 0000131964 00000 n 0000132091 00000 n 0000132154 00000 n 0000132217 00000 n 0000132280 00000 n 0000132343 00000 n 0000132470 00000 n 0000132533 00000 n 0000132596 00000 n 0000132659 00000 n 0000132722 00000 n 0000132845 00000 n 0000132908 00000 n 0000132971 00000 n 0000133034 00000 n 0000133097 00000 n 0000133160 00000 n 0000133287 00000 n 0000133350 00000 n 0000133413 00000 n 0000133477 00000 n 0000133540 00000 n 0000133603 00000 n 0000133666 00000 n 0000133791 00000 n 0000133854 00000 n 0000133917 00000 n 0000133980 00000 n 0000134043 00000 n 0000134107 00000 n 0000134171 00000 n 0000134234 00000 n 0000134297 00000 n 0000134424 00000 n 0000134487 00000 n 0000134549 00000 n 0000134610 00000 n 0000134673 00000 n 0000139761 00000 n 0000136293 00000 n 0000134848 00000 n 0000136417 00000 n 0000136480 00000 n 0000136542 00000 n 0000136606 00000 n 0000136670 00000 n 0000136733 00000 n 0000136796 00000 n 0000136923 00000 n 0000136986 00000 n 0000137049 00000 n 0000137113 00000 n 0000137176 00000 n 0000137239 00000 n 0000137366 00000 n 0000137429 00000 n 0000137492 00000 n 0000137554 00000 n 0000137615 00000 n 0000137676 00000 n 0000137803 00000 n 0000137866 00000 n 0000137929 00000 n 0000137993 00000 n 0000138056 00000 n 0000138119 00000 n 0000138244 00000 n 0000138307 00000 n 0000138370 00000 n 0000138434 00000 n 0000138497 00000 n 0000138560 00000 n 0000138687 00000 n 0000138750 00000 n 0000138813 00000 n 0000138876 00000 n 0000138939 00000 n 0000139066 00000 n 0000139129 00000 n 0000139192 00000 n 0000139256 00000 n 0000139319 00000 n 0000139382 00000 n 0000139509 00000 n 0000139572 00000 n 0000139635 00000 n 0000144061 00000 n 0000141543 00000 n 0000139873 00000 n 0000141667 00000 n 0000141793 00000 n 0000141856 00000 n 0000141917 00000 n 0000141978 00000 n 0000142041 00000 n 0000142104 00000 n 0000142231 00000 n 0000142294 00000 n 0000142357 00000 n 0000142421 00000 n 0000142485 00000 n 0000142548 00000 n 0000142611 00000 n 0000142737 00000 n 0000142800 00000 n 0000142863 00000 n 0000142926 00000 n 0000142989 00000 n 0000143116 00000 n 0000143179 00000 n 0000143242 00000 n 0000143305 00000 n 0000143368 00000 n 0000143492 00000 n 0000143555 00000 n 0000143618 00000 n 0000143681 00000 n 0000143744 00000 n 0000143871 00000 n 0000143934 00000 n 0000143997 00000 n 0000344855 00000 n 0000149372 00000 n 0000145906 00000 n 0000144173 00000 n 0000146030 00000 n 0000146093 00000 n 0000146156 00000 n 0000146219 00000 n 0000146346 00000 n 0000146409 00000 n 0000146472 00000 n 0000146536 00000 n 0000146599 00000 n 0000146662 00000 n 0000146785 00000 n 0000146848 00000 n 0000146911 00000 n 0000146975 00000 n 0000147038 00000 n 0000147101 00000 n 0000147228 00000 n 0000147291 00000 n 0000147354 00000 n 0000147417 00000 n 0000147480 00000 n 0000147607 00000 n 0000147670 00000 n 0000147733 00000 n 0000147795 00000 n 0000147858 00000 n 0000147921 00000 n 0000148048 00000 n 0000148111 00000 n 0000148174 00000 n 0000148238 00000 n 0000148302 00000 n 0000148365 00000 n 0000148428 00000 n 0000148555 00000 n 0000148618 00000 n 0000148681 00000 n 0000148744 00000 n 0000148807 00000 n 0000148934 00000 n 0000148997 00000 n 0000149059 00000 n 0000149247 00000 n 0000149310 00000 n 0000154058 00000 n 0000150976 00000 n 0000149484 00000 n 0000151100 00000 n 0000151163 00000 n 0000151225 00000 n 0000151287 00000 n 0000151350 00000 n 0000151413 00000 n 0000151540 00000 n 0000151603 00000 n 0000151666 00000 n 0000151730 00000 n 0000151794 00000 n 0000151857 00000 n 0000151920 00000 n 0000152046 00000 n 0000152109 00000 n 0000152172 00000 n 0000152235 00000 n 0000152298 00000 n 0000152425 00000 n 0000152488 00000 n 0000152551 00000 n 0000152614 00000 n 0000152677 00000 n 0000152804 00000 n 0000152867 00000 n 0000152930 00000 n 0000152992 00000 n 0000153054 00000 n 0000153180 00000 n 0000153243 00000 n 0000153306 00000 n 0000153369 00000 n 0000153432 00000 n 0000153557 00000 n 0000153620 00000 n 0000153683 00000 n 0000153746 00000 n 0000153809 00000 n 0000153934 00000 n 0000153996 00000 n 0000158980 00000 n 0000155066 00000 n 0000154170 00000 n 0000155190 00000 n 0000155253 00000 n 0000155316 00000 n 0000155379 00000 n 0000155506 00000 n 0000155569 00000 n 0000155632 00000 n 0000155695 00000 n 0000155758 00000 n 0000155885 00000 n 0000155948 00000 n 0000156011 00000 n 0000156074 00000 n 0000156137 00000 n 0000156264 00000 n 0000156327 00000 n 0000156390 00000 n 0000156453 00000 n 0000156516 00000 n 0000156643 00000 n 0000156705 00000 n 0000156768 00000 n 0000156831 00000 n 0000156894 00000 n 0000157021 00000 n 0000157084 00000 n 0000157147 00000 n 0000157210 00000 n 0000157273 00000 n 0000157400 00000 n 0000157463 00000 n 0000157526 00000 n 0000157589 00000 n 0000157652 00000 n 0000157779 00000 n 0000157842 00000 n 0000157905 00000 n 0000157969 00000 n 0000158033 00000 n 0000158096 00000 n 0000158159 00000 n 0000158286 00000 n 0000158349 00000 n 0000158412 00000 n 0000158475 00000 n 0000158538 00000 n 0000158601 00000 n 0000158728 00000 n 0000158791 00000 n 0000158854 00000 n 0000163061 00000 n 0000160601 00000 n 0000159092 00000 n 0000160725 00000 n 0000160851 00000 n 0000160914 00000 n 0000160977 00000 n 0000161040 00000 n 0000161103 00000 n 0000161166 00000 n 0000161229 00000 n 0000161356 00000 n 0000161419 00000 n 0000161482 00000 n 0000161545 00000 n 0000161608 00000 n 0000161735 00000 n 0000161798 00000 n 0000161861 00000 n 0000161924 00000 n 0000161987 00000 n 0000162114 00000 n 0000162177 00000 n 0000162240 00000 n 0000162303 00000 n 0000162366 00000 n 0000162493 00000 n 0000162556 00000 n 0000162619 00000 n 0000162682 00000 n 0000162745 00000 n 0000162872 00000 n 0000162934 00000 n 0000162997 00000 n 0000167453 00000 n 0000165001 00000 n 0000163173 00000 n 0000165125 00000 n 0000165188 00000 n 0000165251 00000 n 0000165314 00000 n 0000165441 00000 n 0000165504 00000 n 0000165567 00000 n 0000165631 00000 n 0000165692 00000 n 0000165753 00000 n 0000165880 00000 n 0000165943 00000 n 0000166006 00000 n 0000166069 00000 n 0000166132 00000 n 0000166195 00000 n 0000166320 00000 n 0000166383 00000 n 0000166446 00000 n 0000166509 00000 n 0000166572 00000 n 0000166697 00000 n 0000166760 00000 n 0000166949 00000 n 0000167012 00000 n 0000167076 00000 n 0000167139 00000 n 0000167202 00000 n 0000167263 00000 n 0000167326 00000 n 0000167390 00000 n 0000170916 00000 n 0000169720 00000 n 0000167565 00000 n 0000169844 00000 n 0000169907 00000 n 0000169971 00000 n 0000170160 00000 n 0000170223 00000 n 0000170287 00000 n 0000170350 00000 n 0000170413 00000 n 0000170476 00000 n 0000170539 00000 n 0000170602 00000 n 0000170665 00000 n 0000170729 00000 n 0000170792 00000 n 0000170855 00000 n 0000344980 00000 n 0000174564 00000 n 0000172987 00000 n 0000171041 00000 n 0000173111 00000 n 0000173174 00000 n 0000173363 00000 n 0000173426 00000 n 0000173490 00000 n 0000173553 00000 n 0000173616 00000 n 0000173806 00000 n 0000173869 00000 n 0000173933 00000 n 0000173996 00000 n 0000174059 00000 n 0000174123 00000 n 0000174186 00000 n 0000174249 00000 n 0000174438 00000 n 0000174501 00000 n 0000178560 00000 n 0000176483 00000 n 0000174676 00000 n 0000176607 00000 n 0000176670 00000 n 0000176733 00000 n 0000176796 00000 n 0000176859 00000 n 0000176922 00000 n 0000176986 00000 n 0000177049 00000 n 0000177112 00000 n 0000177175 00000 n 0000177238 00000 n 0000177301 00000 n 0000177427 00000 n 0000177490 00000 n 0000177553 00000 n 0000177678 00000 n 0000177741 00000 n 0000177804 00000 n 0000177930 00000 n 0000177993 00000 n 0000178056 00000 n 0000178182 00000 n 0000178245 00000 n 0000178308 00000 n 0000178434 00000 n 0000178497 00000 n 0000183033 00000 n 0000180517 00000 n 0000178672 00000 n 0000180641 00000 n 0000180704 00000 n 0000180766 00000 n 0000180829 00000 n 0000180893 00000 n 0000180957 00000 n 0000181020 00000 n 0000181083 00000 n 0000181146 00000 n 0000181208 00000 n 0000181271 00000 n 0000181397 00000 n 0000181460 00000 n 0000181523 00000 n 0000181649 00000 n 0000181712 00000 n 0000181775 00000 n 0000181837 00000 n 0000181962 00000 n 0000182025 00000 n 0000182088 00000 n 0000182151 00000 n 0000182214 00000 n 0000182340 00000 n 0000182403 00000 n 0000182466 00000 n 0000182530 00000 n 0000182656 00000 n 0000182719 00000 n 0000182782 00000 n 0000182908 00000 n 0000182970 00000 n 0000187120 00000 n 0000184981 00000 n 0000183145 00000 n 0000185105 00000 n 0000185168 00000 n 0000185231 00000 n 0000185295 00000 n 0000185359 00000 n 0000185422 00000 n 0000185485 00000 n 0000185611 00000 n 0000185674 00000 n 0000185737 00000 n 0000185862 00000 n 0000185925 00000 n 0000185988 00000 n 0000186113 00000 n 0000186176 00000 n 0000186239 00000 n 0000186365 00000 n 0000186428 00000 n 0000186491 00000 n 0000186617 00000 n 0000186680 00000 n 0000186743 00000 n 0000186806 00000 n 0000186869 00000 n 0000186932 00000 n 0000186995 00000 n 0000187058 00000 n 0000192522 00000 n 0000189992 00000 n 0000187246 00000 n 0000190116 00000 n 0000190179 00000 n 0000190242 00000 n 0000190431 00000 n 0000190494 00000 n 0000190558 00000 n 0000190621 00000 n 0000190685 00000 n 0000190748 00000 n 0000190811 00000 n 0000190938 00000 n 0000191000 00000 n 0000191063 00000 n 0000191126 00000 n 0000191190 00000 n 0000191254 00000 n 0000191318 00000 n 0000191382 00000 n 0000191445 00000 n 0000191508 00000 n 0000191635 00000 n 0000191698 00000 n 0000191761 00000 n 0000191825 00000 n 0000191889 00000 n 0000191953 00000 n 0000192017 00000 n 0000192080 00000 n 0000192144 00000 n 0000192208 00000 n 0000192272 00000 n 0000192334 00000 n 0000192397 00000 n 0000192460 00000 n 0000197707 00000 n 0000194303 00000 n 0000192634 00000 n 0000194427 00000 n 0000194490 00000 n 0000194553 00000 n 0000194617 00000 n 0000194681 00000 n 0000194744 00000 n 0000194807 00000 n 0000194934 00000 n 0000194997 00000 n 0000195060 00000 n 0000195123 00000 n 0000195186 00000 n 0000195310 00000 n 0000195373 00000 n 0000195436 00000 n 0000195499 00000 n 0000195562 00000 n 0000195689 00000 n 0000195752 00000 n 0000195814 00000 n 0000195877 00000 n 0000195940 00000 n 0000196067 00000 n 0000196130 00000 n 0000196193 00000 n 0000196256 00000 n 0000196319 00000 n 0000196446 00000 n 0000196509 00000 n 0000196572 00000 n 0000196636 00000 n 0000196699 00000 n 0000196762 00000 n 0000196826 00000 n 0000196890 00000 n 0000196953 00000 n 0000197016 00000 n 0000197080 00000 n 0000197143 00000 n 0000197206 00000 n 0000197269 00000 n 0000197394 00000 n 0000197457 00000 n 0000197520 00000 n 0000197582 00000 n 0000197644 00000 n 0000345105 00000 n 0000200911 00000 n 0000199527 00000 n 0000197846 00000 n 0000199651 00000 n 0000199714 00000 n 0000199777 00000 n 0000199840 00000 n 0000199903 00000 n 0000199966 00000 n 0000200028 00000 n 0000200091 00000 n 0000200155 00000 n 0000200218 00000 n 0000200282 00000 n 0000200345 00000 n 0000200408 00000 n 0000200535 00000 n 0000200597 00000 n 0000200786 00000 n 0000200849 00000 n 0000205030 00000 n 0000202766 00000 n 0000201036 00000 n 0000202890 00000 n 0000202953 00000 n 0000203016 00000 n 0000203079 00000 n 0000203142 00000 n 0000203206 00000 n 0000203270 00000 n 0000203334 00000 n 0000203398 00000 n 0000203461 00000 n 0000203587 00000 n 0000203649 00000 n 0000203712 00000 n 0000203775 00000 n 0000203838 00000 n 0000203963 00000 n 0000204026 00000 n 0000204089 00000 n 0000204215 00000 n 0000204278 00000 n 0000204340 00000 n 0000204403 00000 n 0000204465 00000 n 0000204591 00000 n 0000204653 00000 n 0000204716 00000 n 0000204842 00000 n 0000204905 00000 n 0000204967 00000 n 0000208236 00000 n 0000206286 00000 n 0000205155 00000 n 0000206410 00000 n 0000206473 00000 n 0000206536 00000 n 0000206662 00000 n 0000206725 00000 n 0000206788 00000 n 0000206851 00000 n 0000206914 00000 n 0000207039 00000 n 0000207102 00000 n 0000207165 00000 n 0000207291 00000 n 0000207354 00000 n 0000207417 00000 n 0000207480 00000 n 0000207543 00000 n 0000207669 00000 n 0000207732 00000 n 0000207795 00000 n 0000207858 00000 n 0000207921 00000 n 0000208047 00000 n 0000208110 00000 n 0000208173 00000 n 0000211727 00000 n 0000210341 00000 n 0000208361 00000 n 0000210465 00000 n 0000210528 00000 n 0000210717 00000 n 0000210780 00000 n 0000210843 00000 n 0000210906 00000 n 0000210970 00000 n 0000211033 00000 n 0000211096 00000 n 0000211159 00000 n 0000211221 00000 n 0000211285 00000 n 0000211348 00000 n 0000211411 00000 n 0000211474 00000 n 0000211601 00000 n 0000211664 00000 n 0000216925 00000 n 0000214206 00000 n 0000211852 00000 n 0000214330 00000 n 0000214393 00000 n 0000214456 00000 n 0000214519 00000 n 0000214646 00000 n 0000214709 00000 n 0000214772 00000 n 0000214833 00000 n 0000214894 00000 n 0000215021 00000 n 0000215084 00000 n 0000215147 00000 n 0000215210 00000 n 0000215273 00000 n 0000215400 00000 n 0000215463 00000 n 0000215526 00000 n 0000215590 00000 n 0000215654 00000 n 0000215717 00000 n 0000215781 00000 n 0000215845 00000 n 0000215907 00000 n 0000215970 00000 n 0000216034 00000 n 0000216098 00000 n 0000216162 00000 n 0000216225 00000 n 0000216289 00000 n 0000216353 00000 n 0000216417 00000 n 0000216481 00000 n 0000216545 00000 n 0000216608 00000 n 0000216672 00000 n 0000216736 00000 n 0000216799 00000 n 0000216862 00000 n 0000221641 00000 n 0000219430 00000 n 0000217077 00000 n 0000219554 00000 n 0000219617 00000 n 0000219680 00000 n 0000219743 00000 n 0000219806 00000 n 0000219869 00000 n 0000219932 00000 n 0000219995 00000 n 0000220058 00000 n 0000220185 00000 n 0000220248 00000 n 0000220311 00000 n 0000220375 00000 n 0000220438 00000 n 0000220501 00000 n 0000220565 00000 n 0000220629 00000 n 0000220692 00000 n 0000220755 00000 n 0000220882 00000 n 0000220945 00000 n 0000221008 00000 n 0000221072 00000 n 0000221136 00000 n 0000221199 00000 n 0000221262 00000 n 0000221325 00000 n 0000221389 00000 n 0000221453 00000 n 0000221516 00000 n 0000221578 00000 n 0000345230 00000 n 0000226572 00000 n 0000224244 00000 n 0000221780 00000 n 0000224368 00000 n 0000224431 00000 n 0000224494 00000 n 0000224558 00000 n 0000224621 00000 n 0000224684 00000 n 0000224745 00000 n 0000224808 00000 n 0000224871 00000 n 0000224934 00000 n 0000224997 00000 n 0000225060 00000 n 0000225187 00000 n 0000225250 00000 n 0000225312 00000 n 0000225376 00000 n 0000225439 00000 n 0000225502 00000 n 0000225565 00000 n 0000225628 00000 n 0000225691 00000 n 0000225754 00000 n 0000225881 00000 n 0000225944 00000 n 0000226006 00000 n 0000226069 00000 n 0000226133 00000 n 0000226196 00000 n 0000226258 00000 n 0000226321 00000 n 0000226383 00000 n 0000226446 00000 n 0000226509 00000 n 0000231283 00000 n 0000229332 00000 n 0000226711 00000 n 0000229456 00000 n 0000229519 00000 n 0000229583 00000 n 0000229647 00000 n 0000229711 00000 n 0000229774 00000 n 0000229838 00000 n 0000229901 00000 n 0000229964 00000 n 0000230027 00000 n 0000230090 00000 n 0000230152 00000 n 0000230215 00000 n 0000230278 00000 n 0000230341 00000 n 0000230468 00000 n 0000230531 00000 n 0000230594 00000 n 0000230658 00000 n 0000230719 00000 n 0000230781 00000 n 0000230843 00000 n 0000230907 00000 n 0000230970 00000 n 0000231033 00000 n 0000231157 00000 n 0000231220 00000 n 0000236442 00000 n 0000234425 00000 n 0000231422 00000 n 0000234549 00000 n 0000234612 00000 n 0000234675 00000 n 0000234738 00000 n 0000234865 00000 n 0000234928 00000 n 0000234991 00000 n 0000235054 00000 n 0000235117 00000 n 0000235243 00000 n 0000235306 00000 n 0000235495 00000 n 0000235558 00000 n 0000235621 00000 n 0000235685 00000 n 0000235748 00000 n 0000235811 00000 n 0000235874 00000 n 0000236063 00000 n 0000236126 00000 n 0000236190 00000 n 0000236253 00000 n 0000236316 00000 n 0000236379 00000 n 0000241527 00000 n 0000239059 00000 n 0000236568 00000 n 0000239183 00000 n 0000239308 00000 n 0000239372 00000 n 0000239436 00000 n 0000239499 00000 n 0000239563 00000 n 0000239627 00000 n 0000239690 00000 n 0000239754 00000 n 0000239817 00000 n 0000239880 00000 n 0000239943 00000 n 0000240006 00000 n 0000240069 00000 n 0000240132 00000 n 0000240195 00000 n 0000240258 00000 n 0000240321 00000 n 0000240385 00000 n 0000240448 00000 n 0000240512 00000 n 0000240575 00000 n 0000240638 00000 n 0000240702 00000 n 0000240766 00000 n 0000240830 00000 n 0000240894 00000 n 0000240957 00000 n 0000241020 00000 n 0000241082 00000 n 0000241145 00000 n 0000241208 00000 n 0000241271 00000 n 0000241335 00000 n 0000241399 00000 n 0000241463 00000 n 0000246328 00000 n 0000244246 00000 n 0000241666 00000 n 0000244370 00000 n 0000244433 00000 n 0000244495 00000 n 0000244558 00000 n 0000244622 00000 n 0000244686 00000 n 0000244813 00000 n 0000244876 00000 n 0000244940 00000 n 0000245004 00000 n 0000245068 00000 n 0000245131 00000 n 0000245193 00000 n 0000245257 00000 n 0000245320 00000 n 0000245383 00000 n 0000245446 00000 n 0000245509 00000 n 0000245573 00000 n 0000245636 00000 n 0000245761 00000 n 0000245824 00000 n 0000245887 00000 n 0000245951 00000 n 0000246015 00000 n 0000246141 00000 n 0000246203 00000 n 0000246265 00000 n 0000250629 00000 n 0000247796 00000 n 0000246454 00000 n 0000247920 00000 n 0000248045 00000 n 0000248108 00000 n 0000248171 00000 n 0000248235 00000 n 0000248361 00000 n 0000248424 00000 n 0000248487 00000 n 0000248551 00000 n 0000248614 00000 n 0000248677 00000 n 0000248803 00000 n 0000248866 00000 n 0000248929 00000 n 0000248992 00000 n 0000249056 00000 n 0000249182 00000 n 0000249245 00000 n 0000249308 00000 n 0000249371 00000 n 0000249497 00000 n 0000249560 00000 n 0000249623 00000 n 0000249686 00000 n 0000249811 00000 n 0000249874 00000 n 0000249937 00000 n 0000250000 00000 n 0000250126 00000 n 0000250189 00000 n 0000250252 00000 n 0000250315 00000 n 0000250441 00000 n 0000250504 00000 n 0000250567 00000 n 0000345355 00000 n 0000256159 00000 n 0000253189 00000 n 0000250741 00000 n 0000253313 00000 n 0000253376 00000 n 0000253438 00000 n 0000253501 00000 n 0000253564 00000 n 0000253689 00000 n 0000253752 00000 n 0000253815 00000 n 0000253941 00000 n 0000254004 00000 n 0000254067 00000 n 0000254131 00000 n 0000254195 00000 n 0000254259 00000 n 0000254385 00000 n 0000254448 00000 n 0000254511 00000 n 0000254575 00000 n 0000254639 00000 n 0000254703 00000 n 0000254829 00000 n 0000254892 00000 n 0000254954 00000 n 0000255018 00000 n 0000255082 00000 n 0000255146 00000 n 0000255210 00000 n 0000255274 00000 n 0000255337 00000 n 0000255401 00000 n 0000255526 00000 n 0000255589 00000 n 0000255652 00000 n 0000255716 00000 n 0000255780 00000 n 0000255844 00000 n 0000255970 00000 n 0000256033 00000 n 0000256096 00000 n 0000260326 00000 n 0000257444 00000 n 0000256271 00000 n 0000257568 00000 n 0000257693 00000 n 0000257756 00000 n 0000257819 00000 n 0000257882 00000 n 0000258005 00000 n 0000258068 00000 n 0000258131 00000 n 0000258195 00000 n 0000258320 00000 n 0000258383 00000 n 0000258446 00000 n 0000258509 00000 n 0000258634 00000 n 0000258697 00000 n 0000258760 00000 n 0000258885 00000 n 0000258948 00000 n 0000259011 00000 n 0000259135 00000 n 0000259198 00000 n 0000259261 00000 n 0000259387 00000 n 0000259449 00000 n 0000259512 00000 n 0000259576 00000 n 0000259700 00000 n 0000259763 00000 n 0000259826 00000 n 0000259952 00000 n 0000260014 00000 n 0000260077 00000 n 0000260203 00000 n 0000260265 00000 n 0000264460 00000 n 0000261761 00000 n 0000260438 00000 n 0000261885 00000 n 0000261948 00000 n 0000262010 00000 n 0000262136 00000 n 0000262199 00000 n 0000262262 00000 n 0000262387 00000 n 0000262450 00000 n 0000262513 00000 n 0000262639 00000 n 0000262702 00000 n 0000262765 00000 n 0000262891 00000 n 0000262954 00000 n 0000263017 00000 n 0000263143 00000 n 0000263206 00000 n 0000263269 00000 n 0000263393 00000 n 0000263456 00000 n 0000263519 00000 n 0000263582 00000 n 0000263707 00000 n 0000263770 00000 n 0000263833 00000 n 0000263959 00000 n 0000264022 00000 n 0000264084 00000 n 0000264147 00000 n 0000264272 00000 n 0000264335 00000 n 0000264398 00000 n 0000267745 00000 n 0000265798 00000 n 0000264572 00000 n 0000265922 00000 n 0000265985 00000 n 0000266111 00000 n 0000266174 00000 n 0000266237 00000 n 0000266363 00000 n 0000266426 00000 n 0000266489 00000 n 0000266550 00000 n 0000266676 00000 n 0000266739 00000 n 0000266802 00000 n 0000266865 00000 n 0000266990 00000 n 0000267053 00000 n 0000267116 00000 n 0000267179 00000 n 0000267305 00000 n 0000267368 00000 n 0000267431 00000 n 0000267494 00000 n 0000267620 00000 n 0000267682 00000 n 0000272014 00000 n 0000268939 00000 n 0000267857 00000 n 0000269063 00000 n 0000269126 00000 n 0000269252 00000 n 0000269315 00000 n 0000269378 00000 n 0000269502 00000 n 0000269565 00000 n 0000269627 00000 n 0000269691 00000 n 0000269817 00000 n 0000269879 00000 n 0000269942 00000 n 0000270006 00000 n 0000270132 00000 n 0000270195 00000 n 0000270258 00000 n 0000270384 00000 n 0000270447 00000 n 0000270510 00000 n 0000270634 00000 n 0000270697 00000 n 0000270760 00000 n 0000270886 00000 n 0000270949 00000 n 0000271012 00000 n 0000271137 00000 n 0000271199 00000 n 0000271262 00000 n 0000271388 00000 n 0000271451 00000 n 0000271514 00000 n 0000271640 00000 n 0000271703 00000 n 0000271766 00000 n 0000271890 00000 n 0000271952 00000 n 0000275402 00000 n 0000273765 00000 n 0000272126 00000 n 0000273889 00000 n 0000273952 00000 n 0000274078 00000 n 0000274141 00000 n 0000274455 00000 n 0000274518 00000 n 0000274581 00000 n 0000274644 00000 n 0000274707 00000 n 0000274896 00000 n 0000274959 00000 n 0000275023 00000 n 0000275086 00000 n 0000275149 00000 n 0000275213 00000 n 0000275276 00000 n 0000345480 00000 n 0000277015 00000 n 0000276451 00000 n 0000275527 00000 n 0000276575 00000 n 0000276701 00000 n 0000276764 00000 n 0000276828 00000 n 0000276889 00000 n 0000276952 00000 n 0000277140 00000 n 0000293899 00000 n 0000315751 00000 n 0000343667 00000 n 0000345569 00000 n 0000345694 00000 n 0000345802 00000 n 0000345875 00000 n 0000366535 00000 n 0000397522 00000 n 0000397563 00000 n 0000397603 00000 n 0000397777 00000 n trailer << /Size 2916 /Root 2914 0 R /Info 2915 0 R >> startxref 397971 %%EOF lifelines-3.0.61/docs/ll-userguide.sv.html0000700002540200244210000044656510445102251020625 0ustar prappDomain Users Dokumentation för LifeLines

Dokumentation för LifeLines

LifeLines Version 3.0.36

Thomas T. Wetmore , IV



Användarmanual

INTRODUKTION

LifeLines är ett släktforskningsprogram som är utvecklat för UNIX-system. Det ordnar genealogiska poster (personer, familjer, källor, händelser och andra) i en databas, och genererar rapporter från dessa poster. Det finns inga praktiska begränsningar för det antal poster som kan lagras i en LifeLinesdatabas, inte heller för storleken på eller vilken typ av data som posterna kan innehålla. LifeLines innehåller inte inbyggda rapporter. Istället tillhandahåller det ett programmeringssystem som du använder för att programmera dina egna rapporter och tavlor. Med programmeringssystemet kan du också skicka förfrågningar till dina databaser och behandla dina data på valfritt sätt. LifeLines använder de terminaloberoende egenskaperna hos UNIX för att tillhandahålla en skärmbild och ett menybaserat användargränssnitt.

LifeLines är ett icke-kommersiellt, experimentellt system, som du använder helt på egen risk. Jag utvecklade LifeLines för personligt bruk, och delade med mig till vänner. Muntligen och via Internet uppkom en såpass stor efterfrågan, att jag gjort källkoden och övrig information till LifeLines fritt tillgänglig, under en en licens av MIT-typ som återges nedan:

" Copyright (c) 1991-1999 Thomas T. Wetmore IV Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. "

Källkoden, dokumentationen och en samling rapportskript finns tillgängliga vid http://lifelines.sourceforge.net/. Där finns också förkompilerade programpaket för några plattformar. Om du är en utvecklare och vill bidra med förbättringar, så anmäl dig på Sourceforge och kontakta Marc Nozell som är den som för närvarande är ansvarig för projektet.

Notera

Före 1999 fanns LifeLines tillgängligt på ftp-platserna ftp.cac.psu.edu och hoth.stsci.edu. Använd Sourceforge istället.


INSTALLATION

Du kan installera LifeLines från en källkodsdistributionspaket med, eller som ett exekverbart program för ditt UNIX- eller MS-Windowssystem. Källkodsdistributionen kommer med de läs-mig- (readme), byggskripts- och "make"-filer som är nödvändiga för att bygga LifeLines. Följ instruktionerna i läs-mig-filen. Ett antal program byggs vilka kan placeras i en katalog i din sökväg för program. Om du får programmet i exekverbar form, så följ de instruktioner som följde med det.

llines

LifeLinesprogrammet med fullständigt användargränssnitt

llexec

En avskalad version av LifeLinesprogrammet, utan användargränssnittet för icke-interaktiv behandling av rapportprogram

dbverify

Ett programverktyg för att kontrollera LifeLinesdatabaser.

Källdistributionspaketet innehåller också dokumentationen samt några LifeLinesprogram. I katalogen reports medföljer en kortfattad översikt över rapporterna i filen index.html.


STARTA LIFELINES OCH SKAPA DATABASER

Du startar normalt LifeLines med kommandot: lines databas, där databas är namnet på en LifeLinesdatabas. Om LifeLines hittar databasen, öppnar LifeLines databasen och tar dig till programmets huvudmeny. Om databasen inte finns, så frågar LifeLines om den ska skapa den, och om du då svarar ja, så gör den så. Du får skapa valfritt antal databaser, men LifeLines kan bara öppna en i taget. Om du byggde LifeLines från källkodspaketet, så kan programfilen heta llines istället för lines. Du kan då antingen byta namn på programfilen, eller starta LifeLines genom att använda kommandot llines istället.

Det fullständiga kommandoradsgränssnittet för LifeLines är:

        lines [-acdfiklnortuwxzCFI] [databas]
     

Följande flaggor stöds:

-CAnge plats för konfigurationsfil (t. ex. -C/home/bill/lifelines/.linesrc2)
-FFinsk flagga (endast tillgänglig om kompilerad så)
-I Ange en användaregenskap (t. ex. -ILLEDITOR=gvim )
-alogga dynamiska minnesoperationer (för felsökning)
-ctillhandahåll cachevärden (t. ex., -ci400,4000f400,4000 sätter direkta indi- & famcachevärden till 400, och indirekta indi- & famcachevärden till 4000)
-d felsökningsläge (signalskydd avstängt för att passa bättre med avbrottspunkter)
-f tvinga upp databasen - använd endast i nödfall
-i öppna en oföränderlig databas (inget skydd från andras åtkomst -- för användning på media utan skrivåtkomst)
-k nyckelvärde visas alltid (normalt är nyckelvärdet undertryckt om REFN-värde finns)
-l lås (-ly) eller lås upp (-ln) en databas för användning med media utan skrivåtkomst (åtkomst till en låst databas behandlas som en oföränderlig)
-n använd ej traditionella familjeregler
-o Ange programutmatningskatalog (t. ex., -o/tmp/minatest)
-r öppna databasen med skrivskydd (skydda andra som skriver till databasen)
-t spåra funktionsanrop i rapportprogram (för felsökning)
-u ange fönsterstorlek (t. ex., -u120,34 anger 120 kolumner till 34 rader)
-w öppna databasen med skrivåtkomst (skydda från att andra skriver till eller läser databasen)
-x exekvera ett enskilt LifeLinesrapportprogram direkt
-z Använd vanliga ASCII-tecken för att rita linjer i användargränsnittet i stället för specialtecknen för vt100.

Flaggan -r öppnar databasen med skrivskydd. I detta läge tillåter LifeLines inte att du gör några ändringar i databasen; inga andra operationer påverkas. Flaggan -w öppnar databasen med skrivåtkomst. Om databasen inte kan öppnas med begärd flagga, så avslutas LifeLines omedelbart. Om du öppnar databasen utan vare sig flaggan -r eller -w, försöker LifeLines först att öppna databasen med skrivåtkomst; om det inte är möjligt försöker LifeLines att öppna databasen med skrivskydd; och om inte det är möjligt, så avslutas LifeLines. En LifeLinesdatabas får öppnas samtidigt av ett obegränsat antal program i skrivskyddat läge; men, om databasen öppnas av ett program med skrivåtkomst, så kan det inte öppnas av något annat program.

I sällsynta fall kan mekanismen för skriv/läsläge misslyckas. När detta händer kan databasen förefalla omöjlig att öppna. Om det skulle hända, så använd flaggan -f för att tvinga upp databasen; detta kommer att öppna databasen och återställa lägesmekanismen. Det här är en farlig funktion; du kan använda den för att öppna samma databas med skrivåtkomst fler än en gång; följderna är oförutsägbara och i allmänhet katastrofala.

Fleranvändarskyddet som fås genom denna mekanism för skriv/läsåtkomst tillhandahålls via en flagginställning i databasen, så att faktiskt både skrivskyddad åtkomst och skrivåtkomst förändrar databasen (åtkomst med skrivskydd ändrar bara värdet på denna flagga). För att åstadkomma verkligt skrivskydd, t. ex. för användning på media utan skrivåtkomst, är den bästa lösningen att låsa (-ly) databasen innan kopiering sker till mediet. Detta anger att databasen är avsedd att vara oföränderlig. Alternativt, för att använda en databas som redan ligger på media utan skrivåtkomst och inte angiven som en sådan, så använd flaggan för oföränderlighet (-i).

Om du inte anger namnet på en databas på kommandoraden, så kommer LifeLines att be dig skriva in det. Om du inte använder skalvariabeln eller användarvärdet LLDATABASES (beskrivs senare), så måste namnet du skriver in vara namnet på en katalog innehållande en LifeLinesdatabas, uttryckt som en vanlig, absolut eller relativ, sökväg i UNIX. Om du använder variabeln LLDATABASES, så kommer LifeLines att söka efter databasen i de kataloger som finns angivna där; detta kan vara mycket praktiskt.

Om du skulle vilja välja en databas från en lista av redan befintliga, så skriv in ett ensamt frågetecken och tryck enter när LifeLines frågar dig efter namnet på databasen. LifeLines kommer då att visa en lista över alla databaser som det kan finna, och du får välja en från listan.


INTRODUKTION TILL GEDCOM

LifeLinesposter lagras i GEDCOM-formatet; du organiserar, redigerar, och sparar dina data i detta format. GEDCOM är en standard som definierar ett filformat för att flytta data mellan datorsystem. LifeLines har antagit detta format för att strukturera posterna i sina databaser. Detta tillhandahåller en strukturerad, men ändå flexibel metod för att lagra alla typer av uppgifter som du kan tänkas vilja uppteckna. Det finns få begränsningar gällande format på, mängd, eller typ av data som du får lagra i en LifeLinesdatabas.

GEDCOM är definierad på två nivåer. På den syntaktiska nivån är GEDCOM en enkel uppsättning regler för att organisera och strukturera data i poster, utan hänsyn till vilka typer av poster, typer av eller format på information i posterna, eller relationer mellan posterna det rör sig om. På den semantiska nivån lägger GEDCOM till ytterligare en uppsättning regler, som anger vilka typer av poster som är tillåtna, hur poster ska struktureras, hur data inom posterna ska identifieras och formateras, och vilka specifika relationer mellan olika typer av poster som är tillåtna. I princip kan det existera multipla semantiska versioner av GEDCOM, men i praktiken finns det bara en, "anlänkad" GEDCOM. Olyckligtvis är denna semantiska version av GEDCOM dåligt definierad, och alla system för genealogiska data har tolkat den på olika sätt.

LifeLines använder GEDCOM primärt på den syntaktiska nivån, även om några av de allmänt accepterade semantiska reglerna för anlänkad GEDCOM är obligatoriska. Detta har några viktiga följder. Det innebär att du kan lagra alla dina genealogiska data i din LifeLinesdatabas, och att du har stor frihet när du väljer dina regler för att strukturera och formatera dina data. Men det innebär också att det sätt på vilket du lagrar data i dina databaser kan vara olikt det som någon annan lagrar sina på. Detta kan vara ett problem om du delar med dig av dina data till andra, eller delar med dig av dina rapportprogram till andra användare av LifeLines. Min rekommendation är att du följer vedertaget bruk för anlänkad GEDCOM närhelst det är möjligt.

LifeLines använder sig inte av formulär eller fönster för att vägleda dig när du för in eller ändrar poster. Istället använder du en textredigerare och redigerar dataposterna direkt. För detta krävs att du förstår GEDCOM-formatet, och klarar av att redigera data i GEDCOM-format, innan du kan använda LifeLines. GEDCOM-formatet är ganska enkelt; den här introduktionen ger all information du behöver för att kunna använda GEDCOM.

Här är ett exempel på en post om en person skriven i GEDCOM:

Exempel 1. Personpost i GEDCOM


  0 @I25@ INDI
  1 NAME Thomas Trask /Wetmore/ Sr
  1 SEX M
  1 BIRT
    2 DATE 13 March 1866
    2 PLAC St. Mary's Bay, Digby, Nova Scotia
    2 SOUR Social Security application
  1 NATU
    2 NAME Thomas T. Wetmore
    2 DATE 26 October 1888
    2 PLAC Norwich, New London, Connecticut
    2 AGE 22 years
    2 COUR New London County Court of Common Pleas
    2 SOUR court record from National Archives
  1 OCCU Antiques Dealer
  1 DEAT
    2 NAME Thomas Trask Wetmore
    2 DATE 17 February 1947
    2 PLAC New London, New London, Connecticut
    2 AGE 80 years, 11 months, 4 days
    2 CAUS Heart Attack
    2 SOUR New London Death Records
  1 FAMC @F11@
  1 FAMS @F6@
  1 FAMS @F12@

En GEDCOM-post består av rader. Varje rad har ett nivånummer och en etikett, och på de flesta rader följer ett värde efter etiketten. På första raden i varje post finns alltid ett korsreferensvärde angivet mellan nivånumret och etiketten.

Nivånummer gör det möjligt att strukturera data så detaljerat som man vill; rader med högre nivånummer läggs till rader med lägre nummer. Varje post börjar på nivå 0, och för varje nivå djupare ned höjs nivånumret ett steg. LifeLines har inga begränsningar för strukturdjupet. Etiketterna är kodord, som det är vedertaget bruk att skriva med versaler. De specificerar typen av information på raden eller på efterföljande, högre numrerade, rader. Informationen efter etiketten, om någon, är radens värde.

Den första raden i en post anger vilken typ av post är. Det finns fyra fasta typer av poster i LifeLinesdatabaser: person-, familje-, käll- och händelseposter. Den första raden, på nivå 0, i dessa poster har etiketterna INDI respektive FAM, SOUR och EVEN. Förutom dessa typer av poster, kan du skapa egna typer av poster genom att använda vilken annan etikett som helst på raden för nivå 0 i en post. Raderna som inleder poster är de enda raderna på nivå 0 som används i LifeLines. Varje rad på nivå 0 har ett korsreferensvärde mellan nivånumret och etiketten. Detta värde är postens interna referensnyckel; andra poster kan hänvisa till denna post genom att använda detta värde. Korsreferensvärden innesluts alltid av två "@".

Den första raden i exempelposten har etiketten INDI, som visar att det är en person. Korsreferensvärdet, I25, kan användas av andra poster för att hänvisa till denna post.

Den andra raden i exemplet anger personens namn. Varje personpost i en LifeLinesdatabas måste ha minst en rad av typen 1 NAME, och dess värde måste vara i GEDCOMs namnformat. Formatet tillåter namn att vara hur långa som helst, men efternamnet, som kan placeras var som helst i namnet, måste avskiljas från övriga delar av namnet med ett eller två snedstreck. Till exempel:

Exempel 2. Exempel på NAME-format


1 NAME John/Smith
1 NAME John /Smith/
1 NAME John/Smith/Jr.

Det andra snedstrecket krävs enbart om delar av namnet följer efter efternamnet. Blanksteg är tillåtna före det första snedstrecket och efter det andra. Om du inte känner till en persons efternamn, eller om personen inte har ett efternamn, får du använda / eller // eller inga snedstreck alls. Till exempel:

Exempel 3. Exempel på sökning på NAME


1 NAME Mary//
1 NAME Mary/
1 NAME Mary
är alla sätt att skriva in en person benämnd Mary, utan känt efternamn. En person kan ha valfritt antal, inklusive noll, förnamn, och/eller initialer. En personpost i LifeLines kan ha ett obegränsat antal rader med 1 NAME, men personen kommer bara att synas med värdet i den första av dessa rader. Personer indexeras med alla sina namn, så du kan söka efter en person under vilket som helst av deras namn.

Nästa rad i exemplet anger personens kön. LifeLines tvingar dig inte att inkludera en rad av typen 1 SEX, men den är ändå lämplig att ha med. Radens värde ska vara M eller F om personens kön är bekant; du kan låta bli att ge den ett värde, eller sätta det till, exempelvis, U eller ? om det är obekant. En person måste ha en rad av typen 1 SEX, med endera av M eller F som värde, innan du kan göra honom/henne till make/maka eller förälder i en familj.

Exempelposten innehåller också tre händelser: födelse, naturalisering, och död. En händelse inleds med en rad på nivå 1, där etiketten indikerar vilken typ av händelse det rör sig om. BIRT är exempelvis den etikett som används för en födelse.

Händelser har vanligen åtminstone en 2 DATE-rad och en 2 PLAC-rad, och ofta en 2 SOUR-rad. DATE- och PLAC-rader anger datum och ort för händelsen. Värdet för en DATE-rad i LifeLines får se ut hur som helst, men LifeLines försöker alltid att tolka det och finna information om år, månad och dag i det. Värdet för en rad med etiketten PLAC är vanligen en uppräkning av geografiska angivelser, separerade av kommatecken, som börjar med den mest specifika informationen, och avslutas med den mest allmänna. Raden SOUR kan antingen vara roten för en fullständig beskrivning av källan, men dess värde kan också vara en korsreferensnyckel som pekar på en källpost som beskriver källan.

Händelsen naturalisering (med etiketten NATU) visar några andra rader. Raden 2 NAME anger personens namn, så som det är noterat i källan (det är bara i raden 1 NAME som man måste följa formateringsreglerna för GEDCOM). Raden 2 AGE anger personens ålder vid tiden för händelsen. Raden 2 COUR anger vid vilken domstol naturaliseringen skedde.

Den avslutande händelsen är en dödshändelse (med etiketten DEAT). Raden av typen 2 CAUS anger dödsorsak.

Vid slutet av posten återfinns tre rader som hänvisar till familjeposter. En rad av typen 1 FAMC hänvisar till en familjepost som personen tillhör som barn där; dess värde anger korsreferensvärdet för den familjen. En 1 FAMS-rad hänvisar till en familjepost som personen tillhör i egenskap av maka/make eller förälder.

När du använder LifeLines för att redigera en person, så kommer du inte att kunna redigera korsreferensvärdena på raderna 0 INDI, 1 FAMC eller 1 FAMS; dessa sköts av LifeLines.

Här är ett exempel på en familjepost:

Exempel 4. Exempel på familjepost


  0 @F6@ FAM
  1 HUSB @I25@
  1 WIFE @I26@
  1 MARR
    2 DATE 31 MAR 1891
    2 PLAC New London, New London, Connecticut
    2 SOUR New London Vital Records
  1 CHIL @I27@
  1 CHIL @I17@

Raden 0 FAM tilldelar familjen korsreferensvärdet F6. Posten innehåller 1 HUSB- och 1 WIFE-rader som ger hänvisningar till de två makarna/föräldrarna. Posten innehåller också en giftermålshändelse (etiketten MARR) och två 1 CHIL-rader, som hänvisar till två barn i familjen. När du redigerar familjeposter, kan du inte redigera 0 FAM-, 1 HUSB-, 1 WIFE- eller 1 CHIL-rader; dessa sköts av LifeLines.

När du skapar nya poster för din databas, kan du hitta på etiketter och strukturera dina uppgifter helt efter eget huvud. Det är emellertid en god vana att använda de etiketter och värdeformat som specificerats i GEDCOM-standarden. LifeLines påtvingar dig en liten uppsättning regler som du måste följa. Inom personposter kräver LifeLines att du använder raderna 1 NAME och 1 SEX med deras speciella betydelse och och värdeformat. LifeLines utgår också från, men det inte är obligatoriskt, att du använder raderna 1 BIRT, 1 DEAT, 1 CHR och 1 BURI för respektive händelserna födelse, död, dop och begravning. I familjeposter utgår LifeLines från att du kommer att använda händelsen 1 MARR för giftermål. Inom personposter får du inte använda raderna 0 INDI, 1 FAMC eller 1 FAMS, eftersom dessa används för att sköta information om länkning. Inom familjeposter får du inte använda 0 FAM-, 1 HUSB-, 1 WIFE- eller 1 CHIL-rader.

Indenteringen i exemplen är inte en del av GEDCOM-formatet, men när LifeLines preparerar poster för dig att redigera, så indenterar det alltid posterna, så att de blir lättare att läsa och förstå. Indenteringen tas bort innan dina data åter sparas i databasen.


HUVUDMENY

Efter att LifeLines öppnat en befintlig databas, eller skapat en ny, presenterar den huvudmenyn för dig:

Please choose an operation:
   b Browse the persons in the database
   s Search database
   a Add information to the database
   d Delete information from the database
   p Pick a report from list and run
   r Generate report by entering report name
   t Modify character translation tables
   u Miscellaneous utilities
   x Handle source, event and other records
   q Quit and return to UNIX

Om du har ställt in svensk lokal (inställning för att LifeLines ska visa kommandon och meddelanden på svenska), ser huvudmenyn ut så här (i fortsättningen visas endast programmenyer och -meddelanden så som de ser ut med svensk lokal):

Välj ett kommando:
   b Bläddra mellan personer i databasen
   s Sök i databasen
   a Lägg till information i databasen
   d Ta bort information från databasen
   p Välj en rapport från lista och kör
   r Skapa rapport genom att ange rapportens namn
   t Modifiera teckenöversättningstabeller
   u Diverse verktyg
   x Hantera käll-, händelse- och övriga poster
   q Avsluta programmet

Välj ett kommando genom att trycka på bokstaven för önskat val.

Med bläddringskommandot kan du bläddra i databasen och utföra många operationer på dina data. Sökkommandot tillhandahåller några enkla sökmöjligheter med jokertecken, som leder till att bläddra i särskilda poster. Med lägg till-kommandot kan du lägga till nya uppgifter, och ta bort-kommandot raderar uppgifter. Rapportkommandona läser in rapportprogram och genererar utdata från rapporter. Kommandot modifiera teckenöversättningstabeller gör ändringar i teckenöversättningstabeller. Diverse verktyg-kommandot tillhandahåller sådant som säkerhetskopiering och återläsning av data. Kommandot hantera käll-, händelse- och övriga poster ger dig tillgång till dessa tre posttyper. händelse- och övriga typer av poster. Kommandot avsluta stänger databasen och återgår till UNIX.

Bläddringskommandot förtjänar särskilt omnämnande, eftersom det tillhandahåller en rik miljö för att söka, läsa, lägga till, redigera, slå samman och ta bort uppgifter i databasen. Du kommer att märka att du manövrerar från bläddringslägena den mesta tiden. Samtliga dessa operationer beskrivs i senare avsnitt.


TECKENKODNING

Efter att du har skapat en ny databas, och innan du överhuvudtaget lägger till några data till den, är den tidpunkt då du ställer in den teckenkodning som ska användas i databasen.

Teckenkodningen är valet av hur bokstäver ska representeras av datorn. Om du endast har använt engelska bokstäver under datoranvändning, kanske du inte har träffat på denna frågeställning, eftersom det råkar vara så att de engelska bokstäverna (a-z och A-Z) lagras numeriskt på samma sätt i nästan alla teckenkodningar som används av datorer. Men inom genealogin är det särskilt troligt att du stöter på bokstäver utanför det engelska alfabetet (exempelvis vokaler med accent).

Du har i grunden tre val när det gäller vilken teckenkodning du ska använda i din databas, listade nedan från enklast till mest kraftfull.

För det första kan du lämna den helt ospecificerad. Med detta uppträder LifeLines på traditionellt vis. Detta passar egentligen endast om antingen a), du endast använder engelska (ASCII-) data, eller b), du arbetar i en miljö som helt och hållet använder samma 8-bitars teckenkodning (t. ex. en GNU/Linux-dator som är helt och hållet ISO-8859-15), och du endast kör LifeLines på engelska. Om du använder någon icke-engelsk data på MS-Windows, kommer detta sannolikt inte passa, eftersom LifeLines körs i konsolläge, men du sannolikt använder MS-Windowsprogram för redigering eller för att läsa utdata, och MS-Windowskonsollen använder en annan teckenkodning än MS-Windowsprogram. En annan anledning till att detta inte kan passa är om du använder LifeLines på ett annat språk än engelska, eftersom gettextmeddelandekatalogerna (för icke-engelskt gränssnitt) inte kommer att konverteras till din teckenkodning.

För det andra kan du specificera en särskild 8-bits teckenkodning. Om vi antar att du har iconv och gettext installerade (eller att du använder MS-Windowsversionen, där dessa ingår), kan du ställa in valfri 8-bits teckenkodning som stöds av iconv, och iconv stöder ganska många. Ett naturligt val för västeuropeiska språk är ISO-8859-1, eller (endast för MS-Windows) CP-1252. Med denna inställning kommer gettexts språkfiler att konverteras till din teckenkodning.

För det tredje kan du specificera att UTF-8 ska användas. Detta är en Unicodekodning, och är det överlägset mest kraftfulla valet. Det är faktiskt det enda riktigt praktiska sättet att lagra, exempelvis, namn på engelska, namn på ryska och namn på grekiska, i en och samma databas, med deras riktiga tecken (alfabet). I nyare versioner har LifeLines blivit mer kunnig på att hantera UTF-8, så att, exempelvis, versaler och gemener endast fungerar korrekt med versioner från 3.0.28 och framåt.

För att faktiskt specificera en kodning, så skriv in den via Diverse verktyg och Redigera fil för användarinställningar (som dokumenteras nedan). Från huvudmenyn, tryck u för att nå verktygssidan, och sedan o för att redigera användarinställningarna. För att ställa in t. ex. teckenkodningen ISO-8859-1, så skriv den här strängen på en egen rad, utan de omgivande citationstecknen: "codeset=ISO-8859-1". Eller, för att specificera användning av UTF-8, "codeset=UTF-8".

Ytterligare information om teckenkodningskonvertering återfinns i det senare kapitlet med det namnet (exempelvis information om att skapa rapporter som använder namn på HTML-entiteter för tecken i icke-ASCII).


LÄGGA IN DEN FÖRSTA PERSONEN

Notis: Innan du lägger in den första personen i din databas, ställer du in intern teckenkodning (se kapitlet Teckenkodning för information).

Normalt lägger du in personer i databasen från bläddringslägena, men när den första personen ska läggas in, finns det ingen i databasen att bläddra till. För att lägga in den första personen i en LifeLinesdatabas, så välj först lägg till-kommandot från huvudmenyn. Du kommer att hamna i menyn för att lägga till data (beskrivs längre fram). Tryck p för att lägga till en person. LifeLines skapar en mall för en personpost i GEDCOM, och placerar dig i en textredigerare för att redigera mallen. Den förvalda mallen ser ut så här:

Exempel 5. Förvald mall för personposter


  0 INDI
  1 NAME Fname /Surname/
  1 SEX MF
  1 BIRT
    2 DATE
    2 PLAC
    2 SOUR
  1 DEAT
    2 DATE
    2 PLAC
    2 SOUR

Redigera mallen för att skapa en post för den nya personen. Ändra namnet till personens namn. Indikera personens kön genom att ta bort endera av M eller F. Fyll i de födelse- och dödsdata så bra du kan. Om personen lever, så ta bort dödshändelsen. Ta bort alla DATE- och PLAC-rader som du inte har information för.

Den förinställda mallen tillhandahåller rader för en födelse- och en dödshändelse. Du kan utöka posten med andra händelser (t. o. m. ytterligare födelse- eller dödshändelser) och rader. Indenteringen gör det enklare att läsa och göra ändringar i posten, men är inte nödvändig. Du kan ändra den förvalda mallen genom att att ändra användarinställningen INDIREC (beskrivs senare).

Så här skulle jag kunna redigera mallen om jag ville skapa en post om mig själv:

Exempel 6. Exempelredigering av mall för post


  0 INDI
  1 NAME Thomas Trask /Wetmore/ IV
  1 SEX M
  1 BIRT
    2 DATE 18 DEC 1949
    2 PLAC New London, New London, Connecticut
    2 SOUR Birth Certificate
  1 OCCU Software Engineer
  1 RESI
    2 DATE 1982 to 1995
    2 PLAC Newburyport, Essex, Massachusetts
    2 ADDR 2 Barton Street, Newburyport, MA 01950
	
... en massa andra händelser och fakta

När du redigerar en personpost, så lägg inte till eller redigera rader med INDI, FAMC eller FAMS. LifeLines skapar och sköter dessa rader via särskilda användarkommandon.

När du avslutar redigeringen och lämnar redigeraren, så återvänder du automatiskt till LifeLines. Om du gjorde något fel (t. ex. inte använde korrekta nivånummer eller inte följde reglerna för att skriva in namn), visar LifeLines ett felmeddelande, och frågar om du vill redigera om posten. Om du inte gör det, så kommer LifeLines inte att lägga in personen i databasen.

När posten är korrekt formaterad, frågar LifeLines om du är säker på att du vill lägga in personen i databasen. Om du svarar ja, så läggs personen in; om du svarar nej, så läggs den inte in. I båda fallen återvänder LifeLines till huvudmenyn.


TEXTREDIGERARE OCH MILJÖVARIABLER

I LifeLines sköter du databasposterna med hjälp av en textredigerarea. Detta skiljer LifeLines från andra släktforskningsprogram, där man använder fönster eller formulär för att samla in data. Den förvalda textredigeraren för LifeLines är vi. (Versionen för MS-Windows har istället notepad.exe förvald.) Detta kan upphävas genom miljövariablerna ED, EDITOR eller LLEDITOR. Om du exempelvis föredrar textredigeraren emacs, kan du lägga till raden ED=emacs i filen för din inloggningsprofil, varpå LifeLines kommer att använda emacs för redigering.

Det finns fyra andra LifeLinesspecifika miljövariabler. De är LLDATABASES, LLARCHIVES, LLPROGRAMS och LLREPORTS. LLDATABASES och LLPROGRAMS är sökvägslistvariabler för UNIX.

Det finns även en konfigurationsfil, och inställningar kan göras i den istället för i miljövariabler. Den kallas vanligen .linesrc i UNIX, och lines.cfg i MS-Windows. En exempelkonfigurationsfil bör finnas inkluderad i distributionen.

See avsnittet om system- och användaregenskaper för fler detaljer.

LLDATABASES kan sättas till en lista över kataloger som innehåller LifeLinesdatabaser. När du startar LifeLines kommer dessa kataloger att sökas igenom i tur och ordning efter den databas som nämns på kommandoraden. Exempelvis indikerar LLDATABASES=.:/home/ttw4/LifeLines/Databaser att LifeLines ska söka efter databaser i aktuell katalog först, och om den inte hittas där, därefter söka i: /home/ttw4/LifeLines/Databaser

Varje LifeLinesdatabas implementeras som en katalog med specifikt innehåll. Variabeln LLDATABASES ska sättas till en lista över kataloger som innehåller dessa databaskataloger, inte till en lista över själva databaskatalogerna.

Miljövariabeln LLPROGRAMS används på samma vis, men för att ange sökvägen för rapportskapande och andra program för LifeLines (beskrivs senare).

LLARCHIVES och LLREPORTS kan var och en sättas till att ange en enda katalog. LLARCHIVES används för att välja en katalog där alla säkerhetskopierade databaser ska sparas, och LLREPORTS används för att välja en katalog där alla skapade rapporter och utdata från program ska placeras.

Nya databaser utan angivna sökvägar kommer att skapas i den första katalogen som listats i LLDATABASES-sökvägen. (Detta är en ändring; versionerna från 3.0.6 till 3.0.31 använde en nu obsolet variabel LLNEWDBDIR.

Det är inte obligatoriskt att använda dessa miljövariabler; när en variabel inte är definierad, så använder LifeLines aktuell katalog som förvalt värde. Om du använder variablerna, så kan du upphäva användningen av dem genom att ange filer och kataloger som antingen absoluta eller relativa sökvägar.

Du kan använda konfigurationsfilen i stället för miljövariabler. Detta är gjort speciellt med tanke på användare på MS-Windowssystem, där miljövariabler inte är en så vanlig konfigureringsteknik.

LifeLines använder biblioteket curses för att få terminaloberoende I/O. Detta innebär att du måste ange terminaltyp med miljövariabeln TERM. (Detta gäller inte i versionen för MS-Windows.)


GRUNDLÄGGANDE OM BLÄDDRING

Du kommer att använda de olika bläddringsfönstrena i LifeLines den mesta tiden. Härifrån kan du snabbt söka efter eller bläddra genom personerna och familjerna i databasen. När du finner en person eller familj som du är intresserad av, kan du gå in och redigera posterna för dem.

Via bläddringsfönstrena kan du också lägga in nya personer och familjer i databasen, lägga till makar i familjer, lägga till barn i familjer, ändra inbördes ordning mellan makar och mellan barn, slå samman personer och slå samman familjer, och utföra andra operationer. Du kan också ta bort makar från familjer och ta bort barn från familjer via bläddringsfönstrena.

Det finns sex bläddringsfönster. Person- och familjefönstrena fokuserar på en enskild person respektive familj. I listfönstret kan du bläddra igenom en lista över personer. I tvåpersonsfönstret visas två personer samtidigt, och i tvåfamiljsfönstret visas två familjer samtidigt. Assistentfönstret används för att bläddra i alla andra typer av poster (t. ex. händelser, källor och notiser).

Varje bläddringsfönster har flera olika visningslägen. Visningsläget påverkar hur informationen visas i fönstret, men påverkar inte vilka menyval som finns tillgängliga längst ner på i fönstret. Menykommandon finns tillgängliga i varje fönster för att byta mellan de tillgängliga visningslägena för det fönstret.

Personfönstret har flest visningslägen. Det har normalt läge, vilket visar en sammanfattning av basdata för personen. Det har (i likhet med alla andra fönster) GEDCOM-läge, vilket visar den verkliga GEDCOM-informationen, men förstärker den med information för de rader som har en korsreferens (GEDCOM xref). Det finns två typer av tavel- eller trädfönster, ett för antavlor och ett för stamtavlor. Djupet för träd som visas kan justeras via menykommandon.

Tvåpersonsfönstret har samma visningslägen som personfönstret.

Familjefönstret och Tvåfamiljsfönstret har båda vanlig visning (där sammanfattande basdata visas), GEDCOM-läge, och utökat GEDCOM-läge.

Assistentfönstret har enbart GEDCOM-läge och utökat GEDCOM-läge. (Listfönstret har inga visningslägen för närvarande.)


IDENTIFIERA EN PERSON ELLER EN LISTA ÖVER PERSONER ATT BLÄDDRA TILL

Tryck b från huvudmenyn för att komma in i bläddringslägena. LifeLines ber dig identifiera en person eller lista över personer att bläddra till.

Please identify person or persons to browse to.
Enter name, key, refn or list:

I den svenska menyn ser det ut så här:

Identifiera person eller personer att bläddra till.
skriv in namn, nyckel, refn eller lista:

Skriv in antingen ett namn eller en del av ett namn, eller ett internt nyckelvärde, eller en användardefinierad referensnyckel (beskrivs senare) eller namnet på en tidigare definierad lista över personer (beskrivs senare), och tryck enter.

LifeLines ger stor flexibilitet i hur man skriver in namn. Du kan skriva in namn i versaler eller gemener, eller fritt kombinerat. Du kan utelämna alla förnamn utom det första, och för förnamn kan du utelämna alla bokstäver utom den första. Du kan utelämna vokaler från efternamnet, och när du har skrivit in fyra eller fem konsonanter, kan du hoppa över också de kvarvarande av dessa. Du måste avdela förnamnen från efternamnet med ett snedstreck, och om du skriver in förnamnen efter efternamnet (som i kinesiska namn), eller bestämningsord (tex. Jr, Sr, IV, etc.), så måste de avdelas från efternamnet med ytterligare ett snedstreck. Här är några av de sätt som jag kan skriva in mitt namn på:

Exempel 7. Exempel på att skriva in ett namn


Thomas Trask /Wetmore/ IV
thomas/wetmore/iv
t t/wetmr/i
th tr/Wetmore
t/wtmr/iv

Du kan bläddra till en lista över alla personer med samma efternamn genom att använda en asterisk som initial i förnamnet. Till exempel:

Exempel 8. Exempel på användning av jokertecken vid bläddring

*/wetmore

matchar alla personer med efternamnet Wetmore. Detta är den enda användning av jokertecken som fungerar i visningsfönstren. (Däremot finns det några enkla jokertecken för sökkommandot för att hitta delar av personnamn, eller för sökning på användardefinierade referensnycklar. Man kommer åt sökkommandot från ett annat val i huvudmenyn.)

När du har skrivit in ett namn, så söker LifeLines efter alla personer som matchar. Det finns tre möjligheter: ingen träff; träff på en person; träff på fler personer än en. I det första fallet skriver LifeLines:

Det finns ingen i databasen med det namnet eller den nyckeln.
och stannar kvar vid huvudmenyn.

Om sökningen ger träff på en person, går LifeLines in i personläget och visar personen som matchar där. Om det fler personer än en matchar, går LifeLines in i listbläddringsläget med listan över personer som matchar.

Du kan också identifiera en person genom att skriva in värdet på hans eller hennes interna korsreferensnyckel. Det interna nyckelvärdet för alla personposter är ett I följt av siffror. I den aktuella versionen måste du när du skriver in ett nyckelvärde utelämna I:t. Om LifeLines hittar en person med det nyckelvärde som du angivit, så går LifeLines in i personläget och visar den personen.

Bläddringskommandot b finns också tillgängligt från de flesta av bläddringslägena. Kommandot fungerar likadant från dessa lägen som det gör från huvudmenyn.


SNABBIDENTIFIERA EN PERSON

Några operationer i LifeLines kräver att du identifierar en person, inte för att bläddra fram till den, men för att kunna fullfölja den operation som du begärt. Till exempel, när du lägger till ett barn i en familj, så kan det hända att LifeLines ber dig att identifiera barnet. När detta händer kommer en ruta att visas, där du ombeds att identifiera en person. Du svarar genom att skriva in ett namn eller en nyckel precis på samma sätt som du skulle göra för kommandot b. Om ingen matchar, så återgår LifeLines till det föregående bläddringsläget. Om namnet matchar personer i databasen, så visar LifeLines något i stil med:

Välj mellan dessa poster.
  >Thomas Trask Wetmore, b. 1826, N.B. (42)
   Thomas Trask Wetmore IV, b. 1949, Conn. (1)
   Thomas Trask Wetmore III, b. 1925, Conn. (6)
   Thomas Trask Wetmore Jr, b. 1896, Conn. (11)
   Thomas Trask Wetmore Sr, b. 1866, N.S. (23)
   Thomas Trask Wetmore V, b. 1982, Mass. (5)
_______________________________________________
Kommandon: j Flytta ned k Flytta upp i Välj q Avsluta

Använd kommandona j och k för att flytta markeringspilen (>) till rätt person, och använd sedan kommandot i för att välja den personen. Det kan finnas fler personer i listan än vad du kan se samtidigt, men om så skulle vara fallet, så kan du använda kommandona j och k för att bläddra igenom hela listan. Om du inte hittar önskad person, så använd kommandot q, varvid LifeLines frågar om du vill skriva in ett annat namn.

Från version 3.0.15 kan listor också navigeras med upp- och nedpilarna, PageUp- och PageDown-tangenterna och Home- och End-tangenterna. Skift-PageUp och Skift-PageDown flyttar mer än en sida i taget i den givna riktningen. Motsvarigheterna på tangentbordet är j=pil upp, k=pil ned, u=PageUp, d=PageDown, ^=Home, $=End, U=Skift-PageUp, D=Skift-PageDown, i=Enter.

När LifeLines skapar en lista över namn för dig att välja från, så försöker det att lägga till extra information till namnet; detta är till hjälp för att avgöra vilket namn som ska väljas, och är betydelsefullt i databaser där det finns många personer med samma namn. LifeLines visar placerar också värdet på personens nyckelvärde på slutet av varje menyrad; detta kan vara till hjälp i stora databaser.

Några visningsfönster tillhandahåller kommandot z, med vilket du kan bläddra till en ny person med snabbidentifiering i stället för b-stilen.


GRUNDLÄGGANDE OM BLÄDDRINGSFÖNSTER

Fönstret är uppdelat i rutor i alla bläddringsfönster. Längst ned i varje fönster finns alltid en meddelanderuta, som används för för enradiga meddelanden. Alla fönster har en eller två rutor som visar information ur databasen. Och varje fönster har en ruta med en meny som visar tillgänglig kommandon i det fönstret.


PERSONFÖNSTRET

När du har identifierat en person att bläddra till, så går LifeLines till personfönstret. Den översta rutan på skärmen visar basfakta om personen (i normalt läge, som är det förvalda). Rutan i mitten visar en meny med kommandon. Till exempel:

person: Thomas Trask WETMORE Sr (25)
  född: 13 March 1866, St. Mary's Bay, Digby, Nova Scotia
  död: 17 February 1947, New London, New London, Connecticut
  fader: Daniel Lorenzo WETMORE, f. 1821, N.S., d. 1903, Conn. (48)
  moder: Mary Ann DOTY, f. 1824, N.S., d. 1897, Conn. (59)
  maka/make: Margaret Ellen KANEEN, f. 1855, Eng., d. 1900, Conn. (26)
    barn: Portia Louise WETMORE, f. 1892, Conn., d. 1921, Conn. (27)
    barn: Thomas Trask WETMORE, f. 1896, Conn., d. 1970, Conn. (17)
  maka/make: Arleen M KEENEY, g. 1914, Conn. (75)
_______________________________________________________________________
Välj ett kommando:             (sid 1/3)
  e Redigera personen     g Bläddra t. familj     p  Tavelläge
  f Bläddra till fader    u Bläddra t. föräldrar  n  Skapa ny person
  m Bläddra till moder    b Bläddra t. personer   a  Skapa ny familj
  s Bläddra till make/m*  h Lägg t. som maka/ma*  x  Växla två familjer
  c Bläddra till barn     i Lägg till som barn    tt Växla t. tandemläge
  o Bl. t. äldre syskon   r Ta bort som maka/make ?  Andra menyval
  y Bl. t. yngre syskon   d Ta bort som barn      q  Återgå till huvudm*
_______________________________________________________________________
LifeLines -- Personfönster (* visar/döljer meny) 

Kommandona utför ett brett urval av funktioner.

e Redigera personen.

Redigera personens databaspost. LifeLines placerar posten i en fil, och startar därefter en textredigerare så att du kan redigera posten. När du återgår från redigeraren, ber LifeLines från redigeraren, dig bekräfta ändringar; personen ändras bara om du svarar ja.

f Bläddra till fader.

Bläddra till personens fader. Om fadern inte finns i databasen, så ändrar inte LifeLines det som visas i fönstret. Om det finns fler än en fader, så ber LifeLines dig att välja en.

m Bläddra till moder.

Bläddra till personens moder. Om modern inte finns i databasen, så ändrar inte LifeLines det som visas i fönstret. Om det finns fler än en moder, så ber LifeLines dig att välja en.

s Bläddra till maka/make.

Bläddra till personens maka/make. Om personen har fler makar än en, så ber LifeLines dig att välja en. Om personen inte har några makar, så ändras inte det som visas i fönstret.

c Bläddra till barn.

Bläddra till ett av personens barn. Om det finns flera barn än ett, så ber LifeLines dig att välja ett. Om personen inte har några barn, så ändras inte det som visas i fönstret.

o Bl. till äldre syskon.

Bläddra till personens närmaste äldre syskon. Om personen inte har något sådant syskon, så ändras inte det som visas i fönstret. Endast syskon från samma familj bläddras i med detta kommando.

y Bl. t. yngre syskon.

Bläddra till personens närmaste yngre syskon. Om personen inte har något sådant syskon, så ändras inte det som visas i fönstret. Endast syskon från samma familj bläddras i med detta kommando.

g Bläddra t. familj.

Bläddra till den familj som personen är maka/make eller förälder i, och gå in i familjefönstret. Om personen finns i fler än en familj, så ber LifeLines dig att identifiera vilken av dem. Om personen inte är maka/make eller förälder i någon familj, så ändras inte det som visas i fönstret.

u Bläddra t. föräldrar.

Bläddra till den familj som personen är barn i, och växla till familjeläget. Om personen inte är barn i någon familj, så ändras inte det som visas i fönstret. Om personen är barn i fler än en familj, så ber LifeLines dig att identifiera vilken av dem.

b Bläddra t. personer.

Bläddra till en ny person eller lista över personer. LifeLines ber dig att identifiera en eller flera personer via namn, nyckel eller listnamn, och, beroende på hur många personer som identifierats, växlar antingen till listläget, eller stannar kvar i personläget.

h Lägg t. som maka/make.

Lägg till personen som en maka/make/förälder i en befintlig familj. LifeLines ber dig identifiera familjen, och ber dig därefter att bekräfta din begäran.

i Lägg till som barn.

Lägg till personen som barn i en befintlig familj. Personen får redan vara barn i en annan familj. LifeLines ber dig identifiera familjen, och ber dig därefter att bekräfta din begäran.

r Ta bort som maka/make.

Ta bort personen som maka/make eller förälder från en befintlig familj. Om personen är maka/make eller förälder i fler familjer än en, så ber LifeLines dig att identifiera familjen.

d Ta bort som barn.

Ta bort personen som barn i en befintlig familj.

p Tavelläge.

Växla till tavelläge. Personen blir proband i antavlan.

n Skapa ny person.

Skapa och lägg till en ny person i databasen. LifeLines skapar en mall för en personpost och skickar den till textredigeraren för att redigera mallen. När du återgår från redigeraren, så ber LifeLines dig att bekräfta operationen. Om du gör det, så läggs den nya personen in och blir aktuell person. Om inte, så läggs personen inte in, och LifeLines återgår till det ursprungliga fönstret.

a Skapa ny familj.

Skapa och lägg in en ny familj i databasen. Den nya familjen kan ha den aktuella personen som antingen maka/make/förälder, eller som barn; LifeLines frågar vilket. Om du väljer att skapa en familj med personen som maka/make/förälder, så ber LifeLines dig att identifiera den andra makan/maken om hon eller han är bekant. I båda fallen skapar LifeLines en familjemall, och placerar dig i textredigeraren. När du återgår från redigeraren ber LifeLines dig att bekräfta operationen. Om du gör det, så lägger LifeLines in familjen och växlar till familjeläget. Om det kommando du använde precis innan kommandot a var kommandot n, och du väljer att skapa en familj med personen som maka/make/förälder, så gissar LifeLines att den andra makan/maken i familjen kommer att vara den personen som visades precis innan den nya personen skapades. LifeLines frågar dig om så är fallet, och om så, så görs automatiskt den personen till den andra makan/maken i den nya familjen. Om så inte är fallet, så ber LifeLines dig att identifiera den andra makan/maken.

x Växla två familjer.

Växla plats (ändra kronologisk ordning) för två valfria familjer som personen tillhör som maka/make eller förälder. LifeLines ber dig att identifiera de två familjerna och växlar därefter plats för dem.

tt Växla t. tandemläge.

Växla till tvåpersonsläget. LifeLines ber dig först att identifiera den andra personen.

? Andra menyval.

Gå till nästa sida med menyval. Detta kommer inte att påverka den övre delen (med de data som du har framme) av fönstret, men ger dig möjlighet att bläddra genom alla tillgängliga kommandon för det aktuella fönstret.

q Återgå till huvudmenyn.

Återgå till LifeLines huvudmeny.

zi Bläddra t. pers.

Snabbläddra till en ny person. LifeLines ber dig att identifiera en person via namn eller nyckelvärde, och om du gör det, så bläddras den personen fram.


LISTFÖNSTRET

Det här fönstret hanterar listor med personer. I den översta rutan visas information om en person i listan. I den vänstra rutan visas en lista över upp till 12 personer. Vilken person som visas i den översta rutan indikeras genom tecknet >. Den högra rutan är menyn över tillgängliga kommandon.

person: Thomas Trask WETMORE Sr (25)
  född: 13 March 1866, St. Mary's Bay, Digby, Nova Scotia
  död: 17 February 1947, New London, New London, Connecticut
  fader: Daniel Lorenzo WETMORE, f. 1821, N.S., d. 1903, Conn. (48)
  moder: Mary Ann DOTY, f. 1824, N.S., d. 1897, Conn. (59)
  maka/make: Margaret Ellen KANEEN, f. 1855, Eng., d. 1900, Conn. (26)
_______________________________________________________________________
  Thomas Trask WETMORE (42)                Choose an operation:
  Thomas Trask WETMORE III (6)              j Gå nedåt i lista
  Thomas Trask WETMORE IV (1)               k Gå uppåt i lista
  Thomas Trask WETMORE (11)                 e Redigera denna pers.
 >Thomas Trask WETMORE Sr (23)              i Bläddra till denna pers.
  Thomas Trask WETMORE (5)                  m Markera denna pers.
                                            r Ta bort från lista
                                            t Växla t. tandemläge
                                            n Ge denna lista namn
                                            b Bläddra till nya pers.
                                            a Lägg t. i denna lista
                                            x Växla märke/aktuell
                                            q Återgå till huvudmenyn
_______________________________________________________________________
LifeLines -- Listfönster

j Gå nedåt i lista.

Gå nedåt i listan en person. Listrutan är bara stor nog för att visa 12 personer, men en lista kan innehålla många fler personer. Använd tangenterna j och k för att bläddra fram till dessa andra personer.

k Gå uppåt i lista.

Gå uppåt i listan en person. Listrutan är bara stor nog för att visa 12 personer, men en lista kan innehålla många fler personer. Använd tangenterna j och k för att bläddra fram till dessa andra personer.

Från version 3.0.15 kan listor också navigeras med upp- och nedpilarna, PageUp- och PageDown-tangenterna och Home- och End-tangenterna. Skift-PageUp och Skift-PageDown flyttar mer än en sida i taget i den givna riktningen. Motsvarigheterna på tangentbordet är j=pil upp, k=pil ned, u=PageUp, d=PageDown, ^=Home, $=End, U=Skift-PageUp, D=Skift-PageDown, i=Enter.

e Redigera denna pers.

Redigera databasposten för den visade personen. LifeLines startar redigeraren på personposten. När du återgår från redigeraren, ber LifeLines dig att bekräfta ändringar, och därefter placeras du åter i listfönstret.

i Bläddra till denna pers.

Växla till personfönstret med aktuell person.

m Markera denna pers.

Markera aktuell person om han/hon inte är markerad; avmarkera personen om han/hon är det. Den markerade personen visas med ett x vid sitt namn. Markerade personer används av kommandona t och x. Endast en person i taget kan markeras.

d Ta bort från lista.

Ta bort aktuell person från listan (inte från databasen).

t Växla t. tandemläge.

Växla till tvåpersonsfönstret med aktuell person och den markerade personen som de två personerna. Om ingen person har markerats sker ingen förändring.

n Ge denna lista namn.

Listor med personer kan namnges, vilket gör det möjligt att snabbt bläddra tillbaka till dem genom att ange ett listnamn när du använder kommandot b från olika lägen. LifeLines kommer att fråga dig efter namnet. Listnamn bör av praktiska skäl vara korta.

b Bläddra till nya pers.

Bläddra till en ny person eller lista över personer. Du kan identifiera en person eller en lista över personer via namn, intern eller användardefinierad nyckel eller via listnamn.

a Add to this list.

Lägg till personer till aktuell lista. LifeLines ber dig att identifiera en ny person eller lista med personer via namn, nyckel eller listnamn, varpå de läggs till och sorteras efter namn i den aktuella listan.

x Växla märke/aktuell.

Växla aktuell person med den markerad personen i listan.

q Återgå till huvudmenyn.

Återgå till LifeLines huvudmeny.


FAMILJEFÖNSTRET

Det här fönstret visar information om en familj. I den övre rutan visas basinformation om familjen. I den nedre rutan visas menyn med tillgängliga kommandon.

fader: Thomas Trask WETMORE IV (1)
  född: 18 December 1949, New London, New London, Connecticut
  död:
moder: Luann Frances GRENDA (2)
  född: 10 July 1949, Pittsburgh, Allegheny, Pennsylvania
  död:
gifta: 1 August 1970, Governors Island, New York, New York
  barn: Anna Vivian Wetmore, f. 1974, Alaska (3)
  barn: Marie Margaret WETMORE, f. 1979, Conn. (4)
  barn: Thomas Trask WETMORE V, f. 1982, Mass. (5)
_______________________________________________________________________
Välj ett kommando:             (sid 1/3)
  e Redigera familjen   s Lägg t. maka/make *   tt Växla t. fam.tandem
  f Bläddra till fader  a Lägg t. barn i fam.   b  Bläddra t. personer
  m Bläddra till moder  r Ta bort maka/make *   zi Bläddra t. personer
  c Bläddra till barn   d Remove child from     q  Återgå till huvudm*
  n Skapa ny person     x Växla två barn
_______________________________________________________________________
LifeLines - Familjefönster (* visar/döljer meny)

e Redigera familjen.

Redigera familjens databaspost. LifeLines skriver posten till en fil och placersr dig i en redigerare för att redigera filen. När du återgår från redigeraren, ber LifeLines dig att bekräfta uppdateringen; familjen ändras bara om du gör så.

f Bläddra till fader.

Bläddra till fadern/maken i familjen, och växla till personfönstret. Om fadern saknas sker ingen ändring.

mBläddra till moder.

Bläddra till modern/makan i familjen, och växla till personfönstret. Om modern saknas sker ingen ändring.

c Bläddra till barn.

Bläddra till ett barn i familjen, och växla till personfönstret. Om det finns fler än ett barn i familjen, ber LifeLines dig att identifiera ett av barnen.

n Skapa ny person.

Skapa och lägg till en ny person i databasen. LifeLines skapar en mall för en databaspost och skickar den till textredigeraren för att redigera posten. När du återgår från redigeraren, ber LifeLines dig att bekräfta operationen. Om du gör så, läggs personen in. Om inte, så läggs inte personen in. I båda fallen sker ingen ändring i vad som visas på skärmen.

s Lägg t. maka/make i fam.

Lägg till en maka/make i familjen. LifeLines ber dig att identifiera den nya makan/en. Om kommandot du körde precis innan kommandot s var kommandot n, så gissar LifeLines att den nya makan/maken är den nyss skapade personen. LifeLines frågar om så är fallet, och i så fall blir den personen den andra makan/maken i familjen. Om inte, så ber LifeLines dig att identifiera den andra makan/maken.

a Lägg t. barn i fam.

Lägg till ett barn i familjen. LifeLines ber dig att identifiera det nya barnet. Om kommandot du körde precis innan kommandot s var kommandot n, så gissar LifeLines att det nya barnet är den nyss skapade personen. LifeLines frågar om så är fallet, och om så, så läggs barnet till i familjen. Om inte, så ber LifeLines dig att identifiera barnet. Om det redan finns barn i familjen, så frågar LifeLines också var i familjen barnet ska placeras.

r Ta bort maka/make från.

Ta bort en maka/make från familjen. LifeLines ber dig att identifiera personen, och om du gör så, tas hon eller han bort. Personen tas inte bort från databasen.

d Ta bort barn från.

Ta bort ett barn från familjen. LifeLines ber dig att identifiera barnet, och om du gör så, tas barnet bort från familjen. Personen tas inte bort från databasen.

x Växla två barn.

Växla plats (ändra kronologisk ordning) för två valfria barn i familjen. LifeLines ber dig identifiera de två barnen och växlar därefter plats på dem.

tt Växla t. fam.tandem.

Detta kommando tar dig till tvåfamiljsfönstret. LifeLines ber dig att identifiera en familj till, och tar dig därefter till tvåfamiljsfönstret, där båda familjerna visas.

b Bläddra t. personer.

Bläddra till en ny person eller lista över personer. Du kan identifiera en person eller lista via namn, nyckel eller listnamn. Om du lyckas identifiera en ny person eller personer, så växlar du till person- eller listfönstret.

z Bläddra t. personer.

Snabbläddra till en ny person. LifeLines ber dig att identifiera en person via namn eller nyckelvärde, och om du gör det, bläddrar det fram den personen.

q Återgå till huvudmenyn.

Återgå till LifeLines huvudmeny.


TANDEMLÄGE FÖR PERSONER

Tvåpersonsfönstret visar information om två personer. Dess huvudanvändning är att vara till hjälp vid sammanslagning av personer. De översta två rutorna visar två personer i samma format som i person- och listfönstrena. I den nedersta rutan visas menyn med tillgängliga kommandon. Exempelvis:

  person: Thomas Trask WETMORE Sr (25)
  född: 13 March 1866, St. Mary's Bay, Digby, Nova Scotia
  död: 17 February 1947, New London, New London, Connecticut
  fader: Daniel Lorenzo WETMORE, f. 1821, N.S., d. 1903, Conn. (48)
  moder: Mary Ann DOTY, f. 1824, N.S., d. 1897, Conn. (59)
  maka/make: Margaret Ellen KANEEN, f. 1855, Eng., d. 1900, Conn. (26)
______________________________________________________________________
person: Thomas Trask WETMORE IV (1)
  född: 18 December 1949, New London, New London, Connecticut
  död:
  fader: Thomas Trask WETMORE III, f. 1925, Conn. (6)
  moder: Joan Marie HANCOCK, f. 1928, Conn. (7)
  maka/make: Luann Frances GRENDA, g. 1970, N.Y. (2)
______________________________________________________________________
Välj ett kommando:             (sid 1/3)
 e Redigera övre pers.  s Bl. t. övre make/m*   a Lägg till familj
 t Bläddra till övre    c Bl. t. övre barn      j Sammanl. ned. - öv.
 f Bläddra t. övre fa*  b Bläddra t. personer   x Växla övre/nedre
 m Bläddra t. övre mo*  d Kopiera öv. t. ned.   q Återgå till huvudm*
______________________________________________________________________
LifeLines - Tvåpersonsfönster (* visar/döljer meny)

e Redigera övre pers.

Redigera posten för den övre personen. LifeLines skriver posten till en fil och placerar dig i textredigeraren för att redigera filen. När du återgår från redigeraren, ber LifeLines dig att bekräfta uppdateringen; personen ändras bara om du gör så.

t Bläddra till övre.

Växla till personläge med den övre personen som aktuell person.

f Bläddra t. övre fader.

Ersätt den övre personen med hans/hennes fader.

m Bläddra t. övre moder.

Ersätt den övre personen med hans/hennes moder.

s Bl. t. övre make/maka/r.

Ersätt den övre personen med hans/hennes maka/make. Om personen har fler än en maka/make, ber LifeLines dig att identifiera en av dem.

c Bl. t. övre barn.

Ersätt den övre personen med ett av hans/hennes barn. Om personen har fler än ett barn, ber LifeLines dig att identifiera ett av dem.

b Bläddra t. personer.

Bläddra till en ny person eller lista över personer. LifeLines ber dig att identifiera en ny person eller personer via namn, nyckel eller listnamn, och gör sedan som beskrivs i avsnittet om att identifiera en person.

d Kopiera öv. t. ned.

Kopiera den övre personen till den nedre personen. Det skapas inte en ny person; samma person visas på två ställen.

a Lägg till familj.

Skapa en ny familjepost; LifeLines antar att de två personer som visas ska vara makar/föräldrar i den nya familjen; de måste vara av motsatt kön.

j Sammanl. ned. - öv.

Lägg samman den nedre personen i den övre personen. LifeLines kombinerar ihop de båda personposterna och placerar dig i textredigeraren för att redigera den kombinerade posten. När du är klar kommer LifeLines, om du bekräftar att du vill fullfölja operationen, att ta bort den nedre personen från databasen, och den övre personen får den kombinerade posten. Se avsnittet om sammanläggning.

x Växla övre/nedre.

Växla plats för de två personer som visas.

q Återgå till huvudmenyn.

Återgå till LifeLines huvudmeny.


TANDEMLÄGE FÖR FAMILJER

Tvåfamiljsfönstret visar information om två familjer. Dess huvudanvändning är att vara till hjälp vid sammanslagning av familjer. De översta två rutorna visar information om de två familjer som du bläddrat fram, och den nedersta rutan innehåller menyn med tillgängliga kommandon. Till exempel:

fader: Thomas Trask WETMORE IV (1)
  född: 18 December 1949, New London, New London, Connecticut
moder: Luann Frances GRENDA (2)
  född: 10 July 1949, Pittsburgh, Allegheny, Pennsylvania
gifta: 1 August 1970, Governors Island, New York, New York
  barn: Anna Vivian WETMORE, f. 1974, Alaska (3)
__________________________________________________________________
fader: Thomas Trask WETMORE III (6)
  född: 26 October 1925, New London, New London, Connecticut
moder: Joan Marie Hancock (7)
  född: 6 June 1928, New London, New London, Connecticut
gifta: 5 February 1949, New London, New London, Connecticut
  barn: Thomas Trask WETMORE IV, b. 1949, Conn. (1)
__________________________________________________________________
 Välj ett kommando:             (sid 1/2)
 e  Redigera övre fam.    m  Bläddra t. mödrar    )b Rulla nedre ned
 t  Bläddra till övre     (t Rulla övre upp       (( Rulla båda upp
 b  Bläddra t. nedre      )t Rulla övre ned       ?  Andra menyval
 f  Bläddra t. fäder      (b Rulla nedre upp      q  Återgå till huvudm*
__________________________________________________________________
LifeLines -- Tvåfamiljsfönster (* visar/döljer meny)

e Redigera övre fam.

Med detta kommando kan du redigera posten för den övre familjen. LifeLines skriver posten till en fil, och skickar den därefter till redigeraren för att redigera texten. När du återgår från editorn, frågar LifeLines om du är säker på att du vill uppdatera familjen i databasen. Familjen ändras bara om du svarar ja.

t Bläddra till övre.

Växla till familjefönstret med den övre familjen som aktuell familj.

b Bläddra t. nedre.

Växla till familjefönstret med den nedre familjen som aktuell familj.

f Bläddra t. fäder.

Växla till tvåpersonsfönstret med fäderna i de två familjerna som de två personerna.

m Bläddra t. mödrar.

Växla till tvåpersonsfönstret med mödrarna i de två familjerna som de två personerna.

(t Rulla övre upp.

TODO

)t Rulla övre ned.

TODO

(b Rulla nedre upp.

TODO

)b Rulla nedre ned.

TODO

(( Rulla båda upp.

TODO

)) Rulla båda ned.

TODO

# Slå på/av barnnr.

TODO

(1-9) Bläddra t. barn.

TODO

j Sammanl. ned. - öv.

Lägg samman den nedre familjen i den övre familjen. LifeLines kombinerar ihop de båda familjeposterna och placerar dig i textredigeraren för att redigera den kombinerade posten. När du är klar kommer LifeLines, om du bekräftar att du vill fullfölja operationen, att ta bort den nedre familjen från databasen, och den övre personen får den kombinerade posten. Se avsnittet om sammanläggning.

x Växla övre/nedre.

Växla plats för de två familjer som visas.

[Det finns en del andra varierande kommandon tillgängliga i menyerna.]

q Return to main menu.

Återgå till LifeLines huvudmeny.


OPERATIONEN LÄGG TILL

Om du väljer operationen lägg till från huvudmenyn, visar LifeLines följande meny:

Vad vill du lägga till?
  p  Person - lägg till ny person i databasen
  f  Familj - skapa familjepost med en eller två makar
  c  Barn - lägg till ett barn i en befintlig familj
  s  Maka/make - lägg till en maka/make i en befintlig familj
  q  Återgå till föregående meny                     

De här operationerna fungerar på ett okomplicerat sätt. LifeLines frågar dig de nödvändiga frågorna, och ger dig möjlighet att avbryta när som helst. Operationerna som finns tillgängliga via den här menyn finns också tillgängliga via bläddringslägena, och är ofta lättare att utföra därifrån.


OPERATIONEN TA BORT

Om du väljer operationen ta bort från huvudmenyn, visar LifeLines följande meny:

Vad vill du ta bort?
  c  Barn - ta bort ett barn från dess familj
  s  Maka/make - ta bort en maka/make från en befintlig familj
  i  Person - ta bort en person fullständigt
  f  Familj - ta bort en familj fullständigt
  q  Återgå till föregående meny

De här operationerna är också okomplicerade att använda. LifeLines frågar dig de nödvändiga frågorna, och ger dig möjlighet att avbryta när som helst.

Du kan också ta bort ett barn från hans/hennes familj, eller ta bort en maka/make/förälder från dess familj, från personläget. I båda fallen är det bara en relation som tas bort, inte en person. Å andra sidan måste menyvalet ta bort användas om du helt och hållet vill ta bort en person från databasen; det kan inte göras från personläget.

Det finns ingen speciell operation för att ta bort en familjepost. LifeLines tar tyst bort de familjer som det varken finns några föräldrar eller barn i.


KONVERTERING AV TECKENKODNINGAR

(Detta avsnitt var tidigare betitlat TECKENÖVERSÄTTNING.)

Avsikten är att du endast behöver ange den interna kodningen för varje databas du skapar (och detta steg kan automatiseras via egenskapen NewDbProps), så fungerar allt annat ganska bra utan justeringar. Det vill säga, LifeLines försöker att gissa den korrekta teckenkodningen för din miljö (inklusive att gissa konsoll- och Windowskodningar när du kör i MS-Windows, vilket det bör göra ganska bra).

Emellertid kan du hamna i situationer där du önskar ändra kodningens arbetssätt, eller där kodningskonverteringen inte fungerar korrekt (i dessa fall hoppas vi att du kommer att rapportera problemet till e-postlistan och/eller felrapporteringslistan på Sourceforge).

Det finns två sätt att korrigera kodningskonvertering. Den första metoden är att genom att ändra konfigureringsvariabler. Till exempel, om du vill generera en HTML-rapport av alla dina data, vilket inkluderar namn på ryska (med kyrilliska bokstäver), för din släkting, och du vet att din släktings dator inte har någon font för kyrilliska bokstäver, så kan du vilja tillfälligt ställa om din kodning för rapportutdata så att du får interpolerade ASCII-bokstäver för de ryska bokstäverna. Du kan göra detta genom att tillfälligt ändra konfigurationsvariabeln ReportCodeSetOut till "ASCII" (fast, om någon del av din data innehåller tecken som är reserverade i HTML, som till exempel mindre än-tecknet, eller och-tecknet, så vill du förmodligen ha "ASCII//HTML").

Det andra sättet att ändra kodningskonvertering, och det ändra sättet i LifeLines 3.0.6, är att redigera de inbäddade teckenöversättningstabellerna, i vilka du faktiskt anger de bokstäver du vill ska konverteras, bokstav för bokstav, och hur du vill att de ska konverteras. Den här metoden, till skillnad från den första, fungerar till och med i databaser utan angiven intern kodning.

Om du väljer operationen modifiera teckentabeller från hvudmenyn, så visar LifeLines teckenöversättningsmenyn:

Vilken teckenmappning vill du redigera:
Editor to Internal
Internal to Editor
GEDCOM to Internal
Internal to GEDCOM
Internal to Display
Internal to Report
q Återgå till föregående meny

LifeLines har väldigt litet inbyggd kunskap om teckenkodning. Om du använder 7-bitars ASCII-tecken, så kommer du inte att stöta på några problem. Emellertid krävs det ytterligare tecken i många europeiska och andra språk, och det finns många 8-bitars- och andra schema för att koda koda dessa tecken. LifeLines känner inte till något av dem. Däremot tillhandahåller LifeLines ett antal funktioner för teckenöversättning som du kan använda för detta ändamål.

LifeLines tillhandahåller hjälpmedel för mappning mellan tecken närhelst en datapost förändras. LifeLines stödjer fyra former:

intern

för poster i databasen

editor

för poster som redigeras

display

för poster som visas

report

för poster som skrivs till utmatningsfil

När text konverteras från ett format till ett annat översätter LifeLines normalt inte teckenkodningar. Du kan emellertid ändra det här förinställda beteendet genom att skapa teckenöversättningstabeller som LifeLines kommer att använda när du konverterar mellan olika format. Det finns sex olika översättningstabeller som du kan definiera. Följande tabell visar de sex tabellerna och beskriver när de tillämpas:

internal to editor

vid konvertering från internt databasformat till redigerarformat

editor to internal

vid konvertering från redigerarformat tillbaka till internt databasformat

GEDCOM to internal

vid inläsning av GEDCOM-indataposter och skrivning av dem till databasen.

internal to GEDCOM

vid skrivning av interna databasposter till extern GEDCOM-fil

internal to display

vid visning av en post i ett fönster i ett bläddringsläge

internal to report

vid skrivning av interna databasposter till extern rapportfil

Efter att du valt en översättningstabell startas redigeraren så att du kan redigera tabellen där. Översättningstabellerna består av rader som ser ut så här:
mönster mönster
där ett tabbsteg avdelar mönstren. Varje mönster är en godtycklig följd av ASCII-tecken och kontrollsekvenser. Översättningen sker genom att hitta alla mönster som matchar mönster på vänster sida, och ersätta dem med motsvarande teckenföljd på höger sida.

Det finns fem kontrollmekanismer som används i mönster:

#nnn

nnn är ett decimalt teckenvärde

$hh

hh är ett hexadecimalt teckenvärde

\ #

representerar tecknet #

\$

representerar tecknet $

\\

representerar tecknet \

Teckenöversättningsfunktionen är inte fullständigt testad, och inte alla översättningar är ännu implementerade.


DIVERSE VERKTYG

Om du väljer operationen diverse verktyg, så visar LifeLines verktygsmenyn:

Vilket verktyg vill du använda?
  s  Spara databasen till GEDCOM-fil
  r  Läs in data från en GEDCOM-fil
  k  Finn nyckelvärde för en person
  i  Identifiera en person via nyckelvärde
  d  Visa databasstatistik
  m  Visa minnesstatistik
  e  Redigera platsförkortningsfilen
  o  Redigera fil för användarinställningar
  c  Inställningar för teckenuppsättning
  q  Återgå till huvudmenyn

s Spara databasen till GEDCOM-fil.

Med det här kommandot sparas hela LifeLinesdatabasen i en GEDCOM-fil. Alla person-, familje-, händelse-, käll- och användardefinierade poster lagras. Detta kommando kan användas för regelbunden säkerhetskopiering av din databas. När du använder detta kommando, frågar LifeLines efter namnet på filen. Om du har definierat skalvariabeln LLARCHIVE, så lagrar LifeLines filen i den katalog som variabeln satts till.

r Läs in data från en GEDCOM-fil.

Med detta kommando kan du återställa en fullständig databas från en GEDCOM-fil. När du väljer det här kommandot, frågar LifeLines efter namnet på GEDCOM-filen. Det här kommandot kan också användas för att importera data från en GEDCOM-fil till en befintlig databas. När LifeLines utför det här kommandot, läser det först in hela GEDCOM-filen, och kontrollerar att den är giltig. Om det finns problem med filen, så beskriver LifeLines dessa och skriver dem till filen err.log, och lägger inte till några poster i databasen. Om det inte finns några problem, så lägger LifeLines till alla funna poster i filen till databasen (endast rubrik- och avslutningsposterna tas bort).

k Finn nyckelvärde för en person.

Detta kommando finner det interna nyckelvärdet för en person.

i Identifiera en person via nyckelvärde.

Detta kommando identifierar vilken person som har ett visst internt nyckelvärde.

d Visa databasstatistik.

Detta kommando ger en summering av innehållet i den aktuella databasen. Det visar antalet person-, familje-, käll-, händelse-, och andra poster i databasen.

m Visa minnesstatistik.

Detta kommando används av utvecklaren för felsökning.

e Redigera platsförkortningsfilen.

Detta kommando ger dig möjlighet att redigera platsförkortningsfilen. Denna fil definierar de förkortningar som används av LifeLines när det skapar listor över personer skapas för dig att välja från. Raderna i filen har formatet:
ord:förk
	
, där ord är ett ord som ska förkortas, och förk är dess förkortning. Ordet och dess förkortning separeras med ett kolon. Till exempel:

Exempel 9. Exempel på användning av förkortningar

Connecticut:Conn.
Massachusetts:Mass.
Nova Scotia:N.S.

När LifeLines skapar listor över personer för dig att välja från, eftersöks den sista komponenten i vissa PLAC-rader, och om den komponenten återfinns, ersätts den med dess förkortning.

o Redigera fil för användarinställningar.

Med detta kommando kan du redigera filen med användarinställningar. Filen med användarinställningar är en post som lagras i databasen som innehåller de inställningar som är valbara för användaren. Varje inställning har ett namn och ett strängvärde. Varje rad i inställningsfilen har formatet:
inställning=värde
där inställning är namnet på en inställning och värde är strängvärdet för inställningen. Om värdet är mer än en rad långt, så måste det sista tecknet vara ett backstreck. Man kan också använda specialtecknen \n and \t från version 3.0.7 och framåt (för att representera en radmatning respektive ett tabbsteg). Dessa (\n och \t) är i första hand avsedda för användning i anpassade postmallar. I version 3.0.14 finns det 39 inställningar. Lägg märke till att alla dessa också kan anges i konfigurationsfilen, för att gälla i alla databaser, men om de finns angivna på båda ställena, så har inställningen i databasen (tabell med användarinställningar) företräde. För mer information, se exempelkonfigurationsfilen; varje inställning föregås av en kortfattad förklaring.

Listan med inställningar återfinns i avsnittet "System- och användaregenskaper" nedan.

Om du till exempel skulle vilja ersätta den förvalda personpostmallen med följande:

Exempel 10. Exempel på att ersätta den förvalda personpostmallen


  0 INDI
  1 NAME //
  1 SEX
så redigerar du filen med användarinställningar till att innehålla:

Exempel 11. Exempel på ersatt förvald personpostmall

INDIREC=0 INDI\
  1 NAME //\
  1 SEX

eller, med användning av kontrolltecknet \n för att hålla inställningen på en rad:

Exempel 12. Exempel på ersatt enradig förvald personpostmall

INDIREC=0 INDI\n1 NAME //\n1 SEX

q Återgå till huvudmenyn.

Detta kommando tar dig tillbaka till huvudmenyn.


FEL VID IMPORT

Fel som uppkommit under GEDCOM-import loggas till en fil, som har det förinställda namnet errs.log.

Ogiltig NAME-syntax.

En NAME-post på nivå ett måste ha ett värde, och värdet får inte vara en pekare, och får inte ha fler snedstreck än två.

Familjen %s har en felaktig nyckel.

Varje FAM-post måste ha ett xref-värde som börjar med bokstaven F. (Xref är bokstäverna mellan "0" och "FAM".)

Personen som definieras här saknar namn.

Varje INDI-post måste ha minst en NAME-post på nivå 1, om konfigurationsvalet RequireNames är icke-noll.

Personen %s har en felaktig nyckel: hoppas över.

Varje INDI-post måste ha ett xref-värde som börjar med bokstaven I. (Xref är bokstäverna mellan "0" och "INDI".)

Personen %s är definierad mer än en gång: hoppas över.

Inget Xref-värde för en INDI får återanvändas. (Xref är bokstäverna mellan "0" och "INDI".)

Familjen som definieras här har ingen nyckel.

Varje FAM-post måste ha ett xref-värde. (Xref är bokstäverna mellan "0" och "FAM".)

Personen som definieras här har ingen nyckel: hoppas över.

Varje INDI-post måste ha ett xref-värde. (Xref är bokstäverna mellan "0" och "INDI".)

Denna rad har ett nivånummer som är för stort.

En barnnivå måste vara ett högre än dess föräldranivå.


HANTERA KÄLL-, HÄNDELSE- OCH ANVÄNDARDEFINIERADE POSTER

LifeLines stödjer käll-, händelse- och andra, användardefinierade typer av poster. Du kan komma åt dessa funktioner på två sätt: Antingen via menyvalet x från huvudmenyn, eller via kommandon i person- och familjefönstren. Den första metoden är kanske mest praktisk när du enbart arbetar med dessa typer av poster. Den andra gör det lättare att arbeta med källposter, händelseposter och användardefinierade poster parallellt med dina person- och familjeposter; det här kan vara användbart till exempel när du vill skapa referenser från dina person- och familjeposter till dina käll-, händelse- och användardefinierade poster allt eftersom du skapar dem, och för att se och redigera poster som du har lagt in referenser till från en person- eller familjepost.

Om du väljer den första av de två metoderna som beskrevs ovan visar LifeLines följande meny:

Vilken funktion vill du använda?
  s  Bläddra i källposter
  e  Bläddra i händelseposter
  x  Bläddra i övriga posttyper
  1  Lägg till en källpost i databasen
  2  Redigera källpost i databasen
  3  Lägg till en händelsepost i databasen
  4  Redigera händelsepost i databasen
  5  Lägg till en post av övrig typ i databasen
  6  Redigera en post av övrig typ i databasen
  q  Återgå till huvudmenyn
Om du använder den andra varianten (från person- och familjefönstren), så har du tillgång till följande sex kommandon. De första tre beskrivs gemensamt med sina motsvarigheter i x-menyn (de gör mestadels, men inte helt och hållet, samma saker); de sista tre har separata beskrivningar:

   %s  Lägg till källa
   %e  Lägg till händelse
   %o  Lägg till övrig
 

   $s  Lista källor
   $n  Lista notiser
   $$  Lista referenser
 

Stödet för källposter, händelseposter och användardefinierade poster i LifeLines är fortfarande under utveckling. Till exempel kan man inte söka efter källposter via REFN-värde, eller ta bort dem.

s Bläddra i källposter.

Här visas en nummersorterad lista över alla källposter, där REFN-värde, titel och författare visas för varje post. Ur denna lista kan man välja en post för redigering.

e Bläddra i händelseposter.

Här visas en nummersorterad lista över alla händelseposter. För närvarande visas ingen information om händelseposterna. (Förslag om hur händelser kan summeras välkomnas.) Härifrån kan man välja en post för redigering.

x Bläddra i övriga posttyper.

Här visas en nummersorterad lista över alla användardefinierade poster, där informationen på 0-nivåraden visas som summering. Härifrån kan man välja en post för redigering.

1 Lägg till en källpost i databasen.

Denna operation (eller, alternativt, %s från person-, familj- eller assistentfönstret) används för att lägga till en ny källpost i databasen. LifeLines skapar en mall för en källpost och placerar dig i textredigeraren för redigering av mallen. Den förinställda mallen ser ut så här:

  0 SOUR
  1 REFN
  1 TITL Title
  1 AUTH Author

Ändra inte raden 0 SOUR. I övrigt får du redigera den här posten som du vill. Raden 1 REFN är en speciell rad som du kan använda för att ge källposten ett symboliskt namn för att hänvisa till källposten. Se avsnittet om att använda REFN-värden. Eftersom många källor har en titel och en författare, så finns dessa rader i den förinställda mallen. Du kan justera källmallen via användarinställningen SOURREC (antingen på databasnivå, via menyvalet user options, eller globalt, i din konfigurationsfil). Här kan du se hur jag förde in en av källposterna i min databas:

Exempel 13. Exempel på en källpost


  0 SOUR
  1 REFN jcw
  1 TITL The Wetmore Family of America, and its Collateral Branches: with
    2 CONT Genealogical, Biographical, and Historical Notices
  1 AUTH James Carnahan Wetmore
  1 PUBL
    2 DATE 1861
    2 PLAC Albany, New York
    2 INST Munsell and Rowland
    2 ADDR 78 State Street

Kommandot "lägg till källa" i x-menyn motsvarar kommandot %s, som finns tillgängligt från person- eller familjefönstret, i fråga om att skriva in källposten, men när man sparat källposten, finns det en signifikant skillnad, i det att följande prompt därefter visas (dessutom visas nu nyckelvärdet för den nya posten i statuslisten):


Välj något av följande alternativ: (1/4)
  1: Lägg in korsref automatiskt längst ned i aktuell post.
  2: Redigera aktuell post nu för att lägga till korsref manuellt.
  3: Bläddra i ny post (utan att lägga till korsref).
  4: Återgå till aktuell post (utan att lägga till korsref) 

 Kommandon:   j Flytta ned   k Flytta upp   i Välj   q Avsluta

De fyra valmöjligheterna utför följande aktiviteter:

1: LifeLines lägger till en referens till den nya källposten längst ned i den person- eller familjepost som visades i fönstret när du begärde att LifeLines skulle skapa en ny källpost.

2: LifeLines kommer att öppna den person- eller familjepost som visades i fönstret när du begärde att LifeLines skulle skapa den nya källposten, så att du manuellt kan lägga in en referens till den nya källposten (till exempel som en källreferens till en händelse för personen (familjen) som du tänker föra in).

3: LifeLines ger dig möjlighet att bläddra i din källpost (och eventuellt åter öppna den för redigering).

4: Du återvänder till den person- eller familjepost som visades i fönstret när du begärde att LifeLines skulle skapa den nya källposten. Ingen referens läggs in till den nya posten.

2 Redigera källpost i databasen.

Använd den här operationen för att redigera en befintlig källpost i databasen. När du väljer denna operation ber LifeLines dig att identifiera en källa:

Vilken källpost vill du redigera?
skriv in nyckel eller refn:

Identifiera en källa genom att skriva in dess nyckelvärde, med eller utan det inledande S-et, eller genom att skriva in dess REFN-värde. LifeLines hämtar posten, och placerar dig i redigeraren med posten.

3 Lägg till en händelsepost i databasen.

Med den här operationen (eller, alternativt, %e från person-, familj- eller assistentfönstret) läggs en ny händelsepost till i databasen. LifeLines skapar en mall för en händelsepost, och placerar dig i textredigeraren för redigering av mallen. Den förinställda mallen är:

0 EVEN
  1 REFN
  1 DATE
  1 PLAC
  1 INDI
    2 NAME
    2 ROLE
  1 SOUR

Du kan justera händelsemallen via användarinställningen EVENREC (antingen på databasnivå, via menyvalet user options, eller globalt, via konfigurationsfilen).

Ändra inte raden 0 EVEN. I övrigt får du redigera den här posten som du vill. Raden 1 REFN ger dig möjlighet att ge händelseposten ett symboliskt namn om du vill hänvisa till den här händelsen från andra poster. Se avsnittet om att använda REFN-värden. Den förinställda mallen föreslår att en händelsepost ska innehålla ett datum, en plats, och hänvisar till personer med hänseende till den roll de haft vid händelsen. Det finns mycket mindre erfarenheter med händelsebaserad GEDCOM än med vanlig person- och familjebaserad. Du kanske till och med undrar vad det finns för behov av händelseposter, när man helt enkelt kan stoppa undan händelser i person- och familjeposter. Detta är ett ämne som kan komma att täckas i ett appendix.

Kommandot "lägg till en händelsepost i databasen" i x-menyn motsvarar kommandot %e, som finns tillgängligt från person- eller familjefönstret, i fråga om att skriva in källposten, men när man sparat händelseposten, finns det en signifikant skillnad, i det att följande prompt därefter visas (dessutom visas nu värdet för den nya posten i statuslisten):


Välj något av följande alternativ: (1/4)
  1: Lägg in korsref automatiskt längst ned i aktuell post.
  2: Redigera aktuell post nu för att lägga till korsref manuellt.
  3: Bläddra i ny post (utan att lägga till korsref).
  4: Återgå till aktuell post (utan att lägga till korsref) 

 Kommandon:   j Flytta ned   k Flytta upp   i Välj   q Avsluta

De fyra valmöjligheterna utför följande aktiviteter:

1: LifeLines lägger till en referens till den nya händelseposten längst ned i den person- eller familjepost som visades i fönstret när du begärde att LifeLines skulle skapa en ny händelsepost.

2: LifeLines kommer att öppna den person- eller familjepost som visades i fönstret när du begärde att LifeLines skulle skapa den nya händelseposten, så att du manuellt kan lägga in en referens till den nya händelseposten.

3: LifeLines ger dig möjlighet att bläddra i din händelsepost (och eventuellt åter öppna den för redigering).

4: Du återvänder till den person- eller familjepost som visades i fönstret när du begärde att LifeLines skulle skapa den nya händelseposten. Ingen referens läggs in till den nya posten.

4 Redigera händelsepost i databasen.

Använd den här operationen för att redigera en befintlig händelsepost i databasen. När du väljer den här operationen ber LifeLines dig att identifiera en händelse:

Vilken händelsepost vill du redigera?
skriv in nyckel eller refn:

Du identifierar en händelsepost genom att skriva in dess nyckelvärde, med eller utan det inledande E-t, eller genom att skriva in dess REFN-värde. LifeLines hämtar posten och placerar dig i redigeraren med posten.

5 Lägg till en post av övrig typ i databasen.

Den här operationen (eller, alternativt, %o från person-, familj- eller assistentfönstret) lägger till en ny, användardefinierad post i databasen. LifeLines skapar en mall och placerar dig i textredigeraren för att redigera mallen. Den förinställda mallen är:

0 XXXX
1 REFN

Ersätt XXXX med den etikett som du valt för den nya posten. Du kan välja vilken etikett du vill, förutom INDI, FAM, SOUR och EVEN. Till exempel, om du har information om de skepp som dina nordamerikanska släktingar anlände på, så kommer du att ha poster om de skeppen i din databas; etiketten SHIP är nästan självskriven för de posterna. Raden 1 REFN ger dig möjlighet att ge den här posten ett symboliskt namn som du kan använda när du vill hänvisa till den från andra poster. Se avsnittet om att använda REFN-värden. Du kan justera mallen för användardefinierade poster via användarinställningen OTHR (antingen på databasnivå, via menyvalet user options, eller globalt, via konfigurationsfilen).

Kommandot "lägg till en post av övrig typ i databasen" i x-menyn motsvarar kommandot %o, som finns tillgängligt från person- eller familjefönstret, i fråga om att skriva in den användardefinierade posten, men när man sparat posten, finns det en signifikant skillnad, i det att följande prompt därefter visas (dessutom visas nu nyckelvärdet för den nya posten i statuslisten):


Välj något av följande alternativ: (1/4)
  1: Lägg in korsref automatiskt längst ned i aktuell post.
  2: Redigera aktuell post nu för att lägga till korsref manuellt.
  3: Bläddra i ny post (utan att lägga till korsref).
  4: Återgå till aktuell post (utan att lägga till korsref).

 Kommandon:   j Flytta ned   k Flytta upp   i Välj   q Avsluta

De fyra valmöjligheterna utför följande aktiviteter:

1: LifeLines lägger till en referens till den nya användardefinierade posten längst ned i den person- eller familjepost som visades i visningsfönstret när du begärde att LifeLines skulle skapa en ny användardefinierad post.

2: LifeLines kommer att öppna den person- eller familjepost som visades i fönstret när du begärde att LifeLines skulle skapa den nya posten, så att du manuellt kan lägga in en referens till den nya posten (kanske som en referensnotis till en händelse som du planerar att lägga in).

3: LifeLines ger dig möjlighet att bläddra i din användardefinierade post (och eventuellt åter öppna den för redigering).

4: Du återvänder till den person- eller familjepost som visades i fönstret när du begärde att LifeLines skulle skapa den nya användardefinierade posten. Ingen referens läggs in till den nya posten.

6 Redigera en post av övrig typ i databasen.

Använd den här operationen för att redigera en befintlig, användardefinierad post i databasen. När du väljer den här operationen ber LifeLines dig att identifiera posten:

Vilken post vill du redigera?
skriv in nyckel eller refn:

Du identifierar en post genom att skriva in dess nyckelvärde, med eller utan det inledande X:et, eller genom att skriva in dess REFN-värde. LifeLines hämtar posten och placerar dig i textredigeraren med posten.

$s List sources

Detta kommando finns tillgängligt i person- och familjefönstren. Det tar fram en lista över alla källposter som finns refererade i den person- eller familjepost som visas för tillfället, visade i den ordning som de är inlagda i person/familjeposten, och där REFN-värde, titel och författare visas för varje post. Man kan välja en post ur listan för visning i assistentfönstret (och eventuellt redigera den därifrån).

$n List notes

Detta kommando finns tillgängligt i person- och familjefönstren. Det tar fram en lista över alla notisposter som finns refererade i den person- eller familjepost som visas för tillfället, visade i den ordning som de är inlagda i person/familjeposten, och där REFN-värde, titel och författare visas för varje post. Man kan välja en post ur listan för visning i assistentfönstret (och eventuellt redigera den därifrån).

$$ List all references

Detta kommando finns tillgängligt i person- och familjefönstren. Det tar fram en lista över alla poster som finns refererade i den person- eller familjepost som visas för tillfället, visade i den ordning som de är inlagda i person/familjeposten, och där REFN-värde, titel och författare visas för varje post. Man kan välja en post ur listan för visning i assistentfönstret (och eventuellt redigera den därifrån).


FAMILJESTRUKTUR OCH ATT SLÅ SAMMAN PERSONER OCH FAMILJER

LifeLines 3.0.2 har mjukat upp de flesta av restriktionerna för familjestrukturer som fanns i tidigare versioner. Till exempel: En familjepost kan innehålla fler än en förälder eller maka/make av samma kön; en person kan vara barn i fler än en familj. Det här är ett kontroversiellt spörsmål. En del användare menar att familjerelationer bör implicera biologiskt släktskap, och att alla andra relationer ska hanteras på andra sätt. Andra menar att icke-traditionella familjer (valfritt antal makar/föräldrar av valfritt kön) bör tillåtas, och att barn kan vara medlemmar av fler än en familj (d. v. s. en naturlig familj och en adoptivfamilj). LifeLines tar inte längre ställning i den här frågan; du kan välja fritt hur du vill strukturera dina familjer; operationen som lägger till hustrur och barn kontrollerar inte längre efter icke-traditionella arrangemang. Det är möjligt att en framtida utgåva kommer att inkludera en användarinställning där man kan antingen ta bort eller be om bekräftelse för icke-traditionella relationer.

LifeLines tillhandahåller funktioner för att slå samman personer och slå samman familjer. Funktionen slå samman personer finns tillgänglig från tvåpersonsläget, och funktionen slå samman familjer finns tillgänglig från tvåfamiljsläget. Du bläddrar fram till de två personer eller familjer som du vill slå samman och använder därefter kommandot j. Sammanslagning är en nödvändighet när du upptäcker att två eller flera personposter, eller två eller flera familjeposter, representerar samma person respektive familj.

I versioner av LifeLines tidigare än 3.0.2 krävdes det att personer och familjer mötte vissa kriterier innan de kunde slås samman. Kriterierna säkerställde att personerna och familjerna skulle passa in i en traditionell familjestruktur. I och med att struktureringsreglerna har mjukats upp, har också restriktionerna för sammanslagning tagits bort. Numera är det möjligt att skapa icke-traditionella relationer genom att slå samman traditionella personer och/eller familjer. Till exempel, om du slår samman två personer som råkar vara barn i två olika familjer, så kommer personen som resulterar av sammanslagningen att bli barn i båda familjerna. Om du enbart vill ta med traditionella relationer i din databas kan det hända att du måste göra ytterligare förändringar i relationer efter att du har gjort en sammanläggningsoperation.


LÄNKA SAMMAN POSTER OCH ANVÄNDA FUNKTIONEN "REFN"

Poster i en LifeLinesdatabas kan hänvisa till andra poster via korsreferenslänkar. De anlänkade referenserna sköts direkt av LifeLines genom operationer som återfinns i menyerna för de olika bläddringslägena. Dessa referenser avser dels länkarna från personer till familjer (1 FAMC och 1 FAMS), dels länkarna från familjer till personer (1 HUSB, 1 WIFE och 1 CHIL). Eftersom det är LifeLines självt som sköter dessa länkar, så är det inte tillåtet för dig att ändra dessa rader när du redigerar poster. Det finns till synes några undantag till den här regeln. Exempelvis får du ändra ordningen på rader av typen 1 CHIL i en familjepost för att ändra ordningen mellan barnen, och du får ändra ordningen på rader av typen 1 FAMS i en personpost för att ändra ordningen mellan de familjer som personen var make eller förälder i. Dessa operationer är tillåtna eftersom de inte påverkar vilka personposter som hänvisar till vilka familjeposter och vice versa.

Förutom de anlänkar som sköts av LifeLines, så kan du lägga in egna länkar i poster. Det förmodligen vanligaste exemplet på detta är att hänvisa till en händelse från en personpost genom en hänvisning till källnotisen för händelsen. Till exempel:

Exempel 14. Exempel på att hänvisa till händelser från en personpost


0 @I23@ INDI
  1 NAME Thomas/Whitmore/
  1 BIRT
    2 DATE about 1615
    2 PLAC England
    2 SOUR @S3@
...
0 @S3@ SOUR
  1 REFN cat
  1 TITL New England Marriages Prior to 1700
  1 AUTH Clarence Almon Torrey
...

Raden 2 SOUR @S3@ i personposten hänvisar till källposten. LifeLines tillåter vilken specifik struktur som helst (i det här fallet en födelsehändelse) att hänvisa till en annan post. Det är inte möjligt att hänvisa till ett specifikt ställe inom en annan post, även om det eventuellt kommer att stödjas längre fram.

I det här exemplet underförstås det att du, när du länkar en post till en annan, känner till nyckelvärdet för målposten (@S3@ i exemplet). Det här är inte önskvärt eftersom de interna nyckelvärdena kan ändras när poster exporteras och importeras från en databas till en annan.

Eftersom de interna nyckelvärdena inte är permanenta, tillåter LifeLines att du tilldelar en permanent, användardefinierad nyckel till en post i databasen, med hjälp av en 1 REFN-rad. Värdet för den här raden är en sträng som du väljer som permanent nyckelvärde för posten. När du lägger till en länk till en post som har ett användarbestämt REFN-värde, så kan du använda det värdet istället för det interna nyckelvärdet. Till exempel, när du lägger in personen i det föregående exemplet, kan du redigera den nya posten som följer:

Exempel 15. Exempel på att lägga in en ny person


  0 INDI
  1 NAME Thomas/Whitmore/
  1 BIRT
    2 DATE about 1615
    2 PLAC England
    2 SOUR <cat>

Istället för att använda det egentliga nyckelvärdet för källan, @S3@, så används REFN-värdet cat. REFN-värdet måste omges av vinkelparenteser när de används på detta sätt. LifeLines ersätter automatiskt REFN-länken med motsvarande internt nyckelvärde när posten lagrats i databasen.

REFN-värdet kan också användas när vid sökning efter efter person-, käll-, händelse- och användardefinierade poster. Du bör inte lägga till fler än en REFN-rad i en post, och alla REFN-värden bör vara unika.


System- och användaregenskaper

Det finns ett antal egenskaper som kan anges för att anpassa LifeLines beteende. Dessa egenskaper kan anges i anpassningsfiler för LifeLines, i varje LifeLinesdatabas eller i några fall genom miljövariabler.

LifeLines konfigurationsfiler letas först efter i katalogen som angivits i miljövariabeln HOME, med antagande att den ställts in, och därefter i den aktuella katalogen. Namnet på konfigurationsfilen är .linesrc på UNIX- eller linuxsystem och lines.cfg på windowssystem.

En konfigurationsfil kan också anges genom att använda flaggan -C till LifeLines eller genom att definiera miljövariabeln "LLCONFIGFILE" med ett värde innehållande den fullständiga sökvägen till konfigurationsfilen. Om ingendera av dessa mekanismer används, så letar inte LifeLines efter en konfigurationsfil någon annanstans. Om flaggan -C anges, så ignoreras miljövariabeln LLCONFIGFILE, om den är definierad. Om varken flaggan -C eller miljövariabeln LLCONFIGFILE anges, så används konfigurationfilsnamnet som nämnts ovan. En konfigurationsfil letas efter i din hemkatalog och läses in, om den finns, och därefter läses en konfigurationsfil in, om den finns i den aktuella katalogen. Värdena i den här andra filen används för att ersätta eller läggas till värdena som hittats i den första filen.

När LifeLines letar efter en egenskap, letar det efter den som följer:

kommandoradstabell

First, LifeLines letar i kommandoradstabellen. Denna tabell innehåller värden som har angetts genom flaggan -I för LifeLines.

databastabell

Därefter letar LifeLines i databastabellen. Denna tabell innehåller de värden som har lagrats i den aktuella databasen.

global tabell

Därefter letar LifeLines i den globala tabellen. Denna tabell innehåller de värden som hittats vid inläsning av konfigurationsfilerna.

miljötabell

Slutligen letar LifeLines i miljötabellen. Denna tabell innehåller de värden som hittats i miljövariablerna LLPROGRAMS, LLREPORTS, LLARCHIVES, LLDATABASES, LLNEWDBDIR, and LLEDITOR.

Egenskaper benämns grupp.undergrupp eller grupp.egenskap, eller till och med enbart egenskap. Följande nycklar finns tillgängliga för tillfället:

LLPROGRAMS

LLPROGRAMS är sökvägen för LifeLines rapportgenererande och övriga program.

LLREPORTS

LLREPORTS används för att välja en katalog där alla genererade rapporter och programutdtata kommer att placeras.

LLARCHIVES

LLARCHIVES används för att välja en katalog där alla säkerhetskopierade databasfiler kommer att lagras.

LLDATABASES

LLDATABASES är en lista med kataloger som innehåller databaskataloger som används för att finna själva databaskatalogerna.

LLNEWDBDIR

LLNEWDBDIR är en enda katalog där nya databaser som angivits utan sökvägar kommer att skapas. Detta är praktiskt för användare som generellt placerar alla sina databaser under en enda gemensam katalog. directory.

LLEDITOR

Upphäver den förvalda textredigeraren.

Information om kodning:

För följande parametrar relaterade till kodning, är värdena en sträng som anger kodning inställda för användning i data. Speciell behandling tillhandahålls för UTF-8, vilket kan anges som "UTF-8", "utf-8" eller "65001". (Det officiella, och föredragna, namnet är UTF-8.)

GedcomCodeSet

Anger den förvalda kodningen att använda vid behandling av GEDCOM-filer. Det finns faktiskt tre egenskaper. GedcomCodeSetOut och GedcomCodeSetIn kan användas för att ange kodning för utmatning eller inmatning. Om endera av dessa inte är angiven, så används GedcomCodeSet. De flesta GEDCOM-filer bör innehålla en kodningsegenskap, så detta är vanligen inte relevant vid inläsning av en GEDCOM-fil, såvida inte GEDCOM-filen saknar en kodningsegenskap. Detta används, emellertid, när en GEDCOM-fil skrivs ut. OBS: Detta ignoreras om databasen inte har någon intern kodning angiven.

EditorCodeSet

Anger kodning att använda vid redigering. Det finns egentligen tre egenskaper. EditorCodeSetOut och EditorCodeSetIn kan användas för att ange kodning för utmatning eller inmatning. Om endera av dessa inte är angiven, så används EditorCodeSet. Med denna egenskap kan LifeLines konvertera från sin interna kodning till den som du använder i din redigerare, så detta är viktigt när din redigerare inte använder samma kodning som din databas. OBS: Detta ignoreras om databasen inte har någon intern kodning angiven.

ReportCodeSet

Anger kodning att använda för rapporter. Det finns egentligen tre egenskaper. ReportCodeSetOut och ReportCodeSetIn kan användas för att ange kodning för utmatning eller inmatning. Om endera av dessa inte har angivits, så används ReportCodeSet. Nyligen skapade rapporter kan faktiskt ange sin kodning, i vilket fall detta inte används, men för rapporter där det inte inkluderas någon angivelse av kodning, anger ReportCodeSetIn (eller ReportCodeSet) hur rapporten kommer att förstås. I endera fallet, kommer utmatningen från ett rapportprogram skrivas i den kodning som angivits i ReportCodeSetOut (eller ReportCodeSet). OBS: Detta ignoreras om databasen inte har någon intern kodning angiven.

LongDisplayDate

Sex kommaseparerade siffror. Anger formatet för dagar, månader, år, datumformat, eraformat och komplext format. Om strängen inte innehåller sex kommaseparerade siffror sätts alla format till 0, utom datumformat som sätts till 14. Dessa format används av LifeLines för att visa datum i långt format.

LongDisplayDatePic

En anpassad åmd-datumbild. En sträng i vilken %y, %m och %d kommer att konverteras till motsvarande år, månad och dag. Denna bild används av LifeLines för att visa datum i långt format.

ShortDisplayDate

Sex kommaseparerade siffror. Anger formatet för dagar, månader, år, datumformat, eraformat och komplext format. Om strängen inte innehåller sex kommaseparerade siffror sätts alla format till 0, utom datumformat som sätts till 14. Dessa format används av LifeLines för att visa datum i kort format.

ShortDisplayDatePic

En anpassad åmd-datumbild. En sträng i vilken %y, %m och %d kommer att konverteras till motsvarande år, månad och dag. Denna bild används av LifeLines för att visa datum i kort format.

LocaleDir

körtidsangivelse av katalog för lokal

NewDbProps

om angiven, egenskaper att lägga till i en nyss skapad databas. Strängen har formen "egenskap1=värde1\negenskap2=värde2".

IllegalChar

Tydligen inte använd för närvarande.

DenySystemCalls

Om satt till en ett icke-nollvärde, så avaktiveras användningen av funktionen system.

UiLocaleCollate

sorteringssekvens för användargränssnitt

UiLocaleMessages

lokal för meddelanden i användargränssnitt

RptLocaleCollate

sorteringssekvens för rapporter

RptLocaleMessages

lokal för rapportmeddelanden

ShortOmitString

Om definierad, ersätter denna sträng tecken på slutet av en händelse som skrivs ut.

DisplayKeyTags

Om satt till 1, så kommer person- och familjenycklar föregås av ett i respektive f när de visas på skärmen.

AnnotatePointers

Om satt till ett, så kommer en beskrivande kommentar läggas till pekare vid redigering av familje- eller individposter, för att hjälpa till att identifiera vem som hänvisas till. Dessa etiketter tas bort när redigeringen avslutas, och lagras inte i databasen.

TTPATH

lista över kataloger att leta i efter filer med teckenöversättningstabeller (*.tt).

InputPath

sökväg att leta i vid inläsning av GEDCOM-filer

INDIREC

Förvald mall att använda närhelst en ny person skapas. Om ej angiven, så används en sammanläggning av det följande:

"0 INDI\n1 NAME Fname/Surname\n1 SEX MF\n"
"1 BIRT\n  2 DATE\n  2 PLAC\n"
"1 DEAT\n  2 DATE\n  2 PLAC\n1 SOUR\n"

FAMRECBODY

Förvald mall att använda närhelst en ny familj skapas. Om ej angiven, så används det följande:

"1 MARR\n  2 DATE\n  2 PLAC\n  2 SOUR\n"
Obs: Till skillnad från de övriga, bör inte denna inkludera FAM-etiketten på nivå 0.

SOURREC

Förvald mall att använda närhelst en ny källa skapas. Om ej angiven, så används det följande:

"0 SOUR\n1 REFN\n1 TITL Titel\n1 AUTH Författare"

EVENREC

Förvald mall att använda närhelst en ny händelse skapas. Om ej angiven, så används det följande:

"0 EVEN\n1 REFN\n1 DATE\n1 PLAC\n1 INDI\n  2 NAME\n  2 ROLE\n1 SOUR"

OTHR

Förvald mall att använda närhelst en användardefinierad post skapas. Om ej angiven, så används det följande:

"0 XXXX\n1 REFN"

HDR_SUBM

sträng att använda vid skrivning av GEDCOM-filer för SUBM. Det förvalda är

"1 SUBM".

HDR_GEDC

Sträng som innehåller GEDC-blocket för rubrikposten vid export till GEDCOM. Det förvalda är

"1 GEDC\n2 VERS 5.5\n2 FORM LINEAGE-LINKED".

HDR_CHAR

Sträng som innehåller CHAR-blocket för rubrikposten vid export till GEDCOM. Det förvalda är

"1 CHAR ASCII".

ReportLog

namn på fil att skriva fel i rapportprogram till, om ej angiven använd standardutfönstret.

CrashLog_llexec

fil att skriva kraschlogg till för llexec.

CrashLog_llines

fil att skriva kraschlogg till för llines.

LLTTEXPORT

katalog att skriva teckenöversättningstabeller till. Det förvalda är den aktuella mappen.

ImportLog

Var fel som påträffas vid import av en GEDCOM-fil ska skrivas. Det förvalda är errs.log

gettext.path

för Windows, om angiven, sökväg för att (åter)läsa dll för gettext

iconv.path

för Windows, sökväg för dynamisk länkning till gettext och iconv

user.fullname

Fullständigt namn för aktuell användare. Om ej hittad som egenskap hämtas den, om möjligt, från systemet.

user.email

E-postadressen för aktuell användare. Om ej hittad som egenskap hämtas den, om möjligt, från systemet.

user.address

Postadress för aktuell användare.

user.url

URL till användarens hemsida.

lifelines-3.0.61/docs/ll-userguide.txt0000700002540200244210000000005310656417421020037 0ustar prappDomain Users Denne side er hosted af Wannafind.dk lifelines-3.0.61/docs/ll-userguide.xml0000700002540200244210000050761010656377050020036 0ustar prappDomain Users ]> <application>LifeLines</application> Documentation Thomas T. Wetmore IV LifeLines Version &llversion; Users' Manual INTRODUCTION LifeLines is a genealogy program that runs on UNIX systems. It maintains genealogical records (persons, families, sources, events and others) in a database, and generates reports from those records. There are no practical limits on the number of records that can be stored in a LifeLines database, nor on the amounts or kinds of data that can be kept in the records. LifeLines does not contain built-in reports. Instead it provides a programming subsystem that you use to program your own reports and charts. The programming subsystem also lets you query your databases and process your data in any way. LifeLines uses the terminal independent features of UNIX to provide a screen and menu based user interface. LifeLines is a non-commercial, experimental system that is use at your own risk software. I developed LifeLines for personal use and shared it with friends. Enough of a demand arose through word of mouth and internet, that I have made the LifeLines source code and other information freely available under an MIT-style license reproduced below: Copyright (c) 1991-1999 Thomas T. Wetmore IV Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. The source code, documentation and a collection of report scripts are located at http://lifelines.sourceforge.net/. You can also find binary kits for some platforms. If you are a developer and wish to contribute enhancements, please sign up on sourceforge and contact Marc Nozell who is currently managing the project. Prior to 1999, Lifelines was available on the ftp sites, ftp.cac.psu.edu and hoth.stsci.edu. Please use sourceforge instead. Other sources of information include: lifelines homepage http://lifelines.sourceforge.net/. lifelines FAQ http://lifelines.sourceforge.net/faq.html. LINES-L mailing list http://listserv.nodak.edu/cgi-bin/wa.exe?A0=lines-l. INSTALLATION You may be installing LifeLines from a source distribution package or as an executable program already prepared for your UNIX (or MS-Windows) system. The source distribution comes with the readme, build script and make files necessary to build LifeLines. Follow the instructions in the readme file. A number of executables are built which can be put it in a directory in your execution path. If you get the program in executable form, follow whatever instructions came with it. The following executables are included: btedit a low-level editor for advanced debugging of broken LifeLines databases. dbverify a utility program to verify LifeLines databases. llexec a stripped down version of the LifeLines program, without the user interface for non-interactive processing of report programs llines the LifeLines program with full user interface The source distribution package also contains documentation and some LifeLines programs to demonstrate the capabilities of the report language. Included with these in the reports directory is a brief overview of the reports in the file index.html. STARTING <application>LIFELINES</application> AND CREATING DATABASES You normally start LifeLines with the command: llines database where database is the name of a LifeLines database. If LifeLines finds the database, LifeLines opens the database and takes you to the program's main menu. If the database doesn't exist, LifeLines asks whether it should create it, and if you answer yes, does so. You may create any number of databases, but only one can be accessed by LifeLines at a time. The full command line interface to LifeLines is: llines [database] The following options are supported: -C Specify configuration file location (e.g. -C/home/bill/lifelines/.linesrc2 ) see the section on System and User Properties below -F Finnish option (only available if so compiled) -I Specify a user property (e.g. -ILLEDITOR=gvim) -a log dynamic memory operation (for debugging) -c supply cache values (eg, -ci400,4000f400,4000 sets direct indi & fam caches to 400, and indirect indi & fam caches to 4000) -d debug mode (signal protection disabled for convenience with breakpoints) -f force open the database - use only in emergency -i open database with immutable access (no protection against other access -- for use on read-only media) -k always show keys (normally keys are suppressed if REFN available) -l lock (-ly) or unlock (-ln) a database for use with read only media (access to a locked database is treated as immutable) -n do not use traditional family rules -o Specify program output filename (eg, -o/tmp/mytests) -r open database with read-only access (protect against other writer access) -t trace function calls in report programs (for debugging) -u specify window size (eg, -u120,34 specifies 120 columns by 34 rows) -w open database with writeable access (protect against other writer or reader access) -x execute a single lifelines report program directly -z Use normal ASCII characters for drawing lines in user interface rather than the vt100 special characters. the option specifies the initial filename to use for output when running reports. It only applies to reports run with the option. This option has no effect on interactively run programs. The option opens the database with read-only access. When in this mode LifeLines will not let you modify the database; no other operations are affected. The option opens the database with writeable access. If the database cannot be opened with the requested mode LifeLines quits immediately. When you open a database with neither the or options, LifeLines first tries to open the database with writeable access; if not possible LifeLines then tries to open the database with read-only access; and if this is not possible LifeLines quits. A LifeLines database may be open simultaneously by any number of programs with read-only access; however, if a database is open by a program with writeable access, then it cannot be opened by any other other program. In rare situations the read/write mode mechanism can fail; when this happens a database may appear unopenable. If this happens use the option to force open the database; this will open the database and reset the mode mechanism. This is a dangerous feature; you can use it to open the same database with writeable access more than once; the results are unpredictable and generally disastrous. The multiuser protection supplied by this reader/writer access mechanism is provided via a flag setting in the database, so both read-only and writeable access actually alter the database (read-only access only alters the value of this flag). For truly read-only access, e.g., for use with read-only media, the best solution is to lock (-ly) the database before copying it to the read-only media. This annotates the database itself as being for immutable access. Alternatively, to use a database already on read-only media and not so annotated, use the immutable (-i) flag. By default lifelines supports a traditional family concept, that is, each family has at most one father and one mother. The -n flag relaxes this restriction. However, not all the code in lifelines supports these relaxations. For example, the default family browse screen will only display two parents, however by switching to one of the gedcom modes of displaying the family you can see all the data. If you don't give the name of a database on the command line, LifeLines will prompt you for it. If the name you supply is an absolute pathname or a relative pathname it is used as the path to the database. If you provided a simple filename and you use the LLDATABASES variable or user options (described later), LifeLines will search for the database in the directories named in the variable; this can be very convenient. If LLDATABASES is not set the filename you enter is looked for in the current working directory. If you would like to choose a database from a list of existing ones, enter a single question mark and press return when LifeLines prompts you for the database name. LifeLines will then display a list of all databases that it can find, and you may select one from the list. INTRODUCTION TO <acronym>GEDCOM</acronym> LifeLines records are stored in GEDCOM format; you organize, edit and maintain your data in this format. GEDCOM is a standard that defines a file format for moving genealogical data between computer systems. LifeLines has adopted this format for structuring the records in its databases. This approach provides a structured yet flexible method for storing all the data you wish to record. There are few restrictions on the format, amount or type of information you may store in a LifeLines database. GEDCOM is defined at two levels. At the syntactic level GEDCOM is a simple set of rules for organizing and structuring data into records, with no concern about the types of records, types or formats of information in the records, or the relationships between records. At the semantic level GEDCOM adds an additional set of rules that specify what record types are allowed, how records must be structured, how data within the records must be identified and formatted, and what specific relationships between the record types are allowed. In principle there can be multiple semantic versions of GEDCOM, though in practice there is only one, lineage-linked GEDCOM. Unfortunately this semantic version of GEDCOM is poorly defined, and every genealogical system has interpreted it in different ways. LifeLines uses GEDCOM primarily at the syntactic level, though it does impose a few of the generally accepted lineage-linked semantic restrictions. This means some important things. It means that you can store all your genealogical data in your LifeLines database, and that you have wide freedom in how you choose your own conventions for structuring and formatting your data. But it also means that the way you store data in your databases can be different from the way that someone else stores their data. This can be a problem if you share data with others or share report programs with other LifeLines users. My recommendation is to use GEDCOM lineage-linking conventions wherever possible. LifeLines does not use forms or screens to guide you through entering or changing data. Instead you use a screen editor and directly edit the data records. This requires you to understand the GEDCOM format, and be able to edit data in GEDCOM format, before you can use LifeLines. The GEDCOM format is quite simple; this introduction will provide all you need to know about GEDCOM in order to use LifeLines. Here is an example GEDCOM person record: <acronym>GEDCOM</acronym> person record 0 @I25@ INDI 1 NAME Thomas Trask /Wetmore/ Sr 1 SEX M 1 BIRT 2 DATE 13 March 1866 2 PLAC St. Mary's Bay, Digby, Nova Scotia 2 SOUR Social Security application 1 NATU 2 NAME Thomas T. Wetmore 2 DATE 26 October 1888 2 PLAC Norwich, New London, Connecticut 2 AGE 22 years 2 COUR New London County Court of Common Pleas 2 SOUR court record from National Archives 1 OCCU Antiques Dealer 1 DEAT 2 NAME Thomas Trask Wetmore 2 DATE 17 February 1947 2 PLAC New London, New London, Connecticut 2 AGE 80 years, 11 months, 4 days 2 CAUS Heart Attack 2 SOUR New London Death Records 1 FAMC @F11@ 1 FAMS @F6@ 1 FAMS @F12@ A GEDCOM record is made up of lines. Each line has a level number and a tag, and most lines have a value following the tag. The first line in every record has a cross-reference index between the level number and the tag. Level numbers allow data to be structured to any degree of detail; lines with higher level numbers expand on lines with lower numbers. Each record begins at level 0, and each deeper level increments the level by one. LifeLines does not restrict the structuring depth. Tags are uppercase (by convention) code words that specify the kind of information on the line or on the higher numbered lines that follow. The information after the tag, if any, is the value of the line. The first line in a record indicates its type. There are four fixed record types in LifeLines databases: person, family, source and event. The first, 0 level line in these records have tags INDI, FAM, SOUR and EVEN, respectively. Besides these record types, you may create your own record types by using any other tag on the 0 level line of a record. The lines that begin records are the only level 0 lines used in LifeLines. Each level 0 line has a cross-reference index between the level number and the tag. This index is the record's internal reference key; other records may refer to this record by using this index. Cross-reference indexes are bracketed by @ characters. The first line in the example record has the INDI tag, identifying it as a person. The cross-reference index value, I25, can be used by other records to refer to this record. The second line in the example has the person's name. Each person record in a LifeLines database must have at least one 1 NAME line, and its value must be in GEDCOM name format. This format allows names to be as long as needed, but the surname, which may be placed anywhere in the name, must be separated from the rest of the name by one or two slashes. For example: Example of NAME formats 1 NAME John/Smith 1 NAME John /Smith/ 1 NAME John/Smith/Jr. The second slash is required only if name elements follow the surname. White space is optional before the first slash and after the second. If you don't know a person's surname, or the person doesn't have a surname, you may use / or // or no slashes at all. For example: Example of searching on NAMEs 1 NAME Mary// 1 NAME Mary/ 1 NAME Mary are all ways to enter a person named Mary with no known surname. A person may have any number, including zero, given names and/or initials. A LifeLines person record may have any number of 1 NAME lines, though the person will be displayed with the first name value only. Persons are indexed under all their names, however, so you will be able to search for persons by any of their names. The next line in the example gives the person's sex. LifeLines doesn't require a 1 SEX line, but you should include it. The value of the line should be M or F if the sex is known; it can be left blank or set to U or ?, say, if not known. A person must have a 1 SEX line with a value of either M or F before he or she can be made a spouse or parent in a family. The example record also contains three events: birth, naturalization, and death. An event begins with a level 1 line whose tag indicates the event type. For example, BIRT is the tag for a birth event. Events usually have at least a 2 DATE and a 2 PLAC line and often a 2 SOUR line. The DATE and PLAC lines give the date and place of the event. The value of a LifeLines DATE line is free format, though LifeLines will try to parse it for specific day, month and year information. The value of a PLAC line is usually a comma-separated list of geopolitical units, starting with the most specific, ending with the most general. The SOUR line indicates the source of information about the event. The SOUR line can be the root of a full description of the source, or the value of the SOUR line can be a cross-reference key that refers to the source record that describes the source. The naturalization event (with tag NATU) shows a few other lines. The 2 NAME line gives the person's name as recorded in the source (only 1 NAME lines must follow GEDCOM format). The 2 AGE line gives the person's age at the time of the event. The 2 COUR line indicates the court where naturalization occurred. The final event is a death event (tag DEAT). The 2 CAUS line gives the cause of death. At the end of the record are three lines that refer to family records. A 1 FAMC line refers to a family record that the person belongs to as a child; its value is the cross-reference index value of that family. A 1 FAMS line refers to a family record that the person belongs to as a spouse or parent. When using LifeLines to edit a person, you will not be able to edit the cross reference values on the 0 INDI, 1 FAMC or 1 FAMS lines; these are maintained by LifeLines. Here is an example family record: Example family record 0 @F6@ FAM 1 HUSB @I25@ 1 WIFE @I26@ 1 MARR 2 DATE 31 March 1891 2 PLAC New London, New London, Connecticut 2 SOUR New London Vital Records 1 CHIL @I27@ 1 CHIL @I17@ The 0 FAM line assigns the family the cross-reference index of F6. The record contains 1 HUSB and 1 WIFE lines that refer to the two spouses/parents. The record also holds a marriage event (tag MARR) and two 1 CHIL lines that refer to two children in the family. When editing family records, you cannot edit the 0 FAM, 1 HUSB, 1 WIFE, or 1 CHIL lines; these are maintained by LifeLines. When you create new records for your database, you are free to invent tags and structure your data in any way you see fit. However, it is good practice to use standard GEDCOM tags and value formats. LifeLines does enforce a small set of conventions that you must obey. Within person records, LifeLines requires that you use 1 NAME and 1 SEX lines with their special meanings and value formats. Though not required, LifeLines assumes that you will use 1 BIRT, 1 DEAT, 1 CHR, and 1 BURI lines for birth, death, baptism and burial events, respectively. In family records, LifeLines assumes you will use the 1 MARR event for marriage events. Within person records, you are not allowed to use 0 INDI, 1 FAMC or 1 FAMS lines, since these are used to maintain linkage information. Within family records, you are not allowed to use 0 FAM, 1 HUSB, 1 WIFE or 1 CHIL lines. The indentation shown in the examples is not part of GEDCOM format. When LifeLines prepares records for you to edit, however, it always indents the records, making them easier to read and understand. You do not need to follow this indentation scheme when you edit the records. Indentation is removed from the data before it is stored in the database. MAIN MENU After LifeLines opens an existing database, or creates a new one, it presents you with the main menu: Please choose an operation: b Browse the persons in the database s Search database a Add information to the database d Delete information from the database p Pick a report from list and run r Generate report by entering report name t Modify character translation tables u Miscellaneous utilities x Handle source, event and other records Q Quit current database q Quit program Select an operation by striking the proper selection letter. The browse operation lets you browse the database and perform many operations on the data. The search operation provides some simple wildcard search capabilities, which lead into browsing particular records. The add operation lets you add new information, and the delete operation removes information. The report operations read report programs and generates output reports. The modify character translation tables operation changes the translation tables. The miscellaneous utilities operation provides such things as backup and restore. The handle source, event and other records operation gives you access to these three record types. The quit operation closes the database and returns to UNIX. The browse operation deserves special mention, because it provides a rich environment for searching, viewing, adding, modifying, merging and deleting information in the database. You will find that you operate from the browsing modes most of the time. The operations are all described in later sections. CODESET After you have created a new database, and before you actually add any data to it, is the time to set the codeset to be used in the database. The codeset (or character encoding, to use precise Unicode terminology) is the decision as to how letters will be represented by the computer. If you have only ever used English letters in computing, you may not have had to encounter this issue, because as it happens, the English letters (a-z and A-Z) are stored numerically in the same fashion in almost all codesets used by computers. However, in the field of genealogy, you are especially likely to meet letters outside of the English alphabet (for example, accented vowels). You have fundamentally three choices as to what codeset to use in your database, listed below from easiest to most powerful. First, you may leave it entirely unspecified. This will give the traditional lifelines behavior. This is really only suitable if either (a), you only use English (ASCII) data, or (b), you work in an environment which entirely uses the same 8-bit codeset (eg, a GNU/Linux box which is all ISO-8859-15), and you only run lifelines in English. If you use any non-English data on MS-Windows, this is not likely to be suitable, because the lifelines screens run in the console, but you are likely to use MS-Windows applications either for editing or for viewing output, and the MS-Windows console uses a different codeset from MS-Windows applications. Also, if you use lifelines in a different language than English, this may not be suitable, because the gettext message catalogs (for non-English interface) will not be converted into your codeset. Second, you may specify a particular 8-bit codeset. Assuming that you have iconv and gettext installed (or you are using the MS-Windows version, which comes with these), you may specify any 8-bit codeset supported by iconv, and iconv supports quite many. A natural choice for Western European languages would be ISO-8859-1, or (for MS-Windows only) CP-1252. With this option, gettext language files will be converted to your codeset. Third, you may specify the use of UTF-8. This is a Unicode encoding, and is by far the most powerful option. In fact, this is the only really convenient way to be able to store, for example, names in English, names in Russian, and names in Greek, all in the same database, in their native scripts (alphabets). In recent versions, lifelines has become more knowledgeable about handling UTF-8, so that, for example, upper & lower casing only work correctly with versions from 3.0.28 on. To actually specify a codeset, enter it via the u(tility) o(ptions) page (which is documented below). From the main menu, in the English version, press u to reach the utility page, and then o to edit the user options. To set a codeset of, e.g., ISO-8859-1, enter this string on its own line, without the surrounding quotes: "codeset=ISO-8859-1". Or, to specify the use of UTF-8, "codeset=UTF-8". Further information about codeset conversion is found in the later chapter of that name (for example, information about producing reports which make use of HTML entity names for non-ASCII characters). ENTERING THE FIRST PERSON Note: Before you add the first person to your database, you specify internal codeset (review the Codeset chapter for information). Normally you add persons to the database from the browsing modes, but when entering the first person there is no one in the database to browse to. To add the first person to a LifeLines database, first select the add operation from the main menu. You will be prompted with the add menu (described later). Strike p to add a person. LifeLines creates a template of a GEDCOM person record, and puts you in a screen editor to edit the template. The default template is: Default person record template 0 INDI 1 NAME Fname /Surname/ 1 SEX MF 1 BIRT 2 DATE 2 PLAC 2 SOUR 1 DEAT 2 DATE 2 PLAC 2 SOUR Edit the template to create the new person's record. Change the name to the person's name. Assign the person's sex by deleting either M or F. Fill out the birth and death events as best you can. If the person is alive, remove the death event. Remove any DATE and PLAC lines you do not have the information for. The default template provides lines for one birth and one death event. You can expand the record with other events (even more birth or death events) and lines. Indentation makes it easier to read and edit the record, but isn't necessary. You may change the default edit template by defining the user option (described later). Here is how I might edit the template when creating a record about myself: Example editing of template record 0 INDI 1 NAME Thomas Trask /Wetmore/ IV 1 SEX M 1 BIRT 2 DATE 18 December 1949 2 PLAC New London, New London, Connecticut 2 SOUR Birth Certificate 1 OCCU Software Engineer 1 RESI 2 DATE 1982 to 1995 2 PLAC Newburyport, Essex, Massachusetts 2 ADDR 2 Barton Street, Newburyport, MA 01950 ... lots of other events and facts When you edit a person record, don't add or modify INDI, FAMC or FAMS lines. LifeLines creates and maintains these lines through specific user commands. When you finish editing and leave the editor, you automatically return to LifeLines. If you made an error (eg, didn't use proper level numbers or didn't follow the proper name convention), LifeLines displays an error message, and asks if you want to re-edit the record. If you don't, LifeLines doesn't add the person to the database. When the record is in proper format, LifeLines asks if you are sure you want to add the person to the database. If you answer yes, the person is added; if you answer no, the person isn't. In both cases LifeLines returns to the main menu. SCREEN EDITORS AND ENVIRONMENT VARIABLES With LifeLines you maintain the database records using a screen editor. This is different than other genealogical programs where screens or forms are used to gather the data.The default screen editor for LifeLines is vi. (The MS-Windows version defaults instead to notepad.exe.) This can be overridden by the ED, EDITOR or LLEDITOR environment variables. For example, if you prefer the emacs screen editor, and if you use a bourne-compatible shell, you may add the line: ED=emacs to your login profile file, and LifeLines will use emacs for editing. There are four other, LifeLines specific environment variables. They are LLDATABASES, LLARCHIVES, LLPROGRAMS and LLREPORTS. LLDATABASES and LLPROGRAMS are UNIX path list variables. There is also a configuration file, and entries in it may be used in lieu of environment variables. It is ordinarily named .linesrc under UNIX, and lines.cfg under MS-Windows. A sample configuration file should have been included in the distribution. See the section on System and User properties for more details. LLDATABASES can be set to a list of directories that hold LifeLines databases. When you execute the LifeLines program, these directories will be searched in turn for the database mentioned on the command line. For example, LLDATABASES=.:/home/ttw4/LifeLines/Databases indicates that databases should be searched for in the current directory first, and if not found there, then searched for in: /home/ttw4/LifeLines/Databases Each LifeLines database is implemented as a directory with specific contents. The LLDATABASES variable should be set to a list of directories that contain these database directories, not to a list of database directories themselves. The environment variable LLPROGRAMS is used in the same way, but to specify the search path for LifeLines report generating and other programs (described later). LLARCHIVES and LLREPORTS can each be set to specify a single directory. LLARCHIVES is used to select a directory where all database backup files will be stored, and LLREPORTS is used to select a directory where all generated reports and program outputs will be placed. New databases without explicit paths will be created in the first directory listed in the LLDATABASES path. (This is a change; versions from 3.0.6 to 3.0.31 used a now obsolete variable LLNEWDBDIR). You are not required to use these environment variables; when a variable is not defined, LifeLines uses the current directory as its default value. If you do use the variables, you can override their use by specifying files and directories as either absolute or relative paths. You may use the configuration file in lieu of environment variables. This is especially oriented towards users on MS-Windows systems, on which environment variables are not as common a configuration technique. LifeLines uses the curses library for terminal independent I/O. This requires you to specify your terminal type with the TERM environment variable. (This is not relevant in the MS-Windows version.) BASICS OF BROWSING You will use the browsing screens of LifeLines most of the time. When in these modes you can quickly search for or browse through the persons and families in the database. When you find a person or family you are interested in, you can then edit their records. The browsing screens also allow you to add new persons and families to the database, add spouses to families, add children to families, swap the order of spouses and children, merge persons and merge families, and perform other operations. The browsing screens also lets you remove spouses from families and remove children from families. There are six browsing screens. The person and family screens concentrate on a single person and family, respectively. The list screen allows you to browse through a list of persons. The two person browse screen shows two persons at once, and the two family browse screen shows two families at once. The auxiliary screen is used browsing any other type of records (e.g., events, sources, notes). Each browsing screen has multiple view modes. The view mode affects how the information is displayed on the screen, but does not affect the menu choices available at the bottom of the screen. Menu commands are available on each screen to change amongst the view modes available for that screen. The person screen has the most view modes. It has normal mode, which shows a summary of the vital records of the person. It (like all other screens) has GEDCOM mode, which shows the actual GEDCOM data of the record, and also expanded GEDCOM mode, which shows the actual GEDCOM data, but augments it with information on each line that contains a cross-reference (GEDCOM xref). It has two pedigree or tree modes, one showing an ancestral tree and one showing a descendant tree. The depth of the pedigree trees shown may be adjusted via menu commands. The two person browse screen has the same modes as the person screen. The two family browse screen and tandem family screen alike have normal mode (showing a summary of vitals), GEDCOM mode, and expanded GEDCOM mode. The auxiliary screen has only GEDCOM mode and expanded GEDCOM mode. (The list screen has no view modes at present). IDENTIFYING A PERSON OR LIST OF PERSONS TO BROWSE To enter the browsing modes from the main menu strike b. LifeLines asks you to identify a person or list of persons to browse to: Please identify person or persons to browse to. Enter name, key, refn or list: Enter either a name or partial name, or an internal key value, or a user-defined reference key (described later) or the name of a previously defined list of persons (described later), and strike return. LifeLines allows wide flexibility in how to enter names. You may enter a name in upper or lower case or any combination. You may leave out all but the first given name, and, for given names, you may leave out any letters except the first. You may leave vowels out of the surname, and after four or five consonants have been typed, you may leave them out too. You must separate the given names from the surname by a slash, and if you enter given names after the surname (as in Chinese names), or any modifiers (such as Jr, Sr, IV, etc.), they must be separated from the surname by another slash. Here are a few of the ways I can enter my name: Example of entering a name Thomas Trask /Wetmore/ IV thomas/wetmore/iv t t/wetmr/i th tr/Wetmore t/wtmr/iv You may browse to the list of all persons with the same surname by using the * character as the first initial. For example: Example of using wildcard in browsing */wetmorematches all persons with surname Wetmore. This is the only wildcard feature supported in browsing. (However, the search operation provides some simple wildcards for finding individual name fragments, or searching by user-defined reference keys. The search operation is accessed via a different choice off of the main menu.) After you enter a name, LifeLines searches for all persons who match. There are three possibilities: no one matches; one person matches; or more than one person matches. In the first case LifeLines writes: There is no one in the database with that name or key. and leaves you in the main menu. If one person matches, LifeLines enters the person browse mode displaying the matched person. If more than one person matches, LifeLines enters the list browsing mode with the list of matching persons. You may also identify a person by entering his or her internal, cross-reference key value. The internal key values of all person records are an I followed by digits. When you enter a key value you may omit the I. If LifeLines finds a person with the key value you provide, LifeLines enters the person browsing mode displaying that person. You can also browse to a Family, Source, or Note by entering its key, but you must include the letter identifing the key type, thus F11, S1, or N3 would browse to the family, source or note corresponding to the key if it exists. The browse command b is also available from most browsing modes. The command works the same way from those modes as it does from the main menu. ZIP IDENTIFYING A NEW PERSON Some LifeLines operations need you to identify a person, not for the purpose of browsing, but for the purpose of completing an operation you have requested. For example, when you add a child to a family, LifeLines may ask you to identify the child. When this happens a panel pops up that asks you to identify a person. You respond by typing a name or key exactly as you would for the b command. If no one matches, LifeLines returns to the previous browsing mode. If the name matches persons in the database LifeLines displays something like: Please choose from among these records. >Thomas Trask Wetmore, b. 1826, N.B. (42) Thomas Trask Wetmore IV, b. 1949, Conn. (1) Thomas Trask Wetmore III, b. 1925, Conn. (6) Thomas Trask Wetmore Jr, b. 1896, Conn. (11) Thomas Trask Wetmore Sr, b. 1866, N.S. (23) Thomas Trask Wetmore V, b. 1982, Mass. (5) _______________________________________________ Commands: j Move down k Move up i Select q Quit Use the j and k commands to move the selection cursor (>) to the correct person, and then use the i command to select that person. There may be more persons in the list than you can see at once. If this is so then you can use the j and k commands to scroll through the full list. If you don't find the proper person, use the q command and LifeLines asks whether you want to enter another name. With version 3.0.15, lists may also be navigated with the up and down arrows, PageUp and PageDown keys, Home and End keys, and the Enter key. Shift-PageUp and Shift-PageDown move more than one page at a time in a given direction. The keyboard equivalents are j=UpArrow, k=DownArrow, u=PageUp, d=PageDown, ^=Home, $=End, U=Shift-PageUp, D=Shift-PageDown, i=Enter. When LifeLines creates a list of names for you to select from, it tries to add extra information to the name; this helps determine which name to choose, and is important in databases where many persons have the same name. LifeLines also places the person's key value at the end of each menu line; this may be helpful in large databases. Some browse screens provide the z command, which allows you to browse to a new person using the zip style of identification rather than the b style. BROWSE DISPLAY BASICS The screen display for each browsing screen is made up of panels. At the bottom of each display is a message panel used for one line messages. Each display contains one or two data panels showing information from the database. And each display has a panel with the operation menu available for that screen. PERSON BROWSE SCREEN After you identify a person to browse to, LifeLines enters the person browse screen. The top panel in the display gives basic information about the person (in the normal, or vitals, mode, which is the default). The middle panel provides a menu of commands. For example: person: Thomas Trask WETMORE Sr (25) born: 13 March 1866, St. Mary's Bay, Digby, Nova Scotia died: 17 February 1947, New London, New London, Connecticut father: Daniel Lorenzo WETMORE, b. 1821, N.S., d. 1903, Conn. (48) mother: Mary Ann DOTY, b. 1824, N.S., d. 1897, Conn. (59) spouse: Margaret Ellen KANEEN, b. 1855, Eng., d. 1900, Conn. (26) child: Portia Louise WETMORE, b. 1892, Conn., d. 1921, Conn. (27) child: Thomas Trask WETMORE, b. 1896, Conn., d. 1970, Conn. (17) spouse: Arleen M KEENEY, m. 1914, Conn. (75) _______________________________________________________________________ Please choose an operation: (pg 1/3) e Edit the person g Browse to family p Pedigree mode f Browse to father u Browse to parents n Create new person m Browse to mother b Browse to persons a Create new family s Browse to spouse/s h Add as spouse x Swap two families c Browse to children i Add as child tt Enter tandem mode o Browse to older sib r Remove as spouse ? Other menu choices y Browse to younger sib d Remove as child q Return to main menu _______________________________________________________________________ LifeLines -- Person Browse Screen The commands perform a wide variety of functions. e Edit the person. Edit the person's database record. LifeLines puts the record in a file, and then runs a screen editor so you can edit the record. When you return from the editor, LifeLines asks you to confirm any changes; the person is changed only if you answer yes. f Browse to father. Browse to the person's father. If the father isn't in the database, LifeLines doesn't change the display. If there are more than one father, LifeLines asks you to select one. m Browse to mother. Browse to the person's mother. If the mother isn't in the database, LifeLines doesn't change the display. If there are more than one mother, LifeLines asks you to select one. s Browse to spouse/s. Browse to the person's spouse. If the person has more than one spouse, LifeLines asks you to select one. If the person has no spouse, the display does not change. c Browse to children. Browse to one of the person's children. If there is more than one child, LifeLines asks you to select one. If the person has no children, the display does not change. o Browse to older sib. Browse to the person's next older sibling. If the person has no such sibling, the display does not change. Only siblings from the same family are browsed by this command. y Browse to younger sib. Browse to the person's next younger sibling. If the person has no such sibling, the display does not change. Only siblings from the same family are browsed by this command. g Browse to family. Browse to the family the person is a spouse or parent in, and switch to the family browse mode. If the person is in more than one family, LifeLines asks you to identify which one. If the person is not a spouse or parent in any family, the display does not change. u Browse to parents. Browse to the family the person is a child in, and switch to the family browse mode. If the person is not a child in a family, the display does not change. If the person is a child in more than one family, LifeLines asks you to identify which one. b Browse to persons. Browse to a new person or list of persons. LifeLines asks you to identify a person or persons by name, key or list name, and depending on how many persons are identified, switches either to the list browse mode, or remains in the person browse mode. h Add as spouse. Add the person as a spouse/parent to an existing family. LifeLines asks you to identify the family, and then asks you to confirm the request. i Add as child. Add the person as a child to an existing family. The person may already be a child in another family. LifeLines asks you to identify the family, and then asks you to confirm the request. r Remove as spouse. Remove the person as a spouse or parent from an existing family. If the person is a spouse or parent in more than one family, LifeLines asks you to identify the family. d Remove as child. Remove the person as a child in an existing family. n Create new person. Create and add a new person to the database. LifeLines creates a record template and puts you into the screen editor to edit the record. When you return from the editor, LifeLines asks you to confirm the operation. If you do, the new person is added and becomes the current person. If not, the new person is not added, and LifeLines returns to the original display. a Create new family. Create and add a new family to the database. The new family may have the current person as either a spouse/parent or as a child; LifeLines asks which. If you choose to create a family with the person as a spouse/parent, LifeLines asks you to identify the other spouse if he or she is known. In either case LifeLines creates a family template, and places you in the screen editor. When you return from the editor, LifeLines asks you to confirm the operation. If you do, LifeLines adds the family and shifts into family browse mode. If the command you ran just before the a command were the n command, and you choose to create a family with the person as a spouse/parent, LifeLines guesses that the other spouse in the family will be the person displayed just before the new person was created. LifeLines asks you if this is the case, and if so, automatically make that person the other spouse in the new family. If this is not the case, LifeLines asks you to identify the other spouse. p Pedigree mode. Change to pedigree browse mode. The person becomes the root person in the pedigree display. x Swap two families. Swap (change chronological order) any two families that the person belongs to as a spouse or parent. LifeLines asks you to identify the two families and then swaps them. tt Enter tandem mode. Change to the tandem person browse mode. LifeLines first asks you to identify the second person. ? Other menu choices. Go to the next page of menu choices. This will have no effect on the upper (data) portion of the screen, but it allows you to page through all available commands for this display screen. q Return to main menu. Return to the LifeLines main menu. z Zip browse to person. Zip browse to a new person. LifeLines asks you to identify a person by name or key value, and if you do so, browses to that person. LIST BROWSE SCREEN This browse screen handles lists of persons. The top panel shows information about one person in the list. The left panel shows a list of up to 12 persons. The person shown in the top panel is identified by the > character. The right panel is the menu of available commands. person: Thomas Trask WETMORE Sr (25) born: 13 March 1866, St. Mary's Bay, Digby, Nova Scotia died: 17 February 1947, New London, New London, Connecticut father: Daniel Lorenzo WETMORE, b. 1821, N.S., d. 1903, Conn. (48) mother: Mary Ann DOTY, b. 1824, N.S., d. 1897, Conn. (59) spouse: Margaret Ellen KANEEN, b. 1855, Eng., d. 1900, Conn. (26) _______________________________________________________________________ Thomas Trask WETMORE (42) Choose an operation: Thomas Trask WETMORE III (6) j Move down list Thomas Trask WETMORE IV (1) k Move up list Thomas Trask WETMORE (11) e Edit this person >Thomas Trask WETMORE Sr (23) i Browse this person Thomas Trask WETMORE (5) m Mark this person r Remove from list t Enter tandem mode n Name this list b Browse new persons a Add to this list x Swap mark/current q Return to main menu _______________________________________________________________________ LifeLines -- List Browse Screen j Move down list. Move down the list one person. The list panel is only large enough to show 12 persons. However, the list may contain many more persons. Use the j and k commands to scroll to these other persons. k Move up list. Move up the list one person. The list panel is only large enough to show 12 persons. However, the list may contain many more persons. Use the j and k commands to scroll to these other persons. With version 3.0.15, lists may also be navigated with the up and down arrows, PageUp and PageDown keys, Home and End keys, and the Enter key. Shift-PageUp and Shift-PageDown move more than one page at a time in a given direction. The keyboard equivalents are j=UpArrow, k=DownArrow, u=PageUp, d=PageDown, ^=Home, $=End, U=Shift-PageUp, D=Shift-PageDown, i=Enter. e Edit this person. Edit the displayed person's database record. LifeLines runs the editor on the person's record. When you return from the editor, LifeLines asks you to confirm any changes, and then leaves you in the list browse screen. i Browse this person. Change to the person browse screen with the current person. m Mark this person. Mark the current person if he/she is not marked; unmark the person is he/she is. The marked person is shown with an x by his/her name. Marked persons are used by the t and x commands. Only one person may be marked at a time. r Remove from list. Remove the current person from the browse list (not from the database). t Enter tandem mode. Change to the tandem person mode with the current person and the marked person as the two persons. If no person is marked there is no change. n Name this list. Lists of persons may be named, allowing you to quickly browse back to them by giving a list name in response to the b command from different modes. LifeLines will prompt you for the name. List names are most convenient when short. b Browse new persons. Browse to a new person or list of persons. You can identify a person or list of persons by name, internal or user key or by list name. a Add to this list. Add more persons to the current browse list. LifeLines asks you to identify a new person or list of persons by name, key or list name, and they are added to and name-sorted into the current list. x Swap mark/current. Swap the current person with the marked person in the list. q Return to main menu. Return to the LifeLines main menu. FAMILY BROWSE SCREEN This browse screen displays information about a family. The top panel shows basic information about the family. The bottom panel shows the menu of available commands. If the database contains more than two parents for this family only the first two are displayed. father: Thomas Trask WETMORE IV (1) born: 18 December 1949, New London, New London, Connecticut died: mother: Luann Frances GRENDA (2) born: 10 July 1949, Pittsburgh, Allegheny, Pennsylvania died: married: 1 August 1970, Governors Island, New York, New York child: Anna Vivian Wetmore, b. 1974, Alaska (3) child: Marie Margaret WETMORE, b. 1979, Conn. (4) child: Thomas Trask WETMORE V, b. 1982, Mass. (5) _______________________________________________________________________ Please choose an operation: (pg 1/4) e Edit the family %s Add source r Remove spouse from f Browse to father %e Add event d Remove child from m Browse to mother %o Add other x Swap two children c Browse to children s Add spouse to family ? Other menu choices n Create new person a Add child to family q Return to main menu _______________________________________________________________________ LifeLines -- Family Browse Screen (* toggles menu) e Edit the family. Edit the family's record. LifeLines writes the record to a file and puts you into an editor to edit the file. When you return from the editor, LifeLines asks you to confirm the update; the family is changed only if you do so. f Browse to father. Browse to the father/husband of the family, switching to person browse screen. If the father is not there, there is no change. mBrowse to mother. Browse to the mother/wife of the family, switching to person browse screen. If the mother is not there, there is no change. c Browse to children. Browse to a child in the family, switching to the person browse screen. If the family has more than one child, LifeLines asks you to identify a specific child. n Create new person. Create and add a new person to the database. LifeLines creates a record template and puts you into the screen editor to edit the record. When you return from the editor, LifeLines asks you to confirm the operation. If you do, the new person is added to the database. If not, the new person is not added. In both cases the display does not change. s Add spouse to family. Add a spouse to the family. LifeLines asks you to identify the new spouse. If the command you ran just before the s command were the n command, LifeLines guesses that the new spouse will be the person just created. LifeLines asks if this is the case, and if so, makes that person the second spouse in the family. If not, LifeLines asks you to identify the other spouse. a Add child to family. Add a child to the family. LifeLines asks you to identify the new child. If the command you ran just before the a command were the n command, LifeLines guesses that the new child will be the person just created. LifeLines asks if this is the case, and if so, adds that child to the family. If not, LifeLines asks you to identify the child. If the family already has children, LifeLines also asks where to place the new child in the family. r Remove spouse from. Remove a parent/spouse from the family. LifeLines asks you to identify the person, and if you do, removes him or her. The person is not removed from the database. d Remove child from. Remove a child from the family. LifeLines asks you to identify the child should, and if you do, removes the child from the family. The person is not removed from the database. x Swap two children. Swap (change the chronological order) of any two children in the family. LifeLines asks you to identify the two children and then swaps them. t Enter family tandem. This command takes you to the tandem family browse screen. LifeLines asks you to identify a second family, and then takes you to the tandem family screen, displaying both the two families. b Browse to persons. Browse to a new person or list of persons. You can identify a person or list by name, by key, or by list name. If you successfully identify a new person or persons you will switch into the person or list browse screens. z Browse to person. Zip browse to a new person. LifeLines asks you to identify a person by name or key value, and if you do, browses to that person. q Return to main menu. Return to the LifeLines main menu. TANDEM PERSON BROWSE MODE The tandem person browse screen displays information about two persons. Its main use it to support the person merging operation. The top two panels show two persons in the format used in the person and list screen displays. The bottom panel gives the menu of available commands. For example: person: Thomas Trask WETMORE Sr (25) born: 13 March 1866, St. Mary's Bay, Digby, Nova Scotia died: 17 February 1947, New London, New London, Connecticut father: Daniel Lorenzo WETMORE, b. 1821, N.S., d. 1903, Conn. (48) mother: Mary Ann DOTY, b. 1824, N.S., d. 1897, Conn. (59) spouse: Margaret Ellen KANEEN, b. 1855, Eng., d. 1900, Conn. (26) ______________________________________________________________________ person: Thomas Trask WETMORE IV (1) born: 18 December 1949, New London, New London, Connecticut died: father: Thomas Trask WETMORE III, b. 1925, Conn. (6) mother: Joan Marie HANCOCK, b. 1928, Conn. (7) spouse: Luann Frances GRENDA, m. 1970, N.Y. (2) ______________________________________________________________________ Please choose an operation: e Edit top person s Browse top spouse/s a Add family t Browse to top c Browse top children j Merge bottom to top f Browse top father b Browse to persons x Switch top/bottom m Browse top mother d Copy top to bottom q Return to main menu ______________________________________________________________________ LifeLines - Two Person Browse Screen e Edit top person. Edit the top person's record. LifeLines writes the record to a file, and puts you in the screen editor to edit the file. When you return from the editor, LifeLines asks you to confirm the update; the person is changed only if you do so. t Browse to top. Switch to the person display with the top person as current person. f Browse top father. Replace the top person with his/her father. m Browse top mother. Replace the top person with his/her mother. s Browse top spouse/s. Replace the the top person with his/her spouse. If the person has more than one spouse, LifeLines asks you to identify one. c Browse top children. Replace the top person with one of his/her children. If the person has more than one child, LifeLines asks you to identify the one. b Browse to persons. Browse to a new person or list of persons. LifeLines asks you to identify a new person or persons by name, key or list name, and then does as described in the section on identifying a person. d Copy top to bottom. Copy the top person into the bottom person. A new person is not created; the same person is displayed twice. a Add family. Create a new family record; LifeLines assumes the two displayed persons are to become the spouses/parents in the new family; they must be of opposite sex. j Merge bottom to top. Merge the bottom person into the top person. LifeLines combines the two person records and places you in the screen editor to edit the combined record. When you are done, if you confirm the operation, LifeLines removes the bottom person from the database, and the top person is given the combined record. See the section on merging. x Switch top/bottom. Swap the two persons in the display. q Return to main menu. Return to the LifeLines main menu. TANDEM FAMILY BROWSE MODE The tandem family browse screen displays information about two families. Its main use it to support the family merging operation.The top two panels provide information about the two families you are browsing, and the bottom panel holds the menu of available commands. For example: father: Thomas Trask WETMORE IV (1) born: 18 December 1949, New London, New London, Connecticut mother: Luann Frances GRENDA (2) born: 10 July 1949, Pittsburgh, Allegheny, Pennsylvania married: 1 August 1970, Governors Island, New York, New York child: Anna Vivian WETMORE, b. 1974, Alaska (3) __________________________________________________________________ father: Thomas Trask WETMORE III (6) born: 26 October 1925, New London, New London, Connecticut wife: Joan Marie Hancock (7) born: 6 June 1928, New London, New London, Connecticut married: 5 February 1949, New London, New London, Connecticut child: Thomas Trask WETMORE IV, b. 1949, Conn. (1) __________________________________________________________________ Please choose an operation: (pg 1/3) e Edit top person m Browse to mothers )b Scroll bottom down t Browse to top (t Scroll top up (( Scroll both up b Browse to bottom )t Scroll top down ? Other menu choices f Browse to fathers (b Scroll bottom up q Return to main menu __________________________________________________________________ LifeLines -- Two Family Browse Screen (* toggles menu) e Edit top family. This command lets you edit the top family's record. LifeLines writes the record into a file, and then puts you into an editor to edit that information. When you return from the editor, LifeLines asks you whether you are sure you want to update the family in the database. The family is changed only if you answer yes. t Browse to top. Change to the family browse screen with the top family the current family. b Browse to bottom. Change to the single family browse screen with the bottom family the current family. f Browse to fathers. Change to the tandem person screen with the fathers of the two families as the two persons. m Browse to mothers. Change to the tandem person screen with the mothers of the two families as the two persons. (t Scroll top up. TODO )t Scroll top down. TODO (b Scroll bottom up. TODO )b Scroll bottom down. TODO (( Scroll both up. TODO )) Scroll both down. TODO # Toggle childnos. TODO (1-9) Browse to child. TODO j Merge bottom to top. Merge the bottom family into the top family. LifeLines combines the two family records and places you in the screen editor to edit the combined record. When you are done, if you confirm the operation, LifeLines deletes the bottom family from the database, and the top family is given the combined record. See the section on merging. x Switch top/bottom. Swap the two families in the display. [There are some more miscellaneous commands available on the menus.] q Return to main menu. Return to the LifeLines main menu. PEDIGREE BROWSE MODE The pedigree browse screen displays a four-generation pedigree for the current person. The top panel holds the pedigree, and the bottom panel holds the menu of available commands. For example: John WETMORE [1755-1848] (32) Daniel Van Cott WETMORE [1791-1881] (41) Anna VAN COTT [1757-1802] (33) Daniel Lorenzo WETMORE [1821-1903] (48) Thomas TRASK [-1836] (81) Hannah TRASK [1797-1829] (46) Susannah PORTER [1754-] (82) Thomas Trask WETMORE Sr [1866-1947] (25) Samuel DOTY [1759-] (501) Samuel DOTY [1787-] (74) Hephzibah PORTER [1764-1853] (502) Mary Ann DOTY [1827-1897] (59) Nathan SAVERY [1748-1826] (510) Lydia SAVERY [1806-] (75) Deidamia SABEAN [1765-1845] (511) __________________________________________________________________ Please choose an operation: e Edit the person m Browse to mother g Browse to family i Browse to person s Browse to spouse/s b Browse to persons f Browse to father c Browse to children q Return to main menu __________________________________________________________________ LifeLines - Pedigree Browse Mode e Edit the person. Edit the current person. i Browse to person. Change to the person display mode with the current person. f Browse to father. Browse to the father of the current person, shifting the pedigree one generation back. If the father is not in the database, there is no change. m Browse to mother. Browse to the mother of the current person, shifting the pedigree one generation back. If the mother is not in the database, there is no change. s Browse to spouse/s. Browse to a spouse of the current person, shifting the display to the pedigree of that person. If the current person has more than one spouse, LifeLines asks you to identify the spouse; if the person has no spouse there is no change. c Browse to children. Browse to a child of the current person, shifting the pedigree one generation forward. If the current person has more than one child, LifeLines asks you to identify the child; if the person has no children there is no change. g Browse to family. Change to the family display; the family will be the one that the current person belongs to as spouse or parent. If there are more than one, LifeLines asks you to identify the proper one. b Browse to persons. Browse to another person or list of persons; if you identify a single person the display remains in the pedigree display; if you identify more than one person the display changes to the list browse mode. q Return to main menu. Leave the pedigree browsing mode and return to the main menu. SEARCH MENU If you choose Search database from the main menu, LifeLines displays the search menu: How would you like to find a record? v Review visit history (12 records) c Review change history (3 records) f Full database scan q Return to previous menu The first two items will depend on your previous activity. If you have browsed to individuals or family records in the database, the first item will appear similar to what's shown above, if you haven't it will just contain a note that the visit history is empty. The second item will appear similar to what's shown above if you have changed individual records in this session with LifeLines, otherwise it will contain a note that the change history is empty. Selecting a non-empty visit history or change history will bring up a list of individuals (or families) that are in the history, allowing you to browse to that individual or family. If you choose Full database scan off the search menu, LifeLines displays the fullscan menu. What scan type? f Full name scan n Name fragment (whitespace-delimited) scan r Refn scan q Return to previous menu The first two items on this menu allow you to search all the NAME records in the current database. If you choose Full name scan you are prompted for a search pattern and then LifeLines searches for all the individual NAME records whose value matches the pattern supplied. If you choose the Name fragment scan, you will be prompted for a search pattern and then LifeLines will search for whitespace delimited words within individual NAME records that match the pattern supplied. Search Patterns The pattern supplied to the search commands is used to match against the names in the database. The following characters have special meaning when used in a pattern: ? Matches any single character * Matches zero or more occurrences of any character SUB a control Z (^Z) is similar to '*', this matches zero or more occurences of any characters other than '.'. (of course you probably can't type this on unix) [ab] A set of characters enclosed in square brackets matches the single characters listed between the brackets. If the dash '-' character is to be included, it must immediately follow the opening bracket '['. If the closing bracket ']' character is to be included, it must be preceded by a quote '`'. [a-z] Matches a single character in the range 'a' to 'z'. Ranges and sets may be combined within the same set of brackets. !R Matches a single character not in the range 'R'. If range 'R' includes the dash '-' character, the dash must immediately follow the '!'. ! Makes the following pattern match any string except those what it would normally match. QUOTE (On DOS this is `, on UNIX it is \) Makes the next character a regular (nonspecial) character. Note that to match the quote character itself, it must be quoted. Note that this character must be escaped if used within string constants ("\\"). Upper and lower case alphabetic characters are considered identical, i.e., 'a' and 'A' match each other. (What constitutes a lowercase letter depends on the current locale settings.) Spaces and control characters (other than control z) are treated as normal characters, As an example, consider the following NAME record: 1 NAME John /Smith/ When doing a full name search, the value searched is the complete gedcom name value including the slashes used to delimit the surname. in order to have a match, the search pattern must match the slashes. Thus *smith will not match this name, whereas *smith/ will match. When doing a name fragment search, the slashes are removed from the surname before trying to match the name, thus smith smi* joh* *hn will all match this NAME record. ADD OPERATION If you choose the add operation from the main menu, LifeLines displays the add menu: What do you want to add? p Person - add new person to the database f Family - create family record from one or two spouses c Child - add a child to an existing family s Spouse - add a spouse to an existing family q Quit - return to the previous menu These operations work in a straightforward way. LifeLines asks you the necessary questions, and lets you cancel at any time. The operations provided by this menu are also available from the browsing modes, and are often easier to perform there. DELETE OPERATION If you choose the delete operation at the main menu, LifeLines displays the delete menu: What do you want to delete? c Child - remove a child from his/her family s Spouse - remove a spouse from a family p Person - remove a person completely q Quit - return to the previous menu These operations also work in a straightforward way. LifeLines asks you the necessary questions and lets you cancel at any time. You may also remove a child from his/her family, or remove a spouse/parent from his/her family, from the person browsing mode. In both cases, only a relationship is removed, not a person. On the other hand, the delete menu must be used if you want to completely remove a person from the database; this cannot be done from the browsing mode. There is no special operation for removing a family record. LifeLines silently removes any family record that has no parent or child associated with it. CODESET CONVERSION (This section was previously entitled CHARACTER TRANSLATION.) The intention is that you need only specify the internal codeset for each database you create (and this step may be automated via the NewDbProps property), and all else works pretty well without tuning. That is, lifelines tries to guess the correct codeset for your environment (including guessing the console and windows codesets when operating under MS-Windows, which it should do fairly well). However, you may encounter situations where you wish to alter the codeset behavior, or the codeset conversion is not operating correctly (in which case we hope you will report the problem to the mailing list and/or sourceforge bugs list). There are two ways to amend codeset conversion. The first method is by changing configuration variables. For example, if you wish to generate an HTML report of all your data, which includes names in Russian (in Cyrillic letters), for your cousin, and you know that your cousin's computer has no font for Cyrillic letters, you might wish to temporarily adjust your report output codeset so that you will get interpolated ASCII letters for the Russian letters. You could do this by temporarily altering the configuration variable ReportCodesetOut to be "ASCII" (actually, if any of your data has characters in it that are reserved in HTML, such as the less than sign, or the ampersand, you would probaby want "ASCII//HTML"). The second way to change codeset conversion, and the only way in lifelines 3.0.6, is to edit the embedded character translation tables, in which you actually specify the letters you want converted, letter by letter, and how you want them converted. This method, unlike the first, even works in databases with no specified internal codeset. If you choose the modify character translation tables operation from the main menu, LifeLines displays the character translation menu: Which character mapping do you want to edit? e Editor to Internal mapping m Internal to Editor mapping i GEDCOM to Internal mapping x Internal to GEDCOM mapping d Internal to Display mapping r Internal to Report mapping q Return to main menu LifeLines can do codeset conversion in changing text from one form to another, and lifelines supports five different forms. internal for records in the database editor for records being edited display for records being displayed report for records written to output file GEDCOM for records read in from or written out to GEDCOM When converting text from one form to another LifeLines normally uses iconv conversion, and codesets specified in configuration variables. This may be augmented by codeset translation or extension using the text conversion (*.tt) files in the tt subdirectory. To use the tables in the tt subdirectory, you need to set the property "TTPATH" in your LifeLines configuration file to the path of the tt directory. There are two types of files in this directory. Files of the form <codeset>_<codeset1>.tt convert from one codeset to another. For example, CP1250_UTF-8.tt can be used to convert characters in codeset CP1250 to their representations in UTF-8. Files of the form <codeset>__<subcodeset>.tt apply a conversion within the codeset, for example, UTF-8__html.tt is a sub-conversion that converts UTF-8 characters that have special escape codes within html to those special codes. For example, specifing the report codeset to be UTF-8//html will apply the html sub-conversion to all the data being written. Probably not what you really wanted. See the report language function convertcode() in the reportmanual for details. If your system lacks iconv, or you need more specialized conversion than provided with iconv, you may either write a text conversion file (a tt file), or you may edit one of the in-database translation tables. The in-database translation tables convert between forms (as listed above). Every translation table converts either to the internal form, or from the internal form. That is, the internal form is used as an intermediate step in all operations. There are six supported translation tables. The following table shows the six tables and describes when they are applied: internal to editor when converting from internal, database form to editor form editor to internal when converting from editor form back to internal, database form GEDCOM to internal when reading GEDCOM input records and writing them to database internal to GEDCOM when writing internal database records to external GEDCOM file internal to display when displaying a record in a browsing mode display screen internal to report when writing internal database records to external report file After you select a translation table you are placed in the editor to edit the table. Translation tables are made up of lines that look like: pattern pattern where a tab separates the patterns. Each pattern is an arbitrary sequence of verbatim ASCII characters and escape sequences. Translation occurs by finding all occurrences that match left patterns and replacing them with the corresponding right patterns. There are five escape mechanisms used in patterns: #nnn nnn is a decimal character value $hh hh is a hexadecimal character value \ # represents the # character \$ represents the $ character \\ represents the \ character It is possible, and desirable, to provide a short name for the translation table, using the "##!name: " command. An example would be ##!name: UTF-8 to latex Naming the translation table is desirable because these names are displayed, at least in part and if they fit, on the translation table menu. It is possible to format the file using a character other than tab as the separator between source and destination code. To do requires using the "##!sep" command. Those exact six characters must begin the line, and then the next character is the new separator for all following lines. For clarity, this should only occur once, and near the top of the file before any actual translation lines, and a fairly clear separator should be used (e.g., the equal sign "="). Any line which is blank, or which begins with two hash marks (##), is ignored. Therefore, comments begin with two hash marks. For advanced users, it is possible to mix different types of conversion, for example iconv conversion and also translation table conversion, in the same form step. For example, it is possible to convert internal database text (internal form) first via the "internal to GEDCOM" in-database translation table, and then via the iconv conversion from configured internal codeset to configured GEDCOM codeset. In-database translation tables are always applied in the internal codeset, so when converting to the internal form, they are applied after iconv and/or tt conversions, and when converting from internal form, they are applied first. An example of adding a mixin in-database translation table might be to escape certain characters which are control characters to an output computer language, e.g., latex. One could create an "Internal to Report" mapping in UTF-8 (if the database is internally UTF-8) to escape any characters that may occur in place names or textual descriptions and inadvertently cause grief in latex processing. However, in this case, one could also write a tt file to achieve the same results, and be shared across databases, by naming it, eg, UTF-8__latex.tt. The double underscore ("__") signifies that this is a conversion to be applied to text which is in UTF-8, and to trigger lifelinesn to use this, one must specify a report codeset such as "UTF-8//latex" (if UTF-8 output is desired, but with the latex conversion first applied), or "ISO-8859-1//latex" (if ISO-8859-1 output is desired, but with the latex conversion first applied). MISCELLANEOUS UTILITIES If you choose the miscellaneous utilities operation, LifeLines displays the utilities menu: What utility do you want to perform? s Save the database in a GEDCOM file r Read in data from a GEDCOM file R Pick a GEDCOM file and read in k Find a person's key value i Identify a person from key value d Show database statistics m Show memory statistics e Edit the place abbreviation file o Edit the user options file c Character set options q Return to the main menu s Save the database in a GEDCOM file. This command saves the complete LifeLines database in a GEDCOM file. All person, family, event, source and user-defined records are stored. This command may be used to periodically back up your database. When you use this command, LifeLines asks you for the name of the file. If you have defined the LLARCHIVE shell variable, LifeLines will store the file in the directory named in the variable. r Read in data from a GEDCOM file. This command allows you restore a complete database from a GEDCOM file. When you select this command, LifeLines asks you for the name of the GEDCOM file. This command can also be used to import data from a GEDCOM file to an existing database. When LifeLines performs this command, it first reads the entire GEDCOM file and checks it for validity. If there are problems in the file, LifeLines describes them, writing them to the file err.log, and does not add any records to the database. If there are no problems, LifeLines adds all the records found in the file to the database (only header and trailer records are not stored in the database). Normally, LifeLines will replace the XREF's (the identifiers for individuals, families, sources, notes, etc.) in the GEDCOM with its own. These identifiers are reserved by the GEDCOM for internal use of genealogy programs. However, if the identifiers are compatible with LifeLines internal representation and there are no conflicts with existing identifiers, LifeLines will ask you if you want to perserve the identifiers in the GEDCOM file rather than assign new values. k Find a person's key value. This command finds the internal key value of a person. i Identify a person from key value. This command identifies the person that has a particular internal key value. d Show database statistics. This command summarizes the contents of the current database. It displays the number of person, family, source, event and other records in the database. m Show memory statistics. This command is used by the author for debugging. e Edit the place abbreviation file. This command allows you to edit the place abbreviations file. This file defines the abbreviations that are used by LifeLines when it creates lists of persons for you to select from. Each line in the file has the format:word: abbr where word is a word to be abbreviated, and abbr is its abbreviation. The word and its abbreviation are separated by a colon. For example: Example of using abbreviations Connecticut:Conn. Massachusetts:Mass. Nova Scotia:N.S. When LifeLines constructs lists of persons for you to select from, it looks up the last component of certain PLAC lines in this file, and if it finds that component, replaces it with its abbreviation. o Edit the user options file. This command allows you to edit the user options file. The user options file is a record kept in the database that holds user selectable options. Each option has a name and a string value. Each line in the options file has the format:option=value where option is the name of an option and value is the option's string value. If the value is more than one line long, then the last character in each non-final line must be a backslash. The escapes \n and \t are also recognized in version 3.0.7 and better (to represent a carriage return and a tab, respectively). These (\n and \t) are primarily for use in custom record templates. In version 3.0.14 there are 39 options. Note that all of these may also be specified in the configuration file, to apply to all databases, but if specified in both places, the entry in the database (user options table) governs. For more information, see the sample configuration file; each option is preceded by a brief explanation. The list of options can be found in the section 'System and User Properties' below. For example if you would like to replace the default person record template with the following: Example of replacing the default person record template 0 INDI 1 NAME // 1 SEX you would edit the user option file to contain: Example of replaced default person record template INDIREC=0 INDI\ 1 NAME //\ 1 SEX or, using the \n escape so as to keep the entry on one line: Example of replaced single line default person record template INDIREC=0 INDI\n1 NAME //\n1 SEX q Return to main menu. This command returns you to the main menu. IMPORT ERRORS Errors generated during a GEDCOM import are logged to a file, by default named errs.log. A number of errors are related to having an incorrect XREF value. An XREF is the internal name used to Identify a family, individual, note, source or other record. An XREF is bracked by two @ signs. As an example 0 @F6@ FAM 1 HUSB @I25@ 1 WIFE @I26@ 1 CHIL @I17@ Here F6 is the internal name of this family. The family refers to other individuals by specifing their XREF values. Also I25, I26 and I17 are XREF values of individuals. XREF values used within LifeLines are totally under the control of LifeLines. The values that are used are always of the form, a single letter, followed by a number. However, when importing a gedcom LifeLines should accept almost anything as an XREF, converting it to what is needed for internal use. For the curious, the letters that LifeLines uses are I for Individual, F for Family, S for Source, E for Events, and X for other records. Bad NAME syntax. A level 1 NAME record must have a value, and the value must not be a pointer, and may have no more than two slashes. Example of bad NAME syntax (too many slashes in this case) 0 @I99@ INDI 1 NAME Mary /Smith/ nee /Jones/ Family F13 has an incorrect key. Person XYZ has an incorrect key: skipped. The XREF values must be unique. These error messages are generated if a XREF is found to refer to two different records. For example, the XREF for a family is the same as one for an individual. Example of XREF XYZ being defined twice 0 @XYZ@ INDI 1 NAME Mary /Smith/ nee /Jones/ 0 @XYZ@ FAM 1 HUSB @I48@ Person defined here has no name. Each INDI record must have at least one level 1 NAME record, if the configuration option RequireNames is non-zero. Person INDI_XYZ is multiply defined: skipped. No XREF value of an INDI may be reused. This message indicates that INDI_XYZ has been used to identify two different persons. Example of person multiply defined 0 @INDI_XYZ@ INDI 1 NAME John /Smith/ 0 @INDI_XYZ@ INDI 1 NAME Jack /Smith/ The family defined here has no key. Each FAM record must have an XREF value. (The XREF is the letters between "0" and "FAM".) Example of family record missing key 0 FAM 1 HUSB @I1@ Family F123 is referred to but not defined. A FAMS or FAMC record on an Individual refers to a family but there is no FAM record with that XREF. The person defined here has no key: skipped. Each INDI record must have an XREF value. (The XREF is the letters between "0" and "INDI".) Example of person record missing key 0 INDI 1 NAME John /Smith/ This line has a level number that is too large. A child level must be one higher than its parent level. Example of level number which is too high 0 @I99@ INDI 1 NAME // 3 NOTE name is missing This FAMS line is missing a value field (INDI I99). Lineage-linking tags must have a value, including tags FAMC, FAMS, FATH, MOTH, HUSB, WIFE, CHIL. Example of lineage-linking line which is missing required value 0 @I99@ INDI 1 NAME John /Smith/ 2 FAMS HANDLING SOURCE, EVENT AND USER-DEFINED RECORDS LifeLines supports source, event and other, user-defined record types. You can access these features in two ways: either through the x operation from the main menu, or via commands in the individual and family browse screens. The first approach might be most convenient when you are solely working with these record types. The second makes it easier to work with source, event and user-defined records in parallel with your person and family records; this can be useful for instance when you want to create references from your person and family record to your source, event and user defined records as you create them, and to view and edit records that you have referenced from within a person or family record. Using the first of these two possibilities LifeLines displays the following menu: What activity do you want to perform? s Browse source records e Browse event records x Browse other records 1 Add a source record to the database 2 Edit source record from the database 3 Add an event record to the database 4 Edit event record from the database 5 Add an other record to the database 6 Edit other record from the database q Return to main menu Using the second variant (from the person and family browse screens), the following six commands are available. The first three are described alongside with their counterparts in the x menu (they do mostly, but not entirely, the same things); the last three are described separately: %s Add source %e Add event %o Add other $s List sources $n List notes $$ List references The handling of source, event and user-defined records in LifeLines is still in development. For example, sources cannot yet be searched by REFN or be deleted. s Browse source records. This will bring up a list of all source records by number, showing REFN, title, and author for each. A record may be selected from this list to edit. e Browse event records. This will bring up a list of all event records by number. As of yet this does not display any information about each event. (Suggestions as to how to summarize events are welcome). A record may be selected from this list to edit. x Browse other records. This will bring up a list of all other records by number, showing the 0 level line as summary. A record may be selected from this list to edit. 1 Add a source record to the database. This operation (or alternatively %s from the person, family or auxiliary browse screens) is used to add a new source record to the database. LifeLines creates a template source and puts you in the screen editor to edit the template. The default template is: 0 SOUR 1 REFN 1 TITL Title 1 AUTH Author Do not change the 0 SOUR line. Otherwise you may edit this record any way you like. The 1 REFN line is a special line you can use to give the source a symbolic name that can be used in other records to refer to the source record. See the section on using REFN values. Because many sources have a title and an author, the default template has these lines. You may adjust the source template via the SOURREC user option (either at the database level, via the user options, or globally, via the configuration file). Here is how I recorded one of the sources in my database: Example of a source record 0 SOUR 1 REFN jcw 1 TITL The Wetmore Family of America, and its Collateral Branches: with 2 CONT Genealogical, Biographical, and Historical Notices 1 AUTH James Carnahan Wetmore 1 PUBL 2 DATE 1861 2 PLAC Albany, New York 2 INST Munsell and Rowland 2 ADDR 78 State Street The add source command in the x menu is equivalent to the %s command available in the person or family browse screen, in terms of entering the source record; after saving the source record though, there is one significant difference, in that that you then are presented with the following prompt (also, the key value of the new record is displayed in the status bar at this point): Please choose from the following options: 1: Insert xref automatically at bottom of current record. 2: Edit current record now to add xref manually. 3: Browse new record (without adding xref). 4: Return to current record (without adding xref). Commands: j Move down k Move up i Select q Quit The four options perform the following actions: 1: LifeLines adds a reference to the new source record at the bottom of the person or family record that was visible in the display screen when you prompted LifeLines to create the new source record. 2: LifeLines will open the person or family record that was visible in the display screen when you prompted LifeLines to create the new source record, so that you can manually enter a reference to the newly created source record (perhaps as a source reference to an event that you are planning to add). 3: LifeLines lets you browse (and optionally reopen for editing) your newly added source record. 4: You are returned to the person or family record that was visible in the display screen when you prompted LifeLines to create the new source record. No reference is added to the new record. 2 Edit source record from the database. Use this operation to edit an existing source record already in the database. When you select this operation LifeLines asks you to identify a source: Which source record do you want to edit? enter key or refn: Identify a source by entering its key value, with or without the leading S, or by entering its REFN value. LifeLines retrieves the record and puts you in the editor with the record. 3 Add an event record to the database. This operation (or alternatively %e from the person, family or auxiliary browse screens) adds a new event record to the database. LifeLines creates a template event and puts you in the screen editor to edit the template. The default template is: 0 EVEN 1 REFN 1 DATE 1 PLAC 1 INDI 2 NAME 2 ROLE 1 SOUR You may adjust the event template via the EVENREC user option (either at the database level, via the user options, or globally, via the configuration file). Do not change the 0 EVEN line. Otherwise you may edit this record any way you like. The 1 REFN line allows you to give this event a symbolic name you can use when you want to refer to this event from other records. See the section on using REFN values. The default template suggests that an event has a date, a place, and refers to persons in roles with respect to the event. There is far less experience with event-based GEDCOM than there is with simple person and family GEDCOM. You may even be wondering why you would need event records when you can simply tuck events away in person and family records. This is a topic that may get covered in an appendix. The add event command in the x menu is equivalent to the %e command available in the person or family browse screen, in terms of entering the event record; after saving the event record though, there is one significant difference, in that that you then are presented with the following prompt (also, the key value of the new record is displayed in the status bar at this point): Please choose from the following options: 1: Insert xref automatically at bottom of current record. 2: Edit current record now to add xref manually. 3: Browse new record (without adding xref). 4: Return to current record (without adding xref). Commands: j Move down k Move up i Select q Quit The four options perform the following actions: 1: LifeLines adds a reference to the new event record at the bottom of the person or family record that was visible in the display screen when you prompted LifeLines to create the new event record. 2: LifeLines will open the person or family record that was visible in the display screen when you prompted LifeLines to create the new event record, so that you can manually enter a reference to the newly created event record. 3: LifeLines lets you browse (and optionally reopen for editing) your newly added event record. 4: You are returned to the person or family record that was visible in the display screen when you prompted LifeLines to create the new event record. No reference is added to the new record. 4 Edit event record from the database. Use this operation to edit an existing event record from the database . When you select this operation LifeLines asks you to identify an event: Which event record do you want to edit? enter key or refn: You identify a event by entering its key value, with or without the leading E, or by entering its REFN value. LifeLines retrieves the record and places you in the screen editor with the record. 5 Add an other record to the database. This operation (or alternatively %o from the person, family or auxiliary browse screens) adds a new user-defined record to the database. LifeLines creates a template and puts you in the screen editor to edit the template. The default template is 0 XXXX 1 REFN Replace XXXX with the tag string you select for the type of the new record. You are free to choose any tag value except INDI, FAM, SOUR and EVEN. For example, if you keep record information about the ships that your North American immigrant ancestors arrived on, you would keep records about those ships in your database; the tag SHIP suggests itself for such records. The 1 REFN line allows you to give this record a symbolic name you can use when you want to refer to it from other records. See the section on using REFN values. You may adjust the other template via the OTHR user option (either at the database level, via the user options, or globally, via the configuration file). The add other record command in the x menu is equivalent to the %o command available in the person or family browse screen, in terms of entering the other record; after saving the record though, there is one significant difference, in that that you then are presented with the following prompt (also, the key value of the new record is displayed in the status bar at this point): Please choose from the following options: 1: Insert xref automatically at bottom of current record. 2: Edit current record now to add xref manually. 3: Browse new record (without adding xref). 4: Return to current record (without adding xref). Commands: j Move down k Move up i Select q Quit The four options perform the following actions: 1: LifeLines adds a reference to the new other record at the bottom of the person or family record that was visible in the display screen when you prompted LifeLines to create the new other record. 2: LifeLines will open the person or family record that was visible in the display screen when you prompted LifeLines to create the new other record, so that you can manually enter a reference to the newly created other record (perhaps as a note reference to an event that you are planning to add). 3: LifeLines lets you browse (and optionally reopen for editing) your newly added other record. 4: You are returned to the person or family record that was visible in the display screen when you prompted LifeLines to create the new other record. No reference is added to the new record. 6 Edit other record from the database. Use this operation to edit an existing user-defined record from the database. When you select this operation LifeLines asks you to identify the record: What record do you want to edit? enter key or refn: You identify a record by entering its key value, with or without the leading X, or by entering its REFN value. LifeLines retrieves the record and places you in the screen editor with the record. $s List sources This command is available in the person and family browse screens. It will bring up a list of all source records that are referenced within the currently displayed person or family record, by the order they appear in the person/family record, showing REFN, title, and author for each. A record may be selected from this list to view in the auxiliary browse screen (and optionally be edited from there). $n List notes This command is available in the person and family browse screens. It will bring up a list of all note records that are referenced within the currently displayed person or family record, by the order they appear in the person/family record, showing REFN, title, and author for each. A record may be selected from this list to view in the auxiliary browse screen (and optionally be edited from there). $$ List all references This command is available in the person and family browse screens. It will bring up a list of all records that are referenced within the currently displayed person or family record, by the order they appear in the person/family record, showing REFN, title, and author for each. A record may be selected from this list to view in the auxiliary browse screen (and optionally be edited from there). FAMILY STRUCTURE AND MERGING PERSONS AND FAMILIES LifeLines 3.0.2 has relaxed most of restrictions on family structure that were imposed by earlier versions. For example, a family record may have more than one parent/spouse of the same sex; a person may be a child in more than family. This is a controversial issue. Some users insist that family relationships should imply biological relatedness, and that all other relationships should be handled by different means. Others insist that non-traditional families (any number of parents/spouses of any sex) should be allowed, and that children can be members of more than one family (eg, natural family and adoptive family). LifeLines no longer takes a position on this matter; you are free to set up families any way you like; the operations that add spouses and children to families no longer check for non-traditional arrangements. It is possible that a future release will include a user option to either disallow or to ask for confirmation about non-traditional relationships. LifeLines provides features for merging persons together and for merging families together. The person merging feature is accessed from the tandem person browse mode, and the family merging feature is accessed from the tandem family browse mode. You browse to the two persons or families you want to merge and then use the j command. Merging is necessary when you discover that two or more person records, or two or more family records, represent the same person or family, respectively. Versions of LifeLines prior to 3.0.2 required that persons and families meet certain criteria before they could be merged. The criteria ensured that the merged persons and families would still meet traditional family structuring rules. With the relaxation of the structuring rules, restrictions on merging have also been removed. It is now possible to create non-traditional relationships by merging traditional persons and/or families. For example, if you merge two persons that happen to be children in two different families, the merged person will be a child in both families. If you want to maintain only traditional relationships in your database you may have to makes further to changes to relationships after you complete a merge operation. LINKING RECORDS TOGETHER AND USING THE REFN FEATURE Records in a LifeLines database may refer to other records via cross-reference links. The lineage-linked references are maintained directly by LifeLines through operations found in the browsing mode menus. These references are the links from a person to families (1 FAMC and 1 FAMS), and the links from a family to persons (1 HUSB, 1 WIFE and 1 CHIL). Because LifeLines maintains these links you are not allowed to change these lines when you are editing records. There are a couple of seeming exceptions to this rule. For example, you may change the order of 1 CHIL lines in a family record in order to change the order of children in a family, and you may change the order of 1 FAMS lines in a person record to change the order of families the person was a spouse or parent in. These operations are allowed because they don't affect which person records refer to which family records and vice versa. Besides the lineage-links that are maintained by LifeLines, you may place your own links in records. Probably the most common example of this is referring events within a person record to the record of the information source for the event. For example: Example of referring events from a person record 0 @I23@ INDI 1 NAME Thomas/Whitmore/ 1 BIRT 2 DATE about 1615 2 PLAC England 2 SOUR @S3@ ... 0 @S3@ SOUR 1 REFN cat 1 TITL New England Marriages Prior to 1700 1 AUTH Clarence Almon Torrey ... The 2 SOUR @S3@ line in the person record refers to the source record. LifeLines allows any specific structure within a record (in this case a birth event) to refer to another record. It is not possible to refer to a specific location within another record, though this may be supported eventually. This example implies that when linking one record to another you must know the key of the target record (S3 in the example). This is not desirable because internal record keys may change when the records are exported from one database or imported to another. Because internal key values are not permanent, LifeLines allows you to assign a permanent user-defined key to any record in the database using the 1 REFN line. The value of this line is a string that you choose as your permanent key value for the record. When adding a link to a record that has a user REFN key value, you may use that value instead of the internal key value. For example, when adding the person in the previous example you could edit the new record as follows: Example of adding a new person 0 INDI 1 NAME Thomas/Whitmore/ 1 BIRT 2 DATE about 1615 2 PLAC England 2 SOUR <cat> Instead of using the actual key value of the source, S3, the REFN value cat was used. The REFN value must be enclosed by angle brackets when used this way. LifeLines automatically replaces the REFN link with the proper internal key value when the record is stored in the database. The REFN value may also be used when searching for person, source, event and user-defined records. You should not add more than one REFN line to a record, and every REFN value should be unique. System and User Properties There are a number of properties that can be specified to customize the behavior of LifeLines. These properties can be specified in LifeLines configuration files, in each LifeLines database or in some cases by environment variables. System Properties are properties that have a predefined meaning to lifelines, such as LLEDITOR (see its meaning below). User Properties typically have no predefined meanings as they are simply a string that a report looks up in the property tables. It can be anything a user desires. To simplify report writing a number of User Properties are predefined with specific meanings. These User Property Names begin with 'user.' and are listed below. For example, many reports have abstracted the concept of the user's name to the property user.fullname. By defining this property in your llines startup file, it allows a report to reference your name as the source of the data being printed without having it hard-coded in the report. When LifeLines begins execution, it reads any specified configuration files and extracts Properties from the files read. It is possible for multiple configuration files to be read. Properties defined in these files will be stored in the global property table. If multiple definitions of the same property are seen, the latest definition overrides prior definitions. Configuration files are read as follows: Note: If a configuration file defines LLCONFIGFILE, it is not entered in the global table, but the value of this parameter is read as a configuration file after completion of reading the current file. Note: In the following, the name of a user configuration file is listed as .linesrc. On windows versions of lifelines this name is lines.cfg. 1 If a configuration file name is passed to the program with the -C option, or if LLCONFIGFILE is defined as an environment variable use the value supplied as the name of the configuration file. Do not read configuration information from the files listed in 2a, 2b, 2c, or 2d. 2a If the file /etc/lifelines.conf exists, read it. '/etc' is a placeholder for the standard location for system configuration files as defined when lifelines was built. It is often /etc or /usr/local/etc. 2b. If the file $HOME/.linesrc exists, load parameters from it. 2c. If the file .linesrc exists in the current directory read parameters from it. 2d If LLCONFIGFILE is defined in the command line or database table and its value is the name of a file, load parameters from that file. When LifeLines searches for a property it looks for it as follows: cmdline table First, LifeLines looks in the cmdline table. This table contains the values that have been specified using the -I option to LifeLines. database table Next, LifeLines looks in the database table. This table contains the values which have been stored in the current database. global table Next, LifeLines looks in the global table. This table contains the values found when reading in the configuration files. environment table Finally, LifeLines looks in the environment table. Only a handful of properties may be set from the environment, namely LLPROGRAMS, LLREPORTS, LLARCHIVES, LLDATABASES, and LLEDITOR. Properties are named group.subgroup.property or group.property, or even just property. The following keys are available at the moment: LLPROGRAMS LLPROGRAMS is the search path for LifeLines report generating and other programs. LLREPORTS LLREPORTS is used to select a directory where all generated reports and program outputs will be placed. LLARCHIVES LLARCHIVES is used to select a directory where all database backup files will be stored LLDATABASES LLDATABASES is a list of directories that contain database directories used to locate database directories themselves LLNEWDBDIR LLNEWDBDIR a single directory where new databases specified without paths will be created. This is a convenience for users who generally put all their databases under a single common directory. LLEDITOR Overrides the default screen editor Codeset Information: For the following parameters related to codeset, the values are a String denoting code set in use in data. Special handling is provided for UTF-8, which may be entered as "UTF-8", "utf-8", or "65001". (The official, and preferred, name is UTF-8. codeset Is a property that report programs can read whose value is the codeset of the current database. GedcomCodeset Specifies the default Codeset to use when processing Gedcom files. There are actually 3 properties. GedcomCodesetOut and GedcomCodesetIn can be used to specify the codeset for output or input. If either of these is not specified GedcomCodeset is used. Most Gedcom files should contain a codeset property, so this is not usually relevant when reading a Gedcom file, unless the input Gedcom file lacks a codeset property. This is used, however, when writing out a Gedcom file. NB: This is ignored if the database has no internal codeset specified. EditorCodeset Specifies the codeset to use for editing. There are actually 3 properties. EditorCodesetOut and EditorCodesetIn can be used to specify the codeset for output or input. If either of these is not specified EditorCodeset is used. This property allows lifelines to convert from its internal codeset to the one you use in your editor, so this is important when your editor does not use the same codeset as your database. NB: This is ignored if the database has no internal codeset specified. ReportCodeset Specifies the codeset to use for reports. There are actually 3 properties. ReportCodesetOut and ReportCodesetIn can be used to specify the codeset for output or input. If either of these is not specified ReportCodeset is used. Recently created reports may actually specify their codeset, in which case this is not used, but for reports which do not include a specification of codeset, the ReportCodesetIn (or ReportCodeset) specifies how the report will be understood. In any case, the output of a report program will be written in the codeset given by ReportCodesetOut (or ReportCodeset). NB: This is ignored if the database has no internal codeset specified. GuiCodeset Specifies the codeset to use for interaction with the graphical user interface. There are actually 3 properties. GuiCodesetOut and GuiCodesetIn can be used to specify the codeset for output or input. If either of these is not specified GuiCodeset is used. LongDisplayDate Six comma separated numbers. Specifing the format for days, months, years, date format, era format, and complex format. If string does not contain 6 comma separated numbers all formats are set to 0, except date format is set to 14. These formats are used by LifeLines to display dates in long format. LongDisplayDatePic a custom ymd date picture. A string in which %y, %m and %d will be converted to the corresponding year, month and day. This picture is used by LifeLines to display dates in long format. ShortDisplayDate Six comma separated numbers. Specifing the format for days, months, years, date format, era format, and complex format. If string does not contain 6 comma separated numbers all formats are set to 0, except date format is set to 14. These formats are used by LifeLines to display dates in short format. ShortDisplayDatePic a custom ymd date picture. A string in which %y, %m and %d will be converted to the corresponding year, month and day. This picture is used by LifeLines to display dates in short format. LocaleDir run-time specification of locale directory NewDbProps if specified, properties to add to a newly created database. The string is of the form "option1=value1\noption2=value2". IllegalChar Apparently not used at this time. DenySystemCalls If set to a non-zero value will disable use of the system function. UiLocaleCollate ui collating sequence UiLocaleMessages ui messages locale RptLocaleCollate Report Collating Sequence RptLocaleMessages Report Messages Locale ShortOmitString If defined this string replaces characters at the end of an event being printed. DisplayKeyTags If set to 1 an i or f is prepended to individual and family keys when shown on-screen. AnnotatePointers If set to 1 a descriptive comment is added to pointers when editing family or individual records to help identify who is being refered to. These tags are removed when the edit is finished and not stored in the database. TTPATH list of directories to search for translation table files (*.tt) TTPATH.debug if defined, LifeLines outputs debug information related to translation table processing. InputPath path to look for in when reading in gedcom files INDIREC The default template to use whenever creating a new individual. If not specified, the concatenation of the following is used: "0 INDI\n1 NAME Fname/Surname\n1 SEX MF\n" "1 BIRT\n 2 DATE\n 2 PLAC\n" "1 DEAT\n 2 DATE\n 2 PLAC\n1 SOUR\n" FAMRECBODY The default template to use whenever creating a new family. If not specified, the following is used: "1 MARR\n 2 DATE\n 2 PLAC\n 2 SOUR\n" Note: Unlike the others, this should not include the 0 level FAM tag.) SOURREC The default template to use whenever creating a new source. If not specified, the following is used in english: "0 SOUR\n1 REFN\n1 TITL Title\n1 AUTH Author" EVENREC The default template to use whenever creating a new event. If not specified, the following is used in english: "0 EVEN\n1 REFN\n1 DATE\n1 PLAC\n1 INDI\n 2 NAME\n 2 ROLE\n1 SOUR" OTHR The default template to use whenever creating a new other record. If not specified, the following is used in english: "0 XXXX\n1 REFN" HDR_SUBM string to use when writing gedcom files for the SUBM. Default is "1 SUBM". HDR_GEDC String containing the GEDC block for the header record when exporting GEDCOM. The default is "1 GEDC\n2 VERS 5.5\n2 FORM LINEAGE-LINKED". HDR_CHAR Normally lifelines will populate the CHAR block in the header record automatically when exporting GEDCOM, with the actual character encoding being used in the export; this can be found in the settings displayed in the u(ser) c(harset settings) page. However, if desired, the HDR_CHAR variable may be used to overwrite the entire CHAR line. String containing the CHAR block for the header record when exporting GEDCOM. An example HDR_CHAR value would be "1 CHAR ASCII". ReportLog name of file to print report program errors to, if not specified use stdout curses window. CrashLog_llexec file to write crash log into for llexec. If not set, log is written to the file CrashLog_llexec.log. CrashLog_llines file to write crash log into for llines. If not set, log is written to the file CrashLog_llines.log. LLTTEXPORT directory to write translation tables to. Default is the current directory. ImportLog where to log errors found while importing a gedcom file. default is errs.log. gettext.path for windows, if specified path to (re)load gettext dll iconv.path for Windows, path to link dynamically to gettext and iconv user.fullname The full name of the current user. If not found as a property it is fetched from the system when possible. user.email The email address of the current user. If not found as a property it is fetched from the system when possible. user.address Postal address of the current user. user.phone The phone number of the current user. user.url URL to the users home page. Other Executables dbverify dbverify is a utility to check an existing database and report on various inconsistencies. It can also repair a number of issues found. dbverify supports the following options: -a Perform all checks (does not include fixes) -D Fix bad delete entries -e Check events -f Check families -F Alter any bad family lineage pointers (to _badptr) -g Check for ghosts (names/refns) -G Check for & fix ghosts (names/refns) -h Display help text (this text) -i Check individuals -l Check database structure -m Check for records missing data entries -M Fix records missing data entries -n Noisy (echo every record processed) -s Check sours -x Check others btedit This program edits raw binary btree blocks in a LifeLines lifelines database file. Some information about its usage is provided by running: btedit -h Do NOT use this unless you know what you are doing and you have backed up your database. The LifeLines database has proven rather robust over the years. However, it is important to make frequent backups of any database. If you experience database corruption, make sure you save a copy of the database before trying any recovery process. Only work on a copy of the data so that the data is not further damaged. Try exporting the database to a gedcom file from within llines. Compare the saved file with previously saved versions. Editing the gedcom file to correct issues is often easier than using btedit. llexec llexec envokes the LifeLines report execution program without a GUI for non-interactive processing of report programs. The supported options are the same as for llines. An example usage, which will open the database 'myfamily' and run the report eol.ll is: llexec myfamily -x eol Programs that require input, will prompt for that data and read from standard input. If a program required the input of a 0 or 1 to control the output, the following is one way to allow use of llexec in a script: echo "1" | llexec myfamily -x myprog lifelines-3.0.61/docs/llexec.10000700002540200244210000000542610655637144016251 0ustar prappDomain Users.TH llexec 1 "2007 Aug" "Lifelines 3.0.61" .SH NAME llexec \- lifelines report processor .SH SYNOPSIS .B llexec [\fIOPTION\fR]... \fIDatabase\fR .br .SH DESCRIPTION .PP llexec is a slimmed down version of the \fIllines\fR lifelines genealogy program, used for executing reports from scripts. .PP llexec has simplified and stubbed out input/output in place of llines curses interface, and expects to be invoked with a report on the commandline (via the \fI-x\fR option). .PP llexec uses almost all the same options as \fIllines\fR. .SH OPTIONS The following options are some of the options available for \fIllexec\fR. .TP .BI \-C Specify configuration file location. .TP .BI \-F Finnish option (only available if compiled with Finnish flag) .TP .BI \-I Specify a user property (e.g. -ILLEDITOR=gvim) .TP .BI \-a Log dynamic memory operation (for debugging) .TP .BI \-c Supply cache values (eg, -ci400,4000f400,4000 sets direct indi & fam caches to 400, and indirect indi & fam caches to 4000) .TP .BI \-d Developmental/debug mode (signals are not caught) .TP .BI \-f Force open a database (only for use if reader/writer count is wrong) .TP .BI \-i Open database with immutable access (no protection against other access -- for use on read-only media) .TP .BI \-k Always show key values (normally key is not shown if a REFN is shown) .TP .BI \-l Lock (-ly) or unlock (-ln) a database for use with read only media (access to a locked database is treated as immutable) .TP .BI \-n Do not use traditional family rules .TP .BI \-o Specify program output filename (eg, -o/tmp/mytests) .TP .BI \-r Open database with read-only access (protect against other writer access) .TP .BI \-u \fICOLS\fP,\fIROWS Specify window size (eg, -u120,34 specifies 120 columns by 34 rows) .TP .BI \-w Open database with writeable access (protecte against other reader or writer access) .TP .BI \-x Execute a single lifelines report program directly .TP .BI \-z Use normal ASCII characters for drawing lines in user interface rather than the vt100 special characters .TP .BI \-? Display options summary, (on UNIX or Linux use the \-h option) .SH FILES llexec looks for a configuration file for various settings, in exactly the same manner as \fIllines\fR. See the lifelines userguide for details. .SH DOCUMENTATION The LifeLines documentation should be installed as part of the installation, and may also be viewed at the project site: http://lifelines.sourceforge.net. Look for ll-userguide and ll-reportmanual (with appropriate extensions for text, html and pdf formats). The normal installation process includes a large number of sample report programs that you can customize to suit your needs. In the directory containing these reports you should find a file named index.html which gives a very brief summary of each report. .SH "SEE ALSO" .BR llexec (1). lifelines-3.0.61/docs/llines.10000700002540200244210000000637510655637144016267 0ustar prappDomain Users.TH llines 1 "2007 Aug" "Lifelines 3.0.61" .SH NAME llines \- LifeLines genealogy program .SH SYNOPSIS .BI "llines [" OPTION ]... .br .BI "llines [" OPTION ]... Database .SH DESCRIPTION \fIllines\fR invokes the LifeLines genealogy program. .PP For up to date documentation please refer to the Documentation section of this man page. .PP LifeLines is a program to manipulate genealogical information in lineage-linked GEDCOM format. It has a curses interface, and a built-in interpreter for its own genealogical report language. .SH OPTIONS The following options are some of the options available for \fIllines\fR. .TP .BI \-C Specify configuration file location. .TP .BI \-F Finnish option (only available if compiled with Finnish flag) .TP .BI \-I Specify a user property (e.g. -ILLEDITOR=gvim) .TP .BI \-a Log dynamic memory operation (for debugging) .TP .BI \-c Supply cache values (eg, -ci400,4000f400,4000 sets direct indi & fam caches to 400, and indirect indi & fam caches to 4000) .TP .BI \-d Developmental/debug mode (signals are not caught) .TP .BI \-f Force open a database (only for use if reader/writer count is wrong) .TP .BI \-i Open database with immutable access (no protection against other access -- for use on read-only media) .TP .BI \-k Always show key values (normally key is not shown if a REFN is shown) .TP .BI \-l Lock (-ly) or unlock (-ln) a database for use with read only media (access to a locked database is treated as immutable) .TP .BI \-n Do not use traditional family rules .TP .BI \-o Specify program output filename (eg, -o/tmp/mytests) .TP .BI \-r Open database with read-only access (protect against other writer access) .TP .BI \-u \fICOLS\fP,\fIROWS\fR Specify window size (eg, -u120,34 specifies 120 columns by 34 rows) .TP .BI \-w Open database with writeable access (protecte against other reader or writer access) .TP .BI \-x Execute a single lifelines report program directly .TP .BI \-z Use normal ASCII characters for drawing lines in user interface rather than the vt100 special characters .TP .BI \-? Display options summary, (on UNIX or Linux use the \-h option) .PP \fIllexec\fR is a version of \fIllines\fR without the user interface for non-interactive processing of report programs. (Typically used with the -x option.) .PP \fIdbverify\fR is a utility program to verify Lifelines databases. For information about options, run \fIdbverify\fR with the \-h option. .SH FILES .I /etc/lifelines.conf .br .I ~/.linesrc .br .I ~/lines.cfg .br .I ./linesrc .br .I ./lines.cfg .RS Possible locations for Lifelines configuration file Lifelines looks for a configuration file for various settings. See section \fISystem And User Properties\fR in the userguide for details. .RE .SH DOCUMENTATION The LifeLines documentation should be installed as part of the installation, and may also be viewed at the project site: http://lifelines.sourceforge.net. Look for ll-userguide and ll-reportmanual (with appropriate extensions for text, html and pdf formats). The normal installation process includes a large number of sample report programs that you can customize to suit your needs. In the directory containing these reports you should find a file named index.html which gives a very brief summary of each report. .SH "SEE ALSO" .BR llexec (1), .BR dbverify (1), .BR btedit (1) lifelines-3.0.61/docs/Makefile.am0000700002540200244210000000262610631305405016730 0ustar prappDomain Users# This makefile creates the documentation directory # AUTOMAKE_OPTIONS = no-dependencies ################### # Manuals ################### MANUALS_en = ll-reportmanual.html ll-reportmanual.pdf \ ll-reportmanual.txt \ ll-userguide.html ll-userguide.pdf \ ll-userguide.txt ll-devguide.html \ ll-index.html ll-index.sv.html MANUALS_sv = ll-reportmanual.sv.html \ ll-userguide.sv.html MANUALS = $(MANUALS_en) $(MANUALS_sv) IMAGES = listops.jpg MANUALSSRC = ll-reportmanual.xml \ ll-userguide.xml \ ll-devguide.xml ################### # Obsolete Manuals ################### OLDGENFILES = lifelines.html lifelines.txt \ lifelines.pdf lifelines.ps OLDSRCFILES = lifelines.sgml OLDFILES = quickref.pdf quickref.ps ################### # Man Pages Manuals ################### MANPAGES = btedit.1 dbverify.1 llines.1 llexec.1 ################### # Rules ################### EXTRA_DIST = $(MANUALSSRC) $(MANUALS) $(MANPAGES) $(IMAGES) lifelines.vim man1_MANS = $(MANPAGES) CONFIG_CLEAN_FILES = $(OLDGENFILES) $(OLDSRCFILES) $(OLDFILES) $(MANUALS) docdir = $(datadir)/doc/lifelines doc_DATA = $(MANUALSSRC) $(MANUALS) dist_pkgdata_DATA = $(MANUALS) # sensible values: empty, simple, fancy all: @DOCS_TARGET@ .xml.pdf: -jw -f docbook -b pdf $^ .xml.html: -jw -f docbook -b html -V nochunks $^ .html.txt: if [ -f /usr/bin/lynx ] ; then \ /usr/bin/lynx -force_html -dump -nolist -width=76 $^ > $@ ;\ fi lifelines-3.0.61/docs/Makefile.in0000700002540200244210000003452610656416634016763 0ustar prappDomain Users# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This makefile creates the documentation directory # AUTOMAKE_OPTIONS = no-dependencies ################### # Manuals ################### srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ LIBOBJDIR = subdir = docs DIST_COMMON = $(dist_pkgdata_DATA) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/gettext/codeset.m4 \ $(top_srcdir)/build/gettext/gettext.m4 \ $(top_srcdir)/build/gettext/glibc21.m4 \ $(top_srcdir)/build/gettext/iconv.m4 \ $(top_srcdir)/build/gettext/intdiv0.m4 \ $(top_srcdir)/build/gettext/inttypes-pri.m4 \ $(top_srcdir)/build/gettext/inttypes.m4 \ $(top_srcdir)/build/gettext/inttypes_h.m4 \ $(top_srcdir)/build/gettext/isc-posix.m4 \ $(top_srcdir)/build/gettext/lcmessage.m4 \ $(top_srcdir)/build/gettext/lib-ld.m4 \ $(top_srcdir)/build/gettext/lib-link.m4 \ $(top_srcdir)/build/gettext/lib-prefix.m4 \ $(top_srcdir)/build/gettext/progtest.m4 \ $(top_srcdir)/build/gettext/stdint_h.m4 \ $(top_srcdir)/build/gettext/uintmax_t.m4 \ $(top_srcdir)/build/gettext/ulonglong.m4 \ $(top_srcdir)/build/autotools/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/build/autotools/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h SOURCES = DIST_SOURCES = man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(pkgdatadir)" \ "$(DESTDIR)$(docdir)" NROFF = nroff MANS = $(man1_MANS) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; dist_pkgdataDATA_INSTALL = $(INSTALL_DATA) docDATA_INSTALL = $(INSTALL_DATA) DATA = $(dist_pkgdata_DATA) $(doc_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOCS_TARGET = @DOCS_TARGET@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POSUB = @POSUB@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SGMLTOOLS = @SGMLTOOLS@ SHELL = @SHELL@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ YACC = @YACC@ YFLAGS = @YFLAGS@ ac_ct_CC = @ac_ct_CC@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = $(datadir)/doc/lifelines dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ MANUALS_en = ll-reportmanual.html ll-reportmanual.pdf \ ll-reportmanual.txt \ ll-userguide.html ll-userguide.pdf \ ll-userguide.txt ll-devguide.html \ ll-index.html ll-index.sv.html MANUALS_sv = ll-reportmanual.sv.html \ ll-userguide.sv.html MANUALS = $(MANUALS_en) $(MANUALS_sv) IMAGES = listops.jpg MANUALSSRC = ll-reportmanual.xml \ ll-userguide.xml \ ll-devguide.xml ################### # Obsolete Manuals ################### OLDGENFILES = lifelines.html lifelines.txt \ lifelines.pdf lifelines.ps OLDSRCFILES = lifelines.sgml OLDFILES = quickref.pdf quickref.ps ################### # Man Pages Manuals ################### MANPAGES = btedit.1 dbverify.1 llines.1 llexec.1 ################### # Rules ################### EXTRA_DIST = $(MANUALSSRC) $(MANUALS) $(MANPAGES) $(IMAGES) lifelines.vim man1_MANS = $(MANPAGES) CONFIG_CLEAN_FILES = $(OLDGENFILES) $(OLDSRCFILES) $(OLDFILES) $(MANUALS) doc_DATA = $(MANUALSSRC) $(MANUALS) dist_pkgdata_DATA = $(MANUALS) all: all-am .SUFFIXES: .SUFFIXES: .html .pdf .txt .xml $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu docs/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh uninstall-info-am: install-man1: $(man1_MANS) $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)" @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ else file=$$i; fi; \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 1*) ;; \ *) ext='1' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ done uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 1*) ;; \ *) ext='1' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ done install-dist_pkgdataDATA: $(dist_pkgdata_DATA) @$(NORMAL_INSTALL) test -z "$(pkgdatadir)" || $(mkdir_p) "$(DESTDIR)$(pkgdatadir)" @list='$(dist_pkgdata_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(dist_pkgdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgdatadir)/$$f'"; \ $(dist_pkgdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgdatadir)/$$f"; \ done uninstall-dist_pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_pkgdata_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pkgdatadir)/$$f'"; \ rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \ done install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) test -z "$(docdir)" || $(mkdir_p) "$(DESTDIR)$(docdir)" @list='$(doc_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(docDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(docdir)/$$f'"; \ $(docDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(docdir)/$$f"; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(docdir)/$$f'"; \ rm -f "$(DESTDIR)$(docdir)/$$f"; \ done tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dist_pkgdataDATA install-docDATA install-man install-exec-am: install-info: install-info-am install-man: install-man1 installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_pkgdataDATA uninstall-docDATA \ uninstall-info-am uninstall-man uninstall-man: uninstall-man1 .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_pkgdataDATA install-docDATA install-exec \ install-exec-am install-info install-info-am install-man \ install-man1 install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-dist_pkgdataDATA uninstall-docDATA \ uninstall-info-am uninstall-man uninstall-man1 # sensible values: empty, simple, fancy all: @DOCS_TARGET@ .xml.pdf: -jw -f docbook -b pdf $^ .xml.html: -jw -f docbook -b html -V nochunks $^ .html.txt: if [ -f /usr/bin/lynx ] ; then \ /usr/bin/lynx -force_html -dump -nolist -width=76 $^ > $@ ;\ fi # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lifelines-3.0.61/INSTALL0000700002540200244210000001535210655637141015010 0ustar prappDomain UsersLifeLines Source Release, Version 3.0.61 http://lifelines.sourceforge.net ------------------------------------------------------------------------- ******************************** Contents: 1. General (UNIX) installation 1a) Dependencies 2. Platform specific notes 2a) Platforms supported out-of-the-box 2b) Microsoft Windows 2c) cygwin 2d) rpm packages 2e) Debian binaries 2f) gcc 2.7.2.1 2g) curses 2h) Mac OS X ******************************** ****************************** 1. General (UNIX) installation ****************************** This is the source distribution of the LifeLines system, a genealogy software system. (If you are building from cvs sources, you will not have a configure script, and you should be reading the README.DEVELOPERS instructions.) LifeLines should compile correctly using GNU gcc or any native C compiler. It also will build using the Cygnus tools on Windows (but see note in the platform notes section below). To build and install LifeLines, do the following: ./configure (if that does't work, try 'sh ./configure') make make install If you do not have gettext & iconv installed, you may need to use ./configure --disable-nls This will generate Makefiles suitable for your platform and then build and install the LifeLines programs. You will end up with the following executables (installed in various places, depending on your platform): llines -- main LifeLines system program btedit -- general purpose btree edit program dbverify -- checks a LifeLines database for problems llines is the main LifeLines program. dverify can be used to verify the correctness of a LifeLines database. This is handy if you're storing databases on floppies, or just for peace of mind. btedit is a administration tool used for unmangling mangled databases, and is extremely powerful. You should only use this program under the expert guidance of a LifeLines developer. docs: The make process will attempt to generate html, pdf, and text documentation from the xml source files. If the jw tools are not found, errors will display, but the make will continue. Pregenerated versions of the documentation are included, in html, pdf, and text formats, so it is not necessary to have these tools installed. It is simply beneficial to ensure that they are absolutely up-to-date. ****************************** 1a) Dependencies ****************************** lifelines has a number of dependencies and they vary depending on how you build lifelines. (Avoid gcc version 2.7.2.1) 1. General dependencies ncurses 2. Building from CVS automake autoconf bison 3. Document Generation - see above about docs. Regeneration of the docs requires tools to convert from xml to html, pdf, and text. Currently the tools being used are docbook docbook-utils lynx 4. Multiple Language support - processed files are checked into cvs, but to rebuild the language files: gettext iconv Some notes on our document generation. The makefiles currently are setup to use the "docbook-utils" package -- part of the "docbook-tools" package at RedHat. More tools are becoming available to convert xml to html and/or pdf formats. On FreeBSD systems it is possible to use Xerces and Xalan -- a XML parser and XSLT transformer, respectively, from the Apache XML project: http://xml.apache.org/ $ xalan -o ll-userguide.html ll-userguide.xml .../docbook-xsl/html/docbook.xsl $ htmldoc -f ll-userguide.pdf ll-userguide.html DarwinPorts has xercesc, xalanc, docbook-xml, and docbook-xsl. ************************** 2. Platform specific notes ************************** ********************* 2a) Platforms supported out-of-the-box ********************* Many unix systems should be supported out-of-the-box with the tarball (lifelines-x.y.z.tar.gz) distribution. Reported successes include: lifelines-3.0.46: Fedora Core 3 FreeBSD 4.11-STABLE OS X 10.3.9 ********************* 2b) Microsoft Windows ********************* For installing the binary distribution on MS-Windows, refer to the file Install.LifeLines.Windows.txt included in that distribution (& also included in the docs subdirectory of the source distributions). For compiling from source on MS-Windows, if using cygwin, refer to the General (UNIX) instruction above (and see also the cygwin note below). If using MS Visual C++, you may use the project files included in the subdirectories beneath /win32/msvc6 (which are currently used by Perry to generate the binaries in the MS-Windows binary distribution). ********** 2c) Cygwin ********** Cygwin is a UNIX environment for MS-Windows. http://sources.redhat.com/cygwin The lines around the boxes in the lifelines curses GUI use OEM box characters, and so only display correctly with this setting: export CYGWIN=codepage:oem This of course affects the console code page. If all your data is ASCII, this solution may work fine for you. Otherwise, you may invoke llines with the -z switch to suppress curses graphics, and use primitive ASCII graphics. This is not particularly attractive, but is usable. Suggestions are welcome. Note that the -z commandline switch was added after the 3.0.9 release. To compile libiconv on cygwin, I had to compile it statically, eg, (in libiconv directory) ./configure --enable-static --disable-shared *************** 2d) rpm packages *************** The source distribution includes the spec file to create rpm packages. *************** 2e) Debian packages *************** Christian Perrier maintains a Debian port of linux. See: http://packages.debian.org/cgi-bin/search_packages.pl?searchon=names&version=all&exact=1&keywords=lifelines *************** 2f) gcc 2.7.2.1 *************** gcc 2.7.2.1 does not understand -Wreturn-type, so this must be removed from configure and from CFLAGS in interp/Makefile* files. This must be done before configuring, because it causes configure tests to fail spuriously. (Jan, 2002) ********** 2g) curses ********** Compiling with curses (lacking ncurses) on a BSDI 3.1 box, I had to add -ltermcap to the LIBS line in liflines/Makefile. (The symptom was "unknown symbol... _tputs.) However, I wound up core dumping at run-time, so I don't know what is going on. (Perry, Jan, 2002) ************ 2h) Mac OS X ************ Please see the following page about LifeLines on Mac OS X: http://homepage.mac.com/shrubbery/LifeLines (which is also available via the Apple downloads site and Stepwise.) This page offers both precompiled binaries and instructions for compilation. NB: Because the gnu tests for platform didn't recognize Darwin, on older versions, perhaps before 10.2.x, it was necessary to pass an argument to configure, eg, ./configure ppc There is no specific code needed for Darwin; this is just to avoid the macros getting angry at the unknown output from "uname -a". lifelines-3.0.61/intl/0000700002540200244210000000000010657071736014720 5ustar prappDomain Userslifelines-3.0.61/intl/bindtextdom.c0000700002540200244210000002324007606165340017404 0ustar prappDomain Users/* Implementation of the bindtextdomain(3) function Copyright (C) 1995-1998, 2000, 2001, 2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #ifdef _LIBC # include #else # include "libgnuintl.h" #endif #include "gettextP.h" #ifdef _LIBC /* We have to handle multi-threaded applications. */ # include #else /* Provide dummy implementation if this is outside glibc. */ # define __libc_rwlock_define(CLASS, NAME) # define __libc_rwlock_wrlock(NAME) # define __libc_rwlock_unlock(NAME) #endif /* The internal variables in the standalone libintl.a must have different names than the internal variables in GNU libc, otherwise programs using libintl.a cannot be linked statically. */ #if !defined _LIBC # define _nl_default_dirname libintl_nl_default_dirname # define _nl_domain_bindings libintl_nl_domain_bindings #endif /* Some compilers, like SunOS4 cc, don't have offsetof in . */ #ifndef offsetof # define offsetof(type,ident) ((size_t)&(((type*)0)->ident)) #endif /* @@ end of prolog @@ */ /* Contains the default location of the message catalogs. */ extern const char _nl_default_dirname[]; /* List with bindings of specific domains. */ extern struct binding *_nl_domain_bindings; /* Lock variable to protect the global data in the gettext implementation. */ __libc_rwlock_define (extern, _nl_state_lock attribute_hidden) /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define BINDTEXTDOMAIN __bindtextdomain # define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset # ifndef strdup # define strdup(str) __strdup (str) # endif #else # define BINDTEXTDOMAIN libintl_bindtextdomain # define BIND_TEXTDOMAIN_CODESET libintl_bind_textdomain_codeset #endif /* Prototypes for local functions. */ static void set_binding_values PARAMS ((const char *domainname, const char **dirnamep, const char **codesetp)); /* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP to be used for the DOMAINNAME message catalog. If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not modified, only the current value is returned. If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither modified nor returned. */ static void set_binding_values (domainname, dirnamep, codesetp) const char *domainname; const char **dirnamep; const char **codesetp; { struct binding *binding; int modified; /* Some sanity checks. */ if (domainname == NULL || domainname[0] == '\0') { if (dirnamep) *dirnamep = NULL; if (codesetp) *codesetp = NULL; return; } __libc_rwlock_wrlock (_nl_state_lock); modified = 0; for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) { int compare = strcmp (domainname, binding->domainname); if (compare == 0) /* We found it! */ break; if (compare < 0) { /* It is not in the list. */ binding = NULL; break; } } if (binding != NULL) { if (dirnamep) { const char *dirname = *dirnamep; if (dirname == NULL) /* The current binding has be to returned. */ *dirnamep = binding->dirname; else { /* The domain is already bound. If the new value and the old one are equal we simply do nothing. Otherwise replace the old binding. */ char *result = binding->dirname; if (strcmp (dirname, result) != 0) { if (strcmp (dirname, _nl_default_dirname) == 0) result = (char *) _nl_default_dirname; else { #if defined _LIBC || defined HAVE_STRDUP result = strdup (dirname); #else size_t len = strlen (dirname) + 1; result = (char *) malloc (len); if (__builtin_expect (result != NULL, 1)) memcpy (result, dirname, len); #endif } if (__builtin_expect (result != NULL, 1)) { if (binding->dirname != _nl_default_dirname) free (binding->dirname); binding->dirname = result; modified = 1; } } *dirnamep = result; } } if (codesetp) { const char *codeset = *codesetp; if (codeset == NULL) /* The current binding has be to returned. */ *codesetp = binding->codeset; else { /* The domain is already bound. If the new value and the old one are equal we simply do nothing. Otherwise replace the old binding. */ char *result = binding->codeset; if (result == NULL || strcmp (codeset, result) != 0) { #if defined _LIBC || defined HAVE_STRDUP result = strdup (codeset); #else size_t len = strlen (codeset) + 1; result = (char *) malloc (len); if (__builtin_expect (result != NULL, 1)) memcpy (result, codeset, len); #endif if (__builtin_expect (result != NULL, 1)) { if (binding->codeset != NULL) free (binding->codeset); binding->codeset = result; binding->codeset_cntr++; modified = 1; } } *codesetp = result; } } } else if ((dirnamep == NULL || *dirnamep == NULL) && (codesetp == NULL || *codesetp == NULL)) { /* Simply return the default values. */ if (dirnamep) *dirnamep = _nl_default_dirname; if (codesetp) *codesetp = NULL; } else { /* We have to create a new binding. */ size_t len = strlen (domainname) + 1; struct binding *new_binding = (struct binding *) malloc (offsetof (struct binding, domainname) + len); if (__builtin_expect (new_binding == NULL, 0)) goto failed; memcpy (new_binding->domainname, domainname, len); if (dirnamep) { const char *dirname = *dirnamep; if (dirname == NULL) /* The default value. */ dirname = _nl_default_dirname; else { if (strcmp (dirname, _nl_default_dirname) == 0) dirname = _nl_default_dirname; else { char *result; #if defined _LIBC || defined HAVE_STRDUP result = strdup (dirname); if (__builtin_expect (result == NULL, 0)) goto failed_dirname; #else size_t len = strlen (dirname) + 1; result = (char *) malloc (len); if (__builtin_expect (result == NULL, 0)) goto failed_dirname; memcpy (result, dirname, len); #endif dirname = result; } } *dirnamep = dirname; new_binding->dirname = (char *) dirname; } else /* The default value. */ new_binding->dirname = (char *) _nl_default_dirname; new_binding->codeset_cntr = 0; if (codesetp) { const char *codeset = *codesetp; if (codeset != NULL) { char *result; #if defined _LIBC || defined HAVE_STRDUP result = strdup (codeset); if (__builtin_expect (result == NULL, 0)) goto failed_codeset; #else size_t len = strlen (codeset) + 1; result = (char *) malloc (len); if (__builtin_expect (result == NULL, 0)) goto failed_codeset; memcpy (result, codeset, len); #endif codeset = result; new_binding->codeset_cntr++; } *codesetp = codeset; new_binding->codeset = (char *) codeset; } else new_binding->codeset = NULL; /* Now enqueue it. */ if (_nl_domain_bindings == NULL || strcmp (domainname, _nl_domain_bindings->domainname) < 0) { new_binding->next = _nl_domain_bindings; _nl_domain_bindings = new_binding; } else { binding = _nl_domain_bindings; while (binding->next != NULL && strcmp (domainname, binding->next->domainname) > 0) binding = binding->next; new_binding->next = binding->next; binding->next = new_binding; } modified = 1; /* Here we deal with memory allocation failures. */ if (0) { failed_codeset: if (new_binding->dirname != _nl_default_dirname) free (new_binding->dirname); failed_dirname: free (new_binding); failed: if (dirnamep) *dirnamep = NULL; if (codesetp) *codesetp = NULL; } } /* If we modified any binding, we flush the caches. */ if (modified) ++_nl_msg_cat_cntr; __libc_rwlock_unlock (_nl_state_lock); } /* Specify that the DOMAINNAME message catalog will be found in DIRNAME rather than in the system locale data base. */ char * BINDTEXTDOMAIN (domainname, dirname) const char *domainname; const char *dirname; { set_binding_values (domainname, &dirname, NULL); return (char *) dirname; } /* Specify the character encoding in which the messages from the DOMAINNAME message catalog will be returned. */ char * BIND_TEXTDOMAIN_CODESET (domainname, codeset) const char *domainname; const char *codeset; { set_binding_values (domainname, NULL, &codeset); return (char *) codeset; } #ifdef _LIBC /* Aliases for function names in GNU C Library. */ weak_alias (__bindtextdomain, bindtextdomain); weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset); #endif lifelines-3.0.61/intl/ChangeLog0000700002540200244210000000011107606165340016461 0ustar prappDomain Users2002-08-06 GNU * Version 0.11.5 released. lifelines-3.0.61/intl/config.charset0000700002540200244210000003341207606165340017541 0ustar prappDomain Users#! /bin/sh # Output a system dependent table of character encoding aliases. # # Copyright (C) 2000-2002 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Library General Public License as published # by the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, # USA. # # The table consists of lines of the form # ALIAS CANONICAL # # ALIAS is the (system dependent) result of "nl_langinfo (CODESET)". # ALIAS is compared in a case sensitive way. # # CANONICAL is the GNU canonical name for this character encoding. # It must be an encoding supported by libiconv. Support by GNU libc is # also desirable. CANONICAL is case insensitive. Usually an upper case # MIME charset name is preferred. # The current list of GNU canonical charset names is as follows. # # name used by which systems a MIME name? # ASCII, ANSI_X3.4-1968 glibc solaris freebsd # ISO-8859-1 glibc aix hpux irix osf solaris freebsd yes # ISO-8859-2 glibc aix hpux irix osf solaris freebsd yes # ISO-8859-3 glibc solaris yes # ISO-8859-4 osf solaris freebsd yes # ISO-8859-5 glibc aix hpux irix osf solaris freebsd yes # ISO-8859-6 glibc aix hpux solaris yes # ISO-8859-7 glibc aix hpux irix osf solaris yes # ISO-8859-8 glibc aix hpux osf solaris yes # ISO-8859-9 glibc aix hpux irix osf solaris yes # ISO-8859-13 glibc # ISO-8859-14 glibc # ISO-8859-15 glibc aix osf solaris freebsd # KOI8-R glibc solaris freebsd yes # KOI8-U glibc freebsd yes # KOI8-T glibc # CP437 dos # CP775 dos # CP850 aix osf dos # CP852 dos # CP855 dos # CP856 aix # CP857 dos # CP861 dos # CP862 dos # CP864 dos # CP865 dos # CP866 freebsd dos # CP869 dos # CP874 woe32 dos # CP922 aix # CP932 aix woe32 dos # CP943 aix # CP949 osf woe32 dos # CP950 woe32 dos # CP1046 aix # CP1124 aix # CP1125 dos # CP1129 aix # CP1250 woe32 # CP1251 glibc woe32 # CP1252 aix woe32 # CP1253 woe32 # CP1254 woe32 # CP1255 glibc woe32 # CP1256 woe32 # CP1257 woe32 # GB2312 glibc aix hpux irix solaris freebsd yes # EUC-JP glibc aix hpux irix osf solaris freebsd yes # EUC-KR glibc aix hpux irix osf solaris freebsd yes # EUC-TW glibc aix hpux irix osf solaris # BIG5 glibc aix hpux osf solaris freebsd yes # BIG5-HKSCS glibc solaris # GBK glibc aix osf solaris woe32 dos # GB18030 glibc solaris # SHIFT_JIS hpux osf solaris freebsd yes # JOHAB glibc solaris woe32 # TIS-620 glibc aix hpux osf solaris # VISCII glibc yes # TCVN5712-1 glibc # GEORGIAN-PS glibc # HP-ROMAN8 hpux # HP-ARABIC8 hpux # HP-GREEK8 hpux # HP-HEBREW8 hpux # HP-TURKISH8 hpux # HP-KANA8 hpux # DEC-KANJI osf # DEC-HANYU osf # UTF-8 glibc aix hpux osf solaris yes # # Note: Names which are not marked as being a MIME name should not be used in # Internet protocols for information interchange (mail, news, etc.). # # Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications # must understand both names and treat them as equivalent. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM host="$1" os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'` echo "# This file contains a table of character encoding aliases," echo "# suitable for operating system '${os}'." echo "# It was automatically generated from config.charset." # List of references, updated during installation: echo "# Packages using this file: " case "$os" in linux* | *-gnu*) # With glibc-2.1 or newer, we don't need any canonicalization, # because glibc has iconv and both glibc and libiconv support all # GNU canonical names directly. Therefore, the Makefile does not # need to install the alias file at all. # The following applies only to glibc-2.0.x and older libcs. echo "ISO_646.IRV:1983 ASCII" ;; aix*) echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-6 ISO-8859-6" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-8 ISO-8859-8" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-15 ISO-8859-15" echo "IBM-850 CP850" echo "IBM-856 CP856" echo "IBM-921 ISO-8859-13" echo "IBM-922 CP922" echo "IBM-932 CP932" echo "IBM-943 CP943" echo "IBM-1046 CP1046" echo "IBM-1124 CP1124" echo "IBM-1129 CP1129" echo "IBM-1252 CP1252" echo "IBM-eucCN GB2312" echo "IBM-eucJP EUC-JP" echo "IBM-eucKR EUC-KR" echo "IBM-eucTW EUC-TW" echo "big5 BIG5" echo "GBK GBK" echo "TIS-620 TIS-620" echo "UTF-8 UTF-8" ;; hpux*) echo "iso88591 ISO-8859-1" echo "iso88592 ISO-8859-2" echo "iso88595 ISO-8859-5" echo "iso88596 ISO-8859-6" echo "iso88597 ISO-8859-7" echo "iso88598 ISO-8859-8" echo "iso88599 ISO-8859-9" echo "iso885915 ISO-8859-15" echo "roman8 HP-ROMAN8" echo "arabic8 HP-ARABIC8" echo "greek8 HP-GREEK8" echo "hebrew8 HP-HEBREW8" echo "turkish8 HP-TURKISH8" echo "kana8 HP-KANA8" echo "tis620 TIS-620" echo "big5 BIG5" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" echo "hp15CN GB2312" #echo "ccdc ?" # what is this? echo "SJIS SHIFT_JIS" echo "utf8 UTF-8" ;; irix*) echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-9 ISO-8859-9" echo "eucCN GB2312" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" ;; osf*) echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-8 ISO-8859-8" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-15 ISO-8859-15" echo "cp850 CP850" echo "big5 BIG5" echo "dechanyu DEC-HANYU" echo "dechanzi GB2312" echo "deckanji DEC-KANJI" echo "deckorean EUC-KR" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" echo "GBK GBK" echo "KSC5601 CP949" echo "sdeckanji EUC-JP" echo "SJIS SHIFT_JIS" echo "TACTIS TIS-620" echo "UTF-8 UTF-8" ;; solaris*) echo "646 ASCII" echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-3 ISO-8859-3" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-6 ISO-8859-6" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-8 ISO-8859-8" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-15 ISO-8859-15" echo "koi8-r KOI8-R" echo "BIG5 BIG5" echo "Big5-HKSCS BIG5-HKSCS" echo "gb2312 GB2312" echo "GBK GBK" echo "GB18030 GB18030" echo "cns11643 EUC-TW" echo "5601 EUC-KR" echo "ko_KR.johap92 JOHAB" echo "eucJP EUC-JP" echo "PCK SHIFT_JIS" echo "TIS620.2533 TIS-620" #echo "sun_eu_greek ?" # what is this? echo "UTF-8 UTF-8" ;; freebsd* | os2*) # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just # reuse FreeBSD's locale data for OS/2. echo "C ASCII" echo "US-ASCII ASCII" for l in la_LN lt_LN; do echo "$l.ASCII ASCII" done for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \ lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do echo "$l.ISO_8859-1 ISO-8859-1" echo "$l.DIS_8859-15 ISO-8859-15" done for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do echo "$l.ISO_8859-2 ISO-8859-2" done for l in la_LN lt_LT; do echo "$l.ISO_8859-4 ISO-8859-4" done for l in ru_RU ru_SU; do echo "$l.KOI8-R KOI8-R" echo "$l.ISO_8859-5 ISO-8859-5" echo "$l.CP866 CP866" done echo "uk_UA.KOI8-U KOI8-U" echo "zh_TW.BIG5 BIG5" echo "zh_TW.Big5 BIG5" echo "zh_CN.EUC GB2312" echo "ja_JP.EUC EUC-JP" echo "ja_JP.SJIS SHIFT_JIS" echo "ja_JP.Shift_JIS SHIFT_JIS" echo "ko_KR.EUC EUC-KR" ;; netbsd*) echo "646 ASCII" echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-15 ISO-8859-15" echo "eucCN GB2312" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" echo "BIG5 BIG5" echo "SJIS SHIFT_JIS" ;; beos*) # BeOS has a single locale, and it has UTF-8 encoding. echo "* UTF-8" ;; msdosdjgpp*) # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. echo "#" echo "# The encodings given here may not all be correct." echo "# If you find that the encoding given for your language and" echo "# country is not the one your DOS machine actually uses, just" echo "# correct it in this file, and send a mail to" echo "# Juan Manuel Guerrero " echo "# and Bruno Haible ." echo "#" echo "C ASCII" # ISO-8859-1 languages echo "ca CP850" echo "ca_ES CP850" echo "da CP865" # not CP850 ?? echo "da_DK CP865" # not CP850 ?? echo "de CP850" echo "de_AT CP850" echo "de_CH CP850" echo "de_DE CP850" echo "en CP850" echo "en_AU CP850" # not CP437 ?? echo "en_CA CP850" echo "en_GB CP850" echo "en_NZ CP437" echo "en_US CP437" echo "en_ZA CP850" # not CP437 ?? echo "es CP850" echo "es_AR CP850" echo "es_BO CP850" echo "es_CL CP850" echo "es_CO CP850" echo "es_CR CP850" echo "es_CU CP850" echo "es_DO CP850" echo "es_EC CP850" echo "es_ES CP850" echo "es_GT CP850" echo "es_HN CP850" echo "es_MX CP850" echo "es_NI CP850" echo "es_PA CP850" echo "es_PY CP850" echo "es_PE CP850" echo "es_SV CP850" echo "es_UY CP850" echo "es_VE CP850" echo "et CP850" echo "et_EE CP850" echo "eu CP850" echo "eu_ES CP850" echo "fi CP850" echo "fi_FI CP850" echo "fr CP850" echo "fr_BE CP850" echo "fr_CA CP850" echo "fr_CH CP850" echo "fr_FR CP850" echo "ga CP850" echo "ga_IE CP850" echo "gd CP850" echo "gd_GB CP850" echo "gl CP850" echo "gl_ES CP850" echo "id CP850" # not CP437 ?? echo "id_ID CP850" # not CP437 ?? echo "is CP861" # not CP850 ?? echo "is_IS CP861" # not CP850 ?? echo "it CP850" echo "it_CH CP850" echo "it_IT CP850" echo "lt CP775" echo "lt_LT CP775" echo "lv CP775" echo "lv_LV CP775" echo "nb CP865" # not CP850 ?? echo "nb_NO CP865" # not CP850 ?? echo "nl CP850" echo "nl_BE CP850" echo "nl_NL CP850" echo "nn CP865" # not CP850 ?? echo "nn_NO CP865" # not CP850 ?? echo "no CP865" # not CP850 ?? echo "no_NO CP865" # not CP850 ?? echo "pt CP850" echo "pt_BR CP850" echo "pt_PT CP850" echo "sv CP850" echo "sv_SE CP850" # ISO-8859-2 languages echo "cs CP852" echo "cs_CZ CP852" echo "hr CP852" echo "hr_HR CP852" echo "hu CP852" echo "hu_HU CP852" echo "pl CP852" echo "pl_PL CP852" echo "ro CP852" echo "ro_RO CP852" echo "sk CP852" echo "sk_SK CP852" echo "sl CP852" echo "sl_SI CP852" echo "sq CP852" echo "sq_AL CP852" echo "sr CP852" # CP852 or CP866 or CP855 ?? echo "sr_YU CP852" # CP852 or CP866 or CP855 ?? # ISO-8859-3 languages echo "mt CP850" echo "mt_MT CP850" # ISO-8859-5 languages echo "be CP866" echo "be_BE CP866" echo "bg CP866" # not CP855 ?? echo "bg_BG CP866" # not CP855 ?? echo "mk CP866" # not CP855 ?? echo "mk_MK CP866" # not CP855 ?? echo "ru CP866" echo "ru_RU CP866" echo "uk CP1125" echo "uk_UA CP1125" # ISO-8859-6 languages echo "ar CP864" echo "ar_AE CP864" echo "ar_DZ CP864" echo "ar_EG CP864" echo "ar_IQ CP864" echo "ar_IR CP864" echo "ar_JO CP864" echo "ar_KW CP864" echo "ar_MA CP864" echo "ar_OM CP864" echo "ar_QA CP864" echo "ar_SA CP864" echo "ar_SY CP864" # ISO-8859-7 languages echo "el CP869" echo "el_GR CP869" # ISO-8859-8 languages echo "he CP862" echo "he_IL CP862" # ISO-8859-9 languages echo "tr CP857" echo "tr_TR CP857" # Japanese echo "ja CP932" echo "ja_JP CP932" # Chinese echo "zh_CN GBK" echo "zh_TW CP950" # not CP938 ?? # Korean echo "kr CP949" # not CP934 ?? echo "kr_KR CP949" # not CP934 ?? # Thai echo "th CP874" echo "th_TH CP874" # Other echo "eo CP850" echo "eo_EO CP850" ;; esac lifelines-3.0.61/intl/dcgettext.c0000700002540200244210000000350007606165340017053 0ustar prappDomain Users/* Implementation of the dcgettext(3) function. Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DCGETTEXT __dcgettext # define DCIGETTEXT __dcigettext #else # define DCGETTEXT libintl_dcgettext # define DCIGETTEXT libintl_dcigettext #endif /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ char * DCGETTEXT (domainname, msgid, category) const char *domainname; const char *msgid; int category; { return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ INTDEF(__dcgettext) weak_alias (__dcgettext, dcgettext); #endif lifelines-3.0.61/intl/dcigettext.c0000700002540200244210000010034407606165340017230 0ustar prappDomain Users/* Implementation of the internal dcigettext function. Copyright (C) 1995-1999, 2000-2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Tell glibc's to provide a prototype for mempcpy(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include #ifdef __GNUC__ # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif #endif #include #ifndef errno extern int errno; #endif #ifndef __set_errno # define __set_errno(val) errno = (val) #endif #include #include #include #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #include #ifdef _LIBC /* Guess whether integer division by zero raises signal SIGFPE. Set to 1 only if you know for sure. In case of doubt, set to 0. */ # if defined __alpha__ || defined __arm__ || defined __i386__ \ || defined __m68k__ || defined __s390__ # define INTDIV0_RAISES_SIGFPE 1 # else # define INTDIV0_RAISES_SIGFPE 0 # endif #endif #if !INTDIV0_RAISES_SIGFPE # include #endif #if defined HAVE_SYS_PARAM_H || defined _LIBC # include #endif #include "gettextP.h" #include "plural-exp.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif #include "hash-string.h" /* Thread safetyness. */ #ifdef _LIBC # include #else /* Provide dummy implementation if this is outside glibc. */ # define __libc_lock_define_initialized(CLASS, NAME) # define __libc_lock_lock(NAME) # define __libc_lock_unlock(NAME) # define __libc_rwlock_define_initialized(CLASS, NAME) # define __libc_rwlock_rdlock(NAME) # define __libc_rwlock_unlock(NAME) #endif /* Alignment of types. */ #if defined __GNUC__ && __GNUC__ >= 2 # define alignof(TYPE) __alignof__ (TYPE) #else # define alignof(TYPE) \ ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2) #endif /* The internal variables in the standalone libintl.a must have different names than the internal variables in GNU libc, otherwise programs using libintl.a cannot be linked statically. */ #if !defined _LIBC # define _nl_default_default_domain libintl_nl_default_default_domain # define _nl_current_default_domain libintl_nl_current_default_domain # define _nl_default_dirname libintl_nl_default_dirname # define _nl_domain_bindings libintl_nl_domain_bindings #endif /* Some compilers, like SunOS4 cc, don't have offsetof in . */ #ifndef offsetof # define offsetof(type,ident) ((size_t)&(((type*)0)->ident)) #endif /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # define getcwd __getcwd # ifndef stpcpy # define stpcpy __stpcpy # endif # define tfind __tfind #else # if !defined HAVE_GETCWD char *getwd (); # define getcwd(buf, max) getwd (buf) # else char *getcwd (); # endif # ifndef HAVE_STPCPY static char *stpcpy PARAMS ((char *dest, const char *src)); # endif # ifndef HAVE_MEMPCPY static void *mempcpy PARAMS ((void *dest, const void *src, size_t n)); # endif #endif /* Amount to increase buffer size by in each try. */ #define PATH_INCR 32 /* The following is from pathmax.h. */ /* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define PATH_MAX but might cause redefinition warnings when sys/param.h is later included (as on MORE/BSD 4.3). */ #if defined _POSIX_VERSION || (defined HAVE_LIMITS_H && !defined __GNUC__) # include #endif #ifndef _POSIX_PATH_MAX # define _POSIX_PATH_MAX 255 #endif #if !defined PATH_MAX && defined _PC_PATH_MAX # define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX)) #endif /* Don't include sys/param.h if it already has been. */ #if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN # include #endif #if !defined PATH_MAX && defined MAXPATHLEN # define PATH_MAX MAXPATHLEN #endif #ifndef PATH_MAX # define PATH_MAX _POSIX_PATH_MAX #endif /* Pathname support. ISSLASH(C) tests whether C is a directory separator character. IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not, it may be concatenated to a directory pathname. IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. */ #if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ /* Win32, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') # define HAS_DEVICE(P) \ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ && (P)[1] == ':') # define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P)) # define IS_PATH_WITH_DIR(P) \ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) #else /* Unix */ # define ISSLASH(C) ((C) == '/') # define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0]) # define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) #endif /* This is the type used for the search tree where known translations are stored. */ struct known_translation_t { /* Domain in which to search. */ char *domainname; /* The category. */ int category; /* State of the catalog counter at the point the string was found. */ int counter; /* Catalog where the string was found. */ struct loaded_l10nfile *domain; /* And finally the translation. */ const char *translation; size_t translation_length; /* Pointer to the string in question. */ char msgid[ZERO]; }; /* Root of the search tree with known translations. We can use this only if the system provides the `tsearch' function family. */ #if defined HAVE_TSEARCH || defined _LIBC # include static void *root; # ifdef _LIBC # define tsearch __tsearch # endif /* Function to compare two entries in the table of known translations. */ static int transcmp PARAMS ((const void *p1, const void *p2)); static int transcmp (p1, p2) const void *p1; const void *p2; { const struct known_translation_t *s1; const struct known_translation_t *s2; int result; s1 = (const struct known_translation_t *) p1; s2 = (const struct known_translation_t *) p2; result = strcmp (s1->msgid, s2->msgid); if (result == 0) { result = strcmp (s1->domainname, s2->domainname); if (result == 0) /* We compare the category last (though this is the cheapest operation) since it is hopefully always the same (namely LC_MESSAGES). */ result = s1->category - s2->category; } return result; } #endif /* Name of the default domain used for gettext(3) prior any call to textdomain(3). The default value for this is "messages". */ const char _nl_default_default_domain[] attribute_hidden = "messages"; /* Value used as the default domain for gettext(3). */ const char *_nl_current_default_domain attribute_hidden = _nl_default_default_domain; /* Contains the default location of the message catalogs. */ #if defined __EMX__ extern const char _nl_default_dirname[]; #else const char _nl_default_dirname[] = LOCALEDIR; #endif /* List with bindings of specific domains created by bindtextdomain() calls. */ struct binding *_nl_domain_bindings; /* Prototypes for local functions. */ static char *plural_lookup PARAMS ((struct loaded_l10nfile *domain, unsigned long int n, const char *translation, size_t translation_len)) internal_function; static const char *category_to_name PARAMS ((int category)) internal_function; static const char *guess_category_value PARAMS ((int category, const char *categoryname)) internal_function; /* For those loosing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA /* Nothing has to be done. */ # define freea(p) /* nothing */ # define ADD_BLOCK(list, address) /* nothing */ # define FREE_BLOCKS(list) /* nothing */ #else struct block_list { void *address; struct block_list *next; }; # define ADD_BLOCK(list, addr) \ do { \ struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \ /* If we cannot get a free block we cannot add the new element to \ the list. */ \ if (newp != NULL) { \ newp->address = (addr); \ newp->next = (list); \ (list) = newp; \ } \ } while (0) # define FREE_BLOCKS(list) \ do { \ while (list != NULL) { \ struct block_list *old = list; \ list = list->next; \ free (old->address); \ free (old); \ } \ } while (0) # undef alloca # define alloca(size) (malloc (size)) # define freea(p) free (p) #endif /* have alloca */ #ifdef _LIBC /* List of blocks allocated for translations. */ typedef struct transmem_list { struct transmem_list *next; char data[ZERO]; } transmem_block_t; static struct transmem_list *transmem_list; #else typedef unsigned char transmem_block_t; #endif /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DCIGETTEXT __dcigettext #else # define DCIGETTEXT libintl_dcigettext #endif /* Lock variable to protect the global data in the gettext implementation. */ #ifdef _LIBC __libc_rwlock_define_initialized (, _nl_state_lock attribute_hidden) #endif /* Checking whether the binaries runs SUID must be done and glibc provides easier methods therefore we make a difference here. */ #ifdef _LIBC # define ENABLE_SECURE __libc_enable_secure # define DETERMINE_SECURE #else # ifndef HAVE_GETUID # define getuid() 0 # endif # ifndef HAVE_GETGID # define getgid() 0 # endif # ifndef HAVE_GETEUID # define geteuid() getuid() # endif # ifndef HAVE_GETEGID # define getegid() getgid() # endif static int enable_secure; # define ENABLE_SECURE (enable_secure == 1) # define DETERMINE_SECURE \ if (enable_secure == 0) \ { \ if (getuid () != geteuid () || getgid () != getegid ()) \ enable_secure = 1; \ else \ enable_secure = -1; \ } #endif /* Get the function to evaluate the plural expression. */ #include "eval-plural.h" /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale and, if PLURAL is nonzero, search over string depending on the plural form determined by N. */ char * DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category) const char *domainname; const char *msgid1; const char *msgid2; int plural; unsigned long int n; int category; { #ifndef HAVE_ALLOCA struct block_list *block_list = NULL; #endif struct loaded_l10nfile *domain; struct binding *binding; const char *categoryname; const char *categoryvalue; char *dirname, *xdomainname; char *single_locale; char *retval; size_t retlen; int saved_errno; #if defined HAVE_TSEARCH || defined _LIBC struct known_translation_t *search; struct known_translation_t **foundp = NULL; size_t msgid_len; #endif size_t domainname_len; /* If no real MSGID is given return NULL. */ if (msgid1 == NULL) return NULL; __libc_rwlock_rdlock (_nl_state_lock); /* If DOMAINNAME is NULL, we are interested in the default domain. If CATEGORY is not LC_MESSAGES this might not make much sense but the definition left this undefined. */ if (domainname == NULL) domainname = _nl_current_default_domain; /* OS/2 specific: backward compatibility with older libintl versions */ #ifdef LC_MESSAGES_COMPAT if (category == LC_MESSAGES_COMPAT) category = LC_MESSAGES; #endif #if defined HAVE_TSEARCH || defined _LIBC msgid_len = strlen (msgid1) + 1; /* Try to find the translation among those which we found at some time. */ search = (struct known_translation_t *) alloca (offsetof (struct known_translation_t, msgid) + msgid_len); memcpy (search->msgid, msgid1, msgid_len); search->domainname = (char *) domainname; search->category = category; foundp = (struct known_translation_t **) tfind (search, &root, transcmp); freea (search); if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr) { /* Now deal with plural. */ if (plural) retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation, (*foundp)->translation_length); else retval = (char *) (*foundp)->translation; __libc_rwlock_unlock (_nl_state_lock); return retval; } #endif /* Preserve the `errno' value. */ saved_errno = errno; /* See whether this is a SUID binary or not. */ DETERMINE_SECURE; /* First find matching binding. */ for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) { int compare = strcmp (domainname, binding->domainname); if (compare == 0) /* We found it! */ break; if (compare < 0) { /* It is not in the list. */ binding = NULL; break; } } if (binding == NULL) dirname = (char *) _nl_default_dirname; else if (IS_ABSOLUTE_PATH (binding->dirname)) dirname = binding->dirname; else { /* We have a relative path. Make it absolute now. */ size_t dirname_len = strlen (binding->dirname) + 1; size_t path_max; char *ret; path_max = (unsigned int) PATH_MAX; path_max += 2; /* The getcwd docs say to do this. */ for (;;) { dirname = (char *) alloca (path_max + dirname_len); ADD_BLOCK (block_list, dirname); __set_errno (0); ret = getcwd (dirname, path_max); if (ret != NULL || errno != ERANGE) break; path_max += path_max / 2; path_max += PATH_INCR; } if (ret == NULL) { /* We cannot get the current working directory. Don't signal an error but simply return the default string. */ FREE_BLOCKS (block_list); __libc_rwlock_unlock (_nl_state_lock); __set_errno (saved_errno); return (plural == 0 ? (char *) msgid1 /* Use the Germanic plural rule. */ : n == 1 ? (char *) msgid1 : (char *) msgid2); } stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname); } /* Now determine the symbolic name of CATEGORY and its value. */ categoryname = category_to_name (category); categoryvalue = guess_category_value (category, categoryname); domainname_len = strlen (domainname); xdomainname = (char *) alloca (strlen (categoryname) + domainname_len + 5); ADD_BLOCK (block_list, xdomainname); stpcpy (mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"), domainname, domainname_len), ".mo"); /* Creating working area. */ single_locale = (char *) alloca (strlen (categoryvalue) + 1); ADD_BLOCK (block_list, single_locale); /* Search for the given string. This is a loop because we perhaps got an ordered list of languages to consider for the translation. */ while (1) { /* Make CATEGORYVALUE point to the next element of the list. */ while (categoryvalue[0] != '\0' && categoryvalue[0] == ':') ++categoryvalue; if (categoryvalue[0] == '\0') { /* The whole contents of CATEGORYVALUE has been searched but no valid entry has been found. We solve this situation by implicitly appending a "C" entry, i.e. no translation will take place. */ single_locale[0] = 'C'; single_locale[1] = '\0'; } else { char *cp = single_locale; while (categoryvalue[0] != '\0' && categoryvalue[0] != ':') *cp++ = *categoryvalue++; *cp = '\0'; /* When this is a SUID binary we must not allow accessing files outside the dedicated directories. */ if (ENABLE_SECURE && IS_PATH_WITH_DIR (single_locale)) /* Ingore this entry. */ continue; } /* If the current locale value is C (or POSIX) we don't load a domain. Return the MSGID. */ if (strcmp (single_locale, "C") == 0 || strcmp (single_locale, "POSIX") == 0) { FREE_BLOCKS (block_list); __libc_rwlock_unlock (_nl_state_lock); __set_errno (saved_errno); return (plural == 0 ? (char *) msgid1 /* Use the Germanic plural rule. */ : n == 1 ? (char *) msgid1 : (char *) msgid2); } /* Find structure describing the message catalog matching the DOMAINNAME and CATEGORY. */ domain = _nl_find_domain (dirname, single_locale, xdomainname, binding); if (domain != NULL) { retval = _nl_find_msg (domain, binding, msgid1, &retlen); if (retval == NULL) { int cnt; for (cnt = 0; domain->successor[cnt] != NULL; ++cnt) { retval = _nl_find_msg (domain->successor[cnt], binding, msgid1, &retlen); if (retval != NULL) { domain = domain->successor[cnt]; break; } } } if (retval != NULL) { /* Found the translation of MSGID1 in domain DOMAIN: starting at RETVAL, RETLEN bytes. */ FREE_BLOCKS (block_list); __set_errno (saved_errno); #if defined HAVE_TSEARCH || defined _LIBC if (foundp == NULL) { /* Create a new entry and add it to the search tree. */ struct known_translation_t *newp; newp = (struct known_translation_t *) malloc (offsetof (struct known_translation_t, msgid) + msgid_len + domainname_len + 1); if (newp != NULL) { newp->domainname = mempcpy (newp->msgid, msgid1, msgid_len); memcpy (newp->domainname, domainname, domainname_len + 1); newp->category = category; newp->counter = _nl_msg_cat_cntr; newp->domain = domain; newp->translation = retval; newp->translation_length = retlen; /* Insert the entry in the search tree. */ foundp = (struct known_translation_t **) tsearch (newp, &root, transcmp); if (foundp == NULL || __builtin_expect (*foundp != newp, 0)) /* The insert failed. */ free (newp); } } else { /* We can update the existing entry. */ (*foundp)->counter = _nl_msg_cat_cntr; (*foundp)->domain = domain; (*foundp)->translation = retval; (*foundp)->translation_length = retlen; } #endif /* Now deal with plural. */ if (plural) retval = plural_lookup (domain, n, retval, retlen); __libc_rwlock_unlock (_nl_state_lock); return retval; } } } /* NOTREACHED */ } char * internal_function _nl_find_msg (domain_file, domainbinding, msgid, lengthp) struct loaded_l10nfile *domain_file; struct binding *domainbinding; const char *msgid; size_t *lengthp; { struct loaded_domain *domain; nls_uint32 nstrings; size_t act; char *result; size_t resultlen; if (domain_file->decided == 0) _nl_load_domain (domain_file, domainbinding); if (domain_file->data == NULL) return NULL; domain = (struct loaded_domain *) domain_file->data; nstrings = domain->nstrings; /* Locate the MSGID and its translation. */ if (domain->hash_tab != NULL) { /* Use the hashing table. */ nls_uint32 len = strlen (msgid); nls_uint32 hash_val = hash_string (msgid); nls_uint32 idx = hash_val % domain->hash_size; nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2)); while (1) { nls_uint32 nstr = W (domain->must_swap_hash_tab, domain->hash_tab[idx]); if (nstr == 0) /* Hash table entry is empty. */ return NULL; nstr--; /* Compare msgid with the original string at index nstr. We compare the lengths with >=, not ==, because plural entries are represented by strings with an embedded NUL. */ if (nstr < nstrings ? W (domain->must_swap, domain->orig_tab[nstr].length) >= len && (strcmp (msgid, domain->data + W (domain->must_swap, domain->orig_tab[nstr].offset)) == 0) : domain->orig_sysdep_tab[nstr - nstrings].length > len && (strcmp (msgid, domain->orig_sysdep_tab[nstr - nstrings].pointer) == 0)) { act = nstr; goto found; } if (idx >= domain->hash_size - incr) idx -= domain->hash_size - incr; else idx += incr; } /* NOTREACHED */ } else { /* Try the default method: binary search in the sorted array of messages. */ size_t top, bottom; bottom = 0; top = nstrings; while (bottom < top) { int cmp_val; act = (bottom + top) / 2; cmp_val = strcmp (msgid, (domain->data + W (domain->must_swap, domain->orig_tab[act].offset))); if (cmp_val < 0) top = act; else if (cmp_val > 0) bottom = act + 1; else goto found; } /* No translation was found. */ return NULL; } found: /* The translation was found at index ACT. If we have to convert the string to use a different character set, this is the time. */ if (act < nstrings) { result = (char *) (domain->data + W (domain->must_swap, domain->trans_tab[act].offset)); resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1; } else { result = (char *) domain->trans_sysdep_tab[act - nstrings].pointer; resultlen = domain->trans_sysdep_tab[act - nstrings].length; } #if defined _LIBC || HAVE_ICONV if (domain->codeset_cntr != (domainbinding != NULL ? domainbinding->codeset_cntr : 0)) { /* The domain's codeset has changed through bind_textdomain_codeset() since the message catalog was initialized or last accessed. We have to reinitialize the converter. */ _nl_free_domain_conv (domain); _nl_init_domain_conv (domain_file, domain, domainbinding); } if ( # ifdef _LIBC domain->conv != (__gconv_t) -1 # else # if HAVE_ICONV domain->conv != (iconv_t) -1 # endif # endif ) { /* We are supposed to do a conversion. First allocate an appropriate table with the same structure as the table of translations in the file, where we can put the pointers to the converted strings in. There is a slight complication with plural entries. They are represented by consecutive NUL terminated strings. We handle this case by converting RESULTLEN bytes, including NULs. */ if (domain->conv_tab == NULL && ((domain->conv_tab = (char **) calloc (nstrings + domain->n_sysdep_strings, sizeof (char *))) == NULL)) /* Mark that we didn't succeed allocating a table. */ domain->conv_tab = (char **) -1; if (__builtin_expect (domain->conv_tab == (char **) -1, 0)) /* Nothing we can do, no more memory. */ goto converted; if (domain->conv_tab[act] == NULL) { /* We haven't used this string so far, so it is not translated yet. Do this now. */ /* We use a bit more efficient memory handling. We allocate always larger blocks which get used over time. This is faster than many small allocations. */ __libc_lock_define_initialized (static, lock) # define INITIAL_BLOCK_SIZE 4080 static unsigned char *freemem; static size_t freemem_size; const unsigned char *inbuf; unsigned char *outbuf; int malloc_count; # ifndef _LIBC transmem_block_t *transmem_list = NULL; # endif __libc_lock_lock (lock); inbuf = (const unsigned char *) result; outbuf = freemem + sizeof (size_t); malloc_count = 0; while (1) { transmem_block_t *newmem; # ifdef _LIBC size_t non_reversible; int res; if (freemem_size < sizeof (size_t)) goto resize_freemem; res = __gconv (domain->conv, &inbuf, inbuf + resultlen, &outbuf, outbuf + freemem_size - sizeof (size_t), &non_reversible); if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT) break; if (res != __GCONV_FULL_OUTPUT) { __libc_lock_unlock (lock); goto converted; } inbuf = result; # else # if HAVE_ICONV const char *inptr = (const char *) inbuf; size_t inleft = resultlen; char *outptr = (char *) outbuf; size_t outleft; if (freemem_size < sizeof (size_t)) goto resize_freemem; outleft = freemem_size - sizeof (size_t); if (iconv (domain->conv, (ICONV_CONST char **) &inptr, &inleft, &outptr, &outleft) != (size_t) (-1)) { outbuf = (unsigned char *) outptr; break; } if (errno != E2BIG) { __libc_lock_unlock (lock); goto converted; } # endif # endif resize_freemem: /* We must allocate a new buffer or resize the old one. */ if (malloc_count > 0) { ++malloc_count; freemem_size = malloc_count * INITIAL_BLOCK_SIZE; newmem = (transmem_block_t *) realloc (transmem_list, freemem_size); # ifdef _LIBC if (newmem != NULL) transmem_list = transmem_list->next; else { struct transmem_list *old = transmem_list; transmem_list = transmem_list->next; free (old); } # endif } else { malloc_count = 1; freemem_size = INITIAL_BLOCK_SIZE; newmem = (transmem_block_t *) malloc (freemem_size); } if (__builtin_expect (newmem == NULL, 0)) { freemem = NULL; freemem_size = 0; __libc_lock_unlock (lock); goto converted; } # ifdef _LIBC /* Add the block to the list of blocks we have to free at some point. */ newmem->next = transmem_list; transmem_list = newmem; freemem = newmem->data; freemem_size -= offsetof (struct transmem_list, data); # else transmem_list = newmem; freemem = newmem; # endif outbuf = freemem + sizeof (size_t); } /* We have now in our buffer a converted string. Put this into the table of conversions. */ *(size_t *) freemem = outbuf - freemem - sizeof (size_t); domain->conv_tab[act] = (char *) freemem; /* Shrink freemem, but keep it aligned. */ freemem_size -= outbuf - freemem; freemem = outbuf; freemem += freemem_size & (alignof (size_t) - 1); freemem_size = freemem_size & ~ (alignof (size_t) - 1); __libc_lock_unlock (lock); } /* Now domain->conv_tab[act] contains the translation of all the plural variants. */ result = domain->conv_tab[act] + sizeof (size_t); resultlen = *(size_t *) domain->conv_tab[act]; } converted: /* The result string is converted. */ #endif /* _LIBC || HAVE_ICONV */ *lengthp = resultlen; return result; } /* Look up a plural variant. */ static char * internal_function plural_lookup (domain, n, translation, translation_len) struct loaded_l10nfile *domain; unsigned long int n; const char *translation; size_t translation_len; { struct loaded_domain *domaindata = (struct loaded_domain *) domain->data; unsigned long int index; const char *p; index = plural_eval (domaindata->plural, n); if (index >= domaindata->nplurals) /* This should never happen. It means the plural expression and the given maximum value do not match. */ index = 0; /* Skip INDEX strings at TRANSLATION. */ p = translation; while (index-- > 0) { #ifdef _LIBC p = __rawmemchr (p, '\0'); #else p = strchr (p, '\0'); #endif /* And skip over the NUL byte. */ p++; if (p >= translation + translation_len) /* This should never happen. It means the plural expression evaluated to a value larger than the number of variants available for MSGID1. */ return (char *) translation; } return (char *) p; } /* Return string representation of locale CATEGORY. */ static const char * internal_function category_to_name (category) int category; { const char *retval; switch (category) { #ifdef LC_COLLATE case LC_COLLATE: retval = "LC_COLLATE"; break; #endif #ifdef LC_CTYPE case LC_CTYPE: retval = "LC_CTYPE"; break; #endif #ifdef LC_MONETARY case LC_MONETARY: retval = "LC_MONETARY"; break; #endif #ifdef LC_NUMERIC case LC_NUMERIC: retval = "LC_NUMERIC"; break; #endif #ifdef LC_TIME case LC_TIME: retval = "LC_TIME"; break; #endif #ifdef LC_MESSAGES case LC_MESSAGES: retval = "LC_MESSAGES"; break; #endif #ifdef LC_RESPONSE case LC_RESPONSE: retval = "LC_RESPONSE"; break; #endif #ifdef LC_ALL case LC_ALL: /* This might not make sense but is perhaps better than any other value. */ retval = "LC_ALL"; break; #endif default: /* If you have a better idea for a default value let me know. */ retval = "LC_XXX"; } return retval; } /* Guess value of current locale from value of the environment variables. */ static const char * internal_function guess_category_value (category, categoryname) int category; const char *categoryname; { const char *language; const char *retval; /* The highest priority value is the `LANGUAGE' environment variable. But we don't use the value if the currently selected locale is the C locale. This is a GNU extension. */ language = getenv ("LANGUAGE"); if (language != NULL && language[0] == '\0') language = NULL; /* We have to proceed with the POSIX methods of looking to `LC_ALL', `LC_xxx', and `LANG'. On some systems this can be done by the `setlocale' function itself. */ #ifdef _LIBC retval = setlocale (category, NULL); #else retval = _nl_locale_name (category, categoryname); #endif /* Ignore LANGUAGE if the locale is set to "C" because 1. "C" locale usually uses the ASCII encoding, and most international messages use non-ASCII characters. These characters get displayed as question marks (if using glibc's iconv()) or as invalid 8-bit characters (because other iconv()s refuse to convert most non-ASCII characters to ASCII). In any case, the output is ugly. 2. The precise output of some programs in the "C" locale is specified by POSIX and should not depend on environment variables like "LANGUAGE". We allow such programs to use gettext(). */ return language != NULL && strcmp (retval, "C") != 0 ? language : retval; } /* @@ begin of epilog @@ */ /* We don't want libintl.a to depend on any other library. So we avoid the non-standard function stpcpy. In GNU C Library this function is available, though. Also allow the symbol HAVE_STPCPY to be defined. */ #if !_LIBC && !HAVE_STPCPY static char * stpcpy (dest, src) char *dest; const char *src; { while ((*dest++ = *src++) != '\0') /* Do nothing. */ ; return dest - 1; } #endif #if !_LIBC && !HAVE_MEMPCPY static void * mempcpy (dest, src, n) void *dest; const void *src; size_t n; { return (void *) ((char *) memcpy (dest, src, n) + n); } #endif #ifdef _LIBC /* If we want to free all resources we have to do some work at program's end. */ static void __attribute__ ((unused)) free_mem (void) { void *old; while (_nl_domain_bindings != NULL) { struct binding *oldp = _nl_domain_bindings; _nl_domain_bindings = _nl_domain_bindings->next; if (oldp->dirname != _nl_default_dirname) /* Yes, this is a pointer comparison. */ free (oldp->dirname); free (oldp->codeset); free (oldp); } if (_nl_current_default_domain != _nl_default_default_domain) /* Yes, again a pointer comparison. */ free ((char *) _nl_current_default_domain); /* Remove the search tree with the known translations. */ __tdestroy (root, free); root = NULL; while (transmem_list != NULL) { old = transmem_list; transmem_list = transmem_list->next; free (old); } } text_set_element (__libc_subfreeres, free_mem); #endif lifelines-3.0.61/intl/dcngettext.c0000700002540200244210000000361407606165340017237 0ustar prappDomain Users/* Implementation of the dcngettext(3) function. Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DCNGETTEXT __dcngettext # define DCIGETTEXT __dcigettext #else # define DCNGETTEXT libintl_dcngettext # define DCIGETTEXT libintl_dcigettext #endif /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ char * DCNGETTEXT (domainname, msgid1, msgid2, n, category) const char *domainname; const char *msgid1; const char *msgid2; unsigned long int n; int category; { return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ INTDEF(__dcngettext) weak_alias (__dcngettext, dcngettext); #endif lifelines-3.0.61/intl/dgettext.c0000700002540200244210000000343007606165340016712 0ustar prappDomain Users/* Implementation of the dgettext(3) function. Copyright (C) 1995-1997, 2000, 2001, 2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DGETTEXT __dgettext # define DCGETTEXT INTUSE(__dcgettext) #else # define DGETTEXT libintl_dgettext # define DCGETTEXT libintl_dcgettext #endif /* Look up MSGID in the DOMAINNAME message catalog of the current LC_MESSAGES locale. */ char * DGETTEXT (domainname, msgid) const char *domainname; const char *msgid; { return DCGETTEXT (domainname, msgid, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__dgettext, dgettext); #endif lifelines-3.0.61/intl/dngettext.c0000700002540200244210000000363707606165340017101 0ustar prappDomain Users/* Implementation of the dngettext(3) function. Copyright (C) 1995-1997, 2000, 2001, 2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DNGETTEXT __dngettext # define DCNGETTEXT INTUSE(__dcngettext) #else # define DNGETTEXT libintl_dngettext # define DCNGETTEXT libintl_dcngettext #endif /* Look up MSGID in the DOMAINNAME message catalog of the current LC_MESSAGES locale and skip message according to the plural form. */ char * DNGETTEXT (domainname, msgid1, msgid2, n) const char *domainname; const char *msgid1; const char *msgid2; unsigned long int n; { return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__dngettext, dngettext); #endif lifelines-3.0.61/intl/eval-plural.h0000700002540200244210000000554607606165340017325 0ustar prappDomain Users/* Plural expression evaluation. Copyright (C) 2000-2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef STATIC #define STATIC static #endif /* Evaluate the plural expression and return an index value. */ STATIC unsigned long int plural_eval PARAMS ((struct expression *pexp, unsigned long int n)) internal_function; STATIC unsigned long int internal_function plural_eval (pexp, n) struct expression *pexp; unsigned long int n; { switch (pexp->nargs) { case 0: switch (pexp->operation) { case var: return n; case num: return pexp->val.num; default: break; } /* NOTREACHED */ break; case 1: { /* pexp->operation must be lnot. */ unsigned long int arg = plural_eval (pexp->val.args[0], n); return ! arg; } case 2: { unsigned long int leftarg = plural_eval (pexp->val.args[0], n); if (pexp->operation == lor) return leftarg || plural_eval (pexp->val.args[1], n); else if (pexp->operation == land) return leftarg && plural_eval (pexp->val.args[1], n); else { unsigned long int rightarg = plural_eval (pexp->val.args[1], n); switch (pexp->operation) { case mult: return leftarg * rightarg; case divide: #if !INTDIV0_RAISES_SIGFPE if (rightarg == 0) raise (SIGFPE); #endif return leftarg / rightarg; case module: #if !INTDIV0_RAISES_SIGFPE if (rightarg == 0) raise (SIGFPE); #endif return leftarg % rightarg; case plus: return leftarg + rightarg; case minus: return leftarg - rightarg; case less_than: return leftarg < rightarg; case greater_than: return leftarg > rightarg; case less_or_equal: return leftarg <= rightarg; case greater_or_equal: return leftarg >= rightarg; case equal: return leftarg == rightarg; case not_equal: return leftarg != rightarg; default: break; } } /* NOTREACHED */ break; } case 3: { /* pexp->operation must be qmop. */ unsigned long int boolarg = plural_eval (pexp->val.args[0], n); return plural_eval (pexp->val.args[boolarg ? 1 : 2], n); } } /* NOTREACHED */ return 0; } lifelines-3.0.61/intl/explodename.c0000700002540200244210000001105007435641553017365 0ustar prappDomain Users/* Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "loadinfo.h" /* On some strange systems still no definition of NULL is found. Sigh! */ #ifndef NULL # if defined __STDC__ && __STDC__ # define NULL ((void *) 0) # else # define NULL 0 # endif #endif /* @@ end of prolog @@ */ char * _nl_find_language (name) const char *name; { while (name[0] != '\0' && name[0] != '_' && name[0] != '@' && name[0] != '+' && name[0] != ',') ++name; return (char *) name; } int _nl_explode_name (name, language, modifier, territory, codeset, normalized_codeset, special, sponsor, revision) char *name; const char **language; const char **modifier; const char **territory; const char **codeset; const char **normalized_codeset; const char **special; const char **sponsor; const char **revision; { enum { undecided, xpg, cen } syntax; char *cp; int mask; *modifier = NULL; *territory = NULL; *codeset = NULL; *normalized_codeset = NULL; *special = NULL; *sponsor = NULL; *revision = NULL; /* Now we determine the single parts of the locale name. First look for the language. Termination symbols are `_' and `@' if we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */ mask = 0; syntax = undecided; *language = cp = name; cp = _nl_find_language (*language); if (*language == cp) /* This does not make sense: language has to be specified. Use this entry as it is without exploding. Perhaps it is an alias. */ cp = strchr (*language, '\0'); else if (cp[0] == '_') { /* Next is the territory. */ cp[0] = '\0'; *territory = ++cp; while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@' && cp[0] != '+' && cp[0] != ',' && cp[0] != '_') ++cp; mask |= TERRITORY; if (cp[0] == '.') { /* Next is the codeset. */ syntax = xpg; cp[0] = '\0'; *codeset = ++cp; while (cp[0] != '\0' && cp[0] != '@') ++cp; mask |= XPG_CODESET; if (*codeset != cp && (*codeset)[0] != '\0') { *normalized_codeset = _nl_normalize_codeset (*codeset, cp - *codeset); if (strcmp (*codeset, *normalized_codeset) == 0) free ((char *) *normalized_codeset); else mask |= XPG_NORM_CODESET; } } } if (cp[0] == '@' || (syntax != xpg && cp[0] == '+')) { /* Next is the modifier. */ syntax = cp[0] == '@' ? xpg : cen; cp[0] = '\0'; *modifier = ++cp; while (syntax == cen && cp[0] != '\0' && cp[0] != '+' && cp[0] != ',' && cp[0] != '_') ++cp; mask |= XPG_MODIFIER | CEN_AUDIENCE; } if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_')) { syntax = cen; if (cp[0] == '+') { /* Next is special application (CEN syntax). */ cp[0] = '\0'; *special = ++cp; while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_') ++cp; mask |= CEN_SPECIAL; } if (cp[0] == ',') { /* Next is sponsor (CEN syntax). */ cp[0] = '\0'; *sponsor = ++cp; while (cp[0] != '\0' && cp[0] != '_') ++cp; mask |= CEN_SPONSOR; } if (cp[0] == '_') { /* Next is revision (CEN syntax). */ cp[0] = '\0'; *revision = ++cp; mask |= CEN_REVISION; } } /* For CEN syntax values it might be important to have the separator character in the file name, not for XPG syntax. */ if (syntax == xpg) { if (*territory != NULL && (*territory)[0] == '\0') mask &= ~TERRITORY; if (*codeset != NULL && (*codeset)[0] == '\0') mask &= ~XPG_CODESET; if (*modifier != NULL && (*modifier)[0] == '\0') mask &= ~XPG_MODIFIER; } return mask; } lifelines-3.0.61/intl/finddomain.c0000700002540200244210000001314607435641553017204 0ustar prappDomain Users/* Handle list of needed message catalogs Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* List of already loaded domains. */ static struct loaded_l10nfile *_nl_loaded_domains; /* Return a data structure describing the message catalog described by the DOMAINNAME and CATEGORY parameters with respect to the currently established bindings. */ struct loaded_l10nfile * internal_function _nl_find_domain (dirname, locale, domainname, domainbinding) const char *dirname; char *locale; const char *domainname; struct binding *domainbinding; { struct loaded_l10nfile *retval; const char *language; const char *modifier; const char *territory; const char *codeset; const char *normalized_codeset; const char *special; const char *sponsor; const char *revision; const char *alias_value; int mask; /* LOCALE can consist of up to four recognized parts for the XPG syntax: language[_territory[.codeset]][@modifier] and six parts for the CEN syntax: language[_territory][+audience][+special][,[sponsor][_revision]] Beside the first part all of them are allowed to be missing. If the full specified locale is not found, the less specific one are looked for. The various parts will be stripped off according to the following order: (1) revision (2) sponsor (3) special (4) codeset (5) normalized codeset (6) territory (7) audience/modifier */ /* If we have already tested for this locale entry there has to be one data set in the list of loaded domains. */ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, strlen (dirname) + 1, 0, locale, NULL, NULL, NULL, NULL, NULL, NULL, NULL, domainname, 0); if (retval != NULL) { /* We know something about this locale. */ int cnt; if (retval->decided == 0) _nl_load_domain (retval, domainbinding); if (retval->data != NULL) return retval; for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided == 0) _nl_load_domain (retval->successor[cnt], domainbinding); if (retval->successor[cnt]->data != NULL) break; } return cnt >= 0 ? retval : NULL; /* NOTREACHED */ } /* See whether the locale value is an alias. If yes its value *overwrites* the alias name. No test for the original value is done. */ alias_value = _nl_expand_alias (locale); if (alias_value != NULL) { #if defined _LIBC || defined HAVE_STRDUP locale = strdup (alias_value); if (locale == NULL) return NULL; #else size_t len = strlen (alias_value) + 1; locale = (char *) malloc (len); if (locale == NULL) return NULL; memcpy (locale, alias_value, len); #endif } /* Now we determine the single parts of the locale name. First look for the language. Termination symbols are `_' and `@' if we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */ mask = _nl_explode_name (locale, &language, &modifier, &territory, &codeset, &normalized_codeset, &special, &sponsor, &revision); /* Create all possible locale entries which might be interested in generalization. */ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, strlen (dirname) + 1, mask, language, territory, codeset, normalized_codeset, modifier, special, sponsor, revision, domainname, 1); if (retval == NULL) /* This means we are out of core. */ return NULL; if (retval->decided == 0) _nl_load_domain (retval, domainbinding); if (retval->data == NULL) { int cnt; for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided == 0) _nl_load_domain (retval->successor[cnt], domainbinding); if (retval->successor[cnt]->data != NULL) break; } } /* The room for an alias was dynamically allocated. Free it now. */ if (alias_value != NULL) free (locale); /* The space for normalized_codeset is dynamically allocated. Free it. */ if (mask & XPG_NORM_CODESET) free ((void *) normalized_codeset); return retval; } #ifdef _LIBC static void __attribute__ ((unused)) free_mem (void) { struct loaded_l10nfile *runp = _nl_loaded_domains; while (runp != NULL) { struct loaded_l10nfile *here = runp; if (runp->data != NULL) _nl_unload_domain ((struct loaded_domain *) runp->data); runp = runp->next; free ((char *) here->filename); free (here); } } text_set_element (__libc_subfreeres, free_mem); #endif lifelines-3.0.61/intl/gettext.c0000700002540200244210000000357307606165340016556 0ustar prappDomain Users/* Implementation of gettext(3) function. Copyright (C) 1995, 1997, 2000, 2001, 2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #ifdef _LIBC # define __need_NULL # include #else # include /* Just for NULL. */ #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define GETTEXT __gettext # define DCGETTEXT INTUSE(__dcgettext) #else # define GETTEXT libintl_gettext # define DCGETTEXT libintl_dcgettext #endif /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ char * GETTEXT (msgid) const char *msgid; { return DCGETTEXT (NULL, msgid, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__gettext, gettext); #endif lifelines-3.0.61/intl/gettextP.h0000700002540200244210000001676607606165340016713 0ustar prappDomain Users/* Header describing internals of libintl library. Copyright (C) 1995-1999, 2000-2002 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _GETTEXTP_H #define _GETTEXTP_H #include /* Get size_t. */ #ifdef _LIBC # include "../iconv/gconv_int.h" #else # if HAVE_ICONV # include # endif #endif #include "loadinfo.h" #include "gmo.h" /* Get nls_uint32. */ /* @@ end of prolog @@ */ #ifndef PARAMS # if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES # define PARAMS(args) args # else # define PARAMS(args) () # endif #endif #ifndef internal_function # define internal_function #endif #ifndef attribute_hidden # define attribute_hidden #endif /* Tell the compiler when a conditional or integer expression is almost always true or almost always false. */ #ifndef HAVE_BUILTIN_EXPECT # define __builtin_expect(expr, val) (expr) #endif #ifndef W # define W(flag, data) ((flag) ? SWAP (data) : (data)) #endif #ifdef _LIBC # include # define SWAP(i) bswap_32 (i) #else static inline nls_uint32 SWAP (i) nls_uint32 i; { return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24); } #endif /* In-memory representation of system dependent string. */ struct sysdep_string_desc { /* Length of addressed string, including the trailing NUL. */ size_t length; /* Pointer to addressed string. */ const char *pointer; }; /* The representation of an opened message catalog. */ struct loaded_domain { /* Pointer to memory containing the .mo file. */ const char *data; /* 1 if the memory is mmap()ed, 0 if the memory is malloc()ed. */ int use_mmap; /* Size of mmap()ed memory. */ size_t mmap_size; /* 1 if the .mo file uses a different endianness than this machine. */ int must_swap; /* Pointer to additional malloc()ed memory. */ void *malloced; /* Number of static strings pairs. */ nls_uint32 nstrings; /* Pointer to descriptors of original strings in the file. */ const struct string_desc *orig_tab; /* Pointer to descriptors of translated strings in the file. */ const struct string_desc *trans_tab; /* Number of system dependent strings pairs. */ nls_uint32 n_sysdep_strings; /* Pointer to descriptors of original sysdep strings. */ const struct sysdep_string_desc *orig_sysdep_tab; /* Pointer to descriptors of translated sysdep strings. */ const struct sysdep_string_desc *trans_sysdep_tab; /* Size of hash table. */ nls_uint32 hash_size; /* Pointer to hash table. */ const nls_uint32 *hash_tab; /* 1 if the hash table uses a different endianness than this machine. */ int must_swap_hash_tab; int codeset_cntr; #ifdef _LIBC __gconv_t conv; #else # if HAVE_ICONV iconv_t conv; # endif #endif char **conv_tab; struct expression *plural; unsigned long int nplurals; }; /* We want to allocate a string at the end of the struct. But ISO C doesn't allow zero sized arrays. */ #ifdef __GNUC__ # define ZERO 0 #else # define ZERO 1 #endif /* A set of settings bound to a message domain. Used to store settings from bindtextdomain() and bind_textdomain_codeset(). */ struct binding { struct binding *next; char *dirname; int codeset_cntr; /* Incremented each time codeset changes. */ char *codeset; char domainname[ZERO]; }; /* A counter which is incremented each time some previous translations become invalid. This variable is part of the external ABI of the GNU libintl. */ extern int _nl_msg_cat_cntr; #ifndef _LIBC const char *_nl_locale_name PARAMS ((int category, const char *categoryname)); #endif struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname, char *__locale, const char *__domainname, struct binding *__domainbinding)) internal_function; void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain, struct binding *__domainbinding)) internal_function; void _nl_unload_domain PARAMS ((struct loaded_domain *__domain)) internal_function; const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file, struct loaded_domain *__domain, struct binding *__domainbinding)) internal_function; void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain)) internal_function; char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file, struct binding *domainbinding, const char *msgid, size_t *lengthp)) internal_function; #ifdef _LIBC extern char *__gettext PARAMS ((const char *__msgid)); extern char *__dgettext PARAMS ((const char *__domainname, const char *__msgid)); extern char *__dcgettext PARAMS ((const char *__domainname, const char *__msgid, int __category)); extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2, unsigned long int __n)); extern char *__dngettext PARAMS ((const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int n)); extern char *__dcngettext PARAMS ((const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category)); extern char *__dcigettext PARAMS ((const char *__domainname, const char *__msgid1, const char *__msgid2, int __plural, unsigned long int __n, int __category)); extern char *__textdomain PARAMS ((const char *__domainname)); extern char *__bindtextdomain PARAMS ((const char *__domainname, const char *__dirname)); extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname, const char *__codeset)); #else extern char *libintl_gettext PARAMS ((const char *__msgid)); extern char *libintl_dgettext PARAMS ((const char *__domainname, const char *__msgid)); extern char *libintl_dcgettext PARAMS ((const char *__domainname, const char *__msgid, int __category)); extern char *libintl_ngettext PARAMS ((const char *__msgid1, const char *__msgid2, unsigned long int __n)); extern char *libintl_dngettext PARAMS ((const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n)); extern char *libintl_dcngettext PARAMS ((const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category)); extern char *libintl_dcigettext PARAMS ((const char *__domainname, const char *__msgid1, const char *__msgid2, int __plural, unsigned long int __n, int __category)); extern char *libintl_textdomain PARAMS ((const char *__domainname)); extern char *libintl_bindtextdomain PARAMS ((const char *__domainname, const char *__dirname)); extern char *libintl_bind_textdomain_codeset PARAMS ((const char *__domainname, const char *__codeset)); #endif /* @@ begin of epilog @@ */ #endif /* gettextP.h */ lifelines-3.0.61/intl/gmo.h0000700002540200244210000001125707606165340015657 0ustar prappDomain Users/* Description of GNU message catalog format: general file layout. Copyright (C) 1995, 1997, 2000-2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _GETTEXT_H #define _GETTEXT_H 1 #include /* @@ end of prolog @@ */ /* The magic number of the GNU message catalog format. */ #define _MAGIC 0x950412de #define _MAGIC_SWAPPED 0xde120495 /* Revision number of the currently used .mo (binary) file format. */ #define MO_REVISION_NUMBER 0 /* The following contortions are an attempt to use the C preprocessor to determine an unsigned integral type that is 32 bits wide. An alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work when cross-compiling. */ #if __STDC__ # define UINT_MAX_32_BITS 4294967295U #else # define UINT_MAX_32_BITS 0xFFFFFFFF #endif /* If UINT_MAX isn't defined, assume it's a 32-bit type. This should be valid for all systems GNU cares about because that doesn't include 16-bit systems, and only modern systems (that certainly have ) have 64+-bit integral types. */ #ifndef UINT_MAX # define UINT_MAX UINT_MAX_32_BITS #endif #if UINT_MAX == UINT_MAX_32_BITS typedef unsigned nls_uint32; #else # if USHRT_MAX == UINT_MAX_32_BITS typedef unsigned short nls_uint32; # else # if ULONG_MAX == UINT_MAX_32_BITS typedef unsigned long nls_uint32; # else /* The following line is intended to throw an error. Using #error is not portable enough. */ "Cannot determine unsigned 32-bit data type." # endif # endif #endif /* Header for binary .mo file format. */ struct mo_file_header { /* The magic number. */ nls_uint32 magic; /* The revision number of the file format. */ nls_uint32 revision; /* The following are only used in .mo files with major revision 0. */ /* The number of strings pairs. */ nls_uint32 nstrings; /* Offset of table with start offsets of original strings. */ nls_uint32 orig_tab_offset; /* Offset of table with start offsets of translated strings. */ nls_uint32 trans_tab_offset; /* Size of hash table. */ nls_uint32 hash_tab_size; /* Offset of first hash table entry. */ nls_uint32 hash_tab_offset; /* The following are only used in .mo files with minor revision >= 1. */ /* The number of system dependent segments. */ nls_uint32 n_sysdep_segments; /* Offset of table describing system dependent segments. */ nls_uint32 sysdep_segments_offset; /* The number of system dependent strings pairs. */ nls_uint32 n_sysdep_strings; /* Offset of table with start offsets of original sysdep strings. */ nls_uint32 orig_sysdep_tab_offset; /* Offset of table with start offsets of translated sysdep strings. */ nls_uint32 trans_sysdep_tab_offset; }; /* Descriptor for static string contained in the binary .mo file. */ struct string_desc { /* Length of addressed string, not including the trailing NUL. */ nls_uint32 length; /* Offset of string in file. */ nls_uint32 offset; }; /* The following are only used in .mo files with minor revision >= 1. */ /* Descriptor for system dependent string segment. */ struct sysdep_segment { /* Length of addressed string, including the trailing NUL. */ nls_uint32 length; /* Offset of string in file. */ nls_uint32 offset; }; /* Descriptor for system dependent string. */ struct sysdep_string { /* Offset of static string segments in file. */ nls_uint32 offset; /* Alternating sequence of static and system dependent segments. The last segment is a static segment, including the trailing NUL. */ struct segment_pair { /* Size of static segment. */ nls_uint32 segsize; /* Reference to system dependent string segment, or ~0 at the end. */ nls_uint32 sysdepref; } segments[1]; }; /* Marker for the end of the segments[] array. This has the value 0xFFFFFFFF, regardless whether 'int' is 16 bit, 32 bit, or 64 bit. */ #define SEGMENTS_END ((nls_uint32) ~0) /* @@ begin of epilog @@ */ #endif /* gettext.h */ lifelines-3.0.61/intl/hash-string.h0000700002540200244210000000357407477212672017336 0ustar prappDomain Users/* Description of GNU message catalog format: string hashing function. Copyright (C) 1995, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* @@ end of prolog @@ */ #ifndef PARAMS # if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES # define PARAMS(Args) Args # else # define PARAMS(Args) () # endif #endif /* We assume to have `unsigned long int' value with at least 32 bits. */ #define HASHWORDBITS 32 /* Defines the so called `hashpjw' function by P.J. Weinberger [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools, 1986, 1987 Bell Telephone Laboratories, Inc.] */ static unsigned long int hash_string PARAMS ((const char *__str_param)); static inline unsigned long int hash_string (str_param) const char *str_param; { unsigned long int hval, g; const char *str = str_param; /* Compute the hash value for the given string. */ hval = 0; while (*str != '\0') { hval <<= 4; hval += (unsigned long int) *str++; g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4)); if (g != 0) { hval ^= g >> (HASHWORDBITS - 8); hval ^= g; } } return hval; } lifelines-3.0.61/intl/intl-compat.c0000700002540200244210000000576707606165340017330 0ustar prappDomain Users/* intl-compat.c - Stub functions to call gettext functions from GNU gettext Library. Copyright (C) 1995, 2000-2002 Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #define _INTL_REDIRECT_MACROS #include "libgnuintl.h" #include "gettextP.h" /* @@ end of prolog @@ */ /* This file redirects the gettext functions (without prefix) to those defined in the included GNU libintl library (with "libintl_" prefix). It is compiled into libintl in order to make the AM_GNU_GETTEXT test of gettext <= 0.11.2 work with the libintl library >= 0.11.3 which has the redirections primarily in the include file. */ #undef gettext #undef dgettext #undef dcgettext #undef ngettext #undef dngettext #undef dcngettext #undef textdomain #undef bindtextdomain #undef bind_textdomain_codeset char * gettext (msgid) const char *msgid; { return libintl_gettext (msgid); } char * dgettext (domainname, msgid) const char *domainname; const char *msgid; { return libintl_dgettext (domainname, msgid); } char * dcgettext (domainname, msgid, category) const char *domainname; const char *msgid; int category; { return libintl_dcgettext (domainname, msgid, category); } char * ngettext (msgid1, msgid2, n) const char *msgid1; const char *msgid2; unsigned long int n; { return libintl_ngettext (msgid1, msgid2, n); } char * dngettext (domainname, msgid1, msgid2, n) const char *domainname; const char *msgid1; const char *msgid2; unsigned long int n; { return libintl_dngettext (domainname, msgid1, msgid2, n); } char * dcngettext (domainname, msgid1, msgid2, n, category) const char *domainname; const char *msgid1; const char *msgid2; unsigned long int n; int category; { return libintl_dcngettext (domainname, msgid1, msgid2, n, category); } char * textdomain (domainname) const char *domainname; { return libintl_textdomain (domainname); } char * bindtextdomain (domainname, dirname) const char *domainname; const char *dirname; { return libintl_bindtextdomain (domainname, dirname); } char * bind_textdomain_codeset (domainname, codeset) const char *domainname; const char *codeset; { return libintl_bind_textdomain_codeset (domainname, codeset); } lifelines-3.0.61/intl/l10nflist.c0000700002540200244210000003052007606165340016676 0ustar prappDomain Users/* Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Tell glibc's to provide a prototype for stpcpy(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include #if defined _LIBC || defined HAVE_ARGZ_H # include #endif #include #include #include #include "loadinfo.h" /* On some strange systems still no definition of NULL is found. Sigh! */ #ifndef NULL # if defined __STDC__ && __STDC__ # define NULL ((void *) 0) # else # define NULL 0 # endif #endif /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # ifndef stpcpy # define stpcpy(dest, src) __stpcpy(dest, src) # endif #else # ifndef HAVE_STPCPY static char *stpcpy PARAMS ((char *dest, const char *src)); # endif #endif /* Pathname support. ISSLASH(C) tests whether C is a directory separator character. IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not, it may be concatenated to a directory pathname. */ #if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ /* Win32, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') # define HAS_DEVICE(P) \ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ && (P)[1] == ':') # define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P)) #else /* Unix */ # define ISSLASH(C) ((C) == '/') # define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0]) #endif /* Define function which are usually not available. */ #if !defined _LIBC && !defined HAVE___ARGZ_COUNT /* Returns the number of strings in ARGZ. */ static size_t argz_count__ PARAMS ((const char *argz, size_t len)); static size_t argz_count__ (argz, len) const char *argz; size_t len; { size_t count = 0; while (len > 0) { size_t part_len = strlen (argz); argz += part_len + 1; len -= part_len + 1; count++; } return count; } # undef __argz_count # define __argz_count(argz, len) argz_count__ (argz, len) #else # ifdef _LIBC # define __argz_count(argz, len) INTUSE(__argz_count) (argz, len) # endif #endif /* !_LIBC && !HAVE___ARGZ_COUNT */ #if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY /* Make '\0' separated arg vector ARGZ printable by converting all the '\0's except the last into the character SEP. */ static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep)); static void argz_stringify__ (argz, len, sep) char *argz; size_t len; int sep; { while (len > 0) { size_t part_len = strlen (argz); argz += part_len; len -= part_len + 1; if (len > 0) *argz++ = sep; } } # undef __argz_stringify # define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep) #else # ifdef _LIBC # define __argz_stringify(argz, len, sep) \ INTUSE(__argz_stringify) (argz, len, sep) # endif #endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */ #if !defined _LIBC && !defined HAVE___ARGZ_NEXT static char *argz_next__ PARAMS ((char *argz, size_t argz_len, const char *entry)); static char * argz_next__ (argz, argz_len, entry) char *argz; size_t argz_len; const char *entry; { if (entry) { if (entry < argz + argz_len) entry = strchr (entry, '\0') + 1; return entry >= argz + argz_len ? NULL : (char *) entry; } else if (argz_len > 0) return argz; else return 0; } # undef __argz_next # define __argz_next(argz, len, entry) argz_next__ (argz, len, entry) #endif /* !_LIBC && !HAVE___ARGZ_NEXT */ /* Return number of bits set in X. */ static int pop PARAMS ((int x)); static inline int pop (x) int x; { /* We assume that no more than 16 bits are used. */ x = ((x & ~0x5555) >> 1) + (x & 0x5555); x = ((x & ~0x3333) >> 2) + (x & 0x3333); x = ((x >> 4) + x) & 0x0f0f; x = ((x >> 8) + x) & 0xff; return x; } struct loaded_l10nfile * _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language, territory, codeset, normalized_codeset, modifier, special, sponsor, revision, filename, do_allocate) struct loaded_l10nfile **l10nfile_list; const char *dirlist; size_t dirlist_len; int mask; const char *language; const char *territory; const char *codeset; const char *normalized_codeset; const char *modifier; const char *special; const char *sponsor; const char *revision; const char *filename; int do_allocate; { char *abs_filename; struct loaded_l10nfile **lastp; struct loaded_l10nfile *retval; char *cp; size_t dirlist_count; size_t entries; int cnt; /* If LANGUAGE contains an absolute directory specification, we ignore DIRLIST. */ if (IS_ABSOLUTE_PATH (language)) dirlist_len = 0; /* Allocate room for the full file name. */ abs_filename = (char *) malloc (dirlist_len + strlen (language) + ((mask & TERRITORY) != 0 ? strlen (territory) + 1 : 0) + ((mask & XPG_CODESET) != 0 ? strlen (codeset) + 1 : 0) + ((mask & XPG_NORM_CODESET) != 0 ? strlen (normalized_codeset) + 1 : 0) + (((mask & XPG_MODIFIER) != 0 || (mask & CEN_AUDIENCE) != 0) ? strlen (modifier) + 1 : 0) + ((mask & CEN_SPECIAL) != 0 ? strlen (special) + 1 : 0) + (((mask & CEN_SPONSOR) != 0 || (mask & CEN_REVISION) != 0) ? (1 + ((mask & CEN_SPONSOR) != 0 ? strlen (sponsor) : 0) + ((mask & CEN_REVISION) != 0 ? strlen (revision) + 1 : 0)) : 0) + 1 + strlen (filename) + 1); if (abs_filename == NULL) return NULL; /* Construct file name. */ cp = abs_filename; if (dirlist_len > 0) { memcpy (cp, dirlist, dirlist_len); __argz_stringify (cp, dirlist_len, PATH_SEPARATOR); cp += dirlist_len; cp[-1] = '/'; } cp = stpcpy (cp, language); if ((mask & TERRITORY) != 0) { *cp++ = '_'; cp = stpcpy (cp, territory); } if ((mask & XPG_CODESET) != 0) { *cp++ = '.'; cp = stpcpy (cp, codeset); } if ((mask & XPG_NORM_CODESET) != 0) { *cp++ = '.'; cp = stpcpy (cp, normalized_codeset); } if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0) { /* This component can be part of both syntaces but has different leading characters. For CEN we use `+', else `@'. */ *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@'; cp = stpcpy (cp, modifier); } if ((mask & CEN_SPECIAL) != 0) { *cp++ = '+'; cp = stpcpy (cp, special); } if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0) { *cp++ = ','; if ((mask & CEN_SPONSOR) != 0) cp = stpcpy (cp, sponsor); if ((mask & CEN_REVISION) != 0) { *cp++ = '_'; cp = stpcpy (cp, revision); } } *cp++ = '/'; stpcpy (cp, filename); /* Look in list of already loaded domains whether it is already available. */ lastp = l10nfile_list; for (retval = *l10nfile_list; retval != NULL; retval = retval->next) if (retval->filename != NULL) { int compare = strcmp (retval->filename, abs_filename); if (compare == 0) /* We found it! */ break; if (compare < 0) { /* It's not in the list. */ retval = NULL; break; } lastp = &retval->next; } if (retval != NULL || do_allocate == 0) { free (abs_filename); return retval; } dirlist_count = (dirlist_len > 0 ? __argz_count (dirlist, dirlist_len) : 1); /* Allocate a new loaded_l10nfile. */ retval = (struct loaded_l10nfile *) malloc (sizeof (*retval) + (((dirlist_count << pop (mask)) + (dirlist_count > 1 ? 1 : 0)) * sizeof (struct loaded_l10nfile *))); if (retval == NULL) return NULL; retval->filename = abs_filename; /* We set retval->data to NULL here; it is filled in later. Setting retval->decided to 1 here means that retval does not correspond to a real file (dirlist_count > 1) or is not worth looking up (if an unnormalized codeset was specified). */ retval->decided = (dirlist_count > 1 || ((mask & XPG_CODESET) != 0 && (mask & XPG_NORM_CODESET) != 0)); retval->data = NULL; retval->next = *lastp; *lastp = retval; entries = 0; /* Recurse to fill the inheritance list of RETVAL. If the DIRLIST is a real list (i.e. DIRLIST_COUNT > 1), the RETVAL entry does not correspond to a real file; retval->filename contains colons. In this case we loop across all elements of DIRLIST and across all bit patterns dominated by MASK. If the DIRLIST is a single directory or entirely redundant (i.e. DIRLIST_COUNT == 1), we loop across all bit patterns dominated by MASK, excluding MASK itself. In either case, we loop down from MASK to 0. This has the effect that the extra bits in the locale name are dropped in this order: first the modifier, then the territory, then the codeset, then the normalized_codeset. */ for (cnt = dirlist_count > 1 ? mask : mask - 1; cnt >= 0; --cnt) if ((cnt & ~mask) == 0 && ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0) && ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0)) { if (dirlist_count > 1) { /* Iterate over all elements of the DIRLIST. */ char *dir = NULL; while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir)) != NULL) retval->successor[entries++] = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt, language, territory, codeset, normalized_codeset, modifier, special, sponsor, revision, filename, 1); } else retval->successor[entries++] = _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, cnt, language, territory, codeset, normalized_codeset, modifier, special, sponsor, revision, filename, 1); } retval->successor[entries] = NULL; return retval; } /* Normalize codeset name. There is no standard for the codeset names. Normalization allows the user to use any of the common names. The return value is dynamically allocated and has to be freed by the caller. */ const char * _nl_normalize_codeset (codeset, name_len) const char *codeset; size_t name_len; { int len = 0; int only_digit = 1; char *retval; char *wp; size_t cnt; for (cnt = 0; cnt < name_len; ++cnt) if (isalnum ((unsigned char) codeset[cnt])) { ++len; if (isalpha ((unsigned char) codeset[cnt])) only_digit = 0; } retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1); if (retval != NULL) { if (only_digit) wp = stpcpy (retval, "iso"); else wp = retval; for (cnt = 0; cnt < name_len; ++cnt) if (isalpha ((unsigned char) codeset[cnt])) *wp++ = tolower ((unsigned char) codeset[cnt]); else if (isdigit ((unsigned char) codeset[cnt])) *wp++ = codeset[cnt]; *wp = '\0'; } return (const char *) retval; } /* @@ begin of epilog @@ */ /* We don't want libintl.a to depend on any other library. So we avoid the non-standard function stpcpy. In GNU C Library this function is available, though. Also allow the symbol HAVE_STPCPY to be defined. */ #if !_LIBC && !HAVE_STPCPY static char * stpcpy (dest, src) char *dest; const char *src; { while ((*dest++ = *src++) != '\0') /* Do nothing. */ ; return dest - 1; } #endif lifelines-3.0.61/intl/libgnuintl.h0000700002540200244210000002435507606165340017247 0ustar prappDomain Users/* Message catalogs for internationalization. Copyright (C) 1995-1997, 2000-2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _LIBINTL_H #define _LIBINTL_H 1 #include /* The LC_MESSAGES locale category is the category used by the functions gettext() and dgettext(). It is specified in POSIX, but not in ANSI C. On systems that don't define it, use an arbitrary value instead. On Solaris, defines __LOCALE_H (or _LOCALE_H in Solaris 2.5) then includes (i.e. this file!) and then only defines LC_MESSAGES. To avoid a redefinition warning, don't define LC_MESSAGES in this case. */ #if !defined LC_MESSAGES && !(defined __LOCALE_H || (defined _LOCALE_H && defined __sun)) # define LC_MESSAGES 1729 #endif /* We define an additional symbol to signal that we use the GNU implementation of gettext. */ #define __USE_GNU_GETTEXT 1 /* Provide information about the supported file formats. Returns the maximum minor revision number supported for a given major revision. */ #define __GNU_GETTEXT_SUPPORTED_REVISION(major) \ ((major) == 0 ? 1 : -1) /* Resolve a platform specific conflict on DJGPP. GNU gettext takes precedence over _conio_gettext. */ #ifdef __DJGPP__ # undef gettext #endif /* Use _INTL_PARAMS, not PARAMS, in order to avoid clashes with identifiers used by programs. Similarly, test __PROTOTYPES, not PROTOTYPES. */ #ifndef _INTL_PARAMS # if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES # define _INTL_PARAMS(args) args # else # define _INTL_PARAMS(args) () # endif #endif #ifdef __cplusplus extern "C" { #endif /* We redirect the functions to those prefixed with "libintl_". This is necessary, because some systems define gettext/textdomain/... in the C library (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer). If we used the unprefixed names, there would be cases where the definition in the C library would override the one in the libintl.so shared library. Recall that on ELF systems, the symbols are looked up in the following order: 1. in the executable, 2. in the shared libraries specified on the link command line, in order, 3. in the dependencies of the shared libraries specified on the link command line, 4. in the dlopen()ed shared libraries, in the order in which they were dlopen()ed. The definition in the C library would override the one in libintl.so if either * -lc is given on the link command line and -lintl isn't, or * -lc is given on the link command line before -lintl, or * libintl.so is a dependency of a dlopen()ed shared library but not linked to the executable at link time. Since Solaris gettext() behaves differently than GNU gettext(), this would be unacceptable. The redirection happens by default through macros in C, so that &gettext is independent of the compilation unit, but through inline functions in C++, in order not to interfere with the name mangling of class fields or class methods called 'gettext'. */ /* The user can define _INTL_REDIRECT_INLINE or _INTL_REDIRECT_MACROS. If he doesn't, we choose the method. A third possible method is _INTL_REDIRECT_ASM, supported only by GCC. */ #if !(defined _INTL_REDIRECT_INLINE || defined _INTL_REDIRECT_MACROS) # if __GNUC__ >= 2 && (defined __STDC__ || defined __cplusplus) # define _INTL_REDIRECT_ASM # else # ifdef __cplusplus # define _INTL_REDIRECT_INLINE # else # define _INTL_REDIRECT_MACROS # endif # endif #endif /* Auxiliary macros. */ #ifdef _INTL_REDIRECT_ASM # define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname)) # define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring # define _INTL_STRINGIFY(prefix) #prefix #else # define _INTL_ASM(cname) #endif /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_gettext (const char *__msgid); static inline char *gettext (const char *__msgid) { return libintl_gettext (__msgid); } #else #ifdef _INTL_REDIRECT_MACROS # define gettext libintl_gettext #endif extern char *gettext _INTL_PARAMS ((const char *__msgid)) _INTL_ASM (libintl_gettext); #endif /* Look up MSGID in the DOMAINNAME message catalog for the current LC_MESSAGES locale. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_dgettext (const char *__domainname, const char *__msgid); static inline char *dgettext (const char *__domainname, const char *__msgid) { return libintl_dgettext (__domainname, __msgid); } #else #ifdef _INTL_REDIRECT_MACROS # define dgettext libintl_dgettext #endif extern char *dgettext _INTL_PARAMS ((const char *__domainname, const char *__msgid)) _INTL_ASM (libintl_dgettext); #endif /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_dcgettext (const char *__domainname, const char *__msgid, int __category); static inline char *dcgettext (const char *__domainname, const char *__msgid, int __category) { return libintl_dcgettext (__domainname, __msgid, __category); } #else #ifdef _INTL_REDIRECT_MACROS # define dcgettext libintl_dcgettext #endif extern char *dcgettext _INTL_PARAMS ((const char *__domainname, const char *__msgid, int __category)) _INTL_ASM (libintl_dcgettext); #endif /* Similar to `gettext' but select the plural form corresponding to the number N. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_ngettext (const char *__msgid1, const char *__msgid2, unsigned long int __n); static inline char *ngettext (const char *__msgid1, const char *__msgid2, unsigned long int __n) { return libintl_ngettext (__msgid1, __msgid2, __n); } #else #ifdef _INTL_REDIRECT_MACROS # define ngettext libintl_ngettext #endif extern char *ngettext _INTL_PARAMS ((const char *__msgid1, const char *__msgid2, unsigned long int __n)) _INTL_ASM (libintl_ngettext); #endif /* Similar to `dgettext' but select the plural form corresponding to the number N. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_dngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n); static inline char *dngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n) { return libintl_dngettext (__domainname, __msgid1, __msgid2, __n); } #else #ifdef _INTL_REDIRECT_MACROS # define dngettext libintl_dngettext #endif extern char *dngettext _INTL_PARAMS ((const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n)) _INTL_ASM (libintl_dngettext); #endif /* Similar to `dcgettext' but select the plural form corresponding to the number N. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_dcngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category); static inline char *dcngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category) { return libintl_dcngettext (__domainname, __msgid1, __msgid2, __n, __category); } #else #ifdef _INTL_REDIRECT_MACROS # define dcngettext libintl_dcngettext #endif extern char *dcngettext _INTL_PARAMS ((const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category)) _INTL_ASM (libintl_dcngettext); #endif /* Set the current default message catalog to DOMAINNAME. If DOMAINNAME is null, return the current default. If DOMAINNAME is "", reset to the default of "messages". */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_textdomain (const char *__domainname); static inline char *textdomain (const char *__domainname) { return libintl_textdomain (__domainname); } #else #ifdef _INTL_REDIRECT_MACROS # define textdomain libintl_textdomain #endif extern char *textdomain _INTL_PARAMS ((const char *__domainname)) _INTL_ASM (libintl_textdomain); #endif /* Specify that the DOMAINNAME message catalog will be found in DIRNAME rather than in the system locale data base. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_bindtextdomain (const char *__domainname, const char *__dirname); static inline char *bindtextdomain (const char *__domainname, const char *__dirname) { return libintl_bindtextdomain (__domainname, __dirname); } #else #ifdef _INTL_REDIRECT_MACROS # define bindtextdomain libintl_bindtextdomain #endif extern char *bindtextdomain _INTL_PARAMS ((const char *__domainname, const char *__dirname)) _INTL_ASM (libintl_bindtextdomain); #endif /* Specify the character encoding in which the messages from the DOMAINNAME message catalog will be returned. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_bind_textdomain_codeset (const char *__domainname, const char *__codeset); static inline char *bind_textdomain_codeset (const char *__domainname, const char *__codeset) { return libintl_bind_textdomain_codeset (__domainname, __codeset); } #else #ifdef _INTL_REDIRECT_MACROS # define bind_textdomain_codeset libintl_bind_textdomain_codeset #endif extern char *bind_textdomain_codeset _INTL_PARAMS ((const char *__domainname, const char *__codeset)) _INTL_ASM (libintl_bind_textdomain_codeset); #endif #ifdef __cplusplus } #endif #endif /* libintl.h */ lifelines-3.0.61/intl/loadinfo.h0000700002540200244210000001373707606165340016675 0ustar prappDomain Users/* Copyright (C) 1996-1999, 2000-2002 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _LOADINFO_H #define _LOADINFO_H 1 /* Declarations of locale dependent catalog lookup functions. Implemented in localealias.c Possibly replace a locale name by another. explodename.c Split a locale name into its various fields. l10nflist.c Generate a list of filenames of possible message catalogs. finddomain.c Find and open the relevant message catalogs. The main function _nl_find_domain() in finddomain.c is declared in gettextP.h. */ #ifndef PARAMS # if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES # define PARAMS(args) args # else # define PARAMS(args) () # endif #endif #ifndef internal_function # define internal_function #endif /* Tell the compiler when a conditional or integer expression is almost always true or almost always false. */ #ifndef HAVE_BUILTIN_EXPECT # define __builtin_expect(expr, val) (expr) #endif /* Separator in PATH like lists of pathnames. */ #if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ /* Win32, OS/2, DOS */ # define PATH_SEPARATOR ';' #else /* Unix */ # define PATH_SEPARATOR ':' #endif /* Encoding of locale name parts. */ #define CEN_REVISION 1 #define CEN_SPONSOR 2 #define CEN_SPECIAL 4 #define XPG_NORM_CODESET 8 #define XPG_CODESET 16 #define TERRITORY 32 #define CEN_AUDIENCE 64 #define XPG_MODIFIER 128 #define CEN_SPECIFIC (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE) #define XPG_SPECIFIC (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER) struct loaded_l10nfile { const char *filename; int decided; const void *data; struct loaded_l10nfile *next; struct loaded_l10nfile *successor[1]; }; /* Normalize codeset name. There is no standard for the codeset names. Normalization allows the user to use any of the common names. The return value is dynamically allocated and has to be freed by the caller. */ extern const char *_nl_normalize_codeset PARAMS ((const char *codeset, size_t name_len)); /* Lookup a locale dependent file. *L10NFILE_LIST denotes a pool of lookup results of locale dependent files of the same kind, sorted in decreasing order of ->filename. DIRLIST and DIRLIST_LEN are an argz list of directories in which to look, containing at least one directory (i.e. DIRLIST_LEN > 0). MASK, LANGUAGE, TERRITORY, CODESET, NORMALIZED_CODESET, MODIFIER, SPECIAL, SPONSOR, REVISION are the pieces of the locale name, as produced by _nl_explode_name(). FILENAME is the filename suffix. The return value is the lookup result, either found in *L10NFILE_LIST, or - if DO_ALLOCATE is nonzero - freshly allocated, or possibly NULL. If the return value is non-NULL, it is added to *L10NFILE_LIST, and its ->next field denotes the chaining inside *L10NFILE_LIST, and furthermore its ->successor[] field contains a list of other lookup results from which this lookup result inherits. */ extern struct loaded_l10nfile * _nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list, const char *dirlist, size_t dirlist_len, int mask, const char *language, const char *territory, const char *codeset, const char *normalized_codeset, const char *modifier, const char *special, const char *sponsor, const char *revision, const char *filename, int do_allocate)); /* Lookup the real locale name for a locale alias NAME, or NULL if NAME is not a locale alias (but possibly a real locale name). The return value is statically allocated and must not be freed. */ extern const char *_nl_expand_alias PARAMS ((const char *name)); /* Split a locale name NAME into its pieces: language, modifier, territory, codeset, special, sponsor, revision. NAME gets destructively modified: NUL bytes are inserted here and there. *LANGUAGE gets assigned NAME. Each of *MODIFIER, *TERRITORY, *CODESET, *SPECIAL, *SPONSOR, *REVISION gets assigned either a pointer into the old NAME string, or NULL. *NORMALIZED_CODESET gets assigned the expanded *CODESET, if it is different from *CODESET; this one is dynamically allocated and has to be freed by the caller. The return value is a bitmask, where each bit corresponds to one filled-in value: XPG_MODIFIER, CEN_AUDIENCE for *MODIFIER, TERRITORY for *TERRITORY, XPG_CODESET for *CODESET, XPG_NORM_CODESET for *NORMALIZED_CODESET, CEN_SPECIAL for *SPECIAL, CEN_SPONSOR for *SPONSOR, CEN_REVISION for *REVISION. */ extern int _nl_explode_name PARAMS ((char *name, const char **language, const char **modifier, const char **territory, const char **codeset, const char **normalized_codeset, const char **special, const char **sponsor, const char **revision)); /* Split a locale name NAME into a leading language part and all the rest. Return a pointer to the first character after the language, i.e. to the first byte of the rest. */ extern char *_nl_find_language PARAMS ((const char *name)); #endif /* loadinfo.h */ lifelines-3.0.61/intl/loadmsgcat.c0000700002540200244210000010322207606165340017200 0ustar prappDomain Users/* Load needed message catalogs. Copyright (C) 1995-1999, 2000-2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Tell glibc's to provide a prototype for mempcpy(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #ifdef __GNUC__ # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif #endif #include #include #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #ifdef _LIBC # include # include #endif #if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ || (defined _LIBC && defined _POSIX_MAPPED_FILES) # include # undef HAVE_MMAP # define HAVE_MMAP 1 #else # undef HAVE_MMAP #endif #if defined HAVE_STDINT_H_WITH_UINTMAX || defined _LIBC # include #endif #if defined HAVE_INTTYPES_H || defined _LIBC # include #endif #include "gmo.h" #include "gettextP.h" #include "hash-string.h" #include "plural-exp.h" #ifdef _LIBC # include "../locale/localeinfo.h" #endif /* Provide fallback values for macros that ought to be defined in . Note that our fallback values need not be literal strings, because we don't use them with preprocessor string concatenation. */ #if !defined PRId8 || PRI_MACROS_BROKEN # undef PRId8 # define PRId8 "d" #endif #if !defined PRIi8 || PRI_MACROS_BROKEN # undef PRIi8 # define PRIi8 "i" #endif #if !defined PRIo8 || PRI_MACROS_BROKEN # undef PRIo8 # define PRIo8 "o" #endif #if !defined PRIu8 || PRI_MACROS_BROKEN # undef PRIu8 # define PRIu8 "u" #endif #if !defined PRIx8 || PRI_MACROS_BROKEN # undef PRIx8 # define PRIx8 "x" #endif #if !defined PRIX8 || PRI_MACROS_BROKEN # undef PRIX8 # define PRIX8 "X" #endif #if !defined PRId16 || PRI_MACROS_BROKEN # undef PRId16 # define PRId16 "d" #endif #if !defined PRIi16 || PRI_MACROS_BROKEN # undef PRIi16 # define PRIi16 "i" #endif #if !defined PRIo16 || PRI_MACROS_BROKEN # undef PRIo16 # define PRIo16 "o" #endif #if !defined PRIu16 || PRI_MACROS_BROKEN # undef PRIu16 # define PRIu16 "u" #endif #if !defined PRIx16 || PRI_MACROS_BROKEN # undef PRIx16 # define PRIx16 "x" #endif #if !defined PRIX16 || PRI_MACROS_BROKEN # undef PRIX16 # define PRIX16 "X" #endif #if !defined PRId32 || PRI_MACROS_BROKEN # undef PRId32 # define PRId32 "d" #endif #if !defined PRIi32 || PRI_MACROS_BROKEN # undef PRIi32 # define PRIi32 "i" #endif #if !defined PRIo32 || PRI_MACROS_BROKEN # undef PRIo32 # define PRIo32 "o" #endif #if !defined PRIu32 || PRI_MACROS_BROKEN # undef PRIu32 # define PRIu32 "u" #endif #if !defined PRIx32 || PRI_MACROS_BROKEN # undef PRIx32 # define PRIx32 "x" #endif #if !defined PRIX32 || PRI_MACROS_BROKEN # undef PRIX32 # define PRIX32 "X" #endif #if !defined PRId64 || PRI_MACROS_BROKEN # undef PRId64 # define PRId64 (sizeof (long) == 8 ? "ld" : "lld") #endif #if !defined PRIi64 || PRI_MACROS_BROKEN # undef PRIi64 # define PRIi64 (sizeof (long) == 8 ? "li" : "lli") #endif #if !defined PRIo64 || PRI_MACROS_BROKEN # undef PRIo64 # define PRIo64 (sizeof (long) == 8 ? "lo" : "llo") #endif #if !defined PRIu64 || PRI_MACROS_BROKEN # undef PRIu64 # define PRIu64 (sizeof (long) == 8 ? "lu" : "llu") #endif #if !defined PRIx64 || PRI_MACROS_BROKEN # undef PRIx64 # define PRIx64 (sizeof (long) == 8 ? "lx" : "llx") #endif #if !defined PRIX64 || PRI_MACROS_BROKEN # undef PRIX64 # define PRIX64 (sizeof (long) == 8 ? "lX" : "llX") #endif #if !defined PRIdLEAST8 || PRI_MACROS_BROKEN # undef PRIdLEAST8 # define PRIdLEAST8 "d" #endif #if !defined PRIiLEAST8 || PRI_MACROS_BROKEN # undef PRIiLEAST8 # define PRIiLEAST8 "i" #endif #if !defined PRIoLEAST8 || PRI_MACROS_BROKEN # undef PRIoLEAST8 # define PRIoLEAST8 "o" #endif #if !defined PRIuLEAST8 || PRI_MACROS_BROKEN # undef PRIuLEAST8 # define PRIuLEAST8 "u" #endif #if !defined PRIxLEAST8 || PRI_MACROS_BROKEN # undef PRIxLEAST8 # define PRIxLEAST8 "x" #endif #if !defined PRIXLEAST8 || PRI_MACROS_BROKEN # undef PRIXLEAST8 # define PRIXLEAST8 "X" #endif #if !defined PRIdLEAST16 || PRI_MACROS_BROKEN # undef PRIdLEAST16 # define PRIdLEAST16 "d" #endif #if !defined PRIiLEAST16 || PRI_MACROS_BROKEN # undef PRIiLEAST16 # define PRIiLEAST16 "i" #endif #if !defined PRIoLEAST16 || PRI_MACROS_BROKEN # undef PRIoLEAST16 # define PRIoLEAST16 "o" #endif #if !defined PRIuLEAST16 || PRI_MACROS_BROKEN # undef PRIuLEAST16 # define PRIuLEAST16 "u" #endif #if !defined PRIxLEAST16 || PRI_MACROS_BROKEN # undef PRIxLEAST16 # define PRIxLEAST16 "x" #endif #if !defined PRIXLEAST16 || PRI_MACROS_BROKEN # undef PRIXLEAST16 # define PRIXLEAST16 "X" #endif #if !defined PRIdLEAST32 || PRI_MACROS_BROKEN # undef PRIdLEAST32 # define PRIdLEAST32 "d" #endif #if !defined PRIiLEAST32 || PRI_MACROS_BROKEN # undef PRIiLEAST32 # define PRIiLEAST32 "i" #endif #if !defined PRIoLEAST32 || PRI_MACROS_BROKEN # undef PRIoLEAST32 # define PRIoLEAST32 "o" #endif #if !defined PRIuLEAST32 || PRI_MACROS_BROKEN # undef PRIuLEAST32 # define PRIuLEAST32 "u" #endif #if !defined PRIxLEAST32 || PRI_MACROS_BROKEN # undef PRIxLEAST32 # define PRIxLEAST32 "x" #endif #if !defined PRIXLEAST32 || PRI_MACROS_BROKEN # undef PRIXLEAST32 # define PRIXLEAST32 "X" #endif #if !defined PRIdLEAST64 || PRI_MACROS_BROKEN # undef PRIdLEAST64 # define PRIdLEAST64 PRId64 #endif #if !defined PRIiLEAST64 || PRI_MACROS_BROKEN # undef PRIiLEAST64 # define PRIiLEAST64 PRIi64 #endif #if !defined PRIoLEAST64 || PRI_MACROS_BROKEN # undef PRIoLEAST64 # define PRIoLEAST64 PRIo64 #endif #if !defined PRIuLEAST64 || PRI_MACROS_BROKEN # undef PRIuLEAST64 # define PRIuLEAST64 PRIu64 #endif #if !defined PRIxLEAST64 || PRI_MACROS_BROKEN # undef PRIxLEAST64 # define PRIxLEAST64 PRIx64 #endif #if !defined PRIXLEAST64 || PRI_MACROS_BROKEN # undef PRIXLEAST64 # define PRIXLEAST64 PRIX64 #endif #if !defined PRIdFAST8 || PRI_MACROS_BROKEN # undef PRIdFAST8 # define PRIdFAST8 "d" #endif #if !defined PRIiFAST8 || PRI_MACROS_BROKEN # undef PRIiFAST8 # define PRIiFAST8 "i" #endif #if !defined PRIoFAST8 || PRI_MACROS_BROKEN # undef PRIoFAST8 # define PRIoFAST8 "o" #endif #if !defined PRIuFAST8 || PRI_MACROS_BROKEN # undef PRIuFAST8 # define PRIuFAST8 "u" #endif #if !defined PRIxFAST8 || PRI_MACROS_BROKEN # undef PRIxFAST8 # define PRIxFAST8 "x" #endif #if !defined PRIXFAST8 || PRI_MACROS_BROKEN # undef PRIXFAST8 # define PRIXFAST8 "X" #endif #if !defined PRIdFAST16 || PRI_MACROS_BROKEN # undef PRIdFAST16 # define PRIdFAST16 "d" #endif #if !defined PRIiFAST16 || PRI_MACROS_BROKEN # undef PRIiFAST16 # define PRIiFAST16 "i" #endif #if !defined PRIoFAST16 || PRI_MACROS_BROKEN # undef PRIoFAST16 # define PRIoFAST16 "o" #endif #if !defined PRIuFAST16 || PRI_MACROS_BROKEN # undef PRIuFAST16 # define PRIuFAST16 "u" #endif #if !defined PRIxFAST16 || PRI_MACROS_BROKEN # undef PRIxFAST16 # define PRIxFAST16 "x" #endif #if !defined PRIXFAST16 || PRI_MACROS_BROKEN # undef PRIXFAST16 # define PRIXFAST16 "X" #endif #if !defined PRIdFAST32 || PRI_MACROS_BROKEN # undef PRIdFAST32 # define PRIdFAST32 "d" #endif #if !defined PRIiFAST32 || PRI_MACROS_BROKEN # undef PRIiFAST32 # define PRIiFAST32 "i" #endif #if !defined PRIoFAST32 || PRI_MACROS_BROKEN # undef PRIoFAST32 # define PRIoFAST32 "o" #endif #if !defined PRIuFAST32 || PRI_MACROS_BROKEN # undef PRIuFAST32 # define PRIuFAST32 "u" #endif #if !defined PRIxFAST32 || PRI_MACROS_BROKEN # undef PRIxFAST32 # define PRIxFAST32 "x" #endif #if !defined PRIXFAST32 || PRI_MACROS_BROKEN # undef PRIXFAST32 # define PRIXFAST32 "X" #endif #if !defined PRIdFAST64 || PRI_MACROS_BROKEN # undef PRIdFAST64 # define PRIdFAST64 PRId64 #endif #if !defined PRIiFAST64 || PRI_MACROS_BROKEN # undef PRIiFAST64 # define PRIiFAST64 PRIi64 #endif #if !defined PRIoFAST64 || PRI_MACROS_BROKEN # undef PRIoFAST64 # define PRIoFAST64 PRIo64 #endif #if !defined PRIuFAST64 || PRI_MACROS_BROKEN # undef PRIuFAST64 # define PRIuFAST64 PRIu64 #endif #if !defined PRIxFAST64 || PRI_MACROS_BROKEN # undef PRIxFAST64 # define PRIxFAST64 PRIx64 #endif #if !defined PRIXFAST64 || PRI_MACROS_BROKEN # undef PRIXFAST64 # define PRIXFAST64 PRIX64 #endif #if !defined PRIdMAX || PRI_MACROS_BROKEN # undef PRIdMAX # define PRIdMAX (sizeof (uintmax_t) == sizeof (long) ? "ld" : "lld") #endif #if !defined PRIiMAX || PRI_MACROS_BROKEN # undef PRIiMAX # define PRIiMAX (sizeof (uintmax_t) == sizeof (long) ? "li" : "lli") #endif #if !defined PRIoMAX || PRI_MACROS_BROKEN # undef PRIoMAX # define PRIoMAX (sizeof (uintmax_t) == sizeof (long) ? "lo" : "llo") #endif #if !defined PRIuMAX || PRI_MACROS_BROKEN # undef PRIuMAX # define PRIuMAX (sizeof (uintmax_t) == sizeof (long) ? "lu" : "llu") #endif #if !defined PRIxMAX || PRI_MACROS_BROKEN # undef PRIxMAX # define PRIxMAX (sizeof (uintmax_t) == sizeof (long) ? "lx" : "llx") #endif #if !defined PRIXMAX || PRI_MACROS_BROKEN # undef PRIXMAX # define PRIXMAX (sizeof (uintmax_t) == sizeof (long) ? "lX" : "llX") #endif #if !defined PRIdPTR || PRI_MACROS_BROKEN # undef PRIdPTR # define PRIdPTR \ (sizeof (void *) == sizeof (long) ? "ld" : \ sizeof (void *) == sizeof (int) ? "d" : \ "lld") #endif #if !defined PRIiPTR || PRI_MACROS_BROKEN # undef PRIiPTR # define PRIiPTR \ (sizeof (void *) == sizeof (long) ? "li" : \ sizeof (void *) == sizeof (int) ? "i" : \ "lli") #endif #if !defined PRIoPTR || PRI_MACROS_BROKEN # undef PRIoPTR # define PRIoPTR \ (sizeof (void *) == sizeof (long) ? "lo" : \ sizeof (void *) == sizeof (int) ? "o" : \ "llo") #endif #if !defined PRIuPTR || PRI_MACROS_BROKEN # undef PRIuPTR # define PRIuPTR \ (sizeof (void *) == sizeof (long) ? "lu" : \ sizeof (void *) == sizeof (int) ? "u" : \ "llu") #endif #if !defined PRIxPTR || PRI_MACROS_BROKEN # undef PRIxPTR # define PRIxPTR \ (sizeof (void *) == sizeof (long) ? "lx" : \ sizeof (void *) == sizeof (int) ? "x" : \ "llx") #endif #if !defined PRIXPTR || PRI_MACROS_BROKEN # undef PRIXPTR # define PRIXPTR \ (sizeof (void *) == sizeof (long) ? "lX" : \ sizeof (void *) == sizeof (int) ? "X" : \ "llX") #endif /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ISO C functions. This is required by the standard because some ISO C functions will require linking with this object file and the name space must not be polluted. */ # define open __open # define close __close # define read __read # define mmap __mmap # define munmap __munmap #endif /* For those losing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA # define freea(p) /* nothing */ #else # define alloca(n) malloc (n) # define freea(p) free (p) #endif /* For systems that distinguish between text and binary I/O. O_BINARY is usually declared in . */ #if !defined O_BINARY && defined _O_BINARY /* For MSC-compatible compilers. */ # define O_BINARY _O_BINARY # define O_TEXT _O_TEXT #endif #ifdef __BEOS__ /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */ # undef O_BINARY # undef O_TEXT #endif /* On reasonable systems, binary I/O is the default. */ #ifndef O_BINARY # define O_BINARY 0 #endif /* Prototypes for local functions. Needed to ensure compiler checking of function argument counts despite of K&R C function definition syntax. */ static const char *get_sysdep_segment_value PARAMS ((const char *name)); /* We need a sign, whether a new catalog was loaded, which can be associated with all translations. This is important if the translations are cached by one of GCC's features. */ int _nl_msg_cat_cntr; /* Expand a system dependent string segment. Return NULL if unsupported. */ static const char * get_sysdep_segment_value (name) const char *name; { /* Test for an ISO C 99 section 7.8.1 format string directive. Syntax: P R I { d | i | o | u | x | X } { { | LEAST | FAST } { 8 | 16 | 32 | 64 } | MAX | PTR } */ /* We don't use a table of 14 times 6 'const char *' strings here, because data relocations cost startup time. */ if (name[0] == 'P' && name[1] == 'R' && name[2] == 'I') { if (name[3] == 'd' || name[3] == 'i' || name[3] == 'o' || name[3] == 'u' || name[3] == 'x' || name[3] == 'X') { if (name[4] == '8' && name[5] == '\0') { if (name[3] == 'd') return PRId8; if (name[3] == 'i') return PRIi8; if (name[3] == 'o') return PRIo8; if (name[3] == 'u') return PRIu8; if (name[3] == 'x') return PRIx8; if (name[3] == 'X') return PRIX8; abort (); } if (name[4] == '1' && name[5] == '6' && name[6] == '\0') { if (name[3] == 'd') return PRId16; if (name[3] == 'i') return PRIi16; if (name[3] == 'o') return PRIo16; if (name[3] == 'u') return PRIu16; if (name[3] == 'x') return PRIx16; if (name[3] == 'X') return PRIX16; abort (); } if (name[4] == '3' && name[5] == '2' && name[6] == '\0') { if (name[3] == 'd') return PRId32; if (name[3] == 'i') return PRIi32; if (name[3] == 'o') return PRIo32; if (name[3] == 'u') return PRIu32; if (name[3] == 'x') return PRIx32; if (name[3] == 'X') return PRIX32; abort (); } if (name[4] == '6' && name[5] == '4' && name[6] == '\0') { if (name[3] == 'd') return PRId64; if (name[3] == 'i') return PRIi64; if (name[3] == 'o') return PRIo64; if (name[3] == 'u') return PRIu64; if (name[3] == 'x') return PRIx64; if (name[3] == 'X') return PRIX64; abort (); } if (name[4] == 'L' && name[5] == 'E' && name[6] == 'A' && name[7] == 'S' && name[8] == 'T') { if (name[9] == '8' && name[10] == '\0') { if (name[3] == 'd') return PRIdLEAST8; if (name[3] == 'i') return PRIiLEAST8; if (name[3] == 'o') return PRIoLEAST8; if (name[3] == 'u') return PRIuLEAST8; if (name[3] == 'x') return PRIxLEAST8; if (name[3] == 'X') return PRIXLEAST8; abort (); } if (name[9] == '1' && name[10] == '6' && name[11] == '\0') { if (name[3] == 'd') return PRIdLEAST16; if (name[3] == 'i') return PRIiLEAST16; if (name[3] == 'o') return PRIoLEAST16; if (name[3] == 'u') return PRIuLEAST16; if (name[3] == 'x') return PRIxLEAST16; if (name[3] == 'X') return PRIXLEAST16; abort (); } if (name[9] == '3' && name[10] == '2' && name[11] == '\0') { if (name[3] == 'd') return PRIdLEAST32; if (name[3] == 'i') return PRIiLEAST32; if (name[3] == 'o') return PRIoLEAST32; if (name[3] == 'u') return PRIuLEAST32; if (name[3] == 'x') return PRIxLEAST32; if (name[3] == 'X') return PRIXLEAST32; abort (); } if (name[9] == '6' && name[10] == '4' && name[11] == '\0') { if (name[3] == 'd') return PRIdLEAST64; if (name[3] == 'i') return PRIiLEAST64; if (name[3] == 'o') return PRIoLEAST64; if (name[3] == 'u') return PRIuLEAST64; if (name[3] == 'x') return PRIxLEAST64; if (name[3] == 'X') return PRIXLEAST64; abort (); } } if (name[4] == 'F' && name[5] == 'A' && name[6] == 'S' && name[7] == 'T') { if (name[8] == '8' && name[9] == '\0') { if (name[3] == 'd') return PRIdFAST8; if (name[3] == 'i') return PRIiFAST8; if (name[3] == 'o') return PRIoFAST8; if (name[3] == 'u') return PRIuFAST8; if (name[3] == 'x') return PRIxFAST8; if (name[3] == 'X') return PRIXFAST8; abort (); } if (name[8] == '1' && name[9] == '6' && name[10] == '\0') { if (name[3] == 'd') return PRIdFAST16; if (name[3] == 'i') return PRIiFAST16; if (name[3] == 'o') return PRIoFAST16; if (name[3] == 'u') return PRIuFAST16; if (name[3] == 'x') return PRIxFAST16; if (name[3] == 'X') return PRIXFAST16; abort (); } if (name[8] == '3' && name[9] == '2' && name[10] == '\0') { if (name[3] == 'd') return PRIdFAST32; if (name[3] == 'i') return PRIiFAST32; if (name[3] == 'o') return PRIoFAST32; if (name[3] == 'u') return PRIuFAST32; if (name[3] == 'x') return PRIxFAST32; if (name[3] == 'X') return PRIXFAST32; abort (); } if (name[8] == '6' && name[9] == '4' && name[10] == '\0') { if (name[3] == 'd') return PRIdFAST64; if (name[3] == 'i') return PRIiFAST64; if (name[3] == 'o') return PRIoFAST64; if (name[3] == 'u') return PRIuFAST64; if (name[3] == 'x') return PRIxFAST64; if (name[3] == 'X') return PRIXFAST64; abort (); } } if (name[4] == 'M' && name[5] == 'A' && name[6] == 'X' && name[7] == '\0') { if (name[3] == 'd') return PRIdMAX; if (name[3] == 'i') return PRIiMAX; if (name[3] == 'o') return PRIoMAX; if (name[3] == 'u') return PRIuMAX; if (name[3] == 'x') return PRIxMAX; if (name[3] == 'X') return PRIXMAX; abort (); } if (name[4] == 'P' && name[5] == 'T' && name[6] == 'R' && name[7] == '\0') { if (name[3] == 'd') return PRIdPTR; if (name[3] == 'i') return PRIiPTR; if (name[3] == 'o') return PRIoPTR; if (name[3] == 'u') return PRIuPTR; if (name[3] == 'x') return PRIxPTR; if (name[3] == 'X') return PRIXPTR; abort (); } } } /* Other system dependent strings are not valid. */ return NULL; } /* Initialize the codeset dependent parts of an opened message catalog. Return the header entry. */ const char * internal_function _nl_init_domain_conv (domain_file, domain, domainbinding) struct loaded_l10nfile *domain_file; struct loaded_domain *domain; struct binding *domainbinding; { /* Find out about the character set the file is encoded with. This can be found (in textual form) in the entry "". If this entry does not exist or if this does not contain the `charset=' information, we will assume the charset matches the one the current locale and we don't have to perform any conversion. */ char *nullentry; size_t nullentrylen; /* Preinitialize fields, to avoid recursion during _nl_find_msg. */ domain->codeset_cntr = (domainbinding != NULL ? domainbinding->codeset_cntr : 0); #ifdef _LIBC domain->conv = (__gconv_t) -1; #else # if HAVE_ICONV domain->conv = (iconv_t) -1; # endif #endif domain->conv_tab = NULL; /* Get the header entry. */ nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen); if (nullentry != NULL) { #if defined _LIBC || HAVE_ICONV const char *charsetstr; charsetstr = strstr (nullentry, "charset="); if (charsetstr != NULL) { size_t len; char *charset; const char *outcharset; charsetstr += strlen ("charset="); len = strcspn (charsetstr, " \t\n"); charset = (char *) alloca (len + 1); # if defined _LIBC || HAVE_MEMPCPY *((char *) mempcpy (charset, charsetstr, len)) = '\0'; # else memcpy (charset, charsetstr, len); charset[len] = '\0'; # endif /* The output charset should normally be determined by the locale. But sometimes the locale is not used or not correctly set up, so we provide a possibility for the user to override this. Moreover, the value specified through bind_textdomain_codeset overrides both. */ if (domainbinding != NULL && domainbinding->codeset != NULL) outcharset = domainbinding->codeset; else { outcharset = getenv ("OUTPUT_CHARSET"); if (outcharset == NULL || outcharset[0] == '\0') { # ifdef _LIBC outcharset = (*_nl_current[LC_CTYPE])->values[_NL_ITEM_INDEX (CODESET)].string; # else # if HAVE_ICONV extern const char *locale_charset PARAMS ((void)); outcharset = locale_charset (); # endif # endif } } # ifdef _LIBC /* We always want to use transliteration. */ outcharset = norm_add_slashes (outcharset, "TRANSLIT"); charset = norm_add_slashes (charset, NULL); if (__gconv_open (outcharset, charset, &domain->conv, GCONV_AVOID_NOCONV) != __GCONV_OK) domain->conv = (__gconv_t) -1; # else # if HAVE_ICONV /* When using GNU libc >= 2.2 or GNU libiconv >= 1.5, we want to use transliteration. */ # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 \ || _LIBICONV_VERSION >= 0x0105 if (strchr (outcharset, '/') == NULL) { char *tmp; len = strlen (outcharset); tmp = (char *) alloca (len + 10 + 1); memcpy (tmp, outcharset, len); memcpy (tmp + len, "//TRANSLIT", 10 + 1); outcharset = tmp; domain->conv = iconv_open (outcharset, charset); freea (outcharset); } else # endif domain->conv = iconv_open (outcharset, charset); # endif # endif freea (charset); } #endif /* _LIBC || HAVE_ICONV */ } return nullentry; } /* Frees the codeset dependent parts of an opened message catalog. */ void internal_function _nl_free_domain_conv (domain) struct loaded_domain *domain; { if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1) free (domain->conv_tab); #ifdef _LIBC if (domain->conv != (__gconv_t) -1) __gconv_close (domain->conv); #else # if HAVE_ICONV if (domain->conv != (iconv_t) -1) iconv_close (domain->conv); # endif #endif } /* Load the message catalogs specified by FILENAME. If it is no valid message catalog do nothing. */ void internal_function _nl_load_domain (domain_file, domainbinding) struct loaded_l10nfile *domain_file; struct binding *domainbinding; { int fd; size_t size; #ifdef _LIBC struct stat64 st; #else struct stat st; #endif struct mo_file_header *data = (struct mo_file_header *) -1; int use_mmap = 0; struct loaded_domain *domain; int revision; const char *nullentry; domain_file->decided = 1; domain_file->data = NULL; /* Note that it would be useless to store domainbinding in domain_file because domainbinding might be == NULL now but != NULL later (after a call to bind_textdomain_codeset). */ /* If the record does not represent a valid locale the FILENAME might be NULL. This can happen when according to the given specification the locale file name is different for XPG and CEN syntax. */ if (domain_file->filename == NULL) return; /* Try to open the addressed file. */ fd = open (domain_file->filename, O_RDONLY | O_BINARY); if (fd == -1) return; /* We must know about the size of the file. */ if ( #ifdef _LIBC __builtin_expect (fstat64 (fd, &st) != 0, 0) #else __builtin_expect (fstat (fd, &st) != 0, 0) #endif || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0) || __builtin_expect (size < sizeof (struct mo_file_header), 0)) { /* Something went wrong. */ close (fd); return; } #ifdef HAVE_MMAP /* Now we are ready to load the file. If mmap() is available we try this first. If not available or it failed we try to load it. */ data = (struct mo_file_header *) mmap (NULL, size, PROT_READ, MAP_PRIVATE, fd, 0); if (__builtin_expect (data != (struct mo_file_header *) -1, 1)) { /* mmap() call was successful. */ close (fd); use_mmap = 1; } #endif /* If the data is not yet available (i.e. mmap'ed) we try to load it manually. */ if (data == (struct mo_file_header *) -1) { size_t to_read; char *read_ptr; data = (struct mo_file_header *) malloc (size); if (data == NULL) return; to_read = size; read_ptr = (char *) data; do { long int nb = (long int) read (fd, read_ptr, to_read); if (nb <= 0) { #ifdef EINTR if (nb == -1 && errno == EINTR) continue; #endif close (fd); return; } read_ptr += nb; to_read -= nb; } while (to_read > 0); close (fd); } /* Using the magic number we can test whether it really is a message catalog file. */ if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED, 0)) { /* The magic number is wrong: not a message catalog file. */ #ifdef HAVE_MMAP if (use_mmap) munmap ((caddr_t) data, size); else #endif free (data); return; } domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain)); if (domain == NULL) return; domain_file->data = domain; domain->data = (char *) data; domain->use_mmap = use_mmap; domain->mmap_size = size; domain->must_swap = data->magic != _MAGIC; domain->malloced = NULL; /* Fill in the information about the available tables. */ revision = W (domain->must_swap, data->revision); /* We support only the major revision 0. */ switch (revision >> 16) { case 0: domain->nstrings = W (domain->must_swap, data->nstrings); domain->orig_tab = (const struct string_desc *) ((char *) data + W (domain->must_swap, data->orig_tab_offset)); domain->trans_tab = (const struct string_desc *) ((char *) data + W (domain->must_swap, data->trans_tab_offset)); domain->hash_size = W (domain->must_swap, data->hash_tab_size); domain->hash_tab = (domain->hash_size > 2 ? (const nls_uint32 *) ((char *) data + W (domain->must_swap, data->hash_tab_offset)) : NULL); domain->must_swap_hash_tab = domain->must_swap; /* Now dispatch on the minor revision. */ switch (revision & 0xffff) { case 0: domain->n_sysdep_strings = 0; domain->orig_sysdep_tab = NULL; domain->trans_sysdep_tab = NULL; break; case 1: default: { nls_uint32 n_sysdep_strings; if (domain->hash_tab == NULL) /* This is invalid. These minor revisions need a hash table. */ goto invalid; n_sysdep_strings = W (domain->must_swap, data->n_sysdep_strings); if (n_sysdep_strings > 0) { nls_uint32 n_sysdep_segments; const struct sysdep_segment *sysdep_segments; const char **sysdep_segment_values; const nls_uint32 *orig_sysdep_tab; const nls_uint32 *trans_sysdep_tab; size_t memneed; char *mem; struct sysdep_string_desc *inmem_orig_sysdep_tab; struct sysdep_string_desc *inmem_trans_sysdep_tab; nls_uint32 *inmem_hash_tab; unsigned int i; /* Get the values of the system dependent segments. */ n_sysdep_segments = W (domain->must_swap, data->n_sysdep_segments); sysdep_segments = (const struct sysdep_segment *) ((char *) data + W (domain->must_swap, data->sysdep_segments_offset)); sysdep_segment_values = alloca (n_sysdep_segments * sizeof (const char *)); for (i = 0; i < n_sysdep_segments; i++) { const char *name = (char *) data + W (domain->must_swap, sysdep_segments[i].offset); nls_uint32 namelen = W (domain->must_swap, sysdep_segments[i].length); if (!(namelen > 0 && name[namelen - 1] == '\0')) { freea (sysdep_segment_values); goto invalid; } sysdep_segment_values[i] = get_sysdep_segment_value (name); } orig_sysdep_tab = (const nls_uint32 *) ((char *) data + W (domain->must_swap, data->orig_sysdep_tab_offset)); trans_sysdep_tab = (const nls_uint32 *) ((char *) data + W (domain->must_swap, data->trans_sysdep_tab_offset)); /* Compute the amount of additional memory needed for the system dependent strings and the augmented hash table. */ memneed = 2 * n_sysdep_strings * sizeof (struct sysdep_string_desc) + domain->hash_size * sizeof (nls_uint32); for (i = 0; i < 2 * n_sysdep_strings; i++) { const struct sysdep_string *sysdep_string = (const struct sysdep_string *) ((char *) data + W (domain->must_swap, i < n_sysdep_strings ? orig_sysdep_tab[i] : trans_sysdep_tab[i - n_sysdep_strings])); size_t need = 0; const struct segment_pair *p = sysdep_string->segments; if (W (domain->must_swap, p->sysdepref) != SEGMENTS_END) for (p = sysdep_string->segments;; p++) { nls_uint32 sysdepref; need += W (domain->must_swap, p->segsize); sysdepref = W (domain->must_swap, p->sysdepref); if (sysdepref == SEGMENTS_END) break; if (sysdepref >= n_sysdep_segments) { /* Invalid. */ freea (sysdep_segment_values); goto invalid; } need += strlen (sysdep_segment_values[sysdepref]); } memneed += need; } /* Allocate additional memory. */ mem = (char *) malloc (memneed); if (mem == NULL) goto invalid; domain->malloced = mem; inmem_orig_sysdep_tab = (struct sysdep_string_desc *) mem; mem += n_sysdep_strings * sizeof (struct sysdep_string_desc); inmem_trans_sysdep_tab = (struct sysdep_string_desc *) mem; mem += n_sysdep_strings * sizeof (struct sysdep_string_desc); inmem_hash_tab = (nls_uint32 *) mem; mem += domain->hash_size * sizeof (nls_uint32); /* Compute the system dependent strings. */ for (i = 0; i < 2 * n_sysdep_strings; i++) { const struct sysdep_string *sysdep_string = (const struct sysdep_string *) ((char *) data + W (domain->must_swap, i < n_sysdep_strings ? orig_sysdep_tab[i] : trans_sysdep_tab[i - n_sysdep_strings])); const char *static_segments = (char *) data + W (domain->must_swap, sysdep_string->offset); const struct segment_pair *p = sysdep_string->segments; /* Concatenate the segments, and fill inmem_orig_sysdep_tab[i] (for i < n_sysdep_strings) and inmem_trans_sysdep_tab[i-n_sysdep_strings] (for i >= n_sysdep_strings). */ if (W (domain->must_swap, p->sysdepref) == SEGMENTS_END) { /* Only one static segment. */ inmem_orig_sysdep_tab[i].length = W (domain->must_swap, p->segsize); inmem_orig_sysdep_tab[i].pointer = static_segments; } else { inmem_orig_sysdep_tab[i].pointer = mem; for (p = sysdep_string->segments;; p++) { nls_uint32 segsize = W (domain->must_swap, p->segsize); nls_uint32 sysdepref = W (domain->must_swap, p->sysdepref); size_t n; if (segsize > 0) { memcpy (mem, static_segments, segsize); mem += segsize; static_segments += segsize; } if (sysdepref == SEGMENTS_END) break; n = strlen (sysdep_segment_values[sysdepref]); memcpy (mem, sysdep_segment_values[sysdepref], n); mem += n; } inmem_orig_sysdep_tab[i].length = mem - inmem_orig_sysdep_tab[i].pointer; } } /* Compute the augmented hash table. */ for (i = 0; i < domain->hash_size; i++) inmem_hash_tab[i] = W (domain->must_swap_hash_tab, domain->hash_tab[i]); for (i = 0; i < n_sysdep_strings; i++) { const char *msgid = inmem_orig_sysdep_tab[i].pointer; nls_uint32 hash_val = hash_string (msgid); nls_uint32 idx = hash_val % domain->hash_size; nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2)); for (;;) { if (inmem_hash_tab[idx] == 0) { /* Hash table entry is empty. Use it. */ inmem_hash_tab[idx] = 1 + domain->nstrings + i; break; } if (idx >= domain->hash_size - incr) idx -= domain->hash_size - incr; else idx += incr; } } freea (sysdep_segment_values); domain->n_sysdep_strings = n_sysdep_strings; domain->orig_sysdep_tab = inmem_orig_sysdep_tab; domain->trans_sysdep_tab = inmem_trans_sysdep_tab; domain->hash_tab = inmem_hash_tab; domain->must_swap_hash_tab = 0; } else { domain->n_sysdep_strings = 0; domain->orig_sysdep_tab = NULL; domain->trans_sysdep_tab = NULL; } } break; } break; default: /* This is an invalid revision. */ invalid: /* This is an invalid .mo file. */ if (domain->malloced) free (domain->malloced); #ifdef HAVE_MMAP if (use_mmap) munmap ((caddr_t) data, size); else #endif free (data); free (domain); domain_file->data = NULL; return; } /* Now initialize the character set converter from the character set the file is encoded with (found in the header entry) to the domain's specified character set or the locale's character set. */ nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding); /* Also look for a plural specification. */ EXTRACT_PLURAL_EXPRESSION (nullentry, &domain->plural, &domain->nplurals); } #ifdef _LIBC void internal_function _nl_unload_domain (domain) struct loaded_domain *domain; { if (domain->plural != &__gettext_germanic_plural) __gettext_free_exp (domain->plural); _nl_free_domain_conv (domain); if (domain->malloced) free (domain->malloced); # ifdef _POSIX_MAPPED_FILES if (domain->use_mmap) munmap ((caddr_t) domain->data, domain->mmap_size); else # endif /* _POSIX_MAPPED_FILES */ free ((void *) domain->data); free (domain); } #endif lifelines-3.0.61/intl/localcharset.c0000700002540200244210000002245007606165340017531 0ustar prappDomain Users/* Determine a canonical name for the current locale's character encoding. Copyright (C) 2000-2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Written by Bruno Haible . */ #ifdef HAVE_CONFIG_H # include #endif #if HAVE_STDDEF_H # include #endif #include #if HAVE_STRING_H # include #else # include #endif #if HAVE_STDLIB_H # include #endif #if defined _WIN32 || defined __WIN32__ # undef WIN32 /* avoid warning on mingw32 */ # define WIN32 #endif #if defined __EMX__ /* Assume EMX program runs on OS/2, even if compiled under DOS. */ # define OS2 #endif #if !defined WIN32 # if HAVE_LANGINFO_CODESET # include # else # if HAVE_SETLOCALE # include # endif # endif #elif defined WIN32 # define WIN32_LEAN_AND_MEAN # include #endif #if defined OS2 # define INCL_DOS # include #endif #if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ /* Win32, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') #endif #ifndef DIRECTORY_SEPARATOR # define DIRECTORY_SEPARATOR '/' #endif #ifndef ISSLASH # define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) #endif #ifdef HAVE_GETC_UNLOCKED # undef getc # define getc getc_unlocked #endif #ifdef __cplusplus /* When compiling with "gcc -x c++", produce a function with C linkage. */ extern "C" const char * locale_charset (void); #endif /* The following static variable is declared 'volatile' to avoid a possible multithread problem in the function get_charset_aliases. If we are running in a threaded environment, and if two threads initialize 'charset_aliases' simultaneously, both will produce the same value, and everything will be ok if the two assignments to 'charset_aliases' are atomic. But I don't know what will happen if the two assignments mix. */ #if __STDC__ != 1 # define volatile /* empty */ #endif /* Pointer to the contents of the charset.alias file, if it has already been read, else NULL. Its format is: ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */ static const char * volatile charset_aliases; /* Return a pointer to the contents of the charset.alias file. */ static const char * get_charset_aliases () { const char *cp; cp = charset_aliases; if (cp == NULL) { #if !defined WIN32 FILE *fp; const char *dir = LIBDIR; const char *base = "charset.alias"; char *file_name; /* Concatenate dir and base into freshly allocated file_name. */ { size_t dir_len = strlen (dir); size_t base_len = strlen (base); int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1])); file_name = (char *) malloc (dir_len + add_slash + base_len + 1); if (file_name != NULL) { memcpy (file_name, dir, dir_len); if (add_slash) file_name[dir_len] = DIRECTORY_SEPARATOR; memcpy (file_name + dir_len + add_slash, base, base_len + 1); } } if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL) /* Out of memory or file not found, treat it as empty. */ cp = ""; else { /* Parse the file's contents. */ int c; char buf1[50+1]; char buf2[50+1]; char *res_ptr = NULL; size_t res_size = 0; size_t l1, l2; for (;;) { c = getc (fp); if (c == EOF) break; if (c == '\n' || c == ' ' || c == '\t') continue; if (c == '#') { /* Skip comment, to end of line. */ do c = getc (fp); while (!(c == EOF || c == '\n')); if (c == EOF) break; continue; } ungetc (c, fp); if (fscanf (fp, "%50s %50s", buf1, buf2) < 2) break; l1 = strlen (buf1); l2 = strlen (buf2); if (res_size == 0) { res_size = l1 + 1 + l2 + 1; res_ptr = (char *) malloc (res_size + 1); } else { res_size += l1 + 1 + l2 + 1; res_ptr = (char *) realloc (res_ptr, res_size + 1); } if (res_ptr == NULL) { /* Out of memory. */ res_size = 0; break; } strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); strcpy (res_ptr + res_size - (l2 + 1), buf2); } fclose (fp); if (res_size == 0) cp = ""; else { *(res_ptr + res_size) = '\0'; cp = res_ptr; } } if (file_name != NULL) free (file_name); #else /* To avoid the troubles of installing a separate file in the same directory as the DLL and of retrieving the DLL's directory at runtime, simply inline the aliases here. */ # if defined WIN32 cp = "CP936" "\0" "GBK" "\0" "CP1361" "\0" "JOHAB" "\0" "CP20127" "\0" "ASCII" "\0" "CP20866" "\0" "KOI8-R" "\0" "CP21866" "\0" "KOI8-RU" "\0" "CP28591" "\0" "ISO-8859-1" "\0" "CP28592" "\0" "ISO-8859-2" "\0" "CP28593" "\0" "ISO-8859-3" "\0" "CP28594" "\0" "ISO-8859-4" "\0" "CP28595" "\0" "ISO-8859-5" "\0" "CP28596" "\0" "ISO-8859-6" "\0" "CP28597" "\0" "ISO-8859-7" "\0" "CP28598" "\0" "ISO-8859-8" "\0" "CP28599" "\0" "ISO-8859-9" "\0" "CP28605" "\0" "ISO-8859-15" "\0"; # endif #endif charset_aliases = cp; } return cp; } /* Determine the current locale's character encoding, and canonicalize it into one of the canonical names listed in config.charset. The result must not be freed; it is statically allocated. If the canonical name cannot be determined, the result is a non-canonical name. */ #ifdef STATIC STATIC #endif const char * locale_charset () { const char *codeset; const char *aliases; #if !(defined WIN32 || defined OS2) # if HAVE_LANGINFO_CODESET /* Most systems support nl_langinfo (CODESET) nowadays. */ codeset = nl_langinfo (CODESET); # else /* On old systems which lack it, use setlocale or getenv. */ const char *locale = NULL; /* But most old systems don't have a complete set of locales. Some (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't use setlocale here; it would return "C" when it doesn't support the locale name the user has set. */ # if HAVE_SETLOCALE && 0 locale = setlocale (LC_CTYPE, NULL); # endif if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } } /* On some old systems, one used to set locale = "iso8859_1". On others, you set it to "language_COUNTRY.charset". In any case, we resolve it through the charset.alias file. */ codeset = locale; # endif #elif defined WIN32 static char buf[2 + 10 + 1]; /* Woe32 has a function returning the locale's codepage as a number. */ sprintf (buf, "CP%u", GetACP ()); codeset = buf; #elif defined OS2 const char *locale; static char buf[2 + 10 + 1]; ULONG cp[3]; ULONG cplen; /* Allow user to override the codeset, as set in the operating system, with standard language environment variables. */ locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } if (locale != NULL && locale[0] != '\0') { /* If the locale name contains an encoding after the dot, return it. */ const char *dot = strchr (locale, '.'); if (dot != NULL) { const char *modifier; dot++; /* Look for the possible @... trailer and remove it, if any. */ modifier = strchr (dot, '@'); if (modifier == NULL) return dot; if (modifier - dot < sizeof (buf)) { memcpy (buf, dot, modifier - dot); buf [modifier - dot] = '\0'; return buf; } } /* Resolve through the charset.alias file. */ codeset = locale; } else { /* OS/2 has a function returning the locale's codepage as a number. */ if (DosQueryCp (sizeof (cp), cp, &cplen)) codeset = ""; else { sprintf (buf, "CP%u", cp[0]); codeset = buf; } } #endif if (codeset == NULL) /* The canonical name cannot be determined. */ codeset = ""; /* Resolve alias. */ for (aliases = get_charset_aliases (); *aliases != '\0'; aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1) if (strcmp (codeset, aliases) == 0 || (aliases[0] == '*' && aliases[1] == '\0')) { codeset = aliases + strlen (aliases) + 1; break; } /* Don't return an empty string. GNU libc and GNU libiconv interpret the empty string as denoting "the locale's character encoding", thus GNU libiconv would call this function a second time. */ if (codeset[0] == '\0') codeset = "ASCII"; return codeset; } lifelines-3.0.61/intl/locale.alias0000700002540200244210000000514107435641553017176 0ustar prappDomain Users# Locale name alias data base. # Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Library General Public License as published # by the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, # USA. # The format of this file is the same as for the corresponding file of # the X Window System, which normally can be found in # /usr/lib/X11/locale/locale.alias # A single line contains two fields: an alias and a substitution value. # All entries are case independent. # Note: This file is far from being complete. If you have a value for # your own site which you think might be useful for others too, share # it with the rest of us. Send it using the `glibcbug' script to # bugs@gnu.org. # Packages using this file: bokmal no_NO.ISO-8859-1 bokmål no_NO.ISO-8859-1 catalan ca_ES.ISO-8859-1 croatian hr_HR.ISO-8859-2 czech cs_CZ.ISO-8859-2 danish da_DK.ISO-8859-1 dansk da_DK.ISO-8859-1 deutsch de_DE.ISO-8859-1 dutch nl_NL.ISO-8859-1 eesti et_EE.ISO-8859-1 estonian et_EE.ISO-8859-1 finnish fi_FI.ISO-8859-1 français fr_FR.ISO-8859-1 french fr_FR.ISO-8859-1 galego gl_ES.ISO-8859-1 galician gl_ES.ISO-8859-1 german de_DE.ISO-8859-1 greek el_GR.ISO-8859-7 hebrew he_IL.ISO-8859-8 hrvatski hr_HR.ISO-8859-2 hungarian hu_HU.ISO-8859-2 icelandic is_IS.ISO-8859-1 italian it_IT.ISO-8859-1 japanese ja_JP.eucJP japanese.euc ja_JP.eucJP ja_JP ja_JP.eucJP ja_JP.ujis ja_JP.eucJP japanese.sjis ja_JP.SJIS korean ko_KR.eucKR korean.euc ko_KR.eucKR ko_KR ko_KR.eucKR lithuanian lt_LT.ISO-8859-13 nb_NO no_NO.ISO-8859-1 nb_NO.ISO-8859-1 no_NO.ISO-8859-1 norwegian no_NO.ISO-8859-1 nynorsk nn_NO.ISO-8859-1 polish pl_PL.ISO-8859-2 portuguese pt_PT.ISO-8859-1 romanian ro_RO.ISO-8859-2 russian ru_RU.ISO-8859-5 slovak sk_SK.ISO-8859-2 slovene sl_SI.ISO-8859-2 slovenian sl_SI.ISO-8859-2 spanish es_ES.ISO-8859-1 swedish sv_SE.ISO-8859-1 thai th_TH.TIS-620 turkish tr_TR.ISO-8859-9 lifelines-3.0.61/intl/localealias.c0000700002540200244210000002330307477212672017343 0ustar prappDomain Users/* Handle aliases for locale names. Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Tell glibc's to provide a prototype for mempcpy(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include #include #if defined _LIBC || defined HAVE___FSETLOCKING # include #endif #include #ifdef __GNUC__ # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif #endif #include #include #include "gettextP.h" /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # define strcasecmp __strcasecmp # ifndef mempcpy # define mempcpy __mempcpy # endif # define HAVE_MEMPCPY 1 # define HAVE___FSETLOCKING 1 /* We need locking here since we can be called from different places. */ # include __libc_lock_define_initialized (static, lock); #endif #ifndef internal_function # define internal_function #endif /* Some optimizations for glibc. */ #ifdef _LIBC # define FEOF(fp) feof_unlocked (fp) # define FGETS(buf, n, fp) fgets_unlocked (buf, n, fp) #else # define FEOF(fp) feof (fp) # define FGETS(buf, n, fp) fgets (buf, n, fp) #endif /* For those losing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA # define freea(p) /* nothing */ #else # define alloca(n) malloc (n) # define freea(p) free (p) #endif #if defined _LIBC_REENTRANT || defined HAVE_FGETS_UNLOCKED # undef fgets # define fgets(buf, len, s) fgets_unlocked (buf, len, s) #endif #if defined _LIBC_REENTRANT || defined HAVE_FEOF_UNLOCKED # undef feof # define feof(s) feof_unlocked (s) #endif struct alias_map { const char *alias; const char *value; }; static char *string_space; static size_t string_space_act; static size_t string_space_max; static struct alias_map *map; static size_t nmap; static size_t maxmap; /* Prototypes for local functions. */ static size_t read_alias_file PARAMS ((const char *fname, int fname_len)) internal_function; static int extend_alias_table PARAMS ((void)); static int alias_compare PARAMS ((const struct alias_map *map1, const struct alias_map *map2)); const char * _nl_expand_alias (name) const char *name; { static const char *locale_alias_path; struct alias_map *retval; const char *result = NULL; size_t added; #ifdef _LIBC __libc_lock_lock (lock); #endif if (locale_alias_path == NULL) locale_alias_path = LOCALE_ALIAS_PATH; do { struct alias_map item; item.alias = name; if (nmap > 0) retval = (struct alias_map *) bsearch (&item, map, nmap, sizeof (struct alias_map), (int (*) PARAMS ((const void *, const void *)) ) alias_compare); else retval = NULL; /* We really found an alias. Return the value. */ if (retval != NULL) { result = retval->value; break; } /* Perhaps we can find another alias file. */ added = 0; while (added == 0 && locale_alias_path[0] != '\0') { const char *start; while (locale_alias_path[0] == PATH_SEPARATOR) ++locale_alias_path; start = locale_alias_path; while (locale_alias_path[0] != '\0' && locale_alias_path[0] != PATH_SEPARATOR) ++locale_alias_path; if (start < locale_alias_path) added = read_alias_file (start, locale_alias_path - start); } } while (added != 0); #ifdef _LIBC __libc_lock_unlock (lock); #endif return result; } static size_t internal_function read_alias_file (fname, fname_len) const char *fname; int fname_len; { FILE *fp; char *full_fname; size_t added; static const char aliasfile[] = "/locale.alias"; full_fname = (char *) alloca (fname_len + sizeof aliasfile); #ifdef HAVE_MEMPCPY mempcpy (mempcpy (full_fname, fname, fname_len), aliasfile, sizeof aliasfile); #else memcpy (full_fname, fname, fname_len); memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile); #endif fp = fopen (full_fname, "r"); freea (full_fname); if (fp == NULL) return 0; #ifdef HAVE___FSETLOCKING /* No threads present. */ __fsetlocking (fp, FSETLOCKING_BYCALLER); #endif added = 0; while (!FEOF (fp)) { /* It is a reasonable approach to use a fix buffer here because a) we are only interested in the first two fields b) these fields must be usable as file names and so must not be that long */ char buf[BUFSIZ]; char *alias; char *value; char *cp; if (FGETS (buf, sizeof buf, fp) == NULL) /* EOF reached. */ break; /* Possibly not the whole line fits into the buffer. Ignore the rest of the line. */ if (strchr (buf, '\n') == NULL) { char altbuf[BUFSIZ]; do if (FGETS (altbuf, sizeof altbuf, fp) == NULL) /* Make sure the inner loop will be left. The outer loop will exit at the `feof' test. */ break; while (strchr (altbuf, '\n') == NULL); } cp = buf; /* Ignore leading white space. */ while (isspace ((unsigned char) cp[0])) ++cp; /* A leading '#' signals a comment line. */ if (cp[0] != '\0' && cp[0] != '#') { alias = cp++; while (cp[0] != '\0' && !isspace ((unsigned char) cp[0])) ++cp; /* Terminate alias name. */ if (cp[0] != '\0') *cp++ = '\0'; /* Now look for the beginning of the value. */ while (isspace ((unsigned char) cp[0])) ++cp; if (cp[0] != '\0') { size_t alias_len; size_t value_len; value = cp++; while (cp[0] != '\0' && !isspace ((unsigned char) cp[0])) ++cp; /* Terminate value. */ if (cp[0] == '\n') { /* This has to be done to make the following test for the end of line possible. We are looking for the terminating '\n' which do not overwrite here. */ *cp++ = '\0'; *cp = '\n'; } else if (cp[0] != '\0') *cp++ = '\0'; if (nmap >= maxmap) if (__builtin_expect (extend_alias_table (), 0)) return added; alias_len = strlen (alias) + 1; value_len = strlen (value) + 1; if (string_space_act + alias_len + value_len > string_space_max) { /* Increase size of memory pool. */ size_t new_size = (string_space_max + (alias_len + value_len > 1024 ? alias_len + value_len : 1024)); char *new_pool = (char *) realloc (string_space, new_size); if (new_pool == NULL) return added; if (__builtin_expect (string_space != new_pool, 0)) { size_t i; for (i = 0; i < nmap; i++) { map[i].alias += new_pool - string_space; map[i].value += new_pool - string_space; } } string_space = new_pool; string_space_max = new_size; } map[nmap].alias = memcpy (&string_space[string_space_act], alias, alias_len); string_space_act += alias_len; map[nmap].value = memcpy (&string_space[string_space_act], value, value_len); string_space_act += value_len; ++nmap; ++added; } } } /* Should we test for ferror()? I think we have to silently ignore errors. --drepper */ fclose (fp); if (added > 0) qsort (map, nmap, sizeof (struct alias_map), (int (*) PARAMS ((const void *, const void *))) alias_compare); return added; } static int extend_alias_table () { size_t new_size; struct alias_map *new_map; new_size = maxmap == 0 ? 100 : 2 * maxmap; new_map = (struct alias_map *) realloc (map, (new_size * sizeof (struct alias_map))); if (new_map == NULL) /* Simply don't extend: we don't have any more core. */ return -1; map = new_map; maxmap = new_size; return 0; } #ifdef _LIBC static void __attribute__ ((unused)) free_mem (void) { if (string_space != NULL) free (string_space); if (map != NULL) free (map); } text_set_element (__libc_subfreeres, free_mem); #endif static int alias_compare (map1, map2) const struct alias_map *map1; const struct alias_map *map2; { #if defined _LIBC || defined HAVE_STRCASECMP return strcasecmp (map1->alias, map2->alias); #else const unsigned char *p1 = (const unsigned char *) map1->alias; const unsigned char *p2 = (const unsigned char *) map2->alias; unsigned char c1, c2; if (p1 == p2) return 0; do { /* I know this seems to be odd but the tolower() function in some systems libc cannot handle nonalpha characters. */ c1 = isupper (*p1) ? tolower (*p1) : *p1; c2 = isupper (*p2) ? tolower (*p2) : *p2; if (c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); return c1 - c2; #endif } lifelines-3.0.61/intl/localename.c0000700002540200244210000005412607606165340017172 0ustar prappDomain Users/* Determine the current selected locale. Copyright (C) 1995-1999, 2000-2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Written by Ulrich Drepper , 1995. */ /* Win32 code written by Tor Lillqvist . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #if defined _WIN32 || defined __WIN32__ # undef WIN32 /* avoid warning on mingw32 */ # define WIN32 #endif #ifdef WIN32 # define WIN32_LEAN_AND_MEAN # include /* Mingw headers don't have latest language and sublanguage codes. */ # ifndef LANG_AFRIKAANS # define LANG_AFRIKAANS 0x36 # endif # ifndef LANG_ALBANIAN # define LANG_ALBANIAN 0x1c # endif # ifndef LANG_ARABIC # define LANG_ARABIC 0x01 # endif # ifndef LANG_ARMENIAN # define LANG_ARMENIAN 0x2b # endif # ifndef LANG_ASSAMESE # define LANG_ASSAMESE 0x4d # endif # ifndef LANG_AZERI # define LANG_AZERI 0x2c # endif # ifndef LANG_BASQUE # define LANG_BASQUE 0x2d # endif # ifndef LANG_BELARUSIAN # define LANG_BELARUSIAN 0x23 # endif # ifndef LANG_BENGALI # define LANG_BENGALI 0x45 # endif # ifndef LANG_CATALAN # define LANG_CATALAN 0x03 # endif # ifndef LANG_DIVEHI # define LANG_DIVEHI 0x65 # endif # ifndef LANG_ESTONIAN # define LANG_ESTONIAN 0x25 # endif # ifndef LANG_FAEROESE # define LANG_FAEROESE 0x38 # endif # ifndef LANG_FARSI # define LANG_FARSI 0x29 # endif # ifndef LANG_GALICIAN # define LANG_GALICIAN 0x56 # endif # ifndef LANG_GEORGIAN # define LANG_GEORGIAN 0x37 # endif # ifndef LANG_GUJARATI # define LANG_GUJARATI 0x47 # endif # ifndef LANG_HEBREW # define LANG_HEBREW 0x0d # endif # ifndef LANG_HINDI # define LANG_HINDI 0x39 # endif # ifndef LANG_INDONESIAN # define LANG_INDONESIAN 0x21 # endif # ifndef LANG_KANNADA # define LANG_KANNADA 0x4b # endif # ifndef LANG_KASHMIRI # define LANG_KASHMIRI 0x60 # endif # ifndef LANG_KAZAK # define LANG_KAZAK 0x3f # endif # ifndef LANG_KONKANI # define LANG_KONKANI 0x57 # endif # ifndef LANG_KYRGYZ # define LANG_KYRGYZ 0x40 # endif # ifndef LANG_LATVIAN # define LANG_LATVIAN 0x26 # endif # ifndef LANG_LITHUANIAN # define LANG_LITHUANIAN 0x27 # endif # ifndef LANG_MACEDONIAN # define LANG_MACEDONIAN 0x2f # endif # ifndef LANG_MALAY # define LANG_MALAY 0x3e # endif # ifndef LANG_MALAYALAM # define LANG_MALAYALAM 0x4c # endif # ifndef LANG_MANIPURI # define LANG_MANIPURI 0x58 # endif # ifndef LANG_MARATHI # define LANG_MARATHI 0x4e # endif # ifndef LANG_MONGOLIAN # define LANG_MONGOLIAN 0x50 # endif # ifndef LANG_NEPALI # define LANG_NEPALI 0x61 # endif # ifndef LANG_ORIYA # define LANG_ORIYA 0x48 # endif # ifndef LANG_PUNJABI # define LANG_PUNJABI 0x46 # endif # ifndef LANG_SANSKRIT # define LANG_SANSKRIT 0x4f # endif # ifndef LANG_SERBIAN # define LANG_SERBIAN 0x1a # endif # ifndef LANG_SINDHI # define LANG_SINDHI 0x59 # endif # ifndef LANG_SLOVAK # define LANG_SLOVAK 0x1b # endif # ifndef LANG_SORBIAN # define LANG_SORBIAN 0x2e # endif # ifndef LANG_SWAHILI # define LANG_SWAHILI 0x41 # endif # ifndef LANG_SYRIAC # define LANG_SYRIAC 0x5a # endif # ifndef LANG_TAMIL # define LANG_TAMIL 0x49 # endif # ifndef LANG_TATAR # define LANG_TATAR 0x44 # endif # ifndef LANG_TELUGU # define LANG_TELUGU 0x4a # endif # ifndef LANG_THAI # define LANG_THAI 0x1e # endif # ifndef LANG_UKRAINIAN # define LANG_UKRAINIAN 0x22 # endif # ifndef LANG_URDU # define LANG_URDU 0x20 # endif # ifndef LANG_UZBEK # define LANG_UZBEK 0x43 # endif # ifndef LANG_VIETNAMESE # define LANG_VIETNAMESE 0x2a # endif # ifndef SUBLANG_ARABIC_SAUDI_ARABIA # define SUBLANG_ARABIC_SAUDI_ARABIA 0x01 # endif # ifndef SUBLANG_ARABIC_IRAQ # define SUBLANG_ARABIC_IRAQ 0x02 # endif # ifndef SUBLANG_ARABIC_EGYPT # define SUBLANG_ARABIC_EGYPT 0x03 # endif # ifndef SUBLANG_ARABIC_LIBYA # define SUBLANG_ARABIC_LIBYA 0x04 # endif # ifndef SUBLANG_ARABIC_ALGERIA # define SUBLANG_ARABIC_ALGERIA 0x05 # endif # ifndef SUBLANG_ARABIC_MOROCCO # define SUBLANG_ARABIC_MOROCCO 0x06 # endif # ifndef SUBLANG_ARABIC_TUNISIA # define SUBLANG_ARABIC_TUNISIA 0x07 # endif # ifndef SUBLANG_ARABIC_OMAN # define SUBLANG_ARABIC_OMAN 0x08 # endif # ifndef SUBLANG_ARABIC_YEMEN # define SUBLANG_ARABIC_YEMEN 0x09 # endif # ifndef SUBLANG_ARABIC_SYRIA # define SUBLANG_ARABIC_SYRIA 0x0a # endif # ifndef SUBLANG_ARABIC_JORDAN # define SUBLANG_ARABIC_JORDAN 0x0b # endif # ifndef SUBLANG_ARABIC_LEBANON # define SUBLANG_ARABIC_LEBANON 0x0c # endif # ifndef SUBLANG_ARABIC_KUWAIT # define SUBLANG_ARABIC_KUWAIT 0x0d # endif # ifndef SUBLANG_ARABIC_UAE # define SUBLANG_ARABIC_UAE 0x0e # endif # ifndef SUBLANG_ARABIC_BAHRAIN # define SUBLANG_ARABIC_BAHRAIN 0x0f # endif # ifndef SUBLANG_ARABIC_QATAR # define SUBLANG_ARABIC_QATAR 0x10 # endif # ifndef SUBLANG_AZERI_LATIN # define SUBLANG_AZERI_LATIN 0x01 # endif # ifndef SUBLANG_AZERI_CYRILLIC # define SUBLANG_AZERI_CYRILLIC 0x02 # endif # ifndef SUBLANG_CHINESE_MACAU # define SUBLANG_CHINESE_MACAU 0x05 # endif # ifndef SUBLANG_ENGLISH_SOUTH_AFRICA # define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07 # endif # ifndef SUBLANG_ENGLISH_JAMAICA # define SUBLANG_ENGLISH_JAMAICA 0x08 # endif # ifndef SUBLANG_ENGLISH_CARIBBEAN # define SUBLANG_ENGLISH_CARIBBEAN 0x09 # endif # ifndef SUBLANG_ENGLISH_BELIZE # define SUBLANG_ENGLISH_BELIZE 0x0a # endif # ifndef SUBLANG_ENGLISH_TRINIDAD # define SUBLANG_ENGLISH_TRINIDAD 0x0b # endif # ifndef SUBLANG_ENGLISH_ZIMBABWE # define SUBLANG_ENGLISH_ZIMBABWE 0x0c # endif # ifndef SUBLANG_ENGLISH_PHILIPPINES # define SUBLANG_ENGLISH_PHILIPPINES 0x0d # endif # ifndef SUBLANG_FRENCH_LUXEMBOURG # define SUBLANG_FRENCH_LUXEMBOURG 0x05 # endif # ifndef SUBLANG_FRENCH_MONACO # define SUBLANG_FRENCH_MONACO 0x06 # endif # ifndef SUBLANG_GERMAN_LUXEMBOURG # define SUBLANG_GERMAN_LUXEMBOURG 0x04 # endif # ifndef SUBLANG_GERMAN_LIECHTENSTEIN # define SUBLANG_GERMAN_LIECHTENSTEIN 0x05 # endif # ifndef SUBLANG_KASHMIRI_INDIA # define SUBLANG_KASHMIRI_INDIA 0x02 # endif # ifndef SUBLANG_MALAY_MALAYSIA # define SUBLANG_MALAY_MALAYSIA 0x01 # endif # ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM # define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02 # endif # ifndef SUBLANG_NEPALI_INDIA # define SUBLANG_NEPALI_INDIA 0x02 # endif # ifndef SUBLANG_SERBIAN_LATIN # define SUBLANG_SERBIAN_LATIN 0x02 # endif # ifndef SUBLANG_SERBIAN_CYRILLIC # define SUBLANG_SERBIAN_CYRILLIC 0x03 # endif # ifndef SUBLANG_SPANISH_GUATEMALA # define SUBLANG_SPANISH_GUATEMALA 0x04 # endif # ifndef SUBLANG_SPANISH_COSTA_RICA # define SUBLANG_SPANISH_COSTA_RICA 0x05 # endif # ifndef SUBLANG_SPANISH_PANAMA # define SUBLANG_SPANISH_PANAMA 0x06 # endif # ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC # define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07 # endif # ifndef SUBLANG_SPANISH_VENEZUELA # define SUBLANG_SPANISH_VENEZUELA 0x08 # endif # ifndef SUBLANG_SPANISH_COLOMBIA # define SUBLANG_SPANISH_COLOMBIA 0x09 # endif # ifndef SUBLANG_SPANISH_PERU # define SUBLANG_SPANISH_PERU 0x0a # endif # ifndef SUBLANG_SPANISH_ARGENTINA # define SUBLANG_SPANISH_ARGENTINA 0x0b # endif # ifndef SUBLANG_SPANISH_ECUADOR # define SUBLANG_SPANISH_ECUADOR 0x0c # endif # ifndef SUBLANG_SPANISH_CHILE # define SUBLANG_SPANISH_CHILE 0x0d # endif # ifndef SUBLANG_SPANISH_URUGUAY # define SUBLANG_SPANISH_URUGUAY 0x0e # endif # ifndef SUBLANG_SPANISH_PARAGUAY # define SUBLANG_SPANISH_PARAGUAY 0x0f # endif # ifndef SUBLANG_SPANISH_BOLIVIA # define SUBLANG_SPANISH_BOLIVIA 0x10 # endif # ifndef SUBLANG_SPANISH_EL_SALVADOR # define SUBLANG_SPANISH_EL_SALVADOR 0x11 # endif # ifndef SUBLANG_SPANISH_HONDURAS # define SUBLANG_SPANISH_HONDURAS 0x12 # endif # ifndef SUBLANG_SPANISH_NICARAGUA # define SUBLANG_SPANISH_NICARAGUA 0x13 # endif # ifndef SUBLANG_SPANISH_PUERTO_RICO # define SUBLANG_SPANISH_PUERTO_RICO 0x14 # endif # ifndef SUBLANG_SWEDISH_FINLAND # define SUBLANG_SWEDISH_FINLAND 0x02 # endif # ifndef SUBLANG_URDU_PAKISTAN # define SUBLANG_URDU_PAKISTAN 0x01 # endif # ifndef SUBLANG_URDU_INDIA # define SUBLANG_URDU_INDIA 0x02 # endif # ifndef SUBLANG_UZBEK_LATIN # define SUBLANG_UZBEK_LATIN 0x01 # endif # ifndef SUBLANG_UZBEK_CYRILLIC # define SUBLANG_UZBEK_CYRILLIC 0x02 # endif #endif /* XPG3 defines the result of 'setlocale (category, NULL)' as: "Directs 'setlocale()' to query 'category' and return the current setting of 'local'." However it does not specify the exact format. Neither do SUSV2 and ISO C 99. So we can use this feature only on selected systems (e.g. those using GNU C Library). */ #if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2) # define HAVE_LOCALE_NULL #endif /* Determine the current locale's name, and canonicalize it into XPG syntax language[_territory[.codeset]][@modifier] The codeset part in the result is not reliable; the locale_charset() should be used for codeset information instead. The result must not be freed; it is statically allocated. */ const char * _nl_locale_name (category, categoryname) int category; const char *categoryname; { const char *retval; #ifndef WIN32 /* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'. On some systems this can be done by the 'setlocale' function itself. */ # if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL retval = setlocale (category, NULL); # else /* Setting of LC_ALL overwrites all other. */ retval = getenv ("LC_ALL"); if (retval == NULL || retval[0] == '\0') { /* Next comes the name of the desired category. */ retval = getenv (categoryname); if (retval == NULL || retval[0] == '\0') { /* Last possibility is the LANG environment variable. */ retval = getenv ("LANG"); if (retval == NULL || retval[0] == '\0') /* We use C as the default domain. POSIX says this is implementation defined. */ retval = "C"; } } # endif return retval; #else /* WIN32 */ /* Return an XPG style locale name language[_territory][@modifier]. Don't even bother determining the codeset; it's not useful in this context, because message catalogs are not specific to a single codeset. */ LCID lcid; LANGID langid; int primary, sub; /* Let the user override the system settings through environment variables, as on POSIX systems. */ retval = getenv ("LC_ALL"); if (retval != NULL && retval[0] != '\0') return retval; retval = getenv (categoryname); if (retval != NULL && retval[0] != '\0') return retval; retval = getenv ("LANG"); if (retval != NULL && retval[0] != '\0') return retval; /* Use native Win32 API locale ID. */ lcid = GetThreadLocale (); /* Strip off the sorting rules, keep only the language part. */ langid = LANGIDFROMLCID (lcid); /* Split into language and territory part. */ primary = PRIMARYLANGID (langid); sub = SUBLANGID (langid); /* Dispatch on language. See also http://www.unicode.org/unicode/onlinedat/languages.html . For details about languages, see http://www.ethnologue.com/ . */ switch (primary) { case LANG_AFRIKAANS: return "af_ZA"; case LANG_ALBANIAN: return "sq_AL"; case 0x5e: /* AMHARIC */ return "am_ET"; case LANG_ARABIC: switch (sub) { case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA"; case SUBLANG_ARABIC_IRAQ: return "ar_IQ"; case SUBLANG_ARABIC_EGYPT: return "ar_EG"; case SUBLANG_ARABIC_LIBYA: return "ar_LY"; case SUBLANG_ARABIC_ALGERIA: return "ar_DZ"; case SUBLANG_ARABIC_MOROCCO: return "ar_MA"; case SUBLANG_ARABIC_TUNISIA: return "ar_TN"; case SUBLANG_ARABIC_OMAN: return "ar_OM"; case SUBLANG_ARABIC_YEMEN: return "ar_YE"; case SUBLANG_ARABIC_SYRIA: return "ar_SY"; case SUBLANG_ARABIC_JORDAN: return "ar_JO"; case SUBLANG_ARABIC_LEBANON: return "ar_LB"; case SUBLANG_ARABIC_KUWAIT: return "ar_KW"; case SUBLANG_ARABIC_UAE: return "ar_AE"; case SUBLANG_ARABIC_BAHRAIN: return "ar_BH"; case SUBLANG_ARABIC_QATAR: return "ar_QA"; } return "ar"; case LANG_ARMENIAN: return "hy_AM"; case LANG_ASSAMESE: return "as_IN"; case LANG_AZERI: switch (sub) { /* FIXME: Adjust this when Azerbaijani locales appear on Unix. */ case SUBLANG_AZERI_LATIN: return "az_AZ@latin"; case SUBLANG_AZERI_CYRILLIC: return "az_AZ@cyrillic"; } return "az"; case LANG_BASQUE: return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */ case LANG_BELARUSIAN: return "be_BY"; case LANG_BENGALI: return "bn_IN"; case LANG_BULGARIAN: return "bg_BG"; case 0x55: /* BURMESE */ return "my_MM"; case 0x53: /* CAMBODIAN */ return "km_KH"; case LANG_CATALAN: return "ca_ES"; case 0x5c: /* CHEROKEE */ return "chr_US"; case LANG_CHINESE: switch (sub) { case SUBLANG_CHINESE_TRADITIONAL: return "zh_TW"; case SUBLANG_CHINESE_SIMPLIFIED: return "zh_CN"; case SUBLANG_CHINESE_HONGKONG: return "zh_HK"; case SUBLANG_CHINESE_SINGAPORE: return "zh_SG"; case SUBLANG_CHINESE_MACAU: return "zh_MO"; } return "zh"; case LANG_CROATIAN: /* LANG_CROATIAN == LANG_SERBIAN * What used to be called Serbo-Croatian * should really now be two separate * languages because of political reasons. * (Says tml, who knows nothing about Serbian * or Croatian.) * (I can feel those flames coming already.) */ switch (sub) { case SUBLANG_DEFAULT: return "hr_HR"; case SUBLANG_SERBIAN_LATIN: return "sr_YU"; case SUBLANG_SERBIAN_CYRILLIC: return "sr_YU@cyrillic"; } return "hr"; case LANG_CZECH: return "cs_CZ"; case LANG_DANISH: return "da_DK"; case LANG_DIVEHI: return "div_MV"; case LANG_DUTCH: switch (sub) { case SUBLANG_DUTCH: return "nl_NL"; case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE"; } return "nl"; case 0x66: /* EDO */ return "bin_NG"; case LANG_ENGLISH: switch (sub) { /* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought * English was the language spoken in England. * Oh well. */ case SUBLANG_ENGLISH_US: return "en_US"; case SUBLANG_ENGLISH_UK: return "en_GB"; case SUBLANG_ENGLISH_AUS: return "en_AU"; case SUBLANG_ENGLISH_CAN: return "en_CA"; case SUBLANG_ENGLISH_NZ: return "en_NZ"; case SUBLANG_ENGLISH_EIRE: return "en_IE"; case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA"; case SUBLANG_ENGLISH_JAMAICA: return "en_JM"; case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */ case SUBLANG_ENGLISH_BELIZE: return "en_BZ"; case SUBLANG_ENGLISH_TRINIDAD: return "en_TT"; case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW"; case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH"; } return "en"; case LANG_ESTONIAN: return "et_EE"; case LANG_FAEROESE: return "fo_FO"; case LANG_FARSI: return "fa_IR"; case LANG_FINNISH: return "fi_FI"; case LANG_FRENCH: switch (sub) { case SUBLANG_FRENCH: return "fr_FR"; case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE"; case SUBLANG_FRENCH_CANADIAN: return "fr_CA"; case SUBLANG_FRENCH_SWISS: return "fr_CH"; case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU"; case SUBLANG_FRENCH_MONACO: return "fr_MC"; } return "fr"; case 0x62: /* FRISIAN */ return "fy_NL"; case 0x67: /* FULFULDE */ return "ful_NG"; case 0x3c: /* GAELIC */ switch (sub) { case 0x01: /* SCOTTISH */ return "gd_GB"; case 0x02: /* IRISH */ return "ga_IE"; } return "C"; case LANG_GALICIAN: return "gl_ES"; case LANG_GEORGIAN: return "ka_GE"; case LANG_GERMAN: switch (sub) { case SUBLANG_GERMAN: return "de_DE"; case SUBLANG_GERMAN_SWISS: return "de_CH"; case SUBLANG_GERMAN_AUSTRIAN: return "de_AT"; case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU"; case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI"; } return "de"; case LANG_GREEK: return "el_GR"; case 0x74: /* GUARANI */ return "gn_PY"; case LANG_GUJARATI: return "gu_IN"; case 0x68: /* HAUSA */ return "ha_NG"; case 0x75: /* HAWAIIAN */ /* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers) or Hawaii Creole English ("cpe_US", 600000 speakers)? */ return "cpe_US"; case LANG_HEBREW: return "he_IL"; case LANG_HINDI: return "hi_IN"; case LANG_HUNGARIAN: return "hu_HU"; case 0x69: /* IBIBIO */ return "nic_NG"; case LANG_ICELANDIC: return "is_IS"; case 0x70: /* IGBO */ return "ibo_NG"; case LANG_INDONESIAN: return "id_ID"; case 0x5d: /* INUKTITUT */ return "iu_CA"; case LANG_ITALIAN: switch (sub) { case SUBLANG_ITALIAN: return "it_IT"; case SUBLANG_ITALIAN_SWISS: return "it_CH"; } return "it"; case LANG_JAPANESE: return "ja_JP"; case LANG_KANNADA: return "kn_IN"; case 0x71: /* KANURI */ return "kau_NG"; case LANG_KASHMIRI: switch (sub) { case SUBLANG_DEFAULT: return "ks_PK"; case SUBLANG_KASHMIRI_INDIA: return "ks_IN"; } return "ks"; case LANG_KAZAK: return "kk_KZ"; case LANG_KONKANI: /* FIXME: Adjust this when such locales appear on Unix. */ return "kok_IN"; case LANG_KOREAN: return "ko_KR"; case LANG_KYRGYZ: return "ky_KG"; case 0x54: /* LAO */ return "lo_LA"; case 0x76: /* LATIN */ return "la_VA"; case LANG_LATVIAN: return "lv_LV"; case LANG_LITHUANIAN: return "lt_LT"; case LANG_MACEDONIAN: return "mk_MK"; case LANG_MALAY: switch (sub) { case SUBLANG_MALAY_MALAYSIA: return "ms_MY"; case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN"; } return "ms"; case LANG_MALAYALAM: return "ml_IN"; case 0x3a: /* MALTESE */ return "mt_MT"; case LANG_MANIPURI: /* FIXME: Adjust this when such locales appear on Unix. */ return "mni_IN"; case LANG_MARATHI: return "mr_IN"; case LANG_MONGOLIAN: return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN". */ case LANG_NEPALI: switch (sub) { case SUBLANG_DEFAULT: return "ne_NP"; case SUBLANG_NEPALI_INDIA: return "ne_IN"; } return "ne"; case LANG_NORWEGIAN: switch (sub) { case SUBLANG_NORWEGIAN_BOKMAL: return "no_NO"; case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO"; } return "no"; case LANG_ORIYA: return "or_IN"; case 0x72: /* OROMO */ return "om_ET"; case 0x79: /* PAPIAMENTU */ return "pap_AN"; case 0x63: /* PASHTO */ return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF". */ case LANG_POLISH: return "pl_PL"; case LANG_PORTUGUESE: switch (sub) { case SUBLANG_PORTUGUESE: return "pt_PT"; /* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT. Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */ case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR"; } return "pt"; case LANG_PUNJABI: return "pa_IN"; case 0x17: /* RHAETO-ROMANCE */ return "rm_CH"; case LANG_ROMANIAN: return "ro_RO"; case LANG_RUSSIAN: return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA". */ case 0x3b: /* SAMI */ return "se_NO"; case LANG_SANSKRIT: return "sa_IN"; case LANG_SINDHI: return "sd"; case 0x5b: /* SINHALESE */ return "si_LK"; case LANG_SLOVAK: return "sk_SK"; case LANG_SLOVENIAN: return "sl_SI"; case 0x77: /* SOMALI */ return "so_SO"; case LANG_SORBIAN: /* FIXME: Adjust this when such locales appear on Unix. */ return "wen_DE"; case LANG_SPANISH: switch (sub) { case SUBLANG_SPANISH: return "es_ES"; case SUBLANG_SPANISH_MEXICAN: return "es_MX"; case SUBLANG_SPANISH_MODERN: return "es_ES@modern"; /* not seen on Unix */ case SUBLANG_SPANISH_GUATEMALA: return "es_GT"; case SUBLANG_SPANISH_COSTA_RICA: return "es_CR"; case SUBLANG_SPANISH_PANAMA: return "es_PA"; case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO"; case SUBLANG_SPANISH_VENEZUELA: return "es_VE"; case SUBLANG_SPANISH_COLOMBIA: return "es_CO"; case SUBLANG_SPANISH_PERU: return "es_PE"; case SUBLANG_SPANISH_ARGENTINA: return "es_AR"; case SUBLANG_SPANISH_ECUADOR: return "es_EC"; case SUBLANG_SPANISH_CHILE: return "es_CL"; case SUBLANG_SPANISH_URUGUAY: return "es_UY"; case SUBLANG_SPANISH_PARAGUAY: return "es_PY"; case SUBLANG_SPANISH_BOLIVIA: return "es_BO"; case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV"; case SUBLANG_SPANISH_HONDURAS: return "es_HN"; case SUBLANG_SPANISH_NICARAGUA: return "es_NI"; case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR"; } return "es"; case 0x30: /* SUTU */ return "bnt_TZ"; case LANG_SWAHILI: return "sw_KE"; case LANG_SWEDISH: switch (sub) { case SUBLANG_DEFAULT: return "sv_SE"; case SUBLANG_SWEDISH_FINLAND: return "sv_FI"; } return "sv"; case LANG_SYRIAC: return "syr_TR"; /* An extinct language. */ case 0x64: /* TAGALOG */ return "tl_PH"; case 0x28: /* TAJIK */ return "tg_TJ"; case 0x5f: /* TAMAZIGHT */ return "ber_MA"; case LANG_TAMIL: return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG". */ case LANG_TATAR: return "tt_RU"; case LANG_TELUGU: return "te_IN"; case LANG_THAI: return "th_TH"; case 0x51: /* TIBETAN */ return "bo_CN"; case 0x73: /* TIGRINYA */ return "ti_ET"; case 0x31: /* TSONGA */ return "ts_ZA"; case LANG_TURKISH: return "tr_TR"; case 0x42: /* TURKMEN */ return "tk_TM"; case LANG_UKRAINIAN: return "uk_UA"; case LANG_URDU: switch (sub) { case SUBLANG_URDU_PAKISTAN: return "ur_PK"; case SUBLANG_URDU_INDIA: return "ur_IN"; } return "ur"; case LANG_UZBEK: switch (sub) { /* FIXME: Adjust this when Uzbek locales appear on Unix. */ case SUBLANG_UZBEK_LATIN: return "uz_UZ@latin"; case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ@cyrillic"; } return "uz"; case 0x33: /* VENDA */ return "ven_ZA"; case LANG_VIETNAMESE: return "vi_VN"; case 0x52: /* WELSH */ return "cy_GB"; case 0x34: /* XHOSA */ return "xh_ZA"; case 0x78: /* YI */ return "sit_CN"; case 0x3d: /* YIDDISH */ return "yi_IL"; case 0x6a: /* YORUBA */ return "yo_NG"; case 0x35: /* ZULU */ return "zu_ZA"; default: return "C"; } #endif } lifelines-3.0.61/intl/Makefile.in0000700002540200244210000002515407606165340016772 0ustar prappDomain Users# Makefile for directory with message catalog handling in GNU NLS Utilities. # Copyright (C) 1995-1998, 2000-2002 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Library General Public License as published # by the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, # USA. PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = /bin/sh srcdir = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = .. VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ transform = @program_transform_name@ libdir = @libdir@ includedir = @includedir@ datadir = @datadir@ localedir = $(datadir)/locale gettextsrcdir = $(datadir)/gettext/intl aliaspath = $(localedir) subdir = intl INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = @MKINSTALLDIRS@ mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac` l = @INTL_LIBTOOL_SUFFIX_PREFIX@ AR = ar CC = @CC@ LIBTOOL = @LIBTOOL@ RANLIB = @RANLIB@ YACC = @INTLBISON@ -y -d YFLAGS = --name-prefix=__gettext DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \ -DLIBDIR=\"$(libdir)\" -DIN_LIBINTL @DEFS@ CPPFLAGS = @CPPFLAGS@ CFLAGS = @CFLAGS@ LDFLAGS = @LDFLAGS@ COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) HEADERS = $(COMHDRS) libgnuintl.h loadinfo.h COMHDRS = gmo.h gettextP.h hash-string.h plural-exp.h eval-plural.h os2compat.h SOURCES = $(COMSRCS) intl-compat.c COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \ finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \ explodename.c dcigettext.c dcngettext.c dngettext.c ngettext.c plural.y \ plural-exp.c localcharset.c localename.c osdep.c os2compat.c OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \ finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \ explodename.$lo dcigettext.$lo dcngettext.$lo dngettext.$lo ngettext.$lo \ plural.$lo plural-exp.$lo localcharset.$lo localename.$lo osdep.$lo GETTOBJS = intl-compat.$lo DISTFILES.common = Makefile.in \ config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES) DISTFILES.generated = plural.c DISTFILES.normal = VERSION DISTFILES.gettext = COPYING.LIB-2.0 COPYING.LIB-2.1 libintl.glibc DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c \ COPYING.LIB-2 gettext.h libgettext.h plural-eval.c # Libtool's library version information for libintl. # Before making a gettext release, the gettext maintainer must change this # according to the libtool documentation, section "Library interface versions". # Maintainers of other packages that include the intl directory must *not* # change these values. LTV_CURRENT=4 LTV_REVISION=0 LTV_AGE=2 .SUFFIXES: .SUFFIXES: .c .y .o .lo .sin .sed .c.o: $(COMPILE) $< .c.lo: $(LIBTOOL) --mode=compile $(COMPILE) $< .y.c: $(YACC) $(YFLAGS) --output $@ $< rm -f $*.h .sin.sed: sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $< > t-$@ mv t-$@ $@ INCLUDES = -I.. -I. -I$(top_srcdir)/intl all: all-@USE_INCLUDED_LIBINTL@ all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed all-no: all-no-@BUILD_INCLUDED_LIBINTL@ all-no-yes: libgnuintl.$la all-no-no: libintl.a libgnuintl.a: $(OBJECTS) rm -f $@ $(AR) cru $@ $(OBJECTS) $(RANLIB) $@ libintl.la libgnuintl.la: $(OBJECTS) $(LIBTOOL) --mode=link \ $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \ $(OBJECTS) @LTLIBICONV@ -lc \ -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \ -rpath $(libdir) \ -no-undefined libintl.h: libgnuintl.h cp $(srcdir)/libgnuintl.h libintl.h charset.alias: config.charset $(SHELL) $(srcdir)/config.charset '@host@' > t-$@ mv t-$@ $@ check: all # This installation goal is only used in GNU gettext. Packages which # only use the library should use install instead. # We must not install the libintl.h/libintl.a files if we are on a # system which has the GNU gettext() function in its C library or in a # separate library. # If you want to use the one which comes with this version of the # package, you have to use `configure --with-included-gettext'. install: install-exec install-data install-exec: all if test "$(PACKAGE)" = "gettext" \ && test '@INTLOBJS@' = '$(GETTOBJS)'; then \ $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \ $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \ $(LIBTOOL) --mode=install \ $(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \ else \ : ; \ fi if test '@USE_INCLUDED_LIBINTL@' = yes; then \ test @GLIBC21@ != no || $(mkinstalldirs) $(DESTDIR)$(libdir); \ temp=$(DESTDIR)$(libdir)/t-charset.alias; \ dest=$(DESTDIR)$(libdir)/charset.alias; \ if test -f $(DESTDIR)$(libdir)/charset.alias; then \ orig=$(DESTDIR)$(libdir)/charset.alias; \ sed -f ref-add.sed $$orig > $$temp; \ $(INSTALL_DATA) $$temp $$dest; \ rm -f $$temp; \ else \ if test @GLIBC21@ = no; then \ orig=charset.alias; \ sed -f ref-add.sed $$orig > $$temp; \ $(INSTALL_DATA) $$temp $$dest; \ rm -f $$temp; \ fi; \ fi; \ $(mkinstalldirs) $(DESTDIR)$(localedir); \ test -f $(DESTDIR)$(localedir)/locale.alias \ && orig=$(DESTDIR)$(localedir)/locale.alias \ || orig=$(srcdir)/locale.alias; \ temp=$(DESTDIR)$(localedir)/t-locale.alias; \ dest=$(DESTDIR)$(localedir)/locale.alias; \ sed -f ref-add.sed $$orig > $$temp; \ $(INSTALL_DATA) $$temp $$dest; \ rm -f $$temp; \ else \ : ; \ fi install-data: all if test "$(PACKAGE)" = "gettext"; then \ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \ $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \ dists="COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common)"; \ for file in $$dists; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \ dists="$(DISTFILES.generated)"; \ for file in $$dists; do \ if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ $(INSTALL_DATA) $$dir/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ dists="$(DISTFILES.obsolete)"; \ for file in $$dists; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-strip: install installdirs: if test "$(PACKAGE)" = "gettext" \ && test '@INTLOBJS@' = '$(GETTOBJS)'; then \ $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \ else \ : ; \ fi if test '@USE_INCLUDED_LIBINTL@' = yes; then \ test @GLIBC21@ != no || $(mkinstalldirs) $(DESTDIR)$(libdir); \ $(mkinstalldirs) $(DESTDIR)$(localedir); \ else \ : ; \ fi if test "$(PACKAGE)" = "gettext"; then \ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi # Define this as empty until I found a useful application. installcheck: uninstall: if test "$(PACKAGE)" = "gettext" \ && test '@INTLOBJS@' = '$(GETTOBJS)'; then \ rm -f $(DESTDIR)$(includedir)/libintl.h; \ $(LIBTOOL) --mode=uninstall \ rm -f $(DESTDIR)$(libdir)/libintl.$la; \ else \ : ; \ fi if test '@USE_INCLUDED_LIBINTL@' = yes; then \ if test -f $(DESTDIR)$(libdir)/charset.alias; then \ temp=$(DESTDIR)$(libdir)/t-charset.alias; \ dest=$(DESTDIR)$(libdir)/charset.alias; \ sed -f ref-del.sed $$dest > $$temp; \ if grep '^# Packages using this file: $$' $$temp > /dev/null; then \ rm -f $$dest; \ else \ $(INSTALL_DATA) $$temp $$dest; \ fi; \ rm -f $$temp; \ fi; \ if test -f $(DESTDIR)$(localedir)/locale.alias; then \ temp=$(DESTDIR)$(localedir)/t-locale.alias; \ dest=$(DESTDIR)$(localedir)/locale.alias; \ sed -f ref-del.sed $$dest > $$temp; \ if grep '^# Packages using this file: $$' $$temp > /dev/null; then \ rm -f $$dest; \ else \ $(INSTALL_DATA) $$temp $$dest; \ fi; \ rm -f $$temp; \ fi; \ else \ : ; \ fi if test "$(PACKAGE)" = "gettext"; then \ for file in VERSION ChangeLog COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi info dvi: $(OBJECTS): ../config.h libgnuintl.h bindtextdom.$lo dcgettext.$lo dcigettext.$lo dcngettext.$lo dgettext.$lo dngettext.$lo finddomain.$lo gettext.$lo intl-compat.$lo loadmsgcat.$lo localealias.$lo ngettext.$lo textdomain.$lo: gettextP.h gmo.h loadinfo.h dcigettext.$lo: hash-string.h explodename.$lo l10nflist.$lo: loadinfo.h dcigettext.$lo loadmsgcat.$lo plural.$lo plural-exp.$lo: plural-exp.h dcigettext.$lo: eval-plural.h tags: TAGS TAGS: $(HEADERS) $(SOURCES) here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES) id: ID ID: $(HEADERS) $(SOURCES) here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES) mostlyclean: rm -f *.a *.la *.o *.lo core core.* rm -f libintl.h charset.alias ref-add.sed ref-del.sed rm -f -r .libs _libs clean: mostlyclean distclean: clean rm -f Makefile ID TAGS if test "$(PACKAGE)" = gettext; then \ rm -f ChangeLog.inst $(DISTFILES.normal); \ else \ : ; \ fi maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." # GNU gettext needs not contain the file `VERSION' but contains some # other files which should not be distributed in other packages. distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: Makefile if test "$(PACKAGE)" = gettext; then \ additional="$(DISTFILES.gettext)"; \ else \ additional="$(DISTFILES.normal)"; \ fi; \ $(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \ for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \ if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ cp -p $$dir/$$file $(distdir); \ done Makefile: Makefile.in ../config.status cd .. \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lifelines-3.0.61/intl/ngettext.c0000700002540200244210000000375107606165341016733 0ustar prappDomain Users/* Implementation of ngettext(3) function. Copyright (C) 1995, 1997, 2000, 2001, 2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #ifdef _LIBC # define __need_NULL # include #else # include /* Just for NULL. */ #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif #include /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define NGETTEXT __ngettext # define DCNGETTEXT INTUSE(__dcngettext) #else # define NGETTEXT libintl_ngettext # define DCNGETTEXT libintl_dcngettext #endif /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ char * NGETTEXT (msgid1, msgid2, n) const char *msgid1; const char *msgid2; unsigned long int n; { return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__ngettext, ngettext); #endif lifelines-3.0.61/intl/os2compat.c0000700002540200244210000000550307606165341016775 0ustar prappDomain Users/* OS/2 compatibility functions. Copyright (C) 2001-2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #define OS2_AWARE #ifdef HAVE_CONFIG_H #include #endif #include #include #include /* A version of getenv() that works from DLLs */ extern unsigned long DosScanEnv (const unsigned char *pszName, unsigned char **ppszValue); char * _nl_getenv (const char *name) { unsigned char *value; if (DosScanEnv (name, &value)) return NULL; else return value; } /* A fixed size buffer. */ char libintl_nl_default_dirname[MAXPATHLEN+1]; char *_nlos2_libdir = NULL; char *_nlos2_localealiaspath = NULL; char *_nlos2_localedir = NULL; static __attribute__((constructor)) void nlos2_initialize () { char *root = getenv ("UNIXROOT"); char *gnulocaledir = getenv ("GNULOCALEDIR"); _nlos2_libdir = gnulocaledir; if (!_nlos2_libdir) { if (root) { size_t sl = strlen (root); _nlos2_libdir = (char *) malloc (sl + strlen (LIBDIR) + 1); memcpy (_nlos2_libdir, root, sl); memcpy (_nlos2_libdir + sl, LIBDIR, strlen (LIBDIR) + 1); } else _nlos2_libdir = LIBDIR; } _nlos2_localealiaspath = gnulocaledir; if (!_nlos2_localealiaspath) { if (root) { size_t sl = strlen (root); _nlos2_localealiaspath = (char *) malloc (sl + strlen (LOCALE_ALIAS_PATH) + 1); memcpy (_nlos2_localealiaspath, root, sl); memcpy (_nlos2_localealiaspath + sl, LOCALE_ALIAS_PATH, strlen (LOCALE_ALIAS_PATH) + 1); } else _nlos2_localealiaspath = LOCALE_ALIAS_PATH; } _nlos2_localedir = gnulocaledir; if (!_nlos2_localedir) { if (root) { size_t sl = strlen (root); _nlos2_localedir = (char *) malloc (sl + strlen (LOCALEDIR) + 1); memcpy (_nlos2_localedir, root, sl); memcpy (_nlos2_localedir + sl, LOCALEDIR, strlen (LOCALEDIR) + 1); } else _nlos2_localedir = LOCALEDIR; } if (strlen (_nlos2_localedir) <= MAXPATHLEN) strcpy (libintl_nl_default_dirname, _nlos2_localedir); } lifelines-3.0.61/intl/os2compat.h0000700002540200244210000000302207477512327017002 0ustar prappDomain Users/* OS/2 compatibility defines. This file is intended to be included from config.h Copyright (C) 2001-2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* When included from os2compat.h we need all the original definitions */ #ifndef OS2_AWARE #undef LIBDIR #define LIBDIR _nlos2_libdir extern char *_nlos2_libdir; #undef LOCALEDIR #define LOCALEDIR _nlos2_localedir extern char *_nlos2_localedir; #undef LOCALE_ALIAS_PATH #define LOCALE_ALIAS_PATH _nlos2_localealiaspath extern char *_nlos2_localealiaspath; #endif #undef HAVE_STRCASECMP #define HAVE_STRCASECMP 1 #define strcasecmp stricmp #define strncasecmp strnicmp /* We have our own getenv() which works even if library is compiled as DLL */ #define getenv _nl_getenv /* Older versions of gettext used -1 as the value of LC_MESSAGES */ #define LC_MESSAGES_COMPAT (-1) lifelines-3.0.61/intl/osdep.c0000700002540200244210000000164307477512327016207 0ustar prappDomain Users/* OS dependent parts of libintl. Copyright (C) 2001-2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #if defined __EMX__ # include "os2compat.c" #else /* Avoid AIX compiler warning. */ typedef int dummy; #endif lifelines-3.0.61/intl/plural-exp.c0000700002540200244210000000771407477512327017173 0ustar prappDomain Users/* Expression parsing for plural form selection. Copyright (C) 2000, 2001 Free Software Foundation, Inc. Written by Ulrich Drepper , 2000. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "plural-exp.h" #if (defined __GNUC__ && !defined __APPLE_CC__) \ || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) /* These structs are the constant expression for the germanic plural form determination. It represents the expression "n != 1". */ static const struct expression plvar = { .nargs = 0, .operation = var, }; static const struct expression plone = { .nargs = 0, .operation = num, .val = { .num = 1 } }; struct expression GERMANIC_PLURAL = { .nargs = 2, .operation = not_equal, .val = { .args = { [0] = (struct expression *) &plvar, [1] = (struct expression *) &plone } } }; # define INIT_GERMANIC_PLURAL() #else /* For compilers without support for ISO C 99 struct/union initializers: Initialization at run-time. */ static struct expression plvar; static struct expression plone; struct expression GERMANIC_PLURAL; static void init_germanic_plural () { if (plone.val.num == 0) { plvar.nargs = 0; plvar.operation = var; plone.nargs = 0; plone.operation = num; plone.val.num = 1; GERMANIC_PLURAL.nargs = 2; GERMANIC_PLURAL.operation = not_equal; GERMANIC_PLURAL.val.args[0] = &plvar; GERMANIC_PLURAL.val.args[1] = &plone; } } # define INIT_GERMANIC_PLURAL() init_germanic_plural () #endif void internal_function EXTRACT_PLURAL_EXPRESSION (nullentry, pluralp, npluralsp) const char *nullentry; struct expression **pluralp; unsigned long int *npluralsp; { if (nullentry != NULL) { const char *plural; const char *nplurals; plural = strstr (nullentry, "plural="); nplurals = strstr (nullentry, "nplurals="); if (plural == NULL || nplurals == NULL) goto no_plural; else { char *endp; unsigned long int n; struct parse_args args; /* First get the number. */ nplurals += 9; while (*nplurals != '\0' && isspace ((unsigned char) *nplurals)) ++nplurals; if (!(*nplurals >= '0' && *nplurals <= '9')) goto no_plural; #if defined HAVE_STRTOUL || defined _LIBC n = strtoul (nplurals, &endp, 10); #else for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++) n = n * 10 + (*endp - '0'); #endif if (nplurals == endp) goto no_plural; *npluralsp = n; /* Due to the restrictions bison imposes onto the interface of the scanner function we have to put the input string and the result passed up from the parser into the same structure which address is passed down to the parser. */ plural += 7; args.cp = plural; if (PLURAL_PARSE (&args) != 0) goto no_plural; *pluralp = args.res; } } else { /* By default we are using the Germanic form: singular form only for `one', the plural form otherwise. Yes, this is also what English is using since English is a Germanic language. */ no_plural: INIT_GERMANIC_PLURAL (); *pluralp = &GERMANIC_PLURAL; *npluralsp = 2; } } lifelines-3.0.61/intl/plural-exp.h0000700002540200244210000001030407606165341017157 0ustar prappDomain Users/* Expression parsing and evaluation for plural form selection. Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. Written by Ulrich Drepper , 2000. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _PLURAL_EXP_H #define _PLURAL_EXP_H #ifndef PARAMS # if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES # define PARAMS(args) args # else # define PARAMS(args) () # endif #endif #ifndef internal_function # define internal_function #endif #ifndef attribute_hidden # define attribute_hidden #endif /* This is the representation of the expressions to determine the plural form. */ struct expression { int nargs; /* Number of arguments. */ enum operator { /* Without arguments: */ var, /* The variable "n". */ num, /* Decimal number. */ /* Unary operators: */ lnot, /* Logical NOT. */ /* Binary operators: */ mult, /* Multiplication. */ divide, /* Division. */ module, /* Modulo operation. */ plus, /* Addition. */ minus, /* Subtraction. */ less_than, /* Comparison. */ greater_than, /* Comparison. */ less_or_equal, /* Comparison. */ greater_or_equal, /* Comparison. */ equal, /* Comparison for equality. */ not_equal, /* Comparison for inequality. */ land, /* Logical AND. */ lor, /* Logical OR. */ /* Ternary operators: */ qmop /* Question mark operator. */ } operation; union { unsigned long int num; /* Number value for `num'. */ struct expression *args[3]; /* Up to three arguments. */ } val; }; /* This is the data structure to pass information to the parser and get the result in a thread-safe way. */ struct parse_args { const char *cp; struct expression *res; }; /* Names for the libintl functions are a problem. This source code is used 1. in the GNU C Library library, 2. in the GNU libintl library, 3. in the GNU gettext tools. The function names in each situation must be different, to allow for binary incompatible changes in 'struct expression'. Furthermore, 1. in the GNU C Library library, the names have a __ prefix, 2.+3. in the GNU libintl library and in the GNU gettext tools, the names must follow ANSI C and not start with __. So we have to distinguish the three cases. */ #ifdef _LIBC # define FREE_EXPRESSION __gettext_free_exp # define PLURAL_PARSE __gettextparse # define GERMANIC_PLURAL __gettext_germanic_plural # define EXTRACT_PLURAL_EXPRESSION __gettext_extract_plural #elif defined (IN_LIBINTL) # define FREE_EXPRESSION libintl_gettext_free_exp # define PLURAL_PARSE libintl_gettextparse # define GERMANIC_PLURAL libintl_gettext_germanic_plural # define EXTRACT_PLURAL_EXPRESSION libintl_gettext_extract_plural #else # define FREE_EXPRESSION free_plural_expression # define PLURAL_PARSE parse_plural_expression # define GERMANIC_PLURAL germanic_plural # define EXTRACT_PLURAL_EXPRESSION extract_plural_expression #endif extern void FREE_EXPRESSION PARAMS ((struct expression *exp)) internal_function; extern int PLURAL_PARSE PARAMS ((void *arg)); extern struct expression GERMANIC_PLURAL attribute_hidden; extern void EXTRACT_PLURAL_EXPRESSION PARAMS ((const char *nullentry, struct expression **pluralp, unsigned long int *npluralsp)) internal_function; #if !defined (_LIBC) && !defined (IN_LIBINTL) extern unsigned long int plural_eval PARAMS ((struct expression *pexp, unsigned long int n)); #endif #endif /* _PLURAL_EXP_H */ lifelines-3.0.61/intl/plural.c0000700002540200244210000007747007477212672016407 0ustar prappDomain Users /* A Bison parser, made from plural.y by GNU Bison version 1.28 */ #define YYBISON 1 /* Identify Bison output. */ #define yyparse __gettextparse #define yylex __gettextlex #define yyerror __gettexterror #define yylval __gettextlval #define yychar __gettextchar #define yydebug __gettextdebug #define yynerrs __gettextnerrs #define EQUOP2 257 #define CMPOP2 258 #define ADDOP2 259 #define MULOP2 260 #define NUMBER 261 #line 1 "plural.y" /* Expression parsing for plural form selection. Copyright (C) 2000, 2001 Free Software Foundation, Inc. Written by Ulrich Drepper , 2000. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* The bison generated parser uses alloca. AIX 3 forces us to put this declaration at the beginning of the file. The declaration in bison's skeleton file comes too late. This must come before because may include arbitrary system headers. */ #if defined _AIX && !defined __GNUC__ #pragma alloca #endif #ifdef HAVE_CONFIG_H # include #endif #include #include #include "plural-exp.h" /* The main function generated by the parser is called __gettextparse, but we want it to be called PLURAL_PARSE. */ #ifndef _LIBC # define __gettextparse PLURAL_PARSE #endif #define YYLEX_PARAM &((struct parse_args *) arg)->cp #define YYPARSE_PARAM arg #line 49 "plural.y" typedef union { unsigned long int num; enum operator op; struct expression *exp; } YYSTYPE; #line 55 "plural.y" /* Prototypes for local functions. */ static struct expression *new_exp PARAMS ((int nargs, enum operator op, struct expression * const *args)); static inline struct expression *new_exp_0 PARAMS ((enum operator op)); static inline struct expression *new_exp_1 PARAMS ((enum operator op, struct expression *right)); static struct expression *new_exp_2 PARAMS ((enum operator op, struct expression *left, struct expression *right)); static inline struct expression *new_exp_3 PARAMS ((enum operator op, struct expression *bexp, struct expression *tbranch, struct expression *fbranch)); static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); static void yyerror PARAMS ((const char *str)); /* Allocation of expressions. */ static struct expression * new_exp (nargs, op, args) int nargs; enum operator op; struct expression * const *args; { int i; struct expression *newp; /* If any of the argument could not be malloc'ed, just return NULL. */ for (i = nargs - 1; i >= 0; i--) if (args[i] == NULL) goto fail; /* Allocate a new expression. */ newp = (struct expression *) malloc (sizeof (*newp)); if (newp != NULL) { newp->nargs = nargs; newp->operation = op; for (i = nargs - 1; i >= 0; i--) newp->val.args[i] = args[i]; return newp; } fail: for (i = nargs - 1; i >= 0; i--) FREE_EXPRESSION (args[i]); return NULL; } static inline struct expression * new_exp_0 (op) enum operator op; { return new_exp (0, op, NULL); } static inline struct expression * new_exp_1 (op, right) enum operator op; struct expression *right; { struct expression *args[1]; args[0] = right; return new_exp (1, op, args); } static struct expression * new_exp_2 (op, left, right) enum operator op; struct expression *left; struct expression *right; { struct expression *args[2]; args[0] = left; args[1] = right; return new_exp (2, op, args); } static inline struct expression * new_exp_3 (op, bexp, tbranch, fbranch) enum operator op; struct expression *bexp; struct expression *tbranch; struct expression *fbranch; { struct expression *args[3]; args[0] = bexp; args[1] = tbranch; args[2] = fbranch; return new_exp (3, op, args); } #include #ifndef __cplusplus #ifndef __STDC__ #define const #endif #endif #define YYFINAL 27 #define YYFLAG -32768 #define YYNTBASE 16 #define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 18) static const char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 2, 2, 2, 2, 5, 2, 14, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 6, 7, 8, 9, 11 }; #if YYDEBUG != 0 static const short yyprhs[] = { 0, 0, 2, 8, 12, 16, 20, 24, 28, 32, 35, 37, 39 }; static const short yyrhs[] = { 17, 0, 17, 3, 17, 12, 17, 0, 17, 4, 17, 0, 17, 5, 17, 0, 17, 6, 17, 0, 17, 7, 17, 0, 17, 8, 17, 0, 17, 9, 17, 0, 10, 17, 0, 13, 0, 11, 0, 14, 17, 15, 0 }; #endif #if YYDEBUG != 0 static const short yyrline[] = { 0, 174, 182, 186, 190, 194, 198, 202, 206, 210, 214, 218, 223 }; #endif #if YYDEBUG != 0 || defined (YYERROR_VERBOSE) static const char * const yytname[] = { "$","error","$undefined.","'?'","'|'", "'&'","EQUOP2","CMPOP2","ADDOP2","MULOP2","'!'","NUMBER","':'","'n'","'('","')'", "start","exp", NULL }; #endif static const short yyr1[] = { 0, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17 }; static const short yyr2[] = { 0, 1, 5, 3, 3, 3, 3, 3, 3, 2, 1, 1, 3 }; static const short yydefact[] = { 0, 0, 11, 10, 0, 1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 3, 4, 5, 6, 7, 8, 0, 2, 0, 0, 0 }; static const short yydefgoto[] = { 25, 5 }; static const short yypact[] = { -9, -9,-32768,-32768, -9, 34,-32768, 11, -9, -9, -9, -9, -9, -9, -9,-32768, 24, 39, 43, 16, 26, -3,-32768, -9, 34, 21, 53,-32768 }; static const short yypgoto[] = {-32768, -1 }; #define YYLAST 53 static const short yytable[] = { 6, 1, 2, 7, 3, 4, 14, 16, 17, 18, 19, 20, 21, 22, 8, 9, 10, 11, 12, 13, 14, 26, 24, 12, 13, 14, 15, 8, 9, 10, 11, 12, 13, 14, 13, 14, 23, 8, 9, 10, 11, 12, 13, 14, 10, 11, 12, 13, 14, 11, 12, 13, 14, 27 }; static const short yycheck[] = { 1, 10, 11, 4, 13, 14, 9, 8, 9, 10, 11, 12, 13, 14, 3, 4, 5, 6, 7, 8, 9, 0, 23, 7, 8, 9, 15, 3, 4, 5, 6, 7, 8, 9, 8, 9, 12, 3, 4, 5, 6, 7, 8, 9, 5, 6, 7, 8, 9, 6, 7, 8, 9, 0 }; #define YYPURE 1 /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/usr/local/share/bison.simple" /* This file comes from bison-1.28. */ /* Skeleton output parser for bison, Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* As a special exception, when this file is copied by Bison into a Bison output file, you may use that output file without restriction. This special exception was added by the Free Software Foundation in version 1.24 of Bison. */ /* This is the parser code that is written into each bison parser when the %semantic_parser declaration is not specified in the grammar. It was written by Richard Stallman by simplifying the hairy parser used when %semantic_parser is specified. */ #ifndef YYSTACK_USE_ALLOCA #ifdef alloca #define YYSTACK_USE_ALLOCA #else /* alloca not defined */ #ifdef __GNUC__ #define YYSTACK_USE_ALLOCA #define alloca __builtin_alloca #else /* not GNU C. */ #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386)) #define YYSTACK_USE_ALLOCA #include #else /* not sparc */ /* We think this test detects Watcom and Microsoft C. */ /* This used to test MSDOS, but that is a bad idea since that symbol is in the user namespace. */ #if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__) #if 0 /* No need for malloc.h, which pollutes the namespace; instead, just don't use alloca. */ #include #endif #else /* not MSDOS, or __TURBOC__ */ #if defined(_AIX) /* I don't know what this was needed for, but it pollutes the namespace. So I turned it off. rms, 2 May 1997. */ /* #include */ #pragma alloca #define YYSTACK_USE_ALLOCA #else /* not MSDOS, or __TURBOC__, or _AIX */ #if 0 #ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up, and on HPUX 10. Eventually we can turn this on. */ #define YYSTACK_USE_ALLOCA #define alloca __builtin_alloca #endif /* __hpux */ #endif #endif /* not _AIX */ #endif /* not MSDOS, or __TURBOC__ */ #endif /* not sparc */ #endif /* not GNU C */ #endif /* alloca not defined */ #endif /* YYSTACK_USE_ALLOCA not defined */ #ifdef YYSTACK_USE_ALLOCA #define YYSTACK_ALLOC alloca #else #define YYSTACK_ALLOC malloc #endif /* Note: there must be only one dollar sign in this file. It is replaced by the list of actions, each action as one case of the switch. */ #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY -2 #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrlab1 /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(token, value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { yychar = (token), yylval = (value); \ yychar1 = YYTRANSLATE (yychar); \ YYPOPSTACK; \ goto yybackup; \ } \ else \ { yyerror ("syntax error: cannot back up"); YYERROR; } \ while (0) #define YYTERROR 1 #define YYERRCODE 256 #ifndef YYPURE #define YYLEX yylex() #endif #ifdef YYPURE #ifdef YYLSP_NEEDED #ifdef YYLEX_PARAM #define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) #else #define YYLEX yylex(&yylval, &yylloc) #endif #else /* not YYLSP_NEEDED */ #ifdef YYLEX_PARAM #define YYLEX yylex(&yylval, YYLEX_PARAM) #else #define YYLEX yylex(&yylval) #endif #endif /* not YYLSP_NEEDED */ #endif /* If nonreentrant, generate the variables here */ #ifndef YYPURE int yychar; /* the lookahead symbol */ YYSTYPE yylval; /* the semantic value of the */ /* lookahead symbol */ #ifdef YYLSP_NEEDED YYLTYPE yylloc; /* location data for the lookahead */ /* symbol */ #endif int yynerrs; /* number of parse errors so far */ #endif /* not YYPURE */ #if YYDEBUG != 0 int yydebug; /* nonzero means print parse trace */ /* Since this is uninitialized, it does not stop multiple parsers from coexisting. */ #endif /* YYINITDEPTH indicates the initial size of the parser's stacks */ #ifndef YYINITDEPTH #define YYINITDEPTH 200 #endif /* YYMAXDEPTH is the maximum size the stacks can grow to (effective only if the built-in stack extension method is used). */ #if YYMAXDEPTH == 0 #undef YYMAXDEPTH #endif #ifndef YYMAXDEPTH #define YYMAXDEPTH 10000 #endif /* Define __yy_memcpy. Note that the size argument should be passed with type unsigned int, because that is what the non-GCC definitions require. With GCC, __builtin_memcpy takes an arg of type size_t, but it can handle unsigned int. */ #if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ #define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) #else /* not GNU C or C++ */ #ifndef __cplusplus /* This is the most reliable way to avoid incompatibilities in available built-in functions on various systems. */ static void __yy_memcpy (to, from, count) char *to; char *from; unsigned int count; { register char *f = from; register char *t = to; register int i = count; while (i-- > 0) *t++ = *f++; } #else /* __cplusplus */ /* This is the most reliable way to avoid incompatibilities in available built-in functions on various systems. */ static void __yy_memcpy (char *to, char *from, unsigned int count) { register char *t = to; register char *f = from; register int i = count; while (i-- > 0) *t++ = *f++; } #endif #endif #line 217 "/usr/local/share/bison.simple" /* The user can define YYPARSE_PARAM as the name of an argument to be passed into yyparse. The argument should have type void *. It should actually point to an object. Grammar actions can access the variable by casting it to the proper pointer type. */ #ifdef YYPARSE_PARAM #ifdef __cplusplus #define YYPARSE_PARAM_ARG void *YYPARSE_PARAM #define YYPARSE_PARAM_DECL #else /* not __cplusplus */ #define YYPARSE_PARAM_ARG YYPARSE_PARAM #define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; #endif /* not __cplusplus */ #else /* not YYPARSE_PARAM */ #define YYPARSE_PARAM_ARG #define YYPARSE_PARAM_DECL #endif /* not YYPARSE_PARAM */ /* Prevent warning if -Wstrict-prototypes. */ #ifdef __GNUC__ #ifdef YYPARSE_PARAM int yyparse (void *); #else int yyparse (void); #endif #endif int yyparse(YYPARSE_PARAM_ARG) YYPARSE_PARAM_DECL { register int yystate; register int yyn; register short *yyssp; register YYSTYPE *yyvsp; int yyerrstatus; /* number of tokens to shift before error messages enabled */ int yychar1 = 0; /* lookahead token as an internal (translated) token number */ short yyssa[YYINITDEPTH]; /* the state stack */ YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ short *yyss = yyssa; /* refer to the stacks thru separate pointers */ YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ #ifdef YYLSP_NEEDED YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ YYLTYPE *yyls = yylsa; YYLTYPE *yylsp; #define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) #else #define YYPOPSTACK (yyvsp--, yyssp--) #endif int yystacksize = YYINITDEPTH; int yyfree_stacks = 0; #ifdef YYPURE int yychar; YYSTYPE yylval; int yynerrs; #ifdef YYLSP_NEEDED YYLTYPE yylloc; #endif #endif YYSTYPE yyval; /* the variable used to return */ /* semantic values from the action */ /* routines */ int yylen; #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Starting parse\n"); #endif yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss - 1; yyvsp = yyvs; #ifdef YYLSP_NEEDED yylsp = yyls; #endif /* Push a new state, which is found in yystate . */ /* In all cases, when you get here, the value and location stacks have just been pushed. so pushing a state here evens the stacks. */ yynewstate: *++yyssp = yystate; if (yyssp >= yyss + yystacksize - 1) { /* Give user a chance to reallocate the stack */ /* Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; short *yyss1 = yyss; #ifdef YYLSP_NEEDED YYLTYPE *yyls1 = yyls; #endif /* Get the current used size of the three stacks, in elements. */ int size = yyssp - yyss + 1; #ifdef yyoverflow /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. */ #ifdef YYLSP_NEEDED /* This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow("parser stack overflow", &yyss1, size * sizeof (*yyssp), &yyvs1, size * sizeof (*yyvsp), &yyls1, size * sizeof (*yylsp), &yystacksize); #else yyoverflow("parser stack overflow", &yyss1, size * sizeof (*yyssp), &yyvs1, size * sizeof (*yyvsp), &yystacksize); #endif yyss = yyss1; yyvs = yyvs1; #ifdef YYLSP_NEEDED yyls = yyls1; #endif #else /* no yyoverflow */ /* Extend the stack our own way. */ if (yystacksize >= YYMAXDEPTH) { yyerror("parser stack overflow"); if (yyfree_stacks) { free (yyss); free (yyvs); #ifdef YYLSP_NEEDED free (yyls); #endif } return 2; } yystacksize *= 2; if (yystacksize > YYMAXDEPTH) yystacksize = YYMAXDEPTH; #ifndef YYSTACK_USE_ALLOCA yyfree_stacks = 1; #endif yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp)); __yy_memcpy ((char *)yyss, (char *)yyss1, size * (unsigned int) sizeof (*yyssp)); yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp)); __yy_memcpy ((char *)yyvs, (char *)yyvs1, size * (unsigned int) sizeof (*yyvsp)); #ifdef YYLSP_NEEDED yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp)); __yy_memcpy ((char *)yyls, (char *)yyls1, size * (unsigned int) sizeof (*yylsp)); #endif #endif /* no yyoverflow */ yyssp = yyss + size - 1; yyvsp = yyvs + size - 1; #ifdef YYLSP_NEEDED yylsp = yyls + size - 1; #endif #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Stack size increased to %d\n", yystacksize); #endif if (yyssp >= yyss + yystacksize - 1) YYABORT; } #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Entering state %d\n", yystate); #endif goto yybackup; yybackup: /* Do appropriate processing given the current state. */ /* Read a lookahead token if we need one and don't already have one. */ /* yyresume: */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yyn == YYFLAG) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* yychar is either YYEMPTY or YYEOF or a valid token in external form. */ if (yychar == YYEMPTY) { #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Reading a token: "); #endif yychar = YYLEX; } /* Convert token to internal form (in yychar1) for indexing tables with */ if (yychar <= 0) /* This means end of input. */ { yychar1 = 0; yychar = YYEOF; /* Don't call YYLEX any more */ #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Now at end of input.\n"); #endif } else { yychar1 = YYTRANSLATE(yychar); #if YYDEBUG != 0 if (yydebug) { fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); /* Give the individual parser a way to print the precise meaning of a token, for further debugging info. */ #ifdef YYPRINT YYPRINT (stderr, yychar, yylval); #endif fprintf (stderr, ")\n"); } #endif } yyn += yychar1; if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) goto yydefault; yyn = yytable[yyn]; /* yyn is what to do for this token type in this state. Negative => reduce, -yyn is rule number. Positive => shift, yyn is new state. New state is final state => don't bother to shift, just return success. 0, or most negative number => error. */ if (yyn < 0) { if (yyn == YYFLAG) goto yyerrlab; yyn = -yyn; goto yyreduce; } else if (yyn == 0) goto yyerrlab; if (yyn == YYFINAL) YYACCEPT; /* Shift the lookahead token. */ #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); #endif /* Discard the token being shifted unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; *++yyvsp = yylval; #ifdef YYLSP_NEEDED *++yylsp = yylloc; #endif /* count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; yystate = yyn; goto yynewstate; /* Do the default action for the current state. */ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; /* Do a reduction. yyn is the number of a rule to reduce with. */ yyreduce: yylen = yyr2[yyn]; if (yylen > 0) yyval = yyvsp[1-yylen]; /* implement default value of the action */ #if YYDEBUG != 0 if (yydebug) { int i; fprintf (stderr, "Reducing via rule %d (line %d), ", yyn, yyrline[yyn]); /* Print the symbols being reduced, and their result. */ for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) fprintf (stderr, "%s ", yytname[yyrhs[i]]); fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); } #endif switch (yyn) { case 1: #line 175 "plural.y" { if (yyvsp[0].exp == NULL) YYABORT; ((struct parse_args *) arg)->res = yyvsp[0].exp; ; break;} case 2: #line 183 "plural.y" { yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 3: #line 187 "plural.y" { yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 4: #line 191 "plural.y" { yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 5: #line 195 "plural.y" { yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 6: #line 199 "plural.y" { yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 7: #line 203 "plural.y" { yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 8: #line 207 "plural.y" { yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 9: #line 211 "plural.y" { yyval.exp = new_exp_1 (lnot, yyvsp[0].exp); ; break;} case 10: #line 215 "plural.y" { yyval.exp = new_exp_0 (var); ; break;} case 11: #line 219 "plural.y" { if ((yyval.exp = new_exp_0 (num)) != NULL) yyval.exp->val.num = yyvsp[0].num; ; break;} case 12: #line 224 "plural.y" { yyval.exp = yyvsp[-1].exp; ; break;} } /* the action file gets copied in in place of this dollarsign */ #line 543 "/usr/local/share/bison.simple" yyvsp -= yylen; yyssp -= yylen; #ifdef YYLSP_NEEDED yylsp -= yylen; #endif #if YYDEBUG != 0 if (yydebug) { short *ssp1 = yyss - 1; fprintf (stderr, "state stack now"); while (ssp1 != yyssp) fprintf (stderr, " %d", *++ssp1); fprintf (stderr, "\n"); } #endif *++yyvsp = yyval; #ifdef YYLSP_NEEDED yylsp++; if (yylen == 0) { yylsp->first_line = yylloc.first_line; yylsp->first_column = yylloc.first_column; yylsp->last_line = (yylsp-1)->last_line; yylsp->last_column = (yylsp-1)->last_column; yylsp->text = 0; } else { yylsp->last_line = (yylsp+yylen-1)->last_line; yylsp->last_column = (yylsp+yylen-1)->last_column; } #endif /* Now "shift" the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTBASE] + *yyssp; if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTBASE]; goto yynewstate; yyerrlab: /* here on detecting error */ if (! yyerrstatus) /* If not already recovering from an error, report this error. */ { ++yynerrs; #ifdef YYERROR_VERBOSE yyn = yypact[yystate]; if (yyn > YYFLAG && yyn < YYLAST) { int size = 0; char *msg; int x, count; count = 0; /* Start X at -yyn if nec to avoid negative indexes in yycheck. */ for (x = (yyn < 0 ? -yyn : 0); x < (sizeof(yytname) / sizeof(char *)); x++) if (yycheck[x + yyn] == x) size += strlen(yytname[x]) + 15, count++; msg = (char *) malloc(size + 15); if (msg != 0) { strcpy(msg, "parse error"); if (count < 5) { count = 0; for (x = (yyn < 0 ? -yyn : 0); x < (sizeof(yytname) / sizeof(char *)); x++) if (yycheck[x + yyn] == x) { strcat(msg, count == 0 ? ", expecting `" : " or `"); strcat(msg, yytname[x]); strcat(msg, "'"); count++; } } yyerror(msg); free(msg); } else yyerror ("parse error; also virtual memory exceeded"); } else #endif /* YYERROR_VERBOSE */ yyerror("parse error"); } goto yyerrlab1; yyerrlab1: /* here on error raised explicitly by an action */ if (yyerrstatus == 3) { /* if just tried and failed to reuse lookahead token after an error, discard it. */ /* return failure if at end of input */ if (yychar == YYEOF) YYABORT; #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); #endif yychar = YYEMPTY; } /* Else will try to reuse lookahead token after shifting the error token. */ yyerrstatus = 3; /* Each real token shifted decrements this */ goto yyerrhandle; yyerrdefault: /* current state does not do anything special for the error token. */ #if 0 /* This is wrong; only states that explicitly want error tokens should shift them. */ yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ if (yyn) goto yydefault; #endif yyerrpop: /* pop the current state because it cannot handle the error token */ if (yyssp == yyss) YYABORT; yyvsp--; yystate = *--yyssp; #ifdef YYLSP_NEEDED yylsp--; #endif #if YYDEBUG != 0 if (yydebug) { short *ssp1 = yyss - 1; fprintf (stderr, "Error: state stack now"); while (ssp1 != yyssp) fprintf (stderr, " %d", *++ssp1); fprintf (stderr, "\n"); } #endif yyerrhandle: yyn = yypact[yystate]; if (yyn == YYFLAG) goto yyerrdefault; yyn += YYTERROR; if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) goto yyerrdefault; yyn = yytable[yyn]; if (yyn < 0) { if (yyn == YYFLAG) goto yyerrpop; yyn = -yyn; goto yyreduce; } else if (yyn == 0) goto yyerrpop; if (yyn == YYFINAL) YYACCEPT; #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Shifting error token, "); #endif *++yyvsp = yylval; #ifdef YYLSP_NEEDED *++yylsp = yylloc; #endif yystate = yyn; goto yynewstate; yyacceptlab: /* YYACCEPT comes here. */ if (yyfree_stacks) { free (yyss); free (yyvs); #ifdef YYLSP_NEEDED free (yyls); #endif } return 0; yyabortlab: /* YYABORT comes here. */ if (yyfree_stacks) { free (yyss); free (yyvs); #ifdef YYLSP_NEEDED free (yyls); #endif } return 1; } #line 229 "plural.y" void internal_function FREE_EXPRESSION (exp) struct expression *exp; { if (exp == NULL) return; /* Handle the recursive case. */ switch (exp->nargs) { case 3: FREE_EXPRESSION (exp->val.args[2]); /* FALLTHROUGH */ case 2: FREE_EXPRESSION (exp->val.args[1]); /* FALLTHROUGH */ case 1: FREE_EXPRESSION (exp->val.args[0]); /* FALLTHROUGH */ default: break; } free (exp); } static int yylex (lval, pexp) YYSTYPE *lval; const char **pexp; { const char *exp = *pexp; int result; while (1) { if (exp[0] == '\0') { *pexp = exp; return YYEOF; } if (exp[0] != ' ' && exp[0] != '\t') break; ++exp; } result = *exp++; switch (result) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { unsigned long int n = result - '0'; while (exp[0] >= '0' && exp[0] <= '9') { n *= 10; n += exp[0] - '0'; ++exp; } lval->num = n; result = NUMBER; } break; case '=': if (exp[0] == '=') { ++exp; lval->op = equal; result = EQUOP2; } else result = YYERRCODE; break; case '!': if (exp[0] == '=') { ++exp; lval->op = not_equal; result = EQUOP2; } break; case '&': case '|': if (exp[0] == result) ++exp; else result = YYERRCODE; break; case '<': if (exp[0] == '=') { ++exp; lval->op = less_or_equal; } else lval->op = less_than; result = CMPOP2; break; case '>': if (exp[0] == '=') { ++exp; lval->op = greater_or_equal; } else lval->op = greater_than; result = CMPOP2; break; case '*': lval->op = mult; result = MULOP2; break; case '/': lval->op = divide; result = MULOP2; break; case '%': lval->op = module; result = MULOP2; break; case '+': lval->op = plus; result = ADDOP2; break; case '-': lval->op = minus; result = ADDOP2; break; case 'n': case '?': case ':': case '(': case ')': /* Nothing, just return the character. */ break; case ';': case '\n': case '\0': /* Be safe and let the user call this function again. */ --exp; result = YYEOF; break; default: result = YYERRCODE; #if YYDEBUG != 0 --exp; #endif break; } *pexp = exp; return result; } static void yyerror (str) const char *str; { /* Do nothing. We don't print error messages here. */ } lifelines-3.0.61/intl/plural.y0000700002540200244210000001773407477212672016432 0ustar prappDomain Users%{ /* Expression parsing for plural form selection. Copyright (C) 2000, 2001 Free Software Foundation, Inc. Written by Ulrich Drepper , 2000. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* The bison generated parser uses alloca. AIX 3 forces us to put this declaration at the beginning of the file. The declaration in bison's skeleton file comes too late. This must come before because may include arbitrary system headers. */ #if defined _AIX && !defined __GNUC__ #pragma alloca #endif #ifdef HAVE_CONFIG_H # include #endif #include #include #include "plural-exp.h" /* The main function generated by the parser is called __gettextparse, but we want it to be called PLURAL_PARSE. */ #ifndef _LIBC # define __gettextparse PLURAL_PARSE #endif #define YYLEX_PARAM &((struct parse_args *) arg)->cp #define YYPARSE_PARAM arg %} %pure_parser %expect 7 %union { unsigned long int num; enum operator op; struct expression *exp; } %{ /* Prototypes for local functions. */ static struct expression *new_exp PARAMS ((int nargs, enum operator op, struct expression * const *args)); static inline struct expression *new_exp_0 PARAMS ((enum operator op)); static inline struct expression *new_exp_1 PARAMS ((enum operator op, struct expression *right)); static struct expression *new_exp_2 PARAMS ((enum operator op, struct expression *left, struct expression *right)); static inline struct expression *new_exp_3 PARAMS ((enum operator op, struct expression *bexp, struct expression *tbranch, struct expression *fbranch)); static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); static void yyerror PARAMS ((const char *str)); /* Allocation of expressions. */ static struct expression * new_exp (nargs, op, args) int nargs; enum operator op; struct expression * const *args; { int i; struct expression *newp; /* If any of the argument could not be malloc'ed, just return NULL. */ for (i = nargs - 1; i >= 0; i--) if (args[i] == NULL) goto fail; /* Allocate a new expression. */ newp = (struct expression *) malloc (sizeof (*newp)); if (newp != NULL) { newp->nargs = nargs; newp->operation = op; for (i = nargs - 1; i >= 0; i--) newp->val.args[i] = args[i]; return newp; } fail: for (i = nargs - 1; i >= 0; i--) FREE_EXPRESSION (args[i]); return NULL; } static inline struct expression * new_exp_0 (op) enum operator op; { return new_exp (0, op, NULL); } static inline struct expression * new_exp_1 (op, right) enum operator op; struct expression *right; { struct expression *args[1]; args[0] = right; return new_exp (1, op, args); } static struct expression * new_exp_2 (op, left, right) enum operator op; struct expression *left; struct expression *right; { struct expression *args[2]; args[0] = left; args[1] = right; return new_exp (2, op, args); } static inline struct expression * new_exp_3 (op, bexp, tbranch, fbranch) enum operator op; struct expression *bexp; struct expression *tbranch; struct expression *fbranch; { struct expression *args[3]; args[0] = bexp; args[1] = tbranch; args[2] = fbranch; return new_exp (3, op, args); } %} /* This declares that all operators have the same associativity and the precedence order as in C. See [Harbison, Steele: C, A Reference Manual]. There is no unary minus and no bitwise operators. Operators with the same syntactic behaviour have been merged into a single token, to save space in the array generated by bison. */ %right '?' /* ? */ %left '|' /* || */ %left '&' /* && */ %left EQUOP2 /* == != */ %left CMPOP2 /* < > <= >= */ %left ADDOP2 /* + - */ %left MULOP2 /* * / % */ %right '!' /* ! */ %token EQUOP2 CMPOP2 ADDOP2 MULOP2 %token NUMBER %type exp %% start: exp { if ($1 == NULL) YYABORT; ((struct parse_args *) arg)->res = $1; } ; exp: exp '?' exp ':' exp { $$ = new_exp_3 (qmop, $1, $3, $5); } | exp '|' exp { $$ = new_exp_2 (lor, $1, $3); } | exp '&' exp { $$ = new_exp_2 (land, $1, $3); } | exp EQUOP2 exp { $$ = new_exp_2 ($2, $1, $3); } | exp CMPOP2 exp { $$ = new_exp_2 ($2, $1, $3); } | exp ADDOP2 exp { $$ = new_exp_2 ($2, $1, $3); } | exp MULOP2 exp { $$ = new_exp_2 ($2, $1, $3); } | '!' exp { $$ = new_exp_1 (lnot, $2); } | 'n' { $$ = new_exp_0 (var); } | NUMBER { if (($$ = new_exp_0 (num)) != NULL) $$->val.num = $1; } | '(' exp ')' { $$ = $2; } ; %% void internal_function FREE_EXPRESSION (exp) struct expression *exp; { if (exp == NULL) return; /* Handle the recursive case. */ switch (exp->nargs) { case 3: FREE_EXPRESSION (exp->val.args[2]); /* FALLTHROUGH */ case 2: FREE_EXPRESSION (exp->val.args[1]); /* FALLTHROUGH */ case 1: FREE_EXPRESSION (exp->val.args[0]); /* FALLTHROUGH */ default: break; } free (exp); } static int yylex (lval, pexp) YYSTYPE *lval; const char **pexp; { const char *exp = *pexp; int result; while (1) { if (exp[0] == '\0') { *pexp = exp; return YYEOF; } if (exp[0] != ' ' && exp[0] != '\t') break; ++exp; } result = *exp++; switch (result) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { unsigned long int n = result - '0'; while (exp[0] >= '0' && exp[0] <= '9') { n *= 10; n += exp[0] - '0'; ++exp; } lval->num = n; result = NUMBER; } break; case '=': if (exp[0] == '=') { ++exp; lval->op = equal; result = EQUOP2; } else result = YYERRCODE; break; case '!': if (exp[0] == '=') { ++exp; lval->op = not_equal; result = EQUOP2; } break; case '&': case '|': if (exp[0] == result) ++exp; else result = YYERRCODE; break; case '<': if (exp[0] == '=') { ++exp; lval->op = less_or_equal; } else lval->op = less_than; result = CMPOP2; break; case '>': if (exp[0] == '=') { ++exp; lval->op = greater_or_equal; } else lval->op = greater_than; result = CMPOP2; break; case '*': lval->op = mult; result = MULOP2; break; case '/': lval->op = divide; result = MULOP2; break; case '%': lval->op = module; result = MULOP2; break; case '+': lval->op = plus; result = ADDOP2; break; case '-': lval->op = minus; result = ADDOP2; break; case 'n': case '?': case ':': case '(': case ')': /* Nothing, just return the character. */ break; case ';': case '\n': case '\0': /* Be safe and let the user call this function again. */ --exp; result = YYEOF; break; default: result = YYERRCODE; #if YYDEBUG != 0 --exp; #endif break; } *pexp = exp; return result; } static void yyerror (str) const char *str; { /* Do nothing. We don't print error messages here. */ } lifelines-3.0.61/intl/ref-add.sin0000700002540200244210000000210107435641553016732 0ustar prappDomain Users# Add this package to a list of references stored in a text file. # # Copyright (C) 2000 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Library General Public License as published # by the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, # USA. # # Written by Bruno Haible . # /^# Packages using this file: / { s/# Packages using this file:// ta :a s/ @PACKAGE@ / @PACKAGE@ / tb s/ $/ @PACKAGE@ / :b s/^/# Packages using this file:/ } lifelines-3.0.61/intl/ref-del.sin0000700002540200244210000000202407435641553016752 0ustar prappDomain Users# Remove this package from a list of references stored in a text file. # # Copyright (C) 2000 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Library General Public License as published # by the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, # USA. # # Written by Bruno Haible . # /^# Packages using this file: / { s/# Packages using this file:// s/ @PACKAGE@ / / s/^/# Packages using this file:/ } lifelines-3.0.61/intl/textdomain.c0000700002540200244210000001071007606165341017236 0ustar prappDomain Users/* Implementation of the textdomain(3) function. Copyright (C) 1995-1998, 2000, 2001, 2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #ifdef _LIBC # include #else # include "libgnuintl.h" #endif #include "gettextP.h" #ifdef _LIBC /* We have to handle multi-threaded applications. */ # include #else /* Provide dummy implementation if this is outside glibc. */ # define __libc_rwlock_define(CLASS, NAME) # define __libc_rwlock_wrlock(NAME) # define __libc_rwlock_unlock(NAME) #endif /* The internal variables in the standalone libintl.a must have different names than the internal variables in GNU libc, otherwise programs using libintl.a cannot be linked statically. */ #if !defined _LIBC # define _nl_default_default_domain libintl_nl_default_default_domain # define _nl_current_default_domain libintl_nl_current_default_domain #endif /* @@ end of prolog @@ */ /* Name of the default text domain. */ extern const char _nl_default_default_domain[] attribute_hidden; /* Default text domain in which entries for gettext(3) are to be found. */ extern const char *_nl_current_default_domain attribute_hidden; /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define TEXTDOMAIN __textdomain # ifndef strdup # define strdup(str) __strdup (str) # endif #else # define TEXTDOMAIN libintl_textdomain #endif /* Lock variable to protect the global data in the gettext implementation. */ __libc_rwlock_define (extern, _nl_state_lock attribute_hidden) /* Set the current default message catalog to DOMAINNAME. If DOMAINNAME is null, return the current default. If DOMAINNAME is "", reset to the default of "messages". */ char * TEXTDOMAIN (domainname) const char *domainname; { char *new_domain; char *old_domain; /* A NULL pointer requests the current setting. */ if (domainname == NULL) return (char *) _nl_current_default_domain; __libc_rwlock_wrlock (_nl_state_lock); old_domain = (char *) _nl_current_default_domain; /* If domain name is the null string set to default domain "messages". */ if (domainname[0] == '\0' || strcmp (domainname, _nl_default_default_domain) == 0) { _nl_current_default_domain = _nl_default_default_domain; new_domain = (char *) _nl_current_default_domain; } else if (strcmp (domainname, old_domain) == 0) /* This can happen and people will use it to signal that some environment variable changed. */ new_domain = old_domain; else { /* If the following malloc fails `_nl_current_default_domain' will be NULL. This value will be returned and so signals we are out of core. */ #if defined _LIBC || defined HAVE_STRDUP new_domain = strdup (domainname); #else size_t len = strlen (domainname) + 1; new_domain = (char *) malloc (len); if (new_domain != NULL) memcpy (new_domain, domainname, len); #endif if (new_domain != NULL) _nl_current_default_domain = new_domain; } /* We use this possibility to signal a change of the loaded catalogs since this is most likely the case and there is no other easy we to do it. Do it only when the call was successful. */ if (new_domain != NULL) { ++_nl_msg_cat_cntr; if (old_domain != new_domain && old_domain != _nl_default_default_domain) free (old_domain); } __libc_rwlock_unlock (_nl_state_lock); return new_domain; } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__textdomain, textdomain); #endif lifelines-3.0.61/intl/VERSION0000700002540200244210000000005007606165340015761 0ustar prappDomain UsersGNU gettext library from gettext-0.11.5 lifelines-3.0.61/LICENSE0000700002540200244210000000205507032010037014740 0ustar prappDomain UsersCopyright (c) 1991-1999 Thomas T. Wetmore IV Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. lifelines-3.0.61/lines.cfg0000700002540200244210000002270210656417425015551 0ustar prappDomain Users# config file for LifeLines # .linesrc under UNIX, lines.cfg under Windows # Lines beginning with # are ignored (comments) # As are blank lines # So some of the examples are commented out... # # 2007-05-08 # # Note that paths are assigned with := # Other values are assigned with = # The distinction is that using plain = means that # backslash escapes are enabled: # \t means tab, \n means carriage return # We don't want these enabled in paths, because they might # occur naturally in path names under MS-Windows. # # All variables here are available to report programs # via the report language function getproperty, so, for # example, the user email property (which is built-in under # UNIX), may be specified here like so: #user.email=user@domain.name # Similarly the user fullname property (also built-in under # UNIX) may be specified like so: #user.fullname=myname # the user address property is a one line version of your address #user.address=1234 Some Street, Some City, State 00000 # the user phone property is your phone number #user.phone=(800)-555-1234 # the user url property is for your url (if you have one) #user.url=http://mylifelines.genealogy.net # Set a variable for the lifelines root # Variables have % at start and end %llroot%:=\lifelines # Root path for utility/read command InputPath:=%llroot% # Place to store output of utility/save LLARCHIVES:=%llroot%\Archives # Path(s) to search for databases LLDATABASES:=%llroot%\Databases # (New databases will be created in first directory of this path.) # (LLNEWDBDIR {Path for new databases} is obsolete) # Path for report programs LLPROGRAMS:=%llroot%\Programs # Path for report output LLREPORTS:=%llroot%\Outputs # Editor (notepad by default) #LLEDITOR:=notepad.exe # Path for reference translation tables TTPATH:=%llroot%\tt # Path for exported translation tables (from a db) LLTTEXPORT:=%llroot%\ttdb # Refuse to execute system calls from report programs (default allowed) DenySystemCalls=1 # Log file for report errors (default none) #ReportLog:=%llroot%\rpterrs.log # Log file for crashes for llines (default none) #CrashLog_llines:=%llroot%\crashes_llines.log # Log file for crashes for llexec (default none) #CrashLog_llexec:=%llroot%\crashes_llexec.log # Log file for import errors (default errs.log) #ImportLog:=%llroot%\import.log # Log file for report pvalue leaks (for debugging) #ReportLeakLog:=%llroot%\reportleaks.log # Delay (secs) between each report error on screen (default 0) #PerErrorDelay=4 # Print more detailed call stack for each report error #FullReportCallStack=1 # dayfmt,monthfmt,yearfmt,datefmt,erafmt,complexfmt # see programmers reference for stddate for these # 2,3,0,0,1,1 is GEDCOM style (1 AUG 1945) with complex dates # 2,5,0,1,1,1 is American style (AUGUST 1, 1945) with complex dates # 1,1,0,9,1,1 is Chinese style (1945/04/25) with complex dates # 1,1,0,10,2,1 is Chinese style with dashes (1945-04-05 A.D.) with explicit origin & complex dates # 2,2,0,13,1,1 is the Swedish style (1/8 1945) # Omit this entirely to default to dates as given in GEDCOM #LongDisplayDate=1,1,0,9,1,1 # To use a combining format not already supported, such as the period format # This overrides the dateformat (but not dayformat,monthformat...) above #LongDisplayDatePic="%y.%m.%d" # As above, except that omitting this defaults to combining mode 12 (year only) # (the traditional short form) # Chinese style, BC if negative, no complex dates (100-04-03 BC) #ShortDisplayDate=1,1,0,10,11,0 # To use a combining format not already supported, such as the period format # This overrides the dateformat (but not dayformat,monthformat...) above #ShortDisplayDatePic="%y.%m.%d" # Trailing string to append when truncating events in short display # (eg, to see "b. 1995-5-3, Miss..." instead of "b. 1995-5-3, Missour") #ShortOmitString=... # Width to indent pedigree ancestor & descendent views, and gedcom view #GedcomDisplayIndent=2 # default is 6 # Set the default data for new persons #INDIREC=0 INDI\n1 NAME Fname/Surname/\n1 SEX MF\n1 BIRT\n 2 DATE\n 2 PLAC\n1 DEAT\n 2 DATE\n 2 PLAC\n1 SOUR # This sample version is the same as the default if none is given. # Set the default data for the body of a new family #FAMRECBODY=1 MARR\n 2 DATE\n 2 PLAC\n 2 SOUR # This sample version is the same as the default if none is given. # Note that for family, the program inserts the fam, spouse, # and children tags, so this is only data besides those tags. # Set the default data for new sources #SOURREC=0 SOUR\n1 REFN\n1 TITL Title\n1 AUTH Author # This sample version is the same as the default if none is given. # Set the default data for new events #EVENREC=0 EVEN\n1 REFN\n1 DATE\n1 PLAC\n1 INDI\n 2 NAME\n 2 ROLE\n1 SOUR # This sample version is the same as the default if none is given. # Set the default data for new other records #OTHR=0 XXXX\n1 REFN # This sample version is the same as the default if none is given. # Specify the SUBM line for the header (of GEDCOM exports) # This is meant to specify who submitted the record. #HDR_SUBM=1 SUBM # This sample version is the same as the default if none is given. # Specify the GEDC line for the header (of GEDCOM exports) # This is meant to specify what version of GEDCOM was used. #HDR_GEDC=1 GEDC\n2 VERS 5.5\n2 FORM LINEAGE-LINKED # This sample version is the same as the default if none is given. # Specify the GEDC line for the header (of GEDCOM exports) # This is meant to specify what character set was used in the data. #HDR_CHAR=1 CHAR ASCII # The default is the actual encoding used to output the GEDCOM # so this should not normally be overridden # Set the visit history size (# of entries remembered in visit history) #HistorySize=20 # Valid values are 0 through 9999. # This sample line is the same as the default if none is given. # Enable persistent history (remember in database between uses). #SaveHistory=1 # Valid values are 0 (don't save) and 1 (do save). # Default is 0. # Keep traversal back & forth between records off the history list. #HistoryBounceSuppress=5 # This would prevent a record from being added to the history list if # it is already present within the last 5 entries. # Valid values are 0 through 99. # Default is 1. # Disallow persons without name records (legacy 3.0.10 & earlier behavior) #RequireNames=1 # Default is 0 (nameless records allowed) # Specify language for message catalog #UiLocaleMessages=en # Default is normal gettext behavior (deduces it from environment) # This is injected into the LANG variable # Specify locale for collation #UiLocaleCollate=en # Default is normal deduction from environment # Specify locale for collation in reports #RptLocaleCollate=en # Default is normal deduction from environment # Coded charset name for GUI use # This is a libiconv charset name # And this is passed to gettext (libintl) # Default is none #GuiCodeset=8859-1 # Default is none # Suffix for codeset when converting to GUI codeset #GuiCodesetOutput=//TRANSLIT # Default is none # Coded charset name for editor use #EditorCodeset=8859-1 # Default is none # Coded charset name for report output #ReportCodeset=8859-1 # Default is none # Coded charset name for reading & writing GEDCOm files #GedcomCodeset=8859-1 # Default is none # For systems experiencing faulty screen erases (eg, RedHat Linux) #ForceScreenErase=1 # Option to invoke in-program report language debugger on report errors # This allows examination of the local symbols #debugger=1 # Default is 0 # Expand record references to refn links if available # Eg, change 1 SOUR @S20@ to 1 SOUR <1850.Census> during edit #ExpandRefnsDuringEdit=1 # Default is 0 # Add comment after pointers (during edit) (default is 0) # Eg, change 1 HUSB @I1@ to 1 HUSB @I1@ {{ John/SMITH }} #AnnotatePointers=1 # Display surnames in all caps on screen # Eg, display John/Smith as John/SMITH # Disable this if UTF-8 capitalization is failing #UppercaseSurnames=0 # Default is 1 # Display database key tags for individuals or families (i or f) # So instead of (1999) for an individual's key, you'd get (i1999) # This may help with on-screen positioning of keys when # Arabic/Hebrew characters (in UTF-8) are used for names. # Default is 0 (feature off) #DisplayKeyTags=1 # Where to find an iconv dll (only for MS-Windows) #iconv.path:=C:\Program Files\Common Files\gnu\iconv.dll # Not needed if it is named iconv.dll & is on the path. # Where to find a gettext dll (only for MS-Windows) #gettext.path:=C:\Program Files\Common Files\gnu\libintl.dll # Not needed if it is named gettext.dll & is on the path. # What locale directory to use LocaleDir:=%llroot%\locale # default is depend on gettext's default # Global translation tables # Syntax is TT.which.ics.n # Where TT is always TT # which is the codename (MEDIN=Editor to Internal) # ics is the internal codeset (eg, UTF-8) # and n starts at 1 #TT.MEDIN.UTF-8.1=UTF-8.Greek.Input.tt #TT.MINED.UTF-8.1=UTF-8.Greek.Output.tt # Default is none # Display absolute path to database #FullDbPath=1 # This is disabled by default # Enable this to disambiguate databases in different paths # Disable this if your home directory is deep (eg, on MS-Windows) # Set default properties (user options) for new databases #NewDbProps=codeset=UTF-8 # Default is none # (Windows) Set codepage to use when reading from console #ConsoleCodepage=1250 lifelines-3.0.61/lines.cfg.input0000700002540200244210000002436010620076004016672 0ustar prappDomain Usersdnl this file is processed by m4. dnl to generate the windows version dnl m4 -D WINDOWS lines.cfg.input > lines.cfg dnl to generate a linux/unix version dnl m4 lines.cfg.input > .linesrc # config file for LifeLines # .linesrc under UNIX, lines.cfg under Windows # Lines beginning with # are ignored (comments) # As are blank lines # So some of the examples are commented out... # # 2007-05-08 # # Note that paths are assigned with := # Other values are assigned with = # The distinction is that using plain = means that # backslash escapes are enabled: # \t means tab, \n means carriage return # We don't want these enabled in paths, because they might # occur naturally in path names under MS-Windows. # # All variables here are available to report programs # via the report language function getproperty, so, for # example, the user email property (which is built-in under # UNIX), may be specified here like so: #user.email=user@domain.name # Similarly the user fullname property (also built-in under # UNIX) may be specified like so: #user.fullname=myname # the user address property is a one line version of your address #user.address=1234 Some Street, Some City, State 00000 # the user phone property is your phone number #user.phone=(800)-555-1234 # the user url property is for your url (if you have one) #user.url=http://mylifelines.genealogy.net # Set a variable for the lifelines root # Variables have % at start and end ifdef(`WINDOWS',%llroot%:=\lifelines,%llroot%=/home/user/LifeLines) # Root path for utility/read command ifdef(`WINDOWS', InputPath:=%llroot% , #InputPath=%llroot% ) # Place to store output of utility/save ifdef(`WINDOWS', LLARCHIVES:=%llroot%\Archives , #LLARCHIVES=%llroot%/Archives )dnl # Path(s) to search for databases ifdef(`WINDOWS', LLDATABASES:=%llroot%\Databases , #LLDATABASES=%llroot%/Databases )dnl # (New databases will be created in first directory of this path.) # (LLNEWDBDIR {Path for new databases} is obsolete) # Path for report programs ifdef(`WINDOWS', LLPROGRAMS:=%llroot%\Programs , #LLPROGRAMS=%llroot%/Reports )dnl # Path for report output ifdef(`WINDOWS', LLREPORTS:=%llroot%\Outputs , #LLREPORTS=%llroot%/Outputs )dnl ifdef(`WINDOWS', # Editor (notepad by default) #LLEDITOR:=notepad.exe # Path for reference translation tables TTPATH:=%llroot%\tt , # Editor #LLEDITOR=/usr/local/vi # Path for global translation tables #TTPATH=%llroot%/tt )dnl # Path for exported translation tables (from a db) ifdef(`WINDOWS', LLTTEXPORT:=%llroot%\ttdb , #LLTTEXPORT=%llroot%/ttdb )dnl # Refuse to execute system calls from report programs (default allowed) ifdef(`WINDOWS', DenySystemCalls=1 , #DenySystemCalls=1 )dnl # Log file for report errors (default none) ifdef(`WINDOWS', #ReportLog:=%llroot%\rpterrs.log , #ReportLog=%llroot%/reporterrs.log )dnl # Log file for crashes for llines (default none) ifdef(`WINDOWS', #CrashLog_llines:=%llroot%\crashes_llines.log , #CrashLog_llines=%llroot%/crashes_llines.log )dnl # Log file for crashes for llexec (default none) ifdef(`WINDOWS', #CrashLog_llexec:=%llroot%\crashes_llexec.log , #CrashLog_llexec=%llroot%/crashes_llexec.log )dnl # Log file for import errors (default errs.log) ifdef(`WINDOWS', #ImportLog:=%llroot%\import.log , #ImportLog=%llroot%/import.log )dnl # Log file for report pvalue leaks (for debugging) ifdef(`WINDOWS', #ReportLeakLog:=%llroot%\reportleaks.log , #ReportLeakLog=%llroot%/reportleaks.log )dnl # Delay (secs) between each report error on screen (default 0) #PerErrorDelay=4 # Print more detailed call stack for each report error #FullReportCallStack=1 # dayfmt,monthfmt,yearfmt,datefmt,erafmt,complexfmt # see programmers reference for stddate for these # 2,3,0,0,1,1 is GEDCOM style (1 AUG 1945) with complex dates # 2,5,0,1,1,1 is American style (AUGUST 1, 1945) with complex dates # 1,1,0,9,1,1 is Chinese style (1945/04/25) with complex dates # 1,1,0,10,2,1 is Chinese style with dashes (1945-04-05 A.D.) with explicit origin & complex dates # 2,2,0,13,1,1 is the Swedish style (1/8 1945) # Omit this entirely to default to dates as given in GEDCOM #LongDisplayDate=1,1,0,9,1,1 # To use a combining format not already supported, such as the period format # This overrides the dateformat (but not dayformat,monthformat...) above #LongDisplayDatePic="%y.%m.%d" # As above, except that omitting this defaults to combining mode 12 (year only) # (the traditional short form) # Chinese style, BC if negative, no complex dates (100-04-03 BC) #ShortDisplayDate=1,1,0,10,11,0 # To use a combining format not already supported, such as the period format # This overrides the dateformat (but not dayformat,monthformat...) above #ShortDisplayDatePic="%y.%m.%d" # Trailing string to append when truncating events in short display # (eg, to see "b. 1995-5-3, Miss..." instead of "b. 1995-5-3, Missour") #ShortOmitString=... # Width to indent pedigree ancestor & descendent views, and gedcom view #GedcomDisplayIndent=2 # default is 6 # Set the default data for new persons #INDIREC=0 INDI\n1 NAME Fname/Surname/\n1 SEX MF\n1 BIRT\n 2 DATE\n 2 PLAC\n1 DEAT\n 2 DATE\n 2 PLAC\n1 SOUR # This sample version is the same as the default if none is given. # Set the default data for the body of a new family #FAMRECBODY=1 MARR\n 2 DATE\n 2 PLAC\n 2 SOUR # This sample version is the same as the default if none is given. # Note that for family, the program inserts the fam, spouse, # and children tags, so this is only data besides those tags. # Set the default data for new sources #SOURREC=0 SOUR\n1 REFN\n1 TITL Title\n1 AUTH Author # This sample version is the same as the default if none is given. # Set the default data for new events #EVENREC=0 EVEN\n1 REFN\n1 DATE\n1 PLAC\n1 INDI\n 2 NAME\n 2 ROLE\n1 SOUR # This sample version is the same as the default if none is given. # Set the default data for new other records #OTHR=0 XXXX\n1 REFN # This sample version is the same as the default if none is given. # Specify the SUBM line for the header (of GEDCOM exports) # This is meant to specify who submitted the record. #HDR_SUBM=1 SUBM # This sample version is the same as the default if none is given. # Specify the GEDC line for the header (of GEDCOM exports) # This is meant to specify what version of GEDCOM was used. #HDR_GEDC=1 GEDC\n2 VERS 5.5\n2 FORM LINEAGE-LINKED # This sample version is the same as the default if none is given. # Specify the GEDC line for the header (of GEDCOM exports) # This is meant to specify what character set was used in the data. #HDR_CHAR=1 CHAR ASCII # The default is the actual encoding used to output the GEDCOM # so this should not normally be overridden # Set the visit history size (# of entries remembered in visit history) #HistorySize=20 # Valid values are 0 through 9999. # This sample line is the same as the default if none is given. # Enable persistent history (remember in database between uses). #SaveHistory=1 # Valid values are 0 (don't save) and 1 (do save). # Default is 0. # Keep traversal back & forth between records off the history list. #HistoryBounceSuppress=5 # This would prevent a record from being added to the history list if # it is already present within the last 5 entries. # Valid values are 0 through 99. # Default is 1. # Disallow persons without name records (legacy 3.0.10 & earlier behavior) #RequireNames=1 # Default is 0 (nameless records allowed) # Specify language for message catalog #UiLocaleMessages=en # Default is normal gettext behavior (deduces it from environment) # This is injected into the LANG variable # Specify locale for collation #UiLocaleCollate=en # Default is normal deduction from environment # Specify locale for collation in reports #RptLocaleCollate=en # Default is normal deduction from environment # Coded charset name for GUI use # This is a libiconv charset name # And this is passed to gettext (libintl) # Default is none #GuiCodeset=8859-1 # Default is none # Suffix for codeset when converting to GUI codeset #GuiCodesetOutput=//TRANSLIT # Default is none # Coded charset name for editor use #EditorCodeset=8859-1 # Default is none # Coded charset name for report output #ReportCodeset=8859-1 # Default is none # Coded charset name for reading & writing GEDCOm files #GedcomCodeset=8859-1 # Default is none # For systems experiencing faulty screen erases (eg, RedHat Linux) #ForceScreenErase=1 # Option to invoke in-program report language debugger on report errors # This allows examination of the local symbols #debugger=1 # Default is 0 # Expand record references to refn links if available # Eg, change 1 SOUR @S20@ to 1 SOUR <1850.Census> during edit #ExpandRefnsDuringEdit=1 # Default is 0 # Add comment after pointers (during edit) (default is 0) # Eg, change 1 HUSB @I1@ to 1 HUSB @I1@ {{ John/SMITH }} #AnnotatePointers=1 # Display surnames in all caps on screen # Eg, display John/Smith as John/SMITH # Disable this if UTF-8 capitalization is failing #UppercaseSurnames=0 # Default is 1 # Display database key tags for individuals or families (i or f) # So instead of (1999) for an individual's key, you'd get (i1999) # This may help with on-screen positioning of keys when # Arabic/Hebrew characters (in UTF-8) are used for names. # Default is 0 (feature off) #DisplayKeyTags=1 # Where to find an iconv dll (only for MS-Windows) #iconv.path:=C:\Program Files\Common Files\gnu\iconv.dll # Not needed if it is named iconv.dll & is on the path. # Where to find a gettext dll (only for MS-Windows) #gettext.path:=C:\Program Files\Common Files\gnu\libintl.dll # Not needed if it is named gettext.dll & is on the path. # What locale directory to use ifdef(`WINDOWS', LocaleDir:=%llroot%\locale , #LocaleDir:=/usr/share/locale )dnl # default is depend on gettext's default # Global translation tables # Syntax is TT.which.ics.n # Where TT is always TT # which is the codename (MEDIN=Editor to Internal) # ics is the internal codeset (eg, UTF-8) # and n starts at 1 #TT.MEDIN.UTF-8.1=UTF-8.Greek.Input.tt #TT.MINED.UTF-8.1=UTF-8.Greek.Output.tt # Default is none # Display absolute path to database #FullDbPath=1 # This is disabled by default # Enable this to disambiguate databases in different paths # Disable this if your home directory is deep (eg, on MS-Windows) # Set default properties (user options) for new databases #NewDbProps=codeset=UTF-8 # Default is none ifdef(`WINDOWS', # (Windows) Set codepage to use when reading from console #ConsoleCodepage=1250 )dnl lifelines-3.0.61/Makefile.am0000700002540200244210000000331710622150056015776 0ustar prappDomain Users# Process this file with automake to produce Makefile.in ACLOCAL_AMFLAGS = -I build/autotools -I build/gettext # intl must come before src since we link with it! SUBDIRS = build intl po win32 src docs reports tt EXTRA_DIST = .linesrc lines.cfg lines.cfg.input \ COPYING LICENSE INSTALL NEWS README AUTHORS ABOUT-NLS \ README.AUTOCONF README.DEVELOPERS README.INTERNATIONAL \ README.LAYOUT \ README.MAINTAINERS README.MAINTAINERS.rpm \ README.MAINTAINERS.win32 CLEANFILES = .linesrc lines.cfg docdir = $(datadir)/doc/lifelines doc_DATA = $(EXTRA_DIST) PERL=perl lines.cfg: lines.cfg.input m4 -D WINDOWS $^ | $(PERL) -p -e 's/\n/\r\n/' > $@ .linesrc: lines.cfg.input m4 -U WINDOWS $^ > $@ # Generate .cvsignore from .cvsignore_CVS and .cvsignore_local .cvsignore: .cvsignore_CVS .cvsignore_local cat .cvsignore_CVS .cvsignore_local > t-$@ mv t-$@ $@ # ChangeLog autogenerated from CVS log messages # # -b Show brach information # --gmt Use GTM timezone, not local time # --window 7200 Use a two hour window when grouping log messages # --log-opts -d'...;' < $$f > $$f.tmptmp; \ mv $$f.tmptmp $$f; \ done lifelines-3.0.61/Makefile.in0000700002540200244210000005555410656416641016035 0ustar prappDomain Users# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Process this file with automake to produce Makefile.in srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ LIBOBJDIR = DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/configure $(top_srcdir)/intl/Makefile.in \ ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL NEWS \ build/autotools/README build/autotools/config.guess \ build/autotools/config.rpath build/autotools/config.sub \ build/autotools/depcomp build/autotools/install-sh \ build/autotools/missing build/autotools/mkinstalldirs subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/gettext/codeset.m4 \ $(top_srcdir)/build/gettext/gettext.m4 \ $(top_srcdir)/build/gettext/glibc21.m4 \ $(top_srcdir)/build/gettext/iconv.m4 \ $(top_srcdir)/build/gettext/intdiv0.m4 \ $(top_srcdir)/build/gettext/inttypes-pri.m4 \ $(top_srcdir)/build/gettext/inttypes.m4 \ $(top_srcdir)/build/gettext/inttypes_h.m4 \ $(top_srcdir)/build/gettext/isc-posix.m4 \ $(top_srcdir)/build/gettext/lcmessage.m4 \ $(top_srcdir)/build/gettext/lib-ld.m4 \ $(top_srcdir)/build/gettext/lib-link.m4 \ $(top_srcdir)/build/gettext/lib-prefix.m4 \ $(top_srcdir)/build/gettext/progtest.m4 \ $(top_srcdir)/build/gettext/stdint_h.m4 \ $(top_srcdir)/build/gettext/uintmax_t.m4 \ $(top_srcdir)/build/gettext/ulonglong.m4 \ $(top_srcdir)/build/autotools/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno configure.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/build/autotools/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = intl/Makefile SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ install-recursive installcheck-recursive installdirs-recursive \ pdf-recursive ps-recursive uninstall-info-recursive \ uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(docdir)" docDATA_INSTALL = $(INSTALL_DATA) DATA = $(doc_DATA) ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOCS_TARGET = @DOCS_TARGET@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POSUB = @POSUB@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SGMLTOOLS = @SGMLTOOLS@ SHELL = @SHELL@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ YACC = @YACC@ YFLAGS = @YFLAGS@ ac_ct_CC = @ac_ct_CC@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = $(datadir)/doc/lifelines dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ ACLOCAL_AMFLAGS = -I build/autotools -I build/gettext # intl must come before src since we link with it! SUBDIRS = build intl po win32 src docs reports tt EXTRA_DIST = .linesrc lines.cfg lines.cfg.input \ COPYING LICENSE INSTALL NEWS README AUTHORS ABOUT-NLS \ README.AUTOCONF README.DEVELOPERS README.INTERNATIONAL \ README.LAYOUT \ README.MAINTAINERS README.MAINTAINERS.rpm \ README.MAINTAINERS.win32 CLEANFILES = .linesrc lines.cfg doc_DATA = $(EXTRA_DIST) PERL = perl # ChangeLog autogenerated from CVS log messages # # -b Show brach information # --gmt Use GTM timezone, not local time # --window 7200 Use a two hour window when grouping log messages # --log-opts -d'.../dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) $(mkdir_p) $(distdir)/build/autotools $(distdir)/build/gettext $(distdir)/intl $(distdir)/po @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(mkdir_p) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ distdir) \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ --with-included-gettext \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-docDATA install-exec-am: install-info: install-info-recursive install-man: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-docDATA uninstall-info-am uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ check-am clean clean-generic clean-recursive ctags \ ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \ dist-tarZ dist-zip distcheck distclean distclean-generic \ distclean-hdr distclean-recursive distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-docDATA install-exec install-exec-am \ install-info install-info-am install-man install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic \ maintainer-clean-recursive mostlyclean mostlyclean-generic \ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-docDATA uninstall-info-am lines.cfg: lines.cfg.input m4 -D WINDOWS $^ | $(PERL) -p -e 's/\n/\r\n/' > $@ .linesrc: lines.cfg.input m4 -U WINDOWS $^ > $@ # Generate .cvsignore from .cvsignore_CVS and .cvsignore_local .cvsignore: .cvsignore_CVS .cvsignore_local cat .cvsignore_CVS .cvsignore_local > t-$@ mv t-$@ $@ ChangeLog.new: ChangeLog.usermap $(CVS2CL) -b --gmt --log-opts "-d'1999-12-31< now'" --window 7200 \ --usermap ChangeLog.usermap --ignore ChangeLog -f $@ # # Keep the .cvsignore files sorted, and use this target to do it. # sort-cvsignore: for f in `find . -name .cvsignore`; do \ $(PERL) -e 'print sort <>;' < $$f > $$f.tmptmp; \ mv $$f.tmptmp $$f; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lifelines-3.0.61/NEWS0000700002540200244210000004526610655641104014457 0ustar prappDomain UsersLifeLines Source Release, Version 3.0.61 http://lifelines.sourceforge.net ------------------------------------------------------------------------- Changes in 3.0.61 (stable) =========================== - Improvements to configure finding curses - More strings made ready for internationalization Changes in 3.0.60 (stable) =========================== - Minor doc tweaks, and packaging tweaks for Debian New features added in 3.0.58 (beta) ============================ - Implement going up & down stack in report debugger Bug fixes in 3.0.58 (beta) ============================ - Fix inlist to handle empty lists correctly - Fix not to crash if report doesn't unlock records Bug fixes in 3.0.57 (beta) ============================ - Fix LocaleDir settings (broken again just as 3.0.56 released) Bug fixes in 3.0.56 (beta) ============================ - Write correct CHAR value to header when exporting GEDCOM, and write UTF-8 BOM under windows when exporting to UTF-8. - Read GEDCOM UTF-8 BOM if present - Use GEDCOM CHAR value if present - Write UTF-8 BOM to edit files under windows, when appropriate. - Write UTF-8 BOM to reports under windows, when appropriate. - Fix so setting LocaleDir (or UiLocaleDir) works from database options. Bug fixes in 3.0.55 (beta) ============================ - Fix name manipulation for non-ASCII letters (fixes S Hacek display problems under MS-Windows) Bug fixes in 3.0.54 (beta) ============================ - Fix bug in main menu exit option Q New features added in 3.0.53 (beta) ============================ - New Spanish translation by Larry Hamilton Bug fixes in 3.0.53 (beta) ============================ - Fix strsave assert when called by llrpt_extractdate while dereferencing null string (sf bug 1583327) - Update verify.ll to version 13 (Jim Eggert) - Update some other reports from Jim Eggert - Fix fpattern compilation issue on NETBSD New features added in 3.0.52 (beta) ============================ - New @ escape from browse prompt to full database search - Add author & title to full database search Bug fixes in 3.0.52 (beta) ============================ - Fix buffer overflow in browse list (sourceforge patch by Andreas Kirschbaum) New features added in 3.0.51 (beta) ============================ - New report functions date2jd, dayofweek, jd2date, setdate. Bug fixes in 3.0.51 (beta) ============================ - Fix add to list (was repeating first person instead of adding). - Fix incorrect sporadic ASSERT in merge ("Tried to add already-deleted record...") - Fix handling of overlong (or unterminated) string constants to ASSERT instead of overwriting memory - Fix report value function handling of strings inside created nodes - Fix report value bug in extractdate with cascaded calls without set assignment New features added in 3.0.50 ============================ - The spouses() iterator has been overloaded to iterate over the spouses of an individual if the first argument is an individual, and to iterate over all the husbands/wives if the first argument is a family. The two uses also require a different number of arguments, Refer to the report manual for details. - New Trigonometric and Spherical calculation functions added to the report language, including sin, cos, tan, arcsin, arccos, arctan; conversion routines dms2dec and deg2dms and a spherical distance estimator spdist. Refer to the report manual for details. Bug fixes in 3.0.49 ============================ - Deleting an individual would remove younger siblings from family New features added in 3.0.48 ============================ - Formatted dates now display GEDCOM date phrases raw - Use cursesw where available, to work correctly with UTF-8 locales New features added in 3.0.47 (beta) ============================ - Adjustable indent (GedcomDisplayIndent) in pedigree (sf#1224300) - Confirm message before switching spouses or children (sf#1094751) - Enter key works in database list (sf#1227607 bug) - Esperanto translation - New day format & month format 21 (produces "00" if missing) Bug fixes in 3.0.47 (beta) ============================ - ASSERT crash trying to delete family (sf#1242080 bug) Changes for 3.0.46.1 (stable) ============================ - Updated Swedish translation. - Fixed German translation - Improved INSTALL doc New features added in 3.0.46 (beta) ============================ - Import warns if FAMS, FAMC, HUSB, or WIFE occur where not expected. Bug fixes in 3.0.46 (beta) ============================ - ASSERT crash if automatically add source to family record (sf#1222702) - ASSERT crash due to FAMS pointer in FAM record (sf#1223357) - outfile doesn't work in llexec (sf#1223390) New features added in 3.0.45 (beta) ============================ - Kinyarwanda translation Bug fixes in 3.0.45 (beta) ============================ - Fixed count variable in spouses and families report iterations (sf#1219200) - Fixed crash upon merging two families (sf#1219209) - Fixed memory leaks Bug fixes in 3.0.44 (beta) ============================ - Fixed browing to family (for empty & non-traditional families) - Remove keytonod record ASSERT which is firing - Fixed some memory leaks Bug fixes in 3.0.43 (beta) ============================ - Fixed some memory leaks - ASSERT failures browsing from family to indi New features added in 3.0.42 (beta) ============================ - empty() report function can also be used on tables and sets - dbverify can fix bad family linking references - dbverify can fix bad deleted/undeleted record status Bug fixes in 3.0.42 (beta) ============================ - Fixed ASSERT failure adding 65th skipped key at import - Fixed some memory leaks New features added in 3.0.41 (beta) ============================ - ancestorset and parentset now support non-traditional families Bug fixes in 3.0.41 (beta) ============================ - Crash on some systems with ncurses 5.4 - ASSERT failure if report calls undefined function New features added in 3.0.40 (beta) ============================ - Delete any record menu choice - length(SET/TABLE/LIST) report function Bug fixes in 3.0.40 (beta) ============================ - Fixed bug in src/liflines/Makefile.am failing compilation (finding libintl.h) - Fixed merge function, which locked up in infinite loop in 3.0.39 New features added in 3.0.39 (beta) ============================ - New report function test(mode, file) Bug fixes in 3.0.39 (beta) ============================ - Cache bug causes people to be confused intermittently (sf#1015745) - Add source/event/other could lead to corruption (sf#1059724) - Importing GED file with keys with leading zeros (eg, I01) led to crash (sf#1094199) - A bad xref (eg, "@I23") would cause report engine to crash (sf#1093628) - Inserting 0 into a table could lead to crash (sf#954704) - Removing unsexed spouse led to ASSERT (sf#1097583,sf#1097608) - Removing empty child led to ASSERT (sf#1097629) New features added in 3.0.38 (beta) ============================ - Two-stage tt conversion via UTF-8 - No more indirect cache - Unlimited #people may be added to lists and tables (during reports) - Polish translation - Dutch translation Bug fixes in 3.0.38 (beta) ============================ - Fix nspouses - Fix display of TTPATH in u/c - Fix uppercasing of non-ASCII in non-UTF-8 case Bug fixes in 3.0.37 (stable & beta) ============================ - AnnotatePointers and ExpandRefnsDuringEdit work together New features added in 3.0.36 (beta) ============================ - New option AnnotatePointers - New option DisplayKeyTags Bug fixes in 3.0.36 (beta) ============================ - Fix extra .ged appended to short archives Bug fixes in 3.0.35 (beta) ============================ - Fix name corruption bug in 3.0.33 and 3.0.34. Bug fixes in 3.0.34 (beta) ============================ - Fix internal translation tables. Bug fixes in 3.0.33 (beta) ============================ - Fix crash when opening second database in same session. - Fix browsing */surname for non-ASCII first initials. - Fix all edits of indi to expand refns (not all were doing it). - Prepend UTF-8 BOM for file passed to editor on Windows (when appropriate). New features added in 3.0.32 (beta) ============================ - Added the dup() function, which does a "deep" copy of a list. - New directories created in first directory in LLDATABASES path. Bug fixes in 3.0.32 (beta) ============================ - Fix translation table menu to show menu keys. - Fix basm and barm to not say "bapt" in birth display. - Peter Fales' bugfix for browsing to lower family from tandem. - Bugfix for set functions deleting temporary values too early (causing ASSERT). - Compile fix in wcslen.c (to fix compile on MacOS, re: va_list in arch.h). Bug fixes in 3.0.31 (beta) ============================ - Bugfix for crash if one argument passed to (r)sort. - Call legacy (built-in) translation tables New features added in 3.0.30 (beta) ============================ - Some low-level btree validation in dbverify Bug fixes in 3.0.29 (stable) ============================ - Import will strip out empty families, and browse will ASSERT - Import will not import GEDCOMs with more than 50 lines HEAD Bug fixes in 3.0.28 (stable) ============================ Fix tandem mode to not default to quit (bug#717421). Change Greek sigma lowercasing, as recommended by Georg Skillas. Remove extraneous codeset conversion in str_to_indiseq (fix bug 724761). Bugfix for illegal character handling in iconv wrapper for Win32. Change temp file on Win32 to end in .txt extension (so SaveAs UTF-8 works in notepad). Fix pronouns in German message catalog. Bug fixes in 3.0.27 (stable) ============================ - ASSERT failure searching by name - Cache overflow New features added in 3.0.26 (stable) ============================ - New report functions sort & rsort. Bug fixes in 3.0.26 (stable) ============================ - Codeset translation incorrect in menu items New features added in 3.0.25 (stable) ============================ - Tries harder to diplay info on birth & death - HTML & TEX subcodings added to translation tables - Regularized report summaries (in report subdir) - Reports elapsed time during report execution Bug fixes in 3.0.25 (stable) ============================ - Report NODE references lock person in cache - keypad fix to prevent crash on Solaris - Allow user to read error before invoking report debugger - Fix misparsing of BC dates without month - report memory leaks fixed - Fix addnode, detachnode, writeindi, writefam (report functions) - Fix crash editing place abbrev table - Switch to uilocale for ui functions during report interpretation Bug fixes in 3.0.24 (stable) ============================ - Fixed broken use of last person for add child - Fixed compilation on Darwin - Fixed list functions New features added in 3.0.23 (stable) ============================ - internal use of UTF-8 has significant improvements - report functions upper & lower fixed for UTF-8 - ANSEL GEDCOMs may be read (using UTF-8) - HTML reports using character entities may be written (using UTF-8) Bug fixes in 3.0.23 (stable) ============================ - Fixed crash when using $$ to browse to references New features added in 3.0.22 (stable) ============================ - Redirected input works on Win32 version - New option R to choose from list of GEDCOM input files - Config file variables - Danish translation - Simpler win32 binary package (includes gettext & iconv dlls, and translations unzip into place) New features added in 3.0.21 (stable) ============================ - New commandline option -I to set property name & value Bug fixes in 3.0.21 (stable) ============================ - Fix to handle bad system comparison without ASSERT in indiseq.c - Fix broken -x option (run report directly) Bug fixes in 3.0.20 (stable) ============================ - Fix initialization of locale New features added in 3.0.19 (stable) ============================ - binary rpm includes message files - More complete French translation - Fix for menu item translation in browse screens New features added in 3.0.18 (stable) ============================ - Directory structure changes to group sources in src and build stuff in build - Some improvements in collation & partial UTF-8 support - French translation (po file) New features added in 3.0.17 (stable) ============================ - Change history added (analogous to visit history). Both available off search menu, or via commands in browse menus. - Option to quit current database added to main menu. - Iconv conversion between Internal (database) and Gui, Editor, Report, & Gedcom codesets. Bug fixes in 3.0.17 (stable) =================== - Browsing to a named list would crash. - Saving a record with blank REFN would crash. - Couldn't change the value of a top level other node (not INDI, FAM, EVEN, or SOUR). Bug fixes in 3.0.16 (stable) =================== - A fatal crash was triggered if last item was popped off a list in a report. New features added in 3.0.15 (stable) ============================ - Option to list all databases at startup - Shift page keys to move quickly through long lists - Prompt after edit if unresolved references Bug fixes in 3.0.15 (stable) =================== - Import was validing but not importing from UTF-8 files with UTF-8 BOM. New features added in 3.0.13 (stable) ============================ - Arrow keys, page keys, home/end keys supported in lists & list browse. New Features Added in 3.0.11 (stable) ============================ - INDIs without NAMEs are now allowed. - Records (INDI etc) implicitly convertible to NODEs in reports. New Features Added in 3.0.7 =========================== - New Display-to-Internal translation table. - "z" zip browse command changed to "zi" zip for indi and "zz" zip for any records. Zip commands added to auxiliary browse screen (the browse used for SOUR,EVEN,OTHR records). - %s,%e,%x options to add SOUR,EVEN,OTHR records directly from browse screens, and optionally insert references automatically. - config file variables & user options made consistent - Variety of new config options. - New date modes 12- year only, old short form 13- dd/mo yr 14- as in GEDCOM (truncated to 50 chars) - A preferred date mode may be selected for use in LifeLines curses UI. - Variable column menus. Menus at bottom of screen (ie, browse modes) may be more than 3 column, and this may be changed on the fly. At startup the current width of the screen is used to initialize number of menu columns (80 characters gets 3 columns, 120 get 5 columns). - Msg list. Output messages are buffered & can be reviewed in list, if if more than one occurs during a given command. - UTF-8 support added to report substr & trimname commands. This is enabled by setting the useroption "codeset" to "UTF-8". - Detail area in popup lists (accessible via [ and ] keys). - New report date commands: titlecase, yearformat, eraformat, datepic complexpic - New report command to help debug reports: global(explicitvars) - New commandline arguments for batch files on MS-Windows: -x and -o Bug fixes in 3.0.7 ================== - interp_indisetloop & interp_forlist deleted evaluated value too early. (book-latex.ll would crash from line beginning: forindiset(intersect(...) - dbverify reported soundex-equivalent names for one indi as duplicate names - traverse could crash due to index and/or buffer falling out of cache - bugfixes in child_indiseq & difference_indiseq. - _substring & llindex subject to buffer overflow - Import not closing file handle. striplead could read before beginning of buffer. - upper or lower could overflow internal buffers - NULL PSTRINGs (eg, from getindi(), or father()) could crash string functions - fornodes wasn't handling nodes with no children correctly - was double-deleting strings for filenames named in include statements - added readonly message when adding/editing S/E/X records (instead of ASSERT coredump) - generic_to_list_string didn't handle NULL keys because of bug - menuchoose would crash if non-string list item - Was not saving changes to value of top-level node when editing (eg, text directly in the NOTE line of an 'other' NOTE) - Removed most pvalue leaks in running program(s) - (Windows) Notepad was appending .txt to temp file, preventing creation of new trans tables or user options tables - (Windows) Editing user options or trans tables could crash because of CR/LF translation causing fread to not report filesize number of bytes - Deep recursive search with children (or similar) could flush cache & crash (Now it will report cache overflow & fail, instead of failing unpredictably with no explanation) - (GEDCOM compliant) French Republic & Hebrew dates were not parsed correctly. New Features Added in 3.0.6 (stable) =========================== - New data in keyfile detects database from platform of wrong alignment - New environment variable: LLNEWDBDIR - New gengedcomstrong & weak report functions - New report functions: 'lastindi' and 'lastfam' - New name scan option, with wildcards (refer fpattern) (new 's' option on main menu) - Scrolling children (& spouses) in INDI & FAM browse ('++' marker at end of lines to indicate more info off-screen) (hotkeys '(' and ')' to scroll) - Direct to child navigation (hotkeys '1','2,','3',...) in INDI & FAM browse screens - Optional numbers in front of children in INDI & FAM screens (hotkey '#' toggles) - New report option lists available reports with summary info (new 'p' option on main menu) - Navigate in db order in INDI & FAM browse (& source & event & other browse) (hotkeys '+' and '-') - New browse sources, events, and others lists & gedcom mode view (from extra menu) - Cross-reference sources from INDI or FAM browse (hotkey '$') - New commandline argument to specify terminal size (eg, lines -u120,30) - New gedcom mode in indi & fam screens (hotkey '!') (hotkeys '(' and ')' to scroll) - Improved pedigree screen, with both ancestor & descendent modes and scrolling and adjustable generation depth (hotkey '&' to toggle ancestor/descendent) (hotkeys '[' and ']' to adjust generation depth) (hotkeys '(' and ')' to scroll) - New tool dbverify to check a database for many types of corruption - New paging & resizable & toggleable menus - New config file Bug fixes in 3.0.6 (stable) ================== - Merge code would produce ghost REFNs & NAMEs if they were edited - Ctrl-C from open database prompt would fail - Using menuchoose() during a report would corrupt screen display - array & stack overflow if delete a spouse from a family with 3+ spouses New Features in 3.0.4 ===================== - LifeLines Version 3.0.4, December 15, 1999, is now released under an MIT-style license. See the file LICENSE in included with this kit for the full license. lifelines-3.0.61/po/0000700002540200244210000000000010657071735014367 5ustar prappDomain Userslifelines-3.0.61/po/boldquot.sed0000700002540200244210000000033107477522374016723 0ustar prappDomain Userss/"\([^"]*\)"/“\1â€/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“â€/""/g s/“/“/g s/â€/â€/g s/‘/‘/g s/’/’/g lifelines-3.0.61/po/ChangeLog0000700002540200244210000000104107477212672016143 0ustar prappDomain Users2002-06-04 gettextize * Makefile.in.in: Upgrade to gettext-0.11.2. * Rules-quot: New file, from gettext-0.11.2. * boldquot.sed: New file, from gettext-0.11.2. * en@boldquot.header: New file, from gettext-0.11.2. * en@quot.header: New file, from gettext-0.11.2. * insert-header.sin: New file, from gettext-0.11.2. * quot.sed: New file, from gettext-0.11.2. * remove-potcdate.sin: New file, from gettext-0.11.2. 2002-02-22 gettextize * Makefile.in.in: Upgrade to gettext-0.10.40. lifelines-3.0.61/po/da.gmo0000700002540200244210000013065310656417753015475 0ustar prappDomain UsersÞ•EDl$¸0¹0 Ù0 æ0 ó011'161E1U1e1x1Œ1›1¬1³1¹1À1Ä1 Ö1 ä1ò12'2B2 `2 2Ž2 2·2É2Ý2î2ý23'3:3 @3N3 T3;b3(ž3 Ç3&Õ3'ü3&$4&K4&r4&™4À4Õ4ð455&+5+R5~5ƒ5‰5 Œ5%˜5$¾5=ã5%!6G6\6a6h6k6 o6y6’6­6À6ß6ñ627)77&a7(ˆ7±7¶72¹7Lì7&98-`8Ž8%¢8<È8/9.59d9,|94©9Þ9ô9%:):38:5l:6¢:6Ù:6;6G;;~;/º;.ê;<<=V<(”<)½<)ç<)=);='e=$=%²=%Ø=%þ=%$>"J>m>ˆ> ¦>Ç>-Ð> þ>"?,B?-o?)?$Ç?<ì?)@B@W@ t@•@±@-Ê@5ø@.A5A7IA A)‹A8µA*îA,B!FB hBB‰B.ÌB$ûB3 C2TC4‡C¼C!ÛC)ýC"'D*JD,uD ¢D6®DåDýD"E9E5>E5tE2ªE0ÝE2F6AF6xF"¯F(ÒF'ûF!#G!EGgG0‡G@¸GùG H,H JH TH+bHŽH7ŸH*×H/I2IEIUIgIƒI*–IÁIÚIñIJ$J3JCJSJ*cJŽJ¢J ´J¿JÒJìJ K#KCK&_K'†K)®K%ØK2þK 1L&RL.yL+¨L,ÔL4M16M3hM+œMÈM èM$ N,.N-[N5‰N2¿N4òN!'O-IO:wO)²O)ÜO,P#3P/WP$‡P¬PÇPÌP/èPQ+Q4Q7FQ4~Q³QÂQ áQ)ìQ*RAR!`R3‚R6¶R5íR6#S5ZS'S;¸S8ôS(-T!VT)xT7¢T!ÚT+üT*(U+SU,U,¬UÙU(îU(V+@VlV‹V6ªV1áV6W.JW'yW1¡W.ÓW-X80X3iX4X8ÒX6 Y)BY,lY1™Y*ËY3öY9*Z+dZ)Z7ºZ8òZ4+[.`[,[,¼[.é[2\%K\q\0„\4µ\ ê\ ø\]#]9] O]%]]ƒ]œ]$¸] Ý]<þ] ;^\^%l^,’^,¿^'ì^(_,=_j_)„_"®_Ñ_&ñ_2`0K`1|`2®`1á`1a1Eawa•a¬aÃaÔaåaõab b"+bNbbbwb{b„b‹b b›bŸb£bªb³b·b½bÁbÈb%Þbcc-c1c7c>c Ec Oc]cocvc{c„cŠc‘c§c¾c,×c-d2d 9dGdLdUd[d`dddzd'Žd¶dÉdÞdúdþde eee0e?eRe#ee‰ee!°eÒeÖeÛeëeff $f 1f>fMfgf nf{f”f¨f½f8Òf& g2gDgKgOgXg]geg kgwg|g…g g›g  gªg¾gÃgÌgÝgíg#h*'h)Rh|hh…hœh®h²hºhÎhÒh×hÛhàhýh ii%i>iRigi|iiªi®i²i ¸iÂiÆiËiÒi,çij&j,j1j8j³y1òy-$zRz+lz9˜zÒzçzðz{0"{3S{2‡{1º{0ì{0|<N|/‹|/»|:ë|?&}(f}'}&·}%Þ}%~*~J~j~‰~¨~Å~â~ÿ~!8N7W#!³0Õ3€.:€!i€>‹€Ê€å€ù€%)O(f7ÇÎ<ã ‚+'‚;S‚0‚6À‚0÷‚%(ƒQNƒ/ ƒ+ЃJüƒ?G„D‡„&Ì„'ó„4…(P…3y…5­… ã…3î…"†:†$W†|†<‚†3¿†1ó†/%‡0U‡4†‡3»‡+ï‡1ˆ-Mˆ&{ˆ&¢ˆ Ɉ4êˆE‰e‰{‰)‘‰ »‰ ȉ-Ö‰ŠAŠ-YŠ5‡Š½ŠÕŠæŠ"ýŠ ‹/4‹d‹ƒ‹"œ‹¿‹Ô‹î‹ Œ%Œ0>ŒoŒˆŒ ™Œ¦Œ»ŒØŒ÷Œ -%?e%¥!¾àõ#Ž#5Ž&YŽ.€Ž.¯Ž1ÞŽ#4Ge"{%ž-Ä-ò3 T&f.¼'Ü#‘(‘0H‘y‘’‘¦‘­‘6É‘’’’?+’1k’’%®’ Ô’0â’"“"6“$Y“9~“B¸“>û“8:”9s”­”=Í”A •M•"l•(•;¸•"ô•-–&E–'l–'”–'¼–ä–ó–—&-—T—k—4†—1»—:í—4(˜]˜.v˜9¥˜;ߘQ™7m™D¥™Aê™?,š1lš(žš2Çš-úš2(›;[›+—›*Û5î›;$œ>`œ1Ÿœ,Ñœ,þœ/+:[,–Ã7Ý<žRžaž pž1~ž°žÉžØž÷ž Ÿ Ÿ?ŸB]Ÿ Ÿ¾Ÿ$ן$üŸ!! %C "i !Œ ® &Ä ë ¡&¡4F¡1{¡1­¡1ß¡2¢1D¢2v¢!©¢Ë¢Þ¢í¢££%£7£M£!_££™£­£ ±£¼£ã È£Ó£×£Û£â£ë£ï£õ£ù£¤$¤<¤Q¤f¤j¤p¤w¤~¤ …¤’¤¢¤©¤®¤·¤½¤ĤÖ¤í¤2 ¥(=¥f¥ m¥y¥~¥‡¥Œ¥‘¥•¥«¥"¾¥á¥ó¥¦¦"¦&¦/¦5¦:¦T¦d¦x¦!Œ¦®¦Ħ'ݦ§ §§§4§D§^§m§§§¯§ ¶§Á§ݧð§¨9¨*V¨¨—¨¨¡¨©¨®¨¶¨ ¼¨Ǩ̨Õ¨ ܨê¨ ï¨ù¨ ©©©3©F©'^©(†©,¯©Ü©á©å©ú©ªªª-ª1ª6ª:ª ?ª`ªsªzª&~ª¥ª¸ªʪäªúª«««$«+«/«4«:«/M«}«•«›« «§«««´«¸«&Ñ«ø«ü«¬(¬#>¬ b¬l¬s¬x¬¬†¬¬¤¬!¬.ä¬ ­4­D­[­r­­¤­¼­Ù­ù­> ®=K®#‰®­® ±®»®® ƮԮ Ú®ä®è®&ý®$¯*¯=¯C¯\¯r¯ w¯¯ˆ¯¢¯¦¯«¯ïǯ!寰°!°6°K° P°\°a°i°-…°³°аè° ±-%±S±l±|±±ˆ±š±)ž'ˆkn,•Áà<¨ d²œ jC”>/÷á,þJ­jãT¯Ï-{‰Ô_Ÿ=yuc$ØÅùÝŸ`wô¿+/5Xv”)i4Âé*Ræ¼kÒ†>·ž#Bê’£éAOàÛÃ_ÞœøâD¬tº E:¦^%9&äì¡^¥YÍ#m0Æ&€9ÍÎ> ë!⇠î7µÊüøÜt+¸ @2hX­±šbNa³êO6שD¯)-ù,$5Ôßó ̽«Sæ2ŒnHaDäöèµ~ ç?“½™51™ۤ<ãÄÕ¬ Ùýõ‚È-E¹h“U*1ç=Úè›ÀG8oMñ=‹8©ˆAzq"P»Ì2ÏÚÝ´ s~‚Ë·V0†§ K?LKªd È6Õ 4Á4 €;7!u]iñc"§„}8Êb±¨ÑQ›šÿ9ÙN(J%3Få«Gî@ÓÎ3/É»¡…ïeªEC•&WRЮóo.:˜%s" ˜p¤ïSg;1°ôËZ‰:|ÄB ë¶írf³Óƒ‘;vò¾(–Ž{Ø‘<á¾'Ö6’özqì0þ Wp¸T(\wð×x–ûLÐÀƒ¿Hül¥¼‡ÉŒ´V£ °ú*@'¶—ÖŽBfxß„ZÜIUÿ] .òÅ…ACMe+ÑÆm3Pº.Çg¢F}÷$Q#r²Š¢|[ý?¹[Çõðû7l å\Y—I‹yÒ¦®í`Šú!ÃÞ Aborting now. Core dump? [y/n] (immutable) (read only)!! Cycle mode!a Ancestors mode!d Descendants mode!g GEDCOM mode!n Normal mode!t GEDCOMT mode!x GEDCOMX mode# Toggle childnos$$ List references$n List notes$s List sources%1 AUC%1 FR%1 HEB%1J%c Reorder child%e Add event%o Add other%s Add source%s was added as a child.%s was added as a spouse and/or parent.%s was added to the database.%s was modified in the database.( Scroll up(( Scroll both up(1-9) Browse to child(Separator is %s)(b Scroll bottom up(t Scroll top up) Scroll down)) Scroll both down)b Scroll bottom down)t Scroll top down**may+ Next in db, of - Prev in db0 EVEN 1 REFN 1 DATE 1 PLAC 1 INDI 2 NAME 2 ROLE 1 SOUR0 SOUR 1 REFN 1 TITL Title 1 AUTH Author0 XXXX 1 REFN1 Add a source record to the database2 Edit source record from the database3 Add an event record to the database4 Edit event record from the database5 Add an other record to the database6 Edit other record from the database< Enlarge menu area> Shrink menu area? Other menu choicesA Advanced viewA family cannot be merged with itself.A person cannot be merged with him/herself.A.D.ABORTADALARM CLOCKAdding unused keys as deleted keys...Are you sure you want to merge them?Are you sure you want to remove the person from the database?Argument to lock (-l) must be y or n.B Browse new familyB.C.B.C.E.BCBCEBUS ERRORBad backup history countBad decimal number format.Bad escape format.Bad hexidecimal number format.Bad history countBad history lengthBecause of errors the GEDCOM file was not loaded. Both families must have husbands/fathers.Both families must have wives/mothers.Browse new record (without adding xref).C.E.CECannot combine forceopen (-f) and lock (-l) flags.Cannot combine immutable (-i) or read-only (-r) with read-write (-w) access.Cannot remove last person from family.Choose a family by selecting a spouse/parent.Choose from historyClash with shorter hotkey in item: %sCommands: j Move down k Move up i Select q QuitCommands: j Move down k Move up q QuitCopyright(c) 1991 to 1996, by T. T. Wetmore IVCould not open file %s.Create a family with this person as a child.Create a family with this person as a spouse/parent.Current Database - %sDEATH OF CHILDDatabase `%s' has been saved in `%s'.Default path: Do you really want to add this child to the family?Do you really want to add this event to the database?Do you really want to add this family to the database?Do you really want to add this person to the database?Do you really want to add this record to the database?Do you really want to add this source to the database?Do you really want to add this spouse/parent to the family?Do you really want to merge these two families?Do you really want to merge these two persons?Do you really want to remove this child from his/her family?Do you really want to remove this spouse from his/her family?Do you really want to update this event?Do you really want to update this family?Do you really want to update this person?Do you really want to update this record?Do you really want to update this source?Do you want to create a database there?Do you want to edit the event again?Do you want to edit the family again?Do you want to edit the person again?Do you want to edit the record again?Do you want to edit the source again?Do you want to enter another name?Do you want to re-edit it?Duplicate hotkey for item: %sDuplicated REFN - please choose.EMT INSTEdit current record now to add xref manually.Enter Family Number to Browse toEnter name of output archive file.Enter name of translation table file to readEnter name of translation table file to writeEnter pattern to match against full name.Enter pattern to match against refn.Enter pattern to match against single surname or given name.Enter string for programError accessing dataError in abbreviations file.Error in character mapping file.Error in user options file.FLOATING POINT EXCEPTIONFrom which family is the child to be removed?From which family is the spouse/parent to be removed?HANGUPILLEGAL INSTRUCTIONINDI, FAM, SOUR, EVEN records may not be other records.INTERRUPTIdentify a child of the family, if known.Identify a parent in the family having children swapped.Identify a spouse of the family, if known.Identify a spouse/parent for the new family.Identify child already in family.Identify child in second family.Identify family (enter nothing to identify by individual members).Identify one of the child's parents, if known.Identify second person to browse to.Identify spouse/parent already in family, if known.Identify spouse/parent in second family, if known.Identify spouse/parent to add to an existing family.Identify the child to reorder.Identify the first child to swap.Identify the first family/spouse to swap.Identify the second child to swap.Identify the second family/spouse to swap.Identify the second spouse/parent, if known.In menu: %sInsert xref automatically at bottom of current record.Is this the new child? Is this the new spouse? Is this the person? Select if so.KILLLifeLines %s - Genealogical DB and Programming SystemLifeLines -- Auxiliary Browse Screen (* toggles menu)LifeLines -- Family Browse Screen (* toggles menu)LifeLines -- List Browse Screen (* toggles menu)LifeLines -- Person Browse Screen (* toggles menu)LifeLines -- Two Family Browse Screen (* toggles menu)LifeLines -- Two Person Browse Screen (* toggles menu)Line %d: This line has a bad link.Line %d: This line has an illegal level.Line %d: This line has no level number.Line %d: This line is empty; EOF?Line %d: This line is incomplete.Line %d: This line is too long.Line %d: This line needs white space before tag.Looks like a program was running. Check file %1 around line %2. M< Less menu colsM> More menu colsMalformed configuration file: line too long.Messages:Missing titleNew persons were added to the current list.New record is %sNew spouse/parent has unknown sex; can't add to family.No errors; adding records with new keys...No errors; adding records with original keys...No events present.No more historyNo notes present.No original string on line.No others present.No persons were added to the current list.No records found in scanNo references present.No replacement string on line.No sources present.No such child.No such family.No such person.No such record.No such translation table in this databaseNot implemented yetNot valid commandPIPE WRITEPOWER-FAIL RESTARTPerforming full name scanPerforming name fragment scanPerforming refn scanPlace the child last in the family.Please choose an operation:Please choose family create operation.Please choose from among these records.Please choose from the following options:Please choose the child to browse to.Please choose the child to remove from the family.Please choose the event to view.Please choose the family to browse to.Please choose the father/husband to browse to.Please choose the first child to browse to.Please choose the first family to browse to.Please choose the first father/husband to browse to.Please choose the first mother/wife to browse to.Please choose the first spouse/parent to browse to.Please choose the mother/wife to browse to.Please choose the note to view.Please choose the other to view.Please choose the reference to view.Please choose the second child to browse to.Please choose the second family to browse to.Please choose the second father/husband to browse to.Please choose the second mother/wife to browse to.Please choose the second spouse/parent to browse to.Please choose the source to view.Please choose the spouse/parent to browse to.Please choose the spouse/parent to remove from the family.Please enter the name of the GEDCOM file.Please identify next person to browse to.Please identify one of the child's siblings.Please identify one of the spouses.Please identify person or persons to browse to.Please identify record to browse to.Please identify the child.QUITREFN key is already in use.Return to current record (without adding xref).SEGMENTATION ERRORSIGNAL 0SYSTEM CALL ERRORSelect the child the new child precedes or select last.Something impossible happened. Contact tech support.Spouse unknownSystem error: illegal map codeTRACE TRAPTag is too long to connect automatically.The child was removed from his/her family.The current list is not named.The current list is now named %s.The database is read only; you may not add records.The database is read only; you may not change records.The database is read only; you may not merge records.The database is read only; you may not remove records.The database is read-only; loading has been canceled.The event was modified in the database.The families have different fathers/husbands; cannot merge.The families have different wives/mothers; cannot merge.The family was modified in the database.The file is as positioned at EOF.The new family was added to the database.The persons are not of opposite sex; can't make family.The record begins at wrong level.The record contains multiple level 0 lines.The record does not begin with a FAM line.The record does not begin with a SOUR line.The record does not begin with an EVEN line.The record does not begin with an INDI line.The record is empty.The record was modified in the database.The source was modified in the database.The spouse was removed from his/her family.The two children were swapped.The two families were swapped.There are no children in the database for this family.There is no LifeLines database in that directory.There is no one in the database with that name or key.There is no record with that key or reference.There is something wrong with the data.These persons are children in different families.This family already has a husband/male parent.This family already has a wife/female parent.This family has both spouses/parents; can't add another.This family has less than two children; can't swap.This family has neither spouse/parent; can't remove.This family has no female spouse/parent in the database.This family has no male spouse/parent in the database.This family still has links; not removed.This person has no children in the database.This person has no older sibling in the database.This person has no spouse in the database.This person has no younger sibling in the database.This person is a spouse/parent in less than two families.This person is already a child in a family.This person is not a child in any family.This person is not a child in the family; can't remove.This person is not a spouse in the family; can't remove.This person is not a spouse or parent in any family.This person record has bad GEDCOM name syntax.This person's father is not in the database.This person's mother is not in the database.This person's parents are not in the database.This person's sex is not known; can't make family.Too many spouses to display full listTranslation TablesTwo parents of different sexes cannot be merged.Two persons with different parents cannot be merged.USER SIGNAL 1USER SIGNAL 2Unknown signalUse original keys from GEDCOM file?WARNING: missing keysWINDOW CHANGEWhat activity do you want to perform?What do you want to add?What do you want to remove?What is the name of the output file?What is the name of the program?What persons or list do you want to add to the current list?What record do you want to edit?What scan type?What should the name of this list be?Which character mapping do you want to edit?Which character mapping do you want to save?Which event record do you want to edit?Which source record do you want to edit?Who do you want to remove from the database?Whom do you want to edit?Whose families/spouses are to be swapped?You are at the bottom of the list.You are at the top of the list.You cannot change the sex of a parent.You cannot edit the CHIL lines in a family record.You cannot edit the FAM line in a family record.You cannot edit the FAMC line in a person record.You cannot edit the FAMS lines in a person record.You cannot edit the HUSB line in a family record.You cannot edit the INDI line in a person record.You cannot edit the WIFE line in a family record.You must identify a database.[ Decrease tree depth] Increase tree depth^b History/back^c Clear history^f History/fwd^l History lista Add child to familya Add familya Add information to the databasea Add to this lista Create new familyaavabout %1abt %1adaradar sheniadradsaft %1after %1apraprilaugaugustb Browse new personsb Browse the persons in the databaseb Browse to bottomb Browse to personsb. bap. bapt: bef %1before %1bet %1 and %2between %1 and %2born: brumbrumairebur. buri: c Browse to childrenc Browse top childrenc Character set optionsc Child - add a child to an existing familyc Child - remove a child from his/her familycal %1calculated %1cb. cheshvanchildcompcshd Copy top to bottomd Delete from listd Delete information from the databased Remove as childd Remove child fromd Show database statisticsd. decdecemberdied: div. e Browse event recordse Edit recorde Edit the familye Edit the persone Edit the place abbreviation filee Edit this persone Edit top persone edit individual tables (in db)ellelulenter file nameenter file name (*%s)enter integer:enter key or refn: enter name: enter path: enter string: enter y (yes) or n (no): est %1estimated %1export/import directory:f Browse to fatherf Browse to fathersf Browse top fatherf Family - create family record from one or two spousesf Family - remove a family completelyf Full name scanfatherfebfebruaryflorflorealfr %1fr %1 to %2frimfrimairefrom %1from %1 to %2frucfructidorg Browse to familygermgerminalh Add as spousei Add as childi Browse this personi Identify a person from key valuei Individual - remove a person completelyi import all tables (from files into db)iyariyrj Merge bottom to topj Move down listjanjanuaryjour_complementairsjuljulyjunjunek Find a person's key valuek Move up listkislevksll load a table from a file (into db)m Browse to motherm Browse to mothersm Browse top motherm Mark this personm Show memory statisticsm. marmarchmarried: maymessmothern Create new personn Name fragment (whitespace-delimited) scann Name this listnisannivonivosenovnovembernsno Browse to older sibo Edit the user options fileoctoctoberp Pedigree modep Person - add new person to the databasep Pick a report from list and runpattern: personpluvpluviosepraiprairialq Quit programq Return to main menuq Return to previous menur Generate report by entering report namer Read in data from a GEDCOM filer Refn scanr Remove as spouser Remove spouse froms Add spouse to familys Browse source recordss Browse to spouse/ss Browse top spouse/ss Save the database in a GEDCOM files Search databases Spouse - add a spouse to an existing familys Spouse - remove a spouse from a familys save a table to a file (from db)sepseptembershevatshvsignal %1: %2sivanspousesvnt Browse to topt Modify character translation tablestamuztc Tandem to childrentevettf Tandem to father/stg Tandem to family/stherthermidortishritm Tandem to mother/stmzto %1ts Tandem to spouse/stshtt Enter family tandemtt Enter tandem modetu Tandem to parentstvtu Browse to parentsu Miscellaneous utilitiesvendvendemiaireventventosex Browse other recordsx Handle source, event and other recordsx Swap mark/currentx Swap two childrenx Swap two familiesx Switch top/bottomx export all tables (from db to files)y Browse to younger siby Turn on syncyYyYnNzi Browse to indizz Browse to anyProject-Id-Version: lifelines 3.0.21 Report-Msgid-Bugs-To: POT-Creation-Date: 2007-08-08 15:56-0400 PO-Revision-Date: 2002-11-09 19:20+0100 Last-Translator: Keld Simonsen Language-Team: Danish MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Afbryder nu. Opret hukommelsesudskrift? [y/n] (uforanderlig)(skrivebeskyttet)!! Cyklisk tilstand!a Forfædre tilstand!d Ætlingstilstand!g GEDCOM-tilstand!n Normal tilstand!t GEDCOMT-tilstand!x GEDCOMX-tilstand# Aktivér/de barnnr$$ List referencer$n List noter$s List kilder%1 AUC%1 FR%1 HEB%1J%c Om-ordn barn%e Tilføj hændelse%o Tilføj andet%s Tilføj kilde%s tilføjedes som barn.%s tilføjedes som ægtefælle og/eller forælder.%s tilføjedes i databasen.%s ændredes i databasen.( Rul op(( Rul begge op(1-9) Bladr t. barn(Adskiller er %s)(b Rul bund op(t Rul top op) Rul ned)) Rul begge ned)b Rul bund ned)t Rul top nedmaj+ Næste i databasen, fra - Foreg. i databasen0 EVEN 1 REFN 1 DATE 1 PLAC 1 INDI 2 NAME 2 ROLE 1 SOUR0 SOUR 1 REFN 1 TITL Titel 1 AUTH Forfatter0 XXXX 1 REFN1 Tilføj en kildepost i databasen2 Redigér kildepost i databasen3 Tilføj en hændelsepost i databasen4 Redigér hændelsepost i databasen5 Tilføj en post af anden type i databasen6 Redigér en post af anden type i databasen< Øg menuareal> Formindsk menuareal? Andre menuvalgA Avanceret visningEn familie kan ikke sammenflettes med sig selv.En person kan ikke sammenflettes med sig selv.e. Kr.AFBRUDTeKrALARMKLOKKETilføjer ubrugte nøgler som slettede nøgler...Er du sikker på at du vil sammenflette dem?Er du sikker på at du vil fjerne denne person fra databasen?Argumentet til at låse (-l) skal være y (ja) eller n (nej).B Bladr i ny familief. Kr.f. Kr.fKrfKrBUSFEJLUgyldig sikkerhedskopieret historiknumreringUgyldigt format for decimaltal.Fejlagtigt kontrolsekvensformat.Ugyldigt format for heksadecimale tal.Ugyldig historiknumreringUgyldig historiklængdePå grund af fejl indlæstes GEDCOM-filen ikke. Begge familier skal have mænd/fædre.Begge familier skal have hustruer/mødre.Bladr i ny post (uden at tilføje krydsref).e. Kr.eKrKan ikke kombinere flagene forceret åbning (-f) og lås (-l).Kan ikke kombinere uforanderlig (-i) eller skrivebeskyttet (-r) med skriveadgang (-w).Kan ikke fjerne den sidste person fra en familie.Vælg en familie ved at vælge en ægtefælle/forælder.Vælg fra historikSammenstød med kortere hurtignøgle i post: %sKommandoer: j Flyt ned k Flyt op i Vælg q AfslutKommandoer: j Flyt ned k Flyt op q AfslutCopyright© 1991 til 1996, af T. T. Wetmore IVKunne ikke åbne filen %s.Opret en familie med denne person som barn.Opret en familie med denne person som ægtefælle/forælder.Aktuel database - %sBARN DØDDatabasen "%s" er gemt i "%s".Forvalgt søgesti: Vil du virkelig tilføje dette barn til familien?Vil du virkelig tilføje denne hændelse i databasen?Vil du virkelig tilføje denne familie i databasen?Vil du virkelig tilføje denne person i databasen?Vil du virkelig tilføje denne poste i databasen?Vil du virkelig tilføje denne kilde i databasen?Vil du virkelig tilføje denne ægtefælle/forælder i familien?Vil du virkelig sammenflette disse to familier?Vil du virkelig sammenflette disse to personer?Vil du virkelig fjerne dette barn fra hans/hendes familie?Vil du virkelig fjerne denne ægtefælle fra hans/hendes familie?Vil du virkelig opdatere denne hændelse?Vil du virkelig opdatere denne familie?Vil du virkelig opdatere denne person?Vil du virkelig opdatere denne poste?Vil du virkelig opdatere denne kilde?Vil du oprette en database dér?Vil du redigere hændelsen igen?Vil du redigere familien igen?Vil du redigere personen igen?Vil du redigere posten igen?Vil du redigere kilden igen?Vil du indtaste et navn til?Vil du omredigere den?Dubleret hurtignøgle for post: %sDubleret REFN - vælg.EMT INSTRedigér aktuel post nu til at tilføje krydsref manuelt.Indtast familienummer at bladre tilIndtast navn for uddata arkivfil.Indtast navn på oversættelsestabelfil at læse inIndtast navn på oversættelsestabelfil at skrive tilAngiv mønster til at matche fuldstændigt navn.Angiv mønster til at matche refn.Angiv mønster til at matche alenestående efter- eller fornavn.Indtast streng for programFejl ved dataadgangFejl i forkortelsesfil.Fejl i tegnmapningsfil.Fejl i filen for brugerindstillinger.FLYDENDETALSUNDTAGELSEFra hvilken familie skal barnet fjernes?Fra hvilken familie skal ægtefællen/forælderen fjernes?LÆG PÅUTILLADT INSTRUKTIONINDI-, FAM-, SOUR- og EVEN-poster må ikke være andre poster.AFBRUDIdentificér et barn i familien, hvis kendt.Identificér en forælder i familien hvis barn skal ombyttes.Identificér en ægtefælle i familien, hvis kendt.Identificér en ægtefælle/forælder for den nye familie.Identificér barn som allerede findes i familien.Identificér barn i den anden familie.Identificér familie (indtast ingenting for at identificere via familiemedlemmer).Identificér en af barnets forældre, hvis kendt.Identificér den anden person at bladre til.Identificér ægtefælle/forælder som allerede findes i familien, hvis kendt.Identificér ægtefælle/forælder i den anden familie, hvis kendt.Identificér ægtefælle/forælder at tilføje i en eksisterende familie.Identificér barnet som skal ordnas om.Identificér det første barn at ombytte.Identificér den første familie/ægtefælle at ombytte.Identificér det andet barnet at ombytte.Identificér den anden familie/ægtefælle at ombytte.Identificér den anden ægtefælle/forælder, hvis kendt.I menu: %sIndsæt krydsref automatisk i bunden af aktuel post.Er dette det nye barn? Er dette den nye ægtefælle? Er dette personen? Vælg hvis det er.DRÆBTLifeLines %s - Genealogisk database- og programmeringssystemLifeLines -- Assistentvindue (* viser/skjuler menu)LifeLines -- Familievindue (* viser/skjuler menu)LifeLines -- Listevindue (* viser/skjuler menu)LifeLines -- Personvindue (* viser/skjuler menu)LifeLines -- Tofamiliesvindue (* viser/skjuler menu)LifeLines -- Topersonsvindue (* viser/skjuler menu)Linje %d: Denne linje har en ugyldig lænke.Linje %d: Denne linje har et ikke tilladt niveau.Linje %d: Denne linje har intet niveaunummer.Linje %d: Denne linje er tom; filslut?Linje %d: Denne linje er ufuldstændig.Rad %d: Denne linje er for lang.Linje %d: Denne linje behøver blanktegn inden mærke.Virker som om et program kørtes. Kontrollér fil %1 omkring linje %2. M< Færre menukolonnerM> Flere menukolonnerFejl i konfigurationsfil: for lang linje.Meddelelser:Titel manglerNye personer tilføjedes i den aktuelle liste.Den nye post er %sNy ægtefælle/forælder har ukendt køn; kan ikke tilføje i familie.Ingen fejl; tilføjer poster med nye nøgler...Ingen fejl; tilføjer poster med oprindelige nøgler...Findes ingen hændelser.Slut på historikFindes ingen notitser.Ingen oprindelig streng på linjen.Finns ingen øvrige.Ingen personer tilføjedes i den aktuelle liste.Ingen poster fandtes i søgningFindes ingen referencer.Ingen erstatningsstreng på linjen.Findes ingen kilder.Findes intet sådant barn.Findes ingen sådan familie.Findes ingen sådan person.Findes ingen sådan post.Ingen sådan oversættelsestabel i denne database.Ikke implementeret endnuUgyldig kommandoRØRSKRIVNINGSTRØMAFBRUDSGENSTARTUdfør søgning på hele navnetUdfør søgning på navnefragmentUdfør søgning på refnPlacér barnet sidst i familien.Vælg en kommando:Vælg kommando til at oprette familie.Vælg mellem disse poster.Vælg blandt de følgende alternativer:Vælg barn at bladre til.Vælg barn at fjerne fra familien:Vælg hændelse at se.Vælg familie at bladre til.Vælg fader/ægtefælle at bladre til.Vælg det første barn at bladre til.Vælg den første familie at bladre til.Vælg den første fader/ægtefælle at bladre til.Vælg den første moder/ægtefælle at bladre til.Vælg den første ægtefælle/forælder at bladre til.Vælg moder/ægtefælle at bladre til.Vælg notits at se.Vælg hvilken af øvrige at se.Vælg reference at se.Vælg det andet barn at bladre til.Vælg den anden familie at bladre til.Vælg den anden fader/ægtefælle at bladre til.Vælg den anden moder/ægtefælle at bladre til.Vælg den anden ægtefællen/forælderen at bladre til.Vælg kilde at se.Vælg ægtefælle/forælder at bladre til.Vælg ægtefælle/forælder at fjerne fra familienIndtast navnet på GEDCOM-filen.Identificér næste person at bladre til.Identificér et af barnets søskende.Identificér en af ægtefællerne.Identificér person eller personer at bladre til.Vælg post at bladre til.Identificér barnet.AFSLUTREFN-nøgle bruges allerede.Gå tilbage til aktuel post (uden at tilføje krydsref).SEGMENTERINGSFEJLSIGNAL 0SYSTEMKALDSFEJLVælg hvilket barn som det nye barn kommer før eller vælg sidst.Nogenting umuligt skete. Kontakt teknisk support.Ægtefælle ukendtSystemfejl: ikke tilladt mapningskodeSPORINGSFÆLDEMærket er for langt til at tilknytte automatisk.Barnet fjernedes fra dets familie.Den aktuelle liste har intet navn.Den aktuelle liste har nu navnet %s.Databasen er skrivebeskyttet; du kan ikke tilføje poster.Databasen er skrivebeskyttet; du kan ikke lave ændringer i poster.Databasen er skrivebeskyttet; du kan ikke sammenflette poster.Databasen er skrivebeskyttet; du kan ikke fjerne poster.Databasen er skrivebeskyttet; indlæsningen er annulleret.Hændelsen ændredes i databasen.Familierne har forskellige fædre/mænd; kan ikke sammenflette.Familierne har forskellige hustruer/mødre; kan ikke sammenflette.Familien ændredes i databasen.Filen er positioneret ved filslut.Den nye familien tilføjedes i databasen.Personerne er ikke af modsat køn; kan ikke oprette familie.Posten begynder på forkert niveau.Posten indeholder flere linjer på 0-niveauet.Posten begynder ikke med en FAM-linje.Posten begynder ikke med en SOUR-linje.Posten begynder ikke med en EVEN-linje.Posten begynder ikke med en INDI-linje.Posten er tom.Posten ændredes i databasen.Kilden ændredes i databasen.Ægtefællen fjernedes fra dens familie.De to børn ombyttedes.De to familier ombyttedes.Der findes ingen børn i databasen for denne familie.Der findes ingen LifeLinesdatabase i det katalog.Der findes ingen i databasen med det navn eller den nøgle.Der findes ingen post med den nøgle eller reference.Noget er forkert i data.Disse personer er børn i forskellige familier.Denne familie har allerede en ægtefælle/mandlig forælder.Denne familie har allerede en ægtefælle/kvindelig forælder.I denne familie findes begge ægtefæller/forældre; kan ikke tilføje yderligere en.Denne familie har mindre end to børn; kan ikke ombytte.Denne familie har hverken ægtefælle eller forældre; kan ikke fjerne.Denne familie har ingen ægtefælle/kvindelig forælder i databasen.Denne familie har ingen ægtefælle/mandlig forælder i databasen.Denne familie har stadigvæk lænker; ikke fjernet.Denne person har ingen børn i databasen.Denne person har ingen ældre søskende i databasen.Denne person har ingen ægtefælle i databasen.Denne person har ingen yngre søskende i databasen.Denne person er ægtefælle/forælder i færre end to familier.Denne person er allerede barn i en familie.Denne person er ikke barn i nogen familie.Denne person er ikke barn i familie; kan ikke fjerne.Denne person er ikke ægtefælle i familien; kan ikke fjerne.Denne person er ikke ægtefælle eller forælder i nogen familie.Denne personpost har ugyldig GEDCOM-navnesyntaks.Denne persons fader findes ikke i databasen.Denne persons moder findes ikke i databasen.Denne persons forældre findes ikke i databasen.Denne persons køn er ikke kendt; kan ikke oprette familie.For mange ægtefæller til at vise hele listenTegnoversættelsestabellerTo forældre med forskellige køn kan ikke sammenflettes.To personer med forskellige forældre kan ikke sammenflettes.BRUGERSIGNAL 1BRUGERSIGNAL 2Ukendt signalVil du bruge oprindelige nøgler fra GEDCOM-filen?ADVARSEL: nøgler manglerVINDUESÆNDRINGHvilken funktion vil du bruge?Hvad vil du tilføje?Hvad vil du fjerne?Hvad er navnet på uddatafilen?Hvad er navnet på programmet?Hvilke personer/hvilken liste vil du tilføje i den aktuelle liste?Hvilken post vil du redigere?Hvilken type af søgning?Hvad skal denne liste have for navn?Hvilken tegnmapning vil du redigere?Hvilken tegnmapning vil du gemme?Hvilken hændelsepost vil du redigere?Hvilken kildepost vil du redigere?Hvem vil du fjerne fra databasen?Hvem vil du redigere?Hvis familier/ægtefælle skal ombyttes?Du er i bunden af listen.Du er i toppen af listen.Du kan ikke ændre køn for en forælder.Du kan ikke redigere CHIL-linjerne i en familiepost.Du kan ikke redigere FAM-linjen i en familiepost.Du kan ikke redigere FAMC-linjen i en personpost.Du kan ikke redigere FAMS-linjen i en personpost.Du kan ikke redigere HUSB-linjen i en familiepost.Du kan ikke redigere INDI-linjen i en personpost.Du kan ikke redigere WIFE-linjen i en familiepost.Du skal identificere en database.[  Mindsk trædybde] Øg trædybde^b Historik/bagud^c Tøm historik^f Historik/fremad^l Historiklistea Tilføj barn i fam.a Tilføj familiea Tilføj information i databasena Tilføj i denne listea Opret ny familieaavomkring %1omk %1adaradar sheniadradseft %1efter %1apraprilaugaugustb Bladr til nye pers.b Bladr mellem personer i databasenb Bladr t. nedersteb Bladr t. personerf. døb. døbt: før %1før %1mel %1 og %2mellem %1 og %2født: brumbrumairebeg. begr: c Bladr til barnc Bl. t. øverste barnc Indstillinger for tegnsætc Barn - tilføj et barn i en eksisterende familiec Barn - fjern et barn fra dets familieber %1beregnet %1bf. cheshvanbarncompcshd Kopiér top t. bundd Fjern fra listed Fjern information fra databasend Fjern som barnd Fjern barn frad Vis databasestatistikd. decdecemberdød: ski.e Bladr i hændelsepostere Redigér poste Redigér familiene Redigér personene Redigér pladsforkortelsesfilene Redigér denne pers.e Redigér øverste pers.e redigér individuelle tabeller (i db)ellelulindtast filnavnindtast filnavn (*%s)indtast heltal:indtast nøgle eller refn:indtast navn: indtast søgesti: indtast streng: indtast j (ja) eller n (nej): ans %1anslået %1eksportér/importér katalog:f Bladr til faderf Bladr t. fædref Bladr t. øverste faderf Familie - opret familiepost med en eller to ægtefællerf Familie - fjern en familie fuldstændigtf Søg på hele navnetfaderfebfebruarflorflorealfr %1fr %1 t %2frimfrimairefra %1fra %1 til %2frucfructidorg Bladr t. familiegermgerminalh Tilføj som ægtefællei Tilføj som barni Bladr til denne persi Identificér en person via nøgleværdii Person - fjern en person fuldstændigti importér alle tabeller (fra filer til db)iyariyrj Flet bund til topj Gå nedad i listejanjanuarjour_complementairsjuljulijunjunik Find nøgleværdi for en personk Gå opad i listekislevksll indlæs en tabel fra en fil (til db)m Bladr til moderm Bladr t. mødrem Bladr t. øverste moderm Markér denne pers.m Vis hukommelsesstatistikg. marmartsgift: majmessmodern Opret ny personn Søg på navnefragment (adskilt med blanktegn)n Giv denne liste navnnisannivonivosenovnovembernsno Bl. t. ældre søskendeo Redigér fil for brugerindstillingeroktoktoberp Tavletilstandp Person - tilføj ny person i databasenp Vælg en rapport fra liste og kørmønster: personpluvpluviosepraiprairialq Afslut programmetq Gå tilbage til hovedmenuenq Gå tilbage til foregående menur Opret rapport ved at angive rapportens navnr Indlæs data fra en GEDCOM-filr Refn-søgningr Fjern som ægtefæller Fjern ægtefælle fras Tilføj ægtefælle i fam.s Bladr i kildeposters Bladr til ægtefællers Bl. t. øverste ægtefællers Gem databasen til GEDCOM-fils Søg i databasens Ægtefælle - tilføj en ægtefælle til en eksisterende families Ægtefælle - fjern en ægtefælle fra en eksisterende families gem en tabel til en fil (fra db)sepseptembershevatshvsignal %1: %2sivanægtefællesvnt Bladr til øverstet Modificér tegnoversættelsestabellertamuztc Tandem til barntevettf Tandem t. fader/fædretg Tandem t. familiertherthermidortishritm Tandem t. moder/mødre/tmzt %1ts Tandem til ægtefælletshtt Skift mellem t. fam.tandemtt Skift mellem t. tandemtilstandtu Tandem t. forældretvtu Bladr t. forældreu Diverse værktøjervendvendemiaireventventosex Bladr i øvrige posttyperx Håndtér kilde-, hændelse- og øvrige posterx Skift mellem mærke/aktuelx Skift mellem to børnx Skift mellem to familierx Skift mellem øverste/nederstex eksportér alle tabeller (fra db til filer)y Bl. t. yngre søskendey Aktivér synkyYjJyYjJnNzi Bladr t. pers.zz Bladr t. allelifelines-3.0.61/po/da.po0000700002540200244210000036440010656417745015331 0ustar prappDomain Users# Danish messages for LifeLines. # Copyright (C) 2002 Free Software Foundation, Inc. # Keld Simonsen , 2002. # msgid "" msgstr "" "Project-Id-Version: lifelines 3.0.21\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-08-08 15:56-0400\n" "PO-Revision-Date: 2002-11-09 19:20+0100\n" "Last-Translator: Keld Simonsen \n" "Language-Team: Danish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: src/btree/btrec.c:369 #, c-format msgid "Failed (errno=%d) to open blockfile (rkey=%s): %s" msgstr "" #: src/btree/btrec.c:438 #, c-format msgid "Btree lookup looped back to master (%ld)!" msgstr "" #: src/gedlib/charmaps.c:769 msgid "" msgstr "" #. TRANSLATORS: seconds time interval #: src/gedlib/dateprint.c:783 #, c-format msgid "%02ds" msgstr "" #. TRANSLATORS: minutes & seconds time interval #: src/gedlib/dateprint.c:789 #, c-format msgid "%dm%02ds" msgstr "" #. TRANSLATORS: hours & minutes time interval #: src/gedlib/dateprint.c:795 #, c-format msgid "%dh%02dm" msgstr "" #. TRANSLATORS: days & hours time interval #: src/gedlib/dateprint.c:801 #, c-format msgid "%dd%02dh" msgstr "" #. TRANSLATORS: years & days time interval #: src/gedlib/dateprint.c:805 #, c-format msgid "%dy%03dd" msgstr "" #: src/gedlib/dbcontext.c:276 msgid "Database error: -- " msgstr "" #: src/gedlib/dbcontext.c:280 #, fuzzy msgid "requested database does not exist." msgstr "Databasen er skrivebeskyttet; du kan ikke tilføje poster." #: src/gedlib/dbcontext.c:283 msgid "db directory is file, not directory." msgstr "" #: src/gedlib/dbcontext.c:286 msgid "creation of new database failed." msgstr "" #: src/gedlib/dbcontext.c:289 #, fuzzy msgid "error accessing database directory." msgstr "Fejl ved dataadgang" #: src/gedlib/dbcontext.c:292 msgid "no keyfile (directory does not appear to be a database)." msgstr "" #: src/gedlib/dbcontext.c:295 msgid "could not open, read or write an index file." msgstr "" #: src/gedlib/dbcontext.c:298 msgid "could not open, read or write the key file." msgstr "" #: src/gedlib/dbcontext.c:301 msgid "could not open, read or write the key file (to alter database)." msgstr "" #: src/gedlib/dbcontext.c:304 msgid "could not open, read or write a block file." msgstr "" #: src/gedlib/dbcontext.c:307 #, fuzzy msgid "name of database is too long." msgstr "Rad %d: Denne linje er for lang." #: src/gedlib/dbcontext.c:310 #, fuzzy msgid "The database is already open for writing." msgstr "Databasen er skrivebeskyttet; du kan ikke lave ændringer i poster." #: src/gedlib/dbcontext.c:313 #, fuzzy msgid "The database is locked (no readwrite access)." msgstr "Databasen er skrivebeskyttet; du kan ikke tilføje poster." #: src/gedlib/dbcontext.c:316 #, fuzzy msgid "The database is unlocked." msgstr "Databasen er skrivebeskyttet; du kan ikke tilføje poster." #: src/gedlib/dbcontext.c:319 msgid "keyfile is corrupt." msgstr "" #: src/gedlib/dbcontext.c:322 msgid "keyfile is wrong alignment." msgstr "" #: src/gedlib/dbcontext.c:325 msgid "keyfile is wrong version." msgstr "" #: src/gedlib/dbcontext.c:328 msgid "Existing database found." msgstr "" #: src/gedlib/dbcontext.c:332 #, fuzzy, c-format msgid "The database is already opened for read access by %d user." msgid_plural "The database is already opened for read access by %d users." msgstr[0] "Databasen er skrivebeskyttet; du kan ikke tilføje poster." msgstr[1] "Databasen er skrivebeskyttet; du kan ikke tilføje poster." #: src/gedlib/dbcontext.c:338 msgid "Invalid properties set for new database" msgstr "" #: src/gedlib/dbcontext.c:341 msgid "Undefined database error -- fix program." msgstr "" #: src/gedlib/gedcom.c:112 msgid "Missing NAME line in INDI record; record ignored.\n" msgstr "" #: src/gedlib/init.c:228 src/tools/btedit.c:207 #, fuzzy, c-format msgid "Copyright (C) 1991-2007 Thomas T. Wetmore IV et al." msgstr "Copyright© 1991 til 1996, af T. T. Wetmore IV" #: src/gedlib/init.c:230 src/tools/btedit.c:209 #, c-format msgid "" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." msgstr "" #: src/gedlib/init.c:235 src/tools/btedit.c:214 #, c-format msgid "Written by Tom Wetmore. Maintained at lifelines.sourceforge.net." msgstr "" #: src/gedlib/keytonod.c:686 #, c-format msgid "Database error caused by reference to nonexisting key <%s>." msgstr "" #: src/gedlib/keytonod.c:687 msgid "It might be possible to fix this with btedit." msgstr "" #: src/gedlib/keytonod.c:688 msgid "Neighboring keys include:" msgstr "" #: src/gedlib/keytonod.c:1045 #, c-format msgid "Bad cache entry <%s> != <%s>" msgstr "" #: src/gedlib/keytonod.c:1072 #, c-format msgid "Cache [%s] overflowed its max size (%d)" msgstr "" #: src/gedlib/messages.c:44 msgid "You must identify a database." msgstr "Du skal identificere en database." #: src/gedlib/messages.c:45 #, fuzzy msgid "What directory holds (or will hold) the LifeLines database? (? to list)" msgstr "I hvilket katalog findes LifeLinesdatabasen?" #: src/gedlib/messages.c:46 msgid "enter path: " msgstr "indtast søgesti: " #: src/gedlib/messages.c:47 msgid "There is no LifeLines database in that directory." msgstr "Der findes ingen LifeLinesdatabase i det katalog." #: src/gedlib/messages.c:48 msgid "Do you want to create a database there?" msgstr "Vil du oprette en database dér?" #: src/gedlib/messages.c:49 msgid "Argument to lock (-l) must be y or n." msgstr "Argumentet til at låse (-l) skal være y (ja) eller n (nej)." #: src/gedlib/messages.c:50 msgid "Cannot remove last person from family." msgstr "Kan ikke fjerne den sidste person fra en familie." #: src/gedlib/messages.c:52 #, fuzzy msgid "lines [-adkrwiflntcuFxoCzI] [database] # Use -F for Finnish database" msgstr "lines [-adkrwifmntcuFyxo] [database] # Brug -F for finsk database" #: src/gedlib/messages.c:54 #, fuzzy msgid "lines [-adkrwiflntcuxoCzI] [database] # Finnish database" msgstr "lines [-adkrwifmntcuyxo] [database] # finsk database" #: src/gedlib/messages.c:56 #, fuzzy msgid "lines [-adkrwiflntcuxoCzI] [database]" msgstr "lines [-adkrwifmntcuyxo] [database]" #: src/gedlib/messages.c:58 msgid "The database is read only; you may not add records." msgstr "Databasen er skrivebeskyttet; du kan ikke tilføje poster." #: src/gedlib/messages.c:59 msgid "The database is read only; you may not change records." msgstr "Databasen er skrivebeskyttet; du kan ikke lave ændringer i poster." #: src/gedlib/messages.c:60 msgid "The database is read only; you may not merge records." msgstr "Databasen er skrivebeskyttet; du kan ikke sammenflette poster." #: src/gedlib/messages.c:61 msgid "The database is read only; you may not remove records." msgstr "Databasen er skrivebeskyttet; du kan ikke fjerne poster." #: src/gedlib/messages.c:62 #, fuzzy msgid "The database is read only." msgstr "Databasen er skrivebeskyttet; du kan ikke lave ændringer i poster." #: src/gedlib/messages.c:64 #, fuzzy msgid "Name, key, refn, list, or @:" msgstr "indtast navn, nøgle, refn eller liste:" #: src/gedlib/messages.c:65 msgid "enter key or refn: " msgstr "indtast nøgle eller refn:" #: src/gedlib/messages.c:66 msgid "Please choose the child to remove from the family." msgstr "Vælg barn at fjerne fra familien:" #: src/gedlib/messages.c:67 msgid "Please choose the spouse/parent to remove from the family." msgstr "Vælg ægtefælle/forælder at fjerne fra familien" #: src/gedlib/messages.c:68 msgid "From which family is the child to be removed?" msgstr "Fra hvilken familie skal barnet fjernes?" #: src/gedlib/messages.c:69 msgid "From which family is the spouse/parent to be removed?" msgstr "Fra hvilken familie skal ægtefællen/forælderen fjernes?" #: src/gedlib/messages.c:70 msgid "Identify family (enter nothing to identify by individual members)." msgstr "" "Identificér familie (indtast ingenting for at identificere via " "familiemedlemmer)." #: src/gedlib/messages.c:71 msgid "Identify a spouse of the family, if known." msgstr "Identificér en ægtefælle i familien, hvis kendt." #: src/gedlib/messages.c:72 msgid "Identify a child of the family, if known." msgstr "Identificér et barn i familien, hvis kendt." #: src/gedlib/messages.c:73 msgid "Identify the first child to swap." msgstr "Identificér det første barn at ombytte." #: src/gedlib/messages.c:74 msgid "Identify the second child to swap." msgstr "Identificér det andet barnet at ombytte." #: src/gedlib/messages.c:75 msgid "Identify the child to reorder." msgstr "Identificér barnet som skal ordnas om." #: src/gedlib/messages.c:76 msgid "Identify the first family/spouse to swap." msgstr "Identificér den første familie/ægtefælle at ombytte." #: src/gedlib/messages.c:77 msgid "Identify the second family/spouse to swap." msgstr "Identificér den anden familie/ægtefælle at ombytte." #: src/gedlib/messages.c:78 msgid "Please choose the spouse/parent to browse to." msgstr "Vælg ægtefælle/forælder at bladre til." #: src/gedlib/messages.c:79 msgid "Please choose the first spouse/parent to browse to." msgstr "Vælg den første ægtefælle/forælder at bladre til." #: src/gedlib/messages.c:80 msgid "Please choose the second spouse/parent to browse to." msgstr "Vælg den anden ægtefællen/forælderen at bladre til." #: src/gedlib/messages.c:81 msgid "Please choose the child to browse to." msgstr "Vælg barn at bladre til." #: src/gedlib/messages.c:82 msgid "Please choose the first child to browse to." msgstr "Vælg det første barn at bladre til." #: src/gedlib/messages.c:83 msgid "Please choose the second child to browse to." msgstr "Vælg det andet barn at bladre til." #: src/gedlib/messages.c:84 msgid "Please choose the family to browse to." msgstr "Vælg familie at bladre til." #: src/gedlib/messages.c:85 msgid "Enter Family Number to Browse to" msgstr "Indtast familienummer at bladre til" #: src/gedlib/messages.c:86 msgid "Please choose the first family to browse to." msgstr "Vælg den første familie at bladre til." #: src/gedlib/messages.c:87 msgid "Please choose the second family to browse to." msgstr "Vælg den anden familie at bladre til." #: src/gedlib/messages.c:88 msgid "Please choose the father/husband to browse to." msgstr "Vælg fader/ægtefælle at bladre til." #: src/gedlib/messages.c:89 msgid "Please choose the first father/husband to browse to." msgstr "Vælg den første fader/ægtefælle at bladre til." #: src/gedlib/messages.c:90 msgid "Please choose the second father/husband to browse to." msgstr "Vælg den anden fader/ægtefælle at bladre til." #: src/gedlib/messages.c:91 msgid "Please choose the mother/wife to browse to." msgstr "Vælg moder/ægtefælle at bladre til." #: src/gedlib/messages.c:92 msgid "Please choose the first mother/wife to browse to." msgstr "Vælg den første moder/ægtefælle at bladre til." #: src/gedlib/messages.c:93 msgid "Please choose the second mother/wife to browse to." msgstr "Vælg den anden moder/ægtefælle at bladre til." #: src/gedlib/messages.c:94 msgid "Identify a parent in the family having children swapped." msgstr "Identificér en forælder i familien hvis barn skal ombyttes." #: src/gedlib/messages.c:95 msgid "Whose families/spouses are to be swapped?" msgstr "Hvis familier/ægtefælle skal ombyttes?" #: src/gedlib/messages.c:96 msgid "Identify one of the child's parents, if known." msgstr "Identificér en af barnets forældre, hvis kendt." #: src/gedlib/messages.c:98 src/liflines/scan.c:127 msgid "Enter pattern to match against refn." msgstr "Angiv mønster til at matche refn." #: src/gedlib/messages.c:100 #, fuzzy msgid "Please choose from among these people." msgstr "Vælg mellem disse poster." #: src/gedlib/messages.c:101 msgid "Please choose from among these records." msgstr "Vælg mellem disse poster." #: src/gedlib/messages.c:102 msgid "Is this the new child? " msgstr "Er dette det nye barn? " #: src/gedlib/messages.c:103 msgid "Is this the new spouse? " msgstr "Er dette den nye ægtefælle? " #: src/gedlib/messages.c:104 msgid "Is this the person? Select if so." msgstr "Er dette personen? Vælg hvis det er." #: src/gedlib/messages.c:105 #, fuzzy msgid "Is this the record? Select if so." msgstr "Er dette personen? Vælg hvis det er." #: src/gedlib/messages.c:106 msgid "Select the child the new child precedes or select last." msgstr "Vælg hvilket barn som det nye barn kommer før eller vælg sidst." #: src/gedlib/messages.c:107 msgid "Please identify next person to browse to." msgstr "Identificér næste person at bladre til." #: src/gedlib/messages.c:108 msgid "Please identify record to browse to." msgstr "Vælg post at bladre til." #: src/gedlib/messages.c:109 msgid "Please identify one of the spouses." msgstr "Identificér en af ægtefællerne." #: src/gedlib/messages.c:110 msgid "Please identify person or persons to browse to." msgstr "Identificér person eller personer at bladre til." #: src/gedlib/messages.c:111 msgid "Please choose family create operation." msgstr "Vælg kommando til at oprette familie." #: src/gedlib/messages.c:112 msgid "Do you want to enter another name?" msgstr "Vil du indtaste et navn til?" #: src/gedlib/messages.c:114 msgid "This person is not a spouse or parent in any family." msgstr "Denne person er ikke ægtefælle eller forælder i nogen familie." #: src/gedlib/messages.c:115 msgid "This person is not a child in any family." msgstr "Denne person er ikke barn i nogen familie." #: src/gedlib/messages.c:116 msgid "There is no one in the database with that name or key." msgstr "Der findes ingen i databasen med det navn eller den nøgle." #: src/gedlib/messages.c:118 msgid "This person's father is not in the database." msgstr "Denne persons fader findes ikke i databasen." #: src/gedlib/messages.c:119 msgid "This person's mother is not in the database." msgstr "Denne persons moder findes ikke i databasen." #: src/gedlib/messages.c:120 msgid "This person has no spouse in the database." msgstr "Denne person har ingen ægtefælle i databasen." #: src/gedlib/messages.c:121 msgid "This person has no younger sibling in the database." msgstr "Denne person har ingen yngre søskende i databasen." #: src/gedlib/messages.c:122 msgid "This person has no older sibling in the database." msgstr "Denne person har ingen ældre søskende i databasen." #: src/gedlib/messages.c:123 msgid "This person's parents are not in the database." msgstr "Denne persons forældre findes ikke i databasen." #: src/gedlib/messages.c:124 msgid "This family has no male spouse/parent in the database." msgstr "Denne familie har ingen ægtefælle/mandlig forælder i databasen." #: src/gedlib/messages.c:125 msgid "This family has no female spouse/parent in the database." msgstr "Denne familie har ingen ægtefælle/kvindelig forælder i databasen." #: src/gedlib/messages.c:126 msgid "There are no children in the database for this family." msgstr "Der findes ingen børn i databasen for denne familie." #: src/gedlib/messages.c:127 msgid "This person has no children in the database." msgstr "Denne person har ingen børn i databasen." #: src/gedlib/messages.c:128 msgid "No such child." msgstr "Findes intet sådant barn." #: src/gedlib/messages.c:129 msgid "No such person." msgstr "Findes ingen sådan person." #: src/gedlib/messages.c:130 msgid "No such record." msgstr "Findes ingen sådan post." #: src/gedlib/messages.c:131 msgid "No such family." msgstr "Findes ingen sådan familie." #: src/gedlib/messages.c:132 msgid "No sources present." msgstr "Findes ingen kilder." #: src/gedlib/messages.c:133 msgid "Please choose the source to view." msgstr "Vælg kilde at se." #: src/gedlib/messages.c:134 msgid "No events present." msgstr "Findes ingen hændelser." #: src/gedlib/messages.c:135 msgid "Please choose the event to view." msgstr "Vælg hændelse at se." #: src/gedlib/messages.c:136 msgid "No others present." msgstr "Finns ingen øvrige." #: src/gedlib/messages.c:137 msgid "Please choose the other to view." msgstr "Vælg hvilken af øvrige at se." #: src/gedlib/messages.c:138 msgid "No notes present." msgstr "Findes ingen notitser." #: src/gedlib/messages.c:139 msgid "Please choose the note to view." msgstr "Vælg notits at se." #: src/gedlib/messages.c:140 msgid "No references present." msgstr "Findes ingen referencer." #: src/gedlib/messages.c:141 msgid "Please choose the reference to view." msgstr "Vælg reference at se." #: src/gedlib/messages.c:142 msgid "Duplicated REFN - please choose." msgstr "Dubleret REFN - vælg." #: src/gedlib/messages.c:144 msgid "New spouse/parent has unknown sex; can't add to family." msgstr "Ny ægtefælle/forælder har ukendt køn; kan ikke tilføje i familie." #: src/gedlib/messages.c:145 msgid "The persons are not of opposite sex; can't make family." msgstr "Personerne er ikke af modsat køn; kan ikke oprette familie." #: src/gedlib/messages.c:146 msgid "This person is not a spouse in the family; can't remove." msgstr "Denne person er ikke ægtefælle i familien; kan ikke fjerne." #: src/gedlib/messages.c:147 msgid "This person is not a child in the family; can't remove." msgstr "Denne person er ikke barn i familie; kan ikke fjerne." #: src/gedlib/messages.c:148 msgid "This person's sex is not known; can't make family." msgstr "Denne persons køn er ikke kendt; kan ikke oprette familie." #: src/gedlib/messages.c:149 msgid "This family already has a husband/male parent." msgstr "Denne familie har allerede en ægtefælle/mandlig forælder." #: src/gedlib/messages.c:150 msgid "This family already has a wife/female parent." msgstr "Denne familie har allerede en ægtefælle/kvindelig forælder." #: src/gedlib/messages.c:151 msgid "This family has both spouses/parents; can't add another." msgstr "" "I denne familie findes begge ægtefæller/forældre; kan ikke tilføje " "yderligere en." #: src/gedlib/messages.c:152 msgid "This family has neither spouse/parent; can't remove." msgstr "Denne familie har hverken ægtefælle eller forældre; kan ikke fjerne." #: src/gedlib/messages.c:153 msgid "This family still has links; not removed." msgstr "Denne familie har stadigvæk lænker; ikke fjernet." #: src/gedlib/messages.c:155 msgid "Choose a family by selecting a spouse/parent." msgstr "Vælg en familie ved at vælge en ægtefælle/forælder." #: src/gedlib/messages.c:156 #, fuzzy msgid "" "Do you want to edit the person again? (Otherwise changes will be discarded.)" msgstr "Vil du redigere personen igen?" #: src/gedlib/messages.c:157 msgid "Do you want to edit the person again?" msgstr "Vil du redigere personen igen?" #: src/gedlib/messages.c:158 #, fuzzy msgid "" "Do you want to edit the family again? (Otherwise changes will be discarded.)" msgstr "Vil du redigere familien igen?" #: src/gedlib/messages.c:159 msgid "Do you want to edit the family again?" msgstr "Vil du redigere familien igen?" #: src/gedlib/messages.c:160 #, fuzzy msgid "" "Do you want to edit the source again? (Otherwise changes will be discarded.)" msgstr "Vil du redigere kilden igen?" #: src/gedlib/messages.c:161 msgid "Do you want to edit the source again?" msgstr "Vil du redigere kilden igen?" #: src/gedlib/messages.c:162 #, fuzzy msgid "" "Do you want to edit the event again? (Otherwise changes will be discarded.)" msgstr "Vil du redigere hændelsen igen?" #: src/gedlib/messages.c:163 msgid "Do you want to edit the event again?" msgstr "Vil du redigere hændelsen igen?" #: src/gedlib/messages.c:164 #, fuzzy msgid "" "Do you want to edit the record again? (Otherwise changes will be discarded.)" msgstr "Vil du redigere posten igen?" #: src/gedlib/messages.c:165 msgid "Do you want to edit the record again?" msgstr "Vil du redigere posten igen?" #: src/gedlib/messages.c:166 msgid "Whom do you want to edit?" msgstr "Hvem vil du redigere?" #: src/gedlib/messages.c:167 msgid "Which source record do you want to edit?" msgstr "Hvilken kildepost vil du redigere?" #: src/gedlib/messages.c:168 msgid "Which event record do you want to edit?" msgstr "Hvilken hændelsepost vil du redigere?" #: src/gedlib/messages.c:169 msgid "What record do you want to edit?" msgstr "Hvilken post vil du redigere?" #: src/gedlib/messages.c:171 msgid "Do you really want to add this person to the database?" msgstr "Vil du virkelig tilføje denne person i databasen?" #: src/gedlib/messages.c:172 msgid "Do you really want to add this family to the database?" msgstr "Vil du virkelig tilføje denne familie i databasen?" #: src/gedlib/messages.c:173 msgid "Do you really want to add this child to the family?" msgstr "Vil du virkelig tilføje dette barn til familien?" #: src/gedlib/messages.c:174 msgid "Do you really want to add this spouse/parent to the family?" msgstr "Vil du virkelig tilføje denne ægtefælle/forælder i familien?" #: src/gedlib/messages.c:175 msgid "Do you really want to add this source to the database?" msgstr "Vil du virkelig tilføje denne kilde i databasen?" #: src/gedlib/messages.c:176 msgid "Do you really want to add this event to the database?" msgstr "Vil du virkelig tilføje denne hændelse i databasen?" #: src/gedlib/messages.c:177 msgid "Do you really want to add this record to the database?" msgstr "Vil du virkelig tilføje denne poste i databasen?" #: src/gedlib/messages.c:178 msgid "Do you really want to update this person?" msgstr "Vil du virkelig opdatere denne person?" #: src/gedlib/messages.c:179 msgid "Do you really want to update this family?" msgstr "Vil du virkelig opdatere denne familie?" #: src/gedlib/messages.c:180 msgid "Do you really want to update this source?" msgstr "Vil du virkelig opdatere denne kilde?" #: src/gedlib/messages.c:181 msgid "Do you really want to update this event?" msgstr "Vil du virkelig opdatere denne hændelse?" #: src/gedlib/messages.c:182 msgid "Do you really want to update this record?" msgstr "Vil du virkelig opdatere denne poste?" #: src/gedlib/messages.c:183 msgid "Are you sure you want to remove the person from the database?" msgstr "Er du sikker på at du vil fjerne denne person fra databasen?" #: src/gedlib/messages.c:184 #, fuzzy msgid "Are you sure you want to remove this record from the database?" msgstr "Er du sikker på at du vil fjerne denne person fra databasen?" #: src/gedlib/messages.c:185 #, fuzzy msgid "Remove this family record?" msgstr "Fjern denne familiepost?" #: src/gedlib/messages.c:186 #, c-format msgid "(Family %s (%s, %s)" msgstr "" #: src/gedlib/messages.c:187 msgid "Do you really want to merge these two persons?" msgstr "Vil du virkelig sammenflette disse to personer?" #: src/gedlib/messages.c:188 msgid "Do you really want to merge these two families?" msgstr "Vil du virkelig sammenflette disse to familier?" #: src/gedlib/messages.c:189 #, fuzzy msgid "Do you really want to swap spouse orders?" msgstr "Vil du virkelig opdatere denne poste?" #: src/gedlib/messages.c:190 #, fuzzy msgid "Do you really want to reorder children?" msgstr "Vil du virkelig opdatere denne hændelse?" #: src/gedlib/messages.c:191 msgid "Do you really want to remove this child from his/her family?" msgstr "Vil du virkelig fjerne dette barn fra hans/hendes familie?" #: src/gedlib/messages.c:192 msgid "Do you really want to remove this spouse from his/her family?" msgstr "Vil du virkelig fjerne denne ægtefælle fra hans/hendes familie?" #: src/gedlib/messages.c:193 msgid "Too many spouses to display full list" msgstr "For mange ægtefæller til at vise hele listen" #: src/gedlib/messages.c:194 msgid "These persons are children in different families." msgstr "Disse personer er børn i forskellige familier." #: src/gedlib/messages.c:195 msgid "Are you sure you want to merge them?" msgstr "Er du sikker på at du vil sammenflette dem?" #: src/gedlib/messages.c:197 msgid "There is something wrong with the data." msgstr "Noget er forkert i data." #: src/gedlib/messages.c:198 msgid "Please identify the child." msgstr "Identificér barnet." #: src/gedlib/messages.c:199 msgid "Please identify one of the child's siblings." msgstr "Identificér et af barnets søskende." #: src/gedlib/messages.c:200 msgid "Identify spouse/parent to add to an existing family." msgstr "Identificér ægtefælle/forælder at tilføje i en eksisterende familie." #: src/gedlib/messages.c:201 msgid "Identify spouse/parent already in family, if known." msgstr "" "Identificér ægtefælle/forælder som allerede findes i familien, hvis kendt." #: src/gedlib/messages.c:202 msgid "Identify child already in family." msgstr "Identificér barn som allerede findes i familien." #: src/gedlib/messages.c:204 msgid "This person is already a child in a family." msgstr "Denne person er allerede barn i en familie." #: src/gedlib/messages.c:205 msgid "Identify a spouse/parent for the new family." msgstr "Identificér en ægtefælle/forælder for den nye familie." #: src/gedlib/messages.c:206 msgid "Identify the second spouse/parent, if known." msgstr "Identificér den anden ægtefælle/forælder, hvis kendt." #: src/gedlib/messages.c:207 msgid "Both families must have husbands/fathers." msgstr "Begge familier skal have mænd/fædre." #: src/gedlib/messages.c:208 msgid "Both families must have wives/mothers." msgstr "Begge familier skal have hustruer/mødre." #: src/gedlib/messages.c:210 msgid "Identify spouse/parent in second family, if known." msgstr "Identificér ægtefælle/forælder i den anden familie, hvis kendt." #: src/gedlib/messages.c:211 msgid "Identify child in second family." msgstr "Identificér barn i den anden familie." #: src/gedlib/messages.c:212 msgid "Identify second person to browse to." msgstr "Identificér den anden person at bladre til." #: src/gedlib/messages.c:214 msgid "Create a family with this person as a child." msgstr "Opret en familie med denne person som barn." #: src/gedlib/messages.c:215 msgid "Create a family with this person as a spouse/parent." msgstr "Opret en familie med denne person som ægtefælle/forælder." #: src/gedlib/messages.c:216 msgid "This family has less than two children; can't swap." msgstr "Denne familie har mindre end to børn; kan ikke ombytte." #: src/gedlib/messages.c:217 msgid "This person is a spouse/parent in less than two families." msgstr "Denne person er ægtefælle/forælder i færre end to familier." #: src/gedlib/messages.c:218 msgid "Something impossible happened. Contact tech support." msgstr "Nogenting umuligt skete. Kontakt teknisk support." #: src/gedlib/messages.c:220 msgid "The two children were swapped." msgstr "De to børn ombyttedes." #: src/gedlib/messages.c:221 msgid "The two families were swapped." msgstr "De to familier ombyttedes." #: src/gedlib/messages.c:222 msgid "The child was removed from his/her family." msgstr "Barnet fjernedes fra dets familie." #: src/gedlib/messages.c:223 msgid "The spouse was removed from his/her family." msgstr "Ægtefællen fjernedes fra dens familie." #: src/gedlib/messages.c:225 msgid "A person cannot be merged with him/herself." msgstr "En person kan ikke sammenflettes med sig selv." #: src/gedlib/messages.c:226 msgid "A family cannot be merged with itself." msgstr "En familie kan ikke sammenflettes med sig selv." #: src/gedlib/messages.c:227 msgid "Two persons with different parents cannot be merged." msgstr "To personer med forskellige forældre kan ikke sammenflettes." #: src/gedlib/messages.c:228 msgid "Two parents of different sexes cannot be merged." msgstr "To forældre med forskellige køn kan ikke sammenflettes." #: src/gedlib/messages.c:229 msgid "The families have different fathers/husbands; cannot merge." msgstr "Familierne har forskellige fædre/mænd; kan ikke sammenflette." #: src/gedlib/messages.c:230 msgid "The families have different wives/mothers; cannot merge." msgstr "Familierne har forskellige hustruer/mødre; kan ikke sammenflette." #: src/gedlib/messages.c:231 msgid "Who do you want to remove from the database?" msgstr "Hvem vil du fjerne fra databasen?" #: src/gedlib/messages.c:232 #, fuzzy msgid "What record do you want to remove from the database?" msgstr "Hvem vil du fjerne fra databasen?" #: src/gedlib/messages.c:233 msgid "Place the child last in the family." msgstr "Placér barnet sidst i familien." #: src/gedlib/messages.c:234 msgid "Error in abbreviations file." msgstr "Fejl i forkortelsesfil." #: src/gedlib/messages.c:235 msgid "Error in user options file." msgstr "Fejl i filen for brugerindstillinger." #: src/gedlib/messages.c:236 msgid "Error in character mapping file." msgstr "Fejl i tegnmapningsfil." #: src/gedlib/messages.c:237 #, c-format msgid "(Separator is %s)" msgstr "(Adskiller er %s)" #: src/gedlib/messages.c:238 msgid "Do you want to re-edit it?" msgstr "Vil du omredigere den?" #: src/gedlib/messages.c:240 #, c-format msgid "%s was added to the database." msgstr "%s tilføjedes i databasen." #: src/gedlib/messages.c:241 #, c-format msgid "%s was added as a child." msgstr "%s tilføjedes som barn." #: src/gedlib/messages.c:242 #, c-format msgid "%s was added as a spouse and/or parent." msgstr "%s tilføjedes som ægtefælle og/eller forælder." #: src/gedlib/messages.c:243 msgid "The new family was added to the database." msgstr "Den nye familien tilføjedes i databasen." #: src/gedlib/messages.c:244 #, c-format msgid "%s was modified in the database." msgstr "%s ændredes i databasen." #: src/gedlib/messages.c:245 msgid "The family was modified in the database." msgstr "Familien ændredes i databasen." #: src/gedlib/messages.c:246 msgid "The source was modified in the database." msgstr "Kilden ændredes i databasen." #: src/gedlib/messages.c:247 msgid "The event was modified in the database." msgstr "Hændelsen ændredes i databasen." #: src/gedlib/messages.c:248 msgid "The record was modified in the database." msgstr "Posten ændredes i databasen." #: src/gedlib/messages.c:250 #, c-format msgid "Could not open file %s." msgstr "Kunne ikke åbne filen %s." #: src/gedlib/messages.c:251 msgid "Filepath too long." msgstr "" #: src/gedlib/messages.c:253 #, fuzzy msgid "Please mark a record first." msgstr "Markér en person først." #: src/gedlib/messages.c:255 #, c-format msgid "The current list is now named %s." msgstr "Den aktuelle liste har nu navnet %s." #: src/gedlib/messages.c:256 msgid "The current list is not named." msgstr "Den aktuelle liste har intet navn." #: src/gedlib/messages.c:257 msgid "What should the name of this list be?" msgstr "Hvad skal denne liste have for navn?" #: src/gedlib/messages.c:258 msgid "No persons were added to the current list." msgstr "Ingen personer tilføjedes i den aktuelle liste." #: src/gedlib/messages.c:259 msgid "What persons or list do you want to add to the current list?" msgstr "Hvilke personer/hvilken liste vil du tilføje i den aktuelle liste?" #: src/gedlib/messages.c:260 msgid "You are at the bottom of the list." msgstr "Du er i bunden af listen." #: src/gedlib/messages.c:261 msgid "You are at the top of the list." msgstr "Du er i toppen af listen." #: src/gedlib/messages.c:262 msgid "New persons were added to the current list." msgstr "Nye personer tilføjedes i den aktuelle liste." #: src/gedlib/messages.c:264 msgid "System error: illegal map code" msgstr "Systemfejl: ikke tilladt mapningskode" #: src/gedlib/messages.c:265 msgid "No such translation table in this database" msgstr "Ingen sådan oversættelsestabel i denne database." #: src/gedlib/messages.c:268 msgid "Because of errors the GEDCOM file was not loaded.\n" msgstr "På grund af fejl indlæstes GEDCOM-filen ikke.\n" #: src/gedlib/messages.c:269 msgid "No errors; adding records with original keys..." msgstr "Ingen fejl; tilføjer poster med oprindelige nøgler..." #: src/gedlib/messages.c:270 msgid "No errors; adding records with new keys..." msgstr "Ingen fejl; tilføjer poster med nye nøgler..." #: src/gedlib/messages.c:271 msgid "Use original keys from GEDCOM file?" msgstr "Vil du bruge oprindelige nøgler fra GEDCOM-filen?" #: src/gedlib/messages.c:272 msgid "Proceed?" msgstr "" #: src/gedlib/messages.c:273 msgid "Enter name of output archive file." msgstr "Indtast navn for uddata arkivfil." #: src/gedlib/messages.c:274 #, c-format msgid "Database `%s' has been saved in `%s'." msgstr "Databasen \"%s\" er gemt i \"%s\"." #: src/gedlib/messages.c:275 msgid "Enter name of translation table file to write" msgstr "Indtast navn på oversættelsestabelfil at skrive til" #: src/gedlib/messages.c:276 msgid "Enter name of translation table file to read" msgstr "Indtast navn på oversættelsestabelfil at læse in" #: src/gedlib/messages.c:277 #, fuzzy, c-format msgid "Line %d: The person defined here has no key: skipped." msgstr "Linje %d: Denne linje har intet niveaunummer." #: src/gedlib/messages.c:278 #, fuzzy, c-format msgid "Line %d: The family defined here has no key." msgstr "Linje %d: Denne linje har intet niveaunummer." #: src/gedlib/messages.c:279 #, c-format msgid "Lines %d and %d: Person %s is multiply defined: skipped." msgstr "" #: src/gedlib/messages.c:280 #, c-format msgid "Lines %d and %d: Family %s is multiply defined." msgstr "" #: src/gedlib/messages.c:281 #, c-format msgid "Line %d: Person %s has an incorrect key: skipped." msgstr "" #: src/gedlib/messages.c:282 #, fuzzy, c-format msgid "Line %d: Family %s has an incorrect key." msgstr "Linje %d: Denne linje er ufuldstændig." #: src/gedlib/messages.c:283 #, c-format msgid "Person %s is referred to but not defined." msgstr "" #: src/gedlib/messages.c:284 #, c-format msgid "Family %s is referred to but not defined." msgstr "" #: src/gedlib/messages.c:285 #, c-format msgid "Source %s is referred to but not defined." msgstr "" #: src/gedlib/messages.c:286 #, c-format msgid "Event %s is referred to but not defined." msgstr "" #: src/gedlib/messages.c:287 #, fuzzy, c-format msgid "Line %d: This line has a level number that is too large." msgstr "Linje %d: Denne linje har intet niveaunummer." #: src/gedlib/messages.c:288 #, fuzzy, c-format msgid "Line %d: Person defined here has no name." msgstr "Linje %d: Denne linje har intet niveaunummer." #: src/gedlib/messages.c:294 msgid "" msgstr "" #: src/gedlib/messages.c:296 msgid "What is the name of the program?" msgstr "Hvad er navnet på programmet?" #: src/gedlib/messages.c:297 msgid "Please enter the name of the GEDCOM file." msgstr "Indtast navnet på GEDCOM-filen." #: src/gedlib/messages.c:299 msgid "What is the name of the output file?" msgstr "Hvad er navnet på uddatafilen?" #: src/gedlib/messages.c:300 msgid "Malformed configuration file: line too long." msgstr "Fejl i konfigurationsfil: for lang linje." #: src/gedlib/messages.c:301 msgid "Unsupported file encoding (no multibyte encodings except UTF-8)." msgstr "" #: src/gedlib/messages.c:302 #, c-format msgid "Unsupported file encoding: %s." msgstr "" #: src/gedlib/messages.c:305 msgid "Enter string for program" msgstr "Indtast streng for program" #: src/gedlib/messages.c:306 msgid "enter string: " msgstr "indtast streng: " #: src/gedlib/messages.c:307 msgid "enter integer:" msgstr "indtast heltal:" #: src/gedlib/messages.c:308 msgid "enter name: " msgstr "indtast navn: " #: src/gedlib/messages.c:309 msgid "Strike any key to continue." msgstr "" #: src/gedlib/messages.c:313 msgid "" "0 SOUR\n" "1 REFN\n" "1 TITL Title\n" "1 AUTH Author" msgstr "" "0 SOUR\n" "1 REFN\n" "1 TITL Titel\n" "1 AUTH Forfatter" #: src/gedlib/messages.c:314 msgid "" "0 EVEN\n" "1 REFN\n" "1 DATE\n" "1 PLAC\n" "1 INDI\n" " 2 NAME\n" " 2 ROLE\n" "1 SOUR" msgstr "" "0 EVEN\n" "1 REFN\n" "1 DATE\n" "1 PLAC\n" "1 INDI\n" " 2 NAME\n" " 2 ROLE\n" "1 SOUR" #: src/gedlib/messages.c:315 msgid "" "0 XXXX\n" "1 REFN" msgstr "" "0 XXXX\n" "1 REFN" #: src/gedlib/messages.c:319 msgid "The file is as positioned at EOF." msgstr "Filen er positioneret ved filslut." #: src/gedlib/messages.c:320 #, c-format msgid "Line %d: This line is empty; EOF?" msgstr "Linje %d: Denne linje er tom; filslut?" #: src/gedlib/messages.c:321 #, c-format msgid "Line %d: This line is too long." msgstr "Rad %d: Denne linje er for lang." #: src/gedlib/messages.c:322 #, c-format msgid "Line %d: This line has no level number." msgstr "Linje %d: Denne linje har intet niveaunummer." #: src/gedlib/messages.c:323 #, c-format msgid "Line %d: This line is incomplete." msgstr "Linje %d: Denne linje er ufuldstændig." #: src/gedlib/messages.c:324 #, c-format msgid "Line %d: This line has a bad link." msgstr "Linje %d: Denne linje har en ugyldig lænke." #: src/gedlib/messages.c:325 #, c-format msgid "Line %d: This line needs white space before tag." msgstr "Linje %d: Denne linje behøver blanktegn inden mærke." #: src/gedlib/messages.c:326 #, c-format msgid "Line %d: This line has an illegal level." msgstr "Linje %d: Denne linje har et ikke tilladt niveau." #: src/gedlib/messages.c:327 msgid "The record begins at wrong level." msgstr "Posten begynder på forkert niveau." #: src/gedlib/messages.c:330 msgid "" "\n" "Aborting now. Core dump? [y/n]" msgstr "" "\n" "Afbryder nu. Opret hukommelsesudskrift? [y/n]" #: src/gedlib/messages.c:331 msgid "" "Looks like a program was running.\n" "Check file %1 around line %2.\n" msgstr "" "Virker som om et program kørtes.\n" "Kontrollér fil %1 omkring linje %2.\n" #: src/gedlib/messages.c:332 msgid "signal %1: %2" msgstr "signal %1: %2" #: src/gedlib/messages.c:334 msgid "SIGNAL 0" msgstr "SIGNAL 0" #: src/gedlib/messages.c:335 msgid "HANGUP" msgstr "LÆG PÅ" #: src/gedlib/messages.c:336 msgid "INTERRUPT" msgstr "AFBRUD" #: src/gedlib/messages.c:337 msgid "QUIT" msgstr "AFSLUT" #: src/gedlib/messages.c:338 msgid "ILLEGAL INSTRUCTION" msgstr "UTILLADT INSTRUKTION" #: src/gedlib/messages.c:339 msgid "TRACE TRAP" msgstr "SPORINGSFÆLDE" #: src/gedlib/messages.c:340 msgid "ABORT" msgstr "AFBRUDT" #: src/gedlib/messages.c:341 msgid "EMT INST" msgstr "EMT INST" #: src/gedlib/messages.c:342 msgid "FLOATING POINT EXCEPTION" msgstr "FLYDENDETALSUNDTAGELSE" #: src/gedlib/messages.c:343 msgid "KILL" msgstr "DRÆBT" #: src/gedlib/messages.c:344 msgid "BUS ERROR" msgstr "BUSFEJL" #: src/gedlib/messages.c:345 msgid "SEGMENTATION ERROR" msgstr "SEGMENTERINGSFEJL" #: src/gedlib/messages.c:346 msgid "SYSTEM CALL ERROR" msgstr "SYSTEMKALDSFEJL" #: src/gedlib/messages.c:347 msgid "PIPE WRITE" msgstr "RØRSKRIVNING" #: src/gedlib/messages.c:348 msgid "ALARM CLOCK" msgstr "ALARMKLOKKE" #: src/gedlib/messages.c:350 #, fuzzy msgid "TERMINATE FROM KILL" msgstr "AFSLUTTET FRA KILL" #: src/gedlib/messages.c:351 msgid "USER SIGNAL 1" msgstr "BRUGERSIGNAL 1" #: src/gedlib/messages.c:352 msgid "USER SIGNAL 2" msgstr "BRUGERSIGNAL 2" #: src/gedlib/messages.c:353 msgid "DEATH OF CHILD" msgstr "BARN DØD" #: src/gedlib/messages.c:354 msgid "POWER-FAIL RESTART" msgstr "STRØMAFBRUDSGENSTART" #: src/gedlib/messages.c:355 msgid "WINDOW CHANGE" msgstr "VINDUESÆNDRING" #: src/gedlib/messages.c:356 msgid "Unknown signal" msgstr "Ukendt signal" #: src/gedlib/messages.c:360 msgid "person" msgstr "person" #: src/gedlib/messages.c:361 msgid ", of " msgstr ", fra " #: src/gedlib/messages.c:362 msgid "father" msgstr "fader" #: src/gedlib/messages.c:363 msgid "mother" msgstr "moder" #: src/gedlib/messages.c:364 msgid "spouse" msgstr "ægtefælle" #: src/gedlib/messages.c:365 msgid "child" msgstr "barn" #: src/gedlib/messages.c:368 msgid "m. " msgstr "g. " #: src/gedlib/messages.c:370 msgid "div. " msgstr "ski." #: src/gedlib/messages.c:372 msgid "b. " msgstr "f. " #: src/gedlib/messages.c:374 msgid "bap. " msgstr "døb. " #: src/gedlib/messages.c:376 msgid "d. " msgstr "d. " #: src/gedlib/messages.c:378 msgid "bur. " msgstr "beg. " #: src/gedlib/messages.c:380 msgid "cb. " msgstr "bf. " #: src/gedlib/messages.c:382 msgid "married: " msgstr "gift: " #: src/gedlib/messages.c:383 msgid "born: " msgstr "født: " #: src/gedlib/messages.c:384 msgid "bapt: " msgstr "døbt: " #: src/gedlib/messages.c:385 msgid "died: " msgstr "død: " #: src/gedlib/messages.c:386 msgid "buri: " msgstr "begr: " #: src/gedlib/messages.c:390 msgid "You cannot edit the INDI line in a person record." msgstr "Du kan ikke redigere INDI-linjen i en personpost." #: src/gedlib/messages.c:391 msgid "You cannot edit the FAMC line in a person record." msgstr "Du kan ikke redigere FAMC-linjen i en personpost." #: src/gedlib/messages.c:392 msgid "You cannot edit the FAMS lines in a person record." msgstr "Du kan ikke redigere FAMS-linjen i en personpost." #: src/gedlib/messages.c:393 msgid "You cannot edit the FAM line in a family record." msgstr "Du kan ikke redigere FAM-linjen i en familiepost." #: src/gedlib/messages.c:394 msgid "You cannot edit the HUSB line in a family record." msgstr "Du kan ikke redigere HUSB-linjen i en familiepost." #: src/gedlib/messages.c:395 msgid "You cannot edit the WIFE line in a family record." msgstr "Du kan ikke redigere WIFE-linjen i en familiepost." #: src/gedlib/messages.c:396 msgid "You cannot edit the CHIL lines in a family record." msgstr "Du kan ikke redigere CHIL-linjerne i en familiepost." #: src/gedlib/messages.c:397 msgid "The record is empty." msgstr "Posten er tom." #: src/gedlib/messages.c:398 msgid "The record does not begin with an INDI line." msgstr "Posten begynder ikke med en INDI-linje." #: src/gedlib/messages.c:399 msgid "The record does not begin with a FAM line." msgstr "Posten begynder ikke med en FAM-linje." #: src/gedlib/messages.c:400 msgid "The record does not begin with a SOUR line." msgstr "Posten begynder ikke med en SOUR-linje." #: src/gedlib/messages.c:401 msgid "The record does not begin with an EVEN line." msgstr "Posten begynder ikke med en EVEN-linje." #: src/gedlib/messages.c:402 msgid "INDI, FAM, SOUR, EVEN records may not be other records." msgstr "INDI-, FAM-, SOUR- og EVEN-poster må ikke være andre poster." #: src/gedlib/messages.c:403 msgid "The record contains multiple level 0 lines." msgstr "Posten indeholder flere linjer på 0-niveauet." #: src/gedlib/messages.c:404 msgid "This person record has bad GEDCOM name syntax." msgstr "Denne personpost har ugyldig GEDCOM-navnesyntaks." #: src/gedlib/messages.c:405 msgid "You cannot change the sex of a parent." msgstr "Du kan ikke ændre køn for en forælder." #: src/gedlib/messages.c:406 msgid "REFN key is already in use." msgstr "REFN-nøgle bruges allerede." #: src/gedlib/messages.c:408 msgid "Tag is too long to connect automatically." msgstr "Mærket er for langt til at tilknytte automatisk." #: src/gedlib/messages.c:410 msgid "Database records" msgstr "" #: src/gedlib/messages.c:411 #, fuzzy, c-format msgid "%dI, %dF, %dS, %dE, %dX" msgstr "Databaseposter (%dP, %dF, %dS, %dE, %dX)" #: src/gedlib/messages.c:414 #, c-format msgid "LifeLines %s - Genealogical DB and Programming System" msgstr "LifeLines %s - Genealogisk database- og programmeringssystem" #: src/gedlib/messages.c:415 msgid "Copyright(c) 1991 to 1996, by T. T. Wetmore IV" msgstr "Copyright© 1991 til 1996, af T. T. Wetmore IV" #: src/gedlib/messages.c:416 #, c-format msgid "Current Database - %s" msgstr "Aktuel database - %s" #: src/gedlib/messages.c:418 msgid " (immutable)" msgstr " (uforanderlig)" #: src/gedlib/messages.c:420 msgid " (read only)" msgstr "(skrivebeskyttet)" #: src/gedlib/messages.c:421 msgid "Please choose an operation:" msgstr "Vælg en kommando:" #: src/gedlib/messages.c:422 msgid "Not valid command" msgstr "Ugyldig kommando" #: src/gedlib/messages.c:425 msgid "enter y (yes) or n (no): " msgstr "indtast j (ja) eller n (nej): " #: src/gedlib/messages.c:426 msgid "yYnN" msgstr "yYjJnN" #: src/gedlib/messages.c:427 msgid "yY" msgstr "yYjJ" #: src/gedlib/messages.c:430 msgid "LifeLines -- Person Browse Screen (* toggles menu)" msgstr "LifeLines -- Personvindue (* viser/skjuler menu)" #: src/gedlib/messages.c:431 msgid "LifeLines -- Family Browse Screen (* toggles menu)" msgstr "LifeLines -- Familievindue (* viser/skjuler menu)" #: src/gedlib/messages.c:432 msgid "LifeLines -- Two Person Browse Screen (* toggles menu)" msgstr "LifeLines -- Topersonsvindue (* viser/skjuler menu)" #: src/gedlib/messages.c:433 msgid "LifeLines -- Two Family Browse Screen (* toggles menu)" msgstr "LifeLines -- Tofamiliesvindue (* viser/skjuler menu)" #: src/gedlib/messages.c:434 msgid "LifeLines -- Auxiliary Browse Screen (* toggles menu)" msgstr "LifeLines -- Assistentvindue (* viser/skjuler menu)" #: src/gedlib/messages.c:435 msgid "LifeLines -- List Browse Screen (* toggles menu)" msgstr "LifeLines -- Listevindue (* viser/skjuler menu)" #: src/gedlib/messages.c:439 #, fuzzy msgid "Commands: Select by number, u Page Up, d Page Down, i Select, q Quit" msgstr "Kommandoer: j Flyt ned k Flyt op i Vælg q Afslut" #: src/gedlib/messages.c:440 msgid "Commands: u Page Up, d Page Down, q Quit" msgstr "" #: src/gedlib/messages.c:441 msgid "Messages:" msgstr "Meddelelser:" #: src/gedlib/messages.c:444 msgid "Please choose from the following options:" msgstr "Vælg blandt de følgende alternativer:" #: src/gedlib/messages.c:445 #, c-format msgid "New record is %s" msgstr "Den nye post er %s" #: src/gedlib/messages.c:446 msgid "Insert xref automatically at bottom of current record." msgstr "Indsæt krydsref automatisk i bunden af aktuel post." #: src/gedlib/messages.c:447 msgid "Edit current record now to add xref manually." msgstr "Redigér aktuel post nu til at tilføje krydsref manuelt." #: src/gedlib/messages.c:448 msgid "Browse new record (without adding xref)." msgstr "Bladr i ny post (uden at tilføje krydsref)." #: src/gedlib/messages.c:449 msgid "Return to current record (without adding xref)." msgstr "Gå tilbage til aktuel post (uden at tilføje krydsref)." #: src/gedlib/messages.c:452 msgid "Spouse unknown" msgstr "Ægtefælle ukendt" #: src/gedlib/messages.c:453 msgid "No more history" msgstr "Slut på historik" #: src/gedlib/messages.c:454 msgid "Bad history count" msgstr "Ugyldig historiknumrering" #: src/gedlib/messages.c:455 msgid "Bad backup history count" msgstr "Ugyldig sikkerhedskopieret historiknumrering" #: src/gedlib/messages.c:456 msgid "Bad history length" msgstr "Ugyldig historiklængde" #: src/gedlib/messages.c:457 #, fuzzy, c-format msgid "Delete history (%d entries)?" msgstr "Fjern historik (%d poster)?" #: src/gedlib/messages.c:458 msgid "Error accessing data" msgstr "Fejl ved dataadgang" #: src/gedlib/messages.c:459 msgid "Choose from history" msgstr "Vælg fra historik" #: src/gedlib/messages.c:460 msgid "" "Cannot combine immutable (-i) or read-only (-r) with read-write (-w) access." msgstr "" "Kan ikke kombinere uforanderlig (-i) eller skrivebeskyttet (-r) med " "skriveadgang (-w)." #: src/gedlib/messages.c:461 msgid "Cannot combine forceopen (-f) and lock (-l) flags." msgstr "Kan ikke kombinere flagene forceret åbning (-f) og lås (-l)." #: src/gedlib/messages.c:462 msgid "Default path: " msgstr "Forvalgt søgesti: " #: src/gedlib/messages.c:463 msgid "WARNING: missing keys" msgstr "ADVARSEL: nøgler mangler" #: src/gedlib/messages.c:464 #, fuzzy msgid "This does not point to another record in the database!" msgstr "6 Redigér en post af anden type i databasen" #: src/gedlib/messages.c:465 msgid "enter file name" msgstr "indtast filnavn" #: src/gedlib/messages.c:466 #, c-format msgid "enter file name (*%s)" msgstr "indtast filnavn (*%s)" #: src/gedlib/messages.c:467 msgid "There is no record with that key or reference." msgstr "Der findes ingen post med den nøgle eller reference." #: src/gedlib/messages.c:468 msgid "Database was corrupt." msgstr "" #: src/gedlib/messages.c:471 msgid "Bad decimal number format." msgstr "Ugyldigt format for decimaltal." #: src/gedlib/messages.c:472 msgid "Bad hexidecimal number format." msgstr "Ugyldigt format for heksadecimale tal." #: src/gedlib/messages.c:473 msgid "No replacement string on line." msgstr "Ingen erstatningsstreng på linjen." #: src/gedlib/messages.c:474 msgid "No original string on line." msgstr "Ingen oprindelig streng på linjen." #: src/gedlib/messages.c:475 msgid "Bad escape format." msgstr "Fejlagtigt kontrolsekvensformat." #: src/gedlib/messages.c:476 #, fuzzy, c-format msgid "%s: line %d (entry %d): %s" msgstr "%s: linje %d (notering %d): %s\n" #: src/gedlib/messages.c:479 src/liflines/brwsmenu.c:26 msgid "q Return to main menu" msgstr "q Gå tilbage til hovedmenuen" #: src/gedlib/messages.c:480 msgid "q Return to previous menu" msgstr "q Gå tilbage til foregående menu" #: src/gedlib/messages.c:481 msgid "q Quit program" msgstr "q Afslut programmet" #: src/gedlib/messages.c:482 #, fuzzy msgid "Q Quit current database" msgstr "Aktuel database - %s" #: src/gedlib/messages.c:485 msgid "b Browse the persons in the database" msgstr "b Bladr mellem personer i databasen" #: src/gedlib/messages.c:486 msgid "s Search database" msgstr "s Søg i databasen" #: src/gedlib/messages.c:487 msgid "a Add information to the database" msgstr "a Tilføj information i databasen" #: src/gedlib/messages.c:488 msgid "d Delete information from the database" msgstr "d Fjern information fra databasen" #: src/gedlib/messages.c:489 msgid "r Generate report by entering report name" msgstr "r Opret rapport ved at angive rapportens navn" #: src/gedlib/messages.c:490 msgid "p Pick a report from list and run" msgstr "p Vælg en rapport fra liste og kør" #: src/gedlib/messages.c:491 msgid "c Character set options" msgstr "c Indstillinger for tegnsæt" #: src/gedlib/messages.c:492 msgid "t Modify character translation tables" msgstr "t Modificér tegnoversættelsestabeller" #: src/gedlib/messages.c:493 msgid "u Miscellaneous utilities" msgstr "u Diverse værktøjer" #: src/gedlib/messages.c:494 msgid "x Handle source, event and other records" msgstr "x Håndtér kilde-, hændelse- og øvrige poster" #: src/gedlib/messages.c:497 #, fuzzy msgid "What utility do you want to perform?" msgstr "Hvilket værktøj vil du bruge?" #: src/gedlib/messages.c:498 msgid "s Save the database in a GEDCOM file" msgstr "s Gem databasen til GEDCOM-fil" #: src/gedlib/messages.c:499 msgid "r Read in data from a GEDCOM file" msgstr "r Indlæs data fra en GEDCOM-fil" #: src/gedlib/messages.c:500 msgid "R Pick a GEDCOM file and read in" msgstr "" #: src/gedlib/messages.c:501 msgid "k Find a person's key value" msgstr "k Find nøgleværdi for en person" #: src/gedlib/messages.c:502 msgid "i Identify a person from key value" msgstr "i Identificér en person via nøgleværdi" #: src/gedlib/messages.c:503 msgid "d Show database statistics" msgstr "d Vis databasestatistik" #: src/gedlib/messages.c:504 msgid "m Show memory statistics" msgstr "m Vis hukommelsesstatistik" #: src/gedlib/messages.c:505 msgid "e Edit the place abbreviation file" msgstr "e Redigér pladsforkortelsesfilen" #: src/gedlib/messages.c:506 msgid "o Edit the user options file" msgstr "o Redigér fil for brugerindstillinger" #: src/gedlib/messages.c:509 msgid "What activity do you want to perform?" msgstr "Hvilken funktion vil du bruge?" #: src/gedlib/messages.c:510 msgid "s Browse source records" msgstr "s Bladr i kildeposter" #: src/gedlib/messages.c:511 msgid "e Browse event records" msgstr "e Bladr i hændelseposter" #: src/gedlib/messages.c:512 msgid "x Browse other records" msgstr "x Bladr i øvrige posttyper" #: src/gedlib/messages.c:513 msgid "1 Add a source record to the database" msgstr "1 Tilføj en kildepost i databasen" #: src/gedlib/messages.c:514 msgid "2 Edit source record from the database" msgstr "2 Redigér kildepost i databasen" #: src/gedlib/messages.c:515 msgid "3 Add an event record to the database" msgstr "3 Tilføj en hændelsepost i databasen" #: src/gedlib/messages.c:516 msgid "4 Edit event record from the database" msgstr "4 Redigér hændelsepost i databasen" #: src/gedlib/messages.c:517 msgid "5 Add an other record to the database" msgstr "5 Tilføj en post af anden type i databasen" #: src/gedlib/messages.c:518 msgid "6 Edit other record from the database" msgstr "6 Redigér en post af anden type i databasen" #: src/gedlib/messages.c:521 msgid "Translation Tables" msgstr "Tegnoversættelsestabeller" #: src/gedlib/messages.c:522 msgid "e edit individual tables (in db)" msgstr "e redigér individuelle tabeller (i db)" #: src/gedlib/messages.c:523 msgid "l load a table from a file (into db)" msgstr "l indlæs en tabel fra en fil (til db)" #: src/gedlib/messages.c:524 msgid "s save a table to a file (from db)" msgstr "s gem en tabel til en fil (fra db)" #: src/gedlib/messages.c:525 msgid "x export all tables (from db to files)" msgstr "x eksportér alle tabeller (fra db til filer)" #: src/gedlib/messages.c:526 msgid "i import all tables (from files into db)" msgstr "i importér alle tabeller (fra filer til db)" #: src/gedlib/messages.c:527 msgid "export/import directory:" msgstr "eksportér/importér katalog:" #: src/gedlib/messages.c:530 msgid "Which character mapping do you want to edit?" msgstr "Hvilken tegnmapning vil du redigere?" #: src/gedlib/messages.c:531 msgid "Which character mapping do you want to save?" msgstr "Hvilken tegnmapning vil du gemme?" #: src/gedlib/messages.c:534 msgid "Not implemented yet" msgstr "Ikke implementeret endnu" #: src/gedlib/messages.c:537 msgid "What do you want to add?" msgstr "Hvad vil du tilføje?" #: src/gedlib/messages.c:538 msgid "p Person - add new person to the database" msgstr "p Person - tilføj ny person i databasen" #: src/gedlib/messages.c:539 msgid "f Family - create family record from one or two spouses" msgstr "f Familie - opret familiepost med en eller to ægtefæller" #: src/gedlib/messages.c:540 msgid "c Child - add a child to an existing family" msgstr "c Barn - tilføj et barn i en eksisterende familie" #: src/gedlib/messages.c:541 msgid "s Spouse - add a spouse to an existing family" msgstr "s Ægtefælle - tilføj en ægtefælle til en eksisterende familie" #: src/gedlib/messages.c:544 msgid "What do you want to remove?" msgstr "Hvad vil du fjerne?" #: src/gedlib/messages.c:545 msgid "c Child - remove a child from his/her family" msgstr "c Barn - fjern et barn fra dets familie" #: src/gedlib/messages.c:546 msgid "s Spouse - remove a spouse from a family" msgstr "s Ægtefælle - fjern en ægtefælle fra en eksisterende familie" #: src/gedlib/messages.c:547 msgid "i Individual - remove a person completely" msgstr "i Person - fjern en person fuldstændigt" #: src/gedlib/messages.c:548 msgid "f Family - remove a family completely" msgstr "f Familie - fjern en familie fuldstændigt" #: src/gedlib/messages.c:549 #, fuzzy msgid "o Other - remove other record completely" msgstr "i Person - fjern en person fuldstændigt" #: src/gedlib/messages.c:552 msgid "How would you like to find a record?" msgstr "" #: src/gedlib/messages.c:555 msgid "Performing full name scan" msgstr "Udfør søgning på hele navnet" #: src/gedlib/messages.c:556 msgid "Performing name fragment scan" msgstr "Udfør søgning på navnefragment" #: src/gedlib/messages.c:557 msgid "Performing refn scan" msgstr "Udfør søgning på refn" #: src/gedlib/messages.c:558 #, fuzzy msgid "Performing source scan" msgstr "Udfør søgning på refn" #: src/gedlib/messages.c:559 msgid "No records found in scan" msgstr "Ingen poster fandtes i søgning" #: src/gedlib/messages.c:562 msgid "abt %1" msgstr "omk %1" #: src/gedlib/messages.c:563 msgid "about %1" msgstr "omkring %1" #: src/gedlib/messages.c:564 msgid "est %1" msgstr "ans %1" #: src/gedlib/messages.c:565 msgid "estimated %1" msgstr "anslået %1" #: src/gedlib/messages.c:566 msgid "cal %1" msgstr "ber %1" #: src/gedlib/messages.c:567 msgid "calculated %1" msgstr "beregnet %1" #: src/gedlib/messages.c:568 msgid "fr %1" msgstr "fr %1" #: src/gedlib/messages.c:569 msgid "from %1" msgstr "fra %1" #: src/gedlib/messages.c:570 src/gedlib/messages.c:571 msgid "to %1" msgstr "t %1" #: src/gedlib/messages.c:572 msgid "fr %1 to %2" msgstr "fr %1 t %2" #: src/gedlib/messages.c:573 msgid "from %1 to %2" msgstr "fra %1 til %2" #: src/gedlib/messages.c:574 msgid "bef %1" msgstr "før %1" #: src/gedlib/messages.c:575 msgid "before %1" msgstr "før %1" #: src/gedlib/messages.c:576 msgid "aft %1" msgstr "eft %1" #: src/gedlib/messages.c:577 msgid "after %1" msgstr "efter %1" #: src/gedlib/messages.c:578 msgid "bet %1 and %2" msgstr "mel %1 og %2" #: src/gedlib/messages.c:579 msgid "between %1 and %2" msgstr "mellem %1 og %2" #: src/gedlib/messages.c:582 msgid "B.C." msgstr "f. Kr." #: src/gedlib/messages.c:584 msgid "BC" msgstr "fKr" #: src/gedlib/messages.c:586 msgid "B.C.E." msgstr "f. Kr." #: src/gedlib/messages.c:588 msgid "BCE" msgstr "fKr" #: src/gedlib/messages.c:590 msgid "A.D." msgstr "e. Kr." #: src/gedlib/messages.c:592 msgid "AD" msgstr "eKr" #: src/gedlib/messages.c:594 msgid "C.E." msgstr "e. Kr." #: src/gedlib/messages.c:596 msgid "CE" msgstr "eKr" #: src/gedlib/messages.c:599 msgid "%1J" msgstr "%1J" #: src/gedlib/messages.c:601 msgid "%1 HEB" msgstr "%1 HEB" #: src/gedlib/messages.c:603 msgid "%1 FR" msgstr "%1 FR" #: src/gedlib/messages.c:605 msgid "%1 AUC" msgstr "%1 AUC" #: src/gedlib/messages.c:607 msgid "jan" msgstr "jan" #: src/gedlib/messages.c:608 msgid "january" msgstr "januar" #: src/gedlib/messages.c:609 msgid "feb" msgstr "feb" #: src/gedlib/messages.c:610 msgid "february" msgstr "februar" #: src/gedlib/messages.c:611 msgid "mar" msgstr "mar" #: src/gedlib/messages.c:612 msgid "march" msgstr "marts" #: src/gedlib/messages.c:613 msgid "apr" msgstr "apr" #: src/gedlib/messages.c:614 msgid "april" msgstr "april" #: src/gedlib/messages.c:616 msgid "**may" msgstr "maj" #: src/gedlib/messages.c:617 msgid "may" msgstr "maj" #: src/gedlib/messages.c:618 msgid "jun" msgstr "jun" #: src/gedlib/messages.c:619 msgid "june" msgstr "juni" #: src/gedlib/messages.c:620 msgid "jul" msgstr "jul" #: src/gedlib/messages.c:621 msgid "july" msgstr "juli" #: src/gedlib/messages.c:622 msgid "aug" msgstr "aug" #: src/gedlib/messages.c:623 msgid "august" msgstr "august" #: src/gedlib/messages.c:624 msgid "sep" msgstr "sep" #: src/gedlib/messages.c:625 msgid "september" msgstr "september" #: src/gedlib/messages.c:626 msgid "oct" msgstr "okt" #: src/gedlib/messages.c:627 msgid "october" msgstr "oktober" #: src/gedlib/messages.c:628 msgid "nov" msgstr "nov" #: src/gedlib/messages.c:629 msgid "november" msgstr "november" #: src/gedlib/messages.c:630 msgid "dec" msgstr "dec" #: src/gedlib/messages.c:631 msgid "december" msgstr "december" #: src/gedlib/messages.c:633 msgid "tsh" msgstr "tsh" #: src/gedlib/messages.c:634 msgid "tishri" msgstr "tishri" #: src/gedlib/messages.c:635 msgid "csh" msgstr "csh" #: src/gedlib/messages.c:636 msgid "cheshvan" msgstr "cheshvan" #: src/gedlib/messages.c:637 msgid "ksl" msgstr "ksl" #: src/gedlib/messages.c:638 msgid "kislev" msgstr "kislev" #: src/gedlib/messages.c:639 msgid "tvt" msgstr "tvt" #: src/gedlib/messages.c:640 msgid "tevet" msgstr "tevet" #: src/gedlib/messages.c:641 msgid "shv" msgstr "shv" #: src/gedlib/messages.c:642 msgid "shevat" msgstr "shevat" #: src/gedlib/messages.c:643 msgid "adr" msgstr "adr" #: src/gedlib/messages.c:644 msgid "adar" msgstr "adar" #: src/gedlib/messages.c:645 msgid "ads" msgstr "ads" #: src/gedlib/messages.c:646 msgid "adar sheni" msgstr "adar sheni" #: src/gedlib/messages.c:647 msgid "nsn" msgstr "nsn" #: src/gedlib/messages.c:648 msgid "nisan" msgstr "nisan" #: src/gedlib/messages.c:649 msgid "iyr" msgstr "iyr" #: src/gedlib/messages.c:650 msgid "iyar" msgstr "iyar" #: src/gedlib/messages.c:651 msgid "svn" msgstr "svn" #: src/gedlib/messages.c:652 msgid "sivan" msgstr "sivan" #: src/gedlib/messages.c:653 msgid "tmz" msgstr "tmz" #: src/gedlib/messages.c:654 msgid "tamuz" msgstr "tamuz" #: src/gedlib/messages.c:655 msgid "aav" msgstr "aav" #: src/gedlib/messages.c:656 #, fuzzy msgid "av" msgstr "aav" #: src/gedlib/messages.c:657 msgid "ell" msgstr "ell" #: src/gedlib/messages.c:658 msgid "elul" msgstr "elul" #: src/gedlib/messages.c:660 msgid "vend" msgstr "vend" #: src/gedlib/messages.c:661 msgid "vendemiaire" msgstr "vendemiaire" #: src/gedlib/messages.c:662 msgid "brum" msgstr "brum" #: src/gedlib/messages.c:663 msgid "brumaire" msgstr "brumaire" #: src/gedlib/messages.c:664 msgid "frim" msgstr "frim" #: src/gedlib/messages.c:665 msgid "frimaire" msgstr "frimaire" #: src/gedlib/messages.c:666 msgid "nivo" msgstr "nivo" #: src/gedlib/messages.c:667 msgid "nivose" msgstr "nivose" #: src/gedlib/messages.c:668 msgid "pluv" msgstr "pluv" #: src/gedlib/messages.c:669 msgid "pluviose" msgstr "pluviose" #: src/gedlib/messages.c:670 msgid "vent" msgstr "vent" #: src/gedlib/messages.c:671 msgid "ventose" msgstr "ventose" #: src/gedlib/messages.c:672 msgid "germ" msgstr "germ" #: src/gedlib/messages.c:673 msgid "germinal" msgstr "germinal" #: src/gedlib/messages.c:674 msgid "flor" msgstr "flor" #: src/gedlib/messages.c:675 msgid "floreal" msgstr "floreal" #: src/gedlib/messages.c:676 msgid "prai" msgstr "prai" #: src/gedlib/messages.c:677 msgid "prairial" msgstr "prairial" #: src/gedlib/messages.c:678 msgid "mess" msgstr "mess" #: src/gedlib/messages.c:679 #, fuzzy msgid "messidor" msgstr "messider" #: src/gedlib/messages.c:680 msgid "ther" msgstr "ther" #: src/gedlib/messages.c:681 msgid "thermidor" msgstr "thermidor" #: src/gedlib/messages.c:682 msgid "fruc" msgstr "fruc" #: src/gedlib/messages.c:683 msgid "fructidor" msgstr "fructidor" #: src/gedlib/messages.c:684 msgid "comp" msgstr "comp" #: src/gedlib/messages.c:685 msgid "jour_complementairs" msgstr "jour_complementairs" #: src/gedlib/node.c:610 msgid "NO NAME" msgstr "" #: src/gedlib/node.c:1167 #, c-format msgid "Node memory leaks:" msgstr "" #: src/gedlib/node.c:1170 src/gedlib/record.c:361 src/interp/pvalalloc.c:301 #, c-format msgid "%d item leaked" msgid_plural "%d items leaked" msgstr[0] "" msgstr[1] "" #: src/gedlib/record.c:358 #, c-format msgid "Record memory leaks:" msgstr "" #: src/gedlib/remove.c:250 msgid "Families may not yet be removed in this fashion." msgstr "" #. TRANSLATORS: Character set conversion from external editor to database internal #: src/gedlib/translat.c:100 #, fuzzy msgid "Editor to Internal" msgstr "e Mapning fra editor til intern " #. TRANSLATORS: Character set conversion from database internal to external editor #: src/gedlib/translat.c:102 #, fuzzy msgid "Internal to Editor" msgstr "m Mapning fra intern til editor " #: src/gedlib/translat.c:103 #, fuzzy msgid "GEDCOM to Internal" msgstr "i Mapning fra GEDCOM til intern " #: src/gedlib/translat.c:104 #, fuzzy msgid "Internal to GEDCOM" msgstr "x Mapning fra intern til GEDCOM " #: src/gedlib/translat.c:105 #, fuzzy msgid "Display to Internal" msgstr "g Mapning fra skærm til intern " #: src/gedlib/translat.c:106 #, fuzzy msgid "Internal to Display" msgstr "d Mapning fra intern til skærm " #: src/gedlib/translat.c:107 #, fuzzy msgid "Report to Internal" msgstr "e Mapning fra editor til intern " #: src/gedlib/translat.c:108 #, fuzzy msgid "Internal to Report" msgstr "r Mapning fra intern til rapport" #. TRANSLATORS: key for "Editor to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:119 msgid "menu|trantable|e" msgstr "" #. TRANSLATORS: key for "Internal to Editor" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:122 msgid "menu|trantable|m" msgstr "" #. TRANSLATORS: key for "GEDCOM to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:125 msgid "menu|trantable|i" msgstr "" #. TRANSLATORS: key for "Internal to GEDCOM" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:128 msgid "menu|trantable|x" msgstr "" #. TRANSLATORS: key for "Display to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:131 msgid "menu|trantable|g" msgstr "" #. TRANSLATORS: key for "Internal to Display" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:134 msgid "menu|trantable|d" msgstr "" #. TRANSLATORS: key for "Report to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:137 msgid "menu|trantable|p" msgstr "" #. TRANSLATORS: key for "Internal to Report" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:140 msgid "menu|trantable|r" msgstr "" #. TRANSLATORS: db internal translation table note for tt menu #: src/gedlib/translat.c:473 #, c-format msgid " (dbint tt: %s)" msgstr "" #: src/gedlib/valid.c:75 #, fuzzy msgid "This person record does not have a name line." msgstr "Posten begynder ikke med en FAM-linje." #: src/gedlib/xlat.c:347 #, c-format msgid "ttpath get_conversion_dyntt:from <%s> to <%s>: %s" msgstr "" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 msgid "succeeded" msgstr "" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 #, fuzzy msgid "failed" msgstr "nivose" #: src/gedlib/xlat.c:369 #, c-format msgid "ttpath get_subcoding_dyntt from <%s> to subcode <%s>: %s" msgstr "" #: src/gedlib/xlat.c:435 msgid "No TTPATH config variable" msgstr "" #: src/gedlib/xlat.c:464 #, c-format msgid "ttpath checking dir <%s>" msgstr "" #: src/gedlib/xlat.c:478 #, c-format msgid "ttpath file <%s> typed as %d" msgstr "" #: src/gedlib/xlat.c:690 #, fuzzy msgid "(no conversion)" msgstr "Findes ingen sådan person." #. TRANSLATORS: steps in a chain of codeset conversions, eg, Editor-to-Internal #: src/gedlib/xlat.c:713 #, fuzzy, c-format msgid "%d step" msgid_plural "%d steps" msgstr[0] "ægtefælle" msgstr[1] "ægtefælle" #: src/gedlib/xreffile.c:400 #, c-format msgid "Corrupt DELETESET %c" msgstr "" #: src/gedlib/xreffile.c:425 #, c-format msgid "Tried to add already-deleted record (%ld) to xref (%c)!" msgstr "" #: src/interp/alloc.c:798 #, c-format msgid "Error: file \"%s\": line %d: " msgstr "" #: src/interp/alloc.c:903 #, c-format msgid "%s: the arg must be an integer." msgstr "" #: src/interp/alloc.c:904 #, c-format msgid "%s: the arg #%s must be an integer." msgstr "" #: src/interp/alloc.c:905 #, c-format msgid "%s: the arg #%s must be a float." msgstr "" #: src/interp/alloc.c:906 #, c-format msgid "%s: the arg must be a string." msgstr "" #: src/interp/alloc.c:907 #, c-format msgid "%s: the arg #%s must be a string." msgstr "" #: src/interp/alloc.c:908 #, c-format msgid "%s: null arg not permissible." msgstr "" #: src/interp/alloc.c:909 #, c-format msgid "%s: the arg must be a filename." msgstr "" #: src/interp/alloc.c:910 #, c-format msgid "%s: the arg must be a node or string." msgstr "" #: src/interp/alloc.c:911 #, c-format msgid "%s: the arg must be a person." msgstr "" #: src/interp/alloc.c:912 #, c-format msgid "%s: the arg #%s must be a person." msgstr "" #: src/interp/alloc.c:913 #, c-format msgid "%s: the arg must be a family." msgstr "" #: src/interp/alloc.c:914 #, c-format msgid "%s: the arg #%s must be a family." msgstr "" #: src/interp/alloc.c:915 #, c-format msgid "%s: the arg #%s must be a record." msgstr "" #: src/interp/alloc.c:916 #, c-format msgid "%s: the arg must be a node." msgstr "" #: src/interp/alloc.c:917 #, c-format msgid "%s: the arg #%s must be a node." msgstr "" #: src/interp/alloc.c:918 #, c-format msgid "%s: the arg must be a variable." msgstr "" #: src/interp/alloc.c:919 #, c-format msgid "%s: the arg #%s must be a variable." msgstr "" #: src/interp/alloc.c:920 #, c-format msgid "%s: the arg #%s must be a boolean." msgstr "" #: src/interp/alloc.c:921 #, c-format msgid "%s: the arg must be a list." msgstr "" #: src/interp/alloc.c:922 #, c-format msgid "%s: the arg #%s must be a list." msgstr "" #: src/interp/alloc.c:923 #, c-format msgid "%s: the arg #%s must be a table." msgstr "" #: src/interp/alloc.c:924 #, c-format msgid "%s: the arg must be a set." msgstr "" #: src/interp/alloc.c:925 #, c-format msgid "%s: the arg #%s must be a set." msgstr "" #: src/interp/alloc.c:926 #, c-format msgid "%s: Bad arguments" msgstr "" #: src/interp/alloc.c:927 #, c-format msgid "%s: the arg had a major error." msgstr "" #: src/interp/alloc.c:928 #, c-format msgid "%s: the arg #%s had a major error." msgstr "" #: src/interp/alloc.c:929 #, c-format msgid "%s: the arg #%s would cause an arithmetic exception." msgstr "" #: src/interp/builtin.c:111 #, fuzzy msgid "Enter integer for program" msgstr "Indtast streng for program" #: src/interp/builtin.c:181 #, fuzzy msgid "Identify person for program:" msgstr "Indtast streng for program" #: src/interp/builtin.c:206 #, fuzzy msgid "Enter a spouse from family." msgstr "s Tilføj ægtefælle i fam." #: src/interp/builtin.c:207 #, fuzzy msgid "Enter a sibling from family." msgstr "Kan ikke fjerne den sidste person fra en familie." #: src/interp/builtin.c:240 #, fuzzy msgid "Identify list of persons for program:" msgstr "Identificér den anden person at bladre til." #: src/interp/builtin.c:329 msgid "name: person does not have a name" msgstr "" #: src/interp/builtin.c:385 msgid "fullname: person does not have a name" msgstr "" #: src/interp/builtin.c:412 msgid "surname: person does not have a name" msgstr "" #: src/interp/builtin.c:437 msgid "soundex: person does not have a name" msgstr "" #: src/interp/builtin.c:500 #, c-format msgid "Bad escape code at offset %d in bytecode string <%s>" msgstr "" #: src/interp/builtin.c:643 #, fuzzy msgid "(givens) person does not have a name" msgstr "Denne persons moder findes ikke i databasen." #: src/interp/builtin.c:670 #, c-format msgid "set(%s, ) is invalid" msgstr "" #: src/interp/builtin.c:1191 msgid "first" msgstr "" #: src/interp/builtin.c:1191 #, fuzzy msgid "second" msgstr "vend" #: src/interp/builtin.c:1191 #, fuzzy msgid "third" msgstr "ther" #: src/interp/builtin.c:1191 #, fuzzy msgid "fourth" msgstr "flor" #: src/interp/builtin.c:1191 msgid "fifth" msgstr "" #: src/interp/builtin.c:1192 msgid "sixth" msgstr "" #: src/interp/builtin.c:1192 #, fuzzy msgid "seventh" msgstr "vent" #: src/interp/builtin.c:1192 msgid "eighth" msgstr "" #: src/interp/builtin.c:1192 #, fuzzy msgid "ninth" msgstr "nisan" #: src/interp/builtin.c:1192 #, fuzzy msgid "tenth" msgstr "vent" #: src/interp/builtin.c:1193 #, fuzzy msgid "eleventh" msgstr "vent" #: src/interp/builtin.c:1193 msgid "twelfth" msgstr "" #: src/interp/builtin.c:1210 #, c-format msgid "%ldth" msgstr "" #: src/interp/builtin.c:1220 #, fuzzy msgid "zero" msgstr "person" #: src/interp/builtin.c:1220 msgid "one" msgstr "" #: src/interp/builtin.c:1220 msgid "two" msgstr "" #: src/interp/builtin.c:1220 #, fuzzy msgid "three" msgstr "ther" #: src/interp/builtin.c:1220 #, fuzzy msgid "four" msgstr "flor" #: src/interp/builtin.c:1220 #, fuzzy msgid "five" msgstr "nivose" #: src/interp/builtin.c:1221 msgid "six" msgstr "" #: src/interp/builtin.c:1221 #, fuzzy msgid "seven" msgstr "svn" #: src/interp/builtin.c:1221 msgid "eight" msgstr "" #: src/interp/builtin.c:1221 #, fuzzy msgid "nine" msgstr "nisan" #: src/interp/builtin.c:1221 msgid "ten" msgstr "" #: src/interp/builtin.c:1222 #, fuzzy msgid "eleven" msgstr "vent" #: src/interp/builtin.c:1222 #, fuzzy msgid "twelve" msgstr "tevet" #: src/interp/builtin.c:2173 msgid "the arg to empty is not a list, table or set" msgstr "" #: src/interp/builtin.c:2283 msgid "the arg to length is not a list, table or set" msgstr "" #: src/interp/builtin.c:2470 msgid "He" msgstr "" #: src/interp/builtin.c:2470 #, fuzzy msgid "he" msgstr "ther" #: src/interp/builtin.c:2470 msgid "His" msgstr "" #: src/interp/builtin.c:2470 msgid "his" msgstr "" #: src/interp/builtin.c:2470 msgid "him" msgstr "" #: src/interp/builtin.c:2472 msgid "She" msgstr "" #: src/interp/builtin.c:2472 #, fuzzy msgid "she" msgstr "shevat" #: src/interp/builtin.c:2472 msgid "Her" msgstr "" #: src/interp/builtin.c:2472 #, fuzzy msgid "her" msgstr "ther" #: src/interp/builtin.c:2472 #, fuzzy msgid "her_" msgstr "ther" #: src/interp/builtin.c:2850 msgid "(trimname) person does not have a name" msgstr "" #: src/interp/builtin.c:2940 msgid "Sunday" msgstr "" #: src/interp/builtin.c:2940 msgid "Monday" msgstr "" #: src/interp/builtin.c:2940 msgid "Tuesday" msgstr "" #: src/interp/builtin.c:2941 msgid "Wednesday" msgstr "" #: src/interp/builtin.c:2941 msgid "Thursday" msgstr "" #: src/interp/builtin.c:2941 msgid "Friday" msgstr "" #: src/interp/builtin.c:2941 msgid "Saturday" msgstr "" #: src/interp/eval.c:244 #, c-format msgid "Undefined func: %s" msgstr "" #: src/interp/eval.c:246 #, c-format msgid "Ambiguous call to func: %s" msgstr "" #: src/interp/interp.c:247 #, fuzzy, c-format msgid "Report not found: %s " msgstr "Tegnkodning for rapporter:" #: src/interp/interp.c:258 #, c-format msgid "Error: file <%s> not found" msgstr "" #: src/interp/interp.c:316 msgid "Program contains errors.\n" msgstr "" #: src/interp/interp.c:323 msgid "Program needs a starting procedure.\n" msgstr "" #: src/interp/interp.c:340 #, c-format msgid "Proc %s must be called with %d (not %d) parameters." msgstr "" #: src/interp/interp.c:355 msgid "Program is running..." msgstr "" #: src/interp/interp.c:410 msgid "Program was run successfully.\n" msgstr "" #: src/interp/interp.c:414 #, fuzzy msgid "Program was cancelled.\n" msgstr "Lokale for rapporter: " #: src/interp/interp.c:416 msgid "Program was not run because of errors.\n" msgstr "" #: src/interp/interp.c:506 #, c-format msgid "Error: file <%s> not found: %s\n" msgstr "" #: src/interp/interp.c:538 #, c-format msgid "" "\n" "Report duration %s (ui duration %s)\n" msgstr "" #: src/interp/interp.c:610 #, c-format msgid "identifier: %s should be a string\n" msgstr "" #: src/interp/interp.c:1778 #, c-format msgid "Undefined proc: %s" msgstr "" #: src/interp/interp.c:1780 #, c-format msgid "Ambiguous call to proc: %s" msgstr "" #: src/interp/interp.c:2017 #, c-format msgid "Duplicate proc %s (lines %d and %d) in report: %s" msgstr "" #: src/interp/interp.c:2047 #, c-format msgid "Duplicate func %s (lines %d and %d) in report: %s" msgstr "" #: src/interp/interp.c:2110 msgid "This report requires a newer program to run\n" msgstr "" #: src/interp/interp.c:2166 #, c-format msgid "Program forgot to unlock %d record" msgid_plural "Program forgot to unlock %d records" msgstr[0] "" msgstr[1] "" #: src/interp/intrpseq.c:303 msgid "missing or incorrect value for sort" msgstr "" #: src/interp/lex.c:219 #, c-format msgid "" "String constant overflowing internal buffer tokbuf len=%d, file: %s, start " "line: %ld" msgstr "" #: src/interp/more.c:648 #, fuzzy msgid "Please choose from the following list." msgstr "Vælg blandt de følgende alternativer:" #: src/interp/more.c:685 msgid "Illegal type found in list in menuchoose" msgstr "" #: src/interp/more.c:976 msgid "error evaluating arg to lock" msgstr "" #: src/interp/more.c:982 msgid "null arg in lock" msgstr "" #: src/interp/more.c:993 msgid "node passed to lock must be inside a record" msgstr "" #: src/interp/more.c:999 #, fuzzy msgid "the arg to lock must be a record or node" msgstr "Kan ikke fjerne den sidste person fra en familie." #: src/interp/more.c:1007 msgid "Error: there are 999,999 locks on arg to lock" msgstr "" #: src/interp/more.c:1027 msgid "error evaluating arg to unlock" msgstr "" #: src/interp/more.c:1033 msgid "null arg in unlock" msgstr "" #: src/interp/more.c:1044 msgid "node passed to unlock must be inside a record" msgstr "" #: src/interp/more.c:1050 #, fuzzy msgid "the arg to unlock must be a record or node" msgstr "Kan ikke fjerne den sidste person fra en familie." #: src/interp/pvalalloc.c:295 #, c-format msgid "PVALUE memory leak report:" msgstr "" #: src/interp/pvalmath.c:70 #, c-format msgid "Nonnumeric type to operation %s: %s" msgstr "" #: src/interp/pvalmath.c:85 #, c-format msgid "Illegal value to operation %s: %s" msgstr "" #: src/interp/pvalmath.c:411 #, c-format msgid "%s: not compatible numeric types: %s and %s" msgstr "" #: src/interp/pvalue.c:810 #, c-format msgid "%s: Incomparable types: %s and %s" msgstr "" #: src/interp/pvalue.c:907 msgid "NOT PVALUE: NULL!" msgstr "" #: src/interp/pvalue.c:911 #, c-format msgid "NOT PVALUE: invalid type=%d)!" msgstr "" #: src/interp/pvalue.c:949 #, c-format msgid "%d item" msgid_plural "%d items" msgstr[0] "" msgstr[1] "" #: src/interp/pvalue.c:956 #, c-format msgid "%d entry" msgid_plural "%d entries" msgstr[0] "" msgstr[1] "" #: src/interp/pvalue.c:963 #, fuzzy, c-format msgid "%d record" msgid_plural "%d records" msgstr[0] "e Redigér post" msgstr[1] "e Redigér post" #: src/interp/pvalue.c:970 #, fuzzy, c-format msgid "%d element" msgid_plural "%d elements" msgstr[0] "vent" msgstr[1] "vent" #: src/interp/progerr.c:125 msgid "Enter d for debugger, q to quit" msgstr "" #: src/interp/progerr.c:140 #, fuzzy, c-format msgid "Display local (%d var)" msgid_plural "Display locals (%d vars)" msgstr[0] "Vis lokale: " msgstr[1] "Vis lokale: " #: src/interp/progerr.c:146 #, fuzzy, c-format msgid "Display global (%d var)" msgid_plural "Display globals (%d vars)" msgstr[0] "Vis lokale: " msgstr[1] "Vis lokale: " #: src/interp/progerr.c:151 #, c-format msgid "Call stack has %d higher level" msgid_plural "Call stack has %d higher levels" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:154 msgid " Go up one level" msgstr "" #: src/interp/progerr.c:160 #, c-format msgid "Call stack has %d lower level" msgid_plural "Call stack has %d lower levels" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:164 msgid " Go down one level" msgstr "" #: src/interp/progerr.c:169 msgid "Quit debugger" msgstr "" #: src/interp/progerr.c:171 msgid "Report debugger" msgstr "" #: src/interp/progerr.c:175 msgid "Local variables" msgstr "" #: src/interp/progerr.c:178 msgid "Global variables" msgstr "" #: src/interp/progerr.c:338 #, fuzzy msgid "Report cancelled" msgstr "Lokale for rapporter: " #: src/interp/progerr.c:346 #, fuzzy msgid "Report file: " msgstr "Tegnkodning for rapporter:" #: src/interp/progerr.c:355 #, c-format msgid "Parsing Error at line %d: " msgstr "" #: src/interp/progerr.c:357 #, c-format msgid "Runtime Error at line %d: " msgstr "" #: src/interp/progerr.c:360 #, fuzzy msgid "Aborting: " msgstr "født: " #: src/interp/rassa.c:242 #, fuzzy, c-format msgid "Could not open file %s" msgstr "Kunne ikke åbne filen %s." #: src/interp/rassa.c:271 msgid "Report stopping due to error opening output file" msgstr "" #: src/interp/rassa.c:273 msgid "Report stopping due to lack of output file" msgstr "" #: src/interp/rassa.c:330 msgid "illegal call to pos." msgstr "" #: src/interp/rptsort.c:104 #, fuzzy msgid "First argument to (r)sort must be list or array" msgstr "Argumentet til at låse (-l) skal være y (ja) eller n (nej)." #: src/interp/rptsort.c:117 src/interp/rptsort.c:128 #, fuzzy msgid "Arguments to (r)sort must be of same size" msgstr "Argumentet til at låse (-l) skal være y (ja) eller n (nej)." #: src/interp/rptsort.c:137 #, fuzzy msgid "Second argument to (r)sort must be list or array" msgstr "Argumentet til at låse (-l) skal være y (ja) eller n (nej)." #: src/liflines/add.c:68 #, fuzzy, c-format msgid "There was %d unresolved reference." msgid_plural "There were %d unresolved references." msgstr[0] "Der findes ingen post med den nøgle eller reference." msgstr[1] "Der findes ingen post med den nøgle eller reference." #: src/liflines/brwsmenu.c:25 msgid "? Other menu choices" msgstr "? Andre menuvalg" #: src/liflines/brwsmenu.c:69 msgid "e Edit the person" msgstr "e Redigér personen" #: src/liflines/brwsmenu.c:70 msgid "e Edit the family" msgstr "e Redigér familien" #: src/liflines/brwsmenu.c:71 msgid "e Edit record" msgstr "e Redigér post" #: src/liflines/brwsmenu.c:72 msgid "e Edit top person" msgstr "e Redigér øverste pers." #: src/liflines/brwsmenu.c:73 #, fuzzy msgid "e Edit top family" msgstr "e Redigér familien" #: src/liflines/brwsmenu.c:74 msgid "f Browse to father" msgstr "f Bladr til fader" #: src/liflines/brwsmenu.c:75 msgid "f Browse top father" msgstr "f Bladr t. øverste fader" #: src/liflines/brwsmenu.c:76 msgid "m Browse to mother" msgstr "m Bladr til moder" #: src/liflines/brwsmenu.c:77 msgid "m Browse top mother" msgstr "m Bladr t. øverste moder" #: src/liflines/brwsmenu.c:78 msgid "s Browse to spouse/s" msgstr "s Bladr til ægtefæller" #: src/liflines/brwsmenu.c:79 msgid "s Browse top spouse/s" msgstr "s Bl. t. øverste ægtefæller" #: src/liflines/brwsmenu.c:80 msgid "c Browse to children" msgstr "c Bladr til barn" #: src/liflines/brwsmenu.c:81 msgid "c Browse top children" msgstr "c Bl. t. øverste barn" #: src/liflines/brwsmenu.c:82 msgid "o Browse to older sib" msgstr "o Bl. t. ældre søskende" #: src/liflines/brwsmenu.c:83 msgid "y Browse to younger sib" msgstr "y Bl. t. yngre søskende" #: src/liflines/brwsmenu.c:84 msgid "g Browse to family" msgstr "g Bladr t. familie" #: src/liflines/brwsmenu.c:85 msgid "u Browse to parents" msgstr "u Bladr t. forældre" #: src/liflines/brwsmenu.c:86 msgid "b Browse to persons" msgstr "b Bladr t. personer" #: src/liflines/brwsmenu.c:87 msgid "t Browse to top" msgstr "t Bladr til øverste" #: src/liflines/brwsmenu.c:88 msgid "b Browse to bottom" msgstr "b Bladr t. nederste" #: src/liflines/brwsmenu.c:89 msgid "h Add as spouse" msgstr "h Tilføj som ægtefælle" #: src/liflines/brwsmenu.c:90 msgid "i Add as child" msgstr "i Tilføj som barn" #: src/liflines/brwsmenu.c:91 msgid "s Add spouse to family" msgstr "s Tilføj ægtefælle i fam." #: src/liflines/brwsmenu.c:92 msgid "a Add child to family" msgstr "a Tilføj barn i fam." #: src/liflines/brwsmenu.c:93 msgid "a Add family" msgstr "a Tilføj familie" #: src/liflines/brwsmenu.c:94 msgid "x Swap two families" msgstr "x Skift mellem to familier" #: src/liflines/brwsmenu.c:95 msgid "x Swap two children" msgstr "x Skift mellem to børn" #: src/liflines/brwsmenu.c:97 #, no-c-format msgid "%c Reorder child" msgstr "%c Om-ordn barn" #: src/liflines/brwsmenu.c:98 msgid "x Switch top/bottom" msgstr "x Skift mellem øverste/nederste" #: src/liflines/brwsmenu.c:99 msgid "n Create new person" msgstr "n Opret ny person" #: src/liflines/brwsmenu.c:100 msgid "a Create new family" msgstr "a Opret ny familie" #: src/liflines/brwsmenu.c:101 msgid "tt Enter tandem mode" msgstr "tt Skift mellem t. tandemtilstand" #: src/liflines/brwsmenu.c:102 msgid "tt Enter family tandem" msgstr "tt Skift mellem t. fam.tandem" #: src/liflines/brwsmenu.c:103 msgid "zi Browse to indi" msgstr "zi Bladr t. pers." #: src/liflines/brwsmenu.c:104 msgid "zz Browse to any" msgstr "zz Bladr t. alle" #: src/liflines/brwsmenu.c:105 msgid "r Remove as spouse" msgstr "r Fjern som ægtefælle" #: src/liflines/brwsmenu.c:106 msgid "d Remove as child" msgstr "d Fjern som barn" #: src/liflines/brwsmenu.c:107 msgid "r Remove spouse from" msgstr "r Fjern ægtefælle fra" #: src/liflines/brwsmenu.c:108 msgid "d Remove child from" msgstr "d Fjern barn fra" #: src/liflines/brwsmenu.c:109 msgid "( Scroll up" msgstr "( Rul op" #: src/liflines/brwsmenu.c:110 msgid ") Scroll down" msgstr ") Rul ned" #: src/liflines/brwsmenu.c:111 msgid "] Increase tree depth" msgstr "] Øg trædybde" #: src/liflines/brwsmenu.c:112 msgid "[ Decrease tree depth" msgstr "[  Mindsk trædybde" #: src/liflines/brwsmenu.c:113 msgid "(t Scroll top up" msgstr "(t Rul top op" #: src/liflines/brwsmenu.c:114 msgid ")t Scroll top down" msgstr ")t Rul top ned" #: src/liflines/brwsmenu.c:115 msgid "(b Scroll bottom up" msgstr "(b Rul bund op" #: src/liflines/brwsmenu.c:116 msgid ")b Scroll bottom down" msgstr ")b Rul bund ned" #: src/liflines/brwsmenu.c:117 msgid "(( Scroll both up" msgstr "(( Rul begge op" #: src/liflines/brwsmenu.c:118 msgid ")) Scroll both down" msgstr ")) Rul begge ned" #: src/liflines/brwsmenu.c:119 msgid "# Toggle childnos" msgstr "# Aktivér/de barnnr" #: src/liflines/brwsmenu.c:120 msgid "!g GEDCOM mode" msgstr "!g GEDCOM-tilstand" #: src/liflines/brwsmenu.c:121 msgid "!x GEDCOMX mode" msgstr "!x GEDCOMX-tilstand" #: src/liflines/brwsmenu.c:122 msgid "!t GEDCOMT mode" msgstr "!t GEDCOMT-tilstand" #: src/liflines/brwsmenu.c:123 msgid "!a Ancestors mode" msgstr "!a Forfædre tilstand" #: src/liflines/brwsmenu.c:124 msgid "!d Descendants mode" msgstr "!d Ætlingstilstand" #: src/liflines/brwsmenu.c:125 msgid "!n Normal mode" msgstr "!n Normal tilstand" #: src/liflines/brwsmenu.c:126 msgid "p Pedigree mode" msgstr "p Tavletilstand" #: src/liflines/brwsmenu.c:127 msgid "!! Cycle mode" msgstr "!! Cyklisk tilstand" #: src/liflines/brwsmenu.c:129 msgid "(1-9) Browse to child" msgstr "(1-9) Bladr t. barn" #: src/liflines/brwsmenu.c:130 msgid "y Turn on sync" msgstr "y Aktivér synk" #: src/liflines/brwsmenu.c:131 msgid "A Advanced view" msgstr "A Avanceret visning" #: src/liflines/brwsmenu.c:132 msgid "tc Tandem to children" msgstr "tc Tandem til barn" #: src/liflines/brwsmenu.c:133 msgid "tf Tandem to father/s" msgstr "tf Tandem t. fader/fædre" #: src/liflines/brwsmenu.c:134 msgid "tg Tandem to family/s" msgstr "tg Tandem t. familier" #: src/liflines/brwsmenu.c:135 msgid "f Browse to fathers" msgstr "f Bladr t. fædre" #: src/liflines/brwsmenu.c:136 msgid "m Browse to mothers" msgstr "m Bladr t. mødre" #: src/liflines/brwsmenu.c:137 msgid "tm Tandem to mother/s" msgstr "tm Tandem t. moder/mødre/" #: src/liflines/brwsmenu.c:138 msgid "ts Tandem to spouse/s" msgstr "ts Tandem til ægtefælle" #: src/liflines/brwsmenu.c:139 msgid "tu Tandem to parents" msgstr "tu Tandem t. forældre" #: src/liflines/brwsmenu.c:140 msgid "< Enlarge menu area" msgstr "< Øg menuareal" #: src/liflines/brwsmenu.c:141 msgid "> Shrink menu area" msgstr "> Formindsk menuareal" #: src/liflines/brwsmenu.c:142 msgid "M> More menu cols" msgstr "M> Flere menukolonner" #: src/liflines/brwsmenu.c:143 msgid "M< Less menu cols" msgstr "M< Færre menukolonner" #: src/liflines/brwsmenu.c:144 msgid "+ Next in db" msgstr "+ Næste i databasen" #: src/liflines/brwsmenu.c:145 msgid "- Prev in db" msgstr "- Foreg. i databasen" #: src/liflines/brwsmenu.c:146 msgid "d Copy top to bottom" msgstr "d Kopiér top t. bund" #: src/liflines/brwsmenu.c:147 msgid "j Merge bottom to top" msgstr "j Flet bund til top" #: src/liflines/brwsmenu.c:148 src/liflines/listui.c:842 msgid "j Move down list" msgstr "j Gå nedad i liste" #: src/liflines/brwsmenu.c:149 src/liflines/listui.c:843 msgid "k Move up list" msgstr "k Gå opad i liste" #: src/liflines/brwsmenu.c:150 src/liflines/listui.c:844 msgid "e Edit this person" msgstr "e Redigér denne pers." #: src/liflines/brwsmenu.c:151 src/liflines/listui.c:845 msgid "i Browse this person" msgstr "i Bladr til denne pers" #: src/liflines/brwsmenu.c:152 src/liflines/listui.c:846 msgid "m Mark this person" msgstr "m Markér denne pers." #: src/liflines/brwsmenu.c:153 msgid "d Delete from list" msgstr "d Fjern fra liste" #: src/liflines/brwsmenu.c:154 src/liflines/listui.c:849 msgid "n Name this list" msgstr "n Giv denne liste navn" #: src/liflines/brwsmenu.c:155 src/liflines/listui.c:850 msgid "b Browse new persons" msgstr "b Bladr til nye pers." #: src/liflines/brwsmenu.c:156 src/liflines/listui.c:851 msgid "a Add to this list" msgstr "a Tilføj i denne liste" #: src/liflines/brwsmenu.c:157 src/liflines/listui.c:852 msgid "x Swap mark/current" msgstr "x Skift mellem mærke/aktuel" #: src/liflines/brwsmenu.c:158 msgid "$s List sources" msgstr "$s List kilder" #: src/liflines/brwsmenu.c:159 msgid "$n List notes" msgstr "$n List noter" #: src/liflines/brwsmenu.c:160 msgid "$$ List references" msgstr "$$ List referencer" #: src/liflines/brwsmenu.c:161 msgid "^b History/back" msgstr "^b Historik/bagud" #: src/liflines/brwsmenu.c:162 msgid "^f History/fwd" msgstr "^f Historik/fremad" #: src/liflines/brwsmenu.c:163 msgid "^l History list" msgstr "^l Historikliste" #: src/liflines/brwsmenu.c:164 msgid "^c Clear history" msgstr "^c Tøm historik" #: src/liflines/brwsmenu.c:165 #, fuzzy msgid "^xb ChngHist/back" msgstr "^b Historik/bagud" #: src/liflines/brwsmenu.c:166 #, fuzzy msgid "^xf ChngHist/fwd" msgstr "^f Historik/fremad" #: src/liflines/brwsmenu.c:167 #, fuzzy msgid "^xl ChngHist list" msgstr "^l Historikliste" #: src/liflines/brwsmenu.c:168 #, fuzzy msgid "^xc Clear ChngHist" msgstr "^c Tøm historik" #: src/liflines/brwsmenu.c:170 #, no-c-format msgid "%s Add source" msgstr "%s Tilføj kilde" #: src/liflines/brwsmenu.c:172 #, no-c-format msgid "%e Add event" msgstr "%e Tilføj hændelse" #: src/liflines/brwsmenu.c:174 #, no-c-format msgid "%o Add other" msgstr "%o Tilføj andet" #: src/liflines/brwsmenu.c:177 msgid "B Browse new family" msgstr "B Bladr i ny familie" #: src/liflines/brwsmenu.c:490 msgid "Missing title" msgstr "Titel mangler" #: src/liflines/delete.c:85 #, fuzzy, c-format msgid "%d spouse" msgid_plural "%d spouses" msgstr[0] "ægtefælle" msgstr[1] "ægtefælle" #: src/liflines/delete.c:88 #, fuzzy, c-format msgid "%d child" msgid_plural "%d children" msgstr[0] "barn" msgstr[1] "barn" #: src/liflines/error.c:63 src/tools/dbverify.c:1504 msgid "Fatal Error" msgstr "" #: src/liflines/error.c:66 #, fuzzy msgid "FATAL ERROR" msgstr "SYSTEMKALDSFEJL" #: src/liflines/error.c:70 #, c-format msgid " in file <%s> at line %d\n" msgstr "" #: src/liflines/error.c:72 src/tools/dbverify.c:1515 msgid "ASSERT failure" msgstr "" #: src/liflines/import.c:169 msgid "This is not a lineage linked GEDCOM file." msgstr "" #: src/liflines/import.c:170 msgid "Proceed anyway?" msgstr "" #: src/liflines/import.c:186 msgid "No current internal codeset, so no codeset conversion can be done" msgstr "" #: src/liflines/import.c:187 msgid "Proceed without codeset conversion?" msgstr "" #: src/liflines/import.c:204 #, c-format msgid "%d warning during import" msgid_plural "%d warnings during import" msgstr[0] "" msgstr[1] "" #: src/liflines/import.c:220 #, c-format msgid "Cannot convert codeset (from <%s> to <%s>)" msgstr "" #: src/liflines/import.c:223 msgid "Enter codeset to assume (* for none)" msgstr "" #: src/liflines/import.c:246 #, fuzzy, c-format msgid "Using original keys, %d deleted record will be in the database." msgid_plural "Using original keys, %d deleted records will be in the database." msgstr[0] "" "Med oprindelige nøgler vil der findes %d fjernede poster i databasen." msgstr[1] "" "Med oprindelige nøgler vil der findes %d fjernede poster i databasen." #: src/liflines/lbrowse.c:219 msgid "Tandom browse only compatible with persons or families." msgstr "" #: src/liflines/lines_usage.c:21 #, c-format msgid "%s invokes the Lifelines report execution program without GUI." msgstr "" #: src/liflines/lines_usage.c:23 #, c-format msgid "%s invokes the Lifelines GUI." msgstr "" #: src/liflines/lines_usage.c:26 #, c-format msgid "" "Lifelines is a program to manipulate genealogical information\n" "in lineage-linked GEDCOM format. It has a curses interface and a\n" "built-in interpreter for its own genealogical report language.\n" "\n" "It has its own databases, and records are edited directly in GEDCOM\n" "(with an editor of the user's choice). Records store\n" "information about people, families, sources, events, and\n" "other types of data (such as notes). Lifelines includes a\n" "custom report language and comes with a collection of reports." msgstr "" #: src/liflines/lines_usage.c:36 #, c-format msgid "Usage: %s [OPTIONS] [database]" msgstr "" #: src/liflines/lines_usage.c:38 src/tools/btedit.c:238 #, c-format msgid "Options:" msgstr "" #: src/liflines/lines_usage.c:40 #, c-format msgid "-C[FILE]" msgstr "" #: src/liflines/lines_usage.c:42 #, fuzzy, c-format msgid "Specify configuration file location" msgstr "Fejl i konfigurationsfil: for lang linje." #: src/liflines/lines_usage.c:44 #, c-format msgid "Finnish option (if compiled to allow Finnish option)" msgstr "" #: src/liflines/lines_usage.c:46 #, c-format msgid "-I[KEY=VALUE]" msgstr "" #: src/liflines/lines_usage.c:48 #, c-format msgid "Specify a user property (e.g. -ILLEDITOR=gvim)" msgstr "" #: src/liflines/lines_usage.c:50 #, c-format msgid "log dynamic memory operation (for debugging)" msgstr "" #: src/liflines/lines_usage.c:52 #, c-format msgid "-c[TYPE][DIRECT,INDIRECT]" msgstr "" #: src/liflines/lines_usage.c:54 #, c-format msgid "" "supply cache values (eg, -ci400,4000f400,4000 sets direct indi\n" "\t\t& fam caches to 400, and indirect indi & fam caches to 4000)" msgstr "" #: src/liflines/lines_usage.c:57 #, c-format msgid "debug mode (disable signal trapping)" msgstr "" #: src/liflines/lines_usage.c:59 #, c-format msgid "force open (for recovery from errors or power failure)" msgstr "" #: src/liflines/lines_usage.c:61 #, c-format msgid "open database with immutable access (for use on read-only media)" msgstr "" #: src/liflines/lines_usage.c:63 #, c-format msgid "always show keys (even if REFN available)" msgstr "" #: src/liflines/lines_usage.c:65 #, c-format msgid "unlock a database (for correct access on read-write media)" msgstr "" #: src/liflines/lines_usage.c:67 #, c-format msgid "lock a database (for use on read-only media)" msgstr "" #: src/liflines/lines_usage.c:69 #, c-format msgid "do not use traditional family rules" msgstr "" #: src/liflines/lines_usage.c:71 #, c-format msgid "Specify program output filename (eg, -o/tmp/mytests)" msgstr "" #: src/liflines/lines_usage.c:73 #, c-format msgid "" "open database with read-only access (prohibiting other\n" "\t\twrite access)" msgstr "" #: src/liflines/lines_usage.c:76 #, c-format msgid "trace function calls in report programs (for debugging)" msgstr "" #: src/liflines/lines_usage.c:78 #, c-format msgid "-u[HEIGHT,WIDTH]" msgstr "" #: src/liflines/lines_usage.c:80 #, c-format msgid "" "specify window size (eg, -u120,34 specifies 120 columns\n" "\t\tby 34 rows)" msgstr "" #: src/liflines/lines_usage.c:83 #, c-format msgid "display this help and exit" msgstr "" #: src/liflines/lines_usage.c:85 #, c-format msgid "open database with writeable access (this is the default)" msgstr "" #: src/liflines/lines_usage.c:89 #, c-format msgid "execute a single lifelines report program directly" msgstr "" #: src/liflines/lines_usage.c:91 #, c-format msgid "" "Use normal ASCII characters for drawing lines, instead of\n" "\t\tspecial VT100 terminal characters" msgstr "" #: src/liflines/lines_usage.c:94 #, c-format msgid "output version information and exit" msgstr "" #: src/liflines/lines_usage.c:96 src/tools/btedit.c:244 #, c-format msgid "Examples:" msgstr "" #: src/liflines/lines_usage.c:99 #, c-format msgid "%s myfamily -x eol" msgstr "" #: src/liflines/lines_usage.c:101 #, c-format msgid "Open the database 'myfamily' with Lifelines" msgstr "" #: src/liflines/lines_usage.c:103 #, c-format msgid "and run the eol.ll report" msgstr "" #: src/liflines/lines_usage.c:105 #, c-format msgid "%s -f myfamily -x eol" msgstr "" #: src/liflines/lines_usage.c:107 #, c-format msgid "Unlock database 'myfamily', after a power failure left the" msgstr "" #: src/liflines/lines_usage.c:109 #, c-format msgid "database locked and run 'eol.ll' report" msgstr "" #: src/liflines/lines_usage.c:112 #, fuzzy, c-format msgid "%s myfamily" msgstr "e Redigér familien" #: src/liflines/lines_usage.c:114 #, c-format msgid "Open database 'myfamily' with Lifelines" msgstr "" #: src/liflines/lines_usage.c:116 #, fuzzy, c-format msgid "%s -f myfamily" msgstr "e Redigér familien" #: src/liflines/lines_usage.c:118 #, c-format msgid "" "Unlock database 'myfamily', after a power failure left\n" "\t\tthe database locked" msgstr "" #: src/liflines/lines_usage.c:122 #, c-format msgid "REPORTING BUGS" msgstr "" #: src/liflines/lines_usage.c:124 src/tools/btedit.c:250 #, c-format msgid "Report bugs to lifelines.sourceforge.net" msgstr "" #: src/liflines/lines_usage.c:126 #, c-format msgid "COPYRIGHT" msgstr "" #: src/liflines/lines_usage.c:131 #, c-format msgid "SEE ALSO" msgstr "" #: src/liflines/listui.c:155 src/liflines/listui.c:252 msgid "Commands: j Move down k Move up i Select q Quit" msgstr "Kommandoer: j Flyt ned k Flyt op i Vælg q Afslut" #: src/liflines/listui.c:157 msgid "Commands: j Move down k Move up q Quit" msgstr "Kommandoer: j Flyt ned k Flyt op q Afslut" #: src/liflines/listui.c:249 #, fuzzy msgid "Commands: j Move down k Move up d Delete i Select q Quit" msgstr "Kommandoer: j Flyt ned k Flyt op i Vælg q Afslut" #: src/liflines/listui.c:431 msgid "--- CURRENT SELECTION ---" msgstr "" #: src/liflines/listui.c:434 src/liflines/listui.c:597 msgid "--- LIST ---" msgstr "" #: src/liflines/listui.c:628 msgid "-- CURRENT SELECTION --" msgstr "" #: src/liflines/listui.c:840 #, fuzzy msgid "Choose an operation:" msgstr "Vælg en kommando:" #: src/liflines/listui.c:847 #, fuzzy msgid "r Remove from list" msgstr "d Fjern fra liste" #: src/liflines/listui.c:848 #, fuzzy msgid "t Enter tandem mode" msgstr "tt Skift mellem t. tandemtilstand" #: src/liflines/loadsave.c:94 #, fuzzy msgid "Person" msgid_plural "Persons" msgstr[0] "person" msgstr[1] "person" #: src/liflines/loadsave.c:98 msgid "Family" msgid_plural "Families" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:102 msgid "Source" msgid_plural "Sources" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:106 #, fuzzy msgid "Event" msgid_plural "Events" msgstr[0] "vent" msgstr[1] "vent" #: src/liflines/loadsave.c:110 #, fuzzy msgid "Other" msgid_plural "Others" msgstr[0] "ther" msgstr[1] "ther" #: src/liflines/loadsave.c:160 #, fuzzy msgid "Checking GEDCOM file for errors.\n" msgstr "Leder i GEDCOM-filen %s efter fejl.\n" #: src/liflines/loadsave.c:163 msgid "Error" msgid_plural "Errors" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:169 msgid "Warning" msgid_plural "Warnings" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:184 msgid "The database is read-only; loading has been canceled." msgstr "Databasen er skrivebeskyttet; indlæsningen er annulleret." #: src/liflines/loadsave.c:190 msgid "Adding unused keys as deleted keys..." msgstr "Tilføjer ubrugte nøgler som slettede nøgler..." #. TRANSLATORS: how long Import ran, and how much of that was UI delay #: src/liflines/loadsave.c:255 #, c-format msgid "Import time %s (ui %s)\n" msgstr "" #: src/liflines/loadsave.c:282 #, fuzzy msgid "The database was not saved." msgstr "Databasen er skrivebeskyttet; du kan ikke tilføje poster." #: src/liflines/main.c:385 msgid "Warning: database codeset unspecified" msgstr "" #: src/liflines/main.c:387 msgid "Warning: not all conversions available" msgstr "" #: src/liflines/menuset.c:155 #, fuzzy, c-format msgid "Menu (%s) choice sequence too long: %s" msgstr "Menuvalgssekvens for lang: %s" #: src/liflines/menuset.c:159 #, fuzzy, c-format msgid "Menu (%s) item lacked choice sequence: %s" msgstr "Menuvalg manglede valgsekvens: %s" #: src/liflines/menuset.c:242 src/liflines/menuset.c:254 #, c-format msgid "In menu: %s" msgstr "I menu: %s" #: src/liflines/menuset.c:244 #, c-format msgid "Duplicate hotkey for item: %s" msgstr "Dubleret hurtignøgle for post: %s" #: src/liflines/menuset.c:247 #, fuzzy, c-format msgid "Clash with longer hotkey in item: %s" msgstr "Sammenstød med længere hurtignøgle i post: %s" #: src/liflines/menuset.c:255 #, c-format msgid "Clash with shorter hotkey in item: %s" msgstr "Sammenstød med kortere hurtignøgle i post: %s" #: src/liflines/merge.c:772 #, c-format msgid "Bad spouse tag: %s" msgstr "" #: src/liflines/merge.c:800 src/liflines/merge.c:919 #, c-format msgid "Mismatched lineage spouse links between %s and %s: %ld and %ld" msgstr "" #: src/liflines/merge.c:816 src/liflines/merge.c:935 #, c-format msgid "Bad child tag: %s" msgstr "" #: src/liflines/merge.c:844 src/liflines/merge.c:963 #, c-format msgid "Mismatched lineage child links between %s and %s: %ld and %ld" msgstr "" #: src/liflines/merge.c:882 src/liflines/merge.c:891 #, c-format msgid "Bad HUSB tag: %s" msgstr "" #: src/liflines/miscutls.c:51 #, fuzzy msgid "Whose key value do you want?" msgstr "Hvad vil du tilføje?" #: src/liflines/miscutls.c:67 #, fuzzy msgid "Please enter person's internal key value." msgstr "k Find nøgleværdi for en person" #: src/liflines/miscutls.c:68 #, fuzzy msgid "enter key:" msgstr "indtast navn: " #: src/liflines/miscutls.c:78 src/liflines/miscutls.c:82 #: src/liflines/miscutls.c:87 #, c-format msgid "No one in database has key value %s." msgstr "" #: src/liflines/scan.c:100 msgid "Enter pattern to match against single surname or given name." msgstr "Angiv mønster til at matche alenestående efter- eller fornavn." #: src/liflines/scan.c:112 msgid "Enter pattern to match against full name." msgstr "Angiv mønster til at matche fuldstændigt navn." #: src/liflines/scan.c:128 src/liflines/scan.c:178 src/liflines/scan.c:201 msgid "pattern: " msgstr "mønster: " #: src/liflines/scan.c:151 src/liflines/scan.c:165 #, fuzzy msgid "Enter pattern to match against author." msgstr "Angiv mønster til at matche refn." #: src/liflines/screen.c:317 #, c-format msgid "initscr failed" msgstr "" #: src/liflines/screen.c:334 #, fuzzy, c-format msgid "" "The requested window size (%ld,%ld) is too large for your terminal (%d,%d).\n" msgstr "" "Den forespurgte vinduestørrelse (%d,%d) er for stor til din terminal (%d,%" "d).\n" #: src/liflines/screen.c:342 #, fuzzy, c-format msgid "" "The requested window size (%ld,%ld) is too small for LifeLines (%d,%d).\n" msgstr "" "Den forespurgte vinduestørrelse (%d,%d) er for lille for LifeLines (%d,%" "d). \n" #: src/liflines/screen.c:706 #, fuzzy msgid "Search results" msgstr "Søgeresultat:" #: src/liflines/screen.c:813 #, c-format msgid "(pg %d/%d)" msgstr "" #: src/liflines/screen.c:1431 #, fuzzy msgid "No conversion" msgstr "Findes ingen sådan person." #: src/liflines/screen.c:1517 #, fuzzy msgid "Internal codeset" msgstr "Intern tegnsæt: " #: src/liflines/screen.c:1520 #, fuzzy msgid "Internal UTF-8: Yes" msgstr "Intern tegnsæt: " #: src/liflines/screen.c:1522 #, fuzzy msgid "Internal UTF-8: No" msgstr "m Mapning fra intern til editor " #: src/liflines/screen.c:1526 msgid "Locales are enabled." msgstr "" #: src/liflines/screen.c:1528 msgid "Locales are disabled." msgstr "" #: src/liflines/screen.c:1531 msgid "NLS (National Language Support) is compiled in." msgstr "" #: src/liflines/screen.c:1537 msgid "NLS (National Language Support) is not compiled in." msgstr "" #: src/liflines/screen.c:1550 msgid "iconv (codeset conversion) is compiled in." msgstr "" #: src/liflines/screen.c:1552 msgid "iconv (codeset conversion) is not compiled in." msgstr "" #: src/liflines/screen.c:1554 #, c-format msgid "Startup collate locale: %s" msgstr "" #: src/liflines/screen.c:1557 #, c-format msgid "Startup messages locale: %s" msgstr "" #: src/liflines/screen.c:1560 #, fuzzy, c-format msgid "Current collate locale: %s" msgstr "Aktuel database - %s" #: src/liflines/screen.c:1563 #, c-format msgid "Current messages locale: %s" msgstr "" #: src/liflines/screen.c:1566 #, c-format msgid "Collation routine: %s" msgstr "" #: src/liflines/screen.c:1570 #, fuzzy, c-format msgid "GUI codeset: %s" msgstr "Intern tegnsæt: " #: src/liflines/screen.c:1573 #, fuzzy, c-format msgid "GUI output codeset: %s" msgstr "Intern tegnsæt: " #: src/liflines/screen.c:1575 #, fuzzy, c-format msgid "GUI input codeset: %s" msgstr "Intern tegnsæt: " #: src/liflines/screen.c:1580 #, fuzzy, c-format msgid "editor codeset: %s" msgstr "Tegnkodning for rapporter:" #: src/liflines/screen.c:1583 #, fuzzy, c-format msgid "editor output codeset: %s" msgstr "Tegnkodning for rapporter:" #: src/liflines/screen.c:1585 #, fuzzy, c-format msgid "editor input codeset: %s" msgstr "Tegnkodning for rapporter:" #: src/liflines/screen.c:1590 #, fuzzy, c-format msgid "report codeset: %s" msgstr "Tegnkodning for rapporter:" #: src/liflines/screen.c:1593 #, fuzzy, c-format msgid "report output codeset: %s" msgstr "Tegnkodning for rapporter:" #: src/liflines/screen.c:1595 #, fuzzy, c-format msgid "report input codeset: %s" msgstr "Tegnkodning for rapporter:" #: src/liflines/screen.c:1600 #, fuzzy, c-format msgid "GEDCOM codeset: %s" msgstr "!g GEDCOM-tilstand" #: src/liflines/screen.c:1603 #, fuzzy, c-format msgid "gedcom output codeset: %s" msgstr "Tegnkodning for rapporter:" #: src/liflines/screen.c:1605 #, fuzzy, c-format msgid "gedcom input codeset: %s" msgstr "Tegnkodning for rapporter:" #: src/liflines/screen.c:1613 msgid "UTF-8 charprops loaded" msgstr "" #: src/liflines/screen.c:1615 msgid "UTF-8 charprops not loaded" msgstr "" #: src/liflines/screen.c:1619 msgid "Codeset information" msgstr "" #: src/liflines/screen.c:1636 #, c-format msgid "gettext dll: %s" msgstr "" #: src/liflines/screen.c:1640 #, c-format msgid "gettext dll version: %s" msgstr "" #: src/liflines/screen.c:1645 msgid "gettext dll had no version" msgstr "" #: src/liflines/screen.c:1650 msgid "no gettext dll found" msgstr "" #: src/liflines/screen.c:1659 #, c-format msgid "iconv dll: %s" msgstr "" #: src/liflines/screen.c:1663 #, c-format msgid "iconv dll version: %s" msgstr "" #: src/liflines/screen.c:1668 msgid "iconv dll had no version" msgstr "" #: src/liflines/screen.c:1673 msgid "no iconv dll found" msgstr "" #: src/liflines/screen.c:1931 msgid "Impermissible to change codeset in a populated database" msgstr "" #: src/liflines/screen.c:2032 msgid "LifeLines -- Main Menu" msgstr "" #: src/liflines/searchui.c:133 #, fuzzy, c-format msgid "v Review visit history (%d record)" msgid_plural "v Review visit history (%d records)" msgstr[0] "Fjern historik (%d poster)?" msgstr[1] "Fjern historik (%d poster)?" #: src/liflines/searchui.c:137 #, fuzzy msgid "(visit history is empty)" msgstr "Posten er tom." #: src/liflines/searchui.c:143 #, fuzzy, c-format msgid "c Review change history (%d record)" msgid_plural "c Review change history (%d records)" msgstr[0] "Fjern historik (%d poster)?" msgstr[1] "Fjern historik (%d poster)?" #: src/liflines/searchui.c:147 #, fuzzy msgid "(change history is empty)" msgstr "Posten er tom." #: src/liflines/searchui.c:151 #, fuzzy msgid "f Full database scan" msgstr "f Søg på hele navnet" #: src/liflines/searchui.c:220 msgid "What scan type?" msgstr "Hvilken type af søgning?" #: src/liflines/searchui.c:223 msgid "f Full name scan" msgstr "f Søg på hele navnet" #: src/liflines/searchui.c:224 msgid "n Name fragment (whitespace-delimited) scan" msgstr "n Søg på navnefragment (adskilt med blanktegn)" #: src/liflines/searchui.c:225 msgid "r Refn scan" msgstr "r Refn-søgning" #: src/liflines/searchui.c:226 #, fuzzy msgid "s Source scan" msgstr "r Refn-søgning" #: src/liflines/searchui.c:290 msgid "Scan on what source field?" msgstr "" #: src/liflines/searchui.c:293 msgid "a Scan by author" msgstr "" #: src/liflines/searchui.c:294 msgid "t Scan by title" msgstr "" #: src/liflines/selectdb.c:95 #, fuzzy msgid "Choose database to open" msgstr "Databasen er skrivebeskyttet; du kan ikke tilføje poster." #: src/liflines/selectdb.c:103 msgid "No databases found in database path" msgstr "" #: src/liflines/show.c:123 #, fuzzy msgid "born" msgstr "født: " #: src/liflines/show.c:124 src/liflines/show.c:125 #, fuzzy msgid "bapt" msgstr "døbt: " #: src/liflines/show.c:126 #, fuzzy msgid "barm" msgstr "brum" #: src/liflines/show.c:127 msgid "basm" msgstr "" #: src/liflines/show.c:128 msgid "bles" msgstr "" #: src/liflines/show.c:129 msgid "adop" msgstr "" #: src/liflines/show.c:130 msgid "resi" msgstr "" #: src/liflines/show.c:134 #, fuzzy msgid "died" msgstr "død: " #: src/liflines/show.c:135 #, fuzzy msgid "buri" msgstr "begr: " #: src/liflines/show.c:136 msgid "crem" msgstr "" #: src/liflines/show.c:1009 #, c-format msgid "Cached: I:%s; F:%s" msgstr "" #: src/liflines/valgdcom.c:92 #, c-format msgid "Record %s is referred to but not defined." msgstr "" #: src/liflines/valgdcom.c:93 #, fuzzy, c-format msgid "Line %d: Reference to undefined record %s" msgstr "Linje %d: Denne linje har intet niveaunummer." #: src/liflines/valgdcom.c:94 #, c-format msgid "Line %d: Tag %s found in unexpected record: %s %s." msgstr "" #: src/liflines/valgdcom.c:190 #, fuzzy, c-format msgid "Line %d: Family has no members (%s %s)." msgstr "Linje %d: Denne linje har intet niveaunummer." #: src/liflines/valgdcom.c:390 #, fuzzy, c-format msgid "Line %d: The source defined here has no key." msgstr "Linje %d: Denne linje har intet niveaunummer." #: src/liflines/valgdcom.c:404 #, fuzzy, c-format msgid "Line %d: Source %s has an incorrect key." msgstr "Linje %d: Denne linje er ufuldstændig." #: src/liflines/valgdcom.c:411 #, c-format msgid "Lines %d and %d: Source %s is multiply defined." msgstr "" #: src/liflines/valgdcom.c:434 #, fuzzy, c-format msgid "Line %d: The event defined here has no key." msgstr "Linje %d: Denne linje har intet niveaunummer." #: src/liflines/valgdcom.c:447 #, fuzzy, c-format msgid "Line %d: Event %s has an incorrect key." msgstr "Linje %d: Denne linje er ufuldstændig." #: src/liflines/valgdcom.c:454 #, c-format msgid "Lines %d and %d: Event %s is multiply defined." msgstr "" #: src/liflines/valgdcom.c:477 #, fuzzy, c-format msgid "Line %d: The record defined here has no key." msgstr "Linje %d: Denne linje har intet niveaunummer." #: src/liflines/valgdcom.c:490 #, fuzzy, c-format msgid "Line %d: Record %s has an incorrect key." msgstr "Linje %d: Denne linje er ufuldstændig." #: src/liflines/valgdcom.c:497 #, c-format msgid "Lines %d and %d: Record %s is multiply defined." msgstr "" #: src/liflines/valgdcom.c:539 #, fuzzy, c-format msgid "Line %d: This %s line is missing a value field (%s %s)." msgstr "Linje %d: Denne linje er ufuldstændig." #: src/liflines/valgdcom.c:590 #, c-format msgid "Line %d: Bad NAME syntax (%s %s)." msgstr "" #: src/liflines/valgdcom.c:820 #, fuzzy, c-format msgid "Line %d: Person %s has multiple father links." msgstr "Linje %d: Denne linje har en ugyldig lænke." #: src/liflines/valgdcom.c:824 #, c-format msgid "Line %d: Person %s has multiple mother links." msgstr "" #: src/liflines/valgdcom.c:836 #, c-format msgid "Line %d: Person %s is both male and female." msgstr "" #: src/liflines/valgdcom.c:840 #, c-format msgid "Line %d: Person %s is male but must be female." msgstr "" #: src/liflines/valgdcom.c:844 #, c-format msgid "Line %d: Person %s is female but must be male." msgstr "" #: src/liflines/valgdcom.c:848 #, c-format msgid "Line %d: Person %s is implied to be both male and female." msgstr "" #: src/liflines/valgdcom.c:860 #, fuzzy, c-format msgid "Line %d: Family %s has multiple husband links." msgstr "Linje %d: Denne linje har en ugyldig lænke." #: src/liflines/valgdcom.c:864 #, c-format msgid "Line %d: Family %s has multiple wife links." msgstr "" #: src/liflines/valgdcom.c:920 msgid "error" msgstr "" #: src/liflines/valgdcom.c:928 #, c-format msgid "%6d Error" msgid_plural "%6d Errors" msgstr[0] "" msgstr[1] "" #: src/liflines/valgdcom.c:930 src/liflines/valgdcom.c:958 #, c-format msgid " (see log file <%s>)" msgstr "" #: src/liflines/valgdcom.c:932 src/liflines/valgdcom.c:960 msgid " (no log file)" msgstr "" #: src/liflines/valgdcom.c:948 msgid "warning" msgstr "" #: src/liflines/valgdcom.c:956 #, c-format msgid "%6d Warning" msgid_plural "%6d Warnings" msgstr[0] "" msgstr[1] "" #: src/liflines/valgdcom.c:1067 #, c-format msgid "Processed %d lines without finding end of HEAD" msgstr "" #: src/liflines/valgdcom.c:1072 #, c-format msgid "End of file at line %d" msgstr "" #: src/liflines/valgdcom.c:1076 #, c-format msgid "Error at line %d: %s" msgstr "" #: src/liflines/valgdcom.c:1080 #, c-format msgid "Bad level at line %d" msgstr "" #: src/liflines/valgdcom.c:1086 #, c-format msgid "Duplicate HEAD line at line %d" msgstr "" #: src/liflines/valgdcom.c:1092 #, c-format msgid "Missing HEAD line at line %d" msgstr "" #: src/stdlib/errlog.c:61 #, c-format msgid " in file <%s> at line %d\n" msgstr "" #: src/stdlib/errlog.c:63 #, fuzzy msgid "Current database" msgstr "Aktuel database - %s" #: src/tools/btedit.c:108 #, c-format msgid "btedit requires 2 arguments (btree and key)." msgstr "" #: src/tools/btedit.c:110 #, c-format msgid "See `btedit --help' for more information." msgstr "" #: src/tools/btedit.c:117 #, fuzzy, c-format msgid "Failed to open btree: %s." msgstr "Kunne ikke åbne filen %s." #: src/tools/btedit.c:124 #, fuzzy, c-format msgid "There is no record with key: %s" msgstr "Der findes ingen post med den nøgle eller reference." #: src/tools/btedit.c:126 #, fuzzy, c-format msgid "Error accessing record: %s" msgstr "Fejl ved dataadgang" #: src/tools/btedit.c:135 #, c-format msgid "Editor or system call failed." msgstr "" #: src/tools/btedit.c:137 #, fuzzy, c-format msgid "Database was not be modified." msgstr "Databasen er skrivebeskyttet; du kan ikke tilføje poster." #: src/tools/btedit.c:143 #, fuzzy, c-format msgid "Readonly database can not be modified." msgstr "Databasen er skrivebeskyttet; du kan ikke tilføje poster." #: src/tools/btedit.c:150 #, c-format msgid "Error writing file 'btedit.tmp'." msgstr "" #: src/tools/btedit.c:156 #, c-format msgid "Record %s modified." msgstr "" #: src/tools/btedit.c:226 msgid "\"\\My Documents\\LifeLines\\Databases\\MyFamily\"" msgstr "" #: src/tools/btedit.c:228 src/tools/dbverify.c:232 msgid "/home/users/myname/lifelines/databases/myfamily" msgstr "" #: src/tools/btedit.c:231 #, c-format msgid "" "lifelines `btedit' edits raw binary btree blocks\n" "in lifelines database files. Do NOT use this unless\n" "you know what you are doing and you have backed up\n" "your database." msgstr "" #: src/tools/btedit.c:236 #, c-format msgid "Usage btedit [database] [rkey]" msgstr "" #: src/tools/btedit.c:240 #, c-format msgid "\t--help\tdisplay this help and exit" msgstr "" #: src/tools/btedit.c:242 #, c-format msgid "\t--version\toutput version information and exit" msgstr "" #: src/tools/btedit.c:246 #, c-format msgid "\tbtedit %s I34" msgstr "" #: src/tools/btedit.c:248 #, c-format msgid "edit raw btree block for person I34" msgstr "" #: src/tools/dbverify.c:175 msgid "Orphan names" msgstr "" #: src/tools/dbverify.c:176 msgid "Ghost names" msgstr "" #: src/tools/dbverify.c:177 src/tools/dbverify.c:178 msgid "Duplicate names" msgstr "" #: src/tools/dbverify.c:179 msgid "Non-indi names" msgstr "" #: src/tools/dbverify.c:180 msgid "Duplicate individuals" msgstr "" #: src/tools/dbverify.c:181 msgid "Duplicate families" msgstr "" #: src/tools/dbverify.c:182 #, fuzzy msgid "Duplicate sources" msgstr "Dubleret hurtignøgle for post: %s" #: src/tools/dbverify.c:183 msgid "Duplicate events" msgstr "" #: src/tools/dbverify.c:184 #, fuzzy msgid "Duplicate others" msgstr "Dubleret hurtignøgle for post: %s" #: src/tools/dbverify.c:185 #, fuzzy msgid "Missing records (from deleteset)" msgstr "Titel mangler" #: src/tools/dbverify.c:186 #, fuzzy msgid "Deleted records" msgstr "e Redigér post" #: src/tools/dbverify.c:187 msgid "Bad name" msgstr "" #: src/tools/dbverify.c:188 #, fuzzy msgid "Bad family reference" msgstr "$$ List referencer" #: src/tools/dbverify.c:189 #, fuzzy msgid "Missing child" msgstr "Titel mangler" #: src/tools/dbverify.c:190 #, fuzzy msgid "Missing spouse" msgstr "Titel mangler" #: src/tools/dbverify.c:191 msgid "Bad HUSB reference" msgstr "" #: src/tools/dbverify.c:192 msgid "Bad WIFE reference" msgstr "" #: src/tools/dbverify.c:193 #, fuzzy msgid "Bad CHIL reference" msgstr "$$ List referencer" #: src/tools/dbverify.c:194 msgid "Improper HUSB" msgstr "" #: src/tools/dbverify.c:195 msgid "Improper WIFE" msgstr "" #: src/tools/dbverify.c:196 msgid "Improper child" msgstr "" #: src/tools/dbverify.c:197 #, fuzzy msgid "Empty family" msgstr "e Redigér familien" #: src/tools/dbverify.c:198 #, fuzzy msgid "Single person family" msgstr "g Bladr t. familie" #: src/tools/dbverify.c:199 msgid "Bad pointer" msgstr "" #: src/tools/dbverify.c:200 #, fuzzy msgid "Missing data records" msgstr "Titel mangler" #: src/tools/dbverify.c:230 msgid "\\My Documents\\LifeLines\\Databases\\MyFamily" msgstr "" #: src/tools/dbverify.c:236 #, c-format msgid "usage: dbverify -(flags) \n" msgstr "" #: src/tools/dbverify.c:237 #, c-format msgid "flags:\n" msgstr "" #: src/tools/dbverify.c:238 #, c-format msgid "\t-a = Perform all checks (does not include fixes)\n" msgstr "" #: src/tools/dbverify.c:239 #, c-format msgid "\t-g = Check for ghosts (names/refns)\n" msgstr "" #: src/tools/dbverify.c:240 #, c-format msgid "\t-G = Check for & fix ghosts (names/refns)\n" msgstr "" #: src/tools/dbverify.c:241 #, c-format msgid "\t-i = Check individuals\n" msgstr "" #: src/tools/dbverify.c:242 #, c-format msgid "\t-f = Check families\n" msgstr "" #: src/tools/dbverify.c:243 #, c-format msgid "\t-F = Alter any bad family lineage pointers (to _badptr)\n" msgstr "" #: src/tools/dbverify.c:244 #, c-format msgid "\t-h = Display help text (this text)\n" msgstr "" #: src/tools/dbverify.c:245 #, c-format msgid "\t-s = Check sours\n" msgstr "" #: src/tools/dbverify.c:246 #, c-format msgid "\t-e = Check events\n" msgstr "" #: src/tools/dbverify.c:247 #, c-format msgid "\t-x = Check others\n" msgstr "" #: src/tools/dbverify.c:248 #, c-format msgid "\t-l = Check database structure\n" msgstr "" #: src/tools/dbverify.c:249 #, c-format msgid "\t-m = Check for records missing data entries\n" msgstr "" #: src/tools/dbverify.c:250 #, c-format msgid "\t-M = Fix records missing data entries\n" msgstr "" #: src/tools/dbverify.c:251 #, c-format msgid "\t-D = Fix bad delete entries\n" msgstr "" #: src/tools/dbverify.c:252 #, c-format msgid "\t-n = Noisy (echo every record processed)\n" msgstr "" #: src/tools/dbverify.c:253 #, c-format msgid "example: dbverify -ifsex \"%s\"\n" msgstr "" #: src/tools/dbverify.c:386 #, c-format msgid "Non-indi name, key=%s, name=%s" msgstr "" #: src/tools/dbverify.c:403 #, fuzzy, c-format msgid "Orphaned name: %s" msgstr "indtast navn: " #: src/tools/dbverify.c:417 #, c-format msgid "Ghost name: %s -> %s" msgstr "" #: src/tools/dbverify.c:449 #, c-format msgid "Orphaned refn: %s" msgstr "" #: src/tools/dbverify.c:489 #, fuzzy, c-format msgid "Duplicate name for %s (%s)" msgstr "Dubleret hurtignøgle for post: %s" #: src/tools/dbverify.c:524 #, fuzzy, c-format msgid "Duplicate refn for %s (%s)" msgstr "Dubleret hurtignøgle for post: %s" #: src/tools/dbverify.c:637 #, fuzzy, c-format msgid "Duplicate individual for %s" msgstr "Dubleret hurtignøgle for post: %s" #: src/tools/dbverify.c:679 #, c-format msgid "Bad name for individual %s: %s" msgstr "" #: src/tools/dbverify.c:697 src/tools/dbverify.c:721 #, c-format msgid "Bad family reference (%s) individual %s" msgstr "" #: src/tools/dbverify.c:703 #, c-format msgid "Missing child (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:707 #, c-format msgid "Fixed missing child (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:727 #, c-format msgid "Missing spouse (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:731 #, c-format msgid "Fixed missing spouse (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:765 #, fuzzy, c-format msgid "Duplicate family for %s" msgstr "Dubleret hurtignøgle for post: %s" #: src/tools/dbverify.c:816 #, c-format msgid "Bad HUSB reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:822 #, c-format msgid "Fixed Bad HUSB reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:831 #, c-format msgid "Improper HUSB (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:844 #, c-format msgid "Bad wife reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:850 #, c-format msgid "Fixed Bad wife reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:859 #, c-format msgid "Improper wife (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:872 #, c-format msgid "Bad child reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:878 #, c-format msgid "Fixed bad child reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:887 #, c-format msgid "Improper child: Child (%s) without FAMC reference to family (%s)" msgstr "" #: src/tools/dbverify.c:895 #, c-format msgid "Empty family (%s)" msgstr "" #: src/tools/dbverify.c:897 #, c-format msgid "Single person family (%s)" msgstr "" #: src/tools/dbverify.c:923 #, fuzzy, c-format msgid "Duplicate source for %s" msgstr "Dubleret hurtignøgle for post: %s" #: src/tools/dbverify.c:939 #, fuzzy, c-format msgid "Duplicate event for %s" msgstr "Dubleret hurtignøgle for post: %s" #: src/tools/dbverify.c:955 #, fuzzy, c-format msgid "Duplicate record for %s" msgstr "Dubleret hurtignøgle for post: %s" #: src/tools/dbverify.c:1026 #, c-format msgid "Bad pointer (in %s): %s" msgstr "" #: src/tools/dbverify.c:1064 #, c-format msgid "Missing undeleted record %c%d" msgstr "" #: src/tools/dbverify.c:1071 #, c-format msgid "Fixed missing undeleted record %c%d" msgstr "" #: src/tools/dbverify.c:1075 #, c-format msgid "Failed to fix missing undeleted record %c%d" msgstr "" #: src/tools/dbverify.c:1087 #, c-format msgid "Delete set contains valid record %s" msgstr "" #: src/tools/dbverify.c:1092 #, c-format msgid "Fixed delete set contains valid record %s" msgstr "" #: src/tools/dbverify.c:1096 #, c-format msgid "Failed to fix missing undeleted record %s" msgstr "" #: src/tools/dbverify.c:1117 #, c-format msgid "Master fkey misaligned" msgstr "" #: src/tools/dbverify.c:1144 #, c-format msgid "Cycle in indexes, file %s found again!\n" msgstr "" #: src/tools/dbverify.c:1151 #, fuzzy, c-format msgid "Error loading index at key" msgstr "Fejl ved dataadgang" #: src/tools/dbverify.c:1199 #, c-format msgid "First key in block below parent's limit\n" msgstr "" #: src/tools/dbverify.c:1207 #, c-format msgid "Last key in block above parent's limit\n" msgstr "" #: src/tools/dbverify.c:1215 #, c-format msgid "Key not below next key" msgstr "" #: src/tools/dbverify.c:1232 src/tools/dbverify.c:1234 msgid "data block" msgstr "" #: src/tools/dbverify.c:1235 #, c-format msgid "%s fkey=%d, file=%s" msgstr "" #: src/tools/dbverify.c:1248 #, c-format msgid "Invalid errs array[%d] in dbverify - fix program\n" msgstr "" #: src/tools/dbverify.c:1285 #, fuzzy, c-format msgid "Missing data record (%s)" msgstr "Titel mangler" #: src/tools/dbverify.c:1289 #, fuzzy, c-format msgid "Fixed missing data record (%s)" msgstr "Titel mangler" #: src/tools/dbverify.c:1420 #, c-format msgid "Checking %s" msgstr "" #: src/tools/dbverify.c:1476 #, c-format msgid "%d error" msgid_plural "%d errors" msgstr[0] "" msgstr[1] "" #: src/tools/dbverify.c:1480 #, c-format msgid "%d fixed" msgid_plural "%d fixed" msgstr[0] "" msgstr[1] "" #: src/tools/dbverify.c:1487 #, fuzzy msgid "No errors found" msgstr "Ingen poster fandtes i søgning" #: src/tools/dbverify.c:1506 #, fuzzy, c-format msgid "FATAL ERROR: " msgstr "SYSTEMKALDSFEJL" #: src/tools/dbverify.c:1511 #, c-format msgid "In file <%s> at line %d" msgstr "" #~ msgid "Program" #~ msgstr "Program" #, fuzzy #~ msgid "" #~ "\n" #~ "Report Errors: %s" #~ msgstr "Tegnkodning for rapporter:" #, fuzzy #~ msgid "Added (%dP, %dF, %dS, %dE, %dX) records" #~ msgstr "Databaseposter (%dP, %dF, %dS, %dE, %dX)" #~ msgid "(%s: %d spouse(s), %d child(ren))" #~ msgstr "(%s: %d ægtefæller, %d børn)" #~ msgid "Unsupported Unicode format (only UTF-8 is supported)." #~ msgstr "UCS-format understøttes ikke (kun understøttelse for UTF-8)." #~ msgid "WARNING: invalid pointer" #~ msgstr "ADVARSEL: ugyldig peger" #~ msgid "Character set menu" #~ msgstr "Menu for tegnsæt" #~ msgid "t Edit translation tables" #~ msgstr "t Redigér tegnoversættelsestabeller" #~ msgid "r Report character set setup" #~ msgstr "r Rapportér tegnsætsopsætning." #~ msgid "s Edit custom sort table " #~ msgstr "s Redigér tilpasset sorteringstabel " #~ msgid "p Edit custom sort prefix table " #~ msgstr "p Redigér tilpasset præfikssorteringstabel" #~ msgid "c Edit custom codepage mapping " #~ msgstr "c Redigér tilpasset tegntabelsmapning" #~ msgid "l Edit custom lower case mapping" #~ msgstr "l Redigér tilpasset mapning af små bogstaver " #~ msgid "u Edit custom upper case mapping" #~ msgstr "u Redigér tilpasset mapning af store bogstaver " #~ msgid "Report character set menu" #~ msgstr "Tegnsæt i rapporter, menu" #~ msgid "af" #~ msgstr "af" #~ msgid "Enter locale name" #~ msgstr "Indtast navn på lokale" #~ msgid "Locale: " #~ msgstr "Lokale: " #~ msgid "Valid locale: %1" #~ msgstr "Gyldigt lokale: %1" #~ msgid "Invalid locale, try again" #~ msgstr "Ugyldigt lokale, forsøg igen" #~ msgid "L Test locale names" #~ msgstr "L Afprøv navn på lokale" lifelines-3.0.61/po/de.gmo0000700002540200244210000022077110656417753015502 0ustar prappDomain UsersÞ•”¼Ç\9xLyL™L¶L ÑLÞL íLúL MM/MCMRMaMqMM”M¨M·MÈMÎMÕMÛMâMæMûMN&N;NNN`NuNN –N ¤N²NÁN'ÚNO OAOSOnO"ŒO"¯O!ÒO ôOP5P!UP!wP!™P »P#ÜP#Q$QCQaQQ%QÃQßQýQR;R [RhRzR‘R¥R·RËR$åR SS&&SMSfSuS‰SŸS²S ¸SÆS ÌSÚSòS T/T;IT(…T ®T&¼T'ãT& U&2U&YU&€U§U¼U ×UáUõU V&V+CVoVtVzV }V‰V ˜V%£VÉV$äV= W%GW)mW—W¬W±W¸W»W ¿WÉWÜW$ïWX'X%@XfX4X¶XÉX'ÞXY%Y7YJY_YhY ‡Y“Y$«Y2ÐY)Z&-Z(TZ}Z‚Z…Z2˜ZLËZ*[&C[!j[-Œ[º[Ï[ç[$û[% \F\Z\Fp\<·\/ô\*$]@O].]¿],×]4^9^O^j^{^—^%¦^Ì^à^ñ^_#_:_3J_5~_6´_6ë_6"`6Y`;`/Ì`.ü`<+a=ha(¦a)Ïa)ùa)#b)Mb'wb$ŸbKÄb%cL6c%ƒcL©c%öcLd%idLd"Üdÿde9ePeaete1Œe¾eÜeøef)f9f1Jf|f”f¯fÇf Ùfúf-g 1g>gPg ggˆg¥g$Ágægh" h,Ch-ph)žh$Èh<íh*iCiXimi Ši«iÇiãiþi j(+jTj mj yj‡j j)°j Újæj/ùj-)k5Wkk k°kÆkÝk òkþkllll$!lFl7Zl ’l)œl8Æl*ÿl,*m!Wm ymBšm%Ým.n2n$On3tn2¨n4Ûno!/o)Qo"{o*žo,Éo(öo7p Wp!ep ‡p•p!¤pÆp Þp6êp!q'2qZqrq"‹q®q5³q5éq2r0Rrƒr2šr6Ír6s';s(cs.Œs+»s1çs-t-Gt+ut.¡t9Ðt. u)9u(cu(Œu+µu,áu5v,Dv,qv"žv8Áv(úv'#w!Kw!mww0¯w.àw/x8?x/xx/¨xØxèxþx@yTyfy,xy&¥y)Ìy öyz2z Pz!^z€z"z ²zÀzÞz+æz{7#{ [{Ai{#«{Ï{*ß{/ |:|M|]|o|‹|*ž|É|â|ù|},};}K}[}*k}–}µ}Ä}Ø} ê}÷} ~ ~ (~3~F~a~{~™~®~)½~#ç~ &''N&v)%Ç2í €&A€.h€+—€,À4ð€1%3W+‹· ×$ø,‚-J‚5x‚2®‚4á‚!ƒ-8ƒ:fƒ)¡ƒ)˃)õƒ,„#L„/p„$ „Å„3à„.…C…\… a…!o…‘…)­…×…è… ø…†/†L†g†z†ƒ†0•†7Ɔþ†‡‡41‡f‡)u‡Ÿ‡®‡ɇ凈 ˆ 4ˆ)?ˆ*iˆ”ˆ!³ˆ)Õˆ-ÿˆ-‰3H‰6|‰5³‰6é‰5 ŠVŠpŠ'ŒŠ;´Š8ðŠ()‹!R‹)t‹7ž‹!Ö‹+ø‹*$Œ+OŒ,{Œ,¨ŒÕŒ(êŒ(+<h‡6¦1Ý6Ž.FŽ'uŽGŽ1åŽ6.N-}8«3ä48M6†)½)ç,‘1>‘*p‘3›‘9Ï‘+ ’)5’7_’8—’4Ð’-“.3“,b“,“.¼“2ë“,”%K”q”0„”4µ” ê” ø”(•/•B•@Q•’•#±•Õ• ë•%ù•&–%F–Gl–´–Í–$é– —</— l——%—$×,è—,˜'B˜(j˜,“˜À˜)Ú˜"™'™&G™2n™0¡™1Ò™2š17š1iš1›šÍšëš*›-›D›U›f›v›‡›š›­›¿›Ò› é›"÷›œ.œCœGœPœWœ \œgœlœpœtœ{œ„œˆœŽœ’œ™œœœ%²œØœìœ   (6HMRY^gmry¦,¿-ìJžež lžzžžˆžŽž+“ž,¿ž?ìž+,Ÿ XŸyŸ~Ÿ‚Ÿ˜Ÿ'¬ŸÔŸçŸüŸ $ A E N S Z ` x ‡ š #­ Ñ å !ø ¡-¡F¡`¡f¡m¡t¡}¡¡†¡–¡¬¡»¡ Ï¡ Ú¡ ç¡ô¡¢¢##¢G¢ N¢[¢z¢“¢§¢¼¢8Ñ¢& £1£G£Y£`£d£m£s£y£~£ƒ£‹££—£ £©£®£·£ ¿£Í£ Ò£%Ü£¤¤/¤I¤N¤W¤r¤Ф𤫤®¤²¤·¤»¤¿¤Ϥ#å¤* ¥)4¥^¥w¥ ¥"›¥¾¥Ã¥Ç¥Þ¥ð¥ô¥ü¥¦¦¦¦"¦?¦O¦c¦¦™¦ ¦%¤¦ʦަ󦧧6§:§>§ D§N§R§W§`§g§,|§©§»§!Ù§û§¨¨ ¨¨¨-¨8@¨y¨}¨†¨Ѝ¡¨¿¨è˨Ϩ*à¨" © .©8©?©D©M©R©[©k©‚©*©"È© ë©ø© ª ª6ªIªbª"|ªŸª¤ª¼ªÕªëª%«(«.;«)j«#”«¸«¿« ëÍ«è«î«ö«ú«¬ ¬¬¬¬$#¬H¬$O¬t¬x¬‰¬&ž¬Ŭˬá¬å¬ë¬ñ¬­­ "­,­2­8­?­U­Y­_­u­y­­¥­º­¾­Æ­Í­Ñ­æ­H®J® O®[®`®h®p®)ˆ®²®Ç®Ü®ñ®'¯.¯G¯W¯Z¯_¯d¯v¯m‡¯0õ°&±C±^±o± ~±б𱬱¿±Ó±ã±õ±²²*²<²P²d²j²q²x²²…²›²µ²ʲܲð² ³3³ Q³_³t³‡³š³2¹³#ì³´$´;´Y´!x´š´º´$Ù´þ´µ9µ Vµ#wµ›µºµ!Úµüµ¶4¶Q¶)j¶”¶®¶̶ì¶· &·3·E·Z·o·ƒ·•· «· Ì·×·"è· ¸ #¸1¸D¸W¸i¸o¸¸‡¸˜¸¯¸ ȸ8Ö¸;¹'K¹ s¹'¹©¹(ǹ ð¹º!0ºRºaº pº|ºŒºŸº?µº>õº4»<»D» L»Z» o»By»¼»*Ü»>¼,F¼0s¼¤¼º¼¼ʼÒ¼Ú¼ù¼ ½/8½ h½‰½,¡½ν,ê½¾3¾-R¾€¾ ¾°¾Ǿå¾õ¾¿!¿/>¿An¿)°¿*Ú¿7À=ÀEÀMÀMjÀd¸À6Á1TÁ#†ÁFªÁñÁ$Â+Â<Â"[Â~žÂK´Â=Ã0>Ã4oÃH¤Ã+íÃÄ*9Ä.dÄ“Ä%«ÄÑÄ'äÄ' Å)4Å^Å {ņŠÅ*±ÅÜÅ/ñÅ5!Æ3WÆ2‹Æ6¾Æ2õÆF(Ç;oÇ;«Ç5çÇ:È7XÈ3È2ÄÈ+÷È2#É-VÉ.„ÉP³É,Ê;1Ê*mÊN˜Ê/çÊQË+iËN•Ë)äË(Ì 7ÌXÌr̘̆Ì3³ÌçÌÍÍ-ÍHÍWÍ=kÍ©ÍÄÍÞÍõÍ#Î*ÎA3Î u΃ΙÎ2´ÎçÎÏ%Ï ?Ï`Ï(tÏ8Ï.ÖÏ$Ð"*Ð6MЄРиÐÏÐ!îÐ$Ñ5Ñ!TÑ&vÑÑ.±ÑàÑÿÑÒ1ÒBÒ-SÒÒ™ÒE­Ò3óÒ?'ÓgÓ„Ó!žÓ!ÀÓâÓ øÓÔ Ô!Ô$Ô*Ô*/ÔZÔGlÔ ´Ô%ÁÔ+çÔ-ÕAAÕ@ƒÕ-ÄÕ;òÕ.Ö'KÖ&sÖ,šÖGÇÖ4×CD×*ˆ×*³×-Þ×+ Ø.8Ø2gØšØ<±ØîØ3Ù<ÙVÙ3fÙšÙ ´Ù@ÀÙÚ+ÚDÚ]Ú8yÚ²ÚC·Ú4ûÚ.0Û,_ÛŒÛ.£Û/ÒÛ/Ü72Ü:jÜ;¥Ü;áÜ2Ý+PÝ,|Ý3©Ý5ÝÝ:Þ5NÞ(„Þ8­Þ5æÞ8ß-Uß:ƒß9¾ß6øß)/à3Yà$à²à5Òàá$á3:á5ná0¤á=Õá6â3Jâ~â$â"´â`×â8ãLã#`ã„ã+¡ã ÍãØã3÷ã+ä:äZä%mä “ä(Ÿä Èä,ÒäÿäEå_å=på7®åæåAüåF>æ…æ¡æ°æÍæäæ/þæ..ç]çwç•ç®çËçëç! è/,è,\è‰èè¯èÁèÑèåèøè éé!-é#OéséŠé›é,«é4Øé ê)"ê,Lê"yê,œê/Éê#ùê)ë2Gë8zë5³ë8éë?"ì?bìC¢ì9æì* íKí%gí6í9Äí@þí@?îD€î'Åî<íîD*ï0oï) ï-Êï.øï!'ð,Ið)vð ð@·ð#øðñ<ñDñ-Uñ+ƒñ<¯ñìñÿñò#òA>ò€ò%òÃò-ÌòAúò7<ótó$xó%óMÃóô, ôMô#bô'†ô®ôËôêôõ6õ+Fõ%rõ)˜õ+Âõ2îõ+!öCMöD‘öMÖöF$÷<k÷!¨÷"Ê÷í÷R øR^ø'±ø$Ùø-þøE,ù%rù6˜ù3Ïù4ú48ú4mú¢ú½úÜú5øú".û$Qû+vû8¢ûCÛû<ü"\üxü5øü".ý.Qý.€ýM¯ýBýýG@þEˆþEÎþFÿ$[ÿ*€ÿ8«ÿ-äÿ8BK:Ž+ÉCõE9A'Á6é: ;[*—NÂ=&OvQ‹OÝ!-!O0q¢#¾Pâ'3D[ (»Hä(-V7k£¸ÍéG)I)s,º1ç0(J%s,™Æ2â 1 =O + *¹ +ä + +< +h +” "À ã 2ú - B U i ~  £ ¹ Í Þ ñ ) 0 C Y \ b h m  r | € „ Œ ” ™ Ÿ ¤ « ® )Å ï    %  * 4 ;  B O  b m  v € … Ž  •    ­ À "× )ú ($\M ª ·Ä Ê×Ü;å6!JX;£,ß 1"Fi‘°$·Üá ê ô'?U'j’§»Û$ø$BGPT]`e!‚¤"Ä çò!($Jo1v¨ °½#Ý%4;#p ”µÑ×Ü äî÷ü   -2; BP U!_$•$ºßäí %5MPV]af}&"·6Ú/ E'S{…œ­²¹ÈÍÒ× Üý'*Rry"} ³ÆÝñ .27@G6_–¨Èæ ëõü'3Dx}†Š!ŸÁÆÎÓ'æ%4CJOX]fz‹)ŸÉâö "6%T%z% ÆÌä!.P4i/ž*Î ù / 6BFMQci o z› ¡Â ÆÔ(è* /9?P` e oy~†˜œ£¸¼Ðäö ú    # j0 ›    ¬ ± ¹ Á 7á !.!C!Z!0q!¢! ¸!Æ!É!Î!Ó!æ!¼Sr„‰¤’6±XûÙ>ø&‹òZy1(U  K†.ÆŸ= `3ïÒ¿ÿ¤#bX"[ì ‘µªÜôÞëÅQ_ÑY-¿¾j48жNàŠ.¾¼JJÍ­[øxÔ~ýºÿnBas‡´‚Û'˜¢níù;+7^wEÇ?£%»Ê‰]üýË2–‹éèä”—M !4P m¹lþCRÄ£{QÝ÷@S³/ë0 ñ;+\9FQƒ6ŠkV/ôOµ¹Ì#Þ ˆ“7©&^–auÓ›1´ue9ïóH½ä×…ð']âÔN:=kŒÛÒ'R«¨ÁÃûš¬Ixui¯3Ê€!Ϊ ýÇéoëô oÓ“/LÁ6:€‹˜zíD=Eb}ìÉŸlᯠD™"¼OYͨA8È%^o&’ƒTœv*ŒG tªÚž¥ "Ì6UCr}W5KÀ?ÈÇ‘f2æ’W;¦k|ú?ì~mp|®Lrñ„lw·©×)蜌´)[þ§O¶Þ)/©ÑÜb¡(Gü+ðÎ$¢(ž|çó>DЭ1›ŽBK‹gRSR~q”Ž»@áU̳1H¥dð;Æ™8”«äe]AùF@ù,QÑVß P_®k ¸5B¶Ó·î3eHûØõg€|z:cIJ#ÖŽ7Ã%«¦<·¡TÊKö‰‚ã„£}æDÕ4.†±<öGÅxÖ‚ÖF ThÏå±  ²C Ïæ “r¬‡÷¸Â…0j,Ta+ymƆ§“^4-ºJÁóšaÿ½vÂ\fê~ ö»djMÀÉ`î@*9SÅ ê Üyé\ ÎYËâ¦Ë8ˆ.¬qpñˆŸW÷•,¾‰id’M5á<X5ÍV€úþßså2¯E{°ç…ÕˆGcç&vøÚ°ƒd²0˜:t(ò9$…<‡§hè®$³N‘ŠWí™ÔZ_{ߊAgà‚FOŒnhÝ]¹å½!bl—É”L Czžãh¤7º›ÙpJB¡¿c=‘Žo"ÛztM#APtfw_0„ÐHƒú{q2êݸòš*i`jgØe3Xâm i$µwü† vnØZ°\}I[×qN–y,cà¨-s%—‡sEPfÕ*p`Ä>­ÒÃ-ãõ)Ï¢xÙ'IÚL?UÀî¥õÈIu•Z!VY> Aborting now. Core dump? [y/n] in file <%s> at line %d in file <%s> at line %d (immutable) (no log file) (read only) (see log file <%s>)!! Cycle mode!a Ancestors mode!d Descendants mode!g GEDCOM mode!n Normal mode!t GEDCOMT mode!x GEDCOMX mode# Toggle childnos$$ List references$n List notes$s List sources%02ds%1 AUC%1 FR%1 HEB%1J%6d Error%6d Errors%6d Warning%6d Warnings%c Reorder child%d child%d children%d error%d errors%d fixed%d fixed%d spouse%d spouses%dI, %dF, %dS, %dE, %dX%dy%03dd%e Add event%o Add other%s Add source%s was added as a child.%s was added as a spouse and/or parent.%s was added to the database.%s was modified in the database.%s: Bad arguments%s: line %d (entry %d): %s%s: null arg not permissible.%s: the arg #%s had a major error.%s: the arg #%s must be a boolean.%s: the arg #%s must be a family.%s: the arg #%s must be a float.%s: the arg #%s must be a list.%s: the arg #%s must be a node.%s: the arg #%s must be a person.%s: the arg #%s must be a record.%s: the arg #%s must be a string.%s: the arg #%s must be a table.%s: the arg #%s must be a variable.%s: the arg #%s must be an integer.%s: the arg had a major error.%s: the arg must be a family.%s: the arg must be a filename.%s: the arg must be a list.%s: the arg must be a node or string.%s: the arg must be a node.%s: the arg must be a person.%s: the arg must be a string.%s: the arg must be a variable.%s: the arg must be an integer.( Scroll up(( Scroll both up(1-9) Browse to child(Family %s (%s, %s)(Separator is %s)(b Scroll bottom up(change history is empty)(givens) person does not have a name(pg %d/%d)(t Scroll top up(trimname) person does not have a name(visit history is empty)) Scroll down)) Scroll both down)b Scroll bottom down)t Scroll top down**may+ Next in db, of - Prev in db-- CURRENT SELECTION ----- CURRENT SELECTION ------ LIST ---/home/users/myname/lifelines/databases/myfamily0 EVEN 1 REFN 1 DATE 1 PLAC 1 INDI 2 NAME 2 ROLE 1 SOUR0 SOUR 1 REFN 1 TITL Title 1 AUTH Author0 XXXX 1 REFN1 Add a source record to the database2 Edit source record from the database3 Add an event record to the database4 Edit event record from the database5 Add an other record to the database6 Edit other record from the database< Enlarge menu area> Shrink menu area? Other menu choicesA Advanced viewA family cannot be merged with itself.A person cannot be merged with him/herself.A.D.ABORTADALARM CLOCKASSERT failureAborting: Adding unused keys as deleted keys...Ambiguous call to proc: %sAre you sure you want to merge them?Are you sure you want to remove the person from the database?Argument to lock (-l) must be y or n.Arguments to (r)sort must be of same sizeB Browse new familyB.C.B.C.E.BCBCEBUS ERRORBad CHIL referenceBad HUSB referenceBad HUSB reference (%s) in family %sBad WIFE referenceBad backup history countBad child reference (%s) in family %sBad decimal number format.Bad escape code at offset %d in bytecode string <%s>Bad escape format.Bad family referenceBad family reference (%s) individual %sBad hexidecimal number format.Bad history countBad history lengthBad level at line %dBad nameBad name for individual %s: %sBad pointerBad pointer (in %s): %sBad wife reference (%s) in family %sBecause of errors the GEDCOM file was not loaded. Both families must have husbands/fathers.Both families must have wives/mothers.Browse new record (without adding xref).C.E.CECached: I:%s; F:%sCannot combine forceopen (-f) and lock (-l) flags.Cannot combine immutable (-i) or read-only (-r) with read-write (-w) access.Cannot convert codeset (from <%s> to <%s>)Cannot remove last person from family.Checking GEDCOM file for errors. Choose a family by selecting a spouse/parent.Choose an operation:Choose database to openChoose from historyClash with longer hotkey in item: %sClash with shorter hotkey in item: %sCodeset informationCollation routine: %sCommands: Select by number, u Page Up, d Page Down, i Select, q QuitCommands: j Move down k Move up i Select q QuitCommands: j Move down k Move up q QuitCommands: u Page Up, d Page Down, q QuitCommands: j Move down k Move up d Delete i Select q QuitCopyright(c) 1991 to 1996, by T. T. Wetmore IVCould not open file %s.Create a family with this person as a child.Create a family with this person as a spouse/parent.Current Database - %sCurrent collate locale: %sCurrent databaseCurrent messages locale: %sDEATH OF CHILDDatabase `%s' has been saved in `%s'.Database error: -- Database recordsDatabase was corrupt.Default path: Delete set contains valid record %sDeleted recordsDo you really want to add this child to the family?Do you really want to add this event to the database?Do you really want to add this family to the database?Do you really want to add this person to the database?Do you really want to add this record to the database?Do you really want to add this source to the database?Do you really want to add this spouse/parent to the family?Do you really want to merge these two families?Do you really want to merge these two persons?Do you really want to remove this child from his/her family?Do you really want to remove this spouse from his/her family?Do you really want to update this event?Do you really want to update this family?Do you really want to update this person?Do you really want to update this record?Do you really want to update this source?Do you want to create a database there?Do you want to edit the event again?Do you want to edit the event again? (Otherwise changes will be discarded.)Do you want to edit the family again?Do you want to edit the family again? (Otherwise changes will be discarded.)Do you want to edit the person again?Do you want to edit the person again? (Otherwise changes will be discarded.)Do you want to edit the record again?Do you want to edit the record again? (Otherwise changes will be discarded.)Do you want to edit the source again?Do you want to edit the source again? (Otherwise changes will be discarded.)Do you want to enter another name?Do you want to re-edit it?Duplicate HEAD line at line %dDuplicate event for %sDuplicate eventsDuplicate familiesDuplicate family for %sDuplicate func %s (lines %d and %d) in report: %sDuplicate hotkey for item: %sDuplicate individual for %sDuplicate individualsDuplicate name for %s (%s)Duplicate namesDuplicate othersDuplicate proc %s (lines %d and %d) in report: %sDuplicate record for %sDuplicate refn for %s (%s)Duplicate source for %sDuplicate sourcesDuplicated REFN - please choose.EMT INSTEdit current record now to add xref manually.Empty familyEmpty family (%s)End of file at line %dEnter Family Number to Browse toEnter a sibling from family.Enter a spouse from family.Enter codeset to assume (* for none)Enter d for debugger, q to quitEnter integer for programEnter name of output archive file.Enter name of translation table file to readEnter name of translation table file to writeEnter pattern to match against full name.Enter pattern to match against refn.Enter pattern to match against single surname or given name.Enter string for programError accessing dataError at line %d: %sError in abbreviations file.Error in character mapping file.Error in user options file.Error: file "%s": line %d: Error: file <%s> not foundError: file <%s> not found: %s EventEventsEvent %s is referred to but not defined.Existing database found.FATAL ERRORFATAL ERROR: FLOATING POINT EXCEPTIONFamilyFamiliesFamily %s is referred to but not defined.Fatal ErrorFilepath too long.First argument to (r)sort must be list or arrayFrom which family is the child to be removed?From which family is the spouse/parent to be removed?GEDCOM codeset: %sGUI codeset: %sGUI input codeset: %sGUI output codeset: %sGhost name: %s -> %sGhost namesGlobal variablesHANGUPHeHerHisHow would you like to find a record?ILLEGAL INSTRUCTIONINDI, FAM, SOUR, EVEN records may not be other records.INTERRUPTIdentify a child of the family, if known.Identify a parent in the family having children swapped.Identify a spouse of the family, if known.Identify a spouse/parent for the new family.Identify child already in family.Identify child in second family.Identify family (enter nothing to identify by individual members).Identify list of persons for program:Identify one of the child's parents, if known.Identify person for program:Identify second person to browse to.Identify spouse/parent already in family, if known.Identify spouse/parent in second family, if known.Identify spouse/parent to add to an existing family.Identify the child to reorder.Identify the first child to swap.Identify the first family/spouse to swap.Identify the second child to swap.Identify the second family/spouse to swap.Identify the second spouse/parent, if known.Illegal type found in list in menuchooseImpermissible to change codeset in a populated databaseImproper HUSBImproper HUSB (%s) in family (%s)Improper WIFEImproper childImproper wife (%s) in family (%s)In file <%s> at line %dIn menu: %sInsert xref automatically at bottom of current record.Internal codesetInvalid properties set for new databaseIs this the new child? Is this the new spouse? Is this the person? Select if so.KILLLifeLines %s - Genealogical DB and Programming SystemLifeLines -- Auxiliary Browse Screen (* toggles menu)LifeLines -- Family Browse Screen (* toggles menu)LifeLines -- List Browse Screen (* toggles menu)LifeLines -- Main MenuLifeLines -- Person Browse Screen (* toggles menu)LifeLines -- Two Family Browse Screen (* toggles menu)LifeLines -- Two Person Browse Screen (* toggles menu)Line %d: Event %s has an incorrect key.Line %d: Family %s has an incorrect key.Line %d: Family %s has multiple husband links.Line %d: Family %s has multiple wife links.Line %d: Person %s has an incorrect key: skipped.Line %d: Person %s has multiple father links.Line %d: Person %s has multiple mother links.Line %d: Person %s is both male and female.Line %d: Person %s is female but must be male.Line %d: Person %s is implied to be both male and female.Line %d: Person %s is male but must be female.Line %d: Person defined here has no name.Line %d: Record %s has an incorrect key.Line %d: Source %s has an incorrect key.Line %d: The event defined here has no key.Line %d: The family defined here has no key.Line %d: The person defined here has no key: skipped.Line %d: The record defined here has no key.Line %d: The source defined here has no key.Line %d: This line has a bad link.Line %d: This line has a level number that is too large.Line %d: This line has an illegal level.Line %d: This line has no level number.Line %d: This line is empty; EOF?Line %d: This line is incomplete.Line %d: This line is too long.Line %d: This line needs white space before tag.Lines %d and %d: Event %s is multiply defined.Lines %d and %d: Family %s is multiply defined.Lines %d and %d: Person %s is multiply defined: skipped.Lines %d and %d: Record %s is multiply defined.Lines %d and %d: Source %s is multiply defined.Local variablesLocales are disabled.Locales are enabled.Looks like a program was running. Check file %1 around line %2. M< Less menu colsM> More menu colsMalformed configuration file: line too long.Menu (%s) choice sequence too long: %sMenu (%s) item lacked choice sequence: %sMessages:Missing HEAD line at line %dMissing NAME line in INDI record; record ignored. Missing childMissing child (%s) in family (%s)Missing spouseMissing spouse (%s) in family (%s)Missing titleMissing undeleted record %c%dNO NAMENew persons were added to the current list.New record is %sNew spouse/parent has unknown sex; can't add to family.No conversionNo current internal codeset, so no codeset conversion can be doneNo databases found in database pathNo errors foundNo errors; adding records with new keys...No errors; adding records with original keys...No events present.No more historyNo notes present.No original string on line.No others present.No persons were added to the current list.No records found in scanNo references present.No replacement string on line.No sources present.No such child.No such family.No such person.No such record.No such translation table in this databaseNon-indi name, key=%s, name=%sNon-indi namesNot implemented yetNot valid commandOrphan namesOrphaned name: %sOrphaned refn: %sOtherOthersPIPE WRITEPOWER-FAIL RESTARTParsing Error at line %d: Performing full name scanPerforming name fragment scanPerforming refn scanPersonPersonsPerson %s is referred to but not defined.Place the child last in the family.Please choose an operation:Please choose family create operation.Please choose from among these records.Please choose from the following list.Please choose from the following options:Please choose the child to browse to.Please choose the child to remove from the family.Please choose the event to view.Please choose the family to browse to.Please choose the father/husband to browse to.Please choose the first child to browse to.Please choose the first family to browse to.Please choose the first father/husband to browse to.Please choose the first mother/wife to browse to.Please choose the first spouse/parent to browse to.Please choose the mother/wife to browse to.Please choose the note to view.Please choose the other to view.Please choose the reference to view.Please choose the second child to browse to.Please choose the second family to browse to.Please choose the second father/husband to browse to.Please choose the second mother/wife to browse to.Please choose the second spouse/parent to browse to.Please choose the source to view.Please choose the spouse/parent to browse to.Please choose the spouse/parent to remove from the family.Please enter person's internal key value.Please enter the name of the GEDCOM file.Please identify next person to browse to.Please identify one of the child's siblings.Please identify one of the spouses.Please identify person or persons to browse to.Please identify record to browse to.Please identify the child.Proc %s must be called with %d (not %d) parameters.Processed %d lines without finding end of HEADQ Quit current databaseQUITQuit debuggerR Pick a GEDCOM file and read inREFN key is already in use.Record %s is referred to but not defined.Report cancelledReport debuggerReport file: Report not found: %s Return to current record (without adding xref).Runtime Error at line %d: SEGMENTATION ERRORSIGNAL 0SYSTEM CALL ERRORSecond argument to (r)sort must be list or arraySelect the child the new child precedes or select last.SheSingle person familySingle person family (%s)Something impossible happened. Contact tech support.SourceSourcesSource %s is referred to but not defined.Spouse unknownStartup collate locale: %sStartup messages locale: %sStrike any key to continue.System error: illegal map codeTERMINATE FROM KILLTRACE TRAPTag is too long to connect automatically.The child was removed from his/her family.The current list is not named.The current list is now named %s.The database is already open for writing.The database is locked (no readwrite access).The database is read only.The database is read only; you may not add records.The database is read only; you may not change records.The database is read only; you may not merge records.The database is read only; you may not remove records.The database is read-only; loading has been canceled.The database is unlocked.The database was not saved.The event was modified in the database.The families have different fathers/husbands; cannot merge.The families have different wives/mothers; cannot merge.The family was modified in the database.The file is as positioned at EOF.The new family was added to the database.The persons are not of opposite sex; can't make family.The record begins at wrong level.The record contains multiple level 0 lines.The record does not begin with a FAM line.The record does not begin with a SOUR line.The record does not begin with an EVEN line.The record does not begin with an INDI line.The record is empty.The record was modified in the database.The source was modified in the database.The spouse was removed from his/her family.The two children were swapped.The two families were swapped.There are no children in the database for this family.There is no LifeLines database in that directory.There is no one in the database with that name or key.There is no record with that key or reference.There is something wrong with the data.There was %d unresolved reference.There were %d unresolved references.These persons are children in different families.This does not point to another record in the database!This family already has a husband/male parent.This family already has a wife/female parent.This family has both spouses/parents; can't add another.This family has less than two children; can't swap.This family has neither spouse/parent; can't remove.This family has no female spouse/parent in the database.This family has no male spouse/parent in the database.This family still has links; not removed.This is not a lineage linked GEDCOM file.This person has no children in the database.This person has no older sibling in the database.This person has no spouse in the database.This person has no younger sibling in the database.This person is a spouse/parent in less than two families.This person is already a child in a family.This person is not a child in any family.This person is not a child in the family; can't remove.This person is not a spouse in the family; can't remove.This person is not a spouse or parent in any family.This person record does not have a name line.This person record has bad GEDCOM name syntax.This person's father is not in the database.This person's mother is not in the database.This person's parents are not in the database.This person's sex is not known; can't make family.This report requires a newer program to run Too many spouses to display full listTranslation TablesTwo parents of different sexes cannot be merged.Two persons with different parents cannot be merged.USER SIGNAL 1USER SIGNAL 2Undefined database error -- fix program.Undefined proc: %sUnknown signalUnsupported file encoding (no multibyte encodings except UTF-8).Unsupported file encoding: %s.Use original keys from GEDCOM file?WARNING: missing keysWINDOW CHANGEWarning: database codeset unspecifiedWarning: not all conversions availableWhat activity do you want to perform?What directory holds (or will hold) the LifeLines database? (? to list)What do you want to add?What do you want to remove?What is the name of the output file?What is the name of the program?What persons or list do you want to add to the current list?What record do you want to edit?What scan type?What should the name of this list be?What utility do you want to perform?Which character mapping do you want to edit?Which character mapping do you want to save?Which event record do you want to edit?Which source record do you want to edit?Who do you want to remove from the database?Whom do you want to edit?Whose families/spouses are to be swapped?You are at the bottom of the list.You are at the top of the list.You cannot change the sex of a parent.You cannot edit the CHIL lines in a family record.You cannot edit the FAM line in a family record.You cannot edit the FAMC line in a person record.You cannot edit the FAMS lines in a person record.You cannot edit the HUSB line in a family record.You cannot edit the INDI line in a person record.You cannot edit the WIFE line in a family record.You must identify a database.[ Decrease tree depth\My Documents\LifeLines\Databases\MyFamily] Increase tree depth^b History/back^c Clear history^f History/fwd^l History list^xb ChngHist/back^xc Clear ChngHist^xf ChngHist/fwd^xl ChngHist lista Add child to familya Add familya Add information to the databasea Add to this lista Create new familyaavabout %1abt %1adaradar sheniadopadradsaft %1after %1apraprilaugaugustavb Browse new personsb Browse the persons in the databaseb Browse to bottomb Browse to personsb. bap. baptbapt: bef %1before %1bet %1 and %2between %1 and %2blesbornborn: brumbrumairebur. buriburi: c Browse to childrenc Browse top childrenc Character set optionsc Child - add a child to an existing familyc Child - remove a child from his/her familyc Review change history (%d record)c Review change history (%d records)cal %1calculated %1cb. cheshvanchildcompcould not open, read or write a block file.could not open, read or write an index file.could not open, read or write the key file (to alter database).could not open, read or write the key file.creation of new database failed.cremcshd Copy top to bottomd Delete from listd Delete information from the databased Remove as childd Remove child fromd Show database statisticsd. db directory is file, not directory.decdecemberdieddied: div. e Browse event recordse Edit recorde Edit the familye Edit the persone Edit the place abbreviation filee Edit this persone Edit top persone edit individual tables (in db)editor codeset: %seditor input codeset: %seditor output codeset: %seighteightheleveneleventhellelulenter file nameenter file name (*%s)enter integer:enter key or refn: enter key:enter name: enter path: enter string: enter y (yes) or n (no): errorerror accessing database directory.est %1estimated %1example: dbverify -ifsex "%s" export/import directory:f Browse to fatherf Browse to fathersf Browse top fatherf Family - create family record from one or two spousesf Family - remove a family completelyf Full database scanf Full name scanfatherfebfebruaryfifthfirstfiveflorflorealfourfourthfr %1fr %1 to %2frimfrimairefrom %1from %1 to %2frucfructidorfullname: person does not have a nameg Browse to familygedcom input codeset: %sgedcom output codeset: %sgermgerminalgettext dll had no versiongettext dll version: %sgettext dll: %sh Add as spouseheherher_himhisi Add as childi Browse this personi Identify a person from key valuei Individual - remove a person completelyi import all tables (from files into db)iconv dll had no versioniconv dll version: %siconv dll: %sidentifier: %s should be a string iyariyrj Merge bottom to topj Move down listjanjanuaryjour_complementairsjuljulyjunjunek Find a person's key valuek Move up listkeyfile is corrupt.keyfile is wrong alignment.keyfile is wrong version.kislevksll load a table from a file (into db)m Browse to motherm Browse to mothersm Browse top motherm Mark this personm Show memory statisticsm. marmarchmarried: maymessmessidormothern Create new personn Name fragment (whitespace-delimited) scann Name this listname of database is too long.name: person does not have a namenineninthnisannivonivoseno gettext dll foundno iconv dll foundno keyfile (directory does not appear to be a database).novnovembernsno Browse to older sibo Edit the user options fileoctoctoberonep Pedigree modep Person - add new person to the databasep Pick a report from list and runpattern: personpluvpluviosepraiprairialq Quit programq Return to main menuq Return to previous menur Generate report by entering report namer Read in data from a GEDCOM filer Refn scanr Remove as spouser Remove from listr Remove spouse fromreport codeset: %sreport input codeset: %sreport output codeset: %srequested database does not exist.resis Add spouse to familys Browse source recordss Browse to spouse/ss Browse top spouse/ss Save the database in a GEDCOM files Search databases Spouse - add a spouse to an existing familys Spouse - remove a spouse from a familys save a table to a file (from db)secondsepseptemberset(%s, ) is invalidsevenseventhsheshevatshvsignal %1: %2sivansixsixthsoundex: person does not have a namespousesurname: person does not have a namesvnt Browse to topt Enter tandem modet Modify character translation tablestamuztc Tandem to childrentententhtevettf Tandem to father/stg Tandem to family/stherthermidorthirdthreetishritm Tandem to mother/stmzto %1ts Tandem to spouse/stshtt Enter family tandemtt Enter tandem modetu Tandem to parentstvttwelfthtwelvetwou Browse to parentsu Miscellaneous utilitiesv Review visit history (%d record)v Review visit history (%d records)vendvendemiaireventventosewarningx Browse other recordsx Handle source, event and other recordsx Swap mark/currentx Swap two childrenx Swap two familiesx Switch top/bottomx export all tables (from db to files)y Browse to younger siby Turn on syncyYyYnNzerozi Browse to indizz Browse to anyProject-Id-Version: de Report-Msgid-Bugs-To: POT-Creation-Date: 2007-08-08 15:56-0400 PO-Revision-Date: 2003-06-19 06:32+0200 Last-Translator: Frank Ellebrecht Language-Team: None MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Generator: KBabel 1.1 Programmabbruch. Speicherauszug erzeugen? [j/n] in Datei <%s>, Zeile %d in Datei <%s>, Zeile %d (unveränderlich)(kein Logbuch)(nur lesen)(Logbuch: <%s>)!! Modus wechseln!a Vorfahren-Modus!d Nachfahren-Modus!g GEDCOM-Modus!n Normaler Modus!t GEDCOMT-Modus!x GEDCOMX-Modus# Kinder tauschen$$ Verw. anzeigen$n Notizen anzeigen$s Quellen anzeigen%02dS%1 Röm%1 Rev%1 Jüd%1Jul%6d Fehler%6d Fehler%6d Warnung%6d Warnungen%c Kinder neu ordnen%d Kind%d Kinder%d Fehler%d Fehler%d repariert%d repariert%d Gatte%d Gatten%d Pers., %d Fam., %d Quell., %d Ereign., %d Sonst.%dJahr%03dTag%e Ereignis einfügen%o Sonst. einfügen%s Quelle einfügen%s wurde als Kind hinzugefügt.%s wurde als Ehegatte bzw. Elternteil hinzugefügt.%s wurde zur Datenbank hinzugefügt.%s wurde verändert.%s: Ungültige Argument%s: Zeile %d (Eintrag %d): %s%s: leeres Arg. nicht erlaubt.%s: Schwerer Fehler bei Arg. #%s.%s: Arg. #%s muß boolesch sein.%s: Arg. #%s muß Familie sein.%s: Arg. #%s muß Liste (float) sein.%s: Arg. #%s muß Liste sein.%s: Arg. #%s muß Knoten sein.%s: Arg #%s muß Person sein.%s: Arg. #%s muß Datensatz sein.%s: Arg. #%s muß Zeichenfolge sein.%s: Arg. #%s muß Tabelle sein.%s: Arg. #%s muß Variable sein.%s: Arg. #%s muß ganzzahlig sein.%s: Schwerer Fehler bei Arg.%s: Arg. muß Familie sein.%s: Arg. muß Dateiname sein.%s: Arg. muß Liste sein.%s: Arg. muß Knoten o. Zeichenfolge sein.%s: Arg. muß Knoten sein.%s: Person als Argument notw.%s: Arg. muß Zeichenfolge sein.%s: Arg. muß Variable sein.%s: Arg. muß ganzzahlig sein.( Nach oben(( Beide nach ob.(1-9) Kind anzeigen(Familie %s (%s, %s)(Trennung durch %s)(b Unt. nach oben(Keine Veränderungen)(givens) Person hat keinen Namen(S. %d/%d)(t Ob. nach oben(trimname) Person hat keinen Namen(Anzeigeliste ist leer)) Nach unten)) Beide nach unt.)b Unt. nach unten)t Ob. nach unten**Mai+ Nächster in DB, von- Voriger in DB-- Aktuelle Auswahl ----- Aktuelle Auswahl ------ Liste ---/home/Benutzer/meinName/lifelines/Datenbank/meineFamilie0 EVEN 1 REFN 1 DATE 1 PLAC 1 INDI 2 NAME 2 ROLE 1 SOUR0 SOUR 1 REFN 1 TITL Titel 1 AUTH Autor0 XXXX 1 REFN1 Eine Quelle zur Datenbank hinzufügen2 Quell-Datensatz bearbeiten3 Ein Ereignis zur Datenbank hinzufügen4 Ereignis-Datensatz bearbeiten5 Sonstigen Datensatz anlegen6 Sonstigen Datensatz bearbeiten< Menü größer> Menü kleiner? Weitere BefehleA Erweiterte AnsichtEine Familie kann nicht mit sich selbst zusammengeführt werden.Eine Person kann nicht mit sich selbst zusammengeführt werden.n. Chr.Abbruchn. Chr.(ALARM CLOCK)Fehler beim EinfügenAbbruch: Unbenutzte Schlüssel werden als gelöschte Schlüssel hinzugefügt...Unklarer Aufruf in Prozedur: %sMöchten Sie diese wirklich zusammenführen?Möchten Sie diese Person wirklich aus der Datenbank entfernen?Parameter für Sperre (-l) muß j oder n sein.Parameter für (r)sort müssen gleiche Größe habenB Neue Fam. anzeigenv. Chr.v. Chr.v. Chr.v. Chr.Übertragungsfehler (BUS ERROR)Verweis auf Kind ist ungültigVerweis auf Ehemann ist ungültigVerweis auf Ehemann (%s) in Familie %s ungültigVerweis auf Ehefrau ist ungültigSpeicherzähler ungültigVerweis auf Kind (%s) in Familie %s ungültigUnzulässiges Dezimalformat.Escape Code %d in Zeichenkette <%s> ungültigUmschaltzeichen fehlerhaft.Ungültiger Verweis auf FamilieUngültiger Verweis auf Familie (%s) Person %sUnzulässiges Hexadezimalformat.Fehler in ListeSpeicherlänge ungültigGliederung in Zeile %d falschUngültiger NameUngültiger Name für %s: %sVerweis ungültigVerweis (in %s) ungültig: %sVerweis auf Ehefrau (%s) in Familie %s ungültigDie GEDCOM-Datei wurde wegen aufgetretener Fehler nicht geladen. Beide Familien benötigen Ehemänner/Väter.Beide Familien benötigen Ehefrauen/Mütter.Neuen Datensatz anzeigen (ohne Querverweis einzufügen).n. Chr.n. Chr.Zwischenspeicher: %s I, %s FKombination aus Datei sperren (-l) und erzwungenem Öffnen (-f) nicht möglich.Kombination aus unveränderlich (-i) oder nur-lesend (-r) mit Lese-Schreibzugriff (-w) nicht möglich.Kann Zeichentabelle nicht umwandeln (von <%s> zu <%s>)Kann letzte Person nicht aus der Familie löschen.Überprüfe GEDCOM-Datei auf Fehler. Wählen Sie eine Familie, indem Sie einen Ehegatten/Elternteil angeben.Was möchten Sie tun?Wählen Sie die zu öffnende DatenbankAus Liste wählenBuchstabe doppelt vergeben: %sBuchstabe noch einmal vergeben: %sLänderspezifische EinstellungenVergleichsroutine: %sBefehle: Nummer, u Seite n. unten, d Seite n. oben, i Auswählen, q ZurückBefehle: j Nach unten k Nach oben i Auswählen q ZurückBefehle: j Nach unten k Nach oben q ZurückBefehle: u Bild aufwärts, d Bild abwärts, q ZurückBefehle: j Nach unten k Nach oben d Löschen i Auswählen q ZurückCopyright (C) 1991 - 1996, T. T. Wetmore IVKann die Datei %s nicht öffnen.Diese Person als Kind einer neuen Familie.Diese Person als Ehegatte einer neuen Familie.Aktuelle Datenbank - %sGegenwärtige Sortiereinstellungen: %sAktuelle DatenbankGegenwärtige Nachrichteneinstellung: %sKindprozeß abgebrochen (DEATH OF CHILD)Datenbank '%s' wurde in '%s' gespeichert.Fehler in der Datenbank: -- DatensätzeDatenbank war beschädigt.Aktueller Pfad: Löschauftrag enthält gültigen Datensatz %sGelöschte DatensätzeMöchten Sie dieses Kind zur Familie hinzufügen?Möchten Sie dieses Ereignis zur Datenbank hinzufügen?Möchten Sie diese Familie zur Datenbank hinzufügen?Möchten Sie diese Person zur Datenbank hinzufügen?Möchten Sie diesen Datensatz zur Datenbank hinzufügen?Möchten Sie diese Quelle zur Datenbank hinzufügen?Möchten Sie diesen Ehegatten/dieses Elternteil zur Familie hinzufügen?Möchten Sie die Daten dieser beiden Familien zusammenfügen?Möchten Sie die Daten dieser beiden Personen zusammenfügen?Möchten Sie dieses Kind aus seiner Familie entfernen?Möchten sie diesen Ehegatten aus seiner Familie entfernen?Möchten Sie die Daten dieses Ereignisses aktualisieren?Möchten Sie die Daten dieser Familie aktualisieren?Möchten Sie die Daten dieser Person aktualisieren?Möchten Sie diesen Datensatz aktualisieren?Möchten Sie die Daten dieser Quelle aktualisieren?Möchten Sie hier eine neue Datenbank anlegen?Möchten Sie dieses Ereignis erneut bearbeiten?Möchten Sie das Ereignis erneut bearbeiten? (Sonst werden Änderungen verworfen.)Möchten Sie diese Familie erneut bearbeiten?JA: Familie erneut bearbeiten; NEIN: Änderungen verwerfen.Möchen Sie diese Person erneut bearbeiten?Möchten Sie die Person erneut bearbeiten? (Sonst werden Änderungen verworfen.)Möchten Sie diesen Datensatz erneut bearbeiten?Möchten Sie den Datensatz erneut bearbeiten? (Sonst werden Änderungen verworfen.)Möchten Sie diese Quelle erneut bearbeiten?Möchten Sie die Quelle erneut bearbeiten? (Sonst werden Änderungen verworfen.)Möchten Sie einen anderen Namen eingeben?Möchten Sie die Daten erneut bearbeiten?HEAD-Eintrag doppelt in Zeile %dDoppeltes Ereignis für %sDoppelte EreignisseDoppelte FamilienFamilie doppelt belegt: %sFunktion %s (Zeilen %d und %d) in Report %s doppeltBuchstabe 2fach vergeben: %sDoppelte Personen für %sDoppelte PersonDoppelte Namen für %s (%s)Doppelte NamenDoppelte DatensätzeProc Bezeichnung: %s (Zeilen %d und %d) in Report: %s doppeltDoppelter Datensatz für %sDoppelte REFN für %s (%s)Doppelte Quelle für %sDoppelte QuellenREFN doppelt vergeben - wählen Sie.EMT INSTGgw. Datensatz bearbeiten, um Verweis (XREF) per Hand einzugeben.Leere FamilieFamilie ist leer (%s)Ende der Datei in Zeile %dGeben Sie die Nummer der anzuzeigenden Familie einBruder/Schwester eingeben.Einen Gatten eingeben.Zeichentabelle eingeben (* für keine)Aufruf: d für Debugger, q ZurückGanze Zahl eingebenGeben Sie den Namen der Ausgabedatei an.Aus welcher Datei soll Umwandlungstabelle gelesen werdenGeben Sie den Namen der Umwandlungstabelle einGeben Sie einen Teil des Namens ein.Geben Sie einen Teil der REFN ein.Geben Sie einen Teil des Vor- oder Familiennamens ein.Geben Sie eine ZeichenketteFehler bei DatenzugriffFehler in Zeile %d: %sFehler in der Abkürzungsdatei.Fehler in Zeichenumsetzungsdatei.Fehler in den Benutzereinstellungen.Fehler: Datei "%s": Zeile %d: Fehler: Datei <%s> nicht gefundenFehler: Datei <%s> nicht gefunden: %s EreignisEreignisseVerweis auf Ereignis %s; existiert aber nicht.Vorhandene Datenbank gefunden.Verhängnisvoller FehlerVerhängnisvoller Fehler: FließkommafehlerFamilieFamilienVerweis auf Familie %s; existiert aber nicht.Verhängnisvoller FehlerPfadangabe zu lang.Erstes Argument für (r)sort muß eine Liste oder ein Wertebereich seinAus welcher Familie stammt das zu entfernende Kind?Aus welcher Familie stammt der zu entfernende Gatte/Elternteil?GEDCOM Ländereinstellung: %sLändereinstellung GUI: %sLändereinstellung GUI-Eingabe: %sLändereinstellung GUI-Ausgabe: %sGeistername: %s -> %sGeisternameGlobale VariablenAufgehängtErIhrerSeinWie möchten Sie nach dem Datensatz suchen?Ungültiger BefehlINDI, FAM, SOUR, EVEN-Datensätze dürfen nicht sonstige Datensätze sein.UnterbrochenFalls bekannt, geben Sie ein Kind an.Ehepartner, dessen Kinder getauscht werden.Falls bekannt, geben Sie einen Ehepartner an.Geben Sie einen Ehegatten/ein Elternteil für die neue Familie an.Geben Sie ein Kind an, das bereits zu dieser Familie erfaßt ist.Geben Sie ein Kind in der zweiten Familie an.Familie eingeben (leer = Auswahl eines Familienmitgliedes).Liste mit Personen eingeben:Geben Sie ein Elternteil des Kindes an.Welche Person soll bearbeitet werden? Geben Sie die zweite anzuzeigende Person an.Geben Sie einen Ehegatten an, der bereits zu dieser Familie erfaßt ist.Geben Sie einen Ehegatten in der zweiten Familie an.Welche Person soll zu einer bestehenden Familie hinzugefügt werden?Geben Sie das Kind für eine Neuordnung an.Geben Sie das erste zu tauschende Kind an.Geben Sie die erste zu tauschende Familie an.Geben Sie das zweite zu tauschende Kind an.Geben Sie die zweite zu tauschende Familie an.Geben Sie den zweiten Ehegatten an, falls bekannt.Ungültiger MenüeintragDatenbankzeichensatz kann nicht nachträglich geändert werdenFehler bei Ehemann (HUSB)Verweis auf Ehemann (%s) in Familie (%s) fehlerhaftFehler bei Ehefrau (WIFE)Fehler bei KindVerweis auf Ehefrau (%s) in Familie (%s) fehlerhaftIn Datei <%s> in Zeile %dIn Menü: %sQuerverweis (XREF) automatisch am Ende des Datensatzes einfügen.Interne ZeichentabelleUngültige Einstellungen für neue Datenbank.Ist dies das neue Kind? Ist das der neue Ehegatte? Ist das die gesuchte Person? Dann wählen Sie diese aus. KILLLifeLines %s - Genealogische Datenbank mit ProgrammierschnittstelleLifelines -- Hilfsprogramme anzeigen (* Menü an/aus)LifeLines -- Familien anzeigen (* Menü an/aus)LifeLines -- Listen anzeigen (* Menü an/aus)LifeLines -- HauptmenüLifeLines -- Personen anzeigen (* Menü an/aus)LifeLines -- 2-Familien-Anzeige (* Menü an/aus)LifeLines -- 2-Personen-Anzeige (* Menü an/aus)Zeile %d: Der Schlüssel für das Ereignis %s ist falsch.Zeile %d: Schlüssel für Familie %s ungültig; übersprungen.Zeile %d: Der Familie %s sind mehrere Ehemänner zugewiesen.Zeile %d: Der Familie %s sind mehrere Ehefrauen zugewiesen.Zeile %d: Schlüssel für %s ungültig; übersprungen.Zeile %d: %s sind mehrere Väter zugewiesen.Zeile %d: %s sind mehrere Mütter zugewiesen.Zeile %d: %s ist sowohl männlich als auch weiblich.Zeile %d: %s sollte männlich sein, ist aber weiblich.Zeile %d: %s müßte sowohl weiblich als auch männlich sein.Zeile %d: %s sollte weiblich sein, ist aber männlich.Zeile %d: Diese Person hat keinen Namen.Zeile %d: Der Schlüssel für den Datensatz %s ist falsch.Zeile %d: Der Schlüssel für die Quelle %s ist falsch.Zeile %d: Diesem Ereignis ist kein Schlüssel zugewiesen.Zeile %d: Diese Familie hat keinen Schlüssel.Zeile %d: Diese Person hat keinen Schlüssel: übersprungen.Zeile %d: Diesem Datensatz ist kein Schlüssel zugewiesen.Zeile %d: Dieser Quelle ist kein Schlüssel zugewiesen.Die Verknüpfung in Zeile %d ist ungültig.Zeile %d: Gliederungsebene in GEDCOM nicht erlaubt.Zeile %d: Gliederungsebene ungültig.In Zeile %d fehlt GEDCOM-Ebene.Zeile %d: Diese Zeile ist leer; Ende der Datei (EOF)?Zeile %d ist unvollständig.Zeile %d ist zu lang.Zeile %d: Leerzeichen vor Kennzeichen erforderlich.Zeilen %d und %d: Das Ereignis %s existiert mehrfach.Zeilen %d und %d: Familie %s existiert mehrfach.Zeilen %d und %d: Person %s existiert mehrfach; übersprungen.Zeilen %d und %d: Der Datensatz %s existiert mehrfach.Zeilen %d und %d: Die Quelle %s existiert mehrfach.Lokale VariablenNationale Einstellungen deaktiviert.Nationale Einstellungen aktiviert.Es hat den Anschein, als ob gerade ein Programm lief. Überprüfen Sie die Datei %1 bei Zeile %2. M< Wen. MenüspaltenM> Mehr MenüspaltenKonfigurationsdatei: Zeile zu lang.Menüeintrag (%s) zu lang: %sMenüeintrag (%s) fehlt Auswahlmöglichk.: %sMeldungen:HEAD-Eintrag fehlt in Zeile %dDieser Person fehlt der Name; Datensatz ignoriert. Fehlendes KindKind (%s) fehlt in Familie (%s)Fehlender EhegatteEhepartner (%s) fehlt in Familie (%s)Titel fehltWiederhergestellter Datensatz %c%d fehltKEIN NAMENeue Person zur aktuellen Liste hinzugefügt.Der neue Datensatz ist %sGeschlecht des Ehegatten unbekannt; Hinzufügen zur Familie unmöglich.Keine UmwandlungKeine interne Zeichentabelle, Zeichenumwandlung nicht möglichIm Datenbankverzeichnis wurde keine Datenbank gefunden.Keine Fehler gefundenKeine Fehler. Datensätze werden mit neuen Schlüsseln eingefügt...Keine Fehler. Datensätze werden mit originalen Schlüsseln eingefügt...Keine Ereignisse vorhanden.Ende der ListeKeine Anmerkungen vorhanden.Keine Quelle gefunden.Keine weiteren vorhanden.Keine Personen zur aktuellen Liste hinzugefügt.Bei der Suche wurden keine Datensätze gefundenKeine Verweise vorhanden.Nichts zum Ersetzen gefunden.Keine Quellen vorhanden.Kein solches Kind vorhanden.Keine solche Familie vorhanden.Keine solche Person vorhanden.Kein solcher Datensatz vorhanden.Diese Zeichenumwandlungstabelle existiert nichtKeine Name für Person, Schlüssel=%s, Name=%sKeine PersonennamenNoch nicht fertigUngültiger BefehlVerwaister NameVerwaister Name: %sVerwaiste REFN: %sSonstigerSonstige(PIPE WRITE)(POWER-FAIL RESTART)Fehler bei Analyse von Zeile %d: Eine vollständige Suche durchführenNach Namensteil suchenNach REFN suchenPersonPersonenVerweis auf Person %s; existiert aber nicht.Aktuelles Kind als jüngstes in die Familie einfügen.Was möchten Sie tun?Bitte legen Sie zunächst eine Familie an.Bitte wählen Sie aus diesen Datensätzen aus.Wählen Sie aus der folgenden ListeWählen Sie eine der folgenden Möglichkeiten:Wählen Sie das Kind, das angezeigt werden soll.Wählen Sie das zu entfernende Kind.Wählen Sie das anzuzeigende Ereignis aus.Wählen Sie die Familie, die angezeigt werden soll.Wählen Sie den Vater/Ehemann, der angezeigt werden soll.Wählen Sie das erste Kind, das angezeigt werden soll.Wählen Sie die erste Familie, die angezeigt werden soll.Wählen Sie den ersten Vater/Ehemann, der angezeigt werden soll.Wählen Sie die erste Mutter/Ehefrau, die angezeigt werden soll.Wählen Sie den ersten Gatten/Elternteil, der angezeigt werden soll.Wählen Sie die Mutter/Ehefrau, die angezeigt werden soll.Wählen Sie die anzuzeigende Anmerkung aus.Welchen Datensatz anzeigen?Wählen Sie den anzuzeigenden Verweis.Wählen Sie das zweite Kind, das angezeigt werden soll.Wählen Sie die zweite Familie, die angezeigt werden soll.Wählen Sie den zweiten Vater/Ehemann, der angezeigt werden soll.Wählen Sie die zweite Mutter/Ehefrau, die angezeigt werden soll.Wählen Sie den zweiten Gatten/Elternteil, der angezeigt werden soll.Wählen Sie die anzuzeigende Quelle aus.Wählen Sie den Gatten/Elternteil, der angezeigt werden soll.Wählen Sie den Ehepartner, der aus der Familie entfernt werden soll.Geben Sie den internen Schlüssel der Person ein.Geben Sie den Namen der GEDCOM-Datei ein.Geben Sie die nächste anzuzeigende Person an.Geben Sie eines der Geschwister des Kindes an.Geben Sie einen der Ehegatten an.Geben Sie die anzuzeigende(n) Person(en) an.Geben Sie den anzuzeigenden Datensatz an.Geben Sie ein Kind an.Prozedurf %s muß mit %d (nicht %d) Parametern aufgerufen werden.%d Zeilen bearbeitet ohne HEAD-EndeQ Aktuelle Datenbank schließenBeendenDebugger beendenR GEDCOM-Datei aus Liste wählen und einlesenDieser REFN-Schlüssel wird bereits benutzt.Datensatz %s existiert nicht, obwohl auf ihn verwiesen wird.Report abgebrochenReport debuggenDatei für Reporte: Report nicht gefunden: %s Zurück zum gegenwärtigen Datensatz (ohne Querverweis einzufügen).Laufzeitfehler in Zeile %d: Zuordnungsfehler (SEGMENTATION ERROR)Signal 0Fehlerhafter Systemaufruf (SYSTEM CALL ERROR)Zweites Argument für (r)sort muß eine Liste oder ein Bereich seinVor welchem Kind soll aktuelle Person eingefügt werden?SieFamilie besteht nur aus einer PersonFamilie besteht aus einer Person (%s)Dieser Fehler ist eigentlich unmöglich. Wenden Sie sich an den Programmierer.QuelleQuellenVerweis auf Quelle %s; existiert aber nicht.Unbekannter EhegatteSortiereinstellungen beim Start: %sNachrichteneinstellungen beim Start: %sWeiter mit beliebiger Taste.Systemfehler: illegal map code(TERMINATE FROM KILL)SpeicherfehlerEintrag ist zu lang, um ihn automatisch zu verknüpfen.Das Kind wurde aus seiner Familie entfernt.Die gegenwärtige Liste ist unbenannt.Die aktuelle Liste wurde in %s umbenannt.Auf die Datenbank wird bereits zugegriffen.Die Datenbank ist gesperrt (kein Schreibzugriff). Schreibzugriff auf Datenbank nicht möglich.Datenbank ist schreibgeschützt, Einfügen von Datensätzen unmöglich.Datenbank ist schreibgeschützt, Verändern von Datensätzen unmöglich.Datenbank ist schreibgeschützt, Zusammenführen von Datensätzen nicht möglich.Datenbank ist schreibgeschützt, Löschen von Datensätzen nicht möglich.Die Datenbank ist schreibgeschützt; Ladevorgang abgebrochen.Die Datenbank ist freigeschaltet.Datenbank wurde nicht gespeichert.Das Ereignis wurde verändert.Familien mit unterschiedlichen Vätern/Männern können nicht zusammengeführt werden.Familien mit unterschiedlichen Müttern/Frauen können nicht zusammengeführt werden.Die Daten der Familie wurden verändert.Sie befinden sich am Ende der Datei.Neue Familie wurde zur Datenbank hinzugefügt.Personen haben das gleiche Geschlecht, Familie anlegen nicht möglich.Datensatz beginnt mit falscher Ebene.Dieser Datensatz enthält mehrere Einträge der Ebene 0.Dieser Datensatz beginnt nicht mit einer FAM-Zeile.Dieser Datensatz beginnt nicht mit einer SOUR-Zeile.Dieser Datensatz beginnt nicht mit einer EVEN-Zeile.Dieser Datensatz beginnt nicht mit einer INDI-Zeile.Dieser Datensatz ist leer.Der Datensatz wurde verändert.Die Quelle wurde verändert.Der Ehegatte wurde von seiner/ihrer Familie entfernt.Reihenfolge der Kinder vertauscht.Reihenfolge der Familien vertauscht.Zu dieser Familie sind keine Kinder erfaßt.In diesem Verzeichnis gibt es keine Lifelines-Datenbank.In der Datenbank gibt es niemanden mit diesem Namen oder Schlüssel.Ein Datensatz mit diesem Schlüssel oder Bezug gibt es nicht.Es gibt einen Fehler in den Daten.%d Datensatz mit diesem Schlüssel oder Bezug gibt es nicht.%d Datensätze mit diesem Schlüssel oder Bezug gibt es nicht.Diese Personen sind Kinder in verschiedenen Familien.Kein Zeiger auf anderen Datensatz!Diese Familie hat bereits einen Ehemann/Vater.Diese Familie hat bereits eine Ehefrau/Mutter.Diese Familie hat bereits beide Ehegatten, weiteres Hinzufügen nicht möglich.Diese Familie hat weniger als zwei Kinder, Tauschen nicht möglich.Diese Familie hat weder Ehegatten noch Eltern; Entfernen nicht möglich.Zu dieser Familie sind keine weiblichen Ehegatten/Elternteile erfaßt.Zu dieser Familie sind keine männlichen Ehegatten/Elternteile erfaßt.Diese Familie ist noch mit anderen Personen verknüpft, nicht entfernt.Dies ist keine gültige GEDCOM-Datei.Zu dieser Person sind keine Kinder erfaßt.Zu dieser Person sind keine älteren Geschwister erfaßt. Zu dieser Person sind keine Ehegatten erfaßt.Zu dieser Person sind keine jüngeren Geschwister erfaßt.Diese Person ist in weniger als zwei Familien als Ehegatte erfaßt.Diese Person ist bereits als Kind in einer Familie erfaßt.Diese Person ist nirgendwo als Kind erfaßt.Diese Person ist kein Kind dieser Familie, Entfernen nicht möglich.Diese Person ist kein Ehegatte dieser Familie, Löschen nicht möglich.Person ist weder Ehegatte noch Elternteil in irgendeiner Familie.Dieser Datensatz hat keine Namenszeile.Der Name dieser Person widerspricht der GEDCOM-Syntax.Der Vater dieser Person ist nicht in der Datenbank erfaßt.Die Mutter dieser Person ist nicht in der Datenbank erfaßt.Zu dieser Person sind keine Eltern erfaßt.Das Geschlecht dieser Person ist unbekannt; Anlegen der Familie nicht möglich.Für diesen Report wird eine neuere Programmversion benötigt. Zu viele Ehegatten um alle anzuzeigen.ÜbersetzungstabellenZwei Elternteile unterschiedlichen Geschlechts können nicht zusammgeführt werden.Zwei Personen mit unterschiedlichen Eltern können nicht zusammengeführt werden.Benutzer-Signal 1 (USER SIGNAL 1)Benutzer-Signal 2 (USER SIGNAL 2)Schwerer Datenbankfehler -- Programm reparieren.Prozedur %s nicht definiertUnbekanntes Signal (unknown signal)Dateiformat wird nicht unterstützt (nur UTF-8 als Multibyte Format unterstützt).%s: Dateiformat wird nicht unterstützt.Sollen die originalen Schlüssel aus der GEDCOM-Datei benutzt werden?ACHTUNG: Schlüssel fehlen.Fenster wurde gewechselt (WINDOW CHANGE)Achtung: Für die aktuelle Datenbank wurde keine Zeichentabelle angegebenAchtung: nicht alle Umwandlungen möglichWas möchten Sie tun?Wo befindet sich die Lifelines-Datenbank? (? für Liste)Was möchten Sie tun?Was möchten Sie tun?Wie heißt die Ausgabedatei?Wie heißt das Programm?Welche Personen oder Listen möchten Sie zur aktuellen Liste hinzufügen?Welchen Datensatz möchten Sie bearbeiten?Wie soll die Datenbank durchsucht werden?Wie soll diese Liste heißen?Welches Hilfsprogramm möchten Sie ausführen?Welche Umwandlungstabelle möchten Sie bearbeiten?Welche Umwandlungstabelle möchten Sie speichern?Welches Ereignis möchten Sie bearbeiten?Welche Quelle möchten Sie bearbeiten?Wen möchten Sie aus der Datenbank entfernen?Wen möchten Sie bearbeiten?Welche Familien/Ehegatten sollen getauscht werden?Sie sind am Ende der Liste.Sie sind am Beginn der Liste.Das Geschlecht eines Elternteiles kann nicht geändert werden.Die CHIL-Zeile kann nicht verändert werden.Die FAM-Zeile kann nicht verändert werden.Die FAMC-Zeile kann nicht verändert werden.Die FAMS-Zeile kann nicht verändert werden.Die HUSB-Zeile kann nicht verändert werden.Die INDI-Zeile kann nicht verändert werden.Die WIFE-Zeile kann nicht verändert werden.Sie müssen eine Datenbank angeben.[ Anzeigetiefe runter\Eigene Dateien\LifeLines\Datenbanken\meineFamilie] Anzeigetiefe rauf^b Speicher zurück^c Speicher löschen^f Speicher vorwärts^I Speicherliste^xb Verä.liste/zur.^xc Verä.liste lösch.^xf Verä.liste/vor.^xI Veränd.listea Kind hinzufügena Familie erstellena Informationen zur Datenbank hinzufügena Zu dieser Listea Neue Fam. einfügenAwum %1um %1AdarAdaradoptiertAdrAdsnach %1nach %1Apr.AprilAug.AugustAwb Neue Pers. anzeigenb Eine Person aus der Datenbank anzeigenb Ans Ende springenb Personen anzeigengeb. get. get.getauft: vor %1vor %1zw. %1 u. %2zwischen %1 und %2Einsegnunggeboren geboren: brumBrumairebegr. beigesetztbeigesetzt: c Kinder anzeigenc Ob. Kinder anzeigenc Länderspezifische Einstellungenc Kind zu bestehender Familie hinzufügenc Ein Kind aus seiner Familie entfernenc Liste letzter Veränderungen (%d Datensatz)c Liste letzter Veränderungen (%d Datensätze)errechnet %1errechnet %1geb. MarcheschwanKindErg.tageÖffnen, Lesen oder Schreiben der Blockdatei fehlgeschlagen.Öffnen, Lesen oder Schreiben des Index fehlgeschlagen.DB konnte nicht geändert werden: Fehler beim Öffnen, Lesen oder Schreiben.Öffnen, Lesen oder Schreiben der Indexdatei fehlgeschlagen.Anlegen der neuen Datenbank ist gescheitert.eingeäschertChed Kopie nach untend Aus Liste löschend Daten aus der Datenbank löschend Als Kind entfernend Kind entfernend Datenbankstatistik anzeigengest. DB ist eine Datei, kein Verzeichnis.Dez.Dezembergestorbengestorben: gesch. e Ereignisdatensätze anzeigene Datensatz bearbeitene Familie bearbeitene Person bearbeitene Geographische Abkürzungen bearbeitene Person bearbeitene Ob. Pers. bearb.e Tab. d. Personen bearb. (DB)Ländereinstellung Editor: %sLändereinstellung Editor-Eingabe: %sLändereinstellung Editor-Ausgabe: %sAchtAchte(r)ElfElfte(r)ElElulGeben Sie den Dateinamen einGeben Sie den Dateinamen an (*%s)Geben Sie eine ganze Zahl ein: Geben Sie Schlüssel oder REFN ein:Schlüssel:Geben Sie einen Namen ein: Geben Sie einen Pfad ein:Geben Sie eine Zeichenkette ein: Geben Sie j (ja) oder n (nein) ein: FehlerFehler beim Zugriff auf das Datenbankverzeichnis.etwa %1geschätzt %1Beispiel: dbverify -ifsex "%s" Verzeichnis exportieren/importierenf Vater anzeigenf Väter anzeigenf Ob. Vater anzeigenf Aus ein oder zwei Ehegatten eine Familie erzeugenf Eine Familie vollständig löschenf Gesamte Datenbank durchsuchenf Nach ganzem Namen suchenVaterFeb.FebruarFünfte(r)Erste(r)FünfFlorFloréalVierVierte(r)von %1von %1 bis %2FrimFrimairevon %1von %1 bis %2FrucFructidorfullname: Person hat keinen Nameng Familie anzeigenLändereinstellung GEDCOM-Eingabe: %sLändereinstellung GEDCOM-Ausgabe: %sGermGerminalgettext DLL ohne Versionsangabegettext DLL-Version: %sgettext DLL: %sh Als Gatte hinzufügenerihrerihrer_Ihmseini Als Kind hinzufügeni Person anzeigeni Eine Person per Schlüssel auswähleni Eine Person vollständig löscheni Alle Tabellen aus Datei(en) in Datenbank importiereniconv DLL ohne Versionsangabeiconv DLL-Version: %siconv DLL: %sKennung: %s muß eine Zeichenkette sein IjjarIjjj Daten oben einfügenj Liste abwärtsJan.JanuarErgänzungstageJuliJuliJuniJunik Schlüssel einer Person findenk Liste aufwärtsIndexdatei ist fehlerhaft.Indexdatei hat die falsche Ausrichtung.Indexdatei hat falsche Version.KislewKisI Tabelle aus Datei laden (in DB)m Mutter anzeigenm Mütter anzeigenm Ob. Mutter anzeigenm Person markierenm Speicherstatistik anzeigenverh. MärzMärzverheiratet: MaiMessMessidorMuttern Neue Person einfügenn Nach Namensteil suchen (durch Leerzeichen getrennt)n Liste benennenName der Datenbank ist zu lang.name: Person hat keinen NamenNeunNeunte(r)NissanNivoNivôseKeine DLL für gettext gefundenKeine DLL für iconv gefundenDieses Verzeichnis scheint keine Datenbank zu sein.Nov.NovemberNiso Ält. Geschw. anz.o Nutzereinstellungen bearbeitenOkt.OktoberEinsp Stammbaum-Modusp Neue Person zur Datenbank hinzufügenp Report erzeugen (aus Liste wählen)Zeichenfolge: PersonPluvPluviôsePraiPrairialq Programm beendenq Zum Hauptmenüq Zum vorigen Menür Report erzeugen (Reportnamen eingeben)r GEDCOM-Datei einlesenr Nach REFN suchenr Als Gatte entfernenr Aus Liste löschenr Gatten entfernenLändereinstellung Reporte: %sLändereinstellung Reporte-Eingabe: %sLändereinstellung Reporte-Ausgabe: %sGewünschte Datenbank existiert nicht.lebtes Ehegatten hinzufügens Quelldatensätze anzeigens Ehegatten anzeigens Ob. Partner anzeigens Datenbank als GEDCOM speicherns Datenbank durchsuchens Einen Ehegatten zu bestehender Familie hinzufügens Einen Ehegatten aus seiner Familie entfernens Tabelle aus Datenbank in Datei speichernZweite(r)Sep.Septemberset(%s, ) ist ungültigSiebenSiebente(r)sieSchwatSchNachricht: %1: %2SiwanSechsSechste(r)soundex: Person hat keinen NamenGattesurname: Person hat keinen NamenSiwt Zum Anfangt 2-Personen-Modust Zeichenumwandlungstabellen bearbeitenTammustc 2-Kinder-ModusZehnZehnte(r)Tewettf 2-Väter-Modustg 2-Fam.-ModusTherThermidorDritte(r)DreiTischritm 2-Mütter-ModusTambis %1ts 2-Ehegatten-ModusTistt 2-Familien-Modustt 2-Personen-Modustu 2-Eltern-ModusTwtZwölfte(r)ZwölfZweiu Eltern anzeigenu Sonstigesv Liste zuletzt angezeigter Personen (%d Datensatz)v Liste zuletzt angezeigter Personen (%d Datensätze)VendVendémiaireVentVentôseAchtungx Sonstige Datensätze anzeigenx Quell-, Ereignis- und sonstige Datensätze bearbeitenx Tausch mark./akt.x 2 Kinder tauschenx 2 Familien tauschenx Oben/Unten tauschenx Alle Tabellen aus Datenbank in Datei speicherny Jüng. Geschw. anz.y Synchr. anjJjJnNNullzi Person anzeigenzz And. Pers. anz.lifelines-3.0.61/po/de.po0000700002540200244210000042325710657072074015334 0ustar prappDomain Users# translation of de-neu.po to Deutsch # LifeLines 3.0.61. # This file is distributed under the same license as the LifeLines package. # Copyright (C) 1991, 1996 Tom T. Wetmore IV # Frank Ellebrecht , 2002,2003. # msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-08-08 14:34-0400\n" "PO-Revision-Date: 2007-08-09 19:48+0200\n" "Last-Translator: Andreas Kirschbaum \n" "Language-Team: None\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: KBabel 1.1\n" #: src/btree/btrec.c:369 #, c-format msgid "Failed (errno=%d) to open blockfile (rkey=%s): %s" msgstr "Kann die Datei nicht öffnen (errno=%d, rkey=%s): %s" #: src/btree/btrec.c:438 #, c-format msgid "Btree lookup looped back to master (%ld)!" msgstr "Zyklische Verweise im btree (%ld)" #: src/gedlib/charmaps.c:769 msgid "" msgstr "" #. TRANSLATORS: seconds time interval #: src/gedlib/dateprint.c:783 #, c-format msgid "%02ds" msgstr "%02dS" #. TRANSLATORS: minutes & seconds time interval #: src/gedlib/dateprint.c:789 #, c-format msgid "%dm%02ds" msgstr "%dMin%03dS" #. TRANSLATORS: hours & minutes time interval #: src/gedlib/dateprint.c:795 #, c-format msgid "%dh%02dm" msgstr "%dJahr%03dTag" #. TRANSLATORS: days & hours time interval #: src/gedlib/dateprint.c:801 #, c-format msgid "%dd%02dh" msgstr "%dJahr%03dTag" #. TRANSLATORS: years & days time interval #: src/gedlib/dateprint.c:805 #, c-format msgid "%dy%03dd" msgstr "%dJahr%03dTag" #: src/gedlib/dbcontext.c:276 msgid "Database error: -- " msgstr "Fehler in der Datenbank: -- " #: src/gedlib/dbcontext.c:280 msgid "requested database does not exist." msgstr "Gewünschte Datenbank existiert nicht." #: src/gedlib/dbcontext.c:283 msgid "db directory is file, not directory." msgstr "DB ist eine Datei, kein Verzeichnis." #: src/gedlib/dbcontext.c:286 msgid "creation of new database failed." msgstr "Anlegen der neuen Datenbank ist gescheitert." #: src/gedlib/dbcontext.c:289 msgid "error accessing database directory." msgstr "Fehler beim Zugriff auf das Datenbankverzeichnis." #: src/gedlib/dbcontext.c:292 msgid "no keyfile (directory does not appear to be a database)." msgstr "Dieses Verzeichnis scheint keine Datenbank zu sein." #: src/gedlib/dbcontext.c:295 msgid "could not open, read or write an index file." msgstr "Öffnen, Lesen oder Schreiben des Index fehlgeschlagen." #: src/gedlib/dbcontext.c:298 msgid "could not open, read or write the key file." msgstr "Öffnen, Lesen oder Schreiben der Indexdatei fehlgeschlagen." #: src/gedlib/dbcontext.c:301 msgid "could not open, read or write the key file (to alter database)." msgstr "DB konnte nicht geändert werden: Fehler beim Öffnen, Lesen oder Schreiben." #: src/gedlib/dbcontext.c:304 msgid "could not open, read or write a block file." msgstr "Öffnen, Lesen oder Schreiben der Blockdatei fehlgeschlagen." #: src/gedlib/dbcontext.c:307 msgid "name of database is too long." msgstr "Name der Datenbank ist zu lang." #: src/gedlib/dbcontext.c:310 msgid "The database is already open for writing." msgstr "Auf die Datenbank wird bereits zugegriffen." #: src/gedlib/dbcontext.c:313 msgid "The database is locked (no readwrite access)." msgstr "Die Datenbank ist gesperrt (kein Schreibzugriff). " #: src/gedlib/dbcontext.c:316 msgid "The database is unlocked." msgstr "Die Datenbank ist freigeschaltet." #: src/gedlib/dbcontext.c:319 msgid "keyfile is corrupt." msgstr "Indexdatei ist fehlerhaft." #: src/gedlib/dbcontext.c:322 msgid "keyfile is wrong alignment." msgstr "Indexdatei hat die falsche Ausrichtung." #: src/gedlib/dbcontext.c:325 msgid "keyfile is wrong version." msgstr "Indexdatei hat falsche Version." #: src/gedlib/dbcontext.c:328 msgid "Existing database found." msgstr "Vorhandene Datenbank gefunden." #: src/gedlib/dbcontext.c:332 #, c-format msgid "The database is already opened for read access by %d user." msgid_plural "The database is already opened for read access by %d users." msgstr[0] "Auf die Datenbank wird bereits von %d Benutzer lesend zugegriffen." msgstr[1] "Auf die Datenbank wird bereits von %d Benutzern lesend zugegriffen." #: src/gedlib/dbcontext.c:338 msgid "Invalid properties set for new database" msgstr "Ungültige Einstellungen für neue Datenbank." #: src/gedlib/dbcontext.c:341 msgid "Undefined database error -- fix program." msgstr "Schwerer Datenbankfehler -- Programm reparieren." #: src/gedlib/gedcom.c:112 msgid "Missing NAME line in INDI record; record ignored.\n" msgstr "Dieser Person fehlt der Name; Datensatz ignoriert.\n" #: src/gedlib/init.c:228 src/tools/btedit.c:207 #, c-format msgid "Copyright (C) 1991-2007 Thomas T. Wetmore IV et al." msgstr "Copyright (C) 1991-2007, T. T. Wetmore IV und weitere." #: src/gedlib/init.c:230 src/tools/btedit.c:209 #, c-format msgid "" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." msgstr "" "Dies ist freie Software; die Kopierbedingungen stehen in den Quellen. Es\n" "gibt keine Garantie; auch nicht für VERKAUFBARKEIT oder FÜR SPEZIELLE ZWECKE." #: src/gedlib/init.c:235 src/tools/btedit.c:214 #, c-format msgid "Written by Tom Wetmore. Maintained at lifelines.sourceforge.net." msgstr "Geschrieben von Tom Wetmore. Weiterentwickelt unter lifelines.sourceforge.net." #: src/gedlib/keytonod.c:686 #, c-format msgid "Database error caused by reference to nonexisting key <%s>." msgstr "Datenbankfehler durch Verweis auf nicht-existenten Schlüssel <%s>." #: src/gedlib/keytonod.c:687 msgid "It might be possible to fix this with btedit." msgstr "Eine Reparatur könnte mit btedit möglich sein." #: src/gedlib/keytonod.c:688 msgid "Neighboring keys include:" msgstr "Schlüssel in der Nähe sind:" #: src/gedlib/keytonod.c:1045 #, c-format msgid "Bad cache entry <%s> != <%s>" msgstr "Fehlerhafter Eintrag im Cache: <%s> != <%s>" #: src/gedlib/keytonod.c:1072 #, c-format msgid "Cache [%s] overflowed its max size (%d)" msgstr "Cache [%s] übersteigt die Maximalgröße (%d)" #: src/gedlib/messages.c:44 msgid "You must identify a database." msgstr "Sie müssen eine Datenbank angeben." #: src/gedlib/messages.c:45 msgid "What directory holds (or will hold) the LifeLines database? (? to list)" msgstr "Wo befindet sich die Lifelines-Datenbank? (? für Liste)" #: src/gedlib/messages.c:46 msgid "enter path: " msgstr "Geben Sie einen Pfad ein:" #: src/gedlib/messages.c:47 msgid "There is no LifeLines database in that directory." msgstr "In diesem Verzeichnis gibt es keine Lifelines-Datenbank." #: src/gedlib/messages.c:48 msgid "Do you want to create a database there?" msgstr "Möchten Sie hier eine neue Datenbank anlegen?" #: src/gedlib/messages.c:49 msgid "Argument to lock (-l) must be y or n." msgstr "Parameter für Sperre (-l) muss j oder n sein." #: src/gedlib/messages.c:50 msgid "Cannot remove last person from family." msgstr "Kann letzte Person nicht aus der Familie löschen." #: src/gedlib/messages.c:52 msgid "lines [-adkrwiflntcuFxoCzI] [database] # Use -F for Finnish database" msgstr "lines [-adkrwiflntcuFxoCzI] [Datenbank] # -F für finnische Datenbank" #: src/gedlib/messages.c:54 msgid "lines [-adkrwiflntcuxoCzI] [database] # Finnish database" msgstr "lines [-adkrwiflntcuxoCzI] [Datenbank] # Finnische Datenbank" #: src/gedlib/messages.c:56 msgid "lines [-adkrwiflntcuxoCzI] [database]" msgstr "lines [-adkrwiflntcuxoCzI] [Datenbank] " #: src/gedlib/messages.c:58 msgid "The database is read only; you may not add records." msgstr "Datenbank ist schreibgeschützt, Einfügen von Datensätzen unmöglich." #: src/gedlib/messages.c:59 msgid "The database is read only; you may not change records." msgstr "Datenbank ist schreibgeschützt, Verändern von Datensätzen unmöglich." #: src/gedlib/messages.c:60 msgid "The database is read only; you may not merge records." msgstr "Datenbank ist schreibgeschützt, Zusammenführen von Datensätzen nicht möglich." #: src/gedlib/messages.c:61 msgid "The database is read only; you may not remove records." msgstr "Datenbank ist schreibgeschützt, Löschen von Datensätzen nicht möglich." #: src/gedlib/messages.c:62 msgid "The database is read only." msgstr "Schreibzugriff auf Datenbank nicht möglich." #: src/gedlib/messages.c:64 msgid "Name, key, refn, list, or @:" msgstr "Name, Schlüssel, REFN, Liste oder @:" #: src/gedlib/messages.c:65 msgid "enter key or refn: " msgstr "Geben Sie Schlüssel oder REFN ein:" #: src/gedlib/messages.c:66 msgid "Please choose the child to remove from the family." msgstr "Wählen Sie das zu entfernende Kind." #: src/gedlib/messages.c:67 msgid "Please choose the spouse/parent to remove from the family." msgstr "Wählen Sie den Ehepartner, der aus der Familie entfernt werden soll." #: src/gedlib/messages.c:68 msgid "From which family is the child to be removed?" msgstr "Aus welcher Familie stammt das zu entfernende Kind?" #: src/gedlib/messages.c:69 msgid "From which family is the spouse/parent to be removed?" msgstr "Aus welcher Familie stammt der zu entfernende Gatte/Elternteil?" #: src/gedlib/messages.c:70 msgid "Identify family (enter nothing to identify by individual members)." msgstr "Familie eingeben (leer = Auswahl eines Familienmitgliedes)." #: src/gedlib/messages.c:71 msgid "Identify a spouse of the family, if known." msgstr "Falls bekannt, geben Sie einen Ehepartner an." #: src/gedlib/messages.c:72 msgid "Identify a child of the family, if known." msgstr "Falls bekannt, geben Sie ein Kind an." #: src/gedlib/messages.c:73 msgid "Identify the first child to swap." msgstr "Geben Sie das erste zu tauschende Kind an." #: src/gedlib/messages.c:74 msgid "Identify the second child to swap." msgstr "Geben Sie das zweite zu tauschende Kind an." #: src/gedlib/messages.c:75 msgid "Identify the child to reorder." msgstr "Geben Sie das Kind für eine Neuordnung an." #: src/gedlib/messages.c:76 msgid "Identify the first family/spouse to swap." msgstr "Geben Sie die erste zu tauschende Familie an." #: src/gedlib/messages.c:77 msgid "Identify the second family/spouse to swap." msgstr "Geben Sie die zweite zu tauschende Familie an." #: src/gedlib/messages.c:78 msgid "Please choose the spouse/parent to browse to." msgstr "Wählen Sie den Gatten/Elternteil, der angezeigt werden soll." #: src/gedlib/messages.c:79 msgid "Please choose the first spouse/parent to browse to." msgstr "Wählen Sie den ersten Gatten/Elternteil, der angezeigt werden soll." #: src/gedlib/messages.c:80 msgid "Please choose the second spouse/parent to browse to." msgstr "Wählen Sie den zweiten Gatten/Elternteil, der angezeigt werden soll." #: src/gedlib/messages.c:81 msgid "Please choose the child to browse to." msgstr "Wählen Sie das Kind, das angezeigt werden soll." #: src/gedlib/messages.c:82 msgid "Please choose the first child to browse to." msgstr "Wählen Sie das erste Kind, das angezeigt werden soll." #: src/gedlib/messages.c:83 msgid "Please choose the second child to browse to." msgstr "Wählen Sie das zweite Kind, das angezeigt werden soll." #: src/gedlib/messages.c:84 msgid "Please choose the family to browse to." msgstr "Wählen Sie die Familie, die angezeigt werden soll." #: src/gedlib/messages.c:85 msgid "Enter Family Number to Browse to" msgstr "Geben Sie die Nummer der anzuzeigenden Familie ein" #: src/gedlib/messages.c:86 msgid "Please choose the first family to browse to." msgstr "Wählen Sie die erste Familie, die angezeigt werden soll." #: src/gedlib/messages.c:87 msgid "Please choose the second family to browse to." msgstr "Wählen Sie die zweite Familie, die angezeigt werden soll." #: src/gedlib/messages.c:88 msgid "Please choose the father/husband to browse to." msgstr "Wählen Sie den Vater/Ehemann, der angezeigt werden soll." #: src/gedlib/messages.c:89 msgid "Please choose the first father/husband to browse to." msgstr "Wählen Sie den ersten Vater/Ehemann, der angezeigt werden soll." #: src/gedlib/messages.c:90 msgid "Please choose the second father/husband to browse to." msgstr "Wählen Sie den zweiten Vater/Ehemann, der angezeigt werden soll." #: src/gedlib/messages.c:91 msgid "Please choose the mother/wife to browse to." msgstr "Wählen Sie die Mutter/Ehefrau, die angezeigt werden soll." #: src/gedlib/messages.c:92 msgid "Please choose the first mother/wife to browse to." msgstr "Wählen Sie die erste Mutter/Ehefrau, die angezeigt werden soll." #: src/gedlib/messages.c:93 msgid "Please choose the second mother/wife to browse to." msgstr "Wählen Sie die zweite Mutter/Ehefrau, die angezeigt werden soll." #: src/gedlib/messages.c:94 msgid "Identify a parent in the family having children swapped." msgstr "Ehepartner, dessen Kinder getauscht werden." #: src/gedlib/messages.c:95 msgid "Whose families/spouses are to be swapped?" msgstr "Welche Familien/Ehegatten sollen getauscht werden?" #: src/gedlib/messages.c:96 msgid "Identify one of the child's parents, if known." msgstr "Falls bekannt, geben Sie ein Elternteil des Kindes an." #: src/gedlib/messages.c:98 src/liflines/scan.c:127 msgid "Enter pattern to match against refn." msgstr "Geben Sie einen Teil der REFN ein." #: src/gedlib/messages.c:100 msgid "Please choose from among these people." msgstr "Bitte wählen Sie aus diesen Personen aus." #: src/gedlib/messages.c:101 msgid "Please choose from among these records." msgstr "Bitte wählen Sie aus diesen Datensätzen aus." #: src/gedlib/messages.c:102 msgid "Is this the new child? " msgstr "Ist dies das neue Kind? " #: src/gedlib/messages.c:103 msgid "Is this the new spouse? " msgstr "Ist das der neue Ehegatte? " #: src/gedlib/messages.c:104 msgid "Is this the person? Select if so." msgstr "Ist das die gesuchte Person? Dann wählen Sie diese aus." #: src/gedlib/messages.c:105 msgid "Is this the record? Select if so." msgstr "Ist das die gesuchte Person? Dann wählen Sie diese aus." #: src/gedlib/messages.c:106 msgid "Select the child the new child precedes or select last." msgstr "Vor welchem Kind soll aktuelle Person eingefügt werden?" #: src/gedlib/messages.c:107 msgid "Please identify next person to browse to." msgstr "Geben Sie die nächste anzuzeigende Person an." #: src/gedlib/messages.c:108 msgid "Please identify record to browse to." msgstr "Geben Sie den anzuzeigenden Datensatz an." #: src/gedlib/messages.c:109 msgid "Please identify one of the spouses." msgstr "Geben Sie einen der Ehegatten an." #: src/gedlib/messages.c:110 msgid "Please identify person or persons to browse to." msgstr "Geben Sie die anzuzeigende(n) Person(en) an." #: src/gedlib/messages.c:111 msgid "Please choose family create operation." msgstr "Bitte legen Sie zunächst eine Familie an." #: src/gedlib/messages.c:112 msgid "Do you want to enter another name?" msgstr "Möchten Sie einen anderen Namen eingeben?" #: src/gedlib/messages.c:114 msgid "This person is not a spouse or parent in any family." msgstr "Person ist weder Ehegatte noch Elternteil in irgendeiner Familie." #: src/gedlib/messages.c:115 msgid "This person is not a child in any family." msgstr "Diese Person ist nirgendwo als Kind erfasst." #: src/gedlib/messages.c:116 msgid "There is no one in the database with that name or key." msgstr "In der Datenbank gibt es niemanden mit diesem Namen oder Schlüssel." #: src/gedlib/messages.c:118 msgid "This person's father is not in the database." msgstr "Der Vater dieser Person ist nicht in der Datenbank erfasst." #: src/gedlib/messages.c:119 msgid "This person's mother is not in the database." msgstr "Die Mutter dieser Person ist nicht in der Datenbank erfasst." #: src/gedlib/messages.c:120 msgid "This person has no spouse in the database." msgstr "Zu dieser Person sind keine Ehegatten erfasst." #: src/gedlib/messages.c:121 msgid "This person has no younger sibling in the database." msgstr "Zu dieser Person sind keine jüngeren Geschwister erfasst." #: src/gedlib/messages.c:122 msgid "This person has no older sibling in the database." msgstr "Zu dieser Person sind keine älteren Geschwister erfasst." #: src/gedlib/messages.c:123 msgid "This person's parents are not in the database." msgstr "Zu dieser Person sind keine Eltern erfasst." #: src/gedlib/messages.c:124 msgid "This family has no male spouse/parent in the database." msgstr "Zu dieser Familie sind keine männlichen Ehegatten/Elternteile erfasst." #: src/gedlib/messages.c:125 msgid "This family has no female spouse/parent in the database." msgstr "Zu dieser Familie sind keine weiblichen Ehegatten/Elternteile erfasst." #: src/gedlib/messages.c:126 msgid "There are no children in the database for this family." msgstr "Zu dieser Familie sind keine Kinder erfasst." #: src/gedlib/messages.c:127 msgid "This person has no children in the database." msgstr "Zu dieser Person sind keine Kinder erfasst." #: src/gedlib/messages.c:128 msgid "No such child." msgstr "Kein solches Kind vorhanden." #: src/gedlib/messages.c:129 msgid "No such person." msgstr "Keine solche Person vorhanden." #: src/gedlib/messages.c:130 msgid "No such record." msgstr "Kein solcher Datensatz vorhanden." #: src/gedlib/messages.c:131 msgid "No such family." msgstr "Keine solche Familie vorhanden." #: src/gedlib/messages.c:132 msgid "No sources present." msgstr "Keine Quellen vorhanden." #: src/gedlib/messages.c:133 msgid "Please choose the source to view." msgstr "Wählen Sie die anzuzeigende Quelle aus." #: src/gedlib/messages.c:134 msgid "No events present." msgstr "Keine Ereignisse vorhanden." #: src/gedlib/messages.c:135 msgid "Please choose the event to view." msgstr "Wählen Sie das anzuzeigende Ereignis aus." #: src/gedlib/messages.c:136 msgid "No others present." msgstr "Keine Datensätze vorhanden." #: src/gedlib/messages.c:137 msgid "Please choose the other to view." msgstr "Welchen Datensatz anzeigen?" #: src/gedlib/messages.c:138 msgid "No notes present." msgstr "Keine Anmerkungen vorhanden." #: src/gedlib/messages.c:139 msgid "Please choose the note to view." msgstr "Wählen Sie die anzuzeigende Anmerkung aus." #: src/gedlib/messages.c:140 msgid "No references present." msgstr "Keine Verweise vorhanden." #: src/gedlib/messages.c:141 msgid "Please choose the reference to view." msgstr "Wählen Sie den anzuzeigenden Verweis." #: src/gedlib/messages.c:142 msgid "Duplicated REFN - please choose." msgstr "REFN doppelt vergeben - wählen Sie." #: src/gedlib/messages.c:144 msgid "New spouse/parent has unknown sex; can't add to family." msgstr "Geschlecht des Ehegatten unbekannt; Hinzufügen zur Familie unmöglich." #: src/gedlib/messages.c:145 msgid "The persons are not of opposite sex; can't make family." msgstr "Personen haben das gleiche Geschlecht, Familie anlegen nicht möglich." #: src/gedlib/messages.c:146 msgid "This person is not a spouse in the family; can't remove." msgstr "Diese Person ist kein Ehegatte dieser Familie, Löschen nicht möglich." #: src/gedlib/messages.c:147 msgid "This person is not a child in the family; can't remove." msgstr "Diese Person ist kein Kind dieser Familie, Entfernen nicht möglich." #: src/gedlib/messages.c:148 msgid "This person's sex is not known; can't make family." msgstr "Das Geschlecht dieser Person ist unbekannt; Anlegen der Familie nicht möglich." #: src/gedlib/messages.c:149 msgid "This family already has a husband/male parent." msgstr "Diese Familie hat bereits einen Ehemann/Vater." #: src/gedlib/messages.c:150 msgid "This family already has a wife/female parent." msgstr "Diese Familie hat bereits eine Ehefrau/Mutter." #: src/gedlib/messages.c:151 msgid "This family has both spouses/parents; can't add another." msgstr "Diese Familie hat bereits beide Ehegatten, weiteres Hinzufügen nicht möglich." #: src/gedlib/messages.c:152 msgid "This family has neither spouse/parent; can't remove." msgstr "Diese Familie hat weder Ehegatten noch Eltern; Entfernen nicht möglich." #: src/gedlib/messages.c:153 msgid "This family still has links; not removed." msgstr "Diese Familie ist noch mit anderen Personen verknüpft, nicht entfernt." #: src/gedlib/messages.c:155 msgid "Choose a family by selecting a spouse/parent." msgstr "Wählen Sie eine Familie, indem Sie einen Ehegatten/Elternteil angeben." #: src/gedlib/messages.c:156 msgid "" "Do you want to edit the person again? (Otherwise changes will be discarded.)" msgstr "Möchten Sie die Person erneut bearbeiten? (Sonst werden Änderungen verworfen.)" #: src/gedlib/messages.c:157 msgid "Do you want to edit the person again?" msgstr "Möchten Sie diese Person erneut bearbeiten?" #: src/gedlib/messages.c:158 msgid "" "Do you want to edit the family again? (Otherwise changes will be discarded.)" msgstr "JA: Familie erneut bearbeiten; NEIN: Änderungen verwerfen." #: src/gedlib/messages.c:159 msgid "Do you want to edit the family again?" msgstr "Möchten Sie diese Familie erneut bearbeiten?" #: src/gedlib/messages.c:160 msgid "" "Do you want to edit the source again? (Otherwise changes will be discarded.)" msgstr "Möchten Sie die Quelle erneut bearbeiten? (Sonst werden Änderungen verworfen.)" #: src/gedlib/messages.c:161 msgid "Do you want to edit the source again?" msgstr "Möchten Sie diese Quelle erneut bearbeiten?" #: src/gedlib/messages.c:162 msgid "" "Do you want to edit the event again? (Otherwise changes will be discarded.)" msgstr "Möchten Sie das Ereignis erneut bearbeiten? (Sonst werden Änderungen verworfen.)" #: src/gedlib/messages.c:163 msgid "Do you want to edit the event again?" msgstr "Möchten Sie dieses Ereignis erneut bearbeiten?" #: src/gedlib/messages.c:164 msgid "" "Do you want to edit the record again? (Otherwise changes will be discarded.)" msgstr "Möchten Sie den Datensatz erneut bearbeiten? (Sonst werden Änderungen verworfen.)" #: src/gedlib/messages.c:165 msgid "Do you want to edit the record again?" msgstr "Möchten Sie diesen Datensatz erneut bearbeiten?" #: src/gedlib/messages.c:166 msgid "Whom do you want to edit?" msgstr "Wen möchten Sie bearbeiten?" #: src/gedlib/messages.c:167 msgid "Which source record do you want to edit?" msgstr "Welche Quelle möchten Sie bearbeiten?" #: src/gedlib/messages.c:168 msgid "Which event record do you want to edit?" msgstr "Welches Ereignis möchten Sie bearbeiten?" #: src/gedlib/messages.c:169 msgid "What record do you want to edit?" msgstr "Welchen Datensatz möchten Sie bearbeiten?" #: src/gedlib/messages.c:171 msgid "Do you really want to add this person to the database?" msgstr "Möchten Sie diese Person zur Datenbank hinzufügen?" #: src/gedlib/messages.c:172 msgid "Do you really want to add this family to the database?" msgstr "Möchten Sie diese Familie zur Datenbank hinzufügen?" #: src/gedlib/messages.c:173 msgid "Do you really want to add this child to the family?" msgstr "Möchten Sie dieses Kind zur Familie hinzufügen?" #: src/gedlib/messages.c:174 msgid "Do you really want to add this spouse/parent to the family?" msgstr "Möchten Sie diesen Ehegatten/dieses Elternteil zur Familie hinzufügen?" #: src/gedlib/messages.c:175 msgid "Do you really want to add this source to the database?" msgstr "Möchten Sie diese Quelle zur Datenbank hinzufügen?" #: src/gedlib/messages.c:176 msgid "Do you really want to add this event to the database?" msgstr "Möchten Sie dieses Ereignis zur Datenbank hinzufügen?" #: src/gedlib/messages.c:177 msgid "Do you really want to add this record to the database?" msgstr "Möchten Sie diesen Datensatz zur Datenbank hinzufügen?" #: src/gedlib/messages.c:178 msgid "Do you really want to update this person?" msgstr "Möchten Sie die Daten dieser Person aktualisieren?" #: src/gedlib/messages.c:179 msgid "Do you really want to update this family?" msgstr "Möchten Sie die Daten dieser Familie aktualisieren?" #: src/gedlib/messages.c:180 msgid "Do you really want to update this source?" msgstr "Möchten Sie die Daten dieser Quelle aktualisieren?" #: src/gedlib/messages.c:181 msgid "Do you really want to update this event?" msgstr "Möchten Sie die Daten dieses Ereignisses aktualisieren?" #: src/gedlib/messages.c:182 msgid "Do you really want to update this record?" msgstr "Möchten Sie diesen Datensatz aktualisieren?" #: src/gedlib/messages.c:183 msgid "Are you sure you want to remove the person from the database?" msgstr "Möchten Sie diese Person wirklich aus der Datenbank entfernen?" #: src/gedlib/messages.c:184 msgid "Are you sure you want to remove this record from the database?" msgstr "Möchten Sie diese Person wirklich aus der Datenbank entfernen?" #: src/gedlib/messages.c:185 msgid "Remove this family record?" msgstr "Möchten Sie den Datensatz dieser Familie entfernen?" #: src/gedlib/messages.c:186 #, c-format msgid "(Family %s (%s, %s)" msgstr "(Familie %s (%s, %s)" #: src/gedlib/messages.c:187 msgid "Do you really want to merge these two persons?" msgstr "Möchten Sie die Daten dieser beiden Personen zusammenfügen?" #: src/gedlib/messages.c:188 msgid "Do you really want to merge these two families?" msgstr "Möchten Sie die Daten dieser beiden Familien zusammenfügen?" #: src/gedlib/messages.c:189 msgid "Do you really want to swap spouse orders?" msgstr "Möchten Sie die Reihenfolge der Ehegatten tauschen?" #: src/gedlib/messages.c:190 msgid "Do you really want to reorder children?" msgstr "Möchten Sie die Reihenfolge der Kinder tauschen?" #: src/gedlib/messages.c:191 msgid "Do you really want to remove this child from his/her family?" msgstr "Möchten Sie dieses Kind aus seiner Familie entfernen?" #: src/gedlib/messages.c:192 msgid "Do you really want to remove this spouse from his/her family?" msgstr "Möchten sie diesen Ehegatten aus seiner Familie entfernen?" #: src/gedlib/messages.c:193 msgid "Too many spouses to display full list" msgstr "Zu viele Ehegatten um alle anzuzeigen." #: src/gedlib/messages.c:194 msgid "These persons are children in different families." msgstr "Diese Personen sind Kinder in verschiedenen Familien." #: src/gedlib/messages.c:195 msgid "Are you sure you want to merge them?" msgstr "Möchten Sie diese wirklich zusammenführen?" #: src/gedlib/messages.c:197 msgid "There is something wrong with the data." msgstr "Es gibt einen Fehler in den Daten." #: src/gedlib/messages.c:198 msgid "Please identify the child." msgstr "Geben Sie ein Kind an." #: src/gedlib/messages.c:199 msgid "Please identify one of the child's siblings." msgstr "Geben Sie eines der Geschwister des Kindes an." #: src/gedlib/messages.c:200 msgid "Identify spouse/parent to add to an existing family." msgstr "Welche Person soll zu einer bestehenden Familie hinzugefügt werden?" #: src/gedlib/messages.c:201 msgid "Identify spouse/parent already in family, if known." msgstr "Geben Sie einen Ehegatten an, der bereits zu dieser Familie erfasst ist, falls bekannt." #: src/gedlib/messages.c:202 msgid "Identify child already in family." msgstr "Geben Sie ein Kind an, das bereits zu dieser Familie erfasst ist." #: src/gedlib/messages.c:204 msgid "This person is already a child in a family." msgstr "Diese Person ist bereits als Kind in einer Familie erfasst." #: src/gedlib/messages.c:205 msgid "Identify a spouse/parent for the new family." msgstr "Geben Sie einen Ehegatten/ein Elternteil für die neue Familie an." #: src/gedlib/messages.c:206 msgid "Identify the second spouse/parent, if known." msgstr "Geben Sie den zweiten Ehegatten an, falls bekannt." #: src/gedlib/messages.c:207 msgid "Both families must have husbands/fathers." msgstr "Beide Familien benötigen Ehemänner/Väter." #: src/gedlib/messages.c:208 msgid "Both families must have wives/mothers." msgstr "Beide Familien benötigen Ehefrauen/Mütter." #: src/gedlib/messages.c:210 msgid "Identify spouse/parent in second family, if known." msgstr "Geben Sie einen Ehegatten in der zweiten Familie an, falls bekannt." #: src/gedlib/messages.c:211 msgid "Identify child in second family." msgstr "Geben Sie ein Kind in der zweiten Familie an." #: src/gedlib/messages.c:212 msgid "Identify second person to browse to." msgstr "Geben Sie die zweite anzuzeigende Person an." #: src/gedlib/messages.c:214 msgid "Create a family with this person as a child." msgstr "Diese Person als Kind einer neuen Familie." #: src/gedlib/messages.c:215 msgid "Create a family with this person as a spouse/parent." msgstr "Diese Person als Ehegatte einer neuen Familie." #: src/gedlib/messages.c:216 msgid "This family has less than two children; can't swap." msgstr "Diese Familie hat weniger als zwei Kinder, Tauschen nicht möglich." #: src/gedlib/messages.c:217 msgid "This person is a spouse/parent in less than two families." msgstr "Diese Person ist in weniger als zwei Familien als Ehegatte erfasst." #: src/gedlib/messages.c:218 msgid "Something impossible happened. Contact tech support." msgstr "Dieser Fehler ist eigentlich unmöglich. Wenden Sie sich an den Programmierer." #: src/gedlib/messages.c:220 msgid "The two children were swapped." msgstr "Reihenfolge der Kinder vertauscht." #: src/gedlib/messages.c:221 msgid "The two families were swapped." msgstr "Reihenfolge der Familien vertauscht." #: src/gedlib/messages.c:222 msgid "The child was removed from his/her family." msgstr "Das Kind wurde aus seiner Familie entfernt." #: src/gedlib/messages.c:223 msgid "The spouse was removed from his/her family." msgstr "Der Ehegatte wurde von seiner/ihrer Familie entfernt." #: src/gedlib/messages.c:225 msgid "A person cannot be merged with him/herself." msgstr "Eine Person kann nicht mit sich selbst zusammengeführt werden." #: src/gedlib/messages.c:226 msgid "A family cannot be merged with itself." msgstr "Eine Familie kann nicht mit sich selbst zusammengeführt werden." #: src/gedlib/messages.c:227 msgid "Two persons with different parents cannot be merged." msgstr "Zwei Personen mit unterschiedlichen Eltern können nicht zusammengeführt werden." #: src/gedlib/messages.c:228 msgid "Two parents of different sexes cannot be merged." msgstr "Zwei Elternteile unterschiedlichen Geschlechts können nicht zusammengeführt werden." #: src/gedlib/messages.c:229 msgid "The families have different fathers/husbands; cannot merge." msgstr "Familien mit unterschiedlichen Vätern/Männern können nicht zusammengeführt werden." #: src/gedlib/messages.c:230 msgid "The families have different wives/mothers; cannot merge." msgstr "Familien mit unterschiedlichen Müttern/Frauen können nicht zusammengeführt werden." #: src/gedlib/messages.c:231 msgid "Who do you want to remove from the database?" msgstr "Wen möchten Sie aus der Datenbank entfernen?" #: src/gedlib/messages.c:232 msgid "What record do you want to remove from the database?" msgstr "Welchen Datensatz möchten Sie aus der Datenbank entfernen?" #: src/gedlib/messages.c:233 msgid "Place the child last in the family." msgstr "Aktuelles Kind als jüngstes in die Familie einfügen." #: src/gedlib/messages.c:234 msgid "Error in abbreviations file." msgstr "Fehler in der Abkürzungsdatei." #: src/gedlib/messages.c:235 msgid "Error in user options file." msgstr "Fehler in den Benutzereinstellungen." #: src/gedlib/messages.c:236 msgid "Error in character mapping file." msgstr "Fehler in Zeichenumsetzungsdatei." #: src/gedlib/messages.c:237 #, c-format msgid "(Separator is %s)" msgstr "(Trennung durch %s)" #: src/gedlib/messages.c:238 msgid "Do you want to re-edit it?" msgstr "Möchten Sie die Daten erneut bearbeiten?" #: src/gedlib/messages.c:240 #, c-format msgid "%s was added to the database." msgstr "%s wurde zur Datenbank hinzugefügt." #: src/gedlib/messages.c:241 #, c-format msgid "%s was added as a child." msgstr "%s wurde als Kind hinzugefügt." #: src/gedlib/messages.c:242 #, c-format msgid "%s was added as a spouse and/or parent." msgstr "%s wurde als Ehegatte bzw. Elternteil hinzugefügt." #: src/gedlib/messages.c:243 msgid "The new family was added to the database." msgstr "Neue Familie wurde zur Datenbank hinzugefügt." #: src/gedlib/messages.c:244 #, c-format msgid "%s was modified in the database." msgstr "%s wurde verändert." #: src/gedlib/messages.c:245 msgid "The family was modified in the database." msgstr "Die Daten der Familie wurden verändert." #: src/gedlib/messages.c:246 msgid "The source was modified in the database." msgstr "Die Quelle wurde verändert." #: src/gedlib/messages.c:247 msgid "The event was modified in the database." msgstr "Das Ereignis wurde verändert." #: src/gedlib/messages.c:248 msgid "The record was modified in the database." msgstr "Der Datensatz wurde verändert." #: src/gedlib/messages.c:250 #, c-format msgid "Could not open file %s." msgstr "Kann die Datei %s nicht öffnen." #: src/gedlib/messages.c:251 msgid "Filepath too long." msgstr "Pfadangabe zu lang." #: src/gedlib/messages.c:253 msgid "Please mark a record first." msgstr "Bitte markieren Sie zunächst eine Person." #: src/gedlib/messages.c:255 #, c-format msgid "The current list is now named %s." msgstr "Die aktuelle Liste wurde in %s umbenannt." #: src/gedlib/messages.c:256 msgid "The current list is not named." msgstr "Die gegenwärtige Liste ist unbenannt." #: src/gedlib/messages.c:257 msgid "What should the name of this list be?" msgstr "Wie soll diese Liste heißen?" #: src/gedlib/messages.c:258 msgid "No persons were added to the current list." msgstr "Keine Personen zur aktuellen Liste hinzugefügt." #: src/gedlib/messages.c:259 msgid "What persons or list do you want to add to the current list?" msgstr "Welche Personen oder Listen möchten Sie zur aktuellen Liste hinzufügen?" #: src/gedlib/messages.c:260 msgid "You are at the bottom of the list." msgstr "Sie sind am Ende der Liste." #: src/gedlib/messages.c:261 msgid "You are at the top of the list." msgstr "Sie sind am Beginn der Liste." #: src/gedlib/messages.c:262 msgid "New persons were added to the current list." msgstr "Neue Person zur aktuellen Liste hinzugefügt." #: src/gedlib/messages.c:264 msgid "System error: illegal map code" msgstr "Systemfehler: ungültige Zeichenumwandlungstabelle" #: src/gedlib/messages.c:265 msgid "No such translation table in this database" msgstr "Diese Zeichenumwandlungstabelle existiert nicht" #: src/gedlib/messages.c:268 msgid "Because of errors the GEDCOM file was not loaded.\n" msgstr "Die GEDCOM-Datei wurde wegen aufgetretener Fehler nicht geladen.\n" #: src/gedlib/messages.c:269 msgid "No errors; adding records with original keys..." msgstr "Keine Fehler. Datensätze werden mit originalen Schlüsseln eingefügt..." #: src/gedlib/messages.c:270 msgid "No errors; adding records with new keys..." msgstr "Keine Fehler. Datensätze werden mit neuen Schlüsseln eingefügt..." #: src/gedlib/messages.c:271 msgid "Use original keys from GEDCOM file?" msgstr "Sollen die originalen Schlüssel aus der GEDCOM-Datei benutzt werden?" #: src/gedlib/messages.c:272 msgid "Proceed?" msgstr "Weitermachen?" #: src/gedlib/messages.c:273 msgid "Enter name of output archive file." msgstr "Geben Sie den Namen der Ausgabedatei an." #: src/gedlib/messages.c:274 #, c-format msgid "Database `%s' has been saved in `%s'." msgstr "Datenbank '%s' wurde in '%s' gespeichert." #: src/gedlib/messages.c:275 msgid "Enter name of translation table file to write" msgstr "Geben Sie den Dateinamen der Umwandlungstabelle ein" #: src/gedlib/messages.c:276 msgid "Enter name of translation table file to read" msgstr "Aus welcher Datei soll die Umwandlungstabelle gelesen werden?" #: src/gedlib/messages.c:277 #, c-format msgid "Line %d: The person defined here has no key: skipped." msgstr "Zeile %d: Diese Person hat keinen Schlüssel: übersprungen." #: src/gedlib/messages.c:278 #, c-format msgid "Line %d: The family defined here has no key." msgstr "Zeile %d: Diese Familie hat keinen Schlüssel." #: src/gedlib/messages.c:279 #, c-format msgid "Lines %d and %d: Person %s is multiply defined: skipped." msgstr "Zeilen %d und %d: Person %s existiert mehrfach; übersprungen." #: src/gedlib/messages.c:280 #, c-format msgid "Lines %d and %d: Family %s is multiply defined." msgstr "Zeilen %d und %d: Familie %s existiert mehrfach." #: src/gedlib/messages.c:281 #, c-format msgid "Line %d: Person %s has an incorrect key: skipped." msgstr "Zeile %d: Schlüssel für Person %s ungültig; übersprungen." #: src/gedlib/messages.c:282 #, c-format msgid "Line %d: Family %s has an incorrect key." msgstr "Zeile %d: Schlüssel für Familie %s ungültig; übersprungen." #: src/gedlib/messages.c:283 #, c-format msgid "Person %s is referred to but not defined." msgstr "Verweis auf Person %s; existiert aber nicht." #: src/gedlib/messages.c:284 #, c-format msgid "Family %s is referred to but not defined." msgstr "Verweis auf Familie %s; existiert aber nicht." #: src/gedlib/messages.c:285 #, c-format msgid "Source %s is referred to but not defined." msgstr "Verweis auf Quelle %s; existiert aber nicht." #: src/gedlib/messages.c:286 #, c-format msgid "Event %s is referred to but not defined." msgstr "Verweis auf Ereignis %s; existiert aber nicht." #: src/gedlib/messages.c:287 #, c-format msgid "Line %d: This line has a level number that is too large." msgstr "Zeile %d: Gliederungsebene in GEDCOM nicht erlaubt." #: src/gedlib/messages.c:288 #, c-format msgid "Line %d: Person defined here has no name." msgstr "Zeile %d: Diese Person hat keinen Namen." #: src/gedlib/messages.c:294 msgid "" msgstr "" #: src/gedlib/messages.c:296 msgid "What is the name of the program?" msgstr "Wie heißt das Programm?" #: src/gedlib/messages.c:297 msgid "Please enter the name of the GEDCOM file." msgstr "Geben Sie den Namen der GEDCOM-Datei ein." #: src/gedlib/messages.c:299 msgid "What is the name of the output file?" msgstr "Wie heißt die Ausgabedatei?" #: src/gedlib/messages.c:300 msgid "Malformed configuration file: line too long." msgstr "Konfigurationsdatei: Zeile zu lang." #: src/gedlib/messages.c:301 msgid "Unsupported file encoding (no multibyte encodings except UTF-8)." msgstr "Dateiformat wird nicht unterstützt (nur UTF-8 als Multibyte-Format unterstützt)." #: src/gedlib/messages.c:302 #, c-format msgid "Unsupported file encoding: %s." msgstr "%s: Dateiformat wird nicht unterstützt." #: src/gedlib/messages.c:305 msgid "Enter string for program" msgstr "Geben Sie eine Zeichenkette ein" #: src/gedlib/messages.c:306 msgid "enter string: " msgstr "Geben Sie eine Zeichenkette ein: " #: src/gedlib/messages.c:307 msgid "enter integer:" msgstr "Geben Sie eine ganze Zahl ein: " #: src/gedlib/messages.c:308 msgid "enter name: " msgstr "Geben Sie einen Namen ein: " #: src/gedlib/messages.c:309 msgid "Strike any key to continue." msgstr "Weiter mit beliebiger Taste." #: src/gedlib/messages.c:313 msgid "" "0 SOUR\n" "1 REFN\n" "1 TITL Title\n" "1 AUTH Author" msgstr "" "0 SOUR\n" "1 REFN\n" "1 TITL Titel\n" "1 AUTH Autor" #: src/gedlib/messages.c:314 msgid "" "0 EVEN\n" "1 REFN\n" "1 DATE\n" "1 PLAC\n" "1 INDI\n" " 2 NAME\n" " 2 ROLE\n" "1 SOUR" msgstr "" "0 EVEN\n" "1 REFN\n" "1 DATE\n" "1 PLAC\n" "1 INDI\n" " 2 NAME\n" " 2 ROLE\n" "1 SOUR" #: src/gedlib/messages.c:315 msgid "" "0 XXXX\n" "1 REFN" msgstr "" "0 XXXX\n" "1 REFN" #: src/gedlib/messages.c:319 msgid "The file is as positioned at EOF." msgstr "Sie befinden sich am Ende der Datei." #: src/gedlib/messages.c:320 #, c-format msgid "Line %d: This line is empty; EOF?" msgstr "Zeile %d: Diese Zeile ist leer; Ende der Datei (EOF)?" #: src/gedlib/messages.c:321 #, c-format msgid "Line %d: This line is too long." msgstr "Zeile %d ist zu lang." #: src/gedlib/messages.c:322 #, c-format msgid "Line %d: This line has no level number." msgstr "In Zeile %d fehlt GEDCOM-Ebene." #: src/gedlib/messages.c:323 #, c-format msgid "Line %d: This line is incomplete." msgstr "Zeile %d ist unvollständig." #: src/gedlib/messages.c:324 #, c-format msgid "Line %d: This line has a bad link." msgstr "Die Verknüpfung in Zeile %d ist ungültig." #: src/gedlib/messages.c:325 #, c-format msgid "Line %d: This line needs white space before tag." msgstr "Zeile %d: Leerzeichen vor Kennzeichen erforderlich." #: src/gedlib/messages.c:326 #, c-format msgid "Line %d: This line has an illegal level." msgstr "Zeile %d: Gliederungsebene ungültig." #: src/gedlib/messages.c:327 msgid "The record begins at wrong level." msgstr "Datensatz beginnt mit falscher Ebene." #: src/gedlib/messages.c:330 msgid "" "\n" "Aborting now. Core dump? [y/n]" msgstr "\nProgrammabbruch. Speicherauszug erzeugen? [j/n]" #: src/gedlib/messages.c:331 msgid "" "Looks like a program was running.\n" "Check file %1 around line %2.\n" msgstr "" "Es hat den Anschein, als ob gerade ein Programm lief.\n" "Überprüfen Sie die Datei %1 bei Zeile %2.\n" #: src/gedlib/messages.c:332 msgid "signal %1: %2" msgstr "Nachricht: %1: %2" #: src/gedlib/messages.c:334 msgid "SIGNAL 0" msgstr "Signal 0" #: src/gedlib/messages.c:335 msgid "HANGUP" msgstr "Aufgelegt" #: src/gedlib/messages.c:336 msgid "INTERRUPT" msgstr "Unterbrochen" #: src/gedlib/messages.c:337 msgid "QUIT" msgstr "Verlassen" #: src/gedlib/messages.c:338 msgid "ILLEGAL INSTRUCTION" msgstr "Ungültiger Maschinenbefehl" #: src/gedlib/messages.c:339 msgid "TRACE TRAP" msgstr "Trace/Breakpoint ausgelöst" #: src/gedlib/messages.c:340 msgid "ABORT" msgstr "Abgebrochen" #: src/gedlib/messages.c:341 msgid "EMT INST" msgstr "EMT INST" #: src/gedlib/messages.c:342 msgid "FLOATING POINT EXCEPTION" msgstr "Gleitkomma-Ausnahme" #: src/gedlib/messages.c:343 msgid "KILL" msgstr "Getötet" #: src/gedlib/messages.c:344 msgid "BUS ERROR" msgstr "Bus-Zugriffsfehler" #: src/gedlib/messages.c:345 msgid "SEGMENTATION ERROR" msgstr "Speicherzugriffsfehler" #: src/gedlib/messages.c:346 msgid "SYSTEM CALL ERROR" msgstr "Fehlerhafter Systemaufruf (SYSTEM CALL ERROR)" #: src/gedlib/messages.c:347 msgid "PIPE WRITE" msgstr "Datenübergabe unterbrochen (broken pipe)" #: src/gedlib/messages.c:348 msgid "ALARM CLOCK" msgstr "Der Wecker klingelt" #: src/gedlib/messages.c:350 msgid "TERMINATE FROM KILL" msgstr "(TERMINATE FROM KILL)" #: src/gedlib/messages.c:351 msgid "USER SIGNAL 1" msgstr "Benutzerdefiniertes Signal 1" #: src/gedlib/messages.c:352 msgid "USER SIGNAL 2" msgstr "Benutzerdefiniertes Signal 2" #: src/gedlib/messages.c:353 msgid "DEATH OF CHILD" msgstr "Kindprozess abgebrochen (DEATH OF CHILD)" #: src/gedlib/messages.c:354 msgid "POWER-FAIL RESTART" msgstr "(POWER-FAIL RESTART)" #: src/gedlib/messages.c:355 msgid "WINDOW CHANGE" msgstr "Fenster wurde gewechselt (WINDOW CHANGE)" #: src/gedlib/messages.c:356 msgid "Unknown signal" msgstr "Unbekanntes Signal (unknown signal)" #: src/gedlib/messages.c:360 msgid "person" msgstr "Person" #: src/gedlib/messages.c:361 msgid ", of " msgstr ", von " #: src/gedlib/messages.c:362 msgid "father" msgstr "Vater" #: src/gedlib/messages.c:363 msgid "mother" msgstr "Mutter" #: src/gedlib/messages.c:364 msgid "spouse" msgstr "Gatte" #: src/gedlib/messages.c:365 msgid "child" msgstr "Kind" #: src/gedlib/messages.c:368 msgid "m. " msgstr "verh. " #: src/gedlib/messages.c:370 msgid "div. " msgstr "gesch. " #: src/gedlib/messages.c:372 msgid "b. " msgstr "geb. " #: src/gedlib/messages.c:374 msgid "bap. " msgstr "get. " #: src/gedlib/messages.c:376 msgid "d. " msgstr "gest. " #: src/gedlib/messages.c:378 msgid "bur. " msgstr "begr. " #: src/gedlib/messages.c:380 msgid "cb. " msgstr "geb. " #: src/gedlib/messages.c:382 msgid "married: " msgstr "verheiratet: " #: src/gedlib/messages.c:383 msgid "born: " msgstr "geboren: " #: src/gedlib/messages.c:384 msgid "bapt: " msgstr "getauft: " #: src/gedlib/messages.c:385 msgid "died: " msgstr "gestorben: " #: src/gedlib/messages.c:386 msgid "buri: " msgstr "beigesetzt: " #: src/gedlib/messages.c:390 msgid "You cannot edit the INDI line in a person record." msgstr "Die INDI-Zeile kann nicht verändert werden." #: src/gedlib/messages.c:391 msgid "You cannot edit the FAMC line in a person record." msgstr "Die FAMC-Zeile kann nicht verändert werden." #: src/gedlib/messages.c:392 msgid "You cannot edit the FAMS lines in a person record." msgstr "Die FAMS-Zeile kann nicht verändert werden." #: src/gedlib/messages.c:393 msgid "You cannot edit the FAM line in a family record." msgstr "Die FAM-Zeile kann nicht verändert werden." #: src/gedlib/messages.c:394 msgid "You cannot edit the HUSB line in a family record." msgstr "Die HUSB-Zeile kann nicht verändert werden." #: src/gedlib/messages.c:395 msgid "You cannot edit the WIFE line in a family record." msgstr "Die WIFE-Zeile kann nicht verändert werden." #: src/gedlib/messages.c:396 msgid "You cannot edit the CHIL lines in a family record." msgstr "Die CHIL-Zeile kann nicht verändert werden." #: src/gedlib/messages.c:397 msgid "The record is empty." msgstr "Dieser Datensatz ist leer." #: src/gedlib/messages.c:398 msgid "The record does not begin with an INDI line." msgstr "Dieser Datensatz beginnt nicht mit einer INDI-Zeile." #: src/gedlib/messages.c:399 msgid "The record does not begin with a FAM line." msgstr "Dieser Datensatz beginnt nicht mit einer FAM-Zeile." #: src/gedlib/messages.c:400 msgid "The record does not begin with a SOUR line." msgstr "Dieser Datensatz beginnt nicht mit einer SOUR-Zeile." #: src/gedlib/messages.c:401 msgid "The record does not begin with an EVEN line." msgstr "Dieser Datensatz beginnt nicht mit einer EVEN-Zeile." #: src/gedlib/messages.c:402 msgid "INDI, FAM, SOUR, EVEN records may not be other records." msgstr "INDI, FAM, SOUR, EVEN-Datensätze dürfen nicht sonstige Datensätze sein." #: src/gedlib/messages.c:403 msgid "The record contains multiple level 0 lines." msgstr "Dieser Datensatz enthält mehrere Einträge der Ebene 0." #: src/gedlib/messages.c:404 msgid "This person record has bad GEDCOM name syntax." msgstr "Der Name dieser Person widerspricht der GEDCOM-Syntax." #: src/gedlib/messages.c:405 msgid "You cannot change the sex of a parent." msgstr "Das Geschlecht eines Elternteiles kann nicht geändert werden." #: src/gedlib/messages.c:406 msgid "REFN key is already in use." msgstr "Dieser REFN-Schlüssel wird bereits benutzt." #: src/gedlib/messages.c:408 msgid "Tag is too long to connect automatically." msgstr "Eintrag ist zu lang, um ihn automatisch zu verknüpfen." #: src/gedlib/messages.c:410 msgid "Database records" msgstr "Datensätze" #: src/gedlib/messages.c:411 #, c-format msgid "%dI, %dF, %dS, %dE, %dX" msgstr "%d Pers., %d Fam., %d Quell., %d Ereign., %d Sonst." #: src/gedlib/messages.c:414 #, c-format msgid "LifeLines %s - Genealogical DB and Programming System" msgstr "LifeLines %s - Genealogische Datenbank mit Programmierschnittstelle" #: src/gedlib/messages.c:415 msgid "Copyright(c) 1991 to 1996, by T. T. Wetmore IV" msgstr "Copyright (C) 1991 - 1996, T. T. Wetmore IV" #: src/gedlib/messages.c:416 #, c-format msgid "Current Database - %s" msgstr "Aktuelle Datenbank - %s" #: src/gedlib/messages.c:418 msgid " (immutable)" msgstr "(unveränderlich)" #: src/gedlib/messages.c:420 msgid " (read only)" msgstr "(nur lesen)" #: src/gedlib/messages.c:421 msgid "Please choose an operation:" msgstr "Was möchten Sie tun?" #: src/gedlib/messages.c:422 msgid "Not valid command" msgstr "Ungültiger Befehl" #: src/gedlib/messages.c:425 msgid "enter y (yes) or n (no): " msgstr "Geben Sie j (ja) oder n (nein) ein: " #: src/gedlib/messages.c:426 msgid "yYnN" msgstr "jJnNyY" #: src/gedlib/messages.c:427 msgid "yY" msgstr "jJyY" #: src/gedlib/messages.c:430 msgid "LifeLines -- Person Browse Screen (* toggles menu)" msgstr "LifeLines -- Personen anzeigen (* Menü an/aus)" #: src/gedlib/messages.c:431 msgid "LifeLines -- Family Browse Screen (* toggles menu)" msgstr "LifeLines -- Familien anzeigen (* Menü an/aus)" #: src/gedlib/messages.c:432 msgid "LifeLines -- Two Person Browse Screen (* toggles menu)" msgstr "LifeLines -- 2-Personen-Anzeige (* Menü an/aus)" #: src/gedlib/messages.c:433 msgid "LifeLines -- Two Family Browse Screen (* toggles menu)" msgstr "LifeLines -- 2-Familien-Anzeige (* Menü an/aus)" #: src/gedlib/messages.c:434 msgid "LifeLines -- Auxiliary Browse Screen (* toggles menu)" msgstr "Lifelines -- Hilfsprogramme anzeigen (* Menü an/aus)" #: src/gedlib/messages.c:435 msgid "LifeLines -- List Browse Screen (* toggles menu)" msgstr "LifeLines -- Listen anzeigen (* Menü an/aus)" #: src/gedlib/messages.c:439 msgid "Commands: Select by number, u Page Up, d Page Down, i Select, q Quit" msgstr "Befehle: Nummer, u Seite abwärts, d Seite aufwärts, i Auswählen, q Zurück" #: src/gedlib/messages.c:440 msgid "Commands: u Page Up, d Page Down, q Quit" msgstr "Befehle: u Bild aufwärts, d Bild abwärts, q Zurück" #: src/gedlib/messages.c:441 msgid "Messages:" msgstr "Meldungen:" #: src/gedlib/messages.c:444 msgid "Please choose from the following options:" msgstr "Wählen Sie eine der folgenden Möglichkeiten:" #: src/gedlib/messages.c:445 #, c-format msgid "New record is %s" msgstr "Der neue Datensatz ist %s" #: src/gedlib/messages.c:446 msgid "Insert xref automatically at bottom of current record." msgstr "Querverweis (XREF) automatisch am Ende des Datensatzes einfügen." #: src/gedlib/messages.c:447 msgid "Edit current record now to add xref manually." msgstr "Ggw. Datensatz bearbeiten, um Verweis (XREF) per Hand einzugeben." #: src/gedlib/messages.c:448 msgid "Browse new record (without adding xref)." msgstr "Neuen Datensatz anzeigen (ohne Querverweis einzufügen)." #: src/gedlib/messages.c:449 msgid "Return to current record (without adding xref)." msgstr "Zurück zum gegenwärtigen Datensatz (ohne Querverweis einzufügen)." #: src/gedlib/messages.c:452 msgid "Spouse unknown" msgstr "Unbekannter Ehegatte" #: src/gedlib/messages.c:453 msgid "No more history" msgstr "Ende der Liste" #: src/gedlib/messages.c:454 msgid "Bad history count" msgstr "Fehler in Liste" #: src/gedlib/messages.c:455 msgid "Bad backup history count" msgstr "Speicherzähler ungültig" #: src/gedlib/messages.c:456 msgid "Bad history length" msgstr "Speicherlänge ungültig" #: src/gedlib/messages.c:457 #, c-format msgid "Delete history (%d entries)?" msgstr "Speicher löschen (%d Einträge)?" #: src/gedlib/messages.c:458 msgid "Error accessing data" msgstr "Fehler bei Datenzugriff" #: src/gedlib/messages.c:459 msgid "Choose from history" msgstr "Aus Liste wählen" #: src/gedlib/messages.c:460 msgid "" "Cannot combine immutable (-i) or read-only (-r) with read-write (-w) access." msgstr "Kombination aus unveränderlich (-i) oder nur-lesend (-r) mit Lese-Schreibzugriff (-w) nicht möglich." #: src/gedlib/messages.c:461 msgid "Cannot combine forceopen (-f) and lock (-l) flags." msgstr "Kombination aus Datei sperren (-l) und erzwungenem Öffnen (-f) nicht möglich." #: src/gedlib/messages.c:462 msgid "Default path: " msgstr "Aktueller Pfad: " #: src/gedlib/messages.c:463 msgid "WARNING: missing keys" msgstr "ACHTUNG: Schlüssel fehlen." #: src/gedlib/messages.c:464 msgid "This does not point to another record in the database!" msgstr "Kein Zeiger auf anderen Datensatz!" #: src/gedlib/messages.c:465 msgid "enter file name" msgstr "Geben Sie den Dateinamen ein" #: src/gedlib/messages.c:466 #, c-format msgid "enter file name (*%s)" msgstr "Geben Sie den Dateinamen an (*%s)" #: src/gedlib/messages.c:467 msgid "There is no record with that key or reference." msgstr "Ein Datensatz mit diesem Schlüssel oder Verweis gibt es nicht." #: src/gedlib/messages.c:468 msgid "Database was corrupt." msgstr "Datenbank war beschädigt." #: src/gedlib/messages.c:471 msgid "Bad decimal number format." msgstr "Unzulässiges Dezimalformat." #: src/gedlib/messages.c:472 msgid "Bad hexidecimal number format." msgstr "Unzulässiges Hexadezimalformat." #: src/gedlib/messages.c:473 msgid "No replacement string on line." msgstr "Nichts zum Ersetzen gefunden." #: src/gedlib/messages.c:474 msgid "No original string on line." msgstr "Keine Quelle gefunden." #: src/gedlib/messages.c:475 msgid "Bad escape format." msgstr "Umschaltzeichen fehlerhaft." #: src/gedlib/messages.c:476 #, c-format msgid "%s: line %d (entry %d): %s" msgstr "%s: Zeile %d (Eintrag %d): %s" #: src/gedlib/messages.c:479 src/liflines/brwsmenu.c:26 msgid "q Return to main menu" msgstr "q Zum Hauptmenü" #: src/gedlib/messages.c:480 msgid "q Return to previous menu" msgstr "q Zum vorigen Menü" #: src/gedlib/messages.c:481 msgid "q Quit program" msgstr "q Programm beenden" #: src/gedlib/messages.c:482 msgid "Q Quit current database" msgstr "Q Aktuelle Datenbank schließen" #: src/gedlib/messages.c:485 msgid "b Browse the persons in the database" msgstr "b Eine Person aus der Datenbank anzeigen" #: src/gedlib/messages.c:486 msgid "s Search database" msgstr "s Datenbank durchsuchen" #: src/gedlib/messages.c:487 msgid "a Add information to the database" msgstr "a Informationen zur Datenbank hinzufügen" #: src/gedlib/messages.c:488 msgid "d Delete information from the database" msgstr "d Daten aus der Datenbank löschen" #: src/gedlib/messages.c:489 msgid "r Generate report by entering report name" msgstr "r Report erzeugen (Reportnamen eingeben)" #: src/gedlib/messages.c:490 msgid "p Pick a report from list and run" msgstr "p Report erzeugen (aus Liste wählen)" #: src/gedlib/messages.c:491 msgid "c Character set options" msgstr "c Länderspezifische Einstellungen" #: src/gedlib/messages.c:492 msgid "t Modify character translation tables" msgstr "t Zeichenumwandlungstabellen bearbeiten" #: src/gedlib/messages.c:493 msgid "u Miscellaneous utilities" msgstr "u Sonstiges" #: src/gedlib/messages.c:494 msgid "x Handle source, event and other records" msgstr "x Quell-, Ereignis- und sonstige Datensätze bearbeiten" #: src/gedlib/messages.c:497 msgid "What utility do you want to perform?" msgstr "Welches Hilfsprogramm möchten Sie ausführen?" #: src/gedlib/messages.c:498 msgid "s Save the database in a GEDCOM file" msgstr "s Datenbank als GEDCOM speichern" #: src/gedlib/messages.c:499 msgid "r Read in data from a GEDCOM file" msgstr "r GEDCOM-Datei einlesen" #: src/gedlib/messages.c:500 msgid "R Pick a GEDCOM file and read in" msgstr "R GEDCOM-Datei aus Liste wählen und einlesen" #: src/gedlib/messages.c:501 msgid "k Find a person's key value" msgstr "k Schlüssel einer Person finden" #: src/gedlib/messages.c:502 msgid "i Identify a person from key value" msgstr "i Eine Person per Schlüssel auswählen" #: src/gedlib/messages.c:503 msgid "d Show database statistics" msgstr "d Datenbankstatistik anzeigen" #: src/gedlib/messages.c:504 msgid "m Show memory statistics" msgstr "m Speicherstatistik anzeigen" #: src/gedlib/messages.c:505 msgid "e Edit the place abbreviation file" msgstr "e Geographische Abkürzungen bearbeiten" #: src/gedlib/messages.c:506 msgid "o Edit the user options file" msgstr "o Nutzereinstellungen bearbeiten" #: src/gedlib/messages.c:509 msgid "What activity do you want to perform?" msgstr "Was möchten Sie tun?" #: src/gedlib/messages.c:510 msgid "s Browse source records" msgstr "s Quelldatensätze anzeigen" #: src/gedlib/messages.c:511 msgid "e Browse event records" msgstr "e Ereignisdatensätze anzeigen" #: src/gedlib/messages.c:512 msgid "x Browse other records" msgstr "x Sonstige Datensätze anzeigen" #: src/gedlib/messages.c:513 msgid "1 Add a source record to the database" msgstr "1 Eine Quelle zur Datenbank hinzufügen" #: src/gedlib/messages.c:514 msgid "2 Edit source record from the database" msgstr "2 Quell-Datensatz bearbeiten" #: src/gedlib/messages.c:515 msgid "3 Add an event record to the database" msgstr "3 Ein Ereignis zur Datenbank hinzufügen" #: src/gedlib/messages.c:516 msgid "4 Edit event record from the database" msgstr "4 Ereignis-Datensatz bearbeiten" #: src/gedlib/messages.c:517 msgid "5 Add an other record to the database" msgstr "5 Sonstigen Datensatz anlegen" #: src/gedlib/messages.c:518 msgid "6 Edit other record from the database" msgstr "6 Sonstigen Datensatz bearbeiten" #: src/gedlib/messages.c:521 msgid "Translation Tables" msgstr "Übersetzungstabellen" #: src/gedlib/messages.c:522 msgid "e edit individual tables (in db)" msgstr "e Tab. d. Personen bearb. (DB)" #: src/gedlib/messages.c:523 msgid "l load a table from a file (into db)" msgstr "I Tabelle aus Datei laden (in DB)" #: src/gedlib/messages.c:524 msgid "s save a table to a file (from db)" msgstr "s Tabelle aus Datenbank in Datei speichern" #: src/gedlib/messages.c:525 msgid "x export all tables (from db to files)" msgstr "x Alle Tabellen aus Datenbank in Datei speichern" #: src/gedlib/messages.c:526 msgid "i import all tables (from files into db)" msgstr "i Alle Tabellen aus Datei(en) in Datenbank importieren" #: src/gedlib/messages.c:527 msgid "export/import directory:" msgstr "Verzeichnis exportieren/importieren" #: src/gedlib/messages.c:530 msgid "Which character mapping do you want to edit?" msgstr "Welche Umwandlungstabelle möchten Sie bearbeiten?" #: src/gedlib/messages.c:531 msgid "Which character mapping do you want to save?" msgstr "Welche Umwandlungstabelle möchten Sie speichern?" #: src/gedlib/messages.c:534 msgid "Not implemented yet" msgstr "Noch nicht fertig" #: src/gedlib/messages.c:537 msgid "What do you want to add?" msgstr "Was möchten Sie tun?" #: src/gedlib/messages.c:538 msgid "p Person - add new person to the database" msgstr "p Neue Person zur Datenbank hinzufügen" #: src/gedlib/messages.c:539 msgid "f Family - create family record from one or two spouses" msgstr "f Aus ein oder zwei Ehegatten eine Familie erzeugen" #: src/gedlib/messages.c:540 msgid "c Child - add a child to an existing family" msgstr "c Kind zu bestehender Familie hinzufügen" #: src/gedlib/messages.c:541 msgid "s Spouse - add a spouse to an existing family" msgstr "s Einen Ehegatten zu bestehender Familie hinzufügen" #: src/gedlib/messages.c:544 msgid "What do you want to remove?" msgstr "Was möchten Sie tun?" #: src/gedlib/messages.c:545 msgid "c Child - remove a child from his/her family" msgstr "c Ein Kind aus seiner Familie entfernen" #: src/gedlib/messages.c:546 msgid "s Spouse - remove a spouse from a family" msgstr "s Einen Ehegatten aus seiner Familie entfernen" #: src/gedlib/messages.c:547 msgid "i Individual - remove a person completely" msgstr "i Eine Person vollständig löschen" #: src/gedlib/messages.c:548 msgid "f Family - remove a family completely" msgstr "f Eine Familie vollständig löschen" #: src/gedlib/messages.c:549 msgid "o Other - remove other record completely" msgstr "o Einen Datensatz vollständig löschen" #: src/gedlib/messages.c:552 msgid "How would you like to find a record?" msgstr "Wie möchten Sie nach dem Datensatz suchen?" #: src/gedlib/messages.c:555 msgid "Performing full name scan" msgstr "Eine vollständige Suche durchführen" #: src/gedlib/messages.c:556 msgid "Performing name fragment scan" msgstr "Nach Namensteil suchen" #: src/gedlib/messages.c:557 msgid "Performing refn scan" msgstr "Nach REFN suchen" #: src/gedlib/messages.c:558 msgid "Performing source scan" msgstr "Nach Quelle suchen" #: src/gedlib/messages.c:559 msgid "No records found in scan" msgstr "Bei der Suche wurden keine Datensätze gefunden" #: src/gedlib/messages.c:562 msgid "abt %1" msgstr "um %1" #: src/gedlib/messages.c:563 msgid "about %1" msgstr "um %1" #: src/gedlib/messages.c:564 msgid "est %1" msgstr "etwa %1" #: src/gedlib/messages.c:565 msgid "estimated %1" msgstr "geschätzt %1" #: src/gedlib/messages.c:566 msgid "cal %1" msgstr "errechnet %1" #: src/gedlib/messages.c:567 msgid "calculated %1" msgstr "errechnet %1" #: src/gedlib/messages.c:568 msgid "fr %1" msgstr "von %1" #: src/gedlib/messages.c:569 msgid "from %1" msgstr "von %1" #: src/gedlib/messages.c:570 src/gedlib/messages.c:571 msgid "to %1" msgstr "bis %1" #: src/gedlib/messages.c:572 msgid "fr %1 to %2" msgstr "von %1 bis %2" #: src/gedlib/messages.c:573 msgid "from %1 to %2" msgstr "von %1 bis %2" #: src/gedlib/messages.c:574 msgid "bef %1" msgstr "vor %1" #: src/gedlib/messages.c:575 msgid "before %1" msgstr "vor %1" #: src/gedlib/messages.c:576 msgid "aft %1" msgstr "nach %1" #: src/gedlib/messages.c:577 msgid "after %1" msgstr "nach %1" #: src/gedlib/messages.c:578 msgid "bet %1 and %2" msgstr "zw. %1 u. %2" #: src/gedlib/messages.c:579 msgid "between %1 and %2" msgstr "zwischen %1 und %2" #: src/gedlib/messages.c:582 msgid "B.C." msgstr "v. Chr." #: src/gedlib/messages.c:584 msgid "BC" msgstr "v. Chr." #: src/gedlib/messages.c:586 msgid "B.C.E." msgstr "v. Chr." #: src/gedlib/messages.c:588 msgid "BCE" msgstr "v. Chr." #: src/gedlib/messages.c:590 msgid "A.D." msgstr "n. Chr." #: src/gedlib/messages.c:592 msgid "AD" msgstr "n. Chr." #: src/gedlib/messages.c:594 msgid "C.E." msgstr "n. Chr." #: src/gedlib/messages.c:596 msgid "CE" msgstr "n. Chr." #: src/gedlib/messages.c:599 msgid "%1J" msgstr "%1Jul" #: src/gedlib/messages.c:601 msgid "%1 HEB" msgstr "%1 Jüd" #: src/gedlib/messages.c:603 msgid "%1 FR" msgstr "%1 Rev" #: src/gedlib/messages.c:605 msgid "%1 AUC" msgstr "%1 Röm" #: src/gedlib/messages.c:607 msgid "jan" msgstr "Jan." #: src/gedlib/messages.c:608 msgid "january" msgstr "Januar" #: src/gedlib/messages.c:609 msgid "feb" msgstr "Feb." #: src/gedlib/messages.c:610 msgid "february" msgstr "Februar" #: src/gedlib/messages.c:611 msgid "mar" msgstr "März" #: src/gedlib/messages.c:612 msgid "march" msgstr "März" #: src/gedlib/messages.c:613 msgid "apr" msgstr "Apr." #: src/gedlib/messages.c:614 msgid "april" msgstr "April" #: src/gedlib/messages.c:616 msgid "**may" msgstr "**Mai" #: src/gedlib/messages.c:617 msgid "may" msgstr "Mai" #: src/gedlib/messages.c:618 msgid "jun" msgstr "Juni" #: src/gedlib/messages.c:619 msgid "june" msgstr "Juni" #: src/gedlib/messages.c:620 msgid "jul" msgstr "Juli" #: src/gedlib/messages.c:621 msgid "july" msgstr "Juli" #: src/gedlib/messages.c:622 msgid "aug" msgstr "Aug." #: src/gedlib/messages.c:623 msgid "august" msgstr "August" #: src/gedlib/messages.c:624 msgid "sep" msgstr "Sep." #: src/gedlib/messages.c:625 msgid "september" msgstr "September" #: src/gedlib/messages.c:626 msgid "oct" msgstr "Okt." #: src/gedlib/messages.c:627 msgid "october" msgstr "Oktober" #: src/gedlib/messages.c:628 msgid "nov" msgstr "Nov." #: src/gedlib/messages.c:629 msgid "november" msgstr "November" #: src/gedlib/messages.c:630 msgid "dec" msgstr "Dez." #: src/gedlib/messages.c:631 msgid "december" msgstr "Dezember" #: src/gedlib/messages.c:633 msgid "tsh" msgstr "Tis" #: src/gedlib/messages.c:634 msgid "tishri" msgstr "Tischri" #: src/gedlib/messages.c:635 msgid "csh" msgstr "Che" #: src/gedlib/messages.c:636 msgid "cheshvan" msgstr "Marcheschwan" #: src/gedlib/messages.c:637 msgid "ksl" msgstr "Kis" #: src/gedlib/messages.c:638 msgid "kislev" msgstr "Kislew" #: src/gedlib/messages.c:639 msgid "tvt" msgstr "Twt" #: src/gedlib/messages.c:640 msgid "tevet" msgstr "Tewet" #: src/gedlib/messages.c:641 msgid "shv" msgstr "Sch" #: src/gedlib/messages.c:642 msgid "shevat" msgstr "Schwat" #: src/gedlib/messages.c:643 msgid "adr" msgstr "Adr" #: src/gedlib/messages.c:644 msgid "adar" msgstr "Adar" #: src/gedlib/messages.c:645 msgid "ads" msgstr "Ads" #: src/gedlib/messages.c:646 msgid "adar sheni" msgstr "Adar" #: src/gedlib/messages.c:647 msgid "nsn" msgstr "Nis" #: src/gedlib/messages.c:648 msgid "nisan" msgstr "Nissan" #: src/gedlib/messages.c:649 msgid "iyr" msgstr "Ijj" #: src/gedlib/messages.c:650 msgid "iyar" msgstr "Ijjar" #: src/gedlib/messages.c:651 msgid "svn" msgstr "Siw" #: src/gedlib/messages.c:652 msgid "sivan" msgstr "Siwan" #: src/gedlib/messages.c:653 msgid "tmz" msgstr "Tam" #: src/gedlib/messages.c:654 msgid "tamuz" msgstr "Tammus" #: src/gedlib/messages.c:655 msgid "aav" msgstr "Aw" #: src/gedlib/messages.c:656 msgid "av" msgstr "Aw" #: src/gedlib/messages.c:657 msgid "ell" msgstr "El" #: src/gedlib/messages.c:658 msgid "elul" msgstr "Elul" #: src/gedlib/messages.c:660 msgid "vend" msgstr "Vend" #: src/gedlib/messages.c:661 msgid "vendemiaire" msgstr "Vendémiaire" #: src/gedlib/messages.c:662 msgid "brum" msgstr "brum" #: src/gedlib/messages.c:663 msgid "brumaire" msgstr "Brumaire" #: src/gedlib/messages.c:664 msgid "frim" msgstr "Frim" #: src/gedlib/messages.c:665 msgid "frimaire" msgstr "Frimaire" #: src/gedlib/messages.c:666 msgid "nivo" msgstr "Nivo" #: src/gedlib/messages.c:667 msgid "nivose" msgstr "Nivôse" #: src/gedlib/messages.c:668 msgid "pluv" msgstr "Pluv" #: src/gedlib/messages.c:669 msgid "pluviose" msgstr "Pluviôse" #: src/gedlib/messages.c:670 msgid "vent" msgstr "Vent" #: src/gedlib/messages.c:671 msgid "ventose" msgstr "Ventôse" #: src/gedlib/messages.c:672 msgid "germ" msgstr "Germ" #: src/gedlib/messages.c:673 msgid "germinal" msgstr "Germinal" #: src/gedlib/messages.c:674 msgid "flor" msgstr "Flor" #: src/gedlib/messages.c:675 msgid "floreal" msgstr "Floréal" #: src/gedlib/messages.c:676 msgid "prai" msgstr "Prai" #: src/gedlib/messages.c:677 msgid "prairial" msgstr "Prairial" #: src/gedlib/messages.c:678 msgid "mess" msgstr "Mess" #: src/gedlib/messages.c:679 msgid "messidor" msgstr "Messidor" #: src/gedlib/messages.c:680 msgid "ther" msgstr "Ther" #: src/gedlib/messages.c:681 msgid "thermidor" msgstr "Thermidor" #: src/gedlib/messages.c:682 msgid "fruc" msgstr "Fruc" #: src/gedlib/messages.c:683 msgid "fructidor" msgstr "Fructidor" #: src/gedlib/messages.c:684 msgid "comp" msgstr "Erg.tage" #: src/gedlib/messages.c:685 msgid "jour_complementairs" msgstr "Ergänzungstage" #: src/gedlib/node.c:610 msgid "NO NAME" msgstr "KEIN NAME" #: src/gedlib/node.c:1167 #, c-format msgid "Node memory leaks:" msgstr "Speicherlecks:" #: src/gedlib/node.c:1170 src/gedlib/record.c:361 src/interp/pvalalloc.c:301 #, c-format msgid "%d item leaked" msgid_plural "%d items leaked" msgstr[0] "%d Eintrag verloren" msgstr[1] "%d Einträge verloren" #: src/gedlib/record.c:358 #, c-format msgid "Record memory leaks:" msgstr "Speicherlecks:" #: src/gedlib/remove.c:250 msgid "Families may not yet be removed in this fashion." msgstr "Familien können so noch nicht entfernt werden." #. TRANSLATORS: Character set conversion from external editor to database internal #: src/gedlib/translat.c:100 msgid "Editor to Internal" msgstr "Umwandlung Editor --> Intern" #. TRANSLATORS: Character set conversion from database internal to external editor #: src/gedlib/translat.c:102 msgid "Internal to Editor" msgstr "Umwandlung Intern --> Editor" #: src/gedlib/translat.c:103 msgid "GEDCOM to Internal" msgstr "Umwandlung GEDCOM --> Intern" #: src/gedlib/translat.c:104 msgid "Internal to GEDCOM" msgstr "Umwandlung Intern --> GEDCOM" #: src/gedlib/translat.c:105 msgid "Display to Internal" msgstr "Umwandlung Monitor --> Intern" #: src/gedlib/translat.c:106 msgid "Internal to Display" msgstr "Umwandlung Intern --> Monitor" #: src/gedlib/translat.c:107 msgid "Report to Internal" msgstr "Umwandlung Report --> Intern" #: src/gedlib/translat.c:108 msgid "Internal to Report" msgstr "Umwandlung Intern --> Report " #. TRANSLATORS: key for "Editor to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:119 msgid "menu|trantable|e" msgstr "e" #. TRANSLATORS: key for "Internal to Editor" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:122 msgid "menu|trantable|m" msgstr "m" #. TRANSLATORS: key for "GEDCOM to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:125 msgid "menu|trantable|i" msgstr "i" #. TRANSLATORS: key for "Internal to GEDCOM" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:128 msgid "menu|trantable|x" msgstr "x" #. TRANSLATORS: key for "Display to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:131 msgid "menu|trantable|g" msgstr "g" #. TRANSLATORS: key for "Internal to Display" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:134 msgid "menu|trantable|d" msgstr "d" #. TRANSLATORS: key for "Report to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:137 msgid "menu|trantable|p" msgstr "p" #. TRANSLATORS: key for "Internal to Report" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:140 msgid "menu|trantable|r" msgstr "r" #. TRANSLATORS: db internal translation table note for tt menu #: src/gedlib/translat.c:473 #, c-format msgid " (dbint tt: %s)" msgstr " (dbint tt: %s)" #: src/gedlib/valid.c:75 msgid "This person record does not have a name line." msgstr "Dieser Datensatz hat keine Namenszeile." #: src/gedlib/xlat.c:347 #, c-format msgid "ttpath get_conversion_dyntt:from <%s> to <%s>: %s" msgstr "Kann Zeichentabelle nicht umwandeln (von <%s> zu <%s>): %s" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 msgid "succeeded" msgstr "erfolgreich" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 msgid "failed" msgstr "fehlgeschlagen" #: src/gedlib/xlat.c:369 #, c-format msgid "ttpath get_subcoding_dyntt from <%s> to subcode <%s>: %s" msgstr "ttpath get_subcoding_dyntt von <%s> nach subcode <%s>: %s" #: src/gedlib/xlat.c:435 msgid "No TTPATH config variable" msgstr "Konfigurationsvariable TTPATH undefiniert" #: src/gedlib/xlat.c:464 #, c-format msgid "ttpath checking dir <%s>" msgstr "ttpath: prüfe Verzeichnis <%s>" #: src/gedlib/xlat.c:478 #, c-format msgid "ttpath file <%s> typed as %d" msgstr "ttpath: Datei <%s>: Typ %d" #: src/gedlib/xlat.c:690 msgid "(no conversion)" msgstr "(Keine Umwandlung)" #. TRANSLATORS: steps in a chain of codeset conversions, eg, Editor-to-Internal #: src/gedlib/xlat.c:713 #, c-format msgid "%d step" msgid_plural "%d steps" msgstr[0] "%d Schritt" msgstr[1] "%d Schritte" #: src/gedlib/xreffile.c:400 #, c-format msgid "Corrupt DELETESET %c" msgstr "Beschädigter DELETESET %c" #: src/gedlib/xreffile.c:425 #, c-format msgid "Tried to add already-deleted record (%ld) to xref (%c)!" msgstr "Versuch, auf bereits gelöschten Datensatz (%ld) zu verweisen (%c)!" #: src/interp/alloc.c:798 #, c-format msgid "Error: file \"%s\": line %d: " msgstr "Fehler: Datei \"%s\": Zeile %d: " #: src/interp/alloc.c:903 #, c-format msgid "%s: the arg must be an integer." msgstr "%s: Argument muss ganzzahlig sein." #: src/interp/alloc.c:904 #, c-format msgid "%s: the arg #%s must be an integer." msgstr "%s: Argument #%s muss ganzzahlig sein." #: src/interp/alloc.c:905 #, c-format msgid "%s: the arg #%s must be a float." msgstr "%s: Argument #%s muss Liste (float) sein." #: src/interp/alloc.c:906 #, c-format msgid "%s: the arg must be a string." msgstr "%s: Argument muss Zeichenfolge sein." #: src/interp/alloc.c:907 #, c-format msgid "%s: the arg #%s must be a string." msgstr "%s: Argument #%s muss Zeichenfolge sein." #: src/interp/alloc.c:908 #, c-format msgid "%s: null arg not permissible." msgstr "%s: leeres Argument nicht erlaubt." #: src/interp/alloc.c:909 #, c-format msgid "%s: the arg must be a filename." msgstr "%s: Argument muss Dateiname sein." #: src/interp/alloc.c:910 #, c-format msgid "%s: the arg must be a node or string." msgstr "%s: Argument muss Knoten oder Zeichenfolge sein." #: src/interp/alloc.c:911 #, c-format msgid "%s: the arg must be a person." msgstr "%s: Argument muss Person sein." #: src/interp/alloc.c:912 #, c-format msgid "%s: the arg #%s must be a person." msgstr "%s: Argument #%s muss Person sein." #: src/interp/alloc.c:913 #, c-format msgid "%s: the arg must be a family." msgstr "%s: Argument muss Familie sein." #: src/interp/alloc.c:914 #, c-format msgid "%s: the arg #%s must be a family." msgstr "%s: Argument #%s muss Familie sein." #: src/interp/alloc.c:915 #, c-format msgid "%s: the arg #%s must be a record." msgstr "%s: Argument #%s muss Datensatz sein." #: src/interp/alloc.c:916 #, c-format msgid "%s: the arg must be a node." msgstr "%s: Argument muss Knoten sein." #: src/interp/alloc.c:917 #, c-format msgid "%s: the arg #%s must be a node." msgstr "%s: Argument #%s muss Knoten sein." #: src/interp/alloc.c:918 #, c-format msgid "%s: the arg must be a variable." msgstr "%s: Argument muss Variable sein." #: src/interp/alloc.c:919 #, c-format msgid "%s: the arg #%s must be a variable." msgstr "%s: Argument #%s muss Variable sein." #: src/interp/alloc.c:920 #, c-format msgid "%s: the arg #%s must be a boolean." msgstr "%s: Argument #%s muss boolesch sein." #: src/interp/alloc.c:921 #, c-format msgid "%s: the arg must be a list." msgstr "%s: Argument muss Liste sein." #: src/interp/alloc.c:922 #, c-format msgid "%s: the arg #%s must be a list." msgstr "%s: Argument #%s muss Liste sein." #: src/interp/alloc.c:923 #, c-format msgid "%s: the arg #%s must be a table." msgstr "%s: Argument #%s muss Tabelle sein." #: src/interp/alloc.c:924 #, c-format msgid "%s: the arg must be a set." msgstr "%s: Argument muss Liste sein." #: src/interp/alloc.c:925 #, c-format msgid "%s: the arg #%s must be a set." msgstr "%s: Argument #%s muss Liste sein." #: src/interp/alloc.c:926 #, c-format msgid "%s: Bad arguments" msgstr "%s: Ungültige Argumente" #: src/interp/alloc.c:927 #, c-format msgid "%s: the arg had a major error." msgstr "%s: Schwerer Fehler bei Argument." #: src/interp/alloc.c:928 #, c-format msgid "%s: the arg #%s had a major error." msgstr "%s: Schwerer Fehler bei Argument #%s." #: src/interp/alloc.c:929 #, c-format msgid "%s: the arg #%s would cause an arithmetic exception." msgstr "%s: Argument #%s würde eine Arithmetikausnahme auslösen." #: src/interp/builtin.c:111 msgid "Enter integer for program" msgstr "Ganze Zahl eingeben" #: src/interp/builtin.c:181 msgid "Identify person for program:" msgstr "Welche Person soll bearbeitet werden? " #: src/interp/builtin.c:206 msgid "Enter a spouse from family." msgstr "Einen Gatten eingeben." #: src/interp/builtin.c:207 msgid "Enter a sibling from family." msgstr "Bruder/Schwester eingeben." #: src/interp/builtin.c:240 msgid "Identify list of persons for program:" msgstr "Liste mit Personen eingeben:" #: src/interp/builtin.c:329 msgid "name: person does not have a name" msgstr "name: Person hat keinen Namen" #: src/interp/builtin.c:385 msgid "fullname: person does not have a name" msgstr "fullname: Person hat keinen Namen" #: src/interp/builtin.c:412 msgid "surname: person does not have a name" msgstr "surname: Person hat keinen Namen" #: src/interp/builtin.c:437 msgid "soundex: person does not have a name" msgstr "soundex: Person hat keinen Namen" #: src/interp/builtin.c:500 #, c-format msgid "Bad escape code at offset %d in bytecode string <%s>" msgstr "Escape Code %d in Zeichenkette <%s> ungültig" #: src/interp/builtin.c:643 msgid "(givens) person does not have a name" msgstr "(givens) Person hat keinen Namen" #: src/interp/builtin.c:670 #, c-format msgid "set(%s, ) is invalid" msgstr "set(%s, ) ist ungültig" #: src/interp/builtin.c:1191 msgid "first" msgstr "Erste(r)" #: src/interp/builtin.c:1191 msgid "second" msgstr "Zweite(r)" #: src/interp/builtin.c:1191 msgid "third" msgstr "Dritte(r)" #: src/interp/builtin.c:1191 msgid "fourth" msgstr "Vierte(r)" #: src/interp/builtin.c:1191 msgid "fifth" msgstr "Fünfte(r)" #: src/interp/builtin.c:1192 msgid "sixth" msgstr "Sechste(r)" #: src/interp/builtin.c:1192 msgid "seventh" msgstr "Siebente(r)" #: src/interp/builtin.c:1192 msgid "eighth" msgstr "Achte(r)" #: src/interp/builtin.c:1192 msgid "ninth" msgstr "Neunte(r)" #: src/interp/builtin.c:1192 msgid "tenth" msgstr "Zehnte(r)" #: src/interp/builtin.c:1193 msgid "eleventh" msgstr "Elfte(r)" #: src/interp/builtin.c:1193 msgid "twelfth" msgstr "Zwölfte(r)" #: src/interp/builtin.c:1210 #, c-format msgid "%ldth" msgstr "%ldte" #: src/interp/builtin.c:1220 msgid "zero" msgstr "Null" #: src/interp/builtin.c:1220 msgid "one" msgstr "Eins" #: src/interp/builtin.c:1220 msgid "two" msgstr "Zwei" #: src/interp/builtin.c:1220 msgid "three" msgstr "Drei" #: src/interp/builtin.c:1220 msgid "four" msgstr "Vier" #: src/interp/builtin.c:1220 msgid "five" msgstr "Fünf" #: src/interp/builtin.c:1221 msgid "six" msgstr "Sechs" #: src/interp/builtin.c:1221 msgid "seven" msgstr "Sieben" #: src/interp/builtin.c:1221 msgid "eight" msgstr "Acht" #: src/interp/builtin.c:1221 msgid "nine" msgstr "Neun" #: src/interp/builtin.c:1221 msgid "ten" msgstr "Zehn" #: src/interp/builtin.c:1222 msgid "eleven" msgstr "Elf" #: src/interp/builtin.c:1222 msgid "twelve" msgstr "Zwölf" #: src/interp/builtin.c:2173 msgid "the arg to empty is not a list, table or set" msgstr "Argument von empty muss Liste, Tabelle oder Menge sein" #: src/interp/builtin.c:2283 msgid "the arg to length is not a list, table or set" msgstr "Argument von length muss Liste, Tabelle oder Menge sein" #: src/interp/builtin.c:2470 msgid "He" msgstr "Er" #: src/interp/builtin.c:2470 msgid "he" msgstr "er" #: src/interp/builtin.c:2470 msgid "His" msgstr "Sein" #: src/interp/builtin.c:2470 msgid "his" msgstr "sein" #: src/interp/builtin.c:2470 msgid "him" msgstr "Ihm" #: src/interp/builtin.c:2472 msgid "She" msgstr "Sie" #: src/interp/builtin.c:2472 msgid "she" msgstr "sie" #: src/interp/builtin.c:2472 msgid "Her" msgstr "Ihrer" #: src/interp/builtin.c:2472 msgid "her" msgstr "ihrer" #: src/interp/builtin.c:2472 msgid "her_" msgstr "ihrer_" #: src/interp/builtin.c:2850 msgid "(trimname) person does not have a name" msgstr "(trimname) Person hat keinen Namen" #: src/interp/builtin.c:2940 msgid "Sunday" msgstr "Sonntag" #: src/interp/builtin.c:2940 msgid "Monday" msgstr "Montag" #: src/interp/builtin.c:2940 msgid "Tuesday" msgstr "Dienstag" #: src/interp/builtin.c:2941 msgid "Wednesday" msgstr "Mittwoch" #: src/interp/builtin.c:2941 msgid "Thursday" msgstr "Donnerstag" #: src/interp/builtin.c:2941 msgid "Friday" msgstr "Freitag" #: src/interp/builtin.c:2941 msgid "Saturday" msgstr "Samstag" #: src/interp/eval.c:244 #, c-format msgid "Undefined func: %s" msgstr "Prozedur %s nicht definiert" #: src/interp/eval.c:246 #, c-format msgid "Ambiguous call to func: %s" msgstr "Unklarer Aufruf in Prozedur: %s" #: src/interp/interp.c:247 #, c-format msgid "Report not found: %s " msgstr "Report nicht gefunden: %s " #: src/interp/interp.c:258 #, c-format msgid "Error: file <%s> not found" msgstr "Fehler: Datei <%s> nicht gefunden" #: src/interp/interp.c:316 msgid "Program contains errors.\n" msgstr "Programm enthält Fehler.\n" #: src/interp/interp.c:323 msgid "Program needs a starting procedure.\n" msgstr "Programm benötigt Startargument.\n" #: src/interp/interp.c:340 #, c-format msgid "Proc %s must be called with %d (not %d) parameters." msgstr "Prozedur %s muss mit %d (nicht %d) Parametern aufgerufen werden." #: src/interp/interp.c:355 msgid "Program is running..." msgstr "Programm läuft..." #: src/interp/interp.c:410 msgid "Program was run successfully.\n" msgstr "Programm wurde erfolgreich ausgeführt.\n" #: src/interp/interp.c:414 msgid "Program was cancelled.\n" msgstr "Programm wurde abgebrochen.\n" #: src/interp/interp.c:416 msgid "Program was not run because of errors.\n" msgstr "Programm wurde wegen Fehlern nicht ausgeführt.\n" #: src/interp/interp.c:506 #, c-format msgid "Error: file <%s> not found: %s\n" msgstr "Fehler: Datei <%s> nicht gefunden: %s\n" #: src/interp/interp.c:538 #, c-format msgid "" "\n" "Report duration %s (ui duration %s)\n" msgstr "\nAusführungszeit %s (UI-Zeit %s)\n" #: src/interp/interp.c:610 #, c-format msgid "identifier: %s should be a string\n" msgstr "Kennung: %s muss eine Zeichenkette sein\n" #: src/interp/interp.c:1778 #, c-format msgid "Undefined proc: %s" msgstr "Prozedur %s nicht definiert" #: src/interp/interp.c:1780 #, c-format msgid "Ambiguous call to proc: %s" msgstr "Unklarer Aufruf in Prozedur: %s" #: src/interp/interp.c:2017 #, c-format msgid "Duplicate proc %s (lines %d and %d) in report: %s" msgstr "Prozedur %s (Zeilen %d und %d) in Report %s doppelt" #: src/interp/interp.c:2047 #, c-format msgid "Duplicate func %s (lines %d and %d) in report: %s" msgstr "Funktion %s (Zeilen %d und %d) in Report %s doppelt" #: src/interp/interp.c:2110 msgid "This report requires a newer program to run\n" msgstr "Für diesen Report wird eine neuere Programmversion benötigt.\n" #: src/interp/interp.c:2166 #, c-format msgid "Program forgot to unlock %d record" msgid_plural "Program forgot to unlock %d records" msgstr[0] "Programm hat %d Datensatz nicht entsperrt" msgstr[1] "Programm hat %d Datensätze nicht entsperrt" #: src/interp/intrpseq.c:303 msgid "missing or incorrect value for sort" msgstr "Fehlender oder ungültiger Wert für sort" #: src/interp/lex.c:219 #, c-format msgid "" "String constant overflowing internal buffer tokbuf len=%d, file: %s, start " "line: %ld" msgstr "String constant overflowing internal buffer tokbuf len=%d, file: %s, start line: %ld" #: src/interp/more.c:648 msgid "Please choose from the following list." msgstr "Wählen Sie aus der folgenden Liste" #: src/interp/more.c:685 msgid "Illegal type found in list in menuchoose" msgstr "Ungültiger Menüeintrag" #: src/interp/more.c:976 msgid "error evaluating arg to lock" msgstr "Zweites Argument von lock ist ungültig" #: src/interp/more.c:982 msgid "null arg in lock" msgstr "Fehlendes Argument in lock" #: src/interp/more.c:993 msgid "node passed to lock must be inside a record" msgstr "Argument von lock muss Teil eines Datensatzes sein" #: src/interp/more.c:999 msgid "the arg to lock must be a record or node" msgstr "Bei lock muss Person oder Familie angegeben werden" #: src/interp/more.c:1007 msgid "Error: there are 999,999 locks on arg to lock" msgstr "Fehler: Argument von lock hat bereits 999999 Sperrungen" #: src/interp/more.c:1027 msgid "error evaluating arg to unlock" msgstr "Argument von unlock ist ungültig" #: src/interp/more.c:1033 msgid "null arg in unlock" msgstr "Fehlendes Argument in unlock" #: src/interp/more.c:1044 msgid "node passed to unlock must be inside a record" msgstr "Argument von unlock muss Teil eines Datensatzes sein" #: src/interp/more.c:1050 msgid "the arg to unlock must be a record or node" msgstr "Bei unlock muss Person oder Familie angegeben werden" #: src/interp/pvalalloc.c:295 #, c-format msgid "PVALUE memory leak report:" msgstr "Speicherlecks von PVALUEs:" #: src/interp/pvalmath.c:70 #, c-format msgid "Nonnumeric type to operation %s: %s" msgstr "Operation %s benötigt numerisches Argument: %s" #: src/interp/pvalmath.c:85 #, c-format msgid "Illegal value to operation %s: %s" msgstr "Ungültiger Wert in Operation %s: %s" #: src/interp/pvalmath.c:411 #, c-format msgid "%s: not compatible numeric types: %s and %s" msgstr "%s: inkompatible numerische Typen: %s und %s" #: src/interp/pvalue.c:810 #, c-format msgid "%s: Incomparable types: %s and %s" msgstr "%s: unvergleichbare Typen: %s und %s" #: src/interp/pvalue.c:907 msgid "NOT PVALUE: NULL!" msgstr "Kein PVALUE: NULL" #: src/interp/pvalue.c:911 #, c-format msgid "NOT PVALUE: invalid type=%d)!" msgstr "Kein PVALUE: ungültiger Typ %d" #: src/interp/pvalue.c:949 #, c-format msgid "%d item" msgid_plural "%d items" msgstr[0] "%d Eintrag" msgstr[1] "%d Einträge" #: src/interp/pvalue.c:956 #, c-format msgid "%d entry" msgid_plural "%d entries" msgstr[0] "%d Eintrag" msgstr[1] "%d Einträge" #: src/interp/pvalue.c:963 #, c-format msgid "%d record" msgid_plural "%d records" msgstr[0] "%d Datensatz" msgstr[1] "%d Datensätze" #: src/interp/pvalue.c:970 #, c-format msgid "%d element" msgid_plural "%d elements" msgstr[0] "%d Element" msgstr[1] "%d Elements" #: src/interp/progerr.c:125 msgid "Enter d for debugger, q to quit" msgstr "Aufruf: d für Debugger, q Zurück" #: src/interp/progerr.c:140 #, c-format msgid "Display local (%d var)" msgid_plural "Display locals (%d vars)" msgstr[0] "Lokale Variablen (%d Variable)" msgstr[1] "Lokale Variablen (%d Variablen)" #: src/interp/progerr.c:146 #, c-format msgid "Display global (%d var)" msgid_plural "Display globals (%d vars)" msgstr[0] "Globale Variablen (%d Variable)" msgstr[1] "Globale Variablen (%d Variablen)" #: src/interp/progerr.c:151 #, c-format msgid "Call stack has %d higher level" msgid_plural "Call stack has %d higher levels" msgstr[0] "Aufrufstack enthält %d höhere Ebene" msgstr[1] "Aufrufstack enthält %d höhere Ebenen" #: src/interp/progerr.c:154 msgid " Go up one level" msgstr "Eine Ebene höher" #: src/interp/progerr.c:160 #, c-format msgid "Call stack has %d lower level" msgid_plural "Call stack has %d lower levels" msgstr[0] "Aufrufstack hat %d niedrigere Ebene" msgstr[1] "Aufrufstack hat %d niedrigere Ebenen" #: src/interp/progerr.c:164 msgid " Go down one level" msgstr "Eine Ebene höher" #: src/interp/progerr.c:169 msgid "Quit debugger" msgstr "Debugger beenden" #: src/interp/progerr.c:171 msgid "Report debugger" msgstr "Report debuggen" #: src/interp/progerr.c:175 msgid "Local variables" msgstr "Lokale Variablen" #: src/interp/progerr.c:178 msgid "Global variables" msgstr "Globale Variablen" #: src/interp/progerr.c:338 msgid "Report cancelled" msgstr "Report abgebrochen" #: src/interp/progerr.c:346 msgid "Report file: " msgstr "Datei für Reporte: " #: src/interp/progerr.c:355 #, c-format msgid "Parsing Error at line %d: " msgstr "Fehler bei Analyse von Zeile %d: " #: src/interp/progerr.c:357 #, c-format msgid "Runtime Error at line %d: " msgstr "Laufzeitfehler in Zeile %d: " #: src/interp/progerr.c:360 msgid "Aborting: " msgstr "Abbruch: " #: src/interp/rassa.c:242 #, c-format msgid "Could not open file %s" msgstr "Kann die Datei %s nicht öffnen." #: src/interp/rassa.c:271 msgid "Report stopping due to error opening output file" msgstr "Breche Report ab, weil Ausgabedatei nicht geöffnet werden kann" #: src/interp/rassa.c:273 msgid "Report stopping due to lack of output file" msgstr "Breche Report ab, weil keine Ausgabedatei angegeben wurde" #: src/interp/rassa.c:330 msgid "illegal call to pos." msgstr "Ungültiger Aufruf von pos." #: src/interp/rptsort.c:104 msgid "First argument to (r)sort must be list or array" msgstr "Erstes Argument für (r)sort muss eine Liste oder ein Feld sein" #: src/interp/rptsort.c:117 src/interp/rptsort.c:128 msgid "Arguments to (r)sort must be of same size" msgstr "Argumente von (r)sort müssen gleiche Größe haben" #: src/interp/rptsort.c:137 msgid "Second argument to (r)sort must be list or array" msgstr "Zweites Argument für (r)sort muss eine Liste oder ein Feld sein" #: src/liflines/add.c:68 #, c-format msgid "There was %d unresolved reference." msgid_plural "There were %d unresolved references." msgstr[0] "%d Datensatz mit diesem Schlüssel oder Bezug gibt es nicht." msgstr[1] "%d Datensätze mit diesem Schlüssel oder Bezug gibt es nicht." #: src/liflines/brwsmenu.c:25 msgid "? Other menu choices" msgstr "? Weitere Befehle" #: src/liflines/brwsmenu.c:69 msgid "e Edit the person" msgstr "e Person bearbeiten" #: src/liflines/brwsmenu.c:70 msgid "e Edit the family" msgstr "e Familie bearbeiten" #: src/liflines/brwsmenu.c:71 msgid "e Edit record" msgstr "e Datensatz bearbeiten" #: src/liflines/brwsmenu.c:72 msgid "e Edit top person" msgstr "e Ob. Pers. bearb." #: src/liflines/brwsmenu.c:73 msgid "e Edit top family" msgstr "e Ob. Fam. bearb." #: src/liflines/brwsmenu.c:74 msgid "f Browse to father" msgstr "f Vater anzeigen" #: src/liflines/brwsmenu.c:75 msgid "f Browse top father" msgstr "f Ob. Vater anzeigen" #: src/liflines/brwsmenu.c:76 msgid "m Browse to mother" msgstr "m Mutter anzeigen" #: src/liflines/brwsmenu.c:77 msgid "m Browse top mother" msgstr "m Ob. Mutter anzeigen" #: src/liflines/brwsmenu.c:78 msgid "s Browse to spouse/s" msgstr "s Ehegatten anzeigen" #: src/liflines/brwsmenu.c:79 msgid "s Browse top spouse/s" msgstr "s Ob. Partner anzeigen" #: src/liflines/brwsmenu.c:80 msgid "c Browse to children" msgstr "c Kinder anzeigen" #: src/liflines/brwsmenu.c:81 msgid "c Browse top children" msgstr "c Ob. Kinder anzeigen" #: src/liflines/brwsmenu.c:82 msgid "o Browse to older sib" msgstr "o Ält. Geschw. anz." #: src/liflines/brwsmenu.c:83 msgid "y Browse to younger sib" msgstr "y Jüng. Geschw. anz." #: src/liflines/brwsmenu.c:84 msgid "g Browse to family" msgstr "g Familie anzeigen" #: src/liflines/brwsmenu.c:85 msgid "u Browse to parents" msgstr "u Eltern anzeigen" #: src/liflines/brwsmenu.c:86 msgid "b Browse to persons" msgstr "b Personen anzeigen" #: src/liflines/brwsmenu.c:87 msgid "t Browse to top" msgstr "t Zum Anfang" #: src/liflines/brwsmenu.c:88 msgid "b Browse to bottom" msgstr "b Ans Ende springen" #: src/liflines/brwsmenu.c:89 msgid "h Add as spouse" msgstr "h Als Gatte hinzufügen" #: src/liflines/brwsmenu.c:90 msgid "i Add as child" msgstr "i Als Kind hinzufügen" #: src/liflines/brwsmenu.c:91 msgid "s Add spouse to family" msgstr "s Ehegatten hinzufügen" #: src/liflines/brwsmenu.c:92 msgid "a Add child to family" msgstr "a Kind hinzufügen" #: src/liflines/brwsmenu.c:93 msgid "a Add family" msgstr "a Familie erstellen" #: src/liflines/brwsmenu.c:94 msgid "x Swap two families" msgstr "x 2 Familien tauschen" #: src/liflines/brwsmenu.c:95 msgid "x Swap two children" msgstr "x 2 Kinder tauschen" #: src/liflines/brwsmenu.c:97 #, no-c-format msgid "%c Reorder child" msgstr "%c Kinder neu ordnen" #: src/liflines/brwsmenu.c:98 msgid "x Switch top/bottom" msgstr "x Oben/Unten tauschen" #: src/liflines/brwsmenu.c:99 msgid "n Create new person" msgstr "n Neue Person einfügen" #: src/liflines/brwsmenu.c:100 msgid "a Create new family" msgstr "a Neue Fam. einfügen" #: src/liflines/brwsmenu.c:101 msgid "tt Enter tandem mode" msgstr "tt 2-Personen-Modus" #: src/liflines/brwsmenu.c:102 msgid "tt Enter family tandem" msgstr "tt 2-Familien-Modus" #: src/liflines/brwsmenu.c:103 msgid "zi Browse to indi" msgstr "zi Person anzeigen" #: src/liflines/brwsmenu.c:104 msgid "zz Browse to any" msgstr "zz And. Pers. anz." #: src/liflines/brwsmenu.c:105 msgid "r Remove as spouse" msgstr "r Als Gatte entfernen" #: src/liflines/brwsmenu.c:106 msgid "d Remove as child" msgstr "d Als Kind entfernen" #: src/liflines/brwsmenu.c:107 msgid "r Remove spouse from" msgstr "r Gatten entfernen" #: src/liflines/brwsmenu.c:108 msgid "d Remove child from" msgstr "d Kind entfernen" #: src/liflines/brwsmenu.c:109 msgid "( Scroll up" msgstr "( Nach oben" #: src/liflines/brwsmenu.c:110 msgid ") Scroll down" msgstr ") Nach unten" #: src/liflines/brwsmenu.c:111 msgid "] Increase tree depth" msgstr "] Anzeigetiefe rauf" #: src/liflines/brwsmenu.c:112 msgid "[ Decrease tree depth" msgstr "[ Anzeigetiefe runter" #: src/liflines/brwsmenu.c:113 msgid "(t Scroll top up" msgstr "(t Ob. nach oben" #: src/liflines/brwsmenu.c:114 msgid ")t Scroll top down" msgstr ")t Ob. nach unten" #: src/liflines/brwsmenu.c:115 msgid "(b Scroll bottom up" msgstr "(b Unt. nach oben" #: src/liflines/brwsmenu.c:116 msgid ")b Scroll bottom down" msgstr ")b Unt. nach unten" #: src/liflines/brwsmenu.c:117 msgid "(( Scroll both up" msgstr "(( Beide nach ob." #: src/liflines/brwsmenu.c:118 msgid ")) Scroll both down" msgstr ")) Beide nach unt." #: src/liflines/brwsmenu.c:119 msgid "# Toggle childnos" msgstr "# Kinder tauschen" #: src/liflines/brwsmenu.c:120 msgid "!g GEDCOM mode" msgstr "!g GEDCOM-Modus" #: src/liflines/brwsmenu.c:121 msgid "!x GEDCOMX mode" msgstr "!x GEDCOMX-Modus" #: src/liflines/brwsmenu.c:122 msgid "!t GEDCOMT mode" msgstr "!t GEDCOMT-Modus" #: src/liflines/brwsmenu.c:123 msgid "!a Ancestors mode" msgstr "!a Vorfahren-Modus" #: src/liflines/brwsmenu.c:124 msgid "!d Descendants mode" msgstr "!d Nachfahren-Modus" #: src/liflines/brwsmenu.c:125 msgid "!n Normal mode" msgstr "!n Normaler Modus" #: src/liflines/brwsmenu.c:126 msgid "p Pedigree mode" msgstr "p Stammbaum-Modus" #: src/liflines/brwsmenu.c:127 msgid "!! Cycle mode" msgstr "!! Modus wechseln" #: src/liflines/brwsmenu.c:129 msgid "(1-9) Browse to child" msgstr "(1-9) Kind anzeigen" #: src/liflines/brwsmenu.c:130 msgid "y Turn on sync" msgstr "y Synchr. an" #: src/liflines/brwsmenu.c:131 msgid "A Advanced view" msgstr "A Erweiterte Ansicht" #: src/liflines/brwsmenu.c:132 msgid "tc Tandem to children" msgstr "tc 2-Kinder-Modus" #: src/liflines/brwsmenu.c:133 msgid "tf Tandem to father/s" msgstr "tf 2-Väter-Modus" #: src/liflines/brwsmenu.c:134 msgid "tg Tandem to family/s" msgstr "tg 2-Fam.-Modus" #: src/liflines/brwsmenu.c:135 msgid "f Browse to fathers" msgstr "f Väter anzeigen" #: src/liflines/brwsmenu.c:136 msgid "m Browse to mothers" msgstr "m Mütter anzeigen" #: src/liflines/brwsmenu.c:137 msgid "tm Tandem to mother/s" msgstr "tm 2-Mütter-Modus" #: src/liflines/brwsmenu.c:138 msgid "ts Tandem to spouse/s" msgstr "ts 2-Ehegatten-Modus" #: src/liflines/brwsmenu.c:139 msgid "tu Tandem to parents" msgstr "tu 2-Eltern-Modus" #: src/liflines/brwsmenu.c:140 msgid "< Enlarge menu area" msgstr "< Menü größer" #: src/liflines/brwsmenu.c:141 msgid "> Shrink menu area" msgstr "> Menü kleiner" #: src/liflines/brwsmenu.c:142 msgid "M> More menu cols" msgstr "M> Mehr Menüspalten" #: src/liflines/brwsmenu.c:143 msgid "M< Less menu cols" msgstr "M< Wen. Menüspalten" #: src/liflines/brwsmenu.c:144 msgid "+ Next in db" msgstr "+ Nächster in DB" #: src/liflines/brwsmenu.c:145 msgid "- Prev in db" msgstr "- Voriger in DB" #: src/liflines/brwsmenu.c:146 msgid "d Copy top to bottom" msgstr "d Kopie nach unten" #: src/liflines/brwsmenu.c:147 msgid "j Merge bottom to top" msgstr "j Daten oben einfügen" #: src/liflines/brwsmenu.c:148 src/liflines/listui.c:842 msgid "j Move down list" msgstr "j Liste abwärts" #: src/liflines/brwsmenu.c:149 src/liflines/listui.c:843 msgid "k Move up list" msgstr "k Liste aufwärts" #: src/liflines/brwsmenu.c:150 src/liflines/listui.c:844 msgid "e Edit this person" msgstr "e Person bearbeiten" #: src/liflines/brwsmenu.c:151 src/liflines/listui.c:845 msgid "i Browse this person" msgstr "i Person anzeigen" #: src/liflines/brwsmenu.c:152 src/liflines/listui.c:846 msgid "m Mark this person" msgstr "m Person markieren" #: src/liflines/brwsmenu.c:153 msgid "d Delete from list" msgstr "d Aus Liste löschen" #: src/liflines/brwsmenu.c:154 src/liflines/listui.c:849 msgid "n Name this list" msgstr "n Liste benennen" #: src/liflines/brwsmenu.c:155 src/liflines/listui.c:850 msgid "b Browse new persons" msgstr "b Neue Pers. anzeigen" #: src/liflines/brwsmenu.c:156 src/liflines/listui.c:851 msgid "a Add to this list" msgstr "a Zu dieser Liste" #: src/liflines/brwsmenu.c:157 src/liflines/listui.c:852 msgid "x Swap mark/current" msgstr "x Tausch mark./akt." #: src/liflines/brwsmenu.c:158 msgid "$s List sources" msgstr "$s Quellen anzeigen" #: src/liflines/brwsmenu.c:159 msgid "$n List notes" msgstr "$n Notizen anzeigen" #: src/liflines/brwsmenu.c:160 msgid "$$ List references" msgstr "$$ Verw. anzeigen" #: src/liflines/brwsmenu.c:161 msgid "^b History/back" msgstr "^b Speicher zurück" #: src/liflines/brwsmenu.c:162 msgid "^f History/fwd" msgstr "^f Speicher vorwärts" #: src/liflines/brwsmenu.c:163 msgid "^l History list" msgstr "^I Speicherliste" #: src/liflines/brwsmenu.c:164 msgid "^c Clear history" msgstr "^c Speicher löschen" #: src/liflines/brwsmenu.c:165 msgid "^xb ChngHist/back" msgstr "^xb Verä.liste/zur." #: src/liflines/brwsmenu.c:166 msgid "^xf ChngHist/fwd" msgstr "^xf Verä.liste/vor." #: src/liflines/brwsmenu.c:167 msgid "^xl ChngHist list" msgstr "^xI Veränd.liste" #: src/liflines/brwsmenu.c:168 msgid "^xc Clear ChngHist" msgstr "^xc Verä.liste lösch." #: src/liflines/brwsmenu.c:170 #, no-c-format msgid "%s Add source" msgstr "%s Quelle einfügen" #: src/liflines/brwsmenu.c:172 #, no-c-format msgid "%e Add event" msgstr "%e Ereignis einfügen" #: src/liflines/brwsmenu.c:174 #, no-c-format msgid "%o Add other" msgstr "%o Sonst. einfügen" #: src/liflines/brwsmenu.c:177 msgid "B Browse new family" msgstr "B Neue Fam. anzeigen" #: src/liflines/brwsmenu.c:490 msgid "Missing title" msgstr "Titel fehlt" #: src/liflines/delete.c:85 #, c-format msgid "%d spouse" msgid_plural "%d spouses" msgstr[0] "%d Gatte" msgstr[1] "%d Gatten" #: src/liflines/delete.c:88 #, c-format msgid "%d child" msgid_plural "%d children" msgstr[0] "%d Kind" msgstr[1] "%d Kinder" #: src/liflines/error.c:63 src/tools/dbverify.c:1504 msgid "Fatal Error" msgstr "Verhängnisvoller Fehler" #: src/liflines/error.c:66 msgid "FATAL ERROR" msgstr "Verhängnisvoller Fehler" #: src/liflines/error.c:70 #, c-format msgid " in file <%s> at line %d\n" msgstr " in Datei <%s>, Zeile %d\n" #: src/liflines/error.c:72 src/tools/dbverify.c:1515 msgid "ASSERT failure" msgstr "ASSERT-Fehler" #: src/liflines/import.c:169 msgid "This is not a lineage linked GEDCOM file." msgstr "Dies ist keine gültige GEDCOM-Datei." #: src/liflines/import.c:170 msgid "Proceed anyway?" msgstr "Weitermachen?" #: src/liflines/import.c:186 msgid "No current internal codeset, so no codeset conversion can be done" msgstr "Keine interne Zeichentabelle, Zeichenumwandlung nicht möglich" #: src/liflines/import.c:187 msgid "Proceed without codeset conversion?" msgstr "Ohne Zeichensatzumwandlung fortfahren?" #: src/liflines/import.c:204 #, c-format msgid "%d warning during import" msgid_plural "%d warnings during import" msgstr[0] "%d Warnung beim Import" msgstr[1] "%d Warnungen beim Import" #: src/liflines/import.c:220 #, c-format msgid "Cannot convert codeset (from <%s> to <%s>)" msgstr "Kann Zeichentabelle nicht umwandeln (von <%s> zu <%s>)" #: src/liflines/import.c:223 msgid "Enter codeset to assume (* for none)" msgstr "Zeichentabelle eingeben (* für keine)" #: src/liflines/import.c:246 #, c-format msgid "Using original keys, %d deleted record will be in the database." msgid_plural "Using original keys, %d deleted records will be in the database." msgstr[0] "Benutze originale Schlüssel, %d gelöschter Datensatz wird in die Datenbank eingefügt." msgstr[1] "Benutze originale Schlüssel, %d gelöschte Datensätze werden in die Datenbank eingefügt." #: src/liflines/lbrowse.c:219 msgid "Tandom browse only compatible with persons or families." msgstr "2-Modus nur möglich für Personen oder Familien" #: src/liflines/lines_usage.c:21 #, c-format msgid "%s invokes the Lifelines report execution program without GUI." msgstr "%s führt einen Lifelines-Report ohne GUI aus" #: src/liflines/lines_usage.c:23 #, c-format msgid "%s invokes the Lifelines GUI." msgstr "%s startet Lifelines mit Anzeige der GUI" #: src/liflines/lines_usage.c:26 #, c-format msgid "" "Lifelines is a program to manipulate genealogical information\n" "in lineage-linked GEDCOM format. It has a curses interface and a\n" "built-in interpreter for its own genealogical report language.\n" "\n" "It has its own databases, and records are edited directly in GEDCOM\n" "(with an editor of the user's choice). Records store\n" "information about people, families, sources, events, and\n" "other types of data (such as notes). Lifelines includes a\n" "custom report language and comes with a collection of reports." msgstr "" "Lifelines ist ein Programm zur Verwaltung von genealogischen\n" "Informationen im lineage-linked GEDCOM-Format. Es besitzt eine\n" "curses-Oberfläche und einen Interpreter für dessen Skriptsprache.\n" "\n" "Das Programm verwendet eine eigene Datenbank. Datensätze werden\n" "direkt in GEDCOM bearbeitet und können Informationen über Personen,\n" "Familien, Quellen, Ereignisse und sonstige Informationen enthalten.\n" "Lifelines implementiert eine Skriptsprache zum Erstellen von\n" "Reports." #: src/liflines/lines_usage.c:36 #, c-format msgid "Usage: %s [OPTIONS] [database]" msgstr "Aufruf: %s [OPTION] [DATENBANK]" #: src/liflines/lines_usage.c:38 src/tools/btedit.c:238 #, c-format msgid "Options:" msgstr "Optionen:" #: src/liflines/lines_usage.c:40 #, c-format msgid "-C[FILE]" msgstr "-C[DATEI]" #: src/liflines/lines_usage.c:42 #, c-format msgid "Specify configuration file location" msgstr "Konfigurationsdatei festlegen" #: src/liflines/lines_usage.c:44 #, c-format msgid "Finnish option (if compiled to allow Finnish option)" msgstr "Finnische Datenbank aktivieren (falls unterstützt)" #: src/liflines/lines_usage.c:46 #, c-format msgid "-I[KEY=VALUE]" msgstr "-I[SCHLÜSSEL=WERT]" #: src/liflines/lines_usage.c:48 #, c-format msgid "Specify a user property (e.g. -ILLEDITOR=gvim)" msgstr "Anwender-Option setzen (z.B. -ILLEDITOR=gvim)" #: src/liflines/lines_usage.c:50 #, c-format msgid "log dynamic memory operation (for debugging)" msgstr "Dynamische Speicheroperationen protokollieren (debug)" #: src/liflines/lines_usage.c:52 #, c-format msgid "-c[TYPE][DIRECT,INDIRECT]" msgstr "-c[TYP][DIREKT,INDIREKT]" #: src/liflines/lines_usage.c:54 #, c-format msgid "" "supply cache values (eg, -ci400,4000f400,4000 sets direct indi\n" "\t\t& fam caches to 400, and indirect indi & fam caches to 4000)" msgstr "" "Cache-Parameter festlegen (z.B. -ci400,4000f400,4000 sets den\n" "\t\tdirekten Personen-/Familien-Cache auf 400 und\n" "\t\tden indirekten Personen-/Familien-Cache auf 4000)." #: src/liflines/lines_usage.c:57 #, c-format msgid "debug mode (disable signal trapping)" msgstr "Debug-Modus; deaktiviert Signal-Handler" #: src/liflines/lines_usage.c:59 #, c-format msgid "force open (for recovery from errors or power failure)" msgstr "" "Datenbank-Öffnen erzwingen (zur Wiederherstellung nach\n" "\t\tFehlern oder Stromausfall)" #: src/liflines/lines_usage.c:61 #, c-format msgid "open database with immutable access (for use on read-only media)" msgstr "Datenbank im Nur-Lesen-Modus öffnen" #: src/liflines/lines_usage.c:63 #, c-format msgid "always show keys (even if REFN available)" msgstr "immer Schlüssel anzeigen (auch wenn REFN vorhanden ist)" #: src/liflines/lines_usage.c:65 #, c-format msgid "unlock a database (for correct access on read-write media)" msgstr "Datenbank entsperren" #: src/liflines/lines_usage.c:67 #, c-format msgid "lock a database (for use on read-only media)" msgstr "Datenbank sperren (zum Zugriff auf Nur-Lesen-Medien)" #: src/liflines/lines_usage.c:69 #, c-format msgid "do not use traditional family rules" msgstr "Herkömmliche Familienregeln nicht anwenden" #: src/liflines/lines_usage.c:71 #, c-format msgid "Specify program output filename (eg, -o/tmp/mytests)" msgstr "Aufgabedatei festlegen (z.B. -o/tmp/mytests)" #: src/liflines/lines_usage.c:73 #, c-format msgid "" "open database with read-only access (prohibiting other\n" "\t\twrite access)" msgstr "" "Datenbank im Nur-Lesen-Modus öffnen (verhindert weitere\n" "\t\tZugriffe mit Schreibzugriff)" #: src/liflines/lines_usage.c:76 #, c-format msgid "trace function calls in report programs (for debugging)" msgstr "Funktionsaufrufe von Reports protokollieren (debug)" #: src/liflines/lines_usage.c:78 #, c-format msgid "-u[HEIGHT,WIDTH]" msgstr "-u[HÖHE,BREITE]" #: src/liflines/lines_usage.c:80 #, c-format msgid "" "specify window size (eg, -u120,34 specifies 120 columns\n" "\t\tby 34 rows)" msgstr "" "Fenstergröße festlegen (z.B. -u120,34 verwendet 120 Spalten\n" "\t\tund 34 Zeilen)" #: src/liflines/lines_usage.c:83 #, c-format msgid "display this help and exit" msgstr "Diese Hilfe anzeigen und beenden" #: src/liflines/lines_usage.c:85 #, c-format msgid "open database with writeable access (this is the default)" msgstr "Datenbank mit Schreibzugriff öffnen (Vorgabe)" #: src/liflines/lines_usage.c:89 #, c-format msgid "execute a single lifelines report program directly" msgstr "Einen einzelnen Report ausführen" #: src/liflines/lines_usage.c:91 #, c-format msgid "" "Use normal ASCII characters for drawing lines, instead of\n" "\t\tspecial VT100 terminal characters" msgstr "" "Verwenden von normalen ASCII-Zeichen für Linien\n" "\t\t(anstatt besonderer VT100-Termial-Zeichen)" #: src/liflines/lines_usage.c:94 #, c-format msgid "output version information and exit" msgstr "Versionsinformationen ausgeben und beenden" #: src/liflines/lines_usage.c:96 src/tools/btedit.c:244 #, c-format msgid "Examples:" msgstr "Beispiele:" #: src/liflines/lines_usage.c:99 #, c-format msgid "%s myfamily -x eol" msgstr "%s myfamily -x eol" #: src/liflines/lines_usage.c:101 #, c-format msgid "Open the database 'myfamily' with Lifelines" msgstr "Öffnet Datenbank 'myfamily' mit Lifelines" #: src/liflines/lines_usage.c:103 #, c-format msgid "and run the eol.ll report" msgstr "und führt den Report 'eol.ll' aus." #: src/liflines/lines_usage.c:105 #, c-format msgid "%s -f myfamily -x eol" msgstr "%s -f myfamily -x eol" #: src/liflines/lines_usage.c:107 #, c-format msgid "Unlock database 'myfamily', after a power failure left the" msgstr "Entsperrt die Datenbank 'myfamily', die nach einem Stromausfall" #: src/liflines/lines_usage.c:109 #, c-format msgid "database locked and run 'eol.ll' report" msgstr "gesperrt blieb. Führt dann den Report 'eol.ll' aus." #: src/liflines/lines_usage.c:112 #, c-format msgid "%s myfamily" msgstr "%s myfamily" #: src/liflines/lines_usage.c:114 #, c-format msgid "Open database 'myfamily' with Lifelines" msgstr "Öffnet die Datenbank 'myfamily' mit Lifelines" #: src/liflines/lines_usage.c:116 #, c-format msgid "%s -f myfamily" msgstr "%s -f myfamily" #: src/liflines/lines_usage.c:118 #, c-format msgid "" "Unlock database 'myfamily', after a power failure left\n" "\t\tthe database locked" msgstr "" "Entsperrt die Datenbank 'myfamily', die nach einem Stromausfall\n" "\t\tgesperrt blieb." #: src/liflines/lines_usage.c:122 #, c-format msgid "REPORTING BUGS" msgstr "Fehler melden:" #: src/liflines/lines_usage.c:124 src/tools/btedit.c:250 #, c-format msgid "Report bugs to lifelines.sourceforge.net" msgstr "Melden Sie Fehler (auf Englisch) an http://lifelines.sourceforge.net/" #: src/liflines/lines_usage.c:126 #, c-format msgid "COPYRIGHT" msgstr "Copyright:" #: src/liflines/lines_usage.c:131 #, c-format msgid "SEE ALSO" msgstr "Siehe auch:" #: src/liflines/listui.c:155 src/liflines/listui.c:252 msgid "Commands: j Move down k Move up i Select q Quit" msgstr "Befehle: j Nach unten k Nach oben i Auswählen q Zurück" #: src/liflines/listui.c:157 msgid "Commands: j Move down k Move up q Quit" msgstr "Befehle: j Nach unten k Nach oben q Zurück" #: src/liflines/listui.c:249 msgid "Commands: j Move down k Move up d Delete i Select q Quit" msgstr "Befehle: j Nach unten k Nach oben d Löschen i Auswählen q Zurück" #: src/liflines/listui.c:431 msgid "--- CURRENT SELECTION ---" msgstr "--- Aktuelle Auswahl ---" #: src/liflines/listui.c:434 src/liflines/listui.c:597 msgid "--- LIST ---" msgstr "--- Liste ---" #: src/liflines/listui.c:628 msgid "-- CURRENT SELECTION --" msgstr "-- Aktuelle Auswahl --" #: src/liflines/listui.c:840 msgid "Choose an operation:" msgstr "Was möchten Sie tun?" #: src/liflines/listui.c:847 msgid "r Remove from list" msgstr "r Aus Liste löschen" #: src/liflines/listui.c:848 msgid "t Enter tandem mode" msgstr "t 2-Personen-Modus" #: src/liflines/loadsave.c:94 msgid "Person" msgid_plural "Persons" msgstr[0] "Person" msgstr[1] "Personen" #: src/liflines/loadsave.c:98 msgid "Family" msgid_plural "Families" msgstr[0] "Familie" msgstr[1] "Familien" #: src/liflines/loadsave.c:102 msgid "Source" msgid_plural "Sources" msgstr[0] "Quelle" msgstr[1] "Quellen" #: src/liflines/loadsave.c:106 msgid "Event" msgid_plural "Events" msgstr[0] "Ereignis" msgstr[1] "Ereignisse" #: src/liflines/loadsave.c:110 msgid "Other" msgid_plural "Others" msgstr[0] "Sonstiger" msgstr[1] "Sonstige" #: src/liflines/loadsave.c:160 msgid "Checking GEDCOM file for errors.\n" msgstr "Überprüfe GEDCOM-Datei auf Fehler.\n" #: src/liflines/loadsave.c:163 msgid "Error" msgid_plural "Errors" msgstr[0] "Fehler" msgstr[1] "Fehler" #: src/liflines/loadsave.c:169 msgid "Warning" msgid_plural "Warnings" msgstr[0] "Warnung" msgstr[1] "Warnungen" #: src/liflines/loadsave.c:184 msgid "The database is read-only; loading has been canceled." msgstr "Die Datenbank ist schreibgeschützt; Ladevorgang abgebrochen." #: src/liflines/loadsave.c:190 msgid "Adding unused keys as deleted keys..." msgstr "Unbenutzte Schlüssel werden als gelöschte Schlüssel hinzugefügt..." #. TRANSLATORS: how long Import ran, and how much of that was UI delay #: src/liflines/loadsave.c:255 #, c-format msgid "Import time %s (ui %s)\n" msgstr "Import dauerte %s (UI %s)\n" #: src/liflines/loadsave.c:282 msgid "The database was not saved." msgstr "Datenbank wurde nicht gespeichert." #: src/liflines/main.c:385 msgid "Warning: database codeset unspecified" msgstr "Warnung: Für die aktuelle Datenbank wurde keine Zeichentabelle angegeben" #: src/liflines/main.c:387 msgid "Warning: not all conversions available" msgstr "Warnung: nicht alle Umwandlungen möglich" #: src/liflines/menuset.c:155 #, c-format msgid "Menu (%s) choice sequence too long: %s" msgstr "Menüeintrag (%s) zu lang: %s" #: src/liflines/menuset.c:159 #, c-format msgid "Menu (%s) item lacked choice sequence: %s" msgstr "Menüeintrag (%s) fehlt Auswahlmöglichkeit: %s" #: src/liflines/menuset.c:242 src/liflines/menuset.c:254 #, c-format msgid "In menu: %s" msgstr "In Menü: %s" #: src/liflines/menuset.c:244 #, c-format msgid "Duplicate hotkey for item: %s" msgstr "Buchstabe mehrfach vergeben: %s" #: src/liflines/menuset.c:247 #, c-format msgid "Clash with longer hotkey in item: %s" msgstr "Buchstabe nicht eindeutig: %s" #: src/liflines/menuset.c:255 #, c-format msgid "Clash with shorter hotkey in item: %s" msgstr "Buchstabe nicht eindeutig: %s" #: src/liflines/merge.c:772 #, c-format msgid "Bad spouse tag: %s" msgstr "Ungültiges Kennzeichen für Ehegatte: %s" #: src/liflines/merge.c:800 src/liflines/merge.c:919 #, c-format msgid "Mismatched lineage spouse links between %s and %s: %ld and %ld" msgstr "Fehlerhafte Querverbindungen zwischen %s und %s: %ld und %ld" #: src/liflines/merge.c:816 src/liflines/merge.c:935 #, c-format msgid "Bad child tag: %s" msgstr "Ungültiges Kennzeichen für Kind: %s" #: src/liflines/merge.c:844 src/liflines/merge.c:963 #, c-format msgid "Mismatched lineage child links between %s and %s: %ld and %ld" msgstr "Fehlerhafte Querverbindungen zwischen %s und %s: %ld und %ld" #: src/liflines/merge.c:882 src/liflines/merge.c:891 #, c-format msgid "Bad HUSB tag: %s" msgstr "Ungültiges Kennzeichen für HUSB: %s" #: src/liflines/miscutls.c:51 msgid "Whose key value do you want?" msgstr "Welchen Schlüssel möchten Sie?" #: src/liflines/miscutls.c:67 msgid "Please enter person's internal key value." msgstr "Geben Sie den internen Schlüssel der Person ein." #: src/liflines/miscutls.c:68 msgid "enter key:" msgstr "Schlüssel:" #: src/liflines/miscutls.c:78 src/liflines/miscutls.c:82 #: src/liflines/miscutls.c:87 #, c-format msgid "No one in database has key value %s." msgstr "Der Schlüssel %s existiert nicht." #: src/liflines/scan.c:100 msgid "Enter pattern to match against single surname or given name." msgstr "Geben Sie einen Teil des Vor- oder Familiennamens ein." #: src/liflines/scan.c:112 msgid "Enter pattern to match against full name." msgstr "Geben Sie einen Teil des Namens ein." #: src/liflines/scan.c:128 src/liflines/scan.c:178 src/liflines/scan.c:201 msgid "pattern: " msgstr "Zeichenfolge: " #: src/liflines/scan.c:151 src/liflines/scan.c:165 msgid "Enter pattern to match against author." msgstr "Geben Sie einen Teil des Autors ein." #: src/liflines/screen.c:317 #, c-format msgid "initscr failed" msgstr "initscr fehlgeschlagen" #: src/liflines/screen.c:334 #, c-format msgid "" "The requested window size (%ld,%ld) is too large for your terminal (%d,%d).\n" msgstr "Die eingestellte Fenstergröße (%ld,%ld) ist zu groß für Ihr Terminal (%d,%d).\n" #: src/liflines/screen.c:342 #, c-format msgid "" "The requested window size (%ld,%ld) is too small for LifeLines (%d,%d).\n" msgstr "Die eingestellte Fenstergröße (%ld,%ld) ist zu klein für LifeLines (%d,%d).\n" #: src/liflines/screen.c:706 msgid "Search results" msgstr "Suchergebnisse:" #: src/liflines/screen.c:813 #, c-format msgid "(pg %d/%d)" msgstr "(S. %d/%d)" #: src/liflines/screen.c:1431 msgid "No conversion" msgstr "Keine Umwandlung" #: src/liflines/screen.c:1517 msgid "Internal codeset" msgstr "Interne Zeichentabelle" #: src/liflines/screen.c:1520 msgid "Internal UTF-8: Yes" msgstr "Internes UTF-8: Ja" #: src/liflines/screen.c:1522 msgid "Internal UTF-8: No" msgstr "Internes UTF-8: Nein" #: src/liflines/screen.c:1526 msgid "Locales are enabled." msgstr "Nationale Einstellungen aktiviert." #: src/liflines/screen.c:1528 msgid "Locales are disabled." msgstr "Nationale Einstellungen deaktiviert." #: src/liflines/screen.c:1531 msgid "NLS (National Language Support) is compiled in." msgstr "NLS (Unterstützung nat. Sprachen) ist aktiviert." #: src/liflines/screen.c:1537 msgid "NLS (National Language Support) is not compiled in." msgstr "NLS (Unterstützung nat. Sprachen) ist deaktiviert." #: src/liflines/screen.c:1550 msgid "iconv (codeset conversion) is compiled in." msgstr "iconv (Ländereinstellungen) sind aktiviert." #: src/liflines/screen.c:1552 msgid "iconv (codeset conversion) is not compiled in." msgstr "iconv (Ländereinstellungen) sind deaktiviert." #: src/liflines/screen.c:1554 #, c-format msgid "Startup collate locale: %s" msgstr "Sortiereinstellungen beim Start: %s" #: src/liflines/screen.c:1557 #, c-format msgid "Startup messages locale: %s" msgstr "Nachrichteneinstellungen beim Start: %s" #: src/liflines/screen.c:1560 #, c-format msgid "Current collate locale: %s" msgstr "Gegenwärtige Sortiereinstellungen: %s" #: src/liflines/screen.c:1563 #, c-format msgid "Current messages locale: %s" msgstr "Gegenwärtige Nachrichteneinstellungen: %s" #: src/liflines/screen.c:1566 #, c-format msgid "Collation routine: %s" msgstr "Vergleichsroutine: %s" #: src/liflines/screen.c:1570 #, c-format msgid "GUI codeset: %s" msgstr "Ländereinstellung GUI: %s" #: src/liflines/screen.c:1573 #, c-format msgid "GUI output codeset: %s" msgstr "Ländereinstellung GUI-Ausgabe: %s" #: src/liflines/screen.c:1575 #, c-format msgid "GUI input codeset: %s" msgstr "Ländereinstellung GUI-Eingabe: %s" #: src/liflines/screen.c:1580 #, c-format msgid "editor codeset: %s" msgstr "Ländereinstellung Editor: %s" #: src/liflines/screen.c:1583 #, c-format msgid "editor output codeset: %s" msgstr "Ländereinstellung Editor-Ausgabe: %s" #: src/liflines/screen.c:1585 #, c-format msgid "editor input codeset: %s" msgstr "Ländereinstellung Editor-Eingabe: %s" #: src/liflines/screen.c:1590 #, c-format msgid "report codeset: %s" msgstr "Ländereinstellung Reporte: %s" #: src/liflines/screen.c:1593 #, c-format msgid "report output codeset: %s" msgstr "Ländereinstellung Reporte-Ausgabe: %s" #: src/liflines/screen.c:1595 #, c-format msgid "report input codeset: %s" msgstr "Ländereinstellung Reporte-Eingabe: %s" #: src/liflines/screen.c:1600 #, c-format msgid "GEDCOM codeset: %s" msgstr "GEDCOM Ländereinstellung: %s" #: src/liflines/screen.c:1603 #, c-format msgid "gedcom output codeset: %s" msgstr "Ländereinstellung GEDCOM-Ausgabe: %s" #: src/liflines/screen.c:1605 #, c-format msgid "gedcom input codeset: %s" msgstr "Ländereinstellung GEDCOM-Eingabe: %s" #: src/liflines/screen.c:1613 msgid "UTF-8 charprops loaded" msgstr "UTF-8 Zeichenklassifikationen geladen" #: src/liflines/screen.c:1615 msgid "UTF-8 charprops not loaded" msgstr "UTF-8 Zeichenklassifikationen nicht geladen" #: src/liflines/screen.c:1619 msgid "Codeset information" msgstr "Länderspezifische Einstellungen" #: src/liflines/screen.c:1636 #, c-format msgid "gettext dll: %s" msgstr "gettext DLL: %s" #: src/liflines/screen.c:1640 #, c-format msgid "gettext dll version: %s" msgstr "gettext DLL-Version: %s" #: src/liflines/screen.c:1645 msgid "gettext dll had no version" msgstr "gettext DLL ohne Versionsangabe" #: src/liflines/screen.c:1650 msgid "no gettext dll found" msgstr "Keine DLL für gettext gefunden" #: src/liflines/screen.c:1659 #, c-format msgid "iconv dll: %s" msgstr "iconv DLL: %s" #: src/liflines/screen.c:1663 #, c-format msgid "iconv dll version: %s" msgstr "iconv DLL-Version: %s" #: src/liflines/screen.c:1668 msgid "iconv dll had no version" msgstr "iconv DLL ohne Versionsangabe" #: src/liflines/screen.c:1673 msgid "no iconv dll found" msgstr "Keine DLL für iconv gefunden" #: src/liflines/screen.c:1931 msgid "Impermissible to change codeset in a populated database" msgstr "Datenbankzeichensatz kann nicht nachträglich geändert werden" #: src/liflines/screen.c:2032 msgid "LifeLines -- Main Menu" msgstr "LifeLines -- Hauptmenü" #: src/liflines/searchui.c:133 #, c-format msgid "v Review visit history (%d record)" msgid_plural "v Review visit history (%d records)" msgstr[0] "v Liste zuletzt angezeigter Personen (%d Datensatz)" msgstr[1] "v Liste zuletzt angezeigter Personen (%d Datensätze)" #: src/liflines/searchui.c:137 msgid "(visit history is empty)" msgstr "(Anzeigeliste ist leer)" #: src/liflines/searchui.c:143 #, c-format msgid "c Review change history (%d record)" msgid_plural "c Review change history (%d records)" msgstr[0] "c Liste letzter Veränderungen (%d Datensatz)" msgstr[1] "c Liste letzter Veränderungen (%d Datensätze)" #: src/liflines/searchui.c:147 msgid "(change history is empty)" msgstr "(Keine Veränderungen)" #: src/liflines/searchui.c:151 msgid "f Full database scan" msgstr "f Gesamte Datenbank durchsuchen" #: src/liflines/searchui.c:220 msgid "What scan type?" msgstr "Wie soll die Datenbank durchsucht werden?" #: src/liflines/searchui.c:223 msgid "f Full name scan" msgstr "f Nach ganzem Namen suchen" #: src/liflines/searchui.c:224 msgid "n Name fragment (whitespace-delimited) scan" msgstr "n Nach Namensteil suchen (durch Leerzeichen getrennt)" #: src/liflines/searchui.c:225 msgid "r Refn scan" msgstr "r Nach REFN suchen" #: src/liflines/searchui.c:226 msgid "s Source scan" msgstr "s Nach Quelle suchen" #: src/liflines/searchui.c:290 msgid "Scan on what source field?" msgstr "Nach welcher Quelle suchen?" #: src/liflines/searchui.c:293 msgid "a Scan by author" msgstr "a Nach Autor suchen" #: src/liflines/searchui.c:294 msgid "t Scan by title" msgstr "t Nach Titel suchen" #: src/liflines/selectdb.c:95 msgid "Choose database to open" msgstr "Wählen Sie die zu öffnende Datenbank" #: src/liflines/selectdb.c:103 msgid "No databases found in database path" msgstr "Im Datenbankverzeichnis wurde keine Datenbank gefunden." #: src/liflines/show.c:123 msgid "born" msgstr "geboren" #: src/liflines/show.c:124 src/liflines/show.c:125 msgid "bapt" msgstr "get." #: src/liflines/show.c:126 msgid "barm" msgstr "get." #: src/liflines/show.c:127 msgid "basm" msgstr "get." #: src/liflines/show.c:128 msgid "bles" msgstr "Einsegnung" #: src/liflines/show.c:129 msgid "adop" msgstr "adoptiert" #: src/liflines/show.c:130 msgid "resi" msgstr "lebte" #: src/liflines/show.c:134 msgid "died" msgstr "gestorben" #: src/liflines/show.c:135 msgid "buri" msgstr "beigesetzt" #: src/liflines/show.c:136 msgid "crem" msgstr "eingeäschert" #: src/liflines/show.c:1009 #, c-format msgid "Cached: I:%s; F:%s" msgstr "Cache: %s I, %s F" #: src/liflines/valgdcom.c:92 #, c-format msgid "Record %s is referred to but not defined." msgstr "Datensatz %s existiert nicht, obwohl auf ihn verwiesen wird." #: src/liflines/valgdcom.c:93 #, c-format msgid "Line %d: Reference to undefined record %s" msgstr "Zeile %d: Verweis auf nicht-existenten Datensatz %s." #: src/liflines/valgdcom.c:94 #, c-format msgid "Line %d: Tag %s found in unexpected record: %s %s." msgstr "Zeile %d: Kennzeichen %s in unerwartetem Datensatz: %s %s." #: src/liflines/valgdcom.c:190 #, c-format msgid "Line %d: Family has no members (%s %s)." msgstr "Zeile %d: Familie hat keine Mitglieder (%s %s)." #: src/liflines/valgdcom.c:390 #, c-format msgid "Line %d: The source defined here has no key." msgstr "Zeile %d: Dieser Quelle ist kein Schlüssel zugewiesen." #: src/liflines/valgdcom.c:404 #, c-format msgid "Line %d: Source %s has an incorrect key." msgstr "Zeile %d: Der Schlüssel für die Quelle %s ist falsch." #: src/liflines/valgdcom.c:411 #, c-format msgid "Lines %d and %d: Source %s is multiply defined." msgstr "Zeilen %d und %d: Die Quelle %s existiert mehrfach." #: src/liflines/valgdcom.c:434 #, c-format msgid "Line %d: The event defined here has no key." msgstr "Zeile %d: Diesem Ereignis ist kein Schlüssel zugewiesen." #: src/liflines/valgdcom.c:447 #, c-format msgid "Line %d: Event %s has an incorrect key." msgstr "Zeile %d: Der Schlüssel für das Ereignis %s ist falsch." #: src/liflines/valgdcom.c:454 #, c-format msgid "Lines %d and %d: Event %s is multiply defined." msgstr "Zeilen %d und %d: Das Ereignis %s existiert mehrfach." #: src/liflines/valgdcom.c:477 #, c-format msgid "Line %d: The record defined here has no key." msgstr "Zeile %d: Diesem Datensatz ist kein Schlüssel zugewiesen." #: src/liflines/valgdcom.c:490 #, c-format msgid "Line %d: Record %s has an incorrect key." msgstr "Zeile %d: Der Schlüssel für den Datensatz %s ist falsch." #: src/liflines/valgdcom.c:497 #, c-format msgid "Lines %d and %d: Record %s is multiply defined." msgstr "Zeilen %d und %d: Der Datensatz %s existiert mehrfach." #: src/liflines/valgdcom.c:539 #, c-format msgid "Line %d: This %s line is missing a value field (%s %s)." msgstr "Zeile %d: In der %s. Zeile fehlt der Wert (%s %s)." #: src/liflines/valgdcom.c:590 #, c-format msgid "Line %d: Bad NAME syntax (%s %s)." msgstr "Zeile %d: Name hat falsche Form (%s %s)." #: src/liflines/valgdcom.c:820 #, c-format msgid "Line %d: Person %s has multiple father links." msgstr "Zeile %d: %s sind mehrere Väter zugewiesen." #: src/liflines/valgdcom.c:824 #, c-format msgid "Line %d: Person %s has multiple mother links." msgstr "Zeile %d: %s sind mehrere Mütter zugewiesen." #: src/liflines/valgdcom.c:836 #, c-format msgid "Line %d: Person %s is both male and female." msgstr "Zeile %d: %s ist sowohl männlich als auch weiblich." #: src/liflines/valgdcom.c:840 #, c-format msgid "Line %d: Person %s is male but must be female." msgstr "Zeile %d: %s sollte weiblich sein, ist aber männlich." #: src/liflines/valgdcom.c:844 #, c-format msgid "Line %d: Person %s is female but must be male." msgstr "Zeile %d: %s sollte männlich sein, ist aber weiblich." #: src/liflines/valgdcom.c:848 #, c-format msgid "Line %d: Person %s is implied to be both male and female." msgstr "Zeile %d: %s müsste sowohl weiblich als auch männlich sein." #: src/liflines/valgdcom.c:860 #, c-format msgid "Line %d: Family %s has multiple husband links." msgstr "Zeile %d: Der Familie %s sind mehrere Ehemänner zugewiesen." #: src/liflines/valgdcom.c:864 #, c-format msgid "Line %d: Family %s has multiple wife links." msgstr "Zeile %d: Der Familie %s sind mehrere Ehefrauen zugewiesen." #: src/liflines/valgdcom.c:920 msgid "error" msgstr "Fehler" #: src/liflines/valgdcom.c:928 #, c-format msgid "%6d Error" msgid_plural "%6d Errors" msgstr[0] "%6d Fehler" msgstr[1] "%6d Fehler" #: src/liflines/valgdcom.c:930 src/liflines/valgdcom.c:958 #, c-format msgid " (see log file <%s>)" msgstr "(Logbuch: <%s>)" #: src/liflines/valgdcom.c:932 src/liflines/valgdcom.c:960 msgid " (no log file)" msgstr "(kein Logbuch)" #: src/liflines/valgdcom.c:948 msgid "warning" msgstr "Warnung" #: src/liflines/valgdcom.c:956 #, c-format msgid "%6d Warning" msgid_plural "%6d Warnings" msgstr[0] "%6d Warnung" msgstr[1] "%6d Warnungen" #: src/liflines/valgdcom.c:1067 #, c-format msgid "Processed %d lines without finding end of HEAD" msgstr "%d Zeilen bearbeitet ohne HEAD-Ende" #: src/liflines/valgdcom.c:1072 #, c-format msgid "End of file at line %d" msgstr "Ende der Datei in Zeile %d" #: src/liflines/valgdcom.c:1076 #, c-format msgid "Error at line %d: %s" msgstr "Fehler in Zeile %d: %s" #: src/liflines/valgdcom.c:1080 #, c-format msgid "Bad level at line %d" msgstr "Gliederung in Zeile %d falsch" #: src/liflines/valgdcom.c:1086 #, c-format msgid "Duplicate HEAD line at line %d" msgstr "HEAD-Eintrag doppelt in Zeile %d" #: src/liflines/valgdcom.c:1092 #, c-format msgid "Missing HEAD line at line %d" msgstr "HEAD-Eintrag fehlt in Zeile %d" #: src/stdlib/errlog.c:61 #, c-format msgid " in file <%s> at line %d\n" msgstr " in Datei <%s>, Zeile %d\n" #: src/stdlib/errlog.c:63 msgid "Current database" msgstr "Aktuelle Datenbank" #: src/tools/btedit.c:108 #, c-format msgid "btedit requires 2 arguments (btree and key)." msgstr "btedit benötigt zwei Argumente (btree und Schlüssel)." #: src/tools/btedit.c:110 #, c-format msgid "See `btedit --help' for more information." msgstr "'btedit --help' gibt weitere Informationen. " #: src/tools/btedit.c:117 #, c-format msgid "Failed to open btree: %s." msgstr "Kann die Datei %s nicht öffnen." #: src/tools/btedit.c:124 #, c-format msgid "There is no record with key: %s" msgstr "Ein Datensatz mit dem Schlüssel oder Bezug %s gibt es nicht." #: src/tools/btedit.c:126 #, c-format msgid "Error accessing record: %s" msgstr "Fehler beim Zugriff auf Datensatz: %s" #: src/tools/btedit.c:135 #, c-format msgid "Editor or system call failed." msgstr "Kann Editor nicht starten." #: src/tools/btedit.c:137 #, c-format msgid "Database was not be modified." msgstr "Datenbank wurde nicht verändert." #: src/tools/btedit.c:143 #, c-format msgid "Readonly database can not be modified." msgstr "Nur-Lesen-Datenbank kann nicht verändert werden." #: src/tools/btedit.c:150 #, c-format msgid "Error writing file 'btedit.tmp'." msgstr "Fehler beim Schreiben von 'btedit.tmp'." #: src/tools/btedit.c:156 #, c-format msgid "Record %s modified." msgstr "Datensatz %s verändert." #: src/tools/btedit.c:226 msgid "\"\\My Documents\\LifeLines\\Databases\\MyFamily\"" msgstr "\"\\Eigene Dateien\\LifeLines\\Datenbanken\\meineFamilie\"" #: src/tools/btedit.c:228 src/tools/dbverify.c:232 msgid "/home/users/myname/lifelines/databases/myfamily" msgstr "/home/Benutzer/meinName/lifelines/Datenbank/meineFamilie" #: src/tools/btedit.c:231 #, c-format msgid "" "lifelines `btedit' edits raw binary btree blocks\n" "in lifelines database files. Do NOT use this unless\n" "you know what you are doing and you have backed up\n" "your database." msgstr "" "Mit dem Programm 'btedit' können Datensätze in\n" "Lifelines-btree-Datenbanken bearbeitet werden. Verwenden\n" "Sie dieses Programm nur dann, wenn sie wissen, was sie\n" "tun, und wenn Sie die Datenbank gesichert haben." #: src/tools/btedit.c:236 #, c-format msgid "Usage btedit [database] [rkey]" msgstr "Aufruf: btedit [DATENBANK] [SCHLÜSSEL]" #: src/tools/btedit.c:240 #, c-format msgid "\t--help\tdisplay this help and exit" msgstr "\t--help\tDiese Hilfe anzeigen und beenden" #: src/tools/btedit.c:242 #, c-format msgid "\t--version\toutput version information and exit" msgstr "\t--version\tVersionsinformationen ausgeben und beenden" #: src/tools/btedit.c:246 #, c-format msgid "\tbtedit %s I34" msgstr "\tbtedit %s I34" #: src/tools/btedit.c:248 #, c-format msgid "edit raw btree block for person I34" msgstr "Datensatz für Person I34 bearbeiten" #: src/tools/dbverify.c:175 msgid "Orphan names" msgstr "Verwaister Name" #: src/tools/dbverify.c:176 msgid "Ghost names" msgstr "Geistername" #: src/tools/dbverify.c:177 src/tools/dbverify.c:178 msgid "Duplicate names" msgstr "Doppelte Namen" #: src/tools/dbverify.c:179 msgid "Non-indi names" msgstr "Keine Personennamen" #: src/tools/dbverify.c:180 msgid "Duplicate individuals" msgstr "Doppelte Person" #: src/tools/dbverify.c:181 msgid "Duplicate families" msgstr "Doppelte Familien" #: src/tools/dbverify.c:182 msgid "Duplicate sources" msgstr "Doppelte Quellen" #: src/tools/dbverify.c:183 msgid "Duplicate events" msgstr "Doppelte Ereignisse" #: src/tools/dbverify.c:184 msgid "Duplicate others" msgstr "Doppelte Datensätze" #: src/tools/dbverify.c:185 msgid "Missing records (from deleteset)" msgstr "Fehlende Datensätze" #: src/tools/dbverify.c:186 msgid "Deleted records" msgstr "Gelöschte Datensätze" #: src/tools/dbverify.c:187 msgid "Bad name" msgstr "Ungültiger Name" #: src/tools/dbverify.c:188 msgid "Bad family reference" msgstr "Ungültiger Verweis auf Familie" #: src/tools/dbverify.c:189 msgid "Missing child" msgstr "Fehlendes Kind" #: src/tools/dbverify.c:190 msgid "Missing spouse" msgstr "Fehlender Ehegatte" #: src/tools/dbverify.c:191 msgid "Bad HUSB reference" msgstr "Verweis auf Ehemann ist ungültig" #: src/tools/dbverify.c:192 msgid "Bad WIFE reference" msgstr "Verweis auf Ehefrau ist ungültig" #: src/tools/dbverify.c:193 msgid "Bad CHIL reference" msgstr "Verweis auf Kind ist ungültig" #: src/tools/dbverify.c:194 msgid "Improper HUSB" msgstr "Fehler bei Ehemann (HUSB)" #: src/tools/dbverify.c:195 msgid "Improper WIFE" msgstr "Fehler bei Ehefrau (WIFE)" #: src/tools/dbverify.c:196 msgid "Improper child" msgstr "Fehler bei Kind" #: src/tools/dbverify.c:197 msgid "Empty family" msgstr "Leere Familie" #: src/tools/dbverify.c:198 msgid "Single person family" msgstr "Familie besteht nur aus einer Person" #: src/tools/dbverify.c:199 msgid "Bad pointer" msgstr "Verweis ungültig" #: src/tools/dbverify.c:200 msgid "Missing data records" msgstr "Fehlende Datensätze" #: src/tools/dbverify.c:230 msgid "\\My Documents\\LifeLines\\Databases\\MyFamily" msgstr "\\Eigene Dateien\\LifeLines\\Datenbanken\\meineFamilie" #: src/tools/dbverify.c:236 #, c-format msgid "usage: dbverify -(flags) \n" msgstr "Aufruf: dbverify [OPTIONEN] BTREE\n" #: src/tools/dbverify.c:237 #, c-format msgid "flags:\n" msgstr "Optionen:\n" #: src/tools/dbverify.c:238 #, c-format msgid "\t-a = Perform all checks (does not include fixes)\n" msgstr " -a Alle Prüfungen durchführen (beinhaltet keine Korrekturen)\n" #: src/tools/dbverify.c:239 #, c-format msgid "\t-g = Check for ghosts (names/refns)\n" msgstr " -g Prüfung auf Geisternamen (Namen/Verweise)\n" #: src/tools/dbverify.c:240 #, c-format msgid "\t-G = Check for & fix ghosts (names/refns)\n" msgstr " -G Prüfung und Korrektur von Geisternamen (Namen/Verweise)\n" #: src/tools/dbverify.c:241 #, c-format msgid "\t-i = Check individuals\n" msgstr " -i Prüfung von Personen\n" #: src/tools/dbverify.c:242 #, c-format msgid "\t-f = Check families\n" msgstr " -f Prüfungen von Familien\n" #: src/tools/dbverify.c:243 #, c-format msgid "\t-F = Alter any bad family lineage pointers (to _badptr)\n" msgstr " -F Korrektur von ungültigen Familienverweisen (zu _badptr)\n" #: src/tools/dbverify.c:244 #, c-format msgid "\t-h = Display help text (this text)\n" msgstr " -h Diese Hilfe anzeigen\n" #: src/tools/dbverify.c:245 #, c-format msgid "\t-s = Check sours\n" msgstr " -s Prüfung von Quellen\n" #: src/tools/dbverify.c:246 #, c-format msgid "\t-e = Check events\n" msgstr " -e Prüfung von Ereignissen\n" #: src/tools/dbverify.c:247 #, c-format msgid "\t-x = Check others\n" msgstr " -x Prüfung von Sonstigen Datensätzen\n" #: src/tools/dbverify.c:248 #, c-format msgid "\t-l = Check database structure\n" msgstr " -l Prüfung der Datenbankstruktur\n" #: src/tools/dbverify.c:249 #, c-format msgid "\t-m = Check for records missing data entries\n" msgstr " -m Prüfung auf Datensätze mit fehlenden Einträgen\n" #: src/tools/dbverify.c:250 #, c-format msgid "\t-M = Fix records missing data entries\n" msgstr " -M Korrektur von fehlenden Einträgen\n" #: src/tools/dbverify.c:251 #, c-format msgid "\t-D = Fix bad delete entries\n" msgstr " -D Löschen von ungültigen Einträgen\n" #: src/tools/dbverify.c:252 #, c-format msgid "\t-n = Noisy (echo every record processed)\n" msgstr " -n Detaillierte Ausgabe aller bearbeiteten Datensätze\n" #: src/tools/dbverify.c:253 #, c-format msgid "example: dbverify -ifsex \"%s\"\n" msgstr "Beispiel: dbverify -ifsex \"%s\"\n" #: src/tools/dbverify.c:386 #, c-format msgid "Non-indi name, key=%s, name=%s" msgstr "Keine Name für Person, Schlüssel=%s, Name=%s" #: src/tools/dbverify.c:403 #, c-format msgid "Orphaned name: %s" msgstr "Verwaister Name: %s" #: src/tools/dbverify.c:417 #, c-format msgid "Ghost name: %s -> %s" msgstr "Geistername: %s -> %s" #: src/tools/dbverify.c:449 #, c-format msgid "Orphaned refn: %s" msgstr "Verwaiste REFN: %s" #: src/tools/dbverify.c:489 #, c-format msgid "Duplicate name for %s (%s)" msgstr "Doppelter Name für %s (%s)" #: src/tools/dbverify.c:524 #, c-format msgid "Duplicate refn for %s (%s)" msgstr "Doppelte REFN für %s (%s)" #: src/tools/dbverify.c:637 #, c-format msgid "Duplicate individual for %s" msgstr "Doppelte Person für %s" #: src/tools/dbverify.c:679 #, c-format msgid "Bad name for individual %s: %s" msgstr "Ungültiger Name für %s: %s" #: src/tools/dbverify.c:697 src/tools/dbverify.c:721 #, c-format msgid "Bad family reference (%s) individual %s" msgstr "Ungültiger Verweis auf Familie (%s) Person %s" #: src/tools/dbverify.c:703 #, c-format msgid "Missing child (%s) in family (%s)" msgstr "Kind (%s) fehlt in Familie (%s)" #: src/tools/dbverify.c:707 #, c-format msgid "Fixed missing child (%s) in family (%s)" msgstr "Fehlendes Kind (%s) in Familie (%s) korrigiert" #: src/tools/dbverify.c:727 #, c-format msgid "Missing spouse (%s) in family (%s)" msgstr "Ehepartner (%s) fehlt in Familie (%s)" #: src/tools/dbverify.c:731 #, c-format msgid "Fixed missing spouse (%s) in family (%s)" msgstr "Fehlender Ehepartner (%s) in Familie (%s) korrigiert" #: src/tools/dbverify.c:765 #, c-format msgid "Duplicate family for %s" msgstr "Familie doppelt belegt: %s" #: src/tools/dbverify.c:816 #, c-format msgid "Bad HUSB reference (%s) in family %s" msgstr "Verweis auf Ehemann (%s) in Familie %s ungültig" #: src/tools/dbverify.c:822 #, c-format msgid "Fixed Bad HUSB reference (%s) in family %s" msgstr "Ungültigen Verweis auf Ehemann (%s) in Familie %s korrigiert" #: src/tools/dbverify.c:831 #, c-format msgid "Improper HUSB (%s) in family (%s)" msgstr "Verweis auf Ehemann (%s) in Familie (%s) fehlerhaft" #: src/tools/dbverify.c:844 #, c-format msgid "Bad wife reference (%s) in family %s" msgstr "Verweis auf Ehefrau (%s) in Familie %s ungültig" #: src/tools/dbverify.c:850 #, c-format msgid "Fixed Bad wife reference (%s) in family %s" msgstr "Ungültiger Verweis auf Ehefrau (%s) in Familie %s korrigiert" #: src/tools/dbverify.c:859 #, c-format msgid "Improper wife (%s) in family (%s)" msgstr "Verweis auf Ehefrau (%s) in Familie (%s) fehlerhaft" #: src/tools/dbverify.c:872 #, c-format msgid "Bad child reference (%s) in family %s" msgstr "Verweis auf Kind (%s) in Familie %s ungültig" #: src/tools/dbverify.c:878 #, c-format msgid "Fixed bad child reference (%s) in family %s" msgstr "Ungültiger Verweis auf Kind (%s) in Familie %s korrigiert" #: src/tools/dbverify.c:887 #, c-format msgid "Improper child: Child (%s) without FAMC reference to family (%s)" msgstr "Ungültiges Kind: In Kind (%s) fehlt FAMC-Verweis auf Familie (%s)" #: src/tools/dbverify.c:895 #, c-format msgid "Empty family (%s)" msgstr "Familie ist leer (%s)" #: src/tools/dbverify.c:897 #, c-format msgid "Single person family (%s)" msgstr "Familie besteht aus einer Person (%s)" #: src/tools/dbverify.c:923 #, c-format msgid "Duplicate source for %s" msgstr "Doppelte Quelle für %s" #: src/tools/dbverify.c:939 #, c-format msgid "Duplicate event for %s" msgstr "Doppeltes Ereignis für %s" #: src/tools/dbverify.c:955 #, c-format msgid "Duplicate record for %s" msgstr "Doppelter Datensatz für %s" #: src/tools/dbverify.c:1026 #, c-format msgid "Bad pointer (in %s): %s" msgstr "Verweis (in %s) ungültig: %s" #: src/tools/dbverify.c:1064 #, c-format msgid "Missing undeleted record %c%d" msgstr "Wiederhergestellter Datensatz %c%d fehlt" #: src/tools/dbverify.c:1071 #, c-format msgid "Fixed missing undeleted record %c%d" msgstr "Fehlender wiederhergestellter Datensatz %c%d korrigiert" #: src/tools/dbverify.c:1075 #, c-format msgid "Failed to fix missing undeleted record %c%d" msgstr "Korrektur von fehlendem wiederhergestellten Datensatz %c%d fehlgeschlagen" #: src/tools/dbverify.c:1087 #, c-format msgid "Delete set contains valid record %s" msgstr "Löschauftrag enthält gültigen Datensatz %s" #: src/tools/dbverify.c:1092 #, c-format msgid "Fixed delete set contains valid record %s" msgstr "Gültigen Datensatz %s in Löschauftrag korrigiert" #: src/tools/dbverify.c:1096 #, c-format msgid "Failed to fix missing undeleted record %s" msgstr "Korrektur von gültigem Datensatz %s in Löschauftrag fehlgeschlagen" #: src/tools/dbverify.c:1117 #, c-format msgid "Master fkey misaligned" msgstr "Hauptschlüssel ist falsch ausgerichtet" #: src/tools/dbverify.c:1144 #, c-format msgid "Cycle in indexes, file %s found again!\n" msgstr "Zyklische Verweise im Index, Datei %s mehrfach gefunden.\n" #: src/tools/dbverify.c:1151 #, c-format msgid "Error loading index at key" msgstr "Fehler beim Laden des Index für Schlüssel" #: src/tools/dbverify.c:1199 #, c-format msgid "First key in block below parent's limit\n" msgstr "Erster Schlüssel im Block ist niedriger als Untergrenze des Elternblocks\n" #: src/tools/dbverify.c:1207 #, c-format msgid "Last key in block above parent's limit\n" msgstr "Letzter Schlüssel im Block is größer als Obergrenze des Elternblocks\n" #: src/tools/dbverify.c:1215 #, c-format msgid "Key not below next key" msgstr "Schlüsselreihenfolge ist nicht aufsteigend" #: src/tools/dbverify.c:1232 src/tools/dbverify.c:1234 msgid "data block" msgstr "Datenblock" #: src/tools/dbverify.c:1235 #, c-format msgid "%s fkey=%d, file=%s" msgstr "%s fkey=%d, Datei=%s" #: src/tools/dbverify.c:1248 #, c-format msgid "Invalid errs array[%d] in dbverify - fix program\n" msgstr "Ungültige Fehlermeldung [%d] in dbverify - Programm reparieren\n" #: src/tools/dbverify.c:1285 #, c-format msgid "Missing data record (%s)" msgstr "Fehlender Datensatz (%s)" #: src/tools/dbverify.c:1289 #, c-format msgid "Fixed missing data record (%s)" msgstr "Fehlenden Datensatz korrigiert (%s)" #: src/tools/dbverify.c:1420 #, c-format msgid "Checking %s" msgstr "Prüfe %s" #: src/tools/dbverify.c:1476 #, c-format msgid "%d error" msgid_plural "%d errors" msgstr[0] "%d Fehler" msgstr[1] "%d Fehler" #: src/tools/dbverify.c:1480 #, c-format msgid "%d fixed" msgid_plural "%d fixed" msgstr[0] "%d repariert" msgstr[1] "%d repariert" #: src/tools/dbverify.c:1487 msgid "No errors found" msgstr "Keine Fehler gefunden" #: src/tools/dbverify.c:1506 #, c-format msgid "FATAL ERROR: " msgstr "Verhängnisvoller Fehler: " #: src/tools/dbverify.c:1511 #, c-format msgid "In file <%s> at line %d" msgstr "In Datei <%s> in Zeile %d" #~ msgid "Program" #~ msgstr "Programm" #~ msgid "Error: output file <%s> could not be created.\n" #~ msgstr "Fehler: Ausgabedatei <%s> konnte nicht erstellt werden.\n" #~ msgid "" #~ "usage: dbverify -(flags) \n" #~ "flags:\n" #~ "\t-a = Perform all checks (does not include fixes)\n" #~ "\t-g = Check for ghosts (names/refns)\n" #~ "\t-G = Check for & fix ghosts (names/refns)\n" #~ "\t-i = Check individuals\n" #~ "\t-f = Check families\n" #~ "\t-s = Check sours\n" #~ "\t-e = Check events\n" #~ "\t-x = Check others\n" #~ "\t-n = Noisy (echo every record processed)\n" #~ msgstr "" #~ "Aufruf: dbverify -(Parameter) \n" #~ "\t-a = Alle Tests durchführen (keine Änderungen vornehmen)\n" #~ "\t-g = Einträge ohne Name/REFN suchen\n" #~ "\t-G = Einträge ohne Name/REFN suchen + reparieren\n" #~ "\t-i = Personen prüfen\n" #~ "\t-f = Familien prüfen\n" #~ "\t-s = Quellen prüfen\n" #~ "\t-e = Ereignisse prüfen\n" #~ "\t-x = Andere Daten prüfen\n" #~ "\t-n = Datensatz bei Bearbeitung anzeigen\n" #~ msgid "Added (%dP, %dF, %dS, %dE, %dX) records" #~ msgstr "" #~ "%d Pers., %d Fam., %d Quellen, %d Ereignisse und %d Sonst. hinzugefügt." #~ msgid "Error initializing %s map.\n" #~ msgstr "Fehler beim Start der Übersicht %s.\n" #~ msgid "(%s: %d spouse(s), %d child(ren))" #~ msgstr "(%s: %d Ehegatte(n), %d Kind(er))" #~ msgid "v Review visit history (%d records)" #~ msgstr "v Liste zuletzt angezeigter Personen (%d Datensätze)" #~ msgid "c Review change history (%d records)" #~ msgstr "c Liste letzter Veränderungen (%d Datensätze)" #~ msgid "" #~ "\n" #~ "Parsing Error in <%s>" #~ msgstr "" #~ "\n" #~ "Fehler bei der Analyse von <%s>" #~ msgid "" #~ "\n" #~ "Runtime Error in: <%s>" #~ msgstr "" #~ "\n" #~ "Laufzeitfehler bei: <%s>" #~ msgid "" #~ "\n" #~ "Report Errors: %s" #~ msgstr "" #~ "\n" #~ "Report fehlerhaft: %s" lifelines-3.0.61/po/el.gmo0000700002540200244210000000160410656417754015503 0ustar prappDomain UsersÞ• „ì017>GPX]bhlu }"‡ª»Îãú- <GZm   aprilaugustdecemberfebruaryjanuaryjulyjunemarchmaynovemberoctoberseptemberProject-Id-Version: lifelines 3.0.19 Report-Msgid-Bugs-To: POT-Creation-Date: 2007-08-08 15:56-0400 PO-Revision-Date: 2002-05-28 21:06-0400 Last-Translator: None yet Language-Team: Not submitted yet MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit απÏίλιοςαÏγουστοςδεκέμβÏιοςφεβÏουάÏιοςιανουάÏιοςιοÏλιοςιοÏνιοςμάÏτιοςμάϊοςνοέμβÏιοςοκτώβÏιοςσεπτέμβÏιοςlifelines-3.0.61/po/el.po0000700002540200244210000030345010656417746015344 0ustar prappDomain Users# Perry's pseudo-Greek translation. # Copyright (C) YEAR Free Software Foundation, Inc. # FIRST AUTHOR , YEAR. # Please, if you are Greek, feel free to replace this with a real one! # #, fuzzy msgid "" msgstr "" "Project-Id-Version: lifelines 3.0.19\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-08-08 15:56-0400\n" "PO-Revision-Date: 2002-05-28 21:06-0400\n" "Last-Translator: None yet\n" "Language-Team: Not submitted yet\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/btree/btrec.c:369 #, c-format msgid "Failed (errno=%d) to open blockfile (rkey=%s): %s" msgstr "" #: src/btree/btrec.c:438 #, c-format msgid "Btree lookup looped back to master (%ld)!" msgstr "" #: src/gedlib/charmaps.c:769 msgid "" msgstr "" #. TRANSLATORS: seconds time interval #: src/gedlib/dateprint.c:783 #, c-format msgid "%02ds" msgstr "" #. TRANSLATORS: minutes & seconds time interval #: src/gedlib/dateprint.c:789 #, c-format msgid "%dm%02ds" msgstr "" #. TRANSLATORS: hours & minutes time interval #: src/gedlib/dateprint.c:795 #, c-format msgid "%dh%02dm" msgstr "" #. TRANSLATORS: days & hours time interval #: src/gedlib/dateprint.c:801 #, c-format msgid "%dd%02dh" msgstr "" #. TRANSLATORS: years & days time interval #: src/gedlib/dateprint.c:805 #, c-format msgid "%dy%03dd" msgstr "" #: src/gedlib/dbcontext.c:276 msgid "Database error: -- " msgstr "" #: src/gedlib/dbcontext.c:280 msgid "requested database does not exist." msgstr "" #: src/gedlib/dbcontext.c:283 msgid "db directory is file, not directory." msgstr "" #: src/gedlib/dbcontext.c:286 msgid "creation of new database failed." msgstr "" #: src/gedlib/dbcontext.c:289 msgid "error accessing database directory." msgstr "" #: src/gedlib/dbcontext.c:292 msgid "no keyfile (directory does not appear to be a database)." msgstr "" #: src/gedlib/dbcontext.c:295 msgid "could not open, read or write an index file." msgstr "" #: src/gedlib/dbcontext.c:298 msgid "could not open, read or write the key file." msgstr "" #: src/gedlib/dbcontext.c:301 msgid "could not open, read or write the key file (to alter database)." msgstr "" #: src/gedlib/dbcontext.c:304 msgid "could not open, read or write a block file." msgstr "" #: src/gedlib/dbcontext.c:307 msgid "name of database is too long." msgstr "" #: src/gedlib/dbcontext.c:310 msgid "The database is already open for writing." msgstr "" #: src/gedlib/dbcontext.c:313 msgid "The database is locked (no readwrite access)." msgstr "" #: src/gedlib/dbcontext.c:316 msgid "The database is unlocked." msgstr "" #: src/gedlib/dbcontext.c:319 msgid "keyfile is corrupt." msgstr "" #: src/gedlib/dbcontext.c:322 msgid "keyfile is wrong alignment." msgstr "" #: src/gedlib/dbcontext.c:325 msgid "keyfile is wrong version." msgstr "" #: src/gedlib/dbcontext.c:328 msgid "Existing database found." msgstr "" #: src/gedlib/dbcontext.c:332 #, c-format msgid "The database is already opened for read access by %d user." msgid_plural "The database is already opened for read access by %d users." msgstr[0] "" msgstr[1] "" #: src/gedlib/dbcontext.c:338 msgid "Invalid properties set for new database" msgstr "" #: src/gedlib/dbcontext.c:341 msgid "Undefined database error -- fix program." msgstr "" #: src/gedlib/gedcom.c:112 msgid "Missing NAME line in INDI record; record ignored.\n" msgstr "" #: src/gedlib/init.c:228 src/tools/btedit.c:207 #, c-format msgid "Copyright (C) 1991-2007 Thomas T. Wetmore IV et al." msgstr "" #: src/gedlib/init.c:230 src/tools/btedit.c:209 #, c-format msgid "" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." msgstr "" #: src/gedlib/init.c:235 src/tools/btedit.c:214 #, c-format msgid "Written by Tom Wetmore. Maintained at lifelines.sourceforge.net." msgstr "" #: src/gedlib/keytonod.c:686 #, c-format msgid "Database error caused by reference to nonexisting key <%s>." msgstr "" #: src/gedlib/keytonod.c:687 msgid "It might be possible to fix this with btedit." msgstr "" #: src/gedlib/keytonod.c:688 msgid "Neighboring keys include:" msgstr "" #: src/gedlib/keytonod.c:1045 #, c-format msgid "Bad cache entry <%s> != <%s>" msgstr "" #: src/gedlib/keytonod.c:1072 #, c-format msgid "Cache [%s] overflowed its max size (%d)" msgstr "" #: src/gedlib/messages.c:44 msgid "You must identify a database." msgstr "" #: src/gedlib/messages.c:45 #, fuzzy msgid "What directory holds (or will hold) the LifeLines database? (? to list)" msgstr "που ειναι το database ;" #: src/gedlib/messages.c:46 msgid "enter path: " msgstr "" #: src/gedlib/messages.c:47 msgid "There is no LifeLines database in that directory." msgstr "" #: src/gedlib/messages.c:48 msgid "Do you want to create a database there?" msgstr "" #: src/gedlib/messages.c:49 msgid "Argument to lock (-l) must be y or n." msgstr "" #: src/gedlib/messages.c:50 msgid "Cannot remove last person from family." msgstr "" #: src/gedlib/messages.c:52 msgid "lines [-adkrwiflntcuFxoCzI] [database] # Use -F for Finnish database" msgstr "" #: src/gedlib/messages.c:54 msgid "lines [-adkrwiflntcuxoCzI] [database] # Finnish database" msgstr "" #: src/gedlib/messages.c:56 msgid "lines [-adkrwiflntcuxoCzI] [database]" msgstr "" #: src/gedlib/messages.c:58 msgid "The database is read only; you may not add records." msgstr "" #: src/gedlib/messages.c:59 msgid "The database is read only; you may not change records." msgstr "" #: src/gedlib/messages.c:60 msgid "The database is read only; you may not merge records." msgstr "" #: src/gedlib/messages.c:61 msgid "The database is read only; you may not remove records." msgstr "" #: src/gedlib/messages.c:62 msgid "The database is read only." msgstr "" #: src/gedlib/messages.c:64 msgid "Name, key, refn, list, or @:" msgstr "" #: src/gedlib/messages.c:65 msgid "enter key or refn: " msgstr "" #: src/gedlib/messages.c:66 msgid "Please choose the child to remove from the family." msgstr "" #: src/gedlib/messages.c:67 msgid "Please choose the spouse/parent to remove from the family." msgstr "" #: src/gedlib/messages.c:68 msgid "From which family is the child to be removed?" msgstr "" #: src/gedlib/messages.c:69 msgid "From which family is the spouse/parent to be removed?" msgstr "" #: src/gedlib/messages.c:70 msgid "Identify family (enter nothing to identify by individual members)." msgstr "" #: src/gedlib/messages.c:71 msgid "Identify a spouse of the family, if known." msgstr "" #: src/gedlib/messages.c:72 msgid "Identify a child of the family, if known." msgstr "" #: src/gedlib/messages.c:73 msgid "Identify the first child to swap." msgstr "" #: src/gedlib/messages.c:74 msgid "Identify the second child to swap." msgstr "" #: src/gedlib/messages.c:75 msgid "Identify the child to reorder." msgstr "" #: src/gedlib/messages.c:76 msgid "Identify the first family/spouse to swap." msgstr "" #: src/gedlib/messages.c:77 msgid "Identify the second family/spouse to swap." msgstr "" #: src/gedlib/messages.c:78 msgid "Please choose the spouse/parent to browse to." msgstr "" #: src/gedlib/messages.c:79 msgid "Please choose the first spouse/parent to browse to." msgstr "" #: src/gedlib/messages.c:80 msgid "Please choose the second spouse/parent to browse to." msgstr "" #: src/gedlib/messages.c:81 msgid "Please choose the child to browse to." msgstr "" #: src/gedlib/messages.c:82 msgid "Please choose the first child to browse to." msgstr "" #: src/gedlib/messages.c:83 msgid "Please choose the second child to browse to." msgstr "" #: src/gedlib/messages.c:84 msgid "Please choose the family to browse to." msgstr "" #: src/gedlib/messages.c:85 msgid "Enter Family Number to Browse to" msgstr "" #: src/gedlib/messages.c:86 msgid "Please choose the first family to browse to." msgstr "" #: src/gedlib/messages.c:87 msgid "Please choose the second family to browse to." msgstr "" #: src/gedlib/messages.c:88 msgid "Please choose the father/husband to browse to." msgstr "" #: src/gedlib/messages.c:89 msgid "Please choose the first father/husband to browse to." msgstr "" #: src/gedlib/messages.c:90 msgid "Please choose the second father/husband to browse to." msgstr "" #: src/gedlib/messages.c:91 msgid "Please choose the mother/wife to browse to." msgstr "" #: src/gedlib/messages.c:92 msgid "Please choose the first mother/wife to browse to." msgstr "" #: src/gedlib/messages.c:93 msgid "Please choose the second mother/wife to browse to." msgstr "" #: src/gedlib/messages.c:94 msgid "Identify a parent in the family having children swapped." msgstr "" #: src/gedlib/messages.c:95 msgid "Whose families/spouses are to be swapped?" msgstr "" #: src/gedlib/messages.c:96 msgid "Identify one of the child's parents, if known." msgstr "" #: src/gedlib/messages.c:98 src/liflines/scan.c:127 msgid "Enter pattern to match against refn." msgstr "" #: src/gedlib/messages.c:100 msgid "Please choose from among these people." msgstr "" #: src/gedlib/messages.c:101 msgid "Please choose from among these records." msgstr "" #: src/gedlib/messages.c:102 msgid "Is this the new child? " msgstr "" #: src/gedlib/messages.c:103 msgid "Is this the new spouse? " msgstr "" #: src/gedlib/messages.c:104 msgid "Is this the person? Select if so." msgstr "" #: src/gedlib/messages.c:105 msgid "Is this the record? Select if so." msgstr "" #: src/gedlib/messages.c:106 msgid "Select the child the new child precedes or select last." msgstr "" #: src/gedlib/messages.c:107 msgid "Please identify next person to browse to." msgstr "" #: src/gedlib/messages.c:108 msgid "Please identify record to browse to." msgstr "" #: src/gedlib/messages.c:109 msgid "Please identify one of the spouses." msgstr "" #: src/gedlib/messages.c:110 msgid "Please identify person or persons to browse to." msgstr "" #: src/gedlib/messages.c:111 msgid "Please choose family create operation." msgstr "" #: src/gedlib/messages.c:112 msgid "Do you want to enter another name?" msgstr "" #: src/gedlib/messages.c:114 msgid "This person is not a spouse or parent in any family." msgstr "" #: src/gedlib/messages.c:115 msgid "This person is not a child in any family." msgstr "" #: src/gedlib/messages.c:116 msgid "There is no one in the database with that name or key." msgstr "" #: src/gedlib/messages.c:118 msgid "This person's father is not in the database." msgstr "" #: src/gedlib/messages.c:119 msgid "This person's mother is not in the database." msgstr "" #: src/gedlib/messages.c:120 msgid "This person has no spouse in the database." msgstr "" #: src/gedlib/messages.c:121 msgid "This person has no younger sibling in the database." msgstr "" #: src/gedlib/messages.c:122 msgid "This person has no older sibling in the database." msgstr "" #: src/gedlib/messages.c:123 msgid "This person's parents are not in the database." msgstr "" #: src/gedlib/messages.c:124 msgid "This family has no male spouse/parent in the database." msgstr "" #: src/gedlib/messages.c:125 msgid "This family has no female spouse/parent in the database." msgstr "" #: src/gedlib/messages.c:126 msgid "There are no children in the database for this family." msgstr "" #: src/gedlib/messages.c:127 msgid "This person has no children in the database." msgstr "" #: src/gedlib/messages.c:128 msgid "No such child." msgstr "" #: src/gedlib/messages.c:129 msgid "No such person." msgstr "" #: src/gedlib/messages.c:130 msgid "No such record." msgstr "" #: src/gedlib/messages.c:131 msgid "No such family." msgstr "" #: src/gedlib/messages.c:132 msgid "No sources present." msgstr "" #: src/gedlib/messages.c:133 msgid "Please choose the source to view." msgstr "" #: src/gedlib/messages.c:134 msgid "No events present." msgstr "" #: src/gedlib/messages.c:135 msgid "Please choose the event to view." msgstr "" #: src/gedlib/messages.c:136 msgid "No others present." msgstr "" #: src/gedlib/messages.c:137 msgid "Please choose the other to view." msgstr "" #: src/gedlib/messages.c:138 msgid "No notes present." msgstr "" #: src/gedlib/messages.c:139 msgid "Please choose the note to view." msgstr "" #: src/gedlib/messages.c:140 msgid "No references present." msgstr "" #: src/gedlib/messages.c:141 msgid "Please choose the reference to view." msgstr "" #: src/gedlib/messages.c:142 msgid "Duplicated REFN - please choose." msgstr "" #: src/gedlib/messages.c:144 msgid "New spouse/parent has unknown sex; can't add to family." msgstr "" #: src/gedlib/messages.c:145 msgid "The persons are not of opposite sex; can't make family." msgstr "" #: src/gedlib/messages.c:146 msgid "This person is not a spouse in the family; can't remove." msgstr "" #: src/gedlib/messages.c:147 msgid "This person is not a child in the family; can't remove." msgstr "" #: src/gedlib/messages.c:148 msgid "This person's sex is not known; can't make family." msgstr "" #: src/gedlib/messages.c:149 msgid "This family already has a husband/male parent." msgstr "" #: src/gedlib/messages.c:150 msgid "This family already has a wife/female parent." msgstr "" #: src/gedlib/messages.c:151 msgid "This family has both spouses/parents; can't add another." msgstr "" #: src/gedlib/messages.c:152 msgid "This family has neither spouse/parent; can't remove." msgstr "" #: src/gedlib/messages.c:153 msgid "This family still has links; not removed." msgstr "" #: src/gedlib/messages.c:155 msgid "Choose a family by selecting a spouse/parent." msgstr "" #: src/gedlib/messages.c:156 msgid "" "Do you want to edit the person again? (Otherwise changes will be discarded.)" msgstr "" #: src/gedlib/messages.c:157 msgid "Do you want to edit the person again?" msgstr "" #: src/gedlib/messages.c:158 msgid "" "Do you want to edit the family again? (Otherwise changes will be discarded.)" msgstr "" #: src/gedlib/messages.c:159 msgid "Do you want to edit the family again?" msgstr "" #: src/gedlib/messages.c:160 msgid "" "Do you want to edit the source again? (Otherwise changes will be discarded.)" msgstr "" #: src/gedlib/messages.c:161 msgid "Do you want to edit the source again?" msgstr "" #: src/gedlib/messages.c:162 msgid "" "Do you want to edit the event again? (Otherwise changes will be discarded.)" msgstr "" #: src/gedlib/messages.c:163 msgid "Do you want to edit the event again?" msgstr "" #: src/gedlib/messages.c:164 msgid "" "Do you want to edit the record again? (Otherwise changes will be discarded.)" msgstr "" #: src/gedlib/messages.c:165 msgid "Do you want to edit the record again?" msgstr "" #: src/gedlib/messages.c:166 msgid "Whom do you want to edit?" msgstr "" #: src/gedlib/messages.c:167 msgid "Which source record do you want to edit?" msgstr "" #: src/gedlib/messages.c:168 msgid "Which event record do you want to edit?" msgstr "" #: src/gedlib/messages.c:169 msgid "What record do you want to edit?" msgstr "" #: src/gedlib/messages.c:171 msgid "Do you really want to add this person to the database?" msgstr "" #: src/gedlib/messages.c:172 msgid "Do you really want to add this family to the database?" msgstr "" #: src/gedlib/messages.c:173 msgid "Do you really want to add this child to the family?" msgstr "" #: src/gedlib/messages.c:174 msgid "Do you really want to add this spouse/parent to the family?" msgstr "" #: src/gedlib/messages.c:175 msgid "Do you really want to add this source to the database?" msgstr "" #: src/gedlib/messages.c:176 msgid "Do you really want to add this event to the database?" msgstr "" #: src/gedlib/messages.c:177 msgid "Do you really want to add this record to the database?" msgstr "" #: src/gedlib/messages.c:178 msgid "Do you really want to update this person?" msgstr "" #: src/gedlib/messages.c:179 msgid "Do you really want to update this family?" msgstr "" #: src/gedlib/messages.c:180 msgid "Do you really want to update this source?" msgstr "" #: src/gedlib/messages.c:181 msgid "Do you really want to update this event?" msgstr "" #: src/gedlib/messages.c:182 msgid "Do you really want to update this record?" msgstr "" #: src/gedlib/messages.c:183 msgid "Are you sure you want to remove the person from the database?" msgstr "" #: src/gedlib/messages.c:184 msgid "Are you sure you want to remove this record from the database?" msgstr "" #: src/gedlib/messages.c:185 msgid "Remove this family record?" msgstr "" #: src/gedlib/messages.c:186 #, c-format msgid "(Family %s (%s, %s)" msgstr "" #: src/gedlib/messages.c:187 msgid "Do you really want to merge these two persons?" msgstr "" #: src/gedlib/messages.c:188 msgid "Do you really want to merge these two families?" msgstr "" #: src/gedlib/messages.c:189 msgid "Do you really want to swap spouse orders?" msgstr "" #: src/gedlib/messages.c:190 msgid "Do you really want to reorder children?" msgstr "" #: src/gedlib/messages.c:191 msgid "Do you really want to remove this child from his/her family?" msgstr "" #: src/gedlib/messages.c:192 msgid "Do you really want to remove this spouse from his/her family?" msgstr "" #: src/gedlib/messages.c:193 msgid "Too many spouses to display full list" msgstr "" #: src/gedlib/messages.c:194 msgid "These persons are children in different families." msgstr "" #: src/gedlib/messages.c:195 msgid "Are you sure you want to merge them?" msgstr "" #: src/gedlib/messages.c:197 msgid "There is something wrong with the data." msgstr "" #: src/gedlib/messages.c:198 msgid "Please identify the child." msgstr "" #: src/gedlib/messages.c:199 msgid "Please identify one of the child's siblings." msgstr "" #: src/gedlib/messages.c:200 msgid "Identify spouse/parent to add to an existing family." msgstr "" #: src/gedlib/messages.c:201 msgid "Identify spouse/parent already in family, if known." msgstr "" #: src/gedlib/messages.c:202 msgid "Identify child already in family." msgstr "" #: src/gedlib/messages.c:204 msgid "This person is already a child in a family." msgstr "" #: src/gedlib/messages.c:205 msgid "Identify a spouse/parent for the new family." msgstr "" #: src/gedlib/messages.c:206 msgid "Identify the second spouse/parent, if known." msgstr "" #: src/gedlib/messages.c:207 msgid "Both families must have husbands/fathers." msgstr "" #: src/gedlib/messages.c:208 msgid "Both families must have wives/mothers." msgstr "" #: src/gedlib/messages.c:210 msgid "Identify spouse/parent in second family, if known." msgstr "" #: src/gedlib/messages.c:211 msgid "Identify child in second family." msgstr "" #: src/gedlib/messages.c:212 msgid "Identify second person to browse to." msgstr "" #: src/gedlib/messages.c:214 msgid "Create a family with this person as a child." msgstr "" #: src/gedlib/messages.c:215 msgid "Create a family with this person as a spouse/parent." msgstr "" #: src/gedlib/messages.c:216 msgid "This family has less than two children; can't swap." msgstr "" #: src/gedlib/messages.c:217 msgid "This person is a spouse/parent in less than two families." msgstr "" #: src/gedlib/messages.c:218 msgid "Something impossible happened. Contact tech support." msgstr "" #: src/gedlib/messages.c:220 msgid "The two children were swapped." msgstr "" #: src/gedlib/messages.c:221 msgid "The two families were swapped." msgstr "" #: src/gedlib/messages.c:222 msgid "The child was removed from his/her family." msgstr "" #: src/gedlib/messages.c:223 msgid "The spouse was removed from his/her family." msgstr "" #: src/gedlib/messages.c:225 msgid "A person cannot be merged with him/herself." msgstr "" #: src/gedlib/messages.c:226 msgid "A family cannot be merged with itself." msgstr "" #: src/gedlib/messages.c:227 msgid "Two persons with different parents cannot be merged." msgstr "" #: src/gedlib/messages.c:228 msgid "Two parents of different sexes cannot be merged." msgstr "" #: src/gedlib/messages.c:229 msgid "The families have different fathers/husbands; cannot merge." msgstr "" #: src/gedlib/messages.c:230 msgid "The families have different wives/mothers; cannot merge." msgstr "" #: src/gedlib/messages.c:231 msgid "Who do you want to remove from the database?" msgstr "" #: src/gedlib/messages.c:232 msgid "What record do you want to remove from the database?" msgstr "" #: src/gedlib/messages.c:233 msgid "Place the child last in the family." msgstr "" #: src/gedlib/messages.c:234 msgid "Error in abbreviations file." msgstr "" #: src/gedlib/messages.c:235 msgid "Error in user options file." msgstr "" #: src/gedlib/messages.c:236 msgid "Error in character mapping file." msgstr "" #: src/gedlib/messages.c:237 #, c-format msgid "(Separator is %s)" msgstr "" #: src/gedlib/messages.c:238 msgid "Do you want to re-edit it?" msgstr "" #: src/gedlib/messages.c:240 #, c-format msgid "%s was added to the database." msgstr "" #: src/gedlib/messages.c:241 #, c-format msgid "%s was added as a child." msgstr "" #: src/gedlib/messages.c:242 #, c-format msgid "%s was added as a spouse and/or parent." msgstr "" #: src/gedlib/messages.c:243 msgid "The new family was added to the database." msgstr "" #: src/gedlib/messages.c:244 #, c-format msgid "%s was modified in the database." msgstr "" #: src/gedlib/messages.c:245 msgid "The family was modified in the database." msgstr "" #: src/gedlib/messages.c:246 msgid "The source was modified in the database." msgstr "" #: src/gedlib/messages.c:247 msgid "The event was modified in the database." msgstr "" #: src/gedlib/messages.c:248 msgid "The record was modified in the database." msgstr "" #: src/gedlib/messages.c:250 #, c-format msgid "Could not open file %s." msgstr "" #: src/gedlib/messages.c:251 msgid "Filepath too long." msgstr "" #: src/gedlib/messages.c:253 msgid "Please mark a record first." msgstr "" #: src/gedlib/messages.c:255 #, c-format msgid "The current list is now named %s." msgstr "" #: src/gedlib/messages.c:256 msgid "The current list is not named." msgstr "" #: src/gedlib/messages.c:257 msgid "What should the name of this list be?" msgstr "" #: src/gedlib/messages.c:258 msgid "No persons were added to the current list." msgstr "" #: src/gedlib/messages.c:259 msgid "What persons or list do you want to add to the current list?" msgstr "" #: src/gedlib/messages.c:260 msgid "You are at the bottom of the list." msgstr "" #: src/gedlib/messages.c:261 msgid "You are at the top of the list." msgstr "" #: src/gedlib/messages.c:262 msgid "New persons were added to the current list." msgstr "" #: src/gedlib/messages.c:264 msgid "System error: illegal map code" msgstr "" #: src/gedlib/messages.c:265 msgid "No such translation table in this database" msgstr "" #: src/gedlib/messages.c:268 msgid "Because of errors the GEDCOM file was not loaded.\n" msgstr "" #: src/gedlib/messages.c:269 msgid "No errors; adding records with original keys..." msgstr "" #: src/gedlib/messages.c:270 msgid "No errors; adding records with new keys..." msgstr "" #: src/gedlib/messages.c:271 msgid "Use original keys from GEDCOM file?" msgstr "" #: src/gedlib/messages.c:272 msgid "Proceed?" msgstr "" #: src/gedlib/messages.c:273 msgid "Enter name of output archive file." msgstr "" #: src/gedlib/messages.c:274 #, c-format msgid "Database `%s' has been saved in `%s'." msgstr "" #: src/gedlib/messages.c:275 msgid "Enter name of translation table file to write" msgstr "" #: src/gedlib/messages.c:276 msgid "Enter name of translation table file to read" msgstr "" #: src/gedlib/messages.c:277 #, c-format msgid "Line %d: The person defined here has no key: skipped." msgstr "" #: src/gedlib/messages.c:278 #, c-format msgid "Line %d: The family defined here has no key." msgstr "" #: src/gedlib/messages.c:279 #, c-format msgid "Lines %d and %d: Person %s is multiply defined: skipped." msgstr "" #: src/gedlib/messages.c:280 #, c-format msgid "Lines %d and %d: Family %s is multiply defined." msgstr "" #: src/gedlib/messages.c:281 #, c-format msgid "Line %d: Person %s has an incorrect key: skipped." msgstr "" #: src/gedlib/messages.c:282 #, c-format msgid "Line %d: Family %s has an incorrect key." msgstr "" #: src/gedlib/messages.c:283 #, c-format msgid "Person %s is referred to but not defined." msgstr "" #: src/gedlib/messages.c:284 #, c-format msgid "Family %s is referred to but not defined." msgstr "" #: src/gedlib/messages.c:285 #, c-format msgid "Source %s is referred to but not defined." msgstr "" #: src/gedlib/messages.c:286 #, c-format msgid "Event %s is referred to but not defined." msgstr "" #: src/gedlib/messages.c:287 #, c-format msgid "Line %d: This line has a level number that is too large." msgstr "" #: src/gedlib/messages.c:288 #, c-format msgid "Line %d: Person defined here has no name." msgstr "" #: src/gedlib/messages.c:294 msgid "" msgstr "" #: src/gedlib/messages.c:296 msgid "What is the name of the program?" msgstr "" #: src/gedlib/messages.c:297 msgid "Please enter the name of the GEDCOM file." msgstr "" #: src/gedlib/messages.c:299 msgid "What is the name of the output file?" msgstr "" #: src/gedlib/messages.c:300 msgid "Malformed configuration file: line too long." msgstr "" #: src/gedlib/messages.c:301 msgid "Unsupported file encoding (no multibyte encodings except UTF-8)." msgstr "" #: src/gedlib/messages.c:302 #, c-format msgid "Unsupported file encoding: %s." msgstr "" #: src/gedlib/messages.c:305 msgid "Enter string for program" msgstr "" #: src/gedlib/messages.c:306 msgid "enter string: " msgstr "" #: src/gedlib/messages.c:307 msgid "enter integer:" msgstr "" #: src/gedlib/messages.c:308 msgid "enter name: " msgstr "" #: src/gedlib/messages.c:309 msgid "Strike any key to continue." msgstr "" #: src/gedlib/messages.c:313 msgid "" "0 SOUR\n" "1 REFN\n" "1 TITL Title\n" "1 AUTH Author" msgstr "" #: src/gedlib/messages.c:314 msgid "" "0 EVEN\n" "1 REFN\n" "1 DATE\n" "1 PLAC\n" "1 INDI\n" " 2 NAME\n" " 2 ROLE\n" "1 SOUR" msgstr "" #: src/gedlib/messages.c:315 msgid "" "0 XXXX\n" "1 REFN" msgstr "" #: src/gedlib/messages.c:319 msgid "The file is as positioned at EOF." msgstr "" #: src/gedlib/messages.c:320 #, c-format msgid "Line %d: This line is empty; EOF?" msgstr "" #: src/gedlib/messages.c:321 #, c-format msgid "Line %d: This line is too long." msgstr "" #: src/gedlib/messages.c:322 #, c-format msgid "Line %d: This line has no level number." msgstr "" #: src/gedlib/messages.c:323 #, c-format msgid "Line %d: This line is incomplete." msgstr "" #: src/gedlib/messages.c:324 #, c-format msgid "Line %d: This line has a bad link." msgstr "" #: src/gedlib/messages.c:325 #, c-format msgid "Line %d: This line needs white space before tag." msgstr "" #: src/gedlib/messages.c:326 #, c-format msgid "Line %d: This line has an illegal level." msgstr "" #: src/gedlib/messages.c:327 msgid "The record begins at wrong level." msgstr "" #: src/gedlib/messages.c:330 msgid "" "\n" "Aborting now. Core dump? [y/n]" msgstr "" #: src/gedlib/messages.c:331 msgid "" "Looks like a program was running.\n" "Check file %1 around line %2.\n" msgstr "" #: src/gedlib/messages.c:332 msgid "signal %1: %2" msgstr "" #: src/gedlib/messages.c:334 msgid "SIGNAL 0" msgstr "" #: src/gedlib/messages.c:335 msgid "HANGUP" msgstr "" #: src/gedlib/messages.c:336 msgid "INTERRUPT" msgstr "" #: src/gedlib/messages.c:337 msgid "QUIT" msgstr "" #: src/gedlib/messages.c:338 msgid "ILLEGAL INSTRUCTION" msgstr "" #: src/gedlib/messages.c:339 msgid "TRACE TRAP" msgstr "" #: src/gedlib/messages.c:340 msgid "ABORT" msgstr "" #: src/gedlib/messages.c:341 msgid "EMT INST" msgstr "" #: src/gedlib/messages.c:342 msgid "FLOATING POINT EXCEPTION" msgstr "" #: src/gedlib/messages.c:343 msgid "KILL" msgstr "" #: src/gedlib/messages.c:344 msgid "BUS ERROR" msgstr "" #: src/gedlib/messages.c:345 msgid "SEGMENTATION ERROR" msgstr "" #: src/gedlib/messages.c:346 msgid "SYSTEM CALL ERROR" msgstr "" #: src/gedlib/messages.c:347 msgid "PIPE WRITE" msgstr "" #: src/gedlib/messages.c:348 msgid "ALARM CLOCK" msgstr "" #: src/gedlib/messages.c:350 msgid "TERMINATE FROM KILL" msgstr "" #: src/gedlib/messages.c:351 msgid "USER SIGNAL 1" msgstr "" #: src/gedlib/messages.c:352 msgid "USER SIGNAL 2" msgstr "" #: src/gedlib/messages.c:353 msgid "DEATH OF CHILD" msgstr "" #: src/gedlib/messages.c:354 msgid "POWER-FAIL RESTART" msgstr "" #: src/gedlib/messages.c:355 msgid "WINDOW CHANGE" msgstr "" #: src/gedlib/messages.c:356 msgid "Unknown signal" msgstr "" #: src/gedlib/messages.c:360 msgid "person" msgstr "" #: src/gedlib/messages.c:361 msgid ", of " msgstr "" #: src/gedlib/messages.c:362 msgid "father" msgstr "" #: src/gedlib/messages.c:363 msgid "mother" msgstr "" #: src/gedlib/messages.c:364 msgid "spouse" msgstr "" #: src/gedlib/messages.c:365 msgid "child" msgstr "" #: src/gedlib/messages.c:368 msgid "m. " msgstr "" #: src/gedlib/messages.c:370 msgid "div. " msgstr "" #: src/gedlib/messages.c:372 msgid "b. " msgstr "" #: src/gedlib/messages.c:374 msgid "bap. " msgstr "" #: src/gedlib/messages.c:376 msgid "d. " msgstr "" #: src/gedlib/messages.c:378 msgid "bur. " msgstr "" #: src/gedlib/messages.c:380 msgid "cb. " msgstr "" #: src/gedlib/messages.c:382 msgid "married: " msgstr "" #: src/gedlib/messages.c:383 msgid "born: " msgstr "" #: src/gedlib/messages.c:384 msgid "bapt: " msgstr "" #: src/gedlib/messages.c:385 msgid "died: " msgstr "" #: src/gedlib/messages.c:386 msgid "buri: " msgstr "" #: src/gedlib/messages.c:390 msgid "You cannot edit the INDI line in a person record." msgstr "" #: src/gedlib/messages.c:391 msgid "You cannot edit the FAMC line in a person record." msgstr "" #: src/gedlib/messages.c:392 msgid "You cannot edit the FAMS lines in a person record." msgstr "" #: src/gedlib/messages.c:393 msgid "You cannot edit the FAM line in a family record." msgstr "" #: src/gedlib/messages.c:394 msgid "You cannot edit the HUSB line in a family record." msgstr "" #: src/gedlib/messages.c:395 msgid "You cannot edit the WIFE line in a family record." msgstr "" #: src/gedlib/messages.c:396 msgid "You cannot edit the CHIL lines in a family record." msgstr "" #: src/gedlib/messages.c:397 msgid "The record is empty." msgstr "" #: src/gedlib/messages.c:398 msgid "The record does not begin with an INDI line." msgstr "" #: src/gedlib/messages.c:399 msgid "The record does not begin with a FAM line." msgstr "" #: src/gedlib/messages.c:400 msgid "The record does not begin with a SOUR line." msgstr "" #: src/gedlib/messages.c:401 msgid "The record does not begin with an EVEN line." msgstr "" #: src/gedlib/messages.c:402 msgid "INDI, FAM, SOUR, EVEN records may not be other records." msgstr "" #: src/gedlib/messages.c:403 msgid "The record contains multiple level 0 lines." msgstr "" #: src/gedlib/messages.c:404 msgid "This person record has bad GEDCOM name syntax." msgstr "" #: src/gedlib/messages.c:405 msgid "You cannot change the sex of a parent." msgstr "" #: src/gedlib/messages.c:406 msgid "REFN key is already in use." msgstr "" #: src/gedlib/messages.c:408 msgid "Tag is too long to connect automatically." msgstr "" #: src/gedlib/messages.c:410 msgid "Database records" msgstr "" #: src/gedlib/messages.c:411 #, c-format msgid "%dI, %dF, %dS, %dE, %dX" msgstr "" #: src/gedlib/messages.c:414 #, c-format msgid "LifeLines %s - Genealogical DB and Programming System" msgstr "" #: src/gedlib/messages.c:415 msgid "Copyright(c) 1991 to 1996, by T. T. Wetmore IV" msgstr "" #: src/gedlib/messages.c:416 #, c-format msgid "Current Database - %s" msgstr "" #: src/gedlib/messages.c:418 msgid " (immutable)" msgstr "" #: src/gedlib/messages.c:420 msgid " (read only)" msgstr "" #: src/gedlib/messages.c:421 msgid "Please choose an operation:" msgstr "" #: src/gedlib/messages.c:422 msgid "Not valid command" msgstr "" #: src/gedlib/messages.c:425 msgid "enter y (yes) or n (no): " msgstr "" #: src/gedlib/messages.c:426 msgid "yYnN" msgstr "" #: src/gedlib/messages.c:427 msgid "yY" msgstr "" #: src/gedlib/messages.c:430 msgid "LifeLines -- Person Browse Screen (* toggles menu)" msgstr "" #: src/gedlib/messages.c:431 msgid "LifeLines -- Family Browse Screen (* toggles menu)" msgstr "" #: src/gedlib/messages.c:432 msgid "LifeLines -- Two Person Browse Screen (* toggles menu)" msgstr "" #: src/gedlib/messages.c:433 msgid "LifeLines -- Two Family Browse Screen (* toggles menu)" msgstr "" #: src/gedlib/messages.c:434 msgid "LifeLines -- Auxiliary Browse Screen (* toggles menu)" msgstr "" #: src/gedlib/messages.c:435 msgid "LifeLines -- List Browse Screen (* toggles menu)" msgstr "" #: src/gedlib/messages.c:439 msgid "Commands: Select by number, u Page Up, d Page Down, i Select, q Quit" msgstr "" #: src/gedlib/messages.c:440 msgid "Commands: u Page Up, d Page Down, q Quit" msgstr "" #: src/gedlib/messages.c:441 msgid "Messages:" msgstr "" #: src/gedlib/messages.c:444 msgid "Please choose from the following options:" msgstr "" #: src/gedlib/messages.c:445 #, c-format msgid "New record is %s" msgstr "" #: src/gedlib/messages.c:446 msgid "Insert xref automatically at bottom of current record." msgstr "" #: src/gedlib/messages.c:447 msgid "Edit current record now to add xref manually." msgstr "" #: src/gedlib/messages.c:448 msgid "Browse new record (without adding xref)." msgstr "" #: src/gedlib/messages.c:449 msgid "Return to current record (without adding xref)." msgstr "" #: src/gedlib/messages.c:452 msgid "Spouse unknown" msgstr "" #: src/gedlib/messages.c:453 msgid "No more history" msgstr "" #: src/gedlib/messages.c:454 msgid "Bad history count" msgstr "" #: src/gedlib/messages.c:455 msgid "Bad backup history count" msgstr "" #: src/gedlib/messages.c:456 msgid "Bad history length" msgstr "" #: src/gedlib/messages.c:457 #, c-format msgid "Delete history (%d entries)?" msgstr "" #: src/gedlib/messages.c:458 msgid "Error accessing data" msgstr "" #: src/gedlib/messages.c:459 msgid "Choose from history" msgstr "" #: src/gedlib/messages.c:460 msgid "" "Cannot combine immutable (-i) or read-only (-r) with read-write (-w) access." msgstr "" #: src/gedlib/messages.c:461 msgid "Cannot combine forceopen (-f) and lock (-l) flags." msgstr "" #: src/gedlib/messages.c:462 msgid "Default path: " msgstr "" #: src/gedlib/messages.c:463 msgid "WARNING: missing keys" msgstr "" #: src/gedlib/messages.c:464 msgid "This does not point to another record in the database!" msgstr "" #: src/gedlib/messages.c:465 msgid "enter file name" msgstr "" #: src/gedlib/messages.c:466 #, c-format msgid "enter file name (*%s)" msgstr "" #: src/gedlib/messages.c:467 msgid "There is no record with that key or reference." msgstr "" #: src/gedlib/messages.c:468 msgid "Database was corrupt." msgstr "" #: src/gedlib/messages.c:471 msgid "Bad decimal number format." msgstr "" #: src/gedlib/messages.c:472 msgid "Bad hexidecimal number format." msgstr "" #: src/gedlib/messages.c:473 msgid "No replacement string on line." msgstr "" #: src/gedlib/messages.c:474 msgid "No original string on line." msgstr "" #: src/gedlib/messages.c:475 msgid "Bad escape format." msgstr "" #: src/gedlib/messages.c:476 #, c-format msgid "%s: line %d (entry %d): %s" msgstr "" #: src/gedlib/messages.c:479 src/liflines/brwsmenu.c:26 msgid "q Return to main menu" msgstr "" #: src/gedlib/messages.c:480 msgid "q Return to previous menu" msgstr "" #: src/gedlib/messages.c:481 msgid "q Quit program" msgstr "" #: src/gedlib/messages.c:482 msgid "Q Quit current database" msgstr "" #: src/gedlib/messages.c:485 msgid "b Browse the persons in the database" msgstr "" #: src/gedlib/messages.c:486 msgid "s Search database" msgstr "" #: src/gedlib/messages.c:487 msgid "a Add information to the database" msgstr "" #: src/gedlib/messages.c:488 msgid "d Delete information from the database" msgstr "" #: src/gedlib/messages.c:489 msgid "r Generate report by entering report name" msgstr "" #: src/gedlib/messages.c:490 msgid "p Pick a report from list and run" msgstr "" #: src/gedlib/messages.c:491 msgid "c Character set options" msgstr "" #: src/gedlib/messages.c:492 msgid "t Modify character translation tables" msgstr "" #: src/gedlib/messages.c:493 msgid "u Miscellaneous utilities" msgstr "" #: src/gedlib/messages.c:494 msgid "x Handle source, event and other records" msgstr "" #: src/gedlib/messages.c:497 msgid "What utility do you want to perform?" msgstr "" #: src/gedlib/messages.c:498 msgid "s Save the database in a GEDCOM file" msgstr "" #: src/gedlib/messages.c:499 msgid "r Read in data from a GEDCOM file" msgstr "" #: src/gedlib/messages.c:500 msgid "R Pick a GEDCOM file and read in" msgstr "" #: src/gedlib/messages.c:501 msgid "k Find a person's key value" msgstr "" #: src/gedlib/messages.c:502 msgid "i Identify a person from key value" msgstr "" #: src/gedlib/messages.c:503 msgid "d Show database statistics" msgstr "" #: src/gedlib/messages.c:504 msgid "m Show memory statistics" msgstr "" #: src/gedlib/messages.c:505 msgid "e Edit the place abbreviation file" msgstr "" #: src/gedlib/messages.c:506 msgid "o Edit the user options file" msgstr "" #: src/gedlib/messages.c:509 msgid "What activity do you want to perform?" msgstr "" #: src/gedlib/messages.c:510 msgid "s Browse source records" msgstr "" #: src/gedlib/messages.c:511 msgid "e Browse event records" msgstr "" #: src/gedlib/messages.c:512 msgid "x Browse other records" msgstr "" #: src/gedlib/messages.c:513 msgid "1 Add a source record to the database" msgstr "" #: src/gedlib/messages.c:514 msgid "2 Edit source record from the database" msgstr "" #: src/gedlib/messages.c:515 msgid "3 Add an event record to the database" msgstr "" #: src/gedlib/messages.c:516 msgid "4 Edit event record from the database" msgstr "" #: src/gedlib/messages.c:517 msgid "5 Add an other record to the database" msgstr "" #: src/gedlib/messages.c:518 msgid "6 Edit other record from the database" msgstr "" #: src/gedlib/messages.c:521 msgid "Translation Tables" msgstr "" #: src/gedlib/messages.c:522 msgid "e edit individual tables (in db)" msgstr "" #: src/gedlib/messages.c:523 msgid "l load a table from a file (into db)" msgstr "" #: src/gedlib/messages.c:524 msgid "s save a table to a file (from db)" msgstr "" #: src/gedlib/messages.c:525 msgid "x export all tables (from db to files)" msgstr "" #: src/gedlib/messages.c:526 msgid "i import all tables (from files into db)" msgstr "" #: src/gedlib/messages.c:527 msgid "export/import directory:" msgstr "" #: src/gedlib/messages.c:530 msgid "Which character mapping do you want to edit?" msgstr "" #: src/gedlib/messages.c:531 msgid "Which character mapping do you want to save?" msgstr "" #: src/gedlib/messages.c:534 msgid "Not implemented yet" msgstr "" #: src/gedlib/messages.c:537 msgid "What do you want to add?" msgstr "" #: src/gedlib/messages.c:538 msgid "p Person - add new person to the database" msgstr "" #: src/gedlib/messages.c:539 msgid "f Family - create family record from one or two spouses" msgstr "" #: src/gedlib/messages.c:540 msgid "c Child - add a child to an existing family" msgstr "" #: src/gedlib/messages.c:541 msgid "s Spouse - add a spouse to an existing family" msgstr "" #: src/gedlib/messages.c:544 msgid "What do you want to remove?" msgstr "" #: src/gedlib/messages.c:545 msgid "c Child - remove a child from his/her family" msgstr "" #: src/gedlib/messages.c:546 msgid "s Spouse - remove a spouse from a family" msgstr "" #: src/gedlib/messages.c:547 msgid "i Individual - remove a person completely" msgstr "" #: src/gedlib/messages.c:548 msgid "f Family - remove a family completely" msgstr "" #: src/gedlib/messages.c:549 msgid "o Other - remove other record completely" msgstr "" #: src/gedlib/messages.c:552 msgid "How would you like to find a record?" msgstr "" #: src/gedlib/messages.c:555 msgid "Performing full name scan" msgstr "" #: src/gedlib/messages.c:556 msgid "Performing name fragment scan" msgstr "" #: src/gedlib/messages.c:557 msgid "Performing refn scan" msgstr "" #: src/gedlib/messages.c:558 msgid "Performing source scan" msgstr "" #: src/gedlib/messages.c:559 msgid "No records found in scan" msgstr "" #: src/gedlib/messages.c:562 msgid "abt %1" msgstr "" #: src/gedlib/messages.c:563 msgid "about %1" msgstr "" #: src/gedlib/messages.c:564 msgid "est %1" msgstr "" #: src/gedlib/messages.c:565 msgid "estimated %1" msgstr "" #: src/gedlib/messages.c:566 msgid "cal %1" msgstr "" #: src/gedlib/messages.c:567 msgid "calculated %1" msgstr "" #: src/gedlib/messages.c:568 msgid "fr %1" msgstr "" #: src/gedlib/messages.c:569 msgid "from %1" msgstr "" #: src/gedlib/messages.c:570 src/gedlib/messages.c:571 msgid "to %1" msgstr "" #: src/gedlib/messages.c:572 msgid "fr %1 to %2" msgstr "" #: src/gedlib/messages.c:573 msgid "from %1 to %2" msgstr "" #: src/gedlib/messages.c:574 msgid "bef %1" msgstr "" #: src/gedlib/messages.c:575 msgid "before %1" msgstr "" #: src/gedlib/messages.c:576 msgid "aft %1" msgstr "" #: src/gedlib/messages.c:577 msgid "after %1" msgstr "" #: src/gedlib/messages.c:578 msgid "bet %1 and %2" msgstr "" #: src/gedlib/messages.c:579 msgid "between %1 and %2" msgstr "" #: src/gedlib/messages.c:582 msgid "B.C." msgstr "" #: src/gedlib/messages.c:584 msgid "BC" msgstr "" #: src/gedlib/messages.c:586 msgid "B.C.E." msgstr "" #: src/gedlib/messages.c:588 msgid "BCE" msgstr "" #: src/gedlib/messages.c:590 msgid "A.D." msgstr "" #: src/gedlib/messages.c:592 msgid "AD" msgstr "" #: src/gedlib/messages.c:594 msgid "C.E." msgstr "" #: src/gedlib/messages.c:596 msgid "CE" msgstr "" #: src/gedlib/messages.c:599 msgid "%1J" msgstr "" #: src/gedlib/messages.c:601 msgid "%1 HEB" msgstr "" #: src/gedlib/messages.c:603 msgid "%1 FR" msgstr "" #: src/gedlib/messages.c:605 msgid "%1 AUC" msgstr "" #: src/gedlib/messages.c:607 msgid "jan" msgstr "" #: src/gedlib/messages.c:608 msgid "january" msgstr "ιανουάÏιος" #: src/gedlib/messages.c:609 msgid "feb" msgstr "" #: src/gedlib/messages.c:610 msgid "february" msgstr "φεβÏουάÏιος" #: src/gedlib/messages.c:611 msgid "mar" msgstr "" #: src/gedlib/messages.c:612 msgid "march" msgstr "μάÏτιος" #: src/gedlib/messages.c:613 msgid "apr" msgstr "" #: src/gedlib/messages.c:614 msgid "april" msgstr "απÏίλιος" #: src/gedlib/messages.c:616 msgid "**may" msgstr "" #: src/gedlib/messages.c:617 msgid "may" msgstr "μάϊος" #: src/gedlib/messages.c:618 msgid "jun" msgstr "" #: src/gedlib/messages.c:619 msgid "june" msgstr "ιοÏνιος" #: src/gedlib/messages.c:620 msgid "jul" msgstr "" #: src/gedlib/messages.c:621 msgid "july" msgstr "ιοÏλιος" #: src/gedlib/messages.c:622 msgid "aug" msgstr "" #: src/gedlib/messages.c:623 msgid "august" msgstr "αÏγουστος" #: src/gedlib/messages.c:624 msgid "sep" msgstr "" #: src/gedlib/messages.c:625 msgid "september" msgstr "σεπτέμβÏιος" #: src/gedlib/messages.c:626 msgid "oct" msgstr "" #: src/gedlib/messages.c:627 msgid "october" msgstr "οκτώβÏιος" #: src/gedlib/messages.c:628 msgid "nov" msgstr "" #: src/gedlib/messages.c:629 msgid "november" msgstr "νοέμβÏιος" #: src/gedlib/messages.c:630 msgid "dec" msgstr "" #: src/gedlib/messages.c:631 msgid "december" msgstr "δεκέμβÏιος" #: src/gedlib/messages.c:633 msgid "tsh" msgstr "" #: src/gedlib/messages.c:634 msgid "tishri" msgstr "" #: src/gedlib/messages.c:635 msgid "csh" msgstr "" #: src/gedlib/messages.c:636 msgid "cheshvan" msgstr "" #: src/gedlib/messages.c:637 msgid "ksl" msgstr "" #: src/gedlib/messages.c:638 msgid "kislev" msgstr "" #: src/gedlib/messages.c:639 msgid "tvt" msgstr "" #: src/gedlib/messages.c:640 msgid "tevet" msgstr "" #: src/gedlib/messages.c:641 msgid "shv" msgstr "" #: src/gedlib/messages.c:642 msgid "shevat" msgstr "" #: src/gedlib/messages.c:643 msgid "adr" msgstr "" #: src/gedlib/messages.c:644 msgid "adar" msgstr "" #: src/gedlib/messages.c:645 msgid "ads" msgstr "" #: src/gedlib/messages.c:646 msgid "adar sheni" msgstr "" #: src/gedlib/messages.c:647 msgid "nsn" msgstr "" #: src/gedlib/messages.c:648 msgid "nisan" msgstr "" #: src/gedlib/messages.c:649 msgid "iyr" msgstr "" #: src/gedlib/messages.c:650 msgid "iyar" msgstr "" #: src/gedlib/messages.c:651 msgid "svn" msgstr "" #: src/gedlib/messages.c:652 msgid "sivan" msgstr "" #: src/gedlib/messages.c:653 msgid "tmz" msgstr "" #: src/gedlib/messages.c:654 msgid "tamuz" msgstr "" #: src/gedlib/messages.c:655 msgid "aav" msgstr "" #: src/gedlib/messages.c:656 msgid "av" msgstr "" #: src/gedlib/messages.c:657 msgid "ell" msgstr "" #: src/gedlib/messages.c:658 msgid "elul" msgstr "" #: src/gedlib/messages.c:660 msgid "vend" msgstr "" #: src/gedlib/messages.c:661 msgid "vendemiaire" msgstr "" #: src/gedlib/messages.c:662 msgid "brum" msgstr "" #: src/gedlib/messages.c:663 msgid "brumaire" msgstr "" #: src/gedlib/messages.c:664 msgid "frim" msgstr "" #: src/gedlib/messages.c:665 msgid "frimaire" msgstr "" #: src/gedlib/messages.c:666 msgid "nivo" msgstr "" #: src/gedlib/messages.c:667 msgid "nivose" msgstr "" #: src/gedlib/messages.c:668 msgid "pluv" msgstr "" #: src/gedlib/messages.c:669 msgid "pluviose" msgstr "" #: src/gedlib/messages.c:670 msgid "vent" msgstr "" #: src/gedlib/messages.c:671 msgid "ventose" msgstr "" #: src/gedlib/messages.c:672 msgid "germ" msgstr "" #: src/gedlib/messages.c:673 msgid "germinal" msgstr "" #: src/gedlib/messages.c:674 msgid "flor" msgstr "" #: src/gedlib/messages.c:675 msgid "floreal" msgstr "" #: src/gedlib/messages.c:676 msgid "prai" msgstr "" #: src/gedlib/messages.c:677 msgid "prairial" msgstr "" #: src/gedlib/messages.c:678 msgid "mess" msgstr "" #: src/gedlib/messages.c:679 msgid "messidor" msgstr "" #: src/gedlib/messages.c:680 msgid "ther" msgstr "" #: src/gedlib/messages.c:681 msgid "thermidor" msgstr "" #: src/gedlib/messages.c:682 msgid "fruc" msgstr "" #: src/gedlib/messages.c:683 msgid "fructidor" msgstr "" #: src/gedlib/messages.c:684 msgid "comp" msgstr "" #: src/gedlib/messages.c:685 msgid "jour_complementairs" msgstr "" #: src/gedlib/node.c:610 msgid "NO NAME" msgstr "" #: src/gedlib/node.c:1167 #, c-format msgid "Node memory leaks:" msgstr "" #: src/gedlib/node.c:1170 src/gedlib/record.c:361 src/interp/pvalalloc.c:301 #, c-format msgid "%d item leaked" msgid_plural "%d items leaked" msgstr[0] "" msgstr[1] "" #: src/gedlib/record.c:358 #, c-format msgid "Record memory leaks:" msgstr "" #: src/gedlib/remove.c:250 msgid "Families may not yet be removed in this fashion." msgstr "" #. TRANSLATORS: Character set conversion from external editor to database internal #: src/gedlib/translat.c:100 msgid "Editor to Internal" msgstr "" #. TRANSLATORS: Character set conversion from database internal to external editor #: src/gedlib/translat.c:102 msgid "Internal to Editor" msgstr "" #: src/gedlib/translat.c:103 msgid "GEDCOM to Internal" msgstr "" #: src/gedlib/translat.c:104 msgid "Internal to GEDCOM" msgstr "" #: src/gedlib/translat.c:105 msgid "Display to Internal" msgstr "" #: src/gedlib/translat.c:106 msgid "Internal to Display" msgstr "" #: src/gedlib/translat.c:107 msgid "Report to Internal" msgstr "" #: src/gedlib/translat.c:108 msgid "Internal to Report" msgstr "" #. TRANSLATORS: key for "Editor to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:119 msgid "menu|trantable|e" msgstr "" #. TRANSLATORS: key for "Internal to Editor" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:122 msgid "menu|trantable|m" msgstr "" #. TRANSLATORS: key for "GEDCOM to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:125 msgid "menu|trantable|i" msgstr "" #. TRANSLATORS: key for "Internal to GEDCOM" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:128 msgid "menu|trantable|x" msgstr "" #. TRANSLATORS: key for "Display to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:131 msgid "menu|trantable|g" msgstr "" #. TRANSLATORS: key for "Internal to Display" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:134 msgid "menu|trantable|d" msgstr "" #. TRANSLATORS: key for "Report to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:137 msgid "menu|trantable|p" msgstr "" #. TRANSLATORS: key for "Internal to Report" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:140 msgid "menu|trantable|r" msgstr "" #. TRANSLATORS: db internal translation table note for tt menu #: src/gedlib/translat.c:473 #, c-format msgid " (dbint tt: %s)" msgstr "" #: src/gedlib/valid.c:75 msgid "This person record does not have a name line." msgstr "" #: src/gedlib/xlat.c:347 #, c-format msgid "ttpath get_conversion_dyntt:from <%s> to <%s>: %s" msgstr "" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 msgid "succeeded" msgstr "" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 msgid "failed" msgstr "" #: src/gedlib/xlat.c:369 #, c-format msgid "ttpath get_subcoding_dyntt from <%s> to subcode <%s>: %s" msgstr "" #: src/gedlib/xlat.c:435 msgid "No TTPATH config variable" msgstr "" #: src/gedlib/xlat.c:464 #, c-format msgid "ttpath checking dir <%s>" msgstr "" #: src/gedlib/xlat.c:478 #, c-format msgid "ttpath file <%s> typed as %d" msgstr "" #: src/gedlib/xlat.c:690 msgid "(no conversion)" msgstr "" #. TRANSLATORS: steps in a chain of codeset conversions, eg, Editor-to-Internal #: src/gedlib/xlat.c:713 #, c-format msgid "%d step" msgid_plural "%d steps" msgstr[0] "" msgstr[1] "" #: src/gedlib/xreffile.c:400 #, c-format msgid "Corrupt DELETESET %c" msgstr "" #: src/gedlib/xreffile.c:425 #, c-format msgid "Tried to add already-deleted record (%ld) to xref (%c)!" msgstr "" #: src/interp/alloc.c:798 #, c-format msgid "Error: file \"%s\": line %d: " msgstr "" #: src/interp/alloc.c:903 #, c-format msgid "%s: the arg must be an integer." msgstr "" #: src/interp/alloc.c:904 #, c-format msgid "%s: the arg #%s must be an integer." msgstr "" #: src/interp/alloc.c:905 #, c-format msgid "%s: the arg #%s must be a float." msgstr "" #: src/interp/alloc.c:906 #, c-format msgid "%s: the arg must be a string." msgstr "" #: src/interp/alloc.c:907 #, c-format msgid "%s: the arg #%s must be a string." msgstr "" #: src/interp/alloc.c:908 #, c-format msgid "%s: null arg not permissible." msgstr "" #: src/interp/alloc.c:909 #, c-format msgid "%s: the arg must be a filename." msgstr "" #: src/interp/alloc.c:910 #, c-format msgid "%s: the arg must be a node or string." msgstr "" #: src/interp/alloc.c:911 #, c-format msgid "%s: the arg must be a person." msgstr "" #: src/interp/alloc.c:912 #, c-format msgid "%s: the arg #%s must be a person." msgstr "" #: src/interp/alloc.c:913 #, c-format msgid "%s: the arg must be a family." msgstr "" #: src/interp/alloc.c:914 #, c-format msgid "%s: the arg #%s must be a family." msgstr "" #: src/interp/alloc.c:915 #, c-format msgid "%s: the arg #%s must be a record." msgstr "" #: src/interp/alloc.c:916 #, c-format msgid "%s: the arg must be a node." msgstr "" #: src/interp/alloc.c:917 #, c-format msgid "%s: the arg #%s must be a node." msgstr "" #: src/interp/alloc.c:918 #, c-format msgid "%s: the arg must be a variable." msgstr "" #: src/interp/alloc.c:919 #, c-format msgid "%s: the arg #%s must be a variable." msgstr "" #: src/interp/alloc.c:920 #, c-format msgid "%s: the arg #%s must be a boolean." msgstr "" #: src/interp/alloc.c:921 #, c-format msgid "%s: the arg must be a list." msgstr "" #: src/interp/alloc.c:922 #, c-format msgid "%s: the arg #%s must be a list." msgstr "" #: src/interp/alloc.c:923 #, c-format msgid "%s: the arg #%s must be a table." msgstr "" #: src/interp/alloc.c:924 #, c-format msgid "%s: the arg must be a set." msgstr "" #: src/interp/alloc.c:925 #, c-format msgid "%s: the arg #%s must be a set." msgstr "" #: src/interp/alloc.c:926 #, c-format msgid "%s: Bad arguments" msgstr "" #: src/interp/alloc.c:927 #, c-format msgid "%s: the arg had a major error." msgstr "" #: src/interp/alloc.c:928 #, c-format msgid "%s: the arg #%s had a major error." msgstr "" #: src/interp/alloc.c:929 #, c-format msgid "%s: the arg #%s would cause an arithmetic exception." msgstr "" #: src/interp/builtin.c:111 msgid "Enter integer for program" msgstr "" #: src/interp/builtin.c:181 msgid "Identify person for program:" msgstr "" #: src/interp/builtin.c:206 msgid "Enter a spouse from family." msgstr "" #: src/interp/builtin.c:207 msgid "Enter a sibling from family." msgstr "" #: src/interp/builtin.c:240 msgid "Identify list of persons for program:" msgstr "" #: src/interp/builtin.c:329 msgid "name: person does not have a name" msgstr "" #: src/interp/builtin.c:385 msgid "fullname: person does not have a name" msgstr "" #: src/interp/builtin.c:412 msgid "surname: person does not have a name" msgstr "" #: src/interp/builtin.c:437 msgid "soundex: person does not have a name" msgstr "" #: src/interp/builtin.c:500 #, c-format msgid "Bad escape code at offset %d in bytecode string <%s>" msgstr "" #: src/interp/builtin.c:643 msgid "(givens) person does not have a name" msgstr "" #: src/interp/builtin.c:670 #, c-format msgid "set(%s, ) is invalid" msgstr "" #: src/interp/builtin.c:1191 msgid "first" msgstr "" #: src/interp/builtin.c:1191 msgid "second" msgstr "" #: src/interp/builtin.c:1191 msgid "third" msgstr "" #: src/interp/builtin.c:1191 msgid "fourth" msgstr "" #: src/interp/builtin.c:1191 msgid "fifth" msgstr "" #: src/interp/builtin.c:1192 msgid "sixth" msgstr "" #: src/interp/builtin.c:1192 msgid "seventh" msgstr "" #: src/interp/builtin.c:1192 msgid "eighth" msgstr "" #: src/interp/builtin.c:1192 msgid "ninth" msgstr "" #: src/interp/builtin.c:1192 msgid "tenth" msgstr "" #: src/interp/builtin.c:1193 msgid "eleventh" msgstr "" #: src/interp/builtin.c:1193 msgid "twelfth" msgstr "" #: src/interp/builtin.c:1210 #, c-format msgid "%ldth" msgstr "" #: src/interp/builtin.c:1220 msgid "zero" msgstr "" #: src/interp/builtin.c:1220 msgid "one" msgstr "" #: src/interp/builtin.c:1220 msgid "two" msgstr "" #: src/interp/builtin.c:1220 msgid "three" msgstr "" #: src/interp/builtin.c:1220 msgid "four" msgstr "" #: src/interp/builtin.c:1220 msgid "five" msgstr "" #: src/interp/builtin.c:1221 msgid "six" msgstr "" #: src/interp/builtin.c:1221 msgid "seven" msgstr "" #: src/interp/builtin.c:1221 msgid "eight" msgstr "" #: src/interp/builtin.c:1221 msgid "nine" msgstr "" #: src/interp/builtin.c:1221 msgid "ten" msgstr "" #: src/interp/builtin.c:1222 msgid "eleven" msgstr "" #: src/interp/builtin.c:1222 msgid "twelve" msgstr "" #: src/interp/builtin.c:2173 msgid "the arg to empty is not a list, table or set" msgstr "" #: src/interp/builtin.c:2283 msgid "the arg to length is not a list, table or set" msgstr "" #: src/interp/builtin.c:2470 msgid "He" msgstr "" #: src/interp/builtin.c:2470 msgid "he" msgstr "" #: src/interp/builtin.c:2470 msgid "His" msgstr "" #: src/interp/builtin.c:2470 msgid "his" msgstr "" #: src/interp/builtin.c:2470 msgid "him" msgstr "" #: src/interp/builtin.c:2472 msgid "She" msgstr "" #: src/interp/builtin.c:2472 msgid "she" msgstr "" #: src/interp/builtin.c:2472 msgid "Her" msgstr "" #: src/interp/builtin.c:2472 msgid "her" msgstr "" #: src/interp/builtin.c:2472 msgid "her_" msgstr "" #: src/interp/builtin.c:2850 msgid "(trimname) person does not have a name" msgstr "" #: src/interp/builtin.c:2940 msgid "Sunday" msgstr "" #: src/interp/builtin.c:2940 msgid "Monday" msgstr "" #: src/interp/builtin.c:2940 msgid "Tuesday" msgstr "" #: src/interp/builtin.c:2941 msgid "Wednesday" msgstr "" #: src/interp/builtin.c:2941 msgid "Thursday" msgstr "" #: src/interp/builtin.c:2941 msgid "Friday" msgstr "" #: src/interp/builtin.c:2941 msgid "Saturday" msgstr "" #: src/interp/eval.c:244 #, c-format msgid "Undefined func: %s" msgstr "" #: src/interp/eval.c:246 #, c-format msgid "Ambiguous call to func: %s" msgstr "" #: src/interp/interp.c:247 #, c-format msgid "Report not found: %s " msgstr "" #: src/interp/interp.c:258 #, c-format msgid "Error: file <%s> not found" msgstr "" #: src/interp/interp.c:316 msgid "Program contains errors.\n" msgstr "" #: src/interp/interp.c:323 msgid "Program needs a starting procedure.\n" msgstr "" #: src/interp/interp.c:340 #, c-format msgid "Proc %s must be called with %d (not %d) parameters." msgstr "" #: src/interp/interp.c:355 msgid "Program is running..." msgstr "" #: src/interp/interp.c:410 msgid "Program was run successfully.\n" msgstr "" #: src/interp/interp.c:414 msgid "Program was cancelled.\n" msgstr "" #: src/interp/interp.c:416 msgid "Program was not run because of errors.\n" msgstr "" #: src/interp/interp.c:506 #, c-format msgid "Error: file <%s> not found: %s\n" msgstr "" #: src/interp/interp.c:538 #, c-format msgid "" "\n" "Report duration %s (ui duration %s)\n" msgstr "" #: src/interp/interp.c:610 #, c-format msgid "identifier: %s should be a string\n" msgstr "" #: src/interp/interp.c:1778 #, c-format msgid "Undefined proc: %s" msgstr "" #: src/interp/interp.c:1780 #, c-format msgid "Ambiguous call to proc: %s" msgstr "" #: src/interp/interp.c:2017 #, c-format msgid "Duplicate proc %s (lines %d and %d) in report: %s" msgstr "" #: src/interp/interp.c:2047 #, c-format msgid "Duplicate func %s (lines %d and %d) in report: %s" msgstr "" #: src/interp/interp.c:2110 msgid "This report requires a newer program to run\n" msgstr "" #: src/interp/interp.c:2166 #, c-format msgid "Program forgot to unlock %d record" msgid_plural "Program forgot to unlock %d records" msgstr[0] "" msgstr[1] "" #: src/interp/intrpseq.c:303 msgid "missing or incorrect value for sort" msgstr "" #: src/interp/lex.c:219 #, c-format msgid "" "String constant overflowing internal buffer tokbuf len=%d, file: %s, start " "line: %ld" msgstr "" #: src/interp/more.c:648 msgid "Please choose from the following list." msgstr "" #: src/interp/more.c:685 msgid "Illegal type found in list in menuchoose" msgstr "" #: src/interp/more.c:976 msgid "error evaluating arg to lock" msgstr "" #: src/interp/more.c:982 msgid "null arg in lock" msgstr "" #: src/interp/more.c:993 msgid "node passed to lock must be inside a record" msgstr "" #: src/interp/more.c:999 msgid "the arg to lock must be a record or node" msgstr "" #: src/interp/more.c:1007 msgid "Error: there are 999,999 locks on arg to lock" msgstr "" #: src/interp/more.c:1027 msgid "error evaluating arg to unlock" msgstr "" #: src/interp/more.c:1033 msgid "null arg in unlock" msgstr "" #: src/interp/more.c:1044 msgid "node passed to unlock must be inside a record" msgstr "" #: src/interp/more.c:1050 msgid "the arg to unlock must be a record or node" msgstr "" #: src/interp/pvalalloc.c:295 #, c-format msgid "PVALUE memory leak report:" msgstr "" #: src/interp/pvalmath.c:70 #, c-format msgid "Nonnumeric type to operation %s: %s" msgstr "" #: src/interp/pvalmath.c:85 #, c-format msgid "Illegal value to operation %s: %s" msgstr "" #: src/interp/pvalmath.c:411 #, c-format msgid "%s: not compatible numeric types: %s and %s" msgstr "" #: src/interp/pvalue.c:810 #, c-format msgid "%s: Incomparable types: %s and %s" msgstr "" #: src/interp/pvalue.c:907 msgid "NOT PVALUE: NULL!" msgstr "" #: src/interp/pvalue.c:911 #, c-format msgid "NOT PVALUE: invalid type=%d)!" msgstr "" #: src/interp/pvalue.c:949 #, c-format msgid "%d item" msgid_plural "%d items" msgstr[0] "" msgstr[1] "" #: src/interp/pvalue.c:956 #, c-format msgid "%d entry" msgid_plural "%d entries" msgstr[0] "" msgstr[1] "" #: src/interp/pvalue.c:963 #, c-format msgid "%d record" msgid_plural "%d records" msgstr[0] "" msgstr[1] "" #: src/interp/pvalue.c:970 #, c-format msgid "%d element" msgid_plural "%d elements" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:125 msgid "Enter d for debugger, q to quit" msgstr "" #: src/interp/progerr.c:140 #, c-format msgid "Display local (%d var)" msgid_plural "Display locals (%d vars)" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:146 #, c-format msgid "Display global (%d var)" msgid_plural "Display globals (%d vars)" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:151 #, c-format msgid "Call stack has %d higher level" msgid_plural "Call stack has %d higher levels" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:154 msgid " Go up one level" msgstr "" #: src/interp/progerr.c:160 #, c-format msgid "Call stack has %d lower level" msgid_plural "Call stack has %d lower levels" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:164 msgid " Go down one level" msgstr "" #: src/interp/progerr.c:169 msgid "Quit debugger" msgstr "" #: src/interp/progerr.c:171 msgid "Report debugger" msgstr "" #: src/interp/progerr.c:175 msgid "Local variables" msgstr "" #: src/interp/progerr.c:178 msgid "Global variables" msgstr "" #: src/interp/progerr.c:338 msgid "Report cancelled" msgstr "" #: src/interp/progerr.c:346 msgid "Report file: " msgstr "" #: src/interp/progerr.c:355 #, c-format msgid "Parsing Error at line %d: " msgstr "" #: src/interp/progerr.c:357 #, c-format msgid "Runtime Error at line %d: " msgstr "" #: src/interp/progerr.c:360 msgid "Aborting: " msgstr "" #: src/interp/rassa.c:242 #, c-format msgid "Could not open file %s" msgstr "" #: src/interp/rassa.c:271 msgid "Report stopping due to error opening output file" msgstr "" #: src/interp/rassa.c:273 msgid "Report stopping due to lack of output file" msgstr "" #: src/interp/rassa.c:330 msgid "illegal call to pos." msgstr "" #: src/interp/rptsort.c:104 msgid "First argument to (r)sort must be list or array" msgstr "" #: src/interp/rptsort.c:117 src/interp/rptsort.c:128 msgid "Arguments to (r)sort must be of same size" msgstr "" #: src/interp/rptsort.c:137 msgid "Second argument to (r)sort must be list or array" msgstr "" #: src/liflines/add.c:68 #, c-format msgid "There was %d unresolved reference." msgid_plural "There were %d unresolved references." msgstr[0] "" msgstr[1] "" #: src/liflines/brwsmenu.c:25 msgid "? Other menu choices" msgstr "" #: src/liflines/brwsmenu.c:69 msgid "e Edit the person" msgstr "" #: src/liflines/brwsmenu.c:70 msgid "e Edit the family" msgstr "" #: src/liflines/brwsmenu.c:71 msgid "e Edit record" msgstr "" #: src/liflines/brwsmenu.c:72 msgid "e Edit top person" msgstr "" #: src/liflines/brwsmenu.c:73 msgid "e Edit top family" msgstr "" #: src/liflines/brwsmenu.c:74 msgid "f Browse to father" msgstr "" #: src/liflines/brwsmenu.c:75 msgid "f Browse top father" msgstr "" #: src/liflines/brwsmenu.c:76 msgid "m Browse to mother" msgstr "" #: src/liflines/brwsmenu.c:77 msgid "m Browse top mother" msgstr "" #: src/liflines/brwsmenu.c:78 msgid "s Browse to spouse/s" msgstr "" #: src/liflines/brwsmenu.c:79 msgid "s Browse top spouse/s" msgstr "" #: src/liflines/brwsmenu.c:80 msgid "c Browse to children" msgstr "" #: src/liflines/brwsmenu.c:81 msgid "c Browse top children" msgstr "" #: src/liflines/brwsmenu.c:82 msgid "o Browse to older sib" msgstr "" #: src/liflines/brwsmenu.c:83 msgid "y Browse to younger sib" msgstr "" #: src/liflines/brwsmenu.c:84 msgid "g Browse to family" msgstr "" #: src/liflines/brwsmenu.c:85 msgid "u Browse to parents" msgstr "" #: src/liflines/brwsmenu.c:86 msgid "b Browse to persons" msgstr "" #: src/liflines/brwsmenu.c:87 msgid "t Browse to top" msgstr "" #: src/liflines/brwsmenu.c:88 msgid "b Browse to bottom" msgstr "" #: src/liflines/brwsmenu.c:89 msgid "h Add as spouse" msgstr "" #: src/liflines/brwsmenu.c:90 msgid "i Add as child" msgstr "" #: src/liflines/brwsmenu.c:91 msgid "s Add spouse to family" msgstr "" #: src/liflines/brwsmenu.c:92 msgid "a Add child to family" msgstr "" #: src/liflines/brwsmenu.c:93 msgid "a Add family" msgstr "" #: src/liflines/brwsmenu.c:94 msgid "x Swap two families" msgstr "" #: src/liflines/brwsmenu.c:95 msgid "x Swap two children" msgstr "" #: src/liflines/brwsmenu.c:97 #, no-c-format msgid "%c Reorder child" msgstr "" #: src/liflines/brwsmenu.c:98 msgid "x Switch top/bottom" msgstr "" #: src/liflines/brwsmenu.c:99 msgid "n Create new person" msgstr "" #: src/liflines/brwsmenu.c:100 msgid "a Create new family" msgstr "" #: src/liflines/brwsmenu.c:101 msgid "tt Enter tandem mode" msgstr "" #: src/liflines/brwsmenu.c:102 msgid "tt Enter family tandem" msgstr "" #: src/liflines/brwsmenu.c:103 msgid "zi Browse to indi" msgstr "" #: src/liflines/brwsmenu.c:104 msgid "zz Browse to any" msgstr "" #: src/liflines/brwsmenu.c:105 msgid "r Remove as spouse" msgstr "" #: src/liflines/brwsmenu.c:106 msgid "d Remove as child" msgstr "" #: src/liflines/brwsmenu.c:107 msgid "r Remove spouse from" msgstr "" #: src/liflines/brwsmenu.c:108 msgid "d Remove child from" msgstr "" #: src/liflines/brwsmenu.c:109 msgid "( Scroll up" msgstr "" #: src/liflines/brwsmenu.c:110 msgid ") Scroll down" msgstr "" #: src/liflines/brwsmenu.c:111 msgid "] Increase tree depth" msgstr "" #: src/liflines/brwsmenu.c:112 msgid "[ Decrease tree depth" msgstr "" #: src/liflines/brwsmenu.c:113 msgid "(t Scroll top up" msgstr "" #: src/liflines/brwsmenu.c:114 msgid ")t Scroll top down" msgstr "" #: src/liflines/brwsmenu.c:115 msgid "(b Scroll bottom up" msgstr "" #: src/liflines/brwsmenu.c:116 msgid ")b Scroll bottom down" msgstr "" #: src/liflines/brwsmenu.c:117 msgid "(( Scroll both up" msgstr "" #: src/liflines/brwsmenu.c:118 msgid ")) Scroll both down" msgstr "" #: src/liflines/brwsmenu.c:119 msgid "# Toggle childnos" msgstr "" #: src/liflines/brwsmenu.c:120 msgid "!g GEDCOM mode" msgstr "" #: src/liflines/brwsmenu.c:121 msgid "!x GEDCOMX mode" msgstr "" #: src/liflines/brwsmenu.c:122 msgid "!t GEDCOMT mode" msgstr "" #: src/liflines/brwsmenu.c:123 msgid "!a Ancestors mode" msgstr "" #: src/liflines/brwsmenu.c:124 msgid "!d Descendants mode" msgstr "" #: src/liflines/brwsmenu.c:125 msgid "!n Normal mode" msgstr "" #: src/liflines/brwsmenu.c:126 msgid "p Pedigree mode" msgstr "" #: src/liflines/brwsmenu.c:127 msgid "!! Cycle mode" msgstr "" #: src/liflines/brwsmenu.c:129 msgid "(1-9) Browse to child" msgstr "" #: src/liflines/brwsmenu.c:130 msgid "y Turn on sync" msgstr "" #: src/liflines/brwsmenu.c:131 msgid "A Advanced view" msgstr "" #: src/liflines/brwsmenu.c:132 msgid "tc Tandem to children" msgstr "" #: src/liflines/brwsmenu.c:133 msgid "tf Tandem to father/s" msgstr "" #: src/liflines/brwsmenu.c:134 msgid "tg Tandem to family/s" msgstr "" #: src/liflines/brwsmenu.c:135 msgid "f Browse to fathers" msgstr "" #: src/liflines/brwsmenu.c:136 msgid "m Browse to mothers" msgstr "" #: src/liflines/brwsmenu.c:137 msgid "tm Tandem to mother/s" msgstr "" #: src/liflines/brwsmenu.c:138 msgid "ts Tandem to spouse/s" msgstr "" #: src/liflines/brwsmenu.c:139 msgid "tu Tandem to parents" msgstr "" #: src/liflines/brwsmenu.c:140 msgid "< Enlarge menu area" msgstr "" #: src/liflines/brwsmenu.c:141 msgid "> Shrink menu area" msgstr "" #: src/liflines/brwsmenu.c:142 msgid "M> More menu cols" msgstr "" #: src/liflines/brwsmenu.c:143 msgid "M< Less menu cols" msgstr "" #: src/liflines/brwsmenu.c:144 msgid "+ Next in db" msgstr "" #: src/liflines/brwsmenu.c:145 msgid "- Prev in db" msgstr "" #: src/liflines/brwsmenu.c:146 msgid "d Copy top to bottom" msgstr "" #: src/liflines/brwsmenu.c:147 msgid "j Merge bottom to top" msgstr "" #: src/liflines/brwsmenu.c:148 src/liflines/listui.c:842 msgid "j Move down list" msgstr "" #: src/liflines/brwsmenu.c:149 src/liflines/listui.c:843 msgid "k Move up list" msgstr "" #: src/liflines/brwsmenu.c:150 src/liflines/listui.c:844 msgid "e Edit this person" msgstr "" #: src/liflines/brwsmenu.c:151 src/liflines/listui.c:845 msgid "i Browse this person" msgstr "" #: src/liflines/brwsmenu.c:152 src/liflines/listui.c:846 msgid "m Mark this person" msgstr "" #: src/liflines/brwsmenu.c:153 msgid "d Delete from list" msgstr "" #: src/liflines/brwsmenu.c:154 src/liflines/listui.c:849 msgid "n Name this list" msgstr "" #: src/liflines/brwsmenu.c:155 src/liflines/listui.c:850 msgid "b Browse new persons" msgstr "" #: src/liflines/brwsmenu.c:156 src/liflines/listui.c:851 msgid "a Add to this list" msgstr "" #: src/liflines/brwsmenu.c:157 src/liflines/listui.c:852 msgid "x Swap mark/current" msgstr "" #: src/liflines/brwsmenu.c:158 msgid "$s List sources" msgstr "" #: src/liflines/brwsmenu.c:159 msgid "$n List notes" msgstr "" #: src/liflines/brwsmenu.c:160 msgid "$$ List references" msgstr "" #: src/liflines/brwsmenu.c:161 msgid "^b History/back" msgstr "" #: src/liflines/brwsmenu.c:162 msgid "^f History/fwd" msgstr "" #: src/liflines/brwsmenu.c:163 msgid "^l History list" msgstr "" #: src/liflines/brwsmenu.c:164 msgid "^c Clear history" msgstr "" #: src/liflines/brwsmenu.c:165 msgid "^xb ChngHist/back" msgstr "" #: src/liflines/brwsmenu.c:166 msgid "^xf ChngHist/fwd" msgstr "" #: src/liflines/brwsmenu.c:167 msgid "^xl ChngHist list" msgstr "" #: src/liflines/brwsmenu.c:168 msgid "^xc Clear ChngHist" msgstr "" #: src/liflines/brwsmenu.c:170 #, no-c-format msgid "%s Add source" msgstr "" #: src/liflines/brwsmenu.c:172 #, no-c-format msgid "%e Add event" msgstr "" #: src/liflines/brwsmenu.c:174 #, no-c-format msgid "%o Add other" msgstr "" #: src/liflines/brwsmenu.c:177 msgid "B Browse new family" msgstr "" #: src/liflines/brwsmenu.c:490 msgid "Missing title" msgstr "" #: src/liflines/delete.c:85 #, c-format msgid "%d spouse" msgid_plural "%d spouses" msgstr[0] "" msgstr[1] "" #: src/liflines/delete.c:88 #, c-format msgid "%d child" msgid_plural "%d children" msgstr[0] "" msgstr[1] "" #: src/liflines/error.c:63 src/tools/dbverify.c:1504 msgid "Fatal Error" msgstr "" #: src/liflines/error.c:66 msgid "FATAL ERROR" msgstr "" #: src/liflines/error.c:70 #, c-format msgid " in file <%s> at line %d\n" msgstr "" #: src/liflines/error.c:72 src/tools/dbverify.c:1515 msgid "ASSERT failure" msgstr "" #: src/liflines/import.c:169 msgid "This is not a lineage linked GEDCOM file." msgstr "" #: src/liflines/import.c:170 msgid "Proceed anyway?" msgstr "" #: src/liflines/import.c:186 msgid "No current internal codeset, so no codeset conversion can be done" msgstr "" #: src/liflines/import.c:187 msgid "Proceed without codeset conversion?" msgstr "" #: src/liflines/import.c:204 #, c-format msgid "%d warning during import" msgid_plural "%d warnings during import" msgstr[0] "" msgstr[1] "" #: src/liflines/import.c:220 #, c-format msgid "Cannot convert codeset (from <%s> to <%s>)" msgstr "" #: src/liflines/import.c:223 msgid "Enter codeset to assume (* for none)" msgstr "" #: src/liflines/import.c:246 #, c-format msgid "Using original keys, %d deleted record will be in the database." msgid_plural "Using original keys, %d deleted records will be in the database." msgstr[0] "" msgstr[1] "" #: src/liflines/lbrowse.c:219 msgid "Tandom browse only compatible with persons or families." msgstr "" #: src/liflines/lines_usage.c:21 #, c-format msgid "%s invokes the Lifelines report execution program without GUI." msgstr "" #: src/liflines/lines_usage.c:23 #, c-format msgid "%s invokes the Lifelines GUI." msgstr "" #: src/liflines/lines_usage.c:26 #, c-format msgid "" "Lifelines is a program to manipulate genealogical information\n" "in lineage-linked GEDCOM format. It has a curses interface and a\n" "built-in interpreter for its own genealogical report language.\n" "\n" "It has its own databases, and records are edited directly in GEDCOM\n" "(with an editor of the user's choice). Records store\n" "information about people, families, sources, events, and\n" "other types of data (such as notes). Lifelines includes a\n" "custom report language and comes with a collection of reports." msgstr "" #: src/liflines/lines_usage.c:36 #, c-format msgid "Usage: %s [OPTIONS] [database]" msgstr "" #: src/liflines/lines_usage.c:38 src/tools/btedit.c:238 #, c-format msgid "Options:" msgstr "" #: src/liflines/lines_usage.c:40 #, c-format msgid "-C[FILE]" msgstr "" #: src/liflines/lines_usage.c:42 #, c-format msgid "Specify configuration file location" msgstr "" #: src/liflines/lines_usage.c:44 #, c-format msgid "Finnish option (if compiled to allow Finnish option)" msgstr "" #: src/liflines/lines_usage.c:46 #, c-format msgid "-I[KEY=VALUE]" msgstr "" #: src/liflines/lines_usage.c:48 #, c-format msgid "Specify a user property (e.g. -ILLEDITOR=gvim)" msgstr "" #: src/liflines/lines_usage.c:50 #, c-format msgid "log dynamic memory operation (for debugging)" msgstr "" #: src/liflines/lines_usage.c:52 #, c-format msgid "-c[TYPE][DIRECT,INDIRECT]" msgstr "" #: src/liflines/lines_usage.c:54 #, c-format msgid "" "supply cache values (eg, -ci400,4000f400,4000 sets direct indi\n" "\t\t& fam caches to 400, and indirect indi & fam caches to 4000)" msgstr "" #: src/liflines/lines_usage.c:57 #, c-format msgid "debug mode (disable signal trapping)" msgstr "" #: src/liflines/lines_usage.c:59 #, c-format msgid "force open (for recovery from errors or power failure)" msgstr "" #: src/liflines/lines_usage.c:61 #, c-format msgid "open database with immutable access (for use on read-only media)" msgstr "" #: src/liflines/lines_usage.c:63 #, c-format msgid "always show keys (even if REFN available)" msgstr "" #: src/liflines/lines_usage.c:65 #, c-format msgid "unlock a database (for correct access on read-write media)" msgstr "" #: src/liflines/lines_usage.c:67 #, c-format msgid "lock a database (for use on read-only media)" msgstr "" #: src/liflines/lines_usage.c:69 #, c-format msgid "do not use traditional family rules" msgstr "" #: src/liflines/lines_usage.c:71 #, c-format msgid "Specify program output filename (eg, -o/tmp/mytests)" msgstr "" #: src/liflines/lines_usage.c:73 #, c-format msgid "" "open database with read-only access (prohibiting other\n" "\t\twrite access)" msgstr "" #: src/liflines/lines_usage.c:76 #, c-format msgid "trace function calls in report programs (for debugging)" msgstr "" #: src/liflines/lines_usage.c:78 #, c-format msgid "-u[HEIGHT,WIDTH]" msgstr "" #: src/liflines/lines_usage.c:80 #, c-format msgid "" "specify window size (eg, -u120,34 specifies 120 columns\n" "\t\tby 34 rows)" msgstr "" #: src/liflines/lines_usage.c:83 #, c-format msgid "display this help and exit" msgstr "" #: src/liflines/lines_usage.c:85 #, c-format msgid "open database with writeable access (this is the default)" msgstr "" #: src/liflines/lines_usage.c:89 #, c-format msgid "execute a single lifelines report program directly" msgstr "" #: src/liflines/lines_usage.c:91 #, c-format msgid "" "Use normal ASCII characters for drawing lines, instead of\n" "\t\tspecial VT100 terminal characters" msgstr "" #: src/liflines/lines_usage.c:94 #, c-format msgid "output version information and exit" msgstr "" #: src/liflines/lines_usage.c:96 src/tools/btedit.c:244 #, c-format msgid "Examples:" msgstr "" #: src/liflines/lines_usage.c:99 #, c-format msgid "%s myfamily -x eol" msgstr "" #: src/liflines/lines_usage.c:101 #, c-format msgid "Open the database 'myfamily' with Lifelines" msgstr "" #: src/liflines/lines_usage.c:103 #, c-format msgid "and run the eol.ll report" msgstr "" #: src/liflines/lines_usage.c:105 #, c-format msgid "%s -f myfamily -x eol" msgstr "" #: src/liflines/lines_usage.c:107 #, c-format msgid "Unlock database 'myfamily', after a power failure left the" msgstr "" #: src/liflines/lines_usage.c:109 #, c-format msgid "database locked and run 'eol.ll' report" msgstr "" #: src/liflines/lines_usage.c:112 #, c-format msgid "%s myfamily" msgstr "" #: src/liflines/lines_usage.c:114 #, c-format msgid "Open database 'myfamily' with Lifelines" msgstr "" #: src/liflines/lines_usage.c:116 #, c-format msgid "%s -f myfamily" msgstr "" #: src/liflines/lines_usage.c:118 #, c-format msgid "" "Unlock database 'myfamily', after a power failure left\n" "\t\tthe database locked" msgstr "" #: src/liflines/lines_usage.c:122 #, c-format msgid "REPORTING BUGS" msgstr "" #: src/liflines/lines_usage.c:124 src/tools/btedit.c:250 #, c-format msgid "Report bugs to lifelines.sourceforge.net" msgstr "" #: src/liflines/lines_usage.c:126 #, c-format msgid "COPYRIGHT" msgstr "" #: src/liflines/lines_usage.c:131 #, c-format msgid "SEE ALSO" msgstr "" #: src/liflines/listui.c:155 src/liflines/listui.c:252 msgid "Commands: j Move down k Move up i Select q Quit" msgstr "" #: src/liflines/listui.c:157 msgid "Commands: j Move down k Move up q Quit" msgstr "" #: src/liflines/listui.c:249 msgid "Commands: j Move down k Move up d Delete i Select q Quit" msgstr "" #: src/liflines/listui.c:431 msgid "--- CURRENT SELECTION ---" msgstr "" #: src/liflines/listui.c:434 src/liflines/listui.c:597 msgid "--- LIST ---" msgstr "" #: src/liflines/listui.c:628 msgid "-- CURRENT SELECTION --" msgstr "" #: src/liflines/listui.c:840 msgid "Choose an operation:" msgstr "" #: src/liflines/listui.c:847 msgid "r Remove from list" msgstr "" #: src/liflines/listui.c:848 msgid "t Enter tandem mode" msgstr "" #: src/liflines/loadsave.c:94 msgid "Person" msgid_plural "Persons" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:98 msgid "Family" msgid_plural "Families" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:102 msgid "Source" msgid_plural "Sources" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:106 msgid "Event" msgid_plural "Events" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:110 msgid "Other" msgid_plural "Others" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:160 msgid "Checking GEDCOM file for errors.\n" msgstr "" #: src/liflines/loadsave.c:163 msgid "Error" msgid_plural "Errors" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:169 msgid "Warning" msgid_plural "Warnings" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:184 msgid "The database is read-only; loading has been canceled." msgstr "" #: src/liflines/loadsave.c:190 msgid "Adding unused keys as deleted keys..." msgstr "" #. TRANSLATORS: how long Import ran, and how much of that was UI delay #: src/liflines/loadsave.c:255 #, c-format msgid "Import time %s (ui %s)\n" msgstr "" #: src/liflines/loadsave.c:282 msgid "The database was not saved." msgstr "" #: src/liflines/main.c:385 msgid "Warning: database codeset unspecified" msgstr "" #: src/liflines/main.c:387 msgid "Warning: not all conversions available" msgstr "" #: src/liflines/menuset.c:155 #, c-format msgid "Menu (%s) choice sequence too long: %s" msgstr "" #: src/liflines/menuset.c:159 #, c-format msgid "Menu (%s) item lacked choice sequence: %s" msgstr "" #: src/liflines/menuset.c:242 src/liflines/menuset.c:254 #, c-format msgid "In menu: %s" msgstr "" #: src/liflines/menuset.c:244 #, c-format msgid "Duplicate hotkey for item: %s" msgstr "" #: src/liflines/menuset.c:247 #, c-format msgid "Clash with longer hotkey in item: %s" msgstr "" #: src/liflines/menuset.c:255 #, c-format msgid "Clash with shorter hotkey in item: %s" msgstr "" #: src/liflines/merge.c:772 #, c-format msgid "Bad spouse tag: %s" msgstr "" #: src/liflines/merge.c:800 src/liflines/merge.c:919 #, c-format msgid "Mismatched lineage spouse links between %s and %s: %ld and %ld" msgstr "" #: src/liflines/merge.c:816 src/liflines/merge.c:935 #, c-format msgid "Bad child tag: %s" msgstr "" #: src/liflines/merge.c:844 src/liflines/merge.c:963 #, c-format msgid "Mismatched lineage child links between %s and %s: %ld and %ld" msgstr "" #: src/liflines/merge.c:882 src/liflines/merge.c:891 #, c-format msgid "Bad HUSB tag: %s" msgstr "" #: src/liflines/miscutls.c:51 msgid "Whose key value do you want?" msgstr "" #: src/liflines/miscutls.c:67 msgid "Please enter person's internal key value." msgstr "" #: src/liflines/miscutls.c:68 msgid "enter key:" msgstr "" #: src/liflines/miscutls.c:78 src/liflines/miscutls.c:82 #: src/liflines/miscutls.c:87 #, c-format msgid "No one in database has key value %s." msgstr "" #: src/liflines/scan.c:100 msgid "Enter pattern to match against single surname or given name." msgstr "" #: src/liflines/scan.c:112 msgid "Enter pattern to match against full name." msgstr "" #: src/liflines/scan.c:128 src/liflines/scan.c:178 src/liflines/scan.c:201 msgid "pattern: " msgstr "" #: src/liflines/scan.c:151 src/liflines/scan.c:165 msgid "Enter pattern to match against author." msgstr "" #: src/liflines/screen.c:317 #, c-format msgid "initscr failed" msgstr "" #: src/liflines/screen.c:334 #, c-format msgid "" "The requested window size (%ld,%ld) is too large for your terminal (%d,%d).\n" msgstr "" #: src/liflines/screen.c:342 #, c-format msgid "" "The requested window size (%ld,%ld) is too small for LifeLines (%d,%d).\n" msgstr "" #: src/liflines/screen.c:706 msgid "Search results" msgstr "" #: src/liflines/screen.c:813 #, c-format msgid "(pg %d/%d)" msgstr "" #: src/liflines/screen.c:1431 msgid "No conversion" msgstr "" #: src/liflines/screen.c:1517 msgid "Internal codeset" msgstr "" #: src/liflines/screen.c:1520 msgid "Internal UTF-8: Yes" msgstr "" #: src/liflines/screen.c:1522 msgid "Internal UTF-8: No" msgstr "" #: src/liflines/screen.c:1526 msgid "Locales are enabled." msgstr "" #: src/liflines/screen.c:1528 msgid "Locales are disabled." msgstr "" #: src/liflines/screen.c:1531 msgid "NLS (National Language Support) is compiled in." msgstr "" #: src/liflines/screen.c:1537 msgid "NLS (National Language Support) is not compiled in." msgstr "" #: src/liflines/screen.c:1550 msgid "iconv (codeset conversion) is compiled in." msgstr "" #: src/liflines/screen.c:1552 msgid "iconv (codeset conversion) is not compiled in." msgstr "" #: src/liflines/screen.c:1554 #, c-format msgid "Startup collate locale: %s" msgstr "" #: src/liflines/screen.c:1557 #, c-format msgid "Startup messages locale: %s" msgstr "" #: src/liflines/screen.c:1560 #, c-format msgid "Current collate locale: %s" msgstr "" #: src/liflines/screen.c:1563 #, c-format msgid "Current messages locale: %s" msgstr "" #: src/liflines/screen.c:1566 #, c-format msgid "Collation routine: %s" msgstr "" #: src/liflines/screen.c:1570 #, c-format msgid "GUI codeset: %s" msgstr "" #: src/liflines/screen.c:1573 #, c-format msgid "GUI output codeset: %s" msgstr "" #: src/liflines/screen.c:1575 #, c-format msgid "GUI input codeset: %s" msgstr "" #: src/liflines/screen.c:1580 #, c-format msgid "editor codeset: %s" msgstr "" #: src/liflines/screen.c:1583 #, c-format msgid "editor output codeset: %s" msgstr "" #: src/liflines/screen.c:1585 #, c-format msgid "editor input codeset: %s" msgstr "" #: src/liflines/screen.c:1590 #, c-format msgid "report codeset: %s" msgstr "" #: src/liflines/screen.c:1593 #, c-format msgid "report output codeset: %s" msgstr "" #: src/liflines/screen.c:1595 #, c-format msgid "report input codeset: %s" msgstr "" #: src/liflines/screen.c:1600 #, c-format msgid "GEDCOM codeset: %s" msgstr "" #: src/liflines/screen.c:1603 #, c-format msgid "gedcom output codeset: %s" msgstr "" #: src/liflines/screen.c:1605 #, c-format msgid "gedcom input codeset: %s" msgstr "" #: src/liflines/screen.c:1613 msgid "UTF-8 charprops loaded" msgstr "" #: src/liflines/screen.c:1615 msgid "UTF-8 charprops not loaded" msgstr "" #: src/liflines/screen.c:1619 msgid "Codeset information" msgstr "" #: src/liflines/screen.c:1636 #, c-format msgid "gettext dll: %s" msgstr "" #: src/liflines/screen.c:1640 #, c-format msgid "gettext dll version: %s" msgstr "" #: src/liflines/screen.c:1645 msgid "gettext dll had no version" msgstr "" #: src/liflines/screen.c:1650 msgid "no gettext dll found" msgstr "" #: src/liflines/screen.c:1659 #, c-format msgid "iconv dll: %s" msgstr "" #: src/liflines/screen.c:1663 #, c-format msgid "iconv dll version: %s" msgstr "" #: src/liflines/screen.c:1668 msgid "iconv dll had no version" msgstr "" #: src/liflines/screen.c:1673 msgid "no iconv dll found" msgstr "" #: src/liflines/screen.c:1931 msgid "Impermissible to change codeset in a populated database" msgstr "" #: src/liflines/screen.c:2032 msgid "LifeLines -- Main Menu" msgstr "" #: src/liflines/searchui.c:133 #, c-format msgid "v Review visit history (%d record)" msgid_plural "v Review visit history (%d records)" msgstr[0] "" msgstr[1] "" #: src/liflines/searchui.c:137 msgid "(visit history is empty)" msgstr "" #: src/liflines/searchui.c:143 #, c-format msgid "c Review change history (%d record)" msgid_plural "c Review change history (%d records)" msgstr[0] "" msgstr[1] "" #: src/liflines/searchui.c:147 msgid "(change history is empty)" msgstr "" #: src/liflines/searchui.c:151 msgid "f Full database scan" msgstr "" #: src/liflines/searchui.c:220 msgid "What scan type?" msgstr "" #: src/liflines/searchui.c:223 msgid "f Full name scan" msgstr "" #: src/liflines/searchui.c:224 msgid "n Name fragment (whitespace-delimited) scan" msgstr "" #: src/liflines/searchui.c:225 msgid "r Refn scan" msgstr "" #: src/liflines/searchui.c:226 msgid "s Source scan" msgstr "" #: src/liflines/searchui.c:290 msgid "Scan on what source field?" msgstr "" #: src/liflines/searchui.c:293 msgid "a Scan by author" msgstr "" #: src/liflines/searchui.c:294 msgid "t Scan by title" msgstr "" #: src/liflines/selectdb.c:95 msgid "Choose database to open" msgstr "" #: src/liflines/selectdb.c:103 msgid "No databases found in database path" msgstr "" #: src/liflines/show.c:123 msgid "born" msgstr "" #: src/liflines/show.c:124 src/liflines/show.c:125 msgid "bapt" msgstr "" #: src/liflines/show.c:126 msgid "barm" msgstr "" #: src/liflines/show.c:127 msgid "basm" msgstr "" #: src/liflines/show.c:128 msgid "bles" msgstr "" #: src/liflines/show.c:129 msgid "adop" msgstr "" #: src/liflines/show.c:130 msgid "resi" msgstr "" #: src/liflines/show.c:134 msgid "died" msgstr "" #: src/liflines/show.c:135 msgid "buri" msgstr "" #: src/liflines/show.c:136 msgid "crem" msgstr "" #: src/liflines/show.c:1009 #, c-format msgid "Cached: I:%s; F:%s" msgstr "" #: src/liflines/valgdcom.c:92 #, c-format msgid "Record %s is referred to but not defined." msgstr "" #: src/liflines/valgdcom.c:93 #, c-format msgid "Line %d: Reference to undefined record %s" msgstr "" #: src/liflines/valgdcom.c:94 #, c-format msgid "Line %d: Tag %s found in unexpected record: %s %s." msgstr "" #: src/liflines/valgdcom.c:190 #, c-format msgid "Line %d: Family has no members (%s %s)." msgstr "" #: src/liflines/valgdcom.c:390 #, c-format msgid "Line %d: The source defined here has no key." msgstr "" #: src/liflines/valgdcom.c:404 #, c-format msgid "Line %d: Source %s has an incorrect key." msgstr "" #: src/liflines/valgdcom.c:411 #, c-format msgid "Lines %d and %d: Source %s is multiply defined." msgstr "" #: src/liflines/valgdcom.c:434 #, c-format msgid "Line %d: The event defined here has no key." msgstr "" #: src/liflines/valgdcom.c:447 #, c-format msgid "Line %d: Event %s has an incorrect key." msgstr "" #: src/liflines/valgdcom.c:454 #, c-format msgid "Lines %d and %d: Event %s is multiply defined." msgstr "" #: src/liflines/valgdcom.c:477 #, c-format msgid "Line %d: The record defined here has no key." msgstr "" #: src/liflines/valgdcom.c:490 #, c-format msgid "Line %d: Record %s has an incorrect key." msgstr "" #: src/liflines/valgdcom.c:497 #, c-format msgid "Lines %d and %d: Record %s is multiply defined." msgstr "" #: src/liflines/valgdcom.c:539 #, c-format msgid "Line %d: This %s line is missing a value field (%s %s)." msgstr "" #: src/liflines/valgdcom.c:590 #, c-format msgid "Line %d: Bad NAME syntax (%s %s)." msgstr "" #: src/liflines/valgdcom.c:820 #, c-format msgid "Line %d: Person %s has multiple father links." msgstr "" #: src/liflines/valgdcom.c:824 #, c-format msgid "Line %d: Person %s has multiple mother links." msgstr "" #: src/liflines/valgdcom.c:836 #, c-format msgid "Line %d: Person %s is both male and female." msgstr "" #: src/liflines/valgdcom.c:840 #, c-format msgid "Line %d: Person %s is male but must be female." msgstr "" #: src/liflines/valgdcom.c:844 #, c-format msgid "Line %d: Person %s is female but must be male." msgstr "" #: src/liflines/valgdcom.c:848 #, c-format msgid "Line %d: Person %s is implied to be both male and female." msgstr "" #: src/liflines/valgdcom.c:860 #, c-format msgid "Line %d: Family %s has multiple husband links." msgstr "" #: src/liflines/valgdcom.c:864 #, c-format msgid "Line %d: Family %s has multiple wife links." msgstr "" #: src/liflines/valgdcom.c:920 msgid "error" msgstr "" #: src/liflines/valgdcom.c:928 #, c-format msgid "%6d Error" msgid_plural "%6d Errors" msgstr[0] "" msgstr[1] "" #: src/liflines/valgdcom.c:930 src/liflines/valgdcom.c:958 #, c-format msgid " (see log file <%s>)" msgstr "" #: src/liflines/valgdcom.c:932 src/liflines/valgdcom.c:960 msgid " (no log file)" msgstr "" #: src/liflines/valgdcom.c:948 msgid "warning" msgstr "" #: src/liflines/valgdcom.c:956 #, c-format msgid "%6d Warning" msgid_plural "%6d Warnings" msgstr[0] "" msgstr[1] "" #: src/liflines/valgdcom.c:1067 #, c-format msgid "Processed %d lines without finding end of HEAD" msgstr "" #: src/liflines/valgdcom.c:1072 #, c-format msgid "End of file at line %d" msgstr "" #: src/liflines/valgdcom.c:1076 #, c-format msgid "Error at line %d: %s" msgstr "" #: src/liflines/valgdcom.c:1080 #, c-format msgid "Bad level at line %d" msgstr "" #: src/liflines/valgdcom.c:1086 #, c-format msgid "Duplicate HEAD line at line %d" msgstr "" #: src/liflines/valgdcom.c:1092 #, c-format msgid "Missing HEAD line at line %d" msgstr "" #: src/stdlib/errlog.c:61 #, c-format msgid " in file <%s> at line %d\n" msgstr "" #: src/stdlib/errlog.c:63 msgid "Current database" msgstr "" #: src/tools/btedit.c:108 #, c-format msgid "btedit requires 2 arguments (btree and key)." msgstr "" #: src/tools/btedit.c:110 #, c-format msgid "See `btedit --help' for more information." msgstr "" #: src/tools/btedit.c:117 #, c-format msgid "Failed to open btree: %s." msgstr "" #: src/tools/btedit.c:124 #, c-format msgid "There is no record with key: %s" msgstr "" #: src/tools/btedit.c:126 #, c-format msgid "Error accessing record: %s" msgstr "" #: src/tools/btedit.c:135 #, c-format msgid "Editor or system call failed." msgstr "" #: src/tools/btedit.c:137 #, c-format msgid "Database was not be modified." msgstr "" #: src/tools/btedit.c:143 #, c-format msgid "Readonly database can not be modified." msgstr "" #: src/tools/btedit.c:150 #, c-format msgid "Error writing file 'btedit.tmp'." msgstr "" #: src/tools/btedit.c:156 #, c-format msgid "Record %s modified." msgstr "" #: src/tools/btedit.c:226 msgid "\"\\My Documents\\LifeLines\\Databases\\MyFamily\"" msgstr "" #: src/tools/btedit.c:228 src/tools/dbverify.c:232 msgid "/home/users/myname/lifelines/databases/myfamily" msgstr "" #: src/tools/btedit.c:231 #, c-format msgid "" "lifelines `btedit' edits raw binary btree blocks\n" "in lifelines database files. Do NOT use this unless\n" "you know what you are doing and you have backed up\n" "your database." msgstr "" #: src/tools/btedit.c:236 #, c-format msgid "Usage btedit [database] [rkey]" msgstr "" #: src/tools/btedit.c:240 #, c-format msgid "\t--help\tdisplay this help and exit" msgstr "" #: src/tools/btedit.c:242 #, c-format msgid "\t--version\toutput version information and exit" msgstr "" #: src/tools/btedit.c:246 #, c-format msgid "\tbtedit %s I34" msgstr "" #: src/tools/btedit.c:248 #, c-format msgid "edit raw btree block for person I34" msgstr "" #: src/tools/dbverify.c:175 msgid "Orphan names" msgstr "" #: src/tools/dbverify.c:176 msgid "Ghost names" msgstr "" #: src/tools/dbverify.c:177 src/tools/dbverify.c:178 msgid "Duplicate names" msgstr "" #: src/tools/dbverify.c:179 msgid "Non-indi names" msgstr "" #: src/tools/dbverify.c:180 msgid "Duplicate individuals" msgstr "" #: src/tools/dbverify.c:181 msgid "Duplicate families" msgstr "" #: src/tools/dbverify.c:182 msgid "Duplicate sources" msgstr "" #: src/tools/dbverify.c:183 msgid "Duplicate events" msgstr "" #: src/tools/dbverify.c:184 msgid "Duplicate others" msgstr "" #: src/tools/dbverify.c:185 msgid "Missing records (from deleteset)" msgstr "" #: src/tools/dbverify.c:186 msgid "Deleted records" msgstr "" #: src/tools/dbverify.c:187 msgid "Bad name" msgstr "" #: src/tools/dbverify.c:188 msgid "Bad family reference" msgstr "" #: src/tools/dbverify.c:189 msgid "Missing child" msgstr "" #: src/tools/dbverify.c:190 msgid "Missing spouse" msgstr "" #: src/tools/dbverify.c:191 msgid "Bad HUSB reference" msgstr "" #: src/tools/dbverify.c:192 msgid "Bad WIFE reference" msgstr "" #: src/tools/dbverify.c:193 msgid "Bad CHIL reference" msgstr "" #: src/tools/dbverify.c:194 msgid "Improper HUSB" msgstr "" #: src/tools/dbverify.c:195 msgid "Improper WIFE" msgstr "" #: src/tools/dbverify.c:196 msgid "Improper child" msgstr "" #: src/tools/dbverify.c:197 msgid "Empty family" msgstr "" #: src/tools/dbverify.c:198 msgid "Single person family" msgstr "" #: src/tools/dbverify.c:199 msgid "Bad pointer" msgstr "" #: src/tools/dbverify.c:200 msgid "Missing data records" msgstr "" #: src/tools/dbverify.c:230 msgid "\\My Documents\\LifeLines\\Databases\\MyFamily" msgstr "" #: src/tools/dbverify.c:236 #, c-format msgid "usage: dbverify -(flags) \n" msgstr "" #: src/tools/dbverify.c:237 #, c-format msgid "flags:\n" msgstr "" #: src/tools/dbverify.c:238 #, c-format msgid "\t-a = Perform all checks (does not include fixes)\n" msgstr "" #: src/tools/dbverify.c:239 #, c-format msgid "\t-g = Check for ghosts (names/refns)\n" msgstr "" #: src/tools/dbverify.c:240 #, c-format msgid "\t-G = Check for & fix ghosts (names/refns)\n" msgstr "" #: src/tools/dbverify.c:241 #, c-format msgid "\t-i = Check individuals\n" msgstr "" #: src/tools/dbverify.c:242 #, c-format msgid "\t-f = Check families\n" msgstr "" #: src/tools/dbverify.c:243 #, c-format msgid "\t-F = Alter any bad family lineage pointers (to _badptr)\n" msgstr "" #: src/tools/dbverify.c:244 #, c-format msgid "\t-h = Display help text (this text)\n" msgstr "" #: src/tools/dbverify.c:245 #, c-format msgid "\t-s = Check sours\n" msgstr "" #: src/tools/dbverify.c:246 #, c-format msgid "\t-e = Check events\n" msgstr "" #: src/tools/dbverify.c:247 #, c-format msgid "\t-x = Check others\n" msgstr "" #: src/tools/dbverify.c:248 #, c-format msgid "\t-l = Check database structure\n" msgstr "" #: src/tools/dbverify.c:249 #, c-format msgid "\t-m = Check for records missing data entries\n" msgstr "" #: src/tools/dbverify.c:250 #, c-format msgid "\t-M = Fix records missing data entries\n" msgstr "" #: src/tools/dbverify.c:251 #, c-format msgid "\t-D = Fix bad delete entries\n" msgstr "" #: src/tools/dbverify.c:252 #, c-format msgid "\t-n = Noisy (echo every record processed)\n" msgstr "" #: src/tools/dbverify.c:253 #, c-format msgid "example: dbverify -ifsex \"%s\"\n" msgstr "" #: src/tools/dbverify.c:386 #, c-format msgid "Non-indi name, key=%s, name=%s" msgstr "" #: src/tools/dbverify.c:403 #, c-format msgid "Orphaned name: %s" msgstr "" #: src/tools/dbverify.c:417 #, c-format msgid "Ghost name: %s -> %s" msgstr "" #: src/tools/dbverify.c:449 #, c-format msgid "Orphaned refn: %s" msgstr "" #: src/tools/dbverify.c:489 #, c-format msgid "Duplicate name for %s (%s)" msgstr "" #: src/tools/dbverify.c:524 #, c-format msgid "Duplicate refn for %s (%s)" msgstr "" #: src/tools/dbverify.c:637 #, c-format msgid "Duplicate individual for %s" msgstr "" #: src/tools/dbverify.c:679 #, c-format msgid "Bad name for individual %s: %s" msgstr "" #: src/tools/dbverify.c:697 src/tools/dbverify.c:721 #, c-format msgid "Bad family reference (%s) individual %s" msgstr "" #: src/tools/dbverify.c:703 #, c-format msgid "Missing child (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:707 #, c-format msgid "Fixed missing child (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:727 #, c-format msgid "Missing spouse (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:731 #, c-format msgid "Fixed missing spouse (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:765 #, c-format msgid "Duplicate family for %s" msgstr "" #: src/tools/dbverify.c:816 #, c-format msgid "Bad HUSB reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:822 #, c-format msgid "Fixed Bad HUSB reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:831 #, c-format msgid "Improper HUSB (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:844 #, c-format msgid "Bad wife reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:850 #, c-format msgid "Fixed Bad wife reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:859 #, c-format msgid "Improper wife (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:872 #, c-format msgid "Bad child reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:878 #, c-format msgid "Fixed bad child reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:887 #, c-format msgid "Improper child: Child (%s) without FAMC reference to family (%s)" msgstr "" #: src/tools/dbverify.c:895 #, c-format msgid "Empty family (%s)" msgstr "" #: src/tools/dbverify.c:897 #, c-format msgid "Single person family (%s)" msgstr "" #: src/tools/dbverify.c:923 #, c-format msgid "Duplicate source for %s" msgstr "" #: src/tools/dbverify.c:939 #, c-format msgid "Duplicate event for %s" msgstr "" #: src/tools/dbverify.c:955 #, c-format msgid "Duplicate record for %s" msgstr "" #: src/tools/dbverify.c:1026 #, c-format msgid "Bad pointer (in %s): %s" msgstr "" #: src/tools/dbverify.c:1064 #, c-format msgid "Missing undeleted record %c%d" msgstr "" #: src/tools/dbverify.c:1071 #, c-format msgid "Fixed missing undeleted record %c%d" msgstr "" #: src/tools/dbverify.c:1075 #, c-format msgid "Failed to fix missing undeleted record %c%d" msgstr "" #: src/tools/dbverify.c:1087 #, c-format msgid "Delete set contains valid record %s" msgstr "" #: src/tools/dbverify.c:1092 #, c-format msgid "Fixed delete set contains valid record %s" msgstr "" #: src/tools/dbverify.c:1096 #, c-format msgid "Failed to fix missing undeleted record %s" msgstr "" #: src/tools/dbverify.c:1117 #, c-format msgid "Master fkey misaligned" msgstr "" #: src/tools/dbverify.c:1144 #, c-format msgid "Cycle in indexes, file %s found again!\n" msgstr "" #: src/tools/dbverify.c:1151 #, c-format msgid "Error loading index at key" msgstr "" #: src/tools/dbverify.c:1199 #, c-format msgid "First key in block below parent's limit\n" msgstr "" #: src/tools/dbverify.c:1207 #, c-format msgid "Last key in block above parent's limit\n" msgstr "" #: src/tools/dbverify.c:1215 #, c-format msgid "Key not below next key" msgstr "" #: src/tools/dbverify.c:1232 src/tools/dbverify.c:1234 msgid "data block" msgstr "" #: src/tools/dbverify.c:1235 #, c-format msgid "%s fkey=%d, file=%s" msgstr "" #: src/tools/dbverify.c:1248 #, c-format msgid "Invalid errs array[%d] in dbverify - fix program\n" msgstr "" #: src/tools/dbverify.c:1285 #, c-format msgid "Missing data record (%s)" msgstr "" #: src/tools/dbverify.c:1289 #, c-format msgid "Fixed missing data record (%s)" msgstr "" #: src/tools/dbverify.c:1420 #, c-format msgid "Checking %s" msgstr "" #: src/tools/dbverify.c:1476 #, c-format msgid "%d error" msgid_plural "%d errors" msgstr[0] "" msgstr[1] "" #: src/tools/dbverify.c:1480 #, c-format msgid "%d fixed" msgid_plural "%d fixed" msgstr[0] "" msgstr[1] "" #: src/tools/dbverify.c:1487 msgid "No errors found" msgstr "" #: src/tools/dbverify.c:1506 #, c-format msgid "FATAL ERROR: " msgstr "" #: src/tools/dbverify.c:1511 #, c-format msgid "In file <%s> at line %d" msgstr "" lifelines-3.0.61/po/en@boldquot.header0000700002540200244210000000247107477522374020032 0ustar prappDomain Users# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # # This catalog furthermore displays the text between the quotation marks in # bold face, assuming the VT100/XTerm escape sequences. # lifelines-3.0.61/po/en@quot.header0000700002540200244210000000226307477522374017170 0ustar prappDomain Users# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # lifelines-3.0.61/po/eo.gmo0000700002540200244210000023454710656417754015524 0ustar prappDomain UsersÞ•í„Qì>0T1T9OT+‰T'µT2ÝTU$U%:U`UyU-™U*ÇUòUVV%9V_V|V—V §V´V ÃVÐV åVóVWW(W7WGWWWjW~WWžW¤W«W±W¸W¼WÑWêWüWX$X6XUX2jXXµX¾XÇXÐX ÙX çXõXYY'1YYY wY˜YªYÅY"ãY"Z!)Z KZlZŒZ!¬Z!ÎZðZ![ 1[#R[#v[š[¹[×[÷[%\9\U\s\Ž\¬\Ì\ ì\ù\ ]"]6]H]\]$v] ›]¦]&·]Þ]÷]^^0^C^ I^W^ ]^k^ƒ^ ^/ª^;Ú^(_ ?_&M_'t_&œ_&Ã_&ê_&`8`M` h`r`†`œ`&­`+Ô`aa a aa )a%4aZa$ua=ša>Øa%b)=bgb|bbˆb‹b b™b¬b$¿bäb÷b%c6c4Qc†c™c'®cÖcõcdd/d8d Wdcd${d2 d)Ód&ýd($eMeReUe2heL›e*èe&f!:f-\fŠfŸf·f$Ëf%ðfg*gF@g<‡g/Äg*ôg@h.`hh¦h,¾h4ëh i6iQibi'~i¦i%µiÛiïijj%j#Bjfjvj3Šj5¾j6ôj6+k6bk6™k;Ðk/ l.|s|!’|)´|"Þ|*},,}(Y}7‚}º} Ò}!à} ~~!~A~ Y~6e~œ~­~Á~Ô~ç~'ú~":"S"v™'ž5Æ5ü22€0e€–€2­€6à€6'N(v.Ÿ+Î1ú-,‚-Z‚+ˆ‚.´‚9ã‚.ƒ)Lƒ(vƒ(Ÿƒ+ȃ,ôƒ5!„,W„,„„"±„8Ô„( …'6…!^…!€…¢…0Â….ó…/"†8R†/‹†/»†ë†û†‡@&‡g‡y‡,‹‡&¸‡)߇ ˆˆ20ˆ cˆ!qˆ“ˆ¬ˆ Áˆâˆ"ñˆ ‰"‰/@‰3p‰¤‰+¬‰؉7é‰ !ŠA/Š#qŠ•Š*¥Š/Њ‹‹#‹$5‹Z‹v‹*‰‹´‹Í‹ä‹ŒŒ&Œ6ŒFŒ*VŒŒ”Œ³ŒÂŒÖŒ èŒõŒ  &1D_y—¬)»#å Ž&%Ž&LŽ'sŽ&›Ž)ÂŽ%ìŽ2 E&f.+¼,è41J3|+°Ü ü$‘,B‘-o‘5‘2Ó‘4’!;’-]’:‹’)Æ’)ð’)“,D“#q“/•“$Å“ê“3”9”#I”m”.v”¥”¾” Ô!Ñ”ó”)•9•T•e• u•ƒ•0™•*Ê•õ•/–8–S–f–o–0–7²–ê–î–—4—R—)a—‹—š—µ—Ñ—í— ˜ ˜)+˜*U˜€˜!Ÿ˜)Á˜-똙34™6h™5Ÿ™6Õ™5 šBš\š'xš; š8Üš(›!>›)`›7Š›!›+ä›*œ+;œ,gœ,”œÁœ(Öœ(ÿœ+(Ts6’1É6û.2ž'ažG‰ž1Ñž6Ÿ.:Ÿ-iŸ8—Ÿ3П4 89 6r )© )Ó ,ý 1*¡*\¡3‡¡9»¡+õ¡)!¢7K¢8ƒ¢4¼¢-ñ¢.£,N£,{£.¨£2×£, ¤%7¤]¤0p¤4¡¤ Ö¤ ä¤(ò¤¥.¥@=¥~¥#¥Á¥ ×¥å¥%ö¥&¦%C¦Gi¦±¦ʦ$æ¦ §<,§ i§4Ч¿§%ϧ$õ§,¨,G¨'t¨(œ¨,Ũò¨) ©6©"S©v©&–©2½©0ð©1!ª2Sª1†ª1¸ª1ꪫ:«*Q«|«“«¤«µ«Å«Ö«é«ü«¬!¬ 8¬"F¬i¬}¬’¬–¬Ÿ¬¦¬ «¬¶¬»¬¿¬ìʬÓ¬׬ݬá¬è¬ë¬%­'­;­P­T­Z­_­f­k­p­ w­ ­­¡­¦­«­²­·­À­Æ­Ë­Ò­è­ÿ­,®-E®Js®¾® ŮӮخá®ç®+ì®,¯?E¯+…¯ ±¯Ò¯ׯÛ¯ñ¯'°-°@°U°q° u°$€°¥°©°²°·°¾°İܰë°þ°#±5±I±\±!o±‘±¤±½±×±ݱä±ë±ô±ø±ý± ²#²2² F² Q² ^²k²z²”²#š²¾² ŲÒ²ñ² ³³3³8H³&³¨³¾³г׳Û³ä³ê³ð³õ³ý³´ ´´´ ´(´-´6´ >´L´ Q´%[´´•´®´È´Í´Ö´ñ´ µµ*µ-µ1µ6µ:µ>µNµ#dµ*ˆµ)³µ*ݵ.¶7¶P¶ f¶"t¶—¶¬¶±¶µ¶̶Þ¶â¶ê¶þ¶·· ··-·=·Q·m·‡·Ž·%’·¸·Ì·á·ö· ¸$¸(¸,¸ 2¸<¸@¸Q¸b¸s¸„¸•¸¦¸·¸ȸ͸Ö¸ݸ,ò¸¹1¹!O¹q¹v¹|¹‚¹‡¹޹£¹8¶¹ï¹ó¹ü¹ºº)5º_ºcºkºoº*€º"«º κغߺäºíºòºûº »"»*=»"h» ‹»˜»¬»À»Ö»é»¼"¼?¼D¼\¼u¼‹¼%¢¼ȼ.Û¼) ½#4½X½_½ c½m½ˆ½޽–½š½¡½ ¥½³½¹½½½$ýè½$ï½¾¾)¾&>¾e¾k¾¾…¾‹¾‘¾§¾,½¾-꾿 ¿'¿-¿3¿:¿P¿T¿Z¿p¿t¿‹¿ ¿µ¿¹¿Á¿È¿Ì¿á¿!ü¿HÀgÀ lÀxÀ}À…ÀÀ)¥ÀÏÀäÀùÀÁ'#ÁKÁdÁtÁwÁ|ÁÁ“Á{¤Á& ÃDGÃ7ŒÃ-ÄÃ4òÃ'Ä?Ä+YÄ…Ä% Ä1ÆÄ)øÄ"ÅBÅ(YÅ ‚Å!£ÅÅÅåÅ õÅÆ Æ ,ÆMÆ^ÆqƄƕƧƹÆËÆäÆûÆ Ç Ç&Ç-Ç3Ç:Ç>ÇSÇjÇǔǧÇÀÇÞÇ0óÇ$È<ÈEÈNÈWÈ`ÈrȃȕȵÈ-ÔÈ"É!%ÉGÉ]É"wÉ$šÉ%¿É$åÉ. Ê"9Ê!\Ê!~Ê$ Ê ÅÊ&æÊ# Ë%1Ë$WË |Ë Ë#¾ËâË*Ì,ÌJÌhÌ"…Ì!¨Ì ÊÌëÌüÌÍ*Í?ÍUÍmÍÍ «Í¶ÍÎÍ îÍÎÎ5ÎLÎcÎgÎz΀ΓΥΠ¹Î6ÇÎ;þÎ):Ï dÏ&rÏ'™Ï&ÁÏ'èÏ%Ð&6Ð]ÐyÐ –ТÐÁÐÖÐ,êÐ)ÑAÑFÑOÑ RÑ ]Ñ kÑ:xѳÑ/ÎÑ?þÑG>Ò)†Ò2°ÒãÒûÒÓÓÓ ÓÓ.Ó*FÓqÓ#‰Ó,­ÓÚÓ<øÓ5ÔPÔ+kÔ —Ô¸ÔÑÔëÔ Õ!Õ9ÕKÕ,iÕ0–Õ/ÇÕ3÷Õ.+ÖZÖ_ÖbÖ;{ÖR·Ö+ ×'6×&^×+…×±×Ä×ã×.ö×1%ØWØgØS‚Ø=ÖØ0Ù6EÙC|Ù0ÀÙñÙÚ*-Ú2XÚ‹ÚŸÚ¸ÚÇÚ.àÚÛ($ÛMÛbÛvÛ‘Û¨Û'ÇÛïÛÜ6Ü7RÜ9ŠÜ6ÄÜ9ûÜ75Ý?mÝ2­Ý/àÝ7Þ7HÞ*€Þ,«Þ)ØÞ,ß*/ß Zß&{ßB¢ß'åßC à$Qà@và'·àCßà%#áAIá‹á «á(Ìáõáâ.â Jâ;kâ)§â!Ñâóâ"ã3ãLã;eã ¡ã"Âãåãä(äGä6Pä‡äœä­äÃä%ßäå!å)<å%fåŒå"©å.Ìå0ûå1,æ)^æLˆæÕæ ôæçç.ç!KçmçŒç¬ç#Ëç ïç'üç$èCèUègè7}è<µè#òèé)'éQécé4|é+±é4Ýé7ê7Jê4‚ê.·ê$æê. ë/:ë!jë*Œë·ëÌëÞëðëì ì7ìFìYì_ìbìfìjìˆìFœì ãì(îì1í(Ií,ríŸí!¾íAàí$"î3Gî{î!–î2¸î5ëî9!ï[ï'{ï0£ï&Ôï/ûï++ð/Wð6‡ð¾ð Úð"èð ññ$)ñNñ jñ5wñ­ñ½ñÑñæñøñ- ò 9ò Zò-{ò0©òÚò-ãò3ó7Eó7}ó5µóëó4ô98ô6rô,©ô.Öô6õ8<õ5uõ4«õ6àõ+ö0Cö3tö0¨ö.Ùö.÷,7÷5d÷7š÷>Ò÷7ø5Iø/ø9¯ø2éø0ù2Mù(€ù"©ù<Ìù3 ú5=ú=sú5±ú3çúû+ûBûAVû˜ûµû7Ïû+ü+3ü_ühü7ˆüÀü$Ðüõüý#-ýQý$aý†ý$–ý0»ý3ìý þ,(þUþGkþ ³þ4Áþ4öþ+ÿ4@ÿ9uÿ¯ÿÆÿÖÿ0ìÿ >,T$¦ Áâù(=0U†!˜ºËÛ í ù   -"Fi„Ÿ ´&¿&æ (' P#q$•&º&á3%<'b+Š,¶-ã15C5y/¯$ß$))+S,0¬4Ý4%G/m<4Ú-+=)i!“.µ'ä 4' \ k  † . ¿ Ù à )ó  ); e „ ” ¨ º 5Ñ & . 0A r   £ ° 3À Bô 7 : J 2_  ’ 'Ÿ Ç × ó  $/ T h (y (¢ Ë "ê * 88q<;Í@ <J0‡¸!×'ùC!Ge)­+×/93'm.•'Ä(ì((>g)‚'¬(Ô"ý# >D1ƒEµ1û-II1“1Å&÷*EI?CÏ95M3ƒ+·6ã9-T6‚:¹(ô.@L@9Î':04k6 7×@4P-…³9Â8ü5I.]Œ¡Dµú/Fap+'«ÓEî4J#`!„8¦ß.ÿ .<U't(œ&Å&ì%9#Pt!“!µ'×5ÿ45 2j 2 5Ð 2!59!o!#‹!/¯! ß!""0"E"Z"q"Š"ž"´"Ñ"ä"##5#9#@#G# L#W#\#`#d#k#s#w#~#‚#Š###¤#È#Ú#ì#ð#ö#û#$$ $$ $*$:$?$D$K$P$Y$_$d$k$$ž$4°$)å$P%`% g%t%y%‚%‰%0Ž%2¿%Lò%5?&u&•&š&ž&·&"Í&ð&'$'@' D')Q'{''ˆ''”'š'µ'É'à'*ô'(8(X($u(š(°(Ì(è(ë(ï(ö(þ()))3)C)\)m)|)“)§)Â)%È)î) õ)* *<*N*a*9}*!·*Ù*õ* ++++$+)+.+7+<+D+I+O+ U+a+f+o+ u++ †++¯+Ã+Þ+ù+þ+.,$6,[,y,,’,–,›,Ÿ,£,¹,Ð,ì,- --:-0h-™-´- É-$×-ü-...<.R.V.^.r.v.|.€.†. .·.&Ð.&÷./%/#)/M/a/v/”/!«/Í/Ñ/Õ/ Û/æ/ë/í/ï/ñ/ó/õ/÷/ù/û/0 00,%0R0k0‰0£0§0¬0²0·0+¾0ê091<1@1I1M1#m1$‘1¶1º1Â1Æ1)Û1(2 .282=2B2K2P2Y2l2„2&2!Ä2æ2÷2 3#383L3f3€3ž3£3À3Û3ï3+4:44N4)ƒ4&­4Ô4Ø4 Ü4æ45 55555/55595 >5_5f5…5‰5›5 µ5Ö5Ü5ò5ö5û5666164h66 ¢6¬6±6µ6¼6Õ6Ù6ß6÷6û6707G7K7R7X7[7p7"…7R¨7û7 8 888 80:8k8†8 8»8.Ô89 95989=9B9S9² oiö2èØŠÔ$‡×ŸIZç§+,V&?BD‹ŠÊ«Lì~þ9X/φ€"“ÂÇ©óu#[XÄ‹Ó634^œz,Ù¶¼:!KØ×m®8â\-±¸ƒùe¬ñf’¨ºó¹£öõ‘ƒûH+6_ƈ/5ïúçN´³£`Œæ6lêey®{áÐ>S+þ¹’H,!qSç O„÷ÞŽ(x™ð>âIõp°è¹pü‡¨â¬?ßÍäual*ª ”€¨±¦Å  ý5‘V+”qh°àÞ7¦B±uÐúsÁa²«$yªÆ;ÏøÿêÏf”jNLÒ9jÓ€G*w¤W½Ë{Ó½ÛÈ”‰@ŽÛV³<Í–bÓ#48brí•´ÑYZ¥Ö35¸Ìó8&Ev˜=ÇFÇlË…z-)Èn~Ò@Õ‰·}¸šx&§¡\S| ¥i ˆæZxòáCÒÎc烥‡¿€m2R¾äM\·I4'«¾ÛUáÚH)LSôtÆÿG î›øUsIœ¯2–_0í1™©a#éKÃÉ;KT ›É‚pr ?Yr• šï?J„8È¿ÒDkø[žÂ{ÙÃÖ!¯Œ˜<X‚`z­iwéÜ·ëLàÝ k‚Q †BY¼••ݵ¶˜F_ ʵy@RÖÂoOÌÑ ˆ(":d‘¥Ãȼª´Ë̬Œ¤%z†]gù–jÐã<’A\¶-E_n­¡ûÔ)sPŸŒA~Õ¢K–í%Äðë‡ïÅ(ŽH°¬6è`ÆQ(=ÕP`µ†ãÉaåÚ².FŸ  R¶÷Ìß]ž]ÅJüm› ÉØt'‹ôÙ¿PmW¹ËAEºš|eÝu;JÑ.[ÑR,Þ^Cž'bº¢ìœ »d©w¾½£Ä[‰Ç!„¤ëB»Ãxh Gv„Þ·ãÄŠ®o‰MhäjhÐ#ê¡JÀ'nÔd oW*0à­|ÙòßäYUÚ¤M Á©Á—  œ» þ0ê—Göc»%žp)Pr³C1T$ܵÎ@=æåüNéTve>/¢ÅŸ^¼b®g}MiE×1úßÕÿ|WÜ…ØŠX]TÀà“yqèk§;*—ì¯$ wCDc¨Ž4å/Û3åUù¾À<íO1F“ë.Êθ¿Ü«õ7‚t3Ê"á³9f±æný—Î:™Ú ãªfìcÁ“­Oϰ›’‘¦¦Ô‹¡î0½¯lð¢:ÝýZ™ô^Í …ñÍ}ˆ§7~=ñ÷g72´Q&AÖ²ÀDƒâògv}£stº>V×Néû˜5"î%…Q-qškd9.{ -D = Fix bad delete entries -F = Alter any bad family lineage pointers (to _badptr) -G = Check for & fix ghosts (names/refns) -M = Fix records missing data entries -a = Perform all checks (does not include fixes) -e = Check events -f = Check families -g = Check for ghosts (names/refns) -i = Check individuals -l = Check database structure -m = Check for records missing data entries -n = Noisy (echo every record processed) -s = Check sours -x = Check others Aborting now. Core dump? [y/n] Report duration %s (ui duration %s) in file <%s> at line %d in file <%s> at line %d (dbint tt: %s) (immutable) (no log file) (read only) (see log file <%s>)!! Cycle mode!a Ancestors mode!d Descendants mode!g GEDCOM mode!n Normal mode!t GEDCOMT mode!x GEDCOMX mode# Toggle childnos$$ List references$n List notes$s List sources%02ds%1 AUC%1 FR%1 HEB%1J%6d Error%6d Errors%6d Warning%6d Warnings%c Reorder child%d child%d children%d error%d errors%d fixed%d fixed%d item leaked%d items leaked%d spouse%d spouses%d warning during import%d warnings during import%dI, %dF, %dS, %dE, %dX%dd%02dh%dh%02dm%dm%02ds%dy%03dd%e Add event%o Add other%s Add source%s fkey=%d, file=%s%s was added as a child.%s was added as a spouse and/or parent.%s was added to the database.%s was modified in the database.%s: Bad arguments%s: line %d (entry %d): %s%s: null arg not permissible.%s: the arg #%s had a major error.%s: the arg #%s must be a boolean.%s: the arg #%s must be a family.%s: the arg #%s must be a float.%s: the arg #%s must be a list.%s: the arg #%s must be a node.%s: the arg #%s must be a person.%s: the arg #%s must be a record.%s: the arg #%s must be a set.%s: the arg #%s must be a string.%s: the arg #%s must be a table.%s: the arg #%s must be a variable.%s: the arg #%s must be an integer.%s: the arg had a major error.%s: the arg must be a family.%s: the arg must be a filename.%s: the arg must be a list.%s: the arg must be a node or string.%s: the arg must be a node.%s: the arg must be a person.%s: the arg must be a set.%s: the arg must be a string.%s: the arg must be a variable.%s: the arg must be an integer.( Scroll up(( Scroll both up(1-9) Browse to child(Family %s (%s, %s)(Separator is %s)(b Scroll bottom up(change history is empty)(givens) person does not have a name(pg %d/%d)(t Scroll top up(trimname) person does not have a name(visit history is empty)) Scroll down)) Scroll both down)b Scroll bottom down)t Scroll top down**may+ Next in db, of - Prev in db-- CURRENT SELECTION ----- CURRENT SELECTION ------ LIST ---/home/users/myname/lifelines/databases/myfamily0 EVEN 1 REFN 1 DATE 1 PLAC 1 INDI 2 NAME 2 ROLE 1 SOUR0 SOUR 1 REFN 1 TITL Title 1 AUTH Author0 XXXX 1 REFN1 Add a source record to the database2 Edit source record from the database3 Add an event record to the database4 Edit event record from the database5 Add an other record to the database6 Edit other record from the database< Enlarge menu area> Shrink menu area? Other menu choicesA Advanced viewA family cannot be merged with itself.A person cannot be merged with him/herself.A.D.ABORTADALARM CLOCKASSERT failureAborting: Adding unused keys as deleted keys...Ambiguous call to proc: %sAre you sure you want to merge them?Are you sure you want to remove the person from the database?Are you sure you want to remove this record from the database?Argument to lock (-l) must be y or n.Arguments to (r)sort must be of same sizeB Browse new familyB.C.B.C.E.BCBCEBUS ERRORBad CHIL referenceBad HUSB referenceBad HUSB reference (%s) in family %sBad WIFE referenceBad backup history countBad child reference (%s) in family %sBad decimal number format.Bad escape code at offset %d in bytecode string <%s>Bad escape format.Bad family referenceBad family reference (%s) individual %sBad hexidecimal number format.Bad history countBad history lengthBad level at line %dBad nameBad name for individual %s: %sBad pointerBad pointer (in %s): %sBad wife reference (%s) in family %sBecause of errors the GEDCOM file was not loaded. Both families must have husbands/fathers.Both families must have wives/mothers.Browse new record (without adding xref).C.E.CECached: I:%s; F:%sCannot combine forceopen (-f) and lock (-l) flags.Cannot combine immutable (-i) or read-only (-r) with read-write (-w) access.Cannot convert codeset (from <%s> to <%s>)Cannot remove last person from family.Checking GEDCOM file for errors. Choose a family by selecting a spouse/parent.Choose an operation:Choose database to openChoose from historyClash with longer hotkey in item: %sClash with shorter hotkey in item: %sCodeset informationCollation routine: %sCommands: Select by number, u Page Up, d Page Down, i Select, q QuitCommands: j Move down k Move up i Select q QuitCommands: j Move down k Move up q QuitCommands: u Page Up, d Page Down, q QuitCommands: j Move down k Move up d Delete i Select q QuitCopyright(c) 1991 to 1996, by T. T. Wetmore IVCould not open file %sCould not open file %s.Create a family with this person as a child.Create a family with this person as a spouse/parent.Current Database - %sCurrent collate locale: %sCurrent databaseCurrent messages locale: %sCycle in indexes, file %s found again! DEATH OF CHILDDatabase `%s' has been saved in `%s'.Database error: -- Database recordsDatabase was corrupt.Default path: Delete history (%d entries)?Delete set contains valid record %sDeleted recordsDisplay to InternalDo you really want to add this child to the family?Do you really want to add this event to the database?Do you really want to add this family to the database?Do you really want to add this person to the database?Do you really want to add this record to the database?Do you really want to add this source to the database?Do you really want to add this spouse/parent to the family?Do you really want to merge these two families?Do you really want to merge these two persons?Do you really want to remove this child from his/her family?Do you really want to remove this spouse from his/her family?Do you really want to update this event?Do you really want to update this family?Do you really want to update this person?Do you really want to update this record?Do you really want to update this source?Do you want to create a database there?Do you want to edit the event again?Do you want to edit the event again? (Otherwise changes will be discarded.)Do you want to edit the family again?Do you want to edit the family again? (Otherwise changes will be discarded.)Do you want to edit the person again?Do you want to edit the person again? (Otherwise changes will be discarded.)Do you want to edit the record again?Do you want to edit the record again? (Otherwise changes will be discarded.)Do you want to edit the source again?Do you want to edit the source again? (Otherwise changes will be discarded.)Do you want to enter another name?Do you want to re-edit it?Duplicate HEAD line at line %dDuplicate event for %sDuplicate eventsDuplicate familiesDuplicate family for %sDuplicate func %s (lines %d and %d) in report: %sDuplicate hotkey for item: %sDuplicate individual for %sDuplicate individualsDuplicate name for %s (%s)Duplicate namesDuplicate othersDuplicate proc %s (lines %d and %d) in report: %sDuplicate record for %sDuplicate refn for %s (%s)Duplicate source for %sDuplicate sourcesDuplicated REFN - please choose.EMT INSTEdit current record now to add xref manually.Editor to InternalEmpty familyEmpty family (%s)End of file at line %dEnter Family Number to Browse toEnter a sibling from family.Enter a spouse from family.Enter codeset to assume (* for none)Enter d for debugger, q to quitEnter integer for programEnter name of output archive file.Enter name of translation table file to readEnter name of translation table file to writeEnter pattern to match against full name.Enter pattern to match against refn.Enter pattern to match against single surname or given name.Enter string for programErrorErrorsError accessing dataError at line %d: %sError in abbreviations file.Error in character mapping file.Error in user options file.Error: file "%s": line %d: Error: file <%s> not foundError: file <%s> not found: %s EventEventsEvent %s is referred to but not defined.Existing database found.FATAL ERRORFATAL ERROR: FLOATING POINT EXCEPTIONFailed to fix missing undeleted record %c%dFailed to fix missing undeleted record %sFamilies may not yet be removed in this fashion.FamilyFamiliesFamily %s is referred to but not defined.Fatal ErrorFilepath too long.First argument to (r)sort must be list or arrayFirst key in block below parent's limit Fixed Bad HUSB reference (%s) in family %sFixed Bad wife reference (%s) in family %sFixed bad child reference (%s) in family %sFixed delete set contains valid record %sFixed missing child (%s) in family (%s)Fixed missing data record (%s)Fixed missing spouse (%s) in family (%s)Fixed missing undeleted record %c%dFrom which family is the child to be removed?From which family is the spouse/parent to be removed?GEDCOM codeset: %sGEDCOM to InternalGUI codeset: %sGUI input codeset: %sGUI output codeset: %sGhost name: %s -> %sGhost namesGlobal variablesHANGUPHeHerHisHow would you like to find a record?ILLEGAL INSTRUCTIONINDI, FAM, SOUR, EVEN records may not be other records.INTERRUPTIdentify a child of the family, if known.Identify a parent in the family having children swapped.Identify a spouse of the family, if known.Identify a spouse/parent for the new family.Identify child already in family.Identify child in second family.Identify family (enter nothing to identify by individual members).Identify list of persons for program:Identify one of the child's parents, if known.Identify person for program:Identify second person to browse to.Identify spouse/parent already in family, if known.Identify spouse/parent in second family, if known.Identify spouse/parent to add to an existing family.Identify the child to reorder.Identify the first child to swap.Identify the first family/spouse to swap.Identify the second child to swap.Identify the second family/spouse to swap.Identify the second spouse/parent, if known.Illegal type found in list in menuchooseImpermissible to change codeset in a populated databaseImport time %s (ui %s) Improper HUSBImproper HUSB (%s) in family (%s)Improper WIFEImproper childImproper wife (%s) in family (%s)In file <%s> at line %dIn menu: %sInsert xref automatically at bottom of current record.Internal codesetInternal to DisplayInternal to EditorInternal to GEDCOMInternal to ReportInvalid properties set for new databaseIs this the new child? Is this the new spouse? Is this the person? Select if so.Is this the record? Select if so.KILLLast key in block above parent's limit LifeLines %s - Genealogical DB and Programming SystemLifeLines -- Auxiliary Browse Screen (* toggles menu)LifeLines -- Family Browse Screen (* toggles menu)LifeLines -- List Browse Screen (* toggles menu)LifeLines -- Main MenuLifeLines -- Person Browse Screen (* toggles menu)LifeLines -- Two Family Browse Screen (* toggles menu)LifeLines -- Two Person Browse Screen (* toggles menu)Line %d: Event %s has an incorrect key.Line %d: Family %s has an incorrect key.Line %d: Family %s has multiple husband links.Line %d: Family %s has multiple wife links.Line %d: Person %s has an incorrect key: skipped.Line %d: Person %s has multiple father links.Line %d: Person %s has multiple mother links.Line %d: Person %s is both male and female.Line %d: Person %s is female but must be male.Line %d: Person %s is implied to be both male and female.Line %d: Person %s is male but must be female.Line %d: Person defined here has no name.Line %d: Record %s has an incorrect key.Line %d: Source %s has an incorrect key.Line %d: The event defined here has no key.Line %d: The family defined here has no key.Line %d: The person defined here has no key: skipped.Line %d: The record defined here has no key.Line %d: The source defined here has no key.Line %d: This line has a bad link.Line %d: This line has a level number that is too large.Line %d: This line has an illegal level.Line %d: This line has no level number.Line %d: This line is empty; EOF?Line %d: This line is incomplete.Line %d: This line is too long.Line %d: This line needs white space before tag.Lines %d and %d: Event %s is multiply defined.Lines %d and %d: Family %s is multiply defined.Lines %d and %d: Person %s is multiply defined: skipped.Lines %d and %d: Record %s is multiply defined.Lines %d and %d: Source %s is multiply defined.Local variablesLocales are disabled.Locales are enabled.Looks like a program was running. Check file %1 around line %2. M< Less menu colsM> More menu colsMalformed configuration file: line too long.Menu (%s) choice sequence too long: %sMenu (%s) item lacked choice sequence: %sMessages:Missing HEAD line at line %dMissing NAME line in INDI record; record ignored. Missing childMissing child (%s) in family (%s)Missing data record (%s)Missing data recordsMissing records (from deleteset)Missing spouseMissing spouse (%s) in family (%s)Missing titleMissing undeleted record %c%dNLS (National Language Support) is compiled in.NLS (National Language Support) is not compiled in.NO NAMENew persons were added to the current list.New record is %sNew spouse/parent has unknown sex; can't add to family.No conversionNo current internal codeset, so no codeset conversion can be doneNo databases found in database pathNo errors foundNo errors; adding records with new keys...No errors; adding records with original keys...No events present.No more historyNo notes present.No one in database has key value %s.No original string on line.No others present.No persons were added to the current list.No records found in scanNo references present.No replacement string on line.No sources present.No such child.No such family.No such person.No such record.No such translation table in this databaseNode memory leaks:Non-indi name, key=%s, name=%sNon-indi namesNot implemented yetNot valid commandOrphan namesOrphaned name: %sOrphaned refn: %sOtherOthersPIPE WRITEPOWER-FAIL RESTARTParsing Error at line %d: Performing full name scanPerforming name fragment scanPerforming refn scanPersonPersonsPerson %s is referred to but not defined.Place the child last in the family.Please choose an operation:Please choose family create operation.Please choose from among these people.Please choose from among these records.Please choose from the following list.Please choose from the following options:Please choose the child to browse to.Please choose the child to remove from the family.Please choose the event to view.Please choose the family to browse to.Please choose the father/husband to browse to.Please choose the first child to browse to.Please choose the first family to browse to.Please choose the first father/husband to browse to.Please choose the first mother/wife to browse to.Please choose the first spouse/parent to browse to.Please choose the mother/wife to browse to.Please choose the note to view.Please choose the other to view.Please choose the reference to view.Please choose the second child to browse to.Please choose the second family to browse to.Please choose the second father/husband to browse to.Please choose the second mother/wife to browse to.Please choose the second spouse/parent to browse to.Please choose the source to view.Please choose the spouse/parent to browse to.Please choose the spouse/parent to remove from the family.Please enter person's internal key value.Please enter the name of the GEDCOM file.Please identify next person to browse to.Please identify one of the child's siblings.Please identify one of the spouses.Please identify person or persons to browse to.Please identify record to browse to.Please identify the child.Proc %s must be called with %d (not %d) parameters.Proceed anyway?Proceed without codeset conversion?Proceed?Processed %d lines without finding end of HEADQ Quit current databaseQUITQuit debuggerR Pick a GEDCOM file and read inREFN key is already in use.Record %s is referred to but not defined.Remove this family record?Report cancelledReport debuggerReport file: Report not found: %s Report stopping due to error opening output fileReport stopping due to lack of output fileReport to InternalReturn to current record (without adding xref).Runtime Error at line %d: SEGMENTATION ERRORSIGNAL 0SYSTEM CALL ERRORSecond argument to (r)sort must be list or arraySelect the child the new child precedes or select last.SheSingle person familySingle person family (%s)Something impossible happened. Contact tech support.SourceSourcesSource %s is referred to but not defined.Spouse unknownStartup collate locale: %sStartup messages locale: %sStrike any key to continue.System error: illegal map codeTERMINATE FROM KILLTRACE TRAPTag is too long to connect automatically.The child was removed from his/her family.The current list is not named.The current list is now named %s.The database is already open for writing.The database is locked (no readwrite access).The database is read only.The database is read only; you may not add records.The database is read only; you may not change records.The database is read only; you may not merge records.The database is read only; you may not remove records.The database is read-only; loading has been canceled.The database is unlocked.The database was not saved.The event was modified in the database.The families have different fathers/husbands; cannot merge.The families have different wives/mothers; cannot merge.The family was modified in the database.The file is as positioned at EOF.The new family was added to the database.The persons are not of opposite sex; can't make family.The record begins at wrong level.The record contains multiple level 0 lines.The record does not begin with a FAM line.The record does not begin with a SOUR line.The record does not begin with an EVEN line.The record does not begin with an INDI line.The record is empty.The record was modified in the database.The source was modified in the database.The spouse was removed from his/her family.The two children were swapped.The two families were swapped.There are no children in the database for this family.There is no LifeLines database in that directory.There is no one in the database with that name or key.There is no record with that key or reference.There is something wrong with the data.There was %d unresolved reference.There were %d unresolved references.These persons are children in different families.This does not point to another record in the database!This family already has a husband/male parent.This family already has a wife/female parent.This family has both spouses/parents; can't add another.This family has less than two children; can't swap.This family has neither spouse/parent; can't remove.This family has no female spouse/parent in the database.This family has no male spouse/parent in the database.This family still has links; not removed.This is not a lineage linked GEDCOM file.This person has no children in the database.This person has no older sibling in the database.This person has no spouse in the database.This person has no younger sibling in the database.This person is a spouse/parent in less than two families.This person is already a child in a family.This person is not a child in any family.This person is not a child in the family; can't remove.This person is not a spouse in the family; can't remove.This person is not a spouse or parent in any family.This person record does not have a name line.This person record has bad GEDCOM name syntax.This person's father is not in the database.This person's mother is not in the database.This person's parents are not in the database.This person's sex is not known; can't make family.This report requires a newer program to run Too many spouses to display full listTranslation TablesTwo parents of different sexes cannot be merged.Two persons with different parents cannot be merged.USER SIGNAL 1USER SIGNAL 2Undefined database error -- fix program.Undefined proc: %sUnknown signalUnsupported file encoding (no multibyte encodings except UTF-8).Unsupported file encoding: %s.Use original keys from GEDCOM file?WARNING: missing keysWINDOW CHANGEWarningWarningsWarning: database codeset unspecifiedWarning: not all conversions availableWhat activity do you want to perform?What directory holds (or will hold) the LifeLines database? (? to list)What do you want to add?What do you want to remove?What is the name of the output file?What is the name of the program?What persons or list do you want to add to the current list?What record do you want to edit?What record do you want to remove from the database?What scan type?What should the name of this list be?What utility do you want to perform?Which character mapping do you want to edit?Which character mapping do you want to save?Which event record do you want to edit?Which source record do you want to edit?Who do you want to remove from the database?Whom do you want to edit?Whose families/spouses are to be swapped?Whose key value do you want?You are at the bottom of the list.You are at the top of the list.You cannot change the sex of a parent.You cannot edit the CHIL lines in a family record.You cannot edit the FAM line in a family record.You cannot edit the FAMC line in a person record.You cannot edit the FAMS lines in a person record.You cannot edit the HUSB line in a family record.You cannot edit the INDI line in a person record.You cannot edit the WIFE line in a family record.You must identify a database.[ Decrease tree depth\My Documents\LifeLines\Databases\MyFamily] Increase tree depth^b History/back^c Clear history^f History/fwd^l History list^xb ChngHist/back^xc Clear ChngHist^xf ChngHist/fwd^xl ChngHist lista Add child to familya Add familya Add information to the databasea Add to this lista Create new familyaavabout %1abt %1adaradar sheniadopadradsaft %1after %1apraprilaugaugustavb Browse new personsb Browse the persons in the databaseb Browse to bottomb Browse to personsb. bap. baptbapt: barmbasmbef %1before %1bet %1 and %2between %1 and %2blesbornborn: brumbrumairebur. buriburi: c Browse to childrenc Browse top childrenc Character set optionsc Child - add a child to an existing familyc Child - remove a child from his/her familyc Review change history (%d record)c Review change history (%d records)cal %1calculated %1cb. cheshvanchildcompcould not open, read or write a block file.could not open, read or write an index file.could not open, read or write the key file (to alter database).could not open, read or write the key file.creation of new database failed.cremcshd Copy top to bottomd Delete from listd Delete information from the databased Remove as childd Remove child fromd Show database statisticsd. data blockdb directory is file, not directory.decdecemberdieddied: div. e Browse event recordse Edit recorde Edit the familye Edit the persone Edit the place abbreviation filee Edit this persone Edit top familye Edit top persone edit individual tables (in db)editor codeset: %seditor input codeset: %seditor output codeset: %seighteightheleveneleventhellelulenter file nameenter file name (*%s)enter integer:enter key or refn: enter key:enter name: enter path: enter string: enter y (yes) or n (no): errorerror accessing database directory.est %1estimated %1example: dbverify -ifsex "%s" export/import directory:f Browse to fatherf Browse to fathersf Browse top fatherf Family - create family record from one or two spousesf Family - remove a family completelyf Full database scanf Full name scanfatherfebfebruaryfifthfirstfiveflags: florflorealfourfourthfr %1fr %1 to %2frimfrimairefrom %1from %1 to %2frucfructidorfullname: person does not have a nameg Browse to familygedcom input codeset: %sgedcom output codeset: %sgermgerminalgettext dll had no versiongettext dll version: %sgettext dll: %sh Add as spouseheherher_himhisi Add as childi Browse this personi Identify a person from key valuei Individual - remove a person completelyi import all tables (from files into db)iconv (codeset conversion) is compiled in.iconv (codeset conversion) is not compiled in.iconv dll had no versioniconv dll version: %siconv dll: %sidentifier: %s should be a string illegal call to pos.iyariyrj Merge bottom to topj Move down listjanjanuaryjour_complementairsjuljulyjunjunek Find a person's key valuek Move up listkeyfile is corrupt.keyfile is wrong alignment.keyfile is wrong version.kislevksll load a table from a file (into db)m Browse to motherm Browse to mothersm Browse top motherm Mark this personm Show memory statisticsm. marmarchmarried: maymenu|trantable|dmenu|trantable|emenu|trantable|gmenu|trantable|imenu|trantable|mmenu|trantable|pmenu|trantable|rmenu|trantable|xmessmessidormothern Create new personn Name fragment (whitespace-delimited) scann Name this listname of database is too long.name: person does not have a namenineninthnisannivonivoseno gettext dll foundno iconv dll foundno keyfile (directory does not appear to be a database).novnovembernsno Browse to older sibo Edit the user options fileo Other - remove other record completelyoctoctoberonep Pedigree modep Person - add new person to the databasep Pick a report from list and runpattern: personpluvpluviosepraiprairialq Quit programq Return to main menuq Return to previous menur Generate report by entering report namer Read in data from a GEDCOM filer Refn scanr Remove as spouser Remove from listr Remove spouse fromreport codeset: %sreport input codeset: %sreport output codeset: %srequested database does not exist.resis Add spouse to familys Browse source recordss Browse to spouse/ss Browse top spouse/ss Save the database in a GEDCOM files Search databases Spouse - add a spouse to an existing familys Spouse - remove a spouse from a familys save a table to a file (from db)secondsepseptemberset(%s, ) is invalidsevenseventhsheshevatshvsignal %1: %2sivansixsixthsoundex: person does not have a namespousesurname: person does not have a namesvnt Browse to topt Enter tandem modet Modify character translation tablestamuztc Tandem to childrentententhtevettf Tandem to father/stg Tandem to family/sthe arg to empty is not a list, table or setthe arg to length is not a list, table or settherthermidorthirdthreetishritm Tandem to mother/stmzto %1ts Tandem to spouse/stshtt Enter family tandemtt Enter tandem modetu Tandem to parentstvttwelfthtwelvetwou Browse to parentsu Miscellaneous utilitiesusage: dbverify -(flags) v Review visit history (%d record)v Review visit history (%d records)vendvendemiaireventventosewarningx Browse other recordsx Handle source, event and other recordsx Swap mark/currentx Swap two childrenx Swap two familiesx Switch top/bottomx export all tables (from db to files)y Browse to younger siby Turn on syncyYyYnNzerozi Browse to indizz Browse to anyProject-Id-Version: LifeLines 3.0.44 Report-Msgid-Bugs-To: POT-Creation-Date: 2007-08-08 15:56-0400 PO-Revision-Date: 2005-07-08 01:17-0700 Last-Translator: Chip Richards Language-Team: Esperantistoj MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-3 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; -D = Riparu maløustajn forstrekerojn -F = Þanøu iun ajn maløustajn familiajn devenligilojn (al _badptr) -G = Kontrolu por kaj riparu fantomojn (nomoj/refnoj) -M = Riparu rikordojn kiu mankas datumerojn -a = Plenumu æiujn kontrolojn (ne anigas riparojn) -e = Kontrolu okazojn -f = Kontrolu familiojn -g = Kontrolu por fantomoj (nomoj/refnoj) -i = Kontrolu apartulojn -l = Kontrolu datumbazan strukturon -m = Kontrolu rikordojn por mankantaj datumeroj -n = Brua (e¶u æiun rikordon traktitan) -s = Kontrolu sours (fontojn) -x = Kontrolu aliojn Misfinas nun. Kreu nekropsia¼on? [j/n] Raporta daýro %s (ui daýro %s) en dosiero <%s> sur linio %d en dosiero <%s> sur linio %d (dbint tt: %s) (neþanøebla) (neniu protokola dosiero) (nurlegebla) (vidu protokolan dosieron <%s>)!! Ciklu modalon!a Prapatra modalo!d Posteula modalo!g GEDCOM modalo!n Normala modalo!t GEDCOMT modalo!x GEDCOMX modalo# Baskulu infannumerojn$$ Montru referencojn$n Montru notojn$s Montru fontojn%02ds%1 AUC%1 FR%1 HEB%1J%6d Eraro%6d Eraroj%6d Averto%6d Avertoj%c Reordigu infanon%d infano%d infanoj%d eraro%d eraroj%d riparita%d riparitaj%d ero likita%d eroj likitaj%d geedzo%d geedzoj%d averto dum importado%d avertoj dum importado%dI, %dF, %dS, %dE, %dX%dt%02dh%dh%02dm%dm%02ds%dj%03dt%e Aldonu okazon%o Aldonu alian%s Aldonu fonton%s dosierþlosilo=%d, dosiero=%s%s estas aldonita kiel infano.%s estas aldonita kiel geedzo kaj/aý gepatro.%s estas aldonita al la datumbazo.%s estas þanøita en la datumbazo.%s: Maløustaj opcioj.%s: linio %d (ero %d): %s%s: nula opcio estas malpermesita.%s: la opcio #%s igis gravan eraron.%s: la opcio #%s devas esti logika¼o.%s: la opcio #%s devas esti familio.%s: la opcio #%s devas esti glitpunkta nombro.%s: la opcio #%s devas esti listo.%s: la opcio #%s devas esti nodo.%s: la opcio #%s devas esti homo.%s: la opcio #%s devas esti rikordo.%s: la opcio #%s devas esti aro.%s: la opcio #%s devas esti signoæeno.%s: la opcio #%s devas esti tabelo.%s: la opcio #%s devas esti variablo.%s: la opcio #%s devas esti entjero.%s: la opcio igis gravan eraron.%s: la opcio devas esti familio.%s: la opcio devas esti dosiernomo.%s: la opcio devas esti listo.%s: la opcio devas esti nodo aý signoæeno.%s: la opcio devas esti nodo.%s: la opcio devas esti homo.%s: la opcio devas esti aro.%s: la opcio devas esti signoæeno.%s: la opcio devas esti variablo.%s: la opcio devas esti entjero.( Rulumu supren(( Rulumu ambaý supren(1-9) Krozu al infano(Familio %s (%s, %s)(Apartigilo estas %s)(b Rulumu fundon supren(þanøa historio estas malplena)(dona¼oj) homo ne havas nomon(pø %d/%d)(t Rulumu supron supren(tondunomo) homo ne havas nomon(vizita historio estas malplena)) Rulumu suben)) Rulumu ambaý suben)b Rulumu fundon suben)t Rulumu supron subenmaj+ La sekvan en db, de - La lastan en db-- NUNA ELEKTO ----- NUNA ELEKTO ------ LISTO ---/hejmo/uzantoj/mianomo/lifelines/datumbazoj/miafamilio0 EVEN 1 REFN 1 DATE 1 PLAC 1 INDI 2 NAME 2 ROLE 1 SOUR0 SOUR 1 REFN 1 TITL Titolo 1 AUTH Aýtoro0 XXXX 1 REFN1 Aldonu fontan rikordon al datumbazo2 Redaktu fontan rikordon el datumbazo3 Aldonu okazan rikordon al datumbazo4 Redaktu okazan rikordon el datumbazo5 Aldonu alian rikordon al datumbazo6 Redaktu alian rikordon el datumbazo< Pligrandigu menuan areon> Malpligrandigu menuan areon? Aliaj menuelektojA Altnivela vida¼oFamilio ne povas esti kunfandita kun si mem.Homo ne povas esti kunfandita kun si mem.p.K.MISFINISpKVEKHORLOØOASERTA fiaskoMisfinigas: Aldonas maluzitajn þlosilojn kiel forstrekitaj þlosiloj...Dubasenca voko al proc: %sÆu vi estas certa, ke vi volas kunfandigi ilin?Æu vi estas certa, ke vi volas forigi la homon el la datumbazo?Æu vi estas certa, ke vi volas forigi æi tiun rikordon el la datumbazo?Opcio por þlosigi (-l) devas esti j aý n.Opcioj por (r)ordigu devas havi la saman grandeconB Krozu novan familiona.K.a.K.aKaKBUSA ERAROMaløusta CHIL referencoMaløusta HUSB referencoMaløusta HUSB referenco (%s) en familio %sMaløusta WIFE referencoMaløusta vicrisurca historia nombroMaløusta infana referenco (%s) en familio %sMaløusta dekuma nombra formo.Maløusta eskapsigna kodo æe deþovo %d en bitokkoda æeno <%s>Maløusta eskapsigna formo.Maløusta familia referencoMaløusta familia referenco (%s) apartulo %sMaløusta deksesuma nombra formo.Maløusta historia nombroMaløusta historia longecoMaløustaj niveloj æe linio %dMaløusta nomoMaløusta nomo por apartulo %s: %sMaløusta indikiloMaløusta indikilo (en %s): %sMaløusta edzina referenco (%s) en familio %sPro eraroj, la GEDCOM dosiero ne estas þarøita. Ambaý el la familioj devas havi edzojn/patrojn.Ambaý el la familioj devas havi edzinojn/patrinojn.Krozu novan rikordon (sen aldonante krucref.).p.K.pKKaþmemoriøis: I:%s; F:%sNe povas kunmeti devigmalfermu (-f) kaj þlosu (-l) opciojn.Ne povas kunmeti neþanøeblan (-i) aý nurlegeblan (-r) kun leg-skriba (-w) alirado.Ne povas þanøigi kodpaøon (de <%s> al <%s>)Ne povas forigi finan homon el familio.Kontrolas GEDCOM dosieron por eraroj. Elektu familion elektante geedzon/gepatron.Elektu funkciadon:Elektu datumbazon por malfermiElektu el historioKonflikto kun pli longa klavkomando en ero: %sKonflikto kun malpli longa klavkomando en ero: %sKodpaøa informoOrdizigada subprogramo: %sKomandoj: Elektu per numero, u Foliumu Supren, d Foliumu Suben, i Elektu, q EliruKomandoj: j Iru suben k Iru supren i Elektu q EliruKomandoj: j Iru suben k Iru supren q EliruKomandoj: u Foliumu Supren, d Foliumu Suben, q EliruKomandoj: j Iru suben k Iru supren d Forigu i Elektu q EliruKopirajtita(c) 1991 al 1996, de T. T. Wetmore IVNe povis malfermi dosieron %sNe povas malfermi dosiero %s.Kreu familion kun æi tiu homo kiel infano.Kreu familion kun æi tiu homo kiel geedzo/gepatro.Nuna datumbazo - %sNuna ordiza loka¼aro: %sNuna datumbazoNuna mesaøa loka¼aro: %sCiklo en indeksoj, dosieron %s trovas denove! MORTIØO DE PROCESIDODatumbazo `%s' estas registrita en `%s'.Datumbaza eraro: -- Datumbazaj rikordojDatumbazo estas koruptita.Implica dosierindiko: Forstreku historion (%d eroj)?Forstrekaro enhavas validan rikordon %sForstrekiøitaj rikordojMontrita al InternaÆu vi vere volas aldoni æi tiun infanon al la familio?Æu vi vere volas aldoni æi tiun okazon al la datumbazo?Æu vi vere volas aldoni æi tiun familion al la datumbazo?Æu vi vere volas aldoni æi tiun homon al la datumbazo?Æu vi vere volas aldoni æi tiun rikordon al la datumbazo?Æu vi vere volas aldoni æi tiun fonton al la datumbazo?Æu vi vere volas aldoni æi tiun geedzon/gepatron al la familio?Æu vi vere volas kunfandigi æi tiujn du familiojn?Æu vi vere volas kunfandigi æi tiujn du homojn?Æu vi vere volas forigi æi tiun infanon el sia familio?Æu vi vere volas forigi æi tiun geedzon el sia familio?Æu vi vere volas øisdatigi æi tiun okazon?Æu vi vere volas øisdatigi æi tiun familion?Æu vi vere volas øisdatigi æi tiun homon?Æu vi vere volas øisdatigi æi tiun rikordon?Æu vi vere volas øisdatigi æi tiun fonton?Æu vi volas krei datumbazon tie?Æu vi volas denove redakti la okazojn?Æu vi volas denove redakti la okazojn? (Alie mi for¼etos þanøojn.)Æu vi volas denove redakti la familion?Æu vi volas denove redakti la familion? (Alie mi for¼etos þanøojn.)Æu vi volas denove redakti la homon?Æu vi volas denove redakti la homon? (Alie mi for¼etos þanøojn.)Æu vi volas denove redakti la rikordon?Æu vi volas denove redakti la rikordon? (Alie mi for¼etos þanøojn.)Æu vi volas denove redakti la fonton?Æu vi volas denove redakti la fonton? (Alie mi for¼etos þanøojn.)Æu vi volas enmeti alian nomon?Æu vi volas denove redakti tiun?Multoble difinita HEAD linio æe linio %dMultoble difinita okazo por %sMultoble difinitaj okazojMultoble difinitaj familiojMultoble difinita familio por %sMultoble difinita funk %s (linioj %d kaj %d) en raporto: %sMultoble difinita klavkomando por ero: %sMultoble difinita apartulo por %sMultoble difinitaj apartulojMultoble difinita nomo por %s (%s)Multoble difinitaj nomojMultoble difinitaj aliojMultoble difinita proc %s (linioj %d kaj %d) en raporto: %sMultoble difinita rikordo por %sMultoble difinita refn por %s (%s)Multoble difinita fonto por %sMultoble difinitaj fontojMultoble difinita REFN - bonvole elektu.EMT INSTRedaktu nunan rikordon nun por permane aldoni krucref.Redaktila al InternaMalplena familioMalplena familio (%s)Fino de dosiero æe linio %dEnmetu Numeron de Familio por AlkroziEnmetu gefraton el familio.Enmetu geedzon el familio.Enmetu kodpaøon por premiso (* por neniu)Enmetu d por erarseræilo, q por eliroEnmetu entjeron por programoEnmetu nomon de arkiva celdosiero.Enmetu nomon de traduk-tabela dosiero por legiEnmetu nomon de traduk-tabela dosiero por skribiEnmetu þablonon kontraý kiu kongrui plenan nomon.Enmetu þablonon kontraý kiu kongrui refn.Enmetu þablonon kontraý kiu kongrui unuopan familian nomon aý donitan nomon.Enmetu signoæenon por programoEraroErarojEraro dum datumaliradoEraro æe linio %d: %sEraro en mallonga¼a dosiero.Eraro en signo-sur¼etada dosiero.Eraro en uzant-opciaj dosiero.Eraro: dosiero "%s": linio %d: Eraro: dosiero <%s> ne trovitaEraro: dosiero <%s> ne trovita: %s OkazoOkazojOkazo %s estas aludita sed ne difinita.Ekzistantan datumbazon trovis.NERIPAREBLA ERARONERIPAREBLA ERAROGLITPUNKTA INTERROMPONe povis ripari mankantan malforstrekitan rikordon %c%dNe povis ripari forstrekaron kiu enhavas validan rikordon %sFamiliojn oni ne povas tiel forigi.FamilioFamiliojFamilio %s estas aludita sed ne difinita.Neriparebla EraroDosierindiko tro longas.Unua opcio por (r)ordigu devas esti listo aý vektoroUnua þlosilo en bloko subas limon de patro Riparis maløustan HUSB referencon (%s) en familio %sRiparis maløustan edzinan referencon (%s) en familio %sRiparis maløustan infanan referencon (%s) en familio %sRiparis forstrekaron kiu enhavas validan rikordon %sRiparis mankantan infanon (%s) en familio (%s)Riparis mankanta datuma rikordo (%s)Riparis mankantan geedzon (%s) en familio (%s)Riparis mankantan malforstrekitan rikordon %c%dForigu la infanon el kiu familio?Forigu la geedzon/gepatron el kiu familio?GEDCOM-a kodpaøo: %sGEDCOM al InternaGUI-a kodpaøo: %sGUI-a eniga kodpaøo: %sGUI-a eliga kodpaøo: %sFantoma nomo: %s -> %sFantomaj nomojMallokaj variablojKROÆOLiÞiaLiaKiel vi volas trovi rikordon?KONTRAÝLEØA KOMANDOINDI, FAM, SOUR, EVEN rikordoj ne estas permesita esti aliaj rikordoj.INTERROMPOIndiku infanon de la familio, se konita.Indiku gepatron el la infan-interþanøata familio.Indiku geedzon de la familio, se konita.Indiku geedzon/gepatron por la nova familio.Indiku infanon jam en familio.Indiku infanon en la dua familio.Indiku familion (enmetu nenion por indiki per apartajn membrojn).Indiku liston da homoj por programo.Indiku unu el la gepatrojn de la infano, se konita.Indiku homon por programo:Indiku la duan homon por alkrozi.Indiku geedzon/gepatron jam en familio, se konita.Indiku geedzon/gepatron en la dua familio, se konita.Indiku geedzon/gepatron por aldoni al ekzistanta familio.Indiku la infanon por reordigi.Indiku la unuan infanon por interþanøi.Indiku la unuan familion/geedzon por interþanøi.Indiku la duan infanon por interþanøi.Indiku la duan familion/geedzon por interþanøi.Indiku la duan geedzon/gepatron, se konita.Kontraýleøa tipo trovita en listo en menuelektuÞanøante kodpaøon malpermesita en enhaviøita datumbazoImportada daýro %s (ui %s) Maltaýga HUSBMaltaýga HUSB (%s) en familio (%s)Maltaýga WIFEMaltaýga infanoMaltaýga edzino (%s) en familio (%s)En dosiero <%s> æe linio %dEn menuo: %sEnmetu krucref. aýtomate æe fundo de la nuna rikordo.Interna kodpaøoInterna al MontritaInterna al RedaktilaInterna al GEDCOMInterna al RaportaMalvalida proprecoj metita sur nova datumbazoÆu æi tiu estas la nova infano? Æu æi tiu estas la nova geedzo? Æu æi tiu estas la homo? Elektu tiun se jes.Æu æi tiu estas la rikordo? Elektu tiun se jes.MORTIGISFina þlosilo en bloko superas limon de patro LifeLines %s - Genealogia DB kaj Programada SistemoLifeLines -- Helpeca Krozada Ekrano (* baskulas menuon)LifeLines -- Familia Krozada Ekrano (* baskulas menuon)LifeLines -- Lista Krozada Ekrano (* baskulas menuon)LifeLines -- Æefa MenuoLifeLines -- Homa Krozada Ekrano (* baskulas menuon)LifeLines -- Dufamilia Krozada Ekrano (* baskulas menuon)LifeLines -- Duhoma Krozada Ekrano (* baskulas menuon)Linio %d: Okazo %s havas maløustan þlosilon.Linio %d: Familio %s havas maløustan þlosilon.Linio %d: Familio %s havas multoblajn edzajn ligilojn.Linio %d: Familio %s havas multoblajn edzinajn ligilojn.Linio %d: Homo %s havas maløustan þlosilon: ellasita.Linio %d: Homo %s havas multoblajn patrajn ligilojn.Linio %d: Homo %s havas multoblajn patrinajn ligilojn.Linio %d: Homo %s estas ambaý vira kaj ina.Linio %d: Homo %s estas ina sed devas esti vira.Linio %d: Homo %s implice estas ambaý vira kaj ina.Linio %d: Homo %s estas vira sed devas esti ina.Linio %d: Homo difinita æi tie ne havas nomon.Linio %d: Rikordo %s havas maløustan þlosilon.Linio %d: Fonto %s havas maløustan þlosilon.Linio %d: La okazo æi tie difinita ne havas þlosilon.Linio %d: La familio difinita æi tie ne havas þlosilon.Linio %d: La homo difinita æi tie ne havas þlosilon: ellasita.Linio %d: La rikordo æi tie difinita ne havas þlosilon.Linio %d: La fonto æi tie difinita ne havas þlosilon.Linio %d: Æi tiu linio havas maløustan ligilon.Linio %d: Æi tiu linio havas tro grandan nivelan numeron.Linio %d: Æi tiu linio havas kontraýleøan nivelon.Linio %d: Æi tiu linio ne havas nivelan numeron.Linio %d: Æi tiu linio estas malplena: dosierfino?Linio %d: Æi tiu linio estas nekompleta.Linio %d: Æi tiu linio tro longas.Linio %d: Æi tiu linio bezonas blankan spacon antaý etikedo.Linioj %d kaj %d: Okazo %s estas multoble difinita.Linioj %d kaj %d: Familio %s estas multoble difinita.Linioj %d kaj %d: Homo %s estas multoble difinita: ellasita.Linioj %d kaj %d: Rikordo %s estas multoble difinita.Linioj %d kaj %d: Fonto %s estas multoble difinita.Lokaj variablojLoka¼aroj malebliøitajLoka¼aroj ebliøitajAperas kiel programo rulis. Kontrolu dosiero %1 æirkaý linio %2. M< Malpli da menuaj kolumnojM> Pli da menuaj kolumnojMaløuste formita konfigura¼a dosiero: linio tro longas.Menuo (%s) elekta sinsekva¼o tro longas: %sMenuero (%s) mankis elektan sinsekva¼on: %sMesaøoj:Mankanta HEAD linio æe linio %dMankanta NOMO linio en INDI rikordo; rikordo ignorita. Mankanta infanoMankanta infano (%s) en familio (%s)Mankanta datuma rikordo (%s)Mankantaj datumaj rikordojMankantaj rikordoj (el forstrekaro)Mankanta geedzoMankanta geedzo (%s) en familio (%s)Mankanta titoloMankanta malforstrekita rikordo %c%dNLS (Nacia Lingva Subtenado) estas entradukigitaNLS (Nacia Lingva Subtenado) ne estas entradukigitaNE NOMONovaj homoj estas aldonita al la nuna listo.Nova rikordo estas %sNova geedzo/gepatro havas nekonitan sekson; ne povas aldoni al familio.Neniu þanøigoNe nuna interna kodpaøo, do ne kodpaøa þanøiøo eblasTrovis neniujn datumbazojn en datumbaza dosierindikoNeniun eraron trovisNeniu eraro; aldonas rikordojn kun novaj þlosiloj...Neniu eraro; aldonas rikordojn kun originalaj þlosiloj...Ekzistas neniu okazoj.Ne plu historioEkzistas neniu notoj.Neniu el la datumbazo havas la þlosilvaloron %s.Ne originala signoæeno en linio.Ekzistas neniu aliaj.Neniu homoj estas aldonita al la nuna listo.Neniun rikordon trovita dum ekzamenoEkzistas neniu referencoj.Ne anstataýa signoæeno en linio.Ekzistas neniu fontoj.Ekzistas nenia infano.Ekzistas nenia familio.Ekzistas nenia homo.Ekzistas nenia rikordo.Nenia traduk-tabelo ekzistas en æi tiu datumbazoNod-memora likoj:Ne-indi nomo, þlosilo=%s, nomo=%sNe-indi-aj nomojNe jam realigasNe valida komandoOfraj nomojOfra nomo: %sOfra refn: %sAlioAliojDUKTA SKRIBOPOTENCA-FIASKA REKOMENCOSintaksanaliza Eraro æe linio %d: Rulas plen-noman ekzamenonRulas part-noman ekzamenonRulas refn ekzamenonHomoHomojHomo %s estas aludita sed ne difinita.Metu la infanon finloke en la familio.Bonvole elektu fukciadon:Bonvole elektu familian krean fukciadon.Bonvole elektu homon el æi tiuj.Bonvole elektu rikordon el æi tiuj.Bonvole elektu ion el la jena listo.Bonvole elektu unu el la jenaj opcioj:Bonvole elektu la infanon por alkrozi.Bonvole elektu la infanon por forigi el la familio.Bonvole elektu la okazon por rigardi.Bonvole elektu la familion por alkrozi.Bonvole elektu la patron/edzon por alkrozi.Bonvole elektu la unuan infanon por alkrozi.Bonvole elektu la unuan familion por alkrozi.Bonvole elektu la unuan patron/edzon por alkrozi.Bonvole elektu la unuan patrinon/edzinon por alkrozi.Bonvole elektu la unuan geedzon/gepatron por alkrozi.Bonvole elektu la patrinon/edzinon por alkrozi.Bonvole elektu la noton por rigardi.Bonvole elektu la alion por rigardi.Bonvole elektu la referencon por rigardi.Bonvole elektu la duan infanon por alkrozi.Bonvole elektu la duan familion por alkrozi.Bonvole elektu la duan patron/edzon por alkrozi.Bonvole elektu la duan patrinon/edzinon por alkrozi.Bonvole elektu la duan geedzon/gepatron por alkrozi.Bonvole elektu la fonton por rigardi.Bonvole elektu la geedzon/gepatron por alkrozi.Bonvole elektu la geedzon/gepatron por forigi el la familio.Bonvole enmetu la internan þlosilvaloron de la homo:Bonvole enmetu la nomon de la GEDCOM dosiero.Bonvole indiku la sekvan homon por alkrozi.Bonvole indiku unu gefraton de la infano.Bonvole indiku unu el la geedzoj.Bonvole indiku la homon aý homojn por alkrozi.Bonvole indiku la rikordon por alkrozi.Bonvole indiku la infanon.Proc %s devas esti vokita kun %d (ne %d) parametroj.Almenaý daýru?Daýru sen kodpaøa þanøiøo?Æu daýru?Traktis %d liniojn sed ne trovis finon de HEADQ Eliru nunan datumbazonHALTISEliru erarseræilonR Elektu GEDCOM dosieron kaj enlegu tiunREFN þlosilo jam estas uzita.Rikordo %s estas aludita sed ne difinita.Forigu tiun familian rikordon?Raporto æesiøisRaporta erarseræiloRaporta dosiero: Raporto ne trovita: %sRaporto haltas pro eraro dum malfermado de celdosieroRaporto haltas pro manko de celdosieroRaporta al InternaRevenu al nuna rikordo (sen aldonante krucref.).Dumrulada Eraro æe linio %d: SEGMENTIGADA ERAROINTERROMPO 0KERNOVOKA ERARODua opcio por (r)ordigu devas esti listo aý vektoroElektu la infanon kiun la nova infano antaýas, aý elektu la finan.ÞiUnuhoma familioUnuhoma familio (%s)Okazis io neebla. Petu la teknikajn subtenantojn.FontoFontojFonto %s estas aludita sed ne difinita.Geedzo nekonitaKomenca ordiza loka¼aro: %sKomenca mesaøa loka¼aro: %sPremu iun ajn klavon por daýri.Sistema eraro: kontraýleøa map-kodoHALTIØO PER MORTIGOÞPURA INTERROMPOEtikedo tro longas por konekti aýtomate.La infano estas forigita de sia familio.La nuna listo ne estas nomita.La nuna listo nun estas nomita %s.La datumbazo jam malfermiøis por skribado.La datumbazo estas þlosita (ne permesas skribi aý legi).La datumbazo estas nurlegebla.La datumbazo estas nurlegebla; vi ne povas aldoni rikordojn.La datumbazo estas nurlegebla; vi ne povas þanøi rikordojn.La datumbazo estas nurlegebla; vi ne povas kunfandigi rikordojn.La datumbazo estas nurlegebla; vi ne povas forigi rikordojn.La datumbazo estas nurlegebla; þarøadon æesigis.La datumbazo estas malþlosita.La datumbazo ne estas registrita.La okazo estas þanøita en la datumbazo.La familioj havas malsamajn patrojn/edzojn; ne povas kunfandi ilin.La familioj havas malsamajn patrinojn/edzinojn; ne povas kunfandi ilin.La familio estas þanøita en la datumbazo.La dosiero estas kiel lokigita æe sia fino.La nova familio estas aldonita al la datumbazo.La homoj ne havas malajn seksojn; ne povas krei familion.La rikordo komencas æe maløusta nivelo.La rikordo enhavas multoblajn nivelo-0 linioj.La rikordo ne komenciøas per FAM linio.La rikordo ne komenciøas per SOUR linio.La rikordo ne komenciøas per EVEN linio.La rikordo ne komenciøas per INDI linio.La rikordo estas malplena.La rikordo estas þanøita en la datumbazo.La fonto estas þanøita en la datumbazo.La geedzo estas forigita de sia familio.La du infanoj estas interþhanøita.La du familioj estas interþhanøita.Ne ekzistas iu ajn infanoj en la datumbazo por æi tiu familio.Ne ekzistas LifeLines datumbazo en tiu dosierujo.Ne ekzistas iun ajn en la datumbazo kiu havas tiun nomon aý þlosilon.Ne ekzistas rikordo kun tiu þlosilo aý referenco.Io maløustas pri la datumo.Ekzistis %d malplenumita referenco.Ekzistis %d malplenumitaj referencoj.Æi tiuj homoj estas infanoj en malsamaj familioj.Æi tiu ne indikas alian rikordon en la datumbazo!Æi tiu familio jam havas edzon/patron.Æi tiu familio jam havas edzinon/patrinon.Æi tiu familio havas ambaý geedzojn/gepatrojn; ne povas aldoni alian.Æi tiu familio havas malpli ol du infanoj; ne povas interþanøi.Æi tiu familio havas neniun geedzon/gepatron; ne povas forigi tiun.Æi tiu familio ne havas edzinon/patrinon en la datumbazo.Æi tiu familio ne havas edzon/patron en la datumbazo.Æi tiu familio ankoraý havas ligilojn; ne forigita.Æi tiu ne estas devenligita GEDCOM dosiero.Æi tiu homo ne havas iun ajn infanojn en la datumbazo.Æi tiu homo ne havas pli maljuna gefrato en la datumbazo.Æi tiu homo ne havas geedzon en la datumbazo.Æi tiu homo ne havas pli juna gefrato en la datumbazo.Æi tiu homo estas geedzo/gepatro en malpli ol du familioj.Æi tiu homo jam estas infano en familio.Æi tiu homo ne estas infano en iu ajn familio.Æi tiu homo ne estas infano en la familio; ne povas forigi tiun.Æi tiu homo ne estas geedzo en la familio; ne povas forigi tiun.Æi tiu homo ne estas geedzo aý gepatro en iu ajn familio.Æi tiu homa rikordo ne havas nomlinion.Æi tiu homa rikordo enhavas maløustan GEDCOM nomsintakson.La patro de æi tiu homo ne ekzistas en la datumbazo.La patrino de æi tiu homo ne ekzistas en la datumbazo.La gepatroj de æi tiu homo ne ekzistas en la datumbazo.La sekso de æi tiu homo ne estas konita; ne povas krei familion.Æi tiu raporto bezonas pli novan programon por ruli Tro multe da geedzoj por montri plenan listonTraduk-TabelojDu gepatroj kun malsamaj seksoj ne povas esti kunfandita.Du homoj kun malsamaj gepatroj ne povas esti kunfandita.UZANTA INTERROMPO 1UZANTA INTERROMPO 2Malkonita datumbaza eraro -- riparu programon.Maldifinita proc: %sNekonata interrompoNe subtenita dosierkodo (neniaj multbitokaj kodoj esceptinte UTF-8).Ne subtenita dosierkodo: %sÆu uzu originalajn þlosilojn el GEDCOM dosiero?AVERTO: mankantaj þlosilojFENESTRO-ÞANØOAvertoAvertojAverto: datumbaza kodpaøo ne estas indikitaAverto: ne æiuj þanøigoj estas haveblajKiun agadon vi volas fari?Kiu dosierujo tenas (aý tenos) la LifeLines datumbazon? (? por listo)Kion vi volas aldoni?Kion vi volas forigi?Kiu estas la nomo de la celdosiero?Kiu estas la nomo de la programo?Kiujn homojn aý liston vi volas aldoni al la nuna listo?Kiun rikordon vi volas redakti?Kiun rikordon vi volas forigi el la datumbazo?Kia ekzameno?Kiun nomus æi tiu listo?Kiun utila¼on vi volas ruligi?Kiun signo-sur¼etadon vi volas redakti?Kiun signo-sur¼etadon vi volas registri?Kiun okazan rikordon vi volas redakti?Kiun fontan rikordon vi volas redakti?Kiun vi volas forigi el la datumbazo?Kiun vi volas redakti?Interþanøu kies familiojn/geedzojn?Kies þlosilvaloron vi deziras?Vi lokas æe la fundo de la listo.Vi lokas æe la supro de la listo.Vi ne povas þanøi la sekson de gepatro.Vi ne povas redakti la CHIL linio en familia rikordo.Vi ne povas redakti la FAM linio en familia rikordo.Vi ne povas redakti la FAMC linio en homa rikordo.Vi ne povas redakti la FAMS linio en homa rikordo.Vi ne povas redakti la HUSB linio en familia rikordo.Vi ne povas redakti la INDI linio en homa rikordo.Vi ne povas redakti la WIFE linio en familia rikordo.Vi devas indiki datumbazon.[ Malpligrandigu arban profundecon\Miaj Datumaroj\LifeLines\Datumbazoj\MiaFamilio] Pligrandigu arban profundecon^b Historio/malantaýen^c Malplenigu historion^f Historio/antaýen^l Historion montru^xb ÞøHist/malantaýen^xc Malplenigu ÞøHist-on^xf ÞøHist/antaýen^xl ÞøHist-on montrua Aldonu infanon al familioa Aldonu familiona Aldonu informon al datumbazoa Aldonu al æi tiu listoa Kreu novan familionaavpri %1pri %1adaradar sheniadopadradspst %1post %1aprapriloaýgaýgustoavb Krozu novajn homojnb Krozu la homojn en la datumbazonb Krozu al fundob Krozu al homojn. bap. baptbapt: barmbasmant %1antaý %1int %1 kaj %2inter %1 kaj %2beninasknask: brumbrumaireent. entrentr: c Krozu al infanojc Krozu plej suprajn infanojnc Signara opciojc Infano - aldonu infanon al jam ekzistanta familioc Infano - forigu infanon el sia familioc Revizu þanøan historion (%d rikordo)c Revizu þanøan historion (%d rikordoj)kal %1kalkulita %1in. cheshvaninfanocompne povas malfermi, legi, aý skribi blokdosieron.ne povas malfermi, legi, aý skribi indeksdosieron.ne povas malfermi, legi, aý skribi la þlosildosieron (por þanøi datumbazon).ne povas malfermi, legi, aý skribi la þlosildosieron.kreo de nova datumbazo fiaskis.brulcshd Kopiu supron al fundod Forstreku el listod Forstreku informon el datumbazod Forigu kiel infanod Forigu infanon eld Montrigu datumbazan statistikaronm. datuma blokodb dosierujo estas dosiero, ne dosierujo.decdecembromortmort: eks. e Krozu okazajn rikordojne Redaktu rikordone Redaktu la familione Redaktu la homone Redaktu la loknoma-mallongiøan dosierone Redaktu æi tiun homone Redaktu plej supran familione Redaktu plej supran homone redaktu apartajn tabelojn (en db)redaktila kodpaøo: %sredaktila eniga kodpaøo: %sredaktila eliga kodpaøo: %sokokadekunudekunuaellelulenmetu dosiernomonenmetu dosiernomon (*%s)enmetu entjero:enmetu þlosilon aý refn:enmetu þlosilon:enmetu nomon: enmetu dosierindikon: enmetu signoæenon: enmetu j (jes) aý n (ne): eraroeraro alirante datumbazon dosierujon.tak %1taksita %1ekzemplo: dbverify -ifsex "%s" eksporta/importa dosierujo:f Krozu al patrof Krozu al patrojf Krozu plej supran patronf Familio - kreu familian rikordon per unu aý du geedzojf Familio - forigu familion tutef Plena datumbaza ekzamenof Plen-noma ekzamenopatrofebfebruarokvinaunuakvinopcioj: florflorealkvarkvarade %1de %1 al %2frimfrimairede %1de %1 al %2frucfructidorplenanomo: homo ne havas nomong Krozu al familiogedcom-a eniga kodpaøo: %sgedcom-a eliga kodpaøo: %sgermgerminalgettext (akirteksa¼a) dll ne havis eldonon: %sgettext (akirteksa¼a) dll eldono: %sgettext (akirteksa¼a) dll: %sh Aldonu kiel geedzoliþiaþia_linliai Aldonu kiel infanoi Krozu æi tiun homoni Indiku homon per þlosiloi Apartulo - forigu homon tutei importu æiujn tabelojn (el dosieroj al db)iconv (kodpaøa þanøigado) estas entradukigitaiconv (kodpaøa þanøigado) ne estas entradukigitaiconv dll ne havis eldononiconv dll eldono: %siconv dll: %sidentigilo: %s devus esti signoæeno kontraýleøa voko al pos.iyariyrj Kunfandigu fundon al suproj Iru suben en listojanjanuarojour_complementairsjuljuliojunjuniok Trovu þlosilon de homok Iru supren en listokorputita þlosildosiero.þlosildosiero havas maløustan aranøon.þlosildosiero havas maløustan eldonon.kislevksll þarøu tabelon el dosiero (al db)m Krozu al patrinom Krozu al patrinojm Krozu plej supran patrinonm Marku æi tiun homonm Montrigu memoran statistikarone. marmartoedziøita: majonrmgipqhmessmessidorpatrinon Kreu novan homonn Part-noma (blank-spaca-disigita) ekzamenon Nomigu æi tiun listonnomo de datumbazo tro longas.nomo: homo ne havas nomonnaýnaýanisannivonivosetrovis neniun gettext (akirteksa¼an) dll-ontrovis neniun iconv dllneniu þlosildosiero (dosierujo ne þajnas esti datumbazo).novnovembronsno Krozu al pli maljuna gefratoo Redaktu la uzant-opcian dosierono Alio - forigu alian rikordon tuteoktoktobrounup Genealogia modalop Homo - aldonu novan homon al datumbazop Elektu raporton el listo kaj rulu øinþablono: homopluvpluviosepraiprairialq Eliru programonq Revenu al æefa menuoq Revenu al lasta menuor Kreu raporton enmetante raportnomonr Legu datumon el GEDCOM dosieror Refn ekzamenor Forigu kiel geedzor Forigu el la listor Forigu geedzon elraporta kodpaøo: %sraporta eniga kodpaøo: %sraporta eliga kodpaøo: %spetita datumbazo ne ekzistas.loøis Aldonu geedzon al familios Krozu fontajn rikordojns Krozu al geedzojs Krozu plej suprajn geedzojns Registru la datumbazon en GEDCOM dosieros Seræu datumbazons Geedzo - aldonu geedzon al jam ekzistanta familios Geedzo - forigu geedzon el sia familios registru tabelon al dosiero (el db)duasepseptembroaro(%s, ) estas malvalidasepsepaþishevatshvinterrompo %1: %2sivansessesasonsimilado: homo ne havas nomongeedzofamilnomo: homo ne havas nomonsvnt Krozu al suprot Eniru tandeman modalont Þanøu signajn traduk-tabelojntamuztc Tandemo al infanojdekdekatevettf Tandemo al patro(j)tg Tandemo al familio(j)la opcio por malplenigo ne estas listo, tabelo, aý arola opcio por grandeco ne estas listo, tabelo, aý arotherthermidortriatritishritm Tandemo al patrino(j)tmzal %1ts Tandemo al geedzo(j)tshtt Eniru familian tandemontt Eniru tandeman modalontu Tandemo al gepatrojtvtdekduadekduduu Krozu al gepatroju Diversaj utila¼ojuzado: dbverify -(opcioj) v Revizu vizitan historion (%d rikordo)v Revizu vizitan historion (%d rikordoj)vendvendemiaireventventoseavertox Krozu aliajn rikordojnx Traktu fontajn, okazajn, kaj aliajn rikordojnx Interþanøu markon/nunonx Interþanøu du infanojnx Interþanøu du familiojnx Baskulu supron/fundonx eksportu æiujn tabelojn (el db al dosieroj)y Krozu al pli juna gefratoy Þaltu sinkronigonjJjJnNnulozi Krozu al indizz Krozu al iun ajnlifelines-3.0.61/po/eo.po0000700002540200244210000040256010656417747015352 0ustar prappDomain Users# Esperanto translation of LifeLines # Copyright (C) YEAR Tom T. Wetmore IV # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: LifeLines 3.0.44\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-08-08 15:56-0400\n" "PO-Revision-Date: 2005-07-08 01:17-0700\n" "Last-Translator: Chip Richards \n" "Language-Team: Esperantistoj \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-3\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: src/btree/btrec.c:369 #, c-format msgid "Failed (errno=%d) to open blockfile (rkey=%s): %s" msgstr "" #: src/btree/btrec.c:438 #, c-format msgid "Btree lookup looped back to master (%ld)!" msgstr "" #: src/gedlib/charmaps.c:769 msgid "" msgstr "" #. TRANSLATORS: seconds time interval #: src/gedlib/dateprint.c:783 #, c-format msgid "%02ds" msgstr "%02ds" #. TRANSLATORS: minutes & seconds time interval #: src/gedlib/dateprint.c:789 #, c-format msgid "%dm%02ds" msgstr "%dm%02ds" #. TRANSLATORS: hours & minutes time interval #: src/gedlib/dateprint.c:795 #, c-format msgid "%dh%02dm" msgstr "%dh%02dm" #. TRANSLATORS: days & hours time interval #: src/gedlib/dateprint.c:801 #, c-format msgid "%dd%02dh" msgstr "%dt%02dh" #. TRANSLATORS: years & days time interval #: src/gedlib/dateprint.c:805 #, c-format msgid "%dy%03dd" msgstr "%dj%03dt" #: src/gedlib/dbcontext.c:276 msgid "Database error: -- " msgstr "Datumbaza eraro: -- " #: src/gedlib/dbcontext.c:280 msgid "requested database does not exist." msgstr "petita datumbazo ne ekzistas." #: src/gedlib/dbcontext.c:283 msgid "db directory is file, not directory." msgstr "db dosierujo estas dosiero, ne dosierujo." #: src/gedlib/dbcontext.c:286 msgid "creation of new database failed." msgstr "kreo de nova datumbazo fiaskis." #: src/gedlib/dbcontext.c:289 msgid "error accessing database directory." msgstr "eraro alirante datumbazon dosierujon." #: src/gedlib/dbcontext.c:292 msgid "no keyfile (directory does not appear to be a database)." msgstr "neniu þlosildosiero (dosierujo ne þajnas esti datumbazo)." #: src/gedlib/dbcontext.c:295 msgid "could not open, read or write an index file." msgstr "ne povas malfermi, legi, aý skribi indeksdosieron." #: src/gedlib/dbcontext.c:298 msgid "could not open, read or write the key file." msgstr "ne povas malfermi, legi, aý skribi la þlosildosieron." #: src/gedlib/dbcontext.c:301 msgid "could not open, read or write the key file (to alter database)." msgstr "" "ne povas malfermi, legi, aý skribi la þlosildosieron (por þanøi datumbazon)." #: src/gedlib/dbcontext.c:304 msgid "could not open, read or write a block file." msgstr "ne povas malfermi, legi, aý skribi blokdosieron." #: src/gedlib/dbcontext.c:307 msgid "name of database is too long." msgstr "nomo de datumbazo tro longas." #: src/gedlib/dbcontext.c:310 msgid "The database is already open for writing." msgstr "La datumbazo jam malfermiøis por skribado." #: src/gedlib/dbcontext.c:313 msgid "The database is locked (no readwrite access)." msgstr "La datumbazo estas þlosita (ne permesas skribi aý legi)." #: src/gedlib/dbcontext.c:316 msgid "The database is unlocked." msgstr "La datumbazo estas malþlosita." #: src/gedlib/dbcontext.c:319 msgid "keyfile is corrupt." msgstr "korputita þlosildosiero." #: src/gedlib/dbcontext.c:322 msgid "keyfile is wrong alignment." msgstr "þlosildosiero havas maløustan aranøon." #: src/gedlib/dbcontext.c:325 msgid "keyfile is wrong version." msgstr "þlosildosiero havas maløustan eldonon." #: src/gedlib/dbcontext.c:328 msgid "Existing database found." msgstr "Ekzistantan datumbazon trovis." #: src/gedlib/dbcontext.c:332 #, fuzzy, c-format msgid "The database is already opened for read access by %d user." msgid_plural "The database is already opened for read access by %d users." msgstr[0] "" "La datumbazo jam estas malfermita por nurlega alirado de %d uzantoj\n" " " msgstr[1] "" "La datumbazo jam estas malfermita por nurlega alirado de %d uzantoj\n" " " #: src/gedlib/dbcontext.c:338 msgid "Invalid properties set for new database" msgstr "Malvalida proprecoj metita sur nova datumbazo" #: src/gedlib/dbcontext.c:341 msgid "Undefined database error -- fix program." msgstr "Malkonita datumbaza eraro -- riparu programon." #: src/gedlib/gedcom.c:112 msgid "Missing NAME line in INDI record; record ignored.\n" msgstr "Mankanta NOMO linio en INDI rikordo; rikordo ignorita.\n" #: src/gedlib/init.c:228 src/tools/btedit.c:207 #, fuzzy, c-format msgid "Copyright (C) 1991-2007 Thomas T. Wetmore IV et al." msgstr "Kopirajtita(c) 1991 al 1996, de T. T. Wetmore IV" #: src/gedlib/init.c:230 src/tools/btedit.c:209 #, c-format msgid "" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." msgstr "" #: src/gedlib/init.c:235 src/tools/btedit.c:214 #, c-format msgid "Written by Tom Wetmore. Maintained at lifelines.sourceforge.net." msgstr "" #: src/gedlib/keytonod.c:686 #, c-format msgid "Database error caused by reference to nonexisting key <%s>." msgstr "" #: src/gedlib/keytonod.c:687 msgid "It might be possible to fix this with btedit." msgstr "" #: src/gedlib/keytonod.c:688 msgid "Neighboring keys include:" msgstr "" #: src/gedlib/keytonod.c:1045 #, c-format msgid "Bad cache entry <%s> != <%s>" msgstr "" #: src/gedlib/keytonod.c:1072 #, c-format msgid "Cache [%s] overflowed its max size (%d)" msgstr "" #: src/gedlib/messages.c:44 msgid "You must identify a database." msgstr "Vi devas indiki datumbazon." #: src/gedlib/messages.c:45 msgid "What directory holds (or will hold) the LifeLines database? (? to list)" msgstr "Kiu dosierujo tenas (aý tenos) la LifeLines datumbazon? (? por listo)" #: src/gedlib/messages.c:46 msgid "enter path: " msgstr "enmetu dosierindikon: " #: src/gedlib/messages.c:47 msgid "There is no LifeLines database in that directory." msgstr "Ne ekzistas LifeLines datumbazo en tiu dosierujo." #: src/gedlib/messages.c:48 msgid "Do you want to create a database there?" msgstr "Æu vi volas krei datumbazon tie?" #: src/gedlib/messages.c:49 msgid "Argument to lock (-l) must be y or n." msgstr "Opcio por þlosigi (-l) devas esti j aý n." #: src/gedlib/messages.c:50 msgid "Cannot remove last person from family." msgstr "Ne povas forigi finan homon el familio." #: src/gedlib/messages.c:52 #, fuzzy msgid "lines [-adkrwiflntcuFxoCzI] [database] # Use -F for Finnish database" msgstr "lines [-adkrwiflntcuFxoC] [datumbazo] # Uzu -F por Finna datumbazo" #: src/gedlib/messages.c:54 #, fuzzy msgid "lines [-adkrwiflntcuxoCzI] [database] # Finnish database" msgstr "lines [-adkrwiflntcuxoC] [datumbazo] # Finna datumbazo" #: src/gedlib/messages.c:56 #, fuzzy msgid "lines [-adkrwiflntcuxoCzI] [database]" msgstr "lines [-adkrwiflntcuxoC] [datumbazo]" #: src/gedlib/messages.c:58 msgid "The database is read only; you may not add records." msgstr "La datumbazo estas nurlegebla; vi ne povas aldoni rikordojn." #: src/gedlib/messages.c:59 msgid "The database is read only; you may not change records." msgstr "La datumbazo estas nurlegebla; vi ne povas þanøi rikordojn." #: src/gedlib/messages.c:60 msgid "The database is read only; you may not merge records." msgstr "La datumbazo estas nurlegebla; vi ne povas kunfandigi rikordojn." #: src/gedlib/messages.c:61 msgid "The database is read only; you may not remove records." msgstr "La datumbazo estas nurlegebla; vi ne povas forigi rikordojn." #: src/gedlib/messages.c:62 msgid "The database is read only." msgstr "La datumbazo estas nurlegebla." #: src/gedlib/messages.c:64 #, fuzzy msgid "Name, key, refn, list, or @:" msgstr "enmetu nomon, þlosilon, refn aý liston:" #: src/gedlib/messages.c:65 msgid "enter key or refn: " msgstr "enmetu þlosilon aý refn:" #: src/gedlib/messages.c:66 msgid "Please choose the child to remove from the family." msgstr "Bonvole elektu la infanon por forigi el la familio." #: src/gedlib/messages.c:67 msgid "Please choose the spouse/parent to remove from the family." msgstr "Bonvole elektu la geedzon/gepatron por forigi el la familio." #: src/gedlib/messages.c:68 msgid "From which family is the child to be removed?" msgstr "Forigu la infanon el kiu familio?" #: src/gedlib/messages.c:69 msgid "From which family is the spouse/parent to be removed?" msgstr "Forigu la geedzon/gepatron el kiu familio?" #: src/gedlib/messages.c:70 msgid "Identify family (enter nothing to identify by individual members)." msgstr "Indiku familion (enmetu nenion por indiki per apartajn membrojn)." #: src/gedlib/messages.c:71 msgid "Identify a spouse of the family, if known." msgstr "Indiku geedzon de la familio, se konita." #: src/gedlib/messages.c:72 msgid "Identify a child of the family, if known." msgstr "Indiku infanon de la familio, se konita." #: src/gedlib/messages.c:73 msgid "Identify the first child to swap." msgstr "Indiku la unuan infanon por interþanøi." #: src/gedlib/messages.c:74 msgid "Identify the second child to swap." msgstr "Indiku la duan infanon por interþanøi." #: src/gedlib/messages.c:75 msgid "Identify the child to reorder." msgstr "Indiku la infanon por reordigi." #: src/gedlib/messages.c:76 msgid "Identify the first family/spouse to swap." msgstr "Indiku la unuan familion/geedzon por interþanøi." #: src/gedlib/messages.c:77 msgid "Identify the second family/spouse to swap." msgstr "Indiku la duan familion/geedzon por interþanøi." #: src/gedlib/messages.c:78 msgid "Please choose the spouse/parent to browse to." msgstr "Bonvole elektu la geedzon/gepatron por alkrozi." #: src/gedlib/messages.c:79 msgid "Please choose the first spouse/parent to browse to." msgstr "Bonvole elektu la unuan geedzon/gepatron por alkrozi." #: src/gedlib/messages.c:80 msgid "Please choose the second spouse/parent to browse to." msgstr "Bonvole elektu la duan geedzon/gepatron por alkrozi." #: src/gedlib/messages.c:81 msgid "Please choose the child to browse to." msgstr "Bonvole elektu la infanon por alkrozi." #: src/gedlib/messages.c:82 msgid "Please choose the first child to browse to." msgstr "Bonvole elektu la unuan infanon por alkrozi." #: src/gedlib/messages.c:83 msgid "Please choose the second child to browse to." msgstr "Bonvole elektu la duan infanon por alkrozi." #: src/gedlib/messages.c:84 msgid "Please choose the family to browse to." msgstr "Bonvole elektu la familion por alkrozi." #: src/gedlib/messages.c:85 msgid "Enter Family Number to Browse to" msgstr "Enmetu Numeron de Familio por Alkrozi" #: src/gedlib/messages.c:86 msgid "Please choose the first family to browse to." msgstr "Bonvole elektu la unuan familion por alkrozi." #: src/gedlib/messages.c:87 msgid "Please choose the second family to browse to." msgstr "Bonvole elektu la duan familion por alkrozi." #: src/gedlib/messages.c:88 msgid "Please choose the father/husband to browse to." msgstr "Bonvole elektu la patron/edzon por alkrozi." #: src/gedlib/messages.c:89 msgid "Please choose the first father/husband to browse to." msgstr "Bonvole elektu la unuan patron/edzon por alkrozi." #: src/gedlib/messages.c:90 msgid "Please choose the second father/husband to browse to." msgstr "Bonvole elektu la duan patron/edzon por alkrozi." #: src/gedlib/messages.c:91 msgid "Please choose the mother/wife to browse to." msgstr "Bonvole elektu la patrinon/edzinon por alkrozi." #: src/gedlib/messages.c:92 msgid "Please choose the first mother/wife to browse to." msgstr "Bonvole elektu la unuan patrinon/edzinon por alkrozi." #: src/gedlib/messages.c:93 msgid "Please choose the second mother/wife to browse to." msgstr "Bonvole elektu la duan patrinon/edzinon por alkrozi." #: src/gedlib/messages.c:94 msgid "Identify a parent in the family having children swapped." msgstr "Indiku gepatron el la infan-interþanøata familio." #: src/gedlib/messages.c:95 msgid "Whose families/spouses are to be swapped?" msgstr "Interþanøu kies familiojn/geedzojn?" #: src/gedlib/messages.c:96 msgid "Identify one of the child's parents, if known." msgstr "Indiku unu el la gepatrojn de la infano, se konita." #: src/gedlib/messages.c:98 src/liflines/scan.c:127 msgid "Enter pattern to match against refn." msgstr "Enmetu þablonon kontraý kiu kongrui refn." #: src/gedlib/messages.c:100 msgid "Please choose from among these people." msgstr "Bonvole elektu homon el æi tiuj." #: src/gedlib/messages.c:101 msgid "Please choose from among these records." msgstr "Bonvole elektu rikordon el æi tiuj." #: src/gedlib/messages.c:102 msgid "Is this the new child? " msgstr "Æu æi tiu estas la nova infano? " #: src/gedlib/messages.c:103 msgid "Is this the new spouse? " msgstr "Æu æi tiu estas la nova geedzo? " #: src/gedlib/messages.c:104 msgid "Is this the person? Select if so." msgstr "Æu æi tiu estas la homo? Elektu tiun se jes." #: src/gedlib/messages.c:105 msgid "Is this the record? Select if so." msgstr "Æu æi tiu estas la rikordo? Elektu tiun se jes." #: src/gedlib/messages.c:106 msgid "Select the child the new child precedes or select last." msgstr "Elektu la infanon kiun la nova infano antaýas, aý elektu la finan." #: src/gedlib/messages.c:107 msgid "Please identify next person to browse to." msgstr "Bonvole indiku la sekvan homon por alkrozi." #: src/gedlib/messages.c:108 msgid "Please identify record to browse to." msgstr "Bonvole indiku la rikordon por alkrozi." #: src/gedlib/messages.c:109 msgid "Please identify one of the spouses." msgstr "Bonvole indiku unu el la geedzoj." #: src/gedlib/messages.c:110 msgid "Please identify person or persons to browse to." msgstr "Bonvole indiku la homon aý homojn por alkrozi." #: src/gedlib/messages.c:111 msgid "Please choose family create operation." msgstr "Bonvole elektu familian krean fukciadon." #: src/gedlib/messages.c:112 msgid "Do you want to enter another name?" msgstr "Æu vi volas enmeti alian nomon?" #: src/gedlib/messages.c:114 msgid "This person is not a spouse or parent in any family." msgstr "Æi tiu homo ne estas geedzo aý gepatro en iu ajn familio." #: src/gedlib/messages.c:115 msgid "This person is not a child in any family." msgstr "Æi tiu homo ne estas infano en iu ajn familio." #: src/gedlib/messages.c:116 msgid "There is no one in the database with that name or key." msgstr "Ne ekzistas iun ajn en la datumbazo kiu havas tiun nomon aý þlosilon." #: src/gedlib/messages.c:118 msgid "This person's father is not in the database." msgstr "La patro de æi tiu homo ne ekzistas en la datumbazo." #: src/gedlib/messages.c:119 msgid "This person's mother is not in the database." msgstr "La patrino de æi tiu homo ne ekzistas en la datumbazo." #: src/gedlib/messages.c:120 msgid "This person has no spouse in the database." msgstr "Æi tiu homo ne havas geedzon en la datumbazo." #: src/gedlib/messages.c:121 msgid "This person has no younger sibling in the database." msgstr "Æi tiu homo ne havas pli juna gefrato en la datumbazo." #: src/gedlib/messages.c:122 msgid "This person has no older sibling in the database." msgstr "Æi tiu homo ne havas pli maljuna gefrato en la datumbazo." #: src/gedlib/messages.c:123 msgid "This person's parents are not in the database." msgstr "La gepatroj de æi tiu homo ne ekzistas en la datumbazo." #: src/gedlib/messages.c:124 msgid "This family has no male spouse/parent in the database." msgstr "Æi tiu familio ne havas edzon/patron en la datumbazo." #: src/gedlib/messages.c:125 msgid "This family has no female spouse/parent in the database." msgstr "Æi tiu familio ne havas edzinon/patrinon en la datumbazo." #: src/gedlib/messages.c:126 msgid "There are no children in the database for this family." msgstr "Ne ekzistas iu ajn infanoj en la datumbazo por æi tiu familio." #: src/gedlib/messages.c:127 msgid "This person has no children in the database." msgstr "Æi tiu homo ne havas iun ajn infanojn en la datumbazo." #: src/gedlib/messages.c:128 msgid "No such child." msgstr "Ekzistas nenia infano." #: src/gedlib/messages.c:129 msgid "No such person." msgstr "Ekzistas nenia homo." #: src/gedlib/messages.c:130 msgid "No such record." msgstr "Ekzistas nenia rikordo." #: src/gedlib/messages.c:131 msgid "No such family." msgstr "Ekzistas nenia familio." #: src/gedlib/messages.c:132 msgid "No sources present." msgstr "Ekzistas neniu fontoj." #: src/gedlib/messages.c:133 msgid "Please choose the source to view." msgstr "Bonvole elektu la fonton por rigardi." #: src/gedlib/messages.c:134 msgid "No events present." msgstr "Ekzistas neniu okazoj." #: src/gedlib/messages.c:135 msgid "Please choose the event to view." msgstr "Bonvole elektu la okazon por rigardi." #: src/gedlib/messages.c:136 msgid "No others present." msgstr "Ekzistas neniu aliaj." #: src/gedlib/messages.c:137 msgid "Please choose the other to view." msgstr "Bonvole elektu la alion por rigardi." #: src/gedlib/messages.c:138 msgid "No notes present." msgstr "Ekzistas neniu notoj." #: src/gedlib/messages.c:139 msgid "Please choose the note to view." msgstr "Bonvole elektu la noton por rigardi." #: src/gedlib/messages.c:140 msgid "No references present." msgstr "Ekzistas neniu referencoj." #: src/gedlib/messages.c:141 msgid "Please choose the reference to view." msgstr "Bonvole elektu la referencon por rigardi." #: src/gedlib/messages.c:142 msgid "Duplicated REFN - please choose." msgstr "Multoble difinita REFN - bonvole elektu." #: src/gedlib/messages.c:144 msgid "New spouse/parent has unknown sex; can't add to family." msgstr "" "Nova geedzo/gepatro havas nekonitan sekson; ne povas aldoni al familio." #: src/gedlib/messages.c:145 msgid "The persons are not of opposite sex; can't make family." msgstr "La homoj ne havas malajn seksojn; ne povas krei familion." #: src/gedlib/messages.c:146 msgid "This person is not a spouse in the family; can't remove." msgstr "Æi tiu homo ne estas geedzo en la familio; ne povas forigi tiun." #: src/gedlib/messages.c:147 msgid "This person is not a child in the family; can't remove." msgstr "Æi tiu homo ne estas infano en la familio; ne povas forigi tiun." #: src/gedlib/messages.c:148 msgid "This person's sex is not known; can't make family." msgstr "La sekso de æi tiu homo ne estas konita; ne povas krei familion." #: src/gedlib/messages.c:149 msgid "This family already has a husband/male parent." msgstr "Æi tiu familio jam havas edzon/patron." #: src/gedlib/messages.c:150 msgid "This family already has a wife/female parent." msgstr "Æi tiu familio jam havas edzinon/patrinon." #: src/gedlib/messages.c:151 msgid "This family has both spouses/parents; can't add another." msgstr "Æi tiu familio havas ambaý geedzojn/gepatrojn; ne povas aldoni alian." #: src/gedlib/messages.c:152 msgid "This family has neither spouse/parent; can't remove." msgstr "Æi tiu familio havas neniun geedzon/gepatron; ne povas forigi tiun." #: src/gedlib/messages.c:153 msgid "This family still has links; not removed." msgstr "Æi tiu familio ankoraý havas ligilojn; ne forigita." #: src/gedlib/messages.c:155 msgid "Choose a family by selecting a spouse/parent." msgstr "Elektu familion elektante geedzon/gepatron." #: src/gedlib/messages.c:156 msgid "" "Do you want to edit the person again? (Otherwise changes will be discarded.)" msgstr "Æu vi volas denove redakti la homon? (Alie mi for¼etos þanøojn.)" #: src/gedlib/messages.c:157 msgid "Do you want to edit the person again?" msgstr "Æu vi volas denove redakti la homon?" #: src/gedlib/messages.c:158 msgid "" "Do you want to edit the family again? (Otherwise changes will be discarded.)" msgstr "Æu vi volas denove redakti la familion? (Alie mi for¼etos þanøojn.)" #: src/gedlib/messages.c:159 msgid "Do you want to edit the family again?" msgstr "Æu vi volas denove redakti la familion?" #: src/gedlib/messages.c:160 msgid "" "Do you want to edit the source again? (Otherwise changes will be discarded.)" msgstr "Æu vi volas denove redakti la fonton? (Alie mi for¼etos þanøojn.)" #: src/gedlib/messages.c:161 msgid "Do you want to edit the source again?" msgstr "Æu vi volas denove redakti la fonton?" #: src/gedlib/messages.c:162 msgid "" "Do you want to edit the event again? (Otherwise changes will be discarded.)" msgstr "Æu vi volas denove redakti la okazojn? (Alie mi for¼etos þanøojn.)" #: src/gedlib/messages.c:163 msgid "Do you want to edit the event again?" msgstr "Æu vi volas denove redakti la okazojn?" #: src/gedlib/messages.c:164 msgid "" "Do you want to edit the record again? (Otherwise changes will be discarded.)" msgstr "Æu vi volas denove redakti la rikordon? (Alie mi for¼etos þanøojn.)" #: src/gedlib/messages.c:165 msgid "Do you want to edit the record again?" msgstr "Æu vi volas denove redakti la rikordon?" #: src/gedlib/messages.c:166 msgid "Whom do you want to edit?" msgstr "Kiun vi volas redakti?" #: src/gedlib/messages.c:167 msgid "Which source record do you want to edit?" msgstr "Kiun fontan rikordon vi volas redakti?" #: src/gedlib/messages.c:168 msgid "Which event record do you want to edit?" msgstr "Kiun okazan rikordon vi volas redakti?" #: src/gedlib/messages.c:169 msgid "What record do you want to edit?" msgstr "Kiun rikordon vi volas redakti?" #: src/gedlib/messages.c:171 msgid "Do you really want to add this person to the database?" msgstr "Æu vi vere volas aldoni æi tiun homon al la datumbazo?" #: src/gedlib/messages.c:172 msgid "Do you really want to add this family to the database?" msgstr "Æu vi vere volas aldoni æi tiun familion al la datumbazo?" #: src/gedlib/messages.c:173 msgid "Do you really want to add this child to the family?" msgstr "Æu vi vere volas aldoni æi tiun infanon al la familio?" #: src/gedlib/messages.c:174 msgid "Do you really want to add this spouse/parent to the family?" msgstr "Æu vi vere volas aldoni æi tiun geedzon/gepatron al la familio?" #: src/gedlib/messages.c:175 msgid "Do you really want to add this source to the database?" msgstr "Æu vi vere volas aldoni æi tiun fonton al la datumbazo?" #: src/gedlib/messages.c:176 msgid "Do you really want to add this event to the database?" msgstr "Æu vi vere volas aldoni æi tiun okazon al la datumbazo?" #: src/gedlib/messages.c:177 msgid "Do you really want to add this record to the database?" msgstr "Æu vi vere volas aldoni æi tiun rikordon al la datumbazo?" #: src/gedlib/messages.c:178 msgid "Do you really want to update this person?" msgstr "Æu vi vere volas øisdatigi æi tiun homon?" #: src/gedlib/messages.c:179 msgid "Do you really want to update this family?" msgstr "Æu vi vere volas øisdatigi æi tiun familion?" #: src/gedlib/messages.c:180 msgid "Do you really want to update this source?" msgstr "Æu vi vere volas øisdatigi æi tiun fonton?" #: src/gedlib/messages.c:181 msgid "Do you really want to update this event?" msgstr "Æu vi vere volas øisdatigi æi tiun okazon?" #: src/gedlib/messages.c:182 msgid "Do you really want to update this record?" msgstr "Æu vi vere volas øisdatigi æi tiun rikordon?" #: src/gedlib/messages.c:183 msgid "Are you sure you want to remove the person from the database?" msgstr "Æu vi estas certa, ke vi volas forigi la homon el la datumbazo?" #: src/gedlib/messages.c:184 msgid "Are you sure you want to remove this record from the database?" msgstr "" "Æu vi estas certa, ke vi volas forigi æi tiun rikordon el la datumbazo?" #: src/gedlib/messages.c:185 msgid "Remove this family record?" msgstr "Forigu tiun familian rikordon?" #: src/gedlib/messages.c:186 #, c-format msgid "(Family %s (%s, %s)" msgstr "(Familio %s (%s, %s)" #: src/gedlib/messages.c:187 msgid "Do you really want to merge these two persons?" msgstr "Æu vi vere volas kunfandigi æi tiujn du homojn?" #: src/gedlib/messages.c:188 msgid "Do you really want to merge these two families?" msgstr "Æu vi vere volas kunfandigi æi tiujn du familiojn?" #: src/gedlib/messages.c:189 #, fuzzy msgid "Do you really want to swap spouse orders?" msgstr "Æu vi vere volas øisdatigi æi tiun rikordon?" #: src/gedlib/messages.c:190 #, fuzzy msgid "Do you really want to reorder children?" msgstr "Æu vi vere volas øisdatigi æi tiun okazon?" #: src/gedlib/messages.c:191 msgid "Do you really want to remove this child from his/her family?" msgstr "Æu vi vere volas forigi æi tiun infanon el sia familio?" #: src/gedlib/messages.c:192 msgid "Do you really want to remove this spouse from his/her family?" msgstr "Æu vi vere volas forigi æi tiun geedzon el sia familio?" #: src/gedlib/messages.c:193 msgid "Too many spouses to display full list" msgstr "Tro multe da geedzoj por montri plenan liston" #: src/gedlib/messages.c:194 msgid "These persons are children in different families." msgstr "Æi tiuj homoj estas infanoj en malsamaj familioj." #: src/gedlib/messages.c:195 msgid "Are you sure you want to merge them?" msgstr "Æu vi estas certa, ke vi volas kunfandigi ilin?" #: src/gedlib/messages.c:197 msgid "There is something wrong with the data." msgstr "Io maløustas pri la datumo." #: src/gedlib/messages.c:198 msgid "Please identify the child." msgstr "Bonvole indiku la infanon." #: src/gedlib/messages.c:199 msgid "Please identify one of the child's siblings." msgstr "Bonvole indiku unu gefraton de la infano." #: src/gedlib/messages.c:200 msgid "Identify spouse/parent to add to an existing family." msgstr "Indiku geedzon/gepatron por aldoni al ekzistanta familio." #: src/gedlib/messages.c:201 msgid "Identify spouse/parent already in family, if known." msgstr "Indiku geedzon/gepatron jam en familio, se konita." #: src/gedlib/messages.c:202 msgid "Identify child already in family." msgstr "Indiku infanon jam en familio." #: src/gedlib/messages.c:204 msgid "This person is already a child in a family." msgstr "Æi tiu homo jam estas infano en familio." #: src/gedlib/messages.c:205 msgid "Identify a spouse/parent for the new family." msgstr "Indiku geedzon/gepatron por la nova familio." #: src/gedlib/messages.c:206 msgid "Identify the second spouse/parent, if known." msgstr "Indiku la duan geedzon/gepatron, se konita." #: src/gedlib/messages.c:207 msgid "Both families must have husbands/fathers." msgstr "Ambaý el la familioj devas havi edzojn/patrojn." #: src/gedlib/messages.c:208 msgid "Both families must have wives/mothers." msgstr "Ambaý el la familioj devas havi edzinojn/patrinojn." #: src/gedlib/messages.c:210 msgid "Identify spouse/parent in second family, if known." msgstr "Indiku geedzon/gepatron en la dua familio, se konita." #: src/gedlib/messages.c:211 msgid "Identify child in second family." msgstr "Indiku infanon en la dua familio." #: src/gedlib/messages.c:212 msgid "Identify second person to browse to." msgstr "Indiku la duan homon por alkrozi." #: src/gedlib/messages.c:214 msgid "Create a family with this person as a child." msgstr "Kreu familion kun æi tiu homo kiel infano." #: src/gedlib/messages.c:215 msgid "Create a family with this person as a spouse/parent." msgstr "Kreu familion kun æi tiu homo kiel geedzo/gepatro." #: src/gedlib/messages.c:216 msgid "This family has less than two children; can't swap." msgstr "Æi tiu familio havas malpli ol du infanoj; ne povas interþanøi." #: src/gedlib/messages.c:217 msgid "This person is a spouse/parent in less than two families." msgstr "Æi tiu homo estas geedzo/gepatro en malpli ol du familioj." #: src/gedlib/messages.c:218 msgid "Something impossible happened. Contact tech support." msgstr "Okazis io neebla. Petu la teknikajn subtenantojn." #: src/gedlib/messages.c:220 msgid "The two children were swapped." msgstr "La du infanoj estas interþhanøita." #: src/gedlib/messages.c:221 msgid "The two families were swapped." msgstr "La du familioj estas interþhanøita." #: src/gedlib/messages.c:222 msgid "The child was removed from his/her family." msgstr "La infano estas forigita de sia familio." #: src/gedlib/messages.c:223 msgid "The spouse was removed from his/her family." msgstr "La geedzo estas forigita de sia familio." #: src/gedlib/messages.c:225 msgid "A person cannot be merged with him/herself." msgstr "Homo ne povas esti kunfandita kun si mem." #: src/gedlib/messages.c:226 msgid "A family cannot be merged with itself." msgstr "Familio ne povas esti kunfandita kun si mem." #: src/gedlib/messages.c:227 msgid "Two persons with different parents cannot be merged." msgstr "Du homoj kun malsamaj gepatroj ne povas esti kunfandita." #: src/gedlib/messages.c:228 msgid "Two parents of different sexes cannot be merged." msgstr "Du gepatroj kun malsamaj seksoj ne povas esti kunfandita." #: src/gedlib/messages.c:229 msgid "The families have different fathers/husbands; cannot merge." msgstr "La familioj havas malsamajn patrojn/edzojn; ne povas kunfandi ilin." #: src/gedlib/messages.c:230 msgid "The families have different wives/mothers; cannot merge." msgstr "" "La familioj havas malsamajn patrinojn/edzinojn; ne povas kunfandi ilin." #: src/gedlib/messages.c:231 msgid "Who do you want to remove from the database?" msgstr "Kiun vi volas forigi el la datumbazo?" #: src/gedlib/messages.c:232 msgid "What record do you want to remove from the database?" msgstr "Kiun rikordon vi volas forigi el la datumbazo?" #: src/gedlib/messages.c:233 msgid "Place the child last in the family." msgstr "Metu la infanon finloke en la familio." #: src/gedlib/messages.c:234 msgid "Error in abbreviations file." msgstr "Eraro en mallonga¼a dosiero." #: src/gedlib/messages.c:235 msgid "Error in user options file." msgstr "Eraro en uzant-opciaj dosiero." #: src/gedlib/messages.c:236 msgid "Error in character mapping file." msgstr "Eraro en signo-sur¼etada dosiero." #: src/gedlib/messages.c:237 #, c-format msgid "(Separator is %s)" msgstr "(Apartigilo estas %s)" #: src/gedlib/messages.c:238 msgid "Do you want to re-edit it?" msgstr "Æu vi volas denove redakti tiun?" #: src/gedlib/messages.c:240 #, c-format msgid "%s was added to the database." msgstr "%s estas aldonita al la datumbazo." #: src/gedlib/messages.c:241 #, c-format msgid "%s was added as a child." msgstr "%s estas aldonita kiel infano." #: src/gedlib/messages.c:242 #, c-format msgid "%s was added as a spouse and/or parent." msgstr "%s estas aldonita kiel geedzo kaj/aý gepatro." #: src/gedlib/messages.c:243 msgid "The new family was added to the database." msgstr "La nova familio estas aldonita al la datumbazo." #: src/gedlib/messages.c:244 #, c-format msgid "%s was modified in the database." msgstr "%s estas þanøita en la datumbazo." #: src/gedlib/messages.c:245 msgid "The family was modified in the database." msgstr "La familio estas þanøita en la datumbazo." #: src/gedlib/messages.c:246 msgid "The source was modified in the database." msgstr "La fonto estas þanøita en la datumbazo." #: src/gedlib/messages.c:247 msgid "The event was modified in the database." msgstr "La okazo estas þanøita en la datumbazo." #: src/gedlib/messages.c:248 msgid "The record was modified in the database." msgstr "La rikordo estas þanøita en la datumbazo." #: src/gedlib/messages.c:250 #, c-format msgid "Could not open file %s." msgstr "Ne povas malfermi dosiero %s." #: src/gedlib/messages.c:251 msgid "Filepath too long." msgstr "Dosierindiko tro longas." #: src/gedlib/messages.c:253 #, fuzzy msgid "Please mark a record first." msgstr "Bonvole marku homon antaýe." #: src/gedlib/messages.c:255 #, c-format msgid "The current list is now named %s." msgstr "La nuna listo nun estas nomita %s." #: src/gedlib/messages.c:256 msgid "The current list is not named." msgstr "La nuna listo ne estas nomita." #: src/gedlib/messages.c:257 msgid "What should the name of this list be?" msgstr "Kiun nomus æi tiu listo?" #: src/gedlib/messages.c:258 msgid "No persons were added to the current list." msgstr "Neniu homoj estas aldonita al la nuna listo." #: src/gedlib/messages.c:259 msgid "What persons or list do you want to add to the current list?" msgstr "Kiujn homojn aý liston vi volas aldoni al la nuna listo?" #: src/gedlib/messages.c:260 msgid "You are at the bottom of the list." msgstr "Vi lokas æe la fundo de la listo." #: src/gedlib/messages.c:261 msgid "You are at the top of the list." msgstr "Vi lokas æe la supro de la listo." #: src/gedlib/messages.c:262 msgid "New persons were added to the current list." msgstr "Novaj homoj estas aldonita al la nuna listo." #: src/gedlib/messages.c:264 msgid "System error: illegal map code" msgstr "Sistema eraro: kontraýleøa map-kodo" #: src/gedlib/messages.c:265 msgid "No such translation table in this database" msgstr "Nenia traduk-tabelo ekzistas en æi tiu datumbazo" #: src/gedlib/messages.c:268 msgid "Because of errors the GEDCOM file was not loaded.\n" msgstr "Pro eraroj, la GEDCOM dosiero ne estas þarøita.\n" #: src/gedlib/messages.c:269 msgid "No errors; adding records with original keys..." msgstr "Neniu eraro; aldonas rikordojn kun originalaj þlosiloj..." #: src/gedlib/messages.c:270 msgid "No errors; adding records with new keys..." msgstr "Neniu eraro; aldonas rikordojn kun novaj þlosiloj..." #: src/gedlib/messages.c:271 msgid "Use original keys from GEDCOM file?" msgstr "Æu uzu originalajn þlosilojn el GEDCOM dosiero?" #: src/gedlib/messages.c:272 msgid "Proceed?" msgstr "Æu daýru?" #: src/gedlib/messages.c:273 msgid "Enter name of output archive file." msgstr "Enmetu nomon de arkiva celdosiero." #: src/gedlib/messages.c:274 #, c-format msgid "Database `%s' has been saved in `%s'." msgstr "Datumbazo `%s' estas registrita en `%s'." #: src/gedlib/messages.c:275 msgid "Enter name of translation table file to write" msgstr "Enmetu nomon de traduk-tabela dosiero por skribi" #: src/gedlib/messages.c:276 msgid "Enter name of translation table file to read" msgstr "Enmetu nomon de traduk-tabela dosiero por legi" #: src/gedlib/messages.c:277 #, c-format msgid "Line %d: The person defined here has no key: skipped." msgstr "Linio %d: La homo difinita æi tie ne havas þlosilon: ellasita." #: src/gedlib/messages.c:278 #, c-format msgid "Line %d: The family defined here has no key." msgstr "Linio %d: La familio difinita æi tie ne havas þlosilon." #: src/gedlib/messages.c:279 #, c-format msgid "Lines %d and %d: Person %s is multiply defined: skipped." msgstr "Linioj %d kaj %d: Homo %s estas multoble difinita: ellasita." #: src/gedlib/messages.c:280 #, c-format msgid "Lines %d and %d: Family %s is multiply defined." msgstr "Linioj %d kaj %d: Familio %s estas multoble difinita." #: src/gedlib/messages.c:281 #, c-format msgid "Line %d: Person %s has an incorrect key: skipped." msgstr "Linio %d: Homo %s havas maløustan þlosilon: ellasita." #: src/gedlib/messages.c:282 #, c-format msgid "Line %d: Family %s has an incorrect key." msgstr "Linio %d: Familio %s havas maløustan þlosilon." #: src/gedlib/messages.c:283 #, c-format msgid "Person %s is referred to but not defined." msgstr "Homo %s estas aludita sed ne difinita." #: src/gedlib/messages.c:284 #, c-format msgid "Family %s is referred to but not defined." msgstr "Familio %s estas aludita sed ne difinita." #: src/gedlib/messages.c:285 #, c-format msgid "Source %s is referred to but not defined." msgstr "Fonto %s estas aludita sed ne difinita." #: src/gedlib/messages.c:286 #, c-format msgid "Event %s is referred to but not defined." msgstr "Okazo %s estas aludita sed ne difinita." #: src/gedlib/messages.c:287 #, c-format msgid "Line %d: This line has a level number that is too large." msgstr "Linio %d: Æi tiu linio havas tro grandan nivelan numeron." #: src/gedlib/messages.c:288 #, c-format msgid "Line %d: Person defined here has no name." msgstr "Linio %d: Homo difinita æi tie ne havas nomon." #: src/gedlib/messages.c:294 msgid "" msgstr "" #: src/gedlib/messages.c:296 msgid "What is the name of the program?" msgstr "Kiu estas la nomo de la programo?" #: src/gedlib/messages.c:297 msgid "Please enter the name of the GEDCOM file." msgstr "Bonvole enmetu la nomon de la GEDCOM dosiero." #: src/gedlib/messages.c:299 msgid "What is the name of the output file?" msgstr "Kiu estas la nomo de la celdosiero?" #: src/gedlib/messages.c:300 msgid "Malformed configuration file: line too long." msgstr "Maløuste formita konfigura¼a dosiero: linio tro longas." #: src/gedlib/messages.c:301 msgid "Unsupported file encoding (no multibyte encodings except UTF-8)." msgstr "Ne subtenita dosierkodo (neniaj multbitokaj kodoj esceptinte UTF-8)." #: src/gedlib/messages.c:302 #, c-format msgid "Unsupported file encoding: %s." msgstr "Ne subtenita dosierkodo: %s" #: src/gedlib/messages.c:305 msgid "Enter string for program" msgstr "Enmetu signoæenon por programo" #: src/gedlib/messages.c:306 msgid "enter string: " msgstr "enmetu signoæenon: " #: src/gedlib/messages.c:307 msgid "enter integer:" msgstr "enmetu entjero:" #: src/gedlib/messages.c:308 msgid "enter name: " msgstr "enmetu nomon: " #: src/gedlib/messages.c:309 msgid "Strike any key to continue." msgstr "Premu iun ajn klavon por daýri." #: src/gedlib/messages.c:313 msgid "" "0 SOUR\n" "1 REFN\n" "1 TITL Title\n" "1 AUTH Author" msgstr "" "0 SOUR\n" "1 REFN\n" "1 TITL Titolo\n" "1 AUTH Aýtoro" #: src/gedlib/messages.c:314 msgid "" "0 EVEN\n" "1 REFN\n" "1 DATE\n" "1 PLAC\n" "1 INDI\n" " 2 NAME\n" " 2 ROLE\n" "1 SOUR" msgstr "" "0 EVEN\n" "1 REFN\n" "1 DATE\n" "1 PLAC\n" "1 INDI\n" " 2 NAME\n" " 2 ROLE\n" "1 SOUR" #: src/gedlib/messages.c:315 msgid "" "0 XXXX\n" "1 REFN" msgstr "" "0 XXXX\n" "1 REFN" #: src/gedlib/messages.c:319 msgid "The file is as positioned at EOF." msgstr "La dosiero estas kiel lokigita æe sia fino." #: src/gedlib/messages.c:320 #, c-format msgid "Line %d: This line is empty; EOF?" msgstr "Linio %d: Æi tiu linio estas malplena: dosierfino?" #: src/gedlib/messages.c:321 #, c-format msgid "Line %d: This line is too long." msgstr "Linio %d: Æi tiu linio tro longas." #: src/gedlib/messages.c:322 #, c-format msgid "Line %d: This line has no level number." msgstr "Linio %d: Æi tiu linio ne havas nivelan numeron." #: src/gedlib/messages.c:323 #, c-format msgid "Line %d: This line is incomplete." msgstr "Linio %d: Æi tiu linio estas nekompleta." #: src/gedlib/messages.c:324 #, c-format msgid "Line %d: This line has a bad link." msgstr "Linio %d: Æi tiu linio havas maløustan ligilon." #: src/gedlib/messages.c:325 #, c-format msgid "Line %d: This line needs white space before tag." msgstr "Linio %d: Æi tiu linio bezonas blankan spacon antaý etikedo." #: src/gedlib/messages.c:326 #, c-format msgid "Line %d: This line has an illegal level." msgstr "Linio %d: Æi tiu linio havas kontraýleøan nivelon." #: src/gedlib/messages.c:327 msgid "The record begins at wrong level." msgstr "La rikordo komencas æe maløusta nivelo." #: src/gedlib/messages.c:330 msgid "" "\n" "Aborting now. Core dump? [y/n]" msgstr "" "\n" "Misfinas nun. Kreu nekropsia¼on? [j/n]" #: src/gedlib/messages.c:331 msgid "" "Looks like a program was running.\n" "Check file %1 around line %2.\n" msgstr "" "Aperas kiel programo rulis.\n" "Kontrolu dosiero %1 æirkaý linio %2.\n" #: src/gedlib/messages.c:332 msgid "signal %1: %2" msgstr "interrompo %1: %2" #: src/gedlib/messages.c:334 msgid "SIGNAL 0" msgstr "INTERROMPO 0" #: src/gedlib/messages.c:335 msgid "HANGUP" msgstr "KROÆO" #: src/gedlib/messages.c:336 msgid "INTERRUPT" msgstr "INTERROMPO" #: src/gedlib/messages.c:337 msgid "QUIT" msgstr "HALTIS" #: src/gedlib/messages.c:338 msgid "ILLEGAL INSTRUCTION" msgstr "KONTRAÝLEØA KOMANDO" #: src/gedlib/messages.c:339 msgid "TRACE TRAP" msgstr "ÞPURA INTERROMPO" #: src/gedlib/messages.c:340 msgid "ABORT" msgstr "MISFINIS" #: src/gedlib/messages.c:341 msgid "EMT INST" msgstr "EMT INST" #: src/gedlib/messages.c:342 msgid "FLOATING POINT EXCEPTION" msgstr "GLITPUNKTA INTERROMPO" #: src/gedlib/messages.c:343 msgid "KILL" msgstr "MORTIGIS" #: src/gedlib/messages.c:344 msgid "BUS ERROR" msgstr "BUSA ERARO" #: src/gedlib/messages.c:345 msgid "SEGMENTATION ERROR" msgstr "SEGMENTIGADA ERARO" #: src/gedlib/messages.c:346 msgid "SYSTEM CALL ERROR" msgstr "KERNOVOKA ERARO" #: src/gedlib/messages.c:347 msgid "PIPE WRITE" msgstr "DUKTA SKRIBO" #: src/gedlib/messages.c:348 msgid "ALARM CLOCK" msgstr "VEKHORLOØO" #: src/gedlib/messages.c:350 msgid "TERMINATE FROM KILL" msgstr "HALTIØO PER MORTIGO" #: src/gedlib/messages.c:351 msgid "USER SIGNAL 1" msgstr "UZANTA INTERROMPO 1" #: src/gedlib/messages.c:352 msgid "USER SIGNAL 2" msgstr "UZANTA INTERROMPO 2" #: src/gedlib/messages.c:353 msgid "DEATH OF CHILD" msgstr "MORTIØO DE PROCESIDO" #: src/gedlib/messages.c:354 msgid "POWER-FAIL RESTART" msgstr "POTENCA-FIASKA REKOMENCO" #: src/gedlib/messages.c:355 msgid "WINDOW CHANGE" msgstr "FENESTRO-ÞANØO" #: src/gedlib/messages.c:356 msgid "Unknown signal" msgstr "Nekonata interrompo" #: src/gedlib/messages.c:360 msgid "person" msgstr "homo" #: src/gedlib/messages.c:361 msgid ", of " msgstr ", de " #: src/gedlib/messages.c:362 msgid "father" msgstr "patro" #: src/gedlib/messages.c:363 msgid "mother" msgstr "patrino" #: src/gedlib/messages.c:364 msgid "spouse" msgstr "geedzo" #: src/gedlib/messages.c:365 msgid "child" msgstr "infano" #: src/gedlib/messages.c:368 msgid "m. " msgstr "e. " #: src/gedlib/messages.c:370 msgid "div. " msgstr "eks. " #: src/gedlib/messages.c:372 msgid "b. " msgstr "n. " #: src/gedlib/messages.c:374 msgid "bap. " msgstr "bap. " #: src/gedlib/messages.c:376 msgid "d. " msgstr "m. " #: src/gedlib/messages.c:378 msgid "bur. " msgstr "ent. " #: src/gedlib/messages.c:380 msgid "cb. " msgstr "in. " #: src/gedlib/messages.c:382 msgid "married: " msgstr "edziøita: " #: src/gedlib/messages.c:383 msgid "born: " msgstr "nask: " #: src/gedlib/messages.c:384 msgid "bapt: " msgstr "bapt: " #: src/gedlib/messages.c:385 msgid "died: " msgstr "mort: " #: src/gedlib/messages.c:386 msgid "buri: " msgstr "entr: " #: src/gedlib/messages.c:390 msgid "You cannot edit the INDI line in a person record." msgstr "Vi ne povas redakti la INDI linio en homa rikordo." #: src/gedlib/messages.c:391 msgid "You cannot edit the FAMC line in a person record." msgstr "Vi ne povas redakti la FAMC linio en homa rikordo." #: src/gedlib/messages.c:392 msgid "You cannot edit the FAMS lines in a person record." msgstr "Vi ne povas redakti la FAMS linio en homa rikordo." #: src/gedlib/messages.c:393 msgid "You cannot edit the FAM line in a family record." msgstr "Vi ne povas redakti la FAM linio en familia rikordo." #: src/gedlib/messages.c:394 msgid "You cannot edit the HUSB line in a family record." msgstr "Vi ne povas redakti la HUSB linio en familia rikordo." #: src/gedlib/messages.c:395 msgid "You cannot edit the WIFE line in a family record." msgstr "Vi ne povas redakti la WIFE linio en familia rikordo." #: src/gedlib/messages.c:396 msgid "You cannot edit the CHIL lines in a family record." msgstr "Vi ne povas redakti la CHIL linio en familia rikordo." #: src/gedlib/messages.c:397 msgid "The record is empty." msgstr "La rikordo estas malplena." #: src/gedlib/messages.c:398 msgid "The record does not begin with an INDI line." msgstr "La rikordo ne komenciøas per INDI linio." #: src/gedlib/messages.c:399 msgid "The record does not begin with a FAM line." msgstr "La rikordo ne komenciøas per FAM linio." #: src/gedlib/messages.c:400 msgid "The record does not begin with a SOUR line." msgstr "La rikordo ne komenciøas per SOUR linio." #: src/gedlib/messages.c:401 msgid "The record does not begin with an EVEN line." msgstr "La rikordo ne komenciøas per EVEN linio." #: src/gedlib/messages.c:402 msgid "INDI, FAM, SOUR, EVEN records may not be other records." msgstr "INDI, FAM, SOUR, EVEN rikordoj ne estas permesita esti aliaj rikordoj." #: src/gedlib/messages.c:403 msgid "The record contains multiple level 0 lines." msgstr "La rikordo enhavas multoblajn nivelo-0 linioj." #: src/gedlib/messages.c:404 msgid "This person record has bad GEDCOM name syntax." msgstr "Æi tiu homa rikordo enhavas maløustan GEDCOM nomsintakson." #: src/gedlib/messages.c:405 msgid "You cannot change the sex of a parent." msgstr "Vi ne povas þanøi la sekson de gepatro." #: src/gedlib/messages.c:406 msgid "REFN key is already in use." msgstr "REFN þlosilo jam estas uzita." #: src/gedlib/messages.c:408 msgid "Tag is too long to connect automatically." msgstr "Etikedo tro longas por konekti aýtomate." #: src/gedlib/messages.c:410 msgid "Database records" msgstr "Datumbazaj rikordoj" #: src/gedlib/messages.c:411 #, c-format msgid "%dI, %dF, %dS, %dE, %dX" msgstr "%dI, %dF, %dS, %dE, %dX" #: src/gedlib/messages.c:414 #, c-format msgid "LifeLines %s - Genealogical DB and Programming System" msgstr "LifeLines %s - Genealogia DB kaj Programada Sistemo" #: src/gedlib/messages.c:415 msgid "Copyright(c) 1991 to 1996, by T. T. Wetmore IV" msgstr "Kopirajtita(c) 1991 al 1996, de T. T. Wetmore IV" #: src/gedlib/messages.c:416 #, c-format msgid "Current Database - %s" msgstr "Nuna datumbazo - %s" #: src/gedlib/messages.c:418 msgid " (immutable)" msgstr " (neþanøebla)" #: src/gedlib/messages.c:420 msgid " (read only)" msgstr " (nurlegebla)" #: src/gedlib/messages.c:421 msgid "Please choose an operation:" msgstr "Bonvole elektu fukciadon:" #: src/gedlib/messages.c:422 msgid "Not valid command" msgstr "Ne valida komando" #: src/gedlib/messages.c:425 msgid "enter y (yes) or n (no): " msgstr "enmetu j (jes) aý n (ne): " #: src/gedlib/messages.c:426 msgid "yYnN" msgstr "jJnN" #: src/gedlib/messages.c:427 msgid "yY" msgstr "jJ" #: src/gedlib/messages.c:430 msgid "LifeLines -- Person Browse Screen (* toggles menu)" msgstr "LifeLines -- Homa Krozada Ekrano (* baskulas menuon)" #: src/gedlib/messages.c:431 msgid "LifeLines -- Family Browse Screen (* toggles menu)" msgstr "LifeLines -- Familia Krozada Ekrano (* baskulas menuon)" #: src/gedlib/messages.c:432 msgid "LifeLines -- Two Person Browse Screen (* toggles menu)" msgstr "LifeLines -- Duhoma Krozada Ekrano (* baskulas menuon)" #: src/gedlib/messages.c:433 msgid "LifeLines -- Two Family Browse Screen (* toggles menu)" msgstr "LifeLines -- Dufamilia Krozada Ekrano (* baskulas menuon)" #: src/gedlib/messages.c:434 msgid "LifeLines -- Auxiliary Browse Screen (* toggles menu)" msgstr "LifeLines -- Helpeca Krozada Ekrano (* baskulas menuon)" #: src/gedlib/messages.c:435 msgid "LifeLines -- List Browse Screen (* toggles menu)" msgstr "LifeLines -- Lista Krozada Ekrano (* baskulas menuon)" #: src/gedlib/messages.c:439 msgid "Commands: Select by number, u Page Up, d Page Down, i Select, q Quit" msgstr "" "Komandoj: Elektu per numero, u Foliumu Supren, d Foliumu Suben, i Elektu, " "q Eliru" #: src/gedlib/messages.c:440 msgid "Commands: u Page Up, d Page Down, q Quit" msgstr "Komandoj: u Foliumu Supren, d Foliumu Suben, q Eliru" #: src/gedlib/messages.c:441 msgid "Messages:" msgstr "Mesaøoj:" #: src/gedlib/messages.c:444 msgid "Please choose from the following options:" msgstr "Bonvole elektu unu el la jenaj opcioj:" #: src/gedlib/messages.c:445 #, c-format msgid "New record is %s" msgstr "Nova rikordo estas %s" #: src/gedlib/messages.c:446 msgid "Insert xref automatically at bottom of current record." msgstr "Enmetu krucref. aýtomate æe fundo de la nuna rikordo." #: src/gedlib/messages.c:447 msgid "Edit current record now to add xref manually." msgstr "Redaktu nunan rikordon nun por permane aldoni krucref." #: src/gedlib/messages.c:448 msgid "Browse new record (without adding xref)." msgstr "Krozu novan rikordon (sen aldonante krucref.)." #: src/gedlib/messages.c:449 msgid "Return to current record (without adding xref)." msgstr "Revenu al nuna rikordo (sen aldonante krucref.)." #: src/gedlib/messages.c:452 msgid "Spouse unknown" msgstr "Geedzo nekonita" #: src/gedlib/messages.c:453 msgid "No more history" msgstr "Ne plu historio" #: src/gedlib/messages.c:454 msgid "Bad history count" msgstr "Maløusta historia nombro" #: src/gedlib/messages.c:455 msgid "Bad backup history count" msgstr "Maløusta vicrisurca historia nombro" #: src/gedlib/messages.c:456 msgid "Bad history length" msgstr "Maløusta historia longeco" #: src/gedlib/messages.c:457 #, c-format msgid "Delete history (%d entries)?" msgstr "Forstreku historion (%d eroj)?" #: src/gedlib/messages.c:458 msgid "Error accessing data" msgstr "Eraro dum datumalirado" #: src/gedlib/messages.c:459 msgid "Choose from history" msgstr "Elektu el historio" #: src/gedlib/messages.c:460 msgid "" "Cannot combine immutable (-i) or read-only (-r) with read-write (-w) access." msgstr "" "Ne povas kunmeti neþanøeblan (-i) aý nurlegeblan (-r) kun leg-skriba (-w) " "alirado." #: src/gedlib/messages.c:461 msgid "Cannot combine forceopen (-f) and lock (-l) flags." msgstr "Ne povas kunmeti devigmalfermu (-f) kaj þlosu (-l) opciojn." #: src/gedlib/messages.c:462 msgid "Default path: " msgstr "Implica dosierindiko: " #: src/gedlib/messages.c:463 msgid "WARNING: missing keys" msgstr "AVERTO: mankantaj þlosiloj" #: src/gedlib/messages.c:464 msgid "This does not point to another record in the database!" msgstr "Æi tiu ne indikas alian rikordon en la datumbazo!" #: src/gedlib/messages.c:465 msgid "enter file name" msgstr "enmetu dosiernomon" #: src/gedlib/messages.c:466 #, c-format msgid "enter file name (*%s)" msgstr "enmetu dosiernomon (*%s)" #: src/gedlib/messages.c:467 msgid "There is no record with that key or reference." msgstr "Ne ekzistas rikordo kun tiu þlosilo aý referenco." #: src/gedlib/messages.c:468 msgid "Database was corrupt." msgstr "Datumbazo estas koruptita." #: src/gedlib/messages.c:471 msgid "Bad decimal number format." msgstr "Maløusta dekuma nombra formo." #: src/gedlib/messages.c:472 msgid "Bad hexidecimal number format." msgstr "Maløusta deksesuma nombra formo." #: src/gedlib/messages.c:473 msgid "No replacement string on line." msgstr "Ne anstataýa signoæeno en linio." #: src/gedlib/messages.c:474 msgid "No original string on line." msgstr "Ne originala signoæeno en linio." #: src/gedlib/messages.c:475 msgid "Bad escape format." msgstr "Maløusta eskapsigna formo." #: src/gedlib/messages.c:476 #, c-format msgid "%s: line %d (entry %d): %s" msgstr "%s: linio %d (ero %d): %s" #: src/gedlib/messages.c:479 src/liflines/brwsmenu.c:26 msgid "q Return to main menu" msgstr "q Revenu al æefa menuo" #: src/gedlib/messages.c:480 msgid "q Return to previous menu" msgstr "q Revenu al lasta menuo" #: src/gedlib/messages.c:481 msgid "q Quit program" msgstr "q Eliru programon" #: src/gedlib/messages.c:482 msgid "Q Quit current database" msgstr "Q Eliru nunan datumbazon" #: src/gedlib/messages.c:485 msgid "b Browse the persons in the database" msgstr "b Krozu la homojn en la datumbazon" #: src/gedlib/messages.c:486 msgid "s Search database" msgstr "s Seræu datumbazon" #: src/gedlib/messages.c:487 msgid "a Add information to the database" msgstr "a Aldonu informon al datumbazo" #: src/gedlib/messages.c:488 msgid "d Delete information from the database" msgstr "d Forstreku informon el datumbazo" #: src/gedlib/messages.c:489 msgid "r Generate report by entering report name" msgstr "r Kreu raporton enmetante raportnomon" #: src/gedlib/messages.c:490 msgid "p Pick a report from list and run" msgstr "p Elektu raporton el listo kaj rulu øin" #: src/gedlib/messages.c:491 msgid "c Character set options" msgstr "c Signara opcioj" #: src/gedlib/messages.c:492 msgid "t Modify character translation tables" msgstr "t Þanøu signajn traduk-tabelojn" #: src/gedlib/messages.c:493 msgid "u Miscellaneous utilities" msgstr "u Diversaj utila¼oj" #: src/gedlib/messages.c:494 msgid "x Handle source, event and other records" msgstr "x Traktu fontajn, okazajn, kaj aliajn rikordojn" #: src/gedlib/messages.c:497 msgid "What utility do you want to perform?" msgstr "Kiun utila¼on vi volas ruligi?" #: src/gedlib/messages.c:498 msgid "s Save the database in a GEDCOM file" msgstr "s Registru la datumbazon en GEDCOM dosiero" #: src/gedlib/messages.c:499 msgid "r Read in data from a GEDCOM file" msgstr "r Legu datumon el GEDCOM dosiero" #: src/gedlib/messages.c:500 msgid "R Pick a GEDCOM file and read in" msgstr "R Elektu GEDCOM dosieron kaj enlegu tiun" #: src/gedlib/messages.c:501 msgid "k Find a person's key value" msgstr "k Trovu þlosilon de homo" #: src/gedlib/messages.c:502 msgid "i Identify a person from key value" msgstr "i Indiku homon per þlosilo" #: src/gedlib/messages.c:503 msgid "d Show database statistics" msgstr "d Montrigu datumbazan statistikaron" #: src/gedlib/messages.c:504 msgid "m Show memory statistics" msgstr "m Montrigu memoran statistikaron" #: src/gedlib/messages.c:505 msgid "e Edit the place abbreviation file" msgstr "e Redaktu la loknoma-mallongiøan dosieron" #: src/gedlib/messages.c:506 msgid "o Edit the user options file" msgstr "o Redaktu la uzant-opcian dosieron" #: src/gedlib/messages.c:509 msgid "What activity do you want to perform?" msgstr "Kiun agadon vi volas fari?" #: src/gedlib/messages.c:510 msgid "s Browse source records" msgstr "s Krozu fontajn rikordojn" #: src/gedlib/messages.c:511 msgid "e Browse event records" msgstr "e Krozu okazajn rikordojn" #: src/gedlib/messages.c:512 msgid "x Browse other records" msgstr "x Krozu aliajn rikordojn" #: src/gedlib/messages.c:513 msgid "1 Add a source record to the database" msgstr "1 Aldonu fontan rikordon al datumbazo" #: src/gedlib/messages.c:514 msgid "2 Edit source record from the database" msgstr "2 Redaktu fontan rikordon el datumbazo" #: src/gedlib/messages.c:515 msgid "3 Add an event record to the database" msgstr "3 Aldonu okazan rikordon al datumbazo" #: src/gedlib/messages.c:516 msgid "4 Edit event record from the database" msgstr "4 Redaktu okazan rikordon el datumbazo" #: src/gedlib/messages.c:517 msgid "5 Add an other record to the database" msgstr "5 Aldonu alian rikordon al datumbazo" #: src/gedlib/messages.c:518 msgid "6 Edit other record from the database" msgstr "6 Redaktu alian rikordon el datumbazo" #: src/gedlib/messages.c:521 msgid "Translation Tables" msgstr "Traduk-Tabeloj" #: src/gedlib/messages.c:522 msgid "e edit individual tables (in db)" msgstr "e redaktu apartajn tabelojn (en db)" #: src/gedlib/messages.c:523 msgid "l load a table from a file (into db)" msgstr "l þarøu tabelon el dosiero (al db)" #: src/gedlib/messages.c:524 msgid "s save a table to a file (from db)" msgstr "s registru tabelon al dosiero (el db)" #: src/gedlib/messages.c:525 msgid "x export all tables (from db to files)" msgstr "x eksportu æiujn tabelojn (el db al dosieroj)" #: src/gedlib/messages.c:526 msgid "i import all tables (from files into db)" msgstr "i importu æiujn tabelojn (el dosieroj al db)" #: src/gedlib/messages.c:527 msgid "export/import directory:" msgstr "eksporta/importa dosierujo:" #: src/gedlib/messages.c:530 msgid "Which character mapping do you want to edit?" msgstr "Kiun signo-sur¼etadon vi volas redakti?" #: src/gedlib/messages.c:531 msgid "Which character mapping do you want to save?" msgstr "Kiun signo-sur¼etadon vi volas registri?" #: src/gedlib/messages.c:534 msgid "Not implemented yet" msgstr "Ne jam realigas" #: src/gedlib/messages.c:537 msgid "What do you want to add?" msgstr "Kion vi volas aldoni?" #: src/gedlib/messages.c:538 msgid "p Person - add new person to the database" msgstr "p Homo - aldonu novan homon al datumbazo" #: src/gedlib/messages.c:539 msgid "f Family - create family record from one or two spouses" msgstr "f Familio - kreu familian rikordon per unu aý du geedzoj" #: src/gedlib/messages.c:540 msgid "c Child - add a child to an existing family" msgstr "c Infano - aldonu infanon al jam ekzistanta familio" #: src/gedlib/messages.c:541 msgid "s Spouse - add a spouse to an existing family" msgstr "s Geedzo - aldonu geedzon al jam ekzistanta familio" #: src/gedlib/messages.c:544 msgid "What do you want to remove?" msgstr "Kion vi volas forigi?" #: src/gedlib/messages.c:545 msgid "c Child - remove a child from his/her family" msgstr "c Infano - forigu infanon el sia familio" #: src/gedlib/messages.c:546 msgid "s Spouse - remove a spouse from a family" msgstr "s Geedzo - forigu geedzon el sia familio" #: src/gedlib/messages.c:547 msgid "i Individual - remove a person completely" msgstr "i Apartulo - forigu homon tute" #: src/gedlib/messages.c:548 msgid "f Family - remove a family completely" msgstr "f Familio - forigu familion tute" #: src/gedlib/messages.c:549 msgid "o Other - remove other record completely" msgstr "o Alio - forigu alian rikordon tute" #: src/gedlib/messages.c:552 msgid "How would you like to find a record?" msgstr "Kiel vi volas trovi rikordon?" #: src/gedlib/messages.c:555 msgid "Performing full name scan" msgstr "Rulas plen-noman ekzamenon" #: src/gedlib/messages.c:556 msgid "Performing name fragment scan" msgstr "Rulas part-noman ekzamenon" #: src/gedlib/messages.c:557 msgid "Performing refn scan" msgstr "Rulas refn ekzamenon" #: src/gedlib/messages.c:558 #, fuzzy msgid "Performing source scan" msgstr "Rulas refn ekzamenon" #: src/gedlib/messages.c:559 msgid "No records found in scan" msgstr "Neniun rikordon trovita dum ekzameno" #: src/gedlib/messages.c:562 msgid "abt %1" msgstr "pri %1" #: src/gedlib/messages.c:563 msgid "about %1" msgstr "pri %1" #: src/gedlib/messages.c:564 msgid "est %1" msgstr "tak %1" #: src/gedlib/messages.c:565 msgid "estimated %1" msgstr "taksita %1" #: src/gedlib/messages.c:566 msgid "cal %1" msgstr "kal %1" #: src/gedlib/messages.c:567 msgid "calculated %1" msgstr "kalkulita %1" #: src/gedlib/messages.c:568 msgid "fr %1" msgstr "de %1" #: src/gedlib/messages.c:569 msgid "from %1" msgstr "de %1" #: src/gedlib/messages.c:570 src/gedlib/messages.c:571 msgid "to %1" msgstr "al %1" #: src/gedlib/messages.c:572 msgid "fr %1 to %2" msgstr "de %1 al %2" #: src/gedlib/messages.c:573 msgid "from %1 to %2" msgstr "de %1 al %2" #: src/gedlib/messages.c:574 msgid "bef %1" msgstr "ant %1" #: src/gedlib/messages.c:575 msgid "before %1" msgstr "antaý %1" #: src/gedlib/messages.c:576 msgid "aft %1" msgstr "pst %1" #: src/gedlib/messages.c:577 msgid "after %1" msgstr "post %1" #: src/gedlib/messages.c:578 msgid "bet %1 and %2" msgstr "int %1 kaj %2" #: src/gedlib/messages.c:579 msgid "between %1 and %2" msgstr "inter %1 kaj %2" #: src/gedlib/messages.c:582 msgid "B.C." msgstr "a.K." #: src/gedlib/messages.c:584 msgid "BC" msgstr "aK" #: src/gedlib/messages.c:586 msgid "B.C.E." msgstr "a.K." #: src/gedlib/messages.c:588 msgid "BCE" msgstr "aK" #: src/gedlib/messages.c:590 msgid "A.D." msgstr "p.K." #: src/gedlib/messages.c:592 msgid "AD" msgstr "pK" #: src/gedlib/messages.c:594 msgid "C.E." msgstr "p.K." #: src/gedlib/messages.c:596 msgid "CE" msgstr "pK" #: src/gedlib/messages.c:599 msgid "%1J" msgstr "%1J" #: src/gedlib/messages.c:601 msgid "%1 HEB" msgstr "%1 HEB" #: src/gedlib/messages.c:603 msgid "%1 FR" msgstr "%1 FR" #: src/gedlib/messages.c:605 msgid "%1 AUC" msgstr "%1 AUC" #: src/gedlib/messages.c:607 msgid "jan" msgstr "jan" #: src/gedlib/messages.c:608 msgid "january" msgstr "januaro" #: src/gedlib/messages.c:609 msgid "feb" msgstr "feb" #: src/gedlib/messages.c:610 msgid "february" msgstr "februaro" #: src/gedlib/messages.c:611 msgid "mar" msgstr "mar" #: src/gedlib/messages.c:612 msgid "march" msgstr "marto" #: src/gedlib/messages.c:613 msgid "apr" msgstr "apr" #: src/gedlib/messages.c:614 msgid "april" msgstr "aprilo" #: src/gedlib/messages.c:616 msgid "**may" msgstr "maj" #: src/gedlib/messages.c:617 msgid "may" msgstr "majo" #: src/gedlib/messages.c:618 msgid "jun" msgstr "jun" #: src/gedlib/messages.c:619 msgid "june" msgstr "junio" #: src/gedlib/messages.c:620 msgid "jul" msgstr "jul" #: src/gedlib/messages.c:621 msgid "july" msgstr "julio" #: src/gedlib/messages.c:622 msgid "aug" msgstr "aýg" #: src/gedlib/messages.c:623 msgid "august" msgstr "aýgusto" #: src/gedlib/messages.c:624 msgid "sep" msgstr "sep" #: src/gedlib/messages.c:625 msgid "september" msgstr "septembro" #: src/gedlib/messages.c:626 msgid "oct" msgstr "okt" #: src/gedlib/messages.c:627 msgid "october" msgstr "oktobro" #: src/gedlib/messages.c:628 msgid "nov" msgstr "nov" #: src/gedlib/messages.c:629 msgid "november" msgstr "novembro" #: src/gedlib/messages.c:630 msgid "dec" msgstr "dec" #: src/gedlib/messages.c:631 msgid "december" msgstr "decembro" #: src/gedlib/messages.c:633 msgid "tsh" msgstr "tsh" #: src/gedlib/messages.c:634 msgid "tishri" msgstr "tishri" #: src/gedlib/messages.c:635 msgid "csh" msgstr "csh" #: src/gedlib/messages.c:636 msgid "cheshvan" msgstr "cheshvan" #: src/gedlib/messages.c:637 msgid "ksl" msgstr "ksl" #: src/gedlib/messages.c:638 msgid "kislev" msgstr "kislev" #: src/gedlib/messages.c:639 msgid "tvt" msgstr "tvt" #: src/gedlib/messages.c:640 msgid "tevet" msgstr "tevet" #: src/gedlib/messages.c:641 msgid "shv" msgstr "shv" #: src/gedlib/messages.c:642 msgid "shevat" msgstr "shevat" #: src/gedlib/messages.c:643 msgid "adr" msgstr "adr" #: src/gedlib/messages.c:644 msgid "adar" msgstr "adar" #: src/gedlib/messages.c:645 msgid "ads" msgstr "ads" #: src/gedlib/messages.c:646 msgid "adar sheni" msgstr "adar sheni" #: src/gedlib/messages.c:647 msgid "nsn" msgstr "nsn" #: src/gedlib/messages.c:648 msgid "nisan" msgstr "nisan" #: src/gedlib/messages.c:649 msgid "iyr" msgstr "iyr" #: src/gedlib/messages.c:650 msgid "iyar" msgstr "iyar" #: src/gedlib/messages.c:651 msgid "svn" msgstr "svn" #: src/gedlib/messages.c:652 msgid "sivan" msgstr "sivan" #: src/gedlib/messages.c:653 msgid "tmz" msgstr "tmz" #: src/gedlib/messages.c:654 msgid "tamuz" msgstr "tamuz" #: src/gedlib/messages.c:655 msgid "aav" msgstr "aav" #: src/gedlib/messages.c:656 msgid "av" msgstr "av" #: src/gedlib/messages.c:657 msgid "ell" msgstr "ell" #: src/gedlib/messages.c:658 msgid "elul" msgstr "elul" #: src/gedlib/messages.c:660 msgid "vend" msgstr "vend" #: src/gedlib/messages.c:661 msgid "vendemiaire" msgstr "vendemiaire" #: src/gedlib/messages.c:662 msgid "brum" msgstr "brum" #: src/gedlib/messages.c:663 msgid "brumaire" msgstr "brumaire" #: src/gedlib/messages.c:664 msgid "frim" msgstr "frim" #: src/gedlib/messages.c:665 msgid "frimaire" msgstr "frimaire" #: src/gedlib/messages.c:666 msgid "nivo" msgstr "nivo" #: src/gedlib/messages.c:667 msgid "nivose" msgstr "nivose" #: src/gedlib/messages.c:668 msgid "pluv" msgstr "pluv" #: src/gedlib/messages.c:669 msgid "pluviose" msgstr "pluviose" #: src/gedlib/messages.c:670 msgid "vent" msgstr "vent" #: src/gedlib/messages.c:671 msgid "ventose" msgstr "ventose" #: src/gedlib/messages.c:672 msgid "germ" msgstr "germ" #: src/gedlib/messages.c:673 msgid "germinal" msgstr "germinal" #: src/gedlib/messages.c:674 msgid "flor" msgstr "flor" #: src/gedlib/messages.c:675 msgid "floreal" msgstr "floreal" #: src/gedlib/messages.c:676 msgid "prai" msgstr "prai" #: src/gedlib/messages.c:677 msgid "prairial" msgstr "prairial" #: src/gedlib/messages.c:678 msgid "mess" msgstr "mess" #: src/gedlib/messages.c:679 msgid "messidor" msgstr "messidor" #: src/gedlib/messages.c:680 msgid "ther" msgstr "ther" #: src/gedlib/messages.c:681 msgid "thermidor" msgstr "thermidor" #: src/gedlib/messages.c:682 msgid "fruc" msgstr "fruc" #: src/gedlib/messages.c:683 msgid "fructidor" msgstr "fructidor" #: src/gedlib/messages.c:684 msgid "comp" msgstr "comp" #: src/gedlib/messages.c:685 msgid "jour_complementairs" msgstr "jour_complementairs" #: src/gedlib/node.c:610 msgid "NO NAME" msgstr "NE NOMO" #: src/gedlib/node.c:1167 #, c-format msgid "Node memory leaks:" msgstr "Nod-memora likoj:" #: src/gedlib/node.c:1170 src/gedlib/record.c:361 src/interp/pvalalloc.c:301 #, c-format msgid "%d item leaked" msgid_plural "%d items leaked" msgstr[0] "%d ero likita" msgstr[1] "%d eroj likitaj" #: src/gedlib/record.c:358 #, fuzzy, c-format msgid "Record memory leaks:" msgstr "Nod-memora likoj:" #: src/gedlib/remove.c:250 msgid "Families may not yet be removed in this fashion." msgstr "Familiojn oni ne povas tiel forigi." #. TRANSLATORS: Character set conversion from external editor to database internal #: src/gedlib/translat.c:100 msgid "Editor to Internal" msgstr "Redaktila al Interna" #. TRANSLATORS: Character set conversion from database internal to external editor #: src/gedlib/translat.c:102 msgid "Internal to Editor" msgstr "Interna al Redaktila" #: src/gedlib/translat.c:103 msgid "GEDCOM to Internal" msgstr "GEDCOM al Interna" #: src/gedlib/translat.c:104 msgid "Internal to GEDCOM" msgstr "Interna al GEDCOM" #: src/gedlib/translat.c:105 msgid "Display to Internal" msgstr "Montrita al Interna" #: src/gedlib/translat.c:106 msgid "Internal to Display" msgstr "Interna al Montrita" #: src/gedlib/translat.c:107 msgid "Report to Internal" msgstr "Raporta al Interna" #: src/gedlib/translat.c:108 msgid "Internal to Report" msgstr "Interna al Raporta" #. TRANSLATORS: key for "Editor to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:119 msgid "menu|trantable|e" msgstr "r" #. TRANSLATORS: key for "Internal to Editor" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:122 msgid "menu|trantable|m" msgstr "i" #. TRANSLATORS: key for "GEDCOM to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:125 msgid "menu|trantable|i" msgstr "g" #. TRANSLATORS: key for "Internal to GEDCOM" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:128 msgid "menu|trantable|x" msgstr "h" #. TRANSLATORS: key for "Display to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:131 msgid "menu|trantable|g" msgstr "m" #. TRANSLATORS: key for "Internal to Display" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:134 msgid "menu|trantable|d" msgstr "n" #. TRANSLATORS: key for "Report to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:137 msgid "menu|trantable|p" msgstr "p" #. TRANSLATORS: key for "Internal to Report" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:140 msgid "menu|trantable|r" msgstr "q" #. TRANSLATORS: db internal translation table note for tt menu #: src/gedlib/translat.c:473 #, c-format msgid " (dbint tt: %s)" msgstr " (dbint tt: %s)" #: src/gedlib/valid.c:75 msgid "This person record does not have a name line." msgstr "Æi tiu homa rikordo ne havas nomlinion." #: src/gedlib/xlat.c:347 #, fuzzy, c-format msgid "ttpath get_conversion_dyntt:from <%s> to <%s>: %s" msgstr "Ne povas þanøigi kodpaøon (de <%s> al <%s>)" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 msgid "succeeded" msgstr "" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 #, fuzzy msgid "failed" msgstr "kvin" #: src/gedlib/xlat.c:369 #, c-format msgid "ttpath get_subcoding_dyntt from <%s> to subcode <%s>: %s" msgstr "" #: src/gedlib/xlat.c:435 msgid "No TTPATH config variable" msgstr "" #: src/gedlib/xlat.c:464 #, c-format msgid "ttpath checking dir <%s>" msgstr "" #: src/gedlib/xlat.c:478 #, fuzzy, c-format msgid "ttpath file <%s> typed as %d" msgstr "En dosiero <%s> æe linio %d" #: src/gedlib/xlat.c:690 #, fuzzy msgid "(no conversion)" msgstr "Neniu þanøigo" #. TRANSLATORS: steps in a chain of codeset conversions, eg, Editor-to-Internal #: src/gedlib/xlat.c:713 #, fuzzy, c-format msgid "%d step" msgid_plural "%d steps" msgstr[0] "%d riparita" msgstr[1] "%d riparitaj" #: src/gedlib/xreffile.c:400 #, c-format msgid "Corrupt DELETESET %c" msgstr "" #: src/gedlib/xreffile.c:425 #, c-format msgid "Tried to add already-deleted record (%ld) to xref (%c)!" msgstr "" #: src/interp/alloc.c:798 #, c-format msgid "Error: file \"%s\": line %d: " msgstr "Eraro: dosiero \"%s\": linio %d: " #: src/interp/alloc.c:903 #, c-format msgid "%s: the arg must be an integer." msgstr "%s: la opcio devas esti entjero." #: src/interp/alloc.c:904 #, c-format msgid "%s: the arg #%s must be an integer." msgstr "%s: la opcio #%s devas esti entjero." #: src/interp/alloc.c:905 #, c-format msgid "%s: the arg #%s must be a float." msgstr "%s: la opcio #%s devas esti glitpunkta nombro." #: src/interp/alloc.c:906 #, c-format msgid "%s: the arg must be a string." msgstr "%s: la opcio devas esti signoæeno." #: src/interp/alloc.c:907 #, c-format msgid "%s: the arg #%s must be a string." msgstr "%s: la opcio #%s devas esti signoæeno." #: src/interp/alloc.c:908 #, c-format msgid "%s: null arg not permissible." msgstr "%s: nula opcio estas malpermesita." #: src/interp/alloc.c:909 #, c-format msgid "%s: the arg must be a filename." msgstr "%s: la opcio devas esti dosiernomo." #: src/interp/alloc.c:910 #, c-format msgid "%s: the arg must be a node or string." msgstr "%s: la opcio devas esti nodo aý signoæeno." #: src/interp/alloc.c:911 #, c-format msgid "%s: the arg must be a person." msgstr "%s: la opcio devas esti homo." #: src/interp/alloc.c:912 #, c-format msgid "%s: the arg #%s must be a person." msgstr "%s: la opcio #%s devas esti homo." #: src/interp/alloc.c:913 #, c-format msgid "%s: the arg must be a family." msgstr "%s: la opcio devas esti familio." #: src/interp/alloc.c:914 #, c-format msgid "%s: the arg #%s must be a family." msgstr "%s: la opcio #%s devas esti familio." #: src/interp/alloc.c:915 #, c-format msgid "%s: the arg #%s must be a record." msgstr "%s: la opcio #%s devas esti rikordo." #: src/interp/alloc.c:916 #, c-format msgid "%s: the arg must be a node." msgstr "%s: la opcio devas esti nodo." #: src/interp/alloc.c:917 #, c-format msgid "%s: the arg #%s must be a node." msgstr "%s: la opcio #%s devas esti nodo." #: src/interp/alloc.c:918 #, c-format msgid "%s: the arg must be a variable." msgstr "%s: la opcio devas esti variablo." #: src/interp/alloc.c:919 #, c-format msgid "%s: the arg #%s must be a variable." msgstr "%s: la opcio #%s devas esti variablo." #: src/interp/alloc.c:920 #, c-format msgid "%s: the arg #%s must be a boolean." msgstr "%s: la opcio #%s devas esti logika¼o." #: src/interp/alloc.c:921 #, c-format msgid "%s: the arg must be a list." msgstr "%s: la opcio devas esti listo." #: src/interp/alloc.c:922 #, c-format msgid "%s: the arg #%s must be a list." msgstr "%s: la opcio #%s devas esti listo." #: src/interp/alloc.c:923 #, c-format msgid "%s: the arg #%s must be a table." msgstr "%s: la opcio #%s devas esti tabelo." #: src/interp/alloc.c:924 #, c-format msgid "%s: the arg must be a set." msgstr "%s: la opcio devas esti aro." #: src/interp/alloc.c:925 #, c-format msgid "%s: the arg #%s must be a set." msgstr "%s: la opcio #%s devas esti aro." #: src/interp/alloc.c:926 #, c-format msgid "%s: Bad arguments" msgstr "%s: Maløustaj opcioj." #: src/interp/alloc.c:927 #, c-format msgid "%s: the arg had a major error." msgstr "%s: la opcio igis gravan eraron." #: src/interp/alloc.c:928 #, c-format msgid "%s: the arg #%s had a major error." msgstr "%s: la opcio #%s igis gravan eraron." #: src/interp/alloc.c:929 #, fuzzy, c-format msgid "%s: the arg #%s would cause an arithmetic exception." msgstr "%s: la opcio #%s devas esti entjero." #: src/interp/builtin.c:111 msgid "Enter integer for program" msgstr "Enmetu entjeron por programo" #: src/interp/builtin.c:181 msgid "Identify person for program:" msgstr "Indiku homon por programo:" #: src/interp/builtin.c:206 msgid "Enter a spouse from family." msgstr "Enmetu geedzon el familio." #: src/interp/builtin.c:207 msgid "Enter a sibling from family." msgstr "Enmetu gefraton el familio." #: src/interp/builtin.c:240 msgid "Identify list of persons for program:" msgstr "Indiku liston da homoj por programo." #: src/interp/builtin.c:329 msgid "name: person does not have a name" msgstr "nomo: homo ne havas nomon" #: src/interp/builtin.c:385 msgid "fullname: person does not have a name" msgstr "plenanomo: homo ne havas nomon" #: src/interp/builtin.c:412 msgid "surname: person does not have a name" msgstr "familnomo: homo ne havas nomon" #: src/interp/builtin.c:437 msgid "soundex: person does not have a name" msgstr "sonsimilado: homo ne havas nomon" #: src/interp/builtin.c:500 #, c-format msgid "Bad escape code at offset %d in bytecode string <%s>" msgstr "Maløusta eskapsigna kodo æe deþovo %d en bitokkoda æeno <%s>" #: src/interp/builtin.c:643 msgid "(givens) person does not have a name" msgstr "(dona¼oj) homo ne havas nomon" #: src/interp/builtin.c:670 #, c-format msgid "set(%s, ) is invalid" msgstr "aro(%s, ) estas malvalida" #: src/interp/builtin.c:1191 msgid "first" msgstr "unua" #: src/interp/builtin.c:1191 msgid "second" msgstr "dua" #: src/interp/builtin.c:1191 msgid "third" msgstr "tria" #: src/interp/builtin.c:1191 msgid "fourth" msgstr "kvara" #: src/interp/builtin.c:1191 msgid "fifth" msgstr "kvina" #: src/interp/builtin.c:1192 msgid "sixth" msgstr "sesa" #: src/interp/builtin.c:1192 msgid "seventh" msgstr "sepa" #: src/interp/builtin.c:1192 msgid "eighth" msgstr "oka" #: src/interp/builtin.c:1192 msgid "ninth" msgstr "naýa" #: src/interp/builtin.c:1192 msgid "tenth" msgstr "deka" #: src/interp/builtin.c:1193 msgid "eleventh" msgstr "dekunua" #: src/interp/builtin.c:1193 msgid "twelfth" msgstr "dekdua" #: src/interp/builtin.c:1210 #, fuzzy, c-format msgid "%ldth" msgstr "%da" #: src/interp/builtin.c:1220 msgid "zero" msgstr "nulo" #: src/interp/builtin.c:1220 msgid "one" msgstr "unu" #: src/interp/builtin.c:1220 msgid "two" msgstr "du" #: src/interp/builtin.c:1220 msgid "three" msgstr "tri" #: src/interp/builtin.c:1220 msgid "four" msgstr "kvar" #: src/interp/builtin.c:1220 msgid "five" msgstr "kvin" #: src/interp/builtin.c:1221 msgid "six" msgstr "ses" #: src/interp/builtin.c:1221 msgid "seven" msgstr "sep" #: src/interp/builtin.c:1221 msgid "eight" msgstr "ok" #: src/interp/builtin.c:1221 msgid "nine" msgstr "naý" #: src/interp/builtin.c:1221 msgid "ten" msgstr "dek" #: src/interp/builtin.c:1222 msgid "eleven" msgstr "dekunu" #: src/interp/builtin.c:1222 msgid "twelve" msgstr "dekdu" #: src/interp/builtin.c:2173 msgid "the arg to empty is not a list, table or set" msgstr "la opcio por malplenigo ne estas listo, tabelo, aý aro" #: src/interp/builtin.c:2283 msgid "the arg to length is not a list, table or set" msgstr "la opcio por grandeco ne estas listo, tabelo, aý aro" #: src/interp/builtin.c:2470 msgid "He" msgstr "Li" #: src/interp/builtin.c:2470 msgid "he" msgstr "li" #: src/interp/builtin.c:2470 msgid "His" msgstr "Lia" #: src/interp/builtin.c:2470 msgid "his" msgstr "lia" #: src/interp/builtin.c:2470 msgid "him" msgstr "lin" #: src/interp/builtin.c:2472 msgid "She" msgstr "Þi" #: src/interp/builtin.c:2472 msgid "she" msgstr "þi" #: src/interp/builtin.c:2472 msgid "Her" msgstr "Þia" #: src/interp/builtin.c:2472 msgid "her" msgstr "þia" #: src/interp/builtin.c:2472 msgid "her_" msgstr "þia_" #: src/interp/builtin.c:2850 msgid "(trimname) person does not have a name" msgstr "(tondunomo) homo ne havas nomon" #: src/interp/builtin.c:2940 msgid "Sunday" msgstr "" #: src/interp/builtin.c:2940 msgid "Monday" msgstr "" #: src/interp/builtin.c:2940 msgid "Tuesday" msgstr "" #: src/interp/builtin.c:2941 msgid "Wednesday" msgstr "" #: src/interp/builtin.c:2941 msgid "Thursday" msgstr "" #: src/interp/builtin.c:2941 msgid "Friday" msgstr "" #: src/interp/builtin.c:2941 msgid "Saturday" msgstr "" #: src/interp/eval.c:244 #, fuzzy, c-format msgid "Undefined func: %s" msgstr "Maldifinita proc: %s" #: src/interp/eval.c:246 #, fuzzy, c-format msgid "Ambiguous call to func: %s" msgstr "Dubasenca voko al proc: %s" #: src/interp/interp.c:247 #, c-format msgid "Report not found: %s " msgstr "Raporto ne trovita: %s" #: src/interp/interp.c:258 #, c-format msgid "Error: file <%s> not found" msgstr "Eraro: dosiero <%s> ne trovita" #: src/interp/interp.c:316 #, fuzzy msgid "Program contains errors.\n" msgstr "enhavas erarojn.\n" #: src/interp/interp.c:323 #, fuzzy msgid "Program needs a starting procedure.\n" msgstr "bezonas komencan proceduron.\n" #: src/interp/interp.c:340 #, c-format msgid "Proc %s must be called with %d (not %d) parameters." msgstr "Proc %s devas esti vokita kun %d (ne %d) parametroj." #: src/interp/interp.c:355 #, fuzzy msgid "Program is running..." msgstr "rulas..." #: src/interp/interp.c:410 #, fuzzy msgid "Program was run successfully.\n" msgstr "rulis sukcese.\n" #: src/interp/interp.c:414 #, fuzzy msgid "Program was cancelled.\n" msgstr "æesiøis.\n" #: src/interp/interp.c:416 #, fuzzy msgid "Program was not run because of errors.\n" msgstr "ne rulis pro eraroj.\n" #: src/interp/interp.c:506 #, c-format msgid "Error: file <%s> not found: %s\n" msgstr "Eraro: dosiero <%s> ne trovita: %s\n" #: src/interp/interp.c:538 #, c-format msgid "" "\n" "Report duration %s (ui duration %s)\n" msgstr "" "\n" "Raporta daýro %s (ui daýro %s)\n" #: src/interp/interp.c:610 #, c-format msgid "identifier: %s should be a string\n" msgstr "identigilo: %s devus esti signoæeno\n" #: src/interp/interp.c:1778 #, c-format msgid "Undefined proc: %s" msgstr "Maldifinita proc: %s" #: src/interp/interp.c:1780 #, c-format msgid "Ambiguous call to proc: %s" msgstr "Dubasenca voko al proc: %s" #: src/interp/interp.c:2017 #, c-format msgid "Duplicate proc %s (lines %d and %d) in report: %s" msgstr "Multoble difinita proc %s (linioj %d kaj %d) en raporto: %s" #: src/interp/interp.c:2047 #, c-format msgid "Duplicate func %s (lines %d and %d) in report: %s" msgstr "Multoble difinita funk %s (linioj %d kaj %d) en raporto: %s" #: src/interp/interp.c:2110 msgid "This report requires a newer program to run\n" msgstr "Æi tiu raporto bezonas pli novan programon por ruli\n" #: src/interp/interp.c:2166 #, c-format msgid "Program forgot to unlock %d record" msgid_plural "Program forgot to unlock %d records" msgstr[0] "" msgstr[1] "" #: src/interp/intrpseq.c:303 msgid "missing or incorrect value for sort" msgstr "" #: src/interp/lex.c:219 #, c-format msgid "" "String constant overflowing internal buffer tokbuf len=%d, file: %s, start " "line: %ld" msgstr "" #: src/interp/more.c:648 msgid "Please choose from the following list." msgstr "Bonvole elektu ion el la jena listo." #: src/interp/more.c:685 msgid "Illegal type found in list in menuchoose" msgstr "Kontraýleøa tipo trovita en listo en menuelektu" #: src/interp/more.c:976 msgid "error evaluating arg to lock" msgstr "" #: src/interp/more.c:982 msgid "null arg in lock" msgstr "" #: src/interp/more.c:993 msgid "node passed to lock must be inside a record" msgstr "" #: src/interp/more.c:999 #, fuzzy msgid "the arg to lock must be a record or node" msgstr "la opcio por þlosu devas esti homo aý familio" #: src/interp/more.c:1007 msgid "Error: there are 999,999 locks on arg to lock" msgstr "" #: src/interp/more.c:1027 msgid "error evaluating arg to unlock" msgstr "" #: src/interp/more.c:1033 msgid "null arg in unlock" msgstr "" #: src/interp/more.c:1044 #, fuzzy msgid "node passed to unlock must be inside a record" msgstr "la opcio por malþlosu devas esti homo aý familio" #: src/interp/more.c:1050 #, fuzzy msgid "the arg to unlock must be a record or node" msgstr "la opcio por malþlosu devas esti homo aý familio" #: src/interp/pvalalloc.c:295 #, c-format msgid "PVALUE memory leak report:" msgstr "" #: src/interp/pvalmath.c:70 #, c-format msgid "Nonnumeric type to operation %s: %s" msgstr "" #: src/interp/pvalmath.c:85 #, fuzzy, c-format msgid "Illegal value to operation %s: %s" msgstr "kontraýleøa voko al pos." #: src/interp/pvalmath.c:411 #, c-format msgid "%s: not compatible numeric types: %s and %s" msgstr "" #: src/interp/pvalue.c:810 #, c-format msgid "%s: Incomparable types: %s and %s" msgstr "" #: src/interp/pvalue.c:907 msgid "NOT PVALUE: NULL!" msgstr "" #: src/interp/pvalue.c:911 #, c-format msgid "NOT PVALUE: invalid type=%d)!" msgstr "" #: src/interp/pvalue.c:949 #, fuzzy, c-format msgid "%d item" msgid_plural "%d items" msgstr[0] "%d riparita" msgstr[1] "%d riparitaj" #: src/interp/pvalue.c:956 #, fuzzy, c-format msgid "%d entry" msgid_plural "%d entries" msgstr[0] "%d eraro" msgstr[1] "%d eraroj" #: src/interp/pvalue.c:963 #, fuzzy, c-format msgid "%d record" msgid_plural "%d records" msgstr[0] "%d eraro" msgstr[1] "%d eraroj" #: src/interp/pvalue.c:970 #, fuzzy, c-format msgid "%d element" msgid_plural "%d elements" msgstr[0] "dekunua" msgstr[1] "dekunua" #: src/interp/progerr.c:125 msgid "Enter d for debugger, q to quit" msgstr "Enmetu d por erarseræilo, q por eliro" #: src/interp/progerr.c:140 #, fuzzy, c-format msgid "Display local (%d var)" msgid_plural "Display locals (%d vars)" msgstr[0] "Montrigu loka¼ojn (%d)" msgstr[1] "Montrigu loka¼ojn (%d)" #: src/interp/progerr.c:146 #, fuzzy, c-format msgid "Display global (%d var)" msgid_plural "Display globals (%d vars)" msgstr[0] "Montrigu malloka¼ojn (%d)" msgstr[1] "Montrigu malloka¼ojn (%d)" #: src/interp/progerr.c:151 #, c-format msgid "Call stack has %d higher level" msgid_plural "Call stack has %d higher levels" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:154 #, fuzzy msgid " Go up one level" msgstr "Elstakigu unu nivelon" #: src/interp/progerr.c:160 #, c-format msgid "Call stack has %d lower level" msgid_plural "Call stack has %d lower levels" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:164 #, fuzzy msgid " Go down one level" msgstr "Elstakigu unu nivelon" #: src/interp/progerr.c:169 msgid "Quit debugger" msgstr "Eliru erarseræilon" #: src/interp/progerr.c:171 msgid "Report debugger" msgstr "Raporta erarseræilo" #: src/interp/progerr.c:175 msgid "Local variables" msgstr "Lokaj variabloj" #: src/interp/progerr.c:178 msgid "Global variables" msgstr "Mallokaj variabloj" #: src/interp/progerr.c:338 msgid "Report cancelled" msgstr "Raporto æesiøis" #: src/interp/progerr.c:346 msgid "Report file: " msgstr "Raporta dosiero: " #: src/interp/progerr.c:355 #, c-format msgid "Parsing Error at line %d: " msgstr "Sintaksanaliza Eraro æe linio %d: " #: src/interp/progerr.c:357 #, c-format msgid "Runtime Error at line %d: " msgstr "Dumrulada Eraro æe linio %d: " #: src/interp/progerr.c:360 msgid "Aborting: " msgstr "Misfinigas: " #: src/interp/rassa.c:242 #, c-format msgid "Could not open file %s" msgstr "Ne povis malfermi dosieron %s" #: src/interp/rassa.c:271 msgid "Report stopping due to error opening output file" msgstr "Raporto haltas pro eraro dum malfermado de celdosiero" #: src/interp/rassa.c:273 msgid "Report stopping due to lack of output file" msgstr "Raporto haltas pro manko de celdosiero" #: src/interp/rassa.c:330 msgid "illegal call to pos." msgstr "kontraýleøa voko al pos." #: src/interp/rptsort.c:104 msgid "First argument to (r)sort must be list or array" msgstr "Unua opcio por (r)ordigu devas esti listo aý vektoro" #: src/interp/rptsort.c:117 src/interp/rptsort.c:128 msgid "Arguments to (r)sort must be of same size" msgstr "Opcioj por (r)ordigu devas havi la saman grandecon" #: src/interp/rptsort.c:137 msgid "Second argument to (r)sort must be list or array" msgstr "Dua opcio por (r)ordigu devas esti listo aý vektoro" #: src/liflines/add.c:68 #, c-format msgid "There was %d unresolved reference." msgid_plural "There were %d unresolved references." msgstr[0] "Ekzistis %d malplenumita referenco." msgstr[1] "Ekzistis %d malplenumitaj referencoj." #: src/liflines/brwsmenu.c:25 msgid "? Other menu choices" msgstr "? Aliaj menuelektoj" #: src/liflines/brwsmenu.c:69 msgid "e Edit the person" msgstr "e Redaktu la homon" #: src/liflines/brwsmenu.c:70 msgid "e Edit the family" msgstr "e Redaktu la familion" #: src/liflines/brwsmenu.c:71 msgid "e Edit record" msgstr "e Redaktu rikordon" #: src/liflines/brwsmenu.c:72 msgid "e Edit top person" msgstr "e Redaktu plej supran homon" #: src/liflines/brwsmenu.c:73 msgid "e Edit top family" msgstr "e Redaktu plej supran familion" #: src/liflines/brwsmenu.c:74 msgid "f Browse to father" msgstr "f Krozu al patro" #: src/liflines/brwsmenu.c:75 msgid "f Browse top father" msgstr "f Krozu plej supran patron" #: src/liflines/brwsmenu.c:76 msgid "m Browse to mother" msgstr "m Krozu al patrino" #: src/liflines/brwsmenu.c:77 msgid "m Browse top mother" msgstr "m Krozu plej supran patrinon" #: src/liflines/brwsmenu.c:78 msgid "s Browse to spouse/s" msgstr "s Krozu al geedzoj" #: src/liflines/brwsmenu.c:79 msgid "s Browse top spouse/s" msgstr "s Krozu plej suprajn geedzojn" #: src/liflines/brwsmenu.c:80 msgid "c Browse to children" msgstr "c Krozu al infanoj" #: src/liflines/brwsmenu.c:81 msgid "c Browse top children" msgstr "c Krozu plej suprajn infanojn" #: src/liflines/brwsmenu.c:82 msgid "o Browse to older sib" msgstr "o Krozu al pli maljuna gefrato" #: src/liflines/brwsmenu.c:83 msgid "y Browse to younger sib" msgstr "y Krozu al pli juna gefrato" #: src/liflines/brwsmenu.c:84 msgid "g Browse to family" msgstr "g Krozu al familio" #: src/liflines/brwsmenu.c:85 msgid "u Browse to parents" msgstr "u Krozu al gepatroj" #: src/liflines/brwsmenu.c:86 msgid "b Browse to persons" msgstr "b Krozu al homoj" #: src/liflines/brwsmenu.c:87 msgid "t Browse to top" msgstr "t Krozu al supro" #: src/liflines/brwsmenu.c:88 msgid "b Browse to bottom" msgstr "b Krozu al fundo" #: src/liflines/brwsmenu.c:89 msgid "h Add as spouse" msgstr "h Aldonu kiel geedzo" #: src/liflines/brwsmenu.c:90 msgid "i Add as child" msgstr "i Aldonu kiel infano" #: src/liflines/brwsmenu.c:91 msgid "s Add spouse to family" msgstr "s Aldonu geedzon al familio" #: src/liflines/brwsmenu.c:92 msgid "a Add child to family" msgstr "a Aldonu infanon al familio" #: src/liflines/brwsmenu.c:93 msgid "a Add family" msgstr "a Aldonu familion" #: src/liflines/brwsmenu.c:94 msgid "x Swap two families" msgstr "x Interþanøu du familiojn" #: src/liflines/brwsmenu.c:95 msgid "x Swap two children" msgstr "x Interþanøu du infanojn" #: src/liflines/brwsmenu.c:97 #, no-c-format msgid "%c Reorder child" msgstr "%c Reordigu infanon" #: src/liflines/brwsmenu.c:98 msgid "x Switch top/bottom" msgstr "x Baskulu supron/fundon" #: src/liflines/brwsmenu.c:99 msgid "n Create new person" msgstr "n Kreu novan homon" #: src/liflines/brwsmenu.c:100 msgid "a Create new family" msgstr "a Kreu novan familion" #: src/liflines/brwsmenu.c:101 msgid "tt Enter tandem mode" msgstr "tt Eniru tandeman modalon" #: src/liflines/brwsmenu.c:102 msgid "tt Enter family tandem" msgstr "tt Eniru familian tandemon" #: src/liflines/brwsmenu.c:103 msgid "zi Browse to indi" msgstr "zi Krozu al indi" #: src/liflines/brwsmenu.c:104 msgid "zz Browse to any" msgstr "zz Krozu al iun ajn" #: src/liflines/brwsmenu.c:105 msgid "r Remove as spouse" msgstr "r Forigu kiel geedzo" #: src/liflines/brwsmenu.c:106 msgid "d Remove as child" msgstr "d Forigu kiel infano" #: src/liflines/brwsmenu.c:107 msgid "r Remove spouse from" msgstr "r Forigu geedzon el" #: src/liflines/brwsmenu.c:108 msgid "d Remove child from" msgstr "d Forigu infanon el" #: src/liflines/brwsmenu.c:109 msgid "( Scroll up" msgstr "( Rulumu supren" #: src/liflines/brwsmenu.c:110 msgid ") Scroll down" msgstr ") Rulumu suben" #: src/liflines/brwsmenu.c:111 msgid "] Increase tree depth" msgstr "] Pligrandigu arban profundecon" #: src/liflines/brwsmenu.c:112 msgid "[ Decrease tree depth" msgstr "[ Malpligrandigu arban profundecon" #: src/liflines/brwsmenu.c:113 msgid "(t Scroll top up" msgstr "(t Rulumu supron supren" #: src/liflines/brwsmenu.c:114 msgid ")t Scroll top down" msgstr ")t Rulumu supron suben" #: src/liflines/brwsmenu.c:115 msgid "(b Scroll bottom up" msgstr "(b Rulumu fundon supren" #: src/liflines/brwsmenu.c:116 msgid ")b Scroll bottom down" msgstr ")b Rulumu fundon suben" #: src/liflines/brwsmenu.c:117 msgid "(( Scroll both up" msgstr "(( Rulumu ambaý supren" #: src/liflines/brwsmenu.c:118 msgid ")) Scroll both down" msgstr ")) Rulumu ambaý suben" #: src/liflines/brwsmenu.c:119 msgid "# Toggle childnos" msgstr "# Baskulu infannumerojn" #: src/liflines/brwsmenu.c:120 msgid "!g GEDCOM mode" msgstr "!g GEDCOM modalo" #: src/liflines/brwsmenu.c:121 msgid "!x GEDCOMX mode" msgstr "!x GEDCOMX modalo" #: src/liflines/brwsmenu.c:122 msgid "!t GEDCOMT mode" msgstr "!t GEDCOMT modalo" #: src/liflines/brwsmenu.c:123 msgid "!a Ancestors mode" msgstr "!a Prapatra modalo" #: src/liflines/brwsmenu.c:124 msgid "!d Descendants mode" msgstr "!d Posteula modalo" #: src/liflines/brwsmenu.c:125 msgid "!n Normal mode" msgstr "!n Normala modalo" #: src/liflines/brwsmenu.c:126 msgid "p Pedigree mode" msgstr "p Genealogia modalo" #: src/liflines/brwsmenu.c:127 msgid "!! Cycle mode" msgstr "!! Ciklu modalon" #: src/liflines/brwsmenu.c:129 msgid "(1-9) Browse to child" msgstr "(1-9) Krozu al infano" #: src/liflines/brwsmenu.c:130 msgid "y Turn on sync" msgstr "y Þaltu sinkronigon" #: src/liflines/brwsmenu.c:131 msgid "A Advanced view" msgstr "A Altnivela vida¼o" #: src/liflines/brwsmenu.c:132 msgid "tc Tandem to children" msgstr "tc Tandemo al infanoj" #: src/liflines/brwsmenu.c:133 msgid "tf Tandem to father/s" msgstr "tf Tandemo al patro(j)" #: src/liflines/brwsmenu.c:134 msgid "tg Tandem to family/s" msgstr "tg Tandemo al familio(j)" #: src/liflines/brwsmenu.c:135 msgid "f Browse to fathers" msgstr "f Krozu al patroj" #: src/liflines/brwsmenu.c:136 msgid "m Browse to mothers" msgstr "m Krozu al patrinoj" #: src/liflines/brwsmenu.c:137 msgid "tm Tandem to mother/s" msgstr "tm Tandemo al patrino(j)" #: src/liflines/brwsmenu.c:138 msgid "ts Tandem to spouse/s" msgstr "ts Tandemo al geedzo(j)" #: src/liflines/brwsmenu.c:139 msgid "tu Tandem to parents" msgstr "tu Tandemo al gepatroj" #: src/liflines/brwsmenu.c:140 msgid "< Enlarge menu area" msgstr "< Pligrandigu menuan areon" #: src/liflines/brwsmenu.c:141 msgid "> Shrink menu area" msgstr "> Malpligrandigu menuan areon" #: src/liflines/brwsmenu.c:142 msgid "M> More menu cols" msgstr "M> Pli da menuaj kolumnoj" #: src/liflines/brwsmenu.c:143 msgid "M< Less menu cols" msgstr "M< Malpli da menuaj kolumnoj" #: src/liflines/brwsmenu.c:144 msgid "+ Next in db" msgstr "+ La sekvan en db" #: src/liflines/brwsmenu.c:145 msgid "- Prev in db" msgstr "- La lastan en db" #: src/liflines/brwsmenu.c:146 msgid "d Copy top to bottom" msgstr "d Kopiu supron al fundo" #: src/liflines/brwsmenu.c:147 msgid "j Merge bottom to top" msgstr "j Kunfandigu fundon al supro" #: src/liflines/brwsmenu.c:148 src/liflines/listui.c:842 msgid "j Move down list" msgstr "j Iru suben en listo" #: src/liflines/brwsmenu.c:149 src/liflines/listui.c:843 msgid "k Move up list" msgstr "k Iru supren en listo" #: src/liflines/brwsmenu.c:150 src/liflines/listui.c:844 msgid "e Edit this person" msgstr "e Redaktu æi tiun homon" #: src/liflines/brwsmenu.c:151 src/liflines/listui.c:845 msgid "i Browse this person" msgstr "i Krozu æi tiun homon" #: src/liflines/brwsmenu.c:152 src/liflines/listui.c:846 msgid "m Mark this person" msgstr "m Marku æi tiun homon" #: src/liflines/brwsmenu.c:153 msgid "d Delete from list" msgstr "d Forstreku el listo" #: src/liflines/brwsmenu.c:154 src/liflines/listui.c:849 msgid "n Name this list" msgstr "n Nomigu æi tiun liston" #: src/liflines/brwsmenu.c:155 src/liflines/listui.c:850 msgid "b Browse new persons" msgstr "b Krozu novajn homojn" #: src/liflines/brwsmenu.c:156 src/liflines/listui.c:851 msgid "a Add to this list" msgstr "a Aldonu al æi tiu listo" #: src/liflines/brwsmenu.c:157 src/liflines/listui.c:852 msgid "x Swap mark/current" msgstr "x Interþanøu markon/nunon" #: src/liflines/brwsmenu.c:158 msgid "$s List sources" msgstr "$s Montru fontojn" #: src/liflines/brwsmenu.c:159 msgid "$n List notes" msgstr "$n Montru notojn" #: src/liflines/brwsmenu.c:160 msgid "$$ List references" msgstr "$$ Montru referencojn" #: src/liflines/brwsmenu.c:161 msgid "^b History/back" msgstr "^b Historio/malantaýen" #: src/liflines/brwsmenu.c:162 msgid "^f History/fwd" msgstr "^f Historio/antaýen" #: src/liflines/brwsmenu.c:163 msgid "^l History list" msgstr "^l Historion montru" #: src/liflines/brwsmenu.c:164 msgid "^c Clear history" msgstr "^c Malplenigu historion" #: src/liflines/brwsmenu.c:165 msgid "^xb ChngHist/back" msgstr "^xb ÞøHist/malantaýen" #: src/liflines/brwsmenu.c:166 msgid "^xf ChngHist/fwd" msgstr "^xf ÞøHist/antaýen" #: src/liflines/brwsmenu.c:167 msgid "^xl ChngHist list" msgstr "^xl ÞøHist-on montru" #: src/liflines/brwsmenu.c:168 msgid "^xc Clear ChngHist" msgstr "^xc Malplenigu ÞøHist-on" #: src/liflines/brwsmenu.c:170 #, no-c-format msgid "%s Add source" msgstr "%s Aldonu fonton" #: src/liflines/brwsmenu.c:172 #, no-c-format msgid "%e Add event" msgstr "%e Aldonu okazon" #: src/liflines/brwsmenu.c:174 #, no-c-format msgid "%o Add other" msgstr "%o Aldonu alian" #: src/liflines/brwsmenu.c:177 msgid "B Browse new family" msgstr "B Krozu novan familion" #: src/liflines/brwsmenu.c:490 msgid "Missing title" msgstr "Mankanta titolo" #: src/liflines/delete.c:85 #, c-format msgid "%d spouse" msgid_plural "%d spouses" msgstr[0] "%d geedzo" msgstr[1] "%d geedzoj" #: src/liflines/delete.c:88 #, c-format msgid "%d child" msgid_plural "%d children" msgstr[0] "%d infano" msgstr[1] "%d infanoj" #: src/liflines/error.c:63 src/tools/dbverify.c:1504 msgid "Fatal Error" msgstr "Neriparebla Eraro" #: src/liflines/error.c:66 msgid "FATAL ERROR" msgstr "NERIPAREBLA ERARO" #: src/liflines/error.c:70 #, c-format msgid " in file <%s> at line %d\n" msgstr " en dosiero <%s> sur linio %d\n" #: src/liflines/error.c:72 src/tools/dbverify.c:1515 msgid "ASSERT failure" msgstr "ASERTA fiasko" #: src/liflines/import.c:169 msgid "This is not a lineage linked GEDCOM file." msgstr "Æi tiu ne estas devenligita GEDCOM dosiero." #: src/liflines/import.c:170 msgid "Proceed anyway?" msgstr "Almenaý daýru?" #: src/liflines/import.c:186 msgid "No current internal codeset, so no codeset conversion can be done" msgstr "Ne nuna interna kodpaøo, do ne kodpaøa þanøiøo eblas" #: src/liflines/import.c:187 msgid "Proceed without codeset conversion?" msgstr "Daýru sen kodpaøa þanøiøo?" #: src/liflines/import.c:204 #, c-format msgid "%d warning during import" msgid_plural "%d warnings during import" msgstr[0] "%d averto dum importado" msgstr[1] "%d avertoj dum importado" #: src/liflines/import.c:220 #, c-format msgid "Cannot convert codeset (from <%s> to <%s>)" msgstr "Ne povas þanøigi kodpaøon (de <%s> al <%s>)" #: src/liflines/import.c:223 msgid "Enter codeset to assume (* for none)" msgstr "Enmetu kodpaøon por premiso (* por neniu)" #: src/liflines/import.c:246 #, fuzzy, c-format msgid "Using original keys, %d deleted record will be in the database." msgid_plural "Using original keys, %d deleted records will be in the database." msgstr[0] "" "Uzante originalajn þlosilojn, %d forstrekitaj rikordoj ekzistos en la " "datumbazo." msgstr[1] "" "Uzante originalajn þlosilojn, %d forstrekitaj rikordoj ekzistos en la " "datumbazo." #: src/liflines/lbrowse.c:219 msgid "Tandom browse only compatible with persons or families." msgstr "" #: src/liflines/lines_usage.c:21 #, c-format msgid "%s invokes the Lifelines report execution program without GUI." msgstr "" #: src/liflines/lines_usage.c:23 #, c-format msgid "%s invokes the Lifelines GUI." msgstr "" #: src/liflines/lines_usage.c:26 #, c-format msgid "" "Lifelines is a program to manipulate genealogical information\n" "in lineage-linked GEDCOM format. It has a curses interface and a\n" "built-in interpreter for its own genealogical report language.\n" "\n" "It has its own databases, and records are edited directly in GEDCOM\n" "(with an editor of the user's choice). Records store\n" "information about people, families, sources, events, and\n" "other types of data (such as notes). Lifelines includes a\n" "custom report language and comes with a collection of reports." msgstr "" #: src/liflines/lines_usage.c:36 #, c-format msgid "Usage: %s [OPTIONS] [database]" msgstr "" #: src/liflines/lines_usage.c:38 src/tools/btedit.c:238 #, c-format msgid "Options:" msgstr "" #: src/liflines/lines_usage.c:40 #, c-format msgid "-C[FILE]" msgstr "" #: src/liflines/lines_usage.c:42 #, fuzzy, c-format msgid "Specify configuration file location" msgstr "Maløuste formita konfigura¼a dosiero: linio tro longas." #: src/liflines/lines_usage.c:44 #, c-format msgid "Finnish option (if compiled to allow Finnish option)" msgstr "" #: src/liflines/lines_usage.c:46 #, c-format msgid "-I[KEY=VALUE]" msgstr "" #: src/liflines/lines_usage.c:48 #, c-format msgid "Specify a user property (e.g. -ILLEDITOR=gvim)" msgstr "" #: src/liflines/lines_usage.c:50 #, c-format msgid "log dynamic memory operation (for debugging)" msgstr "" #: src/liflines/lines_usage.c:52 #, c-format msgid "-c[TYPE][DIRECT,INDIRECT]" msgstr "" #: src/liflines/lines_usage.c:54 #, c-format msgid "" "supply cache values (eg, -ci400,4000f400,4000 sets direct indi\n" "\t\t& fam caches to 400, and indirect indi & fam caches to 4000)" msgstr "" #: src/liflines/lines_usage.c:57 #, c-format msgid "debug mode (disable signal trapping)" msgstr "" #: src/liflines/lines_usage.c:59 #, c-format msgid "force open (for recovery from errors or power failure)" msgstr "" #: src/liflines/lines_usage.c:61 #, c-format msgid "open database with immutable access (for use on read-only media)" msgstr "" #: src/liflines/lines_usage.c:63 #, c-format msgid "always show keys (even if REFN available)" msgstr "" #: src/liflines/lines_usage.c:65 #, c-format msgid "unlock a database (for correct access on read-write media)" msgstr "" #: src/liflines/lines_usage.c:67 #, c-format msgid "lock a database (for use on read-only media)" msgstr "" #: src/liflines/lines_usage.c:69 #, c-format msgid "do not use traditional family rules" msgstr "" #: src/liflines/lines_usage.c:71 #, c-format msgid "Specify program output filename (eg, -o/tmp/mytests)" msgstr "" #: src/liflines/lines_usage.c:73 #, c-format msgid "" "open database with read-only access (prohibiting other\n" "\t\twrite access)" msgstr "" #: src/liflines/lines_usage.c:76 #, c-format msgid "trace function calls in report programs (for debugging)" msgstr "" #: src/liflines/lines_usage.c:78 #, c-format msgid "-u[HEIGHT,WIDTH]" msgstr "" #: src/liflines/lines_usage.c:80 #, c-format msgid "" "specify window size (eg, -u120,34 specifies 120 columns\n" "\t\tby 34 rows)" msgstr "" #: src/liflines/lines_usage.c:83 #, c-format msgid "display this help and exit" msgstr "" #: src/liflines/lines_usage.c:85 #, c-format msgid "open database with writeable access (this is the default)" msgstr "" #: src/liflines/lines_usage.c:89 #, c-format msgid "execute a single lifelines report program directly" msgstr "" #: src/liflines/lines_usage.c:91 #, c-format msgid "" "Use normal ASCII characters for drawing lines, instead of\n" "\t\tspecial VT100 terminal characters" msgstr "" #: src/liflines/lines_usage.c:94 #, c-format msgid "output version information and exit" msgstr "" #: src/liflines/lines_usage.c:96 src/tools/btedit.c:244 #, c-format msgid "Examples:" msgstr "" #: src/liflines/lines_usage.c:99 #, c-format msgid "%s myfamily -x eol" msgstr "" #: src/liflines/lines_usage.c:101 #, c-format msgid "Open the database 'myfamily' with Lifelines" msgstr "" #: src/liflines/lines_usage.c:103 #, c-format msgid "and run the eol.ll report" msgstr "" #: src/liflines/lines_usage.c:105 #, c-format msgid "%s -f myfamily -x eol" msgstr "" #: src/liflines/lines_usage.c:107 #, c-format msgid "Unlock database 'myfamily', after a power failure left the" msgstr "" #: src/liflines/lines_usage.c:109 #, c-format msgid "database locked and run 'eol.ll' report" msgstr "" #: src/liflines/lines_usage.c:112 #, fuzzy, c-format msgid "%s myfamily" msgstr "Malplena familio" #: src/liflines/lines_usage.c:114 #, c-format msgid "Open database 'myfamily' with Lifelines" msgstr "" #: src/liflines/lines_usage.c:116 #, fuzzy, c-format msgid "%s -f myfamily" msgstr "Malplena familio" #: src/liflines/lines_usage.c:118 #, c-format msgid "" "Unlock database 'myfamily', after a power failure left\n" "\t\tthe database locked" msgstr "" #: src/liflines/lines_usage.c:122 #, c-format msgid "REPORTING BUGS" msgstr "" #: src/liflines/lines_usage.c:124 src/tools/btedit.c:250 #, c-format msgid "Report bugs to lifelines.sourceforge.net" msgstr "" #: src/liflines/lines_usage.c:126 #, c-format msgid "COPYRIGHT" msgstr "" #: src/liflines/lines_usage.c:131 #, c-format msgid "SEE ALSO" msgstr "" #: src/liflines/listui.c:155 src/liflines/listui.c:252 msgid "Commands: j Move down k Move up i Select q Quit" msgstr "Komandoj: j Iru suben k Iru supren i Elektu q Eliru" #: src/liflines/listui.c:157 msgid "Commands: j Move down k Move up q Quit" msgstr "Komandoj: j Iru suben k Iru supren q Eliru" #: src/liflines/listui.c:249 msgid "Commands: j Move down k Move up d Delete i Select q Quit" msgstr "Komandoj: j Iru suben k Iru supren d Forigu i Elektu q Eliru" #: src/liflines/listui.c:431 msgid "--- CURRENT SELECTION ---" msgstr "--- NUNA ELEKTO ---" #: src/liflines/listui.c:434 src/liflines/listui.c:597 msgid "--- LIST ---" msgstr "--- LISTO ---" #: src/liflines/listui.c:628 msgid "-- CURRENT SELECTION --" msgstr "-- NUNA ELEKTO --" #: src/liflines/listui.c:840 msgid "Choose an operation:" msgstr "Elektu funkciadon:" #: src/liflines/listui.c:847 msgid "r Remove from list" msgstr "r Forigu el la listo" #: src/liflines/listui.c:848 msgid "t Enter tandem mode" msgstr "t Eniru tandeman modalon" #: src/liflines/loadsave.c:94 msgid "Person" msgid_plural "Persons" msgstr[0] "Homo" msgstr[1] "Homoj" #: src/liflines/loadsave.c:98 msgid "Family" msgid_plural "Families" msgstr[0] "Familio" msgstr[1] "Familioj" #: src/liflines/loadsave.c:102 msgid "Source" msgid_plural "Sources" msgstr[0] "Fonto" msgstr[1] "Fontoj" #: src/liflines/loadsave.c:106 msgid "Event" msgid_plural "Events" msgstr[0] "Okazo" msgstr[1] "Okazoj" #: src/liflines/loadsave.c:110 msgid "Other" msgid_plural "Others" msgstr[0] "Alio" msgstr[1] "Alioj" #: src/liflines/loadsave.c:160 msgid "Checking GEDCOM file for errors.\n" msgstr "Kontrolas GEDCOM dosieron por eraroj.\n" #: src/liflines/loadsave.c:163 msgid "Error" msgid_plural "Errors" msgstr[0] "Eraro" msgstr[1] "Eraroj" #: src/liflines/loadsave.c:169 msgid "Warning" msgid_plural "Warnings" msgstr[0] "Averto" msgstr[1] "Avertoj" #: src/liflines/loadsave.c:184 msgid "The database is read-only; loading has been canceled." msgstr "La datumbazo estas nurlegebla; þarøadon æesigis." #: src/liflines/loadsave.c:190 msgid "Adding unused keys as deleted keys..." msgstr "Aldonas maluzitajn þlosilojn kiel forstrekitaj þlosiloj..." #. TRANSLATORS: how long Import ran, and how much of that was UI delay #: src/liflines/loadsave.c:255 #, c-format msgid "Import time %s (ui %s)\n" msgstr "Importada daýro %s (ui %s)\n" #: src/liflines/loadsave.c:282 msgid "The database was not saved." msgstr "La datumbazo ne estas registrita." #: src/liflines/main.c:385 msgid "Warning: database codeset unspecified" msgstr "Averto: datumbaza kodpaøo ne estas indikita" #: src/liflines/main.c:387 msgid "Warning: not all conversions available" msgstr "Averto: ne æiuj þanøigoj estas haveblaj" #: src/liflines/menuset.c:155 #, c-format msgid "Menu (%s) choice sequence too long: %s" msgstr "Menuo (%s) elekta sinsekva¼o tro longas: %s" #: src/liflines/menuset.c:159 #, c-format msgid "Menu (%s) item lacked choice sequence: %s" msgstr "Menuero (%s) mankis elektan sinsekva¼on: %s" #: src/liflines/menuset.c:242 src/liflines/menuset.c:254 #, c-format msgid "In menu: %s" msgstr "En menuo: %s" #: src/liflines/menuset.c:244 #, c-format msgid "Duplicate hotkey for item: %s" msgstr "Multoble difinita klavkomando por ero: %s" #: src/liflines/menuset.c:247 #, c-format msgid "Clash with longer hotkey in item: %s" msgstr "Konflikto kun pli longa klavkomando en ero: %s" #: src/liflines/menuset.c:255 #, c-format msgid "Clash with shorter hotkey in item: %s" msgstr "Konflikto kun malpli longa klavkomando en ero: %s" #: src/liflines/merge.c:772 #, c-format msgid "Bad spouse tag: %s" msgstr "" #: src/liflines/merge.c:800 src/liflines/merge.c:919 #, c-format msgid "Mismatched lineage spouse links between %s and %s: %ld and %ld" msgstr "" #: src/liflines/merge.c:816 src/liflines/merge.c:935 #, c-format msgid "Bad child tag: %s" msgstr "" #: src/liflines/merge.c:844 src/liflines/merge.c:963 #, c-format msgid "Mismatched lineage child links between %s and %s: %ld and %ld" msgstr "" #: src/liflines/merge.c:882 src/liflines/merge.c:891 #, c-format msgid "Bad HUSB tag: %s" msgstr "" #: src/liflines/miscutls.c:51 msgid "Whose key value do you want?" msgstr "Kies þlosilvaloron vi deziras?" #: src/liflines/miscutls.c:67 msgid "Please enter person's internal key value." msgstr "Bonvole enmetu la internan þlosilvaloron de la homo:" #: src/liflines/miscutls.c:68 msgid "enter key:" msgstr "enmetu þlosilon:" #: src/liflines/miscutls.c:78 src/liflines/miscutls.c:82 #: src/liflines/miscutls.c:87 #, c-format msgid "No one in database has key value %s." msgstr "Neniu el la datumbazo havas la þlosilvaloron %s." #: src/liflines/scan.c:100 msgid "Enter pattern to match against single surname or given name." msgstr "" "Enmetu þablonon kontraý kiu kongrui unuopan familian nomon aý donitan nomon." #: src/liflines/scan.c:112 msgid "Enter pattern to match against full name." msgstr "Enmetu þablonon kontraý kiu kongrui plenan nomon." #: src/liflines/scan.c:128 src/liflines/scan.c:178 src/liflines/scan.c:201 msgid "pattern: " msgstr "þablono: " #: src/liflines/scan.c:151 src/liflines/scan.c:165 #, fuzzy msgid "Enter pattern to match against author." msgstr "Enmetu þablonon kontraý kiu kongrui refn." #: src/liflines/screen.c:317 #, c-format msgid "initscr failed" msgstr "" #: src/liflines/screen.c:334 #, fuzzy, c-format msgid "" "The requested window size (%ld,%ld) is too large for your terminal (%d,%d).\n" msgstr "" "La petita fenestra grandeco (%d,%d) tro grandas por via ekrano (%d,%d).\n" #: src/liflines/screen.c:342 #, fuzzy, c-format msgid "" "The requested window size (%ld,%ld) is too small for LifeLines (%d,%d).\n" msgstr "" "La petita fenestra grandeco (%d,%d) tro malgrandas por LifeLines (%d,%d).\n" #: src/liflines/screen.c:706 #, fuzzy msgid "Search results" msgstr "Ekzamenu rezultojn:" #: src/liflines/screen.c:813 #, c-format msgid "(pg %d/%d)" msgstr "(pø %d/%d)" #: src/liflines/screen.c:1431 msgid "No conversion" msgstr "Neniu þanøigo" #: src/liflines/screen.c:1517 msgid "Internal codeset" msgstr "Interna kodpaøo" #: src/liflines/screen.c:1520 #, fuzzy msgid "Internal UTF-8: Yes" msgstr "Interna kodpaøo" #: src/liflines/screen.c:1522 #, fuzzy msgid "Internal UTF-8: No" msgstr "Interna al Redaktila" #: src/liflines/screen.c:1526 msgid "Locales are enabled." msgstr "Loka¼aroj ebliøitaj" #: src/liflines/screen.c:1528 msgid "Locales are disabled." msgstr "Loka¼aroj malebliøitaj" #: src/liflines/screen.c:1531 msgid "NLS (National Language Support) is compiled in." msgstr "NLS (Nacia Lingva Subtenado) estas entradukigita" #: src/liflines/screen.c:1537 msgid "NLS (National Language Support) is not compiled in." msgstr "NLS (Nacia Lingva Subtenado) ne estas entradukigita" #: src/liflines/screen.c:1550 msgid "iconv (codeset conversion) is compiled in." msgstr "iconv (kodpaøa þanøigado) estas entradukigita" #: src/liflines/screen.c:1552 msgid "iconv (codeset conversion) is not compiled in." msgstr "iconv (kodpaøa þanøigado) ne estas entradukigita" #: src/liflines/screen.c:1554 #, c-format msgid "Startup collate locale: %s" msgstr "Komenca ordiza loka¼aro: %s" #: src/liflines/screen.c:1557 #, c-format msgid "Startup messages locale: %s" msgstr "Komenca mesaøa loka¼aro: %s" #: src/liflines/screen.c:1560 #, c-format msgid "Current collate locale: %s" msgstr "Nuna ordiza loka¼aro: %s" #: src/liflines/screen.c:1563 #, c-format msgid "Current messages locale: %s" msgstr "Nuna mesaøa loka¼aro: %s" #: src/liflines/screen.c:1566 #, c-format msgid "Collation routine: %s" msgstr "Ordizigada subprogramo: %s" #: src/liflines/screen.c:1570 #, c-format msgid "GUI codeset: %s" msgstr "GUI-a kodpaøo: %s" #: src/liflines/screen.c:1573 #, c-format msgid "GUI output codeset: %s" msgstr "GUI-a eliga kodpaøo: %s" #: src/liflines/screen.c:1575 #, c-format msgid "GUI input codeset: %s" msgstr "GUI-a eniga kodpaøo: %s" #: src/liflines/screen.c:1580 #, c-format msgid "editor codeset: %s" msgstr "redaktila kodpaøo: %s" #: src/liflines/screen.c:1583 #, c-format msgid "editor output codeset: %s" msgstr "redaktila eliga kodpaøo: %s" #: src/liflines/screen.c:1585 #, c-format msgid "editor input codeset: %s" msgstr "redaktila eniga kodpaøo: %s" #: src/liflines/screen.c:1590 #, c-format msgid "report codeset: %s" msgstr "raporta kodpaøo: %s" #: src/liflines/screen.c:1593 #, c-format msgid "report output codeset: %s" msgstr "raporta eliga kodpaøo: %s" #: src/liflines/screen.c:1595 #, c-format msgid "report input codeset: %s" msgstr "raporta eniga kodpaøo: %s" #: src/liflines/screen.c:1600 #, c-format msgid "GEDCOM codeset: %s" msgstr "GEDCOM-a kodpaøo: %s" #: src/liflines/screen.c:1603 #, c-format msgid "gedcom output codeset: %s" msgstr "gedcom-a eliga kodpaøo: %s" #: src/liflines/screen.c:1605 #, c-format msgid "gedcom input codeset: %s" msgstr "gedcom-a eniga kodpaøo: %s" #: src/liflines/screen.c:1613 msgid "UTF-8 charprops loaded" msgstr "" #: src/liflines/screen.c:1615 msgid "UTF-8 charprops not loaded" msgstr "" #: src/liflines/screen.c:1619 msgid "Codeset information" msgstr "Kodpaøa informo" #: src/liflines/screen.c:1636 #, c-format msgid "gettext dll: %s" msgstr "gettext (akirteksa¼a) dll: %s" #: src/liflines/screen.c:1640 #, c-format msgid "gettext dll version: %s" msgstr "gettext (akirteksa¼a) dll eldono: %s" #: src/liflines/screen.c:1645 msgid "gettext dll had no version" msgstr "gettext (akirteksa¼a) dll ne havis eldonon: %s" #: src/liflines/screen.c:1650 msgid "no gettext dll found" msgstr "trovis neniun gettext (akirteksa¼an) dll-on" #: src/liflines/screen.c:1659 #, c-format msgid "iconv dll: %s" msgstr "iconv dll: %s" #: src/liflines/screen.c:1663 #, c-format msgid "iconv dll version: %s" msgstr "iconv dll eldono: %s" #: src/liflines/screen.c:1668 msgid "iconv dll had no version" msgstr "iconv dll ne havis eldonon" #: src/liflines/screen.c:1673 msgid "no iconv dll found" msgstr "trovis neniun iconv dll" #: src/liflines/screen.c:1931 msgid "Impermissible to change codeset in a populated database" msgstr "Þanøante kodpaøon malpermesita en enhaviøita datumbazo" #: src/liflines/screen.c:2032 msgid "LifeLines -- Main Menu" msgstr "LifeLines -- Æefa Menuo" #: src/liflines/searchui.c:133 #, c-format msgid "v Review visit history (%d record)" msgid_plural "v Review visit history (%d records)" msgstr[0] "v Revizu vizitan historion (%d rikordo)" msgstr[1] "v Revizu vizitan historion (%d rikordoj)" #: src/liflines/searchui.c:137 msgid "(visit history is empty)" msgstr "(vizita historio estas malplena)" #: src/liflines/searchui.c:143 #, c-format msgid "c Review change history (%d record)" msgid_plural "c Review change history (%d records)" msgstr[0] "c Revizu þanøan historion (%d rikordo)" msgstr[1] "c Revizu þanøan historion (%d rikordoj)" #: src/liflines/searchui.c:147 msgid "(change history is empty)" msgstr "(þanøa historio estas malplena)" #: src/liflines/searchui.c:151 msgid "f Full database scan" msgstr "f Plena datumbaza ekzameno" #: src/liflines/searchui.c:220 msgid "What scan type?" msgstr "Kia ekzameno?" #: src/liflines/searchui.c:223 msgid "f Full name scan" msgstr "f Plen-noma ekzameno" #: src/liflines/searchui.c:224 msgid "n Name fragment (whitespace-delimited) scan" msgstr "n Part-noma (blank-spaca-disigita) ekzameno" #: src/liflines/searchui.c:225 msgid "r Refn scan" msgstr "r Refn ekzameno" #: src/liflines/searchui.c:226 #, fuzzy msgid "s Source scan" msgstr "r Refn ekzameno" #: src/liflines/searchui.c:290 msgid "Scan on what source field?" msgstr "" #: src/liflines/searchui.c:293 msgid "a Scan by author" msgstr "" #: src/liflines/searchui.c:294 msgid "t Scan by title" msgstr "" #: src/liflines/selectdb.c:95 msgid "Choose database to open" msgstr "Elektu datumbazon por malfermi" #: src/liflines/selectdb.c:103 msgid "No databases found in database path" msgstr "Trovis neniujn datumbazojn en datumbaza dosierindiko" #: src/liflines/show.c:123 msgid "born" msgstr "nask" #: src/liflines/show.c:124 src/liflines/show.c:125 msgid "bapt" msgstr "bapt" #: src/liflines/show.c:126 msgid "barm" msgstr "barm" #: src/liflines/show.c:127 msgid "basm" msgstr "basm" #: src/liflines/show.c:128 msgid "bles" msgstr "beni" #: src/liflines/show.c:129 msgid "adop" msgstr "adop" #: src/liflines/show.c:130 msgid "resi" msgstr "loøi" #: src/liflines/show.c:134 msgid "died" msgstr "mort" #: src/liflines/show.c:135 msgid "buri" msgstr "entr" #: src/liflines/show.c:136 msgid "crem" msgstr "brul" #: src/liflines/show.c:1009 #, c-format msgid "Cached: I:%s; F:%s" msgstr "Kaþmemoriøis: I:%s; F:%s" #: src/liflines/valgdcom.c:92 #, c-format msgid "Record %s is referred to but not defined." msgstr "Rikordo %s estas aludita sed ne difinita." #: src/liflines/valgdcom.c:93 #, fuzzy, c-format msgid "Line %d: Reference to undefined record %s" msgstr "Linio %d: La okazo æi tie difinita ne havas þlosilon." #: src/liflines/valgdcom.c:94 #, fuzzy, c-format msgid "Line %d: Tag %s found in unexpected record: %s %s." msgstr "Ne povis ripari forstrekaron kiu enhavas validan rikordon %s" #: src/liflines/valgdcom.c:190 #, fuzzy, c-format msgid "Line %d: Family has no members (%s %s)." msgstr "Linio %d: Familio ne havas membrojn." #: src/liflines/valgdcom.c:390 #, c-format msgid "Line %d: The source defined here has no key." msgstr "Linio %d: La fonto æi tie difinita ne havas þlosilon." #: src/liflines/valgdcom.c:404 #, c-format msgid "Line %d: Source %s has an incorrect key." msgstr "Linio %d: Fonto %s havas maløustan þlosilon." #: src/liflines/valgdcom.c:411 #, c-format msgid "Lines %d and %d: Source %s is multiply defined." msgstr "Linioj %d kaj %d: Fonto %s estas multoble difinita." #: src/liflines/valgdcom.c:434 #, c-format msgid "Line %d: The event defined here has no key." msgstr "Linio %d: La okazo æi tie difinita ne havas þlosilon." #: src/liflines/valgdcom.c:447 #, c-format msgid "Line %d: Event %s has an incorrect key." msgstr "Linio %d: Okazo %s havas maløustan þlosilon." #: src/liflines/valgdcom.c:454 #, c-format msgid "Lines %d and %d: Event %s is multiply defined." msgstr "Linioj %d kaj %d: Okazo %s estas multoble difinita." #: src/liflines/valgdcom.c:477 #, c-format msgid "Line %d: The record defined here has no key." msgstr "Linio %d: La rikordo æi tie difinita ne havas þlosilon." #: src/liflines/valgdcom.c:490 #, c-format msgid "Line %d: Record %s has an incorrect key." msgstr "Linio %d: Rikordo %s havas maløustan þlosilon." #: src/liflines/valgdcom.c:497 #, c-format msgid "Lines %d and %d: Record %s is multiply defined." msgstr "Linioj %d kaj %d: Rikordo %s estas multoble difinita." #: src/liflines/valgdcom.c:539 #, fuzzy, c-format msgid "Line %d: This %s line is missing a value field (%s %s)." msgstr "Linio %d: Æi tiu %s linio mankas valoran kampon." #: src/liflines/valgdcom.c:590 #, fuzzy, c-format msgid "Line %d: Bad NAME syntax (%s %s)." msgstr "Linio %d: Maløusta NOMO sintakso." #: src/liflines/valgdcom.c:820 #, c-format msgid "Line %d: Person %s has multiple father links." msgstr "Linio %d: Homo %s havas multoblajn patrajn ligilojn." #: src/liflines/valgdcom.c:824 #, c-format msgid "Line %d: Person %s has multiple mother links." msgstr "Linio %d: Homo %s havas multoblajn patrinajn ligilojn." #: src/liflines/valgdcom.c:836 #, c-format msgid "Line %d: Person %s is both male and female." msgstr "Linio %d: Homo %s estas ambaý vira kaj ina." #: src/liflines/valgdcom.c:840 #, c-format msgid "Line %d: Person %s is male but must be female." msgstr "Linio %d: Homo %s estas vira sed devas esti ina." #: src/liflines/valgdcom.c:844 #, c-format msgid "Line %d: Person %s is female but must be male." msgstr "Linio %d: Homo %s estas ina sed devas esti vira." #: src/liflines/valgdcom.c:848 #, c-format msgid "Line %d: Person %s is implied to be both male and female." msgstr "Linio %d: Homo %s implice estas ambaý vira kaj ina." #: src/liflines/valgdcom.c:860 #, c-format msgid "Line %d: Family %s has multiple husband links." msgstr "Linio %d: Familio %s havas multoblajn edzajn ligilojn." #: src/liflines/valgdcom.c:864 #, c-format msgid "Line %d: Family %s has multiple wife links." msgstr "Linio %d: Familio %s havas multoblajn edzinajn ligilojn." #: src/liflines/valgdcom.c:920 msgid "error" msgstr "eraro" #: src/liflines/valgdcom.c:928 #, c-format msgid "%6d Error" msgid_plural "%6d Errors" msgstr[0] "%6d Eraro" msgstr[1] "%6d Eraroj" #: src/liflines/valgdcom.c:930 src/liflines/valgdcom.c:958 #, c-format msgid " (see log file <%s>)" msgstr " (vidu protokolan dosieron <%s>)" #: src/liflines/valgdcom.c:932 src/liflines/valgdcom.c:960 msgid " (no log file)" msgstr " (neniu protokola dosiero)" #: src/liflines/valgdcom.c:948 msgid "warning" msgstr "averto" #: src/liflines/valgdcom.c:956 #, c-format msgid "%6d Warning" msgid_plural "%6d Warnings" msgstr[0] "%6d Averto" msgstr[1] "%6d Avertoj" #: src/liflines/valgdcom.c:1067 #, c-format msgid "Processed %d lines without finding end of HEAD" msgstr "Traktis %d liniojn sed ne trovis finon de HEAD" #: src/liflines/valgdcom.c:1072 #, c-format msgid "End of file at line %d" msgstr "Fino de dosiero æe linio %d" #: src/liflines/valgdcom.c:1076 #, c-format msgid "Error at line %d: %s" msgstr "Eraro æe linio %d: %s" #: src/liflines/valgdcom.c:1080 #, c-format msgid "Bad level at line %d" msgstr "Maløustaj niveloj æe linio %d" #: src/liflines/valgdcom.c:1086 #, c-format msgid "Duplicate HEAD line at line %d" msgstr "Multoble difinita HEAD linio æe linio %d" #: src/liflines/valgdcom.c:1092 #, c-format msgid "Missing HEAD line at line %d" msgstr "Mankanta HEAD linio æe linio %d" #: src/stdlib/errlog.c:61 #, c-format msgid " in file <%s> at line %d\n" msgstr " en dosiero <%s> sur linio %d\n" #: src/stdlib/errlog.c:63 msgid "Current database" msgstr "Nuna datumbazo" #: src/tools/btedit.c:108 #, c-format msgid "btedit requires 2 arguments (btree and key)." msgstr "" #: src/tools/btedit.c:110 #, c-format msgid "See `btedit --help' for more information." msgstr "" #: src/tools/btedit.c:117 #, fuzzy, c-format msgid "Failed to open btree: %s." msgstr "Ne povas malfermi dosiero %s." #: src/tools/btedit.c:124 #, fuzzy, c-format msgid "There is no record with key: %s" msgstr "Ne ekzistas rikordo kun tiu þlosilo aý referenco." #: src/tools/btedit.c:126 #, fuzzy, c-format msgid "Error accessing record: %s" msgstr "Eraro dum datumalirado" #: src/tools/btedit.c:135 #, c-format msgid "Editor or system call failed." msgstr "" #: src/tools/btedit.c:137 #, fuzzy, c-format msgid "Database was not be modified." msgstr "La datumbazo ne estas registrita." #: src/tools/btedit.c:143 #, fuzzy, c-format msgid "Readonly database can not be modified." msgstr "La datumbazo ne estas registrita." #: src/tools/btedit.c:150 #, c-format msgid "Error writing file 'btedit.tmp'." msgstr "" #: src/tools/btedit.c:156 #, c-format msgid "Record %s modified." msgstr "" #: src/tools/btedit.c:226 #, fuzzy msgid "\"\\My Documents\\LifeLines\\Databases\\MyFamily\"" msgstr "\\Miaj Datumaroj\\LifeLines\\Datumbazoj\\MiaFamilio" #: src/tools/btedit.c:228 src/tools/dbverify.c:232 msgid "/home/users/myname/lifelines/databases/myfamily" msgstr "/hejmo/uzantoj/mianomo/lifelines/datumbazoj/miafamilio" #: src/tools/btedit.c:231 #, c-format msgid "" "lifelines `btedit' edits raw binary btree blocks\n" "in lifelines database files. Do NOT use this unless\n" "you know what you are doing and you have backed up\n" "your database." msgstr "" #: src/tools/btedit.c:236 #, c-format msgid "Usage btedit [database] [rkey]" msgstr "" #: src/tools/btedit.c:240 #, c-format msgid "\t--help\tdisplay this help and exit" msgstr "" #: src/tools/btedit.c:242 #, c-format msgid "\t--version\toutput version information and exit" msgstr "" #: src/tools/btedit.c:246 #, c-format msgid "\tbtedit %s I34" msgstr "" #: src/tools/btedit.c:248 #, c-format msgid "edit raw btree block for person I34" msgstr "" #: src/tools/dbverify.c:175 msgid "Orphan names" msgstr "Ofraj nomoj" #: src/tools/dbverify.c:176 msgid "Ghost names" msgstr "Fantomaj nomoj" #: src/tools/dbverify.c:177 src/tools/dbverify.c:178 msgid "Duplicate names" msgstr "Multoble difinitaj nomoj" #: src/tools/dbverify.c:179 msgid "Non-indi names" msgstr "Ne-indi-aj nomoj" #: src/tools/dbverify.c:180 msgid "Duplicate individuals" msgstr "Multoble difinitaj apartuloj" #: src/tools/dbverify.c:181 msgid "Duplicate families" msgstr "Multoble difinitaj familioj" #: src/tools/dbverify.c:182 msgid "Duplicate sources" msgstr "Multoble difinitaj fontoj" #: src/tools/dbverify.c:183 msgid "Duplicate events" msgstr "Multoble difinitaj okazoj" #: src/tools/dbverify.c:184 msgid "Duplicate others" msgstr "Multoble difinitaj alioj" #: src/tools/dbverify.c:185 msgid "Missing records (from deleteset)" msgstr "Mankantaj rikordoj (el forstrekaro)" #: src/tools/dbverify.c:186 msgid "Deleted records" msgstr "Forstrekiøitaj rikordoj" #: src/tools/dbverify.c:187 msgid "Bad name" msgstr "Maløusta nomo" #: src/tools/dbverify.c:188 msgid "Bad family reference" msgstr "Maløusta familia referenco" #: src/tools/dbverify.c:189 msgid "Missing child" msgstr "Mankanta infano" #: src/tools/dbverify.c:190 msgid "Missing spouse" msgstr "Mankanta geedzo" #: src/tools/dbverify.c:191 msgid "Bad HUSB reference" msgstr "Maløusta HUSB referenco" #: src/tools/dbverify.c:192 msgid "Bad WIFE reference" msgstr "Maløusta WIFE referenco" #: src/tools/dbverify.c:193 msgid "Bad CHIL reference" msgstr "Maløusta CHIL referenco" #: src/tools/dbverify.c:194 msgid "Improper HUSB" msgstr "Maltaýga HUSB" #: src/tools/dbverify.c:195 msgid "Improper WIFE" msgstr "Maltaýga WIFE" #: src/tools/dbverify.c:196 msgid "Improper child" msgstr "Maltaýga infano" #: src/tools/dbverify.c:197 msgid "Empty family" msgstr "Malplena familio" #: src/tools/dbverify.c:198 msgid "Single person family" msgstr "Unuhoma familio" #: src/tools/dbverify.c:199 msgid "Bad pointer" msgstr "Maløusta indikilo" #: src/tools/dbverify.c:200 msgid "Missing data records" msgstr "Mankantaj datumaj rikordoj" #: src/tools/dbverify.c:230 msgid "\\My Documents\\LifeLines\\Databases\\MyFamily" msgstr "\\Miaj Datumaroj\\LifeLines\\Datumbazoj\\MiaFamilio" #: src/tools/dbverify.c:236 #, c-format msgid "usage: dbverify -(flags) \n" msgstr "uzado: dbverify -(opcioj) \n" #: src/tools/dbverify.c:237 #, c-format msgid "flags:\n" msgstr "opcioj:\n" #: src/tools/dbverify.c:238 #, c-format msgid "\t-a = Perform all checks (does not include fixes)\n" msgstr "\t-a = Plenumu æiujn kontrolojn (ne anigas riparojn)\n" #: src/tools/dbverify.c:239 #, c-format msgid "\t-g = Check for ghosts (names/refns)\n" msgstr "\t-g = Kontrolu por fantomoj (nomoj/refnoj)\n" #: src/tools/dbverify.c:240 #, c-format msgid "\t-G = Check for & fix ghosts (names/refns)\n" msgstr "\t-G = Kontrolu por kaj riparu fantomojn (nomoj/refnoj)\n" #: src/tools/dbverify.c:241 #, c-format msgid "\t-i = Check individuals\n" msgstr "\t-i = Kontrolu apartulojn\n" #: src/tools/dbverify.c:242 #, c-format msgid "\t-f = Check families\n" msgstr "\t-f = Kontrolu familiojn\n" #: src/tools/dbverify.c:243 #, c-format msgid "\t-F = Alter any bad family lineage pointers (to _badptr)\n" msgstr "\t-F = Þanøu iun ajn maløustajn familiajn devenligilojn (al _badptr)\n" #: src/tools/dbverify.c:244 #, c-format msgid "\t-h = Display help text (this text)\n" msgstr "" #: src/tools/dbverify.c:245 #, c-format msgid "\t-s = Check sours\n" msgstr "\t-s = Kontrolu sours (fontojn)\n" #: src/tools/dbverify.c:246 #, c-format msgid "\t-e = Check events\n" msgstr "\t-e = Kontrolu okazojn\n" #: src/tools/dbverify.c:247 #, c-format msgid "\t-x = Check others\n" msgstr "\t-x = Kontrolu aliojn\n" #: src/tools/dbverify.c:248 #, c-format msgid "\t-l = Check database structure\n" msgstr "\t-l = Kontrolu datumbazan strukturon\n" #: src/tools/dbverify.c:249 #, c-format msgid "\t-m = Check for records missing data entries\n" msgstr "\t-m = Kontrolu rikordojn por mankantaj datumeroj\n" #: src/tools/dbverify.c:250 #, c-format msgid "\t-M = Fix records missing data entries\n" msgstr "\t-M = Riparu rikordojn kiu mankas datumerojn\n" #: src/tools/dbverify.c:251 #, c-format msgid "\t-D = Fix bad delete entries\n" msgstr "\t-D = Riparu maløustajn forstrekerojn\n" #: src/tools/dbverify.c:252 #, c-format msgid "\t-n = Noisy (echo every record processed)\n" msgstr "\t-n = Brua (e¶u æiun rikordon traktitan)\n" #: src/tools/dbverify.c:253 #, c-format msgid "example: dbverify -ifsex \"%s\"\n" msgstr "ekzemplo: dbverify -ifsex \"%s\"\n" #: src/tools/dbverify.c:386 #, c-format msgid "Non-indi name, key=%s, name=%s" msgstr "Ne-indi nomo, þlosilo=%s, nomo=%s" #: src/tools/dbverify.c:403 #, c-format msgid "Orphaned name: %s" msgstr "Ofra nomo: %s" #: src/tools/dbverify.c:417 #, c-format msgid "Ghost name: %s -> %s" msgstr "Fantoma nomo: %s -> %s" #: src/tools/dbverify.c:449 #, c-format msgid "Orphaned refn: %s" msgstr "Ofra refn: %s" #: src/tools/dbverify.c:489 #, c-format msgid "Duplicate name for %s (%s)" msgstr "Multoble difinita nomo por %s (%s)" #: src/tools/dbverify.c:524 #, c-format msgid "Duplicate refn for %s (%s)" msgstr "Multoble difinita refn por %s (%s)" #: src/tools/dbverify.c:637 #, c-format msgid "Duplicate individual for %s" msgstr "Multoble difinita apartulo por %s" #: src/tools/dbverify.c:679 #, c-format msgid "Bad name for individual %s: %s" msgstr "Maløusta nomo por apartulo %s: %s" #: src/tools/dbverify.c:697 src/tools/dbverify.c:721 #, c-format msgid "Bad family reference (%s) individual %s" msgstr "Maløusta familia referenco (%s) apartulo %s" #: src/tools/dbverify.c:703 #, c-format msgid "Missing child (%s) in family (%s)" msgstr "Mankanta infano (%s) en familio (%s)" #: src/tools/dbverify.c:707 #, c-format msgid "Fixed missing child (%s) in family (%s)" msgstr "Riparis mankantan infanon (%s) en familio (%s)" #: src/tools/dbverify.c:727 #, c-format msgid "Missing spouse (%s) in family (%s)" msgstr "Mankanta geedzo (%s) en familio (%s)" #: src/tools/dbverify.c:731 #, c-format msgid "Fixed missing spouse (%s) in family (%s)" msgstr "Riparis mankantan geedzon (%s) en familio (%s)" #: src/tools/dbverify.c:765 #, c-format msgid "Duplicate family for %s" msgstr "Multoble difinita familio por %s" #: src/tools/dbverify.c:816 #, c-format msgid "Bad HUSB reference (%s) in family %s" msgstr "Maløusta HUSB referenco (%s) en familio %s" #: src/tools/dbverify.c:822 #, c-format msgid "Fixed Bad HUSB reference (%s) in family %s" msgstr "Riparis maløustan HUSB referencon (%s) en familio %s" #: src/tools/dbverify.c:831 #, c-format msgid "Improper HUSB (%s) in family (%s)" msgstr "Maltaýga HUSB (%s) en familio (%s)" #: src/tools/dbverify.c:844 #, c-format msgid "Bad wife reference (%s) in family %s" msgstr "Maløusta edzina referenco (%s) en familio %s" #: src/tools/dbverify.c:850 #, c-format msgid "Fixed Bad wife reference (%s) in family %s" msgstr "Riparis maløustan edzinan referencon (%s) en familio %s" #: src/tools/dbverify.c:859 #, c-format msgid "Improper wife (%s) in family (%s)" msgstr "Maltaýga edzino (%s) en familio (%s)" #: src/tools/dbverify.c:872 #, c-format msgid "Bad child reference (%s) in family %s" msgstr "Maløusta infana referenco (%s) en familio %s" #: src/tools/dbverify.c:878 #, c-format msgid "Fixed bad child reference (%s) in family %s" msgstr "Riparis maløustan infanan referencon (%s) en familio %s" #: src/tools/dbverify.c:887 #, fuzzy, c-format msgid "Improper child: Child (%s) without FAMC reference to family (%s)" msgstr "Maltaýga infano (%s) en familio (%s)" #: src/tools/dbverify.c:895 #, c-format msgid "Empty family (%s)" msgstr "Malplena familio (%s)" #: src/tools/dbverify.c:897 #, c-format msgid "Single person family (%s)" msgstr "Unuhoma familio (%s)" #: src/tools/dbverify.c:923 #, c-format msgid "Duplicate source for %s" msgstr "Multoble difinita fonto por %s" #: src/tools/dbverify.c:939 #, c-format msgid "Duplicate event for %s" msgstr "Multoble difinita okazo por %s" #: src/tools/dbverify.c:955 #, c-format msgid "Duplicate record for %s" msgstr "Multoble difinita rikordo por %s" #: src/tools/dbverify.c:1026 #, c-format msgid "Bad pointer (in %s): %s" msgstr "Maløusta indikilo (en %s): %s" #: src/tools/dbverify.c:1064 #, c-format msgid "Missing undeleted record %c%d" msgstr "Mankanta malforstrekita rikordo %c%d" #: src/tools/dbverify.c:1071 #, c-format msgid "Fixed missing undeleted record %c%d" msgstr "Riparis mankantan malforstrekitan rikordon %c%d" #: src/tools/dbverify.c:1075 #, c-format msgid "Failed to fix missing undeleted record %c%d" msgstr "Ne povis ripari mankantan malforstrekitan rikordon %c%d" #: src/tools/dbverify.c:1087 #, c-format msgid "Delete set contains valid record %s" msgstr "Forstrekaro enhavas validan rikordon %s" #: src/tools/dbverify.c:1092 #, c-format msgid "Fixed delete set contains valid record %s" msgstr "Riparis forstrekaron kiu enhavas validan rikordon %s" #: src/tools/dbverify.c:1096 #, c-format msgid "Failed to fix missing undeleted record %s" msgstr "Ne povis ripari forstrekaron kiu enhavas validan rikordon %s" #: src/tools/dbverify.c:1117 #, fuzzy, c-format msgid "Master fkey misaligned" msgstr "Mastra dosierþlosilo misaranøiøis (%d != %d)\n" #: src/tools/dbverify.c:1144 #, c-format msgid "Cycle in indexes, file %s found again!\n" msgstr "Ciklo en indeksoj, dosieron %s trovas denove!\n" #: src/tools/dbverify.c:1151 #, fuzzy, c-format msgid "Error loading index at key" msgstr "Eraro dum þarøado de indekso æe þlosilo %d\n" #: src/tools/dbverify.c:1199 #, c-format msgid "First key in block below parent's limit\n" msgstr "Unua þlosilo en bloko subas limon de patro\n" #: src/tools/dbverify.c:1207 #, c-format msgid "Last key in block above parent's limit\n" msgstr "Fina þlosilo en bloko superas limon de patro\n" #: src/tools/dbverify.c:1215 #, fuzzy, c-format msgid "Key not below next key" msgstr "Þlosilo %d ne subas la sekvan þlosilon\n" #: src/tools/dbverify.c:1232 src/tools/dbverify.c:1234 msgid "data block" msgstr "datuma bloko" #: src/tools/dbverify.c:1235 #, c-format msgid "%s fkey=%d, file=%s" msgstr "%s dosierþlosilo=%d, dosiero=%s" #: src/tools/dbverify.c:1248 #, fuzzy, c-format msgid "Invalid errs array[%d] in dbverify - fix program\n" msgstr "Malvalida errs (eraroj) vektoro[%d] en dbverify - riparu programon\n" #: src/tools/dbverify.c:1285 #, c-format msgid "Missing data record (%s)" msgstr "Mankanta datuma rikordo (%s)" #: src/tools/dbverify.c:1289 #, c-format msgid "Fixed missing data record (%s)" msgstr "Riparis mankanta datuma rikordo (%s)" #: src/tools/dbverify.c:1420 #, c-format msgid "Checking %s" msgstr "" #: src/tools/dbverify.c:1476 #, c-format msgid "%d error" msgid_plural "%d errors" msgstr[0] "%d eraro" msgstr[1] "%d eraroj" #: src/tools/dbverify.c:1480 #, c-format msgid "%d fixed" msgid_plural "%d fixed" msgstr[0] "%d riparita" msgstr[1] "%d riparitaj" #: src/tools/dbverify.c:1487 msgid "No errors found" msgstr "Neniun eraron trovis" #: src/tools/dbverify.c:1506 #, c-format msgid "FATAL ERROR: " msgstr "NERIPAREBLA ERARO" #: src/tools/dbverify.c:1511 #, c-format msgid "In file <%s> at line %d" msgstr "En dosiero <%s> æe linio %d" #~ msgid "Program" #~ msgstr "Programo" #~ msgid "Error: output file <%s> could not be created.\n" #~ msgstr "Eraro: ne povas krei celdosieron <%s>.\n" lifelines-3.0.61/po/es.gmo0000700002540200244210000024077510656417754015530 0ustar prappDomain UsersÞ•Ô¼\=ÈQÉQ9çQ+!R'MR2uR¨R¼R%ÒR$øRS6S-VS*„S¯SÂSÖS%öST7T GTTT cTpT …T“T¥T¹TÈT×TçT÷T UU-U>UDUKUQUXU\UqUŠUœU±UÈUÜUïUVV1VFV2[VŽV—V V©V ²V ÀVÎVÝVñV' W2W PWqW!ƒW¥WÀW"ÞW"X!$X FXgX‡X!§X!ÉXëX! Y ,Y#MY#qY4•YÊYéYZ'Z%CZiZ…Z£Z¾ZÜZüZ [)[;[R[f[x[$Œ[±[&Â[é[ø[ \"\5\ ;\I\ O\/]\;\(É\ ò\&]'']&O]&v]&]&Ä]ë]^ ^%^9^O^&`^+‡^³^ ¹^Å^ Ô^%ß^_$ _=E_>ƒ_%Â_è_ ý_``$-`R`c`v`%`µ`Ç`4â`a*a'?aga†a˜a«aÀaÉa èaôa b$b2Db)wb&¡b(Èbñb2cL7c*„c&¯c!Öc-øc&d$:d%_d…d™dF¯d*öd.!ePege,e4¬eáe÷ef'.fVf%ef‹fœf²fÁf#Þfgg3&g5Zg6g6Çg6þg65h;lh/¨h.Øh<i=Di'‚i)ªi(Ôi)ýi)'j)Qj){j'¥j$ÍjKòj%>kLdk%±kL×k%$lLJl%—lL½l" m-mHmgm~mm¢m1ºmìm n&n‚7k‚"£‚8Æ‚(ÿ‚'(ƒ!Pƒ!rƒ”ƒ0´ƒ.åƒ/„8D„/}„/­„݄턅@…Y…k…,}…&ª…)Ñ… û…=†>C†‚†2Ÿ† Ò†!à†‡‡ 0‡Q‡"`‡ ƒ‡‘‡¯‡/¶‡3懈"ˆ4ˆRˆ+oˆ›ˆ7¬ˆ äˆAòˆ4‰*D‰/o‰Ÿ‰²‰‰$Ô‰ù‰Š*(ŠSŠlŠƒŠ¢Š¶ŠÅŠÕŠåŠ*õŠ ‹3‹R‹a‹u‹ ‡‹”‹¦‹ ¸‹ Å‹Ћã‹þ‹Œ6ŒKŒbŒ)qŒ#›Œ¿Œ&ÛŒ&')&Q)x%¢2È û&Ž.CŽ+rŽ,žŽ4ËŽ132+f’ ²$Ó,ø-%5S2‰4¼!ñ-‘:A‘)|‘)¦‘)Б,ú‘#'’/K’${’ ’»’3×’ “#“?“.H“w““!•“·“)Ó“ý“”)” 9”G”0]”*Ž”¹”/Ì”ü”•*•3•E•N•7]•••™•®•4È•ý•) –6–E–`–|–˜–Ÿ–¾– Ò–)Ý–7—*?—j—!‰—«—3Æ—6ú—51˜6g˜5ž˜Ô˜'ð˜;™8T™(™!¶™)Ø™7š!:š+\š*ˆš+³š,ßš, ›9›(N›Lw›HÄ›( œ+6œbœœ6 œ1ל6 .@'oG—1ß6ž.Hž-wž8¥ž3Þž4Ÿ8GŸ6€Ÿ)·Ÿ)áŸ,  18 *j 3• 9É +¡)/¡7Y¡8‘¡4Ê¡-ÿ¡.-¢,\¢,‰¢.¶¢2å¢,£E£%N£t£‡£0£4À£ õ£ ¤¤(¤C¤V¤@e¤¦¤#Ťé¤ ÿ¤ ¥%¥&D¥ k¥%u¥G›¥ã¥ü¥$¦ =¦<^¦ ›¦4¼¦%ñ¦$§,<§,i§'–§(¾§,秨).¨X¨"u¨˜¨&¸¨2ߨ0©1C©2u©1¨©1Ú©1 ª>ª\ª*sªžªµªƪתçªøª ««0«C« Z«"h«‹«Ÿ«´«¸«Á«È« ͫثܫà«ç«ð«ô«ú«þ«¬¬%¬D¬X¬m¬q¬w¬|¬ƒ¬ˆ¬¬ ”¬ ž¬¬¬¾¬ìʬϬجÞ¬ã¬ê¬­­,0­-]­‹­ ’­ ­¥­®­´­¹­¾­­Ø­'ì­®'®<®X® \®g®k®t®y®€®†®ž®­®À®#Ó®÷® ¯¯!1¯S¯l¯†¯Œ¯“¯š¯£¯§¯¬¯¼¯Ò¯ᯠõ¯ ° °°)°C°I° P°]°|°•°©°¾°8Ó°& ±3±:±>±G±M±S±X±`±e±m±r±y± ±‹±±™± ¡±¯± ´±%¾±ä±ø±²+²0²9²T²l²|²²²”²™²²¡²±²#Dz*ë²)³*@³.k³š³³³ ɳ"׳ú³´´#´'´>´P´T´\´p´t´y´}´‚´Ÿ´¯´¶´%º´Fà´%'µ:Mµˆµœµ±µƵÚµôµøµüµ ¶ ¶¶¶¶%¶:¶!L¶n¶s¶y¶¶„¶‹¶ ¶³¶·¶À¶ĶÛ¶)ù¶#·'·/·3·*D·"o·’·™·ž·§·¬·µ·Å·Ü·*÷·""¸E¸Y¸o¸‚¸›¸µ¸͸æ¸ü¸%¹9¹.L¹){¹#¥¹ɹй Ô¹Þ¹ù¹ÿ¹º ºº º$º*º.º$4ºYº$`º…º‰º&šºÁºǺݺáºçºíº»,»-F»t» y»ƒ»‰»»–»¬»°»¶»Ì»лç»ü»¼¼¼ ¼5¼!P¼r¼ w¼ƒ¼ˆ¼¼˜¼)°¼Ú¼ï¼½½'.½V½o½½‚½‡½Œ½ž½Ž¯½3>¿Ir¿:¼¿5÷¿6-ÀdÀ}À<™À3ÖÀ Á2(ÁC[Á.ŸÁÎÁçÁ"þÁ&!ÂHÂh xÂ… ¡Â ®ÂÏÂáÂüÂÃ)Ã8ÃHÃYÃxÃâöüÃÃÃÉÃÐÃÔà éà ÄÄ/ÄHÄ_ÄrÄÄ<¦ÄãÄüÄLÅ`ÅiÅrÅ{ńŖŦŸÅÏÅ0êÅ#Æ&?ÆfÆ {ƜƺÆ*ÕÆ#Ç$$Ç%IÇ"oÇ ’Ç$³Ç$ØÇ#ýÇ+!È"MÈ%pÈ*–È2ÁÈ&ôÈ É)<ÉfÉ,…É²É ÏÉðÉ"Ê!3Ê%UÊ{Ê‘Ê®ÊÆÊÛÊ!ïÊ&Ë8Ë(PËyˉˠ˼Ë×ËÞËôËùË/Ì;@Ì(|Ì ¥Ì5³Ì6éÌ; Í;\Í*˜Í*ÃÍîÍ Î &Î!1ÎSÎjÎ0}Î*®ÎÙÎáÎòÎ Ï5ÏEÏ)aÏ?‹Ï@ËÏ0 Ð=Ð YÐfÐ~Ð*–ÐÁÐÛÐ%óÐ+ÑEÑ`ÑMÑÍÑåÑ-Ò"1ÒTÒoÒŒÒ ¢Ò$­Ò ÒÒßÒùÒ*Ó6AÓ0xÓ0©Ó1ÚÓ Ô>#ÔYbÔ.¼Ô/ëÔ+Õ7GÕÕ.‘Õ.ÀÕïÕÖ[!Ö8}Ö/¶ÖæÖ×4×ASו×$¯×!Ô×Cö×:Ø2IØ|؛غØ-ÒØ;Ù<ÙQÙ>fÙF¥ÙAìÙA.Ú@pÚ>±ÚMðÚ5>Û5tÛ8ªÛ;ãÛ)Ü8IÜ8‚Ü3»Ü3ïÜ2#Ý+VÝ"‚Ý0¥ÝVÖÝ,-ÞRZÞ,­ÞRÚÞ+-ßQYß+«ßQ×ß )àJà"fà‰à£à¶àÊà6äà%áAá`áxá–á©á1ºáìáâ#â<â!OâqâHzâÃâ Õâãâ÷â5ã.Hã!wã2™ã,Ìã+ùã8%äD^äH£ä0ìä:å/XåFˆå&Ïå öå!æ%æ%:æ%`æ-†æ´æ!Ôæ"öæç,8ç eç qçç:šç/Õç;èAè,Rè è$‹è>°è3ïè7#é3[é@é,Ðé*ýé.(ê2WêŠê*’ê9½ê÷ê ëë!3ë Uëvëë¢ë´ë»ë¾ëÃë2ÈëûëBì Rì1\ì>Žì4Íì7í!:í'\íT„í6Ùí9î'Jî*rî4îCÒî;ï"Rï,uï7¢ï-Úï7ð8@ð.yðB¨ð!ëð ñ'ñ CñQñC`ñ'¤ñ!Ìñ îñOúñJò]òpò€ò•ò§ò¹òÍòçò)ó*.óYó;aó7óJÕóI ôGjô²ôIÎôMõMfõ*´õ2ßõ,öA?öCö4Åö;úö@6÷Bw÷*º÷;å÷;!ø<]ø;šø4Öø. ù2:ù@mù9®ù:èùC#ú>gú9¦ú7àú.ûDGû*Œû2·û#êû#ü(2üA[ü7ü;Õü;ý9Mý<‡ýÄýÔýðýW þaþ|þ>•þ9Ôþ=ÿ Lÿ=Vÿ@”ÿ ÕÿEöÿ<&K r“(¯Ø)é!$F8L;… ÁËÝ+ü2([GrºZÍ(;E?"Áäô, $:_3x0¬Ý)ý'CTh|9‘Ë'ë'GYk† Ÿ ªµ"Ó/ö2&$Y(~§,¸'å -,(Z)ƒ&­+Ô% 6& .] (Œ .µ -ä 0 6C 5z ;° -ì $ $? *d - 0½ 6î 5% :[ &– 4½ Eò <8 4u 8ª 5ã *>D2ƒ¶'Ô4ü1'J r4|±Ð(Ö!ÿ,!#Nr„•©CÆ9 D=X–µÎ×÷þF_d4Ò+á #!)EoŽ(–¿ Ò8ÝB+Y…#£ ÇBèC+CoC³E÷!=5_B•AØ-,H0u@¦,ç2-G.u.¤.Ó/]H\¦-.1`€1ž1Ð8+;gJƒ.Î4ý&2'YG=ÉALIM–5ä)0D8u3®8âB*^-‰7·:ï>* 5i BŸ 5â 5!8N!=‡!6Å!ü!7";"S"6Z":‘"Ì"ã"ú"#/#C#VU#7¬#5ä#$8$M$8f$2Ÿ$ Ò$$Ü$J%L%f%)% ©%;Ê%#&4*&&_&#†&,ª&+×&6'0:'-k'™'5¶'%ì'#("6(1Y(G‹(EÓ(F)F`)G§)Fï)G6*'~*%¦*+Ì*"ø*+0+C+Z+o++ ®+ Ï+ð+ ,(,G,],t,x,,Š, ,š,ž,¢, «,¶,º,À,Ä,Ë,Î,+ê,-+-F-J-P-T-Z-_-d-k- t- ‚--•-œ-¡-ª-°-¸-Á- Ù-#ú-/.#N.r. y.†.Š.“.˜..¢.¦.À.4Û./#//6/f/j/}/ /‹/’/›/"¡/Ä/Ö/ê/1þ/00F0^0)v0& 0%Ç0í0ò0ù0þ01 11$01U1q1‰1˜1©1º1Ñ1ë1ñ1 ø12#2@2W2!p2H’2(Û23 3333%3 +363;3C3J3Q3 W3b3g3p3 v3„3 ‰3.“3Â3#Ú3"þ3!4&4+/4[4s4ƒ4š44¢4§4ª4¯4Ã4*Ü4)5.155`58–5)Ï5ù5 6)6G6e6u6z6~6ž6¯6³6¹6Í6Ñ6×6Û6*á6 7 7'7(+7NT7(£7NÌ7848"M8p8)†8°8¶8º8À8É8Î8Ó8Ü8â8ù8%9>9D9K9Q9V9!]99Ÿ9 £9­9±90Ï9*:+:/:7:;:6K:*‚:­:µ:º:Ã:È:Ñ:ä:ÿ:3;,M;z;;¤;%¼;$â;<&#<J< b</ƒ<³<5Ò<*=(3=\=d= h=#s=—==¥=ª=±= µ=Â=È=Í=&Ó=ú='>*>.>4B>w>}>“>˜>Ÿ>¥>¾>7Ù><?N? S?]?e?j?q?Š?Ž?“?®? ²?Ó?ñ? @ @@@5@!N@p@ u@@†@ Ž@š@0µ@"æ@ A!Ac{L`ø®­åéÜ<l•¨YQõŒF! Æ ^õ,ÄrUs¼hõÇÊ¢,˜#]Ò“ÑàïD–F¬ÂrubÂ1Óh´ì6ꤤ ~`ª‡ôP*çÛµ¶¾b(Y3 zªº=¡Pc_ŒÜ ÓHHj‹£%ä%ÚÞµ"ìÍwtÅÕ´a^æÅ\é¼ZÚ¨×\™ŠlбïwúûéšÉUªÎÍÂó÷'{Ó  ±;Ã|SÍ›Ê_¬q§AdJÞˆ So:â±M?Ì£c.‚oÒ9=ÕЮ¬ÌA+ |xU¾q ÷Ý)‰KVSV}è6 0ؾóÈnèE°Ž_Òת!…ü5 bX/>701ðx€Ht‘´&6O*–† 'lPC½¤2À2àŠ‘ˆô&‹ƒ ³’¥…Õt;¢*8œÔ,b®ñ5Vãò¿<¹¨s^Èuk§Ön$¾ù xö%$ }BòÒ‹þSvpô†GÎr²§<y@Dk©~‰ '4O„*7ËÀřϤë\q¥”îͰ­uI39¦‚}Тi-[ÑÙÊ“g{˜ÉTáß":töÅ~îp¬HGˆ~þÆ×[ÔnÛ€¹JI»ÃÀYUzOe€n@kmŒóÀÚKß= ÄR؇Æ¢>°«"Áð—÷´f”—i- ÏJM—TGâ•cAÉÿeB›DЫm¶iê®zÏf¡Ý0½üÁòÝOÌd!ù!³M@'ÏÇ£CR;¶ËÈ›ƒàPF$“’x§Ë˸0ᆃ2yÇpD½„û(ðÔûë=–z{íuíºŠä>yåžœÜv} ¸WŸm©9¯ú£4jŸ/@v¹v•± pE]ä­³4^R²Mì¿‘Cƒ„µ6h·TL&°¼ãÿf#š[ê|EBg8k¯‹$ÁŸº-â˜L¥wg¦¦åad›•‡ge ޏ1ZÆøùÌ(„5™‚:ýç8”ø¸.:’)Q¡<LÿÞñ`Öo.»X -D = Fix bad delete entries -F = Alter any bad family lineage pointers (to _badptr) -G = Check for & fix ghosts (names/refns) -M = Fix records missing data entries -a = Perform all checks (does not include fixes) -e = Check events -f = Check families -g = Check for ghosts (names/refns) -h = Display help text (this text) -i = Check individuals -l = Check database structure -m = Check for records missing data entries -n = Noisy (echo every record processed) -s = Check sours -x = Check others Aborting now. Core dump? [y/n] Report duration %s (ui duration %s) in file <%s> at line %d (dbint tt: %s) (immutable) (no log file) (read only) (see log file <%s>)!! Cycle mode!a Ancestors mode!d Descendants mode!g GEDCOM mode!n Normal mode!t GEDCOMT mode!x GEDCOMX mode# Toggle childnos$$ List references$n List notes$s List sources%02ds%1 AUC%1 FR%1 HEB%1J%6d Error%6d Errors%6d Warning%6d Warnings%c Reorder child%d child%d children%d element%d elements%d entry%d entries%d error%d errors%d fixed%d fixed%d item%d items%d item leaked%d items leaked%d record%d records%d spouse%d spouses%d warning during import%d warnings during import%dd%02dh%dh%02dm%dm%02ds%dy%03dd%e Add event%o Add other%s Add source%s fkey=%d, file=%s%s was added as a child.%s was added as a spouse and/or parent.%s was added to the database.%s was modified in the database.%s: Bad arguments%s: Incomparable types: %s and %s%s: line %d (entry %d): %s%s: null arg not permissible.%s: the arg #%s had a major error.%s: the arg #%s must be a boolean.%s: the arg #%s must be a family.%s: the arg #%s must be a float.%s: the arg #%s must be a list.%s: the arg #%s must be a node.%s: the arg #%s must be a person.%s: the arg #%s must be a record.%s: the arg #%s must be a set.%s: the arg #%s must be a string.%s: the arg #%s must be a table.%s: the arg #%s must be a variable.%s: the arg #%s must be an integer.%s: the arg #%s would cause an arithmetic exception.%s: the arg had a major error.%s: the arg must be a family.%s: the arg must be a filename.%s: the arg must be a list.%s: the arg must be a node or string.%s: the arg must be a node.%s: the arg must be a person.%s: the arg must be a set.%s: the arg must be a string.%s: the arg must be a variable.%s: the arg must be an integer.( Scroll up(( Scroll both up(1-9) Browse to child(Family %s (%s, %s)(Separator is %s)(b Scroll bottom up(givens) person does not have a name(t Scroll top up(trimname) person does not have a name) Scroll down)) Scroll both down)b Scroll bottom down)t Scroll top down**may+ Next in db, of - Prev in db/home/users/myname/lifelines/databases/myfamily0 EVEN 1 REFN 1 DATE 1 PLAC 1 INDI 2 NAME 2 ROLE 1 SOUR0 SOUR 1 REFN 1 TITL Title 1 AUTH Author0 XXXX 1 REFN1 Add a source record to the database2 Edit source record from the database3 Add an event record to the database4 Edit event record from the database5 Add an other record to the database6 Edit other record from the database< Enlarge menu area> Shrink menu area? Other menu choicesA Advanced viewA family cannot be merged with itself.A person cannot be merged with him/herself.ABORTALARM CLOCKASSERT failureAborting: Adding unused keys as deleted keys...Ambiguous call to proc: %sAre you sure you want to merge them?Are you sure you want to remove the person from the database?Are you sure you want to remove this record from the database?Argument to lock (-l) must be y or n.B Browse new familyBUS ERRORBad CHIL referenceBad HUSB referenceBad HUSB reference (%s) in family %sBad HUSB tag: %sBad WIFE referenceBad backup history countBad child reference (%s) in family %sBad child tag: %sBad decimal number format.Bad escape code at offset %d in bytecode string <%s>Bad escape format.Bad family referenceBad family reference (%s) individual %sBad hexidecimal number format.Bad history countBad history lengthBad level at line %dBad nameBad name for individual %s: %sBad pointerBad pointer (in %s): %sBad spouse tag: %sBad wife reference (%s) in family %sBecause of errors the GEDCOM file was not loaded. Both families must have husbands/fathers.Both families must have wives/mothers.Browse new record (without adding xref).Cached: I:%s; F:%sCannot combine forceopen (-f) and lock (-l) flags.Cannot combine immutable (-i) or read-only (-r) with read-write (-w) access.Cannot convert codeset (from <%s> to <%s>)Cannot remove last person from family.Checking GEDCOM file for errors. Choose a family by selecting a spouse/parent.Choose from historyClash with longer hotkey in item: %sClash with shorter hotkey in item: %sCodeset informationCollation routine: %sCommands: Select by number, u Page Up, d Page Down, i Select, q QuitCommands: u Page Up, d Page Down, q QuitCopyright(c) 1991 to 1996, by T. T. Wetmore IVCould not open file %sCould not open file %s.Create a family with this person as a child.Create a family with this person as a spouse/parent.Current Database - %sCurrent collate locale: %sCurrent messages locale: %sCycle in indexes, file %s found again! DEATH OF CHILDDatabase `%s' has been saved in `%s'.Database recordsDatabase was corrupt.Default path: Delete history (%d entries)?Delete set contains valid record %sDeleted recordsDisplay to InternalDo you really want to add this child to the family?Do you really want to add this event to the database?Do you really want to add this family to the database?Do you really want to add this person to the database?Do you really want to add this record to the database?Do you really want to add this source to the database?Do you really want to add this spouse/parent to the family?Do you really want to merge these two families?Do you really want to merge these two persons?Do you really want to remove this child from his/her family?Do you really want to remove this spouse from his/her family?Do you really want to reorder children?Do you really want to swap spouse orders?Do you really want to update this event?Do you really want to update this family?Do you really want to update this person?Do you really want to update this record?Do you really want to update this source?Do you want to create a database there?Do you want to edit the event again?Do you want to edit the event again? (Otherwise changes will be discarded.)Do you want to edit the family again?Do you want to edit the family again? (Otherwise changes will be discarded.)Do you want to edit the person again?Do you want to edit the person again? (Otherwise changes will be discarded.)Do you want to edit the record again?Do you want to edit the record again? (Otherwise changes will be discarded.)Do you want to edit the source again?Do you want to edit the source again? (Otherwise changes will be discarded.)Do you want to enter another name?Do you want to re-edit it?Duplicate HEAD line at line %dDuplicate event for %sDuplicate eventsDuplicate familiesDuplicate family for %sDuplicate func %s (lines %d and %d) in report: %sDuplicate hotkey for item: %sDuplicate individual for %sDuplicate individualsDuplicate name for %s (%s)Duplicate namesDuplicate othersDuplicate proc %s (lines %d and %d) in report: %sDuplicate record for %sDuplicate refn for %s (%s)Duplicate source for %sDuplicate sourcesDuplicated REFN - please choose.EMT INSTEdit current record now to add xref manually.Editor to InternalEmpty familyEmpty family (%s)End of file at line %dEnter Family Number to Browse toEnter a sibling from family.Enter a spouse from family.Enter codeset to assume (* for none)Enter d for debugger, q to quitEnter integer for programEnter name of output archive file.Enter name of translation table file to readEnter name of translation table file to writeEnter pattern to match against author.Enter pattern to match against full name.Enter pattern to match against refn.Enter pattern to match against single surname or given name.Enter string for programErrorErrorsError accessing dataError at line %d: %sError in abbreviations file.Error in character mapping file.Error in user options file.Error: file "%s": line %d: Error: file <%s> not foundError: file <%s> not found: %s EventEventsEvent %s is referred to but not defined.FATAL ERRORFATAL ERROR: FLOATING POINT EXCEPTIONFailed to fix missing undeleted record %c%dFailed to fix missing undeleted record %sFamilies may not yet be removed in this fashion.FamilyFamiliesFamily %s is referred to but not defined.Fatal ErrorFilepath too long.First key in block below parent's limit Fixed Bad HUSB reference (%s) in family %sFixed Bad wife reference (%s) in family %sFixed bad child reference (%s) in family %sFixed delete set contains valid record %sFixed missing child (%s) in family (%s)Fixed missing data record (%s)Fixed missing spouse (%s) in family (%s)Fixed missing undeleted record %c%dFridayFrom which family is the child to be removed?From which family is the spouse/parent to be removed?GEDCOM codeset: %sGEDCOM to InternalGUI codeset: %sGUI input codeset: %sGUI output codeset: %sGhost name: %s -> %sGhost namesGlobal variablesHANGUPHeHerHisHow would you like to find a record?ILLEGAL INSTRUCTIONINDI, FAM, SOUR, EVEN records may not be other records.INTERRUPTIdentify a child of the family, if known.Identify a parent in the family having children swapped.Identify a spouse of the family, if known.Identify a spouse/parent for the new family.Identify child already in family.Identify child in second family.Identify family (enter nothing to identify by individual members).Identify list of persons for program:Identify one of the child's parents, if known.Identify person for program:Identify second person to browse to.Identify spouse/parent already in family, if known.Identify spouse/parent in second family, if known.Identify spouse/parent to add to an existing family.Identify the child to reorder.Identify the first child to swap.Identify the first family/spouse to swap.Identify the second child to swap.Identify the second family/spouse to swap.Identify the second spouse/parent, if known.Illegal type found in list in menuchooseImpermissible to change codeset in a populated databaseImport time %s (ui %s) Improper HUSBImproper HUSB (%s) in family (%s)Improper WIFEImproper childImproper child: Child (%s) without FAMC reference to family (%s)Improper wife (%s) in family (%s)In file <%s> at line %dIn menu: %sInsert xref automatically at bottom of current record.Internal UTF-8: NoInternal UTF-8: YesInternal codesetInternal to DisplayInternal to EditorInternal to GEDCOMInternal to ReportIs this the new child? Is this the new spouse? Is this the person? Select if so.Is this the record? Select if so.KILLLast key in block above parent's limit LifeLines %s - Genealogical DB and Programming SystemLifeLines -- Auxiliary Browse Screen (* toggles menu)LifeLines -- Family Browse Screen (* toggles menu)LifeLines -- List Browse Screen (* toggles menu)LifeLines -- Main MenuLifeLines -- Person Browse Screen (* toggles menu)LifeLines -- Two Family Browse Screen (* toggles menu)LifeLines -- Two Person Browse Screen (* toggles menu)Line %d: Bad NAME syntax (%s %s).Line %d: Event %s has an incorrect key.Line %d: Family %s has an incorrect key.Line %d: Family %s has multiple husband links.Line %d: Family %s has multiple wife links.Line %d: Family has no members (%s %s).Line %d: Person %s has an incorrect key: skipped.Line %d: Person %s has multiple father links.Line %d: Person %s has multiple mother links.Line %d: Person %s is both male and female.Line %d: Person %s is female but must be male.Line %d: Person %s is implied to be both male and female.Line %d: Person %s is male but must be female.Line %d: Person defined here has no name.Line %d: Record %s has an incorrect key.Line %d: Reference to undefined record %sLine %d: Source %s has an incorrect key.Line %d: Tag %s found in unexpected record: %s %s.Line %d: The event defined here has no key.Line %d: The family defined here has no key.Line %d: The person defined here has no key: skipped.Line %d: The record defined here has no key.Line %d: The source defined here has no key.Line %d: This %s line is missing a value field (%s %s).Line %d: This line has a bad link.Line %d: This line has a level number that is too large.Line %d: This line has an illegal level.Line %d: This line has no level number.Line %d: This line is empty; EOF?Line %d: This line is incomplete.Line %d: This line is too long.Line %d: This line needs white space before tag.Lines %d and %d: Event %s is multiply defined.Lines %d and %d: Family %s is multiply defined.Lines %d and %d: Person %s is multiply defined: skipped.Lines %d and %d: Record %s is multiply defined.Lines %d and %d: Source %s is multiply defined.Local variablesLocales are disabled.Locales are enabled.Looks like a program was running. Check file %1 around line %2. M< Less menu colsM> More menu colsMalformed configuration file: line too long.Menu (%s) choice sequence too long: %sMenu (%s) item lacked choice sequence: %sMessages:Mismatched lineage child links between %s and %s: %ld and %ldMismatched lineage spouse links between %s and %s: %ld and %ldMissing HEAD line at line %dMissing NAME line in INDI record; record ignored. Missing childMissing child (%s) in family (%s)Missing data record (%s)Missing data recordsMissing records (from deleteset)Missing spouseMissing spouse (%s) in family (%s)Missing titleMissing undeleted record %c%dMondayNLS (National Language Support) is compiled in.NLS (National Language Support) is not compiled in.NO NAMENOT PVALUE: NULL!NOT PVALUE: invalid type=%d)!Name, key, refn, list, or @:New persons were added to the current list.New record is %sNew spouse/parent has unknown sex; can't add to family.No conversionNo current internal codeset, so no codeset conversion can be doneNo errors foundNo errors; adding records with new keys...No errors; adding records with original keys...No events present.No more historyNo notes present.No one in database has key value %s.No original string on line.No others present.No persons were added to the current list.No records found in scanNo references present.No replacement string on line.No sources present.No such child.No such family.No such person.No such record.No such translation table in this databaseNode memory leaks:Non-indi name, key=%s, name=%sNon-indi namesNot implemented yetNot valid commandOrphan namesOrphaned name: %sOrphaned refn: %sOtherOthersPIPE WRITEPOWER-FAIL RESTARTParsing Error at line %d: Performing full name scanPerforming name fragment scanPerforming refn scanPerforming source scanPersonPersonsPerson %s is referred to but not defined.Place the child last in the family.Please choose an operation:Please choose family create operation.Please choose from among these people.Please choose from among these records.Please choose from the following list.Please choose from the following options:Please choose the child to browse to.Please choose the child to remove from the family.Please choose the event to view.Please choose the family to browse to.Please choose the father/husband to browse to.Please choose the first child to browse to.Please choose the first family to browse to.Please choose the first father/husband to browse to.Please choose the first mother/wife to browse to.Please choose the first spouse/parent to browse to.Please choose the mother/wife to browse to.Please choose the note to view.Please choose the other to view.Please choose the reference to view.Please choose the second child to browse to.Please choose the second family to browse to.Please choose the second father/husband to browse to.Please choose the second mother/wife to browse to.Please choose the second spouse/parent to browse to.Please choose the source to view.Please choose the spouse/parent to browse to.Please choose the spouse/parent to remove from the family.Please enter person's internal key value.Please enter the name of the GEDCOM file.Please identify next person to browse to.Please identify one of the child's siblings.Please identify one of the spouses.Please identify person or persons to browse to.Please identify record to browse to.Please identify the child.Please mark a record first.Proc %s must be called with %d (not %d) parameters.Proceed anyway?Proceed without codeset conversion?Proceed?Processed %d lines without finding end of HEADQ Quit current databaseQUITR Pick a GEDCOM file and read inREFN key is already in use.Record %s is referred to but not defined.Remove this family record?Report cancelledReport debuggerReport file: Report not found: %s Report stopping due to error opening output fileReport stopping due to lack of output fileReport to InternalReturn to current record (without adding xref).Runtime Error at line %d: SEGMENTATION ERRORSIGNAL 0SYSTEM CALL ERRORSaturdaySearch resultsSelect the child the new child precedes or select last.SheSingle person familySingle person family (%s)Something impossible happened. Contact tech support.SourceSourcesSource %s is referred to but not defined.Spouse unknownStartup collate locale: %sStartup messages locale: %sStrike any key to continue.SundaySystem error: illegal map codeTERMINATE FROM KILLTRACE TRAPTag is too long to connect automatically.Tandom browse only compatible with persons or families.The child was removed from his/her family.The current list is not named.The current list is now named %s.The database is read only.The database is read only; you may not add records.The database is read only; you may not change records.The database is read only; you may not merge records.The database is read only; you may not remove records.The database is read-only; loading has been canceled.The database was not saved.The event was modified in the database.The families have different fathers/husbands; cannot merge.The families have different wives/mothers; cannot merge.The family was modified in the database.The file is as positioned at EOF.The new family was added to the database.The persons are not of opposite sex; can't make family.The record begins at wrong level.The record contains multiple level 0 lines.The record does not begin with a FAM line.The record does not begin with a SOUR line.The record does not begin with an EVEN line.The record does not begin with an INDI line.The record is empty.The record was modified in the database.The requested window size (%ld,%ld) is too large for your terminal (%d,%d). The requested window size (%ld,%ld) is too small for LifeLines (%d,%d). The source was modified in the database.The spouse was removed from his/her family.The two children were swapped.The two families were swapped.There are no children in the database for this family.There is no LifeLines database in that directory.There is no one in the database with that name or key.There is no record with that key or reference.There is something wrong with the data.There was %d unresolved reference.There were %d unresolved references.These persons are children in different families.This does not point to another record in the database!This family already has a husband/male parent.This family already has a wife/female parent.This family has both spouses/parents; can't add another.This family has less than two children; can't swap.This family has neither spouse/parent; can't remove.This family has no female spouse/parent in the database.This family has no male spouse/parent in the database.This family still has links; not removed.This is not a lineage linked GEDCOM file.This person has no children in the database.This person has no older sibling in the database.This person has no spouse in the database.This person has no younger sibling in the database.This person is a spouse/parent in less than two families.This person is already a child in a family.This person is not a child in any family.This person is not a child in the family; can't remove.This person is not a spouse in the family; can't remove.This person is not a spouse or parent in any family.This person record does not have a name line.This person record has bad GEDCOM name syntax.This person's father is not in the database.This person's mother is not in the database.This person's parents are not in the database.This person's sex is not known; can't make family.This report requires a newer program to run ThursdayToo many spouses to display full listTranslation TablesTuesdayTwo parents of different sexes cannot be merged.Two persons with different parents cannot be merged.USER SIGNAL 1USER SIGNAL 2UTF-8 charprops loadedUTF-8 charprops not loadedUndefined proc: %sUnknown signalUnsupported file encoding (no multibyte encodings except UTF-8).Unsupported file encoding: %s.Use original keys from GEDCOM file?WARNING: missing keysWINDOW CHANGEWarningWarningsWarning: database codeset unspecifiedWarning: not all conversions availableWednesdayWhat activity do you want to perform?What directory holds (or will hold) the LifeLines database? (? to list)What do you want to add?What do you want to remove?What is the name of the output file?What is the name of the program?What persons or list do you want to add to the current list?What record do you want to edit?What record do you want to remove from the database?What should the name of this list be?What utility do you want to perform?Which character mapping do you want to edit?Which character mapping do you want to save?Which event record do you want to edit?Which source record do you want to edit?Who do you want to remove from the database?Whom do you want to edit?Whose families/spouses are to be swapped?Whose key value do you want?You are at the bottom of the list.You are at the top of the list.You cannot change the sex of a parent.You cannot edit the CHIL lines in a family record.You cannot edit the FAM line in a family record.You cannot edit the FAMC line in a person record.You cannot edit the FAMS lines in a person record.You cannot edit the HUSB line in a family record.You cannot edit the INDI line in a person record.You cannot edit the WIFE line in a family record.You must identify a database.[ Decrease tree depth\My Documents\LifeLines\Databases\MyFamily] Increase tree depth^b History/back^c Clear history^f History/fwd^l History list^xb ChngHist/back^xc Clear ChngHist^xf ChngHist/fwd^xl ChngHist lista Add child to familya Add familya Add information to the databasea Add to this lista Create new familyaavabout %1abt %1adaradar sheniadradsaft %1after %1apraprilaugaugustavb Browse new personsb Browse the persons in the databaseb Browse to bottomb Browse to personsb. bap. baptbapt: barmbasmbef %1before %1bet %1 and %2between %1 and %2bornborn: brumbrumairebur. buriburi: c Browse to childrenc Browse top childrenc Character set optionsc Child - add a child to an existing familyc Child - remove a child from his/her familycal %1calculated %1cb. cheshvanchildcompcremcshd Copy top to bottomd Delete from listd Delete information from the databased Remove as childd Remove child fromd Show database statisticsd. data blockdecdecemberdieddied: div. e Browse event recordse Edit recorde Edit the familye Edit the persone Edit the place abbreviation filee Edit this persone Edit top familye Edit top persone edit individual tables (in db)editor input codeset: %seditor output codeset: %seighteightheleveneleventhellelulenter file nameenter file name (*%s)enter integer:enter key or refn: enter key:enter name: enter path: enter string: enter y (yes) or n (no): errorest %1estimated %1example: dbverify -ifsex "%s" export/import directory:f Browse to fatherf Browse to fathersf Browse top fatherf Family - create family record from one or two spousesf Family - remove a family completelyfatherfebfebruaryfifthfirstfiveflags: florflorealfourfourthfr %1fr %1 to %2frimfrimairefrom %1from %1 to %2frucfructidorfullname: person does not have a nameg Browse to familygedcom input codeset: %sgedcom output codeset: %sgermgerminalgettext dll had no versiongettext dll version: %sgettext dll: %sh Add as spouseheherher_himhisi Add as childi Browse this personi Identify a person from key valuei Individual - remove a person completelyi import all tables (from files into db)iconv (codeset conversion) is compiled in.iconv (codeset conversion) is not compiled in.iconv dll had no versioniconv dll version: %siconv dll: %sidentifier: %s should be a string illegal call to pos.initscr failediyariyrj Merge bottom to topj Move down listjanjanuaryjour_complementairsjuljulyjunjunek Find a person's key valuek Move up listkislevksll load a table from a file (into db)lines [-adkrwiflntcuFxoCzI] [database] # Use -F for Finnish databaselines [-adkrwiflntcuxoCzI] [database]lines [-adkrwiflntcuxoCzI] [database] # Finnish databasem Browse to motherm Browse to mothersm Browse top motherm Mark this personm Show memory statisticsm. marmarchmarried: maymessmessidormothern Create new personn Name this listname: person does not have a namenineninthnisannivonivoseno gettext dll foundno iconv dll foundnovnovembernsno Browse to older sibo Edit the user options fileo Other - remove other record completelyoctoctoberonep Pedigree modep Person - add new person to the databasep Pick a report from list and runpersonpluvpluviosepraiprairialq Quit programq Return to main menuq Return to previous menur Generate report by entering report namer Read in data from a GEDCOM filer Remove as spouser Remove spouse fromreport codeset: %sreport input codeset: %sreport output codeset: %ss Add spouse to familys Browse source recordss Browse to spouse/ss Browse top spouse/ss Save the database in a GEDCOM files Search databases Spouse - add a spouse to an existing familys Spouse - remove a spouse from a familys save a table to a file (from db)secondsepseptemberset(%s, ) is invalidsevenseventhsheshevatshvsignal %1: %2sivansixsixthsoundex: person does not have a namespousesurname: person does not have a namesvnt Browse to topt Modify character translation tablestamuztc Tandem to childrentententhtevettf Tandem to father/stg Tandem to family/sthe arg to empty is not a list, table or setthe arg to length is not a list, table or settherthermidorthirdthreetishritm Tandem to mother/stmzto %1ts Tandem to spouse/stshtt Enter family tandemtt Enter tandem modetu Tandem to parentstvttwelvetwou Browse to parentsu Miscellaneous utilitiesusage: dbverify -(flags) vendvendemiaireventventosewarningx Browse other recordsx Handle source, event and other recordsx Swap mark/currentx Swap two childrenx Swap two familiesx Switch top/bottomx export all tables (from db to files)y Browse to younger siby Turn on syncyYyYnNzerozi Browse to indizz Browse to anyProject-Id-Version: lifelines 3.0.55 Report-Msgid-Bugs-To: POT-Creation-Date: 2007-08-08 15:56-0400 PO-Revision-Date: 2007-04-17 23:10-0500 Last-Translator: Larry Hamilton Language-Team: Not a language team MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n!=1; X-Poedit-Language: Spanish -D = Malas entradas de la cancelación del arreglo -F = Altere cualquier mal indicador del linaje de la familia (_ badptr) -G = Compruebe para y fije los fantasmas (nombres/refns) -M =El arreglo registra entradas de datos que falta -a = Realice todos los cheques (no incluye el fixes) -e = Compruebe eventos -f = Compruebe a familias -g = Compruebe para saber si hay fantasmas (nombres/refns) -h = Texto de ayuda de la exhibición (este texto) -i = Compruebe a individuos -l = Compruebe la estructura de la base de datos -m = Compruebe para saber si hay registros que faltan el entradas -n =Ruidoso (repita cada registro procesado) -s = Compruebe fuentes -x = Compruebe otros Abortando ahora. Core dump? [s/n] Informe duración %s (ui duración %s) en archivo <%s> en la línea %d (dbint tt: %s) (inmutable) (ningún fichero de diario) (solo leer) (vea el fichero de diario <%s>)!! Modo del ciclo!a Modo de los antepasados!d Modo de los descendientes!g modo GEDCOM!n Modo normal!t modo GEDCOMT!x modo GEDCOMX# Números de palanca del niño$$ Lista de referencias$n Lista de notas$s Lista de fuentes%02ds%1 AUC%! FR%! HEB%1J%6d Error%6d Errors%6d Advertencia%6d Advertencias%c Reordene a niño%d niño%d niños%d elemento%d elementos%d entrada%d entradas%d error%d errors%d arreglado%d arreglados%d artículo%d artículosel artículo de %d se escapólos artículos de %d se escaparon%d registro%d registros%d cónyuge%d cónyuges%d Advertencia durante la importación%d Advertencias durante la importación%dd%02dh%dh%02dm%dm%02ds%da%03dd%e Agregar evento%o Agregar otro%s Agregar fuente%s fkey=%d, fichero=%s%s fue agregado como niño.%s fue agregado como un cónyuge y/o progenitore.%s fue agregado a la base de datos.%s fue modificado en la base de datos.%s: Malas argumentos%s: Tipos incomparables: %s y %s%s: línea %d (entrada %d): %s%s: arg nulo no permitido.%s: el argumento #%s tiene un error major.%s: el arg #%s debe ser un boleano.%s: el arg #%s debe ser una familia.%s: el arg #%s deben ser un flotador.%s: el arg #%s debe ser una lista.%s: el arg #%s debe ser un nodo.%s: el arg #%s debe ser una persona.%s: el arg #%s debe ser un registro.%s: el arg #%s debe ser un sistema.%s: el arg # el %s deben ser una secuencia.%s: el arg #%s debe ser una tabla.%s: el arg #%s debe ser una variable.%s: el arg #%s deben ser un número entero.%s: el arg #%s causaría una excepción aritmética.%s: el argumento tiene un error major.%s: el arg debe ser una familia.%s: el arg debe ser un nombre de fichero.%s: el arg debe ser una lista.%s: el arg debe ser un nodo o una secuencia.%s: el arg debe ser un nodo.%s: el arg debe ser una persona.%s: el arg debe ser un sistema.%s: el arg debe ser una secuencia.%s: el arg debe ser una variable.%s: el arg debe ser un número entero.( Voluta para arriba(( Enrolle ambos para arriba(1-9) Examinar al niño(Familia %s (%s, %s)(El separador es %s(b Fondo de la voluta para arriba(givens) la persons no tiene un nombre(t La voluta se llenara(trimname) la persona no tiene un nombre) Voluta abajo)) Enrolle ambos abajo)b Fondo de la voluta abajo)t Tapa de la voluta abajo**mayo+ Después adentro bd, de- Anterior adentro bd/home/users/myname/lifelines/databases/mifamila0 EVEN 1 REFN 1 DATE 1 PLAC 1 INDI 2 NAME 2 ROLE 1 SOUR0 SOUR 1 REFN 1 TITL Titulo 1 AUTH Autor0 XXXX 1 REFN1 Agregue un registro de la fuente a la base de datos2 Corrija el registro de la fuente de la base de datos3 Agregue un registro del acontecimiento a la base de datos4 Corrija un registro del acontecimiento a la base de datos5 Agregue otro registro a la base de datos6 Corrija otro registro a la base de datos< Agrande el área del menú> Área del menú del encogimiento? Otras menu prefierasA Visión avanzadaUna familia no puede ser combinada con sí mismo.Una persona no puede ser combinada con se.ABORTARALARMA DEL RELOJAFIRME la faltaFinalizando:Agregando llaves inusitadas como claves suprimidas...Llamada ambigua al proc: %s¿Es usted seguro usted desea combinarlos?¿Es usted seguro desea quitar a la persona de la base de datos?¿Es usted seguro desea quitar este registro de la base de datos?La discusión a la cerradura (-l) debe ser y o n.B Navigado nueva familia...ERROR DE BUSMalo referencia de CHILMalo referencia de HUSBMalo referencia de HUSB (%s) en familia %sMala etiqueta de HUSB: %sMalo referencia de WIFEMala cuenta de reserva de la historiaMalo referencia de CHILD (%s) en familia %sMala etiqueta del niño: %sMal formato de número decimal.Mal código del escape en la compensación %d en la secuencia <%s> del bytecodeMal formato del escape.Mala referencia de la familiaMalo referencia de familia (%s) individual %sMal formato de número hexadecimal.Mala cuenta de la historiaMala longitud de la historiaNivel malo a linea %dMal nombreNombre malo para individuales %s: %sMalo PunteroMal indicador (en %s): %sMala etiqueta del cónyuge %sMalo referencia de WIFE (%s) en familia %sDebido a errores el archivo de GEDCOM no fue cargado. Necesidad los dos familias tener maridos/padres.Necesidad los dos familias tener esposas/madres.Hojee el nuevo registro (sin la adición de xref).Depositado: I:%s; F:%sNo puede combinar forceopen (-f) y se traba (-l) las banderas.No puede combinar inmutable (-i) o inalterable (-r) con de lectura/grabación (-w) acceso.No puede convertir el codeset (de <%s> a <%s>)No puede quitar a persona pasada de la familia.Comprobando archivo de GEDCOM para errors. Elija a familia seleccionando a un cónyuge/progenitore.Elija de historiaChoque con un hotkey más largo en artículo: %sChoque con un hotkey más corto en artículo: %sInformación del codesetRutina de la colación: %sComandos: Seleccione por número, u Página Para arriba, d Página Abajo, i Selectar, q QuitarComandos: u Página Para arriba, d Página Abajo, q QuitarCopyright(c) 1991 a 1996, para T. T. Wetmore IVNo puede abrir fichero %sNo podía abrir el fichero %s.Crear un familia con eso persona como un/una niño/a.Crear una familia con este persona como un a cónyuge/progenitore.Base de datos Actual - %sLa corriente compagina el locale: %sLocale actual de los mensajes: %s¡Complete un ciclo en los índices, archivo %s encontrado otra vez! MUERTO DE NINOLa base de datos '%s' se ha ahorrado adentro `%s'.Registros de la base de datos.La base de datos era corrupta.Trayectoria del defecto¿Historia de la cancelación (entradas de %d)?El sistema de la cancelación contiene el registro válido %sRegistros suprimidosExhibición a interno¿Usted realmente desea agregar a este niño a la base de datos?¿Usted realmente desea agregar este acontecimiento a la base de datos?¿Usted realmente desea agregar a esta familia a la base de datos?¿Usted realmente desea agregar a esta persona a la base de datos?¿Usted realmente desea agregar este registro a la base de datos?¿Usted realmente desea agregar esta fuente a la base de datos?¿Usted realmente desea agregar a este cónyuge/progenitore a la base de datos?¿Usted realmente desea combinar a estas dos familias?¿Usted realmente desea combinar a estas dos personas?¿Usted realmente desea quitar a este niño de su familia?¿Usted realmente desea quitar a este cónyuge de su familia?¿Usted realmente desea reordenar a niños?¿Usted realmente desea intercambiar pedidos del cónyuge?¿Usted realmente desea poner al día este acontecimiento?¿Usted realmente desea poner al día a esta familia?¿Usted realmente desea poner al día a esta persona?¿Usted realmente desea poner al día este registro?¿Quisiera actualizar esta fuente en verdad?Quiero hacer un base de datos ayi?¿Usted desea corregir el contecimiento otra vez?¿Usted desea corregir el contecimiento otra vez? (Si no los cambios serán desechados.)¿Usted desea corregir a la familia otra vez?¿Usted desea corregir a la familia otra vez? (Si no los cambios serán desechados.)¿Usted desea corregir a la persona otra vez?¿Usted desea corregir a la persona otra vez? (Si no los cambios serán desechados.)¿Usted desea corregir el registro otra vez?¿Usted desea corregir el registro otra vez? (Si no los cambios serán desechados.)¿Usted desea corregir a la fuente otra vez?¿Usted desea corregir a la fuente otra vez? (Si no los cambios serán desechados.)¿Usted desea entrar otro nombre?¿Usted desea re-corregirlo?Linea duplicado de HEAD a linea %dEventos duplicada para %sEventos duplicadosFamilias duplicadosFamilia duplicado para %s%s funcional duplicado (líneas %d y %d) en informe: %sHotkey duplicado para el artículo: %sIndividuales duplicado para %sIndividuales duplicadosNombre duplicado para %s (%s)Nombres duplicadosOtros duplicadosProc duplicado %s (líneas %d y %d) en informe: %sRegistro duplicada para %srefn duplicado para %s (%s)Fuente duplicada para %sFuentes duplicadosREFN duplicados eligen por favor.EMT INSTAhora corrija el registro de la corriente para agregar xref manualmente.Editor a InternalFamilia vacíaFamilia vacías (%s)Fin del archivo a linea %dElija por favor a numero de la familia para examinar.Agregue un hermano o una hermana desde famlia.Agregue un cónyuge desde familia.Incorpore el codeset para asumir (* para ningunos)Incorpore d para la depuración, q para pararIncorpore el número entero para el programaIncorpore el nombre del fichero de archivo de la salida.Incorpore el nombre del archivo de tabla de la traducción para leer.Incorpore el nombre del archivo de tabla de la traducción para escribir.Incorpore el patrón para emparejar contra autor.Incorpore el patrón para emparejar contra nombre completo.Incorpore el patrón para emparejar contra refn.Incorpore el patrón para emparejar contra solo apellido o nombre dado.Entre en la secuencia para el programaErrorErrorsDatos que tienen acceso del errorError a linea %d: %sError en archivo de las abreviaturas.Error en el carácter traz el archivo.Error en archivo de las opciones del usuario.Error: archivo "%s": línea %d: Error: archivo <%s> no encontradoError: fichero <%s> no existe: %s AcontecimientoAcontecimientosRefieren pero no se definen a el eventos %s.ERROR FATALERROR FATAL: EXCEPCIÓN DE COMA FLOTANTENo pudo fijar el registro undeleted los desaparecidos %c%dFalló arreglado falto registro no borrado %s...Las familias pueden todavía no ser quitadas en esta manera.FamiliaFamiliasRefieren pero no se definen a la familia %s.Error FatalCarpeta del fichero demasiado largo.Primera clave en bloque debajo del limite de los progenitores Referencia fija del malo HUSB (%s) en la familia %sMala referencia fija de la esposa (%s) en la familia %sMala referencia fija del niño (%s) en la familia %sEl sistema fijo de la cancelación contiene el registro válido %sNiño (%s) que falta fijo en la familia (%s)Registro de datos que falta arreglado (%s)Cónyuge (%s) que falta fijo en la familia (%s)Los desaparecidos fijos undeleted %c%d de registroViernes¿De qué familia es el niño que se quitará?¿De qué familia es el cónyuge/progenitore que se quitará?Codeset de GEDCOM: %sGEDCOM a InternalCodeset del GUI: %sCodeset de la entrada del GUI: %sCodeset de la salida del GUI: %sNombre fantasma: %s -> %sNombres fantasmasvariables globaleHANGUPElSuyaSuyo¿Cómo usted tienen gusto de encontrar un registro?INSTRUCCION ILLEGALLos registros INDI, FAM, SOUR, EVEN pueden no ser otros registros.INTERRUPTIdentifique a niño de la familia, si está sabido.Identifique a padre en la familia que hace niños intercambiar.Identifique a cónyuge de la familia, si está sabido.Identificar un cónyuge/progenitore de la nueva familia.Identifique a niño ya en familia.Identificar niño en el segundo familia.Identifique a familia (no incorpore nada identificar por los miembros individuales).Identifique la lista de las personas para el programa:Identifique a uno de los padres del niño, si está sabido.Identifique a persona para el programa:Identificar la segunda persona a examinar.Identifique a cónyuge ya en familia, si está sabido.Identificar cónyuge/progenitore en el segundo familia, si conocido.Identifique a cónyuge para agregar a una familia existente.Identifique a niño para reordenar.Identifique a primer niño para intercambiar.Identifique a primer familia/cónyuge para intercambiar.Identifique a segundo niño para intercambiar.Identifique a segunda familia/cónyuge para intercambio.Identificar el segundo cónyuge/progenitore, si conocido.El tipo ilegal encontró en lista en menuchooseImpermissible para cambiar el codeset en una base de datos pobladaTiempo de importacion %s (ui %s) Impropia HUSBHUSB incorrecto (%s) en la familia (%s)Impropia WIFEImpropia CHILDNiño incorrecto: Niño (%s) sin referencia de FAMC a la familia (%s)wife incorrecto (%s) en la familia (%s)En el archivo <%s> en la línea %dEn menú: %sInserte xref automáticamente en la parte inferior del registro de la corriente.Internal UTF-8: NoInternal UTF-8: SiCodeset internoInterno para exhibirInternal a EditorInternal a GEDCOMInternal a Reportar¿Está esto el nuevo niño?¿Está esto el nuevo cónyuge?¿Está esto la persona? Seleccione si tan.¿Está esto el registro? Seleccione si tan.MATANZAClave pasada en bloque sobre el límite de los progenitores LifeLines %s - BD Genealógica y Sistema de ProgramaciónLifeLines -- El Auxiliar Hojea La Pantalla (* acciona la palanca del menú)LifeLines -- La Familia Hojea La Pantalla (* acciona la palanca del menú)LifeLines -- La Lista Hojea La Pantalla (* acciona la palanca del menú)LifeLines -- Menu PrincipalLifeLines -- La Persona Hojea La Pantalla (* acciona la palanca del menú)LifeLines -- La Familia Dos Hojea La Pantalla (* acciona la palanca del menú)LifeLines -- La Persona Dos Hojea La Pantalla (* acciona la palanca del menú)Línea %d: Sintaxis del mal NOMBRE (%s %s).Línea %d: El evento %s tiene una clave incorrecta.Linea %d: Familia %s tiene clave incorrecto.Línea %d: La familia %s tiene acoplamientos múltiples del marido.Línea %d: La familia %s tiene acoplamientos múltiples de la esposa.La línea %d: Family no tiene ningún miembro (%s %s).Linea %d: La Persons %s tiene un clave incorrecto: saltado.La línea %d: Persona %s tiene acoplamientos múltiples del padre.La línea %d: Persona %s tiene acoplamientos múltiples de la madre.La línea %d: Persona %s es varón y hembra.La línea%d: Persona %s es femenina pero debe ser masculina.La línea %d: Persona %s se implica para ser varón y hembra.La línea %d: Persona %s es masculina pero debe ser femenina.Linea %d: La persona definida aquí no tiene ningún nombre..Línea %d: %s de registro tiene una clave incorrecta.Línea %d: Referencia al registro indefinido %sLínea %d: La fuente %s tiene una clave incorrecta.Línea %d: La etiqueta %s encontró en registro inesperado: %s %s.Línea %d: El evento definido aquí no tiene ninguna clave.Línea %d: La familia definida aquí no tiene ninguna llave.Línea %d: La persona definida aquí no tiene ninguna llave: saltado.La línea %d: El registro definido aquí no tiene ninguna clave.Línea %d: La fuente definida aquí no tiene ninguna clave.La línea%d: %s está faltando un campo de valor (%s %s).Line %d: Esta línea tiene un mal acoplamiento.Línea %d: Esta línea tiene un número llano que sea demasiado grande.Line %d: Esta línea tiene un nivel ilegal.Linea %d: Esta línea no tiene ningún número llano.Linea %d: Esta línea es vacía; EOF?Línea %d: Esta línea es incompleta.Línea %d: Esta línea es demasiado larga.Line %d: Esta línea necesita el espacio blanco antes de etiqueta.Líneas %d y %d: El evento %s es se multiplica definido.Lineas %d y %d: Familia %s es multiplica definido: saltado.Lineas %d y %d: Persons %s es multiplica definido: saltado.Líneas %d y %d: %s de registro es se multiplica definido.Las líneas %d y %d: el fuente %s es se multiplican definido.variables localNo se permiten los locales.Se permiten los locales.Los parecer un programa funcionaban. Compruebe el archivo %1 alrededor de la línea %2. M< Menos columnas del menúM> Más columnas del menúArchivo malformado de la configuración: línea demasiado larga.Secuencia bien escogida del menú (%s) demasiado larga: %sEl artículo del menú (%s) careció secuencia bien escogida: %sMensajes:El niño unido mal del linaje se liga entre %s y %s: %ld y %ldEl cónyuge unido mal del linaje se liga entre %s y %s: %ld y %ldFaltar HEAD línea en la línea %dLínea de NAME que falta en registro de INDI; registro no hecho caso. Niño que faltaNiño que falta (%s) en la familia (%s)Registro de datos que falta (%s)Registro de datos que faltaRegistros que falta (desde deleteset)...Esposo que faltaCónyuge que falta (%s) en la familia (%s)Título que faltaRegistro undeleted que falta %c%dLunesEl NLS (ayuda de la lengua nacional) se compila adentro.El NLS (ayuda de la lengua nacional) no se compila adentro.NO NOMBRENOT PVALUE: NULL!NOT PVALUE: tipo invalido=%d)!insertar nombre, clave, refn, o lista, o @:Agregaron a las nuevas personas a la lista actual.Registro nuevo esta %sEl nuevo cónyuge tiene sexo desconocido; no puede agregar a la familia.Ninguna conversiónNingún codeset interno actual, así que ninguna conversión del codeset no pueden ser hechosNingunos errores encontradosNingunos errores; adición de registros con nuevas llaves...Ningunos errores; adición de registros con llaves originales...Ningunos acontecimientos presente.No mas historiaNingunos notas presente.Nadie en base de datos tiene valor clave %s.Ninguna secuencia original en línea.Ningunos otros presente.No se agregó a ningunas personas a la lista actual.Ningunos registros encontraron en la exploraciónNingunas referencias presentes.Ninguna secuencia del reemplazo en línea.Ningunas fuentes presentes.Ningún tal niño.Ningún tal familia.Ningún tal persona.Ningún tal registro.Ninguna tal tabla de la traducción en esta base de datos.Escapes de la memoria del nodo:Nombre de Non-indi, clave=%s, nombre=%sNo nombres del indiNo puesto en ejecucio'n todavíaComando inválido.Nombres huérfanosNombre dejado huérfano: %srefn dejado huérfano: %sOtroOtrosPIPE WRITERECOMENZAR DE FALL DE ENERGÍAError del análisis en la línea %d:Ejecución de la exploración del nombre completoEjecución de la exploración conocida del fragmentoEjecución de la exploración del refnEjecución de la exploración de la fuentePersonaPersonasRefieren pero no se definen a la persona %s.Ponga el último del niño en la familia.Elija por favor una operación:Elija por favor a familia crean la operación.Elija por favor entre de estas personas.Elija por favor entre de estos registros.Elija por favor de la lista siguiente.Elija por favor de las opciones siguientes:Elija por favor a niño para examinar.Elija por favor a niño para eliminar desde la familia.Elija por favor el acontecimiento para visión.Elija por favor a familia para examinar.Elija por favor a padre/cónyuge para examinar.Elija por favor a primero niño para examinar.Elija por favor a primera familia para examinar.Elija por favor a primero padre/cónyuge para examinar.Elija por favor a primera madre/esposa para examinar.Elija por favor a primer cónyuge/progenitore para examinar.Elija por favor a madre/esposa para examinar.Elija por favor la nota para visión.Elija por favor el otro para visión.Elija por favor la referencia para visión.Elija por favor a segundo niño para examinar.Elija por favor a segunda familia para examinar.Elija por favor a segundo padre/cónyuge para examinar.Elija por favor a segunda madre/esposa para examinar.Elija por favor a segundo esposaprogenitore para examinar.Elija por favor la fuente para visión.Elija por favor a cónyuge/progenitore para examinar.Elija por favor a cónyuge/progenitore para eliminar desde la familia.Incorpore por favor el valor de clave interno de la persona.Incorpore por favor el nombre del archivo de GEDCOM.Identifique por favor a persona siguiente para hojear a.Identifique por favor a uno de los hermanos del niño.Identifique por favor uno de los cónyuges.Identifique por favor a la persona o a personas para hojear a.Identifique por favor el registro a las frentes a.Identifique por favor a niño.Marque por favor un primer de registro.Proc %s se debe llamar con parámetros de %d (no %d).¿Proceda de todos modos?¿Proceda sin la conversión del codeset?¿Proceda?%d procesado alinea sin encontrar el extremo de HEADQ Pare la base de datos actualSALIRR Escoja un GEDCOM archivo y lea adentroEsta clave de REFN ya está en usoSe refiere pero no se define %s de registro.¿Quite este registro de la familia?Informe canceladoInforme debuggerArchivo de informe:Registro eno encontrado: %s Divulgue parar debido al archivo de salida de la abertura del errorDivulgue parar debido a la carencia del archivo de salidaReportar a InternalVuelva al registro de la corriente (sin la adición del xref).Error runtime en la línea %d: ERROR DE LA SEGMENTACIÓNSIGNAL 0ERROR DE LA LLAMADA DEL SISTEMASabadoResultados de la búsquedaSeleccione a niño que el nuevo niño precede o selecciónelo por último.EllaSola familia de la personaFamilia solo una persona (%s)Algo imposible sucedido. Ayuda de tech del contacto.FuenteFuentesRefieren pero no se definen a la fuente %s.Conyuge desconocidoEl arranque compagina el locale: %sLocale de lanzamiento de los mensajes: %sPulse una tecla para continuarDomingoError de sistema: código ilegal del mapaTERMINE DE MATANZATRACE TRAPLa etiqueta es demasiado larga conectar automáticamente.Tandom hojea solamente compatible con las personas o las familias.El niño fue eliminar desde el/ella familia.La lista actual no se nombra.La lista actual ahora se nombra %s.El base de datos esta solo leer.El base de datos esta solo leer: usted no puede agregar registros.El base de datos esta solo leer: usted no pueded cambiar registros.El base de datos esta solo leer: usted no puede buscando registros.El base de datos esta solo leer: usted no puede eliminar registros.La base de datos se lee solamente; el cargamento ha estado cancelado.La base de datos no fue ahorrada.El acontecimiento fue modificado en la base de datos.Las familias tienen diversos padres/cónyuges no pueden combinarse.Las familias tienen diversas madres/esposas no pueden combinarse.Modificaron a la familia en la base de datos.El archivo está según lo colocado en el EOF.Agregaron a la nueva familia a la base de datos.Las personas no están de sexo opuesto; no puede hacer a familia.El registro comienza en el nivel incorrecto.El registro contiene líneas múltiples del nivel 0.El registro no comienza con una línea de FAM.El registro no comienza con una línea de SOUR.El registro no comienza con una línea de EVEN.El registro no comienza con una línea de INDI.El registro es vacío.El registro fue modificado en la base de datos.El tamaño solicitado de la ventana (%ld, %ld) es demasiado grande para su terminal (%d, %d). El tamaño solicitado de la ventana (%ld, %ld) es demasiado pequeño para LifeLines (%d, %d). La fuente fue modificada en la base de datos.El cónyuge fue eliminar desde el/ella familia.Intercambiaron a los dos niños.Las dos familias fue cambiar.No hay niños en la base de datos por ese familia.No hay un LifeLines base de datos en eso carpeta.No hay nadie en la base de datos con ese nombre o clave.No hay registro con esa clave o referencia.Hay algo mal con los datos.Había %d referencia no satisfecha.Había las referencias no satisfechas %dEstas personas son niños en diversas familias.¡Esto no señala a otro registro en la base de datos!Esta familia tiene ya un marido/padre.Esta familia tiene ya una esposa/madre.Esta familia tiene ambos cónyuges/progenitores; no puede agregar otros.Esta familia tiene menos de dos niños; no puede intercambiar.Esta familia no tiene ningún cónyugeprogenitore; no puede quitar.Este familia no tenemos un femeniño cónyuge/progenitore en la base de datos.Este familia no tenemos un masculino cónyuge/progenitore en la base de datos.Esta familia todavía tiene acoplamientos; no quitado.Esto no es un linaje ligó GEDCOM archivo.Este persona no tiene niños en la base de datos.Esta persona tiene no hermano mayor en la base de datos.Esta persona tiene no cónyuge en la base de datoss.Esta persona tiene no hermano menor en la base de datos.Esta persona es un cónyuge/un progenitor en menos de dos familias.Esta persona es ya un niño en una familia.Este persona no es un niño en ningua familia.La persona no es un niño en la familia; no puede quitarLa persona no es un cónyuge en la familia; no puede quitarEste persona no es un cónyuge o progenitore en ningua familia.Este registro de persona no tiene un linea de nombre.Este registro de la persona tiene mal sintaxis conocido de GEDCOM.El padre de esta persona no está en la base de datos.La madre de esta persona no está en la base de datos.Los padres de esta persona no estan en la base de datos.El sexo de esta persona no se sabe; no puede hacer a familia.Este informe requiere un más nuevo programa funcionar JuevesTambién muchos cónyuges para exhibir la lista completa.Tablas De la TraducciónMartesDos padres de diversos sexos no pueden ser combinados.Dos personas con diversos padres no pueden ser combinadas.Señal 1 por el usuarioSeñal 1 por el usuarioCharprops UTF-8 cargadosCharprops UTF-8 no cargadosProc indefinido: %sseñal desconocidaCodificación sin apoyo del archivo (ningunos encodings del multibyte exceptúan UTF-8).El archivo contiene una codificación no soportada: «%s»¿Utilice las llaves originales del archivo de GEDCOM?ADVERTENCIA: llaves que faltaCAMBIO DE LA VENTANAAdvertenciaAdvertenciasAdvertencia: codeset de la base de datos no especificadoAdvertencia: no todas las conversiones disponiblesMiércoles¿Qué actividad usted desea realizar?Que carpeta tiene (o sostendrá) el LifeLines base de datos? (? para lista)¿Qué usted desea agregar?¿Qué usted desea quitar?¿Cuál es el nombre del archivo de salida?¿Cuál es el nombre del programa?Qué personas o lista usted desea agregar a la lista actual.¿Qué registro usted desea corregir?Que registro quiero eliminar desde el base de datos?¿Qué debe el nombre de esta lista ser?¿Qué utilidad usted desea realizar?¿Qué traz del carácter usted desea corregir?¿Qué traz del carácter usted desea ahorrar?¿Qué registro del acontecimiento usted desea corregir?¿Qué registro de la fuente usted desea corregir?Quien quiero eliminar desde el base de datos?¿Quién usted desea corregir?¿De quién familias/cónyuges deben ser intercambiadas?¿De quién valor de clave usted desea?Usted está en el fondo de la lista.Usted está en la tapa de la lista.Usted no puede cambiar el sexo de un progenitore.Usted no puede corregir la linea de CHIL en un registro de una persona.Usted no puede corregir la línea de FAM en un registro de la familia.Usted no puede corregir la línea de FAMC en un registro de la familia.Usted no puede corregir la línea de FAMS en un registro de la familia.Usted no puede corregir la linea de HUSB en un registro de una persona.Usted no puede corregir la línea de INDI en un registro de la persona.Usted no puede corregir la linea de WIFE en un registro de una persona.Necesidad identificar un base de datos.[ Disminuya la profundidad del árbol\My Documents\LifeLines\Databases\MiFamilia] Aumente la profundidad del árbol^b Historia/trasero^c Vaciar historia^f Historia/delantero^l Lista de historia^xb Cambie la historia/trasero^xc Vaciar historia cambiar...^xf Cambie la historia/delantero^xl Cambie la historia/la listaa Agregar un niño a familiaa Agregar familiaa Agregar informacion a la base de datosa Agregar a ese listoa Cree a nueva familiaaavsobre %1sobre %1adaradar sheniadradssobre %1después %1abrabrilagoagostoavb Examinar nuevas personasb Examinar los personas en el base de datosb Examinar al fondob Examinar a las personasn. bau. baubau: barmbasmant %1antes %1entre %1 y %2entre %1 y %2natonato: brumbrumaireent. enterroenterr: c Examinar a los niñosc Examinar a los niños superiorc Opciones del juego de caracteresc Niño - agregue a niño a una familia existentec Niño - quite a niño de su familiacal %1calculado %1nb.cheshvanniñocompcremcshd Tapa del copy al fondod Cancelación de la listad Información de la cancelación de la base de datosd Quite como niñod Quite a niño ded Demuestre la estadística de la base de datosm. datos de cuadra...decdeciembremuertomuerto: div. e Hojee los registros del eventose Editar registroe Editar la familiae Editar la personae Corrija el archivo de la abreviatura del lugare Editar este personae Editar familia arribae Editar persona arribae corrija las tablas individuales (en bd)codeset de la entrada del redactor: %scodeset de la salida del redactor: %sochooctavoonceundécimoellelulincorpore el nombre del archivoincorpore el nombre del archivo (%s)incorpore el número entero:insertar clave o refn: agregue clave:agregue nombre: insertar curso: entre en la secuencia:agregue s (si) o n (no): errorest %1estimado %1ejemplo: dbverify -ifsex "%s" directorio de export/import:f Examinar a el padref Examinar a los padresf Examinar a de la padre superiorf Familia - cree el registro de la familia a partir de un o dos cónyugesf Familia eliminar un familia completelypadrefebfebreroquintoprimerocincobanderas: florflorealquatrocuartode %1de %1 a %2frimfrimairede %1desde %1 a %2frucfructidornombre completo: la persona no tiene un nombreg Examinar a la familiaCodeset de la entrada de GEDCOM: %sCodeset de la salida de GEDCOM: %sgermgerminalel DLL del gettext no tenía ninguna versióngettext dll version: %sgettext dll: %sh Agregar como cónyugeelsuyaellaelsuyoi Agregar como niñoi Examinar este personai Identifique a persona del valor de clavei Individual - quite a persona totalmentei importe todas las tablas (de archivos en bd)el iconv (conversión del codeset) se compila adentro.el iconv (conversión del codeset) no se compila adentro.el DLL del iconv no tenía ninguna versióniconv dll version: %siconv dll: %sidentificador: %s debe ser una secuencia llamada ilegal a la posición.initscr falladoiyariyrj Fondo de la fusión a la tapaj Baje la listaeneenerojour_complementairsjuljuliojunjuniok Encuentre el valor clave de una personak Levante la listakislevksll cargue una tabla de un archivo (en bd)lines [-adkrwiflntcuFxoC] [base de datos] #Use -F para Finlandés base de datoslines [-adkrwiflntcuxoC] [base de datos]lines [-adkrwiflntcuFxoC] [base de datos] #Use -F para Finlandés base de datosm Examinar a la madrem Examinar a las madresm Examinar a de la madre superiorm Marque este personam Demuestre la estadística de la memoriacas. marmarzocasado: mayomessmessidormadren Cree a nueva personan Dar un Nombre de esta listanombre: la persona no tiene un nombrenuevenovenonisannivonivoseningún DLL del gettext encontradoningún DLL del iconv encontradonovnoviembrensno Examinar a un más viejo sibo Corrija el archivo de las opciones del usuarioo Otro - quite el otro registro totalmenteoctoctubreunop Modo pedigríp Persona - agregue a nueva persona a la base de datosp Escoja un informe de la lista y funcionepersonapluvpluviosepraiprairialq Pare el programaq Vuelva al menú principalq Vuelva al menú anteriorr Genere el informe incorporando nombre del informer Lea adentro los datos de un GEDCOM archivor Quite como cónyuger Quite a cónyuge decodeset del informe: %sdivulgue el codeset de la entrada: %sdivulgue el codeset de la salida: %ss Agregar cónyuge a familias Examinar los registros de la fuentes Examinar a cónyuge/ss Examinar a cónyuge/s superiors Excepto la base de datos en un GEDCOM archivos Base de datos de la búsquedas Cónyuge - agregue a cónyuge a una familia existentes Cónyuge - quite a cónyuge de una familias excepto una tabla a un archivo (de bd)segundosepseptiembreel sistema (%s, ) es inválidosieteséptimoellashevatshvseñal %1: %2sivanseissextosoundex: la persona no tiene un nombrecónyugeapellido: la persona no tiene un nombresvnt Examinar al tapat Modifique las tablas de la traducción del caráctertamuztc Tándem a los niñosdiezdécimotevettf Tándem de los padre/stg Tándem de las familia/sel arg a vaciar no es una lista, una tabla o un sistemael arg a la longitud no es una lista, una tabla o un sistematherthermidortercerotrestishritm Tándem de las madre/stmza %1ts Tándem de los cónyuge/stshtt Entre el tándem de la familiatt Entre en el modo en tándemtu Tándem de los padrestvtdocedosu Examinar a los progenitoresu Utilidades misceláneasuso: dbverify -(bandera) vendvendemiaireventventoseadvertenciax Examinar otros registrosx Fuentes, ecentos y otro de la manija registrosx Marca/corriente del intercambiox Intercambio dos niñosx Intercambio dos familiasx Cambie la tapa/el fondox exporte todas las tablas (a partir del bd a los archivos)y Examinar a un sib más joveny Gire la sinc.sSsSnNcerozi Examinar a indizz Examinar a cualesquieralifelines-3.0.61/po/es.po0000700002540200244210000041161410656417747015356 0ustar prappDomain Users# Spanish minimal catalog for Lifelines # Copyright (C) YEAR Tom T. Wetmore IV # This file is distributed under the same license as the PACKAGE package. # Perry Rapp , 2005. # # msgid "" msgstr "" "Project-Id-Version: lifelines 3.0.55\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-08-08 15:56-0400\n" "PO-Revision-Date: 2007-04-17 23:10-0500\n" "Last-Translator: Larry Hamilton \n" "Language-Team: Not a language team\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n!=1;\n" "X-Poedit-Language: Spanish\n" #: src/btree/btrec.c:369 #, c-format msgid "Failed (errno=%d) to open blockfile (rkey=%s): %s" msgstr "" #: src/btree/btrec.c:438 #, c-format msgid "Btree lookup looped back to master (%ld)!" msgstr "" #: src/gedlib/charmaps.c:769 msgid "" msgstr "" #. TRANSLATORS: seconds time interval #: src/gedlib/dateprint.c:783 #, c-format msgid "%02ds" msgstr "%02ds" #. TRANSLATORS: minutes & seconds time interval #: src/gedlib/dateprint.c:789 #, c-format msgid "%dm%02ds" msgstr "%dm%02ds" #. TRANSLATORS: hours & minutes time interval #: src/gedlib/dateprint.c:795 #, c-format msgid "%dh%02dm" msgstr "%dh%02dm" #. TRANSLATORS: days & hours time interval #: src/gedlib/dateprint.c:801 #, c-format msgid "%dd%02dh" msgstr "%dd%02dh" #. TRANSLATORS: years & days time interval #: src/gedlib/dateprint.c:805 #, c-format msgid "%dy%03dd" msgstr "%da%03dd" #: src/gedlib/dbcontext.c:276 #, fuzzy msgid "Database error: -- " msgstr "Registros de la base de datos." #: src/gedlib/dbcontext.c:280 #, fuzzy msgid "requested database does not exist." msgstr "La base de datos no fue ahorrada." #: src/gedlib/dbcontext.c:283 msgid "db directory is file, not directory." msgstr "" #: src/gedlib/dbcontext.c:286 msgid "creation of new database failed." msgstr "" #: src/gedlib/dbcontext.c:289 #, fuzzy msgid "error accessing database directory." msgstr "Datos que tienen acceso del error" #: src/gedlib/dbcontext.c:292 msgid "no keyfile (directory does not appear to be a database)." msgstr "" #: src/gedlib/dbcontext.c:295 msgid "could not open, read or write an index file." msgstr "" #: src/gedlib/dbcontext.c:298 msgid "could not open, read or write the key file." msgstr "" #: src/gedlib/dbcontext.c:301 msgid "could not open, read or write the key file (to alter database)." msgstr "" #: src/gedlib/dbcontext.c:304 msgid "could not open, read or write a block file." msgstr "" #: src/gedlib/dbcontext.c:307 #, fuzzy msgid "name of database is too long." msgstr "El base de datos esta solo leer." #: src/gedlib/dbcontext.c:310 #, fuzzy msgid "The database is already open for writing." msgstr "El base de datos esta solo leer." #: src/gedlib/dbcontext.c:313 #, fuzzy msgid "The database is locked (no readwrite access)." msgstr "El base de datos esta solo leer." #: src/gedlib/dbcontext.c:316 #, fuzzy msgid "The database is unlocked." msgstr "La base de datos no fue ahorrada." #: src/gedlib/dbcontext.c:319 #, fuzzy msgid "keyfile is corrupt." msgstr "La base de datos era corrupta." #: src/gedlib/dbcontext.c:322 msgid "keyfile is wrong alignment." msgstr "" #: src/gedlib/dbcontext.c:325 msgid "keyfile is wrong version." msgstr "" #: src/gedlib/dbcontext.c:328 msgid "Existing database found." msgstr "" #: src/gedlib/dbcontext.c:332 #, fuzzy, c-format msgid "The database is already opened for read access by %d user." msgid_plural "The database is already opened for read access by %d users." msgstr[0] "El base de datos esta solo leer: usted no puede agregar registros." msgstr[1] "El base de datos esta solo leer: usted no puede agregar registros." #: src/gedlib/dbcontext.c:338 msgid "Invalid properties set for new database" msgstr "" #: src/gedlib/dbcontext.c:341 msgid "Undefined database error -- fix program." msgstr "" #: src/gedlib/gedcom.c:112 msgid "Missing NAME line in INDI record; record ignored.\n" msgstr "Línea de NAME que falta en registro de INDI; registro no hecho caso.\n" #: src/gedlib/init.c:228 src/tools/btedit.c:207 #, fuzzy, c-format msgid "Copyright (C) 1991-2007 Thomas T. Wetmore IV et al." msgstr "Copyright(c) 1991 a 1996, para T. T. Wetmore IV" #: src/gedlib/init.c:230 src/tools/btedit.c:209 #, c-format msgid "" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." msgstr "" #: src/gedlib/init.c:235 src/tools/btedit.c:214 #, c-format msgid "Written by Tom Wetmore. Maintained at lifelines.sourceforge.net." msgstr "" #: src/gedlib/keytonod.c:686 #, c-format msgid "Database error caused by reference to nonexisting key <%s>." msgstr "" #: src/gedlib/keytonod.c:687 msgid "It might be possible to fix this with btedit." msgstr "" #: src/gedlib/keytonod.c:688 msgid "Neighboring keys include:" msgstr "" #: src/gedlib/keytonod.c:1045 #, c-format msgid "Bad cache entry <%s> != <%s>" msgstr "" #: src/gedlib/keytonod.c:1072 #, c-format msgid "Cache [%s] overflowed its max size (%d)" msgstr "" #: src/gedlib/messages.c:44 msgid "You must identify a database." msgstr "Necesidad identificar un base de datos." #: src/gedlib/messages.c:45 msgid "What directory holds (or will hold) the LifeLines database? (? to list)" msgstr "" "Que carpeta tiene (o sostendrá) el LifeLines base de datos? (? para lista)" #: src/gedlib/messages.c:46 msgid "enter path: " msgstr "insertar curso: " #: src/gedlib/messages.c:47 msgid "There is no LifeLines database in that directory." msgstr "No hay un LifeLines base de datos en eso carpeta." #: src/gedlib/messages.c:48 msgid "Do you want to create a database there?" msgstr "Quiero hacer un base de datos ayi?" #: src/gedlib/messages.c:49 msgid "Argument to lock (-l) must be y or n." msgstr "La discusión a la cerradura (-l) debe ser y o n." #: src/gedlib/messages.c:50 msgid "Cannot remove last person from family." msgstr "No puede quitar a persona pasada de la familia." #: src/gedlib/messages.c:52 msgid "lines [-adkrwiflntcuFxoCzI] [database] # Use -F for Finnish database" msgstr "" "lines [-adkrwiflntcuFxoC] [base de datos] #Use -F para Finlandés base de " "datos" #: src/gedlib/messages.c:54 msgid "lines [-adkrwiflntcuxoCzI] [database] # Finnish database" msgstr "" "lines [-adkrwiflntcuFxoC] [base de datos] #Use -F para Finlandés base de " "datos" #: src/gedlib/messages.c:56 msgid "lines [-adkrwiflntcuxoCzI] [database]" msgstr "lines [-adkrwiflntcuxoC] [base de datos]" #: src/gedlib/messages.c:58 msgid "The database is read only; you may not add records." msgstr "El base de datos esta solo leer: usted no puede agregar registros." #: src/gedlib/messages.c:59 msgid "The database is read only; you may not change records." msgstr "El base de datos esta solo leer: usted no pueded cambiar registros." #: src/gedlib/messages.c:60 msgid "The database is read only; you may not merge records." msgstr "El base de datos esta solo leer: usted no puede buscando registros." #: src/gedlib/messages.c:61 msgid "The database is read only; you may not remove records." msgstr "El base de datos esta solo leer: usted no puede eliminar registros." #: src/gedlib/messages.c:62 msgid "The database is read only." msgstr "El base de datos esta solo leer." #: src/gedlib/messages.c:64 msgid "Name, key, refn, list, or @:" msgstr "insertar nombre, clave, refn, o lista, o @:" #: src/gedlib/messages.c:65 msgid "enter key or refn: " msgstr "insertar clave o refn: " #: src/gedlib/messages.c:66 msgid "Please choose the child to remove from the family." msgstr "Elija por favor a niño para eliminar desde la familia." #: src/gedlib/messages.c:67 msgid "Please choose the spouse/parent to remove from the family." msgstr "Elija por favor a cónyuge/progenitore para eliminar desde la familia." #: src/gedlib/messages.c:68 msgid "From which family is the child to be removed?" msgstr "¿De qué familia es el niño que se quitará?" #: src/gedlib/messages.c:69 msgid "From which family is the spouse/parent to be removed?" msgstr "¿De qué familia es el cónyuge/progenitore que se quitará?" #: src/gedlib/messages.c:70 msgid "Identify family (enter nothing to identify by individual members)." msgstr "" "Identifique a familia (no incorpore nada identificar por los miembros " "individuales)." #: src/gedlib/messages.c:71 msgid "Identify a spouse of the family, if known." msgstr "Identifique a cónyuge de la familia, si está sabido." #: src/gedlib/messages.c:72 msgid "Identify a child of the family, if known." msgstr "Identifique a niño de la familia, si está sabido." #: src/gedlib/messages.c:73 msgid "Identify the first child to swap." msgstr "Identifique a primer niño para intercambiar." #: src/gedlib/messages.c:74 msgid "Identify the second child to swap." msgstr "Identifique a segundo niño para intercambiar." #: src/gedlib/messages.c:75 msgid "Identify the child to reorder." msgstr "Identifique a niño para reordenar." #: src/gedlib/messages.c:76 msgid "Identify the first family/spouse to swap." msgstr "Identifique a primer familia/cónyuge para intercambiar." #: src/gedlib/messages.c:77 msgid "Identify the second family/spouse to swap." msgstr "Identifique a segunda familia/cónyuge para intercambio." #: src/gedlib/messages.c:78 msgid "Please choose the spouse/parent to browse to." msgstr "Elija por favor a cónyuge/progenitore para examinar." #: src/gedlib/messages.c:79 msgid "Please choose the first spouse/parent to browse to." msgstr "Elija por favor a primer cónyuge/progenitore para examinar." #: src/gedlib/messages.c:80 msgid "Please choose the second spouse/parent to browse to." msgstr "Elija por favor a segundo esposaprogenitore para examinar." #: src/gedlib/messages.c:81 msgid "Please choose the child to browse to." msgstr "Elija por favor a niño para examinar." #: src/gedlib/messages.c:82 msgid "Please choose the first child to browse to." msgstr "Elija por favor a primero niño para examinar." #: src/gedlib/messages.c:83 msgid "Please choose the second child to browse to." msgstr "Elija por favor a segundo niño para examinar." #: src/gedlib/messages.c:84 msgid "Please choose the family to browse to." msgstr "Elija por favor a familia para examinar." #: src/gedlib/messages.c:85 msgid "Enter Family Number to Browse to" msgstr "Elija por favor a numero de la familia para examinar." #: src/gedlib/messages.c:86 msgid "Please choose the first family to browse to." msgstr "Elija por favor a primera familia para examinar." #: src/gedlib/messages.c:87 msgid "Please choose the second family to browse to." msgstr "Elija por favor a segunda familia para examinar." #: src/gedlib/messages.c:88 msgid "Please choose the father/husband to browse to." msgstr "Elija por favor a padre/cónyuge para examinar." #: src/gedlib/messages.c:89 msgid "Please choose the first father/husband to browse to." msgstr "Elija por favor a primero padre/cónyuge para examinar." #: src/gedlib/messages.c:90 msgid "Please choose the second father/husband to browse to." msgstr "Elija por favor a segundo padre/cónyuge para examinar." #: src/gedlib/messages.c:91 msgid "Please choose the mother/wife to browse to." msgstr "Elija por favor a madre/esposa para examinar." #: src/gedlib/messages.c:92 msgid "Please choose the first mother/wife to browse to." msgstr "Elija por favor a primera madre/esposa para examinar." #: src/gedlib/messages.c:93 msgid "Please choose the second mother/wife to browse to." msgstr "Elija por favor a segunda madre/esposa para examinar." #: src/gedlib/messages.c:94 msgid "Identify a parent in the family having children swapped." msgstr "Identifique a padre en la familia que hace niños intercambiar." #: src/gedlib/messages.c:95 msgid "Whose families/spouses are to be swapped?" msgstr "¿De quién familias/cónyuges deben ser intercambiadas?" #: src/gedlib/messages.c:96 msgid "Identify one of the child's parents, if known." msgstr "Identifique a uno de los padres del niño, si está sabido." #: src/gedlib/messages.c:98 src/liflines/scan.c:127 msgid "Enter pattern to match against refn." msgstr "Incorpore el patrón para emparejar contra refn." #: src/gedlib/messages.c:100 msgid "Please choose from among these people." msgstr "Elija por favor entre de estas personas." #: src/gedlib/messages.c:101 msgid "Please choose from among these records." msgstr "Elija por favor entre de estos registros." #: src/gedlib/messages.c:102 msgid "Is this the new child? " msgstr "¿Está esto el nuevo niño?" #: src/gedlib/messages.c:103 msgid "Is this the new spouse? " msgstr "¿Está esto el nuevo cónyuge?" #: src/gedlib/messages.c:104 msgid "Is this the person? Select if so." msgstr "¿Está esto la persona? Seleccione si tan." #: src/gedlib/messages.c:105 msgid "Is this the record? Select if so." msgstr "¿Está esto el registro? Seleccione si tan." #: src/gedlib/messages.c:106 msgid "Select the child the new child precedes or select last." msgstr "Seleccione a niño que el nuevo niño precede o selecciónelo por último." #: src/gedlib/messages.c:107 msgid "Please identify next person to browse to." msgstr "Identifique por favor a persona siguiente para hojear a." #: src/gedlib/messages.c:108 msgid "Please identify record to browse to." msgstr "Identifique por favor el registro a las frentes a." #: src/gedlib/messages.c:109 msgid "Please identify one of the spouses." msgstr "Identifique por favor uno de los cónyuges." #: src/gedlib/messages.c:110 msgid "Please identify person or persons to browse to." msgstr "Identifique por favor a la persona o a personas para hojear a." #: src/gedlib/messages.c:111 msgid "Please choose family create operation." msgstr "Elija por favor a familia crean la operación." #: src/gedlib/messages.c:112 msgid "Do you want to enter another name?" msgstr "¿Usted desea entrar otro nombre?" #: src/gedlib/messages.c:114 msgid "This person is not a spouse or parent in any family." msgstr "Este persona no es un cónyuge o progenitore en ningua familia." #: src/gedlib/messages.c:115 msgid "This person is not a child in any family." msgstr "Este persona no es un niño en ningua familia." #: src/gedlib/messages.c:116 msgid "There is no one in the database with that name or key." msgstr "No hay nadie en la base de datos con ese nombre o clave." #: src/gedlib/messages.c:118 msgid "This person's father is not in the database." msgstr "El padre de esta persona no está en la base de datos." #: src/gedlib/messages.c:119 msgid "This person's mother is not in the database." msgstr "La madre de esta persona no está en la base de datos." #: src/gedlib/messages.c:120 msgid "This person has no spouse in the database." msgstr "Esta persona tiene no cónyuge en la base de datoss." #: src/gedlib/messages.c:121 msgid "This person has no younger sibling in the database." msgstr "Esta persona tiene no hermano menor en la base de datos." #: src/gedlib/messages.c:122 msgid "This person has no older sibling in the database." msgstr "Esta persona tiene no hermano mayor en la base de datos." #: src/gedlib/messages.c:123 msgid "This person's parents are not in the database." msgstr "Los padres de esta persona no estan en la base de datos." #: src/gedlib/messages.c:124 msgid "This family has no male spouse/parent in the database." msgstr "" "Este familia no tenemos un masculino cónyuge/progenitore en la base de datos." #: src/gedlib/messages.c:125 msgid "This family has no female spouse/parent in the database." msgstr "" "Este familia no tenemos un femeniño cónyuge/progenitore en la base de datos." #: src/gedlib/messages.c:126 msgid "There are no children in the database for this family." msgstr "No hay niños en la base de datos por ese familia." #: src/gedlib/messages.c:127 msgid "This person has no children in the database." msgstr "Este persona no tiene niños en la base de datos." #: src/gedlib/messages.c:128 msgid "No such child." msgstr "Ningún tal niño." #: src/gedlib/messages.c:129 msgid "No such person." msgstr "Ningún tal persona." #: src/gedlib/messages.c:130 msgid "No such record." msgstr "Ningún tal registro." #: src/gedlib/messages.c:131 msgid "No such family." msgstr "Ningún tal familia." #: src/gedlib/messages.c:132 msgid "No sources present." msgstr "Ningunas fuentes presentes." #: src/gedlib/messages.c:133 msgid "Please choose the source to view." msgstr "Elija por favor la fuente para visión." #: src/gedlib/messages.c:134 msgid "No events present." msgstr "Ningunos acontecimientos presente." #: src/gedlib/messages.c:135 msgid "Please choose the event to view." msgstr "Elija por favor el acontecimiento para visión." #: src/gedlib/messages.c:136 msgid "No others present." msgstr "Ningunos otros presente." #: src/gedlib/messages.c:137 msgid "Please choose the other to view." msgstr "Elija por favor el otro para visión." #: src/gedlib/messages.c:138 msgid "No notes present." msgstr "Ningunos notas presente." #: src/gedlib/messages.c:139 msgid "Please choose the note to view." msgstr "Elija por favor la nota para visión." #: src/gedlib/messages.c:140 msgid "No references present." msgstr "Ningunas referencias presentes." #: src/gedlib/messages.c:141 msgid "Please choose the reference to view." msgstr "Elija por favor la referencia para visión." #: src/gedlib/messages.c:142 msgid "Duplicated REFN - please choose." msgstr "REFN duplicados eligen por favor." #: src/gedlib/messages.c:144 msgid "New spouse/parent has unknown sex; can't add to family." msgstr "" "El nuevo cónyuge tiene sexo desconocido; no puede agregar a la familia." #: src/gedlib/messages.c:145 msgid "The persons are not of opposite sex; can't make family." msgstr "Las personas no están de sexo opuesto; no puede hacer a familia." #: src/gedlib/messages.c:146 msgid "This person is not a spouse in the family; can't remove." msgstr "La persona no es un cónyuge en la familia; no puede quitar" #: src/gedlib/messages.c:147 msgid "This person is not a child in the family; can't remove." msgstr "La persona no es un niño en la familia; no puede quitar" #: src/gedlib/messages.c:148 msgid "This person's sex is not known; can't make family." msgstr "El sexo de esta persona no se sabe; no puede hacer a familia." #: src/gedlib/messages.c:149 msgid "This family already has a husband/male parent." msgstr "Esta familia tiene ya un marido/padre." #: src/gedlib/messages.c:150 msgid "This family already has a wife/female parent." msgstr "Esta familia tiene ya una esposa/madre." #: src/gedlib/messages.c:151 msgid "This family has both spouses/parents; can't add another." msgstr "" "Esta familia tiene ambos cónyuges/progenitores; no puede agregar otros." #: src/gedlib/messages.c:152 msgid "This family has neither spouse/parent; can't remove." msgstr "Esta familia no tiene ningún cónyugeprogenitore; no puede quitar." #: src/gedlib/messages.c:153 msgid "This family still has links; not removed." msgstr "Esta familia todavía tiene acoplamientos; no quitado." #: src/gedlib/messages.c:155 msgid "Choose a family by selecting a spouse/parent." msgstr "Elija a familia seleccionando a un cónyuge/progenitore." #: src/gedlib/messages.c:156 msgid "" "Do you want to edit the person again? (Otherwise changes will be discarded.)" msgstr "" "¿Usted desea corregir a la persona otra vez? (Si no los cambios serán " "desechados.)" #: src/gedlib/messages.c:157 msgid "Do you want to edit the person again?" msgstr "¿Usted desea corregir a la persona otra vez?" #: src/gedlib/messages.c:158 msgid "" "Do you want to edit the family again? (Otherwise changes will be discarded.)" msgstr "" "¿Usted desea corregir a la familia otra vez? (Si no los cambios serán " "desechados.)" #: src/gedlib/messages.c:159 msgid "Do you want to edit the family again?" msgstr "¿Usted desea corregir a la familia otra vez?" #: src/gedlib/messages.c:160 msgid "" "Do you want to edit the source again? (Otherwise changes will be discarded.)" msgstr "" "¿Usted desea corregir a la fuente otra vez? (Si no los cambios serán " "desechados.)" #: src/gedlib/messages.c:161 msgid "Do you want to edit the source again?" msgstr "¿Usted desea corregir a la fuente otra vez?" #: src/gedlib/messages.c:162 msgid "" "Do you want to edit the event again? (Otherwise changes will be discarded.)" msgstr "" "¿Usted desea corregir el contecimiento otra vez? (Si no los cambios serán " "desechados.)" #: src/gedlib/messages.c:163 msgid "Do you want to edit the event again?" msgstr "¿Usted desea corregir el contecimiento otra vez?" #: src/gedlib/messages.c:164 msgid "" "Do you want to edit the record again? (Otherwise changes will be discarded.)" msgstr "" "¿Usted desea corregir el registro otra vez? (Si no los cambios serán " "desechados.)" #: src/gedlib/messages.c:165 msgid "Do you want to edit the record again?" msgstr "¿Usted desea corregir el registro otra vez?" #: src/gedlib/messages.c:166 msgid "Whom do you want to edit?" msgstr "¿Quién usted desea corregir?" #: src/gedlib/messages.c:167 msgid "Which source record do you want to edit?" msgstr "¿Qué registro de la fuente usted desea corregir?" #: src/gedlib/messages.c:168 msgid "Which event record do you want to edit?" msgstr "¿Qué registro del acontecimiento usted desea corregir?" #: src/gedlib/messages.c:169 msgid "What record do you want to edit?" msgstr "¿Qué registro usted desea corregir?" #: src/gedlib/messages.c:171 msgid "Do you really want to add this person to the database?" msgstr "¿Usted realmente desea agregar a esta persona a la base de datos?" #: src/gedlib/messages.c:172 msgid "Do you really want to add this family to the database?" msgstr "¿Usted realmente desea agregar a esta familia a la base de datos?" #: src/gedlib/messages.c:173 msgid "Do you really want to add this child to the family?" msgstr "¿Usted realmente desea agregar a este niño a la base de datos?" #: src/gedlib/messages.c:174 msgid "Do you really want to add this spouse/parent to the family?" msgstr "" "¿Usted realmente desea agregar a este cónyuge/progenitore a la base de datos?" #: src/gedlib/messages.c:175 msgid "Do you really want to add this source to the database?" msgstr "¿Usted realmente desea agregar esta fuente a la base de datos?" #: src/gedlib/messages.c:176 msgid "Do you really want to add this event to the database?" msgstr "¿Usted realmente desea agregar este acontecimiento a la base de datos?" #: src/gedlib/messages.c:177 msgid "Do you really want to add this record to the database?" msgstr "¿Usted realmente desea agregar este registro a la base de datos?" #: src/gedlib/messages.c:178 msgid "Do you really want to update this person?" msgstr "¿Usted realmente desea poner al día a esta persona?" #: src/gedlib/messages.c:179 msgid "Do you really want to update this family?" msgstr "¿Usted realmente desea poner al día a esta familia?" #: src/gedlib/messages.c:180 msgid "Do you really want to update this source?" msgstr "¿Quisiera actualizar esta fuente en verdad?" #: src/gedlib/messages.c:181 msgid "Do you really want to update this event?" msgstr "¿Usted realmente desea poner al día este acontecimiento?" #: src/gedlib/messages.c:182 msgid "Do you really want to update this record?" msgstr "¿Usted realmente desea poner al día este registro?" #: src/gedlib/messages.c:183 msgid "Are you sure you want to remove the person from the database?" msgstr "¿Es usted seguro desea quitar a la persona de la base de datos?" #: src/gedlib/messages.c:184 msgid "Are you sure you want to remove this record from the database?" msgstr "¿Es usted seguro desea quitar este registro de la base de datos?" #: src/gedlib/messages.c:185 msgid "Remove this family record?" msgstr "¿Quite este registro de la familia?" #: src/gedlib/messages.c:186 #, c-format msgid "(Family %s (%s, %s)" msgstr "(Familia %s (%s, %s)" #: src/gedlib/messages.c:187 msgid "Do you really want to merge these two persons?" msgstr "¿Usted realmente desea combinar a estas dos personas?" #: src/gedlib/messages.c:188 msgid "Do you really want to merge these two families?" msgstr "¿Usted realmente desea combinar a estas dos familias?" #: src/gedlib/messages.c:189 msgid "Do you really want to swap spouse orders?" msgstr "¿Usted realmente desea intercambiar pedidos del cónyuge?" #: src/gedlib/messages.c:190 msgid "Do you really want to reorder children?" msgstr "¿Usted realmente desea reordenar a niños?" #: src/gedlib/messages.c:191 msgid "Do you really want to remove this child from his/her family?" msgstr "¿Usted realmente desea quitar a este niño de su familia?" #: src/gedlib/messages.c:192 msgid "Do you really want to remove this spouse from his/her family?" msgstr "¿Usted realmente desea quitar a este cónyuge de su familia?" #: src/gedlib/messages.c:193 msgid "Too many spouses to display full list" msgstr "También muchos cónyuges para exhibir la lista completa." #: src/gedlib/messages.c:194 msgid "These persons are children in different families." msgstr "Estas personas son niños en diversas familias." #: src/gedlib/messages.c:195 msgid "Are you sure you want to merge them?" msgstr "¿Es usted seguro usted desea combinarlos?" #: src/gedlib/messages.c:197 msgid "There is something wrong with the data." msgstr "Hay algo mal con los datos." #: src/gedlib/messages.c:198 msgid "Please identify the child." msgstr "Identifique por favor a niño." #: src/gedlib/messages.c:199 msgid "Please identify one of the child's siblings." msgstr "Identifique por favor a uno de los hermanos del niño." #: src/gedlib/messages.c:200 msgid "Identify spouse/parent to add to an existing family." msgstr "Identifique a cónyuge para agregar a una familia existente." #: src/gedlib/messages.c:201 msgid "Identify spouse/parent already in family, if known." msgstr "Identifique a cónyuge ya en familia, si está sabido." #: src/gedlib/messages.c:202 msgid "Identify child already in family." msgstr "Identifique a niño ya en familia." #: src/gedlib/messages.c:204 msgid "This person is already a child in a family." msgstr "Esta persona es ya un niño en una familia." #: src/gedlib/messages.c:205 msgid "Identify a spouse/parent for the new family." msgstr "Identificar un cónyuge/progenitore de la nueva familia." #: src/gedlib/messages.c:206 msgid "Identify the second spouse/parent, if known." msgstr "Identificar el segundo cónyuge/progenitore, si conocido." #: src/gedlib/messages.c:207 msgid "Both families must have husbands/fathers." msgstr "Necesidad los dos familias tener maridos/padres." #: src/gedlib/messages.c:208 msgid "Both families must have wives/mothers." msgstr "Necesidad los dos familias tener esposas/madres." #: src/gedlib/messages.c:210 msgid "Identify spouse/parent in second family, if known." msgstr "Identificar cónyuge/progenitore en el segundo familia, si conocido." #: src/gedlib/messages.c:211 msgid "Identify child in second family." msgstr "Identificar niño en el segundo familia." #: src/gedlib/messages.c:212 msgid "Identify second person to browse to." msgstr "Identificar la segunda persona a examinar." #: src/gedlib/messages.c:214 msgid "Create a family with this person as a child." msgstr "Crear un familia con eso persona como un/una niño/a." #: src/gedlib/messages.c:215 msgid "Create a family with this person as a spouse/parent." msgstr "Crear una familia con este persona como un a cónyuge/progenitore." #: src/gedlib/messages.c:216 msgid "This family has less than two children; can't swap." msgstr "Esta familia tiene menos de dos niños; no puede intercambiar." #: src/gedlib/messages.c:217 msgid "This person is a spouse/parent in less than two families." msgstr "Esta persona es un cónyuge/un progenitor en menos de dos familias." #: src/gedlib/messages.c:218 msgid "Something impossible happened. Contact tech support." msgstr "Algo imposible sucedido. Ayuda de tech del contacto." #: src/gedlib/messages.c:220 msgid "The two children were swapped." msgstr "Intercambiaron a los dos niños." #: src/gedlib/messages.c:221 msgid "The two families were swapped." msgstr "Las dos familias fue cambiar." #: src/gedlib/messages.c:222 msgid "The child was removed from his/her family." msgstr "El niño fue eliminar desde el/ella familia." #: src/gedlib/messages.c:223 msgid "The spouse was removed from his/her family." msgstr "El cónyuge fue eliminar desde el/ella familia." #: src/gedlib/messages.c:225 msgid "A person cannot be merged with him/herself." msgstr "Una persona no puede ser combinada con se." #: src/gedlib/messages.c:226 msgid "A family cannot be merged with itself." msgstr "Una familia no puede ser combinada con sí mismo." #: src/gedlib/messages.c:227 msgid "Two persons with different parents cannot be merged." msgstr "Dos personas con diversos padres no pueden ser combinadas." #: src/gedlib/messages.c:228 msgid "Two parents of different sexes cannot be merged." msgstr "Dos padres de diversos sexos no pueden ser combinados." #: src/gedlib/messages.c:229 msgid "The families have different fathers/husbands; cannot merge." msgstr "Las familias tienen diversos padres/cónyuges no pueden combinarse." #: src/gedlib/messages.c:230 msgid "The families have different wives/mothers; cannot merge." msgstr "Las familias tienen diversas madres/esposas no pueden combinarse." #: src/gedlib/messages.c:231 msgid "Who do you want to remove from the database?" msgstr "Quien quiero eliminar desde el base de datos?" #: src/gedlib/messages.c:232 msgid "What record do you want to remove from the database?" msgstr "Que registro quiero eliminar desde el base de datos?" #: src/gedlib/messages.c:233 msgid "Place the child last in the family." msgstr "Ponga el último del niño en la familia." #: src/gedlib/messages.c:234 msgid "Error in abbreviations file." msgstr "Error en archivo de las abreviaturas." #: src/gedlib/messages.c:235 msgid "Error in user options file." msgstr "Error en archivo de las opciones del usuario." #: src/gedlib/messages.c:236 msgid "Error in character mapping file." msgstr "Error en el carácter traz el archivo." #: src/gedlib/messages.c:237 #, c-format msgid "(Separator is %s)" msgstr "(El separador es %s" #: src/gedlib/messages.c:238 msgid "Do you want to re-edit it?" msgstr "¿Usted desea re-corregirlo?" #: src/gedlib/messages.c:240 #, c-format msgid "%s was added to the database." msgstr "%s fue agregado a la base de datos." #: src/gedlib/messages.c:241 #, c-format msgid "%s was added as a child." msgstr "%s fue agregado como niño." #: src/gedlib/messages.c:242 #, c-format msgid "%s was added as a spouse and/or parent." msgstr "%s fue agregado como un cónyuge y/o progenitore." #: src/gedlib/messages.c:243 msgid "The new family was added to the database." msgstr "Agregaron a la nueva familia a la base de datos." #: src/gedlib/messages.c:244 #, c-format msgid "%s was modified in the database." msgstr "%s fue modificado en la base de datos." #: src/gedlib/messages.c:245 msgid "The family was modified in the database." msgstr "Modificaron a la familia en la base de datos." #: src/gedlib/messages.c:246 msgid "The source was modified in the database." msgstr "La fuente fue modificada en la base de datos." #: src/gedlib/messages.c:247 msgid "The event was modified in the database." msgstr "El acontecimiento fue modificado en la base de datos." #: src/gedlib/messages.c:248 msgid "The record was modified in the database." msgstr "El registro fue modificado en la base de datos." #: src/gedlib/messages.c:250 #, c-format msgid "Could not open file %s." msgstr "No podía abrir el fichero %s." #: src/gedlib/messages.c:251 msgid "Filepath too long." msgstr "Carpeta del fichero demasiado largo." #: src/gedlib/messages.c:253 msgid "Please mark a record first." msgstr "Marque por favor un primer de registro." #: src/gedlib/messages.c:255 #, c-format msgid "The current list is now named %s." msgstr "La lista actual ahora se nombra %s." #: src/gedlib/messages.c:256 msgid "The current list is not named." msgstr "La lista actual no se nombra." #: src/gedlib/messages.c:257 msgid "What should the name of this list be?" msgstr "¿Qué debe el nombre de esta lista ser?" #: src/gedlib/messages.c:258 msgid "No persons were added to the current list." msgstr "No se agregó a ningunas personas a la lista actual." #: src/gedlib/messages.c:259 msgid "What persons or list do you want to add to the current list?" msgstr "Qué personas o lista usted desea agregar a la lista actual." #: src/gedlib/messages.c:260 msgid "You are at the bottom of the list." msgstr "Usted está en el fondo de la lista." #: src/gedlib/messages.c:261 msgid "You are at the top of the list." msgstr "Usted está en la tapa de la lista." #: src/gedlib/messages.c:262 msgid "New persons were added to the current list." msgstr "Agregaron a las nuevas personas a la lista actual." #: src/gedlib/messages.c:264 msgid "System error: illegal map code" msgstr "Error de sistema: código ilegal del mapa" #: src/gedlib/messages.c:265 msgid "No such translation table in this database" msgstr "Ninguna tal tabla de la traducción en esta base de datos." #: src/gedlib/messages.c:268 msgid "Because of errors the GEDCOM file was not loaded.\n" msgstr "Debido a errores el archivo de GEDCOM no fue cargado.\n" #: src/gedlib/messages.c:269 msgid "No errors; adding records with original keys..." msgstr "Ningunos errores; adición de registros con llaves originales..." #: src/gedlib/messages.c:270 msgid "No errors; adding records with new keys..." msgstr "Ningunos errores; adición de registros con nuevas llaves..." #: src/gedlib/messages.c:271 msgid "Use original keys from GEDCOM file?" msgstr "¿Utilice las llaves originales del archivo de GEDCOM?" #: src/gedlib/messages.c:272 msgid "Proceed?" msgstr "¿Proceda?" #: src/gedlib/messages.c:273 msgid "Enter name of output archive file." msgstr "Incorpore el nombre del fichero de archivo de la salida." #: src/gedlib/messages.c:274 #, c-format msgid "Database `%s' has been saved in `%s'." msgstr "La base de datos '%s' se ha ahorrado adentro `%s'." #: src/gedlib/messages.c:275 msgid "Enter name of translation table file to write" msgstr "" "Incorpore el nombre del archivo de tabla de la traducción para escribir." #: src/gedlib/messages.c:276 msgid "Enter name of translation table file to read" msgstr "Incorpore el nombre del archivo de tabla de la traducción para leer." #: src/gedlib/messages.c:277 #, c-format msgid "Line %d: The person defined here has no key: skipped." msgstr "Línea %d: La persona definida aquí no tiene ninguna llave: saltado." #: src/gedlib/messages.c:278 #, c-format msgid "Line %d: The family defined here has no key." msgstr "Línea %d: La familia definida aquí no tiene ninguna llave." #: src/gedlib/messages.c:279 #, c-format msgid "Lines %d and %d: Person %s is multiply defined: skipped." msgstr "Lineas %d y %d: Persons %s es multiplica definido: saltado." #: src/gedlib/messages.c:280 #, c-format msgid "Lines %d and %d: Family %s is multiply defined." msgstr "Lineas %d y %d: Familia %s es multiplica definido: saltado." #: src/gedlib/messages.c:281 #, c-format msgid "Line %d: Person %s has an incorrect key: skipped." msgstr "Linea %d: La Persons %s tiene un clave incorrecto: saltado." #: src/gedlib/messages.c:282 #, c-format msgid "Line %d: Family %s has an incorrect key." msgstr "Linea %d: Familia %s tiene clave incorrecto." #: src/gedlib/messages.c:283 #, c-format msgid "Person %s is referred to but not defined." msgstr "Refieren pero no se definen a la persona %s." #: src/gedlib/messages.c:284 #, c-format msgid "Family %s is referred to but not defined." msgstr "Refieren pero no se definen a la familia %s." #: src/gedlib/messages.c:285 #, c-format msgid "Source %s is referred to but not defined." msgstr "Refieren pero no se definen a la fuente %s." #: src/gedlib/messages.c:286 #, c-format msgid "Event %s is referred to but not defined." msgstr "Refieren pero no se definen a el eventos %s." #: src/gedlib/messages.c:287 #, c-format msgid "Line %d: This line has a level number that is too large." msgstr "Línea %d: Esta línea tiene un número llano que sea demasiado grande." #: src/gedlib/messages.c:288 #, c-format msgid "Line %d: Person defined here has no name." msgstr "Linea %d: La persona definida aquí no tiene ningún nombre.." #: src/gedlib/messages.c:294 msgid "" msgstr "" #: src/gedlib/messages.c:296 msgid "What is the name of the program?" msgstr "¿Cuál es el nombre del programa?" #: src/gedlib/messages.c:297 msgid "Please enter the name of the GEDCOM file." msgstr "Incorpore por favor el nombre del archivo de GEDCOM." #: src/gedlib/messages.c:299 msgid "What is the name of the output file?" msgstr "¿Cuál es el nombre del archivo de salida?" #: src/gedlib/messages.c:300 msgid "Malformed configuration file: line too long." msgstr "Archivo malformado de la configuración: línea demasiado larga." #: src/gedlib/messages.c:301 msgid "Unsupported file encoding (no multibyte encodings except UTF-8)." msgstr "" "Codificación sin apoyo del archivo (ningunos encodings del multibyte " "exceptúan UTF-8)." #: src/gedlib/messages.c:302 #, c-format msgid "Unsupported file encoding: %s." msgstr "El archivo contiene una codificación no soportada: «%s»" #: src/gedlib/messages.c:305 msgid "Enter string for program" msgstr "Entre en la secuencia para el programa" #: src/gedlib/messages.c:306 msgid "enter string: " msgstr "entre en la secuencia:" #: src/gedlib/messages.c:307 msgid "enter integer:" msgstr "incorpore el número entero:" #: src/gedlib/messages.c:308 msgid "enter name: " msgstr "agregue nombre: " #: src/gedlib/messages.c:309 msgid "Strike any key to continue." msgstr "Pulse una tecla para continuar" #: src/gedlib/messages.c:313 msgid "" "0 SOUR\n" "1 REFN\n" "1 TITL Title\n" "1 AUTH Author" msgstr "" "0 SOUR\n" "1 REFN\n" "1 TITL Titulo\n" "1 AUTH Autor" #: src/gedlib/messages.c:314 msgid "" "0 EVEN\n" "1 REFN\n" "1 DATE\n" "1 PLAC\n" "1 INDI\n" " 2 NAME\n" " 2 ROLE\n" "1 SOUR" msgstr "" "0 EVEN\n" "1 REFN\n" "1 DATE\n" "1 PLAC\n" "1 INDI\n" " 2 NAME\n" " 2 ROLE\n" "1 SOUR" #: src/gedlib/messages.c:315 msgid "" "0 XXXX\n" "1 REFN" msgstr "" "0 XXXX\n" "1 REFN" #: src/gedlib/messages.c:319 msgid "The file is as positioned at EOF." msgstr "El archivo está según lo colocado en el EOF." #: src/gedlib/messages.c:320 #, c-format msgid "Line %d: This line is empty; EOF?" msgstr "Linea %d: Esta línea es vacía; EOF?" #: src/gedlib/messages.c:321 #, c-format msgid "Line %d: This line is too long." msgstr "Línea %d: Esta línea es demasiado larga." #: src/gedlib/messages.c:322 #, c-format msgid "Line %d: This line has no level number." msgstr "Linea %d: Esta línea no tiene ningún número llano." #: src/gedlib/messages.c:323 #, c-format msgid "Line %d: This line is incomplete." msgstr "Línea %d: Esta línea es incompleta." #: src/gedlib/messages.c:324 #, c-format msgid "Line %d: This line has a bad link." msgstr "Line %d: Esta línea tiene un mal acoplamiento." #: src/gedlib/messages.c:325 #, c-format msgid "Line %d: This line needs white space before tag." msgstr "Line %d: Esta línea necesita el espacio blanco antes de etiqueta." #: src/gedlib/messages.c:326 #, c-format msgid "Line %d: This line has an illegal level." msgstr "Line %d: Esta línea tiene un nivel ilegal." #: src/gedlib/messages.c:327 msgid "The record begins at wrong level." msgstr "El registro comienza en el nivel incorrecto." #: src/gedlib/messages.c:330 msgid "" "\n" "Aborting now. Core dump? [y/n]" msgstr "" "\n" "Abortando ahora. Core dump? [s/n]" #: src/gedlib/messages.c:331 msgid "" "Looks like a program was running.\n" "Check file %1 around line %2.\n" msgstr "" "Los parecer un programa funcionaban.\n" "Compruebe el archivo %1 alrededor de la línea %2.\n" #: src/gedlib/messages.c:332 msgid "signal %1: %2" msgstr "señal %1: %2" #: src/gedlib/messages.c:334 msgid "SIGNAL 0" msgstr "SIGNAL 0" #: src/gedlib/messages.c:335 msgid "HANGUP" msgstr "HANGUP" #: src/gedlib/messages.c:336 msgid "INTERRUPT" msgstr "INTERRUPT" #: src/gedlib/messages.c:337 msgid "QUIT" msgstr "SALIR" #: src/gedlib/messages.c:338 msgid "ILLEGAL INSTRUCTION" msgstr "INSTRUCCION ILLEGAL" #: src/gedlib/messages.c:339 msgid "TRACE TRAP" msgstr "TRACE TRAP" #: src/gedlib/messages.c:340 msgid "ABORT" msgstr "ABORTAR" #: src/gedlib/messages.c:341 msgid "EMT INST" msgstr "EMT INST" #: src/gedlib/messages.c:342 msgid "FLOATING POINT EXCEPTION" msgstr "EXCEPCIÓN DE COMA FLOTANTE" #: src/gedlib/messages.c:343 msgid "KILL" msgstr "MATANZA" #: src/gedlib/messages.c:344 msgid "BUS ERROR" msgstr "ERROR DE BUS" #: src/gedlib/messages.c:345 msgid "SEGMENTATION ERROR" msgstr "ERROR DE LA SEGMENTACIÓN" #: src/gedlib/messages.c:346 msgid "SYSTEM CALL ERROR" msgstr "ERROR DE LA LLAMADA DEL SISTEMA" #: src/gedlib/messages.c:347 msgid "PIPE WRITE" msgstr "PIPE WRITE" #: src/gedlib/messages.c:348 msgid "ALARM CLOCK" msgstr "ALARMA DEL RELOJ" #: src/gedlib/messages.c:350 msgid "TERMINATE FROM KILL" msgstr "TERMINE DE MATANZA" #: src/gedlib/messages.c:351 msgid "USER SIGNAL 1" msgstr "Señal 1 por el usuario" #: src/gedlib/messages.c:352 msgid "USER SIGNAL 2" msgstr "Señal 1 por el usuario" #: src/gedlib/messages.c:353 msgid "DEATH OF CHILD" msgstr "MUERTO DE NINO" #: src/gedlib/messages.c:354 msgid "POWER-FAIL RESTART" msgstr "RECOMENZAR DE FALL DE ENERGÍA" #: src/gedlib/messages.c:355 msgid "WINDOW CHANGE" msgstr "CAMBIO DE LA VENTANA" #: src/gedlib/messages.c:356 msgid "Unknown signal" msgstr "señal desconocida" #: src/gedlib/messages.c:360 msgid "person" msgstr "persona" #: src/gedlib/messages.c:361 msgid ", of " msgstr ", de" #: src/gedlib/messages.c:362 msgid "father" msgstr "padre" #: src/gedlib/messages.c:363 msgid "mother" msgstr "madre" #: src/gedlib/messages.c:364 msgid "spouse" msgstr "cónyuge" #: src/gedlib/messages.c:365 msgid "child" msgstr "niño" #: src/gedlib/messages.c:368 msgid "m. " msgstr "cas. " #: src/gedlib/messages.c:370 msgid "div. " msgstr "div. " #: src/gedlib/messages.c:372 msgid "b. " msgstr "n. " #: src/gedlib/messages.c:374 msgid "bap. " msgstr "bau. " #: src/gedlib/messages.c:376 msgid "d. " msgstr "m. " #: src/gedlib/messages.c:378 msgid "bur. " msgstr "ent. " #: src/gedlib/messages.c:380 msgid "cb. " msgstr "nb." #: src/gedlib/messages.c:382 msgid "married: " msgstr "casado: " #: src/gedlib/messages.c:383 msgid "born: " msgstr "nato: " #: src/gedlib/messages.c:384 msgid "bapt: " msgstr "bau: " #: src/gedlib/messages.c:385 msgid "died: " msgstr "muerto: " #: src/gedlib/messages.c:386 msgid "buri: " msgstr "enterr: " #: src/gedlib/messages.c:390 msgid "You cannot edit the INDI line in a person record." msgstr "Usted no puede corregir la línea de INDI en un registro de la persona." #: src/gedlib/messages.c:391 msgid "You cannot edit the FAMC line in a person record." msgstr "Usted no puede corregir la línea de FAMC en un registro de la familia." #: src/gedlib/messages.c:392 msgid "You cannot edit the FAMS lines in a person record." msgstr "Usted no puede corregir la línea de FAMS en un registro de la familia." #: src/gedlib/messages.c:393 msgid "You cannot edit the FAM line in a family record." msgstr "Usted no puede corregir la línea de FAM en un registro de la familia." #: src/gedlib/messages.c:394 msgid "You cannot edit the HUSB line in a family record." msgstr "" "Usted no puede corregir la linea de HUSB en un registro de una persona." #: src/gedlib/messages.c:395 msgid "You cannot edit the WIFE line in a family record." msgstr "" "Usted no puede corregir la linea de WIFE en un registro de una persona." #: src/gedlib/messages.c:396 msgid "You cannot edit the CHIL lines in a family record." msgstr "" "Usted no puede corregir la linea de CHIL en un registro de una persona." #: src/gedlib/messages.c:397 msgid "The record is empty." msgstr "El registro es vacío." #: src/gedlib/messages.c:398 msgid "The record does not begin with an INDI line." msgstr "El registro no comienza con una línea de INDI." #: src/gedlib/messages.c:399 msgid "The record does not begin with a FAM line." msgstr "El registro no comienza con una línea de FAM." #: src/gedlib/messages.c:400 msgid "The record does not begin with a SOUR line." msgstr "El registro no comienza con una línea de SOUR." #: src/gedlib/messages.c:401 msgid "The record does not begin with an EVEN line." msgstr "El registro no comienza con una línea de EVEN." #: src/gedlib/messages.c:402 msgid "INDI, FAM, SOUR, EVEN records may not be other records." msgstr "Los registros INDI, FAM, SOUR, EVEN pueden no ser otros registros." #: src/gedlib/messages.c:403 msgid "The record contains multiple level 0 lines." msgstr "El registro contiene líneas múltiples del nivel 0." #: src/gedlib/messages.c:404 msgid "This person record has bad GEDCOM name syntax." msgstr "Este registro de la persona tiene mal sintaxis conocido de GEDCOM." #: src/gedlib/messages.c:405 msgid "You cannot change the sex of a parent." msgstr "Usted no puede cambiar el sexo de un progenitore." #: src/gedlib/messages.c:406 msgid "REFN key is already in use." msgstr "Esta clave de REFN ya está en uso" #: src/gedlib/messages.c:408 msgid "Tag is too long to connect automatically." msgstr "La etiqueta es demasiado larga conectar automáticamente." #: src/gedlib/messages.c:410 msgid "Database records" msgstr "Registros de la base de datos." #: src/gedlib/messages.c:411 #, c-format msgid "%dI, %dF, %dS, %dE, %dX" msgstr "" #: src/gedlib/messages.c:414 #, c-format msgid "LifeLines %s - Genealogical DB and Programming System" msgstr "LifeLines %s - BD Genealógica y Sistema de Programación" #: src/gedlib/messages.c:415 msgid "Copyright(c) 1991 to 1996, by T. T. Wetmore IV" msgstr "Copyright(c) 1991 a 1996, para T. T. Wetmore IV" #: src/gedlib/messages.c:416 #, c-format msgid "Current Database - %s" msgstr "Base de datos Actual - %s" #: src/gedlib/messages.c:418 msgid " (immutable)" msgstr " (inmutable)" #: src/gedlib/messages.c:420 msgid " (read only)" msgstr " (solo leer)" #: src/gedlib/messages.c:421 msgid "Please choose an operation:" msgstr "Elija por favor una operación:" #: src/gedlib/messages.c:422 msgid "Not valid command" msgstr "Comando inválido." #: src/gedlib/messages.c:425 msgid "enter y (yes) or n (no): " msgstr "agregue s (si) o n (no): " #: src/gedlib/messages.c:426 msgid "yYnN" msgstr "sSnN" #: src/gedlib/messages.c:427 msgid "yY" msgstr "sS" #: src/gedlib/messages.c:430 msgid "LifeLines -- Person Browse Screen (* toggles menu)" msgstr "" "LifeLines -- La Persona Hojea La Pantalla (* acciona la palanca del menú)" #: src/gedlib/messages.c:431 msgid "LifeLines -- Family Browse Screen (* toggles menu)" msgstr "" "LifeLines -- La Familia Hojea La Pantalla (* acciona la palanca del menú)" #: src/gedlib/messages.c:432 msgid "LifeLines -- Two Person Browse Screen (* toggles menu)" msgstr "" "LifeLines -- La Persona Dos Hojea La Pantalla (* acciona la palanca del menú)" #: src/gedlib/messages.c:433 msgid "LifeLines -- Two Family Browse Screen (* toggles menu)" msgstr "" "LifeLines -- La Familia Dos Hojea La Pantalla (* acciona la palanca del menú)" #: src/gedlib/messages.c:434 msgid "LifeLines -- Auxiliary Browse Screen (* toggles menu)" msgstr "" "LifeLines -- El Auxiliar Hojea La Pantalla (* acciona la palanca del menú)" #: src/gedlib/messages.c:435 msgid "LifeLines -- List Browse Screen (* toggles menu)" msgstr "" "LifeLines -- La Lista Hojea La Pantalla (* acciona la palanca del menú)" #: src/gedlib/messages.c:439 msgid "Commands: Select by number, u Page Up, d Page Down, i Select, q Quit" msgstr "" "Comandos: Seleccione por número, u Página Para arriba, d Página Abajo, i " "Selectar, q Quitar" #: src/gedlib/messages.c:440 msgid "Commands: u Page Up, d Page Down, q Quit" msgstr "Comandos: u Página Para arriba, d Página Abajo, q Quitar" #: src/gedlib/messages.c:441 msgid "Messages:" msgstr "Mensajes:" #: src/gedlib/messages.c:444 msgid "Please choose from the following options:" msgstr "Elija por favor de las opciones siguientes:" #: src/gedlib/messages.c:445 #, c-format msgid "New record is %s" msgstr "Registro nuevo esta %s" #: src/gedlib/messages.c:446 msgid "Insert xref automatically at bottom of current record." msgstr "" "Inserte xref automáticamente en la parte inferior del registro de la " "corriente." #: src/gedlib/messages.c:447 msgid "Edit current record now to add xref manually." msgstr "" "Ahora corrija el registro de la corriente para agregar xref manualmente." #: src/gedlib/messages.c:448 msgid "Browse new record (without adding xref)." msgstr "Hojee el nuevo registro (sin la adición de xref)." #: src/gedlib/messages.c:449 msgid "Return to current record (without adding xref)." msgstr "Vuelva al registro de la corriente (sin la adición del xref)." #: src/gedlib/messages.c:452 msgid "Spouse unknown" msgstr "Conyuge desconocido" #: src/gedlib/messages.c:453 msgid "No more history" msgstr "No mas historia" #: src/gedlib/messages.c:454 msgid "Bad history count" msgstr "Mala cuenta de la historia" #: src/gedlib/messages.c:455 msgid "Bad backup history count" msgstr "Mala cuenta de reserva de la historia" #: src/gedlib/messages.c:456 msgid "Bad history length" msgstr "Mala longitud de la historia" #: src/gedlib/messages.c:457 #, c-format msgid "Delete history (%d entries)?" msgstr "¿Historia de la cancelación (entradas de %d)?" #: src/gedlib/messages.c:458 msgid "Error accessing data" msgstr "Datos que tienen acceso del error" #: src/gedlib/messages.c:459 msgid "Choose from history" msgstr "Elija de historia" #: src/gedlib/messages.c:460 msgid "" "Cannot combine immutable (-i) or read-only (-r) with read-write (-w) access." msgstr "" "No puede combinar inmutable (-i) o inalterable (-r) con de lectura/grabación " "(-w) acceso." #: src/gedlib/messages.c:461 msgid "Cannot combine forceopen (-f) and lock (-l) flags." msgstr "No puede combinar forceopen (-f) y se traba (-l) las banderas." #: src/gedlib/messages.c:462 msgid "Default path: " msgstr "Trayectoria del defecto" #: src/gedlib/messages.c:463 msgid "WARNING: missing keys" msgstr "ADVERTENCIA: llaves que falta" #: src/gedlib/messages.c:464 msgid "This does not point to another record in the database!" msgstr "¡Esto no señala a otro registro en la base de datos!" #: src/gedlib/messages.c:465 msgid "enter file name" msgstr "incorpore el nombre del archivo" #: src/gedlib/messages.c:466 #, c-format msgid "enter file name (*%s)" msgstr "incorpore el nombre del archivo (%s)" #: src/gedlib/messages.c:467 msgid "There is no record with that key or reference." msgstr "No hay registro con esa clave o referencia." #: src/gedlib/messages.c:468 msgid "Database was corrupt." msgstr "La base de datos era corrupta." #: src/gedlib/messages.c:471 msgid "Bad decimal number format." msgstr "Mal formato de número decimal." #: src/gedlib/messages.c:472 msgid "Bad hexidecimal number format." msgstr "Mal formato de número hexadecimal." #: src/gedlib/messages.c:473 msgid "No replacement string on line." msgstr "Ninguna secuencia del reemplazo en línea." #: src/gedlib/messages.c:474 msgid "No original string on line." msgstr "Ninguna secuencia original en línea." #: src/gedlib/messages.c:475 msgid "Bad escape format." msgstr "Mal formato del escape." #: src/gedlib/messages.c:476 #, c-format msgid "%s: line %d (entry %d): %s" msgstr "%s: línea %d (entrada %d): %s" #: src/gedlib/messages.c:479 src/liflines/brwsmenu.c:26 msgid "q Return to main menu" msgstr "q Vuelva al menú principal" #: src/gedlib/messages.c:480 msgid "q Return to previous menu" msgstr "q Vuelva al menú anterior" #: src/gedlib/messages.c:481 msgid "q Quit program" msgstr "q Pare el programa" #: src/gedlib/messages.c:482 msgid "Q Quit current database" msgstr "Q Pare la base de datos actual" #: src/gedlib/messages.c:485 msgid "b Browse the persons in the database" msgstr "b Examinar los personas en el base de datos" #: src/gedlib/messages.c:486 msgid "s Search database" msgstr "s Base de datos de la búsqueda" #: src/gedlib/messages.c:487 msgid "a Add information to the database" msgstr "a Agregar informacion a la base de datos" #: src/gedlib/messages.c:488 msgid "d Delete information from the database" msgstr "d Información de la cancelación de la base de datos" #: src/gedlib/messages.c:489 msgid "r Generate report by entering report name" msgstr "r Genere el informe incorporando nombre del informe" #: src/gedlib/messages.c:490 msgid "p Pick a report from list and run" msgstr "p Escoja un informe de la lista y funcione" #: src/gedlib/messages.c:491 msgid "c Character set options" msgstr "c Opciones del juego de caracteres" #: src/gedlib/messages.c:492 msgid "t Modify character translation tables" msgstr "t Modifique las tablas de la traducción del carácter" #: src/gedlib/messages.c:493 msgid "u Miscellaneous utilities" msgstr "u Utilidades misceláneas" #: src/gedlib/messages.c:494 msgid "x Handle source, event and other records" msgstr "x Fuentes, ecentos y otro de la manija registros" #: src/gedlib/messages.c:497 msgid "What utility do you want to perform?" msgstr "¿Qué utilidad usted desea realizar?" #: src/gedlib/messages.c:498 msgid "s Save the database in a GEDCOM file" msgstr "s Excepto la base de datos en un GEDCOM archivo" #: src/gedlib/messages.c:499 msgid "r Read in data from a GEDCOM file" msgstr "r Lea adentro los datos de un GEDCOM archivo" #: src/gedlib/messages.c:500 msgid "R Pick a GEDCOM file and read in" msgstr "R Escoja un GEDCOM archivo y lea adentro" #: src/gedlib/messages.c:501 msgid "k Find a person's key value" msgstr "k Encuentre el valor clave de una persona" #: src/gedlib/messages.c:502 msgid "i Identify a person from key value" msgstr "i Identifique a persona del valor de clave" #: src/gedlib/messages.c:503 msgid "d Show database statistics" msgstr "d Demuestre la estadística de la base de datos" #: src/gedlib/messages.c:504 msgid "m Show memory statistics" msgstr "m Demuestre la estadística de la memoria" #: src/gedlib/messages.c:505 msgid "e Edit the place abbreviation file" msgstr "e Corrija el archivo de la abreviatura del lugar" #: src/gedlib/messages.c:506 msgid "o Edit the user options file" msgstr "o Corrija el archivo de las opciones del usuario" #: src/gedlib/messages.c:509 msgid "What activity do you want to perform?" msgstr "¿Qué actividad usted desea realizar?" #: src/gedlib/messages.c:510 msgid "s Browse source records" msgstr "s Examinar los registros de la fuente" #: src/gedlib/messages.c:511 msgid "e Browse event records" msgstr "e Hojee los registros del eventos" #: src/gedlib/messages.c:512 msgid "x Browse other records" msgstr "x Examinar otros registros" #: src/gedlib/messages.c:513 msgid "1 Add a source record to the database" msgstr "1 Agregue un registro de la fuente a la base de datos" #: src/gedlib/messages.c:514 msgid "2 Edit source record from the database" msgstr "2 Corrija el registro de la fuente de la base de datos" #: src/gedlib/messages.c:515 msgid "3 Add an event record to the database" msgstr "3 Agregue un registro del acontecimiento a la base de datos" #: src/gedlib/messages.c:516 msgid "4 Edit event record from the database" msgstr "4 Corrija un registro del acontecimiento a la base de datos" #: src/gedlib/messages.c:517 msgid "5 Add an other record to the database" msgstr "5 Agregue otro registro a la base de datos" #: src/gedlib/messages.c:518 msgid "6 Edit other record from the database" msgstr "6 Corrija otro registro a la base de datos" #: src/gedlib/messages.c:521 msgid "Translation Tables" msgstr "Tablas De la Traducción" #: src/gedlib/messages.c:522 msgid "e edit individual tables (in db)" msgstr "e corrija las tablas individuales (en bd)" #: src/gedlib/messages.c:523 msgid "l load a table from a file (into db)" msgstr "l cargue una tabla de un archivo (en bd)" #: src/gedlib/messages.c:524 msgid "s save a table to a file (from db)" msgstr "s excepto una tabla a un archivo (de bd)" #: src/gedlib/messages.c:525 msgid "x export all tables (from db to files)" msgstr "x exporte todas las tablas (a partir del bd a los archivos)" #: src/gedlib/messages.c:526 msgid "i import all tables (from files into db)" msgstr "i importe todas las tablas (de archivos en bd)" #: src/gedlib/messages.c:527 msgid "export/import directory:" msgstr "directorio de export/import:" #: src/gedlib/messages.c:530 msgid "Which character mapping do you want to edit?" msgstr "¿Qué traz del carácter usted desea corregir?" #: src/gedlib/messages.c:531 msgid "Which character mapping do you want to save?" msgstr "¿Qué traz del carácter usted desea ahorrar?" #: src/gedlib/messages.c:534 msgid "Not implemented yet" msgstr "No puesto en ejecucio'n todavía" #: src/gedlib/messages.c:537 msgid "What do you want to add?" msgstr "¿Qué usted desea agregar?" #: src/gedlib/messages.c:538 msgid "p Person - add new person to the database" msgstr "p Persona - agregue a nueva persona a la base de datos" #: src/gedlib/messages.c:539 msgid "f Family - create family record from one or two spouses" msgstr "" "f Familia - cree el registro de la familia a partir de un o dos cónyuges" #: src/gedlib/messages.c:540 msgid "c Child - add a child to an existing family" msgstr "c Niño - agregue a niño a una familia existente" #: src/gedlib/messages.c:541 msgid "s Spouse - add a spouse to an existing family" msgstr "s Cónyuge - agregue a cónyuge a una familia existente" #: src/gedlib/messages.c:544 msgid "What do you want to remove?" msgstr "¿Qué usted desea quitar?" #: src/gedlib/messages.c:545 msgid "c Child - remove a child from his/her family" msgstr "c Niño - quite a niño de su familia" #: src/gedlib/messages.c:546 msgid "s Spouse - remove a spouse from a family" msgstr "s Cónyuge - quite a cónyuge de una familia" #: src/gedlib/messages.c:547 msgid "i Individual - remove a person completely" msgstr "i Individual - quite a persona totalmente" #: src/gedlib/messages.c:548 msgid "f Family - remove a family completely" msgstr "f Familia eliminar un familia completely" #: src/gedlib/messages.c:549 msgid "o Other - remove other record completely" msgstr "o Otro - quite el otro registro totalmente" #: src/gedlib/messages.c:552 msgid "How would you like to find a record?" msgstr "¿Cómo usted tienen gusto de encontrar un registro?" #: src/gedlib/messages.c:555 msgid "Performing full name scan" msgstr "Ejecución de la exploración del nombre completo" #: src/gedlib/messages.c:556 msgid "Performing name fragment scan" msgstr "Ejecución de la exploración conocida del fragmento" #: src/gedlib/messages.c:557 msgid "Performing refn scan" msgstr "Ejecución de la exploración del refn" #: src/gedlib/messages.c:558 msgid "Performing source scan" msgstr "Ejecución de la exploración de la fuente" #: src/gedlib/messages.c:559 msgid "No records found in scan" msgstr "Ningunos registros encontraron en la exploración" #: src/gedlib/messages.c:562 msgid "abt %1" msgstr "sobre %1" #: src/gedlib/messages.c:563 msgid "about %1" msgstr "sobre %1" #: src/gedlib/messages.c:564 msgid "est %1" msgstr "est %1" #: src/gedlib/messages.c:565 msgid "estimated %1" msgstr "estimado %1" #: src/gedlib/messages.c:566 msgid "cal %1" msgstr "cal %1" #: src/gedlib/messages.c:567 msgid "calculated %1" msgstr "calculado %1" #: src/gedlib/messages.c:568 msgid "fr %1" msgstr "de %1" #: src/gedlib/messages.c:569 msgid "from %1" msgstr "de %1" #: src/gedlib/messages.c:570 src/gedlib/messages.c:571 msgid "to %1" msgstr "a %1" #: src/gedlib/messages.c:572 msgid "fr %1 to %2" msgstr "de %1 a %2" #: src/gedlib/messages.c:573 msgid "from %1 to %2" msgstr "desde %1 a %2" #: src/gedlib/messages.c:574 msgid "bef %1" msgstr "ant %1" #: src/gedlib/messages.c:575 msgid "before %1" msgstr "antes %1" #: src/gedlib/messages.c:576 msgid "aft %1" msgstr "sobre %1" #: src/gedlib/messages.c:577 msgid "after %1" msgstr "después %1" #: src/gedlib/messages.c:578 msgid "bet %1 and %2" msgstr "entre %1 y %2" #: src/gedlib/messages.c:579 msgid "between %1 and %2" msgstr "entre %1 y %2" #: src/gedlib/messages.c:582 msgid "B.C." msgstr "" #: src/gedlib/messages.c:584 msgid "BC" msgstr "" #: src/gedlib/messages.c:586 msgid "B.C.E." msgstr "" #: src/gedlib/messages.c:588 msgid "BCE" msgstr "" #: src/gedlib/messages.c:590 msgid "A.D." msgstr "" #: src/gedlib/messages.c:592 msgid "AD" msgstr "" #: src/gedlib/messages.c:594 msgid "C.E." msgstr "" #: src/gedlib/messages.c:596 msgid "CE" msgstr "" #: src/gedlib/messages.c:599 msgid "%1J" msgstr "%1J" #: src/gedlib/messages.c:601 msgid "%1 HEB" msgstr "%! HEB" #: src/gedlib/messages.c:603 msgid "%1 FR" msgstr "%! FR" #: src/gedlib/messages.c:605 msgid "%1 AUC" msgstr "%1 AUC" #: src/gedlib/messages.c:607 msgid "jan" msgstr "ene" #: src/gedlib/messages.c:608 msgid "january" msgstr "enero" #: src/gedlib/messages.c:609 msgid "feb" msgstr "feb" #: src/gedlib/messages.c:610 msgid "february" msgstr "febrero" #: src/gedlib/messages.c:611 msgid "mar" msgstr "mar" #: src/gedlib/messages.c:612 msgid "march" msgstr "marzo" #: src/gedlib/messages.c:613 msgid "apr" msgstr "abr" #: src/gedlib/messages.c:614 msgid "april" msgstr "abril" #: src/gedlib/messages.c:616 msgid "**may" msgstr "**mayo" #: src/gedlib/messages.c:617 msgid "may" msgstr "mayo" #: src/gedlib/messages.c:618 msgid "jun" msgstr "jun" #: src/gedlib/messages.c:619 msgid "june" msgstr "junio" #: src/gedlib/messages.c:620 msgid "jul" msgstr "jul" #: src/gedlib/messages.c:621 msgid "july" msgstr "julio" #: src/gedlib/messages.c:622 msgid "aug" msgstr "ago" #: src/gedlib/messages.c:623 msgid "august" msgstr "agosto" #: src/gedlib/messages.c:624 msgid "sep" msgstr "sep" #: src/gedlib/messages.c:625 msgid "september" msgstr "septiembre" #: src/gedlib/messages.c:626 msgid "oct" msgstr "oct" #: src/gedlib/messages.c:627 msgid "october" msgstr "octubre" #: src/gedlib/messages.c:628 msgid "nov" msgstr "nov" #: src/gedlib/messages.c:629 msgid "november" msgstr "noviembre" #: src/gedlib/messages.c:630 msgid "dec" msgstr "dec" #: src/gedlib/messages.c:631 msgid "december" msgstr "deciembre" #: src/gedlib/messages.c:633 msgid "tsh" msgstr "tsh" #: src/gedlib/messages.c:634 msgid "tishri" msgstr "tishri" #: src/gedlib/messages.c:635 msgid "csh" msgstr "csh" #: src/gedlib/messages.c:636 msgid "cheshvan" msgstr "cheshvan" #: src/gedlib/messages.c:637 msgid "ksl" msgstr "ksl" #: src/gedlib/messages.c:638 msgid "kislev" msgstr "kislev" #: src/gedlib/messages.c:639 msgid "tvt" msgstr "tvt" #: src/gedlib/messages.c:640 msgid "tevet" msgstr "tevet" #: src/gedlib/messages.c:641 msgid "shv" msgstr "shv" #: src/gedlib/messages.c:642 msgid "shevat" msgstr "shevat" #: src/gedlib/messages.c:643 msgid "adr" msgstr "adr" #: src/gedlib/messages.c:644 msgid "adar" msgstr "adar" #: src/gedlib/messages.c:645 msgid "ads" msgstr "ads" #: src/gedlib/messages.c:646 msgid "adar sheni" msgstr "adar sheni" #: src/gedlib/messages.c:647 msgid "nsn" msgstr "nsn" #: src/gedlib/messages.c:648 msgid "nisan" msgstr "nisan" #: src/gedlib/messages.c:649 msgid "iyr" msgstr "iyr" #: src/gedlib/messages.c:650 msgid "iyar" msgstr "iyar" #: src/gedlib/messages.c:651 msgid "svn" msgstr "svn" #: src/gedlib/messages.c:652 msgid "sivan" msgstr "sivan" #: src/gedlib/messages.c:653 msgid "tmz" msgstr "tmz" #: src/gedlib/messages.c:654 msgid "tamuz" msgstr "tamuz" #: src/gedlib/messages.c:655 msgid "aav" msgstr "aav" #: src/gedlib/messages.c:656 msgid "av" msgstr "av" #: src/gedlib/messages.c:657 msgid "ell" msgstr "ell" #: src/gedlib/messages.c:658 msgid "elul" msgstr "elul" #: src/gedlib/messages.c:660 msgid "vend" msgstr "vend" #: src/gedlib/messages.c:661 msgid "vendemiaire" msgstr "vendemiaire" #: src/gedlib/messages.c:662 msgid "brum" msgstr "brum" #: src/gedlib/messages.c:663 msgid "brumaire" msgstr "brumaire" #: src/gedlib/messages.c:664 msgid "frim" msgstr "frim" #: src/gedlib/messages.c:665 msgid "frimaire" msgstr "frimaire" #: src/gedlib/messages.c:666 msgid "nivo" msgstr "nivo" #: src/gedlib/messages.c:667 msgid "nivose" msgstr "nivose" #: src/gedlib/messages.c:668 msgid "pluv" msgstr "pluv" #: src/gedlib/messages.c:669 msgid "pluviose" msgstr "pluviose" #: src/gedlib/messages.c:670 msgid "vent" msgstr "vent" #: src/gedlib/messages.c:671 msgid "ventose" msgstr "ventose" #: src/gedlib/messages.c:672 msgid "germ" msgstr "germ" #: src/gedlib/messages.c:673 msgid "germinal" msgstr "germinal" #: src/gedlib/messages.c:674 msgid "flor" msgstr "flor" #: src/gedlib/messages.c:675 msgid "floreal" msgstr "floreal" #: src/gedlib/messages.c:676 msgid "prai" msgstr "prai" #: src/gedlib/messages.c:677 msgid "prairial" msgstr "prairial" #: src/gedlib/messages.c:678 msgid "mess" msgstr "mess" #: src/gedlib/messages.c:679 msgid "messidor" msgstr "messidor" #: src/gedlib/messages.c:680 msgid "ther" msgstr "ther" #: src/gedlib/messages.c:681 msgid "thermidor" msgstr "thermidor" #: src/gedlib/messages.c:682 msgid "fruc" msgstr "fruc" #: src/gedlib/messages.c:683 msgid "fructidor" msgstr "fructidor" #: src/gedlib/messages.c:684 msgid "comp" msgstr "comp" #: src/gedlib/messages.c:685 msgid "jour_complementairs" msgstr "jour_complementairs" #: src/gedlib/node.c:610 msgid "NO NAME" msgstr "NO NOMBRE" #: src/gedlib/node.c:1167 #, c-format msgid "Node memory leaks:" msgstr "Escapes de la memoria del nodo:" #: src/gedlib/node.c:1170 src/gedlib/record.c:361 src/interp/pvalalloc.c:301 #, c-format msgid "%d item leaked" msgid_plural "%d items leaked" msgstr[0] "el artículo de %d se escapó" msgstr[1] "los artículos de %d se escaparon" #: src/gedlib/record.c:358 #, fuzzy, c-format msgid "Record memory leaks:" msgstr "Escapes de la memoria del nodo:" #: src/gedlib/remove.c:250 msgid "Families may not yet be removed in this fashion." msgstr "Las familias pueden todavía no ser quitadas en esta manera." #. TRANSLATORS: Character set conversion from external editor to database internal #: src/gedlib/translat.c:100 msgid "Editor to Internal" msgstr "Editor a Internal" #. TRANSLATORS: Character set conversion from database internal to external editor #: src/gedlib/translat.c:102 msgid "Internal to Editor" msgstr "Internal a Editor" #: src/gedlib/translat.c:103 msgid "GEDCOM to Internal" msgstr "GEDCOM a Internal" #: src/gedlib/translat.c:104 msgid "Internal to GEDCOM" msgstr "Internal a GEDCOM" #: src/gedlib/translat.c:105 msgid "Display to Internal" msgstr "Exhibición a interno" #: src/gedlib/translat.c:106 msgid "Internal to Display" msgstr "Interno para exhibir" #: src/gedlib/translat.c:107 msgid "Report to Internal" msgstr "Reportar a Internal" #: src/gedlib/translat.c:108 msgid "Internal to Report" msgstr "Internal a Reportar" #. TRANSLATORS: key for "Editor to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:119 msgid "menu|trantable|e" msgstr "" #. TRANSLATORS: key for "Internal to Editor" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:122 msgid "menu|trantable|m" msgstr "" #. TRANSLATORS: key for "GEDCOM to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:125 msgid "menu|trantable|i" msgstr "" #. TRANSLATORS: key for "Internal to GEDCOM" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:128 msgid "menu|trantable|x" msgstr "" #. TRANSLATORS: key for "Display to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:131 msgid "menu|trantable|g" msgstr "" #. TRANSLATORS: key for "Internal to Display" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:134 msgid "menu|trantable|d" msgstr "" #. TRANSLATORS: key for "Report to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:137 msgid "menu|trantable|p" msgstr "" #. TRANSLATORS: key for "Internal to Report" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:140 msgid "menu|trantable|r" msgstr "" #. TRANSLATORS: db internal translation table note for tt menu #: src/gedlib/translat.c:473 #, c-format msgid " (dbint tt: %s)" msgstr " (dbint tt: %s)" #: src/gedlib/valid.c:75 msgid "This person record does not have a name line." msgstr "Este registro de persona no tiene un linea de nombre." #: src/gedlib/xlat.c:347 #, fuzzy, c-format msgid "ttpath get_conversion_dyntt:from <%s> to <%s>: %s" msgstr "No puede convertir el codeset (de <%s> a <%s>)" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 msgid "succeeded" msgstr "" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 #, fuzzy msgid "failed" msgstr "cinco" #: src/gedlib/xlat.c:369 #, c-format msgid "ttpath get_subcoding_dyntt from <%s> to subcode <%s>: %s" msgstr "" #: src/gedlib/xlat.c:435 msgid "No TTPATH config variable" msgstr "" #: src/gedlib/xlat.c:464 #, c-format msgid "ttpath checking dir <%s>" msgstr "" #: src/gedlib/xlat.c:478 #, fuzzy, c-format msgid "ttpath file <%s> typed as %d" msgstr "En el archivo <%s> en la línea %d" #: src/gedlib/xlat.c:690 #, fuzzy msgid "(no conversion)" msgstr "Ninguna conversión" #. TRANSLATORS: steps in a chain of codeset conversions, eg, Editor-to-Internal #: src/gedlib/xlat.c:713 #, fuzzy, c-format msgid "%d step" msgid_plural "%d steps" msgstr[0] "%d artículo" msgstr[1] "%d artículos" #: src/gedlib/xreffile.c:400 #, c-format msgid "Corrupt DELETESET %c" msgstr "" #: src/gedlib/xreffile.c:425 #, c-format msgid "Tried to add already-deleted record (%ld) to xref (%c)!" msgstr "" #: src/interp/alloc.c:798 #, c-format msgid "Error: file \"%s\": line %d: " msgstr "Error: archivo \"%s\": línea %d: " #: src/interp/alloc.c:903 #, c-format msgid "%s: the arg must be an integer." msgstr "%s: el arg debe ser un número entero." #: src/interp/alloc.c:904 #, c-format msgid "%s: the arg #%s must be an integer." msgstr "%s: el arg #%s deben ser un número entero." #: src/interp/alloc.c:905 #, c-format msgid "%s: the arg #%s must be a float." msgstr "%s: el arg #%s deben ser un flotador." #: src/interp/alloc.c:906 #, c-format msgid "%s: the arg must be a string." msgstr "%s: el arg debe ser una secuencia." #: src/interp/alloc.c:907 #, c-format msgid "%s: the arg #%s must be a string." msgstr "%s: el arg # el %s deben ser una secuencia." #: src/interp/alloc.c:908 #, c-format msgid "%s: null arg not permissible." msgstr "%s: arg nulo no permitido." #: src/interp/alloc.c:909 #, c-format msgid "%s: the arg must be a filename." msgstr "%s: el arg debe ser un nombre de fichero." #: src/interp/alloc.c:910 #, c-format msgid "%s: the arg must be a node or string." msgstr "%s: el arg debe ser un nodo o una secuencia." #: src/interp/alloc.c:911 #, c-format msgid "%s: the arg must be a person." msgstr "%s: el arg debe ser una persona." #: src/interp/alloc.c:912 #, c-format msgid "%s: the arg #%s must be a person." msgstr "%s: el arg #%s debe ser una persona." #: src/interp/alloc.c:913 #, c-format msgid "%s: the arg must be a family." msgstr "%s: el arg debe ser una familia." #: src/interp/alloc.c:914 #, c-format msgid "%s: the arg #%s must be a family." msgstr "%s: el arg #%s debe ser una familia." #: src/interp/alloc.c:915 #, c-format msgid "%s: the arg #%s must be a record." msgstr "%s: el arg #%s debe ser un registro." #: src/interp/alloc.c:916 #, c-format msgid "%s: the arg must be a node." msgstr "%s: el arg debe ser un nodo." #: src/interp/alloc.c:917 #, c-format msgid "%s: the arg #%s must be a node." msgstr "%s: el arg #%s debe ser un nodo." #: src/interp/alloc.c:918 #, c-format msgid "%s: the arg must be a variable." msgstr "%s: el arg debe ser una variable." #: src/interp/alloc.c:919 #, c-format msgid "%s: the arg #%s must be a variable." msgstr "%s: el arg #%s debe ser una variable." #: src/interp/alloc.c:920 #, c-format msgid "%s: the arg #%s must be a boolean." msgstr "%s: el arg #%s debe ser un boleano." #: src/interp/alloc.c:921 #, c-format msgid "%s: the arg must be a list." msgstr "%s: el arg debe ser una lista." #: src/interp/alloc.c:922 #, c-format msgid "%s: the arg #%s must be a list." msgstr "%s: el arg #%s debe ser una lista." #: src/interp/alloc.c:923 #, c-format msgid "%s: the arg #%s must be a table." msgstr "%s: el arg #%s debe ser una tabla." #: src/interp/alloc.c:924 #, c-format msgid "%s: the arg must be a set." msgstr "%s: el arg debe ser un sistema." #: src/interp/alloc.c:925 #, c-format msgid "%s: the arg #%s must be a set." msgstr "%s: el arg #%s debe ser un sistema." #: src/interp/alloc.c:926 #, c-format msgid "%s: Bad arguments" msgstr "%s: Malas argumentos" #: src/interp/alloc.c:927 #, c-format msgid "%s: the arg had a major error." msgstr "%s: el argumento tiene un error major." #: src/interp/alloc.c:928 #, c-format msgid "%s: the arg #%s had a major error." msgstr "%s: el argumento #%s tiene un error major." #: src/interp/alloc.c:929 #, c-format msgid "%s: the arg #%s would cause an arithmetic exception." msgstr "%s: el arg #%s causaría una excepción aritmética." #: src/interp/builtin.c:111 msgid "Enter integer for program" msgstr "Incorpore el número entero para el programa" #: src/interp/builtin.c:181 msgid "Identify person for program:" msgstr "Identifique a persona para el programa:" #: src/interp/builtin.c:206 msgid "Enter a spouse from family." msgstr "Agregue un cónyuge desde familia." #: src/interp/builtin.c:207 msgid "Enter a sibling from family." msgstr "Agregue un hermano o una hermana desde famlia." #: src/interp/builtin.c:240 msgid "Identify list of persons for program:" msgstr "Identifique la lista de las personas para el programa:" #: src/interp/builtin.c:329 msgid "name: person does not have a name" msgstr "nombre: la persona no tiene un nombre" #: src/interp/builtin.c:385 msgid "fullname: person does not have a name" msgstr "nombre completo: la persona no tiene un nombre" #: src/interp/builtin.c:412 msgid "surname: person does not have a name" msgstr "apellido: la persona no tiene un nombre" #: src/interp/builtin.c:437 msgid "soundex: person does not have a name" msgstr "soundex: la persona no tiene un nombre" #: src/interp/builtin.c:500 #, c-format msgid "Bad escape code at offset %d in bytecode string <%s>" msgstr "" "Mal código del escape en la compensación %d en la secuencia <%s> del bytecode" #: src/interp/builtin.c:643 msgid "(givens) person does not have a name" msgstr "(givens) la persons no tiene un nombre" #: src/interp/builtin.c:670 #, c-format msgid "set(%s, ) is invalid" msgstr "el sistema (%s, ) es inválido" #: src/interp/builtin.c:1191 msgid "first" msgstr "primero" #: src/interp/builtin.c:1191 msgid "second" msgstr "segundo" #: src/interp/builtin.c:1191 msgid "third" msgstr "tercero" #: src/interp/builtin.c:1191 msgid "fourth" msgstr "cuarto" #: src/interp/builtin.c:1191 msgid "fifth" msgstr "quinto" #: src/interp/builtin.c:1192 msgid "sixth" msgstr "sexto" #: src/interp/builtin.c:1192 msgid "seventh" msgstr "séptimo" #: src/interp/builtin.c:1192 msgid "eighth" msgstr "octavo" #: src/interp/builtin.c:1192 msgid "ninth" msgstr "noveno" #: src/interp/builtin.c:1192 msgid "tenth" msgstr "décimo" #: src/interp/builtin.c:1193 msgid "eleventh" msgstr "undécimo" #: src/interp/builtin.c:1193 msgid "twelfth" msgstr "" #: src/interp/builtin.c:1210 #, c-format msgid "%ldth" msgstr "" #: src/interp/builtin.c:1220 msgid "zero" msgstr "cero" #: src/interp/builtin.c:1220 msgid "one" msgstr "uno" #: src/interp/builtin.c:1220 msgid "two" msgstr "dos" #: src/interp/builtin.c:1220 msgid "three" msgstr "tres" #: src/interp/builtin.c:1220 msgid "four" msgstr "quatro" #: src/interp/builtin.c:1220 msgid "five" msgstr "cinco" #: src/interp/builtin.c:1221 msgid "six" msgstr "seis" #: src/interp/builtin.c:1221 msgid "seven" msgstr "siete" #: src/interp/builtin.c:1221 msgid "eight" msgstr "ocho" #: src/interp/builtin.c:1221 msgid "nine" msgstr "nueve" #: src/interp/builtin.c:1221 msgid "ten" msgstr "diez" #: src/interp/builtin.c:1222 msgid "eleven" msgstr "once" #: src/interp/builtin.c:1222 msgid "twelve" msgstr "doce" #: src/interp/builtin.c:2173 msgid "the arg to empty is not a list, table or set" msgstr "el arg a vaciar no es una lista, una tabla o un sistema" #: src/interp/builtin.c:2283 msgid "the arg to length is not a list, table or set" msgstr "el arg a la longitud no es una lista, una tabla o un sistema" #: src/interp/builtin.c:2470 msgid "He" msgstr "El" #: src/interp/builtin.c:2470 msgid "he" msgstr "el" #: src/interp/builtin.c:2470 msgid "His" msgstr "Suyo" #: src/interp/builtin.c:2470 msgid "his" msgstr "suyo" #: src/interp/builtin.c:2470 msgid "him" msgstr "el" #: src/interp/builtin.c:2472 msgid "She" msgstr "Ella" #: src/interp/builtin.c:2472 msgid "she" msgstr "ella" #: src/interp/builtin.c:2472 msgid "Her" msgstr "Suya" #: src/interp/builtin.c:2472 msgid "her" msgstr "suya" #: src/interp/builtin.c:2472 msgid "her_" msgstr "ella" #: src/interp/builtin.c:2850 msgid "(trimname) person does not have a name" msgstr "(trimname) la persona no tiene un nombre" #: src/interp/builtin.c:2940 msgid "Sunday" msgstr "Domingo" #: src/interp/builtin.c:2940 msgid "Monday" msgstr "Lunes" #: src/interp/builtin.c:2940 msgid "Tuesday" msgstr "Martes" #: src/interp/builtin.c:2941 msgid "Wednesday" msgstr "Miércoles" #: src/interp/builtin.c:2941 msgid "Thursday" msgstr "Jueves" #: src/interp/builtin.c:2941 msgid "Friday" msgstr "Viernes" #: src/interp/builtin.c:2941 msgid "Saturday" msgstr "Sabado" #: src/interp/eval.c:244 #, fuzzy, c-format msgid "Undefined func: %s" msgstr "Proc indefinido: %s" #: src/interp/eval.c:246 #, fuzzy, c-format msgid "Ambiguous call to func: %s" msgstr "Llamada ambigua al proc: %s" #: src/interp/interp.c:247 #, c-format msgid "Report not found: %s " msgstr "Registro eno encontrado: %s " #: src/interp/interp.c:258 #, c-format msgid "Error: file <%s> not found" msgstr "Error: archivo <%s> no encontrado" #: src/interp/interp.c:316 #, fuzzy msgid "Program contains errors.\n" msgstr "contiene errores.\n" #: src/interp/interp.c:323 #, fuzzy msgid "Program needs a starting procedure.\n" msgstr "necesita un procedimiento que comienza.\n" #: src/interp/interp.c:340 #, c-format msgid "Proc %s must be called with %d (not %d) parameters." msgstr "Proc %s se debe llamar con parámetros de %d (no %d)." #: src/interp/interp.c:355 #, fuzzy msgid "Program is running..." msgstr "está funcionando..." #: src/interp/interp.c:410 #, fuzzy msgid "Program was run successfully.\n" msgstr "fue funcionado con éxito.\n" #: src/interp/interp.c:414 #, fuzzy msgid "Program was cancelled.\n" msgstr "fue cancelado.\n" #: src/interp/interp.c:416 #, fuzzy msgid "Program was not run because of errors.\n" msgstr "no fue funcionado debido a errores.\n" #: src/interp/interp.c:506 #, c-format msgid "Error: file <%s> not found: %s\n" msgstr "Error: fichero <%s> no existe: %s\n" #: src/interp/interp.c:538 #, c-format msgid "" "\n" "Report duration %s (ui duration %s)\n" msgstr "" "\n" "Informe duración %s (ui duración %s)\n" #: src/interp/interp.c:610 #, c-format msgid "identifier: %s should be a string\n" msgstr "identificador: %s debe ser una secuencia\n" #: src/interp/interp.c:1778 #, c-format msgid "Undefined proc: %s" msgstr "Proc indefinido: %s" #: src/interp/interp.c:1780 #, c-format msgid "Ambiguous call to proc: %s" msgstr "Llamada ambigua al proc: %s" #: src/interp/interp.c:2017 #, c-format msgid "Duplicate proc %s (lines %d and %d) in report: %s" msgstr "Proc duplicado %s (líneas %d y %d) en informe: %s" #: src/interp/interp.c:2047 #, c-format msgid "Duplicate func %s (lines %d and %d) in report: %s" msgstr "%s funcional duplicado (líneas %d y %d) en informe: %s" #: src/interp/interp.c:2110 msgid "This report requires a newer program to run\n" msgstr "Este informe requiere un más nuevo programa funcionar\n" #: src/interp/interp.c:2166 #, c-format msgid "Program forgot to unlock %d record" msgid_plural "Program forgot to unlock %d records" msgstr[0] "" msgstr[1] "" #: src/interp/intrpseq.c:303 msgid "missing or incorrect value for sort" msgstr "" #: src/interp/lex.c:219 #, c-format msgid "" "String constant overflowing internal buffer tokbuf len=%d, file: %s, start " "line: %ld" msgstr "" #: src/interp/more.c:648 msgid "Please choose from the following list." msgstr "Elija por favor de la lista siguiente." #: src/interp/more.c:685 msgid "Illegal type found in list in menuchoose" msgstr "El tipo ilegal encontró en lista en menuchoose" #: src/interp/more.c:976 msgid "error evaluating arg to lock" msgstr "" #: src/interp/more.c:982 msgid "null arg in lock" msgstr "" #: src/interp/more.c:993 msgid "node passed to lock must be inside a record" msgstr "" #: src/interp/more.c:999 #, fuzzy msgid "the arg to lock must be a record or node" msgstr "el arg a la cerradura debe ser una persona o una familia" #: src/interp/more.c:1007 msgid "Error: there are 999,999 locks on arg to lock" msgstr "" #: src/interp/more.c:1027 msgid "error evaluating arg to unlock" msgstr "" #: src/interp/more.c:1033 msgid "null arg in unlock" msgstr "" #: src/interp/more.c:1044 #, fuzzy msgid "node passed to unlock must be inside a record" msgstr "el arg a abrir debe ser una persona o una familia" #: src/interp/more.c:1050 #, fuzzy msgid "the arg to unlock must be a record or node" msgstr "el arg a abrir debe ser una persona o una familia" #: src/interp/pvalalloc.c:295 #, c-format msgid "PVALUE memory leak report:" msgstr "" #: src/interp/pvalmath.c:70 #, c-format msgid "Nonnumeric type to operation %s: %s" msgstr "" #: src/interp/pvalmath.c:85 #, fuzzy, c-format msgid "Illegal value to operation %s: %s" msgstr "llamada ilegal a la posición." #: src/interp/pvalmath.c:411 #, fuzzy, c-format msgid "%s: not compatible numeric types: %s and %s" msgstr "%s: Tipos incomparables: %s y %s" #: src/interp/pvalue.c:810 #, c-format msgid "%s: Incomparable types: %s and %s" msgstr "%s: Tipos incomparables: %s y %s" #: src/interp/pvalue.c:907 msgid "NOT PVALUE: NULL!" msgstr "NOT PVALUE: NULL!" #: src/interp/pvalue.c:911 #, c-format msgid "NOT PVALUE: invalid type=%d)!" msgstr "NOT PVALUE: tipo invalido=%d)!" #: src/interp/pvalue.c:949 #, c-format msgid "%d item" msgid_plural "%d items" msgstr[0] "%d artículo" msgstr[1] "%d artículos" #: src/interp/pvalue.c:956 #, c-format msgid "%d entry" msgid_plural "%d entries" msgstr[0] "%d entrada" msgstr[1] "%d entradas" #: src/interp/pvalue.c:963 #, c-format msgid "%d record" msgid_plural "%d records" msgstr[0] "%d registro" msgstr[1] "%d registros" #: src/interp/pvalue.c:970 #, c-format msgid "%d element" msgid_plural "%d elements" msgstr[0] "%d elemento" msgstr[1] "%d elementos" #: src/interp/progerr.c:125 msgid "Enter d for debugger, q to quit" msgstr "Incorpore d para la depuración, q para parar" #: src/interp/progerr.c:140 #, fuzzy, c-format msgid "Display local (%d var)" msgid_plural "Display locals (%d vars)" msgstr[0] "Locals de la exhibición (%d)" msgstr[1] "Locals de la exhibición (%d)" #: src/interp/progerr.c:146 #, fuzzy, c-format msgid "Display global (%d var)" msgid_plural "Display globals (%d vars)" msgstr[0] "Globals de la exhibición (%d)" msgstr[1] "Globals de la exhibición (%d)" #: src/interp/progerr.c:151 #, c-format msgid "Call stack has %d higher level" msgid_plural "Call stack has %d higher levels" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:154 #, fuzzy msgid " Go up one level" msgstr "Nivel del estallido uno" #: src/interp/progerr.c:160 #, c-format msgid "Call stack has %d lower level" msgid_plural "Call stack has %d lower levels" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:164 #, fuzzy msgid " Go down one level" msgstr "Nivel del estallido uno" #: src/interp/progerr.c:169 #, fuzzy msgid "Quit debugger" msgstr "Quitar el debugger" #: src/interp/progerr.c:171 msgid "Report debugger" msgstr "Informe debugger" #: src/interp/progerr.c:175 msgid "Local variables" msgstr "variables local" #: src/interp/progerr.c:178 msgid "Global variables" msgstr "variables globale" #: src/interp/progerr.c:338 msgid "Report cancelled" msgstr "Informe cancelado" #: src/interp/progerr.c:346 msgid "Report file: " msgstr "Archivo de informe:" #: src/interp/progerr.c:355 #, c-format msgid "Parsing Error at line %d: " msgstr "Error del análisis en la línea %d:" #: src/interp/progerr.c:357 #, c-format msgid "Runtime Error at line %d: " msgstr "Error runtime en la línea %d: " #: src/interp/progerr.c:360 msgid "Aborting: " msgstr "Finalizando:" #: src/interp/rassa.c:242 #, c-format msgid "Could not open file %s" msgstr "No puede abrir fichero %s" #: src/interp/rassa.c:271 msgid "Report stopping due to error opening output file" msgstr "Divulgue parar debido al archivo de salida de la abertura del error" #: src/interp/rassa.c:273 msgid "Report stopping due to lack of output file" msgstr "Divulgue parar debido a la carencia del archivo de salida" #: src/interp/rassa.c:330 msgid "illegal call to pos." msgstr "llamada ilegal a la posición." #: src/interp/rptsort.c:104 #, fuzzy msgid "First argument to (r)sort must be list or array" msgstr "La discusión a la cerradura (-l) debe ser y o n." #: src/interp/rptsort.c:117 src/interp/rptsort.c:128 #, fuzzy msgid "Arguments to (r)sort must be of same size" msgstr "La discusión a la cerradura (-l) debe ser y o n." #: src/interp/rptsort.c:137 #, fuzzy msgid "Second argument to (r)sort must be list or array" msgstr "La discusión a la cerradura (-l) debe ser y o n." #: src/liflines/add.c:68 #, c-format msgid "There was %d unresolved reference." msgid_plural "There were %d unresolved references." msgstr[0] "Había %d referencia no satisfecha." msgstr[1] "Había las referencias no satisfechas %d" #: src/liflines/brwsmenu.c:25 msgid "? Other menu choices" msgstr "? Otras menu prefieras" #: src/liflines/brwsmenu.c:69 msgid "e Edit the person" msgstr "e Editar la persona" #: src/liflines/brwsmenu.c:70 msgid "e Edit the family" msgstr "e Editar la familia" #: src/liflines/brwsmenu.c:71 msgid "e Edit record" msgstr "e Editar registro" #: src/liflines/brwsmenu.c:72 msgid "e Edit top person" msgstr "e Editar persona arriba" #: src/liflines/brwsmenu.c:73 msgid "e Edit top family" msgstr "e Editar familia arriba" #: src/liflines/brwsmenu.c:74 msgid "f Browse to father" msgstr "f Examinar a el padre" #: src/liflines/brwsmenu.c:75 msgid "f Browse top father" msgstr "f Examinar a de la padre superior" #: src/liflines/brwsmenu.c:76 msgid "m Browse to mother" msgstr "m Examinar a la madre" #: src/liflines/brwsmenu.c:77 msgid "m Browse top mother" msgstr "m Examinar a de la madre superior" #: src/liflines/brwsmenu.c:78 msgid "s Browse to spouse/s" msgstr "s Examinar a cónyuge/s" #: src/liflines/brwsmenu.c:79 msgid "s Browse top spouse/s" msgstr "s Examinar a cónyuge/s superior" #: src/liflines/brwsmenu.c:80 msgid "c Browse to children" msgstr "c Examinar a los niños" #: src/liflines/brwsmenu.c:81 msgid "c Browse top children" msgstr "c Examinar a los niños superior" #: src/liflines/brwsmenu.c:82 msgid "o Browse to older sib" msgstr "o Examinar a un más viejo sib" #: src/liflines/brwsmenu.c:83 msgid "y Browse to younger sib" msgstr "y Examinar a un sib más joven" #: src/liflines/brwsmenu.c:84 msgid "g Browse to family" msgstr "g Examinar a la familia" #: src/liflines/brwsmenu.c:85 msgid "u Browse to parents" msgstr "u Examinar a los progenitores" #: src/liflines/brwsmenu.c:86 msgid "b Browse to persons" msgstr "b Examinar a las personas" #: src/liflines/brwsmenu.c:87 msgid "t Browse to top" msgstr "t Examinar al tapa" #: src/liflines/brwsmenu.c:88 msgid "b Browse to bottom" msgstr "b Examinar al fondo" #: src/liflines/brwsmenu.c:89 msgid "h Add as spouse" msgstr "h Agregar como cónyuge" #: src/liflines/brwsmenu.c:90 msgid "i Add as child" msgstr "i Agregar como niño" #: src/liflines/brwsmenu.c:91 msgid "s Add spouse to family" msgstr "s Agregar cónyuge a familia" #: src/liflines/brwsmenu.c:92 msgid "a Add child to family" msgstr "a Agregar un niño a familia" #: src/liflines/brwsmenu.c:93 msgid "a Add family" msgstr "a Agregar familia" #: src/liflines/brwsmenu.c:94 msgid "x Swap two families" msgstr "x Intercambio dos familias" #: src/liflines/brwsmenu.c:95 msgid "x Swap two children" msgstr "x Intercambio dos niños" #: src/liflines/brwsmenu.c:97 #, no-c-format msgid "%c Reorder child" msgstr "%c Reordene a niño" #: src/liflines/brwsmenu.c:98 msgid "x Switch top/bottom" msgstr "x Cambie la tapa/el fondo" #: src/liflines/brwsmenu.c:99 msgid "n Create new person" msgstr "n Cree a nueva persona" #: src/liflines/brwsmenu.c:100 msgid "a Create new family" msgstr "a Cree a nueva familia" #: src/liflines/brwsmenu.c:101 msgid "tt Enter tandem mode" msgstr "tt Entre en el modo en tándem" #: src/liflines/brwsmenu.c:102 msgid "tt Enter family tandem" msgstr "tt Entre el tándem de la familia" #: src/liflines/brwsmenu.c:103 msgid "zi Browse to indi" msgstr "zi Examinar a indi" #: src/liflines/brwsmenu.c:104 msgid "zz Browse to any" msgstr "zz Examinar a cualesquiera" #: src/liflines/brwsmenu.c:105 msgid "r Remove as spouse" msgstr "r Quite como cónyuge" #: src/liflines/brwsmenu.c:106 msgid "d Remove as child" msgstr "d Quite como niño" #: src/liflines/brwsmenu.c:107 msgid "r Remove spouse from" msgstr "r Quite a cónyuge de" #: src/liflines/brwsmenu.c:108 msgid "d Remove child from" msgstr "d Quite a niño de" #: src/liflines/brwsmenu.c:109 msgid "( Scroll up" msgstr "( Voluta para arriba" #: src/liflines/brwsmenu.c:110 msgid ") Scroll down" msgstr ") Voluta abajo" #: src/liflines/brwsmenu.c:111 msgid "] Increase tree depth" msgstr "] Aumente la profundidad del árbol" #: src/liflines/brwsmenu.c:112 msgid "[ Decrease tree depth" msgstr "[ Disminuya la profundidad del árbol" #: src/liflines/brwsmenu.c:113 msgid "(t Scroll top up" msgstr "(t La voluta se llenara" #: src/liflines/brwsmenu.c:114 msgid ")t Scroll top down" msgstr ")t Tapa de la voluta abajo" #: src/liflines/brwsmenu.c:115 msgid "(b Scroll bottom up" msgstr "(b Fondo de la voluta para arriba" #: src/liflines/brwsmenu.c:116 msgid ")b Scroll bottom down" msgstr ")b Fondo de la voluta abajo" #: src/liflines/brwsmenu.c:117 msgid "(( Scroll both up" msgstr "(( Enrolle ambos para arriba" #: src/liflines/brwsmenu.c:118 msgid ")) Scroll both down" msgstr ")) Enrolle ambos abajo" #: src/liflines/brwsmenu.c:119 msgid "# Toggle childnos" msgstr "# Números de palanca del niño" #: src/liflines/brwsmenu.c:120 msgid "!g GEDCOM mode" msgstr "!g modo GEDCOM" #: src/liflines/brwsmenu.c:121 msgid "!x GEDCOMX mode" msgstr "!x modo GEDCOMX" #: src/liflines/brwsmenu.c:122 msgid "!t GEDCOMT mode" msgstr "!t modo GEDCOMT" #: src/liflines/brwsmenu.c:123 msgid "!a Ancestors mode" msgstr "!a Modo de los antepasados" #: src/liflines/brwsmenu.c:124 msgid "!d Descendants mode" msgstr "!d Modo de los descendientes" #: src/liflines/brwsmenu.c:125 msgid "!n Normal mode" msgstr "!n Modo normal" #: src/liflines/brwsmenu.c:126 msgid "p Pedigree mode" msgstr "p Modo pedigrí" #: src/liflines/brwsmenu.c:127 msgid "!! Cycle mode" msgstr "!! Modo del ciclo" #: src/liflines/brwsmenu.c:129 msgid "(1-9) Browse to child" msgstr "(1-9) Examinar al niño" #: src/liflines/brwsmenu.c:130 msgid "y Turn on sync" msgstr "y Gire la sinc." #: src/liflines/brwsmenu.c:131 msgid "A Advanced view" msgstr "A Visión avanzada" #: src/liflines/brwsmenu.c:132 msgid "tc Tandem to children" msgstr "tc Tándem a los niños" #: src/liflines/brwsmenu.c:133 msgid "tf Tandem to father/s" msgstr "tf Tándem de los padre/s" #: src/liflines/brwsmenu.c:134 msgid "tg Tandem to family/s" msgstr "tg Tándem de las familia/s" #: src/liflines/brwsmenu.c:135 msgid "f Browse to fathers" msgstr "f Examinar a los padres" #: src/liflines/brwsmenu.c:136 msgid "m Browse to mothers" msgstr "m Examinar a las madres" #: src/liflines/brwsmenu.c:137 msgid "tm Tandem to mother/s" msgstr "tm Tándem de las madre/s" #: src/liflines/brwsmenu.c:138 msgid "ts Tandem to spouse/s" msgstr "ts Tándem de los cónyuge/s" #: src/liflines/brwsmenu.c:139 msgid "tu Tandem to parents" msgstr "tu Tándem de los padres" #: src/liflines/brwsmenu.c:140 msgid "< Enlarge menu area" msgstr "< Agrande el área del menú" #: src/liflines/brwsmenu.c:141 msgid "> Shrink menu area" msgstr "> Área del menú del encogimiento" #: src/liflines/brwsmenu.c:142 msgid "M> More menu cols" msgstr "M> Más columnas del menú" #: src/liflines/brwsmenu.c:143 msgid "M< Less menu cols" msgstr "M< Menos columnas del menú" #: src/liflines/brwsmenu.c:144 msgid "+ Next in db" msgstr "+ Después adentro bd" #: src/liflines/brwsmenu.c:145 msgid "- Prev in db" msgstr "- Anterior adentro bd" #: src/liflines/brwsmenu.c:146 msgid "d Copy top to bottom" msgstr "d Tapa del copy al fondo" #: src/liflines/brwsmenu.c:147 msgid "j Merge bottom to top" msgstr "j Fondo de la fusión a la tapa" #: src/liflines/brwsmenu.c:148 src/liflines/listui.c:842 msgid "j Move down list" msgstr "j Baje la lista" #: src/liflines/brwsmenu.c:149 src/liflines/listui.c:843 msgid "k Move up list" msgstr "k Levante la lista" #: src/liflines/brwsmenu.c:150 src/liflines/listui.c:844 msgid "e Edit this person" msgstr "e Editar este persona" #: src/liflines/brwsmenu.c:151 src/liflines/listui.c:845 msgid "i Browse this person" msgstr "i Examinar este persona" #: src/liflines/brwsmenu.c:152 src/liflines/listui.c:846 msgid "m Mark this person" msgstr "m Marque este persona" #: src/liflines/brwsmenu.c:153 msgid "d Delete from list" msgstr "d Cancelación de la lista" #: src/liflines/brwsmenu.c:154 src/liflines/listui.c:849 msgid "n Name this list" msgstr "n Dar un Nombre de esta lista" #: src/liflines/brwsmenu.c:155 src/liflines/listui.c:850 msgid "b Browse new persons" msgstr "b Examinar nuevas personas" #: src/liflines/brwsmenu.c:156 src/liflines/listui.c:851 msgid "a Add to this list" msgstr "a Agregar a ese listo" #: src/liflines/brwsmenu.c:157 src/liflines/listui.c:852 msgid "x Swap mark/current" msgstr "x Marca/corriente del intercambio" #: src/liflines/brwsmenu.c:158 msgid "$s List sources" msgstr "$s Lista de fuentes" #: src/liflines/brwsmenu.c:159 msgid "$n List notes" msgstr "$n Lista de notas" #: src/liflines/brwsmenu.c:160 msgid "$$ List references" msgstr "$$ Lista de referencias" #: src/liflines/brwsmenu.c:161 msgid "^b History/back" msgstr "^b Historia/trasero" #: src/liflines/brwsmenu.c:162 msgid "^f History/fwd" msgstr "^f Historia/delantero" #: src/liflines/brwsmenu.c:163 msgid "^l History list" msgstr "^l Lista de historia" #: src/liflines/brwsmenu.c:164 msgid "^c Clear history" msgstr "^c Vaciar historia" #: src/liflines/brwsmenu.c:165 msgid "^xb ChngHist/back" msgstr "^xb Cambie la historia/trasero" #: src/liflines/brwsmenu.c:166 msgid "^xf ChngHist/fwd" msgstr "^xf Cambie la historia/delantero" #: src/liflines/brwsmenu.c:167 msgid "^xl ChngHist list" msgstr "^xl Cambie la historia/la lista" #: src/liflines/brwsmenu.c:168 msgid "^xc Clear ChngHist" msgstr "^xc Vaciar historia cambiar..." #: src/liflines/brwsmenu.c:170 #, no-c-format msgid "%s Add source" msgstr "%s Agregar fuente" #: src/liflines/brwsmenu.c:172 #, no-c-format msgid "%e Add event" msgstr "%e Agregar evento" #: src/liflines/brwsmenu.c:174 #, no-c-format msgid "%o Add other" msgstr "%o Agregar otro" #: src/liflines/brwsmenu.c:177 msgid "B Browse new family" msgstr "B Navigado nueva familia..." #: src/liflines/brwsmenu.c:490 msgid "Missing title" msgstr "Título que falta" #: src/liflines/delete.c:85 #, c-format msgid "%d spouse" msgid_plural "%d spouses" msgstr[0] "%d cónyuge" msgstr[1] "%d cónyuges" #: src/liflines/delete.c:88 #, c-format msgid "%d child" msgid_plural "%d children" msgstr[0] "%d niño" msgstr[1] "%d niños" #: src/liflines/error.c:63 src/tools/dbverify.c:1504 msgid "Fatal Error" msgstr "Error Fatal" #: src/liflines/error.c:66 msgid "FATAL ERROR" msgstr "ERROR FATAL" #: src/liflines/error.c:70 #, c-format msgid " in file <%s> at line %d\n" msgstr "en archivo <%s> en la línea %d\n" #: src/liflines/error.c:72 src/tools/dbverify.c:1515 msgid "ASSERT failure" msgstr "AFIRME la falta" #: src/liflines/import.c:169 msgid "This is not a lineage linked GEDCOM file." msgstr "Esto no es un linaje ligó GEDCOM archivo." #: src/liflines/import.c:170 msgid "Proceed anyway?" msgstr "¿Proceda de todos modos?" #: src/liflines/import.c:186 msgid "No current internal codeset, so no codeset conversion can be done" msgstr "" "Ningún codeset interno actual, así que ninguna conversión del codeset no " "pueden ser hechos" #: src/liflines/import.c:187 msgid "Proceed without codeset conversion?" msgstr "¿Proceda sin la conversión del codeset?" #: src/liflines/import.c:204 #, c-format msgid "%d warning during import" msgid_plural "%d warnings during import" msgstr[0] "%d Advertencia durante la importación" msgstr[1] "%d Advertencias durante la importación" #: src/liflines/import.c:220 #, c-format msgid "Cannot convert codeset (from <%s> to <%s>)" msgstr "No puede convertir el codeset (de <%s> a <%s>)" #: src/liflines/import.c:223 msgid "Enter codeset to assume (* for none)" msgstr "Incorpore el codeset para asumir (* para ningunos)" #: src/liflines/import.c:246 #, fuzzy, c-format msgid "Using original keys, %d deleted record will be in the database." msgid_plural "Using original keys, %d deleted records will be in the database." msgstr[0] "" "Usando llaves originales, %d registros suprimidos estarán en la base de " "datos." msgstr[1] "" "Usando llaves originales, %d registros suprimidos estarán en la base de " "datos." #: src/liflines/lbrowse.c:219 msgid "Tandom browse only compatible with persons or families." msgstr "Tandom hojea solamente compatible con las personas o las familias." #: src/liflines/lines_usage.c:21 #, c-format msgid "%s invokes the Lifelines report execution program without GUI." msgstr "" #: src/liflines/lines_usage.c:23 #, c-format msgid "%s invokes the Lifelines GUI." msgstr "" #: src/liflines/lines_usage.c:26 #, c-format msgid "" "Lifelines is a program to manipulate genealogical information\n" "in lineage-linked GEDCOM format. It has a curses interface and a\n" "built-in interpreter for its own genealogical report language.\n" "\n" "It has its own databases, and records are edited directly in GEDCOM\n" "(with an editor of the user's choice). Records store\n" "information about people, families, sources, events, and\n" "other types of data (such as notes). Lifelines includes a\n" "custom report language and comes with a collection of reports." msgstr "" #: src/liflines/lines_usage.c:36 #, c-format msgid "Usage: %s [OPTIONS] [database]" msgstr "" #: src/liflines/lines_usage.c:38 src/tools/btedit.c:238 #, c-format msgid "Options:" msgstr "" #: src/liflines/lines_usage.c:40 #, c-format msgid "-C[FILE]" msgstr "" #: src/liflines/lines_usage.c:42 #, fuzzy, c-format msgid "Specify configuration file location" msgstr "Archivo malformado de la configuración: línea demasiado larga." #: src/liflines/lines_usage.c:44 #, c-format msgid "Finnish option (if compiled to allow Finnish option)" msgstr "" #: src/liflines/lines_usage.c:46 #, c-format msgid "-I[KEY=VALUE]" msgstr "" #: src/liflines/lines_usage.c:48 #, c-format msgid "Specify a user property (e.g. -ILLEDITOR=gvim)" msgstr "" #: src/liflines/lines_usage.c:50 #, c-format msgid "log dynamic memory operation (for debugging)" msgstr "" #: src/liflines/lines_usage.c:52 #, c-format msgid "-c[TYPE][DIRECT,INDIRECT]" msgstr "" #: src/liflines/lines_usage.c:54 #, c-format msgid "" "supply cache values (eg, -ci400,4000f400,4000 sets direct indi\n" "\t\t& fam caches to 400, and indirect indi & fam caches to 4000)" msgstr "" #: src/liflines/lines_usage.c:57 #, c-format msgid "debug mode (disable signal trapping)" msgstr "" #: src/liflines/lines_usage.c:59 #, c-format msgid "force open (for recovery from errors or power failure)" msgstr "" #: src/liflines/lines_usage.c:61 #, c-format msgid "open database with immutable access (for use on read-only media)" msgstr "" #: src/liflines/lines_usage.c:63 #, c-format msgid "always show keys (even if REFN available)" msgstr "" #: src/liflines/lines_usage.c:65 #, c-format msgid "unlock a database (for correct access on read-write media)" msgstr "" #: src/liflines/lines_usage.c:67 #, c-format msgid "lock a database (for use on read-only media)" msgstr "" #: src/liflines/lines_usage.c:69 #, c-format msgid "do not use traditional family rules" msgstr "" #: src/liflines/lines_usage.c:71 #, c-format msgid "Specify program output filename (eg, -o/tmp/mytests)" msgstr "" #: src/liflines/lines_usage.c:73 #, c-format msgid "" "open database with read-only access (prohibiting other\n" "\t\twrite access)" msgstr "" #: src/liflines/lines_usage.c:76 #, c-format msgid "trace function calls in report programs (for debugging)" msgstr "" #: src/liflines/lines_usage.c:78 #, c-format msgid "-u[HEIGHT,WIDTH]" msgstr "" #: src/liflines/lines_usage.c:80 #, c-format msgid "" "specify window size (eg, -u120,34 specifies 120 columns\n" "\t\tby 34 rows)" msgstr "" #: src/liflines/lines_usage.c:83 #, c-format msgid "display this help and exit" msgstr "" #: src/liflines/lines_usage.c:85 #, c-format msgid "open database with writeable access (this is the default)" msgstr "" #: src/liflines/lines_usage.c:89 #, c-format msgid "execute a single lifelines report program directly" msgstr "" #: src/liflines/lines_usage.c:91 #, c-format msgid "" "Use normal ASCII characters for drawing lines, instead of\n" "\t\tspecial VT100 terminal characters" msgstr "" #: src/liflines/lines_usage.c:94 #, c-format msgid "output version information and exit" msgstr "" #: src/liflines/lines_usage.c:96 src/tools/btedit.c:244 #, c-format msgid "Examples:" msgstr "" #: src/liflines/lines_usage.c:99 #, c-format msgid "%s myfamily -x eol" msgstr "" #: src/liflines/lines_usage.c:101 #, c-format msgid "Open the database 'myfamily' with Lifelines" msgstr "" #: src/liflines/lines_usage.c:103 #, c-format msgid "and run the eol.ll report" msgstr "" #: src/liflines/lines_usage.c:105 #, c-format msgid "%s -f myfamily -x eol" msgstr "" #: src/liflines/lines_usage.c:107 #, c-format msgid "Unlock database 'myfamily', after a power failure left the" msgstr "" #: src/liflines/lines_usage.c:109 #, c-format msgid "database locked and run 'eol.ll' report" msgstr "" #: src/liflines/lines_usage.c:112 #, fuzzy, c-format msgid "%s myfamily" msgstr "Familia vacía" #: src/liflines/lines_usage.c:114 #, c-format msgid "Open database 'myfamily' with Lifelines" msgstr "" #: src/liflines/lines_usage.c:116 #, fuzzy, c-format msgid "%s -f myfamily" msgstr "Familia vacía" #: src/liflines/lines_usage.c:118 #, c-format msgid "" "Unlock database 'myfamily', after a power failure left\n" "\t\tthe database locked" msgstr "" #: src/liflines/lines_usage.c:122 #, c-format msgid "REPORTING BUGS" msgstr "" #: src/liflines/lines_usage.c:124 src/tools/btedit.c:250 #, c-format msgid "Report bugs to lifelines.sourceforge.net" msgstr "" #: src/liflines/lines_usage.c:126 #, c-format msgid "COPYRIGHT" msgstr "" #: src/liflines/lines_usage.c:131 #, c-format msgid "SEE ALSO" msgstr "" #: src/liflines/listui.c:155 src/liflines/listui.c:252 #, fuzzy msgid "Commands: j Move down k Move up i Select q Quit" msgstr "" "Comandos: Seleccione por número, u Página Para arriba, d Página Abajo, i " "Selectar, q Quitar" #: src/liflines/listui.c:157 msgid "Commands: j Move down k Move up q Quit" msgstr "" #: src/liflines/listui.c:249 #, fuzzy msgid "Commands: j Move down k Move up d Delete i Select q Quit" msgstr "" "Comandos: Seleccione por número, u Página Para arriba, d Página Abajo, i " "Selectar, q Quitar" #: src/liflines/listui.c:431 msgid "--- CURRENT SELECTION ---" msgstr "" #: src/liflines/listui.c:434 src/liflines/listui.c:597 msgid "--- LIST ---" msgstr "" #: src/liflines/listui.c:628 msgid "-- CURRENT SELECTION --" msgstr "" #: src/liflines/listui.c:840 #, fuzzy msgid "Choose an operation:" msgstr "Elija por favor una operación:" #: src/liflines/listui.c:847 #, fuzzy msgid "r Remove from list" msgstr "d Cancelación de la lista" #: src/liflines/listui.c:848 #, fuzzy msgid "t Enter tandem mode" msgstr "tt Entre en el modo en tándem" #: src/liflines/loadsave.c:94 msgid "Person" msgid_plural "Persons" msgstr[0] "Persona" msgstr[1] "Personas" #: src/liflines/loadsave.c:98 msgid "Family" msgid_plural "Families" msgstr[0] "Familia" msgstr[1] "Familias" #: src/liflines/loadsave.c:102 msgid "Source" msgid_plural "Sources" msgstr[0] "Fuente" msgstr[1] "Fuentes" #: src/liflines/loadsave.c:106 msgid "Event" msgid_plural "Events" msgstr[0] "Acontecimiento" msgstr[1] "Acontecimientos" #: src/liflines/loadsave.c:110 msgid "Other" msgid_plural "Others" msgstr[0] "Otro" msgstr[1] "Otros" #: src/liflines/loadsave.c:160 msgid "Checking GEDCOM file for errors.\n" msgstr "Comprobando archivo de GEDCOM para errors.\n" #: src/liflines/loadsave.c:163 msgid "Error" msgid_plural "Errors" msgstr[0] "Error" msgstr[1] "Errors" #: src/liflines/loadsave.c:169 msgid "Warning" msgid_plural "Warnings" msgstr[0] "Advertencia" msgstr[1] "Advertencias" #: src/liflines/loadsave.c:184 msgid "The database is read-only; loading has been canceled." msgstr "La base de datos se lee solamente; el cargamento ha estado cancelado." #: src/liflines/loadsave.c:190 msgid "Adding unused keys as deleted keys..." msgstr "Agregando llaves inusitadas como claves suprimidas..." #. TRANSLATORS: how long Import ran, and how much of that was UI delay #: src/liflines/loadsave.c:255 #, c-format msgid "Import time %s (ui %s)\n" msgstr "Tiempo de importacion %s (ui %s)\n" #: src/liflines/loadsave.c:282 msgid "The database was not saved." msgstr "La base de datos no fue ahorrada." #: src/liflines/main.c:385 msgid "Warning: database codeset unspecified" msgstr "Advertencia: codeset de la base de datos no especificado" #: src/liflines/main.c:387 msgid "Warning: not all conversions available" msgstr "Advertencia: no todas las conversiones disponibles" #: src/liflines/menuset.c:155 #, c-format msgid "Menu (%s) choice sequence too long: %s" msgstr "Secuencia bien escogida del menú (%s) demasiado larga: %s" #: src/liflines/menuset.c:159 #, c-format msgid "Menu (%s) item lacked choice sequence: %s" msgstr "El artículo del menú (%s) careció secuencia bien escogida: %s" #: src/liflines/menuset.c:242 src/liflines/menuset.c:254 #, c-format msgid "In menu: %s" msgstr "En menú: %s" #: src/liflines/menuset.c:244 #, c-format msgid "Duplicate hotkey for item: %s" msgstr "Hotkey duplicado para el artículo: %s" #: src/liflines/menuset.c:247 #, c-format msgid "Clash with longer hotkey in item: %s" msgstr "Choque con un hotkey más largo en artículo: %s" #: src/liflines/menuset.c:255 #, c-format msgid "Clash with shorter hotkey in item: %s" msgstr "Choque con un hotkey más corto en artículo: %s" #: src/liflines/merge.c:772 #, c-format msgid "Bad spouse tag: %s" msgstr "Mala etiqueta del cónyuge %s" #: src/liflines/merge.c:800 src/liflines/merge.c:919 #, c-format msgid "Mismatched lineage spouse links between %s and %s: %ld and %ld" msgstr "El cónyuge unido mal del linaje se liga entre %s y %s: %ld y %ld" #: src/liflines/merge.c:816 src/liflines/merge.c:935 #, c-format msgid "Bad child tag: %s" msgstr "Mala etiqueta del niño: %s" #: src/liflines/merge.c:844 src/liflines/merge.c:963 #, c-format msgid "Mismatched lineage child links between %s and %s: %ld and %ld" msgstr "El niño unido mal del linaje se liga entre %s y %s: %ld y %ld" #: src/liflines/merge.c:882 src/liflines/merge.c:891 #, c-format msgid "Bad HUSB tag: %s" msgstr "Mala etiqueta de HUSB: %s" #: src/liflines/miscutls.c:51 msgid "Whose key value do you want?" msgstr "¿De quién valor de clave usted desea?" #: src/liflines/miscutls.c:67 msgid "Please enter person's internal key value." msgstr "Incorpore por favor el valor de clave interno de la persona." #: src/liflines/miscutls.c:68 msgid "enter key:" msgstr "agregue clave:" #: src/liflines/miscutls.c:78 src/liflines/miscutls.c:82 #: src/liflines/miscutls.c:87 #, c-format msgid "No one in database has key value %s." msgstr "Nadie en base de datos tiene valor clave %s." #: src/liflines/scan.c:100 msgid "Enter pattern to match against single surname or given name." msgstr "Incorpore el patrón para emparejar contra solo apellido o nombre dado." #: src/liflines/scan.c:112 msgid "Enter pattern to match against full name." msgstr "Incorpore el patrón para emparejar contra nombre completo." #: src/liflines/scan.c:128 src/liflines/scan.c:178 src/liflines/scan.c:201 #, fuzzy msgid "pattern: " msgstr "Modelo" #: src/liflines/scan.c:151 src/liflines/scan.c:165 msgid "Enter pattern to match against author." msgstr "Incorpore el patrón para emparejar contra autor." #: src/liflines/screen.c:317 #, c-format msgid "initscr failed" msgstr "initscr fallado" #: src/liflines/screen.c:334 #, c-format msgid "" "The requested window size (%ld,%ld) is too large for your terminal (%d,%d).\n" msgstr "" "El tamaño solicitado de la ventana (%ld, %ld) es demasiado grande para su " "terminal (%d, %d).\n" #: src/liflines/screen.c:342 #, c-format msgid "" "The requested window size (%ld,%ld) is too small for LifeLines (%d,%d).\n" msgstr "" "El tamaño solicitado de la ventana (%ld, %ld) es demasiado pequeño para " "LifeLines (%d, %d).\n" #: src/liflines/screen.c:706 msgid "Search results" msgstr "Resultados de la búsqueda" #: src/liflines/screen.c:813 #, fuzzy, c-format msgid "(pg %d/%d)" msgstr " Pg" #: src/liflines/screen.c:1431 msgid "No conversion" msgstr "Ninguna conversión" #: src/liflines/screen.c:1517 msgid "Internal codeset" msgstr "Codeset interno" #: src/liflines/screen.c:1520 msgid "Internal UTF-8: Yes" msgstr "Internal UTF-8: Si" #: src/liflines/screen.c:1522 msgid "Internal UTF-8: No" msgstr "Internal UTF-8: No" #: src/liflines/screen.c:1526 msgid "Locales are enabled." msgstr "Se permiten los locales." #: src/liflines/screen.c:1528 msgid "Locales are disabled." msgstr "No se permiten los locales." #: src/liflines/screen.c:1531 msgid "NLS (National Language Support) is compiled in." msgstr "El NLS (ayuda de la lengua nacional) se compila adentro." #: src/liflines/screen.c:1537 msgid "NLS (National Language Support) is not compiled in." msgstr "El NLS (ayuda de la lengua nacional) no se compila adentro." #: src/liflines/screen.c:1550 msgid "iconv (codeset conversion) is compiled in." msgstr "el iconv (conversión del codeset) se compila adentro." #: src/liflines/screen.c:1552 msgid "iconv (codeset conversion) is not compiled in." msgstr "el iconv (conversión del codeset) no se compila adentro." #: src/liflines/screen.c:1554 #, c-format msgid "Startup collate locale: %s" msgstr "El arranque compagina el locale: %s" #: src/liflines/screen.c:1557 #, c-format msgid "Startup messages locale: %s" msgstr "Locale de lanzamiento de los mensajes: %s" #: src/liflines/screen.c:1560 #, c-format msgid "Current collate locale: %s" msgstr "La corriente compagina el locale: %s" #: src/liflines/screen.c:1563 #, c-format msgid "Current messages locale: %s" msgstr "Locale actual de los mensajes: %s" #: src/liflines/screen.c:1566 #, c-format msgid "Collation routine: %s" msgstr "Rutina de la colación: %s" #: src/liflines/screen.c:1570 #, c-format msgid "GUI codeset: %s" msgstr "Codeset del GUI: %s" #: src/liflines/screen.c:1573 #, c-format msgid "GUI output codeset: %s" msgstr "Codeset de la salida del GUI: %s" #: src/liflines/screen.c:1575 #, c-format msgid "GUI input codeset: %s" msgstr "Codeset de la entrada del GUI: %s" #: src/liflines/screen.c:1580 #, fuzzy, c-format msgid "editor codeset: %s" msgstr "codeset del redactor: %s" #: src/liflines/screen.c:1583 #, c-format msgid "editor output codeset: %s" msgstr "codeset de la salida del redactor: %s" #: src/liflines/screen.c:1585 #, c-format msgid "editor input codeset: %s" msgstr "codeset de la entrada del redactor: %s" #: src/liflines/screen.c:1590 #, c-format msgid "report codeset: %s" msgstr "codeset del informe: %s" #: src/liflines/screen.c:1593 #, c-format msgid "report output codeset: %s" msgstr "divulgue el codeset de la salida: %s" #: src/liflines/screen.c:1595 #, c-format msgid "report input codeset: %s" msgstr "divulgue el codeset de la entrada: %s" #: src/liflines/screen.c:1600 #, c-format msgid "GEDCOM codeset: %s" msgstr "Codeset de GEDCOM: %s" #: src/liflines/screen.c:1603 #, c-format msgid "gedcom output codeset: %s" msgstr "Codeset de la salida de GEDCOM: %s" #: src/liflines/screen.c:1605 #, c-format msgid "gedcom input codeset: %s" msgstr "Codeset de la entrada de GEDCOM: %s" #: src/liflines/screen.c:1613 msgid "UTF-8 charprops loaded" msgstr "Charprops UTF-8 cargados" #: src/liflines/screen.c:1615 msgid "UTF-8 charprops not loaded" msgstr "Charprops UTF-8 no cargados" #: src/liflines/screen.c:1619 msgid "Codeset information" msgstr "Información del codeset" #: src/liflines/screen.c:1636 #, c-format msgid "gettext dll: %s" msgstr "gettext dll: %s" #: src/liflines/screen.c:1640 #, c-format msgid "gettext dll version: %s" msgstr "gettext dll version: %s" #: src/liflines/screen.c:1645 msgid "gettext dll had no version" msgstr "el DLL del gettext no tenía ninguna versión" #: src/liflines/screen.c:1650 msgid "no gettext dll found" msgstr "ningún DLL del gettext encontrado" #: src/liflines/screen.c:1659 #, c-format msgid "iconv dll: %s" msgstr "iconv dll: %s" #: src/liflines/screen.c:1663 #, c-format msgid "iconv dll version: %s" msgstr "iconv dll version: %s" #: src/liflines/screen.c:1668 msgid "iconv dll had no version" msgstr "el DLL del iconv no tenía ninguna versión" #: src/liflines/screen.c:1673 msgid "no iconv dll found" msgstr "ningún DLL del iconv encontrado" #: src/liflines/screen.c:1931 msgid "Impermissible to change codeset in a populated database" msgstr "Impermissible para cambiar el codeset en una base de datos poblada" #: src/liflines/screen.c:2032 msgid "LifeLines -- Main Menu" msgstr "LifeLines -- Menu Principal" #: src/liflines/searchui.c:133 #, fuzzy, c-format msgid "v Review visit history (%d record)" msgid_plural "v Review visit history (%d records)" msgstr[0] "¿Historia de la cancelación (entradas de %d)?" msgstr[1] "¿Historia de la cancelación (entradas de %d)?" #: src/liflines/searchui.c:137 msgid "(visit history is empty)" msgstr "" #: src/liflines/searchui.c:143 #, c-format msgid "c Review change history (%d record)" msgid_plural "c Review change history (%d records)" msgstr[0] "" msgstr[1] "" #: src/liflines/searchui.c:147 #, fuzzy msgid "(change history is empty)" msgstr "El registro es vacío." #: src/liflines/searchui.c:151 #, fuzzy msgid "f Full database scan" msgstr "Ejecución de la exploración del nombre completo" #: src/liflines/searchui.c:220 msgid "What scan type?" msgstr "" #: src/liflines/searchui.c:223 #, fuzzy msgid "f Full name scan" msgstr "Ejecución de la exploración del nombre completo" #: src/liflines/searchui.c:224 msgid "n Name fragment (whitespace-delimited) scan" msgstr "" #: src/liflines/searchui.c:225 #, fuzzy msgid "r Refn scan" msgstr "Ejecución de la exploración del refn" #: src/liflines/searchui.c:226 #, fuzzy msgid "s Source scan" msgstr "Ejecución de la exploración de la fuente" #: src/liflines/searchui.c:290 msgid "Scan on what source field?" msgstr "" #: src/liflines/searchui.c:293 msgid "a Scan by author" msgstr "" #: src/liflines/searchui.c:294 msgid "t Scan by title" msgstr "" #: src/liflines/selectdb.c:95 #, fuzzy msgid "Choose database to open" msgstr "La base de datos no fue ahorrada." #: src/liflines/selectdb.c:103 msgid "No databases found in database path" msgstr "" #: src/liflines/show.c:123 msgid "born" msgstr "nato" #: src/liflines/show.c:124 src/liflines/show.c:125 msgid "bapt" msgstr "bau" #: src/liflines/show.c:126 msgid "barm" msgstr "barm" #: src/liflines/show.c:127 msgid "basm" msgstr "basm" #: src/liflines/show.c:128 msgid "bles" msgstr "" #: src/liflines/show.c:129 msgid "adop" msgstr "" #: src/liflines/show.c:130 msgid "resi" msgstr "" #: src/liflines/show.c:134 msgid "died" msgstr "muerto" #: src/liflines/show.c:135 msgid "buri" msgstr "enterro" #: src/liflines/show.c:136 msgid "crem" msgstr "crem" #: src/liflines/show.c:1009 #, c-format msgid "Cached: I:%s; F:%s" msgstr "Depositado: I:%s; F:%s" #: src/liflines/valgdcom.c:92 #, c-format msgid "Record %s is referred to but not defined." msgstr "Se refiere pero no se define %s de registro." #: src/liflines/valgdcom.c:93 #, c-format msgid "Line %d: Reference to undefined record %s" msgstr "Línea %d: Referencia al registro indefinido %s" #: src/liflines/valgdcom.c:94 #, c-format msgid "Line %d: Tag %s found in unexpected record: %s %s." msgstr "Línea %d: La etiqueta %s encontró en registro inesperado: %s %s." #: src/liflines/valgdcom.c:190 #, c-format msgid "Line %d: Family has no members (%s %s)." msgstr "La línea %d: Family no tiene ningún miembro (%s %s)." #: src/liflines/valgdcom.c:390 #, c-format msgid "Line %d: The source defined here has no key." msgstr "Línea %d: La fuente definida aquí no tiene ninguna clave." #: src/liflines/valgdcom.c:404 #, c-format msgid "Line %d: Source %s has an incorrect key." msgstr "Línea %d: La fuente %s tiene una clave incorrecta." #: src/liflines/valgdcom.c:411 #, c-format msgid "Lines %d and %d: Source %s is multiply defined." msgstr "Las líneas %d y %d: el fuente %s es se multiplican definido." #: src/liflines/valgdcom.c:434 #, c-format msgid "Line %d: The event defined here has no key." msgstr "Línea %d: El evento definido aquí no tiene ninguna clave." #: src/liflines/valgdcom.c:447 #, c-format msgid "Line %d: Event %s has an incorrect key." msgstr "Línea %d: El evento %s tiene una clave incorrecta." #: src/liflines/valgdcom.c:454 #, c-format msgid "Lines %d and %d: Event %s is multiply defined." msgstr "Líneas %d y %d: El evento %s es se multiplica definido." #: src/liflines/valgdcom.c:477 #, c-format msgid "Line %d: The record defined here has no key." msgstr "La línea %d: El registro definido aquí no tiene ninguna clave." #: src/liflines/valgdcom.c:490 #, c-format msgid "Line %d: Record %s has an incorrect key." msgstr "Línea %d: %s de registro tiene una clave incorrecta." #: src/liflines/valgdcom.c:497 #, c-format msgid "Lines %d and %d: Record %s is multiply defined." msgstr "Líneas %d y %d: %s de registro es se multiplica definido." #: src/liflines/valgdcom.c:539 #, c-format msgid "Line %d: This %s line is missing a value field (%s %s)." msgstr "La línea%d: %s está faltando un campo de valor (%s %s)." #: src/liflines/valgdcom.c:590 #, c-format msgid "Line %d: Bad NAME syntax (%s %s)." msgstr "Línea %d: Sintaxis del mal NOMBRE (%s %s)." #: src/liflines/valgdcom.c:820 #, c-format msgid "Line %d: Person %s has multiple father links." msgstr "La línea %d: Persona %s tiene acoplamientos múltiples del padre." #: src/liflines/valgdcom.c:824 #, c-format msgid "Line %d: Person %s has multiple mother links." msgstr "La línea %d: Persona %s tiene acoplamientos múltiples de la madre." #: src/liflines/valgdcom.c:836 #, c-format msgid "Line %d: Person %s is both male and female." msgstr "La línea %d: Persona %s es varón y hembra." #: src/liflines/valgdcom.c:840 #, c-format msgid "Line %d: Person %s is male but must be female." msgstr "La línea %d: Persona %s es masculina pero debe ser femenina." #: src/liflines/valgdcom.c:844 #, c-format msgid "Line %d: Person %s is female but must be male." msgstr "La línea%d: Persona %s es femenina pero debe ser masculina." #: src/liflines/valgdcom.c:848 #, c-format msgid "Line %d: Person %s is implied to be both male and female." msgstr "La línea %d: Persona %s se implica para ser varón y hembra." #: src/liflines/valgdcom.c:860 #, c-format msgid "Line %d: Family %s has multiple husband links." msgstr "Línea %d: La familia %s tiene acoplamientos múltiples del marido." #: src/liflines/valgdcom.c:864 #, c-format msgid "Line %d: Family %s has multiple wife links." msgstr "Línea %d: La familia %s tiene acoplamientos múltiples de la esposa." #: src/liflines/valgdcom.c:920 msgid "error" msgstr "error" #: src/liflines/valgdcom.c:928 #, c-format msgid "%6d Error" msgid_plural "%6d Errors" msgstr[0] "%6d Error" msgstr[1] "%6d Errors" #: src/liflines/valgdcom.c:930 src/liflines/valgdcom.c:958 #, c-format msgid " (see log file <%s>)" msgstr " (vea el fichero de diario <%s>)" #: src/liflines/valgdcom.c:932 src/liflines/valgdcom.c:960 msgid " (no log file)" msgstr " (ningún fichero de diario)" #: src/liflines/valgdcom.c:948 msgid "warning" msgstr "advertencia" #: src/liflines/valgdcom.c:956 #, c-format msgid "%6d Warning" msgid_plural "%6d Warnings" msgstr[0] "%6d Advertencia" msgstr[1] "%6d Advertencias" #: src/liflines/valgdcom.c:1067 #, c-format msgid "Processed %d lines without finding end of HEAD" msgstr "%d procesado alinea sin encontrar el extremo de HEAD" #: src/liflines/valgdcom.c:1072 #, c-format msgid "End of file at line %d" msgstr "Fin del archivo a linea %d" #: src/liflines/valgdcom.c:1076 #, c-format msgid "Error at line %d: %s" msgstr "Error a linea %d: %s" #: src/liflines/valgdcom.c:1080 #, c-format msgid "Bad level at line %d" msgstr "Nivel malo a linea %d" #: src/liflines/valgdcom.c:1086 #, c-format msgid "Duplicate HEAD line at line %d" msgstr "Linea duplicado de HEAD a linea %d" #: src/liflines/valgdcom.c:1092 #, c-format msgid "Missing HEAD line at line %d" msgstr "Faltar HEAD línea en la línea %d" #: src/stdlib/errlog.c:61 #, fuzzy, c-format msgid " in file <%s> at line %d\n" msgstr "en archivo <%s> en la línea %d\n" #: src/stdlib/errlog.c:63 #, fuzzy msgid "Current database" msgstr "Base de datos Actual - %s" #: src/tools/btedit.c:108 #, c-format msgid "btedit requires 2 arguments (btree and key)." msgstr "" #: src/tools/btedit.c:110 #, c-format msgid "See `btedit --help' for more information." msgstr "" #: src/tools/btedit.c:117 #, fuzzy, c-format msgid "Failed to open btree: %s." msgstr "No podía abrir el fichero %s." #: src/tools/btedit.c:124 #, fuzzy, c-format msgid "There is no record with key: %s" msgstr "No hay registro con esa clave o referencia." #: src/tools/btedit.c:126 #, fuzzy, c-format msgid "Error accessing record: %s" msgstr "Datos que tienen acceso del error" #: src/tools/btedit.c:135 #, c-format msgid "Editor or system call failed." msgstr "" #: src/tools/btedit.c:137 #, fuzzy, c-format msgid "Database was not be modified." msgstr "La base de datos no fue ahorrada." #: src/tools/btedit.c:143 #, fuzzy, c-format msgid "Readonly database can not be modified." msgstr "La base de datos no fue ahorrada." #: src/tools/btedit.c:150 #, c-format msgid "Error writing file 'btedit.tmp'." msgstr "" #: src/tools/btedit.c:156 #, c-format msgid "Record %s modified." msgstr "" #: src/tools/btedit.c:226 #, fuzzy msgid "\"\\My Documents\\LifeLines\\Databases\\MyFamily\"" msgstr "\\My Documents\\LifeLines\\Databases\\MiFamilia" #: src/tools/btedit.c:228 src/tools/dbverify.c:232 msgid "/home/users/myname/lifelines/databases/myfamily" msgstr "/home/users/myname/lifelines/databases/mifamila" #: src/tools/btedit.c:231 #, c-format msgid "" "lifelines `btedit' edits raw binary btree blocks\n" "in lifelines database files. Do NOT use this unless\n" "you know what you are doing and you have backed up\n" "your database." msgstr "" #: src/tools/btedit.c:236 #, c-format msgid "Usage btedit [database] [rkey]" msgstr "" #: src/tools/btedit.c:240 #, c-format msgid "\t--help\tdisplay this help and exit" msgstr "" #: src/tools/btedit.c:242 #, c-format msgid "\t--version\toutput version information and exit" msgstr "" #: src/tools/btedit.c:246 #, c-format msgid "\tbtedit %s I34" msgstr "" #: src/tools/btedit.c:248 #, c-format msgid "edit raw btree block for person I34" msgstr "" #: src/tools/dbverify.c:175 msgid "Orphan names" msgstr "Nombres huérfanos" #: src/tools/dbverify.c:176 msgid "Ghost names" msgstr "Nombres fantasmas" #: src/tools/dbverify.c:177 src/tools/dbverify.c:178 msgid "Duplicate names" msgstr "Nombres duplicados" #: src/tools/dbverify.c:179 msgid "Non-indi names" msgstr "No nombres del indi" #: src/tools/dbverify.c:180 msgid "Duplicate individuals" msgstr "Individuales duplicados" #: src/tools/dbverify.c:181 msgid "Duplicate families" msgstr "Familias duplicados" #: src/tools/dbverify.c:182 msgid "Duplicate sources" msgstr "Fuentes duplicados" #: src/tools/dbverify.c:183 msgid "Duplicate events" msgstr "Eventos duplicados" #: src/tools/dbverify.c:184 msgid "Duplicate others" msgstr "Otros duplicados" #: src/tools/dbverify.c:185 msgid "Missing records (from deleteset)" msgstr "Registros que falta (desde deleteset)..." #: src/tools/dbverify.c:186 msgid "Deleted records" msgstr "Registros suprimidos" #: src/tools/dbverify.c:187 msgid "Bad name" msgstr "Mal nombre" #: src/tools/dbverify.c:188 msgid "Bad family reference" msgstr "Mala referencia de la familia" #: src/tools/dbverify.c:189 msgid "Missing child" msgstr "Niño que falta" #: src/tools/dbverify.c:190 msgid "Missing spouse" msgstr "Esposo que falta" #: src/tools/dbverify.c:191 msgid "Bad HUSB reference" msgstr "Malo referencia de HUSB" #: src/tools/dbverify.c:192 msgid "Bad WIFE reference" msgstr "Malo referencia de WIFE" #: src/tools/dbverify.c:193 msgid "Bad CHIL reference" msgstr "Malo referencia de CHIL" #: src/tools/dbverify.c:194 msgid "Improper HUSB" msgstr "Impropia HUSB" #: src/tools/dbverify.c:195 msgid "Improper WIFE" msgstr "Impropia WIFE" #: src/tools/dbverify.c:196 msgid "Improper child" msgstr "Impropia CHILD" #: src/tools/dbverify.c:197 msgid "Empty family" msgstr "Familia vacía" #: src/tools/dbverify.c:198 msgid "Single person family" msgstr "Sola familia de la persona" #: src/tools/dbverify.c:199 msgid "Bad pointer" msgstr "Malo Puntero" #: src/tools/dbverify.c:200 msgid "Missing data records" msgstr "Registro de datos que falta" #: src/tools/dbverify.c:230 msgid "\\My Documents\\LifeLines\\Databases\\MyFamily" msgstr "\\My Documents\\LifeLines\\Databases\\MiFamilia" #: src/tools/dbverify.c:236 #, c-format msgid "usage: dbverify -(flags) \n" msgstr "uso: dbverify -(bandera) \n" #: src/tools/dbverify.c:237 #, c-format msgid "flags:\n" msgstr "banderas:\n" #: src/tools/dbverify.c:238 #, c-format msgid "\t-a = Perform all checks (does not include fixes)\n" msgstr "\t-a = Realice todos los cheques (no incluye el fixes)\n" #: src/tools/dbverify.c:239 #, c-format msgid "\t-g = Check for ghosts (names/refns)\n" msgstr "\t-g = Compruebe para saber si hay fantasmas (nombres/refns)\n" #: src/tools/dbverify.c:240 #, c-format msgid "\t-G = Check for & fix ghosts (names/refns)\n" msgstr "\t-G = Compruebe para y fije los fantasmas (nombres/refns)\n" #: src/tools/dbverify.c:241 #, c-format msgid "\t-i = Check individuals\n" msgstr "\t-i = Compruebe a individuos\n" #: src/tools/dbverify.c:242 #, c-format msgid "\t-f = Check families\n" msgstr "\t-f = Compruebe a familias\n" #: src/tools/dbverify.c:243 #, c-format msgid "\t-F = Alter any bad family lineage pointers (to _badptr)\n" msgstr "" "\t-F = Altere cualquier mal indicador del linaje de la familia (_ badptr)\n" #: src/tools/dbverify.c:244 #, c-format msgid "\t-h = Display help text (this text)\n" msgstr "\t-h = Texto de ayuda de la exhibición (este texto)\n" #: src/tools/dbverify.c:245 #, c-format msgid "\t-s = Check sours\n" msgstr "\t-s = Compruebe fuentes\n" #: src/tools/dbverify.c:246 #, c-format msgid "\t-e = Check events\n" msgstr "\t-e = Compruebe eventos\n" #: src/tools/dbverify.c:247 #, c-format msgid "\t-x = Check others\n" msgstr "\t-x = Compruebe otros\n" #: src/tools/dbverify.c:248 #, c-format msgid "\t-l = Check database structure\n" msgstr "\t-l = Compruebe la estructura de la base de datos\n" #: src/tools/dbverify.c:249 #, c-format msgid "\t-m = Check for records missing data entries\n" msgstr "\t-m = Compruebe para saber si hay registros que faltan el entradas\n" #: src/tools/dbverify.c:250 #, c-format msgid "\t-M = Fix records missing data entries\n" msgstr "\t-M =El arreglo registra entradas de datos que falta\n" #: src/tools/dbverify.c:251 #, c-format msgid "\t-D = Fix bad delete entries\n" msgstr "\t-D = Malas entradas de la cancelación del arreglo\n" #: src/tools/dbverify.c:252 #, c-format msgid "\t-n = Noisy (echo every record processed)\n" msgstr "\t-n =Ruidoso (repita cada registro procesado)\n" #: src/tools/dbverify.c:253 #, c-format msgid "example: dbverify -ifsex \"%s\"\n" msgstr "ejemplo: dbverify -ifsex \"%s\"\n" #: src/tools/dbverify.c:386 #, c-format msgid "Non-indi name, key=%s, name=%s" msgstr "Nombre de Non-indi, clave=%s, nombre=%s" #: src/tools/dbverify.c:403 #, c-format msgid "Orphaned name: %s" msgstr "Nombre dejado huérfano: %s" #: src/tools/dbverify.c:417 #, c-format msgid "Ghost name: %s -> %s" msgstr "Nombre fantasma: %s -> %s" #: src/tools/dbverify.c:449 #, c-format msgid "Orphaned refn: %s" msgstr "refn dejado huérfano: %s" #: src/tools/dbverify.c:489 #, c-format msgid "Duplicate name for %s (%s)" msgstr "Nombre duplicado para %s (%s)" #: src/tools/dbverify.c:524 #, c-format msgid "Duplicate refn for %s (%s)" msgstr "refn duplicado para %s (%s)" #: src/tools/dbverify.c:637 #, c-format msgid "Duplicate individual for %s" msgstr "Individuales duplicado para %s" #: src/tools/dbverify.c:679 #, c-format msgid "Bad name for individual %s: %s" msgstr "Nombre malo para individuales %s: %s" #: src/tools/dbverify.c:697 src/tools/dbverify.c:721 #, c-format msgid "Bad family reference (%s) individual %s" msgstr "Malo referencia de familia (%s) individual %s" #: src/tools/dbverify.c:703 #, c-format msgid "Missing child (%s) in family (%s)" msgstr "Niño que falta (%s) en la familia (%s)" #: src/tools/dbverify.c:707 #, c-format msgid "Fixed missing child (%s) in family (%s)" msgstr "Niño (%s) que falta fijo en la familia (%s)" #: src/tools/dbverify.c:727 #, c-format msgid "Missing spouse (%s) in family (%s)" msgstr "Cónyuge que falta (%s) en la familia (%s)" #: src/tools/dbverify.c:731 #, c-format msgid "Fixed missing spouse (%s) in family (%s)" msgstr "Cónyuge (%s) que falta fijo en la familia (%s)" #: src/tools/dbverify.c:765 #, c-format msgid "Duplicate family for %s" msgstr "Familia duplicado para %s" #: src/tools/dbverify.c:816 #, c-format msgid "Bad HUSB reference (%s) in family %s" msgstr "Malo referencia de HUSB (%s) en familia %s" #: src/tools/dbverify.c:822 #, c-format msgid "Fixed Bad HUSB reference (%s) in family %s" msgstr "Referencia fija del malo HUSB (%s) en la familia %s" #: src/tools/dbverify.c:831 #, c-format msgid "Improper HUSB (%s) in family (%s)" msgstr "HUSB incorrecto (%s) en la familia (%s)" #: src/tools/dbverify.c:844 #, c-format msgid "Bad wife reference (%s) in family %s" msgstr "Malo referencia de WIFE (%s) en familia %s" #: src/tools/dbverify.c:850 #, c-format msgid "Fixed Bad wife reference (%s) in family %s" msgstr "Mala referencia fija de la esposa (%s) en la familia %s" #: src/tools/dbverify.c:859 #, c-format msgid "Improper wife (%s) in family (%s)" msgstr "wife incorrecto (%s) en la familia (%s)" #: src/tools/dbverify.c:872 #, c-format msgid "Bad child reference (%s) in family %s" msgstr "Malo referencia de CHILD (%s) en familia %s" #: src/tools/dbverify.c:878 #, c-format msgid "Fixed bad child reference (%s) in family %s" msgstr "Mala referencia fija del niño (%s) en la familia %s" #: src/tools/dbverify.c:887 #, c-format msgid "Improper child: Child (%s) without FAMC reference to family (%s)" msgstr "Niño incorrecto: Niño (%s) sin referencia de FAMC a la familia (%s)" #: src/tools/dbverify.c:895 #, c-format msgid "Empty family (%s)" msgstr "Familia vacías (%s)" #: src/tools/dbverify.c:897 #, c-format msgid "Single person family (%s)" msgstr "Familia solo una persona (%s)" #: src/tools/dbverify.c:923 #, c-format msgid "Duplicate source for %s" msgstr "Fuente duplicada para %s" #: src/tools/dbverify.c:939 #, c-format msgid "Duplicate event for %s" msgstr "Eventos duplicada para %s" #: src/tools/dbverify.c:955 #, c-format msgid "Duplicate record for %s" msgstr "Registro duplicada para %s" #: src/tools/dbverify.c:1026 #, c-format msgid "Bad pointer (in %s): %s" msgstr "Mal indicador (en %s): %s" #: src/tools/dbverify.c:1064 #, c-format msgid "Missing undeleted record %c%d" msgstr "Registro undeleted que falta %c%d" #: src/tools/dbverify.c:1071 #, c-format msgid "Fixed missing undeleted record %c%d" msgstr "Los desaparecidos fijos undeleted %c%d de registro" #: src/tools/dbverify.c:1075 #, c-format msgid "Failed to fix missing undeleted record %c%d" msgstr "No pudo fijar el registro undeleted los desaparecidos %c%d" #: src/tools/dbverify.c:1087 #, c-format msgid "Delete set contains valid record %s" msgstr "El sistema de la cancelación contiene el registro válido %s" #: src/tools/dbverify.c:1092 #, c-format msgid "Fixed delete set contains valid record %s" msgstr "El sistema fijo de la cancelación contiene el registro válido %s" #: src/tools/dbverify.c:1096 #, c-format msgid "Failed to fix missing undeleted record %s" msgstr "Falló arreglado falto registro no borrado %s..." #: src/tools/dbverify.c:1117 #, fuzzy, c-format msgid "Master fkey misaligned" msgstr "El fkey principal se alineó mal (%ld! = %ld)\n" #: src/tools/dbverify.c:1144 #, c-format msgid "Cycle in indexes, file %s found again!\n" msgstr "¡Complete un ciclo en los índices, archivo %s encontrado otra vez!\n" #: src/tools/dbverify.c:1151 #, fuzzy, c-format msgid "Error loading index at key" msgstr "Índice del cargamento del error en la clave %ld\n" #: src/tools/dbverify.c:1199 #, c-format msgid "First key in block below parent's limit\n" msgstr "Primera clave en bloque debajo del limite de los progenitores\n" #: src/tools/dbverify.c:1207 #, c-format msgid "Last key in block above parent's limit\n" msgstr "Clave pasada en bloque sobre el límite de los progenitores\n" #: src/tools/dbverify.c:1215 #, fuzzy, c-format msgid "Key not below next key" msgstr "Clave %ld no debajo el clave siguiente\n" #: src/tools/dbverify.c:1232 src/tools/dbverify.c:1234 msgid "data block" msgstr "datos de cuadra..." #: src/tools/dbverify.c:1235 #, c-format msgid "%s fkey=%d, file=%s" msgstr "%s fkey=%d, fichero=%s" #: src/tools/dbverify.c:1248 #, fuzzy, c-format msgid "Invalid errs array[%d] in dbverify - fix program\n" msgstr "Inválido errs arreglo[%ld] en dbverify - programma de arreglado\n" #: src/tools/dbverify.c:1285 #, c-format msgid "Missing data record (%s)" msgstr "Registro de datos que falta (%s)" #: src/tools/dbverify.c:1289 #, c-format msgid "Fixed missing data record (%s)" msgstr "Registro de datos que falta arreglado (%s)" #: src/tools/dbverify.c:1420 #, c-format msgid "Checking %s" msgstr "" #: src/tools/dbverify.c:1476 #, c-format msgid "%d error" msgid_plural "%d errors" msgstr[0] "%d error" msgstr[1] "%d errors" #: src/tools/dbverify.c:1480 #, c-format msgid "%d fixed" msgid_plural "%d fixed" msgstr[0] "%d arreglado" msgstr[1] "%d arreglados" #: src/tools/dbverify.c:1487 msgid "No errors found" msgstr "Ningunos errores encontrados" #: src/tools/dbverify.c:1506 #, c-format msgid "FATAL ERROR: " msgstr "ERROR FATAL: " #: src/tools/dbverify.c:1511 #, c-format msgid "In file <%s> at line %d" msgstr "En el archivo <%s> en la línea %d" #~ msgid "Program" #~ msgstr "Programa" lifelines-3.0.61/po/fr.gmo0000700002540200244210000030447510656417755015527 0ustar prappDomain UsersÞ•˜Ü$#œI(b")b.Lb{b9™b+Ób'ÿb2'cZcnc%„c$ªcÏcèc-d*6dadtdˆd—d%·dÝdúde %e2e AeNeceve ‡e•e§e»eÊeÙeée,ùe&f9fMf\fmfsfzf€f‡f‹f f¹fËfàf÷f gg0gAg`gugŠg2›gÎgægïgøgh hh h,h;hJh`hth>’h ÑhÝhðh' i1i Oipi!‚i¤i+¿iëi" j",j!Oj qj’j²j!Òj!ôjk!5k Wk#xk#œk4Àkõkl2lRl%nl”l°lÎlélm'm GmTmfm}m‘m£m·m$Ñmöm nn&"nInbnqn…n›n®n ´nÂn ÈnÖnîn oo o,oFo/Wo;‡o(Ão ìo&úo'!p&Ip&pp&—p&¾påpúp qq3qIq&Zq+q­q²q¸q »qÇq Öq%áqr"r$=r=br> r%ßr)s/sDsIsPsSs Wsasts$‡s¬s½sÐsés%t,t>t4YtŽt¡t'¶tÞtýtu"u7u@u _ukuƒu$–u2»u)îu&v(?v)hv’v—v šv'¤vÌv>ßv<w2[wLŽw*Ûw&x -x!9x-[x‰xžx¶x$Êx%ïxy)yF?y<†y/Ãy*óy@z3_z.“zÂz×zîz,{43{h{~{™{ª{'Æ{î{%ý{;#|_|s|„|š|¸|Ç|#ä|}1}/J}z}3Ž}5Â}6ø}6/~6f~6~;Ô~/.@<o=¬'ê)€(<€)e€)€)¹€)ã€' $5KZ%¦LÌ%‚L?‚%Œ‚L²‚%ÿ‚L%ƒ"rƒ•ƒ°ƒσæƒ÷ƒ „1"„T„r„Ž„¤„¿„Ï„1à„…*…E…]… o……-™…Ç…å… ø…†† .†O†l†$ˆ†­†͆"ç†, ‡-7‡&e‡)Œ‡$¶‡<Û‡ˆ 1ˆ>ˆSˆnˆƒˆ  ˆÁˆ݈ øˆ‰5‰P‰-p‰ ž‰(«‰ Ô‰Þ‰ ÷‰ ŠŠ1*Š+\Š)ˆŠ²Š0ÌŠýŠ) ‹ 7‹C‹4V‹/‹‹(»‹*ä‹*Œ+:Œ)fŒ'Œ¸Œ(׌#$-+5Y¢µÅÛò ŽŽ$Ž+Ž.Ž2Ž$6Ž[Ž7oŽ §Ž)±Ž8ÛŽ*,?!l ŽB¯%ò.G$d3‰2½4ð%‘!D‘)f‘"‘*³‘,Þ‘( ’!4’7V’Ž’ ¦’!´’ Ö’ä’@ó’!4“V“ n“6z“±“ēؓé“ý“”#”16”'h””¨”"Á”"ä”-•5•:•'Q•5y•5¯•2å•0–I–2`–6“–6Ê–é—!ë˜' ™(5™.^™+™'¹™1á™-š-Aš+oš.›š9Êš.›)3›(]›)†›(°›2Ù›+ œ,8œ5eœ,›œ,Èœ7õœ"-8P(‰'²!Ú!üž0>ž.ož/žž8Ξ/Ÿ/7ŸgŸwŸŸ@¢ŸãŸõŸ, 4 &K )r  œ =¦ >ä #¡2@¡ s¡!¡£¡¼¡ Ñ¡ò¡"¢ $¢2¢P¢/W¢3‡¢»¢âÕ¢ó¢£+*£V£7g£Ÿ£ ¹£AÇ£# ¤-¤*=¤/h¤˜¤«¤»¤$ͤò¤¥*!¥L¥e¥|¥›¥¯¥¾¥Î¥Þ¥*,¦K¦#Z¦~¦’¦'¤¦+̦ø¦ §§ § 2§ ?§J§]§x§“§­§˧à§÷§)¨#0¨T¨&p¨&—¨'¾¨&æ¨) ©%7©2]© ©&±©.Ø©+ª,3ª4`ª1•ª3Ǫ+ûª'« G«$h«,«-º«5è«2¬4Q¬!†¬-¨¬:Ö¬)­);­)e­,­#¼­/à­$®5®P®3l® ®#°®Ô®.Ý® ¯F&¯m¯$ƒ¯¨¯'À¯è¯° ° %°!3°U°q°&€°)§°Ѱå°ú°(±>±O± _±m±0ƒ±*´±ß±/ò±"²=²F²Y²b²t²}²˜²0§²)ز7³:³>³S³4m³¢³)±³.Û³# ´4.´c´r´´©´TÅ´µ!µ@µ Tµ)_µ7‰µ*Áµìµ! ¶)-¶vW¶-ζü¶3·6K·5‚·6¸·5ï·%¸?¸'[¸;ƒ¸8¿¸(ø¸!!¹)C¹7m¹!¥¹+ǹ*ó¹+º,Jº,wº¤º(¹ºLâºH/»(x»+¡»Í»ì»6 ¼1B¼6t¼«¼.˼'ú¼G"½1j½6œ½.Ó½-¾80¾3i¾4¾8Ò¾6 ¿)B¿–l¿)À,-À1ZÀ*ŒÀ3·À9ëÀ+%Á)QÁ7{Á8³Á4ìÁ-!Â.OÂ,~Â,«Â.ØÂ2Ã,:ÃgÃ%pÖÃ7©ÃáÃ0éÃ4Ä OÄ ]ÄkÄ‚Ä(ÄÆÄÙÄìÄLûÄ:HÅ@ƒÅÄÅãÅÆ]!Æ#Æ€£Æ$Ç :ÇHÇ%YÇ&Ç ¦Ç%°ÇGÖÇÈ7È$SÈ xÈ<™È ÖÈ4÷È,É%<É$bÉ,‡É,´É'áÉ( Ê,2Ê_Ê)yÊ£Ê@ÀÊ"Ë$Ë&DË2kË0žË1ÏË2Ì14Ì1fÌ1˜ÌÊÌèÌ*ÿÌ*ÍAÍRÍcÍs̈́͗ͪͼÍÏÍ æÍ"ôÍÎ+Î@ÎRÎVÎ_ÎfÎ kÎvÎ{Î΃ΊÎ)“νÎ×ÎÛÎáÎåÎìÎïÎ%Ï+Ï?ÏTÏXÏ^ÏcÏjÏoÏtÏ {Ï …ϓϥϪϯ϶ϻÏ,ÄÏñÏ÷ÏüÏÐÐ0Ð,IÐ-vÐJ¤ÐïÐ öÐÑ ÑÑÑ+Ñ,IÑ?vÑ+¶Ñ âÑÒÒ Ò"Ò'6Ò^ÒqÒ†Ò¢Ò ¦Ò'±Ò$ÙÒ$þÒ#Ó'Ó0Ó5Ó<ÓWÓ#]ÓÓ™Ó¨Ó»Ó#ÎÓòÓÔÔ!,Ô#NÔrÔ…ÔžÔ¸Ô¾ÔÅÔÌÔÕÔÙÔÞÔîÔÕÕ 'Õ 2Õ ?ÕLÕ[ÕuÕ#{ÕŸÕ¼ÕÛÕ âÕïÕ2ÖAÖZÖnÖƒÖ8˜Ö&ÑÖøÖ× ×'×.×2×;×A×G×L×T×Y×6aט××¤× ª×¶×»×Ä× Ì×Ú× ß×%éר#Ø<ØVØ[ØdØØ—اظػؿØÄØÈØÌØÜØ#òØ*Ù)AÙ*kÙ.–ÙÅÙÞÙ ôÙ"Ú%Ú:ÚIÚNÚRÚiÚ{ÚÚ‡Ú›ÚŸÚ¤Ú¨Ú­ÚÊÚÚÚîÚ Û$Û+Û%/Û¦UÛFüÛ%CÜ:iÜ,¤Ü,ÑÜþÜÝ'Ý<ÝPÝjÝnÝrÝ x݂݆ݗݨݹÝÊÝÛÝìÝýÝÞÞ#Þ@ÞGÞ,\Þ‰Þ›Þ!¹ÞÛÞàÞæÞìÞñÞøÞ ß8 ß+Yß-…߳߷ßÀßÄßÕßèßÿß)àGàKàSà@WàF˜à9ßà#á=á*Ná"yá œá¦á­á²á»áÀáÉáÙáðá* â"6â YâfâzâŽâ¤â·âÐâ"êâ ãã*ãCãYã%pã–ã©ã.¸ã)çã#ä5ä<ä @äJäeäkäsäwä~ä ‚ää–äšä$ äEÅä å å}å$šå¿åÃåÔå&éåæ!æ'æ=æAæGæMæcæ,yæ-¦æ(Ôæ*ýæ(ç -ç7ç=çCçJç`çdç7jç¢ç¸ç¼çÓçèçè1è8Pè‰èžè¢èªè±èµèÊè:åè! éHBé‹é éœé¡é©é±é)Ééóéêê2ê'Gêoêˆê˜ê›ê ê¥ê·êmÈê"6ì7Yì7‘ìEÉì8í2HíA{í½íÜí*ùí)$îNî*lî0—î5Èîþî*ïEï2Tï#‡ï'«ï%Óïùï ðð7ðHðfð}ð ‘ðŸð²ðÆðÕðäðôð,ñ1ñEñYñhñyññ†ñ‰ññ•ñ$¬ñÑñçñüñò'ò<òSòjò$Šò¯òÈòNßò.óFóOóXóaójóó†ó˜óªóºóÑó,çó@ô Uôbôvô,”ôÁôÞôýô#õ9õ.Wõ†õ$¥õ%Êõ&ðõ%ö$=ö#bö'†ö,®ö$Ûö%÷$&÷'K÷$s÷3˜÷ Ì÷"í÷(ø 9ø-Zøˆø"¨ø Ëø!ìø#ù 2ùSùcùvùŽù£ùºù)Íù÷ùú &ú1ú%Dú#júŽúú¯úÁúÓú×úçúíúÿúû 3û AûMû\ûvû/Šû;ºû(öû ü0-ü1^ü3ü4Äü0ùü1*ý\ýrý ’ýžý³ýÃý2Ôý3þ;þDþJþ Pþ \þiþ7xþ °þÑþ(ïþ1ÿ5Jÿ(€ÿ5©ÿßÿôÿýÿ  0/Hx—+¯%Û13!OBq´Ò,ð%Ca€ Ÿ#«Ïà07N0†1·:é)$NS V-`ŽS¤SøELq’=;B~ Ž.¯Þù ,70d•³QÎE 8f2ŸEÒ1 0J { !‘ "³ 3Ö 5 @ R  n { 0˜ É *Ø 6 : L g ~ œ %° :Ö  J+ Hv ¿ -Ö 0 05 1f 5˜ /Î 5þ )4*^0‰1º$ì,)>)h*’.½(ì &6M]&«MÒ' NH+—RÃ%K<!ˆª"Æé.;H$„©ÄØó 9# ]~š³ ÆçEð)6` u‚”'±Ù ù0&K"r+•3Á5õ,+1X*Š8µ#î!&<c%}3£-×%*+!V x&™,Àí- 0; Saq?Š>ÊA ,K9x².à ò2AM(1¸2ê3HQ4š)Ï6ù20c/l9œÖô$"$Gl ƒ‘¤«®²1¶èAý ? -I Jw / 0ò ,#!,P!>}!5¼!0ò!-#"+Q"?}"?½"9ý"!7#(Y#*‚#'­#)Õ#.ÿ#3.$(b$?‹$(Ë$ô$'%+%:%4K%'€%"¨%Ë%BÝ% &7&N&d&{&&¤&E¹&4ÿ&4'N'(k',”'3Á'õ'&ú',!(<N(5‹(2Á(>ô(3)3O)8ƒ)9¼)Cö)+:,/f,.–,0Å,1ö,1(-9Z-1”-1Æ-7ø-<0.@m.;®..ê.4/7N/-†/?´/1ô/1&0<X05•0/Ë0=û0*91<d1)¡13Ë11ÿ1&12'X2+€2;¬2;è2B$3:g3:¢3Ý3ï34M4k447”4Ì4/è4,5 E57P56ˆ5$¿53ä56)(6R6q6*‹6¶6+È6ô6'7+7)17-[7 ‰7•7&±7Ø7õ768I8Ri8'¼8ä8Dö8*;9f9C}9DÁ9:: /:.=:%l:’:,¯:-Ü: ;+;I;Y;l;;—;*²;Ý;õ;<+&<R<h<(z<(£< Ì<Ö<å<÷< = =$=7=%N= t=*•=À=Ú=ö=/ >'9>a>3|>°>%Ð>"ö>#?%=?3c?$—?'¼?)ä?.@0=@1n@3 @0Ô@*A 0A&QA%xA-žA/ÌA0üA2-B/`B"B(³B=ÜB/C JC1kC5C#ÓC2÷C-*DXD%qD;—DÓD.ëD E*'E#REhvEßE4ùE.F/NF)~F¨F»FÀF'ÕFýFG0,G2]G"G#³G'×G1ÿG1HDHZHmHD…H8ÊHI9I#RI vII”II¯I¶IÓI@íI-.J;\J˜JJ!·JGÙJ!K-0K7^K2–K@ÉK L L ®VCíVB1W,tW+¡W:ÍW¸X0ÁX.òX<!Y0^Y>Y8ÎY/Z07Z;hZ?¤Z<äZ:![@\[1[1Ï[7\@9\?z\º\2À\ó\: ]F];L]@ˆ] É] ×]å]ÿ]7^U^o^†^K•^:á^F_"c_†_!¦_mÈ_/6`ˆf`ï` aa46a>kaªa(³a8Üab/b&KbrbD‘b*Öb6c8c(Qc&zc1¡c4Óc4d1=d&od–d3±d#åd< eFefe0†eI·eGfIIfI“fGÝfI%gGog!·gÙg*ðgh2hFhYhmhh”h¦h¹hÌhÞh'ñhi/iBiViZiciii niyi~i‚i†ii9–iÐiíiòiøiýijj'jAjWjmjpjtjyj€j…jŠj‘jšj£j²j·j¼jÃjÈj+Ñjýjkkk#k8k5Xk-Žkp¼k-l 4l?lDlLlSl*Xl*ƒl@®l(ïl m9m>mBmZm)smm®m#Ämèmëm)ûm;%n5an—nœn¥nªn±nÌn3Òn*o1o@oUo1joœoµoÌo1áo$p8p(Wp(€p©p®p·p¼pÄpÈpÍpæpqq4qDqTqoqƒqŸq'¦q,Îq-ûq)r 0r:r4Zrr¬r¾rÑr-èr/s&Fsms†ss”s™s ¡s«s³s ¸sÆsËsCÓst t(t 0t;t@t It St^t ctmtŠt'Ÿt'Çtïtôtýtu0uAu[u^ubufujunu†u3œu1Ðuv* v.Kvzv‘v¨v&·vÞv÷vw ww)w:w?wGw[w`whwmw-rw w ³w,Ôw+x-x4x58x¶nx=%y"cy5†y0¼y=íy+z=zPzgz {zœzŸz¤z©z±zµz·z¹z»z½z¿zÁzÃzÅzÊz(Ózüz{7{O{ e{†{Ÿ{¤{­{³{¸{¿{×{9í{6'|A^| |¥|®|²|Ë|æ|,ü|;)}e}j}r}?u}Kµ}0~+2~^~/q~1¡~Ó~Û~â~ç~ð~õ~þ~-+I*u ²ÅÞö(€(?€h€‡€Œ€'ž€Æ€Ü€*ô€89L1†9¸òù þ$‚-‚2‚;‚@‚G‚K‚Z‚`‚d‚l‚N‡‚Ö‚Ý‚Œä‚qƒƒ‘ƒ¨ƒ6·ƒîƒ„„„„%„+„<„<O„=Œ„=Ê„@…I… N… X…b…h…o……ƒ…CŠ…Î…â…æ…þ…& †"4†0W†9ˆ††Ô†؆á†ç†ì†‡=‡-U‡dƒ‡è‡ í‡ù‡þ‡ ˆ'ˆ:<ˆwˆŠˆ ˆ·ˆ̈ꈉ‰‰‰‰ 0‰ÆQ@W3ŒŠhñnFÝʼ•õ[-<^!s¿ñkL÷¯çWmv³…Ê8yt¨ú(v—f/P5[ù’(3<¾.eÜ$ÐjèÉÞ>|3æ’Ø]$ìYJ¤`Õrëµ*Gb´l˃iÍ{ŒÍZ:ãíHX#2vŒòìQáÞÅ…È_Ù¿˜Ñª+.t¥rÎnL³T4o\ì%– ùWpw)¬5¹%S¹¯€uýöî†5RAÞË»#] r<4ˆX'‹‹:0²T«Ô(õ?áãµv_èéaX‰6‘€µÕÄ=Ë?/ K¬Oyßy¶}ô² ›‚‡x"ͽ´ÄN†fƒIíss\ ‰9 “UäEclÔ¤ò'ÛNòÈàç8>ôÃBÇ@B3ô£ï³G¨Éf#ä&ƒž¢AÖºŽ$|ŠÜ©’~ÁFŸ“À­ûÛúJR ÃUxΔàÇÖ*†œŽ aN;èÄ0]>ˆgz1Ïš§G{ ]º¾î©ýbÿ|ø~+tT™„M²yI¡»I§ßÕÕ@a„pV:éÍ|Zûzõ`—‡·Y-ŽaÑ;J6j`ÅY¡ŠßøŒë c[öegÿ¢)„v‚7·)ƒ“»X¦f2Ïß#0ànÝ—žø&åÌ“ÿÛÁOÝsI¬½×Ò÷DÜ‹w,ÑÌ ?œ ¾Ò™þ1‰S連æ™Ü«œ$9’O ª‘OEo‘Y‹>¶2›}DóZbz™¸c&°hÀ¯Ï£¿!kð—á]M÷Ðg8 aEãYžûÓ©‹|›&'eW·dÝ!w- h"€¡0}GiQ©´)÷«#ÚÎW‡ŠŠ¨¸’(Ÿ?”EpЄ&é_¥ š‚z/CójâM´u¦;/±¦ŸfZ{;ÈUÒÇæQ¢ÓT~ñ=;Œ}k“B9!ˆ¼âË^è®Ñ)y‰HKS*ªekäÎu˜-DnLd®ü=«ýþMî3Ui¸°îxÄÉ>°†m\ë_r[j Ù^1j6kC×ÊÖ ­o–­Øw% 9§Ò.±žmÃ+MÅ *Ú{,Só\‘ ¦uƒ52²!סXá ¯ÆAÁˆiVŸ[D ‡<ëÐÙlÆÊ°ð*•­eS›þµK±åæâRd:ô‰$HùG}+n'ó¸â½EþðAö˜RCxPÖF†ØOˆx=Âq× 8 Ž7Cí•"gï'q_Hçøqi¥åê6 FÃàpšQ̨7  tä…ÞÉùRmüN.Pc~§ghDõ@íI8ØÓ¿?VÚ¤˜,ã C~h£%ºÌÿKðöýd5  "b`0Ô”úê%B"4€Uñ/‚c—+oüºow‡–…l…³pu±67Èœ^•òÀÙÚ‚qq„¼˜¬¢P(ZÏüTV·P”4NÀ=¼çÅ@`”ªrú.zïêl¾LÁBêï¹9¤ 1,7®,<»2FV šÇ®‘{JLm-Ó¥•4ûb^A–å: ¹dÔ–ìŽ1¶K\ÛHJs½Æ¶t --help display this help and exit --version output version information and exit -D = Fix bad delete entries -F = Alter any bad family lineage pointers (to _badptr) -G = Check for & fix ghosts (names/refns) -M = Fix records missing data entries -a = Perform all checks (does not include fixes) -e = Check events -f = Check families -g = Check for ghosts (names/refns) -h = Display help text (this text) -i = Check individuals -l = Check database structure -m = Check for records missing data entries -n = Noisy (echo every record processed) -s = Check sours -x = Check others btedit %s I34 Aborting now. Core dump? [y/n] Report duration %s (ui duration %s) in file <%s> at line %d in file <%s> at line %d (dbint tt: %s) (immutable) (no log file) (read only) (see log file <%s>) Go down one level Go up one level!! Cycle mode!a Ancestors mode!d Descendants mode!g GEDCOM mode!n Normal mode!t GEDCOMT mode!x GEDCOMX mode"\My Documents\LifeLines\Databases\MyFamily"# Toggle childnos$$ List references$n List notes$s List sources%02ds%1 AUC%1 FR%1 HEB%1J%6d Error%6d Errors%6d Warning%6d Warnings%c Reorder child%d child%d children%d element%d elements%d entry%d entries%d error%d errors%d fixed%d fixed%d item%d items%d item leaked%d items leaked%d record%d records%d spouse%d spouses%d step%d steps%d warning during import%d warnings during import%dI, %dF, %dS, %dE, %dX%dd%02dh%dh%02dm%dm%02ds%dy%03dd%e Add event%ldth%o Add other%s Add source%s -f myfamily%s -f myfamily -x eol%s fkey=%d, file=%s%s invokes the Lifelines GUI.%s invokes the Lifelines report execution program without GUI.%s myfamily%s myfamily -x eol%s was added as a child.%s was added as a spouse and/or parent.%s was added to the database.%s was modified in the database.%s: Bad arguments%s: Incomparable types: %s and %s%s: line %d (entry %d): %s%s: not compatible numeric types: %s and %s%s: null arg not permissible.%s: the arg #%s had a major error.%s: the arg #%s must be a boolean.%s: the arg #%s must be a family.%s: the arg #%s must be a float.%s: the arg #%s must be a list.%s: the arg #%s must be a node.%s: the arg #%s must be a person.%s: the arg #%s must be a record.%s: the arg #%s must be a set.%s: the arg #%s must be a string.%s: the arg #%s must be a table.%s: the arg #%s must be a variable.%s: the arg #%s must be an integer.%s: the arg #%s would cause an arithmetic exception.%s: the arg had a major error.%s: the arg must be a family.%s: the arg must be a filename.%s: the arg must be a list.%s: the arg must be a node or string.%s: the arg must be a node.%s: the arg must be a person.%s: the arg must be a set.%s: the arg must be a string.%s: the arg must be a variable.%s: the arg must be an integer.( Scroll up(( Scroll both up(1-9) Browse to child(Family %s (%s, %s)(Separator is %s)(b Scroll bottom up(change history is empty)(givens) person does not have a name(no conversion)(pg %d/%d)(t Scroll top up(trimname) person does not have a name(visit history is empty)) Scroll down)) Scroll both down)b Scroll bottom down)t Scroll top down**may+ Next in db, of - Prev in db-- CURRENT SELECTION ----- CURRENT SELECTION ------ LIST ----C[FILE]-I[KEY=VALUE]-c[TYPE][DIRECT,INDIRECT]-u[HEIGHT,WIDTH]/home/users/myname/lifelines/databases/myfamily0 EVEN 1 REFN 1 DATE 1 PLAC 1 INDI 2 NAME 2 ROLE 1 SOUR0 SOUR 1 REFN 1 TITL Title 1 AUTH Author0 XXXX 1 REFN1 Add a source record to the database2 Edit source record from the database3 Add an event record to the database4 Edit event record from the database5 Add an other record to the database6 Edit other record from the database< Enlarge menu area> Shrink menu area? Other menu choicesA Advanced viewA family cannot be merged with itself.A person cannot be merged with him/herself.A.D.ABORTADALARM CLOCKASSERT failureAborting: Adding unused keys as deleted keys...Ambiguous call to func: %sAmbiguous call to proc: %sAre you sure you want to merge them?Are you sure you want to remove the person from the database?Are you sure you want to remove this record from the database?Argument to lock (-l) must be y or n.Arguments to (r)sort must be of same sizeB Browse new familyB.C.B.C.E.BCBCEBUS ERRORBad CHIL referenceBad HUSB referenceBad HUSB reference (%s) in family %sBad HUSB tag: %sBad WIFE referenceBad backup history countBad cache entry <%s> != <%s>Bad child reference (%s) in family %sBad child tag: %sBad decimal number format.Bad escape code at offset %d in bytecode string <%s>Bad escape format.Bad family referenceBad family reference (%s) individual %sBad hexidecimal number format.Bad history countBad history lengthBad level at line %dBad nameBad name for individual %s: %sBad pointerBad pointer (in %s): %sBad spouse tag: %sBad wife reference (%s) in family %sBecause of errors the GEDCOM file was not loaded. Both families must have husbands/fathers.Both families must have wives/mothers.Browse new record (without adding xref).Btree lookup looped back to master (%ld)!C.E.CECOPYRIGHTCache [%s] overflowed its max size (%d)Cached: I:%s; F:%sCall stack has %d higher levelCall stack has %d higher levelsCall stack has %d lower levelCall stack has %d lower levelsCannot combine forceopen (-f) and lock (-l) flags.Cannot combine immutable (-i) or read-only (-r) with read-write (-w) access.Cannot convert codeset (from <%s> to <%s>)Cannot remove last person from family.Checking %sChecking GEDCOM file for errors. Choose a family by selecting a spouse/parent.Choose an operation:Choose database to openChoose from historyClash with longer hotkey in item: %sClash with shorter hotkey in item: %sCodeset informationCollation routine: %sCommands: Select by number, u Page Up, d Page Down, i Select, q QuitCommands: j Move down k Move up i Select q QuitCommands: j Move down k Move up q QuitCommands: u Page Up, d Page Down, q QuitCommands: j Move down k Move up d Delete i Select q QuitCopyright (C) 1991-2007 Thomas T. Wetmore IV et al.Copyright(c) 1991 to 1996, by T. T. Wetmore IVCorrupt DELETESET %cCould not open file %sCould not open file %s.Create a family with this person as a child.Create a family with this person as a spouse/parent.Current Database - %sCurrent collate locale: %sCurrent databaseCurrent messages locale: %sCycle in indexes, file %s found again! DEATH OF CHILDDatabase `%s' has been saved in `%s'.Database error caused by reference to nonexisting key <%s>.Database error: -- Database recordsDatabase was corrupt.Database was not be modified.Default path: Delete history (%d entries)?Delete set contains valid record %sDeleted recordsDisplay global (%d var)Display globals (%d vars)Display local (%d var)Display locals (%d vars)Display to InternalDo you really want to add this child to the family?Do you really want to add this event to the database?Do you really want to add this family to the database?Do you really want to add this person to the database?Do you really want to add this record to the database?Do you really want to add this source to the database?Do you really want to add this spouse/parent to the family?Do you really want to merge these two families?Do you really want to merge these two persons?Do you really want to remove this child from his/her family?Do you really want to remove this spouse from his/her family?Do you really want to reorder children?Do you really want to swap spouse orders?Do you really want to update this event?Do you really want to update this family?Do you really want to update this person?Do you really want to update this record?Do you really want to update this source?Do you want to create a database there?Do you want to edit the event again?Do you want to edit the event again? (Otherwise changes will be discarded.)Do you want to edit the family again?Do you want to edit the family again? (Otherwise changes will be discarded.)Do you want to edit the person again?Do you want to edit the person again? (Otherwise changes will be discarded.)Do you want to edit the record again?Do you want to edit the record again? (Otherwise changes will be discarded.)Do you want to edit the source again?Do you want to edit the source again? (Otherwise changes will be discarded.)Do you want to enter another name?Do you want to re-edit it?Duplicate HEAD line at line %dDuplicate event for %sDuplicate eventsDuplicate familiesDuplicate family for %sDuplicate func %s (lines %d and %d) in report: %sDuplicate hotkey for item: %sDuplicate individual for %sDuplicate individualsDuplicate name for %s (%s)Duplicate namesDuplicate othersDuplicate proc %s (lines %d and %d) in report: %sDuplicate record for %sDuplicate refn for %s (%s)Duplicate source for %sDuplicate sourcesDuplicated REFN - please choose.EMT INSTEdit current record now to add xref manually.Editor or system call failed.Editor to InternalEmpty familyEmpty family (%s)End of file at line %dEnter Family Number to Browse toEnter a sibling from family.Enter a spouse from family.Enter codeset to assume (* for none)Enter d for debugger, q to quitEnter integer for programEnter name of output archive file.Enter name of translation table file to readEnter name of translation table file to writeEnter pattern to match against author.Enter pattern to match against full name.Enter pattern to match against refn.Enter pattern to match against single surname or given name.Enter string for programErrorErrorsError accessing dataError accessing record: %sError at line %d: %sError in abbreviations file.Error in character mapping file.Error in user options file.Error loading index at keyError writing file 'btedit.tmp'.Error: file "%s": line %d: Error: file <%s> not foundError: file <%s> not found: %s Error: there are 999,999 locks on arg to lockEventEventsEvent %s is referred to but not defined.Examples:Existing database found.FATAL ERRORFATAL ERROR: FLOATING POINT EXCEPTIONFailed (errno=%d) to open blockfile (rkey=%s): %sFailed to fix missing undeleted record %c%dFailed to fix missing undeleted record %sFailed to open btree: %s.Families may not yet be removed in this fashion.FamilyFamiliesFamily %s is referred to but not defined.Fatal ErrorFilepath too long.Finnish option (if compiled to allow Finnish option)First argument to (r)sort must be list or arrayFirst key in block below parent's limit Fixed Bad HUSB reference (%s) in family %sFixed Bad wife reference (%s) in family %sFixed bad child reference (%s) in family %sFixed delete set contains valid record %sFixed missing child (%s) in family (%s)Fixed missing data record (%s)Fixed missing spouse (%s) in family (%s)Fixed missing undeleted record %c%dFridayFrom which family is the child to be removed?From which family is the spouse/parent to be removed?GEDCOM codeset: %sGEDCOM to InternalGUI codeset: %sGUI input codeset: %sGUI output codeset: %sGhost name: %s -> %sGhost namesGlobal variablesHANGUPHeHerHisHow would you like to find a record?ILLEGAL INSTRUCTIONINDI, FAM, SOUR, EVEN records may not be other records.INTERRUPTIdentify a child of the family, if known.Identify a parent in the family having children swapped.Identify a spouse of the family, if known.Identify a spouse/parent for the new family.Identify child already in family.Identify child in second family.Identify family (enter nothing to identify by individual members).Identify list of persons for program:Identify one of the child's parents, if known.Identify person for program:Identify second person to browse to.Identify spouse/parent already in family, if known.Identify spouse/parent in second family, if known.Identify spouse/parent to add to an existing family.Identify the child to reorder.Identify the first child to swap.Identify the first family/spouse to swap.Identify the second child to swap.Identify the second family/spouse to swap.Identify the second spouse/parent, if known.Illegal type found in list in menuchooseIllegal value to operation %s: %sImpermissible to change codeset in a populated databaseImport time %s (ui %s) Improper HUSBImproper HUSB (%s) in family (%s)Improper WIFEImproper childImproper child: Child (%s) without FAMC reference to family (%s)Improper wife (%s) in family (%s)In file <%s> at line %dIn menu: %sInsert xref automatically at bottom of current record.Internal UTF-8: NoInternal UTF-8: YesInternal codesetInternal to DisplayInternal to EditorInternal to GEDCOMInternal to ReportInvalid errs array[%d] in dbverify - fix program Invalid properties set for new databaseIs this the new child? Is this the new spouse? Is this the person? Select if so.Is this the record? Select if so.It might be possible to fix this with btedit.KILLKey not below next keyLast key in block above parent's limit LifeLines %s - Genealogical DB and Programming SystemLifeLines -- Auxiliary Browse Screen (* toggles menu)LifeLines -- Family Browse Screen (* toggles menu)LifeLines -- List Browse Screen (* toggles menu)LifeLines -- Main MenuLifeLines -- Person Browse Screen (* toggles menu)LifeLines -- Two Family Browse Screen (* toggles menu)LifeLines -- Two Person Browse Screen (* toggles menu)Lifelines is a program to manipulate genealogical information in lineage-linked GEDCOM format. It has a curses interface and a built-in interpreter for its own genealogical report language. It has its own databases, and records are edited directly in GEDCOM (with an editor of the user's choice). Records store information about people, families, sources, events, and other types of data (such as notes). Lifelines includes a custom report language and comes with a collection of reports.Line %d: Bad NAME syntax (%s %s).Line %d: Event %s has an incorrect key.Line %d: Family %s has an incorrect key.Line %d: Family %s has multiple husband links.Line %d: Family %s has multiple wife links.Line %d: Family has no members (%s %s).Line %d: Person %s has an incorrect key: skipped.Line %d: Person %s has multiple father links.Line %d: Person %s has multiple mother links.Line %d: Person %s is both male and female.Line %d: Person %s is female but must be male.Line %d: Person %s is implied to be both male and female.Line %d: Person %s is male but must be female.Line %d: Person defined here has no name.Line %d: Record %s has an incorrect key.Line %d: Reference to undefined record %sLine %d: Source %s has an incorrect key.Line %d: Tag %s found in unexpected record: %s %s.Line %d: The event defined here has no key.Line %d: The family defined here has no key.Line %d: The person defined here has no key: skipped.Line %d: The record defined here has no key.Line %d: The source defined here has no key.Line %d: This %s line is missing a value field (%s %s).Line %d: This line has a bad link.Line %d: This line has a level number that is too large.Line %d: This line has an illegal level.Line %d: This line has no level number.Line %d: This line is empty; EOF?Line %d: This line is incomplete.Line %d: This line is too long.Line %d: This line needs white space before tag.Lines %d and %d: Event %s is multiply defined.Lines %d and %d: Family %s is multiply defined.Lines %d and %d: Person %s is multiply defined: skipped.Lines %d and %d: Record %s is multiply defined.Lines %d and %d: Source %s is multiply defined.Local variablesLocales are disabled.Locales are enabled.Looks like a program was running. Check file %1 around line %2. M< Less menu colsM> More menu colsMalformed configuration file: line too long.Master fkey misalignedMenu (%s) choice sequence too long: %sMenu (%s) item lacked choice sequence: %sMessages:Mismatched lineage child links between %s and %s: %ld and %ldMismatched lineage spouse links between %s and %s: %ld and %ldMissing HEAD line at line %dMissing NAME line in INDI record; record ignored. Missing childMissing child (%s) in family (%s)Missing data record (%s)Missing data recordsMissing records (from deleteset)Missing spouseMissing spouse (%s) in family (%s)Missing titleMissing undeleted record %c%dMondayNLS (National Language Support) is compiled in.NLS (National Language Support) is not compiled in.NO NAMENOT PVALUE: NULL!NOT PVALUE: invalid type=%d)!Name, key, refn, list, or @:Neighboring keys include:New persons were added to the current list.New record is %sNew spouse/parent has unknown sex; can't add to family.No TTPATH config variableNo conversionNo current internal codeset, so no codeset conversion can be doneNo databases found in database pathNo errors foundNo errors; adding records with new keys...No errors; adding records with original keys...No events present.No more historyNo notes present.No one in database has key value %s.No original string on line.No others present.No persons were added to the current list.No records found in scanNo references present.No replacement string on line.No sources present.No such child.No such family.No such person.No such record.No such translation table in this databaseNode memory leaks:Non-indi name, key=%s, name=%sNon-indi namesNonnumeric type to operation %s: %sNot implemented yetNot valid commandOpen database 'myfamily' with LifelinesOpen the database 'myfamily' with LifelinesOptions:Orphan namesOrphaned name: %sOrphaned refn: %sOtherOthersPIPE WRITEPOWER-FAIL RESTARTPVALUE memory leak report:Parsing Error at line %d: Performing full name scanPerforming name fragment scanPerforming refn scanPerforming source scanPersonPersonsPerson %s is referred to but not defined.Place the child last in the family.Please choose an operation:Please choose family create operation.Please choose from among these people.Please choose from among these records.Please choose from the following list.Please choose from the following options:Please choose the child to browse to.Please choose the child to remove from the family.Please choose the event to view.Please choose the family to browse to.Please choose the father/husband to browse to.Please choose the first child to browse to.Please choose the first family to browse to.Please choose the first father/husband to browse to.Please choose the first mother/wife to browse to.Please choose the first spouse/parent to browse to.Please choose the mother/wife to browse to.Please choose the note to view.Please choose the other to view.Please choose the reference to view.Please choose the second child to browse to.Please choose the second family to browse to.Please choose the second father/husband to browse to.Please choose the second mother/wife to browse to.Please choose the second spouse/parent to browse to.Please choose the source to view.Please choose the spouse/parent to browse to.Please choose the spouse/parent to remove from the family.Please enter person's internal key value.Please enter the name of the GEDCOM file.Please identify next person to browse to.Please identify one of the child's siblings.Please identify one of the spouses.Please identify person or persons to browse to.Please identify record to browse to.Please identify the child.Please mark a record first.Proc %s must be called with %d (not %d) parameters.Proceed anyway?Proceed without codeset conversion?Proceed?Processed %d lines without finding end of HEADProgram contains errors. Program forgot to unlock %d recordProgram forgot to unlock %d recordsProgram is running...Program needs a starting procedure. Program was cancelled. Program was not run because of errors. Program was run successfully. Q Quit current databaseQUITQuit debuggerR Pick a GEDCOM file and read inREFN key is already in use.REPORTING BUGSReadonly database can not be modified.Record %s is referred to but not defined.Record %s modified.Record memory leaks:Remove this family record?Report bugs to lifelines.sourceforge.netReport cancelledReport debuggerReport file: Report not found: %s Report stopping due to error opening output fileReport stopping due to lack of output fileReport to InternalReturn to current record (without adding xref).Runtime Error at line %d: SEE ALSOSEGMENTATION ERRORSIGNAL 0SYSTEM CALL ERRORSaturdayScan on what source field?Search resultsSecond argument to (r)sort must be list or arraySee `btedit --help' for more information.Select the child the new child precedes or select last.SheSingle person familySingle person family (%s)Something impossible happened. Contact tech support.SourceSourcesSource %s is referred to but not defined.Specify a user property (e.g. -ILLEDITOR=gvim)Specify configuration file locationSpecify program output filename (eg, -o/tmp/mytests)Spouse unknownStartup collate locale: %sStartup messages locale: %sStrike any key to continue.String constant overflowing internal buffer tokbuf len=%d, file: %s, start line: %ldSundaySystem error: illegal map codeTERMINATE FROM KILLTRACE TRAPTag is too long to connect automatically.Tandom browse only compatible with persons or families.The child was removed from his/her family.The current list is not named.The current list is now named %s.The database is already open for writing.The database is already opened for read access by %d user.The database is already opened for read access by %d users.The database is locked (no readwrite access).The database is read only.The database is read only; you may not add records.The database is read only; you may not change records.The database is read only; you may not merge records.The database is read only; you may not remove records.The database is read-only; loading has been canceled.The database is unlocked.The database was not saved.The event was modified in the database.The families have different fathers/husbands; cannot merge.The families have different wives/mothers; cannot merge.The family was modified in the database.The file is as positioned at EOF.The new family was added to the database.The persons are not of opposite sex; can't make family.The record begins at wrong level.The record contains multiple level 0 lines.The record does not begin with a FAM line.The record does not begin with a SOUR line.The record does not begin with an EVEN line.The record does not begin with an INDI line.The record is empty.The record was modified in the database.The requested window size (%ld,%ld) is too large for your terminal (%d,%d). The requested window size (%ld,%ld) is too small for LifeLines (%d,%d). The source was modified in the database.The spouse was removed from his/her family.The two children were swapped.The two families were swapped.There are no children in the database for this family.There is no LifeLines database in that directory.There is no one in the database with that name or key.There is no record with key: %sThere is no record with that key or reference.There is something wrong with the data.There was %d unresolved reference.There were %d unresolved references.These persons are children in different families.This does not point to another record in the database!This family already has a husband/male parent.This family already has a wife/female parent.This family has both spouses/parents; can't add another.This family has less than two children; can't swap.This family has neither spouse/parent; can't remove.This family has no female spouse/parent in the database.This family has no male spouse/parent in the database.This family still has links; not removed.This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.This is not a lineage linked GEDCOM file.This person has no children in the database.This person has no older sibling in the database.This person has no spouse in the database.This person has no younger sibling in the database.This person is a spouse/parent in less than two families.This person is already a child in a family.This person is not a child in any family.This person is not a child in the family; can't remove.This person is not a spouse in the family; can't remove.This person is not a spouse or parent in any family.This person record does not have a name line.This person record has bad GEDCOM name syntax.This person's father is not in the database.This person's mother is not in the database.This person's parents are not in the database.This person's sex is not known; can't make family.This report requires a newer program to run ThursdayToo many spouses to display full listTranslation TablesTried to add already-deleted record (%ld) to xref (%c)!TuesdayTwo parents of different sexes cannot be merged.Two persons with different parents cannot be merged.USER SIGNAL 1USER SIGNAL 2UTF-8 charprops loadedUTF-8 charprops not loadedUndefined database error -- fix program.Undefined func: %sUndefined proc: %sUnknown signalUnlock database 'myfamily', after a power failure left the database lockedUnlock database 'myfamily', after a power failure left theUnsupported file encoding (no multibyte encodings except UTF-8).Unsupported file encoding: %s.Usage btedit [database] [rkey]Usage: %s [OPTIONS] [database]Use normal ASCII characters for drawing lines, instead of special VT100 terminal charactersUse original keys from GEDCOM file?Using original keys, %d deleted record will be in the database.Using original keys, %d deleted records will be in the database.WARNING: missing keysWINDOW CHANGEWarningWarningsWarning: database codeset unspecifiedWarning: not all conversions availableWednesdayWhat activity do you want to perform?What directory holds (or will hold) the LifeLines database? (? to list)What do you want to add?What do you want to remove?What is the name of the output file?What is the name of the program?What persons or list do you want to add to the current list?What record do you want to edit?What record do you want to remove from the database?What scan type?What should the name of this list be?What utility do you want to perform?Which character mapping do you want to edit?Which character mapping do you want to save?Which event record do you want to edit?Which source record do you want to edit?Who do you want to remove from the database?Whom do you want to edit?Whose families/spouses are to be swapped?Whose key value do you want?Written by Tom Wetmore. Maintained at lifelines.sourceforge.net.You are at the bottom of the list.You are at the top of the list.You cannot change the sex of a parent.You cannot edit the CHIL lines in a family record.You cannot edit the FAM line in a family record.You cannot edit the FAMC line in a person record.You cannot edit the FAMS lines in a person record.You cannot edit the HUSB line in a family record.You cannot edit the INDI line in a person record.You cannot edit the WIFE line in a family record.You must identify a database.[ Decrease tree depth\My Documents\LifeLines\Databases\MyFamily] Increase tree depth^b History/back^c Clear history^f History/fwd^l History list^xb ChngHist/back^xc Clear ChngHist^xf ChngHist/fwd^xl ChngHist lista Add child to familya Add familya Add information to the databasea Add to this lista Create new familya Scan by authoraavabout %1abt %1adaradar sheniadopadradsaft %1after %1always show keys (even if REFN available)and run the eol.ll reportapraprilaugaugustavb Browse new personsb Browse the persons in the databaseb Browse to bottomb Browse to personsb. bap. baptbapt: barmbasmbef %1before %1bet %1 and %2between %1 and %2blesbornborn: brumbrumairebtedit requires 2 arguments (btree and key).bur. buriburi: c Browse to childrenc Browse top childrenc Character set optionsc Child - add a child to an existing familyc Child - remove a child from his/her familyc Review change history (%d record)c Review change history (%d records)cal %1calculated %1cb. cheshvanchildcompcould not open, read or write a block file.could not open, read or write an index file.could not open, read or write the key file (to alter database).could not open, read or write the key file.creation of new database failed.cremcshd Copy top to bottomd Delete from listd Delete information from the databased Remove as childd Remove child fromd Show database statisticsd. data blockdatabase locked and run 'eol.ll' reportdb directory is file, not directory.debug mode (disable signal trapping)decdecemberdieddied: display this help and exitdiv. do not use traditional family rulese Browse event recordse Edit recorde Edit the familye Edit the persone Edit the place abbreviation filee Edit this persone Edit top familye Edit top persone edit individual tables (in db)edit raw btree block for person I34editor codeset: %seditor input codeset: %seditor output codeset: %seighteightheleveneleventhellelulenter file nameenter file name (*%s)enter integer:enter key or refn: enter key:enter name: enter path: enter string: enter y (yes) or n (no): errorerror accessing database directory.error evaluating arg to lockerror evaluating arg to unlockest %1estimated %1example: dbverify -ifsex "%s" execute a single lifelines report program directlyexport/import directory:f Browse to fatherf Browse to fathersf Browse top fatherf Family - create family record from one or two spousesf Family - remove a family completelyf Full database scanf Full name scanfailedfatherfebfebruaryfifthfirstfiveflags: florflorealforce open (for recovery from errors or power failure)fourfourthfr %1fr %1 to %2frimfrimairefrom %1from %1 to %2frucfructidorfullname: person does not have a nameg Browse to familygedcom input codeset: %sgedcom output codeset: %sgermgerminalgettext dll had no versiongettext dll version: %sgettext dll: %sh Add as spouseheherher_himhisi Add as childi Browse this personi Identify a person from key valuei Individual - remove a person completelyi import all tables (from files into db)iconv (codeset conversion) is compiled in.iconv (codeset conversion) is not compiled in.iconv dll had no versioniconv dll version: %siconv dll: %sidentifier: %s should be a string illegal call to pos.initscr failediyariyrj Merge bottom to topj Move down listjanjanuaryjour_complementairsjuljulyjunjunek Find a person's key valuek Move up listkeyfile is corrupt.keyfile is wrong alignment.keyfile is wrong version.kislevksll load a table from a file (into db)lifelines `btedit' edits raw binary btree blocks in lifelines database files. Do NOT use this unless you know what you are doing and you have backed up your database.lines [-adkrwiflntcuFxoCzI] [database] # Use -F for Finnish databaselines [-adkrwiflntcuxoCzI] [database]lines [-adkrwiflntcuxoCzI] [database] # Finnish databaselock a database (for use on read-only media)log dynamic memory operation (for debugging)m Browse to motherm Browse to mothersm Browse top motherm Mark this personm Show memory statisticsm. marmarchmarried: maymenu|trantable|dmenu|trantable|emenu|trantable|gmenu|trantable|imenu|trantable|mmenu|trantable|pmenu|trantable|rmenu|trantable|xmessmessidormissing or incorrect value for sortmothern Create new personn Name fragment (whitespace-delimited) scann Name this listname of database is too long.name: person does not have a namenineninthnisannivonivoseno gettext dll foundno iconv dll foundno keyfile (directory does not appear to be a database).node passed to lock must be inside a recordnode passed to unlock must be inside a recordnovnovembernsnnull arg in locknull arg in unlocko Browse to older sibo Edit the user options fileo Other - remove other record completelyoctoctoberoneopen database with immutable access (for use on read-only media)open database with read-only access (prohibiting other write access)open database with writeable access (this is the default)output version information and exitp Pedigree modep Person - add new person to the databasep Pick a report from list and runpattern: personpluvpluviosepraiprairialq Quit programq Return to main menuq Return to previous menur Generate report by entering report namer Read in data from a GEDCOM filer Refn scanr Remove as spouser Remove from listr Remove spouse fromreport codeset: %sreport input codeset: %sreport output codeset: %srequested database does not exist.resis Add spouse to familys Browse source recordss Browse to spouse/ss Browse top spouse/ss Save the database in a GEDCOM files Search databases Source scans Spouse - add a spouse to an existing familys Spouse - remove a spouse from a familys save a table to a file (from db)secondsepseptemberset(%s, ) is invalidsevenseventhsheshevatshvsignal %1: %2sivansixsixthsoundex: person does not have a namespecify window size (eg, -u120,34 specifies 120 columns by 34 rows)spousesucceededsupply cache values (eg, -ci400,4000f400,4000 sets direct indi & fam caches to 400, and indirect indi & fam caches to 4000)surname: person does not have a namesvnt Browse to topt Enter tandem modet Modify character translation tablest Scan by titletamuztc Tandem to childrentententhtevettf Tandem to father/stg Tandem to family/sthe arg to empty is not a list, table or setthe arg to length is not a list, table or setthe arg to lock must be a record or nodethe arg to unlock must be a record or nodetherthermidorthirdthreetishritm Tandem to mother/stmzto %1trace function calls in report programs (for debugging)ts Tandem to spouse/stshtt Enter family tandemtt Enter tandem modettpath checking dir <%s>ttpath file <%s> typed as %dttpath get_conversion_dyntt:from <%s> to <%s>: %sttpath get_subcoding_dyntt from <%s> to subcode <%s>: %stu Tandem to parentstvttwelfthtwelvetwou Browse to parentsu Miscellaneous utilitiesunlock a database (for correct access on read-write media)usage: dbverify -(flags) v Review visit history (%d record)v Review visit history (%d records)vendvendemiaireventventosewarningx Browse other recordsx Handle source, event and other recordsx Swap mark/currentx Swap two childrenx Swap two familiesx Switch top/bottomx export all tables (from db to files)y Browse to younger siby Turn on syncyYyYnNzerozi Browse to indizz Browse to anyProject-Id-Version: Lifelines 3.0.61 Report-Msgid-Bugs-To: POT-Creation-Date: 2007-08-08 15:56-0400 PO-Revision-Date: 2007-08-07 09:50+0200 Last-Translator: Patrick Texier Language-Team: Not a language team MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n>1; --help affiche cette aide et sort --version affiche les informations de version et sort -D = Correction des enregistrements supprimés erronés -F = Modification de tous les liens familliaux erronés (en _badptr) -G = Contrôle & correction des orphelines (noms/refns) -M = Correction des enregistrements sans données -a = Exécute tous les contrôles (sans effectuer de corrections) -e = Contrôle des événements -f = Contrôle des familles -g = Contrôle des orphelins (noms/refns) -h = Affiche le texte d'aide (ce texte) -i = Contrôle des individus -l = Contrôle de la structure de la base -m = Contrôle des enregistrements sans données -n = Verbeux (affiche chaque enregistrement traité) -s = Contrôle des sources -x = Contrôle des enregistrements divers btedit %s I34 Interruption de programme. Affichage dump ? [y/n] Durée du rapport %s (durée ui %s) dans le fichier <%s> à la ligne %d dans le fichier <%s> à la ligne %d (dbint tt: %s) (multi-utilisateurs) (pas de fichier trace) (lecture seule) (voir le fichier trace <%s>) Descendre d'un niveau Monter d'un niveau!! Autre mode!a Mode ascendants!d Mode descendants!g Mode GEDCOM!n Mode normal!t Mode GEDCOMT!x Mode GEDCOMX"\My Documents\LifeLines\Databases\MyFamily"# N° enfants (o/n)$$ Liste références$n Liste notes$s Liste sources%02ds%1 AUC%1%1 HEB%1 J%6d erreur%6d erreurs%6d avertissement%6d avertissements%c Ordre des enfants%d enfant%d enfants%d élément%d éléments%d entrée%d entrée%d erreur%d erreurs%d corrigé%d corrigés%d élément%d éléments%d objet perdu%d objets perdus%d enregistrenent%d enregistrements%d conjoint%d conjoints%d passage%d passages%d avertissement pendant l'importation%d avertissements pendant l'importation%dI, %dF, %dS, %dE, %dX%dj%02dh%dh%02dm%dm%02ds%da%03dj%e Ajouter événement%ldème%o Ajouter divers%s Ajouter source%s -f mafamille%s -f mafamille -x eol%s cle=%d, fichier=%s%s appelle l'interface utilisateur Lifelines%s lance le programme d'exécution de rapports Lifelines sans IU.%s mafamille%s mafamille -e eol%s a été ajouté comme enfant.%s a été ajouté comme conjoint et/ou parent.%s a été ajouté dans la base%s a été modifié dans la base.%s : mauvais paramètres%s : types incomparables : %s et %s%s: ligne %d (entrée %d) : %s%s : types numériques incompatibles : %s et %s%s : l'arg. null est interdit.%s : l'arg #%s a une erreur majeure.%s : l'arg. #%s doit être un booléen.%s : l'arg. #%s doit être une famille.%s : l'arg. #%s doit être un décimal.%s : l'arg. #%s doit être une liste.%s : l'arg. #%s doit être un noeud.%s : l'arg. #%s doit être une personne.%s : l'arg. #%s doit être un enregistrement.%s : l'arg. #%s doit être une liste.%s : l'arg. #%s doit être une chaîne.%s : l'arg. #%s doit être une table.%s : l'arg. #%s doit être une variable.%s : l'arg. #%s doit être un entier.%s : l'arg. #%s a causé une exception arithmétique.%s : l'arg a une erreur majeure.%s : l'arg. doit être une famille.%s : l'arg. doit être un nom de fichier.%s : l'arg. doit être une liste.%s : l'arg. doit être un noeud ou une chaîne.%s : l'arg. doit être un noeud.%s : l'arg. doit être une personne%s : l'arg. doit être une liste.%s : l'arg. doit être une chaîne.%s : l'arg. doit être une variable.%s : l'arg. doit être un entier.( Déplac. haut(( Déplac. 2f haut(1-9) Atteindre enfant(Famille %s (%s, %s)(Le séparateur est %s)(b Déplac. fb haut(l'historique des modifications est vide)(givens) personne sans nom(pas de conversion)(pg %d/%d)(t Déplac. fh haut(trimname) la personne n'a pas de nom(l'historique des visites est vide)) Déplac. bas)) Déplac. 2f bas)b Déplac. fb bas)t Déplac. fh basmai+ Suivant base, de - Précédent base-- SÉLECTION EN COURS ----- SÉLECTION EN COURS ------ LISTE ----C[FICHIER}-I[CLÉ=VALEUR]-c[TYPE][DIRECT,INDIRECT]-u[LARGEUR,HAUTEUR]/home/users/myname/lifelines/databases/myfamily0 EVEN 1 REFN 1 DATE 1 PLAC 1 INDI 2 NAME 2 ROLE 1 SOUR0 SOUR 1 REFN 1 TITL Titre 1 AUTH Auteur0 XXXX 1 REFN1 Ajouter un enregistrement source dans la base2 Modifier un enregistrement source dans la base3 Ajouter un enregistrement événement dans la base4 Modifier un enregistrement événement dans la base5 Ajouter un enregistrement divers dans la base6 Modifier un enregistrement divers dans la base< Agrandir zone menu> Réduire zone menu? Autres choixA Vue détailléeUne famille ne peut être fusionnée avec elle même.Une personne ne peut être fusionnée avec elle même.après JCABORTap JCALARM CLOCKASSERT échecInterruption :Ajout des clés inutilisées comme des clés supprimées...Appel ambigu à la fonction : %s Appel ambigu à la proc. : %s Êtes-vous sur de vouloir les fusionner ?Voulez-vous supprimer cette personne de la base ?Voulez-vous supprimer cet enregistrement de la base ?Lock (-l) attend y ou n comme paramètre.Les paramètres de (r)sort doivent être de même tailleB Atteindre familleavant JCB.C.E.av JCBCEBUS ERRORMauvaise référence CHILMauvaise référence HUSBMauvaise référence mari (%s) dans la famille %sTag HUSB (mari) incorrect : %sMauvaise référence WIFEMauvais compteur de sauvegarde d'historiqueEntrée de cache invalide (%s) != (%s)Mauvaise référence enfant (%s) dans la famille %sTag d'enfant incorrect : %sMauvais format numérique décimal.Séquence d'échappement invalide en position %d dans la chaîne <%s>Mauvais format d'échappement.Référence de famille invalideMauvais référence familiale (%s) individu %sMauvais format numérique hexadécimal.Mauvais compteur d'historiqueMauvaise longueur d'historiqueNiveau incorrect à la ligne %dMauvais nomMauvais nom pour l'individu %s : %sMauvais pointeurMauvais pointeur (dans %s) : %sTag de couple incorrect : %sMauvaise référence femme (%s) dans la famille %sDes erreurs empêchent le chargement du fichier GEDCOM. Les deux familles doivent avoir des maris/pères.Les deux familles doivent avoir des femmes/mères.Atteindre un nouvel enregistrement (sans ajouter de xref).Btree lookup looped back to master (%ld)!C.E.CECOPYRIGHTLe cache [%s] a dépassé sa taille limite (%d)En cache : I:%s; F:%sLa pile des appels a %d niveau supérieurLa pile des appels a %d niveaux supérieursLa pile des appels a %d niveau inférieurLa pile des appels a %d niveaux inférieursLes options ouverture forcée (-f) et blocage (-l) sont incompatibles.Les options multi-utilisateurs (i) ou lecture-seule (r) sont incompatibles avec l'accès en lecture-écriture (-w).Impossible de convertir le jeu de caractères (de <%s> à <%s>)Impossible de supprimer la dernière personne d'une famille.Vérification %sVérification du fichier GEDCOM. Choisissez une famille par un conjoint/parent.Choisissez une opération :Choisissez la data à ouvrir.Sélectionnez depuis l'historiqueCollision avec raccourci plus long dans : %sClash avec raccourci plus court pour entrée : %sInformation de code de page :Routine de conversion : %sCommandes : Sélect. par nombre, u Page préc., d Page suiv., i Sélect., q QuitterCommandes : j Dépl. bas k Dépl. haut i Sélect. q QuitterCommandes : j Dépl. bas k Dépl. haut q QuitterCommandes : u Page préc., d Page suiv., q QuitterCommandes : j Dépl. bas k Dépl. haut d Suppr. i Sélect. q QuitterCopyright © 1991-2007 Thomas T. Wetmore IV et al.Copyright © de 1991 à 1996, par T. T. Wetmore IVDELETESET %c corrompuImpossible d'ouvrir le fichier %sImpossible d'ouvrir le fichier %s.Créer une famille avec cette personne comme enfant.Créer une famille avec cette personne comme conjoint.Base ouverte - %sCollate locale courant : %sBase ouverteMessages locale courant : %sBoucle dans les index, fichier %s déjà trouvé ! DEATH OF CHILDLa base '%s' a été enregistrée dans '%s'.'Erreur de base : référence à une clé inexistante (%s).Erreur base : -- Enregistrements de la baseLa base est corrompue.La base n'a pas été modifiée.Chemin par défaut :Supprimer l'historique (%d entrées) ?L'ensemble détruit contient des enregistrements valides %sEnregistrements supprimésAfficher variables globales (%d var)Afficher variables globales (%d vars)Afficher variables locales (%d var)Afficher variables locales (%d vars)Affichage vers InterneVoulez-vous ajouter cet enfant à la famille ?Voulez-vous ajouter cet événement dans la base ?Voulez-vous ajouter cette famille dans la base ?Voulez-vous ajouter cette personne dans la base ?Voulez-vous ajouter cet enregistrement dans la base ?Voulez-vous ajouter cette source dans la base ?Voulez-vous ajouter ce conjoint/parent à la famille ?Voulez-vous fusionner ces deux familles ?Voulez-vous fusionner ces deux personnes ?Voulez-vous supprimer cet enfant de sa famille ?Voulez-vous supprimer ce conjoint de sa famille ?Voulez-vous réordonner les enfants ?Voulez-vous inverser l'ordre des conjoints ?Voulez-vous mettre à jour cet événement ?Voulez-vous mettre à jour cette famille ?Voulez-vous mettre à jour cette personne ?Voulez-vous mettre à jour cet enregistrement ?Voulez-vous mettre à jour cette source ?Voulez-vous créer une base ici ?Voulez-vous remodifier cet événement ?Voulez-vous remodifier cet événement ? (Sinon les changements seront perdus.)Voulez-vous remodifier cette famille ?Voulez-vous remodifier cette famille ? (Sinon les changements seront perdus).Voulez-vous remodifier cette personne ?Voulez-vous remodifier cette personne ? (Sinon les changements seront perdus.)Voulez-vous remodifier cet enregistrement ?Voulez-vous remodifier cet enregistrement ? (Sinon les changements seront perdus.)Voulez-vous remodifier cette source ?Voulez-vous remodifier cette source ? (Sinon les changement seront perdus.)Voulez-vous entrer un autre nom ?Voulez-vous le remodifier ?Ligne HEAD en double à la ligne %dÉvénement en double pour %sÉvénements dupliquésFamilles dupliquéesFamille en double pour %sFonct. en double %s (lignes %d et %d) dans le rapport : %sRaccourci en double pour entrée : %sIndividu en double pour %sIndividus dupliquésNom en double pour %s (%s)Noms dupliquésEnregistrements divers dupliquésProc. %s en double (lignes %d et %d) dans le rapport : %sEnregistrement en double pour %sRefn en double pour %s (%s)Source en double pour %sSources dupliquéesREFN en double - choisissez svp.EMT INSTModifier l'enregistrement en cours pour ajouter manuellement un xref.L'éditeur ou un appel-système ont échoué.Éditeur vers InterneFamille videFamille vide (%s)Fin de fichier à la ligne %dEntrez le numéro de famille à atteindreEntrez un enfant de la famille.Entrez le conjoint de la familleEntrez le jeu de caractères à utiliser (* aucun)Entrez d pour déboguer, q pour quitterEntrez un entier pour le programmeEntrez le nom du fichier archive en sortie.Entrez le nom du fichier table de conversion à lireEntrez le nom du fichier table de conversion à écrireEntrez un motif de recherche pour un auteur.Entrez un motif de recherche pour un nom complet.Entrez un motif de recherche pour un refn.Entrez un motif de recherche pour un seul nom ou surnom.Entrez une chaîne pour le programmeerreurerreursErreur d'accès aux donnéesErreur d'accès à l'enregistrement : %sErreur à la ligne %d : %sErreur dans le fichier d'abréviationsErreur dans le fichier de conversion de caractères.Erreur dans le fichier d'options utilisateur.Erreur de lecture de l'index à la cléErreur d'écriture du fichier 'btedit.tmp'.Erreur : fichier "%s" : line %d :Erreur : fichier <%s> non trouvéErreur : fichier <%s> non trouvé : %s Erreur : il y a 999 999 blocages à effectuerévénementévénementsL'événement %s est référencé mais non défini.Exemples :Base existante trouvée.ERREUR FATALEERREUR FATALE :FLOATING POINT EXCEPTIONÉchec (errnp=%d) en ouverture du bloc de fichier (rkey=%s) : %sÉchec pour corriger un enregistrement non effacé manquant %c%dÉchec de la correction d'un enregistrement non effacé manquant %sImpossible d'ouvrir le fichier de clés : %s.Les familles ne peuvent pas encore être supprimées ainsi.famillefamillesLa famille %s est référencée mais non définie.Erreur fataleChemin d'accès trop long.Option finlandais (si c'est compilé avec l'option)Le premier paramètre de (r)sort doit être une liste ou une table.1ère clé du bloc avant la limite parent Correction référence mari (%s) dans la famille %sCorrection référence femme (%s) dans la famille %sCorrection référence enfant (%s) dans la famille %sCorrection d'un ensemble détruit contient des enregistrements valides %sCorrection enfant manquant (%s) dans la famille (%s)Correction enregistrements manquants (%s)Correction conjoint manquant (%s) dans la famille (%s)Correction enregistrement non effacé manquant %c%dvendrediDe quelle famille doit être supprimé l'enfant ?De quelle famille doit être supprimé le conjoint/parent ?Jeu de caractères GEDCOM : %sGEDCOM vers InterneJeu de caractère GUI : %sJeu de caractères GUI en entrée : %sJeu de caractères GUI en sortie : %sNom fantôme : %s -> %sNoms fantômesVariables globalesHANGUPIlSonSonComment voulez-vous retrouver un enregistrement ?INSTRUCTION ILLÉGALEINDI, FAM, SOUR, EVEN ne peuvent être des enregistrements divers.INTERRUPTIdentifiez un enfant de la famille, si connu.Identifiez un parent dans la famille où des enfants doivent être permutés.Identifiez un conjoint de la famille, si connu.Identifiez un conjoint pour la nouvelle famille.Identifiez l'enfant présent dans la famille.Identifiez l'enfant dans la seconde famille.Identifiez une famille (rien pour l'identifier par individus).Identifiez une liste de personnes pour le programme :Identifiez un des parents de l'enfant, si connu.Sélectionnez une personne pour le programme :Identifiez la seconde personne à atteindre.Identifiez le conjoint présent dans la famille, s'il est connu.Identifiez le conjoint dans la seconde famille, s'il est connu.Identifiez le conjoint à ajouter à une famille existante.Identifiez l'enfant à réordonner.Identifiez le premier enfant à permuter.Identifiez le premier conjoint à permuter.Identifiez le second enfant à permuter.Identifiez le second conjoint à permuter.Identifiez le second conjoint, s'il est connu.Type invalide trouvé dans la liste de choix de menuValeur invalide pour l'opération %s : %sImpossible de modifier le jeu de caractères d'une base non-videDurée de l'importation %s (durée iu %s) HUSB incorrectImpropre HUSB (%s) dans la famille (%s)WIFE incorrectEnfant incorrectEnfant (%s) sans référence FAMC dans la famille (%s)Impropre WIFE (%s) dans la famille (%s)Dans le fichier <%s> à la ligne %dDans le menu : %sInsérer automatiquement un xref à la fin de chaque enregistrement.UTF-8 en interne : nonUTF-8 en interne : ouiPage de codes interneInterne vers AffichageInterne vers ÉditeurInterne vers GEDCOMInterne vers RapportTableau [%d] d'erreurs invalide dans dbverify - programme à corriger Les propriétés d'une nouvelle base sont incorrectes.Est-ce le nouvel enfant ?Est-ce le nouveau conjoint ?Est-ce cette personne ? Sélectionnez la.Est-ce cet enregistrement ? Sélectionnez le.Il doit être possible de résoudre ceci avec btedit.KILLLa clé n'est pas avant la clé suivanteDernière clé du bloc après la limité parent LifeLines %s - SGBD généalogique et système de programmationLifeLines -- Écran auxiliaire (* cacher/montrer menu)LifeLines -- Écran famille (* cacher/montrer menu)LifeLines -- Écran sélection par liste (* cacher/montrer menu)LifeLines -- Menu principalLifeLines -- Écran individu (* cacher/montrer menu)LifeLines -- Écran deux familles (* cacher/montrer menu)Lifelines -- Écran deux individus (* cacher/montrer menu)Lifelines est un programme de manipulation d'informations généalogiques dans le format GEDCOM 'lineage-linked'. Il possède une interface curses et un interpréteur intégré pour son langage d'éditions généalogiques. Il a ses propres bases, et ses enregistrements sont modifiés directement au format GEDCOM (avec un éditeur au chois de l'utilisateur). Les enregistrements contiennent les données concernant les personnes, familles familles, sources, événements et autres (comme les notes). Lifelines inclut un langage spéfique d'éditions et est fourni avec un ensemble de rapports.Ligne %d: mauvaise syntaxe de NAME (%s %s).Ligne %d : l'événement %s a une clé incorrecte.Ligne %d : la famille %s a une clé incorrecte.Ligne %d : la famille %s a plusieurs liens mari.Ligne %d : la famille %s a plusieurs liens femme.Ligne %d : la famille n'a pas de membres (%s %s).Ligne %d : la personne %s a une clé incorrecte : ignorée.Ligne %d : la personne %s a plusieurs liens père.Ligne %d : la personne %s a plusieurs liens mère.Ligne %d : la personne %s est à la fois homme et femme.Ligne %d : la personne %s est femme mais devrait être homme.Ligne %d : la personne %s devrait être à la fois homme et femme.Ligne %d : la personne %s est homme mais devrait est femme.Ligne %d : la personne définie n'a pas de nom.Ligne %d : l'enregistrement %s a une clé incorrecte.Ligne %d : référence à un enregistrement non défini %s.Ligne %d : la source %s a une clé incorrecte.Ligne %d : tag %s non autorisé dans un enregistrement : %s %s. Ligne %d : l'événement défini ici n'a pas de clé.Ligne %d : la famille définie ici n'a pas de clé.Ligne %d : la personne définie ici n'a pas de clé : ignorée.Ligne %d : l'enregistrement défini ici n'a pas de cléLigne %d : la source définie ici n'a pas de cléLigne %d : cette %s ligne n'a pas de valeur de champ (%s %s).Ligne %d : cette ligne a un lien invalide.Ligne %d : cette ligne a un numéro de niveau trop important.Ligne %d : cette ligne a un lien illégal.Ligne %d : cette ligne n'a pas de numéro de niveau.Ligne %d: cette ligne est vide ; fin de fichier ?Ligne %d : cette ligne est incomplète.Ligne %d : cette ligne est trop longue.Ligne %d : il faut une espace avant le tag.Lignes %d et %d : l'événement %s est défini plusieurs fois.Lignes %d et %d : la famille %s est définie plusieurs fois.Lignes %d et %d : la personne %s définie plusieurs fois : ignorée.Lignes %d et %d : enregistrement %s défini plusieurs fois.Lignes %d et %d : la source %s est définie plusieurs fois.Variables localesLocales non disponibles.Locales disponibles.Il semble qu'un programme s'exécute. Vérifiez le fichier %1 vers la ligne %2 M< Suppr. cols menuM> Ajouter cols menuFichier de configuration incorrect : ligne trop longue.Fclé principale mal alignéeSéquence de choix de menu (%s) trop longue : %sEntrée de menu (%s) invalide avec choix : %sMessages :Liens de parenté incorrects entre %s et %s : %ld et %ldLiens de couple incorrects entre %s et %s : %ld et %ldLigne HEAD manquante à la ligne %d :Ligne NAME manquante dans enr. INDI ; enr. ignoré. Enfant manquantEnfant manquant (%s) dans la famille (%s)Enregistrements manquants (%s)Enregistrements manquantsEnregistrements manquants (avec deleteset)Conjoint manquantConjoint manquant (%s) dans la famille (%s)Titre manquantEnregistrement non effacé manquant %c%dlundiNLS (Support de Langage National) inclus.NLS (Support de Langage National) non-inclus.NON DÉNOMMÉNULL N'ESY PAS UNE PVALUE !PVALUE INCORRECTE : type invalide=%d)!Nom, clé, refn, liste ou @ :Les clés voisines incluent :Des personnes ont été ajoutées dans la liste courante.Le Nouvel enregistrement est %sLe nouveau conjoint n'a pas de sexe défini ; impossible de l'ajouter à une famillePas de variable de configuration TTPATHPas de conversionPas de jeu de car. interne, aucune conversion ne peut être effectuéeAucune base trouvée dans le chamin d'accèsPas d'erreurs trouvéesAucune erreur ; ajout des enregistrements avec de nouvelles clés...Aucune erreur ; ajout des enregistrements avec les clés d'origine...Pas d'événements.Pas d'autre historiquePas de notes.Personne n'a la valeur de clé %s dans la base.Pas de chaîne d'origine sur la ligne.Pas d'enregistrement divers.Personne n'a été ajouté à la liste courante.Pas d'enregistrement trouvé dans la recherchePas de références.Pas de chaîne de substitution sur la ligne.Pas de sources.Enfant non trouvé.Famille non trouvée.Personne non trouvée.Enregistrement non trouvé.Pas de table de conversion dans cette baseNoeuds-mémoire perdus :Nom non-indiv, clé=%s, nom=%sNoms non-individusType non-numérique pour l'opération %s : %sPas encore implémentéCommande invalideOuvre la base 'mafamille' avec LifelinesOuvre la base 'mafamille' avec LifelinesOptions :Noms orphelinsNom orphelin : %sRefn orpheline : %sdiversdiversPIPE WRITEPOWER-FAIL RESTARTÉchec mémoire PVALUE :Erreur d'interprétation en ligne %d :En cours : recherche nom completEn cours : recherche sur une partie du nomEn cours : recherche refnEn cours : recherche sourcepersonnepersonnesLa personne %s est référencée mais non définie.Placez le dernier enfant de la famille.Choisissez une opération :Choisissez l'opération de création de famille, svp.Choisissez parmi ces personnes.Choisissez parmi ces enregistrements.Choisissez dans la liste suivante.Choisir une des options suivantes :Choisissez l'enfant à atteindre, svp.Sélectionnez l'enfant à supprimer de cette famille.Choisissez l'événement à visualiser.Choisissez la famille à atteindre, svp.Choisissez le père/mari à atteindre, svp.Choisissez le premier enfant à atteindre, svp.Choisissez la première famille à atteindre, svp.Choisissez le premier père/mari à atteindre, svp.Choisissez la première mère/femme à atteindre, svp.Choisissez le premier conjoint à atteindre, svp.Choisissez la mère/femme à atteindre, svp.Choisissez la note à visualiser.Choisissez l'enr. divers à visualiser.Choisissez la référence à visualiser.Choisissez le second enfant à atteindre, svp.Choisissez la seconde famille à atteindre, svp.Choisissez le second père/mari à atteindre, svp.Choisissez la seconde mère/femme à atteindre, svp.Choisissez le second conjoint à atteindre, svp.Choisissez la source à visualiser.Choisissez le conjoint à atteindre, svp.Sélectionnez le conjoint/parent à supprimer de cette famille.Entrez la valeur de clé interne d'une personne.Entrez le nom du fichier GEDCOM.Identifiez la personne suivante à atteindre, svp.Identifiez l'un des frêres ou soeurs de l'enfant svp.Identifiez l'un des conjoints, svp.Identifiez la ou les personne(s) à atteindre, svp.Identifiez l'enregistrement à atteindre, svp.Identifiez l'enfant svp.Marquez un enregistrement en premier.La proc. %s doit être appelée avec %d paramètres et non %d.Poursuivre quand même ?Traiter sans conversion de jeu de caractères ?Poursuivre ?%d lignes lues sans trouver la fin de HEADLe programme contient des erreurs. Le programme n'a pas pu débloquer %d enregistrementLe programme n'a pas pu débloquer %d enregistrementsLe programme s'exécute...Le programme a besoin d'une procédure de démarrage. Le programme a été interrompu. Le programme a été interrompu par des erreurs. Le programme s'est correctement exécuté. Q Changer de baseQUITQuitter le débogueurR Choisir un fichier GEDCOM et le lireClé REFN déjà utilisée.RECENSEMENT DES BOGUESUne base en lecture seule ne peut être modifiée.L'enregistrement %s est référencé mais non défini.L'enregistrement %s a été modifié.Enregistrements en mémoire perdus :Supprimer cet enregistrement familial ?Envoyez les bogues à lifefelines.sourceforge.net.Rapport interrompuDébogueur de rapportsFichier rapport : Rapport non trouvé : %sRapport arrêté à cause d'une erreur d'ouverture du fichier de sortieRapport arrêté à cause de l'absence de fichier de sortieRapport vers InterneRetour à l'enregistrement courant (sans ajouter de xref).Erreur d'exécution à la ligne %d : VOIR AUSSISEGMENTATION ERRORSIGNAL 0SYSTEM CALL ERRORsamediRech sur quel champ source ?Résultats de la rechercheLe second paramètre de (r)sort doit être une liste ou une table.Voir `btedit --help' for plus d'informations.Sélectionnez l'enfant que le nouveau précède ou le dernier.ElleFamille à personne uniqueFamille avec personne unique (%s)Quelque chose d'impossible est survenu. Contactez le support technique.sourcesourcesLa source %s est référencée mais non définie.Indiquez une propriété utilisateur (ex -ILLEDITOR=gvim)Indiquez l'emplacement du fichier de configurationIndique le fichier de sortie pu programme (ex : -o/tmp/mestests)Conjoint inconnuCollate locale au démarrage : %sMessage locale au démarrage : %sAppuyez sur une touche pour continuer.String constant overflowing internal buffer tokbuf len=%d, file: %s, start line: %lddimancheErreur système : code 'map' illégalTERMINATE FROM KILLTRACE TRAPTag trop long pour connection automatique.Le mode tandem n'est disponible qu'avec des personnes ou familles.L'enfant a été supprimé de sa famille.La liste courante n'est pas nommée.La liste courante est nommée %s.La base est déjà ouverte en écriture.La base est déja ouverte en lecture par %d utilisateur.La base est déja ouverte en lecture par %d utilisateurs.La base est en lecture seule.La base est en lecture seule.La base est en lecture seule; vous ne pouvez effectuer des ajouts.La base est en lecture seule ; vous ne pouvez pas effectuer des modifications.La base est en lecture seule; vous ne pouvez pas effectuer des fusions.La base est en lecture seule; vous ne pouvez pas effectuer des suppressions.La base est en lecture seule ; chargement annulé.La base n'est pas bloquée.La base n'a pas été enregistrée.L'événement a été modifié dans la base.Les familles ont des pères/maris différents ; fusion impossible.Les familles ont des mères/femmes différentes ; fusion impossible.La famille a été modifiée dans la base.La fin de fichier est atteinteLa famille a été ajoutée dans la base.Les personnes sont de même sexe ; impossible de créer une famille.L'enregistrement commence à un mauvais niveau.L'enregistrement contient plusieurs lignes de niveau 0.L'enregistrement ne commence pas par une ligne FAM.L'enregistrement ne commence pas par une ligne SOUR.L'enregistrement ne commence pas par une ligne EVEN.L'enregistrement ne commence pas par une ligne INDI.L'enregistrement est vide.L'enregistrement a été modifié dans la base.La taille de fenêtre utilisée (%ld,%ld) est trop grande pour votre terminal (%d,%d). La taille de fenêtre utilisée (%ld,%ld) est trop petite pour LifeLines (%d, %d). La source a été modifiée dans la base.Le conjoint a été supprimé de sa famille.Les deux enfants ont été inversés.Les deux familles ont été inversées.Il n'y a pas d'enfants dans la base pour cette famille.Il n'y a pas de base LifeLines dans ce répertoire.Il n'y a personne dans la base avec ce nom ou cette clé.Il n'y a pas d'enregistrement avec la clé : %sIl n'y a pas d'enregistrement avec cette clé ou référenceIl y a une erreur dans les données.Il y a %d référence non résolue.Il y a %d références non résolues.Ces personnes sont enfants dans différentes familles.Cela ne pointe pas vers un enregistrement divers de la base !Cette famille a déjà un mari.Cette famille a déjà une femme.Cette famille a ses deux conjoints/parents ; ajout impossible.Cette famille n'a pas au moins deux enfants ; inversion impossible.Cette famille n'a pas de conjoint/parent ; suppression impossible.Cette famille n'a pas d'épouse dans la base.Cette famille n'a pas d'époux dans la base.Cette famille a encore des liens ; suppression impossible.Ceci est un logiciel libre ; consultez les sources pour plus d'informations légales. Il n'y a AUCUNE garantie ; même pas pour la COMMERCIALISATION ou l'ADÉQUATION À UN BUT PARTICULIER.Ce n'est pas un fichier GEDCOM 'lineage linked'.Cette personne n'a pas d'enfants dans la base.Cette personne n'a pas de frère/soeur plus âgé dans la base.Cette personne n'a pas de conjoint dans la base.Cette personne n'a pas de frère/soeur plus jeune dans la base.Cette personne est conjoint dans moins de deux familles.Cette personne est déjà l'enfant d'une famille.Cette personne n'est enfant dans aucune famille.Cette personne n'est un enfant ; impossible de la supprimerCette personne n'est pas conjoint ; impossible de la supprimer.Cette personne n'est conjoint ou parent dans aucune famille.Cet enregistrement individuel ne possède pas de ligne nom.Cet enregistrent individuel a une syntaxe nom GEDCOM incorrecte.Le père de cette personne n'est pas dans la base.La mère de cette personne n'est pas dans la base.Les parents de cette personne ne sont pas dans la base.Cette personne n'a pas de sexe ; elle ne peut créer une famille.Ce rapport nécessite un programme plus récent pour fonctionner jeudiTrop de conjoints pour afficher la liste complète.Table de correspondanceTentative d'ajouter l'enreg. supprimé (%ld) au xref (%c) !mardiDeux parents de sexes différents ne peuvent être fusionnés.Deux personnes de parents différents ne peuvent être fusionnées.USER SIGNAL 1USER SIGNAL 2Propriétés UTF-8 chargéesPropriétés UTF-8 non chargéesErreur de base inconnue -- le programme est à corriger.Fonction non définie : %sProc. non définie : %sSignal inconnuDébloque la base 'mafamille', après une coupure laissant la base bloquéeDébloque la base 'mafamille' après une coupure laissant laEncodage de fichier non géré (pas d'encodage multi-octets sauf UTF-8).Encodage de fichier non géré : %s.Utulisation btedit [base] [clé]Utilisation : %s [OPTIONS] [base]Utilise les caratères ASCII normaux pour tracer les lignes, au lieu des caractères spéciaux de terminal VT100Utiliser les clés d'origine du fichier GEDCOM ?Avec les clés d'origine, il y aura %d enreg. supprimé dans la base.Avec les clés d'origine, il y aura %d enreg. supprimés dans la base.ATTENTION : clés manquantesWINDOW CHANGEavertissementavertissementsAvertissement : base sans jeu de caractères spécifiéAvertissement : toutes les conversions ne sont pas disponiblesmercrediQuelle opération voulez-vous effectuer ?Quel répertoire contient la base LifeLines ? (? = liste)Que voulez-vous ajouter ?Que voulez-vous supprimer ?Quel est le nom du fichier de sortie ?Quel est le nom du programme ?Quelles personnes ou liste voulez-vous ajouter à la liste courante ?Quel enregistrement voulez-vous modifier ?Quel enregistrement voulez-vous supprimer de la base ?Quel type de recherche ?Quel nom voulez vous donner à la liste ?Quel utilitaire voulez-vous utiliser ?Quelle table de caractères voulez-vous modifier ?Quelle table de caractères voulez-vous enregistrer ?Quel enregistrement événement voulez-vous modifier ?Quel enregistrement source voulez-vous modifier ?Que voulez-vous supprimer de la base ?Que voulez-vous modifier ?Quelles familles/conjoints doivent être permutées ?Quelle valeur de clé désirez-vous ?Écrit par Tom Wetmore. Maintenu à lifelines.sourceforge.net.Vous êtes à la fin de la liste.Vous êtes au début de la liste.Vous ne pouvez pas modifier le sexe d'un parent.Vous ne pouvez pas modifier les lignes CHIL d'un enregistrement familial.Vous ne pouvez pas modiifier la ligne FAM d'un enregistrement familial.Vous ne pouvez pas modifier la ligne FAMC d'un enregistrement individuel.Vous ne pouvez pas modifier la ligne FAMS d'un enregistrement individuel.Vous ne pouvez pas modifier la ligne HUSB d'un enregistrement familial.Vous ne pouvez pas modifier la ligne INDI d'un enregistrement individuel.Vous ne pouvez pas modifier la ligne WIFE d'un enregistrement familial.Vous devez sélectionner une base.[ Dim. profond. arbre\My Documents\LifeLines\Databases\MyFamily] Aug. profond. arbre&b Préc. historique&c Effacer histor.&f Suiv. historique&l Liste historique&xb ChngHist préc.&xc Eff. ChngHist&xf ChngHist suiv.&xl ChngHist listea Ajouter enfanta Ajouter famillea Ajouter une information dans la basea Ajouter à la listea Ajouter famillea Rech. par auteuraavcirca %1ca %1adaradar sheniadopadradsap. %1après %1montre toujours les clés (même si un REFN est disponible)et exécute le rapport eol.llavriavrilaoûtaoûtavb Atteindre autresb Parcourir les personnes dans la baseb Atteindre fen. basb Atteindre personne° b. b. b. : b. b. av. %1avant %1 %1 / %2entre %1 et %2bles ° ° : brumbrumairebtedit demande 2 paramètres (arbre et clé).(+) (+) (+) : c Atteindre enfantsc Att. enfants hautc Options de jeu de caractèresc Enfant - ajouter un enfant à une famille existantec Enfant - Supprimer un enfant de sa famillec Parcourir l'historique des modifications (%d entrée)c Parcourir l'historique des modifications (%d entrées)cal %1calculé %1ne. chesvanenfantcompImpossible d'accéder à un bloc de fichier.Impossible d'accéder à un fichier de clés.Impossible d'accéder au fichier de clés (pour modifier la base).Impossible d'accéder au fichier de clés.La création de la base a échoué.crémcshd Copier haut vers basd Supprimer de la listed Supprimer une information dans la based Suppr. enfantd Suppr. lien enfantd Voir les statistiques de la base+ bloc de donnéesbase bloquée et lance le rapport 'eol.ll'Le répertoire de la base est un fichier, non un répertoire.mode de déboggage (désactive les 'trappes' de signal)décedécembre + + : affiche cette aide et sortdiv. ne pas utiliser les règles de famille traditionellee Parcourir les enregistrements événemente Modif. enrge Modifier famille e Modifier personnee Modifier le fichier des abréviations des lieuxe Modif. cette personnee Modif. famille haute Modif. pers. haute modifier une table individuelle (dans la base)Modifie l'arbre pour la personne I34Jeu de caractères éditeur : %sJeu de caractères éditeur en entrée : %sJeu de caractères éditeur en sortie : %shuithuitièmeonzeonzièmeellelulentrez le nom du fichierentrez le nom du fichier (*%s)entrez un entier :entrez une clé ou un refn :entrez la clé :entrez un nom :entrez le chemin d'accès :entrez une chaîne :entrez o (oui) ou n (non) :erreurErreur d'accès au répertoire de la baseerreur d'évaluation des paramètres à bloquererreur en évaluant les paramètres à débloquerest %1estimé %1exemple : dbverify -ifsex "%s" éxécute un programme d'édition lifelines directementrépertoire d'import/export :f Atteindre pèref Atteindre pèresf Atteindre père hautf Famille - ajouter une famille dans la basef Famille - supprimer complètement une famillef Recherche sur l'ensemble de la basef Recherche nom completéchouépère févrfévriercinquièmepremiercinqparamètres : florfloréalforce l'ouverture (pour reprendre après des erreurs ou une coupure)quatrequatrièmedep. %1de %1 à %2frimfrimairedepuis %1de %1 à %2frucfructidorfullname : personne sans nomg Atteindre familleJeu de caractères gedcom en entrée : %sJeu de caractères gedcom en sortie : %sgermgerminaldll gettext sans versionversion dll gettext : %s dll gettext : %sh Ajouter comme conjointilsonsonluisoni Ajouter comme enfanti Atteindre personnei Identifier une personne depuis une valeur de cléi Individu - supprimer complètement une personnei importer toutes les tablesiconv (conversion de code de page) inclus.iconv (conversion de code de page) non inclus.dll iconv sans versionversion dll iconv : %sdll iconv : %sidentifieur : %s doit être une chaîne Appel invalide à la pos.échec de initscriyariyrj Fusionner bas à hautj Suivant listejanvjanvierjour complémentairejuiljuilletjuinjuink Rechercher la valeur de clé d'une personnek Précédent listeLe fichier de clés est corrompu.Le fichier de clé a un alignement incorrect.Le fichier de clé a une version incorrecte.kislevksll charger une table depuis un fichier (dans la base)lifelines `btedit' permet de modifier des arbres binaires dans les bases LifeLines. NE l'utilisez PAS sauf si vous savez ce que vous faites et possédez une séauvegarde de votre base.lines [-adkrwiflntcuFxoCzi] [base] # -F pour base finlandaiselines [-adkrwiflntcuFxoCzI] [base]lines [-adkrwiflntcuFxoCzI] [base] # base finlandaisebloque une base (pour un média en lecture seule)trac des opérations de mémoire dynamique (pour mise au point)m Atteindre mèrem Atteindre mèresm Atteindre mère hautm Marquer personnem Voir les statistiques mémoirex marsmars x : maidegimprxmessmessidorValeur manquante ou incorrecte pour sortmère n Ajouter personnen Rech. par fragment du nom (délimité par des espaces)n Nommer cette listeLe nom de la base est trop long.name : personne sans nomneufneuvièmenisannivônivôsedll gettext non trouvéedll iconv non trouvéePas de fichier de clé (le répertoire n'est pas une base).le noeud à bloquer doit appartenir à un enregistrementle paramètre à débloquer doit être contenu dans un enregistrementnovenovembrensnparamètre null à bloquerparamètre null à débloquero Atteindre f/s aînéo Modifier le fichier d'options utilisateuro Divers - supprimer complètement un enregistrement diversoctooctobreunouvre la base en lecture seule (pour un média en lecture seule)ouvre la base en lecture seule (interdisant les autres accès en écriture)ouvre la base avec un accès en écriture (défaut)affiche les informations de version et sortp Mode ascendantsp Personne - ajouter une personne dans la basep Choisir un rapport dans la liste et l'exécutermotif :pers. pluvpluviôsepraiprairialq Quitter le programmeq Ret. menu principalq Retour au menu précédentr Générer un rapport en saisissant son nomr Importer un fichier GEDCOM dans la baser Recherche refnr Suppr. conjointr Supprimer de la lister Suppr. lien conjointJeu de caractères rapports : %sJeu de caractères rapport en entrée : %sJeu de caractères rapport en sortie : %sLa base demandée n'existe pas.habis Ajouter épouses Parcourir les enregistrements sources Atteindre conjoints Att. conjoint/s hauts Exporter la base dans un fichier GEDCOMs Chercher dans la bases Recherche sources Conjoint - ajouter un conjoint à une famille existantes Conjoint - supprimer un conjoint d'une familles enregistrer une table dans un fichier (depuis la base)secondseptseptembrel'ensemble(%s, ) est incorrectseptseptièmeelleshevatshvsignal %1 : 2%sivansixsixièmesoundex: personne sans nomindique la taille de fenêtre (ex : -u 120,34 donne 120 colonnes et 34 lignesconj. réussiindique les valeurs de cache (ex, -ci400,4000f400,4000 fournit des caches directs de pers. et de fam. à 400, et des caches indirects à 4000)surname : personne sans nomsvnt Atteindre fen. hautt Mode tandemt Modifier les tables de correspondance de caractèrest Rech. par titretamuztc Tandem enfantsdixdixièmetevettf Tandem père/stg Tandem famillesle paramètre de empty n'est pas une liste, table ou ensemblele paramètre de length n'est pas une liste, table ou ensemblele paramètre à bloquer doit être un enegistrement ou un noeudle paramètre à débloquer doit être un enregistrement ou un noeudtherthermidortroisièmetroistishritm Tandem mèrestmzjsq %1trace les appels de fonction dans les rapports (pour mise au point)ts Tandem conjointstshtt Mode tandem famillestt Mode tandemttpath vérification du répertoire <%s>ttpath fichier <%s> saisi comme %dttpath get_conversion_dyntt: de <%s> à <%s> : %sttpath get_subcoding_dyntt de <%s> au sous-code <%s> : %stu Tandem parentstvtdouzièmedouzedeuxu Atteindre parentsu Utilitaires diversdébloque une base (pour un accès correct en lecture-écriture)utilisation : dbverify -(paramètres) v Parcourir l'historique des visites (%d entrée)v Parcourir l'historique des visites (%d entrées)vendvendémiaireventventôseavertissementx Parcourir les enregistrements diversx Gérer les enregistrements sources, événements et diversx Basculer marquex Inverser 2 enfantsx Inverser 2 famillesx Inverser Haut/Basx exporter toutes les tablesy Atteindre f/s cadety Activer syncoOoOnNzérozi Atteindre perszz Atteindrelifelines-3.0.61/po/fr.po0000700002540200244210000042040410656417750015345 0ustar prappDomain Users# French messages for Lifelines # Copyright (C) 1991-2007 Thomas T. Wetmore IV and al. # Translation by Patrick Texier , 2002-2007. # . # msgid "" msgstr "" "Project-Id-Version: Lifelines 3.0.61\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-08-08 15:56-0400\n" "PO-Revision-Date: 2007-08-07 09:50+0200\n" "Last-Translator: Patrick Texier \n" "Language-Team: Not a language team\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n>1;\n" #: src/btree/btrec.c:369 #, c-format msgid "Failed (errno=%d) to open blockfile (rkey=%s): %s" msgstr "Échec (errnp=%d) en ouverture du bloc de fichier (rkey=%s) : %s" #: src/btree/btrec.c:438 #, c-format msgid "Btree lookup looped back to master (%ld)!" msgstr "Btree lookup looped back to master (%ld)!" #: src/gedlib/charmaps.c:769 msgid "" msgstr "" #. TRANSLATORS: seconds time interval #: src/gedlib/dateprint.c:783 #, c-format msgid "%02ds" msgstr "%02ds" #. TRANSLATORS: minutes & seconds time interval #: src/gedlib/dateprint.c:789 #, c-format msgid "%dm%02ds" msgstr "%dm%02ds" #. TRANSLATORS: hours & minutes time interval #: src/gedlib/dateprint.c:795 #, c-format msgid "%dh%02dm" msgstr "%dh%02dm" #. TRANSLATORS: days & hours time interval #: src/gedlib/dateprint.c:801 #, c-format msgid "%dd%02dh" msgstr "%dj%02dh" #. TRANSLATORS: years & days time interval #: src/gedlib/dateprint.c:805 #, c-format msgid "%dy%03dd" msgstr "%da%03dj" #: src/gedlib/dbcontext.c:276 msgid "Database error: -- " msgstr "Erreur base : -- " #: src/gedlib/dbcontext.c:280 msgid "requested database does not exist." msgstr "La base demandée n'existe pas." #: src/gedlib/dbcontext.c:283 msgid "db directory is file, not directory." msgstr "Le répertoire de la base est un fichier, non un répertoire." #: src/gedlib/dbcontext.c:286 msgid "creation of new database failed." msgstr "La création de la base a échoué." #: src/gedlib/dbcontext.c:289 msgid "error accessing database directory." msgstr "Erreur d'accès au répertoire de la base" #: src/gedlib/dbcontext.c:292 msgid "no keyfile (directory does not appear to be a database)." msgstr "Pas de fichier de clé (le répertoire n'est pas une base)." #: src/gedlib/dbcontext.c:295 msgid "could not open, read or write an index file." msgstr "Impossible d'accéder à un fichier de clés." #: src/gedlib/dbcontext.c:298 msgid "could not open, read or write the key file." msgstr "Impossible d'accéder au fichier de clés." #: src/gedlib/dbcontext.c:301 msgid "could not open, read or write the key file (to alter database)." msgstr "Impossible d'accéder au fichier de clés (pour modifier la base)." #: src/gedlib/dbcontext.c:304 msgid "could not open, read or write a block file." msgstr "Impossible d'accéder à un bloc de fichier." #: src/gedlib/dbcontext.c:307 msgid "name of database is too long." msgstr "Le nom de la base est trop long." #: src/gedlib/dbcontext.c:310 msgid "The database is already open for writing." msgstr "La base est déjà ouverte en écriture." #: src/gedlib/dbcontext.c:313 msgid "The database is locked (no readwrite access)." msgstr "La base est en lecture seule." #: src/gedlib/dbcontext.c:316 msgid "The database is unlocked." msgstr "La base n'est pas bloquée." #: src/gedlib/dbcontext.c:319 msgid "keyfile is corrupt." msgstr "Le fichier de clés est corrompu." #: src/gedlib/dbcontext.c:322 msgid "keyfile is wrong alignment." msgstr "Le fichier de clé a un alignement incorrect." #: src/gedlib/dbcontext.c:325 msgid "keyfile is wrong version." msgstr "Le fichier de clé a une version incorrecte." #: src/gedlib/dbcontext.c:328 msgid "Existing database found." msgstr "Base existante trouvée." #: src/gedlib/dbcontext.c:332 #, c-format msgid "The database is already opened for read access by %d user." msgid_plural "The database is already opened for read access by %d users." msgstr[0] "La base est déja ouverte en lecture par %d utilisateur." msgstr[1] "La base est déja ouverte en lecture par %d utilisateurs." #: src/gedlib/dbcontext.c:338 msgid "Invalid properties set for new database" msgstr "Les propriétés d'une nouvelle base sont incorrectes." #: src/gedlib/dbcontext.c:341 msgid "Undefined database error -- fix program." msgstr "Erreur de base inconnue -- le programme est à corriger." #: src/gedlib/gedcom.c:112 msgid "Missing NAME line in INDI record; record ignored.\n" msgstr "Ligne NAME manquante dans enr. INDI ; enr. ignoré.\n" #: src/gedlib/init.c:228 src/tools/btedit.c:207 #, c-format msgid "Copyright (C) 1991-2007 Thomas T. Wetmore IV et al." msgstr "Copyright © 1991-2007 Thomas T. Wetmore IV et al." #: src/gedlib/init.c:230 src/tools/btedit.c:209 #, c-format msgid "" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." msgstr "" "Ceci est un logiciel libre ; consultez les sources pour plus\n" "d'informations légales. Il n'y a AUCUNE garantie ; même pas pour la\n" "COMMERCIALISATION ou l'ADÉQUATION À UN BUT PARTICULIER." #: src/gedlib/init.c:235 src/tools/btedit.c:214 #, c-format msgid "Written by Tom Wetmore. Maintained at lifelines.sourceforge.net." msgstr "Écrit par Tom Wetmore. Maintenu à lifelines.sourceforge.net." #: src/gedlib/keytonod.c:686 #, c-format msgid "Database error caused by reference to nonexisting key <%s>." msgstr "Erreur de base : référence à une clé inexistante (%s)." #: src/gedlib/keytonod.c:687 msgid "It might be possible to fix this with btedit." msgstr "Il doit être possible de résoudre ceci avec btedit." #: src/gedlib/keytonod.c:688 msgid "Neighboring keys include:" msgstr "Les clés voisines incluent :" #: src/gedlib/keytonod.c:1045 #, c-format msgid "Bad cache entry <%s> != <%s>" msgstr "Entrée de cache invalide (%s) != (%s)" #: src/gedlib/keytonod.c:1072 #, c-format msgid "Cache [%s] overflowed its max size (%d)" msgstr "Le cache [%s] a dépassé sa taille limite (%d)" #: src/gedlib/messages.c:44 msgid "You must identify a database." msgstr "Vous devez sélectionner une base." #: src/gedlib/messages.c:45 msgid "What directory holds (or will hold) the LifeLines database? (? to list)" msgstr "Quel répertoire contient la base LifeLines ? (? = liste)" #: src/gedlib/messages.c:46 msgid "enter path: " msgstr "entrez le chemin d'accès :" #: src/gedlib/messages.c:47 msgid "There is no LifeLines database in that directory." msgstr "Il n'y a pas de base LifeLines dans ce répertoire." #: src/gedlib/messages.c:48 msgid "Do you want to create a database there?" msgstr "Voulez-vous créer une base ici ?" #: src/gedlib/messages.c:49 msgid "Argument to lock (-l) must be y or n." msgstr "Lock (-l) attend y ou n comme paramètre." #: src/gedlib/messages.c:50 msgid "Cannot remove last person from family." msgstr "Impossible de supprimer la dernière personne d'une famille." #: src/gedlib/messages.c:52 msgid "lines [-adkrwiflntcuFxoCzI] [database] # Use -F for Finnish database" msgstr "lines [-adkrwiflntcuFxoCzi] [base] # -F pour base finlandaise" #: src/gedlib/messages.c:54 msgid "lines [-adkrwiflntcuxoCzI] [database] # Finnish database" msgstr "lines [-adkrwiflntcuFxoCzI] [base] # base finlandaise" #: src/gedlib/messages.c:56 msgid "lines [-adkrwiflntcuxoCzI] [database]" msgstr "lines [-adkrwiflntcuFxoCzI] [base]" #: src/gedlib/messages.c:58 msgid "The database is read only; you may not add records." msgstr "La base est en lecture seule; vous ne pouvez effectuer des ajouts." #: src/gedlib/messages.c:59 msgid "The database is read only; you may not change records." msgstr "" "La base est en lecture seule ; vous ne pouvez pas effectuer des " "modifications." #: src/gedlib/messages.c:60 msgid "The database is read only; you may not merge records." msgstr "" "La base est en lecture seule; vous ne pouvez pas effectuer des fusions." #: src/gedlib/messages.c:61 msgid "The database is read only; you may not remove records." msgstr "" "La base est en lecture seule; vous ne pouvez pas effectuer des suppressions." #: src/gedlib/messages.c:62 msgid "The database is read only." msgstr "La base est en lecture seule." #: src/gedlib/messages.c:64 msgid "Name, key, refn, list, or @:" msgstr "Nom, clé, refn, liste ou @ :" #: src/gedlib/messages.c:65 msgid "enter key or refn: " msgstr "entrez une clé ou un refn :" #: src/gedlib/messages.c:66 msgid "Please choose the child to remove from the family." msgstr "Sélectionnez l'enfant à supprimer de cette famille." #: src/gedlib/messages.c:67 msgid "Please choose the spouse/parent to remove from the family." msgstr "Sélectionnez le conjoint/parent à supprimer de cette famille." #: src/gedlib/messages.c:68 msgid "From which family is the child to be removed?" msgstr "De quelle famille doit être supprimé l'enfant ?" #: src/gedlib/messages.c:69 msgid "From which family is the spouse/parent to be removed?" msgstr "De quelle famille doit être supprimé le conjoint/parent ?" #: src/gedlib/messages.c:70 msgid "Identify family (enter nothing to identify by individual members)." msgstr "Identifiez une famille (rien pour l'identifier par individus)." #: src/gedlib/messages.c:71 msgid "Identify a spouse of the family, if known." msgstr "Identifiez un conjoint de la famille, si connu." #: src/gedlib/messages.c:72 msgid "Identify a child of the family, if known." msgstr "Identifiez un enfant de la famille, si connu." #: src/gedlib/messages.c:73 msgid "Identify the first child to swap." msgstr "Identifiez le premier enfant à permuter." #: src/gedlib/messages.c:74 msgid "Identify the second child to swap." msgstr "Identifiez le second enfant à permuter." #: src/gedlib/messages.c:75 msgid "Identify the child to reorder." msgstr "Identifiez l'enfant à réordonner." #: src/gedlib/messages.c:76 msgid "Identify the first family/spouse to swap." msgstr "Identifiez le premier conjoint à permuter." #: src/gedlib/messages.c:77 msgid "Identify the second family/spouse to swap." msgstr "Identifiez le second conjoint à permuter." #: src/gedlib/messages.c:78 msgid "Please choose the spouse/parent to browse to." msgstr "Choisissez le conjoint à atteindre, svp." #: src/gedlib/messages.c:79 msgid "Please choose the first spouse/parent to browse to." msgstr "Choisissez le premier conjoint à atteindre, svp." #: src/gedlib/messages.c:80 msgid "Please choose the second spouse/parent to browse to." msgstr "Choisissez le second conjoint à atteindre, svp." #: src/gedlib/messages.c:81 msgid "Please choose the child to browse to." msgstr "Choisissez l'enfant à atteindre, svp." #: src/gedlib/messages.c:82 msgid "Please choose the first child to browse to." msgstr "Choisissez le premier enfant à atteindre, svp." #: src/gedlib/messages.c:83 msgid "Please choose the second child to browse to." msgstr "Choisissez le second enfant à atteindre, svp." #: src/gedlib/messages.c:84 msgid "Please choose the family to browse to." msgstr "Choisissez la famille à atteindre, svp." #: src/gedlib/messages.c:85 msgid "Enter Family Number to Browse to" msgstr "Entrez le numéro de famille à atteindre" #: src/gedlib/messages.c:86 msgid "Please choose the first family to browse to." msgstr "Choisissez la première famille à atteindre, svp." #: src/gedlib/messages.c:87 msgid "Please choose the second family to browse to." msgstr "Choisissez la seconde famille à atteindre, svp." #: src/gedlib/messages.c:88 msgid "Please choose the father/husband to browse to." msgstr "Choisissez le père/mari à atteindre, svp." #: src/gedlib/messages.c:89 msgid "Please choose the first father/husband to browse to." msgstr "Choisissez le premier père/mari à atteindre, svp." #: src/gedlib/messages.c:90 msgid "Please choose the second father/husband to browse to." msgstr "Choisissez le second père/mari à atteindre, svp." #: src/gedlib/messages.c:91 msgid "Please choose the mother/wife to browse to." msgstr "Choisissez la mère/femme à atteindre, svp." #: src/gedlib/messages.c:92 msgid "Please choose the first mother/wife to browse to." msgstr "Choisissez la première mère/femme à atteindre, svp." #: src/gedlib/messages.c:93 msgid "Please choose the second mother/wife to browse to." msgstr "Choisissez la seconde mère/femme à atteindre, svp." #: src/gedlib/messages.c:94 msgid "Identify a parent in the family having children swapped." msgstr "" "Identifiez un parent dans la famille où des enfants doivent être permutés." #: src/gedlib/messages.c:95 msgid "Whose families/spouses are to be swapped?" msgstr "Quelles familles/conjoints doivent être permutées ?" #: src/gedlib/messages.c:96 msgid "Identify one of the child's parents, if known." msgstr "Identifiez un des parents de l'enfant, si connu." #: src/gedlib/messages.c:98 src/liflines/scan.c:127 msgid "Enter pattern to match against refn." msgstr "Entrez un motif de recherche pour un refn." #: src/gedlib/messages.c:100 msgid "Please choose from among these people." msgstr "Choisissez parmi ces personnes." #: src/gedlib/messages.c:101 msgid "Please choose from among these records." msgstr "Choisissez parmi ces enregistrements." #: src/gedlib/messages.c:102 msgid "Is this the new child? " msgstr "Est-ce le nouvel enfant ?" #: src/gedlib/messages.c:103 msgid "Is this the new spouse? " msgstr "Est-ce le nouveau conjoint ?" #: src/gedlib/messages.c:104 msgid "Is this the person? Select if so." msgstr "Est-ce cette personne ? Sélectionnez la." #: src/gedlib/messages.c:105 msgid "Is this the record? Select if so." msgstr "Est-ce cet enregistrement ? Sélectionnez le." #: src/gedlib/messages.c:106 msgid "Select the child the new child precedes or select last." msgstr "Sélectionnez l'enfant que le nouveau précède ou le dernier." #: src/gedlib/messages.c:107 msgid "Please identify next person to browse to." msgstr "Identifiez la personne suivante à atteindre, svp." #: src/gedlib/messages.c:108 msgid "Please identify record to browse to." msgstr "Identifiez l'enregistrement à atteindre, svp." #: src/gedlib/messages.c:109 msgid "Please identify one of the spouses." msgstr "Identifiez l'un des conjoints, svp." #: src/gedlib/messages.c:110 msgid "Please identify person or persons to browse to." msgstr "Identifiez la ou les personne(s) à atteindre, svp." #: src/gedlib/messages.c:111 msgid "Please choose family create operation." msgstr "Choisissez l'opération de création de famille, svp." #: src/gedlib/messages.c:112 msgid "Do you want to enter another name?" msgstr "Voulez-vous entrer un autre nom ?" #: src/gedlib/messages.c:114 msgid "This person is not a spouse or parent in any family." msgstr "Cette personne n'est conjoint ou parent dans aucune famille." #: src/gedlib/messages.c:115 msgid "This person is not a child in any family." msgstr "Cette personne n'est enfant dans aucune famille." #: src/gedlib/messages.c:116 msgid "There is no one in the database with that name or key." msgstr "Il n'y a personne dans la base avec ce nom ou cette clé." #: src/gedlib/messages.c:118 msgid "This person's father is not in the database." msgstr "Le père de cette personne n'est pas dans la base." #: src/gedlib/messages.c:119 msgid "This person's mother is not in the database." msgstr "La mère de cette personne n'est pas dans la base." #: src/gedlib/messages.c:120 msgid "This person has no spouse in the database." msgstr "Cette personne n'a pas de conjoint dans la base." #: src/gedlib/messages.c:121 msgid "This person has no younger sibling in the database." msgstr "Cette personne n'a pas de frère/soeur plus jeune dans la base." #: src/gedlib/messages.c:122 msgid "This person has no older sibling in the database." msgstr "Cette personne n'a pas de frère/soeur plus âgé dans la base." #: src/gedlib/messages.c:123 msgid "This person's parents are not in the database." msgstr "Les parents de cette personne ne sont pas dans la base." #: src/gedlib/messages.c:124 msgid "This family has no male spouse/parent in the database." msgstr "Cette famille n'a pas d'époux dans la base." #: src/gedlib/messages.c:125 msgid "This family has no female spouse/parent in the database." msgstr "Cette famille n'a pas d'épouse dans la base." #: src/gedlib/messages.c:126 msgid "There are no children in the database for this family." msgstr "Il n'y a pas d'enfants dans la base pour cette famille." #: src/gedlib/messages.c:127 msgid "This person has no children in the database." msgstr "Cette personne n'a pas d'enfants dans la base." #: src/gedlib/messages.c:128 msgid "No such child." msgstr "Enfant non trouvé." #: src/gedlib/messages.c:129 msgid "No such person." msgstr "Personne non trouvée." #: src/gedlib/messages.c:130 msgid "No such record." msgstr "Enregistrement non trouvé." #: src/gedlib/messages.c:131 msgid "No such family." msgstr "Famille non trouvée." #: src/gedlib/messages.c:132 msgid "No sources present." msgstr "Pas de sources." #: src/gedlib/messages.c:133 msgid "Please choose the source to view." msgstr "Choisissez la source à visualiser." #: src/gedlib/messages.c:134 msgid "No events present." msgstr "Pas d'événements." #: src/gedlib/messages.c:135 msgid "Please choose the event to view." msgstr "Choisissez l'événement à visualiser." #: src/gedlib/messages.c:136 msgid "No others present." msgstr "Pas d'enregistrement divers." #: src/gedlib/messages.c:137 msgid "Please choose the other to view." msgstr "Choisissez l'enr. divers à visualiser." #: src/gedlib/messages.c:138 msgid "No notes present." msgstr "Pas de notes." #: src/gedlib/messages.c:139 msgid "Please choose the note to view." msgstr "Choisissez la note à visualiser." #: src/gedlib/messages.c:140 msgid "No references present." msgstr "Pas de références." #: src/gedlib/messages.c:141 msgid "Please choose the reference to view." msgstr "Choisissez la référence à visualiser." #: src/gedlib/messages.c:142 msgid "Duplicated REFN - please choose." msgstr "REFN en double - choisissez svp." #: src/gedlib/messages.c:144 msgid "New spouse/parent has unknown sex; can't add to family." msgstr "" "Le nouveau conjoint n'a pas de sexe défini ; impossible de l'ajouter à une " "famille" #: src/gedlib/messages.c:145 msgid "The persons are not of opposite sex; can't make family." msgstr "Les personnes sont de même sexe ; impossible de créer une famille." #: src/gedlib/messages.c:146 msgid "This person is not a spouse in the family; can't remove." msgstr "Cette personne n'est pas conjoint ; impossible de la supprimer." #: src/gedlib/messages.c:147 msgid "This person is not a child in the family; can't remove." msgstr "Cette personne n'est un enfant ; impossible de la supprimer" #: src/gedlib/messages.c:148 msgid "This person's sex is not known; can't make family." msgstr "Cette personne n'a pas de sexe ; elle ne peut créer une famille." #: src/gedlib/messages.c:149 msgid "This family already has a husband/male parent." msgstr "Cette famille a déjà un mari." #: src/gedlib/messages.c:150 msgid "This family already has a wife/female parent." msgstr "Cette famille a déjà une femme." #: src/gedlib/messages.c:151 msgid "This family has both spouses/parents; can't add another." msgstr "Cette famille a ses deux conjoints/parents ; ajout impossible." #: src/gedlib/messages.c:152 msgid "This family has neither spouse/parent; can't remove." msgstr "Cette famille n'a pas de conjoint/parent ; suppression impossible." #: src/gedlib/messages.c:153 msgid "This family still has links; not removed." msgstr "Cette famille a encore des liens ; suppression impossible." #: src/gedlib/messages.c:155 msgid "Choose a family by selecting a spouse/parent." msgstr "Choisissez une famille par un conjoint/parent." #: src/gedlib/messages.c:156 msgid "" "Do you want to edit the person again? (Otherwise changes will be discarded.)" msgstr "" "Voulez-vous remodifier cette personne ? (Sinon les changements seront " "perdus.)" #: src/gedlib/messages.c:157 msgid "Do you want to edit the person again?" msgstr "Voulez-vous remodifier cette personne ?" #: src/gedlib/messages.c:158 msgid "" "Do you want to edit the family again? (Otherwise changes will be discarded.)" msgstr "" "Voulez-vous remodifier cette famille ? (Sinon les changements seront perdus)." #: src/gedlib/messages.c:159 msgid "Do you want to edit the family again?" msgstr "Voulez-vous remodifier cette famille ?" #: src/gedlib/messages.c:160 msgid "" "Do you want to edit the source again? (Otherwise changes will be discarded.)" msgstr "" "Voulez-vous remodifier cette source ? (Sinon les changement seront perdus.)" #: src/gedlib/messages.c:161 msgid "Do you want to edit the source again?" msgstr "Voulez-vous remodifier cette source ?" #: src/gedlib/messages.c:162 msgid "" "Do you want to edit the event again? (Otherwise changes will be discarded.)" msgstr "" "Voulez-vous remodifier cet événement ? (Sinon les changements seront perdus.)" #: src/gedlib/messages.c:163 msgid "Do you want to edit the event again?" msgstr "Voulez-vous remodifier cet événement ?" #: src/gedlib/messages.c:164 msgid "" "Do you want to edit the record again? (Otherwise changes will be discarded.)" msgstr "" "Voulez-vous remodifier cet enregistrement ? (Sinon les changements seront " "perdus.)" #: src/gedlib/messages.c:165 msgid "Do you want to edit the record again?" msgstr "Voulez-vous remodifier cet enregistrement ?" #: src/gedlib/messages.c:166 msgid "Whom do you want to edit?" msgstr "Que voulez-vous modifier ?" #: src/gedlib/messages.c:167 msgid "Which source record do you want to edit?" msgstr "Quel enregistrement source voulez-vous modifier ?" #: src/gedlib/messages.c:168 msgid "Which event record do you want to edit?" msgstr "Quel enregistrement événement voulez-vous modifier ?" #: src/gedlib/messages.c:169 msgid "What record do you want to edit?" msgstr "Quel enregistrement voulez-vous modifier ?" #: src/gedlib/messages.c:171 msgid "Do you really want to add this person to the database?" msgstr "Voulez-vous ajouter cette personne dans la base ?" #: src/gedlib/messages.c:172 msgid "Do you really want to add this family to the database?" msgstr "Voulez-vous ajouter cette famille dans la base ?" #: src/gedlib/messages.c:173 msgid "Do you really want to add this child to the family?" msgstr "Voulez-vous ajouter cet enfant à la famille ?" #: src/gedlib/messages.c:174 msgid "Do you really want to add this spouse/parent to the family?" msgstr "Voulez-vous ajouter ce conjoint/parent à la famille ?" #: src/gedlib/messages.c:175 msgid "Do you really want to add this source to the database?" msgstr "Voulez-vous ajouter cette source dans la base ?" #: src/gedlib/messages.c:176 msgid "Do you really want to add this event to the database?" msgstr "Voulez-vous ajouter cet événement dans la base ?" #: src/gedlib/messages.c:177 msgid "Do you really want to add this record to the database?" msgstr "Voulez-vous ajouter cet enregistrement dans la base ?" #: src/gedlib/messages.c:178 msgid "Do you really want to update this person?" msgstr "Voulez-vous mettre à jour cette personne ?" #: src/gedlib/messages.c:179 msgid "Do you really want to update this family?" msgstr "Voulez-vous mettre à jour cette famille ?" #: src/gedlib/messages.c:180 msgid "Do you really want to update this source?" msgstr "Voulez-vous mettre à jour cette source ?" #: src/gedlib/messages.c:181 msgid "Do you really want to update this event?" msgstr "Voulez-vous mettre à jour cet événement ?" #: src/gedlib/messages.c:182 msgid "Do you really want to update this record?" msgstr "Voulez-vous mettre à jour cet enregistrement ?" #: src/gedlib/messages.c:183 msgid "Are you sure you want to remove the person from the database?" msgstr "Voulez-vous supprimer cette personne de la base ?" #: src/gedlib/messages.c:184 msgid "Are you sure you want to remove this record from the database?" msgstr "Voulez-vous supprimer cet enregistrement de la base ?" #: src/gedlib/messages.c:185 msgid "Remove this family record?" msgstr "Supprimer cet enregistrement familial ?" #: src/gedlib/messages.c:186 #, c-format msgid "(Family %s (%s, %s)" msgstr "(Famille %s (%s, %s)" #: src/gedlib/messages.c:187 msgid "Do you really want to merge these two persons?" msgstr "Voulez-vous fusionner ces deux personnes ?" #: src/gedlib/messages.c:188 msgid "Do you really want to merge these two families?" msgstr "Voulez-vous fusionner ces deux familles ?" #: src/gedlib/messages.c:189 msgid "Do you really want to swap spouse orders?" msgstr "Voulez-vous inverser l'ordre des conjoints ?" #: src/gedlib/messages.c:190 msgid "Do you really want to reorder children?" msgstr "Voulez-vous réordonner les enfants ?" #: src/gedlib/messages.c:191 msgid "Do you really want to remove this child from his/her family?" msgstr "Voulez-vous supprimer cet enfant de sa famille ?" #: src/gedlib/messages.c:192 msgid "Do you really want to remove this spouse from his/her family?" msgstr "Voulez-vous supprimer ce conjoint de sa famille ?" #: src/gedlib/messages.c:193 msgid "Too many spouses to display full list" msgstr "Trop de conjoints pour afficher la liste complète." #: src/gedlib/messages.c:194 msgid "These persons are children in different families." msgstr "Ces personnes sont enfants dans différentes familles." #: src/gedlib/messages.c:195 msgid "Are you sure you want to merge them?" msgstr "Êtes-vous sur de vouloir les fusionner ?" #: src/gedlib/messages.c:197 msgid "There is something wrong with the data." msgstr "Il y a une erreur dans les données." #: src/gedlib/messages.c:198 msgid "Please identify the child." msgstr "Identifiez l'enfant svp." #: src/gedlib/messages.c:199 msgid "Please identify one of the child's siblings." msgstr "Identifiez l'un des frêres ou soeurs de l'enfant svp." #: src/gedlib/messages.c:200 msgid "Identify spouse/parent to add to an existing family." msgstr "Identifiez le conjoint à ajouter à une famille existante." #: src/gedlib/messages.c:201 msgid "Identify spouse/parent already in family, if known." msgstr "Identifiez le conjoint présent dans la famille, s'il est connu." #: src/gedlib/messages.c:202 msgid "Identify child already in family." msgstr "Identifiez l'enfant présent dans la famille." #: src/gedlib/messages.c:204 msgid "This person is already a child in a family." msgstr "Cette personne est déjà l'enfant d'une famille." #: src/gedlib/messages.c:205 msgid "Identify a spouse/parent for the new family." msgstr "Identifiez un conjoint pour la nouvelle famille." #: src/gedlib/messages.c:206 msgid "Identify the second spouse/parent, if known." msgstr "Identifiez le second conjoint, s'il est connu." #: src/gedlib/messages.c:207 msgid "Both families must have husbands/fathers." msgstr "Les deux familles doivent avoir des maris/pères." #: src/gedlib/messages.c:208 msgid "Both families must have wives/mothers." msgstr "Les deux familles doivent avoir des femmes/mères." #: src/gedlib/messages.c:210 msgid "Identify spouse/parent in second family, if known." msgstr "Identifiez le conjoint dans la seconde famille, s'il est connu." #: src/gedlib/messages.c:211 msgid "Identify child in second family." msgstr "Identifiez l'enfant dans la seconde famille." #: src/gedlib/messages.c:212 msgid "Identify second person to browse to." msgstr "Identifiez la seconde personne à atteindre." #: src/gedlib/messages.c:214 msgid "Create a family with this person as a child." msgstr "Créer une famille avec cette personne comme enfant." #: src/gedlib/messages.c:215 msgid "Create a family with this person as a spouse/parent." msgstr "Créer une famille avec cette personne comme conjoint." #: src/gedlib/messages.c:216 msgid "This family has less than two children; can't swap." msgstr "Cette famille n'a pas au moins deux enfants ; inversion impossible." #: src/gedlib/messages.c:217 msgid "This person is a spouse/parent in less than two families." msgstr "Cette personne est conjoint dans moins de deux familles." #: src/gedlib/messages.c:218 msgid "Something impossible happened. Contact tech support." msgstr "" "Quelque chose d'impossible est survenu. Contactez le support technique." #: src/gedlib/messages.c:220 msgid "The two children were swapped." msgstr "Les deux enfants ont été inversés." #: src/gedlib/messages.c:221 msgid "The two families were swapped." msgstr "Les deux familles ont été inversées." #: src/gedlib/messages.c:222 msgid "The child was removed from his/her family." msgstr "L'enfant a été supprimé de sa famille." #: src/gedlib/messages.c:223 msgid "The spouse was removed from his/her family." msgstr "Le conjoint a été supprimé de sa famille." #: src/gedlib/messages.c:225 msgid "A person cannot be merged with him/herself." msgstr "Une personne ne peut être fusionnée avec elle même." #: src/gedlib/messages.c:226 msgid "A family cannot be merged with itself." msgstr "Une famille ne peut être fusionnée avec elle même." #: src/gedlib/messages.c:227 msgid "Two persons with different parents cannot be merged." msgstr "Deux personnes de parents différents ne peuvent être fusionnées." #: src/gedlib/messages.c:228 msgid "Two parents of different sexes cannot be merged." msgstr "Deux parents de sexes différents ne peuvent être fusionnés." #: src/gedlib/messages.c:229 msgid "The families have different fathers/husbands; cannot merge." msgstr "Les familles ont des pères/maris différents ; fusion impossible." #: src/gedlib/messages.c:230 msgid "The families have different wives/mothers; cannot merge." msgstr "Les familles ont des mères/femmes différentes ; fusion impossible." #: src/gedlib/messages.c:231 msgid "Who do you want to remove from the database?" msgstr "Que voulez-vous supprimer de la base ?" #: src/gedlib/messages.c:232 msgid "What record do you want to remove from the database?" msgstr "Quel enregistrement voulez-vous supprimer de la base ?" #: src/gedlib/messages.c:233 msgid "Place the child last in the family." msgstr "Placez le dernier enfant de la famille." #: src/gedlib/messages.c:234 msgid "Error in abbreviations file." msgstr "Erreur dans le fichier d'abréviations" #: src/gedlib/messages.c:235 msgid "Error in user options file." msgstr "Erreur dans le fichier d'options utilisateur." #: src/gedlib/messages.c:236 msgid "Error in character mapping file." msgstr "Erreur dans le fichier de conversion de caractères." #: src/gedlib/messages.c:237 #, c-format msgid "(Separator is %s)" msgstr "(Le séparateur est %s)" #: src/gedlib/messages.c:238 msgid "Do you want to re-edit it?" msgstr "Voulez-vous le remodifier ?" #: src/gedlib/messages.c:240 #, c-format msgid "%s was added to the database." msgstr "%s a été ajouté dans la base" #: src/gedlib/messages.c:241 #, c-format msgid "%s was added as a child." msgstr "%s a été ajouté comme enfant." #: src/gedlib/messages.c:242 #, c-format msgid "%s was added as a spouse and/or parent." msgstr "%s a été ajouté comme conjoint et/ou parent." #: src/gedlib/messages.c:243 msgid "The new family was added to the database." msgstr "La famille a été ajoutée dans la base." #: src/gedlib/messages.c:244 #, c-format msgid "%s was modified in the database." msgstr "%s a été modifié dans la base." #: src/gedlib/messages.c:245 msgid "The family was modified in the database." msgstr "La famille a été modifiée dans la base." #: src/gedlib/messages.c:246 msgid "The source was modified in the database." msgstr "La source a été modifiée dans la base." #: src/gedlib/messages.c:247 msgid "The event was modified in the database." msgstr "L'événement a été modifié dans la base." #: src/gedlib/messages.c:248 msgid "The record was modified in the database." msgstr "L'enregistrement a été modifié dans la base." #: src/gedlib/messages.c:250 #, c-format msgid "Could not open file %s." msgstr "Impossible d'ouvrir le fichier %s." #: src/gedlib/messages.c:251 msgid "Filepath too long." msgstr "Chemin d'accès trop long." #: src/gedlib/messages.c:253 msgid "Please mark a record first." msgstr "Marquez un enregistrement en premier." #: src/gedlib/messages.c:255 #, c-format msgid "The current list is now named %s." msgstr "La liste courante est nommée %s." #: src/gedlib/messages.c:256 msgid "The current list is not named." msgstr "La liste courante n'est pas nommée." #: src/gedlib/messages.c:257 msgid "What should the name of this list be?" msgstr "Quel nom voulez vous donner à la liste ?" #: src/gedlib/messages.c:258 msgid "No persons were added to the current list." msgstr "Personne n'a été ajouté à la liste courante." #: src/gedlib/messages.c:259 msgid "What persons or list do you want to add to the current list?" msgstr "Quelles personnes ou liste voulez-vous ajouter à la liste courante ?" #: src/gedlib/messages.c:260 msgid "You are at the bottom of the list." msgstr "Vous êtes à la fin de la liste." #: src/gedlib/messages.c:261 msgid "You are at the top of the list." msgstr "Vous êtes au début de la liste." #: src/gedlib/messages.c:262 msgid "New persons were added to the current list." msgstr "Des personnes ont été ajoutées dans la liste courante." #: src/gedlib/messages.c:264 msgid "System error: illegal map code" msgstr "Erreur système : code 'map' illégal" #: src/gedlib/messages.c:265 msgid "No such translation table in this database" msgstr "Pas de table de conversion dans cette base" #: src/gedlib/messages.c:268 msgid "Because of errors the GEDCOM file was not loaded.\n" msgstr "Des erreurs empêchent le chargement du fichier GEDCOM.\n" #: src/gedlib/messages.c:269 msgid "No errors; adding records with original keys..." msgstr "Aucune erreur ; ajout des enregistrements avec les clés d'origine..." #: src/gedlib/messages.c:270 msgid "No errors; adding records with new keys..." msgstr "Aucune erreur ; ajout des enregistrements avec de nouvelles clés..." #: src/gedlib/messages.c:271 msgid "Use original keys from GEDCOM file?" msgstr "Utiliser les clés d'origine du fichier GEDCOM ?" #: src/gedlib/messages.c:272 msgid "Proceed?" msgstr "Poursuivre ?" #: src/gedlib/messages.c:273 msgid "Enter name of output archive file." msgstr "Entrez le nom du fichier archive en sortie." #: src/gedlib/messages.c:274 #, c-format msgid "Database `%s' has been saved in `%s'." msgstr "La base '%s' a été enregistrée dans '%s'.'" #: src/gedlib/messages.c:275 msgid "Enter name of translation table file to write" msgstr "Entrez le nom du fichier table de conversion à écrire" #: src/gedlib/messages.c:276 msgid "Enter name of translation table file to read" msgstr "Entrez le nom du fichier table de conversion à lire" #: src/gedlib/messages.c:277 #, c-format msgid "Line %d: The person defined here has no key: skipped." msgstr "Ligne %d : la personne définie ici n'a pas de clé : ignorée." #: src/gedlib/messages.c:278 #, c-format msgid "Line %d: The family defined here has no key." msgstr "Ligne %d : la famille définie ici n'a pas de clé." #: src/gedlib/messages.c:279 #, c-format msgid "Lines %d and %d: Person %s is multiply defined: skipped." msgstr "Lignes %d et %d : la personne %s définie plusieurs fois : ignorée." #: src/gedlib/messages.c:280 #, c-format msgid "Lines %d and %d: Family %s is multiply defined." msgstr "Lignes %d et %d : la famille %s est définie plusieurs fois." #: src/gedlib/messages.c:281 #, c-format msgid "Line %d: Person %s has an incorrect key: skipped." msgstr "Ligne %d : la personne %s a une clé incorrecte : ignorée." #: src/gedlib/messages.c:282 #, c-format msgid "Line %d: Family %s has an incorrect key." msgstr "Ligne %d : la famille %s a une clé incorrecte." #: src/gedlib/messages.c:283 #, c-format msgid "Person %s is referred to but not defined." msgstr "La personne %s est référencée mais non définie." #: src/gedlib/messages.c:284 #, c-format msgid "Family %s is referred to but not defined." msgstr "La famille %s est référencée mais non définie." #: src/gedlib/messages.c:285 #, c-format msgid "Source %s is referred to but not defined." msgstr "La source %s est référencée mais non définie." #: src/gedlib/messages.c:286 #, c-format msgid "Event %s is referred to but not defined." msgstr "L'événement %s est référencé mais non défini." #: src/gedlib/messages.c:287 #, c-format msgid "Line %d: This line has a level number that is too large." msgstr "Ligne %d : cette ligne a un numéro de niveau trop important." #: src/gedlib/messages.c:288 #, c-format msgid "Line %d: Person defined here has no name." msgstr "Ligne %d : la personne définie n'a pas de nom." #: src/gedlib/messages.c:294 msgid "" msgstr "" #: src/gedlib/messages.c:296 msgid "What is the name of the program?" msgstr "Quel est le nom du programme ?" #: src/gedlib/messages.c:297 msgid "Please enter the name of the GEDCOM file." msgstr "Entrez le nom du fichier GEDCOM." #: src/gedlib/messages.c:299 msgid "What is the name of the output file?" msgstr "Quel est le nom du fichier de sortie ?" #: src/gedlib/messages.c:300 msgid "Malformed configuration file: line too long." msgstr "Fichier de configuration incorrect : ligne trop longue." #: src/gedlib/messages.c:301 msgid "Unsupported file encoding (no multibyte encodings except UTF-8)." msgstr "Encodage de fichier non géré (pas d'encodage multi-octets sauf UTF-8)." #: src/gedlib/messages.c:302 #, c-format msgid "Unsupported file encoding: %s." msgstr "Encodage de fichier non géré : %s." #: src/gedlib/messages.c:305 msgid "Enter string for program" msgstr "Entrez une chaîne pour le programme" #: src/gedlib/messages.c:306 msgid "enter string: " msgstr "entrez une chaîne :" #: src/gedlib/messages.c:307 msgid "enter integer:" msgstr "entrez un entier :" #: src/gedlib/messages.c:308 msgid "enter name: " msgstr "entrez un nom :" #: src/gedlib/messages.c:309 msgid "Strike any key to continue." msgstr "Appuyez sur une touche pour continuer." #: src/gedlib/messages.c:313 msgid "" "0 SOUR\n" "1 REFN\n" "1 TITL Title\n" "1 AUTH Author" msgstr "" "0 SOUR\n" "1 REFN\n" "1 TITL Titre\n" "1 AUTH Auteur" #: src/gedlib/messages.c:314 msgid "" "0 EVEN\n" "1 REFN\n" "1 DATE\n" "1 PLAC\n" "1 INDI\n" " 2 NAME\n" " 2 ROLE\n" "1 SOUR" msgstr "" "0 EVEN\n" "1 REFN\n" "1 DATE\n" "1 PLAC\n" "1 INDI\n" " 2 NAME\n" " 2 ROLE\n" "1 SOUR" #: src/gedlib/messages.c:315 msgid "" "0 XXXX\n" "1 REFN" msgstr "" "0 XXXX\n" "1 REFN" #: src/gedlib/messages.c:319 msgid "The file is as positioned at EOF." msgstr "La fin de fichier est atteinte" #: src/gedlib/messages.c:320 #, c-format msgid "Line %d: This line is empty; EOF?" msgstr "Ligne %d: cette ligne est vide ; fin de fichier ?" #: src/gedlib/messages.c:321 #, c-format msgid "Line %d: This line is too long." msgstr "Ligne %d : cette ligne est trop longue." #: src/gedlib/messages.c:322 #, c-format msgid "Line %d: This line has no level number." msgstr "Ligne %d : cette ligne n'a pas de numéro de niveau." #: src/gedlib/messages.c:323 #, c-format msgid "Line %d: This line is incomplete." msgstr "Ligne %d : cette ligne est incomplète." #: src/gedlib/messages.c:324 #, c-format msgid "Line %d: This line has a bad link." msgstr "Ligne %d : cette ligne a un lien invalide." #: src/gedlib/messages.c:325 #, c-format msgid "Line %d: This line needs white space before tag." msgstr "Ligne %d : il faut une espace avant le tag." #: src/gedlib/messages.c:326 #, c-format msgid "Line %d: This line has an illegal level." msgstr "Ligne %d : cette ligne a un lien illégal." #: src/gedlib/messages.c:327 msgid "The record begins at wrong level." msgstr "L'enregistrement commence à un mauvais niveau." #: src/gedlib/messages.c:330 msgid "" "\n" "Aborting now. Core dump? [y/n]" msgstr "" "\n" "Interruption de programme. Affichage dump ? [y/n]" #: src/gedlib/messages.c:331 msgid "" "Looks like a program was running.\n" "Check file %1 around line %2.\n" msgstr "" "Il semble qu'un programme s'exécute.\n" "Vérifiez le fichier %1 vers la ligne %2\n" #: src/gedlib/messages.c:332 msgid "signal %1: %2" msgstr "signal %1 : 2%" #: src/gedlib/messages.c:334 msgid "SIGNAL 0" msgstr "SIGNAL 0" #: src/gedlib/messages.c:335 msgid "HANGUP" msgstr "HANGUP" #: src/gedlib/messages.c:336 msgid "INTERRUPT" msgstr "INTERRUPT" #: src/gedlib/messages.c:337 msgid "QUIT" msgstr "QUIT" #: src/gedlib/messages.c:338 msgid "ILLEGAL INSTRUCTION" msgstr "INSTRUCTION ILLÉGALE" #: src/gedlib/messages.c:339 msgid "TRACE TRAP" msgstr "TRACE TRAP" #: src/gedlib/messages.c:340 msgid "ABORT" msgstr "ABORT" #: src/gedlib/messages.c:341 msgid "EMT INST" msgstr "EMT INST" #: src/gedlib/messages.c:342 msgid "FLOATING POINT EXCEPTION" msgstr "FLOATING POINT EXCEPTION" #: src/gedlib/messages.c:343 msgid "KILL" msgstr "KILL" #: src/gedlib/messages.c:344 msgid "BUS ERROR" msgstr "BUS ERROR" #: src/gedlib/messages.c:345 msgid "SEGMENTATION ERROR" msgstr "SEGMENTATION ERROR" #: src/gedlib/messages.c:346 msgid "SYSTEM CALL ERROR" msgstr "SYSTEM CALL ERROR" #: src/gedlib/messages.c:347 msgid "PIPE WRITE" msgstr "PIPE WRITE" #: src/gedlib/messages.c:348 msgid "ALARM CLOCK" msgstr "ALARM CLOCK" #: src/gedlib/messages.c:350 msgid "TERMINATE FROM KILL" msgstr "TERMINATE FROM KILL" #: src/gedlib/messages.c:351 msgid "USER SIGNAL 1" msgstr "USER SIGNAL 1" #: src/gedlib/messages.c:352 msgid "USER SIGNAL 2" msgstr "USER SIGNAL 2" #: src/gedlib/messages.c:353 msgid "DEATH OF CHILD" msgstr "DEATH OF CHILD" #: src/gedlib/messages.c:354 msgid "POWER-FAIL RESTART" msgstr "POWER-FAIL RESTART" #: src/gedlib/messages.c:355 msgid "WINDOW CHANGE" msgstr "WINDOW CHANGE" #: src/gedlib/messages.c:356 msgid "Unknown signal" msgstr "Signal inconnu" #: src/gedlib/messages.c:360 msgid "person" msgstr "pers. " #: src/gedlib/messages.c:361 msgid ", of " msgstr ", de " #: src/gedlib/messages.c:362 msgid "father" msgstr "père " #: src/gedlib/messages.c:363 msgid "mother" msgstr "mère " #: src/gedlib/messages.c:364 msgid "spouse" msgstr "conj. " #: src/gedlib/messages.c:365 msgid "child" msgstr "enfant" #: src/gedlib/messages.c:368 msgid "m. " msgstr "x " #: src/gedlib/messages.c:370 msgid "div. " msgstr "div. " #: src/gedlib/messages.c:372 msgid "b. " msgstr "° " #: src/gedlib/messages.c:374 msgid "bap. " msgstr "b. " #: src/gedlib/messages.c:376 msgid "d. " msgstr "+ " #: src/gedlib/messages.c:378 msgid "bur. " msgstr "(+) " #: src/gedlib/messages.c:380 msgid "cb. " msgstr "ne. " #: src/gedlib/messages.c:382 msgid "married: " msgstr " x : " #: src/gedlib/messages.c:383 msgid "born: " msgstr " ° : " #: src/gedlib/messages.c:384 msgid "bapt: " msgstr " b. : " #: src/gedlib/messages.c:385 msgid "died: " msgstr " + : " #: src/gedlib/messages.c:386 msgid "buri: " msgstr "(+) : " #: src/gedlib/messages.c:390 msgid "You cannot edit the INDI line in a person record." msgstr "" "Vous ne pouvez pas modifier la ligne INDI d'un enregistrement individuel." #: src/gedlib/messages.c:391 msgid "You cannot edit the FAMC line in a person record." msgstr "" "Vous ne pouvez pas modifier la ligne FAMC d'un enregistrement individuel." #: src/gedlib/messages.c:392 msgid "You cannot edit the FAMS lines in a person record." msgstr "" "Vous ne pouvez pas modifier la ligne FAMS d'un enregistrement individuel." #: src/gedlib/messages.c:393 msgid "You cannot edit the FAM line in a family record." msgstr "" "Vous ne pouvez pas modiifier la ligne FAM d'un enregistrement familial." #: src/gedlib/messages.c:394 msgid "You cannot edit the HUSB line in a family record." msgstr "" "Vous ne pouvez pas modifier la ligne HUSB d'un enregistrement familial." #: src/gedlib/messages.c:395 msgid "You cannot edit the WIFE line in a family record." msgstr "" "Vous ne pouvez pas modifier la ligne WIFE d'un enregistrement familial." #: src/gedlib/messages.c:396 msgid "You cannot edit the CHIL lines in a family record." msgstr "" "Vous ne pouvez pas modifier les lignes CHIL d'un enregistrement familial." #: src/gedlib/messages.c:397 msgid "The record is empty." msgstr "L'enregistrement est vide." #: src/gedlib/messages.c:398 msgid "The record does not begin with an INDI line." msgstr "L'enregistrement ne commence pas par une ligne INDI." #: src/gedlib/messages.c:399 msgid "The record does not begin with a FAM line." msgstr "L'enregistrement ne commence pas par une ligne FAM." #: src/gedlib/messages.c:400 msgid "The record does not begin with a SOUR line." msgstr "L'enregistrement ne commence pas par une ligne SOUR." #: src/gedlib/messages.c:401 msgid "The record does not begin with an EVEN line." msgstr "L'enregistrement ne commence pas par une ligne EVEN." #: src/gedlib/messages.c:402 msgid "INDI, FAM, SOUR, EVEN records may not be other records." msgstr "INDI, FAM, SOUR, EVEN ne peuvent être des enregistrements divers." #: src/gedlib/messages.c:403 msgid "The record contains multiple level 0 lines." msgstr "L'enregistrement contient plusieurs lignes de niveau 0." #: src/gedlib/messages.c:404 msgid "This person record has bad GEDCOM name syntax." msgstr "Cet enregistrent individuel a une syntaxe nom GEDCOM incorrecte." #: src/gedlib/messages.c:405 msgid "You cannot change the sex of a parent." msgstr "Vous ne pouvez pas modifier le sexe d'un parent." #: src/gedlib/messages.c:406 msgid "REFN key is already in use." msgstr "Clé REFN déjà utilisée." #: src/gedlib/messages.c:408 msgid "Tag is too long to connect automatically." msgstr "Tag trop long pour connection automatique." #: src/gedlib/messages.c:410 msgid "Database records" msgstr "Enregistrements de la base" #: src/gedlib/messages.c:411 #, c-format msgid "%dI, %dF, %dS, %dE, %dX" msgstr "%dI, %dF, %dS, %dE, %dX" #: src/gedlib/messages.c:414 #, c-format msgid "LifeLines %s - Genealogical DB and Programming System" msgstr "LifeLines %s - SGBD généalogique et système de programmation" #: src/gedlib/messages.c:415 msgid "Copyright(c) 1991 to 1996, by T. T. Wetmore IV" msgstr "Copyright © de 1991 à 1996, par T. T. Wetmore IV" #: src/gedlib/messages.c:416 #, c-format msgid "Current Database - %s" msgstr "Base ouverte - %s" #: src/gedlib/messages.c:418 msgid " (immutable)" msgstr " (multi-utilisateurs)" #: src/gedlib/messages.c:420 msgid " (read only)" msgstr " (lecture seule)" #: src/gedlib/messages.c:421 msgid "Please choose an operation:" msgstr "Choisissez une opération :" #: src/gedlib/messages.c:422 msgid "Not valid command" msgstr "Commande invalide" #: src/gedlib/messages.c:425 msgid "enter y (yes) or n (no): " msgstr "entrez o (oui) ou n (non) :" #: src/gedlib/messages.c:426 msgid "yYnN" msgstr "oOnN" #: src/gedlib/messages.c:427 msgid "yY" msgstr "oO" #: src/gedlib/messages.c:430 msgid "LifeLines -- Person Browse Screen (* toggles menu)" msgstr "LifeLines -- Écran individu (* cacher/montrer menu)" #: src/gedlib/messages.c:431 msgid "LifeLines -- Family Browse Screen (* toggles menu)" msgstr "LifeLines -- Écran famille (* cacher/montrer menu)" #: src/gedlib/messages.c:432 msgid "LifeLines -- Two Person Browse Screen (* toggles menu)" msgstr "Lifelines -- Écran deux individus (* cacher/montrer menu)" #: src/gedlib/messages.c:433 msgid "LifeLines -- Two Family Browse Screen (* toggles menu)" msgstr "LifeLines -- Écran deux familles (* cacher/montrer menu)" #: src/gedlib/messages.c:434 msgid "LifeLines -- Auxiliary Browse Screen (* toggles menu)" msgstr "LifeLines -- Écran auxiliaire (* cacher/montrer menu)" #: src/gedlib/messages.c:435 msgid "LifeLines -- List Browse Screen (* toggles menu)" msgstr "LifeLines -- Écran sélection par liste (* cacher/montrer menu)" #: src/gedlib/messages.c:439 msgid "Commands: Select by number, u Page Up, d Page Down, i Select, q Quit" msgstr "" "Commandes : Sélect. par nombre, u Page préc., d Page suiv., i Sélect., q " "Quitter" #: src/gedlib/messages.c:440 msgid "Commands: u Page Up, d Page Down, q Quit" msgstr "Commandes : u Page préc., d Page suiv., q Quitter" #: src/gedlib/messages.c:441 msgid "Messages:" msgstr "Messages :" #: src/gedlib/messages.c:444 msgid "Please choose from the following options:" msgstr "Choisir une des options suivantes :" #: src/gedlib/messages.c:445 #, c-format msgid "New record is %s" msgstr "Le Nouvel enregistrement est %s" #: src/gedlib/messages.c:446 msgid "Insert xref automatically at bottom of current record." msgstr "Insérer automatiquement un xref à la fin de chaque enregistrement." #: src/gedlib/messages.c:447 msgid "Edit current record now to add xref manually." msgstr "Modifier l'enregistrement en cours pour ajouter manuellement un xref." #: src/gedlib/messages.c:448 msgid "Browse new record (without adding xref)." msgstr "Atteindre un nouvel enregistrement (sans ajouter de xref)." #: src/gedlib/messages.c:449 msgid "Return to current record (without adding xref)." msgstr "Retour à l'enregistrement courant (sans ajouter de xref)." #: src/gedlib/messages.c:452 msgid "Spouse unknown" msgstr "Conjoint inconnu" #: src/gedlib/messages.c:453 msgid "No more history" msgstr "Pas d'autre historique" #: src/gedlib/messages.c:454 msgid "Bad history count" msgstr "Mauvais compteur d'historique" #: src/gedlib/messages.c:455 msgid "Bad backup history count" msgstr "Mauvais compteur de sauvegarde d'historique" #: src/gedlib/messages.c:456 msgid "Bad history length" msgstr "Mauvaise longueur d'historique" # c-format #: src/gedlib/messages.c:457 #, c-format msgid "Delete history (%d entries)?" msgstr "Supprimer l'historique (%d entrées) ?" #: src/gedlib/messages.c:458 msgid "Error accessing data" msgstr "Erreur d'accès aux données" #: src/gedlib/messages.c:459 msgid "Choose from history" msgstr "Sélectionnez depuis l'historique" #: src/gedlib/messages.c:460 msgid "" "Cannot combine immutable (-i) or read-only (-r) with read-write (-w) access." msgstr "" "Les options multi-utilisateurs (i) ou lecture-seule (r) sont incompatibles " "avec l'accès en lecture-écriture (-w)." #: src/gedlib/messages.c:461 msgid "Cannot combine forceopen (-f) and lock (-l) flags." msgstr "Les options ouverture forcée (-f) et blocage (-l) sont incompatibles." #: src/gedlib/messages.c:462 msgid "Default path: " msgstr "Chemin par défaut :" #: src/gedlib/messages.c:463 msgid "WARNING: missing keys" msgstr "ATTENTION : clés manquantes" #: src/gedlib/messages.c:464 msgid "This does not point to another record in the database!" msgstr "Cela ne pointe pas vers un enregistrement divers de la base !" #: src/gedlib/messages.c:465 msgid "enter file name" msgstr "entrez le nom du fichier" #: src/gedlib/messages.c:466 #, c-format msgid "enter file name (*%s)" msgstr "entrez le nom du fichier (*%s)" #: src/gedlib/messages.c:467 msgid "There is no record with that key or reference." msgstr "Il n'y a pas d'enregistrement avec cette clé ou référence" #: src/gedlib/messages.c:468 msgid "Database was corrupt." msgstr "La base est corrompue." #: src/gedlib/messages.c:471 msgid "Bad decimal number format." msgstr "Mauvais format numérique décimal." #: src/gedlib/messages.c:472 msgid "Bad hexidecimal number format." msgstr "Mauvais format numérique hexadécimal." #: src/gedlib/messages.c:473 msgid "No replacement string on line." msgstr "Pas de chaîne de substitution sur la ligne." #: src/gedlib/messages.c:474 msgid "No original string on line." msgstr "Pas de chaîne d'origine sur la ligne." #: src/gedlib/messages.c:475 msgid "Bad escape format." msgstr "Mauvais format d'échappement." #: src/gedlib/messages.c:476 #, c-format msgid "%s: line %d (entry %d): %s" msgstr "%s: ligne %d (entrée %d) : %s" #: src/gedlib/messages.c:479 src/liflines/brwsmenu.c:26 msgid "q Return to main menu" msgstr "q Ret. menu principal" #: src/gedlib/messages.c:480 msgid "q Return to previous menu" msgstr "q Retour au menu précédent" #: src/gedlib/messages.c:481 msgid "q Quit program" msgstr "q Quitter le programme" #: src/gedlib/messages.c:482 msgid "Q Quit current database" msgstr "Q Changer de base" #: src/gedlib/messages.c:485 msgid "b Browse the persons in the database" msgstr "b Parcourir les personnes dans la base" #: src/gedlib/messages.c:486 msgid "s Search database" msgstr "s Chercher dans la base" #: src/gedlib/messages.c:487 msgid "a Add information to the database" msgstr "a Ajouter une information dans la base" #: src/gedlib/messages.c:488 msgid "d Delete information from the database" msgstr "d Supprimer une information dans la base" #: src/gedlib/messages.c:489 msgid "r Generate report by entering report name" msgstr "r Générer un rapport en saisissant son nom" #: src/gedlib/messages.c:490 msgid "p Pick a report from list and run" msgstr "p Choisir un rapport dans la liste et l'exécuter" #: src/gedlib/messages.c:491 msgid "c Character set options" msgstr "c Options de jeu de caractères" #: src/gedlib/messages.c:492 msgid "t Modify character translation tables" msgstr "t Modifier les tables de correspondance de caractères" #: src/gedlib/messages.c:493 msgid "u Miscellaneous utilities" msgstr "u Utilitaires divers" #: src/gedlib/messages.c:494 msgid "x Handle source, event and other records" msgstr "x Gérer les enregistrements sources, événements et divers" #: src/gedlib/messages.c:497 msgid "What utility do you want to perform?" msgstr "Quel utilitaire voulez-vous utiliser ?" #: src/gedlib/messages.c:498 msgid "s Save the database in a GEDCOM file" msgstr "s Exporter la base dans un fichier GEDCOM" #: src/gedlib/messages.c:499 msgid "r Read in data from a GEDCOM file" msgstr "r Importer un fichier GEDCOM dans la base" #: src/gedlib/messages.c:500 msgid "R Pick a GEDCOM file and read in" msgstr "R Choisir un fichier GEDCOM et le lire" #: src/gedlib/messages.c:501 msgid "k Find a person's key value" msgstr "k Rechercher la valeur de clé d'une personne" #: src/gedlib/messages.c:502 msgid "i Identify a person from key value" msgstr "i Identifier une personne depuis une valeur de clé" #: src/gedlib/messages.c:503 msgid "d Show database statistics" msgstr "d Voir les statistiques de la base" #: src/gedlib/messages.c:504 msgid "m Show memory statistics" msgstr "m Voir les statistiques mémoire" #: src/gedlib/messages.c:505 msgid "e Edit the place abbreviation file" msgstr "e Modifier le fichier des abréviations des lieux" #: src/gedlib/messages.c:506 msgid "o Edit the user options file" msgstr "o Modifier le fichier d'options utilisateur" #: src/gedlib/messages.c:509 msgid "What activity do you want to perform?" msgstr "Quelle opération voulez-vous effectuer ?" #: src/gedlib/messages.c:510 msgid "s Browse source records" msgstr "s Parcourir les enregistrements source" #: src/gedlib/messages.c:511 msgid "e Browse event records" msgstr "e Parcourir les enregistrements événement" #: src/gedlib/messages.c:512 msgid "x Browse other records" msgstr "x Parcourir les enregistrements divers" #: src/gedlib/messages.c:513 msgid "1 Add a source record to the database" msgstr "1 Ajouter un enregistrement source dans la base" #: src/gedlib/messages.c:514 msgid "2 Edit source record from the database" msgstr "2 Modifier un enregistrement source dans la base" #: src/gedlib/messages.c:515 msgid "3 Add an event record to the database" msgstr "3 Ajouter un enregistrement événement dans la base" #: src/gedlib/messages.c:516 msgid "4 Edit event record from the database" msgstr "4 Modifier un enregistrement événement dans la base" #: src/gedlib/messages.c:517 msgid "5 Add an other record to the database" msgstr "5 Ajouter un enregistrement divers dans la base" #: src/gedlib/messages.c:518 msgid "6 Edit other record from the database" msgstr "6 Modifier un enregistrement divers dans la base" #: src/gedlib/messages.c:521 msgid "Translation Tables" msgstr "Table de correspondance" #: src/gedlib/messages.c:522 msgid "e edit individual tables (in db)" msgstr "e modifier une table individuelle (dans la base)" #: src/gedlib/messages.c:523 msgid "l load a table from a file (into db)" msgstr "l charger une table depuis un fichier (dans la base)" #: src/gedlib/messages.c:524 msgid "s save a table to a file (from db)" msgstr "s enregistrer une table dans un fichier (depuis la base)" #: src/gedlib/messages.c:525 msgid "x export all tables (from db to files)" msgstr "x exporter toutes les tables" #: src/gedlib/messages.c:526 msgid "i import all tables (from files into db)" msgstr "i importer toutes les tables" #: src/gedlib/messages.c:527 msgid "export/import directory:" msgstr "répertoire d'import/export :" #: src/gedlib/messages.c:530 msgid "Which character mapping do you want to edit?" msgstr "Quelle table de caractères voulez-vous modifier ?" #: src/gedlib/messages.c:531 msgid "Which character mapping do you want to save?" msgstr "Quelle table de caractères voulez-vous enregistrer ?" #: src/gedlib/messages.c:534 msgid "Not implemented yet" msgstr "Pas encore implémenté" #: src/gedlib/messages.c:537 msgid "What do you want to add?" msgstr "Que voulez-vous ajouter ?" #: src/gedlib/messages.c:538 msgid "p Person - add new person to the database" msgstr "p Personne - ajouter une personne dans la base" #: src/gedlib/messages.c:539 msgid "f Family - create family record from one or two spouses" msgstr "f Famille - ajouter une famille dans la base" #: src/gedlib/messages.c:540 msgid "c Child - add a child to an existing family" msgstr "c Enfant - ajouter un enfant à une famille existante" #: src/gedlib/messages.c:541 msgid "s Spouse - add a spouse to an existing family" msgstr "s Conjoint - ajouter un conjoint à une famille existante" #: src/gedlib/messages.c:544 msgid "What do you want to remove?" msgstr "Que voulez-vous supprimer ?" #: src/gedlib/messages.c:545 msgid "c Child - remove a child from his/her family" msgstr "c Enfant - Supprimer un enfant de sa famille" #: src/gedlib/messages.c:546 msgid "s Spouse - remove a spouse from a family" msgstr "s Conjoint - supprimer un conjoint d'une famille" #: src/gedlib/messages.c:547 msgid "i Individual - remove a person completely" msgstr "i Individu - supprimer complètement une personne" #: src/gedlib/messages.c:548 msgid "f Family - remove a family completely" msgstr "f Famille - supprimer complètement une famille" #: src/gedlib/messages.c:549 msgid "o Other - remove other record completely" msgstr "o Divers - supprimer complètement un enregistrement divers" #: src/gedlib/messages.c:552 msgid "How would you like to find a record?" msgstr "Comment voulez-vous retrouver un enregistrement ?" #: src/gedlib/messages.c:555 msgid "Performing full name scan" msgstr "En cours : recherche nom complet" #: src/gedlib/messages.c:556 msgid "Performing name fragment scan" msgstr "En cours : recherche sur une partie du nom" #: src/gedlib/messages.c:557 msgid "Performing refn scan" msgstr "En cours : recherche refn" #: src/gedlib/messages.c:558 msgid "Performing source scan" msgstr "En cours : recherche source" #: src/gedlib/messages.c:559 msgid "No records found in scan" msgstr "Pas d'enregistrement trouvé dans la recherche" #: src/gedlib/messages.c:562 msgid "abt %1" msgstr "ca %1" #: src/gedlib/messages.c:563 msgid "about %1" msgstr "circa %1" #: src/gedlib/messages.c:564 msgid "est %1" msgstr "est %1" #: src/gedlib/messages.c:565 msgid "estimated %1" msgstr "estimé %1" #: src/gedlib/messages.c:566 msgid "cal %1" msgstr "cal %1" #: src/gedlib/messages.c:567 msgid "calculated %1" msgstr "calculé %1" #: src/gedlib/messages.c:568 msgid "fr %1" msgstr "dep. %1" #: src/gedlib/messages.c:569 msgid "from %1" msgstr "depuis %1" #: src/gedlib/messages.c:570 src/gedlib/messages.c:571 msgid "to %1" msgstr "jsq %1" #: src/gedlib/messages.c:572 msgid "fr %1 to %2" msgstr "de %1 à %2" #: src/gedlib/messages.c:573 msgid "from %1 to %2" msgstr "de %1 à %2" #: src/gedlib/messages.c:574 msgid "bef %1" msgstr "av. %1" #: src/gedlib/messages.c:575 msgid "before %1" msgstr "avant %1" #: src/gedlib/messages.c:576 msgid "aft %1" msgstr "ap. %1" #: src/gedlib/messages.c:577 msgid "after %1" msgstr "après %1" #: src/gedlib/messages.c:578 msgid "bet %1 and %2" msgstr " %1 / %2" #: src/gedlib/messages.c:579 msgid "between %1 and %2" msgstr "entre %1 et %2" #: src/gedlib/messages.c:582 msgid "B.C." msgstr "avant JC" #: src/gedlib/messages.c:584 msgid "BC" msgstr "av JC" #: src/gedlib/messages.c:586 msgid "B.C.E." msgstr "B.C.E." #: src/gedlib/messages.c:588 msgid "BCE" msgstr "BCE" #: src/gedlib/messages.c:590 msgid "A.D." msgstr "après JC" #: src/gedlib/messages.c:592 msgid "AD" msgstr "ap JC" #: src/gedlib/messages.c:594 msgid "C.E." msgstr "C.E." #: src/gedlib/messages.c:596 msgid "CE" msgstr "CE" #: src/gedlib/messages.c:599 msgid "%1J" msgstr "%1 J" #: src/gedlib/messages.c:601 msgid "%1 HEB" msgstr "%1 HEB" #: src/gedlib/messages.c:603 msgid "%1 FR" msgstr "%1" #: src/gedlib/messages.c:605 msgid "%1 AUC" msgstr "%1 AUC" #: src/gedlib/messages.c:607 msgid "jan" msgstr "janv" #: src/gedlib/messages.c:608 msgid "january" msgstr "janvier" #: src/gedlib/messages.c:609 msgid "feb" msgstr "févr" #: src/gedlib/messages.c:610 msgid "february" msgstr "février" #: src/gedlib/messages.c:611 msgid "mar" msgstr "mars" #: src/gedlib/messages.c:612 msgid "march" msgstr "mars" #: src/gedlib/messages.c:613 msgid "apr" msgstr "avri" #: src/gedlib/messages.c:614 msgid "april" msgstr "avril" #: src/gedlib/messages.c:616 msgid "**may" msgstr "mai" #: src/gedlib/messages.c:617 msgid "may" msgstr "mai" #: src/gedlib/messages.c:618 msgid "jun" msgstr "juin" #: src/gedlib/messages.c:619 msgid "june" msgstr "juin" #: src/gedlib/messages.c:620 msgid "jul" msgstr "juil" #: src/gedlib/messages.c:621 msgid "july" msgstr "juillet" #: src/gedlib/messages.c:622 msgid "aug" msgstr "août" #: src/gedlib/messages.c:623 msgid "august" msgstr "août" #: src/gedlib/messages.c:624 msgid "sep" msgstr "sept" #: src/gedlib/messages.c:625 msgid "september" msgstr "septembre" #: src/gedlib/messages.c:626 msgid "oct" msgstr "octo" #: src/gedlib/messages.c:627 msgid "october" msgstr "octobre" #: src/gedlib/messages.c:628 msgid "nov" msgstr "nove" #: src/gedlib/messages.c:629 msgid "november" msgstr "novembre" #: src/gedlib/messages.c:630 msgid "dec" msgstr "déce" #: src/gedlib/messages.c:631 msgid "december" msgstr "décembre" #: src/gedlib/messages.c:633 msgid "tsh" msgstr "tsh" #: src/gedlib/messages.c:634 msgid "tishri" msgstr "tishri" #: src/gedlib/messages.c:635 msgid "csh" msgstr "csh" #: src/gedlib/messages.c:636 msgid "cheshvan" msgstr "chesvan" #: src/gedlib/messages.c:637 msgid "ksl" msgstr "ksl" #: src/gedlib/messages.c:638 msgid "kislev" msgstr "kislev" #: src/gedlib/messages.c:639 msgid "tvt" msgstr "tvt" #: src/gedlib/messages.c:640 msgid "tevet" msgstr "tevet" #: src/gedlib/messages.c:641 msgid "shv" msgstr "shv" #: src/gedlib/messages.c:642 msgid "shevat" msgstr "shevat" #: src/gedlib/messages.c:643 msgid "adr" msgstr "adr" #: src/gedlib/messages.c:644 msgid "adar" msgstr "adar" #: src/gedlib/messages.c:645 msgid "ads" msgstr "ads" #: src/gedlib/messages.c:646 msgid "adar sheni" msgstr "adar sheni" #: src/gedlib/messages.c:647 msgid "nsn" msgstr "nsn" #: src/gedlib/messages.c:648 msgid "nisan" msgstr "nisan" #: src/gedlib/messages.c:649 msgid "iyr" msgstr "iyr" #: src/gedlib/messages.c:650 msgid "iyar" msgstr "iyar" #: src/gedlib/messages.c:651 msgid "svn" msgstr "svn" #: src/gedlib/messages.c:652 msgid "sivan" msgstr "sivan" #: src/gedlib/messages.c:653 msgid "tmz" msgstr "tmz" #: src/gedlib/messages.c:654 msgid "tamuz" msgstr "tamuz" #: src/gedlib/messages.c:655 msgid "aav" msgstr "aav" #: src/gedlib/messages.c:656 msgid "av" msgstr "av" #: src/gedlib/messages.c:657 msgid "ell" msgstr "ell" #: src/gedlib/messages.c:658 msgid "elul" msgstr "elul" #: src/gedlib/messages.c:660 msgid "vend" msgstr "vend" #: src/gedlib/messages.c:661 msgid "vendemiaire" msgstr "vendémiaire" #: src/gedlib/messages.c:662 msgid "brum" msgstr "brum" #: src/gedlib/messages.c:663 msgid "brumaire" msgstr "brumaire" #: src/gedlib/messages.c:664 msgid "frim" msgstr "frim" #: src/gedlib/messages.c:665 msgid "frimaire" msgstr "frimaire" #: src/gedlib/messages.c:666 msgid "nivo" msgstr "nivô" #: src/gedlib/messages.c:667 msgid "nivose" msgstr "nivôse" #: src/gedlib/messages.c:668 msgid "pluv" msgstr "pluv" #: src/gedlib/messages.c:669 msgid "pluviose" msgstr "pluviôse" #: src/gedlib/messages.c:670 msgid "vent" msgstr "vent" #: src/gedlib/messages.c:671 msgid "ventose" msgstr "ventôse" #: src/gedlib/messages.c:672 msgid "germ" msgstr "germ" #: src/gedlib/messages.c:673 msgid "germinal" msgstr "germinal" #: src/gedlib/messages.c:674 msgid "flor" msgstr "flor" #: src/gedlib/messages.c:675 msgid "floreal" msgstr "floréal" #: src/gedlib/messages.c:676 msgid "prai" msgstr "prai" #: src/gedlib/messages.c:677 msgid "prairial" msgstr "prairial" #: src/gedlib/messages.c:678 msgid "mess" msgstr "mess" #: src/gedlib/messages.c:679 msgid "messidor" msgstr "messidor" #: src/gedlib/messages.c:680 msgid "ther" msgstr "ther" #: src/gedlib/messages.c:681 msgid "thermidor" msgstr "thermidor" #: src/gedlib/messages.c:682 msgid "fruc" msgstr "fruc" #: src/gedlib/messages.c:683 msgid "fructidor" msgstr "fructidor" #: src/gedlib/messages.c:684 msgid "comp" msgstr "comp" #: src/gedlib/messages.c:685 msgid "jour_complementairs" msgstr "jour complémentaire" #: src/gedlib/node.c:610 msgid "NO NAME" msgstr "NON DÉNOMMÉ" #: src/gedlib/node.c:1167 #, c-format msgid "Node memory leaks:" msgstr "Noeuds-mémoire perdus :" #: src/gedlib/node.c:1170 src/gedlib/record.c:361 src/interp/pvalalloc.c:301 #, c-format msgid "%d item leaked" msgid_plural "%d items leaked" msgstr[0] "%d objet perdu" msgstr[1] "%d objets perdus" #: src/gedlib/record.c:358 #, c-format msgid "Record memory leaks:" msgstr "Enregistrements en mémoire perdus :" #: src/gedlib/remove.c:250 msgid "Families may not yet be removed in this fashion." msgstr "Les familles ne peuvent pas encore être supprimées ainsi." #. TRANSLATORS: Character set conversion from external editor to database internal #: src/gedlib/translat.c:100 msgid "Editor to Internal" msgstr "Éditeur vers Interne" #. TRANSLATORS: Character set conversion from database internal to external editor #: src/gedlib/translat.c:102 msgid "Internal to Editor" msgstr "Interne vers Éditeur" #: src/gedlib/translat.c:103 msgid "GEDCOM to Internal" msgstr "GEDCOM vers Interne" #: src/gedlib/translat.c:104 msgid "Internal to GEDCOM" msgstr "Interne vers GEDCOM" #: src/gedlib/translat.c:105 msgid "Display to Internal" msgstr "Affichage vers Interne" #: src/gedlib/translat.c:106 msgid "Internal to Display" msgstr "Interne vers Affichage" #: src/gedlib/translat.c:107 msgid "Report to Internal" msgstr "Rapport vers Interne" #: src/gedlib/translat.c:108 msgid "Internal to Report" msgstr "Interne vers Rapport" #. TRANSLATORS: key for "Editor to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:119 msgid "menu|trantable|e" msgstr "e" #. TRANSLATORS: key for "Internal to Editor" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:122 msgid "menu|trantable|m" msgstr "m" #. TRANSLATORS: key for "GEDCOM to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:125 msgid "menu|trantable|i" msgstr "i" #. TRANSLATORS: key for "Internal to GEDCOM" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:128 msgid "menu|trantable|x" msgstr "x" #. TRANSLATORS: key for "Display to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:131 msgid "menu|trantable|g" msgstr "g" #. TRANSLATORS: key for "Internal to Display" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:134 msgid "menu|trantable|d" msgstr "d" #. TRANSLATORS: key for "Report to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:137 msgid "menu|trantable|p" msgstr "p" #. TRANSLATORS: key for "Internal to Report" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:140 msgid "menu|trantable|r" msgstr "r" #. TRANSLATORS: db internal translation table note for tt menu #: src/gedlib/translat.c:473 #, c-format msgid " (dbint tt: %s)" msgstr " (dbint tt: %s)" #: src/gedlib/valid.c:75 msgid "This person record does not have a name line." msgstr "Cet enregistrement individuel ne possède pas de ligne nom." #: src/gedlib/xlat.c:347 #, c-format msgid "ttpath get_conversion_dyntt:from <%s> to <%s>: %s" msgstr "ttpath get_conversion_dyntt: de <%s> à <%s> : %s" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 msgid "succeeded" msgstr "réussi" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 msgid "failed" msgstr "échoué" #: src/gedlib/xlat.c:369 #, c-format msgid "ttpath get_subcoding_dyntt from <%s> to subcode <%s>: %s" msgstr "ttpath get_subcoding_dyntt de <%s> au sous-code <%s> : %s" #: src/gedlib/xlat.c:435 msgid "No TTPATH config variable" msgstr "Pas de variable de configuration TTPATH" #: src/gedlib/xlat.c:464 #, c-format msgid "ttpath checking dir <%s>" msgstr "ttpath vérification du répertoire <%s>" #: src/gedlib/xlat.c:478 #, c-format msgid "ttpath file <%s> typed as %d" msgstr "ttpath fichier <%s> saisi comme %d" #: src/gedlib/xlat.c:690 msgid "(no conversion)" msgstr "(pas de conversion)" #. TRANSLATORS: steps in a chain of codeset conversions, eg, Editor-to-Internal #: src/gedlib/xlat.c:713 #, c-format msgid "%d step" msgid_plural "%d steps" msgstr[0] "%d passage" msgstr[1] "%d passages" #: src/gedlib/xreffile.c:400 #, c-format msgid "Corrupt DELETESET %c" msgstr "DELETESET %c corrompu" #: src/gedlib/xreffile.c:425 #, c-format msgid "Tried to add already-deleted record (%ld) to xref (%c)!" msgstr "Tentative d'ajouter l'enreg. supprimé (%ld) au xref (%c) !" #: src/interp/alloc.c:798 #, c-format msgid "Error: file \"%s\": line %d: " msgstr "Erreur : fichier \"%s\" : line %d :" #: src/interp/alloc.c:903 #, c-format msgid "%s: the arg must be an integer." msgstr "%s : l'arg. doit être un entier." #: src/interp/alloc.c:904 #, c-format msgid "%s: the arg #%s must be an integer." msgstr "%s : l'arg. #%s doit être un entier." #: src/interp/alloc.c:905 #, c-format msgid "%s: the arg #%s must be a float." msgstr "%s : l'arg. #%s doit être un décimal." #: src/interp/alloc.c:906 #, c-format msgid "%s: the arg must be a string." msgstr "%s : l'arg. doit être une chaîne." #: src/interp/alloc.c:907 #, c-format msgid "%s: the arg #%s must be a string." msgstr "%s : l'arg. #%s doit être une chaîne." #: src/interp/alloc.c:908 #, c-format msgid "%s: null arg not permissible." msgstr "%s : l'arg. null est interdit." #: src/interp/alloc.c:909 #, c-format msgid "%s: the arg must be a filename." msgstr "%s : l'arg. doit être un nom de fichier." #: src/interp/alloc.c:910 #, c-format msgid "%s: the arg must be a node or string." msgstr "%s : l'arg. doit être un noeud ou une chaîne." #: src/interp/alloc.c:911 #, c-format msgid "%s: the arg must be a person." msgstr "%s : l'arg. doit être une personne" #: src/interp/alloc.c:912 #, c-format msgid "%s: the arg #%s must be a person." msgstr "%s : l'arg. #%s doit être une personne." #: src/interp/alloc.c:913 #, c-format msgid "%s: the arg must be a family." msgstr "%s : l'arg. doit être une famille." #: src/interp/alloc.c:914 #, c-format msgid "%s: the arg #%s must be a family." msgstr "%s : l'arg. #%s doit être une famille." #: src/interp/alloc.c:915 #, c-format msgid "%s: the arg #%s must be a record." msgstr "%s : l'arg. #%s doit être un enregistrement." #: src/interp/alloc.c:916 #, c-format msgid "%s: the arg must be a node." msgstr "%s : l'arg. doit être un noeud." #: src/interp/alloc.c:917 #, c-format msgid "%s: the arg #%s must be a node." msgstr "%s : l'arg. #%s doit être un noeud." #: src/interp/alloc.c:918 #, c-format msgid "%s: the arg must be a variable." msgstr "%s : l'arg. doit être une variable." #: src/interp/alloc.c:919 #, c-format msgid "%s: the arg #%s must be a variable." msgstr "%s : l'arg. #%s doit être une variable." #: src/interp/alloc.c:920 #, c-format msgid "%s: the arg #%s must be a boolean." msgstr "%s : l'arg. #%s doit être un booléen." #: src/interp/alloc.c:921 #, c-format msgid "%s: the arg must be a list." msgstr "%s : l'arg. doit être une liste." #: src/interp/alloc.c:922 #, c-format msgid "%s: the arg #%s must be a list." msgstr "%s : l'arg. #%s doit être une liste." #: src/interp/alloc.c:923 #, c-format msgid "%s: the arg #%s must be a table." msgstr "%s : l'arg. #%s doit être une table." #: src/interp/alloc.c:924 #, c-format msgid "%s: the arg must be a set." msgstr "%s : l'arg. doit être une liste." #: src/interp/alloc.c:925 #, c-format msgid "%s: the arg #%s must be a set." msgstr "%s : l'arg. #%s doit être une liste." #: src/interp/alloc.c:926 #, c-format msgid "%s: Bad arguments" msgstr "%s : mauvais paramètres" #: src/interp/alloc.c:927 #, c-format msgid "%s: the arg had a major error." msgstr "%s : l'arg a une erreur majeure." #: src/interp/alloc.c:928 #, c-format msgid "%s: the arg #%s had a major error." msgstr "%s : l'arg #%s a une erreur majeure." #: src/interp/alloc.c:929 #, c-format msgid "%s: the arg #%s would cause an arithmetic exception." msgstr "%s : l'arg. #%s a causé une exception arithmétique." #: src/interp/builtin.c:111 msgid "Enter integer for program" msgstr "Entrez un entier pour le programme" #: src/interp/builtin.c:181 msgid "Identify person for program:" msgstr "Sélectionnez une personne pour le programme :" #: src/interp/builtin.c:206 msgid "Enter a spouse from family." msgstr "Entrez le conjoint de la famille" #: src/interp/builtin.c:207 msgid "Enter a sibling from family." msgstr "Entrez un enfant de la famille." #: src/interp/builtin.c:240 msgid "Identify list of persons for program:" msgstr "Identifiez une liste de personnes pour le programme :" #: src/interp/builtin.c:329 msgid "name: person does not have a name" msgstr "name : personne sans nom" #: src/interp/builtin.c:385 msgid "fullname: person does not have a name" msgstr "fullname : personne sans nom" #: src/interp/builtin.c:412 msgid "surname: person does not have a name" msgstr "surname : personne sans nom" #: src/interp/builtin.c:437 msgid "soundex: person does not have a name" msgstr "soundex: personne sans nom" #: src/interp/builtin.c:500 #, c-format msgid "Bad escape code at offset %d in bytecode string <%s>" msgstr "Séquence d'échappement invalide en position %d dans la chaîne <%s>" #: src/interp/builtin.c:643 msgid "(givens) person does not have a name" msgstr "(givens) personne sans nom" #: src/interp/builtin.c:670 #, c-format msgid "set(%s, ) is invalid" msgstr "l'ensemble(%s, ) est incorrect" #: src/interp/builtin.c:1191 msgid "first" msgstr "premier" #: src/interp/builtin.c:1191 msgid "second" msgstr "second" #: src/interp/builtin.c:1191 msgid "third" msgstr "troisième" #: src/interp/builtin.c:1191 msgid "fourth" msgstr "quatrième" #: src/interp/builtin.c:1191 msgid "fifth" msgstr "cinquième" #: src/interp/builtin.c:1192 msgid "sixth" msgstr "sixième" #: src/interp/builtin.c:1192 msgid "seventh" msgstr "septième" #: src/interp/builtin.c:1192 msgid "eighth" msgstr "huitième" #: src/interp/builtin.c:1192 msgid "ninth" msgstr "neuvième" #: src/interp/builtin.c:1192 msgid "tenth" msgstr "dixième" #: src/interp/builtin.c:1193 msgid "eleventh" msgstr "onzième" #: src/interp/builtin.c:1193 msgid "twelfth" msgstr "douzième" #: src/interp/builtin.c:1210 #, c-format msgid "%ldth" msgstr "%ldème" #: src/interp/builtin.c:1220 msgid "zero" msgstr "zéro" #: src/interp/builtin.c:1220 msgid "one" msgstr "un" #: src/interp/builtin.c:1220 msgid "two" msgstr "deux" #: src/interp/builtin.c:1220 msgid "three" msgstr "trois" #: src/interp/builtin.c:1220 msgid "four" msgstr "quatre" #: src/interp/builtin.c:1220 msgid "five" msgstr "cinq" #: src/interp/builtin.c:1221 msgid "six" msgstr "six" #: src/interp/builtin.c:1221 msgid "seven" msgstr "sept" #: src/interp/builtin.c:1221 msgid "eight" msgstr "huit" #: src/interp/builtin.c:1221 msgid "nine" msgstr "neuf" #: src/interp/builtin.c:1221 msgid "ten" msgstr "dix" #: src/interp/builtin.c:1222 msgid "eleven" msgstr "onze" #: src/interp/builtin.c:1222 msgid "twelve" msgstr "douze" #: src/interp/builtin.c:2173 msgid "the arg to empty is not a list, table or set" msgstr "le paramètre de empty n'est pas une liste, table ou ensemble" #: src/interp/builtin.c:2283 msgid "the arg to length is not a list, table or set" msgstr "le paramètre de length n'est pas une liste, table ou ensemble" #: src/interp/builtin.c:2470 msgid "He" msgstr "Il" #: src/interp/builtin.c:2470 msgid "he" msgstr "il" #: src/interp/builtin.c:2470 msgid "His" msgstr "Son" #: src/interp/builtin.c:2470 msgid "his" msgstr "son" #: src/interp/builtin.c:2470 msgid "him" msgstr "lui" #: src/interp/builtin.c:2472 msgid "She" msgstr "Elle" #: src/interp/builtin.c:2472 msgid "she" msgstr "elle" #: src/interp/builtin.c:2472 msgid "Her" msgstr "Son" #: src/interp/builtin.c:2472 msgid "her" msgstr "son" #: src/interp/builtin.c:2472 msgid "her_" msgstr "son" #: src/interp/builtin.c:2850 msgid "(trimname) person does not have a name" msgstr "(trimname) la personne n'a pas de nom" #: src/interp/builtin.c:2940 msgid "Sunday" msgstr "dimanche" #: src/interp/builtin.c:2940 msgid "Monday" msgstr "lundi" #: src/interp/builtin.c:2940 msgid "Tuesday" msgstr "mardi" #: src/interp/builtin.c:2941 msgid "Wednesday" msgstr "mercredi" #: src/interp/builtin.c:2941 msgid "Thursday" msgstr "jeudi" #: src/interp/builtin.c:2941 msgid "Friday" msgstr "vendredi" #: src/interp/builtin.c:2941 msgid "Saturday" msgstr "samedi" #: src/interp/eval.c:244 #, c-format msgid "Undefined func: %s" msgstr "Fonction non définie : %s" #: src/interp/eval.c:246 #, c-format msgid "Ambiguous call to func: %s" msgstr "Appel ambigu à la fonction : %s " #: src/interp/interp.c:247 #, c-format msgid "Report not found: %s " msgstr "Rapport non trouvé : %s" #: src/interp/interp.c:258 #, c-format msgid "Error: file <%s> not found" msgstr "Erreur : fichier <%s> non trouvé" #: src/interp/interp.c:316 msgid "Program contains errors.\n" msgstr "Le programme contient des erreurs.\n" #: src/interp/interp.c:323 msgid "Program needs a starting procedure.\n" msgstr "Le programme a besoin d'une procédure de démarrage.\n" #: src/interp/interp.c:340 #, c-format msgid "Proc %s must be called with %d (not %d) parameters." msgstr "La proc. %s doit être appelée avec %d paramètres et non %d." #: src/interp/interp.c:355 msgid "Program is running..." msgstr "Le programme s'exécute..." #: src/interp/interp.c:410 msgid "Program was run successfully.\n" msgstr "Le programme s'est correctement exécuté.\n" #: src/interp/interp.c:414 msgid "Program was cancelled.\n" msgstr "Le programme a été interrompu.\n" #: src/interp/interp.c:416 msgid "Program was not run because of errors.\n" msgstr "Le programme a été interrompu par des erreurs.\n" #: src/interp/interp.c:506 #, c-format msgid "Error: file <%s> not found: %s\n" msgstr "Erreur : fichier <%s> non trouvé : %s\n" #: src/interp/interp.c:538 #, c-format msgid "" "\n" "Report duration %s (ui duration %s)\n" msgstr "" "\n" "Durée du rapport %s (durée ui %s)\n" #: src/interp/interp.c:610 #, c-format msgid "identifier: %s should be a string\n" msgstr "identifieur : %s doit être une chaîne\n" #: src/interp/interp.c:1778 #, c-format msgid "Undefined proc: %s" msgstr "Proc. non définie : %s" #: src/interp/interp.c:1780 #, c-format msgid "Ambiguous call to proc: %s" msgstr "Appel ambigu à la proc. : %s " #: src/interp/interp.c:2017 #, c-format msgid "Duplicate proc %s (lines %d and %d) in report: %s" msgstr "Proc. %s en double (lignes %d et %d) dans le rapport : %s" #: src/interp/interp.c:2047 #, c-format msgid "Duplicate func %s (lines %d and %d) in report: %s" msgstr "Fonct. en double %s (lignes %d et %d) dans le rapport : %s" #: src/interp/interp.c:2110 msgid "This report requires a newer program to run\n" msgstr "Ce rapport nécessite un programme plus récent pour fonctionner\n" #: src/interp/interp.c:2166 #, c-format msgid "Program forgot to unlock %d record" msgid_plural "Program forgot to unlock %d records" msgstr[0] "Le programme n'a pas pu débloquer %d enregistrement" msgstr[1] "Le programme n'a pas pu débloquer %d enregistrements" #: src/interp/intrpseq.c:303 msgid "missing or incorrect value for sort" msgstr "Valeur manquante ou incorrecte pour sort" #: src/interp/lex.c:219 #, c-format msgid "" "String constant overflowing internal buffer tokbuf len=%d, file: %s, start " "line: %ld" msgstr "" "String constant overflowing internal buffer tokbuf len=%d, file: %s, start " "line: %ld" #: src/interp/more.c:648 msgid "Please choose from the following list." msgstr "Choisissez dans la liste suivante." #: src/interp/more.c:685 msgid "Illegal type found in list in menuchoose" msgstr "Type invalide trouvé dans la liste de choix de menu" #: src/interp/more.c:976 msgid "error evaluating arg to lock" msgstr "erreur d'évaluation des paramètres à bloquer" #: src/interp/more.c:982 msgid "null arg in lock" msgstr "paramètre null à bloquer" #: src/interp/more.c:993 msgid "node passed to lock must be inside a record" msgstr "le noeud à bloquer doit appartenir à un enregistrement" #: src/interp/more.c:999 msgid "the arg to lock must be a record or node" msgstr "le paramètre à bloquer doit être un enegistrement ou un noeud" #: src/interp/more.c:1007 msgid "Error: there are 999,999 locks on arg to lock" msgstr "Erreur : il y a 999 999 blocages à effectuer" #: src/interp/more.c:1027 msgid "error evaluating arg to unlock" msgstr "erreur en évaluant les paramètres à débloquer" #: src/interp/more.c:1033 msgid "null arg in unlock" msgstr "paramètre null à débloquer" #: src/interp/more.c:1044 msgid "node passed to unlock must be inside a record" msgstr "le paramètre à débloquer doit être contenu dans un enregistrement" #: src/interp/more.c:1050 msgid "the arg to unlock must be a record or node" msgstr "le paramètre à débloquer doit être un enregistrement ou un noeud" #: src/interp/pvalalloc.c:295 #, c-format msgid "PVALUE memory leak report:" msgstr "Échec mémoire PVALUE :" #: src/interp/pvalmath.c:70 #, c-format msgid "Nonnumeric type to operation %s: %s" msgstr "Type non-numérique pour l'opération %s : %s" #: src/interp/pvalmath.c:85 #, c-format msgid "Illegal value to operation %s: %s" msgstr "Valeur invalide pour l'opération %s : %s" #: src/interp/pvalmath.c:411 #, c-format msgid "%s: not compatible numeric types: %s and %s" msgstr "%s : types numériques incompatibles : %s et %s" #: src/interp/pvalue.c:810 #, c-format msgid "%s: Incomparable types: %s and %s" msgstr "%s : types incomparables : %s et %s" #: src/interp/pvalue.c:907 msgid "NOT PVALUE: NULL!" msgstr "NULL N'ESY PAS UNE PVALUE !" #: src/interp/pvalue.c:911 #, c-format msgid "NOT PVALUE: invalid type=%d)!" msgstr "PVALUE INCORRECTE : type invalide=%d)!" #: src/interp/pvalue.c:949 #, c-format msgid "%d item" msgid_plural "%d items" msgstr[0] "%d élément" msgstr[1] "%d éléments" #: src/interp/pvalue.c:956 #, c-format msgid "%d entry" msgid_plural "%d entries" msgstr[0] "%d entrée" msgstr[1] "%d entrée" #: src/interp/pvalue.c:963 #, c-format msgid "%d record" msgid_plural "%d records" msgstr[0] "%d enregistrenent" msgstr[1] "%d enregistrements" #: src/interp/pvalue.c:970 #, c-format msgid "%d element" msgid_plural "%d elements" msgstr[0] "%d élément" msgstr[1] "%d éléments" #: src/interp/progerr.c:125 msgid "Enter d for debugger, q to quit" msgstr "Entrez d pour déboguer, q pour quitter" #: src/interp/progerr.c:140 #, c-format msgid "Display local (%d var)" msgid_plural "Display locals (%d vars)" msgstr[0] "Afficher variables locales (%d var)" msgstr[1] "Afficher variables locales (%d vars)" #: src/interp/progerr.c:146 #, c-format msgid "Display global (%d var)" msgid_plural "Display globals (%d vars)" msgstr[0] "Afficher variables globales (%d var)" msgstr[1] "Afficher variables globales (%d vars)" #: src/interp/progerr.c:151 #, c-format msgid "Call stack has %d higher level" msgid_plural "Call stack has %d higher levels" msgstr[0] "La pile des appels a %d niveau supérieur" msgstr[1] "La pile des appels a %d niveaux supérieurs" #: src/interp/progerr.c:154 msgid " Go up one level" msgstr " Monter d'un niveau" #: src/interp/progerr.c:160 #, c-format msgid "Call stack has %d lower level" msgid_plural "Call stack has %d lower levels" msgstr[0] "La pile des appels a %d niveau inférieur" msgstr[1] "La pile des appels a %d niveaux inférieurs" #: src/interp/progerr.c:164 msgid " Go down one level" msgstr " Descendre d'un niveau" #: src/interp/progerr.c:169 msgid "Quit debugger" msgstr "Quitter le débogueur" #: src/interp/progerr.c:171 msgid "Report debugger" msgstr "Débogueur de rapports" #: src/interp/progerr.c:175 msgid "Local variables" msgstr "Variables locales" #: src/interp/progerr.c:178 msgid "Global variables" msgstr "Variables globales" #: src/interp/progerr.c:338 msgid "Report cancelled" msgstr "Rapport interrompu" #: src/interp/progerr.c:346 msgid "Report file: " msgstr "Fichier rapport : " #: src/interp/progerr.c:355 #, c-format msgid "Parsing Error at line %d: " msgstr "Erreur d'interprétation en ligne %d :" #: src/interp/progerr.c:357 #, c-format msgid "Runtime Error at line %d: " msgstr "Erreur d'exécution à la ligne %d : " #: src/interp/progerr.c:360 msgid "Aborting: " msgstr "Interruption :" #: src/interp/rassa.c:242 #, c-format msgid "Could not open file %s" msgstr "Impossible d'ouvrir le fichier %s" #: src/interp/rassa.c:271 msgid "Report stopping due to error opening output file" msgstr "Rapport arrêté à cause d'une erreur d'ouverture du fichier de sortie" #: src/interp/rassa.c:273 msgid "Report stopping due to lack of output file" msgstr "Rapport arrêté à cause de l'absence de fichier de sortie" #: src/interp/rassa.c:330 msgid "illegal call to pos." msgstr "Appel invalide à la pos." #: src/interp/rptsort.c:104 msgid "First argument to (r)sort must be list or array" msgstr "Le premier paramètre de (r)sort doit être une liste ou une table." #: src/interp/rptsort.c:117 src/interp/rptsort.c:128 msgid "Arguments to (r)sort must be of same size" msgstr "Les paramètres de (r)sort doivent être de même taille" #: src/interp/rptsort.c:137 msgid "Second argument to (r)sort must be list or array" msgstr "Le second paramètre de (r)sort doit être une liste ou une table." #: src/liflines/add.c:68 #, c-format msgid "There was %d unresolved reference." msgid_plural "There were %d unresolved references." msgstr[0] "Il y a %d référence non résolue." msgstr[1] "Il y a %d références non résolues." #: src/liflines/brwsmenu.c:25 msgid "? Other menu choices" msgstr "? Autres choix" #: src/liflines/brwsmenu.c:69 msgid "e Edit the person" msgstr "e Modifier personne" #: src/liflines/brwsmenu.c:70 msgid "e Edit the family" msgstr "e Modifier famille " #: src/liflines/brwsmenu.c:71 msgid "e Edit record" msgstr "e Modif. enrg" #: src/liflines/brwsmenu.c:72 msgid "e Edit top person" msgstr "e Modif. pers. haut" #: src/liflines/brwsmenu.c:73 msgid "e Edit top family" msgstr "e Modif. famille haut" #: src/liflines/brwsmenu.c:74 msgid "f Browse to father" msgstr "f Atteindre père" #: src/liflines/brwsmenu.c:75 msgid "f Browse top father" msgstr "f Atteindre père haut" #: src/liflines/brwsmenu.c:76 msgid "m Browse to mother" msgstr "m Atteindre mère" #: src/liflines/brwsmenu.c:77 msgid "m Browse top mother" msgstr "m Atteindre mère haut" #: src/liflines/brwsmenu.c:78 msgid "s Browse to spouse/s" msgstr "s Atteindre conjoint" #: src/liflines/brwsmenu.c:79 msgid "s Browse top spouse/s" msgstr "s Att. conjoint/s haut" #: src/liflines/brwsmenu.c:80 msgid "c Browse to children" msgstr "c Atteindre enfants" #: src/liflines/brwsmenu.c:81 msgid "c Browse top children" msgstr "c Att. enfants haut" #: src/liflines/brwsmenu.c:82 msgid "o Browse to older sib" msgstr "o Atteindre f/s aîné" #: src/liflines/brwsmenu.c:83 msgid "y Browse to younger sib" msgstr "y Atteindre f/s cadet" #: src/liflines/brwsmenu.c:84 msgid "g Browse to family" msgstr "g Atteindre famille" #: src/liflines/brwsmenu.c:85 msgid "u Browse to parents" msgstr "u Atteindre parents" #: src/liflines/brwsmenu.c:86 msgid "b Browse to persons" msgstr "b Atteindre personne" #: src/liflines/brwsmenu.c:87 msgid "t Browse to top" msgstr "t Atteindre fen. haut" #: src/liflines/brwsmenu.c:88 msgid "b Browse to bottom" msgstr "b Atteindre fen. bas" #: src/liflines/brwsmenu.c:89 msgid "h Add as spouse" msgstr "h Ajouter comme conjoint" #: src/liflines/brwsmenu.c:90 msgid "i Add as child" msgstr "i Ajouter comme enfant" #: src/liflines/brwsmenu.c:91 msgid "s Add spouse to family" msgstr "s Ajouter épouse" #: src/liflines/brwsmenu.c:92 msgid "a Add child to family" msgstr "a Ajouter enfant" #: src/liflines/brwsmenu.c:93 msgid "a Add family" msgstr "a Ajouter famille" #: src/liflines/brwsmenu.c:94 msgid "x Swap two families" msgstr "x Inverser 2 familles" #: src/liflines/brwsmenu.c:95 msgid "x Swap two children" msgstr "x Inverser 2 enfants" #: src/liflines/brwsmenu.c:97 #, no-c-format msgid "%c Reorder child" msgstr "%c Ordre des enfants" #: src/liflines/brwsmenu.c:98 msgid "x Switch top/bottom" msgstr "x Inverser Haut/Bas" #: src/liflines/brwsmenu.c:99 msgid "n Create new person" msgstr "n Ajouter personne" #: src/liflines/brwsmenu.c:100 msgid "a Create new family" msgstr "a Ajouter famille" #: src/liflines/brwsmenu.c:101 msgid "tt Enter tandem mode" msgstr "tt Mode tandem" #: src/liflines/brwsmenu.c:102 msgid "tt Enter family tandem" msgstr "tt Mode tandem familles" #: src/liflines/brwsmenu.c:103 msgid "zi Browse to indi" msgstr "zi Atteindre pers" #: src/liflines/brwsmenu.c:104 msgid "zz Browse to any" msgstr "zz Atteindre" #: src/liflines/brwsmenu.c:105 msgid "r Remove as spouse" msgstr "r Suppr. conjoint" #: src/liflines/brwsmenu.c:106 msgid "d Remove as child" msgstr "d Suppr. enfant" #: src/liflines/brwsmenu.c:107 msgid "r Remove spouse from" msgstr "r Suppr. lien conjoint" #: src/liflines/brwsmenu.c:108 msgid "d Remove child from" msgstr "d Suppr. lien enfant" #: src/liflines/brwsmenu.c:109 msgid "( Scroll up" msgstr "( Déplac. haut" #: src/liflines/brwsmenu.c:110 msgid ") Scroll down" msgstr ") Déplac. bas" #: src/liflines/brwsmenu.c:111 msgid "] Increase tree depth" msgstr "] Aug. profond. arbre" #: src/liflines/brwsmenu.c:112 msgid "[ Decrease tree depth" msgstr "[ Dim. profond. arbre" #: src/liflines/brwsmenu.c:113 msgid "(t Scroll top up" msgstr "(t Déplac. fh haut" #: src/liflines/brwsmenu.c:114 msgid ")t Scroll top down" msgstr ")t Déplac. fh bas" #: src/liflines/brwsmenu.c:115 msgid "(b Scroll bottom up" msgstr "(b Déplac. fb haut" #: src/liflines/brwsmenu.c:116 msgid ")b Scroll bottom down" msgstr ")b Déplac. fb bas" #: src/liflines/brwsmenu.c:117 msgid "(( Scroll both up" msgstr "(( Déplac. 2f haut" #: src/liflines/brwsmenu.c:118 msgid ")) Scroll both down" msgstr ")) Déplac. 2f bas" #: src/liflines/brwsmenu.c:119 msgid "# Toggle childnos" msgstr "# N° enfants (o/n)" #: src/liflines/brwsmenu.c:120 msgid "!g GEDCOM mode" msgstr "!g Mode GEDCOM" #: src/liflines/brwsmenu.c:121 msgid "!x GEDCOMX mode" msgstr "!x Mode GEDCOMX" #: src/liflines/brwsmenu.c:122 msgid "!t GEDCOMT mode" msgstr "!t Mode GEDCOMT" #: src/liflines/brwsmenu.c:123 msgid "!a Ancestors mode" msgstr "!a Mode ascendants" #: src/liflines/brwsmenu.c:124 msgid "!d Descendants mode" msgstr "!d Mode descendants" #: src/liflines/brwsmenu.c:125 msgid "!n Normal mode" msgstr "!n Mode normal" #: src/liflines/brwsmenu.c:126 msgid "p Pedigree mode" msgstr "p Mode ascendants" #: src/liflines/brwsmenu.c:127 msgid "!! Cycle mode" msgstr "!! Autre mode" #: src/liflines/brwsmenu.c:129 msgid "(1-9) Browse to child" msgstr "(1-9) Atteindre enfant" #: src/liflines/brwsmenu.c:130 msgid "y Turn on sync" msgstr "y Activer sync" #: src/liflines/brwsmenu.c:131 msgid "A Advanced view" msgstr "A Vue détaillée" #: src/liflines/brwsmenu.c:132 msgid "tc Tandem to children" msgstr "tc Tandem enfants" #: src/liflines/brwsmenu.c:133 msgid "tf Tandem to father/s" msgstr "tf Tandem père/s" #: src/liflines/brwsmenu.c:134 msgid "tg Tandem to family/s" msgstr "tg Tandem familles" #: src/liflines/brwsmenu.c:135 msgid "f Browse to fathers" msgstr "f Atteindre pères" #: src/liflines/brwsmenu.c:136 msgid "m Browse to mothers" msgstr "m Atteindre mères" #: src/liflines/brwsmenu.c:137 msgid "tm Tandem to mother/s" msgstr "tm Tandem mères" #: src/liflines/brwsmenu.c:138 msgid "ts Tandem to spouse/s" msgstr "ts Tandem conjoints" #: src/liflines/brwsmenu.c:139 msgid "tu Tandem to parents" msgstr "tu Tandem parents" #: src/liflines/brwsmenu.c:140 msgid "< Enlarge menu area" msgstr "< Agrandir zone menu" #: src/liflines/brwsmenu.c:141 msgid "> Shrink menu area" msgstr "> Réduire zone menu" #: src/liflines/brwsmenu.c:142 msgid "M> More menu cols" msgstr "M> Ajouter cols menu" #: src/liflines/brwsmenu.c:143 msgid "M< Less menu cols" msgstr "M< Suppr. cols menu" #: src/liflines/brwsmenu.c:144 msgid "+ Next in db" msgstr "+ Suivant base" #: src/liflines/brwsmenu.c:145 msgid "- Prev in db" msgstr "- Précédent base" #: src/liflines/brwsmenu.c:146 msgid "d Copy top to bottom" msgstr "d Copier haut vers bas" #: src/liflines/brwsmenu.c:147 msgid "j Merge bottom to top" msgstr "j Fusionner bas à haut" #: src/liflines/brwsmenu.c:148 src/liflines/listui.c:842 msgid "j Move down list" msgstr "j Suivant liste" #: src/liflines/brwsmenu.c:149 src/liflines/listui.c:843 msgid "k Move up list" msgstr "k Précédent liste" #: src/liflines/brwsmenu.c:150 src/liflines/listui.c:844 msgid "e Edit this person" msgstr "e Modif. cette personne" #: src/liflines/brwsmenu.c:151 src/liflines/listui.c:845 msgid "i Browse this person" msgstr "i Atteindre personne" #: src/liflines/brwsmenu.c:152 src/liflines/listui.c:846 msgid "m Mark this person" msgstr "m Marquer personne" #: src/liflines/brwsmenu.c:153 msgid "d Delete from list" msgstr "d Supprimer de la liste" #: src/liflines/brwsmenu.c:154 src/liflines/listui.c:849 msgid "n Name this list" msgstr "n Nommer cette liste" #: src/liflines/brwsmenu.c:155 src/liflines/listui.c:850 msgid "b Browse new persons" msgstr "b Atteindre autres" #: src/liflines/brwsmenu.c:156 src/liflines/listui.c:851 msgid "a Add to this list" msgstr "a Ajouter à la liste" #: src/liflines/brwsmenu.c:157 src/liflines/listui.c:852 msgid "x Swap mark/current" msgstr "x Basculer marque" #: src/liflines/brwsmenu.c:158 msgid "$s List sources" msgstr "$s Liste sources" #: src/liflines/brwsmenu.c:159 msgid "$n List notes" msgstr "$n Liste notes" #: src/liflines/brwsmenu.c:160 msgid "$$ List references" msgstr "$$ Liste références" #: src/liflines/brwsmenu.c:161 msgid "^b History/back" msgstr "&b Préc. historique" #: src/liflines/brwsmenu.c:162 msgid "^f History/fwd" msgstr "&f Suiv. historique" #: src/liflines/brwsmenu.c:163 msgid "^l History list" msgstr "&l Liste historique" #: src/liflines/brwsmenu.c:164 msgid "^c Clear history" msgstr "&c Effacer histor." #: src/liflines/brwsmenu.c:165 msgid "^xb ChngHist/back" msgstr "&xb ChngHist préc." #: src/liflines/brwsmenu.c:166 msgid "^xf ChngHist/fwd" msgstr "&xf ChngHist suiv." #: src/liflines/brwsmenu.c:167 msgid "^xl ChngHist list" msgstr "&xl ChngHist liste" #: src/liflines/brwsmenu.c:168 msgid "^xc Clear ChngHist" msgstr "&xc Eff. ChngHist" #: src/liflines/brwsmenu.c:170 #, no-c-format msgid "%s Add source" msgstr "%s Ajouter source" #: src/liflines/brwsmenu.c:172 #, no-c-format msgid "%e Add event" msgstr "%e Ajouter événement" #: src/liflines/brwsmenu.c:174 #, no-c-format msgid "%o Add other" msgstr "%o Ajouter divers" #: src/liflines/brwsmenu.c:177 msgid "B Browse new family" msgstr "B Atteindre famille" #: src/liflines/brwsmenu.c:490 msgid "Missing title" msgstr "Titre manquant" #: src/liflines/delete.c:85 #, c-format msgid "%d spouse" msgid_plural "%d spouses" msgstr[0] "%d conjoint" msgstr[1] "%d conjoints" #: src/liflines/delete.c:88 #, c-format msgid "%d child" msgid_plural "%d children" msgstr[0] "%d enfant" msgstr[1] "%d enfants" #: src/liflines/error.c:63 src/tools/dbverify.c:1504 msgid "Fatal Error" msgstr "Erreur fatale" #: src/liflines/error.c:66 msgid "FATAL ERROR" msgstr "ERREUR FATALE" #: src/liflines/error.c:70 #, c-format msgid " in file <%s> at line %d\n" msgstr " dans le fichier <%s> à la ligne %d\n" #: src/liflines/error.c:72 src/tools/dbverify.c:1515 msgid "ASSERT failure" msgstr "ASSERT échec" #: src/liflines/import.c:169 msgid "This is not a lineage linked GEDCOM file." msgstr "Ce n'est pas un fichier GEDCOM 'lineage linked'." #: src/liflines/import.c:170 msgid "Proceed anyway?" msgstr "Poursuivre quand même ?" #: src/liflines/import.c:186 msgid "No current internal codeset, so no codeset conversion can be done" msgstr "Pas de jeu de car. interne, aucune conversion ne peut être effectuée" #: src/liflines/import.c:187 msgid "Proceed without codeset conversion?" msgstr "Traiter sans conversion de jeu de caractères ?" #: src/liflines/import.c:204 #, c-format msgid "%d warning during import" msgid_plural "%d warnings during import" msgstr[0] "%d avertissement pendant l'importation" msgstr[1] "%d avertissements pendant l'importation" #: src/liflines/import.c:220 #, c-format msgid "Cannot convert codeset (from <%s> to <%s>)" msgstr "Impossible de convertir le jeu de caractères (de <%s> à <%s>)" #: src/liflines/import.c:223 msgid "Enter codeset to assume (* for none)" msgstr "Entrez le jeu de caractères à utiliser (* aucun)" #: src/liflines/import.c:246 #, c-format msgid "Using original keys, %d deleted record will be in the database." msgid_plural "Using original keys, %d deleted records will be in the database." msgstr[0] "Avec les clés d'origine, il y aura %d enreg. supprimé dans la base." msgstr[1] "" "Avec les clés d'origine, il y aura %d enreg. supprimés dans la base." #: src/liflines/lbrowse.c:219 msgid "Tandom browse only compatible with persons or families." msgstr "Le mode tandem n'est disponible qu'avec des personnes ou familles." #: src/liflines/lines_usage.c:21 #, c-format msgid "%s invokes the Lifelines report execution program without GUI." msgstr "%s lance le programme d'exécution de rapports Lifelines sans IU." #: src/liflines/lines_usage.c:23 #, c-format msgid "%s invokes the Lifelines GUI." msgstr "%s appelle l'interface utilisateur Lifelines" #: src/liflines/lines_usage.c:26 #, c-format msgid "" "Lifelines is a program to manipulate genealogical information\n" "in lineage-linked GEDCOM format. It has a curses interface and a\n" "built-in interpreter for its own genealogical report language.\n" "\n" "It has its own databases, and records are edited directly in GEDCOM\n" "(with an editor of the user's choice). Records store\n" "information about people, families, sources, events, and\n" "other types of data (such as notes). Lifelines includes a\n" "custom report language and comes with a collection of reports." msgstr "" "Lifelines est un programme de manipulation d'informations généalogiques\n" "dans le format GEDCOM 'lineage-linked'. Il possède une interface curses et\n" "un interpréteur intégré pour son langage d'éditions généalogiques.\n" "\n" "Il a ses propres bases, et ses enregistrements sont modifiés directement\n" "au format GEDCOM (avec un éditeur au chois de l'utilisateur). Les\n" "enregistrements contiennent les données concernant les personnes, familles\n" "familles, sources, événements et autres (comme les notes). Lifelines inclut\n" "un langage spéfique d'éditions et est fourni avec un ensemble de rapports." #: src/liflines/lines_usage.c:36 #, c-format msgid "Usage: %s [OPTIONS] [database]" msgstr "Utilisation : %s [OPTIONS] [base]" #: src/liflines/lines_usage.c:38 src/tools/btedit.c:238 #, c-format msgid "Options:" msgstr "Options :" #: src/liflines/lines_usage.c:40 #, c-format msgid "-C[FILE]" msgstr "-C[FICHIER}" #: src/liflines/lines_usage.c:42 #, c-format msgid "Specify configuration file location" msgstr "Indiquez l'emplacement du fichier de configuration" #: src/liflines/lines_usage.c:44 #, c-format msgid "Finnish option (if compiled to allow Finnish option)" msgstr "Option finlandais (si c'est compilé avec l'option)" #: src/liflines/lines_usage.c:46 #, c-format msgid "-I[KEY=VALUE]" msgstr "-I[CLÉ=VALEUR]" #: src/liflines/lines_usage.c:48 #, c-format msgid "Specify a user property (e.g. -ILLEDITOR=gvim)" msgstr "Indiquez une propriété utilisateur (ex -ILLEDITOR=gvim)" #: src/liflines/lines_usage.c:50 #, c-format msgid "log dynamic memory operation (for debugging)" msgstr "trac des opérations de mémoire dynamique (pour mise au point)" #: src/liflines/lines_usage.c:52 #, c-format msgid "-c[TYPE][DIRECT,INDIRECT]" msgstr "-c[TYPE][DIRECT,INDIRECT]" #: src/liflines/lines_usage.c:54 #, c-format msgid "" "supply cache values (eg, -ci400,4000f400,4000 sets direct indi\n" "\t\t& fam caches to 400, and indirect indi & fam caches to 4000)" msgstr "" "indique les valeurs de cache (ex, -ci400,4000f400,4000 fournit\n" "des caches directs de pers. et de fam. à 400, et des caches indirects à 4000)" #: src/liflines/lines_usage.c:57 #, c-format msgid "debug mode (disable signal trapping)" msgstr "mode de déboggage (désactive les 'trappes' de signal)" #: src/liflines/lines_usage.c:59 #, c-format msgid "force open (for recovery from errors or power failure)" msgstr "force l'ouverture (pour reprendre après des erreurs ou une coupure)" #: src/liflines/lines_usage.c:61 #, c-format msgid "open database with immutable access (for use on read-only media)" msgstr "ouvre la base en lecture seule (pour un média en lecture seule)" #: src/liflines/lines_usage.c:63 #, c-format msgid "always show keys (even if REFN available)" msgstr "montre toujours les clés (même si un REFN est disponible)" #: src/liflines/lines_usage.c:65 #, c-format msgid "unlock a database (for correct access on read-write media)" msgstr "débloque une base (pour un accès correct en lecture-écriture)" #: src/liflines/lines_usage.c:67 #, c-format msgid "lock a database (for use on read-only media)" msgstr "bloque une base (pour un média en lecture seule)" #: src/liflines/lines_usage.c:69 #, c-format msgid "do not use traditional family rules" msgstr "ne pas utiliser les règles de famille traditionelle" #: src/liflines/lines_usage.c:71 #, c-format msgid "Specify program output filename (eg, -o/tmp/mytests)" msgstr "Indique le fichier de sortie pu programme (ex : -o/tmp/mestests)" #: src/liflines/lines_usage.c:73 #, c-format msgid "" "open database with read-only access (prohibiting other\n" "\t\twrite access)" msgstr "" "ouvre la base en lecture seule (interdisant les autres\n" "\t\taccès en écriture)" #: src/liflines/lines_usage.c:76 #, c-format msgid "trace function calls in report programs (for debugging)" msgstr "trace les appels de fonction dans les rapports (pour mise au point)" #: src/liflines/lines_usage.c:78 #, c-format msgid "-u[HEIGHT,WIDTH]" msgstr "-u[LARGEUR,HAUTEUR]" #: src/liflines/lines_usage.c:80 #, c-format msgid "" "specify window size (eg, -u120,34 specifies 120 columns\n" "\t\tby 34 rows)" msgstr "" "indique la taille de fenêtre (ex : -u 120,34 donne 120 colonnes\n" "\t\tet 34 lignes" #: src/liflines/lines_usage.c:83 #, c-format msgid "display this help and exit" msgstr "affiche cette aide et sort" #: src/liflines/lines_usage.c:85 #, c-format msgid "open database with writeable access (this is the default)" msgstr "ouvre la base avec un accès en écriture (défaut)" #: src/liflines/lines_usage.c:89 #, c-format msgid "execute a single lifelines report program directly" msgstr "éxécute un programme d'édition lifelines directement" #: src/liflines/lines_usage.c:91 #, c-format msgid "" "Use normal ASCII characters for drawing lines, instead of\n" "\t\tspecial VT100 terminal characters" msgstr "" "Utilise les caratères ASCII normaux pour tracer les lignes, au lieu des\n" "caractères spéciaux de terminal VT100" #: src/liflines/lines_usage.c:94 #, c-format msgid "output version information and exit" msgstr "affiche les informations de version et sort" #: src/liflines/lines_usage.c:96 src/tools/btedit.c:244 #, c-format msgid "Examples:" msgstr "Exemples :" #: src/liflines/lines_usage.c:99 #, c-format msgid "%s myfamily -x eol" msgstr "%s mafamille -e eol" #: src/liflines/lines_usage.c:101 #, c-format msgid "Open the database 'myfamily' with Lifelines" msgstr "Ouvre la base 'mafamille' avec Lifelines" #: src/liflines/lines_usage.c:103 #, c-format msgid "and run the eol.ll report" msgstr "et exécute le rapport eol.ll" #: src/liflines/lines_usage.c:105 #, c-format msgid "%s -f myfamily -x eol" msgstr "%s -f mafamille -x eol" #: src/liflines/lines_usage.c:107 #, c-format msgid "Unlock database 'myfamily', after a power failure left the" msgstr "Débloque la base 'mafamille' après une coupure laissant la" #: src/liflines/lines_usage.c:109 #, c-format msgid "database locked and run 'eol.ll' report" msgstr "base bloquée et lance le rapport 'eol.ll'" #: src/liflines/lines_usage.c:112 #, c-format msgid "%s myfamily" msgstr "%s mafamille" #: src/liflines/lines_usage.c:114 #, c-format msgid "Open database 'myfamily' with Lifelines" msgstr "Ouvre la base 'mafamille' avec Lifelines" #: src/liflines/lines_usage.c:116 #, c-format msgid "%s -f myfamily" msgstr "%s -f mafamille" #: src/liflines/lines_usage.c:118 #, c-format msgid "" "Unlock database 'myfamily', after a power failure left\n" "\t\tthe database locked" msgstr "" "Débloque la base 'mafamille', après une coupure laissant\n" " \t\tla base bloquée" #: src/liflines/lines_usage.c:122 #, c-format msgid "REPORTING BUGS" msgstr "RECENSEMENT DES BOGUES" #: src/liflines/lines_usage.c:124 src/tools/btedit.c:250 #, c-format msgid "Report bugs to lifelines.sourceforge.net" msgstr "Envoyez les bogues à lifefelines.sourceforge.net." #: src/liflines/lines_usage.c:126 #, c-format msgid "COPYRIGHT" msgstr "COPYRIGHT" #: src/liflines/lines_usage.c:131 #, c-format msgid "SEE ALSO" msgstr "VOIR AUSSI" #: src/liflines/listui.c:155 src/liflines/listui.c:252 msgid "Commands: j Move down k Move up i Select q Quit" msgstr "Commandes : j Dépl. bas k Dépl. haut i Sélect. q Quitter" #: src/liflines/listui.c:157 msgid "Commands: j Move down k Move up q Quit" msgstr "Commandes : j Dépl. bas k Dépl. haut q Quitter" #: src/liflines/listui.c:249 msgid "Commands: j Move down k Move up d Delete i Select q Quit" msgstr "Commandes : j Dépl. bas k Dépl. haut d Suppr. i Sélect. q Quitter" #: src/liflines/listui.c:431 msgid "--- CURRENT SELECTION ---" msgstr "--- SÉLECTION EN COURS ---" #: src/liflines/listui.c:434 src/liflines/listui.c:597 msgid "--- LIST ---" msgstr "--- LISTE ---" #: src/liflines/listui.c:628 msgid "-- CURRENT SELECTION --" msgstr "-- SÉLECTION EN COURS --" #: src/liflines/listui.c:840 msgid "Choose an operation:" msgstr "Choisissez une opération :" #: src/liflines/listui.c:847 msgid "r Remove from list" msgstr "r Supprimer de la liste" #: src/liflines/listui.c:848 msgid "t Enter tandem mode" msgstr "t Mode tandem" #: src/liflines/loadsave.c:94 msgid "Person" msgid_plural "Persons" msgstr[0] "personne" msgstr[1] "personnes" #: src/liflines/loadsave.c:98 msgid "Family" msgid_plural "Families" msgstr[0] "famille" msgstr[1] "familles" #: src/liflines/loadsave.c:102 msgid "Source" msgid_plural "Sources" msgstr[0] "source" msgstr[1] "sources" #: src/liflines/loadsave.c:106 msgid "Event" msgid_plural "Events" msgstr[0] "événement" msgstr[1] "événements" #: src/liflines/loadsave.c:110 msgid "Other" msgid_plural "Others" msgstr[0] "divers" msgstr[1] "divers" #: src/liflines/loadsave.c:160 msgid "Checking GEDCOM file for errors.\n" msgstr "Vérification du fichier GEDCOM.\n" #: src/liflines/loadsave.c:163 msgid "Error" msgid_plural "Errors" msgstr[0] "erreur" msgstr[1] "erreurs" #: src/liflines/loadsave.c:169 msgid "Warning" msgid_plural "Warnings" msgstr[0] "avertissement" msgstr[1] "avertissements" #: src/liflines/loadsave.c:184 msgid "The database is read-only; loading has been canceled." msgstr "La base est en lecture seule ; chargement annulé." #: src/liflines/loadsave.c:190 msgid "Adding unused keys as deleted keys..." msgstr "Ajout des clés inutilisées comme des clés supprimées..." #. TRANSLATORS: how long Import ran, and how much of that was UI delay #: src/liflines/loadsave.c:255 #, c-format msgid "Import time %s (ui %s)\n" msgstr "Durée de l'importation %s (durée iu %s)\n" #: src/liflines/loadsave.c:282 msgid "The database was not saved." msgstr "La base n'a pas été enregistrée." #: src/liflines/main.c:385 msgid "Warning: database codeset unspecified" msgstr "Avertissement : base sans jeu de caractères spécifié" #: src/liflines/main.c:387 msgid "Warning: not all conversions available" msgstr "Avertissement : toutes les conversions ne sont pas disponibles" #: src/liflines/menuset.c:155 #, c-format msgid "Menu (%s) choice sequence too long: %s" msgstr "Séquence de choix de menu (%s) trop longue : %s" #: src/liflines/menuset.c:159 #, c-format msgid "Menu (%s) item lacked choice sequence: %s" msgstr "Entrée de menu (%s) invalide avec choix : %s" #: src/liflines/menuset.c:242 src/liflines/menuset.c:254 #, c-format msgid "In menu: %s" msgstr "Dans le menu : %s" #: src/liflines/menuset.c:244 #, c-format msgid "Duplicate hotkey for item: %s" msgstr "Raccourci en double pour entrée : %s" #: src/liflines/menuset.c:247 #, c-format msgid "Clash with longer hotkey in item: %s" msgstr "Collision avec raccourci plus long dans : %s" #: src/liflines/menuset.c:255 #, c-format msgid "Clash with shorter hotkey in item: %s" msgstr "Clash avec raccourci plus court pour entrée : %s" #: src/liflines/merge.c:772 #, c-format msgid "Bad spouse tag: %s" msgstr "Tag de couple incorrect : %s" #: src/liflines/merge.c:800 src/liflines/merge.c:919 #, c-format msgid "Mismatched lineage spouse links between %s and %s: %ld and %ld" msgstr "Liens de couple incorrects entre %s et %s : %ld et %ld" #: src/liflines/merge.c:816 src/liflines/merge.c:935 #, c-format msgid "Bad child tag: %s" msgstr "Tag d'enfant incorrect : %s" #: src/liflines/merge.c:844 src/liflines/merge.c:963 #, c-format msgid "Mismatched lineage child links between %s and %s: %ld and %ld" msgstr "Liens de parenté incorrects entre %s et %s : %ld et %ld" #: src/liflines/merge.c:882 src/liflines/merge.c:891 #, c-format msgid "Bad HUSB tag: %s" msgstr "Tag HUSB (mari) incorrect : %s" #: src/liflines/miscutls.c:51 msgid "Whose key value do you want?" msgstr "Quelle valeur de clé désirez-vous ?" #: src/liflines/miscutls.c:67 msgid "Please enter person's internal key value." msgstr "Entrez la valeur de clé interne d'une personne." #: src/liflines/miscutls.c:68 msgid "enter key:" msgstr "entrez la clé :" #: src/liflines/miscutls.c:78 src/liflines/miscutls.c:82 #: src/liflines/miscutls.c:87 #, c-format msgid "No one in database has key value %s." msgstr "Personne n'a la valeur de clé %s dans la base." #: src/liflines/scan.c:100 msgid "Enter pattern to match against single surname or given name." msgstr "Entrez un motif de recherche pour un seul nom ou surnom." #: src/liflines/scan.c:112 msgid "Enter pattern to match against full name." msgstr "Entrez un motif de recherche pour un nom complet." #: src/liflines/scan.c:128 src/liflines/scan.c:178 src/liflines/scan.c:201 msgid "pattern: " msgstr "motif :" #: src/liflines/scan.c:151 src/liflines/scan.c:165 msgid "Enter pattern to match against author." msgstr "Entrez un motif de recherche pour un auteur." #: src/liflines/screen.c:317 #, c-format msgid "initscr failed" msgstr "échec de initscr" #: src/liflines/screen.c:334 #, c-format msgid "" "The requested window size (%ld,%ld) is too large for your terminal (%d,%d).\n" msgstr "" "La taille de fenêtre utilisée (%ld,%ld) est trop grande pour votre terminal " "(%d,%d).\n" #: src/liflines/screen.c:342 #, c-format msgid "" "The requested window size (%ld,%ld) is too small for LifeLines (%d,%d).\n" msgstr "" "La taille de fenêtre utilisée (%ld,%ld) est trop petite pour LifeLines (%d, %" "d).\n" #: src/liflines/screen.c:706 msgid "Search results" msgstr "Résultats de la recherche" #: src/liflines/screen.c:813 #, c-format msgid "(pg %d/%d)" msgstr "(pg %d/%d)" #: src/liflines/screen.c:1431 msgid "No conversion" msgstr "Pas de conversion" #: src/liflines/screen.c:1517 msgid "Internal codeset" msgstr "Page de codes interne" #: src/liflines/screen.c:1520 msgid "Internal UTF-8: Yes" msgstr "UTF-8 en interne : oui" #: src/liflines/screen.c:1522 msgid "Internal UTF-8: No" msgstr "UTF-8 en interne : non" #: src/liflines/screen.c:1526 msgid "Locales are enabled." msgstr "Locales disponibles." #: src/liflines/screen.c:1528 msgid "Locales are disabled." msgstr "Locales non disponibles." #: src/liflines/screen.c:1531 msgid "NLS (National Language Support) is compiled in." msgstr "NLS (Support de Langage National) inclus." #: src/liflines/screen.c:1537 msgid "NLS (National Language Support) is not compiled in." msgstr "NLS (Support de Langage National) non-inclus." #: src/liflines/screen.c:1550 msgid "iconv (codeset conversion) is compiled in." msgstr "iconv (conversion de code de page) inclus." #: src/liflines/screen.c:1552 msgid "iconv (codeset conversion) is not compiled in." msgstr "iconv (conversion de code de page) non inclus." #: src/liflines/screen.c:1554 #, c-format msgid "Startup collate locale: %s" msgstr "Collate locale au démarrage : %s" #: src/liflines/screen.c:1557 #, c-format msgid "Startup messages locale: %s" msgstr "Message locale au démarrage : %s" #: src/liflines/screen.c:1560 #, c-format msgid "Current collate locale: %s" msgstr "Collate locale courant : %s" #: src/liflines/screen.c:1563 #, c-format msgid "Current messages locale: %s" msgstr "Messages locale courant : %s" #: src/liflines/screen.c:1566 #, c-format msgid "Collation routine: %s" msgstr "Routine de conversion : %s" #: src/liflines/screen.c:1570 #, c-format msgid "GUI codeset: %s" msgstr "Jeu de caractère GUI : %s" #: src/liflines/screen.c:1573 #, c-format msgid "GUI output codeset: %s" msgstr "Jeu de caractères GUI en sortie : %s" #: src/liflines/screen.c:1575 #, c-format msgid "GUI input codeset: %s" msgstr "Jeu de caractères GUI en entrée : %s" #: src/liflines/screen.c:1580 #, c-format msgid "editor codeset: %s" msgstr "Jeu de caractères éditeur : %s" #: src/liflines/screen.c:1583 #, c-format msgid "editor output codeset: %s" msgstr "Jeu de caractères éditeur en sortie : %s" #: src/liflines/screen.c:1585 #, c-format msgid "editor input codeset: %s" msgstr "Jeu de caractères éditeur en entrée : %s" #: src/liflines/screen.c:1590 #, c-format msgid "report codeset: %s" msgstr "Jeu de caractères rapports : %s" #: src/liflines/screen.c:1593 #, c-format msgid "report output codeset: %s" msgstr "Jeu de caractères rapport en sortie : %s" #: src/liflines/screen.c:1595 #, c-format msgid "report input codeset: %s" msgstr "Jeu de caractères rapport en entrée : %s" #: src/liflines/screen.c:1600 #, c-format msgid "GEDCOM codeset: %s" msgstr "Jeu de caractères GEDCOM : %s" #: src/liflines/screen.c:1603 #, c-format msgid "gedcom output codeset: %s" msgstr "Jeu de caractères gedcom en sortie : %s" #: src/liflines/screen.c:1605 #, c-format msgid "gedcom input codeset: %s" msgstr "Jeu de caractères gedcom en entrée : %s" #: src/liflines/screen.c:1613 msgid "UTF-8 charprops loaded" msgstr "Propriétés UTF-8 chargées" #: src/liflines/screen.c:1615 msgid "UTF-8 charprops not loaded" msgstr "Propriétés UTF-8 non chargées" #: src/liflines/screen.c:1619 msgid "Codeset information" msgstr "Information de code de page :" #: src/liflines/screen.c:1636 #, c-format msgid "gettext dll: %s" msgstr "dll gettext : %s" #: src/liflines/screen.c:1640 #, c-format msgid "gettext dll version: %s" msgstr "version dll gettext : %s " #: src/liflines/screen.c:1645 msgid "gettext dll had no version" msgstr "dll gettext sans version" #: src/liflines/screen.c:1650 msgid "no gettext dll found" msgstr "dll gettext non trouvée" #: src/liflines/screen.c:1659 #, c-format msgid "iconv dll: %s" msgstr "dll iconv : %s" #: src/liflines/screen.c:1663 #, c-format msgid "iconv dll version: %s" msgstr "version dll iconv : %s" #: src/liflines/screen.c:1668 msgid "iconv dll had no version" msgstr "dll iconv sans version" #: src/liflines/screen.c:1673 msgid "no iconv dll found" msgstr "dll iconv non trouvée" #: src/liflines/screen.c:1931 msgid "Impermissible to change codeset in a populated database" msgstr "Impossible de modifier le jeu de caractères d'une base non-vide" #: src/liflines/screen.c:2032 msgid "LifeLines -- Main Menu" msgstr "LifeLines -- Menu principal" # c-format #: src/liflines/searchui.c:133 #, c-format msgid "v Review visit history (%d record)" msgid_plural "v Review visit history (%d records)" msgstr[0] "v Parcourir l'historique des visites (%d entrée)" msgstr[1] "v Parcourir l'historique des visites (%d entrées)" #: src/liflines/searchui.c:137 msgid "(visit history is empty)" msgstr "(l'historique des visites est vide)" #: src/liflines/searchui.c:143 #, c-format msgid "c Review change history (%d record)" msgid_plural "c Review change history (%d records)" msgstr[0] "c Parcourir l'historique des modifications (%d entrée)" msgstr[1] "c Parcourir l'historique des modifications (%d entrées)" #: src/liflines/searchui.c:147 msgid "(change history is empty)" msgstr "(l'historique des modifications est vide)" #: src/liflines/searchui.c:151 msgid "f Full database scan" msgstr "f Recherche sur l'ensemble de la base" #: src/liflines/searchui.c:220 msgid "What scan type?" msgstr "Quel type de recherche ?" #: src/liflines/searchui.c:223 msgid "f Full name scan" msgstr "f Recherche nom complet" #: src/liflines/searchui.c:224 msgid "n Name fragment (whitespace-delimited) scan" msgstr "n Rech. par fragment du nom (délimité par des espaces)" #: src/liflines/searchui.c:225 msgid "r Refn scan" msgstr "r Recherche refn" #: src/liflines/searchui.c:226 msgid "s Source scan" msgstr "s Recherche source" #: src/liflines/searchui.c:290 msgid "Scan on what source field?" msgstr "Rech sur quel champ source ?" #: src/liflines/searchui.c:293 msgid "a Scan by author" msgstr "a Rech. par auteur" #: src/liflines/searchui.c:294 msgid "t Scan by title" msgstr "t Rech. par titre" #: src/liflines/selectdb.c:95 msgid "Choose database to open" msgstr "Choisissez la data à ouvrir." #: src/liflines/selectdb.c:103 msgid "No databases found in database path" msgstr "Aucune base trouvée dans le chamin d'accès" #: src/liflines/show.c:123 msgid "born" msgstr " ° " #: src/liflines/show.c:124 src/liflines/show.c:125 msgid "bapt" msgstr " b. " #: src/liflines/show.c:126 msgid "barm" msgstr " b. " #: src/liflines/show.c:127 msgid "basm" msgstr " b. " #: src/liflines/show.c:128 msgid "bles" msgstr "bles" #: src/liflines/show.c:129 msgid "adop" msgstr "adop" #: src/liflines/show.c:130 msgid "resi" msgstr "habi" #: src/liflines/show.c:134 msgid "died" msgstr " + " #: src/liflines/show.c:135 msgid "buri" msgstr "(+) " #: src/liflines/show.c:136 msgid "crem" msgstr "crém" #: src/liflines/show.c:1009 #, c-format msgid "Cached: I:%s; F:%s" msgstr "En cache : I:%s; F:%s" #: src/liflines/valgdcom.c:92 #, c-format msgid "Record %s is referred to but not defined." msgstr "L'enregistrement %s est référencé mais non défini." #: src/liflines/valgdcom.c:93 #, c-format msgid "Line %d: Reference to undefined record %s" msgstr "Ligne %d : référence à un enregistrement non défini %s." #: src/liflines/valgdcom.c:94 #, c-format msgid "Line %d: Tag %s found in unexpected record: %s %s." msgstr "Ligne %d : tag %s non autorisé dans un enregistrement : %s %s. " #: src/liflines/valgdcom.c:190 #, c-format msgid "Line %d: Family has no members (%s %s)." msgstr "Ligne %d : la famille n'a pas de membres (%s %s)." #: src/liflines/valgdcom.c:390 #, c-format msgid "Line %d: The source defined here has no key." msgstr "Ligne %d : la source définie ici n'a pas de clé" #: src/liflines/valgdcom.c:404 #, c-format msgid "Line %d: Source %s has an incorrect key." msgstr "Ligne %d : la source %s a une clé incorrecte." #: src/liflines/valgdcom.c:411 #, c-format msgid "Lines %d and %d: Source %s is multiply defined." msgstr "Lignes %d et %d : la source %s est définie plusieurs fois." #: src/liflines/valgdcom.c:434 #, c-format msgid "Line %d: The event defined here has no key." msgstr "Ligne %d : l'événement défini ici n'a pas de clé." #: src/liflines/valgdcom.c:447 #, c-format msgid "Line %d: Event %s has an incorrect key." msgstr "Ligne %d : l'événement %s a une clé incorrecte." #: src/liflines/valgdcom.c:454 #, c-format msgid "Lines %d and %d: Event %s is multiply defined." msgstr "Lignes %d et %d : l'événement %s est défini plusieurs fois." #: src/liflines/valgdcom.c:477 #, c-format msgid "Line %d: The record defined here has no key." msgstr "Ligne %d : l'enregistrement défini ici n'a pas de clé" #: src/liflines/valgdcom.c:490 #, c-format msgid "Line %d: Record %s has an incorrect key." msgstr "Ligne %d : l'enregistrement %s a une clé incorrecte." #: src/liflines/valgdcom.c:497 #, c-format msgid "Lines %d and %d: Record %s is multiply defined." msgstr "Lignes %d et %d : enregistrement %s défini plusieurs fois." # , c-format #: src/liflines/valgdcom.c:539 #, c-format msgid "Line %d: This %s line is missing a value field (%s %s)." msgstr "Ligne %d : cette %s ligne n'a pas de valeur de champ (%s %s)." #: src/liflines/valgdcom.c:590 #, c-format msgid "Line %d: Bad NAME syntax (%s %s)." msgstr "Ligne %d: mauvaise syntaxe de NAME (%s %s)." #: src/liflines/valgdcom.c:820 #, c-format msgid "Line %d: Person %s has multiple father links." msgstr "Ligne %d : la personne %s a plusieurs liens père." #: src/liflines/valgdcom.c:824 #, c-format msgid "Line %d: Person %s has multiple mother links." msgstr "Ligne %d : la personne %s a plusieurs liens mère." #: src/liflines/valgdcom.c:836 #, c-format msgid "Line %d: Person %s is both male and female." msgstr "Ligne %d : la personne %s est à la fois homme et femme." #: src/liflines/valgdcom.c:840 #, c-format msgid "Line %d: Person %s is male but must be female." msgstr "Ligne %d : la personne %s est homme mais devrait est femme." #: src/liflines/valgdcom.c:844 #, c-format msgid "Line %d: Person %s is female but must be male." msgstr "Ligne %d : la personne %s est femme mais devrait être homme." #: src/liflines/valgdcom.c:848 #, c-format msgid "Line %d: Person %s is implied to be both male and female." msgstr "Ligne %d : la personne %s devrait être à la fois homme et femme." #: src/liflines/valgdcom.c:860 #, c-format msgid "Line %d: Family %s has multiple husband links." msgstr "Ligne %d : la famille %s a plusieurs liens mari." #: src/liflines/valgdcom.c:864 #, c-format msgid "Line %d: Family %s has multiple wife links." msgstr "Ligne %d : la famille %s a plusieurs liens femme." #: src/liflines/valgdcom.c:920 msgid "error" msgstr "erreur" #: src/liflines/valgdcom.c:928 #, c-format msgid "%6d Error" msgid_plural "%6d Errors" msgstr[0] "%6d erreur" msgstr[1] "%6d erreurs" #: src/liflines/valgdcom.c:930 src/liflines/valgdcom.c:958 #, c-format msgid " (see log file <%s>)" msgstr " (voir le fichier trace <%s>)" #: src/liflines/valgdcom.c:932 src/liflines/valgdcom.c:960 msgid " (no log file)" msgstr " (pas de fichier trace)" #: src/liflines/valgdcom.c:948 msgid "warning" msgstr "avertissement" #: src/liflines/valgdcom.c:956 #, c-format msgid "%6d Warning" msgid_plural "%6d Warnings" msgstr[0] "%6d avertissement" msgstr[1] "%6d avertissements" #: src/liflines/valgdcom.c:1067 #, c-format msgid "Processed %d lines without finding end of HEAD" msgstr "%d lignes lues sans trouver la fin de HEAD" #: src/liflines/valgdcom.c:1072 #, c-format msgid "End of file at line %d" msgstr "Fin de fichier à la ligne %d" #: src/liflines/valgdcom.c:1076 #, c-format msgid "Error at line %d: %s" msgstr "Erreur à la ligne %d : %s" #: src/liflines/valgdcom.c:1080 #, c-format msgid "Bad level at line %d" msgstr "Niveau incorrect à la ligne %d" #: src/liflines/valgdcom.c:1086 #, c-format msgid "Duplicate HEAD line at line %d" msgstr "Ligne HEAD en double à la ligne %d" #: src/liflines/valgdcom.c:1092 #, c-format msgid "Missing HEAD line at line %d" msgstr "Ligne HEAD manquante à la ligne %d :" #: src/stdlib/errlog.c:61 #, c-format msgid " in file <%s> at line %d\n" msgstr " dans le fichier <%s> à la ligne %d\n" #: src/stdlib/errlog.c:63 msgid "Current database" msgstr "Base ouverte" #: src/tools/btedit.c:108 #, c-format msgid "btedit requires 2 arguments (btree and key)." msgstr "btedit demande 2 paramètres (arbre et clé)." #: src/tools/btedit.c:110 #, c-format msgid "See `btedit --help' for more information." msgstr "Voir `btedit --help' for plus d'informations." #: src/tools/btedit.c:117 #, c-format msgid "Failed to open btree: %s." msgstr "Impossible d'ouvrir le fichier de clés : %s." #: src/tools/btedit.c:124 #, c-format msgid "There is no record with key: %s" msgstr "Il n'y a pas d'enregistrement avec la clé : %s" #: src/tools/btedit.c:126 #, c-format msgid "Error accessing record: %s" msgstr "Erreur d'accès à l'enregistrement : %s" #: src/tools/btedit.c:135 #, c-format msgid "Editor or system call failed." msgstr "L'éditeur ou un appel-système ont échoué." #: src/tools/btedit.c:137 #, c-format msgid "Database was not be modified." msgstr "La base n'a pas été modifiée." #: src/tools/btedit.c:143 #, c-format msgid "Readonly database can not be modified." msgstr "Une base en lecture seule ne peut être modifiée." #: src/tools/btedit.c:150 #, c-format msgid "Error writing file 'btedit.tmp'." msgstr "Erreur d'écriture du fichier 'btedit.tmp'." #: src/tools/btedit.c:156 #, c-format msgid "Record %s modified." msgstr "L'enregistrement %s a été modifié." #: src/tools/btedit.c:226 msgid "\"\\My Documents\\LifeLines\\Databases\\MyFamily\"" msgstr "\"\\My Documents\\LifeLines\\Databases\\MyFamily\"" #: src/tools/btedit.c:228 src/tools/dbverify.c:232 msgid "/home/users/myname/lifelines/databases/myfamily" msgstr "/home/users/myname/lifelines/databases/myfamily" #: src/tools/btedit.c:231 #, c-format msgid "" "lifelines `btedit' edits raw binary btree blocks\n" "in lifelines database files. Do NOT use this unless\n" "you know what you are doing and you have backed up\n" "your database." msgstr "" "lifelines `btedit' permet de modifier des arbres binaires\n" "dans les bases LifeLines. NE l'utilisez PAS sauf si\n" "vous savez ce que vous faites et possédez une séauvegarde\n" "de votre base." #: src/tools/btedit.c:236 #, c-format msgid "Usage btedit [database] [rkey]" msgstr "Utulisation btedit [base] [clé]" #: src/tools/btedit.c:240 #, c-format msgid "\t--help\tdisplay this help and exit" msgstr "\t--help\taffiche cette aide et sort" #: src/tools/btedit.c:242 #, c-format msgid "\t--version\toutput version information and exit" msgstr "\t --version\taffiche les informations de version et sort" # src/tools/btedit.c:246 #: src/tools/btedit.c:246 #, c-format msgid "\tbtedit %s I34" msgstr "\tbtedit %s I34" #: src/tools/btedit.c:248 #, c-format msgid "edit raw btree block for person I34" msgstr "Modifie l'arbre pour la personne I34" #: src/tools/dbverify.c:175 msgid "Orphan names" msgstr "Noms orphelins" #: src/tools/dbverify.c:176 msgid "Ghost names" msgstr "Noms fantômes" #: src/tools/dbverify.c:177 src/tools/dbverify.c:178 msgid "Duplicate names" msgstr "Noms dupliqués" #: src/tools/dbverify.c:179 msgid "Non-indi names" msgstr "Noms non-individus" #: src/tools/dbverify.c:180 msgid "Duplicate individuals" msgstr "Individus dupliqués" #: src/tools/dbverify.c:181 msgid "Duplicate families" msgstr "Familles dupliquées" #: src/tools/dbverify.c:182 msgid "Duplicate sources" msgstr "Sources dupliquées" #: src/tools/dbverify.c:183 msgid "Duplicate events" msgstr "Événements dupliqués" #: src/tools/dbverify.c:184 msgid "Duplicate others" msgstr "Enregistrements divers dupliqués" #: src/tools/dbverify.c:185 msgid "Missing records (from deleteset)" msgstr "Enregistrements manquants (avec deleteset)" #: src/tools/dbverify.c:186 msgid "Deleted records" msgstr "Enregistrements supprimés" #: src/tools/dbverify.c:187 msgid "Bad name" msgstr "Mauvais nom" #: src/tools/dbverify.c:188 msgid "Bad family reference" msgstr "Référence de famille invalide" #: src/tools/dbverify.c:189 msgid "Missing child" msgstr "Enfant manquant" #: src/tools/dbverify.c:190 msgid "Missing spouse" msgstr "Conjoint manquant" #: src/tools/dbverify.c:191 msgid "Bad HUSB reference" msgstr "Mauvaise référence HUSB" #: src/tools/dbverify.c:192 msgid "Bad WIFE reference" msgstr "Mauvaise référence WIFE" #: src/tools/dbverify.c:193 msgid "Bad CHIL reference" msgstr "Mauvaise référence CHIL" #: src/tools/dbverify.c:194 msgid "Improper HUSB" msgstr "HUSB incorrect" #: src/tools/dbverify.c:195 msgid "Improper WIFE" msgstr "WIFE incorrect" #: src/tools/dbverify.c:196 msgid "Improper child" msgstr "Enfant incorrect" #: src/tools/dbverify.c:197 msgid "Empty family" msgstr "Famille vide" #: src/tools/dbverify.c:198 msgid "Single person family" msgstr "Famille à personne unique" #: src/tools/dbverify.c:199 msgid "Bad pointer" msgstr "Mauvais pointeur" #: src/tools/dbverify.c:200 msgid "Missing data records" msgstr "Enregistrements manquants" #: src/tools/dbverify.c:230 msgid "\\My Documents\\LifeLines\\Databases\\MyFamily" msgstr "\\My Documents\\LifeLines\\Databases\\MyFamily" #: src/tools/dbverify.c:236 #, c-format msgid "usage: dbverify -(flags) \n" msgstr "utilisation : dbverify -(paramètres) \n" #: src/tools/dbverify.c:237 #, c-format msgid "flags:\n" msgstr "paramètres :\n" #: src/tools/dbverify.c:238 #, c-format msgid "\t-a = Perform all checks (does not include fixes)\n" msgstr "\t-a = Exécute tous les contrôles (sans effectuer de corrections)\n" #: src/tools/dbverify.c:239 #, c-format msgid "\t-g = Check for ghosts (names/refns)\n" msgstr "\t-g = Contrôle des orphelins (noms/refns)\n" #: src/tools/dbverify.c:240 #, c-format msgid "\t-G = Check for & fix ghosts (names/refns)\n" msgstr "\t-G = Contrôle & correction des orphelines (noms/refns)\n" #: src/tools/dbverify.c:241 #, c-format msgid "\t-i = Check individuals\n" msgstr "\t-i = Contrôle des individus\n" #: src/tools/dbverify.c:242 #, c-format msgid "\t-f = Check families\n" msgstr "\t-f = Contrôle des familles\n" #: src/tools/dbverify.c:243 #, c-format msgid "\t-F = Alter any bad family lineage pointers (to _badptr)\n" msgstr "" "\t-F = Modification de tous les liens familliaux erronés (en _badptr)\n" #: src/tools/dbverify.c:244 #, c-format msgid "\t-h = Display help text (this text)\n" msgstr "\t-h = Affiche le texte d'aide (ce texte)\n" #: src/tools/dbverify.c:245 #, c-format msgid "\t-s = Check sours\n" msgstr "\t-s = Contrôle des sources\n" #: src/tools/dbverify.c:246 #, c-format msgid "\t-e = Check events\n" msgstr "\t-e = Contrôle des événements\n" #: src/tools/dbverify.c:247 #, c-format msgid "\t-x = Check others\n" msgstr "\t-x = Contrôle des enregistrements divers\n" #: src/tools/dbverify.c:248 #, c-format msgid "\t-l = Check database structure\n" msgstr "\t-l = Contrôle de la structure de la base\n" #: src/tools/dbverify.c:249 #, c-format msgid "\t-m = Check for records missing data entries\n" msgstr "\t-m = Contrôle des enregistrements sans données\n" #: src/tools/dbverify.c:250 #, c-format msgid "\t-M = Fix records missing data entries\n" msgstr "\t-M = Correction des enregistrements sans données\n" #: src/tools/dbverify.c:251 #, c-format msgid "\t-D = Fix bad delete entries\n" msgstr "\t-D = Correction des enregistrements supprimés erronés\n" #: src/tools/dbverify.c:252 #, c-format msgid "\t-n = Noisy (echo every record processed)\n" msgstr "\t-n = Verbeux (affiche chaque enregistrement traité)\n" #: src/tools/dbverify.c:253 #, c-format msgid "example: dbverify -ifsex \"%s\"\n" msgstr "exemple : dbverify -ifsex \"%s\"\n" #: src/tools/dbverify.c:386 #, c-format msgid "Non-indi name, key=%s, name=%s" msgstr "Nom non-indiv, clé=%s, nom=%s" #: src/tools/dbverify.c:403 #, c-format msgid "Orphaned name: %s" msgstr "Nom orphelin : %s" #: src/tools/dbverify.c:417 #, c-format msgid "Ghost name: %s -> %s" msgstr "Nom fantôme : %s -> %s" #: src/tools/dbverify.c:449 #, c-format msgid "Orphaned refn: %s" msgstr "Refn orpheline : %s" #: src/tools/dbverify.c:489 #, c-format msgid "Duplicate name for %s (%s)" msgstr "Nom en double pour %s (%s)" #: src/tools/dbverify.c:524 #, c-format msgid "Duplicate refn for %s (%s)" msgstr "Refn en double pour %s (%s)" #: src/tools/dbverify.c:637 #, c-format msgid "Duplicate individual for %s" msgstr "Individu en double pour %s" #: src/tools/dbverify.c:679 #, c-format msgid "Bad name for individual %s: %s" msgstr "Mauvais nom pour l'individu %s : %s" #: src/tools/dbverify.c:697 src/tools/dbverify.c:721 #, c-format msgid "Bad family reference (%s) individual %s" msgstr "Mauvais référence familiale (%s) individu %s" #: src/tools/dbverify.c:703 #, c-format msgid "Missing child (%s) in family (%s)" msgstr "Enfant manquant (%s) dans la famille (%s)" #: src/tools/dbverify.c:707 #, c-format msgid "Fixed missing child (%s) in family (%s)" msgstr "Correction enfant manquant (%s) dans la famille (%s)" #: src/tools/dbverify.c:727 #, c-format msgid "Missing spouse (%s) in family (%s)" msgstr "Conjoint manquant (%s) dans la famille (%s)" #: src/tools/dbverify.c:731 #, c-format msgid "Fixed missing spouse (%s) in family (%s)" msgstr "Correction conjoint manquant (%s) dans la famille (%s)" #: src/tools/dbverify.c:765 #, c-format msgid "Duplicate family for %s" msgstr "Famille en double pour %s" #: src/tools/dbverify.c:816 #, c-format msgid "Bad HUSB reference (%s) in family %s" msgstr "Mauvaise référence mari (%s) dans la famille %s" #: src/tools/dbverify.c:822 #, c-format msgid "Fixed Bad HUSB reference (%s) in family %s" msgstr "Correction référence mari (%s) dans la famille %s" #: src/tools/dbverify.c:831 #, c-format msgid "Improper HUSB (%s) in family (%s)" msgstr "Impropre HUSB (%s) dans la famille (%s)" #: src/tools/dbverify.c:844 #, c-format msgid "Bad wife reference (%s) in family %s" msgstr "Mauvaise référence femme (%s) dans la famille %s" #: src/tools/dbverify.c:850 #, c-format msgid "Fixed Bad wife reference (%s) in family %s" msgstr "Correction référence femme (%s) dans la famille %s" #: src/tools/dbverify.c:859 #, c-format msgid "Improper wife (%s) in family (%s)" msgstr "Impropre WIFE (%s) dans la famille (%s)" #: src/tools/dbverify.c:872 #, c-format msgid "Bad child reference (%s) in family %s" msgstr "Mauvaise référence enfant (%s) dans la famille %s" #: src/tools/dbverify.c:878 #, c-format msgid "Fixed bad child reference (%s) in family %s" msgstr "Correction référence enfant (%s) dans la famille %s" #: src/tools/dbverify.c:887 #, c-format msgid "Improper child: Child (%s) without FAMC reference to family (%s)" msgstr "Enfant (%s) sans référence FAMC dans la famille (%s)" #: src/tools/dbverify.c:895 #, c-format msgid "Empty family (%s)" msgstr "Famille vide (%s)" #: src/tools/dbverify.c:897 #, c-format msgid "Single person family (%s)" msgstr "Famille avec personne unique (%s)" #: src/tools/dbverify.c:923 #, c-format msgid "Duplicate source for %s" msgstr "Source en double pour %s" #: src/tools/dbverify.c:939 #, c-format msgid "Duplicate event for %s" msgstr "Événement en double pour %s" #: src/tools/dbverify.c:955 #, c-format msgid "Duplicate record for %s" msgstr "Enregistrement en double pour %s" #: src/tools/dbverify.c:1026 #, c-format msgid "Bad pointer (in %s): %s" msgstr "Mauvais pointeur (dans %s) : %s" #: src/tools/dbverify.c:1064 #, c-format msgid "Missing undeleted record %c%d" msgstr "Enregistrement non effacé manquant %c%d" #: src/tools/dbverify.c:1071 #, c-format msgid "Fixed missing undeleted record %c%d" msgstr "Correction enregistrement non effacé manquant %c%d" #: src/tools/dbverify.c:1075 #, c-format msgid "Failed to fix missing undeleted record %c%d" msgstr "Échec pour corriger un enregistrement non effacé manquant %c%d" #: src/tools/dbverify.c:1087 #, c-format msgid "Delete set contains valid record %s" msgstr "L'ensemble détruit contient des enregistrements valides %s" #: src/tools/dbverify.c:1092 #, c-format msgid "Fixed delete set contains valid record %s" msgstr "" "Correction d'un ensemble détruit contient des enregistrements valides %s" #: src/tools/dbverify.c:1096 #, c-format msgid "Failed to fix missing undeleted record %s" msgstr "Échec de la correction d'un enregistrement non effacé manquant %s" #: src/tools/dbverify.c:1117 #, c-format msgid "Master fkey misaligned" msgstr "Fclé principale mal alignée" #: src/tools/dbverify.c:1144 #, c-format msgid "Cycle in indexes, file %s found again!\n" msgstr "Boucle dans les index, fichier %s déjà trouvé !\n" #: src/tools/dbverify.c:1151 #, c-format msgid "Error loading index at key" msgstr "Erreur de lecture de l'index à la clé" #: src/tools/dbverify.c:1199 #, c-format msgid "First key in block below parent's limit\n" msgstr "1ère clé du bloc avant la limite parent\n" #: src/tools/dbverify.c:1207 #, c-format msgid "Last key in block above parent's limit\n" msgstr "Dernière clé du bloc après la limité parent\n" #: src/tools/dbverify.c:1215 #, c-format msgid "Key not below next key" msgstr "La clé n'est pas avant la clé suivante" #: src/tools/dbverify.c:1232 src/tools/dbverify.c:1234 msgid "data block" msgstr "bloc de données" #: src/tools/dbverify.c:1235 #, c-format msgid "%s fkey=%d, file=%s" msgstr "%s cle=%d, fichier=%s" #: src/tools/dbverify.c:1248 #, c-format msgid "Invalid errs array[%d] in dbverify - fix program\n" msgstr "Tableau [%d] d'erreurs invalide dans dbverify - programme à corriger\n" #: src/tools/dbverify.c:1285 #, c-format msgid "Missing data record (%s)" msgstr "Enregistrements manquants (%s)" #: src/tools/dbverify.c:1289 #, c-format msgid "Fixed missing data record (%s)" msgstr "Correction enregistrements manquants (%s)" #: src/tools/dbverify.c:1420 #, c-format msgid "Checking %s" msgstr "Vérification %s" #: src/tools/dbverify.c:1476 #, c-format msgid "%d error" msgid_plural "%d errors" msgstr[0] "%d erreur" msgstr[1] "%d erreurs" #: src/tools/dbverify.c:1480 #, c-format msgid "%d fixed" msgid_plural "%d fixed" msgstr[0] "%d corrigé" msgstr[1] "%d corrigés" #: src/tools/dbverify.c:1487 msgid "No errors found" msgstr "Pas d'erreurs trouvées" #: src/tools/dbverify.c:1506 #, c-format msgid "FATAL ERROR: " msgstr "ERREUR FATALE :" #: src/tools/dbverify.c:1511 #, c-format msgid "In file <%s> at line %d" msgstr "Dans le fichier <%s> à la ligne %d" #~ msgid "Le fichier de clé a une version incorrecte." #~ msgstr "Le fichier de clé a une version incorrecte." lifelines-3.0.61/po/insert-header.sin0000700002540200244210000000124007477522374017642 0ustar prappDomain Users# Sed script that inserts the file called HEADER before the header entry. # # At each occurrence of a line starting with "msgid ", we execute the following # commands. At the first occurrence, insert the file. At the following # occurrences, do nothing. The distinction between the first and the following # occurrences is achieved by looking at the hold space. /^msgid /{ x # Test if the hold space is empty. s/m/m/ ta # Yes it was empty. First occurrence. Read the file. r HEADER # Output the file's contents by reading the next line. But don't lose the # current line while doing this. g N bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } lifelines-3.0.61/po/it.gmo0000700002540200244210000000313010656417755015514 0ustar prappDomain UsersÞ•",/<øùÿ!'+29?FJSZ mz~‡‹“—œ ¥©¯³·ÀÄÌãþ " /3MQX\c j t~‚‹“ ¥±µ¾ÂÊÎÕÙàäêñõþ *J N    !" **mayYou must identify a database.apraprilaugaugustborn: bur. buri: decdecemberdied: e Edit the personenter path: febfebruaryjanjanuaryjuljulyjunjunemarmarchmaynovnovemberoctoctoberq Return to main menuq Return to previous menusepseptemberProject-Id-Version: lifelines 3.0.19 Report-Msgid-Bugs-To: POT-Creation-Date: 2007-08-08 15:56-0400 PO-Revision-Date: 2002-06-09 21:32-0400 Last-Translator: None yet Language-Team: Not submitted yet MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit magScegliere la base di datiapraprileaugagostonato: sepolto: sepolto: dicdicembremorto: e Edit qq personposizione: febfebbraiogengennaioluglugliogiugiugnomarmarzomaggionovnovembreottottobreq Ritornare al menu principaleq Ritornare al menu precedentesetsettembrelifelines-3.0.61/po/it.po0000700002540200244210000030402510656417750015352 0ustar prappDomain Users# Perry's testing # Copyright (C) YEAR Free Software Foundation, Inc. # Perry Rapp , 2002. # Please, if you are Italian, feel free to replace this with a real one! # #, fuzzy msgid "" msgstr "" "Project-Id-Version: lifelines 3.0.19\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-08-08 15:56-0400\n" "PO-Revision-Date: 2002-06-09 21:32-0400\n" "Last-Translator: None yet\n" "Language-Team: Not submitted yet\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/btree/btrec.c:369 #, c-format msgid "Failed (errno=%d) to open blockfile (rkey=%s): %s" msgstr "" #: src/btree/btrec.c:438 #, c-format msgid "Btree lookup looped back to master (%ld)!" msgstr "" #: src/gedlib/charmaps.c:769 msgid "" msgstr "" #. TRANSLATORS: seconds time interval #: src/gedlib/dateprint.c:783 #, c-format msgid "%02ds" msgstr "" #. TRANSLATORS: minutes & seconds time interval #: src/gedlib/dateprint.c:789 #, c-format msgid "%dm%02ds" msgstr "" #. TRANSLATORS: hours & minutes time interval #: src/gedlib/dateprint.c:795 #, c-format msgid "%dh%02dm" msgstr "" #. TRANSLATORS: days & hours time interval #: src/gedlib/dateprint.c:801 #, c-format msgid "%dd%02dh" msgstr "" #. TRANSLATORS: years & days time interval #: src/gedlib/dateprint.c:805 #, c-format msgid "%dy%03dd" msgstr "" #: src/gedlib/dbcontext.c:276 msgid "Database error: -- " msgstr "" #: src/gedlib/dbcontext.c:280 msgid "requested database does not exist." msgstr "" #: src/gedlib/dbcontext.c:283 msgid "db directory is file, not directory." msgstr "" #: src/gedlib/dbcontext.c:286 msgid "creation of new database failed." msgstr "" #: src/gedlib/dbcontext.c:289 msgid "error accessing database directory." msgstr "" #: src/gedlib/dbcontext.c:292 msgid "no keyfile (directory does not appear to be a database)." msgstr "" #: src/gedlib/dbcontext.c:295 msgid "could not open, read or write an index file." msgstr "" #: src/gedlib/dbcontext.c:298 msgid "could not open, read or write the key file." msgstr "" #: src/gedlib/dbcontext.c:301 msgid "could not open, read or write the key file (to alter database)." msgstr "" #: src/gedlib/dbcontext.c:304 msgid "could not open, read or write a block file." msgstr "" #: src/gedlib/dbcontext.c:307 msgid "name of database is too long." msgstr "" #: src/gedlib/dbcontext.c:310 msgid "The database is already open for writing." msgstr "" #: src/gedlib/dbcontext.c:313 msgid "The database is locked (no readwrite access)." msgstr "" #: src/gedlib/dbcontext.c:316 msgid "The database is unlocked." msgstr "" #: src/gedlib/dbcontext.c:319 msgid "keyfile is corrupt." msgstr "" #: src/gedlib/dbcontext.c:322 msgid "keyfile is wrong alignment." msgstr "" #: src/gedlib/dbcontext.c:325 msgid "keyfile is wrong version." msgstr "" #: src/gedlib/dbcontext.c:328 msgid "Existing database found." msgstr "" #: src/gedlib/dbcontext.c:332 #, c-format msgid "The database is already opened for read access by %d user." msgid_plural "The database is already opened for read access by %d users." msgstr[0] "" msgstr[1] "" #: src/gedlib/dbcontext.c:338 msgid "Invalid properties set for new database" msgstr "" #: src/gedlib/dbcontext.c:341 msgid "Undefined database error -- fix program." msgstr "" #: src/gedlib/gedcom.c:112 msgid "Missing NAME line in INDI record; record ignored.\n" msgstr "" #: src/gedlib/init.c:228 src/tools/btedit.c:207 #, c-format msgid "Copyright (C) 1991-2007 Thomas T. Wetmore IV et al." msgstr "" #: src/gedlib/init.c:230 src/tools/btedit.c:209 #, c-format msgid "" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." msgstr "" #: src/gedlib/init.c:235 src/tools/btedit.c:214 #, c-format msgid "Written by Tom Wetmore. Maintained at lifelines.sourceforge.net." msgstr "" #: src/gedlib/keytonod.c:686 #, c-format msgid "Database error caused by reference to nonexisting key <%s>." msgstr "" #: src/gedlib/keytonod.c:687 msgid "It might be possible to fix this with btedit." msgstr "" #: src/gedlib/keytonod.c:688 msgid "Neighboring keys include:" msgstr "" #: src/gedlib/keytonod.c:1045 #, c-format msgid "Bad cache entry <%s> != <%s>" msgstr "" #: src/gedlib/keytonod.c:1072 #, c-format msgid "Cache [%s] overflowed its max size (%d)" msgstr "" #: src/gedlib/messages.c:44 msgid "You must identify a database." msgstr "Scegliere la base di dati" #: src/gedlib/messages.c:45 #, fuzzy msgid "What directory holds (or will hold) the LifeLines database? (? to list)" msgstr "Dove e la base di dati (? per aiuto)" #: src/gedlib/messages.c:46 msgid "enter path: " msgstr "posizione: " #: src/gedlib/messages.c:47 msgid "There is no LifeLines database in that directory." msgstr "" #: src/gedlib/messages.c:48 msgid "Do you want to create a database there?" msgstr "" #: src/gedlib/messages.c:49 msgid "Argument to lock (-l) must be y or n." msgstr "" #: src/gedlib/messages.c:50 msgid "Cannot remove last person from family." msgstr "" #: src/gedlib/messages.c:52 msgid "lines [-adkrwiflntcuFxoCzI] [database] # Use -F for Finnish database" msgstr "" #: src/gedlib/messages.c:54 msgid "lines [-adkrwiflntcuxoCzI] [database] # Finnish database" msgstr "" #: src/gedlib/messages.c:56 msgid "lines [-adkrwiflntcuxoCzI] [database]" msgstr "" #: src/gedlib/messages.c:58 msgid "The database is read only; you may not add records." msgstr "" #: src/gedlib/messages.c:59 msgid "The database is read only; you may not change records." msgstr "" #: src/gedlib/messages.c:60 msgid "The database is read only; you may not merge records." msgstr "" #: src/gedlib/messages.c:61 msgid "The database is read only; you may not remove records." msgstr "" #: src/gedlib/messages.c:62 msgid "The database is read only." msgstr "" #: src/gedlib/messages.c:64 msgid "Name, key, refn, list, or @:" msgstr "" #: src/gedlib/messages.c:65 msgid "enter key or refn: " msgstr "" #: src/gedlib/messages.c:66 msgid "Please choose the child to remove from the family." msgstr "" #: src/gedlib/messages.c:67 msgid "Please choose the spouse/parent to remove from the family." msgstr "" #: src/gedlib/messages.c:68 msgid "From which family is the child to be removed?" msgstr "" #: src/gedlib/messages.c:69 msgid "From which family is the spouse/parent to be removed?" msgstr "" #: src/gedlib/messages.c:70 msgid "Identify family (enter nothing to identify by individual members)." msgstr "" #: src/gedlib/messages.c:71 msgid "Identify a spouse of the family, if known." msgstr "" #: src/gedlib/messages.c:72 msgid "Identify a child of the family, if known." msgstr "" #: src/gedlib/messages.c:73 msgid "Identify the first child to swap." msgstr "" #: src/gedlib/messages.c:74 msgid "Identify the second child to swap." msgstr "" #: src/gedlib/messages.c:75 msgid "Identify the child to reorder." msgstr "" #: src/gedlib/messages.c:76 msgid "Identify the first family/spouse to swap." msgstr "" #: src/gedlib/messages.c:77 msgid "Identify the second family/spouse to swap." msgstr "" #: src/gedlib/messages.c:78 msgid "Please choose the spouse/parent to browse to." msgstr "" #: src/gedlib/messages.c:79 msgid "Please choose the first spouse/parent to browse to." msgstr "" #: src/gedlib/messages.c:80 msgid "Please choose the second spouse/parent to browse to." msgstr "" #: src/gedlib/messages.c:81 msgid "Please choose the child to browse to." msgstr "" #: src/gedlib/messages.c:82 msgid "Please choose the first child to browse to." msgstr "" #: src/gedlib/messages.c:83 msgid "Please choose the second child to browse to." msgstr "" #: src/gedlib/messages.c:84 msgid "Please choose the family to browse to." msgstr "" #: src/gedlib/messages.c:85 msgid "Enter Family Number to Browse to" msgstr "" #: src/gedlib/messages.c:86 msgid "Please choose the first family to browse to." msgstr "" #: src/gedlib/messages.c:87 msgid "Please choose the second family to browse to." msgstr "" #: src/gedlib/messages.c:88 msgid "Please choose the father/husband to browse to." msgstr "" #: src/gedlib/messages.c:89 msgid "Please choose the first father/husband to browse to." msgstr "" #: src/gedlib/messages.c:90 msgid "Please choose the second father/husband to browse to." msgstr "" #: src/gedlib/messages.c:91 msgid "Please choose the mother/wife to browse to." msgstr "" #: src/gedlib/messages.c:92 msgid "Please choose the first mother/wife to browse to." msgstr "" #: src/gedlib/messages.c:93 msgid "Please choose the second mother/wife to browse to." msgstr "" #: src/gedlib/messages.c:94 msgid "Identify a parent in the family having children swapped." msgstr "" #: src/gedlib/messages.c:95 msgid "Whose families/spouses are to be swapped?" msgstr "" #: src/gedlib/messages.c:96 msgid "Identify one of the child's parents, if known." msgstr "" #: src/gedlib/messages.c:98 src/liflines/scan.c:127 msgid "Enter pattern to match against refn." msgstr "" #: src/gedlib/messages.c:100 msgid "Please choose from among these people." msgstr "" #: src/gedlib/messages.c:101 msgid "Please choose from among these records." msgstr "" #: src/gedlib/messages.c:102 msgid "Is this the new child? " msgstr "" #: src/gedlib/messages.c:103 msgid "Is this the new spouse? " msgstr "" #: src/gedlib/messages.c:104 msgid "Is this the person? Select if so." msgstr "" #: src/gedlib/messages.c:105 msgid "Is this the record? Select if so." msgstr "" #: src/gedlib/messages.c:106 msgid "Select the child the new child precedes or select last." msgstr "" #: src/gedlib/messages.c:107 msgid "Please identify next person to browse to." msgstr "" #: src/gedlib/messages.c:108 msgid "Please identify record to browse to." msgstr "" #: src/gedlib/messages.c:109 msgid "Please identify one of the spouses." msgstr "" #: src/gedlib/messages.c:110 msgid "Please identify person or persons to browse to." msgstr "" #: src/gedlib/messages.c:111 msgid "Please choose family create operation." msgstr "" #: src/gedlib/messages.c:112 msgid "Do you want to enter another name?" msgstr "" #: src/gedlib/messages.c:114 msgid "This person is not a spouse or parent in any family." msgstr "" #: src/gedlib/messages.c:115 msgid "This person is not a child in any family." msgstr "" #: src/gedlib/messages.c:116 msgid "There is no one in the database with that name or key." msgstr "" #: src/gedlib/messages.c:118 msgid "This person's father is not in the database." msgstr "" #: src/gedlib/messages.c:119 msgid "This person's mother is not in the database." msgstr "" #: src/gedlib/messages.c:120 msgid "This person has no spouse in the database." msgstr "" #: src/gedlib/messages.c:121 msgid "This person has no younger sibling in the database." msgstr "" #: src/gedlib/messages.c:122 msgid "This person has no older sibling in the database." msgstr "" #: src/gedlib/messages.c:123 msgid "This person's parents are not in the database." msgstr "" #: src/gedlib/messages.c:124 msgid "This family has no male spouse/parent in the database." msgstr "" #: src/gedlib/messages.c:125 msgid "This family has no female spouse/parent in the database." msgstr "" #: src/gedlib/messages.c:126 msgid "There are no children in the database for this family." msgstr "" #: src/gedlib/messages.c:127 msgid "This person has no children in the database." msgstr "" #: src/gedlib/messages.c:128 msgid "No such child." msgstr "" #: src/gedlib/messages.c:129 msgid "No such person." msgstr "" #: src/gedlib/messages.c:130 msgid "No such record." msgstr "" #: src/gedlib/messages.c:131 msgid "No such family." msgstr "" #: src/gedlib/messages.c:132 msgid "No sources present." msgstr "" #: src/gedlib/messages.c:133 msgid "Please choose the source to view." msgstr "" #: src/gedlib/messages.c:134 msgid "No events present." msgstr "" #: src/gedlib/messages.c:135 msgid "Please choose the event to view." msgstr "" #: src/gedlib/messages.c:136 msgid "No others present." msgstr "" #: src/gedlib/messages.c:137 msgid "Please choose the other to view." msgstr "" #: src/gedlib/messages.c:138 msgid "No notes present." msgstr "" #: src/gedlib/messages.c:139 msgid "Please choose the note to view." msgstr "" #: src/gedlib/messages.c:140 msgid "No references present." msgstr "" #: src/gedlib/messages.c:141 msgid "Please choose the reference to view." msgstr "" #: src/gedlib/messages.c:142 msgid "Duplicated REFN - please choose." msgstr "" #: src/gedlib/messages.c:144 msgid "New spouse/parent has unknown sex; can't add to family." msgstr "" #: src/gedlib/messages.c:145 msgid "The persons are not of opposite sex; can't make family." msgstr "" #: src/gedlib/messages.c:146 msgid "This person is not a spouse in the family; can't remove." msgstr "" #: src/gedlib/messages.c:147 msgid "This person is not a child in the family; can't remove." msgstr "" #: src/gedlib/messages.c:148 msgid "This person's sex is not known; can't make family." msgstr "" #: src/gedlib/messages.c:149 msgid "This family already has a husband/male parent." msgstr "" #: src/gedlib/messages.c:150 msgid "This family already has a wife/female parent." msgstr "" #: src/gedlib/messages.c:151 msgid "This family has both spouses/parents; can't add another." msgstr "" #: src/gedlib/messages.c:152 msgid "This family has neither spouse/parent; can't remove." msgstr "" #: src/gedlib/messages.c:153 msgid "This family still has links; not removed." msgstr "" #: src/gedlib/messages.c:155 msgid "Choose a family by selecting a spouse/parent." msgstr "" #: src/gedlib/messages.c:156 msgid "" "Do you want to edit the person again? (Otherwise changes will be discarded.)" msgstr "" #: src/gedlib/messages.c:157 msgid "Do you want to edit the person again?" msgstr "" #: src/gedlib/messages.c:158 msgid "" "Do you want to edit the family again? (Otherwise changes will be discarded.)" msgstr "" #: src/gedlib/messages.c:159 msgid "Do you want to edit the family again?" msgstr "" #: src/gedlib/messages.c:160 msgid "" "Do you want to edit the source again? (Otherwise changes will be discarded.)" msgstr "" #: src/gedlib/messages.c:161 msgid "Do you want to edit the source again?" msgstr "" #: src/gedlib/messages.c:162 msgid "" "Do you want to edit the event again? (Otherwise changes will be discarded.)" msgstr "" #: src/gedlib/messages.c:163 msgid "Do you want to edit the event again?" msgstr "" #: src/gedlib/messages.c:164 msgid "" "Do you want to edit the record again? (Otherwise changes will be discarded.)" msgstr "" #: src/gedlib/messages.c:165 msgid "Do you want to edit the record again?" msgstr "" #: src/gedlib/messages.c:166 msgid "Whom do you want to edit?" msgstr "" #: src/gedlib/messages.c:167 msgid "Which source record do you want to edit?" msgstr "" #: src/gedlib/messages.c:168 msgid "Which event record do you want to edit?" msgstr "" #: src/gedlib/messages.c:169 msgid "What record do you want to edit?" msgstr "" #: src/gedlib/messages.c:171 msgid "Do you really want to add this person to the database?" msgstr "" #: src/gedlib/messages.c:172 msgid "Do you really want to add this family to the database?" msgstr "" #: src/gedlib/messages.c:173 msgid "Do you really want to add this child to the family?" msgstr "" #: src/gedlib/messages.c:174 msgid "Do you really want to add this spouse/parent to the family?" msgstr "" #: src/gedlib/messages.c:175 msgid "Do you really want to add this source to the database?" msgstr "" #: src/gedlib/messages.c:176 msgid "Do you really want to add this event to the database?" msgstr "" #: src/gedlib/messages.c:177 msgid "Do you really want to add this record to the database?" msgstr "" #: src/gedlib/messages.c:178 msgid "Do you really want to update this person?" msgstr "" #: src/gedlib/messages.c:179 msgid "Do you really want to update this family?" msgstr "" #: src/gedlib/messages.c:180 msgid "Do you really want to update this source?" msgstr "" #: src/gedlib/messages.c:181 msgid "Do you really want to update this event?" msgstr "" #: src/gedlib/messages.c:182 msgid "Do you really want to update this record?" msgstr "" #: src/gedlib/messages.c:183 msgid "Are you sure you want to remove the person from the database?" msgstr "" #: src/gedlib/messages.c:184 msgid "Are you sure you want to remove this record from the database?" msgstr "" #: src/gedlib/messages.c:185 msgid "Remove this family record?" msgstr "" #: src/gedlib/messages.c:186 #, c-format msgid "(Family %s (%s, %s)" msgstr "" #: src/gedlib/messages.c:187 msgid "Do you really want to merge these two persons?" msgstr "" #: src/gedlib/messages.c:188 msgid "Do you really want to merge these two families?" msgstr "" #: src/gedlib/messages.c:189 msgid "Do you really want to swap spouse orders?" msgstr "" #: src/gedlib/messages.c:190 msgid "Do you really want to reorder children?" msgstr "" #: src/gedlib/messages.c:191 msgid "Do you really want to remove this child from his/her family?" msgstr "" #: src/gedlib/messages.c:192 msgid "Do you really want to remove this spouse from his/her family?" msgstr "" #: src/gedlib/messages.c:193 msgid "Too many spouses to display full list" msgstr "" #: src/gedlib/messages.c:194 msgid "These persons are children in different families." msgstr "" #: src/gedlib/messages.c:195 msgid "Are you sure you want to merge them?" msgstr "" #: src/gedlib/messages.c:197 msgid "There is something wrong with the data." msgstr "" #: src/gedlib/messages.c:198 msgid "Please identify the child." msgstr "" #: src/gedlib/messages.c:199 msgid "Please identify one of the child's siblings." msgstr "" #: src/gedlib/messages.c:200 msgid "Identify spouse/parent to add to an existing family." msgstr "" #: src/gedlib/messages.c:201 msgid "Identify spouse/parent already in family, if known." msgstr "" #: src/gedlib/messages.c:202 msgid "Identify child already in family." msgstr "" #: src/gedlib/messages.c:204 msgid "This person is already a child in a family." msgstr "" #: src/gedlib/messages.c:205 msgid "Identify a spouse/parent for the new family." msgstr "" #: src/gedlib/messages.c:206 msgid "Identify the second spouse/parent, if known." msgstr "" #: src/gedlib/messages.c:207 msgid "Both families must have husbands/fathers." msgstr "" #: src/gedlib/messages.c:208 msgid "Both families must have wives/mothers." msgstr "" #: src/gedlib/messages.c:210 msgid "Identify spouse/parent in second family, if known." msgstr "" #: src/gedlib/messages.c:211 msgid "Identify child in second family." msgstr "" #: src/gedlib/messages.c:212 msgid "Identify second person to browse to." msgstr "" #: src/gedlib/messages.c:214 msgid "Create a family with this person as a child." msgstr "" #: src/gedlib/messages.c:215 msgid "Create a family with this person as a spouse/parent." msgstr "" #: src/gedlib/messages.c:216 msgid "This family has less than two children; can't swap." msgstr "" #: src/gedlib/messages.c:217 msgid "This person is a spouse/parent in less than two families." msgstr "" #: src/gedlib/messages.c:218 msgid "Something impossible happened. Contact tech support." msgstr "" #: src/gedlib/messages.c:220 msgid "The two children were swapped." msgstr "" #: src/gedlib/messages.c:221 msgid "The two families were swapped." msgstr "" #: src/gedlib/messages.c:222 msgid "The child was removed from his/her family." msgstr "" #: src/gedlib/messages.c:223 msgid "The spouse was removed from his/her family." msgstr "" #: src/gedlib/messages.c:225 msgid "A person cannot be merged with him/herself." msgstr "" #: src/gedlib/messages.c:226 msgid "A family cannot be merged with itself." msgstr "" #: src/gedlib/messages.c:227 msgid "Two persons with different parents cannot be merged." msgstr "" #: src/gedlib/messages.c:228 msgid "Two parents of different sexes cannot be merged." msgstr "" #: src/gedlib/messages.c:229 msgid "The families have different fathers/husbands; cannot merge." msgstr "" #: src/gedlib/messages.c:230 msgid "The families have different wives/mothers; cannot merge." msgstr "" #: src/gedlib/messages.c:231 msgid "Who do you want to remove from the database?" msgstr "" #: src/gedlib/messages.c:232 msgid "What record do you want to remove from the database?" msgstr "" #: src/gedlib/messages.c:233 msgid "Place the child last in the family." msgstr "" #: src/gedlib/messages.c:234 msgid "Error in abbreviations file." msgstr "" #: src/gedlib/messages.c:235 msgid "Error in user options file." msgstr "" #: src/gedlib/messages.c:236 msgid "Error in character mapping file." msgstr "" #: src/gedlib/messages.c:237 #, c-format msgid "(Separator is %s)" msgstr "" #: src/gedlib/messages.c:238 msgid "Do you want to re-edit it?" msgstr "" #: src/gedlib/messages.c:240 #, c-format msgid "%s was added to the database." msgstr "" #: src/gedlib/messages.c:241 #, c-format msgid "%s was added as a child." msgstr "" #: src/gedlib/messages.c:242 #, c-format msgid "%s was added as a spouse and/or parent." msgstr "" #: src/gedlib/messages.c:243 msgid "The new family was added to the database." msgstr "" #: src/gedlib/messages.c:244 #, c-format msgid "%s was modified in the database." msgstr "" #: src/gedlib/messages.c:245 msgid "The family was modified in the database." msgstr "" #: src/gedlib/messages.c:246 msgid "The source was modified in the database." msgstr "" #: src/gedlib/messages.c:247 msgid "The event was modified in the database." msgstr "" #: src/gedlib/messages.c:248 msgid "The record was modified in the database." msgstr "" #: src/gedlib/messages.c:250 #, c-format msgid "Could not open file %s." msgstr "" #: src/gedlib/messages.c:251 msgid "Filepath too long." msgstr "" #: src/gedlib/messages.c:253 msgid "Please mark a record first." msgstr "" #: src/gedlib/messages.c:255 #, c-format msgid "The current list is now named %s." msgstr "" #: src/gedlib/messages.c:256 msgid "The current list is not named." msgstr "" #: src/gedlib/messages.c:257 msgid "What should the name of this list be?" msgstr "" #: src/gedlib/messages.c:258 msgid "No persons were added to the current list." msgstr "" #: src/gedlib/messages.c:259 msgid "What persons or list do you want to add to the current list?" msgstr "" #: src/gedlib/messages.c:260 msgid "You are at the bottom of the list." msgstr "" #: src/gedlib/messages.c:261 msgid "You are at the top of the list." msgstr "" #: src/gedlib/messages.c:262 msgid "New persons were added to the current list." msgstr "" #: src/gedlib/messages.c:264 msgid "System error: illegal map code" msgstr "" #: src/gedlib/messages.c:265 msgid "No such translation table in this database" msgstr "" #: src/gedlib/messages.c:268 msgid "Because of errors the GEDCOM file was not loaded.\n" msgstr "" #: src/gedlib/messages.c:269 msgid "No errors; adding records with original keys..." msgstr "" #: src/gedlib/messages.c:270 msgid "No errors; adding records with new keys..." msgstr "" #: src/gedlib/messages.c:271 msgid "Use original keys from GEDCOM file?" msgstr "" #: src/gedlib/messages.c:272 msgid "Proceed?" msgstr "" #: src/gedlib/messages.c:273 msgid "Enter name of output archive file." msgstr "" #: src/gedlib/messages.c:274 #, c-format msgid "Database `%s' has been saved in `%s'." msgstr "" #: src/gedlib/messages.c:275 msgid "Enter name of translation table file to write" msgstr "" #: src/gedlib/messages.c:276 msgid "Enter name of translation table file to read" msgstr "" #: src/gedlib/messages.c:277 #, c-format msgid "Line %d: The person defined here has no key: skipped." msgstr "" #: src/gedlib/messages.c:278 #, c-format msgid "Line %d: The family defined here has no key." msgstr "" #: src/gedlib/messages.c:279 #, c-format msgid "Lines %d and %d: Person %s is multiply defined: skipped." msgstr "" #: src/gedlib/messages.c:280 #, c-format msgid "Lines %d and %d: Family %s is multiply defined." msgstr "" #: src/gedlib/messages.c:281 #, c-format msgid "Line %d: Person %s has an incorrect key: skipped." msgstr "" #: src/gedlib/messages.c:282 #, c-format msgid "Line %d: Family %s has an incorrect key." msgstr "" #: src/gedlib/messages.c:283 #, c-format msgid "Person %s is referred to but not defined." msgstr "" #: src/gedlib/messages.c:284 #, c-format msgid "Family %s is referred to but not defined." msgstr "" #: src/gedlib/messages.c:285 #, c-format msgid "Source %s is referred to but not defined." msgstr "" #: src/gedlib/messages.c:286 #, c-format msgid "Event %s is referred to but not defined." msgstr "" #: src/gedlib/messages.c:287 #, c-format msgid "Line %d: This line has a level number that is too large." msgstr "" #: src/gedlib/messages.c:288 #, c-format msgid "Line %d: Person defined here has no name." msgstr "" #: src/gedlib/messages.c:294 msgid "" msgstr "" #: src/gedlib/messages.c:296 msgid "What is the name of the program?" msgstr "" #: src/gedlib/messages.c:297 msgid "Please enter the name of the GEDCOM file." msgstr "" #: src/gedlib/messages.c:299 msgid "What is the name of the output file?" msgstr "" #: src/gedlib/messages.c:300 msgid "Malformed configuration file: line too long." msgstr "" #: src/gedlib/messages.c:301 msgid "Unsupported file encoding (no multibyte encodings except UTF-8)." msgstr "" #: src/gedlib/messages.c:302 #, c-format msgid "Unsupported file encoding: %s." msgstr "" #: src/gedlib/messages.c:305 msgid "Enter string for program" msgstr "" #: src/gedlib/messages.c:306 msgid "enter string: " msgstr "" #: src/gedlib/messages.c:307 msgid "enter integer:" msgstr "" #: src/gedlib/messages.c:308 msgid "enter name: " msgstr "" #: src/gedlib/messages.c:309 msgid "Strike any key to continue." msgstr "" #: src/gedlib/messages.c:313 msgid "" "0 SOUR\n" "1 REFN\n" "1 TITL Title\n" "1 AUTH Author" msgstr "" #: src/gedlib/messages.c:314 msgid "" "0 EVEN\n" "1 REFN\n" "1 DATE\n" "1 PLAC\n" "1 INDI\n" " 2 NAME\n" " 2 ROLE\n" "1 SOUR" msgstr "" #: src/gedlib/messages.c:315 msgid "" "0 XXXX\n" "1 REFN" msgstr "" #: src/gedlib/messages.c:319 msgid "The file is as positioned at EOF." msgstr "" #: src/gedlib/messages.c:320 #, c-format msgid "Line %d: This line is empty; EOF?" msgstr "" #: src/gedlib/messages.c:321 #, c-format msgid "Line %d: This line is too long." msgstr "" #: src/gedlib/messages.c:322 #, c-format msgid "Line %d: This line has no level number." msgstr "" #: src/gedlib/messages.c:323 #, c-format msgid "Line %d: This line is incomplete." msgstr "" #: src/gedlib/messages.c:324 #, c-format msgid "Line %d: This line has a bad link." msgstr "" #: src/gedlib/messages.c:325 #, c-format msgid "Line %d: This line needs white space before tag." msgstr "" #: src/gedlib/messages.c:326 #, c-format msgid "Line %d: This line has an illegal level." msgstr "" #: src/gedlib/messages.c:327 msgid "The record begins at wrong level." msgstr "" #: src/gedlib/messages.c:330 msgid "" "\n" "Aborting now. Core dump? [y/n]" msgstr "" #: src/gedlib/messages.c:331 msgid "" "Looks like a program was running.\n" "Check file %1 around line %2.\n" msgstr "" #: src/gedlib/messages.c:332 msgid "signal %1: %2" msgstr "" #: src/gedlib/messages.c:334 msgid "SIGNAL 0" msgstr "" #: src/gedlib/messages.c:335 msgid "HANGUP" msgstr "" #: src/gedlib/messages.c:336 msgid "INTERRUPT" msgstr "" #: src/gedlib/messages.c:337 msgid "QUIT" msgstr "" #: src/gedlib/messages.c:338 msgid "ILLEGAL INSTRUCTION" msgstr "" #: src/gedlib/messages.c:339 msgid "TRACE TRAP" msgstr "" #: src/gedlib/messages.c:340 msgid "ABORT" msgstr "" #: src/gedlib/messages.c:341 msgid "EMT INST" msgstr "" #: src/gedlib/messages.c:342 msgid "FLOATING POINT EXCEPTION" msgstr "" #: src/gedlib/messages.c:343 msgid "KILL" msgstr "" #: src/gedlib/messages.c:344 msgid "BUS ERROR" msgstr "" #: src/gedlib/messages.c:345 msgid "SEGMENTATION ERROR" msgstr "" #: src/gedlib/messages.c:346 msgid "SYSTEM CALL ERROR" msgstr "" #: src/gedlib/messages.c:347 msgid "PIPE WRITE" msgstr "" #: src/gedlib/messages.c:348 msgid "ALARM CLOCK" msgstr "" #: src/gedlib/messages.c:350 msgid "TERMINATE FROM KILL" msgstr "" #: src/gedlib/messages.c:351 msgid "USER SIGNAL 1" msgstr "" #: src/gedlib/messages.c:352 msgid "USER SIGNAL 2" msgstr "" #: src/gedlib/messages.c:353 msgid "DEATH OF CHILD" msgstr "" #: src/gedlib/messages.c:354 msgid "POWER-FAIL RESTART" msgstr "" #: src/gedlib/messages.c:355 msgid "WINDOW CHANGE" msgstr "" #: src/gedlib/messages.c:356 msgid "Unknown signal" msgstr "" #: src/gedlib/messages.c:360 msgid "person" msgstr "" #: src/gedlib/messages.c:361 msgid ", of " msgstr "" #: src/gedlib/messages.c:362 msgid "father" msgstr "" #: src/gedlib/messages.c:363 msgid "mother" msgstr "" #: src/gedlib/messages.c:364 msgid "spouse" msgstr "" #: src/gedlib/messages.c:365 msgid "child" msgstr "" #: src/gedlib/messages.c:368 msgid "m. " msgstr "" #: src/gedlib/messages.c:370 msgid "div. " msgstr "" #: src/gedlib/messages.c:372 msgid "b. " msgstr "" #: src/gedlib/messages.c:374 msgid "bap. " msgstr "" #: src/gedlib/messages.c:376 msgid "d. " msgstr "" #: src/gedlib/messages.c:378 msgid "bur. " msgstr "sepolto: " #: src/gedlib/messages.c:380 msgid "cb. " msgstr "" #: src/gedlib/messages.c:382 msgid "married: " msgstr "" #: src/gedlib/messages.c:383 msgid "born: " msgstr "nato: " #: src/gedlib/messages.c:384 msgid "bapt: " msgstr "" #: src/gedlib/messages.c:385 msgid "died: " msgstr "morto: " #: src/gedlib/messages.c:386 msgid "buri: " msgstr "sepolto: " #: src/gedlib/messages.c:390 msgid "You cannot edit the INDI line in a person record." msgstr "" #: src/gedlib/messages.c:391 msgid "You cannot edit the FAMC line in a person record." msgstr "" #: src/gedlib/messages.c:392 msgid "You cannot edit the FAMS lines in a person record." msgstr "" #: src/gedlib/messages.c:393 msgid "You cannot edit the FAM line in a family record." msgstr "" #: src/gedlib/messages.c:394 msgid "You cannot edit the HUSB line in a family record." msgstr "" #: src/gedlib/messages.c:395 msgid "You cannot edit the WIFE line in a family record." msgstr "" #: src/gedlib/messages.c:396 msgid "You cannot edit the CHIL lines in a family record." msgstr "" #: src/gedlib/messages.c:397 msgid "The record is empty." msgstr "" #: src/gedlib/messages.c:398 msgid "The record does not begin with an INDI line." msgstr "" #: src/gedlib/messages.c:399 msgid "The record does not begin with a FAM line." msgstr "" #: src/gedlib/messages.c:400 msgid "The record does not begin with a SOUR line." msgstr "" #: src/gedlib/messages.c:401 msgid "The record does not begin with an EVEN line." msgstr "" #: src/gedlib/messages.c:402 msgid "INDI, FAM, SOUR, EVEN records may not be other records." msgstr "" #: src/gedlib/messages.c:403 msgid "The record contains multiple level 0 lines." msgstr "" #: src/gedlib/messages.c:404 msgid "This person record has bad GEDCOM name syntax." msgstr "" #: src/gedlib/messages.c:405 msgid "You cannot change the sex of a parent." msgstr "" #: src/gedlib/messages.c:406 msgid "REFN key is already in use." msgstr "" #: src/gedlib/messages.c:408 msgid "Tag is too long to connect automatically." msgstr "" #: src/gedlib/messages.c:410 msgid "Database records" msgstr "" #: src/gedlib/messages.c:411 #, c-format msgid "%dI, %dF, %dS, %dE, %dX" msgstr "" #: src/gedlib/messages.c:414 #, c-format msgid "LifeLines %s - Genealogical DB and Programming System" msgstr "" #: src/gedlib/messages.c:415 msgid "Copyright(c) 1991 to 1996, by T. T. Wetmore IV" msgstr "" #: src/gedlib/messages.c:416 #, c-format msgid "Current Database - %s" msgstr "" #: src/gedlib/messages.c:418 msgid " (immutable)" msgstr "" #: src/gedlib/messages.c:420 msgid " (read only)" msgstr "" #: src/gedlib/messages.c:421 msgid "Please choose an operation:" msgstr "" #: src/gedlib/messages.c:422 msgid "Not valid command" msgstr "" #: src/gedlib/messages.c:425 msgid "enter y (yes) or n (no): " msgstr "" #: src/gedlib/messages.c:426 msgid "yYnN" msgstr "" #: src/gedlib/messages.c:427 msgid "yY" msgstr "" #: src/gedlib/messages.c:430 msgid "LifeLines -- Person Browse Screen (* toggles menu)" msgstr "" #: src/gedlib/messages.c:431 msgid "LifeLines -- Family Browse Screen (* toggles menu)" msgstr "" #: src/gedlib/messages.c:432 msgid "LifeLines -- Two Person Browse Screen (* toggles menu)" msgstr "" #: src/gedlib/messages.c:433 msgid "LifeLines -- Two Family Browse Screen (* toggles menu)" msgstr "" #: src/gedlib/messages.c:434 msgid "LifeLines -- Auxiliary Browse Screen (* toggles menu)" msgstr "" #: src/gedlib/messages.c:435 msgid "LifeLines -- List Browse Screen (* toggles menu)" msgstr "" #: src/gedlib/messages.c:439 msgid "Commands: Select by number, u Page Up, d Page Down, i Select, q Quit" msgstr "" #: src/gedlib/messages.c:440 msgid "Commands: u Page Up, d Page Down, q Quit" msgstr "" #: src/gedlib/messages.c:441 msgid "Messages:" msgstr "" #: src/gedlib/messages.c:444 msgid "Please choose from the following options:" msgstr "" #: src/gedlib/messages.c:445 #, c-format msgid "New record is %s" msgstr "" #: src/gedlib/messages.c:446 msgid "Insert xref automatically at bottom of current record." msgstr "" #: src/gedlib/messages.c:447 msgid "Edit current record now to add xref manually." msgstr "" #: src/gedlib/messages.c:448 msgid "Browse new record (without adding xref)." msgstr "" #: src/gedlib/messages.c:449 msgid "Return to current record (without adding xref)." msgstr "" #: src/gedlib/messages.c:452 msgid "Spouse unknown" msgstr "" #: src/gedlib/messages.c:453 msgid "No more history" msgstr "" #: src/gedlib/messages.c:454 msgid "Bad history count" msgstr "" #: src/gedlib/messages.c:455 msgid "Bad backup history count" msgstr "" #: src/gedlib/messages.c:456 msgid "Bad history length" msgstr "" #: src/gedlib/messages.c:457 #, c-format msgid "Delete history (%d entries)?" msgstr "" #: src/gedlib/messages.c:458 msgid "Error accessing data" msgstr "" #: src/gedlib/messages.c:459 msgid "Choose from history" msgstr "" #: src/gedlib/messages.c:460 msgid "" "Cannot combine immutable (-i) or read-only (-r) with read-write (-w) access." msgstr "" #: src/gedlib/messages.c:461 msgid "Cannot combine forceopen (-f) and lock (-l) flags." msgstr "" #: src/gedlib/messages.c:462 msgid "Default path: " msgstr "" #: src/gedlib/messages.c:463 msgid "WARNING: missing keys" msgstr "" #: src/gedlib/messages.c:464 msgid "This does not point to another record in the database!" msgstr "" #: src/gedlib/messages.c:465 msgid "enter file name" msgstr "" #: src/gedlib/messages.c:466 #, c-format msgid "enter file name (*%s)" msgstr "" #: src/gedlib/messages.c:467 msgid "There is no record with that key or reference." msgstr "" #: src/gedlib/messages.c:468 msgid "Database was corrupt." msgstr "" #: src/gedlib/messages.c:471 msgid "Bad decimal number format." msgstr "" #: src/gedlib/messages.c:472 msgid "Bad hexidecimal number format." msgstr "" #: src/gedlib/messages.c:473 msgid "No replacement string on line." msgstr "" #: src/gedlib/messages.c:474 msgid "No original string on line." msgstr "" #: src/gedlib/messages.c:475 msgid "Bad escape format." msgstr "" #: src/gedlib/messages.c:476 #, c-format msgid "%s: line %d (entry %d): %s" msgstr "" #: src/gedlib/messages.c:479 src/liflines/brwsmenu.c:26 msgid "q Return to main menu" msgstr "q Ritornare al menu principale" #: src/gedlib/messages.c:480 msgid "q Return to previous menu" msgstr "q Ritornare al menu precedente" #: src/gedlib/messages.c:481 msgid "q Quit program" msgstr "" #: src/gedlib/messages.c:482 #, fuzzy msgid "Q Quit current database" msgstr "Scegliere la base di dati" #: src/gedlib/messages.c:485 msgid "b Browse the persons in the database" msgstr "" #: src/gedlib/messages.c:486 msgid "s Search database" msgstr "" #: src/gedlib/messages.c:487 msgid "a Add information to the database" msgstr "" #: src/gedlib/messages.c:488 msgid "d Delete information from the database" msgstr "" #: src/gedlib/messages.c:489 msgid "r Generate report by entering report name" msgstr "" #: src/gedlib/messages.c:490 msgid "p Pick a report from list and run" msgstr "" #: src/gedlib/messages.c:491 msgid "c Character set options" msgstr "" #: src/gedlib/messages.c:492 msgid "t Modify character translation tables" msgstr "" #: src/gedlib/messages.c:493 msgid "u Miscellaneous utilities" msgstr "" #: src/gedlib/messages.c:494 msgid "x Handle source, event and other records" msgstr "" #: src/gedlib/messages.c:497 msgid "What utility do you want to perform?" msgstr "" #: src/gedlib/messages.c:498 msgid "s Save the database in a GEDCOM file" msgstr "" #: src/gedlib/messages.c:499 msgid "r Read in data from a GEDCOM file" msgstr "" #: src/gedlib/messages.c:500 msgid "R Pick a GEDCOM file and read in" msgstr "" #: src/gedlib/messages.c:501 msgid "k Find a person's key value" msgstr "" #: src/gedlib/messages.c:502 msgid "i Identify a person from key value" msgstr "" #: src/gedlib/messages.c:503 msgid "d Show database statistics" msgstr "" #: src/gedlib/messages.c:504 msgid "m Show memory statistics" msgstr "" #: src/gedlib/messages.c:505 msgid "e Edit the place abbreviation file" msgstr "" #: src/gedlib/messages.c:506 msgid "o Edit the user options file" msgstr "" #: src/gedlib/messages.c:509 msgid "What activity do you want to perform?" msgstr "" #: src/gedlib/messages.c:510 msgid "s Browse source records" msgstr "" #: src/gedlib/messages.c:511 msgid "e Browse event records" msgstr "" #: src/gedlib/messages.c:512 msgid "x Browse other records" msgstr "" #: src/gedlib/messages.c:513 msgid "1 Add a source record to the database" msgstr "" #: src/gedlib/messages.c:514 msgid "2 Edit source record from the database" msgstr "" #: src/gedlib/messages.c:515 msgid "3 Add an event record to the database" msgstr "" #: src/gedlib/messages.c:516 msgid "4 Edit event record from the database" msgstr "" #: src/gedlib/messages.c:517 msgid "5 Add an other record to the database" msgstr "" #: src/gedlib/messages.c:518 msgid "6 Edit other record from the database" msgstr "" #: src/gedlib/messages.c:521 msgid "Translation Tables" msgstr "" #: src/gedlib/messages.c:522 msgid "e edit individual tables (in db)" msgstr "" #: src/gedlib/messages.c:523 msgid "l load a table from a file (into db)" msgstr "" #: src/gedlib/messages.c:524 msgid "s save a table to a file (from db)" msgstr "" #: src/gedlib/messages.c:525 msgid "x export all tables (from db to files)" msgstr "" #: src/gedlib/messages.c:526 msgid "i import all tables (from files into db)" msgstr "" #: src/gedlib/messages.c:527 msgid "export/import directory:" msgstr "" #: src/gedlib/messages.c:530 msgid "Which character mapping do you want to edit?" msgstr "" #: src/gedlib/messages.c:531 msgid "Which character mapping do you want to save?" msgstr "" #: src/gedlib/messages.c:534 msgid "Not implemented yet" msgstr "" #: src/gedlib/messages.c:537 msgid "What do you want to add?" msgstr "" #: src/gedlib/messages.c:538 msgid "p Person - add new person to the database" msgstr "" #: src/gedlib/messages.c:539 msgid "f Family - create family record from one or two spouses" msgstr "" #: src/gedlib/messages.c:540 msgid "c Child - add a child to an existing family" msgstr "" #: src/gedlib/messages.c:541 msgid "s Spouse - add a spouse to an existing family" msgstr "" #: src/gedlib/messages.c:544 msgid "What do you want to remove?" msgstr "" #: src/gedlib/messages.c:545 msgid "c Child - remove a child from his/her family" msgstr "" #: src/gedlib/messages.c:546 msgid "s Spouse - remove a spouse from a family" msgstr "" #: src/gedlib/messages.c:547 msgid "i Individual - remove a person completely" msgstr "" #: src/gedlib/messages.c:548 msgid "f Family - remove a family completely" msgstr "" #: src/gedlib/messages.c:549 msgid "o Other - remove other record completely" msgstr "" #: src/gedlib/messages.c:552 msgid "How would you like to find a record?" msgstr "" #: src/gedlib/messages.c:555 msgid "Performing full name scan" msgstr "" #: src/gedlib/messages.c:556 msgid "Performing name fragment scan" msgstr "" #: src/gedlib/messages.c:557 msgid "Performing refn scan" msgstr "" #: src/gedlib/messages.c:558 msgid "Performing source scan" msgstr "" #: src/gedlib/messages.c:559 msgid "No records found in scan" msgstr "" #: src/gedlib/messages.c:562 msgid "abt %1" msgstr "" #: src/gedlib/messages.c:563 msgid "about %1" msgstr "" #: src/gedlib/messages.c:564 msgid "est %1" msgstr "" #: src/gedlib/messages.c:565 msgid "estimated %1" msgstr "" #: src/gedlib/messages.c:566 msgid "cal %1" msgstr "" #: src/gedlib/messages.c:567 msgid "calculated %1" msgstr "" #: src/gedlib/messages.c:568 msgid "fr %1" msgstr "" #: src/gedlib/messages.c:569 msgid "from %1" msgstr "" #: src/gedlib/messages.c:570 src/gedlib/messages.c:571 msgid "to %1" msgstr "" #: src/gedlib/messages.c:572 msgid "fr %1 to %2" msgstr "" #: src/gedlib/messages.c:573 msgid "from %1 to %2" msgstr "" #: src/gedlib/messages.c:574 msgid "bef %1" msgstr "" #: src/gedlib/messages.c:575 msgid "before %1" msgstr "" #: src/gedlib/messages.c:576 msgid "aft %1" msgstr "" #: src/gedlib/messages.c:577 msgid "after %1" msgstr "" #: src/gedlib/messages.c:578 msgid "bet %1 and %2" msgstr "" #: src/gedlib/messages.c:579 msgid "between %1 and %2" msgstr "" #: src/gedlib/messages.c:582 msgid "B.C." msgstr "" #: src/gedlib/messages.c:584 msgid "BC" msgstr "" #: src/gedlib/messages.c:586 msgid "B.C.E." msgstr "" #: src/gedlib/messages.c:588 msgid "BCE" msgstr "" #: src/gedlib/messages.c:590 msgid "A.D." msgstr "" #: src/gedlib/messages.c:592 msgid "AD" msgstr "" #: src/gedlib/messages.c:594 msgid "C.E." msgstr "" #: src/gedlib/messages.c:596 msgid "CE" msgstr "" #: src/gedlib/messages.c:599 msgid "%1J" msgstr "" #: src/gedlib/messages.c:601 msgid "%1 HEB" msgstr "" #: src/gedlib/messages.c:603 msgid "%1 FR" msgstr "" #: src/gedlib/messages.c:605 msgid "%1 AUC" msgstr "" #: src/gedlib/messages.c:607 msgid "jan" msgstr "gen" #: src/gedlib/messages.c:608 msgid "january" msgstr "gennaio" #: src/gedlib/messages.c:609 msgid "feb" msgstr "feb" #: src/gedlib/messages.c:610 msgid "february" msgstr "febbraio" #: src/gedlib/messages.c:611 msgid "mar" msgstr "mar" #: src/gedlib/messages.c:612 msgid "march" msgstr "marzo" #: src/gedlib/messages.c:613 msgid "apr" msgstr "apr" #: src/gedlib/messages.c:614 msgid "april" msgstr "aprile" #: src/gedlib/messages.c:616 msgid "**may" msgstr "mag" #: src/gedlib/messages.c:617 msgid "may" msgstr "maggio" #: src/gedlib/messages.c:618 msgid "jun" msgstr "giu" #: src/gedlib/messages.c:619 msgid "june" msgstr "giugno" #: src/gedlib/messages.c:620 msgid "jul" msgstr "lug" #: src/gedlib/messages.c:621 msgid "july" msgstr "luglio" #: src/gedlib/messages.c:622 msgid "aug" msgstr "aug" #: src/gedlib/messages.c:623 msgid "august" msgstr "agosto" #: src/gedlib/messages.c:624 msgid "sep" msgstr "set" #: src/gedlib/messages.c:625 msgid "september" msgstr "settembre" #: src/gedlib/messages.c:626 msgid "oct" msgstr "ott" #: src/gedlib/messages.c:627 msgid "october" msgstr "ottobre" #: src/gedlib/messages.c:628 msgid "nov" msgstr "nov" #: src/gedlib/messages.c:629 msgid "november" msgstr "novembre" #: src/gedlib/messages.c:630 msgid "dec" msgstr "dic" #: src/gedlib/messages.c:631 msgid "december" msgstr "dicembre" #: src/gedlib/messages.c:633 msgid "tsh" msgstr "" #: src/gedlib/messages.c:634 msgid "tishri" msgstr "" #: src/gedlib/messages.c:635 msgid "csh" msgstr "" #: src/gedlib/messages.c:636 msgid "cheshvan" msgstr "" #: src/gedlib/messages.c:637 msgid "ksl" msgstr "" #: src/gedlib/messages.c:638 msgid "kislev" msgstr "" #: src/gedlib/messages.c:639 msgid "tvt" msgstr "" #: src/gedlib/messages.c:640 msgid "tevet" msgstr "" #: src/gedlib/messages.c:641 msgid "shv" msgstr "" #: src/gedlib/messages.c:642 msgid "shevat" msgstr "" #: src/gedlib/messages.c:643 msgid "adr" msgstr "" #: src/gedlib/messages.c:644 msgid "adar" msgstr "" #: src/gedlib/messages.c:645 msgid "ads" msgstr "" #: src/gedlib/messages.c:646 msgid "adar sheni" msgstr "" #: src/gedlib/messages.c:647 msgid "nsn" msgstr "" #: src/gedlib/messages.c:648 msgid "nisan" msgstr "" #: src/gedlib/messages.c:649 msgid "iyr" msgstr "" #: src/gedlib/messages.c:650 msgid "iyar" msgstr "" #: src/gedlib/messages.c:651 msgid "svn" msgstr "" #: src/gedlib/messages.c:652 msgid "sivan" msgstr "" #: src/gedlib/messages.c:653 msgid "tmz" msgstr "" #: src/gedlib/messages.c:654 msgid "tamuz" msgstr "" #: src/gedlib/messages.c:655 msgid "aav" msgstr "" #: src/gedlib/messages.c:656 msgid "av" msgstr "" #: src/gedlib/messages.c:657 msgid "ell" msgstr "" #: src/gedlib/messages.c:658 msgid "elul" msgstr "" #: src/gedlib/messages.c:660 msgid "vend" msgstr "" #: src/gedlib/messages.c:661 msgid "vendemiaire" msgstr "" #: src/gedlib/messages.c:662 msgid "brum" msgstr "" #: src/gedlib/messages.c:663 msgid "brumaire" msgstr "" #: src/gedlib/messages.c:664 msgid "frim" msgstr "" #: src/gedlib/messages.c:665 msgid "frimaire" msgstr "" #: src/gedlib/messages.c:666 msgid "nivo" msgstr "" #: src/gedlib/messages.c:667 msgid "nivose" msgstr "" #: src/gedlib/messages.c:668 msgid "pluv" msgstr "" #: src/gedlib/messages.c:669 msgid "pluviose" msgstr "" #: src/gedlib/messages.c:670 msgid "vent" msgstr "" #: src/gedlib/messages.c:671 msgid "ventose" msgstr "" #: src/gedlib/messages.c:672 msgid "germ" msgstr "" #: src/gedlib/messages.c:673 msgid "germinal" msgstr "" #: src/gedlib/messages.c:674 msgid "flor" msgstr "" #: src/gedlib/messages.c:675 msgid "floreal" msgstr "" #: src/gedlib/messages.c:676 msgid "prai" msgstr "" #: src/gedlib/messages.c:677 msgid "prairial" msgstr "" #: src/gedlib/messages.c:678 msgid "mess" msgstr "" #: src/gedlib/messages.c:679 msgid "messidor" msgstr "" #: src/gedlib/messages.c:680 msgid "ther" msgstr "" #: src/gedlib/messages.c:681 msgid "thermidor" msgstr "" #: src/gedlib/messages.c:682 msgid "fruc" msgstr "" #: src/gedlib/messages.c:683 msgid "fructidor" msgstr "" #: src/gedlib/messages.c:684 msgid "comp" msgstr "" #: src/gedlib/messages.c:685 msgid "jour_complementairs" msgstr "" #: src/gedlib/node.c:610 msgid "NO NAME" msgstr "" #: src/gedlib/node.c:1167 #, c-format msgid "Node memory leaks:" msgstr "" #: src/gedlib/node.c:1170 src/gedlib/record.c:361 src/interp/pvalalloc.c:301 #, c-format msgid "%d item leaked" msgid_plural "%d items leaked" msgstr[0] "" msgstr[1] "" #: src/gedlib/record.c:358 #, c-format msgid "Record memory leaks:" msgstr "" #: src/gedlib/remove.c:250 msgid "Families may not yet be removed in this fashion." msgstr "" #. TRANSLATORS: Character set conversion from external editor to database internal #: src/gedlib/translat.c:100 msgid "Editor to Internal" msgstr "" #. TRANSLATORS: Character set conversion from database internal to external editor #: src/gedlib/translat.c:102 msgid "Internal to Editor" msgstr "" #: src/gedlib/translat.c:103 msgid "GEDCOM to Internal" msgstr "" #: src/gedlib/translat.c:104 msgid "Internal to GEDCOM" msgstr "" #: src/gedlib/translat.c:105 msgid "Display to Internal" msgstr "" #: src/gedlib/translat.c:106 msgid "Internal to Display" msgstr "" #: src/gedlib/translat.c:107 msgid "Report to Internal" msgstr "" #: src/gedlib/translat.c:108 msgid "Internal to Report" msgstr "" #. TRANSLATORS: key for "Editor to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:119 msgid "menu|trantable|e" msgstr "" #. TRANSLATORS: key for "Internal to Editor" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:122 msgid "menu|trantable|m" msgstr "" #. TRANSLATORS: key for "GEDCOM to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:125 msgid "menu|trantable|i" msgstr "" #. TRANSLATORS: key for "Internal to GEDCOM" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:128 msgid "menu|trantable|x" msgstr "" #. TRANSLATORS: key for "Display to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:131 msgid "menu|trantable|g" msgstr "" #. TRANSLATORS: key for "Internal to Display" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:134 msgid "menu|trantable|d" msgstr "" #. TRANSLATORS: key for "Report to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:137 msgid "menu|trantable|p" msgstr "" #. TRANSLATORS: key for "Internal to Report" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:140 msgid "menu|trantable|r" msgstr "" #. TRANSLATORS: db internal translation table note for tt menu #: src/gedlib/translat.c:473 #, c-format msgid " (dbint tt: %s)" msgstr "" #: src/gedlib/valid.c:75 msgid "This person record does not have a name line." msgstr "" #: src/gedlib/xlat.c:347 #, c-format msgid "ttpath get_conversion_dyntt:from <%s> to <%s>: %s" msgstr "" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 msgid "succeeded" msgstr "" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 #, fuzzy msgid "failed" msgstr "morto: " #: src/gedlib/xlat.c:369 #, c-format msgid "ttpath get_subcoding_dyntt from <%s> to subcode <%s>: %s" msgstr "" #: src/gedlib/xlat.c:435 msgid "No TTPATH config variable" msgstr "" #: src/gedlib/xlat.c:464 #, c-format msgid "ttpath checking dir <%s>" msgstr "" #: src/gedlib/xlat.c:478 #, c-format msgid "ttpath file <%s> typed as %d" msgstr "" #: src/gedlib/xlat.c:690 msgid "(no conversion)" msgstr "" #. TRANSLATORS: steps in a chain of codeset conversions, eg, Editor-to-Internal #: src/gedlib/xlat.c:713 #, fuzzy, c-format msgid "%d step" msgid_plural "%d steps" msgstr[0] "set" msgstr[1] "set" #: src/gedlib/xreffile.c:400 #, c-format msgid "Corrupt DELETESET %c" msgstr "" #: src/gedlib/xreffile.c:425 #, c-format msgid "Tried to add already-deleted record (%ld) to xref (%c)!" msgstr "" #: src/interp/alloc.c:798 #, c-format msgid "Error: file \"%s\": line %d: " msgstr "" #: src/interp/alloc.c:903 #, c-format msgid "%s: the arg must be an integer." msgstr "" #: src/interp/alloc.c:904 #, c-format msgid "%s: the arg #%s must be an integer." msgstr "" #: src/interp/alloc.c:905 #, c-format msgid "%s: the arg #%s must be a float." msgstr "" #: src/interp/alloc.c:906 #, c-format msgid "%s: the arg must be a string." msgstr "" #: src/interp/alloc.c:907 #, c-format msgid "%s: the arg #%s must be a string." msgstr "" #: src/interp/alloc.c:908 #, c-format msgid "%s: null arg not permissible." msgstr "" #: src/interp/alloc.c:909 #, c-format msgid "%s: the arg must be a filename." msgstr "" #: src/interp/alloc.c:910 #, c-format msgid "%s: the arg must be a node or string." msgstr "" #: src/interp/alloc.c:911 #, c-format msgid "%s: the arg must be a person." msgstr "" #: src/interp/alloc.c:912 #, c-format msgid "%s: the arg #%s must be a person." msgstr "" #: src/interp/alloc.c:913 #, c-format msgid "%s: the arg must be a family." msgstr "" #: src/interp/alloc.c:914 #, c-format msgid "%s: the arg #%s must be a family." msgstr "" #: src/interp/alloc.c:915 #, c-format msgid "%s: the arg #%s must be a record." msgstr "" #: src/interp/alloc.c:916 #, c-format msgid "%s: the arg must be a node." msgstr "" #: src/interp/alloc.c:917 #, c-format msgid "%s: the arg #%s must be a node." msgstr "" #: src/interp/alloc.c:918 #, c-format msgid "%s: the arg must be a variable." msgstr "" #: src/interp/alloc.c:919 #, c-format msgid "%s: the arg #%s must be a variable." msgstr "" #: src/interp/alloc.c:920 #, c-format msgid "%s: the arg #%s must be a boolean." msgstr "" #: src/interp/alloc.c:921 #, c-format msgid "%s: the arg must be a list." msgstr "" #: src/interp/alloc.c:922 #, c-format msgid "%s: the arg #%s must be a list." msgstr "" #: src/interp/alloc.c:923 #, c-format msgid "%s: the arg #%s must be a table." msgstr "" #: src/interp/alloc.c:924 #, c-format msgid "%s: the arg must be a set." msgstr "" #: src/interp/alloc.c:925 #, c-format msgid "%s: the arg #%s must be a set." msgstr "" #: src/interp/alloc.c:926 #, c-format msgid "%s: Bad arguments" msgstr "" #: src/interp/alloc.c:927 #, c-format msgid "%s: the arg had a major error." msgstr "" #: src/interp/alloc.c:928 #, c-format msgid "%s: the arg #%s had a major error." msgstr "" #: src/interp/alloc.c:929 #, c-format msgid "%s: the arg #%s would cause an arithmetic exception." msgstr "" #: src/interp/builtin.c:111 msgid "Enter integer for program" msgstr "" #: src/interp/builtin.c:181 msgid "Identify person for program:" msgstr "" #: src/interp/builtin.c:206 msgid "Enter a spouse from family." msgstr "" #: src/interp/builtin.c:207 msgid "Enter a sibling from family." msgstr "" #: src/interp/builtin.c:240 msgid "Identify list of persons for program:" msgstr "" #: src/interp/builtin.c:329 msgid "name: person does not have a name" msgstr "" #: src/interp/builtin.c:385 msgid "fullname: person does not have a name" msgstr "" #: src/interp/builtin.c:412 msgid "surname: person does not have a name" msgstr "" #: src/interp/builtin.c:437 msgid "soundex: person does not have a name" msgstr "" #: src/interp/builtin.c:500 #, c-format msgid "Bad escape code at offset %d in bytecode string <%s>" msgstr "" #: src/interp/builtin.c:643 msgid "(givens) person does not have a name" msgstr "" #: src/interp/builtin.c:670 #, c-format msgid "set(%s, ) is invalid" msgstr "" #: src/interp/builtin.c:1191 msgid "first" msgstr "" #: src/interp/builtin.c:1191 msgid "second" msgstr "" #: src/interp/builtin.c:1191 msgid "third" msgstr "" #: src/interp/builtin.c:1191 msgid "fourth" msgstr "" #: src/interp/builtin.c:1191 msgid "fifth" msgstr "" #: src/interp/builtin.c:1192 msgid "sixth" msgstr "" #: src/interp/builtin.c:1192 msgid "seventh" msgstr "" #: src/interp/builtin.c:1192 msgid "eighth" msgstr "" #: src/interp/builtin.c:1192 msgid "ninth" msgstr "" #: src/interp/builtin.c:1192 msgid "tenth" msgstr "" #: src/interp/builtin.c:1193 msgid "eleventh" msgstr "" #: src/interp/builtin.c:1193 msgid "twelfth" msgstr "" #: src/interp/builtin.c:1210 #, c-format msgid "%ldth" msgstr "" #: src/interp/builtin.c:1220 msgid "zero" msgstr "" #: src/interp/builtin.c:1220 msgid "one" msgstr "" #: src/interp/builtin.c:1220 msgid "two" msgstr "" #: src/interp/builtin.c:1220 msgid "three" msgstr "" #: src/interp/builtin.c:1220 msgid "four" msgstr "" #: src/interp/builtin.c:1220 msgid "five" msgstr "" #: src/interp/builtin.c:1221 msgid "six" msgstr "" #: src/interp/builtin.c:1221 msgid "seven" msgstr "" #: src/interp/builtin.c:1221 msgid "eight" msgstr "" #: src/interp/builtin.c:1221 msgid "nine" msgstr "" #: src/interp/builtin.c:1221 msgid "ten" msgstr "" #: src/interp/builtin.c:1222 msgid "eleven" msgstr "" #: src/interp/builtin.c:1222 msgid "twelve" msgstr "" #: src/interp/builtin.c:2173 msgid "the arg to empty is not a list, table or set" msgstr "" #: src/interp/builtin.c:2283 msgid "the arg to length is not a list, table or set" msgstr "" #: src/interp/builtin.c:2470 msgid "He" msgstr "" #: src/interp/builtin.c:2470 msgid "he" msgstr "" #: src/interp/builtin.c:2470 msgid "His" msgstr "" #: src/interp/builtin.c:2470 msgid "his" msgstr "" #: src/interp/builtin.c:2470 msgid "him" msgstr "" #: src/interp/builtin.c:2472 msgid "She" msgstr "" #: src/interp/builtin.c:2472 #, fuzzy msgid "she" msgstr "set" #: src/interp/builtin.c:2472 msgid "Her" msgstr "" #: src/interp/builtin.c:2472 msgid "her" msgstr "" #: src/interp/builtin.c:2472 msgid "her_" msgstr "" #: src/interp/builtin.c:2850 msgid "(trimname) person does not have a name" msgstr "" #: src/interp/builtin.c:2940 msgid "Sunday" msgstr "" #: src/interp/builtin.c:2940 msgid "Monday" msgstr "" #: src/interp/builtin.c:2940 msgid "Tuesday" msgstr "" #: src/interp/builtin.c:2941 msgid "Wednesday" msgstr "" #: src/interp/builtin.c:2941 msgid "Thursday" msgstr "" #: src/interp/builtin.c:2941 msgid "Friday" msgstr "" #: src/interp/builtin.c:2941 msgid "Saturday" msgstr "" #: src/interp/eval.c:244 #, c-format msgid "Undefined func: %s" msgstr "" #: src/interp/eval.c:246 #, c-format msgid "Ambiguous call to func: %s" msgstr "" #: src/interp/interp.c:247 #, c-format msgid "Report not found: %s " msgstr "" #: src/interp/interp.c:258 #, c-format msgid "Error: file <%s> not found" msgstr "" #: src/interp/interp.c:316 msgid "Program contains errors.\n" msgstr "" #: src/interp/interp.c:323 msgid "Program needs a starting procedure.\n" msgstr "" #: src/interp/interp.c:340 #, c-format msgid "Proc %s must be called with %d (not %d) parameters." msgstr "" #: src/interp/interp.c:355 msgid "Program is running..." msgstr "" #: src/interp/interp.c:410 msgid "Program was run successfully.\n" msgstr "" #: src/interp/interp.c:414 msgid "Program was cancelled.\n" msgstr "" #: src/interp/interp.c:416 msgid "Program was not run because of errors.\n" msgstr "" #: src/interp/interp.c:506 #, c-format msgid "Error: file <%s> not found: %s\n" msgstr "" #: src/interp/interp.c:538 #, c-format msgid "" "\n" "Report duration %s (ui duration %s)\n" msgstr "" #: src/interp/interp.c:610 #, c-format msgid "identifier: %s should be a string\n" msgstr "" #: src/interp/interp.c:1778 #, c-format msgid "Undefined proc: %s" msgstr "" #: src/interp/interp.c:1780 #, c-format msgid "Ambiguous call to proc: %s" msgstr "" #: src/interp/interp.c:2017 #, c-format msgid "Duplicate proc %s (lines %d and %d) in report: %s" msgstr "" #: src/interp/interp.c:2047 #, c-format msgid "Duplicate func %s (lines %d and %d) in report: %s" msgstr "" #: src/interp/interp.c:2110 msgid "This report requires a newer program to run\n" msgstr "" #: src/interp/interp.c:2166 #, c-format msgid "Program forgot to unlock %d record" msgid_plural "Program forgot to unlock %d records" msgstr[0] "" msgstr[1] "" #: src/interp/intrpseq.c:303 msgid "missing or incorrect value for sort" msgstr "" #: src/interp/lex.c:219 #, c-format msgid "" "String constant overflowing internal buffer tokbuf len=%d, file: %s, start " "line: %ld" msgstr "" #: src/interp/more.c:648 msgid "Please choose from the following list." msgstr "" #: src/interp/more.c:685 msgid "Illegal type found in list in menuchoose" msgstr "" #: src/interp/more.c:976 msgid "error evaluating arg to lock" msgstr "" #: src/interp/more.c:982 msgid "null arg in lock" msgstr "" #: src/interp/more.c:993 msgid "node passed to lock must be inside a record" msgstr "" #: src/interp/more.c:999 msgid "the arg to lock must be a record or node" msgstr "" #: src/interp/more.c:1007 msgid "Error: there are 999,999 locks on arg to lock" msgstr "" #: src/interp/more.c:1027 msgid "error evaluating arg to unlock" msgstr "" #: src/interp/more.c:1033 msgid "null arg in unlock" msgstr "" #: src/interp/more.c:1044 msgid "node passed to unlock must be inside a record" msgstr "" #: src/interp/more.c:1050 msgid "the arg to unlock must be a record or node" msgstr "" #: src/interp/pvalalloc.c:295 #, c-format msgid "PVALUE memory leak report:" msgstr "" #: src/interp/pvalmath.c:70 #, c-format msgid "Nonnumeric type to operation %s: %s" msgstr "" #: src/interp/pvalmath.c:85 #, c-format msgid "Illegal value to operation %s: %s" msgstr "" #: src/interp/pvalmath.c:411 #, c-format msgid "%s: not compatible numeric types: %s and %s" msgstr "" #: src/interp/pvalue.c:810 #, c-format msgid "%s: Incomparable types: %s and %s" msgstr "" #: src/interp/pvalue.c:907 msgid "NOT PVALUE: NULL!" msgstr "" #: src/interp/pvalue.c:911 #, c-format msgid "NOT PVALUE: invalid type=%d)!" msgstr "" #: src/interp/pvalue.c:949 #, c-format msgid "%d item" msgid_plural "%d items" msgstr[0] "" msgstr[1] "" #: src/interp/pvalue.c:956 #, c-format msgid "%d entry" msgid_plural "%d entries" msgstr[0] "" msgstr[1] "" #: src/interp/pvalue.c:963 #, c-format msgid "%d record" msgid_plural "%d records" msgstr[0] "" msgstr[1] "" #: src/interp/pvalue.c:970 #, c-format msgid "%d element" msgid_plural "%d elements" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:125 msgid "Enter d for debugger, q to quit" msgstr "" #: src/interp/progerr.c:140 #, c-format msgid "Display local (%d var)" msgid_plural "Display locals (%d vars)" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:146 #, c-format msgid "Display global (%d var)" msgid_plural "Display globals (%d vars)" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:151 #, c-format msgid "Call stack has %d higher level" msgid_plural "Call stack has %d higher levels" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:154 msgid " Go up one level" msgstr "" #: src/interp/progerr.c:160 #, c-format msgid "Call stack has %d lower level" msgid_plural "Call stack has %d lower levels" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:164 msgid " Go down one level" msgstr "" #: src/interp/progerr.c:169 msgid "Quit debugger" msgstr "" #: src/interp/progerr.c:171 msgid "Report debugger" msgstr "" #: src/interp/progerr.c:175 msgid "Local variables" msgstr "" #: src/interp/progerr.c:178 msgid "Global variables" msgstr "" #: src/interp/progerr.c:338 msgid "Report cancelled" msgstr "" #: src/interp/progerr.c:346 msgid "Report file: " msgstr "" #: src/interp/progerr.c:355 #, c-format msgid "Parsing Error at line %d: " msgstr "" #: src/interp/progerr.c:357 #, c-format msgid "Runtime Error at line %d: " msgstr "" #: src/interp/progerr.c:360 msgid "Aborting: " msgstr "" #: src/interp/rassa.c:242 #, c-format msgid "Could not open file %s" msgstr "" #: src/interp/rassa.c:271 msgid "Report stopping due to error opening output file" msgstr "" #: src/interp/rassa.c:273 msgid "Report stopping due to lack of output file" msgstr "" #: src/interp/rassa.c:330 msgid "illegal call to pos." msgstr "" #: src/interp/rptsort.c:104 msgid "First argument to (r)sort must be list or array" msgstr "" #: src/interp/rptsort.c:117 src/interp/rptsort.c:128 msgid "Arguments to (r)sort must be of same size" msgstr "" #: src/interp/rptsort.c:137 msgid "Second argument to (r)sort must be list or array" msgstr "" #: src/liflines/add.c:68 #, c-format msgid "There was %d unresolved reference." msgid_plural "There were %d unresolved references." msgstr[0] "" msgstr[1] "" #: src/liflines/brwsmenu.c:25 msgid "? Other menu choices" msgstr "" #: src/liflines/brwsmenu.c:69 msgid "e Edit the person" msgstr "e Edit qq person" #: src/liflines/brwsmenu.c:70 msgid "e Edit the family" msgstr "" #: src/liflines/brwsmenu.c:71 msgid "e Edit record" msgstr "" #: src/liflines/brwsmenu.c:72 msgid "e Edit top person" msgstr "" #: src/liflines/brwsmenu.c:73 msgid "e Edit top family" msgstr "" #: src/liflines/brwsmenu.c:74 msgid "f Browse to father" msgstr "" #: src/liflines/brwsmenu.c:75 msgid "f Browse top father" msgstr "" #: src/liflines/brwsmenu.c:76 msgid "m Browse to mother" msgstr "" #: src/liflines/brwsmenu.c:77 msgid "m Browse top mother" msgstr "" #: src/liflines/brwsmenu.c:78 msgid "s Browse to spouse/s" msgstr "" #: src/liflines/brwsmenu.c:79 msgid "s Browse top spouse/s" msgstr "" #: src/liflines/brwsmenu.c:80 msgid "c Browse to children" msgstr "" #: src/liflines/brwsmenu.c:81 msgid "c Browse top children" msgstr "" #: src/liflines/brwsmenu.c:82 msgid "o Browse to older sib" msgstr "" #: src/liflines/brwsmenu.c:83 msgid "y Browse to younger sib" msgstr "" #: src/liflines/brwsmenu.c:84 msgid "g Browse to family" msgstr "" #: src/liflines/brwsmenu.c:85 msgid "u Browse to parents" msgstr "" #: src/liflines/brwsmenu.c:86 msgid "b Browse to persons" msgstr "" #: src/liflines/brwsmenu.c:87 msgid "t Browse to top" msgstr "" #: src/liflines/brwsmenu.c:88 msgid "b Browse to bottom" msgstr "" #: src/liflines/brwsmenu.c:89 msgid "h Add as spouse" msgstr "" #: src/liflines/brwsmenu.c:90 msgid "i Add as child" msgstr "" #: src/liflines/brwsmenu.c:91 msgid "s Add spouse to family" msgstr "" #: src/liflines/brwsmenu.c:92 msgid "a Add child to family" msgstr "" #: src/liflines/brwsmenu.c:93 msgid "a Add family" msgstr "" #: src/liflines/brwsmenu.c:94 msgid "x Swap two families" msgstr "" #: src/liflines/brwsmenu.c:95 msgid "x Swap two children" msgstr "" #: src/liflines/brwsmenu.c:97 #, no-c-format msgid "%c Reorder child" msgstr "" #: src/liflines/brwsmenu.c:98 msgid "x Switch top/bottom" msgstr "" #: src/liflines/brwsmenu.c:99 msgid "n Create new person" msgstr "" #: src/liflines/brwsmenu.c:100 msgid "a Create new family" msgstr "" #: src/liflines/brwsmenu.c:101 msgid "tt Enter tandem mode" msgstr "" #: src/liflines/brwsmenu.c:102 msgid "tt Enter family tandem" msgstr "" #: src/liflines/brwsmenu.c:103 msgid "zi Browse to indi" msgstr "" #: src/liflines/brwsmenu.c:104 msgid "zz Browse to any" msgstr "" #: src/liflines/brwsmenu.c:105 msgid "r Remove as spouse" msgstr "" #: src/liflines/brwsmenu.c:106 msgid "d Remove as child" msgstr "" #: src/liflines/brwsmenu.c:107 msgid "r Remove spouse from" msgstr "" #: src/liflines/brwsmenu.c:108 msgid "d Remove child from" msgstr "" #: src/liflines/brwsmenu.c:109 msgid "( Scroll up" msgstr "" #: src/liflines/brwsmenu.c:110 msgid ") Scroll down" msgstr "" #: src/liflines/brwsmenu.c:111 msgid "] Increase tree depth" msgstr "" #: src/liflines/brwsmenu.c:112 msgid "[ Decrease tree depth" msgstr "" #: src/liflines/brwsmenu.c:113 msgid "(t Scroll top up" msgstr "" #: src/liflines/brwsmenu.c:114 msgid ")t Scroll top down" msgstr "" #: src/liflines/brwsmenu.c:115 msgid "(b Scroll bottom up" msgstr "" #: src/liflines/brwsmenu.c:116 msgid ")b Scroll bottom down" msgstr "" #: src/liflines/brwsmenu.c:117 msgid "(( Scroll both up" msgstr "" #: src/liflines/brwsmenu.c:118 msgid ")) Scroll both down" msgstr "" #: src/liflines/brwsmenu.c:119 msgid "# Toggle childnos" msgstr "" #: src/liflines/brwsmenu.c:120 msgid "!g GEDCOM mode" msgstr "" #: src/liflines/brwsmenu.c:121 msgid "!x GEDCOMX mode" msgstr "" #: src/liflines/brwsmenu.c:122 msgid "!t GEDCOMT mode" msgstr "" #: src/liflines/brwsmenu.c:123 msgid "!a Ancestors mode" msgstr "" #: src/liflines/brwsmenu.c:124 msgid "!d Descendants mode" msgstr "" #: src/liflines/brwsmenu.c:125 msgid "!n Normal mode" msgstr "" #: src/liflines/brwsmenu.c:126 msgid "p Pedigree mode" msgstr "" #: src/liflines/brwsmenu.c:127 msgid "!! Cycle mode" msgstr "" #: src/liflines/brwsmenu.c:129 msgid "(1-9) Browse to child" msgstr "" #: src/liflines/brwsmenu.c:130 msgid "y Turn on sync" msgstr "" #: src/liflines/brwsmenu.c:131 msgid "A Advanced view" msgstr "" #: src/liflines/brwsmenu.c:132 msgid "tc Tandem to children" msgstr "" #: src/liflines/brwsmenu.c:133 msgid "tf Tandem to father/s" msgstr "" #: src/liflines/brwsmenu.c:134 msgid "tg Tandem to family/s" msgstr "" #: src/liflines/brwsmenu.c:135 msgid "f Browse to fathers" msgstr "" #: src/liflines/brwsmenu.c:136 msgid "m Browse to mothers" msgstr "" #: src/liflines/brwsmenu.c:137 msgid "tm Tandem to mother/s" msgstr "" #: src/liflines/brwsmenu.c:138 msgid "ts Tandem to spouse/s" msgstr "" #: src/liflines/brwsmenu.c:139 msgid "tu Tandem to parents" msgstr "" #: src/liflines/brwsmenu.c:140 msgid "< Enlarge menu area" msgstr "" #: src/liflines/brwsmenu.c:141 msgid "> Shrink menu area" msgstr "" #: src/liflines/brwsmenu.c:142 msgid "M> More menu cols" msgstr "" #: src/liflines/brwsmenu.c:143 msgid "M< Less menu cols" msgstr "" #: src/liflines/brwsmenu.c:144 msgid "+ Next in db" msgstr "" #: src/liflines/brwsmenu.c:145 msgid "- Prev in db" msgstr "" #: src/liflines/brwsmenu.c:146 msgid "d Copy top to bottom" msgstr "" #: src/liflines/brwsmenu.c:147 msgid "j Merge bottom to top" msgstr "" #: src/liflines/brwsmenu.c:148 src/liflines/listui.c:842 msgid "j Move down list" msgstr "" #: src/liflines/brwsmenu.c:149 src/liflines/listui.c:843 msgid "k Move up list" msgstr "" #: src/liflines/brwsmenu.c:150 src/liflines/listui.c:844 msgid "e Edit this person" msgstr "" #: src/liflines/brwsmenu.c:151 src/liflines/listui.c:845 msgid "i Browse this person" msgstr "" #: src/liflines/brwsmenu.c:152 src/liflines/listui.c:846 msgid "m Mark this person" msgstr "" #: src/liflines/brwsmenu.c:153 msgid "d Delete from list" msgstr "" #: src/liflines/brwsmenu.c:154 src/liflines/listui.c:849 msgid "n Name this list" msgstr "" #: src/liflines/brwsmenu.c:155 src/liflines/listui.c:850 msgid "b Browse new persons" msgstr "" #: src/liflines/brwsmenu.c:156 src/liflines/listui.c:851 msgid "a Add to this list" msgstr "" #: src/liflines/brwsmenu.c:157 src/liflines/listui.c:852 msgid "x Swap mark/current" msgstr "" #: src/liflines/brwsmenu.c:158 msgid "$s List sources" msgstr "" #: src/liflines/brwsmenu.c:159 msgid "$n List notes" msgstr "" #: src/liflines/brwsmenu.c:160 msgid "$$ List references" msgstr "" #: src/liflines/brwsmenu.c:161 msgid "^b History/back" msgstr "" #: src/liflines/brwsmenu.c:162 msgid "^f History/fwd" msgstr "" #: src/liflines/brwsmenu.c:163 msgid "^l History list" msgstr "" #: src/liflines/brwsmenu.c:164 msgid "^c Clear history" msgstr "" #: src/liflines/brwsmenu.c:165 msgid "^xb ChngHist/back" msgstr "" #: src/liflines/brwsmenu.c:166 msgid "^xf ChngHist/fwd" msgstr "" #: src/liflines/brwsmenu.c:167 msgid "^xl ChngHist list" msgstr "" #: src/liflines/brwsmenu.c:168 msgid "^xc Clear ChngHist" msgstr "" #: src/liflines/brwsmenu.c:170 #, no-c-format msgid "%s Add source" msgstr "" #: src/liflines/brwsmenu.c:172 #, no-c-format msgid "%e Add event" msgstr "" #: src/liflines/brwsmenu.c:174 #, no-c-format msgid "%o Add other" msgstr "" #: src/liflines/brwsmenu.c:177 msgid "B Browse new family" msgstr "" #: src/liflines/brwsmenu.c:490 msgid "Missing title" msgstr "" #: src/liflines/delete.c:85 #, c-format msgid "%d spouse" msgid_plural "%d spouses" msgstr[0] "" msgstr[1] "" #: src/liflines/delete.c:88 #, c-format msgid "%d child" msgid_plural "%d children" msgstr[0] "" msgstr[1] "" #: src/liflines/error.c:63 src/tools/dbverify.c:1504 msgid "Fatal Error" msgstr "" #: src/liflines/error.c:66 msgid "FATAL ERROR" msgstr "" #: src/liflines/error.c:70 #, c-format msgid " in file <%s> at line %d\n" msgstr "" #: src/liflines/error.c:72 src/tools/dbverify.c:1515 msgid "ASSERT failure" msgstr "" #: src/liflines/import.c:169 msgid "This is not a lineage linked GEDCOM file." msgstr "" #: src/liflines/import.c:170 msgid "Proceed anyway?" msgstr "" #: src/liflines/import.c:186 msgid "No current internal codeset, so no codeset conversion can be done" msgstr "" #: src/liflines/import.c:187 msgid "Proceed without codeset conversion?" msgstr "" #: src/liflines/import.c:204 #, c-format msgid "%d warning during import" msgid_plural "%d warnings during import" msgstr[0] "" msgstr[1] "" #: src/liflines/import.c:220 #, c-format msgid "Cannot convert codeset (from <%s> to <%s>)" msgstr "" #: src/liflines/import.c:223 msgid "Enter codeset to assume (* for none)" msgstr "" #: src/liflines/import.c:246 #, c-format msgid "Using original keys, %d deleted record will be in the database." msgid_plural "Using original keys, %d deleted records will be in the database." msgstr[0] "" msgstr[1] "" #: src/liflines/lbrowse.c:219 msgid "Tandom browse only compatible with persons or families." msgstr "" #: src/liflines/lines_usage.c:21 #, c-format msgid "%s invokes the Lifelines report execution program without GUI." msgstr "" #: src/liflines/lines_usage.c:23 #, c-format msgid "%s invokes the Lifelines GUI." msgstr "" #: src/liflines/lines_usage.c:26 #, c-format msgid "" "Lifelines is a program to manipulate genealogical information\n" "in lineage-linked GEDCOM format. It has a curses interface and a\n" "built-in interpreter for its own genealogical report language.\n" "\n" "It has its own databases, and records are edited directly in GEDCOM\n" "(with an editor of the user's choice). Records store\n" "information about people, families, sources, events, and\n" "other types of data (such as notes). Lifelines includes a\n" "custom report language and comes with a collection of reports." msgstr "" #: src/liflines/lines_usage.c:36 #, c-format msgid "Usage: %s [OPTIONS] [database]" msgstr "" #: src/liflines/lines_usage.c:38 src/tools/btedit.c:238 #, c-format msgid "Options:" msgstr "" #: src/liflines/lines_usage.c:40 #, c-format msgid "-C[FILE]" msgstr "" #: src/liflines/lines_usage.c:42 #, c-format msgid "Specify configuration file location" msgstr "" #: src/liflines/lines_usage.c:44 #, c-format msgid "Finnish option (if compiled to allow Finnish option)" msgstr "" #: src/liflines/lines_usage.c:46 #, c-format msgid "-I[KEY=VALUE]" msgstr "" #: src/liflines/lines_usage.c:48 #, c-format msgid "Specify a user property (e.g. -ILLEDITOR=gvim)" msgstr "" #: src/liflines/lines_usage.c:50 #, c-format msgid "log dynamic memory operation (for debugging)" msgstr "" #: src/liflines/lines_usage.c:52 #, c-format msgid "-c[TYPE][DIRECT,INDIRECT]" msgstr "" #: src/liflines/lines_usage.c:54 #, c-format msgid "" "supply cache values (eg, -ci400,4000f400,4000 sets direct indi\n" "\t\t& fam caches to 400, and indirect indi & fam caches to 4000)" msgstr "" #: src/liflines/lines_usage.c:57 #, c-format msgid "debug mode (disable signal trapping)" msgstr "" #: src/liflines/lines_usage.c:59 #, c-format msgid "force open (for recovery from errors or power failure)" msgstr "" #: src/liflines/lines_usage.c:61 #, c-format msgid "open database with immutable access (for use on read-only media)" msgstr "" #: src/liflines/lines_usage.c:63 #, c-format msgid "always show keys (even if REFN available)" msgstr "" #: src/liflines/lines_usage.c:65 #, c-format msgid "unlock a database (for correct access on read-write media)" msgstr "" #: src/liflines/lines_usage.c:67 #, c-format msgid "lock a database (for use on read-only media)" msgstr "" #: src/liflines/lines_usage.c:69 #, c-format msgid "do not use traditional family rules" msgstr "" #: src/liflines/lines_usage.c:71 #, c-format msgid "Specify program output filename (eg, -o/tmp/mytests)" msgstr "" #: src/liflines/lines_usage.c:73 #, c-format msgid "" "open database with read-only access (prohibiting other\n" "\t\twrite access)" msgstr "" #: src/liflines/lines_usage.c:76 #, c-format msgid "trace function calls in report programs (for debugging)" msgstr "" #: src/liflines/lines_usage.c:78 #, c-format msgid "-u[HEIGHT,WIDTH]" msgstr "" #: src/liflines/lines_usage.c:80 #, c-format msgid "" "specify window size (eg, -u120,34 specifies 120 columns\n" "\t\tby 34 rows)" msgstr "" #: src/liflines/lines_usage.c:83 #, c-format msgid "display this help and exit" msgstr "" #: src/liflines/lines_usage.c:85 #, c-format msgid "open database with writeable access (this is the default)" msgstr "" #: src/liflines/lines_usage.c:89 #, c-format msgid "execute a single lifelines report program directly" msgstr "" #: src/liflines/lines_usage.c:91 #, c-format msgid "" "Use normal ASCII characters for drawing lines, instead of\n" "\t\tspecial VT100 terminal characters" msgstr "" #: src/liflines/lines_usage.c:94 #, c-format msgid "output version information and exit" msgstr "" #: src/liflines/lines_usage.c:96 src/tools/btedit.c:244 #, c-format msgid "Examples:" msgstr "" #: src/liflines/lines_usage.c:99 #, c-format msgid "%s myfamily -x eol" msgstr "" #: src/liflines/lines_usage.c:101 #, c-format msgid "Open the database 'myfamily' with Lifelines" msgstr "" #: src/liflines/lines_usage.c:103 #, c-format msgid "and run the eol.ll report" msgstr "" #: src/liflines/lines_usage.c:105 #, c-format msgid "%s -f myfamily -x eol" msgstr "" #: src/liflines/lines_usage.c:107 #, c-format msgid "Unlock database 'myfamily', after a power failure left the" msgstr "" #: src/liflines/lines_usage.c:109 #, c-format msgid "database locked and run 'eol.ll' report" msgstr "" #: src/liflines/lines_usage.c:112 #, c-format msgid "%s myfamily" msgstr "" #: src/liflines/lines_usage.c:114 #, c-format msgid "Open database 'myfamily' with Lifelines" msgstr "" #: src/liflines/lines_usage.c:116 #, c-format msgid "%s -f myfamily" msgstr "" #: src/liflines/lines_usage.c:118 #, c-format msgid "" "Unlock database 'myfamily', after a power failure left\n" "\t\tthe database locked" msgstr "" #: src/liflines/lines_usage.c:122 #, c-format msgid "REPORTING BUGS" msgstr "" #: src/liflines/lines_usage.c:124 src/tools/btedit.c:250 #, c-format msgid "Report bugs to lifelines.sourceforge.net" msgstr "" #: src/liflines/lines_usage.c:126 #, c-format msgid "COPYRIGHT" msgstr "" #: src/liflines/lines_usage.c:131 #, c-format msgid "SEE ALSO" msgstr "" #: src/liflines/listui.c:155 src/liflines/listui.c:252 msgid "Commands: j Move down k Move up i Select q Quit" msgstr "" #: src/liflines/listui.c:157 msgid "Commands: j Move down k Move up q Quit" msgstr "" #: src/liflines/listui.c:249 msgid "Commands: j Move down k Move up d Delete i Select q Quit" msgstr "" #: src/liflines/listui.c:431 msgid "--- CURRENT SELECTION ---" msgstr "" #: src/liflines/listui.c:434 src/liflines/listui.c:597 msgid "--- LIST ---" msgstr "" #: src/liflines/listui.c:628 msgid "-- CURRENT SELECTION --" msgstr "" #: src/liflines/listui.c:840 msgid "Choose an operation:" msgstr "" #: src/liflines/listui.c:847 msgid "r Remove from list" msgstr "" #: src/liflines/listui.c:848 msgid "t Enter tandem mode" msgstr "" #: src/liflines/loadsave.c:94 msgid "Person" msgid_plural "Persons" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:98 msgid "Family" msgid_plural "Families" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:102 msgid "Source" msgid_plural "Sources" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:106 msgid "Event" msgid_plural "Events" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:110 msgid "Other" msgid_plural "Others" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:160 msgid "Checking GEDCOM file for errors.\n" msgstr "" #: src/liflines/loadsave.c:163 msgid "Error" msgid_plural "Errors" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:169 msgid "Warning" msgid_plural "Warnings" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:184 msgid "The database is read-only; loading has been canceled." msgstr "" #: src/liflines/loadsave.c:190 msgid "Adding unused keys as deleted keys..." msgstr "" #. TRANSLATORS: how long Import ran, and how much of that was UI delay #: src/liflines/loadsave.c:255 #, c-format msgid "Import time %s (ui %s)\n" msgstr "" #: src/liflines/loadsave.c:282 msgid "The database was not saved." msgstr "" #: src/liflines/main.c:385 msgid "Warning: database codeset unspecified" msgstr "" #: src/liflines/main.c:387 msgid "Warning: not all conversions available" msgstr "" #: src/liflines/menuset.c:155 #, c-format msgid "Menu (%s) choice sequence too long: %s" msgstr "" #: src/liflines/menuset.c:159 #, c-format msgid "Menu (%s) item lacked choice sequence: %s" msgstr "" #: src/liflines/menuset.c:242 src/liflines/menuset.c:254 #, c-format msgid "In menu: %s" msgstr "" #: src/liflines/menuset.c:244 #, c-format msgid "Duplicate hotkey for item: %s" msgstr "" #: src/liflines/menuset.c:247 #, c-format msgid "Clash with longer hotkey in item: %s" msgstr "" #: src/liflines/menuset.c:255 #, c-format msgid "Clash with shorter hotkey in item: %s" msgstr "" #: src/liflines/merge.c:772 #, c-format msgid "Bad spouse tag: %s" msgstr "" #: src/liflines/merge.c:800 src/liflines/merge.c:919 #, c-format msgid "Mismatched lineage spouse links between %s and %s: %ld and %ld" msgstr "" #: src/liflines/merge.c:816 src/liflines/merge.c:935 #, c-format msgid "Bad child tag: %s" msgstr "" #: src/liflines/merge.c:844 src/liflines/merge.c:963 #, c-format msgid "Mismatched lineage child links between %s and %s: %ld and %ld" msgstr "" #: src/liflines/merge.c:882 src/liflines/merge.c:891 #, c-format msgid "Bad HUSB tag: %s" msgstr "" #: src/liflines/miscutls.c:51 msgid "Whose key value do you want?" msgstr "" #: src/liflines/miscutls.c:67 msgid "Please enter person's internal key value." msgstr "" #: src/liflines/miscutls.c:68 #, fuzzy msgid "enter key:" msgstr "posizione: " #: src/liflines/miscutls.c:78 src/liflines/miscutls.c:82 #: src/liflines/miscutls.c:87 #, c-format msgid "No one in database has key value %s." msgstr "" #: src/liflines/scan.c:100 msgid "Enter pattern to match against single surname or given name." msgstr "" #: src/liflines/scan.c:112 msgid "Enter pattern to match against full name." msgstr "" #: src/liflines/scan.c:128 src/liflines/scan.c:178 src/liflines/scan.c:201 msgid "pattern: " msgstr "" #: src/liflines/scan.c:151 src/liflines/scan.c:165 msgid "Enter pattern to match against author." msgstr "" #: src/liflines/screen.c:317 #, c-format msgid "initscr failed" msgstr "" #: src/liflines/screen.c:334 #, c-format msgid "" "The requested window size (%ld,%ld) is too large for your terminal (%d,%d).\n" msgstr "" #: src/liflines/screen.c:342 #, c-format msgid "" "The requested window size (%ld,%ld) is too small for LifeLines (%d,%d).\n" msgstr "" #: src/liflines/screen.c:706 msgid "Search results" msgstr "" #: src/liflines/screen.c:813 #, c-format msgid "(pg %d/%d)" msgstr "" #: src/liflines/screen.c:1431 msgid "No conversion" msgstr "" #: src/liflines/screen.c:1517 msgid "Internal codeset" msgstr "" #: src/liflines/screen.c:1520 msgid "Internal UTF-8: Yes" msgstr "" #: src/liflines/screen.c:1522 msgid "Internal UTF-8: No" msgstr "" #: src/liflines/screen.c:1526 msgid "Locales are enabled." msgstr "" #: src/liflines/screen.c:1528 msgid "Locales are disabled." msgstr "" #: src/liflines/screen.c:1531 msgid "NLS (National Language Support) is compiled in." msgstr "" #: src/liflines/screen.c:1537 msgid "NLS (National Language Support) is not compiled in." msgstr "" #: src/liflines/screen.c:1550 msgid "iconv (codeset conversion) is compiled in." msgstr "" #: src/liflines/screen.c:1552 msgid "iconv (codeset conversion) is not compiled in." msgstr "" #: src/liflines/screen.c:1554 #, c-format msgid "Startup collate locale: %s" msgstr "" #: src/liflines/screen.c:1557 #, c-format msgid "Startup messages locale: %s" msgstr "" #: src/liflines/screen.c:1560 #, c-format msgid "Current collate locale: %s" msgstr "" #: src/liflines/screen.c:1563 #, c-format msgid "Current messages locale: %s" msgstr "" #: src/liflines/screen.c:1566 #, c-format msgid "Collation routine: %s" msgstr "" #: src/liflines/screen.c:1570 #, c-format msgid "GUI codeset: %s" msgstr "" #: src/liflines/screen.c:1573 #, c-format msgid "GUI output codeset: %s" msgstr "" #: src/liflines/screen.c:1575 #, c-format msgid "GUI input codeset: %s" msgstr "" #: src/liflines/screen.c:1580 #, c-format msgid "editor codeset: %s" msgstr "" #: src/liflines/screen.c:1583 #, c-format msgid "editor output codeset: %s" msgstr "" #: src/liflines/screen.c:1585 #, c-format msgid "editor input codeset: %s" msgstr "" #: src/liflines/screen.c:1590 #, c-format msgid "report codeset: %s" msgstr "" #: src/liflines/screen.c:1593 #, c-format msgid "report output codeset: %s" msgstr "" #: src/liflines/screen.c:1595 #, c-format msgid "report input codeset: %s" msgstr "" #: src/liflines/screen.c:1600 #, c-format msgid "GEDCOM codeset: %s" msgstr "" #: src/liflines/screen.c:1603 #, c-format msgid "gedcom output codeset: %s" msgstr "" #: src/liflines/screen.c:1605 #, c-format msgid "gedcom input codeset: %s" msgstr "" #: src/liflines/screen.c:1613 msgid "UTF-8 charprops loaded" msgstr "" #: src/liflines/screen.c:1615 msgid "UTF-8 charprops not loaded" msgstr "" #: src/liflines/screen.c:1619 msgid "Codeset information" msgstr "" #: src/liflines/screen.c:1636 #, c-format msgid "gettext dll: %s" msgstr "" #: src/liflines/screen.c:1640 #, c-format msgid "gettext dll version: %s" msgstr "" #: src/liflines/screen.c:1645 msgid "gettext dll had no version" msgstr "" #: src/liflines/screen.c:1650 msgid "no gettext dll found" msgstr "" #: src/liflines/screen.c:1659 #, c-format msgid "iconv dll: %s" msgstr "" #: src/liflines/screen.c:1663 #, c-format msgid "iconv dll version: %s" msgstr "" #: src/liflines/screen.c:1668 msgid "iconv dll had no version" msgstr "" #: src/liflines/screen.c:1673 msgid "no iconv dll found" msgstr "" #: src/liflines/screen.c:1931 msgid "Impermissible to change codeset in a populated database" msgstr "" #: src/liflines/screen.c:2032 msgid "LifeLines -- Main Menu" msgstr "" #: src/liflines/searchui.c:133 #, c-format msgid "v Review visit history (%d record)" msgid_plural "v Review visit history (%d records)" msgstr[0] "" msgstr[1] "" #: src/liflines/searchui.c:137 msgid "(visit history is empty)" msgstr "" #: src/liflines/searchui.c:143 #, c-format msgid "c Review change history (%d record)" msgid_plural "c Review change history (%d records)" msgstr[0] "" msgstr[1] "" #: src/liflines/searchui.c:147 msgid "(change history is empty)" msgstr "" #: src/liflines/searchui.c:151 msgid "f Full database scan" msgstr "" #: src/liflines/searchui.c:220 msgid "What scan type?" msgstr "" #: src/liflines/searchui.c:223 msgid "f Full name scan" msgstr "" #: src/liflines/searchui.c:224 msgid "n Name fragment (whitespace-delimited) scan" msgstr "" #: src/liflines/searchui.c:225 msgid "r Refn scan" msgstr "" #: src/liflines/searchui.c:226 msgid "s Source scan" msgstr "" #: src/liflines/searchui.c:290 msgid "Scan on what source field?" msgstr "" #: src/liflines/searchui.c:293 msgid "a Scan by author" msgstr "" #: src/liflines/searchui.c:294 msgid "t Scan by title" msgstr "" #: src/liflines/selectdb.c:95 msgid "Choose database to open" msgstr "" #: src/liflines/selectdb.c:103 msgid "No databases found in database path" msgstr "" #: src/liflines/show.c:123 #, fuzzy msgid "born" msgstr "nato: " #: src/liflines/show.c:124 src/liflines/show.c:125 msgid "bapt" msgstr "" #: src/liflines/show.c:126 msgid "barm" msgstr "" #: src/liflines/show.c:127 msgid "basm" msgstr "" #: src/liflines/show.c:128 msgid "bles" msgstr "" #: src/liflines/show.c:129 msgid "adop" msgstr "" #: src/liflines/show.c:130 msgid "resi" msgstr "" #: src/liflines/show.c:134 #, fuzzy msgid "died" msgstr "morto: " #: src/liflines/show.c:135 #, fuzzy msgid "buri" msgstr "sepolto: " #: src/liflines/show.c:136 msgid "crem" msgstr "" #: src/liflines/show.c:1009 #, c-format msgid "Cached: I:%s; F:%s" msgstr "" #: src/liflines/valgdcom.c:92 #, c-format msgid "Record %s is referred to but not defined." msgstr "" #: src/liflines/valgdcom.c:93 #, c-format msgid "Line %d: Reference to undefined record %s" msgstr "" #: src/liflines/valgdcom.c:94 #, c-format msgid "Line %d: Tag %s found in unexpected record: %s %s." msgstr "" #: src/liflines/valgdcom.c:190 #, c-format msgid "Line %d: Family has no members (%s %s)." msgstr "" #: src/liflines/valgdcom.c:390 #, c-format msgid "Line %d: The source defined here has no key." msgstr "" #: src/liflines/valgdcom.c:404 #, c-format msgid "Line %d: Source %s has an incorrect key." msgstr "" #: src/liflines/valgdcom.c:411 #, c-format msgid "Lines %d and %d: Source %s is multiply defined." msgstr "" #: src/liflines/valgdcom.c:434 #, c-format msgid "Line %d: The event defined here has no key." msgstr "" #: src/liflines/valgdcom.c:447 #, c-format msgid "Line %d: Event %s has an incorrect key." msgstr "" #: src/liflines/valgdcom.c:454 #, c-format msgid "Lines %d and %d: Event %s is multiply defined." msgstr "" #: src/liflines/valgdcom.c:477 #, c-format msgid "Line %d: The record defined here has no key." msgstr "" #: src/liflines/valgdcom.c:490 #, c-format msgid "Line %d: Record %s has an incorrect key." msgstr "" #: src/liflines/valgdcom.c:497 #, c-format msgid "Lines %d and %d: Record %s is multiply defined." msgstr "" #: src/liflines/valgdcom.c:539 #, c-format msgid "Line %d: This %s line is missing a value field (%s %s)." msgstr "" #: src/liflines/valgdcom.c:590 #, c-format msgid "Line %d: Bad NAME syntax (%s %s)." msgstr "" #: src/liflines/valgdcom.c:820 #, c-format msgid "Line %d: Person %s has multiple father links." msgstr "" #: src/liflines/valgdcom.c:824 #, c-format msgid "Line %d: Person %s has multiple mother links." msgstr "" #: src/liflines/valgdcom.c:836 #, c-format msgid "Line %d: Person %s is both male and female." msgstr "" #: src/liflines/valgdcom.c:840 #, c-format msgid "Line %d: Person %s is male but must be female." msgstr "" #: src/liflines/valgdcom.c:844 #, c-format msgid "Line %d: Person %s is female but must be male." msgstr "" #: src/liflines/valgdcom.c:848 #, c-format msgid "Line %d: Person %s is implied to be both male and female." msgstr "" #: src/liflines/valgdcom.c:860 #, c-format msgid "Line %d: Family %s has multiple husband links." msgstr "" #: src/liflines/valgdcom.c:864 #, c-format msgid "Line %d: Family %s has multiple wife links." msgstr "" #: src/liflines/valgdcom.c:920 msgid "error" msgstr "" #: src/liflines/valgdcom.c:928 #, c-format msgid "%6d Error" msgid_plural "%6d Errors" msgstr[0] "" msgstr[1] "" #: src/liflines/valgdcom.c:930 src/liflines/valgdcom.c:958 #, c-format msgid " (see log file <%s>)" msgstr "" #: src/liflines/valgdcom.c:932 src/liflines/valgdcom.c:960 msgid " (no log file)" msgstr "" #: src/liflines/valgdcom.c:948 msgid "warning" msgstr "" #: src/liflines/valgdcom.c:956 #, c-format msgid "%6d Warning" msgid_plural "%6d Warnings" msgstr[0] "" msgstr[1] "" #: src/liflines/valgdcom.c:1067 #, c-format msgid "Processed %d lines without finding end of HEAD" msgstr "" #: src/liflines/valgdcom.c:1072 #, c-format msgid "End of file at line %d" msgstr "" #: src/liflines/valgdcom.c:1076 #, c-format msgid "Error at line %d: %s" msgstr "" #: src/liflines/valgdcom.c:1080 #, c-format msgid "Bad level at line %d" msgstr "" #: src/liflines/valgdcom.c:1086 #, c-format msgid "Duplicate HEAD line at line %d" msgstr "" #: src/liflines/valgdcom.c:1092 #, c-format msgid "Missing HEAD line at line %d" msgstr "" #: src/stdlib/errlog.c:61 #, c-format msgid " in file <%s> at line %d\n" msgstr "" #: src/stdlib/errlog.c:63 #, fuzzy msgid "Current database" msgstr "Scegliere la base di dati" #: src/tools/btedit.c:108 #, c-format msgid "btedit requires 2 arguments (btree and key)." msgstr "" #: src/tools/btedit.c:110 #, c-format msgid "See `btedit --help' for more information." msgstr "" #: src/tools/btedit.c:117 #, c-format msgid "Failed to open btree: %s." msgstr "" #: src/tools/btedit.c:124 #, c-format msgid "There is no record with key: %s" msgstr "" #: src/tools/btedit.c:126 #, c-format msgid "Error accessing record: %s" msgstr "" #: src/tools/btedit.c:135 #, c-format msgid "Editor or system call failed." msgstr "" #: src/tools/btedit.c:137 #, c-format msgid "Database was not be modified." msgstr "" #: src/tools/btedit.c:143 #, c-format msgid "Readonly database can not be modified." msgstr "" #: src/tools/btedit.c:150 #, c-format msgid "Error writing file 'btedit.tmp'." msgstr "" #: src/tools/btedit.c:156 #, c-format msgid "Record %s modified." msgstr "" #: src/tools/btedit.c:226 msgid "\"\\My Documents\\LifeLines\\Databases\\MyFamily\"" msgstr "" #: src/tools/btedit.c:228 src/tools/dbverify.c:232 msgid "/home/users/myname/lifelines/databases/myfamily" msgstr "" #: src/tools/btedit.c:231 #, c-format msgid "" "lifelines `btedit' edits raw binary btree blocks\n" "in lifelines database files. Do NOT use this unless\n" "you know what you are doing and you have backed up\n" "your database." msgstr "" #: src/tools/btedit.c:236 #, c-format msgid "Usage btedit [database] [rkey]" msgstr "" #: src/tools/btedit.c:240 #, c-format msgid "\t--help\tdisplay this help and exit" msgstr "" #: src/tools/btedit.c:242 #, c-format msgid "\t--version\toutput version information and exit" msgstr "" #: src/tools/btedit.c:246 #, c-format msgid "\tbtedit %s I34" msgstr "" #: src/tools/btedit.c:248 #, c-format msgid "edit raw btree block for person I34" msgstr "" #: src/tools/dbverify.c:175 msgid "Orphan names" msgstr "" #: src/tools/dbverify.c:176 msgid "Ghost names" msgstr "" #: src/tools/dbverify.c:177 src/tools/dbverify.c:178 msgid "Duplicate names" msgstr "" #: src/tools/dbverify.c:179 msgid "Non-indi names" msgstr "" #: src/tools/dbverify.c:180 msgid "Duplicate individuals" msgstr "" #: src/tools/dbverify.c:181 msgid "Duplicate families" msgstr "" #: src/tools/dbverify.c:182 msgid "Duplicate sources" msgstr "" #: src/tools/dbverify.c:183 msgid "Duplicate events" msgstr "" #: src/tools/dbverify.c:184 msgid "Duplicate others" msgstr "" #: src/tools/dbverify.c:185 msgid "Missing records (from deleteset)" msgstr "" #: src/tools/dbverify.c:186 msgid "Deleted records" msgstr "" #: src/tools/dbverify.c:187 msgid "Bad name" msgstr "" #: src/tools/dbverify.c:188 msgid "Bad family reference" msgstr "" #: src/tools/dbverify.c:189 msgid "Missing child" msgstr "" #: src/tools/dbverify.c:190 msgid "Missing spouse" msgstr "" #: src/tools/dbverify.c:191 msgid "Bad HUSB reference" msgstr "" #: src/tools/dbverify.c:192 msgid "Bad WIFE reference" msgstr "" #: src/tools/dbverify.c:193 msgid "Bad CHIL reference" msgstr "" #: src/tools/dbverify.c:194 msgid "Improper HUSB" msgstr "" #: src/tools/dbverify.c:195 msgid "Improper WIFE" msgstr "" #: src/tools/dbverify.c:196 msgid "Improper child" msgstr "" #: src/tools/dbverify.c:197 msgid "Empty family" msgstr "" #: src/tools/dbverify.c:198 msgid "Single person family" msgstr "" #: src/tools/dbverify.c:199 msgid "Bad pointer" msgstr "" #: src/tools/dbverify.c:200 msgid "Missing data records" msgstr "" #: src/tools/dbverify.c:230 msgid "\\My Documents\\LifeLines\\Databases\\MyFamily" msgstr "" #: src/tools/dbverify.c:236 #, c-format msgid "usage: dbverify -(flags) \n" msgstr "" #: src/tools/dbverify.c:237 #, c-format msgid "flags:\n" msgstr "" #: src/tools/dbverify.c:238 #, c-format msgid "\t-a = Perform all checks (does not include fixes)\n" msgstr "" #: src/tools/dbverify.c:239 #, c-format msgid "\t-g = Check for ghosts (names/refns)\n" msgstr "" #: src/tools/dbverify.c:240 #, c-format msgid "\t-G = Check for & fix ghosts (names/refns)\n" msgstr "" #: src/tools/dbverify.c:241 #, c-format msgid "\t-i = Check individuals\n" msgstr "" #: src/tools/dbverify.c:242 #, c-format msgid "\t-f = Check families\n" msgstr "" #: src/tools/dbverify.c:243 #, c-format msgid "\t-F = Alter any bad family lineage pointers (to _badptr)\n" msgstr "" #: src/tools/dbverify.c:244 #, c-format msgid "\t-h = Display help text (this text)\n" msgstr "" #: src/tools/dbverify.c:245 #, c-format msgid "\t-s = Check sours\n" msgstr "" #: src/tools/dbverify.c:246 #, c-format msgid "\t-e = Check events\n" msgstr "" #: src/tools/dbverify.c:247 #, c-format msgid "\t-x = Check others\n" msgstr "" #: src/tools/dbverify.c:248 #, c-format msgid "\t-l = Check database structure\n" msgstr "" #: src/tools/dbverify.c:249 #, c-format msgid "\t-m = Check for records missing data entries\n" msgstr "" #: src/tools/dbverify.c:250 #, c-format msgid "\t-M = Fix records missing data entries\n" msgstr "" #: src/tools/dbverify.c:251 #, c-format msgid "\t-D = Fix bad delete entries\n" msgstr "" #: src/tools/dbverify.c:252 #, c-format msgid "\t-n = Noisy (echo every record processed)\n" msgstr "" #: src/tools/dbverify.c:253 #, c-format msgid "example: dbverify -ifsex \"%s\"\n" msgstr "" #: src/tools/dbverify.c:386 #, c-format msgid "Non-indi name, key=%s, name=%s" msgstr "" #: src/tools/dbverify.c:403 #, c-format msgid "Orphaned name: %s" msgstr "" #: src/tools/dbverify.c:417 #, c-format msgid "Ghost name: %s -> %s" msgstr "" #: src/tools/dbverify.c:449 #, c-format msgid "Orphaned refn: %s" msgstr "" #: src/tools/dbverify.c:489 #, c-format msgid "Duplicate name for %s (%s)" msgstr "" #: src/tools/dbverify.c:524 #, c-format msgid "Duplicate refn for %s (%s)" msgstr "" #: src/tools/dbverify.c:637 #, c-format msgid "Duplicate individual for %s" msgstr "" #: src/tools/dbverify.c:679 #, c-format msgid "Bad name for individual %s: %s" msgstr "" #: src/tools/dbverify.c:697 src/tools/dbverify.c:721 #, c-format msgid "Bad family reference (%s) individual %s" msgstr "" #: src/tools/dbverify.c:703 #, c-format msgid "Missing child (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:707 #, c-format msgid "Fixed missing child (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:727 #, c-format msgid "Missing spouse (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:731 #, c-format msgid "Fixed missing spouse (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:765 #, c-format msgid "Duplicate family for %s" msgstr "" #: src/tools/dbverify.c:816 #, c-format msgid "Bad HUSB reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:822 #, c-format msgid "Fixed Bad HUSB reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:831 #, c-format msgid "Improper HUSB (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:844 #, c-format msgid "Bad wife reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:850 #, c-format msgid "Fixed Bad wife reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:859 #, c-format msgid "Improper wife (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:872 #, c-format msgid "Bad child reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:878 #, c-format msgid "Fixed bad child reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:887 #, c-format msgid "Improper child: Child (%s) without FAMC reference to family (%s)" msgstr "" #: src/tools/dbverify.c:895 #, c-format msgid "Empty family (%s)" msgstr "" #: src/tools/dbverify.c:897 #, c-format msgid "Single person family (%s)" msgstr "" #: src/tools/dbverify.c:923 #, c-format msgid "Duplicate source for %s" msgstr "" #: src/tools/dbverify.c:939 #, c-format msgid "Duplicate event for %s" msgstr "" #: src/tools/dbverify.c:955 #, c-format msgid "Duplicate record for %s" msgstr "" #: src/tools/dbverify.c:1026 #, c-format msgid "Bad pointer (in %s): %s" msgstr "" #: src/tools/dbverify.c:1064 #, c-format msgid "Missing undeleted record %c%d" msgstr "" #: src/tools/dbverify.c:1071 #, c-format msgid "Fixed missing undeleted record %c%d" msgstr "" #: src/tools/dbverify.c:1075 #, c-format msgid "Failed to fix missing undeleted record %c%d" msgstr "" #: src/tools/dbverify.c:1087 #, c-format msgid "Delete set contains valid record %s" msgstr "" #: src/tools/dbverify.c:1092 #, c-format msgid "Fixed delete set contains valid record %s" msgstr "" #: src/tools/dbverify.c:1096 #, c-format msgid "Failed to fix missing undeleted record %s" msgstr "" #: src/tools/dbverify.c:1117 #, c-format msgid "Master fkey misaligned" msgstr "" #: src/tools/dbverify.c:1144 #, c-format msgid "Cycle in indexes, file %s found again!\n" msgstr "" #: src/tools/dbverify.c:1151 #, c-format msgid "Error loading index at key" msgstr "" #: src/tools/dbverify.c:1199 #, c-format msgid "First key in block below parent's limit\n" msgstr "" #: src/tools/dbverify.c:1207 #, c-format msgid "Last key in block above parent's limit\n" msgstr "" #: src/tools/dbverify.c:1215 #, c-format msgid "Key not below next key" msgstr "" #: src/tools/dbverify.c:1232 src/tools/dbverify.c:1234 msgid "data block" msgstr "" #: src/tools/dbverify.c:1235 #, c-format msgid "%s fkey=%d, file=%s" msgstr "" #: src/tools/dbverify.c:1248 #, c-format msgid "Invalid errs array[%d] in dbverify - fix program\n" msgstr "" #: src/tools/dbverify.c:1285 #, c-format msgid "Missing data record (%s)" msgstr "" #: src/tools/dbverify.c:1289 #, c-format msgid "Fixed missing data record (%s)" msgstr "" #: src/tools/dbverify.c:1420 #, c-format msgid "Checking %s" msgstr "" #: src/tools/dbverify.c:1476 #, c-format msgid "%d error" msgid_plural "%d errors" msgstr[0] "" msgstr[1] "" #: src/tools/dbverify.c:1480 #, c-format msgid "%d fixed" msgid_plural "%d fixed" msgstr[0] "" msgstr[1] "" #: src/tools/dbverify.c:1487 msgid "No errors found" msgstr "" #: src/tools/dbverify.c:1506 #, c-format msgid "FATAL ERROR: " msgstr "" #: src/tools/dbverify.c:1511 #, c-format msgid "In file <%s> at line %d" msgstr "" lifelines-3.0.61/po/lifelines.pot0000700002540200244210000030315010656417745017076 0ustar prappDomain Users# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Tom T. Wetmore IV # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-08-08 15:56-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: src/btree/btrec.c:369 #, c-format msgid "Failed (errno=%d) to open blockfile (rkey=%s): %s" msgstr "" #: src/btree/btrec.c:438 #, c-format msgid "Btree lookup looped back to master (%ld)!" msgstr "" #: src/gedlib/charmaps.c:769 msgid "" msgstr "" #. TRANSLATORS: seconds time interval #: src/gedlib/dateprint.c:783 #, c-format msgid "%02ds" msgstr "" #. TRANSLATORS: minutes & seconds time interval #: src/gedlib/dateprint.c:789 #, c-format msgid "%dm%02ds" msgstr "" #. TRANSLATORS: hours & minutes time interval #: src/gedlib/dateprint.c:795 #, c-format msgid "%dh%02dm" msgstr "" #. TRANSLATORS: days & hours time interval #: src/gedlib/dateprint.c:801 #, c-format msgid "%dd%02dh" msgstr "" #. TRANSLATORS: years & days time interval #: src/gedlib/dateprint.c:805 #, c-format msgid "%dy%03dd" msgstr "" #: src/gedlib/dbcontext.c:276 msgid "Database error: -- " msgstr "" #: src/gedlib/dbcontext.c:280 msgid "requested database does not exist." msgstr "" #: src/gedlib/dbcontext.c:283 msgid "db directory is file, not directory." msgstr "" #: src/gedlib/dbcontext.c:286 msgid "creation of new database failed." msgstr "" #: src/gedlib/dbcontext.c:289 msgid "error accessing database directory." msgstr "" #: src/gedlib/dbcontext.c:292 msgid "no keyfile (directory does not appear to be a database)." msgstr "" #: src/gedlib/dbcontext.c:295 msgid "could not open, read or write an index file." msgstr "" #: src/gedlib/dbcontext.c:298 msgid "could not open, read or write the key file." msgstr "" #: src/gedlib/dbcontext.c:301 msgid "could not open, read or write the key file (to alter database)." msgstr "" #: src/gedlib/dbcontext.c:304 msgid "could not open, read or write a block file." msgstr "" #: src/gedlib/dbcontext.c:307 msgid "name of database is too long." msgstr "" #: src/gedlib/dbcontext.c:310 msgid "The database is already open for writing." msgstr "" #: src/gedlib/dbcontext.c:313 msgid "The database is locked (no readwrite access)." msgstr "" #: src/gedlib/dbcontext.c:316 msgid "The database is unlocked." msgstr "" #: src/gedlib/dbcontext.c:319 msgid "keyfile is corrupt." msgstr "" #: src/gedlib/dbcontext.c:322 msgid "keyfile is wrong alignment." msgstr "" #: src/gedlib/dbcontext.c:325 msgid "keyfile is wrong version." msgstr "" #: src/gedlib/dbcontext.c:328 msgid "Existing database found." msgstr "" #: src/gedlib/dbcontext.c:332 #, c-format msgid "The database is already opened for read access by %d user." msgid_plural "The database is already opened for read access by %d users." msgstr[0] "" msgstr[1] "" #: src/gedlib/dbcontext.c:338 msgid "Invalid properties set for new database" msgstr "" #: src/gedlib/dbcontext.c:341 msgid "Undefined database error -- fix program." msgstr "" #: src/gedlib/gedcom.c:112 msgid "Missing NAME line in INDI record; record ignored.\n" msgstr "" #: src/gedlib/init.c:228 src/tools/btedit.c:207 #, c-format msgid "Copyright (C) 1991-2007 Thomas T. Wetmore IV et al." msgstr "" #: src/gedlib/init.c:230 src/tools/btedit.c:209 #, c-format msgid "" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." msgstr "" #: src/gedlib/init.c:235 src/tools/btedit.c:214 #, c-format msgid "Written by Tom Wetmore. Maintained at lifelines.sourceforge.net." msgstr "" #: src/gedlib/keytonod.c:686 #, c-format msgid "Database error caused by reference to nonexisting key <%s>." msgstr "" #: src/gedlib/keytonod.c:687 msgid "It might be possible to fix this with btedit." msgstr "" #: src/gedlib/keytonod.c:688 msgid "Neighboring keys include:" msgstr "" #: src/gedlib/keytonod.c:1045 #, c-format msgid "Bad cache entry <%s> != <%s>" msgstr "" #: src/gedlib/keytonod.c:1072 #, c-format msgid "Cache [%s] overflowed its max size (%d)" msgstr "" #: src/gedlib/messages.c:44 msgid "You must identify a database." msgstr "" #: src/gedlib/messages.c:45 msgid "What directory holds (or will hold) the LifeLines database? (? to list)" msgstr "" #: src/gedlib/messages.c:46 msgid "enter path: " msgstr "" #: src/gedlib/messages.c:47 msgid "There is no LifeLines database in that directory." msgstr "" #: src/gedlib/messages.c:48 msgid "Do you want to create a database there?" msgstr "" #: src/gedlib/messages.c:49 msgid "Argument to lock (-l) must be y or n." msgstr "" #: src/gedlib/messages.c:50 msgid "Cannot remove last person from family." msgstr "" #: src/gedlib/messages.c:52 msgid "lines [-adkrwiflntcuFxoCzI] [database] # Use -F for Finnish database" msgstr "" #: src/gedlib/messages.c:54 msgid "lines [-adkrwiflntcuxoCzI] [database] # Finnish database" msgstr "" #: src/gedlib/messages.c:56 msgid "lines [-adkrwiflntcuxoCzI] [database]" msgstr "" #: src/gedlib/messages.c:58 msgid "The database is read only; you may not add records." msgstr "" #: src/gedlib/messages.c:59 msgid "The database is read only; you may not change records." msgstr "" #: src/gedlib/messages.c:60 msgid "The database is read only; you may not merge records." msgstr "" #: src/gedlib/messages.c:61 msgid "The database is read only; you may not remove records." msgstr "" #: src/gedlib/messages.c:62 msgid "The database is read only." msgstr "" #: src/gedlib/messages.c:64 msgid "Name, key, refn, list, or @:" msgstr "" #: src/gedlib/messages.c:65 msgid "enter key or refn: " msgstr "" #: src/gedlib/messages.c:66 msgid "Please choose the child to remove from the family." msgstr "" #: src/gedlib/messages.c:67 msgid "Please choose the spouse/parent to remove from the family." msgstr "" #: src/gedlib/messages.c:68 msgid "From which family is the child to be removed?" msgstr "" #: src/gedlib/messages.c:69 msgid "From which family is the spouse/parent to be removed?" msgstr "" #: src/gedlib/messages.c:70 msgid "Identify family (enter nothing to identify by individual members)." msgstr "" #: src/gedlib/messages.c:71 msgid "Identify a spouse of the family, if known." msgstr "" #: src/gedlib/messages.c:72 msgid "Identify a child of the family, if known." msgstr "" #: src/gedlib/messages.c:73 msgid "Identify the first child to swap." msgstr "" #: src/gedlib/messages.c:74 msgid "Identify the second child to swap." msgstr "" #: src/gedlib/messages.c:75 msgid "Identify the child to reorder." msgstr "" #: src/gedlib/messages.c:76 msgid "Identify the first family/spouse to swap." msgstr "" #: src/gedlib/messages.c:77 msgid "Identify the second family/spouse to swap." msgstr "" #: src/gedlib/messages.c:78 msgid "Please choose the spouse/parent to browse to." msgstr "" #: src/gedlib/messages.c:79 msgid "Please choose the first spouse/parent to browse to." msgstr "" #: src/gedlib/messages.c:80 msgid "Please choose the second spouse/parent to browse to." msgstr "" #: src/gedlib/messages.c:81 msgid "Please choose the child to browse to." msgstr "" #: src/gedlib/messages.c:82 msgid "Please choose the first child to browse to." msgstr "" #: src/gedlib/messages.c:83 msgid "Please choose the second child to browse to." msgstr "" #: src/gedlib/messages.c:84 msgid "Please choose the family to browse to." msgstr "" #: src/gedlib/messages.c:85 msgid "Enter Family Number to Browse to" msgstr "" #: src/gedlib/messages.c:86 msgid "Please choose the first family to browse to." msgstr "" #: src/gedlib/messages.c:87 msgid "Please choose the second family to browse to." msgstr "" #: src/gedlib/messages.c:88 msgid "Please choose the father/husband to browse to." msgstr "" #: src/gedlib/messages.c:89 msgid "Please choose the first father/husband to browse to." msgstr "" #: src/gedlib/messages.c:90 msgid "Please choose the second father/husband to browse to." msgstr "" #: src/gedlib/messages.c:91 msgid "Please choose the mother/wife to browse to." msgstr "" #: src/gedlib/messages.c:92 msgid "Please choose the first mother/wife to browse to." msgstr "" #: src/gedlib/messages.c:93 msgid "Please choose the second mother/wife to browse to." msgstr "" #: src/gedlib/messages.c:94 msgid "Identify a parent in the family having children swapped." msgstr "" #: src/gedlib/messages.c:95 msgid "Whose families/spouses are to be swapped?" msgstr "" #: src/gedlib/messages.c:96 msgid "Identify one of the child's parents, if known." msgstr "" #: src/gedlib/messages.c:98 src/liflines/scan.c:127 msgid "Enter pattern to match against refn." msgstr "" #: src/gedlib/messages.c:100 msgid "Please choose from among these people." msgstr "" #: src/gedlib/messages.c:101 msgid "Please choose from among these records." msgstr "" #: src/gedlib/messages.c:102 msgid "Is this the new child? " msgstr "" #: src/gedlib/messages.c:103 msgid "Is this the new spouse? " msgstr "" #: src/gedlib/messages.c:104 msgid "Is this the person? Select if so." msgstr "" #: src/gedlib/messages.c:105 msgid "Is this the record? Select if so." msgstr "" #: src/gedlib/messages.c:106 msgid "Select the child the new child precedes or select last." msgstr "" #: src/gedlib/messages.c:107 msgid "Please identify next person to browse to." msgstr "" #: src/gedlib/messages.c:108 msgid "Please identify record to browse to." msgstr "" #: src/gedlib/messages.c:109 msgid "Please identify one of the spouses." msgstr "" #: src/gedlib/messages.c:110 msgid "Please identify person or persons to browse to." msgstr "" #: src/gedlib/messages.c:111 msgid "Please choose family create operation." msgstr "" #: src/gedlib/messages.c:112 msgid "Do you want to enter another name?" msgstr "" #: src/gedlib/messages.c:114 msgid "This person is not a spouse or parent in any family." msgstr "" #: src/gedlib/messages.c:115 msgid "This person is not a child in any family." msgstr "" #: src/gedlib/messages.c:116 msgid "There is no one in the database with that name or key." msgstr "" #: src/gedlib/messages.c:118 msgid "This person's father is not in the database." msgstr "" #: src/gedlib/messages.c:119 msgid "This person's mother is not in the database." msgstr "" #: src/gedlib/messages.c:120 msgid "This person has no spouse in the database." msgstr "" #: src/gedlib/messages.c:121 msgid "This person has no younger sibling in the database." msgstr "" #: src/gedlib/messages.c:122 msgid "This person has no older sibling in the database." msgstr "" #: src/gedlib/messages.c:123 msgid "This person's parents are not in the database." msgstr "" #: src/gedlib/messages.c:124 msgid "This family has no male spouse/parent in the database." msgstr "" #: src/gedlib/messages.c:125 msgid "This family has no female spouse/parent in the database." msgstr "" #: src/gedlib/messages.c:126 msgid "There are no children in the database for this family." msgstr "" #: src/gedlib/messages.c:127 msgid "This person has no children in the database." msgstr "" #: src/gedlib/messages.c:128 msgid "No such child." msgstr "" #: src/gedlib/messages.c:129 msgid "No such person." msgstr "" #: src/gedlib/messages.c:130 msgid "No such record." msgstr "" #: src/gedlib/messages.c:131 msgid "No such family." msgstr "" #: src/gedlib/messages.c:132 msgid "No sources present." msgstr "" #: src/gedlib/messages.c:133 msgid "Please choose the source to view." msgstr "" #: src/gedlib/messages.c:134 msgid "No events present." msgstr "" #: src/gedlib/messages.c:135 msgid "Please choose the event to view." msgstr "" #: src/gedlib/messages.c:136 msgid "No others present." msgstr "" #: src/gedlib/messages.c:137 msgid "Please choose the other to view." msgstr "" #: src/gedlib/messages.c:138 msgid "No notes present." msgstr "" #: src/gedlib/messages.c:139 msgid "Please choose the note to view." msgstr "" #: src/gedlib/messages.c:140 msgid "No references present." msgstr "" #: src/gedlib/messages.c:141 msgid "Please choose the reference to view." msgstr "" #: src/gedlib/messages.c:142 msgid "Duplicated REFN - please choose." msgstr "" #: src/gedlib/messages.c:144 msgid "New spouse/parent has unknown sex; can't add to family." msgstr "" #: src/gedlib/messages.c:145 msgid "The persons are not of opposite sex; can't make family." msgstr "" #: src/gedlib/messages.c:146 msgid "This person is not a spouse in the family; can't remove." msgstr "" #: src/gedlib/messages.c:147 msgid "This person is not a child in the family; can't remove." msgstr "" #: src/gedlib/messages.c:148 msgid "This person's sex is not known; can't make family." msgstr "" #: src/gedlib/messages.c:149 msgid "This family already has a husband/male parent." msgstr "" #: src/gedlib/messages.c:150 msgid "This family already has a wife/female parent." msgstr "" #: src/gedlib/messages.c:151 msgid "This family has both spouses/parents; can't add another." msgstr "" #: src/gedlib/messages.c:152 msgid "This family has neither spouse/parent; can't remove." msgstr "" #: src/gedlib/messages.c:153 msgid "This family still has links; not removed." msgstr "" #: src/gedlib/messages.c:155 msgid "Choose a family by selecting a spouse/parent." msgstr "" #: src/gedlib/messages.c:156 msgid "" "Do you want to edit the person again? (Otherwise changes will be discarded.)" msgstr "" #: src/gedlib/messages.c:157 msgid "Do you want to edit the person again?" msgstr "" #: src/gedlib/messages.c:158 msgid "" "Do you want to edit the family again? (Otherwise changes will be discarded.)" msgstr "" #: src/gedlib/messages.c:159 msgid "Do you want to edit the family again?" msgstr "" #: src/gedlib/messages.c:160 msgid "" "Do you want to edit the source again? (Otherwise changes will be discarded.)" msgstr "" #: src/gedlib/messages.c:161 msgid "Do you want to edit the source again?" msgstr "" #: src/gedlib/messages.c:162 msgid "" "Do you want to edit the event again? (Otherwise changes will be discarded.)" msgstr "" #: src/gedlib/messages.c:163 msgid "Do you want to edit the event again?" msgstr "" #: src/gedlib/messages.c:164 msgid "" "Do you want to edit the record again? (Otherwise changes will be discarded.)" msgstr "" #: src/gedlib/messages.c:165 msgid "Do you want to edit the record again?" msgstr "" #: src/gedlib/messages.c:166 msgid "Whom do you want to edit?" msgstr "" #: src/gedlib/messages.c:167 msgid "Which source record do you want to edit?" msgstr "" #: src/gedlib/messages.c:168 msgid "Which event record do you want to edit?" msgstr "" #: src/gedlib/messages.c:169 msgid "What record do you want to edit?" msgstr "" #: src/gedlib/messages.c:171 msgid "Do you really want to add this person to the database?" msgstr "" #: src/gedlib/messages.c:172 msgid "Do you really want to add this family to the database?" msgstr "" #: src/gedlib/messages.c:173 msgid "Do you really want to add this child to the family?" msgstr "" #: src/gedlib/messages.c:174 msgid "Do you really want to add this spouse/parent to the family?" msgstr "" #: src/gedlib/messages.c:175 msgid "Do you really want to add this source to the database?" msgstr "" #: src/gedlib/messages.c:176 msgid "Do you really want to add this event to the database?" msgstr "" #: src/gedlib/messages.c:177 msgid "Do you really want to add this record to the database?" msgstr "" #: src/gedlib/messages.c:178 msgid "Do you really want to update this person?" msgstr "" #: src/gedlib/messages.c:179 msgid "Do you really want to update this family?" msgstr "" #: src/gedlib/messages.c:180 msgid "Do you really want to update this source?" msgstr "" #: src/gedlib/messages.c:181 msgid "Do you really want to update this event?" msgstr "" #: src/gedlib/messages.c:182 msgid "Do you really want to update this record?" msgstr "" #: src/gedlib/messages.c:183 msgid "Are you sure you want to remove the person from the database?" msgstr "" #: src/gedlib/messages.c:184 msgid "Are you sure you want to remove this record from the database?" msgstr "" #: src/gedlib/messages.c:185 msgid "Remove this family record?" msgstr "" #: src/gedlib/messages.c:186 #, c-format msgid "(Family %s (%s, %s)" msgstr "" #: src/gedlib/messages.c:187 msgid "Do you really want to merge these two persons?" msgstr "" #: src/gedlib/messages.c:188 msgid "Do you really want to merge these two families?" msgstr "" #: src/gedlib/messages.c:189 msgid "Do you really want to swap spouse orders?" msgstr "" #: src/gedlib/messages.c:190 msgid "Do you really want to reorder children?" msgstr "" #: src/gedlib/messages.c:191 msgid "Do you really want to remove this child from his/her family?" msgstr "" #: src/gedlib/messages.c:192 msgid "Do you really want to remove this spouse from his/her family?" msgstr "" #: src/gedlib/messages.c:193 msgid "Too many spouses to display full list" msgstr "" #: src/gedlib/messages.c:194 msgid "These persons are children in different families." msgstr "" #: src/gedlib/messages.c:195 msgid "Are you sure you want to merge them?" msgstr "" #: src/gedlib/messages.c:197 msgid "There is something wrong with the data." msgstr "" #: src/gedlib/messages.c:198 msgid "Please identify the child." msgstr "" #: src/gedlib/messages.c:199 msgid "Please identify one of the child's siblings." msgstr "" #: src/gedlib/messages.c:200 msgid "Identify spouse/parent to add to an existing family." msgstr "" #: src/gedlib/messages.c:201 msgid "Identify spouse/parent already in family, if known." msgstr "" #: src/gedlib/messages.c:202 msgid "Identify child already in family." msgstr "" #: src/gedlib/messages.c:204 msgid "This person is already a child in a family." msgstr "" #: src/gedlib/messages.c:205 msgid "Identify a spouse/parent for the new family." msgstr "" #: src/gedlib/messages.c:206 msgid "Identify the second spouse/parent, if known." msgstr "" #: src/gedlib/messages.c:207 msgid "Both families must have husbands/fathers." msgstr "" #: src/gedlib/messages.c:208 msgid "Both families must have wives/mothers." msgstr "" #: src/gedlib/messages.c:210 msgid "Identify spouse/parent in second family, if known." msgstr "" #: src/gedlib/messages.c:211 msgid "Identify child in second family." msgstr "" #: src/gedlib/messages.c:212 msgid "Identify second person to browse to." msgstr "" #: src/gedlib/messages.c:214 msgid "Create a family with this person as a child." msgstr "" #: src/gedlib/messages.c:215 msgid "Create a family with this person as a spouse/parent." msgstr "" #: src/gedlib/messages.c:216 msgid "This family has less than two children; can't swap." msgstr "" #: src/gedlib/messages.c:217 msgid "This person is a spouse/parent in less than two families." msgstr "" #: src/gedlib/messages.c:218 msgid "Something impossible happened. Contact tech support." msgstr "" #: src/gedlib/messages.c:220 msgid "The two children were swapped." msgstr "" #: src/gedlib/messages.c:221 msgid "The two families were swapped." msgstr "" #: src/gedlib/messages.c:222 msgid "The child was removed from his/her family." msgstr "" #: src/gedlib/messages.c:223 msgid "The spouse was removed from his/her family." msgstr "" #: src/gedlib/messages.c:225 msgid "A person cannot be merged with him/herself." msgstr "" #: src/gedlib/messages.c:226 msgid "A family cannot be merged with itself." msgstr "" #: src/gedlib/messages.c:227 msgid "Two persons with different parents cannot be merged." msgstr "" #: src/gedlib/messages.c:228 msgid "Two parents of different sexes cannot be merged." msgstr "" #: src/gedlib/messages.c:229 msgid "The families have different fathers/husbands; cannot merge." msgstr "" #: src/gedlib/messages.c:230 msgid "The families have different wives/mothers; cannot merge." msgstr "" #: src/gedlib/messages.c:231 msgid "Who do you want to remove from the database?" msgstr "" #: src/gedlib/messages.c:232 msgid "What record do you want to remove from the database?" msgstr "" #: src/gedlib/messages.c:233 msgid "Place the child last in the family." msgstr "" #: src/gedlib/messages.c:234 msgid "Error in abbreviations file." msgstr "" #: src/gedlib/messages.c:235 msgid "Error in user options file." msgstr "" #: src/gedlib/messages.c:236 msgid "Error in character mapping file." msgstr "" #: src/gedlib/messages.c:237 #, c-format msgid "(Separator is %s)" msgstr "" #: src/gedlib/messages.c:238 msgid "Do you want to re-edit it?" msgstr "" #: src/gedlib/messages.c:240 #, c-format msgid "%s was added to the database." msgstr "" #: src/gedlib/messages.c:241 #, c-format msgid "%s was added as a child." msgstr "" #: src/gedlib/messages.c:242 #, c-format msgid "%s was added as a spouse and/or parent." msgstr "" #: src/gedlib/messages.c:243 msgid "The new family was added to the database." msgstr "" #: src/gedlib/messages.c:244 #, c-format msgid "%s was modified in the database." msgstr "" #: src/gedlib/messages.c:245 msgid "The family was modified in the database." msgstr "" #: src/gedlib/messages.c:246 msgid "The source was modified in the database." msgstr "" #: src/gedlib/messages.c:247 msgid "The event was modified in the database." msgstr "" #: src/gedlib/messages.c:248 msgid "The record was modified in the database." msgstr "" #: src/gedlib/messages.c:250 #, c-format msgid "Could not open file %s." msgstr "" #: src/gedlib/messages.c:251 msgid "Filepath too long." msgstr "" #: src/gedlib/messages.c:253 msgid "Please mark a record first." msgstr "" #: src/gedlib/messages.c:255 #, c-format msgid "The current list is now named %s." msgstr "" #: src/gedlib/messages.c:256 msgid "The current list is not named." msgstr "" #: src/gedlib/messages.c:257 msgid "What should the name of this list be?" msgstr "" #: src/gedlib/messages.c:258 msgid "No persons were added to the current list." msgstr "" #: src/gedlib/messages.c:259 msgid "What persons or list do you want to add to the current list?" msgstr "" #: src/gedlib/messages.c:260 msgid "You are at the bottom of the list." msgstr "" #: src/gedlib/messages.c:261 msgid "You are at the top of the list." msgstr "" #: src/gedlib/messages.c:262 msgid "New persons were added to the current list." msgstr "" #: src/gedlib/messages.c:264 msgid "System error: illegal map code" msgstr "" #: src/gedlib/messages.c:265 msgid "No such translation table in this database" msgstr "" #: src/gedlib/messages.c:268 msgid "Because of errors the GEDCOM file was not loaded.\n" msgstr "" #: src/gedlib/messages.c:269 msgid "No errors; adding records with original keys..." msgstr "" #: src/gedlib/messages.c:270 msgid "No errors; adding records with new keys..." msgstr "" #: src/gedlib/messages.c:271 msgid "Use original keys from GEDCOM file?" msgstr "" #: src/gedlib/messages.c:272 msgid "Proceed?" msgstr "" #: src/gedlib/messages.c:273 msgid "Enter name of output archive file." msgstr "" #: src/gedlib/messages.c:274 #, c-format msgid "Database `%s' has been saved in `%s'." msgstr "" #: src/gedlib/messages.c:275 msgid "Enter name of translation table file to write" msgstr "" #: src/gedlib/messages.c:276 msgid "Enter name of translation table file to read" msgstr "" #: src/gedlib/messages.c:277 #, c-format msgid "Line %d: The person defined here has no key: skipped." msgstr "" #: src/gedlib/messages.c:278 #, c-format msgid "Line %d: The family defined here has no key." msgstr "" #: src/gedlib/messages.c:279 #, c-format msgid "Lines %d and %d: Person %s is multiply defined: skipped." msgstr "" #: src/gedlib/messages.c:280 #, c-format msgid "Lines %d and %d: Family %s is multiply defined." msgstr "" #: src/gedlib/messages.c:281 #, c-format msgid "Line %d: Person %s has an incorrect key: skipped." msgstr "" #: src/gedlib/messages.c:282 #, c-format msgid "Line %d: Family %s has an incorrect key." msgstr "" #: src/gedlib/messages.c:283 #, c-format msgid "Person %s is referred to but not defined." msgstr "" #: src/gedlib/messages.c:284 #, c-format msgid "Family %s is referred to but not defined." msgstr "" #: src/gedlib/messages.c:285 #, c-format msgid "Source %s is referred to but not defined." msgstr "" #: src/gedlib/messages.c:286 #, c-format msgid "Event %s is referred to but not defined." msgstr "" #: src/gedlib/messages.c:287 #, c-format msgid "Line %d: This line has a level number that is too large." msgstr "" #: src/gedlib/messages.c:288 #, c-format msgid "Line %d: Person defined here has no name." msgstr "" #: src/gedlib/messages.c:294 msgid "" msgstr "" #: src/gedlib/messages.c:296 msgid "What is the name of the program?" msgstr "" #: src/gedlib/messages.c:297 msgid "Please enter the name of the GEDCOM file." msgstr "" #: src/gedlib/messages.c:299 msgid "What is the name of the output file?" msgstr "" #: src/gedlib/messages.c:300 msgid "Malformed configuration file: line too long." msgstr "" #: src/gedlib/messages.c:301 msgid "Unsupported file encoding (no multibyte encodings except UTF-8)." msgstr "" #: src/gedlib/messages.c:302 #, c-format msgid "Unsupported file encoding: %s." msgstr "" #: src/gedlib/messages.c:305 msgid "Enter string for program" msgstr "" #: src/gedlib/messages.c:306 msgid "enter string: " msgstr "" #: src/gedlib/messages.c:307 msgid "enter integer:" msgstr "" #: src/gedlib/messages.c:308 msgid "enter name: " msgstr "" #: src/gedlib/messages.c:309 msgid "Strike any key to continue." msgstr "" #: src/gedlib/messages.c:313 msgid "" "0 SOUR\n" "1 REFN\n" "1 TITL Title\n" "1 AUTH Author" msgstr "" #: src/gedlib/messages.c:314 msgid "" "0 EVEN\n" "1 REFN\n" "1 DATE\n" "1 PLAC\n" "1 INDI\n" " 2 NAME\n" " 2 ROLE\n" "1 SOUR" msgstr "" #: src/gedlib/messages.c:315 msgid "" "0 XXXX\n" "1 REFN" msgstr "" #: src/gedlib/messages.c:319 msgid "The file is as positioned at EOF." msgstr "" #: src/gedlib/messages.c:320 #, c-format msgid "Line %d: This line is empty; EOF?" msgstr "" #: src/gedlib/messages.c:321 #, c-format msgid "Line %d: This line is too long." msgstr "" #: src/gedlib/messages.c:322 #, c-format msgid "Line %d: This line has no level number." msgstr "" #: src/gedlib/messages.c:323 #, c-format msgid "Line %d: This line is incomplete." msgstr "" #: src/gedlib/messages.c:324 #, c-format msgid "Line %d: This line has a bad link." msgstr "" #: src/gedlib/messages.c:325 #, c-format msgid "Line %d: This line needs white space before tag." msgstr "" #: src/gedlib/messages.c:326 #, c-format msgid "Line %d: This line has an illegal level." msgstr "" #: src/gedlib/messages.c:327 msgid "The record begins at wrong level." msgstr "" #: src/gedlib/messages.c:330 msgid "" "\n" "Aborting now. Core dump? [y/n]" msgstr "" #: src/gedlib/messages.c:331 msgid "" "Looks like a program was running.\n" "Check file %1 around line %2.\n" msgstr "" #: src/gedlib/messages.c:332 msgid "signal %1: %2" msgstr "" #: src/gedlib/messages.c:334 msgid "SIGNAL 0" msgstr "" #: src/gedlib/messages.c:335 msgid "HANGUP" msgstr "" #: src/gedlib/messages.c:336 msgid "INTERRUPT" msgstr "" #: src/gedlib/messages.c:337 msgid "QUIT" msgstr "" #: src/gedlib/messages.c:338 msgid "ILLEGAL INSTRUCTION" msgstr "" #: src/gedlib/messages.c:339 msgid "TRACE TRAP" msgstr "" #: src/gedlib/messages.c:340 msgid "ABORT" msgstr "" #: src/gedlib/messages.c:341 msgid "EMT INST" msgstr "" #: src/gedlib/messages.c:342 msgid "FLOATING POINT EXCEPTION" msgstr "" #: src/gedlib/messages.c:343 msgid "KILL" msgstr "" #: src/gedlib/messages.c:344 msgid "BUS ERROR" msgstr "" #: src/gedlib/messages.c:345 msgid "SEGMENTATION ERROR" msgstr "" #: src/gedlib/messages.c:346 msgid "SYSTEM CALL ERROR" msgstr "" #: src/gedlib/messages.c:347 msgid "PIPE WRITE" msgstr "" #: src/gedlib/messages.c:348 msgid "ALARM CLOCK" msgstr "" #: src/gedlib/messages.c:350 msgid "TERMINATE FROM KILL" msgstr "" #: src/gedlib/messages.c:351 msgid "USER SIGNAL 1" msgstr "" #: src/gedlib/messages.c:352 msgid "USER SIGNAL 2" msgstr "" #: src/gedlib/messages.c:353 msgid "DEATH OF CHILD" msgstr "" #: src/gedlib/messages.c:354 msgid "POWER-FAIL RESTART" msgstr "" #: src/gedlib/messages.c:355 msgid "WINDOW CHANGE" msgstr "" #: src/gedlib/messages.c:356 msgid "Unknown signal" msgstr "" #: src/gedlib/messages.c:360 msgid "person" msgstr "" #: src/gedlib/messages.c:361 msgid ", of " msgstr "" #: src/gedlib/messages.c:362 msgid "father" msgstr "" #: src/gedlib/messages.c:363 msgid "mother" msgstr "" #: src/gedlib/messages.c:364 msgid "spouse" msgstr "" #: src/gedlib/messages.c:365 msgid "child" msgstr "" #: src/gedlib/messages.c:368 msgid "m. " msgstr "" #: src/gedlib/messages.c:370 msgid "div. " msgstr "" #: src/gedlib/messages.c:372 msgid "b. " msgstr "" #: src/gedlib/messages.c:374 msgid "bap. " msgstr "" #: src/gedlib/messages.c:376 msgid "d. " msgstr "" #: src/gedlib/messages.c:378 msgid "bur. " msgstr "" #: src/gedlib/messages.c:380 msgid "cb. " msgstr "" #: src/gedlib/messages.c:382 msgid "married: " msgstr "" #: src/gedlib/messages.c:383 msgid "born: " msgstr "" #: src/gedlib/messages.c:384 msgid "bapt: " msgstr "" #: src/gedlib/messages.c:385 msgid "died: " msgstr "" #: src/gedlib/messages.c:386 msgid "buri: " msgstr "" #: src/gedlib/messages.c:390 msgid "You cannot edit the INDI line in a person record." msgstr "" #: src/gedlib/messages.c:391 msgid "You cannot edit the FAMC line in a person record." msgstr "" #: src/gedlib/messages.c:392 msgid "You cannot edit the FAMS lines in a person record." msgstr "" #: src/gedlib/messages.c:393 msgid "You cannot edit the FAM line in a family record." msgstr "" #: src/gedlib/messages.c:394 msgid "You cannot edit the HUSB line in a family record." msgstr "" #: src/gedlib/messages.c:395 msgid "You cannot edit the WIFE line in a family record." msgstr "" #: src/gedlib/messages.c:396 msgid "You cannot edit the CHIL lines in a family record." msgstr "" #: src/gedlib/messages.c:397 msgid "The record is empty." msgstr "" #: src/gedlib/messages.c:398 msgid "The record does not begin with an INDI line." msgstr "" #: src/gedlib/messages.c:399 msgid "The record does not begin with a FAM line." msgstr "" #: src/gedlib/messages.c:400 msgid "The record does not begin with a SOUR line." msgstr "" #: src/gedlib/messages.c:401 msgid "The record does not begin with an EVEN line." msgstr "" #: src/gedlib/messages.c:402 msgid "INDI, FAM, SOUR, EVEN records may not be other records." msgstr "" #: src/gedlib/messages.c:403 msgid "The record contains multiple level 0 lines." msgstr "" #: src/gedlib/messages.c:404 msgid "This person record has bad GEDCOM name syntax." msgstr "" #: src/gedlib/messages.c:405 msgid "You cannot change the sex of a parent." msgstr "" #: src/gedlib/messages.c:406 msgid "REFN key is already in use." msgstr "" #: src/gedlib/messages.c:408 msgid "Tag is too long to connect automatically." msgstr "" #: src/gedlib/messages.c:410 msgid "Database records" msgstr "" #: src/gedlib/messages.c:411 #, c-format msgid "%dI, %dF, %dS, %dE, %dX" msgstr "" #: src/gedlib/messages.c:414 #, c-format msgid "LifeLines %s - Genealogical DB and Programming System" msgstr "" #: src/gedlib/messages.c:415 msgid "Copyright(c) 1991 to 1996, by T. T. Wetmore IV" msgstr "" #: src/gedlib/messages.c:416 #, c-format msgid "Current Database - %s" msgstr "" #: src/gedlib/messages.c:418 msgid " (immutable)" msgstr "" #: src/gedlib/messages.c:420 msgid " (read only)" msgstr "" #: src/gedlib/messages.c:421 msgid "Please choose an operation:" msgstr "" #: src/gedlib/messages.c:422 msgid "Not valid command" msgstr "" #: src/gedlib/messages.c:425 msgid "enter y (yes) or n (no): " msgstr "" #: src/gedlib/messages.c:426 msgid "yYnN" msgstr "" #: src/gedlib/messages.c:427 msgid "yY" msgstr "" #: src/gedlib/messages.c:430 msgid "LifeLines -- Person Browse Screen (* toggles menu)" msgstr "" #: src/gedlib/messages.c:431 msgid "LifeLines -- Family Browse Screen (* toggles menu)" msgstr "" #: src/gedlib/messages.c:432 msgid "LifeLines -- Two Person Browse Screen (* toggles menu)" msgstr "" #: src/gedlib/messages.c:433 msgid "LifeLines -- Two Family Browse Screen (* toggles menu)" msgstr "" #: src/gedlib/messages.c:434 msgid "LifeLines -- Auxiliary Browse Screen (* toggles menu)" msgstr "" #: src/gedlib/messages.c:435 msgid "LifeLines -- List Browse Screen (* toggles menu)" msgstr "" #: src/gedlib/messages.c:439 msgid "Commands: Select by number, u Page Up, d Page Down, i Select, q Quit" msgstr "" #: src/gedlib/messages.c:440 msgid "Commands: u Page Up, d Page Down, q Quit" msgstr "" #: src/gedlib/messages.c:441 msgid "Messages:" msgstr "" #: src/gedlib/messages.c:444 msgid "Please choose from the following options:" msgstr "" #: src/gedlib/messages.c:445 #, c-format msgid "New record is %s" msgstr "" #: src/gedlib/messages.c:446 msgid "Insert xref automatically at bottom of current record." msgstr "" #: src/gedlib/messages.c:447 msgid "Edit current record now to add xref manually." msgstr "" #: src/gedlib/messages.c:448 msgid "Browse new record (without adding xref)." msgstr "" #: src/gedlib/messages.c:449 msgid "Return to current record (without adding xref)." msgstr "" #: src/gedlib/messages.c:452 msgid "Spouse unknown" msgstr "" #: src/gedlib/messages.c:453 msgid "No more history" msgstr "" #: src/gedlib/messages.c:454 msgid "Bad history count" msgstr "" #: src/gedlib/messages.c:455 msgid "Bad backup history count" msgstr "" #: src/gedlib/messages.c:456 msgid "Bad history length" msgstr "" #: src/gedlib/messages.c:457 #, c-format msgid "Delete history (%d entries)?" msgstr "" #: src/gedlib/messages.c:458 msgid "Error accessing data" msgstr "" #: src/gedlib/messages.c:459 msgid "Choose from history" msgstr "" #: src/gedlib/messages.c:460 msgid "" "Cannot combine immutable (-i) or read-only (-r) with read-write (-w) access." msgstr "" #: src/gedlib/messages.c:461 msgid "Cannot combine forceopen (-f) and lock (-l) flags." msgstr "" #: src/gedlib/messages.c:462 msgid "Default path: " msgstr "" #: src/gedlib/messages.c:463 msgid "WARNING: missing keys" msgstr "" #: src/gedlib/messages.c:464 msgid "This does not point to another record in the database!" msgstr "" #: src/gedlib/messages.c:465 msgid "enter file name" msgstr "" #: src/gedlib/messages.c:466 #, c-format msgid "enter file name (*%s)" msgstr "" #: src/gedlib/messages.c:467 msgid "There is no record with that key or reference." msgstr "" #: src/gedlib/messages.c:468 msgid "Database was corrupt." msgstr "" #: src/gedlib/messages.c:471 msgid "Bad decimal number format." msgstr "" #: src/gedlib/messages.c:472 msgid "Bad hexidecimal number format." msgstr "" #: src/gedlib/messages.c:473 msgid "No replacement string on line." msgstr "" #: src/gedlib/messages.c:474 msgid "No original string on line." msgstr "" #: src/gedlib/messages.c:475 msgid "Bad escape format." msgstr "" #: src/gedlib/messages.c:476 #, c-format msgid "%s: line %d (entry %d): %s" msgstr "" #: src/gedlib/messages.c:479 src/liflines/brwsmenu.c:26 msgid "q Return to main menu" msgstr "" #: src/gedlib/messages.c:480 msgid "q Return to previous menu" msgstr "" #: src/gedlib/messages.c:481 msgid "q Quit program" msgstr "" #: src/gedlib/messages.c:482 msgid "Q Quit current database" msgstr "" #: src/gedlib/messages.c:485 msgid "b Browse the persons in the database" msgstr "" #: src/gedlib/messages.c:486 msgid "s Search database" msgstr "" #: src/gedlib/messages.c:487 msgid "a Add information to the database" msgstr "" #: src/gedlib/messages.c:488 msgid "d Delete information from the database" msgstr "" #: src/gedlib/messages.c:489 msgid "r Generate report by entering report name" msgstr "" #: src/gedlib/messages.c:490 msgid "p Pick a report from list and run" msgstr "" #: src/gedlib/messages.c:491 msgid "c Character set options" msgstr "" #: src/gedlib/messages.c:492 msgid "t Modify character translation tables" msgstr "" #: src/gedlib/messages.c:493 msgid "u Miscellaneous utilities" msgstr "" #: src/gedlib/messages.c:494 msgid "x Handle source, event and other records" msgstr "" #: src/gedlib/messages.c:497 msgid "What utility do you want to perform?" msgstr "" #: src/gedlib/messages.c:498 msgid "s Save the database in a GEDCOM file" msgstr "" #: src/gedlib/messages.c:499 msgid "r Read in data from a GEDCOM file" msgstr "" #: src/gedlib/messages.c:500 msgid "R Pick a GEDCOM file and read in" msgstr "" #: src/gedlib/messages.c:501 msgid "k Find a person's key value" msgstr "" #: src/gedlib/messages.c:502 msgid "i Identify a person from key value" msgstr "" #: src/gedlib/messages.c:503 msgid "d Show database statistics" msgstr "" #: src/gedlib/messages.c:504 msgid "m Show memory statistics" msgstr "" #: src/gedlib/messages.c:505 msgid "e Edit the place abbreviation file" msgstr "" #: src/gedlib/messages.c:506 msgid "o Edit the user options file" msgstr "" #: src/gedlib/messages.c:509 msgid "What activity do you want to perform?" msgstr "" #: src/gedlib/messages.c:510 msgid "s Browse source records" msgstr "" #: src/gedlib/messages.c:511 msgid "e Browse event records" msgstr "" #: src/gedlib/messages.c:512 msgid "x Browse other records" msgstr "" #: src/gedlib/messages.c:513 msgid "1 Add a source record to the database" msgstr "" #: src/gedlib/messages.c:514 msgid "2 Edit source record from the database" msgstr "" #: src/gedlib/messages.c:515 msgid "3 Add an event record to the database" msgstr "" #: src/gedlib/messages.c:516 msgid "4 Edit event record from the database" msgstr "" #: src/gedlib/messages.c:517 msgid "5 Add an other record to the database" msgstr "" #: src/gedlib/messages.c:518 msgid "6 Edit other record from the database" msgstr "" #: src/gedlib/messages.c:521 msgid "Translation Tables" msgstr "" #: src/gedlib/messages.c:522 msgid "e edit individual tables (in db)" msgstr "" #: src/gedlib/messages.c:523 msgid "l load a table from a file (into db)" msgstr "" #: src/gedlib/messages.c:524 msgid "s save a table to a file (from db)" msgstr "" #: src/gedlib/messages.c:525 msgid "x export all tables (from db to files)" msgstr "" #: src/gedlib/messages.c:526 msgid "i import all tables (from files into db)" msgstr "" #: src/gedlib/messages.c:527 msgid "export/import directory:" msgstr "" #: src/gedlib/messages.c:530 msgid "Which character mapping do you want to edit?" msgstr "" #: src/gedlib/messages.c:531 msgid "Which character mapping do you want to save?" msgstr "" #: src/gedlib/messages.c:534 msgid "Not implemented yet" msgstr "" #: src/gedlib/messages.c:537 msgid "What do you want to add?" msgstr "" #: src/gedlib/messages.c:538 msgid "p Person - add new person to the database" msgstr "" #: src/gedlib/messages.c:539 msgid "f Family - create family record from one or two spouses" msgstr "" #: src/gedlib/messages.c:540 msgid "c Child - add a child to an existing family" msgstr "" #: src/gedlib/messages.c:541 msgid "s Spouse - add a spouse to an existing family" msgstr "" #: src/gedlib/messages.c:544 msgid "What do you want to remove?" msgstr "" #: src/gedlib/messages.c:545 msgid "c Child - remove a child from his/her family" msgstr "" #: src/gedlib/messages.c:546 msgid "s Spouse - remove a spouse from a family" msgstr "" #: src/gedlib/messages.c:547 msgid "i Individual - remove a person completely" msgstr "" #: src/gedlib/messages.c:548 msgid "f Family - remove a family completely" msgstr "" #: src/gedlib/messages.c:549 msgid "o Other - remove other record completely" msgstr "" #: src/gedlib/messages.c:552 msgid "How would you like to find a record?" msgstr "" #: src/gedlib/messages.c:555 msgid "Performing full name scan" msgstr "" #: src/gedlib/messages.c:556 msgid "Performing name fragment scan" msgstr "" #: src/gedlib/messages.c:557 msgid "Performing refn scan" msgstr "" #: src/gedlib/messages.c:558 msgid "Performing source scan" msgstr "" #: src/gedlib/messages.c:559 msgid "No records found in scan" msgstr "" #: src/gedlib/messages.c:562 msgid "abt %1" msgstr "" #: src/gedlib/messages.c:563 msgid "about %1" msgstr "" #: src/gedlib/messages.c:564 msgid "est %1" msgstr "" #: src/gedlib/messages.c:565 msgid "estimated %1" msgstr "" #: src/gedlib/messages.c:566 msgid "cal %1" msgstr "" #: src/gedlib/messages.c:567 msgid "calculated %1" msgstr "" #: src/gedlib/messages.c:568 msgid "fr %1" msgstr "" #: src/gedlib/messages.c:569 msgid "from %1" msgstr "" #: src/gedlib/messages.c:570 src/gedlib/messages.c:571 msgid "to %1" msgstr "" #: src/gedlib/messages.c:572 msgid "fr %1 to %2" msgstr "" #: src/gedlib/messages.c:573 msgid "from %1 to %2" msgstr "" #: src/gedlib/messages.c:574 msgid "bef %1" msgstr "" #: src/gedlib/messages.c:575 msgid "before %1" msgstr "" #: src/gedlib/messages.c:576 msgid "aft %1" msgstr "" #: src/gedlib/messages.c:577 msgid "after %1" msgstr "" #: src/gedlib/messages.c:578 msgid "bet %1 and %2" msgstr "" #: src/gedlib/messages.c:579 msgid "between %1 and %2" msgstr "" #: src/gedlib/messages.c:582 msgid "B.C." msgstr "" #: src/gedlib/messages.c:584 msgid "BC" msgstr "" #: src/gedlib/messages.c:586 msgid "B.C.E." msgstr "" #: src/gedlib/messages.c:588 msgid "BCE" msgstr "" #: src/gedlib/messages.c:590 msgid "A.D." msgstr "" #: src/gedlib/messages.c:592 msgid "AD" msgstr "" #: src/gedlib/messages.c:594 msgid "C.E." msgstr "" #: src/gedlib/messages.c:596 msgid "CE" msgstr "" #: src/gedlib/messages.c:599 msgid "%1J" msgstr "" #: src/gedlib/messages.c:601 msgid "%1 HEB" msgstr "" #: src/gedlib/messages.c:603 msgid "%1 FR" msgstr "" #: src/gedlib/messages.c:605 msgid "%1 AUC" msgstr "" #: src/gedlib/messages.c:607 msgid "jan" msgstr "" #: src/gedlib/messages.c:608 msgid "january" msgstr "" #: src/gedlib/messages.c:609 msgid "feb" msgstr "" #: src/gedlib/messages.c:610 msgid "february" msgstr "" #: src/gedlib/messages.c:611 msgid "mar" msgstr "" #: src/gedlib/messages.c:612 msgid "march" msgstr "" #: src/gedlib/messages.c:613 msgid "apr" msgstr "" #: src/gedlib/messages.c:614 msgid "april" msgstr "" #: src/gedlib/messages.c:616 msgid "**may" msgstr "" #: src/gedlib/messages.c:617 msgid "may" msgstr "" #: src/gedlib/messages.c:618 msgid "jun" msgstr "" #: src/gedlib/messages.c:619 msgid "june" msgstr "" #: src/gedlib/messages.c:620 msgid "jul" msgstr "" #: src/gedlib/messages.c:621 msgid "july" msgstr "" #: src/gedlib/messages.c:622 msgid "aug" msgstr "" #: src/gedlib/messages.c:623 msgid "august" msgstr "" #: src/gedlib/messages.c:624 msgid "sep" msgstr "" #: src/gedlib/messages.c:625 msgid "september" msgstr "" #: src/gedlib/messages.c:626 msgid "oct" msgstr "" #: src/gedlib/messages.c:627 msgid "october" msgstr "" #: src/gedlib/messages.c:628 msgid "nov" msgstr "" #: src/gedlib/messages.c:629 msgid "november" msgstr "" #: src/gedlib/messages.c:630 msgid "dec" msgstr "" #: src/gedlib/messages.c:631 msgid "december" msgstr "" #: src/gedlib/messages.c:633 msgid "tsh" msgstr "" #: src/gedlib/messages.c:634 msgid "tishri" msgstr "" #: src/gedlib/messages.c:635 msgid "csh" msgstr "" #: src/gedlib/messages.c:636 msgid "cheshvan" msgstr "" #: src/gedlib/messages.c:637 msgid "ksl" msgstr "" #: src/gedlib/messages.c:638 msgid "kislev" msgstr "" #: src/gedlib/messages.c:639 msgid "tvt" msgstr "" #: src/gedlib/messages.c:640 msgid "tevet" msgstr "" #: src/gedlib/messages.c:641 msgid "shv" msgstr "" #: src/gedlib/messages.c:642 msgid "shevat" msgstr "" #: src/gedlib/messages.c:643 msgid "adr" msgstr "" #: src/gedlib/messages.c:644 msgid "adar" msgstr "" #: src/gedlib/messages.c:645 msgid "ads" msgstr "" #: src/gedlib/messages.c:646 msgid "adar sheni" msgstr "" #: src/gedlib/messages.c:647 msgid "nsn" msgstr "" #: src/gedlib/messages.c:648 msgid "nisan" msgstr "" #: src/gedlib/messages.c:649 msgid "iyr" msgstr "" #: src/gedlib/messages.c:650 msgid "iyar" msgstr "" #: src/gedlib/messages.c:651 msgid "svn" msgstr "" #: src/gedlib/messages.c:652 msgid "sivan" msgstr "" #: src/gedlib/messages.c:653 msgid "tmz" msgstr "" #: src/gedlib/messages.c:654 msgid "tamuz" msgstr "" #: src/gedlib/messages.c:655 msgid "aav" msgstr "" #: src/gedlib/messages.c:656 msgid "av" msgstr "" #: src/gedlib/messages.c:657 msgid "ell" msgstr "" #: src/gedlib/messages.c:658 msgid "elul" msgstr "" #: src/gedlib/messages.c:660 msgid "vend" msgstr "" #: src/gedlib/messages.c:661 msgid "vendemiaire" msgstr "" #: src/gedlib/messages.c:662 msgid "brum" msgstr "" #: src/gedlib/messages.c:663 msgid "brumaire" msgstr "" #: src/gedlib/messages.c:664 msgid "frim" msgstr "" #: src/gedlib/messages.c:665 msgid "frimaire" msgstr "" #: src/gedlib/messages.c:666 msgid "nivo" msgstr "" #: src/gedlib/messages.c:667 msgid "nivose" msgstr "" #: src/gedlib/messages.c:668 msgid "pluv" msgstr "" #: src/gedlib/messages.c:669 msgid "pluviose" msgstr "" #: src/gedlib/messages.c:670 msgid "vent" msgstr "" #: src/gedlib/messages.c:671 msgid "ventose" msgstr "" #: src/gedlib/messages.c:672 msgid "germ" msgstr "" #: src/gedlib/messages.c:673 msgid "germinal" msgstr "" #: src/gedlib/messages.c:674 msgid "flor" msgstr "" #: src/gedlib/messages.c:675 msgid "floreal" msgstr "" #: src/gedlib/messages.c:676 msgid "prai" msgstr "" #: src/gedlib/messages.c:677 msgid "prairial" msgstr "" #: src/gedlib/messages.c:678 msgid "mess" msgstr "" #: src/gedlib/messages.c:679 msgid "messidor" msgstr "" #: src/gedlib/messages.c:680 msgid "ther" msgstr "" #: src/gedlib/messages.c:681 msgid "thermidor" msgstr "" #: src/gedlib/messages.c:682 msgid "fruc" msgstr "" #: src/gedlib/messages.c:683 msgid "fructidor" msgstr "" #: src/gedlib/messages.c:684 msgid "comp" msgstr "" #: src/gedlib/messages.c:685 msgid "jour_complementairs" msgstr "" #: src/gedlib/node.c:610 msgid "NO NAME" msgstr "" #: src/gedlib/node.c:1167 #, c-format msgid "Node memory leaks:" msgstr "" #: src/gedlib/node.c:1170 src/gedlib/record.c:361 src/interp/pvalalloc.c:301 #, c-format msgid "%d item leaked" msgid_plural "%d items leaked" msgstr[0] "" msgstr[1] "" #: src/gedlib/record.c:358 #, c-format msgid "Record memory leaks:" msgstr "" #: src/gedlib/remove.c:250 msgid "Families may not yet be removed in this fashion." msgstr "" #. TRANSLATORS: Character set conversion from external editor to database internal #: src/gedlib/translat.c:100 msgid "Editor to Internal" msgstr "" #. TRANSLATORS: Character set conversion from database internal to external editor #: src/gedlib/translat.c:102 msgid "Internal to Editor" msgstr "" #: src/gedlib/translat.c:103 msgid "GEDCOM to Internal" msgstr "" #: src/gedlib/translat.c:104 msgid "Internal to GEDCOM" msgstr "" #: src/gedlib/translat.c:105 msgid "Display to Internal" msgstr "" #: src/gedlib/translat.c:106 msgid "Internal to Display" msgstr "" #: src/gedlib/translat.c:107 msgid "Report to Internal" msgstr "" #: src/gedlib/translat.c:108 msgid "Internal to Report" msgstr "" #. TRANSLATORS: key for "Editor to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:119 msgid "menu|trantable|e" msgstr "" #. TRANSLATORS: key for "Internal to Editor" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:122 msgid "menu|trantable|m" msgstr "" #. TRANSLATORS: key for "GEDCOM to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:125 msgid "menu|trantable|i" msgstr "" #. TRANSLATORS: key for "Internal to GEDCOM" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:128 msgid "menu|trantable|x" msgstr "" #. TRANSLATORS: key for "Display to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:131 msgid "menu|trantable|g" msgstr "" #. TRANSLATORS: key for "Internal to Display" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:134 msgid "menu|trantable|d" msgstr "" #. TRANSLATORS: key for "Report to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:137 msgid "menu|trantable|p" msgstr "" #. TRANSLATORS: key for "Internal to Report" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:140 msgid "menu|trantable|r" msgstr "" #. TRANSLATORS: db internal translation table note for tt menu #: src/gedlib/translat.c:473 #, c-format msgid " (dbint tt: %s)" msgstr "" #: src/gedlib/valid.c:75 msgid "This person record does not have a name line." msgstr "" #: src/gedlib/xlat.c:347 #, c-format msgid "ttpath get_conversion_dyntt:from <%s> to <%s>: %s" msgstr "" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 msgid "succeeded" msgstr "" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 msgid "failed" msgstr "" #: src/gedlib/xlat.c:369 #, c-format msgid "ttpath get_subcoding_dyntt from <%s> to subcode <%s>: %s" msgstr "" #: src/gedlib/xlat.c:435 msgid "No TTPATH config variable" msgstr "" #: src/gedlib/xlat.c:464 #, c-format msgid "ttpath checking dir <%s>" msgstr "" #: src/gedlib/xlat.c:478 #, c-format msgid "ttpath file <%s> typed as %d" msgstr "" #: src/gedlib/xlat.c:690 msgid "(no conversion)" msgstr "" #. TRANSLATORS: steps in a chain of codeset conversions, eg, Editor-to-Internal #: src/gedlib/xlat.c:713 #, c-format msgid "%d step" msgid_plural "%d steps" msgstr[0] "" msgstr[1] "" #: src/gedlib/xreffile.c:400 #, c-format msgid "Corrupt DELETESET %c" msgstr "" #: src/gedlib/xreffile.c:425 #, c-format msgid "Tried to add already-deleted record (%ld) to xref (%c)!" msgstr "" #: src/interp/alloc.c:798 #, c-format msgid "Error: file \"%s\": line %d: " msgstr "" #: src/interp/alloc.c:903 #, c-format msgid "%s: the arg must be an integer." msgstr "" #: src/interp/alloc.c:904 #, c-format msgid "%s: the arg #%s must be an integer." msgstr "" #: src/interp/alloc.c:905 #, c-format msgid "%s: the arg #%s must be a float." msgstr "" #: src/interp/alloc.c:906 #, c-format msgid "%s: the arg must be a string." msgstr "" #: src/interp/alloc.c:907 #, c-format msgid "%s: the arg #%s must be a string." msgstr "" #: src/interp/alloc.c:908 #, c-format msgid "%s: null arg not permissible." msgstr "" #: src/interp/alloc.c:909 #, c-format msgid "%s: the arg must be a filename." msgstr "" #: src/interp/alloc.c:910 #, c-format msgid "%s: the arg must be a node or string." msgstr "" #: src/interp/alloc.c:911 #, c-format msgid "%s: the arg must be a person." msgstr "" #: src/interp/alloc.c:912 #, c-format msgid "%s: the arg #%s must be a person." msgstr "" #: src/interp/alloc.c:913 #, c-format msgid "%s: the arg must be a family." msgstr "" #: src/interp/alloc.c:914 #, c-format msgid "%s: the arg #%s must be a family." msgstr "" #: src/interp/alloc.c:915 #, c-format msgid "%s: the arg #%s must be a record." msgstr "" #: src/interp/alloc.c:916 #, c-format msgid "%s: the arg must be a node." msgstr "" #: src/interp/alloc.c:917 #, c-format msgid "%s: the arg #%s must be a node." msgstr "" #: src/interp/alloc.c:918 #, c-format msgid "%s: the arg must be a variable." msgstr "" #: src/interp/alloc.c:919 #, c-format msgid "%s: the arg #%s must be a variable." msgstr "" #: src/interp/alloc.c:920 #, c-format msgid "%s: the arg #%s must be a boolean." msgstr "" #: src/interp/alloc.c:921 #, c-format msgid "%s: the arg must be a list." msgstr "" #: src/interp/alloc.c:922 #, c-format msgid "%s: the arg #%s must be a list." msgstr "" #: src/interp/alloc.c:923 #, c-format msgid "%s: the arg #%s must be a table." msgstr "" #: src/interp/alloc.c:924 #, c-format msgid "%s: the arg must be a set." msgstr "" #: src/interp/alloc.c:925 #, c-format msgid "%s: the arg #%s must be a set." msgstr "" #: src/interp/alloc.c:926 #, c-format msgid "%s: Bad arguments" msgstr "" #: src/interp/alloc.c:927 #, c-format msgid "%s: the arg had a major error." msgstr "" #: src/interp/alloc.c:928 #, c-format msgid "%s: the arg #%s had a major error." msgstr "" #: src/interp/alloc.c:929 #, c-format msgid "%s: the arg #%s would cause an arithmetic exception." msgstr "" #: src/interp/builtin.c:111 msgid "Enter integer for program" msgstr "" #: src/interp/builtin.c:181 msgid "Identify person for program:" msgstr "" #: src/interp/builtin.c:206 msgid "Enter a spouse from family." msgstr "" #: src/interp/builtin.c:207 msgid "Enter a sibling from family." msgstr "" #: src/interp/builtin.c:240 msgid "Identify list of persons for program:" msgstr "" #: src/interp/builtin.c:329 msgid "name: person does not have a name" msgstr "" #: src/interp/builtin.c:385 msgid "fullname: person does not have a name" msgstr "" #: src/interp/builtin.c:412 msgid "surname: person does not have a name" msgstr "" #: src/interp/builtin.c:437 msgid "soundex: person does not have a name" msgstr "" #: src/interp/builtin.c:500 #, c-format msgid "Bad escape code at offset %d in bytecode string <%s>" msgstr "" #: src/interp/builtin.c:643 msgid "(givens) person does not have a name" msgstr "" #: src/interp/builtin.c:670 #, c-format msgid "set(%s, ) is invalid" msgstr "" #: src/interp/builtin.c:1191 msgid "first" msgstr "" #: src/interp/builtin.c:1191 msgid "second" msgstr "" #: src/interp/builtin.c:1191 msgid "third" msgstr "" #: src/interp/builtin.c:1191 msgid "fourth" msgstr "" #: src/interp/builtin.c:1191 msgid "fifth" msgstr "" #: src/interp/builtin.c:1192 msgid "sixth" msgstr "" #: src/interp/builtin.c:1192 msgid "seventh" msgstr "" #: src/interp/builtin.c:1192 msgid "eighth" msgstr "" #: src/interp/builtin.c:1192 msgid "ninth" msgstr "" #: src/interp/builtin.c:1192 msgid "tenth" msgstr "" #: src/interp/builtin.c:1193 msgid "eleventh" msgstr "" #: src/interp/builtin.c:1193 msgid "twelfth" msgstr "" #: src/interp/builtin.c:1210 #, c-format msgid "%ldth" msgstr "" #: src/interp/builtin.c:1220 msgid "zero" msgstr "" #: src/interp/builtin.c:1220 msgid "one" msgstr "" #: src/interp/builtin.c:1220 msgid "two" msgstr "" #: src/interp/builtin.c:1220 msgid "three" msgstr "" #: src/interp/builtin.c:1220 msgid "four" msgstr "" #: src/interp/builtin.c:1220 msgid "five" msgstr "" #: src/interp/builtin.c:1221 msgid "six" msgstr "" #: src/interp/builtin.c:1221 msgid "seven" msgstr "" #: src/interp/builtin.c:1221 msgid "eight" msgstr "" #: src/interp/builtin.c:1221 msgid "nine" msgstr "" #: src/interp/builtin.c:1221 msgid "ten" msgstr "" #: src/interp/builtin.c:1222 msgid "eleven" msgstr "" #: src/interp/builtin.c:1222 msgid "twelve" msgstr "" #: src/interp/builtin.c:2173 msgid "the arg to empty is not a list, table or set" msgstr "" #: src/interp/builtin.c:2283 msgid "the arg to length is not a list, table or set" msgstr "" #: src/interp/builtin.c:2470 msgid "He" msgstr "" #: src/interp/builtin.c:2470 msgid "he" msgstr "" #: src/interp/builtin.c:2470 msgid "His" msgstr "" #: src/interp/builtin.c:2470 msgid "his" msgstr "" #: src/interp/builtin.c:2470 msgid "him" msgstr "" #: src/interp/builtin.c:2472 msgid "She" msgstr "" #: src/interp/builtin.c:2472 msgid "she" msgstr "" #: src/interp/builtin.c:2472 msgid "Her" msgstr "" #: src/interp/builtin.c:2472 msgid "her" msgstr "" #: src/interp/builtin.c:2472 msgid "her_" msgstr "" #: src/interp/builtin.c:2850 msgid "(trimname) person does not have a name" msgstr "" #: src/interp/builtin.c:2940 msgid "Sunday" msgstr "" #: src/interp/builtin.c:2940 msgid "Monday" msgstr "" #: src/interp/builtin.c:2940 msgid "Tuesday" msgstr "" #: src/interp/builtin.c:2941 msgid "Wednesday" msgstr "" #: src/interp/builtin.c:2941 msgid "Thursday" msgstr "" #: src/interp/builtin.c:2941 msgid "Friday" msgstr "" #: src/interp/builtin.c:2941 msgid "Saturday" msgstr "" #: src/interp/eval.c:244 #, c-format msgid "Undefined func: %s" msgstr "" #: src/interp/eval.c:246 #, c-format msgid "Ambiguous call to func: %s" msgstr "" #: src/interp/interp.c:247 #, c-format msgid "Report not found: %s " msgstr "" #: src/interp/interp.c:258 #, c-format msgid "Error: file <%s> not found" msgstr "" #: src/interp/interp.c:316 msgid "Program contains errors.\n" msgstr "" #: src/interp/interp.c:323 msgid "Program needs a starting procedure.\n" msgstr "" #: src/interp/interp.c:340 #, c-format msgid "Proc %s must be called with %d (not %d) parameters." msgstr "" #: src/interp/interp.c:355 msgid "Program is running..." msgstr "" #: src/interp/interp.c:410 msgid "Program was run successfully.\n" msgstr "" #: src/interp/interp.c:414 msgid "Program was cancelled.\n" msgstr "" #: src/interp/interp.c:416 msgid "Program was not run because of errors.\n" msgstr "" #: src/interp/interp.c:506 #, c-format msgid "Error: file <%s> not found: %s\n" msgstr "" #: src/interp/interp.c:538 #, c-format msgid "" "\n" "Report duration %s (ui duration %s)\n" msgstr "" #: src/interp/interp.c:610 #, c-format msgid "identifier: %s should be a string\n" msgstr "" #: src/interp/interp.c:1778 #, c-format msgid "Undefined proc: %s" msgstr "" #: src/interp/interp.c:1780 #, c-format msgid "Ambiguous call to proc: %s" msgstr "" #: src/interp/interp.c:2017 #, c-format msgid "Duplicate proc %s (lines %d and %d) in report: %s" msgstr "" #: src/interp/interp.c:2047 #, c-format msgid "Duplicate func %s (lines %d and %d) in report: %s" msgstr "" #: src/interp/interp.c:2110 msgid "This report requires a newer program to run\n" msgstr "" #: src/interp/interp.c:2166 #, c-format msgid "Program forgot to unlock %d record" msgid_plural "Program forgot to unlock %d records" msgstr[0] "" msgstr[1] "" #: src/interp/intrpseq.c:303 msgid "missing or incorrect value for sort" msgstr "" #: src/interp/lex.c:219 #, c-format msgid "" "String constant overflowing internal buffer tokbuf len=%d, file: %s, start " "line: %ld" msgstr "" #: src/interp/more.c:648 msgid "Please choose from the following list." msgstr "" #: src/interp/more.c:685 msgid "Illegal type found in list in menuchoose" msgstr "" #: src/interp/more.c:976 msgid "error evaluating arg to lock" msgstr "" #: src/interp/more.c:982 msgid "null arg in lock" msgstr "" #: src/interp/more.c:993 msgid "node passed to lock must be inside a record" msgstr "" #: src/interp/more.c:999 msgid "the arg to lock must be a record or node" msgstr "" #: src/interp/more.c:1007 msgid "Error: there are 999,999 locks on arg to lock" msgstr "" #: src/interp/more.c:1027 msgid "error evaluating arg to unlock" msgstr "" #: src/interp/more.c:1033 msgid "null arg in unlock" msgstr "" #: src/interp/more.c:1044 msgid "node passed to unlock must be inside a record" msgstr "" #: src/interp/more.c:1050 msgid "the arg to unlock must be a record or node" msgstr "" #: src/interp/pvalalloc.c:295 #, c-format msgid "PVALUE memory leak report:" msgstr "" #: src/interp/pvalmath.c:70 #, c-format msgid "Nonnumeric type to operation %s: %s" msgstr "" #: src/interp/pvalmath.c:85 #, c-format msgid "Illegal value to operation %s: %s" msgstr "" #: src/interp/pvalmath.c:411 #, c-format msgid "%s: not compatible numeric types: %s and %s" msgstr "" #: src/interp/pvalue.c:810 #, c-format msgid "%s: Incomparable types: %s and %s" msgstr "" #: src/interp/pvalue.c:907 msgid "NOT PVALUE: NULL!" msgstr "" #: src/interp/pvalue.c:911 #, c-format msgid "NOT PVALUE: invalid type=%d)!" msgstr "" #: src/interp/pvalue.c:949 #, c-format msgid "%d item" msgid_plural "%d items" msgstr[0] "" msgstr[1] "" #: src/interp/pvalue.c:956 #, c-format msgid "%d entry" msgid_plural "%d entries" msgstr[0] "" msgstr[1] "" #: src/interp/pvalue.c:963 #, c-format msgid "%d record" msgid_plural "%d records" msgstr[0] "" msgstr[1] "" #: src/interp/pvalue.c:970 #, c-format msgid "%d element" msgid_plural "%d elements" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:125 msgid "Enter d for debugger, q to quit" msgstr "" #: src/interp/progerr.c:140 #, c-format msgid "Display local (%d var)" msgid_plural "Display locals (%d vars)" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:146 #, c-format msgid "Display global (%d var)" msgid_plural "Display globals (%d vars)" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:151 #, c-format msgid "Call stack has %d higher level" msgid_plural "Call stack has %d higher levels" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:154 msgid " Go up one level" msgstr "" #: src/interp/progerr.c:160 #, c-format msgid "Call stack has %d lower level" msgid_plural "Call stack has %d lower levels" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:164 msgid " Go down one level" msgstr "" #: src/interp/progerr.c:169 msgid "Quit debugger" msgstr "" #: src/interp/progerr.c:171 msgid "Report debugger" msgstr "" #: src/interp/progerr.c:175 msgid "Local variables" msgstr "" #: src/interp/progerr.c:178 msgid "Global variables" msgstr "" #: src/interp/progerr.c:338 msgid "Report cancelled" msgstr "" #: src/interp/progerr.c:346 msgid "Report file: " msgstr "" #: src/interp/progerr.c:355 #, c-format msgid "Parsing Error at line %d: " msgstr "" #: src/interp/progerr.c:357 #, c-format msgid "Runtime Error at line %d: " msgstr "" #: src/interp/progerr.c:360 msgid "Aborting: " msgstr "" #: src/interp/rassa.c:242 #, c-format msgid "Could not open file %s" msgstr "" #: src/interp/rassa.c:271 msgid "Report stopping due to error opening output file" msgstr "" #: src/interp/rassa.c:273 msgid "Report stopping due to lack of output file" msgstr "" #: src/interp/rassa.c:330 msgid "illegal call to pos." msgstr "" #: src/interp/rptsort.c:104 msgid "First argument to (r)sort must be list or array" msgstr "" #: src/interp/rptsort.c:117 src/interp/rptsort.c:128 msgid "Arguments to (r)sort must be of same size" msgstr "" #: src/interp/rptsort.c:137 msgid "Second argument to (r)sort must be list or array" msgstr "" #: src/liflines/add.c:68 #, c-format msgid "There was %d unresolved reference." msgid_plural "There were %d unresolved references." msgstr[0] "" msgstr[1] "" #: src/liflines/brwsmenu.c:25 msgid "? Other menu choices" msgstr "" #: src/liflines/brwsmenu.c:69 msgid "e Edit the person" msgstr "" #: src/liflines/brwsmenu.c:70 msgid "e Edit the family" msgstr "" #: src/liflines/brwsmenu.c:71 msgid "e Edit record" msgstr "" #: src/liflines/brwsmenu.c:72 msgid "e Edit top person" msgstr "" #: src/liflines/brwsmenu.c:73 msgid "e Edit top family" msgstr "" #: src/liflines/brwsmenu.c:74 msgid "f Browse to father" msgstr "" #: src/liflines/brwsmenu.c:75 msgid "f Browse top father" msgstr "" #: src/liflines/brwsmenu.c:76 msgid "m Browse to mother" msgstr "" #: src/liflines/brwsmenu.c:77 msgid "m Browse top mother" msgstr "" #: src/liflines/brwsmenu.c:78 msgid "s Browse to spouse/s" msgstr "" #: src/liflines/brwsmenu.c:79 msgid "s Browse top spouse/s" msgstr "" #: src/liflines/brwsmenu.c:80 msgid "c Browse to children" msgstr "" #: src/liflines/brwsmenu.c:81 msgid "c Browse top children" msgstr "" #: src/liflines/brwsmenu.c:82 msgid "o Browse to older sib" msgstr "" #: src/liflines/brwsmenu.c:83 msgid "y Browse to younger sib" msgstr "" #: src/liflines/brwsmenu.c:84 msgid "g Browse to family" msgstr "" #: src/liflines/brwsmenu.c:85 msgid "u Browse to parents" msgstr "" #: src/liflines/brwsmenu.c:86 msgid "b Browse to persons" msgstr "" #: src/liflines/brwsmenu.c:87 msgid "t Browse to top" msgstr "" #: src/liflines/brwsmenu.c:88 msgid "b Browse to bottom" msgstr "" #: src/liflines/brwsmenu.c:89 msgid "h Add as spouse" msgstr "" #: src/liflines/brwsmenu.c:90 msgid "i Add as child" msgstr "" #: src/liflines/brwsmenu.c:91 msgid "s Add spouse to family" msgstr "" #: src/liflines/brwsmenu.c:92 msgid "a Add child to family" msgstr "" #: src/liflines/brwsmenu.c:93 msgid "a Add family" msgstr "" #: src/liflines/brwsmenu.c:94 msgid "x Swap two families" msgstr "" #: src/liflines/brwsmenu.c:95 msgid "x Swap two children" msgstr "" #: src/liflines/brwsmenu.c:97 #, no-c-format msgid "%c Reorder child" msgstr "" #: src/liflines/brwsmenu.c:98 msgid "x Switch top/bottom" msgstr "" #: src/liflines/brwsmenu.c:99 msgid "n Create new person" msgstr "" #: src/liflines/brwsmenu.c:100 msgid "a Create new family" msgstr "" #: src/liflines/brwsmenu.c:101 msgid "tt Enter tandem mode" msgstr "" #: src/liflines/brwsmenu.c:102 msgid "tt Enter family tandem" msgstr "" #: src/liflines/brwsmenu.c:103 msgid "zi Browse to indi" msgstr "" #: src/liflines/brwsmenu.c:104 msgid "zz Browse to any" msgstr "" #: src/liflines/brwsmenu.c:105 msgid "r Remove as spouse" msgstr "" #: src/liflines/brwsmenu.c:106 msgid "d Remove as child" msgstr "" #: src/liflines/brwsmenu.c:107 msgid "r Remove spouse from" msgstr "" #: src/liflines/brwsmenu.c:108 msgid "d Remove child from" msgstr "" #: src/liflines/brwsmenu.c:109 msgid "( Scroll up" msgstr "" #: src/liflines/brwsmenu.c:110 msgid ") Scroll down" msgstr "" #: src/liflines/brwsmenu.c:111 msgid "] Increase tree depth" msgstr "" #: src/liflines/brwsmenu.c:112 msgid "[ Decrease tree depth" msgstr "" #: src/liflines/brwsmenu.c:113 msgid "(t Scroll top up" msgstr "" #: src/liflines/brwsmenu.c:114 msgid ")t Scroll top down" msgstr "" #: src/liflines/brwsmenu.c:115 msgid "(b Scroll bottom up" msgstr "" #: src/liflines/brwsmenu.c:116 msgid ")b Scroll bottom down" msgstr "" #: src/liflines/brwsmenu.c:117 msgid "(( Scroll both up" msgstr "" #: src/liflines/brwsmenu.c:118 msgid ")) Scroll both down" msgstr "" #: src/liflines/brwsmenu.c:119 msgid "# Toggle childnos" msgstr "" #: src/liflines/brwsmenu.c:120 msgid "!g GEDCOM mode" msgstr "" #: src/liflines/brwsmenu.c:121 msgid "!x GEDCOMX mode" msgstr "" #: src/liflines/brwsmenu.c:122 msgid "!t GEDCOMT mode" msgstr "" #: src/liflines/brwsmenu.c:123 msgid "!a Ancestors mode" msgstr "" #: src/liflines/brwsmenu.c:124 msgid "!d Descendants mode" msgstr "" #: src/liflines/brwsmenu.c:125 msgid "!n Normal mode" msgstr "" #: src/liflines/brwsmenu.c:126 msgid "p Pedigree mode" msgstr "" #: src/liflines/brwsmenu.c:127 msgid "!! Cycle mode" msgstr "" #: src/liflines/brwsmenu.c:129 msgid "(1-9) Browse to child" msgstr "" #: src/liflines/brwsmenu.c:130 msgid "y Turn on sync" msgstr "" #: src/liflines/brwsmenu.c:131 msgid "A Advanced view" msgstr "" #: src/liflines/brwsmenu.c:132 msgid "tc Tandem to children" msgstr "" #: src/liflines/brwsmenu.c:133 msgid "tf Tandem to father/s" msgstr "" #: src/liflines/brwsmenu.c:134 msgid "tg Tandem to family/s" msgstr "" #: src/liflines/brwsmenu.c:135 msgid "f Browse to fathers" msgstr "" #: src/liflines/brwsmenu.c:136 msgid "m Browse to mothers" msgstr "" #: src/liflines/brwsmenu.c:137 msgid "tm Tandem to mother/s" msgstr "" #: src/liflines/brwsmenu.c:138 msgid "ts Tandem to spouse/s" msgstr "" #: src/liflines/brwsmenu.c:139 msgid "tu Tandem to parents" msgstr "" #: src/liflines/brwsmenu.c:140 msgid "< Enlarge menu area" msgstr "" #: src/liflines/brwsmenu.c:141 msgid "> Shrink menu area" msgstr "" #: src/liflines/brwsmenu.c:142 msgid "M> More menu cols" msgstr "" #: src/liflines/brwsmenu.c:143 msgid "M< Less menu cols" msgstr "" #: src/liflines/brwsmenu.c:144 msgid "+ Next in db" msgstr "" #: src/liflines/brwsmenu.c:145 msgid "- Prev in db" msgstr "" #: src/liflines/brwsmenu.c:146 msgid "d Copy top to bottom" msgstr "" #: src/liflines/brwsmenu.c:147 msgid "j Merge bottom to top" msgstr "" #: src/liflines/brwsmenu.c:148 src/liflines/listui.c:842 msgid "j Move down list" msgstr "" #: src/liflines/brwsmenu.c:149 src/liflines/listui.c:843 msgid "k Move up list" msgstr "" #: src/liflines/brwsmenu.c:150 src/liflines/listui.c:844 msgid "e Edit this person" msgstr "" #: src/liflines/brwsmenu.c:151 src/liflines/listui.c:845 msgid "i Browse this person" msgstr "" #: src/liflines/brwsmenu.c:152 src/liflines/listui.c:846 msgid "m Mark this person" msgstr "" #: src/liflines/brwsmenu.c:153 msgid "d Delete from list" msgstr "" #: src/liflines/brwsmenu.c:154 src/liflines/listui.c:849 msgid "n Name this list" msgstr "" #: src/liflines/brwsmenu.c:155 src/liflines/listui.c:850 msgid "b Browse new persons" msgstr "" #: src/liflines/brwsmenu.c:156 src/liflines/listui.c:851 msgid "a Add to this list" msgstr "" #: src/liflines/brwsmenu.c:157 src/liflines/listui.c:852 msgid "x Swap mark/current" msgstr "" #: src/liflines/brwsmenu.c:158 msgid "$s List sources" msgstr "" #: src/liflines/brwsmenu.c:159 msgid "$n List notes" msgstr "" #: src/liflines/brwsmenu.c:160 msgid "$$ List references" msgstr "" #: src/liflines/brwsmenu.c:161 msgid "^b History/back" msgstr "" #: src/liflines/brwsmenu.c:162 msgid "^f History/fwd" msgstr "" #: src/liflines/brwsmenu.c:163 msgid "^l History list" msgstr "" #: src/liflines/brwsmenu.c:164 msgid "^c Clear history" msgstr "" #: src/liflines/brwsmenu.c:165 msgid "^xb ChngHist/back" msgstr "" #: src/liflines/brwsmenu.c:166 msgid "^xf ChngHist/fwd" msgstr "" #: src/liflines/brwsmenu.c:167 msgid "^xl ChngHist list" msgstr "" #: src/liflines/brwsmenu.c:168 msgid "^xc Clear ChngHist" msgstr "" #: src/liflines/brwsmenu.c:170 #, no-c-format msgid "%s Add source" msgstr "" #: src/liflines/brwsmenu.c:172 #, no-c-format msgid "%e Add event" msgstr "" #: src/liflines/brwsmenu.c:174 #, no-c-format msgid "%o Add other" msgstr "" #: src/liflines/brwsmenu.c:177 msgid "B Browse new family" msgstr "" #: src/liflines/brwsmenu.c:490 msgid "Missing title" msgstr "" #: src/liflines/delete.c:85 #, c-format msgid "%d spouse" msgid_plural "%d spouses" msgstr[0] "" msgstr[1] "" #: src/liflines/delete.c:88 #, c-format msgid "%d child" msgid_plural "%d children" msgstr[0] "" msgstr[1] "" #: src/liflines/error.c:63 src/tools/dbverify.c:1504 msgid "Fatal Error" msgstr "" #: src/liflines/error.c:66 msgid "FATAL ERROR" msgstr "" #: src/liflines/error.c:70 #, c-format msgid " in file <%s> at line %d\n" msgstr "" #: src/liflines/error.c:72 src/tools/dbverify.c:1515 msgid "ASSERT failure" msgstr "" #: src/liflines/import.c:169 msgid "This is not a lineage linked GEDCOM file." msgstr "" #: src/liflines/import.c:170 msgid "Proceed anyway?" msgstr "" #: src/liflines/import.c:186 msgid "No current internal codeset, so no codeset conversion can be done" msgstr "" #: src/liflines/import.c:187 msgid "Proceed without codeset conversion?" msgstr "" #: src/liflines/import.c:204 #, c-format msgid "%d warning during import" msgid_plural "%d warnings during import" msgstr[0] "" msgstr[1] "" #: src/liflines/import.c:220 #, c-format msgid "Cannot convert codeset (from <%s> to <%s>)" msgstr "" #: src/liflines/import.c:223 msgid "Enter codeset to assume (* for none)" msgstr "" #: src/liflines/import.c:246 #, c-format msgid "Using original keys, %d deleted record will be in the database." msgid_plural "Using original keys, %d deleted records will be in the database." msgstr[0] "" msgstr[1] "" #: src/liflines/lbrowse.c:219 msgid "Tandom browse only compatible with persons or families." msgstr "" #: src/liflines/lines_usage.c:21 #, c-format msgid "%s invokes the Lifelines report execution program without GUI." msgstr "" #: src/liflines/lines_usage.c:23 #, c-format msgid "%s invokes the Lifelines GUI." msgstr "" #: src/liflines/lines_usage.c:26 #, c-format msgid "" "Lifelines is a program to manipulate genealogical information\n" "in lineage-linked GEDCOM format. It has a curses interface and a\n" "built-in interpreter for its own genealogical report language.\n" "\n" "It has its own databases, and records are edited directly in GEDCOM\n" "(with an editor of the user's choice). Records store\n" "information about people, families, sources, events, and\n" "other types of data (such as notes). Lifelines includes a\n" "custom report language and comes with a collection of reports." msgstr "" #: src/liflines/lines_usage.c:36 #, c-format msgid "Usage: %s [OPTIONS] [database]" msgstr "" #: src/liflines/lines_usage.c:38 src/tools/btedit.c:238 #, c-format msgid "Options:" msgstr "" #: src/liflines/lines_usage.c:40 #, c-format msgid "-C[FILE]" msgstr "" #: src/liflines/lines_usage.c:42 #, c-format msgid "Specify configuration file location" msgstr "" #: src/liflines/lines_usage.c:44 #, c-format msgid "Finnish option (if compiled to allow Finnish option)" msgstr "" #: src/liflines/lines_usage.c:46 #, c-format msgid "-I[KEY=VALUE]" msgstr "" #: src/liflines/lines_usage.c:48 #, c-format msgid "Specify a user property (e.g. -ILLEDITOR=gvim)" msgstr "" #: src/liflines/lines_usage.c:50 #, c-format msgid "log dynamic memory operation (for debugging)" msgstr "" #: src/liflines/lines_usage.c:52 #, c-format msgid "-c[TYPE][DIRECT,INDIRECT]" msgstr "" #: src/liflines/lines_usage.c:54 #, c-format msgid "" "supply cache values (eg, -ci400,4000f400,4000 sets direct indi\n" "\t\t& fam caches to 400, and indirect indi & fam caches to 4000)" msgstr "" #: src/liflines/lines_usage.c:57 #, c-format msgid "debug mode (disable signal trapping)" msgstr "" #: src/liflines/lines_usage.c:59 #, c-format msgid "force open (for recovery from errors or power failure)" msgstr "" #: src/liflines/lines_usage.c:61 #, c-format msgid "open database with immutable access (for use on read-only media)" msgstr "" #: src/liflines/lines_usage.c:63 #, c-format msgid "always show keys (even if REFN available)" msgstr "" #: src/liflines/lines_usage.c:65 #, c-format msgid "unlock a database (for correct access on read-write media)" msgstr "" #: src/liflines/lines_usage.c:67 #, c-format msgid "lock a database (for use on read-only media)" msgstr "" #: src/liflines/lines_usage.c:69 #, c-format msgid "do not use traditional family rules" msgstr "" #: src/liflines/lines_usage.c:71 #, c-format msgid "Specify program output filename (eg, -o/tmp/mytests)" msgstr "" #: src/liflines/lines_usage.c:73 #, c-format msgid "" "open database with read-only access (prohibiting other\n" "\t\twrite access)" msgstr "" #: src/liflines/lines_usage.c:76 #, c-format msgid "trace function calls in report programs (for debugging)" msgstr "" #: src/liflines/lines_usage.c:78 #, c-format msgid "-u[HEIGHT,WIDTH]" msgstr "" #: src/liflines/lines_usage.c:80 #, c-format msgid "" "specify window size (eg, -u120,34 specifies 120 columns\n" "\t\tby 34 rows)" msgstr "" #: src/liflines/lines_usage.c:83 #, c-format msgid "display this help and exit" msgstr "" #: src/liflines/lines_usage.c:85 #, c-format msgid "open database with writeable access (this is the default)" msgstr "" #: src/liflines/lines_usage.c:89 #, c-format msgid "execute a single lifelines report program directly" msgstr "" #: src/liflines/lines_usage.c:91 #, c-format msgid "" "Use normal ASCII characters for drawing lines, instead of\n" "\t\tspecial VT100 terminal characters" msgstr "" #: src/liflines/lines_usage.c:94 #, c-format msgid "output version information and exit" msgstr "" #: src/liflines/lines_usage.c:96 src/tools/btedit.c:244 #, c-format msgid "Examples:" msgstr "" #: src/liflines/lines_usage.c:99 #, c-format msgid "%s myfamily -x eol" msgstr "" #: src/liflines/lines_usage.c:101 #, c-format msgid "Open the database 'myfamily' with Lifelines" msgstr "" #: src/liflines/lines_usage.c:103 #, c-format msgid "and run the eol.ll report" msgstr "" #: src/liflines/lines_usage.c:105 #, c-format msgid "%s -f myfamily -x eol" msgstr "" #: src/liflines/lines_usage.c:107 #, c-format msgid "Unlock database 'myfamily', after a power failure left the" msgstr "" #: src/liflines/lines_usage.c:109 #, c-format msgid "database locked and run 'eol.ll' report" msgstr "" #: src/liflines/lines_usage.c:112 #, c-format msgid "%s myfamily" msgstr "" #: src/liflines/lines_usage.c:114 #, c-format msgid "Open database 'myfamily' with Lifelines" msgstr "" #: src/liflines/lines_usage.c:116 #, c-format msgid "%s -f myfamily" msgstr "" #: src/liflines/lines_usage.c:118 #, c-format msgid "" "Unlock database 'myfamily', after a power failure left\n" "\t\tthe database locked" msgstr "" #: src/liflines/lines_usage.c:122 #, c-format msgid "REPORTING BUGS" msgstr "" #: src/liflines/lines_usage.c:124 src/tools/btedit.c:250 #, c-format msgid "Report bugs to lifelines.sourceforge.net" msgstr "" #: src/liflines/lines_usage.c:126 #, c-format msgid "COPYRIGHT" msgstr "" #: src/liflines/lines_usage.c:131 #, c-format msgid "SEE ALSO" msgstr "" #: src/liflines/listui.c:155 src/liflines/listui.c:252 msgid "Commands: j Move down k Move up i Select q Quit" msgstr "" #: src/liflines/listui.c:157 msgid "Commands: j Move down k Move up q Quit" msgstr "" #: src/liflines/listui.c:249 msgid "Commands: j Move down k Move up d Delete i Select q Quit" msgstr "" #: src/liflines/listui.c:431 msgid "--- CURRENT SELECTION ---" msgstr "" #: src/liflines/listui.c:434 src/liflines/listui.c:597 msgid "--- LIST ---" msgstr "" #: src/liflines/listui.c:628 msgid "-- CURRENT SELECTION --" msgstr "" #: src/liflines/listui.c:840 msgid "Choose an operation:" msgstr "" #: src/liflines/listui.c:847 msgid "r Remove from list" msgstr "" #: src/liflines/listui.c:848 msgid "t Enter tandem mode" msgstr "" #: src/liflines/loadsave.c:94 msgid "Person" msgid_plural "Persons" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:98 msgid "Family" msgid_plural "Families" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:102 msgid "Source" msgid_plural "Sources" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:106 msgid "Event" msgid_plural "Events" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:110 msgid "Other" msgid_plural "Others" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:160 msgid "Checking GEDCOM file for errors.\n" msgstr "" #: src/liflines/loadsave.c:163 msgid "Error" msgid_plural "Errors" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:169 msgid "Warning" msgid_plural "Warnings" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:184 msgid "The database is read-only; loading has been canceled." msgstr "" #: src/liflines/loadsave.c:190 msgid "Adding unused keys as deleted keys..." msgstr "" #. TRANSLATORS: how long Import ran, and how much of that was UI delay #: src/liflines/loadsave.c:255 #, c-format msgid "Import time %s (ui %s)\n" msgstr "" #: src/liflines/loadsave.c:282 msgid "The database was not saved." msgstr "" #: src/liflines/main.c:385 msgid "Warning: database codeset unspecified" msgstr "" #: src/liflines/main.c:387 msgid "Warning: not all conversions available" msgstr "" #: src/liflines/menuset.c:155 #, c-format msgid "Menu (%s) choice sequence too long: %s" msgstr "" #: src/liflines/menuset.c:159 #, c-format msgid "Menu (%s) item lacked choice sequence: %s" msgstr "" #: src/liflines/menuset.c:242 src/liflines/menuset.c:254 #, c-format msgid "In menu: %s" msgstr "" #: src/liflines/menuset.c:244 #, c-format msgid "Duplicate hotkey for item: %s" msgstr "" #: src/liflines/menuset.c:247 #, c-format msgid "Clash with longer hotkey in item: %s" msgstr "" #: src/liflines/menuset.c:255 #, c-format msgid "Clash with shorter hotkey in item: %s" msgstr "" #: src/liflines/merge.c:772 #, c-format msgid "Bad spouse tag: %s" msgstr "" #: src/liflines/merge.c:800 src/liflines/merge.c:919 #, c-format msgid "Mismatched lineage spouse links between %s and %s: %ld and %ld" msgstr "" #: src/liflines/merge.c:816 src/liflines/merge.c:935 #, c-format msgid "Bad child tag: %s" msgstr "" #: src/liflines/merge.c:844 src/liflines/merge.c:963 #, c-format msgid "Mismatched lineage child links between %s and %s: %ld and %ld" msgstr "" #: src/liflines/merge.c:882 src/liflines/merge.c:891 #, c-format msgid "Bad HUSB tag: %s" msgstr "" #: src/liflines/miscutls.c:51 msgid "Whose key value do you want?" msgstr "" #: src/liflines/miscutls.c:67 msgid "Please enter person's internal key value." msgstr "" #: src/liflines/miscutls.c:68 msgid "enter key:" msgstr "" #: src/liflines/miscutls.c:78 src/liflines/miscutls.c:82 #: src/liflines/miscutls.c:87 #, c-format msgid "No one in database has key value %s." msgstr "" #: src/liflines/scan.c:100 msgid "Enter pattern to match against single surname or given name." msgstr "" #: src/liflines/scan.c:112 msgid "Enter pattern to match against full name." msgstr "" #: src/liflines/scan.c:128 src/liflines/scan.c:178 src/liflines/scan.c:201 msgid "pattern: " msgstr "" #: src/liflines/scan.c:151 src/liflines/scan.c:165 msgid "Enter pattern to match against author." msgstr "" #: src/liflines/screen.c:317 #, c-format msgid "initscr failed" msgstr "" #: src/liflines/screen.c:334 #, c-format msgid "" "The requested window size (%ld,%ld) is too large for your terminal (%d,%d).\n" msgstr "" #: src/liflines/screen.c:342 #, c-format msgid "" "The requested window size (%ld,%ld) is too small for LifeLines (%d,%d).\n" msgstr "" #: src/liflines/screen.c:706 msgid "Search results" msgstr "" #: src/liflines/screen.c:813 #, c-format msgid "(pg %d/%d)" msgstr "" #: src/liflines/screen.c:1431 msgid "No conversion" msgstr "" #: src/liflines/screen.c:1517 msgid "Internal codeset" msgstr "" #: src/liflines/screen.c:1520 msgid "Internal UTF-8: Yes" msgstr "" #: src/liflines/screen.c:1522 msgid "Internal UTF-8: No" msgstr "" #: src/liflines/screen.c:1526 msgid "Locales are enabled." msgstr "" #: src/liflines/screen.c:1528 msgid "Locales are disabled." msgstr "" #: src/liflines/screen.c:1531 msgid "NLS (National Language Support) is compiled in." msgstr "" #: src/liflines/screen.c:1537 msgid "NLS (National Language Support) is not compiled in." msgstr "" #: src/liflines/screen.c:1550 msgid "iconv (codeset conversion) is compiled in." msgstr "" #: src/liflines/screen.c:1552 msgid "iconv (codeset conversion) is not compiled in." msgstr "" #: src/liflines/screen.c:1554 #, c-format msgid "Startup collate locale: %s" msgstr "" #: src/liflines/screen.c:1557 #, c-format msgid "Startup messages locale: %s" msgstr "" #: src/liflines/screen.c:1560 #, c-format msgid "Current collate locale: %s" msgstr "" #: src/liflines/screen.c:1563 #, c-format msgid "Current messages locale: %s" msgstr "" #: src/liflines/screen.c:1566 #, c-format msgid "Collation routine: %s" msgstr "" #: src/liflines/screen.c:1570 #, c-format msgid "GUI codeset: %s" msgstr "" #: src/liflines/screen.c:1573 #, c-format msgid "GUI output codeset: %s" msgstr "" #: src/liflines/screen.c:1575 #, c-format msgid "GUI input codeset: %s" msgstr "" #: src/liflines/screen.c:1580 #, c-format msgid "editor codeset: %s" msgstr "" #: src/liflines/screen.c:1583 #, c-format msgid "editor output codeset: %s" msgstr "" #: src/liflines/screen.c:1585 #, c-format msgid "editor input codeset: %s" msgstr "" #: src/liflines/screen.c:1590 #, c-format msgid "report codeset: %s" msgstr "" #: src/liflines/screen.c:1593 #, c-format msgid "report output codeset: %s" msgstr "" #: src/liflines/screen.c:1595 #, c-format msgid "report input codeset: %s" msgstr "" #: src/liflines/screen.c:1600 #, c-format msgid "GEDCOM codeset: %s" msgstr "" #: src/liflines/screen.c:1603 #, c-format msgid "gedcom output codeset: %s" msgstr "" #: src/liflines/screen.c:1605 #, c-format msgid "gedcom input codeset: %s" msgstr "" #: src/liflines/screen.c:1613 msgid "UTF-8 charprops loaded" msgstr "" #: src/liflines/screen.c:1615 msgid "UTF-8 charprops not loaded" msgstr "" #: src/liflines/screen.c:1619 msgid "Codeset information" msgstr "" #: src/liflines/screen.c:1636 #, c-format msgid "gettext dll: %s" msgstr "" #: src/liflines/screen.c:1640 #, c-format msgid "gettext dll version: %s" msgstr "" #: src/liflines/screen.c:1645 msgid "gettext dll had no version" msgstr "" #: src/liflines/screen.c:1650 msgid "no gettext dll found" msgstr "" #: src/liflines/screen.c:1659 #, c-format msgid "iconv dll: %s" msgstr "" #: src/liflines/screen.c:1663 #, c-format msgid "iconv dll version: %s" msgstr "" #: src/liflines/screen.c:1668 msgid "iconv dll had no version" msgstr "" #: src/liflines/screen.c:1673 msgid "no iconv dll found" msgstr "" #: src/liflines/screen.c:1931 msgid "Impermissible to change codeset in a populated database" msgstr "" #: src/liflines/screen.c:2032 msgid "LifeLines -- Main Menu" msgstr "" #: src/liflines/searchui.c:133 #, c-format msgid "v Review visit history (%d record)" msgid_plural "v Review visit history (%d records)" msgstr[0] "" msgstr[1] "" #: src/liflines/searchui.c:137 msgid "(visit history is empty)" msgstr "" #: src/liflines/searchui.c:143 #, c-format msgid "c Review change history (%d record)" msgid_plural "c Review change history (%d records)" msgstr[0] "" msgstr[1] "" #: src/liflines/searchui.c:147 msgid "(change history is empty)" msgstr "" #: src/liflines/searchui.c:151 msgid "f Full database scan" msgstr "" #: src/liflines/searchui.c:220 msgid "What scan type?" msgstr "" #: src/liflines/searchui.c:223 msgid "f Full name scan" msgstr "" #: src/liflines/searchui.c:224 msgid "n Name fragment (whitespace-delimited) scan" msgstr "" #: src/liflines/searchui.c:225 msgid "r Refn scan" msgstr "" #: src/liflines/searchui.c:226 msgid "s Source scan" msgstr "" #: src/liflines/searchui.c:290 msgid "Scan on what source field?" msgstr "" #: src/liflines/searchui.c:293 msgid "a Scan by author" msgstr "" #: src/liflines/searchui.c:294 msgid "t Scan by title" msgstr "" #: src/liflines/selectdb.c:95 msgid "Choose database to open" msgstr "" #: src/liflines/selectdb.c:103 msgid "No databases found in database path" msgstr "" #: src/liflines/show.c:123 msgid "born" msgstr "" #: src/liflines/show.c:124 src/liflines/show.c:125 msgid "bapt" msgstr "" #: src/liflines/show.c:126 msgid "barm" msgstr "" #: src/liflines/show.c:127 msgid "basm" msgstr "" #: src/liflines/show.c:128 msgid "bles" msgstr "" #: src/liflines/show.c:129 msgid "adop" msgstr "" #: src/liflines/show.c:130 msgid "resi" msgstr "" #: src/liflines/show.c:134 msgid "died" msgstr "" #: src/liflines/show.c:135 msgid "buri" msgstr "" #: src/liflines/show.c:136 msgid "crem" msgstr "" #: src/liflines/show.c:1009 #, c-format msgid "Cached: I:%s; F:%s" msgstr "" #: src/liflines/valgdcom.c:92 #, c-format msgid "Record %s is referred to but not defined." msgstr "" #: src/liflines/valgdcom.c:93 #, c-format msgid "Line %d: Reference to undefined record %s" msgstr "" #: src/liflines/valgdcom.c:94 #, c-format msgid "Line %d: Tag %s found in unexpected record: %s %s." msgstr "" #: src/liflines/valgdcom.c:190 #, c-format msgid "Line %d: Family has no members (%s %s)." msgstr "" #: src/liflines/valgdcom.c:390 #, c-format msgid "Line %d: The source defined here has no key." msgstr "" #: src/liflines/valgdcom.c:404 #, c-format msgid "Line %d: Source %s has an incorrect key." msgstr "" #: src/liflines/valgdcom.c:411 #, c-format msgid "Lines %d and %d: Source %s is multiply defined." msgstr "" #: src/liflines/valgdcom.c:434 #, c-format msgid "Line %d: The event defined here has no key." msgstr "" #: src/liflines/valgdcom.c:447 #, c-format msgid "Line %d: Event %s has an incorrect key." msgstr "" #: src/liflines/valgdcom.c:454 #, c-format msgid "Lines %d and %d: Event %s is multiply defined." msgstr "" #: src/liflines/valgdcom.c:477 #, c-format msgid "Line %d: The record defined here has no key." msgstr "" #: src/liflines/valgdcom.c:490 #, c-format msgid "Line %d: Record %s has an incorrect key." msgstr "" #: src/liflines/valgdcom.c:497 #, c-format msgid "Lines %d and %d: Record %s is multiply defined." msgstr "" #: src/liflines/valgdcom.c:539 #, c-format msgid "Line %d: This %s line is missing a value field (%s %s)." msgstr "" #: src/liflines/valgdcom.c:590 #, c-format msgid "Line %d: Bad NAME syntax (%s %s)." msgstr "" #: src/liflines/valgdcom.c:820 #, c-format msgid "Line %d: Person %s has multiple father links." msgstr "" #: src/liflines/valgdcom.c:824 #, c-format msgid "Line %d: Person %s has multiple mother links." msgstr "" #: src/liflines/valgdcom.c:836 #, c-format msgid "Line %d: Person %s is both male and female." msgstr "" #: src/liflines/valgdcom.c:840 #, c-format msgid "Line %d: Person %s is male but must be female." msgstr "" #: src/liflines/valgdcom.c:844 #, c-format msgid "Line %d: Person %s is female but must be male." msgstr "" #: src/liflines/valgdcom.c:848 #, c-format msgid "Line %d: Person %s is implied to be both male and female." msgstr "" #: src/liflines/valgdcom.c:860 #, c-format msgid "Line %d: Family %s has multiple husband links." msgstr "" #: src/liflines/valgdcom.c:864 #, c-format msgid "Line %d: Family %s has multiple wife links." msgstr "" #: src/liflines/valgdcom.c:920 msgid "error" msgstr "" #: src/liflines/valgdcom.c:928 #, c-format msgid "%6d Error" msgid_plural "%6d Errors" msgstr[0] "" msgstr[1] "" #: src/liflines/valgdcom.c:930 src/liflines/valgdcom.c:958 #, c-format msgid " (see log file <%s>)" msgstr "" #: src/liflines/valgdcom.c:932 src/liflines/valgdcom.c:960 msgid " (no log file)" msgstr "" #: src/liflines/valgdcom.c:948 msgid "warning" msgstr "" #: src/liflines/valgdcom.c:956 #, c-format msgid "%6d Warning" msgid_plural "%6d Warnings" msgstr[0] "" msgstr[1] "" #: src/liflines/valgdcom.c:1067 #, c-format msgid "Processed %d lines without finding end of HEAD" msgstr "" #: src/liflines/valgdcom.c:1072 #, c-format msgid "End of file at line %d" msgstr "" #: src/liflines/valgdcom.c:1076 #, c-format msgid "Error at line %d: %s" msgstr "" #: src/liflines/valgdcom.c:1080 #, c-format msgid "Bad level at line %d" msgstr "" #: src/liflines/valgdcom.c:1086 #, c-format msgid "Duplicate HEAD line at line %d" msgstr "" #: src/liflines/valgdcom.c:1092 #, c-format msgid "Missing HEAD line at line %d" msgstr "" #: src/stdlib/errlog.c:61 #, c-format msgid " in file <%s> at line %d\n" msgstr "" #: src/stdlib/errlog.c:63 msgid "Current database" msgstr "" #: src/tools/btedit.c:108 #, c-format msgid "btedit requires 2 arguments (btree and key)." msgstr "" #: src/tools/btedit.c:110 #, c-format msgid "See `btedit --help' for more information." msgstr "" #: src/tools/btedit.c:117 #, c-format msgid "Failed to open btree: %s." msgstr "" #: src/tools/btedit.c:124 #, c-format msgid "There is no record with key: %s" msgstr "" #: src/tools/btedit.c:126 #, c-format msgid "Error accessing record: %s" msgstr "" #: src/tools/btedit.c:135 #, c-format msgid "Editor or system call failed." msgstr "" #: src/tools/btedit.c:137 #, c-format msgid "Database was not be modified." msgstr "" #: src/tools/btedit.c:143 #, c-format msgid "Readonly database can not be modified." msgstr "" #: src/tools/btedit.c:150 #, c-format msgid "Error writing file 'btedit.tmp'." msgstr "" #: src/tools/btedit.c:156 #, c-format msgid "Record %s modified." msgstr "" #: src/tools/btedit.c:226 msgid "\"\\My Documents\\LifeLines\\Databases\\MyFamily\"" msgstr "" #: src/tools/btedit.c:228 src/tools/dbverify.c:232 msgid "/home/users/myname/lifelines/databases/myfamily" msgstr "" #: src/tools/btedit.c:231 #, c-format msgid "" "lifelines `btedit' edits raw binary btree blocks\n" "in lifelines database files. Do NOT use this unless\n" "you know what you are doing and you have backed up\n" "your database." msgstr "" #: src/tools/btedit.c:236 #, c-format msgid "Usage btedit [database] [rkey]" msgstr "" #: src/tools/btedit.c:240 #, c-format msgid "\t--help\tdisplay this help and exit" msgstr "" #: src/tools/btedit.c:242 #, c-format msgid "\t--version\toutput version information and exit" msgstr "" #: src/tools/btedit.c:246 #, c-format msgid "\tbtedit %s I34" msgstr "" #: src/tools/btedit.c:248 #, c-format msgid "edit raw btree block for person I34" msgstr "" #: src/tools/dbverify.c:175 msgid "Orphan names" msgstr "" #: src/tools/dbverify.c:176 msgid "Ghost names" msgstr "" #: src/tools/dbverify.c:177 src/tools/dbverify.c:178 msgid "Duplicate names" msgstr "" #: src/tools/dbverify.c:179 msgid "Non-indi names" msgstr "" #: src/tools/dbverify.c:180 msgid "Duplicate individuals" msgstr "" #: src/tools/dbverify.c:181 msgid "Duplicate families" msgstr "" #: src/tools/dbverify.c:182 msgid "Duplicate sources" msgstr "" #: src/tools/dbverify.c:183 msgid "Duplicate events" msgstr "" #: src/tools/dbverify.c:184 msgid "Duplicate others" msgstr "" #: src/tools/dbverify.c:185 msgid "Missing records (from deleteset)" msgstr "" #: src/tools/dbverify.c:186 msgid "Deleted records" msgstr "" #: src/tools/dbverify.c:187 msgid "Bad name" msgstr "" #: src/tools/dbverify.c:188 msgid "Bad family reference" msgstr "" #: src/tools/dbverify.c:189 msgid "Missing child" msgstr "" #: src/tools/dbverify.c:190 msgid "Missing spouse" msgstr "" #: src/tools/dbverify.c:191 msgid "Bad HUSB reference" msgstr "" #: src/tools/dbverify.c:192 msgid "Bad WIFE reference" msgstr "" #: src/tools/dbverify.c:193 msgid "Bad CHIL reference" msgstr "" #: src/tools/dbverify.c:194 msgid "Improper HUSB" msgstr "" #: src/tools/dbverify.c:195 msgid "Improper WIFE" msgstr "" #: src/tools/dbverify.c:196 msgid "Improper child" msgstr "" #: src/tools/dbverify.c:197 msgid "Empty family" msgstr "" #: src/tools/dbverify.c:198 msgid "Single person family" msgstr "" #: src/tools/dbverify.c:199 msgid "Bad pointer" msgstr "" #: src/tools/dbverify.c:200 msgid "Missing data records" msgstr "" #: src/tools/dbverify.c:230 msgid "\\My Documents\\LifeLines\\Databases\\MyFamily" msgstr "" #: src/tools/dbverify.c:236 #, c-format msgid "usage: dbverify -(flags) \n" msgstr "" #: src/tools/dbverify.c:237 #, c-format msgid "flags:\n" msgstr "" #: src/tools/dbverify.c:238 #, c-format msgid "\t-a = Perform all checks (does not include fixes)\n" msgstr "" #: src/tools/dbverify.c:239 #, c-format msgid "\t-g = Check for ghosts (names/refns)\n" msgstr "" #: src/tools/dbverify.c:240 #, c-format msgid "\t-G = Check for & fix ghosts (names/refns)\n" msgstr "" #: src/tools/dbverify.c:241 #, c-format msgid "\t-i = Check individuals\n" msgstr "" #: src/tools/dbverify.c:242 #, c-format msgid "\t-f = Check families\n" msgstr "" #: src/tools/dbverify.c:243 #, c-format msgid "\t-F = Alter any bad family lineage pointers (to _badptr)\n" msgstr "" #: src/tools/dbverify.c:244 #, c-format msgid "\t-h = Display help text (this text)\n" msgstr "" #: src/tools/dbverify.c:245 #, c-format msgid "\t-s = Check sours\n" msgstr "" #: src/tools/dbverify.c:246 #, c-format msgid "\t-e = Check events\n" msgstr "" #: src/tools/dbverify.c:247 #, c-format msgid "\t-x = Check others\n" msgstr "" #: src/tools/dbverify.c:248 #, c-format msgid "\t-l = Check database structure\n" msgstr "" #: src/tools/dbverify.c:249 #, c-format msgid "\t-m = Check for records missing data entries\n" msgstr "" #: src/tools/dbverify.c:250 #, c-format msgid "\t-M = Fix records missing data entries\n" msgstr "" #: src/tools/dbverify.c:251 #, c-format msgid "\t-D = Fix bad delete entries\n" msgstr "" #: src/tools/dbverify.c:252 #, c-format msgid "\t-n = Noisy (echo every record processed)\n" msgstr "" #: src/tools/dbverify.c:253 #, c-format msgid "example: dbverify -ifsex \"%s\"\n" msgstr "" #: src/tools/dbverify.c:386 #, c-format msgid "Non-indi name, key=%s, name=%s" msgstr "" #: src/tools/dbverify.c:403 #, c-format msgid "Orphaned name: %s" msgstr "" #: src/tools/dbverify.c:417 #, c-format msgid "Ghost name: %s -> %s" msgstr "" #: src/tools/dbverify.c:449 #, c-format msgid "Orphaned refn: %s" msgstr "" #: src/tools/dbverify.c:489 #, c-format msgid "Duplicate name for %s (%s)" msgstr "" #: src/tools/dbverify.c:524 #, c-format msgid "Duplicate refn for %s (%s)" msgstr "" #: src/tools/dbverify.c:637 #, c-format msgid "Duplicate individual for %s" msgstr "" #: src/tools/dbverify.c:679 #, c-format msgid "Bad name for individual %s: %s" msgstr "" #: src/tools/dbverify.c:697 src/tools/dbverify.c:721 #, c-format msgid "Bad family reference (%s) individual %s" msgstr "" #: src/tools/dbverify.c:703 #, c-format msgid "Missing child (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:707 #, c-format msgid "Fixed missing child (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:727 #, c-format msgid "Missing spouse (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:731 #, c-format msgid "Fixed missing spouse (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:765 #, c-format msgid "Duplicate family for %s" msgstr "" #: src/tools/dbverify.c:816 #, c-format msgid "Bad HUSB reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:822 #, c-format msgid "Fixed Bad HUSB reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:831 #, c-format msgid "Improper HUSB (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:844 #, c-format msgid "Bad wife reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:850 #, c-format msgid "Fixed Bad wife reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:859 #, c-format msgid "Improper wife (%s) in family (%s)" msgstr "" #: src/tools/dbverify.c:872 #, c-format msgid "Bad child reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:878 #, c-format msgid "Fixed bad child reference (%s) in family %s" msgstr "" #: src/tools/dbverify.c:887 #, c-format msgid "Improper child: Child (%s) without FAMC reference to family (%s)" msgstr "" #: src/tools/dbverify.c:895 #, c-format msgid "Empty family (%s)" msgstr "" #: src/tools/dbverify.c:897 #, c-format msgid "Single person family (%s)" msgstr "" #: src/tools/dbverify.c:923 #, c-format msgid "Duplicate source for %s" msgstr "" #: src/tools/dbverify.c:939 #, c-format msgid "Duplicate event for %s" msgstr "" #: src/tools/dbverify.c:955 #, c-format msgid "Duplicate record for %s" msgstr "" #: src/tools/dbverify.c:1026 #, c-format msgid "Bad pointer (in %s): %s" msgstr "" #: src/tools/dbverify.c:1064 #, c-format msgid "Missing undeleted record %c%d" msgstr "" #: src/tools/dbverify.c:1071 #, c-format msgid "Fixed missing undeleted record %c%d" msgstr "" #: src/tools/dbverify.c:1075 #, c-format msgid "Failed to fix missing undeleted record %c%d" msgstr "" #: src/tools/dbverify.c:1087 #, c-format msgid "Delete set contains valid record %s" msgstr "" #: src/tools/dbverify.c:1092 #, c-format msgid "Fixed delete set contains valid record %s" msgstr "" #: src/tools/dbverify.c:1096 #, c-format msgid "Failed to fix missing undeleted record %s" msgstr "" #: src/tools/dbverify.c:1117 #, c-format msgid "Master fkey misaligned" msgstr "" #: src/tools/dbverify.c:1144 #, c-format msgid "Cycle in indexes, file %s found again!\n" msgstr "" #: src/tools/dbverify.c:1151 #, c-format msgid "Error loading index at key" msgstr "" #: src/tools/dbverify.c:1199 #, c-format msgid "First key in block below parent's limit\n" msgstr "" #: src/tools/dbverify.c:1207 #, c-format msgid "Last key in block above parent's limit\n" msgstr "" #: src/tools/dbverify.c:1215 #, c-format msgid "Key not below next key" msgstr "" #: src/tools/dbverify.c:1232 src/tools/dbverify.c:1234 msgid "data block" msgstr "" #: src/tools/dbverify.c:1235 #, c-format msgid "%s fkey=%d, file=%s" msgstr "" #: src/tools/dbverify.c:1248 #, c-format msgid "Invalid errs array[%d] in dbverify - fix program\n" msgstr "" #: src/tools/dbverify.c:1285 #, c-format msgid "Missing data record (%s)" msgstr "" #: src/tools/dbverify.c:1289 #, c-format msgid "Fixed missing data record (%s)" msgstr "" #: src/tools/dbverify.c:1420 #, c-format msgid "Checking %s" msgstr "" #: src/tools/dbverify.c:1476 #, c-format msgid "%d error" msgid_plural "%d errors" msgstr[0] "" msgstr[1] "" #: src/tools/dbverify.c:1480 #, c-format msgid "%d fixed" msgid_plural "%d fixed" msgstr[0] "" msgstr[1] "" #: src/tools/dbverify.c:1487 msgid "No errors found" msgstr "" #: src/tools/dbverify.c:1506 #, c-format msgid "FATAL ERROR: " msgstr "" #: src/tools/dbverify.c:1511 #, c-format msgid "In file <%s> at line %d" msgstr "" lifelines-3.0.61/po/LINGUAS0000700002540200244210000000004110314022615015371 0ustar prappDomain Usersda de el eo es fr it nl pl rw sv lifelines-3.0.61/po/Makefile.in.in0000700002540200244210000002431407477212672017053 0ustar prappDomain Users# Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-1997, 2000-2002 by Ulrich Drepper # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU General Public # License but which still want to provide support for the GNU gettext # functionality. # Please note that the actual code of GNU gettext is covered by the GNU # General Public License and is *not* in the public domain. PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datadir = @datadir@ localedir = $(datadir)/locale gettextsrcdir = $(datadir)/gettext/po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = @MKINSTALLDIRS@ mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac` GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ XGETTEXT = @XGETTEXT@ MSGMERGE = msgmerge MSGMERGE_UPDATE = @MSGMERGE@ --update MSGINIT = msginit MSGCONV = msgconv MSGFILTER = msgfilter POFILES = @POFILES@ GMOFILES = @GMOFILES@ UPDATEPOFILES = @UPDATEPOFILES@ DUMMYPOFILES = @DUMMYPOFILES@ DISTFILES.common = Makefile.in.in Makevars remove-potcdate.sin \ $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) DISTFILES = $(DISTFILES.common) POTFILES.in $(DOMAIN).pot \ $(POFILES) $(GMOFILES) \ $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) POTFILES = \ CATALOGS = @CATALOGS@ # Makevars gets inserted here. (Don't remove this line!) .SUFFIXES: .SUFFIXES: .po .gmo .mo .sed .sin .nop .po-update .po.mo: @echo "$(MSGFMT) -c -o $@ $<"; \ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ .po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo .sin.sed: sed -e '/^#/d' $< > t-$@ mv t-$@ $@ all: all-@USE_NLS@ all-yes: $(CATALOGS) all-no: # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', # otherwise packages like GCC can not be built if only parts of the source # have been downloaded. $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' test ! -f $(DOMAIN).po || { \ if test -f $(srcdir)/$(DOMAIN).pot; then \ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ else \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ else \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ } $(srcdir)/$(DOMAIN).pot: $(MAKE) $(DOMAIN).pot-update $(POFILES): $(srcdir)/$(DOMAIN).pot @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext"; then \ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ for file in $(DISTFILES.common); do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-data-no: all install-data-yes: all $(mkinstalldirs) $(DESTDIR)$(datadir) @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkinstalldirs) $(DESTDIR)$$dir; \ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ fi; \ done; \ done install-strip: install installdirs: installdirs-exec installdirs-data installdirs-exec: installdirs-data: installdirs-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext"; then \ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi installdirs-data-no: installdirs-data-yes: $(mkinstalldirs) $(DESTDIR)$(datadir) @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkinstalldirs) $(DESTDIR)$$dir; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ fi; \ done; \ done # Define this as empty until I found a useful application. installcheck: uninstall: uninstall-exec uninstall-data uninstall-exec: uninstall-data: uninstall-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext"; then \ for file in $(DISTFILES.common); do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi uninstall-data-no: uninstall-data-yes: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ done; \ done check: all dvi info tags TAGS ID: mostlyclean: rm -f remove-potcdate.sed rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f $(GMOFILES) distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(MAKE) update-po @$(MAKE) dist2 # This is a separate target because 'update-po' must be executed before. dist2: $(DISTFILES) dists="$(DISTFILES)"; \ if test -f $(srcdir)/ChangeLog; then dists="$$dists ChangeLog"; fi; \ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ for file in $$dists; do \ if test -f $$file; then \ cp -p $$file $(distdir); \ else \ cp -p $(srcdir)/$$file $(distdir); \ fi; \ done update-po: Makefile $(MAKE) $(DOMAIN).pot-update $(MAKE) $(UPDATEPOFILES) $(MAKE) update-gmo # General rule for updating PO files. .nop.po-update: @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ cd $(srcdir); \ if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi $(DUMMYPOFILES): update-gmo: Makefile $(GMOFILES) @: Makefile: Makefile.in.in $(top_builddir)/config.status POTFILES.in cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ $(SHELL) ./config.status force: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lifelines-3.0.61/po/Makevars0000700002540200244210000000221207506206257016061 0ustar prappDomain Users# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. # (Even if we added _pl here, it wouldn't generate proper plural entries) XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --keyword=_pl:1,2 # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Tom T. Wetmore IV # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = lifelines-3.0.61/po/nl.gmo0000700002540200244210000021445610656417755015530 0ustar prappDomain UsersÞ•h\‹œ6ÈHÉHéHI!I 0I=I RI`IrI†I•I¤I´IÄIØIçIøIþIJ JJ7JIJ^JqJƒJ2˜JËJ ãJ ñJÿJK''KOK mKŽK K»K"ÙK"üK!L ALbL‚L!¢L!ÄL!æL M#)M#MMqMM®MÎM%êMN,NJNhNˆN ¨NµNÇNÞNòNOO 2O=ONOgOvOŠO O³O ¹O ÇOÕOíO P/P;DP(€P ©P&·P'ÞP&Q&-Q&TQ&{Q¢Q·Q ÒQÜQðQR&R+>RjRoRuR xR „R%RµR$ÐR=õR%3SYSnSsSzS}S S‹SžS$±SÖSéS%T(TCT'XT€TŸT±TÄTÙTâT U U$%U2JU)}U&§U(ÎU÷UüUÿU2V*EV&pV!—V-¹VçVüVW(W_Ld_"±_Ô_ï_`%`6`I`1a`“`¯`Å`à`ð`1a3aKafa~a a-±a ßaìaþa b6bSb$ob”b´b"Îb,ñb-c)Lc$vc<›cØcñcdd8dTdpd‹d «d(¸dád úd ee)$e NeZe-me5›eÑeäeôe f!f 6fBfSfZf]faf$efŠf7žf Öf)àf8 g*Cg,ng!›g ½gBÞg%!h.Ghvh$“h3¸h2ìh4iTi!si)•i"¿i*âi, j(:j7cj ›j!©j ËjÙj!èj k "k6.kek'vkžk¶k"Ïkòk5÷k5-l2cl0–lÇl2Þl6m6Hm'm(§m.Ðm+ÿm1+n-]n-‹n+¹n.ån9o.No)}o(§o(Ðo+ùo,%p5Rp,ˆp,µp"âp8q(>q'gq!q!±qÓq0óq.$r/Sr8ƒr/¼r/ìrs,sBs@Ws,˜s&Ås ìsös2t Ft!Ttvt"…t ¨t¶tÔt+Ütu7u QuA_u#¡uÅu*Õu/v0vCvSv$evŠv¦v*¹vävývw3wGwVwfwvw*†w±wÐwßwów xx$x 6xCxVxqx‹x©x¾x)Íx#÷xy&7y'^y&†y)­y%×y2ýy 0z&Qz.xz+§z,Óz4{15{3g{+›{Ç{ ç{$|,-|-Z|5ˆ|2¾|4ñ|!&}-H}:v})±})Û})~,/~#\~/€~$°~Õ~3ð~.$Sl q!¡)½çø €€0,€*]€/ˆ€¸€Ó€æ€ï€44i)x¢±Ìè‚#‚ 7‚)B‚*l‚—‚!¶‚)Ø‚-ƒ0ƒ3Kƒ6ƒ5¶ƒ6ìƒ5#„Y„s„'„;·„8ó„(,…!U…)w…7¡…!Ù…+û…*'†+R†,~†,«†؆(í†(‡+?‡k‡Ї6©‡1à‡6ˆ.Iˆ'xˆG ˆ1èˆ6‰.Q‰-€‰8®‰3ç‰4Š8PŠ6‰Š)ÀŠ,êŠ1‹*I‹3t‹9¨‹+â‹)Œ78Œ8pŒ4©Œ-ÞŒ. ,;,h.•2Ä,÷%$ŽJŽ0]Ž4ŽŽ ÃŽ ÑŽ(ߎ@*k#Š® Ä%Ò&ø%GE¦$ ç<‘ E‘f‘%v‘$œ‘,Á‘,î‘'’(C’,l’™’)³’Ý’"ú’“&=“2d“0—“1È“2ú“1-”1_”1‘”Ôá”*ø”#•:•K•\•l•}••£•µ•È• ß•"í•–$–9–=–F–M– R–]–b–f–j–q–z–~–„–ˆ––’–%¨–Ζâ–÷– þ– ——(—-—4—9—B—H—M—T—j——,š—-Ç—Jõ—@˜ G˜U˜^˜d˜,i˜?–˜+Ö˜ ™#™(™,™B™'V™~™‘™¦™$™ç™ë™ô™ù™ššš-š@š#Sšwš‹š!žšÀšÓšìš› ›››#›'›,›<›R›a› u› €› ›š›©›Û#É›í› ô›œ œ9œMœbœ8wœ&°œלíœÿœ $)16= COT] es x%‚¨¼Õïôýž0ž@žQžTžXž]žažežuž#‹ž*¯ž)ÚžŸŸ 3Ÿ"AŸdŸiŸmŸ„Ÿ–ŸšŸ¢Ÿ¶ŸºŸ¿ŸßÈŸåŸõŸ  % ? F %J p „ ™ ®  Ü à  æ ð ô ù ¡ ¡¡0¡!N¡p¡u¡{¡¡†¡¡¢¡8µ¡î¡ò¡û¡ÿ¡¢4¢8¢@¢D¢*U¢"€¢ £¢­¢´¢¹¢¢Ç¢Тà¢÷¢*£"=£ `£m££•£«£¾£×£"ñ£¤,¤E¤[¤%r¤˜¤.«¤)Ú¤#¥(¥/¥ 3¥=¥C¥K¥O¥V¥ Z¥h¥n¥r¥x¥$¥¤¥¨¥¹¥&Î¥õ¥û¥ÿ¥¦ ¦ ¦¦ ¦&¦-¦1¦7¦;¦?¦G¦N¦R¦g¦H‚¦˦ Цܦá¦é¦ñ¦) §3§H§]§r§'‡§¯§ȧاÛ§à§å§s÷§+k© —©¸©שê©ù©ªª1ªHªXªiªzª‹ª¦ª½ªÓªÙªàªäª#øª«0«D«V«n«K…«Ñ«é«¬¬+¬-J¬%x¬#ž¬¬Ù¬ ö¬#­';­&c­+Š­$¶­#Û­&ÿ­%&®)L®$v®(›®+Ä®ð®"¯'3¯ [¯-|¯ª¯"ʯ%í¯$°'8°`°w°°ª°¿°×°!ô° ±!±8±U±n±‡±¤±»±Á±Ó±ã±ú± ²7!²;Y²(•² ¾²/̲'ü²6$³.[³/г*º³å³!´"´1´M´b´6z´6±´è´í´ö´ ù´µLµ"eµ(ˆµE±µ2÷µ*¶E¶J¶Q¶T¶X¶a¶$€¶*¥¶$ж1õ¶)'·Q·p·)Š·"´·×·ó·¸ (¸ 5¸V¸e¸/€¸9°¸0ê¸1¹3M¹¹†¹‰¹Cž¹1â¹4º8Iº6‚º¹º ɺ꺻»_'»e‡»Tí»;B¼n~¼4í¼"½=½0V½9‡½Á½Û½ô½ ¾ $¾(2¾[¾r¾#†¾ª¾º¾.ξ;ý¾79¿7q¿6©¿4à¿8À+NÀ+zÀ7¦À;ÞÀ'Á#BÁ#fÁ"ŠÁ ­Á#ÎÁ'òÁTÂ#oÂP“Â#äÂPÃ'YÃOà ÑÃMòÃ@Ä]Ä!zĜĺÄÓÄæÄ1Å2ÅLÅ_Å{Å‹Å1œÅÎÅçÅÆÆ,Æ9KÆ …ƒƤÆ-ÂÆ%ðÆ Ç/7Ç+gÇ#“Ç'·Ç3ßÇ>È9RÈ/ŒÈJ¼È!É#)ÉMÉbÉ ~ÉŸÉ ¾É%ßÉÊ= Ê ^Ê Ê ‹Ê—Ê9¨Ê âÊîÊ2Ë:6Ëq˄˔˪ËÁË ÕËàËóËüËÌÌ# Ì.ÌCBÌ †Ì5’ÌGÈÌ8Í6IÍ)€Í$ªÍPÏÍ/ Î<PÎ$Î0²ÎAãÎ=%ÏFcÏ,ªÏ/×Ï9Ð/AÐ9qÐ5«Ð.áÐEÑVÑ'oїѰÑ-ÃÑñÑ Ò@ÒZÒ:jÒ¥Ò¾Ò+ÙÒÓ5 Ó.AÓ1pÓ/¢ÓÒÓ1éÓ7Ô7SÔ4‹Ô1ÀÔ5òÔ5(Õ?^Õ5žÕ6ÔÕ7 Ö<CÖP€Ö<ÑÖ4×/C×-s×>¡×:à×HØ9dØ7žØ1ÖØ<Ù/EÙ-uÙ,£Ù#ÐÙ ôÙ;Ú:QÚ6ŒÚDÃÚ5Û3>ÛrÛ„Û!¡Û\ÃÛ4 Ü UÜ vÜ#Ü7¥ÜÝÜ$íÜÝ(&ÝOÝ(aÝ ŠÝ8”ÝÍÝMáÝ/ÞL>Þ/‹Þ»ÞNÐÞJßj߈ߟß/ºß#êßà6$à$[à€à ŸàÀà×àëàáá2/á#bá†á–á°á ÃáÍáäá ûáâ â':â)bâŒâªâ9»â'õâã-ãGã_ã{ã"˜ã/»ã"ëã$ä-3ä)aä+‹ä4·ä5ìä1"å.Tåƒå£å"Ãå)æå+æ4<æ5qæ1§æÙæ*öæ7!ç*Yç'„ç2¬ç8ßç#è5<è(rè›è;²è8îè!'é IéSé'féŽé8­éæéúéê êO:ê=Šê;Èêë"ë 3ë=ëQë#Uë(yë<¢ë ßë6ìë#ì5ìNì$iìŽì¬ìÃì+Ôì-í!.í"Pí+sí=ŸíÝí=ýí>;î?zî?ºî9úî4ï#Tï/xïJ¨ïKóï+?ð*kð4–ðMËð$ñ)>ñ(hñ)‘ñ)»ñ)åñò-"ò(Pò/yò"©ò Ìò=íò-+ó9Yó0“ó$ÄóKéó65ô9lô+¦ô,ÒôBÿô>BõHõEÊõDö/Uö4…ö?ºö3úö@.÷>o÷+®÷0Ú÷> øAJø<Œø(Éø:òø6-ù7dù:œùE×ùGú.eú”úI§úGñú9ûMû9aû›û·ûMÈû'ü0>ü"oü’ü5¥ü4Ûü"ýW3ý‹ý¡ý&¹ý!àý>þAþ_þ%pþ"–þ0¹þ/êþ(ÿ!Cÿ+eÿ‘ÿ2¦ÿÙÿ%õÿ2;9n8¨9á9FU9œFÖ&D5]“«ÂÜõ  8Oh†+›Çãûÿ  *.2 8BFLPY\-x¦ÂÜ ä ðý  $-3 <G"a„6š4Ñfm t€‰Ž5“XÉ7")Z „ “´-Íû!+ Mnr { …‘˜·Íä'û# < (Y ‚ ” ¬ Å Ê Ò Ö Ü à å ú  + E V  e s ‹ § .¬ Û  ä /ï  3 J b <‚ -¿ $í  + 1 5 > E N S X ` e l s ‚ ‡  — ¦  « 'µ Ý ö  ) . 7 S i y ’ – › ¡ ¥ ª À /Ù . 18j„ ˜,¦ÓØ"Üÿ$8<AE*JuŽ&¬#Ó÷þ*-E ^˜¶º ÀËÏÔÝäü!5SYagls;¥áåî$ò'?CKQ9b+œ ÈÒÚßèíö *;I*…°¿Úó!:$T yš²$Î0ó$<;4x.­Üã çñ÷ÿ #'-!5W[p)·½ÂÉÏ ÔÞäéðôü 1\N« °¼Á ÉÖ1ñ!#Ea#}2¡%Ôú ³+$¨èîr‰Ož  –)^[,L°dè.ÊubÙ]ùŸé©—ã  qY!å`Ak`’±^\O¹àî,ð!ÀÊM í4"WQ òRõzâZHšŠØú@(›§4KX”Xþa»5iv„¡Ñ8Q­P1A•Lвm˜‰ÒÓêo`);_ƒvEh¦]2Ð`Å¿.ëñ´õ–jD3£Ý@?“­$ÌÍéµw¨:}‹XEÃn#¯wT¹°ó¢Ùg†îKP¸ŠZÛöSC›pŒ¼:k¦:ÅÄž\P60'ßU1¾"c2õ¯8wlù½ˆ0R*æ†lÚ4bôºvFü³ŸFÔ¨7¿H&/OAÛ7ÀËýgÊšº<2g/È^@²ïñÄN‹(~Q ø•« ¤“R _óy¾fS¶?Ia8ôU*U¬ æ‡=d¯<bü =“¼-¤ZWºrßÜVŽÞqH„Á;Ë÷´bAšCSø§‘ÏØ¥ök£¥à…m» üÍ-\Æð_3ß|;ýMW(eì5jPìUÝ+êòEñå#[@¸rÌ£of§fÒÃå6%LùV}™°» oç÷,5ÿG""LÖBÚ3¸‡l.pµ&%(éá׳ó!Ç ”-ÑÉ7‡F®GJ4 È^uhú#MÚ˜´TÿÇ/dÕªT>ÇëŸWìŽYXÍ=¶9~8Ï  ÞíˆòaØ¥ýúèz·ÌÐ_s€ž¶Æ‘GD•06ƒ/ ÿ<Ýêt÷„px,RþIj‘+t{Ï|]9Dã×.áO½$Èä©}#¹þç]’{QV9ûJÕsªµ+;ˆMÄ øÂÁܲÎNÜhE¡CK«i±cŒ $Û—¢%É9?C˜V †*ãÓyÃÒÆ*>¬{ 1Y1¢œä!B¼<[ÁdÔ60íS~xe ®z%eôÕZ™'c¦\Þ…'«Y[‚Jsàt3DT¬œB> Ö&™-á×–ª|=Î&ieaŒçfûN’®›âÖű‰ëuHÉI·æyð‚g'—­cx·ËB> mÙ5G)¤ F€½IJ)Ð?ïÎqÀ‚œN2¡©¿âäûÑ‹7önhnÔ”:KŽ Ó¾ Aborting now. Core dump? [y/n] in file <%s> at line %d in file <%s> at line %d (no log file) (read only) (see log file <%s>)!! Cycle mode!a Ancestors mode!d Descendants mode!g GEDCOM mode!n Normal mode!t GEDCOMT mode!x GEDCOMX mode$$ List references$n List notes$s List sources%1 FR%1 HEB%1J%6d Error%6d Errors%6d Warning%6d Warnings%c Reorder child%d child%d children%d error%d errors%d fixed%d fixed%d spouse%d spouses%d warning during import%d warnings during import%dI, %dF, %dS, %dE, %dX%e Add event%o Add other%s Add source%s was added as a child.%s was added as a spouse and/or parent.%s was added to the database.%s was modified in the database.%s: Bad arguments%s: line %d (entry %d): %s%s: null arg not permissible.%s: the arg #%s had a major error.%s: the arg #%s must be a boolean.%s: the arg #%s must be a family.%s: the arg #%s must be a float.%s: the arg #%s must be a list.%s: the arg #%s must be a node.%s: the arg #%s must be a person.%s: the arg #%s must be a record.%s: the arg #%s must be a string.%s: the arg #%s must be a table.%s: the arg #%s must be a variable.%s: the arg #%s must be an integer.%s: the arg had a major error.%s: the arg must be a family.%s: the arg must be a filename.%s: the arg must be a list.%s: the arg must be a node or string.%s: the arg must be a node.%s: the arg must be a person.%s: the arg must be a string.%s: the arg must be a variable.%s: the arg must be an integer.( Scroll up(( Scroll both up(1-9) Browse to child(Family %s (%s, %s)(Separator is %s)(b Scroll bottom up(change history is empty)(pg %d/%d)(t Scroll top up(visit history is empty)) Scroll down)) Scroll both down)b Scroll bottom down)t Scroll top down**may+ Next in db- Prev in db-- CURRENT SELECTION ----- CURRENT SELECTION ------ LIST ---/home/users/myname/lifelines/databases/myfamily0 EVEN 1 REFN 1 DATE 1 PLAC 1 INDI 2 NAME 2 ROLE 1 SOUR0 SOUR 1 REFN 1 TITL Title 1 AUTH Author0 XXXX 1 REFN1 Add a source record to the database2 Edit source record from the database3 Add an event record to the database4 Edit event record from the database5 Add an other record to the database6 Edit other record from the database< Enlarge menu area> Shrink menu area? Other menu choicesA Advanced viewA family cannot be merged with itself.A person cannot be merged with him/herself.A.D.ABORTADALARM CLOCKAborting: Adding unused keys as deleted keys...Ambiguous call to proc: %sAre you sure you want to merge them?Are you sure you want to remove the person from the database?Argument to lock (-l) must be y or n.B Browse new familyB.C.B.C.E.BCBCEBUS ERRORBad CHIL referenceBad HUSB referenceBad HUSB reference (%s) in family %sBad WIFE referenceBad backup history countBad child reference (%s) in family %sBad decimal number format.Bad family referenceBad family reference (%s) individual %sBad hexidecimal number format.Bad history countBad history lengthBad level at line %dBad nameBad name for individual %s: %sBad pointerBad pointer (in %s): %sBad wife reference (%s) in family %sBecause of errors the GEDCOM file was not loaded. Both families must have husbands/fathers.Both families must have wives/mothers.Browse new record (without adding xref).C.E.CECached: I:%s; F:%sCannot combine forceopen (-f) and lock (-l) flags.Cannot convert codeset (from <%s> to <%s>)Cannot remove last person from family.Checking GEDCOM file for errors. Choose a family by selecting a spouse/parent.Choose an operation:Choose database to openChoose from historyCodeset informationCollation routine: %sCommands: Select by number, u Page Up, d Page Down, i Select, q QuitCommands: j Move down k Move up i Select q QuitCommands: j Move down k Move up q QuitCommands: u Page Up, d Page Down, q QuitCommands: j Move down k Move up d Delete i Select q QuitCopyright(c) 1991 to 1996, by T. T. Wetmore IVCould not open file %sCould not open file %s.Create a family with this person as a child.Create a family with this person as a spouse/parent.Current Database - %sCurrent collate locale: %sCurrent databaseCurrent messages locale: %sDEATH OF CHILDDatabase `%s' has been saved in `%s'.Database error: -- Database recordsDatabase was corrupt.Default path: Deleted recordsDo you really want to add this child to the family?Do you really want to add this event to the database?Do you really want to add this family to the database?Do you really want to add this person to the database?Do you really want to add this record to the database?Do you really want to add this source to the database?Do you really want to add this spouse/parent to the family?Do you really want to merge these two families?Do you really want to merge these two persons?Do you really want to remove this child from his/her family?Do you really want to remove this spouse from his/her family?Do you really want to update this event?Do you really want to update this family?Do you really want to update this person?Do you really want to update this record?Do you really want to update this source?Do you want to create a database there?Do you want to edit the event again?Do you want to edit the event again? (Otherwise changes will be discarded.)Do you want to edit the family again?Do you want to edit the family again? (Otherwise changes will be discarded.)Do you want to edit the person again?Do you want to edit the person again? (Otherwise changes will be discarded.)Do you want to edit the record again?Do you want to edit the record again? (Otherwise changes will be discarded.)Do you want to edit the source again?Do you want to edit the source again? (Otherwise changes will be discarded.)Do you want to enter another name?Do you want to re-edit it?Duplicate HEAD line at line %dDuplicate event for %sDuplicate eventsDuplicate familiesDuplicate family for %sDuplicate func %s (lines %d and %d) in report: %sDuplicate individual for %sDuplicate individualsDuplicate name for %s (%s)Duplicate namesDuplicate othersDuplicate proc %s (lines %d and %d) in report: %sDuplicate record for %sDuplicate refn for %s (%s)Duplicate source for %sDuplicate sourcesDuplicated REFN - please choose.Edit current record now to add xref manually.Empty familyEmpty family (%s)End of file at line %dEnter Family Number to Browse toEnter a sibling from family.Enter a spouse from family.Enter codeset to assume (* for none)Enter d for debugger, q to quitEnter integer for programEnter name of output archive file.Enter name of translation table file to readEnter name of translation table file to writeEnter pattern to match against full name.Enter pattern to match against refn.Enter pattern to match against single surname or given name.Enter string for programError accessing dataError at line %d: %sError in abbreviations file.Error in user options file.Error: file "%s": line %d: Error: file <%s> not foundError: file <%s> not found: %s EventEventsEvent %s is referred to but not defined.Existing database found.FATAL ERRORFATAL ERROR: FamilyFamiliesFamily %s is referred to but not defined.Fatal ErrorFilepath too long.From which family is the child to be removed?From which family is the spouse/parent to be removed?GEDCOM codeset: %sGUI codeset: %sGUI input codeset: %sGUI output codeset: %sGhost name: %s -> %sGhost namesGlobal variablesHANGUPHeHerHisHow would you like to find a record?ILLEGAL INSTRUCTIONINDI, FAM, SOUR, EVEN records may not be other records.INTERRUPTIdentify a child of the family, if known.Identify a parent in the family having children swapped.Identify a spouse of the family, if known.Identify a spouse/parent for the new family.Identify child already in family.Identify child in second family.Identify family (enter nothing to identify by individual members).Identify list of persons for program:Identify one of the child's parents, if known.Identify person for program:Identify second person to browse to.Identify spouse/parent already in family, if known.Identify spouse/parent in second family, if known.Identify spouse/parent to add to an existing family.Identify the child to reorder.Identify the first child to swap.Identify the first family/spouse to swap.Identify the second child to swap.Identify the second family/spouse to swap.Identify the second spouse/parent, if known.Illegal type found in list in menuchooseImpermissible to change codeset in a populated databaseImproper HUSBImproper HUSB (%s) in family (%s)Improper WIFEImproper childImproper wife (%s) in family (%s)In file <%s> at line %dIn menu: %sInsert xref automatically at bottom of current record.Internal codesetInvalid properties set for new databaseIs this the new child? Is this the new spouse? Is this the person? Select if so.KILLLifeLines %s - Genealogical DB and Programming SystemLifeLines -- Auxiliary Browse Screen (* toggles menu)LifeLines -- Family Browse Screen (* toggles menu)LifeLines -- List Browse Screen (* toggles menu)LifeLines -- Main MenuLifeLines -- Person Browse Screen (* toggles menu)LifeLines -- Two Family Browse Screen (* toggles menu)LifeLines -- Two Person Browse Screen (* toggles menu)Line %d: Event %s has an incorrect key.Line %d: Family %s has an incorrect key.Line %d: Family %s has multiple husband links.Line %d: Family %s has multiple wife links.Line %d: Person %s has an incorrect key: skipped.Line %d: Person %s has multiple father links.Line %d: Person %s has multiple mother links.Line %d: Person %s is both male and female.Line %d: Person %s is female but must be male.Line %d: Person %s is implied to be both male and female.Line %d: Person %s is male but must be female.Line %d: Person defined here has no name.Line %d: Record %s has an incorrect key.Line %d: Source %s has an incorrect key.Line %d: The event defined here has no key.Line %d: The family defined here has no key.Line %d: The person defined here has no key: skipped.Line %d: The record defined here has no key.Line %d: The source defined here has no key.Line %d: This line has a bad link.Line %d: This line has a level number that is too large.Line %d: This line has an illegal level.Line %d: This line has no level number.Line %d: This line is empty; EOF?Line %d: This line is incomplete.Line %d: This line is too long.Line %d: This line needs white space before tag.Lines %d and %d: Event %s is multiply defined.Lines %d and %d: Family %s is multiply defined.Lines %d and %d: Person %s is multiply defined: skipped.Lines %d and %d: Record %s is multiply defined.Lines %d and %d: Source %s is multiply defined.Local variablesLocales are disabled.Locales are enabled.Looks like a program was running. Check file %1 around line %2. Malformed configuration file: line too long.Menu (%s) choice sequence too long: %sMessages:Missing HEAD line at line %dMissing NAME line in INDI record; record ignored. Missing childMissing child (%s) in family (%s)Missing spouseMissing spouse (%s) in family (%s)Missing titleMissing undeleted record %c%dNO NAMENew persons were added to the current list.New record is %sNew spouse/parent has unknown sex; can't add to family.No conversionNo current internal codeset, so no codeset conversion can be doneNo databases found in database pathNo errors foundNo errors; adding records with new keys...No errors; adding records with original keys...No events present.No more historyNo notes present.No one in database has key value %s.No original string on line.No others present.No persons were added to the current list.No records found in scanNo references present.No replacement string on line.No sources present.No such child.No such family.No such person.No such record.No such translation table in this databaseNon-indi name, key=%s, name=%sNon-indi namesNot implemented yetNot valid commandOrphan namesOrphaned name: %sOrphaned refn: %sOtherOthersPOWER-FAIL RESTARTParsing Error at line %d: Performing full name scanPerforming name fragment scanPerforming refn scanPersonPersonsPerson %s is referred to but not defined.Place the child last in the family.Please choose an operation:Please choose family create operation.Please choose from among these records.Please choose from the following list.Please choose from the following options:Please choose the child to browse to.Please choose the child to remove from the family.Please choose the event to view.Please choose the family to browse to.Please choose the father/husband to browse to.Please choose the first child to browse to.Please choose the first family to browse to.Please choose the first father/husband to browse to.Please choose the first mother/wife to browse to.Please choose the first spouse/parent to browse to.Please choose the mother/wife to browse to.Please choose the note to view.Please choose the other to view.Please choose the reference to view.Please choose the second child to browse to.Please choose the second family to browse to.Please choose the second father/husband to browse to.Please choose the second mother/wife to browse to.Please choose the second spouse/parent to browse to.Please choose the source to view.Please choose the spouse/parent to browse to.Please choose the spouse/parent to remove from the family.Please enter person's internal key value.Please enter the name of the GEDCOM file.Please identify next person to browse to.Please identify one of the child's siblings.Please identify one of the spouses.Please identify person or persons to browse to.Please identify record to browse to.Please identify the child.Proc %s must be called with %d (not %d) parameters.Processed %d lines without finding end of HEADQ Quit current databaseQUITQuit debuggerR Pick a GEDCOM file and read inREFN key is already in use.Record %s is referred to but not defined.Report cancelledReport debuggerReport file: Report not found: %s Report stopping due to error opening output fileReport stopping due to lack of output fileReturn to current record (without adding xref).Runtime Error at line %d: SEGMENTATION ERRORSIGNAL 0SYSTEM CALL ERRORSheSingle person familySingle person family (%s)Something impossible happened. Contact tech support.SourceSourcesSource %s is referred to but not defined.Spouse unknownStartup collate locale: %sStartup messages locale: %sStrike any key to continue.System error: illegal map codeTERMINATE FROM KILLTRACE TRAPTag is too long to connect automatically.The child was removed from his/her family.The current list is not named.The current list is now named %s.The database is already open for writing.The database is locked (no readwrite access).The database is read only.The database is read only; you may not add records.The database is read only; you may not change records.The database is read only; you may not merge records.The database is read only; you may not remove records.The database is read-only; loading has been canceled.The database is unlocked.The database was not saved.The event was modified in the database.The families have different fathers/husbands; cannot merge.The families have different wives/mothers; cannot merge.The family was modified in the database.The file is as positioned at EOF.The new family was added to the database.The persons are not of opposite sex; can't make family.The record begins at wrong level.The record contains multiple level 0 lines.The record does not begin with a FAM line.The record does not begin with a SOUR line.The record does not begin with an EVEN line.The record does not begin with an INDI line.The record is empty.The record was modified in the database.The source was modified in the database.The spouse was removed from his/her family.The two children were swapped.The two families were swapped.There are no children in the database for this family.There is no LifeLines database in that directory.There is no one in the database with that name or key.There is no record with that key or reference.There is something wrong with the data.There was %d unresolved reference.There were %d unresolved references.These persons are children in different families.This does not point to another record in the database!This family already has a husband/male parent.This family already has a wife/female parent.This family has both spouses/parents; can't add another.This family has less than two children; can't swap.This family has neither spouse/parent; can't remove.This family has no female spouse/parent in the database.This family has no male spouse/parent in the database.This family still has links; not removed.This person has no children in the database.This person has no older sibling in the database.This person has no spouse in the database.This person has no younger sibling in the database.This person is a spouse/parent in less than two families.This person is already a child in a family.This person is not a child in any family.This person is not a child in the family; can't remove.This person is not a spouse in the family; can't remove.This person is not a spouse or parent in any family.This person record does not have a name line.This person record has bad GEDCOM name syntax.This person's father is not in the database.This person's mother is not in the database.This person's parents are not in the database.This person's sex is not known; can't make family.This report requires a newer program to run Too many spouses to display full listTranslation TablesTwo parents of different sexes cannot be merged.Two persons with different parents cannot be merged.USER SIGNAL 1USER SIGNAL 2Undefined database error -- fix program.Undefined proc: %sUnknown signalUnsupported file encoding (no multibyte encodings except UTF-8).Unsupported file encoding: %s.Use original keys from GEDCOM file?WARNING: missing keysWINDOW CHANGEWarning: database codeset unspecifiedWarning: not all conversions availableWhat activity do you want to perform?What directory holds (or will hold) the LifeLines database? (? to list)What do you want to add?What do you want to remove?What is the name of the output file?What is the name of the program?What persons or list do you want to add to the current list?What record do you want to edit?What scan type?What should the name of this list be?What utility do you want to perform?Which character mapping do you want to edit?Which character mapping do you want to save?Which event record do you want to edit?Which source record do you want to edit?Who do you want to remove from the database?Whom do you want to edit?Whose families/spouses are to be swapped?Whose key value do you want?You are at the bottom of the list.You are at the top of the list.You cannot change the sex of a parent.You cannot edit the CHIL lines in a family record.You cannot edit the FAM line in a family record.You cannot edit the FAMC line in a person record.You cannot edit the FAMS lines in a person record.You cannot edit the HUSB line in a family record.You cannot edit the INDI line in a person record.You cannot edit the WIFE line in a family record.You must identify a database.[ Decrease tree depth\My Documents\LifeLines\Databases\MyFamily] Increase tree depth^b History/back^c Clear history^f History/fwd^l History list^xb ChngHist/back^xc Clear ChngHist^xf ChngHist/fwd^xl ChngHist lista Add child to familya Add familya Add information to the databasea Add to this lista Create new familyaavabout %1abt %1adaradar sheniadopadradsaft %1after %1apraprilaugaugustavb Browse new personsb Browse the persons in the databaseb Browse to bottomb Browse to personsbef %1before %1bet %1 and %2between %1 and %2bornborn: brumbrumairebur. buriburi: c Browse to childrenc Browse top childrenc Character set optionsc Child - add a child to an existing familyc Child - remove a child from his/her familyc Review change history (%d record)c Review change history (%d records)cal %1calculated %1cheshvanchildcompcould not open, read or write an index file.could not open, read or write the key file (to alter database).could not open, read or write the key file.creation of new database failed.cremcshd Copy top to bottomd Delete from listd Delete information from the databased Remove as childd Remove child fromd Show database statisticsdb directory is file, not directory.decdecemberdieddied: div. e Browse event recordse Edit recorde Edit the familye Edit the persone Edit the place abbreviation filee Edit this persone Edit top persone edit individual tables (in db)editor codeset: %seditor input codeset: %seditor output codeset: %seighteightheleveneleventhellelulenter file nameenter file name (*%s)enter integer:enter key or refn: enter key:enter name: enter path: enter string: enter y (yes) or n (no): errorerror accessing database directory.est %1estimated %1example: dbverify -ifsex "%s" export/import directory:f Browse to fatherf Browse to fathersf Browse top fatherf Family - create family record from one or two spousesf Family - remove a family completelyf Full database scanf Full name scanfatherfebfebruaryfifthfirstfiveflorflorealfourfourthfr %1fr %1 to %2frimfrimairefrom %1from %1 to %2frucfructidorfullname: person does not have a nameg Browse to familygedcom input codeset: %sgedcom output codeset: %sgermgerminalgettext dll had no versiongettext dll version: %sgettext dll: %sh Add as spouseheherher_himhisi Add as childi Browse this personi Identify a person from key valuei Individual - remove a person completelyi import all tables (from files into db)iconv dll had no versioniconv dll version: %siconv dll: %sidentifier: %s should be a string iyariyrj Merge bottom to topj Move down listjanjanuaryjour_complementairsjuljulyjunjunek Find a person's key valuek Move up listkeyfile is corrupt.keyfile is wrong alignment.keyfile is wrong version.kislevksll load a table from a file (into db)m Browse to motherm Browse to mothersm Browse top motherm Mark this personm Show memory statisticsmarmarchmarried: maymessmessidormothern Create new personn Name this listname of database is too long.name: person does not have a namenineninthnisannivonivoseno gettext dll foundno iconv dll foundno keyfile (directory does not appear to be a database).novnovembernsno Browse to older sibo Edit the user options fileoctoctoberonep Pedigree modep Person - add new person to the databasep Pick a report from list and runpattern: personpluvpluviosepraiprairialq Quit programq Return to main menuq Return to previous menur Generate report by entering report namer Read in data from a GEDCOM filer Refn scanr Remove as spouser Remove from listr Remove spouse fromreport codeset: %sreport input codeset: %sreport output codeset: %srequested database does not exist.s Add spouse to familys Browse source recordss Browse to spouse/ss Browse top spouse/ss Save the database in a GEDCOM files Search databases Spouse - add a spouse to an existing familys Spouse - remove a spouse from a familys save a table to a file (from db)secondsepseptembersevenseventhsheshevatshvsignal %1: %2sivansixsixthspousesurname: person does not have a namesvnt Browse to topt Enter tandem modet Modify character translation tablestamuztententhtevettherthermidorthirdthreetishritmzto %1tshtvttwelfthtwelvetwou Browse to parentsu Miscellaneous utilitiesv Review visit history (%d record)v Review visit history (%d records)vendvendemiaireventventosewarningx Browse other recordsx Handle source, event and other recordsx Swap mark/currentx Swap two childrenx Swap two familiesx Switch top/bottomx export all tables (from db to files)y Browse to younger siby Turn on syncyYyYnNzerozi Browse to indiProject-Id-Version: lifelines 3.0.29 Report-Msgid-Bugs-To: POT-Creation-Date: 2007-08-08 15:56-0400 PO-Revision-Date: 2004-05-08 17:16+0200 Last-Translator: Julie Vermeersch Language-Team: Dutch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; Nu bezig met afbreken. Geheugendump? [j/n] in bestand <%s> op regel %d in bestand <%s> op regel %d (geen logbestand) (enkel lezen) (zie logbestand <%s>)!! Cyclusmodus!a Vooroudermodus!d Afstammelingenmodus!g GEDCOM modus!n Normale modus!t GEDCOMT modus!x GEDCOMX modus$$ Verwijzingen weergeven$n Notities weergeven$s Bronnen weergeven%1 FR%1 HEB%1J%6d Fout%6d Fouten%6d Waarschuwing%6d Waarschuwingen%c Kind herordenen%d kind%d kinderen%d fout%d fouten%d hersteld%d hersteld%d partner%d partners%d waarschuwing tijdens het invoeren%d waarschuwingen tijdens het invoeren%dI, %dF, %dS, %dE, %dX%e Gebeurtenis toevoegen%o Andere toevoegen%s Bron toevoegen%s is toegevoegd als een kind.%s is toegevoegd als een partner en/of ouder.%s is toegevoegd aan de gegevensbank.%s is gewijzigd in de gegevensbank.%s: Slechte argumenten%s: regel %d (ingave %d): %s%s: leeg arg is niet toegelaten.%s: het arg #%s gaf een grote fout.%s: het arg #%s moet een booleaan zijn.%s: het arg #%s moet een familie zijn.%s: het arg #%s moet een reëel getal zijn.%s: het arg #%s moet een lijst zijn.%s: het arg #%s moet een node zijn.%s: het arg #%s moet een persoon zijn.%s: het arg #%s moet een opgave zijn.%s: het arg #%s moet een tekenreeks zijn.%s: het arg #%s moet een tabel zijn.%s: het arg #%s moet een variabele zijn.%s: het arg #%s moet een geheel getal zijn.%s: het arg gaf een grote fout.%s: het arg moet een familie zijn.%s: het arg moet een bestandsnaam zijn.%s: het arg moet een lijst zijn.%s: het arg moet een node of tekenreeks zijn.%s: het arg moet een node zijn.%s: het arg moet een persoon zijn.%s: het arg moet een tekenreeks zijn.%s: het arg moet een variabele zijn.%s: het arg moet een geheel getal zijn.( Naar boven schuiven(( Beide omhoog schuiven(1-9) Naar kind bladeren(Familie %s (%s, %s)(Scheidingsteken is %s)(b Onderkant omhoog schuiven(wijzigingengeschiedenis is leeg)(pg %d/%d)(t Top omhoog schuiven(bezoekgeschiedenis is leeg)) Naar beneden schuiven)) Beide omlaag schuiven)b Onderkant omlaag schuiven)t Top omlaag schuiven**mei+ Volgende in db- Vorige in db-- HUIDIGE SELECTIE ----- HUIDIGE SELECTIE ------ LIJST ---/home/users/myname/lifelines/gegevensbanken/mijnfamilie0 EVEN 1 REFN 1 DATE 1 PLAC 1 INDI 2 NAME 2 ROLE 1 SOUR0 SOUR 1 REFN 1 TITL Titel 1 AUTH Auteur0 XXXX 1 REFN1 Een bronopgave toevoegen aan de gegevensbank2 Bronopgave van gegevensbank bewerken3 Een gebeurtenisopgave toevoegen aan de gegevensbank4 Gebeurtenisopgave van gegevensbank bewerken5 Nog een opgave toevoegen aan de gegevensbank6 Andere opgave van gegevensbank bewerken< Menugebied groter maken> Menugebied kleiner maken? Andere menukeuzesA Uitgebreide weergaveEen familie kan niet worden samengevoegd met zichzelf.Een persoon kan niet worden samengevoegd met zichzelf.n.C.AFBREKENnCALARMKLOKBezig met afbreken: Bezig met het toevoegen van ongebruikte sleutels als verwijderde sleutels...Dubbelzinnige oproep voor proc: %sBent u zeker dat u hen wilt samenvoegen?Bent u zeker dat u deze persoon van de gegevensbank wilt verwijderen?Argument om te vergrendelen (-l) moet j of n zijn.B Nieuwe familie bladerenb.C.B.C.E.bCBCEBUS FOUTSlechte CHIL (kind) verwijzingSlechte HUSB (echtgenoot) verwijzingSlechte HUSB-verwijzing (%s) in familie %sSlechte WIFE (echtgenote) verwijzingSlechte telling van veiligheidskopie geschiedenisSlechte kindverwijzing (%s) in familie %sSlecht decimaal nummerformaat.Slechte familieverwijzingSlechte familieverwijzing (%s) persoon %sSlecht hexadecimaal nummerformaat.Slechte geschiedenistellingSlechte geschiedenislengteSlecht niveau op regel %dSlechte naamSlechte naam voor persoon %s: %sSlechte wijzerSlechte wijzer (in %s): %sSlechte echtgenoteverwijzing (%s) in familie %sWegens foutmeldingen is het GEDCOM-bestand niet geladen. Beide families moeten echtgenoten/vaders hebben.Beide families moeten echtgenotes/moeders hebben.Nieuwe opgave bladeren (zonder xref toe te voegen).C.E.CEGecached: I:%s; F:%sKan openbreken- (-f) en vergrendelen- (-l) vlaggen niet combineren.Kan codeset niet converteren (van <%s> naar <%s>)Kan laatste persoon van de familie niet verwijderen.Bezig met het controleren van GEDCOM-bestand op fouten. Kies een familie door een partner/ouder te selecteren.Kies een actie:Gegevensbank kiezen om te openenUit geschiedenis kiezenCodesetinformatieSorteermethode: %sOpdrachten: Selecteren op nummer, u Pagina omhoog, d Pagina omlaag, i Selecteren, q AfsluitenOpdrachten: j Naar beneden verplaatsen k Naar boven verplaatsen i Selecteren q AfsluitenOpdrachten: j Naar beneden verplaatsen k Naar boven verplaatsen q AfsluitenOpdrachten: u Pagina omhoog, d Pagina omlaag, q AfsluitenOpdrachten: j Naar beneden verplaatsen k Naar boven verplaatsen d Verwijderen i Selecteren q AfsluitenAuteursrecht(c) 1991 tot 1996, door T. T. Wetmore IVKon bestand %s niet openenKon file %s niet openen.Een familie maken met deze persoon als een kind.Een familie maken met deze persoon als een partner/ouder.Huidige gegevensbank - %sHuidig sorteergebied: %sHuidige gegevensbankHuidig berichtengebied: %sDOOD VAN KINDGegevensbank `%s' is opgeslagen in `%s'.Gegevensbank fout: -- GegevensbankopgavenEr zaten fouten in de gegevensbank.Standaard pad: Verwijderde opgavenWilt u dit kind echt toevoegen aan de familie?Wilt u deze gebeurtenis echt toevoegen aan de gegevensbank?Wilt u deze familie echt toevoegen aan de gegevensbank?Wilt u deze persoon echt toevoegen aan de gegevensbank?Wilt u deze opgave echt toevoegen aan de gegevensbank?Wilt u deze bron echt toevoegen aan de gegevensbank?Wilt u deze partner/ouder echt toevoegen aan de familie?Wilt u deze twee families echt samenvoegen?Wilt u deze twee personen echt samenvoegen?Wilt u dit kind echt verwijderen van zijn/haar familie?Wilt u deze partner echt verwijderen van zijn/haar familie?Wilt u deze gebeurtenis echt bijwerken?Wilt u deze familie echt bijwerken?Wilt u deze persoon echt bijwerken?Wilt u deze opgave echt bijwerken?Wilt u deze bron echt bijwerken?Wilt u daar een gegevensbank maken?Wilt u de gebeurtenis opnieuw bewerken?Wilt u de gebeurtenis opnieuw bewerken? (Anders worden veranderingen teniet gedaan.)Wilt u de familie opnieuw bewerken?Wilt u de familie opnieuw bewerken? (Anders worden veranderingen teniet gedaan.)Wilt u de persoon opnieuw bewerken?Wilt u de persoon opnieuw bewerken? (Anders worden veranderingen teniet gedaan.)Wilt u de gebeurtenis opnieuw bewerken?Wilt u de opgave opnieuw bewerken? (Anders worden veranderingen teniet gedaan.)Wilt u de bron opnieuw bewerken?Wilt u de bron opnieuw bewerken? (Anders worden veranderingen teniet gedaan.)Wilt u nog een naam ingeven?Wilt u het opnieuw bewerken?HOOFD-regel op regel %d kopiërenGebeurtenis voor %s kopiërenGebeurtenissen kopiërenFamilies kopiërenFamilie voor %s kopiërenKopiëer func %s (regels %d en %d) in melding: %sPersoon voor %s kopiërenPersonen kopiërenNaam voor %s (%s) kopiërenNamen kopiërenAndere kopiërenKopiëer proc %s (regels %d en %d) in melding: %sOpgave voor %s kopiërenRefn voor %s (%s) kopiërenBron voor %s kopiërenBronnen kopiërenREFN gekopiëerd - kies a.u.b.Bewerk huidige opgave nu om handmatig xref toe te voegen.Lege familieLege familie (%s)Einde van bestand op regel %dGeef het familienummer in om naar te bladerenVoer een broer of zus in van familie.Voer een partner in van familie.Geef codeset in om toe te eigenen (* voor geen)Voer d in voor debugger, q om af te sluitenGeef geheel getal in voor programmaGeef naam van uitvoerarchiefbestand in.Geef naam in van vertalingstabelbestand om te lezenGeef de naam in van het vertalingstabelbestand om te schrijvenGeef patroon in om overeen te stemmen met volledige naam.Geef patroon in om overeen te stemmen met refn.Geef patroon in om overeen te stemmen met enkele voornaam of gegeven naam.Geef tekenreeks voor programma inFout bij het benaderen van gegevensFout op regel %d: %sFout in afkortingenbestand.Fout in gebruikersoptiesbestand.Fout: bestand "%s": regel %d: Fout: bestand <%s> niet gevondenFout: bestand <%s> niet gevonden: %s GebeurtenisGebeurtenissenNaar gebeurtenis %s wordt verwezen maar is niet gedefinieerd.Bestaande gegevensbank gevonden.FATALE FOUTFATALE FOUTFamilieFamiliesNaar familie %s wordt verwezen maar is niet gedefinieerd.Fatale foutBestandspad te lang.Uit welke familie moet het kind worden verwijderd?Uit welke familie moet de partner/ouder worden verwijderd?GEDCOM codeset: %sGUI codeset: %sGUI invoercodeset: %sGUI uitvoercodeset: %sGeestnaam: %s -> %sGeestnamenGlobale variabelenOPHANGENHijHaarZijnHoe zou u een opgave willen vinden?ILLEGALE INSTRUCTIEINDI-, FAM-, SOUR-, en EVEN-opgaven mogen geen andere opgaven zijn.ONDERBREKENIdentificeer een kind van de familie, wanneer bekend.Identificeer een ouder in de familie waarvan kinderen zijn omgewisseld.Identificeer een partner van de familie, wanneer bekend.Identificeer een partner/ouder voor de nieuwe familie.Kind identificeren dat al in familie zit.Identificeer kind in tweede familie.Familie identificeren (geef niets in om te identificeren met individuele leden).Identificeer lijst van personen voor programma:Identificeer een van de ouders van het kind, wanneer gekend.Identificeer persoon voor programma:Identificeer tweede persoon om naar te bladeren.Identificeer partner/ouder die al in familie zit, wanneer bekend.Identificeer partner/ouder in tweede familie, wanneer bekend.Identificeer partner/ouder om toe te voegen aan een bestaande familie.Identificeer het kind om opnieuw te ordenen.Identificeer het eerste kind om om te wisselen.Identificeer de eerste familie/partner om om te wisselen.Identificeer het tweede kind om om te wisselen.Identificeer de tweede familie/partner om om te wisselen.Identificeer de tweede partner/ouder, wanneer bekend.Illegale soort gevonden in lijst in menukiezenNiet toegelaten om codeset te veranderen in een bevolkte gegevensbankOntoelaatbare echtgenootOntoelaatbare HUSB (%s) in familie (%s)Ontoelaatbare echtgenoteOntoelaatbaar kindOntoelaatbare echtgenote (%s) in familie (%s)In bestand <%s> op regel %dIn menu: %sVoer automatisch xref in aan de onderkant van de huidige opgave.Interne codesetOngeldige eigenschappen opgegeven voor nieuwe gegevensbankIs dit het nieuwe kind? Is dit de nieuwe partner? Is dit de persoon? Selecteer indien juist.DODENLifeLines %s - Genealogische DB en programmeersysteemLifeLines - Hulpbladerscherm (* roept menu op)LifeLines - Familiebladerscherm (* roept menu op)LifeLines - Lijstbladerscherm (* roept menu op)LifeLines -- HoofdmenuLifeLines - Persoonbladerscherm (* roept menu op)LifeLines - Twee familiesbladerscherm (* roept menu op)LifeLines - Twee persoonsbladerscherm (* roept menu op)Regel %d: Gebeurtenis %s heeft een onjuiste sleutel.Regel %d: Familie %s heeft een verkeerde sleutel.Regel %d: Familie %s heeft meerdere echtgenootbanden.Regel %d: Familie %s heeft meerdere echtgenotebanden.Regel %d: Persoon %s heeft een verkeerde sleutel: overgeslagen.Regel %d: Persoon %s heeft meerdere vaderkoppelingen.Regel %d: Persoon %s heeft meerdere moederkoppelingen.Regel %d: Persoon %s is zowel mannelijk als vrouwelijk.Regel %d: Persoon %s is vrouwelijk maar moet mannelijk zijn.Regel %d: Persoon %s is geïmpliceerd om zowel mannelijk als vrouwelijk te zijn.Regel %d: Persoon %s is mannelijk maar moet vrouwelijk zijn.Regel %d: Persoon hier gedefinieerd heeft geen naam.Regel %d: Opgave %s heeft een onjuiste sleutel.Regel %d: Bron %s heeft een onjuiste sleutel.Regel %d: De gebeurtenis hier gedefinieerd heeft geen sleutel.Regel %d: De familie hier gedefinieerd heeft geen sleutel.Regel %d: De persoon hier gedefinieerd heeft geen sleutel; overgeslagen.Regel %d: De opgave hier gedefinieerd heeft geen sleutel.Regel %d: De bron hier gedefinieerd heeft geen sleutel.Regel %d: Deze regel heeft een slechte koppeling.Regel %d: Deze regel heeft een niveaunummer dat te groot is.Regel %d: Deze regel heeft een illegaal niveau.Regel %d: Deze regel heeft geen niveaunummer.Regel %d: Deze regel is leeg; bestandseinde?Regel %d: Deze regel is onvolledig.Regel %d: Deze regel is te lang.Regel %d: Deze regel heeft een witte spatie nodig voor tag.Regels %d en %d: Gebeurtenis %s is meermaals gedefinieerd.Regels %d en %d: Familie %s is meermaals gedefinieerd.Regels %d en %d: Persoon %s is meermaals gedefinieerd: overgeslagen.Regels %d en %d: Opgave %s is meermaals gedefinieerd.Regels %d en %d: Bron %s is meermaals gedefinieerd.Lokale variabelenGebieden zijn uitgeschakeld.Taaldefinities zijn ingeschakeld.Het lijkt erop dat een programma werd uitgevoerd. Controleer bestand %1 omstreeks regel %2. Verkeerd gevormd configuratiebestand: regel te lang.Menu (%s) reekskeuze te lang: %sBerichten:Ontbrekende HOOFD-regel op regel %dNAAM-regel ontbreekt in INDI-opgave; opgave genegeerd. Ontbrekend kindOntbrekend kind (%s) in familie (%s)Ontbrekende partnerOntbrekende partner (%s) in familie (%s)Ontbrekende titelOntbrekende niet-verwijderde opgave %c%dGEEN NAAMEr zijn nieuwe personen toegevoegd aan de huidige lijst.Nieuwe opgave is %sNieuwe partner/ouder heeft onbekend geslacht; kan niet toevoegen aan familie.Geen omzettingGeen huidige interne codeset, dus er kan geen codesetomzetting worden gedaanGeen gegevensbanken gevonden in gegevensbankpadGeen fouten gevondenGeen foutmeldingen; bezig met het toevoegen van opgaven met nieuwe sleutels...Geen fouten; bezig met het toevoegen van opgaven met originele sleutels...Geen gebeurtenissen aanwezig.Geen geschiedenis meerGeen notities beschikbaar.Niemand in gegevensbank heeft sleutelwaarde %s.Geen originele tekenreeks op regel.Geen andere aanwezig.Er zijn geen personen toegevoegd aan de huidige lijst.Geen opgaven gevonden bij het zoekenGeen verwijzingen beschikbaar.Geen vervangtekenreeks op regel.Geen bronnen aanwezig.Kind niet gevonden.Familie niet gevonden.Persoon niet gevonden.Opgave niet gevonden.Vertalingstabel niet gevonden in deze gegevensbankNiet-indinamen, sleutel=%s, naam=%sNiet-indi namenNog niet ingeprogrammeerdOngeldige opdrachtWeesnamenWees geworden naam: %sWees geworden refn: %sAnderAndereSTROOMTEKORT HERSTARTENOntleedfout op regel %d: Volledige naam zoeken aan het uitvoerenZoeken op deel van naam aan het uitvoerenRefn zoeken aan het uitvoerenPersoonPersonenNaar persoon %s wordt verwezen maar is niet gedefinieerd.Het kind laatst in de familie plaatsen.Kies een actie:Kies familieaanmaakactie.Kies uit dit overzicht.Kies uit de volgende lijst.Kies uit de volgende opties:Kies het kind om naar te bladeren.Kies het kind om uit de familie te verwijderen.Kies het evenement om te bekijken.Kies de familie om naar te bladeren.Kies de vader/echtgenoot om naar te bladeren.Kies het eerste kind om naar te bladeren.Kies de eerste familie om naar te bladeren.Kies de eerste vader/echtgenoot om naar te bladeren.Kies de eerste moeder/echtgenote om naar te bladeren.Kies de eerste partner/ouder om naar te bladeren.Kies de moeder/echtgenote om naar te bladeren.Kies de notitie om te bekijken.Kies het andere om te bekijken.Kies de verwijzing om te bekijken.Kies het tweede kind om naar te bladeren.Kies de tweede familie om naar te bladeren.Kies de tweede vader/echtgenoot om naar te bladeren.Kies de tweede moeder/echtgenote om naar te bladeren.Kies de tweede partner/ouder om naar te bladeren.Kies de bron om te bekijken.Kies de partner/ouder om naar te bladeren.Kies de partner/ouder om uit de familie te verwijderen.Geef interne sleutelwaarde van persoon in.Geef de naam van het GEDCOM-bestand in.Identificeer volgende persoon om naar te bladeren.Identificeer één van de broers of zussen van het kind.Identificeer één van de partners.Identificeer persoon of personen om naar te bladeren.Identificeer opgave om naar te bladeren.Identificeer het kind.Proc %s moet worden opgeroepen met %d (niet %d) parameters.%d regels behandeld zonder het einde van HOOFD te vindenQ Huidige gegevensbank afsluitenAFSLUITENDebugger afsluitenR Een GEDCOM-bestand kiezen en inlezenREFN-sleutel is al in gebruik.Naar opgave %s wordt verwezen maar is niet gedefinieerd.Melding geannuleerdDebugger rapporterenBestand melden: Melding niet gevonden: %sBezig met stoppen van melding wegens fout bij het openen van het uitvoerbestandBezig met stoppen van melden wegens gebrek aan uitvoerbestandKeer terug naar huidige opgave (zonder xref toe te voegen).Uitvoertijdfout op regel %d: SEGMENTATIE FOUTSIGNAAL 0SYSTEEMFUNCTIE FOUTZijFamilie bestaande uit één persoonFamilie bestaande uit één persoon (%s)Iets onmogelijk is gebeurd. Contacteer de technische dienst.BronBronnenNaar bron %s wordt verwezen maar is niet gedefinieerd.Onbekende partnerOpstartsorteergebied: %sOpstartberichtengebied: %sSla een toets aan om verder te gaan.Systeemfout: illegale mapcodeBEËINDIGEN DOOR DODENVALKUIL OPSPORENTag is te lang om automatisch te verbinden.Het kind is verwijderd van zijn/haar familie.De huidige lijst heeft geen naam.De huidige lijst is nu %s genoemd.De gegevensbank is al open om te schrijven.De gegevensbank is vergrendeld (geen lezenschrijven-toegang).De gegevensbank is enkel lezen.De gegevensbank is enkel lezen; u mag geen opgaven toevoegen.De gegevensbank is enkel lezen; u mag geen opgaven veranderen.De gegevensbank is enkel lezen; u mag geen opgaven samenvoegen.De gegevensbank is enkel lezen; u mag geen opgaven verwijderen.De gegevensbank is enkel-lezen; het laden is geannuleerd.De gegevensbank is ontgrendeld.De gegevensbank is niet opgeslagen.De gebeurtenis is gewijzigd in de gegevensbank.De families hebben verschillende vaders/echtgenoten; kan niet samenvoegen.De families hebben verschillende echtgenotes/moeders; kan niet samenvoegen.De familie is gewijzigd in de gegevensbank.Het bestand is geplaatst op bestandseinde.De nieuwe familie is toegevoegd aan de gegevensbank.De personen zijn niet van het tegengestelde geslacht; kan familie niet maken.De opgave begint op verkeerd niveau.De opgave bevat meerdere niveau 0-regels.De opgave begint niet met een FAM-regel.De opgave begint niet met een SOUR-regel.De opgave begint niet met een EVEN-regel.De opgave begint niet met een INDI-regel.De opgave is leeg.De structuur is gewijzigd in de gegevensbank.De bron is gewijzigd in de gegevensbank.De partner is verwijderd van zijn/haar familie.De twee kinderen zijn omgewisseld.De twee families zijn omgekeerd.Er zitten geen kinderen in de gegevensbank voor deze familie.Er is geen LifeLines gegevensbank in die map.Er is niemand in de gegevensbank met die naam of sleutel.Er is geen opgave met die sleutel of verwijzing.Er is iets verkeerd met de gegevens.Er was %d onuitgemaakte verwijzing.Er waren %d onuitgemaakte verwijzingen.Deze personen zijn kinderen in verschillende families.Dit wijst niet naar een andere opgave in de gegevensbank!Deze familie heeft al een echtgenoot/vader.Deze familie heeft al een echtgenote/moeder.Deze familie heeft beide partners/ouders; kan geen meer toevoegen.Deze familie heeft minder dan 2 kinderen; kan niet omwisselen.Deze familie heeft geen van beide partners/ouders; kan niet verwijderen.Deze familie heeft geen vrouwelijke partner/ouder in de gegevensbank.Deze familie heeft geen mannelijke partner/ouder in de gegevensbank.Deze familie heeft nog banden; niet verwijderd.Deze persoon heeft geen kinderen in de gegevensbank.Deze persoon heeft geen oudere broer of zus in de gegevensbank.Deze persoon heeft geen partner in de gegevensbank.Deze persoon heeft geen jongere broer of zus in de gegevensbank.Deze persoon is een partner/ouder in minder dan twee families.Deze persoon is al een kind in een familie.Deze persoon is in geen enkele familie een kind.Deze persoon is geen kind in de familie; kan niet verwijderen.Deze persoon is geen partner in de familie; kan niet verwijderen.Deze persoon is in geen enkele familie een partner of ouder.Deze persoonsopgave heeft geen naamregelDeze persoonopgave heeft slechte GEDCOM-naam schrijfwijze.De vader van deze persoon zit niet in de gegevensbank.De moeder van deze persoon zit niet in de gegevensbank.De ouders van deze persoon zitten niet in de gegevensbank.Het geslacht van deze persoon is niet bekend; kan familie niet maken.Deze melding heeft een nieuwer programma nodig om te worden uitgevoerd Teveel partners om de hele lijst weer te gevenVertalingstabellenTwee ouders met verschillende geslachten kunnen niet worden samengevoegd.Twee personen met verschillende ouders kunnen niet worden samengevoegd.GEBRUIKERSSIGNAAL 1GEBRUIKERSSIGNAAL 2Ongedefinieerde gegevensbankfout -- programma herstellen.Niet-gedefinieerde proc: %sOnbekend signaalNiet-ondersteunde bestandscodering (geen multibyte coderingen behalve UTF-8).Niet-ondersteunde bestandscodering: %s.Originele sleutels uit GEDCOM-bestand gebruiken?WAARSCHUWING: ontbrekende sleutelsVENSTERVERANDERINGWaarschuwing: gegevensbankcodeset niet gespecificeerdWaarschuwing: niet alle omzettingen zijn beschikbaarWelke activiteit wilt u uitvoeren?Welke map bevat (of zal bevatten) de LifeLines gegevensbank? (? om lijst weer te geven)Wat wilt u toevoegen?Wat wilt u verwijderen?Wat is de naam van het uitvoerbestand?Wat is de naam van het programma?Welke personen of lijst wilt u toevoegen aan de huidige lijst?Welke opgave wilt u bewerken?Welke zoeksoort?Wat moet de naam van deze lijst zijn?Welke nuttigheid wilt u uitvoeren?Welke numerieke code-afbeelding wilt u bewerken?Welke numerieke code-afbeelding wilt u opslaan?Welke gebeurtenisopgave wilt u bewerken?Welke bronopgave wilt u bewerken?Wie wilt u verwijderen uit de gegevensbank?Wie wilt u bewerken?Wiens families/partners moeten worden omgewisseld?Wiens sleutelwaarde wilt u?U bent aan de onderkant van de lijst.U bent aan de top van de lijst.U kunt het geslacht van een ouder niet veranderen.U kunt de KIND-regel in een familie-opgave niet bewerken.U kunt de FAM-regel in een familie-opgave niet bewerken.U kunt de FAMC-regel in een persoonsopgave niet bewerken.U kunt de FAMS-regel in een persoonsopgave niet bewerken.U kunt de HUSB-regel (echtgenoot) niet bewerken in een familie-opgave.U kunt de INDI-regel in een persoonsopgave niet bewerken.U kunt de WIFE-regel (echtgenote) niet bewerken in een familie-opgave.U moet een gegevensbank identificeren.[ Boomdiepte verkleinen\Mijn Documenten\LifeLines\Gegevensbanken\MijnFamilie] Boomdiepte vergroten^b Geschiedenis/terug^c Geschiedenis leegmaken^f Geschiedenis/vooruit^l Geschiedenislijst^xb WijzGesch/terug^xc WijzGesch leegmaken^xf WijzGesch/vooruit^xl WijzGesch weergevena Kind aan familie toevoegena Familie toevoegena Informatie toevoegen aan de gegevensbanka Aan deze lijst toevoegena Nieuwe familie makenaavinfo %1inf %1adaradar shenigeadopteerdadradsna %1nadien %1apraprilaugaugustusavb Nieuwe personen bladerenb Bladeren in de personen in de gegevensbankb Naar onderzijde bladerenb Naar personen bladerenvoor %1voorheen %1tss %1 en %2tussen %1 en %2geborengeboren: brumbrumairebegr.begravenbegraven: c Naar kinderen bladerenc Naar bovenste kinderen bladerenc Letterteken optiesc Kind - een kind toevoegen aan een bestaande familiec Kind - een kind verwijderen van zijn/haar familiec Wijzigingengeschiedenis herbekijken (%d opgave)c Wijzigingengeschiedenis herbekijken (%d opgaven)ber %1berekend %1cheshvankindcompkon een indexbestand niet openen, lezen of schrijven.kon het sleutelbestand niet openen, lezen of schrijven (om de gegevensbank te wijzigen).kon het sleutelbestand niet openen, lezen of schrijven.maken van nieuwe gegevensbank is mislukt.gecremeerdcshd Top naar onderzijde kopiërend Uit lijst verwijderend Informatie verwijderen uit de gegevensbankd Als kind verwijderend Kind verwijderen uitd Gegevensbankstatistieken tonendb map is een bestand, geen map.decdecembergestorvengestorven: gesch.e Gebeurtenisopgaven bladerene De opgave bewerkene De familie bewerkene De persoon bewerkene Het plaatsafkortingsbestand bewerkene Deze persoon bewerkene Bovenste persoon bewerkene individuele tabellen bewerken (in db)editorcodeset: %seditorinvoercodeset: %seditoruitvoercodeset: %sachtachtsteelfelfdeellelulbestandsnaam ingevenbestandsnaam ingeven (*%s)geef geheel getal in:geef sleutel of refn in: geef sleutel in:geef naam in: geef pad in: geef of tekenreeks in: geef j (ja) of n (nee) in: foutfout tijdens het betreden van gegevensbankmap.schat %1geschat %1voorbeeld: dbverifiëren -wanneergeslacht "%s" uitvoer-/invoermap:f Naar vader bladerenf Naar vaders bladerenf Naar bovenste vader bladerenf Familie - Familie-opgave maken uit één of twee partnersf Familie - een familie helemaal verwijderenf Volledige gegevensbank doorzoekenf Volledige naam zoekenvaderfebfebruarivijfdeeerst(e)vijfflorflorealviervierdevan %1van %1 naar %2frimfrimairevan %1van %1 naar %2frucfructidorvolledige naam: persoon heeft geen naamg Naar familie bladerengedcom invoercodeset: %sgedcom uitvoercodeset: %sgermgerminalgettext dll had geen versiegettext dllversie: %sgettext dll: %sh Als partner toevoegenhijhaarhaar_hemzijni Als kind toevoegeni Deze persoon bladereni Een persoon identificeren door sleutelwaardei Individu - een persoon helemaal verwijdereni alle tabellen invoeren (van bestanden naar db)iconv dll had geen versieiconv dllversie: %siconv dll: %svariabele-naam: %s moet een tekenreeks zijn iyariyrj Onderzijde naar top samenvoegenj Lijst omlaag schuivenjanjanuarijour_complementairsjuljulijunjunik De sleutelwaarde van een persoon vindenk Lijst omhoog schuivensleutelbestand is beschadigd.sleutelbestand is verkeerd uitgelijnd.sleutelbestand is verkeerde versie.kislevksll een tabel uit een bestand laden (in db)m Naar moeder bladerenm Naar moeders bladerenm Naar bovenste moeder bladerenm Deze persoon markerenm Geheugenstatistieken tonenmaamaartgetrouwd: meimessmessidormoedern Nieuwe persoon makenn Deze lijst benoemennaam van gegevensbank is te lang.naam: persoon heeft geen naamnegennegendenisannivonivosegeen gettext dll gevondengeen iconv dll gevondengeen sleutelbestand (map blijkt geen gegevensbank te zijn).novnovembernsno Naar oudere broer of zus bladereno Het gebruikersoptiesbestand bewerkenoctoctoberéénp Stamboommodusp Persoon - nieuwe persoon toevoegen aan de gegevensbankp Een opgave uit lijst kiezen en uitvoerenpatroon: persoonpluvpluviosepraiprairialq Programma afsluitenq Terugkeren naar hoofdmenuq Terugkeren naar vorige menur Opgave tot stand brengen door een opgavenaam in te gevenr Gegevens inlezen uit een GEDCOM-bestandr Refn zoekenr Als partner verwijderenr Verwijderen uit lijstr Partner verwijderen uitcodeset melden: %sinvoercodeset melden: %suitvoercodeset melden: %sgevraagde gegevensbank bestaat niet.s Partner aan familie toevoegens Bronopgaven bladerens Naar partner(s) bladerens Naar bovenste partner(s) bladerens De gegevensbank opslaan in een GEDCOM-bestands Gegevensbank zoekens Partner - een partner toevoegen aan een bestaande families Partner - een partner verwijderen uit een families een tabel naar een bestand opslaan (uit db)tweedesepseptemberzevenzevendezijshevatshvsignaal %1: %2sivanzeszesdepartnervoornaam: persoon heeft geen naamsvnt Naar top bladerent Binnengaan in koppelmodust Lettertekenvertalingstabellen wijzigentamuztientiendetevettherthermidorderdedrietishritmznaar %1tshtvttwaalfdetwaalftweeu Naar ouders bladerenu Verschillende nuttighedenv Bezoekgeschiedenis herbekijken (%d opgave)v Bezoekgeschiedenis herbekijken (%d opgaven)vendvendemiaireventventosewaarschuwingx Andere opgaven bladerenx Bron, gebeurtenis en andere opgaven behandelenx Gemarkeerde/huidige omwisselenx Twee kinderen omwisselenx Twee families omwisselenx Bovenzijde/onderzijde omwisselenx alle tabellen uitvoeren (van db naar bestanden)y Naar jongere broer of zus bladereny Sync aanzettenjJjJnNnulzi Naar indi bladerenlifelines-3.0.61/po/nl.po0000700002540200244210000040550110656417751015351 0ustar prappDomain Users# Dutch translation of lifelines. # Copyright (C) 2004 Tom T. Wetmore IV # This file is distributed under the same license as the lifelines package. # Julie Vermeersch , 2004. # # msgid "" msgstr "" "Project-Id-Version: lifelines 3.0.29\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-08-08 15:56-0400\n" "PO-Revision-Date: 2004-05-08 17:16+0200\n" "Last-Translator: Julie Vermeersch \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: src/btree/btrec.c:369 #, c-format msgid "Failed (errno=%d) to open blockfile (rkey=%s): %s" msgstr "" #: src/btree/btrec.c:438 #, c-format msgid "Btree lookup looped back to master (%ld)!" msgstr "" #: src/gedlib/charmaps.c:769 msgid "" msgstr "" #. TRANSLATORS: seconds time interval #: src/gedlib/dateprint.c:783 #, c-format msgid "%02ds" msgstr "" #. TRANSLATORS: minutes & seconds time interval #: src/gedlib/dateprint.c:789 #, c-format msgid "%dm%02ds" msgstr "" #. TRANSLATORS: hours & minutes time interval #: src/gedlib/dateprint.c:795 #, c-format msgid "%dh%02dm" msgstr "" #. TRANSLATORS: days & hours time interval #: src/gedlib/dateprint.c:801 #, c-format msgid "%dd%02dh" msgstr "" #. TRANSLATORS: years & days time interval #: src/gedlib/dateprint.c:805 #, c-format msgid "%dy%03dd" msgstr "" #: src/gedlib/dbcontext.c:276 msgid "Database error: -- " msgstr "Gegevensbank fout: -- " #: src/gedlib/dbcontext.c:280 msgid "requested database does not exist." msgstr "gevraagde gegevensbank bestaat niet." #: src/gedlib/dbcontext.c:283 msgid "db directory is file, not directory." msgstr "db map is een bestand, geen map." #: src/gedlib/dbcontext.c:286 msgid "creation of new database failed." msgstr "maken van nieuwe gegevensbank is mislukt." #: src/gedlib/dbcontext.c:289 msgid "error accessing database directory." msgstr "fout tijdens het betreden van gegevensbankmap." #: src/gedlib/dbcontext.c:292 msgid "no keyfile (directory does not appear to be a database)." msgstr "geen sleutelbestand (map blijkt geen gegevensbank te zijn)." #: src/gedlib/dbcontext.c:295 msgid "could not open, read or write an index file." msgstr "kon een indexbestand niet openen, lezen of schrijven." #: src/gedlib/dbcontext.c:298 msgid "could not open, read or write the key file." msgstr "kon het sleutelbestand niet openen, lezen of schrijven." #: src/gedlib/dbcontext.c:301 msgid "could not open, read or write the key file (to alter database)." msgstr "" "kon het sleutelbestand niet openen, lezen of schrijven (om de gegevensbank " "te wijzigen)." #: src/gedlib/dbcontext.c:304 #, fuzzy msgid "could not open, read or write a block file." msgstr "kon het sleutelbestand niet openen, lezen of schrijven." #: src/gedlib/dbcontext.c:307 msgid "name of database is too long." msgstr "naam van gegevensbank is te lang." #: src/gedlib/dbcontext.c:310 msgid "The database is already open for writing." msgstr "De gegevensbank is al open om te schrijven." #: src/gedlib/dbcontext.c:313 msgid "The database is locked (no readwrite access)." msgstr "De gegevensbank is vergrendeld (geen lezenschrijven-toegang)." #: src/gedlib/dbcontext.c:316 msgid "The database is unlocked." msgstr "De gegevensbank is ontgrendeld." #: src/gedlib/dbcontext.c:319 msgid "keyfile is corrupt." msgstr "sleutelbestand is beschadigd." #: src/gedlib/dbcontext.c:322 msgid "keyfile is wrong alignment." msgstr "sleutelbestand is verkeerd uitgelijnd." #: src/gedlib/dbcontext.c:325 msgid "keyfile is wrong version." msgstr "sleutelbestand is verkeerde versie." #: src/gedlib/dbcontext.c:328 msgid "Existing database found." msgstr "Bestaande gegevensbank gevonden." #: src/gedlib/dbcontext.c:332 #, fuzzy, c-format msgid "The database is already opened for read access by %d user." msgid_plural "The database is already opened for read access by %d users." msgstr[0] "" "De gegevensbank is al geopend voor leestoegang door %d gebruikers.\n" " " msgstr[1] "" "De gegevensbank is al geopend voor leestoegang door %d gebruikers.\n" " " #: src/gedlib/dbcontext.c:338 msgid "Invalid properties set for new database" msgstr "Ongeldige eigenschappen opgegeven voor nieuwe gegevensbank" #: src/gedlib/dbcontext.c:341 msgid "Undefined database error -- fix program." msgstr "Ongedefinieerde gegevensbankfout -- programma herstellen." #: src/gedlib/gedcom.c:112 msgid "Missing NAME line in INDI record; record ignored.\n" msgstr "NAAM-regel ontbreekt in INDI-opgave; opgave genegeerd.\n" #: src/gedlib/init.c:228 src/tools/btedit.c:207 #, fuzzy, c-format msgid "Copyright (C) 1991-2007 Thomas T. Wetmore IV et al." msgstr "Auteursrecht(c) 1991 tot 1996, door T. T. Wetmore IV" #: src/gedlib/init.c:230 src/tools/btedit.c:209 #, c-format msgid "" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." msgstr "" #: src/gedlib/init.c:235 src/tools/btedit.c:214 #, c-format msgid "Written by Tom Wetmore. Maintained at lifelines.sourceforge.net." msgstr "" #: src/gedlib/keytonod.c:686 #, c-format msgid "Database error caused by reference to nonexisting key <%s>." msgstr "" #: src/gedlib/keytonod.c:687 msgid "It might be possible to fix this with btedit." msgstr "" #: src/gedlib/keytonod.c:688 msgid "Neighboring keys include:" msgstr "" #: src/gedlib/keytonod.c:1045 #, c-format msgid "Bad cache entry <%s> != <%s>" msgstr "" #: src/gedlib/keytonod.c:1072 #, c-format msgid "Cache [%s] overflowed its max size (%d)" msgstr "" #: src/gedlib/messages.c:44 msgid "You must identify a database." msgstr "U moet een gegevensbank identificeren." #: src/gedlib/messages.c:45 msgid "What directory holds (or will hold) the LifeLines database? (? to list)" msgstr "" "Welke map bevat (of zal bevatten) de LifeLines gegevensbank? (? om lijst " "weer te geven)" #: src/gedlib/messages.c:46 msgid "enter path: " msgstr "geef pad in: " #: src/gedlib/messages.c:47 msgid "There is no LifeLines database in that directory." msgstr "Er is geen LifeLines gegevensbank in die map." #: src/gedlib/messages.c:48 msgid "Do you want to create a database there?" msgstr "Wilt u daar een gegevensbank maken?" #: src/gedlib/messages.c:49 msgid "Argument to lock (-l) must be y or n." msgstr "Argument om te vergrendelen (-l) moet j of n zijn." #: src/gedlib/messages.c:50 msgid "Cannot remove last person from family." msgstr "Kan laatste persoon van de familie niet verwijderen." #: src/gedlib/messages.c:52 #, fuzzy msgid "lines [-adkrwiflntcuFxoCzI] [database] # Use -F for Finnish database" msgstr "" "regels [-adkrwiflntcuFxoC] [gegevensbank] # Gebruik -F voor Finse " "gegevensbank" #: src/gedlib/messages.c:54 #, fuzzy msgid "lines [-adkrwiflntcuxoCzI] [database] # Finnish database" msgstr "regels [-adkrwiflntcuxoC] [gegevensbank] # Finse gegevensbank" #: src/gedlib/messages.c:56 #, fuzzy msgid "lines [-adkrwiflntcuxoCzI] [database]" msgstr "regels [-adkrwiflntcuxoC] [gegevensbank]" #: src/gedlib/messages.c:58 msgid "The database is read only; you may not add records." msgstr "De gegevensbank is enkel lezen; u mag geen opgaven toevoegen." #: src/gedlib/messages.c:59 msgid "The database is read only; you may not change records." msgstr "De gegevensbank is enkel lezen; u mag geen opgaven veranderen." #: src/gedlib/messages.c:60 msgid "The database is read only; you may not merge records." msgstr "De gegevensbank is enkel lezen; u mag geen opgaven samenvoegen." #: src/gedlib/messages.c:61 msgid "The database is read only; you may not remove records." msgstr "De gegevensbank is enkel lezen; u mag geen opgaven verwijderen." #: src/gedlib/messages.c:62 msgid "The database is read only." msgstr "De gegevensbank is enkel lezen." #: src/gedlib/messages.c:64 #, fuzzy msgid "Name, key, refn, list, or @:" msgstr "geef naam, sleutel, refn of lijst in:" #: src/gedlib/messages.c:65 msgid "enter key or refn: " msgstr "geef sleutel of refn in: " #: src/gedlib/messages.c:66 msgid "Please choose the child to remove from the family." msgstr "Kies het kind om uit de familie te verwijderen." #: src/gedlib/messages.c:67 msgid "Please choose the spouse/parent to remove from the family." msgstr "Kies de partner/ouder om uit de familie te verwijderen." #: src/gedlib/messages.c:68 msgid "From which family is the child to be removed?" msgstr "Uit welke familie moet het kind worden verwijderd?" #: src/gedlib/messages.c:69 msgid "From which family is the spouse/parent to be removed?" msgstr "Uit welke familie moet de partner/ouder worden verwijderd?" #: src/gedlib/messages.c:70 msgid "Identify family (enter nothing to identify by individual members)." msgstr "" "Familie identificeren (geef niets in om te identificeren met individuele " "leden)." #: src/gedlib/messages.c:71 msgid "Identify a spouse of the family, if known." msgstr "Identificeer een partner van de familie, wanneer bekend." #: src/gedlib/messages.c:72 msgid "Identify a child of the family, if known." msgstr "Identificeer een kind van de familie, wanneer bekend." #: src/gedlib/messages.c:73 msgid "Identify the first child to swap." msgstr "Identificeer het eerste kind om om te wisselen." #: src/gedlib/messages.c:74 msgid "Identify the second child to swap." msgstr "Identificeer het tweede kind om om te wisselen." #: src/gedlib/messages.c:75 msgid "Identify the child to reorder." msgstr "Identificeer het kind om opnieuw te ordenen." #: src/gedlib/messages.c:76 msgid "Identify the first family/spouse to swap." msgstr "Identificeer de eerste familie/partner om om te wisselen." #: src/gedlib/messages.c:77 msgid "Identify the second family/spouse to swap." msgstr "Identificeer de tweede familie/partner om om te wisselen." #: src/gedlib/messages.c:78 msgid "Please choose the spouse/parent to browse to." msgstr "Kies de partner/ouder om naar te bladeren." #: src/gedlib/messages.c:79 msgid "Please choose the first spouse/parent to browse to." msgstr "Kies de eerste partner/ouder om naar te bladeren." #: src/gedlib/messages.c:80 msgid "Please choose the second spouse/parent to browse to." msgstr "Kies de tweede partner/ouder om naar te bladeren." #: src/gedlib/messages.c:81 msgid "Please choose the child to browse to." msgstr "Kies het kind om naar te bladeren." #: src/gedlib/messages.c:82 msgid "Please choose the first child to browse to." msgstr "Kies het eerste kind om naar te bladeren." #: src/gedlib/messages.c:83 msgid "Please choose the second child to browse to." msgstr "Kies het tweede kind om naar te bladeren." #: src/gedlib/messages.c:84 msgid "Please choose the family to browse to." msgstr "Kies de familie om naar te bladeren." #: src/gedlib/messages.c:85 msgid "Enter Family Number to Browse to" msgstr "Geef het familienummer in om naar te bladeren" #: src/gedlib/messages.c:86 msgid "Please choose the first family to browse to." msgstr "Kies de eerste familie om naar te bladeren." #: src/gedlib/messages.c:87 msgid "Please choose the second family to browse to." msgstr "Kies de tweede familie om naar te bladeren." #: src/gedlib/messages.c:88 msgid "Please choose the father/husband to browse to." msgstr "Kies de vader/echtgenoot om naar te bladeren." #: src/gedlib/messages.c:89 msgid "Please choose the first father/husband to browse to." msgstr "Kies de eerste vader/echtgenoot om naar te bladeren." #: src/gedlib/messages.c:90 msgid "Please choose the second father/husband to browse to." msgstr "Kies de tweede vader/echtgenoot om naar te bladeren." #: src/gedlib/messages.c:91 msgid "Please choose the mother/wife to browse to." msgstr "Kies de moeder/echtgenote om naar te bladeren." #: src/gedlib/messages.c:92 msgid "Please choose the first mother/wife to browse to." msgstr "Kies de eerste moeder/echtgenote om naar te bladeren." #: src/gedlib/messages.c:93 msgid "Please choose the second mother/wife to browse to." msgstr "Kies de tweede moeder/echtgenote om naar te bladeren." #: src/gedlib/messages.c:94 msgid "Identify a parent in the family having children swapped." msgstr "" "Identificeer een ouder in de familie waarvan kinderen zijn omgewisseld." #: src/gedlib/messages.c:95 msgid "Whose families/spouses are to be swapped?" msgstr "Wiens families/partners moeten worden omgewisseld?" #: src/gedlib/messages.c:96 msgid "Identify one of the child's parents, if known." msgstr "Identificeer een van de ouders van het kind, wanneer gekend." #: src/gedlib/messages.c:98 src/liflines/scan.c:127 msgid "Enter pattern to match against refn." msgstr "Geef patroon in om overeen te stemmen met refn." #: src/gedlib/messages.c:100 #, fuzzy msgid "Please choose from among these people." msgstr "Kies uit dit overzicht." #: src/gedlib/messages.c:101 msgid "Please choose from among these records." msgstr "Kies uit dit overzicht." #: src/gedlib/messages.c:102 msgid "Is this the new child? " msgstr "Is dit het nieuwe kind? " #: src/gedlib/messages.c:103 msgid "Is this the new spouse? " msgstr "Is dit de nieuwe partner? " #: src/gedlib/messages.c:104 msgid "Is this the person? Select if so." msgstr "Is dit de persoon? Selecteer indien juist." #: src/gedlib/messages.c:105 #, fuzzy msgid "Is this the record? Select if so." msgstr "Is dit de persoon? Selecteer indien juist." #: src/gedlib/messages.c:106 msgid "Select the child the new child precedes or select last." msgstr "" #: src/gedlib/messages.c:107 msgid "Please identify next person to browse to." msgstr "Identificeer volgende persoon om naar te bladeren." #: src/gedlib/messages.c:108 msgid "Please identify record to browse to." msgstr "Identificeer opgave om naar te bladeren." #: src/gedlib/messages.c:109 msgid "Please identify one of the spouses." msgstr "Identificeer één van de partners." #: src/gedlib/messages.c:110 msgid "Please identify person or persons to browse to." msgstr "Identificeer persoon of personen om naar te bladeren." #: src/gedlib/messages.c:111 msgid "Please choose family create operation." msgstr "Kies familieaanmaakactie." #: src/gedlib/messages.c:112 msgid "Do you want to enter another name?" msgstr "Wilt u nog een naam ingeven?" #: src/gedlib/messages.c:114 msgid "This person is not a spouse or parent in any family." msgstr "Deze persoon is in geen enkele familie een partner of ouder." #: src/gedlib/messages.c:115 msgid "This person is not a child in any family." msgstr "Deze persoon is in geen enkele familie een kind." #: src/gedlib/messages.c:116 msgid "There is no one in the database with that name or key." msgstr "Er is niemand in de gegevensbank met die naam of sleutel." #: src/gedlib/messages.c:118 msgid "This person's father is not in the database." msgstr "De vader van deze persoon zit niet in de gegevensbank." #: src/gedlib/messages.c:119 msgid "This person's mother is not in the database." msgstr "De moeder van deze persoon zit niet in de gegevensbank." #: src/gedlib/messages.c:120 msgid "This person has no spouse in the database." msgstr "Deze persoon heeft geen partner in de gegevensbank." #: src/gedlib/messages.c:121 msgid "This person has no younger sibling in the database." msgstr "Deze persoon heeft geen jongere broer of zus in de gegevensbank." #: src/gedlib/messages.c:122 msgid "This person has no older sibling in the database." msgstr "Deze persoon heeft geen oudere broer of zus in de gegevensbank." #: src/gedlib/messages.c:123 msgid "This person's parents are not in the database." msgstr "De ouders van deze persoon zitten niet in de gegevensbank." #: src/gedlib/messages.c:124 msgid "This family has no male spouse/parent in the database." msgstr "Deze familie heeft geen mannelijke partner/ouder in de gegevensbank." #: src/gedlib/messages.c:125 msgid "This family has no female spouse/parent in the database." msgstr "Deze familie heeft geen vrouwelijke partner/ouder in de gegevensbank." #: src/gedlib/messages.c:126 msgid "There are no children in the database for this family." msgstr "Er zitten geen kinderen in de gegevensbank voor deze familie." #: src/gedlib/messages.c:127 msgid "This person has no children in the database." msgstr "Deze persoon heeft geen kinderen in de gegevensbank." #: src/gedlib/messages.c:128 msgid "No such child." msgstr "Kind niet gevonden." #: src/gedlib/messages.c:129 msgid "No such person." msgstr "Persoon niet gevonden." #: src/gedlib/messages.c:130 msgid "No such record." msgstr "Opgave niet gevonden." #: src/gedlib/messages.c:131 msgid "No such family." msgstr "Familie niet gevonden." #: src/gedlib/messages.c:132 msgid "No sources present." msgstr "Geen bronnen aanwezig." #: src/gedlib/messages.c:133 msgid "Please choose the source to view." msgstr "Kies de bron om te bekijken." #: src/gedlib/messages.c:134 msgid "No events present." msgstr "Geen gebeurtenissen aanwezig." #: src/gedlib/messages.c:135 msgid "Please choose the event to view." msgstr "Kies het evenement om te bekijken." #: src/gedlib/messages.c:136 msgid "No others present." msgstr "Geen andere aanwezig." #: src/gedlib/messages.c:137 msgid "Please choose the other to view." msgstr "Kies het andere om te bekijken." #: src/gedlib/messages.c:138 msgid "No notes present." msgstr "Geen notities beschikbaar." #: src/gedlib/messages.c:139 msgid "Please choose the note to view." msgstr "Kies de notitie om te bekijken." #: src/gedlib/messages.c:140 msgid "No references present." msgstr "Geen verwijzingen beschikbaar." #: src/gedlib/messages.c:141 msgid "Please choose the reference to view." msgstr "Kies de verwijzing om te bekijken." #: src/gedlib/messages.c:142 msgid "Duplicated REFN - please choose." msgstr "REFN gekopiëerd - kies a.u.b." #: src/gedlib/messages.c:144 msgid "New spouse/parent has unknown sex; can't add to family." msgstr "" "Nieuwe partner/ouder heeft onbekend geslacht; kan niet toevoegen aan familie." #: src/gedlib/messages.c:145 msgid "The persons are not of opposite sex; can't make family." msgstr "" "De personen zijn niet van het tegengestelde geslacht; kan familie niet maken." #: src/gedlib/messages.c:146 msgid "This person is not a spouse in the family; can't remove." msgstr "Deze persoon is geen partner in de familie; kan niet verwijderen." #: src/gedlib/messages.c:147 msgid "This person is not a child in the family; can't remove." msgstr "Deze persoon is geen kind in de familie; kan niet verwijderen." #: src/gedlib/messages.c:148 msgid "This person's sex is not known; can't make family." msgstr "Het geslacht van deze persoon is niet bekend; kan familie niet maken." #: src/gedlib/messages.c:149 msgid "This family already has a husband/male parent." msgstr "Deze familie heeft al een echtgenoot/vader." #: src/gedlib/messages.c:150 msgid "This family already has a wife/female parent." msgstr "Deze familie heeft al een echtgenote/moeder." #: src/gedlib/messages.c:151 msgid "This family has both spouses/parents; can't add another." msgstr "Deze familie heeft beide partners/ouders; kan geen meer toevoegen." #: src/gedlib/messages.c:152 msgid "This family has neither spouse/parent; can't remove." msgstr "" "Deze familie heeft geen van beide partners/ouders; kan niet verwijderen." #: src/gedlib/messages.c:153 msgid "This family still has links; not removed." msgstr "Deze familie heeft nog banden; niet verwijderd." #: src/gedlib/messages.c:155 msgid "Choose a family by selecting a spouse/parent." msgstr "Kies een familie door een partner/ouder te selecteren." #: src/gedlib/messages.c:156 msgid "" "Do you want to edit the person again? (Otherwise changes will be discarded.)" msgstr "" "Wilt u de persoon opnieuw bewerken? (Anders worden veranderingen teniet " "gedaan.)" #: src/gedlib/messages.c:157 msgid "Do you want to edit the person again?" msgstr "Wilt u de persoon opnieuw bewerken?" #: src/gedlib/messages.c:158 msgid "" "Do you want to edit the family again? (Otherwise changes will be discarded.)" msgstr "" "Wilt u de familie opnieuw bewerken? (Anders worden veranderingen teniet " "gedaan.)" #: src/gedlib/messages.c:159 msgid "Do you want to edit the family again?" msgstr "Wilt u de familie opnieuw bewerken?" #: src/gedlib/messages.c:160 msgid "" "Do you want to edit the source again? (Otherwise changes will be discarded.)" msgstr "" "Wilt u de bron opnieuw bewerken? (Anders worden veranderingen teniet gedaan.)" #: src/gedlib/messages.c:161 msgid "Do you want to edit the source again?" msgstr "Wilt u de bron opnieuw bewerken?" #: src/gedlib/messages.c:162 msgid "" "Do you want to edit the event again? (Otherwise changes will be discarded.)" msgstr "" "Wilt u de gebeurtenis opnieuw bewerken? (Anders worden veranderingen teniet " "gedaan.)" #: src/gedlib/messages.c:163 msgid "Do you want to edit the event again?" msgstr "Wilt u de gebeurtenis opnieuw bewerken?" #: src/gedlib/messages.c:164 msgid "" "Do you want to edit the record again? (Otherwise changes will be discarded.)" msgstr "" "Wilt u de opgave opnieuw bewerken? (Anders worden veranderingen teniet " "gedaan.)" #: src/gedlib/messages.c:165 msgid "Do you want to edit the record again?" msgstr "Wilt u de gebeurtenis opnieuw bewerken?" #: src/gedlib/messages.c:166 msgid "Whom do you want to edit?" msgstr "Wie wilt u bewerken?" #: src/gedlib/messages.c:167 msgid "Which source record do you want to edit?" msgstr "Welke bronopgave wilt u bewerken?" #: src/gedlib/messages.c:168 msgid "Which event record do you want to edit?" msgstr "Welke gebeurtenisopgave wilt u bewerken?" #: src/gedlib/messages.c:169 msgid "What record do you want to edit?" msgstr "Welke opgave wilt u bewerken?" #: src/gedlib/messages.c:171 msgid "Do you really want to add this person to the database?" msgstr "Wilt u deze persoon echt toevoegen aan de gegevensbank?" #: src/gedlib/messages.c:172 msgid "Do you really want to add this family to the database?" msgstr "Wilt u deze familie echt toevoegen aan de gegevensbank?" #: src/gedlib/messages.c:173 msgid "Do you really want to add this child to the family?" msgstr "Wilt u dit kind echt toevoegen aan de familie?" #: src/gedlib/messages.c:174 msgid "Do you really want to add this spouse/parent to the family?" msgstr "Wilt u deze partner/ouder echt toevoegen aan de familie?" #: src/gedlib/messages.c:175 msgid "Do you really want to add this source to the database?" msgstr "Wilt u deze bron echt toevoegen aan de gegevensbank?" #: src/gedlib/messages.c:176 msgid "Do you really want to add this event to the database?" msgstr "Wilt u deze gebeurtenis echt toevoegen aan de gegevensbank?" #: src/gedlib/messages.c:177 msgid "Do you really want to add this record to the database?" msgstr "Wilt u deze opgave echt toevoegen aan de gegevensbank?" #: src/gedlib/messages.c:178 msgid "Do you really want to update this person?" msgstr "Wilt u deze persoon echt bijwerken?" #: src/gedlib/messages.c:179 msgid "Do you really want to update this family?" msgstr "Wilt u deze familie echt bijwerken?" #: src/gedlib/messages.c:180 msgid "Do you really want to update this source?" msgstr "Wilt u deze bron echt bijwerken?" #: src/gedlib/messages.c:181 msgid "Do you really want to update this event?" msgstr "Wilt u deze gebeurtenis echt bijwerken?" #: src/gedlib/messages.c:182 msgid "Do you really want to update this record?" msgstr "Wilt u deze opgave echt bijwerken?" #: src/gedlib/messages.c:183 msgid "Are you sure you want to remove the person from the database?" msgstr "Bent u zeker dat u deze persoon van de gegevensbank wilt verwijderen?" #: src/gedlib/messages.c:184 #, fuzzy msgid "Are you sure you want to remove this record from the database?" msgstr "Bent u zeker dat u deze persoon van de gegevensbank wilt verwijderen?" #: src/gedlib/messages.c:185 #, fuzzy msgid "Remove this family record?" msgstr "Deze familie-opgave verwijderen?" #: src/gedlib/messages.c:186 #, c-format msgid "(Family %s (%s, %s)" msgstr "(Familie %s (%s, %s)" #: src/gedlib/messages.c:187 msgid "Do you really want to merge these two persons?" msgstr "Wilt u deze twee personen echt samenvoegen?" #: src/gedlib/messages.c:188 msgid "Do you really want to merge these two families?" msgstr "Wilt u deze twee families echt samenvoegen?" #: src/gedlib/messages.c:189 #, fuzzy msgid "Do you really want to swap spouse orders?" msgstr "Wilt u deze opgave echt bijwerken?" #: src/gedlib/messages.c:190 #, fuzzy msgid "Do you really want to reorder children?" msgstr "Wilt u deze gebeurtenis echt bijwerken?" #: src/gedlib/messages.c:191 msgid "Do you really want to remove this child from his/her family?" msgstr "Wilt u dit kind echt verwijderen van zijn/haar familie?" #: src/gedlib/messages.c:192 msgid "Do you really want to remove this spouse from his/her family?" msgstr "Wilt u deze partner echt verwijderen van zijn/haar familie?" #: src/gedlib/messages.c:193 msgid "Too many spouses to display full list" msgstr "Teveel partners om de hele lijst weer te geven" #: src/gedlib/messages.c:194 msgid "These persons are children in different families." msgstr "Deze personen zijn kinderen in verschillende families." #: src/gedlib/messages.c:195 msgid "Are you sure you want to merge them?" msgstr "Bent u zeker dat u hen wilt samenvoegen?" #: src/gedlib/messages.c:197 msgid "There is something wrong with the data." msgstr "Er is iets verkeerd met de gegevens." #: src/gedlib/messages.c:198 msgid "Please identify the child." msgstr "Identificeer het kind." #: src/gedlib/messages.c:199 msgid "Please identify one of the child's siblings." msgstr "Identificeer één van de broers of zussen van het kind." #: src/gedlib/messages.c:200 msgid "Identify spouse/parent to add to an existing family." msgstr "Identificeer partner/ouder om toe te voegen aan een bestaande familie." #: src/gedlib/messages.c:201 msgid "Identify spouse/parent already in family, if known." msgstr "Identificeer partner/ouder die al in familie zit, wanneer bekend." #: src/gedlib/messages.c:202 msgid "Identify child already in family." msgstr "Kind identificeren dat al in familie zit." #: src/gedlib/messages.c:204 msgid "This person is already a child in a family." msgstr "Deze persoon is al een kind in een familie." #: src/gedlib/messages.c:205 msgid "Identify a spouse/parent for the new family." msgstr "Identificeer een partner/ouder voor de nieuwe familie." #: src/gedlib/messages.c:206 msgid "Identify the second spouse/parent, if known." msgstr "Identificeer de tweede partner/ouder, wanneer bekend." #: src/gedlib/messages.c:207 msgid "Both families must have husbands/fathers." msgstr "Beide families moeten echtgenoten/vaders hebben." #: src/gedlib/messages.c:208 msgid "Both families must have wives/mothers." msgstr "Beide families moeten echtgenotes/moeders hebben." #: src/gedlib/messages.c:210 msgid "Identify spouse/parent in second family, if known." msgstr "Identificeer partner/ouder in tweede familie, wanneer bekend." #: src/gedlib/messages.c:211 msgid "Identify child in second family." msgstr "Identificeer kind in tweede familie." #: src/gedlib/messages.c:212 msgid "Identify second person to browse to." msgstr "Identificeer tweede persoon om naar te bladeren." #: src/gedlib/messages.c:214 msgid "Create a family with this person as a child." msgstr "Een familie maken met deze persoon als een kind." #: src/gedlib/messages.c:215 msgid "Create a family with this person as a spouse/parent." msgstr "Een familie maken met deze persoon als een partner/ouder." #: src/gedlib/messages.c:216 msgid "This family has less than two children; can't swap." msgstr "Deze familie heeft minder dan 2 kinderen; kan niet omwisselen." #: src/gedlib/messages.c:217 msgid "This person is a spouse/parent in less than two families." msgstr "Deze persoon is een partner/ouder in minder dan twee families." #: src/gedlib/messages.c:218 msgid "Something impossible happened. Contact tech support." msgstr "Iets onmogelijk is gebeurd. Contacteer de technische dienst." #: src/gedlib/messages.c:220 msgid "The two children were swapped." msgstr "De twee kinderen zijn omgewisseld." #: src/gedlib/messages.c:221 msgid "The two families were swapped." msgstr "De twee families zijn omgekeerd." #: src/gedlib/messages.c:222 msgid "The child was removed from his/her family." msgstr "Het kind is verwijderd van zijn/haar familie." #: src/gedlib/messages.c:223 msgid "The spouse was removed from his/her family." msgstr "De partner is verwijderd van zijn/haar familie." #: src/gedlib/messages.c:225 msgid "A person cannot be merged with him/herself." msgstr "Een persoon kan niet worden samengevoegd met zichzelf." #: src/gedlib/messages.c:226 msgid "A family cannot be merged with itself." msgstr "Een familie kan niet worden samengevoegd met zichzelf." #: src/gedlib/messages.c:227 msgid "Two persons with different parents cannot be merged." msgstr "" "Twee personen met verschillende ouders kunnen niet worden samengevoegd." #: src/gedlib/messages.c:228 msgid "Two parents of different sexes cannot be merged." msgstr "" "Twee ouders met verschillende geslachten kunnen niet worden samengevoegd." #: src/gedlib/messages.c:229 msgid "The families have different fathers/husbands; cannot merge." msgstr "" "De families hebben verschillende vaders/echtgenoten; kan niet samenvoegen." #: src/gedlib/messages.c:230 msgid "The families have different wives/mothers; cannot merge." msgstr "" "De families hebben verschillende echtgenotes/moeders; kan niet samenvoegen." #: src/gedlib/messages.c:231 msgid "Who do you want to remove from the database?" msgstr "Wie wilt u verwijderen uit de gegevensbank?" #: src/gedlib/messages.c:232 #, fuzzy msgid "What record do you want to remove from the database?" msgstr "Wie wilt u verwijderen uit de gegevensbank?" #: src/gedlib/messages.c:233 msgid "Place the child last in the family." msgstr "Het kind laatst in de familie plaatsen." #: src/gedlib/messages.c:234 msgid "Error in abbreviations file." msgstr "Fout in afkortingenbestand." #: src/gedlib/messages.c:235 msgid "Error in user options file." msgstr "Fout in gebruikersoptiesbestand." #: src/gedlib/messages.c:236 msgid "Error in character mapping file." msgstr "" #: src/gedlib/messages.c:237 #, c-format msgid "(Separator is %s)" msgstr "(Scheidingsteken is %s)" #: src/gedlib/messages.c:238 msgid "Do you want to re-edit it?" msgstr "Wilt u het opnieuw bewerken?" #: src/gedlib/messages.c:240 #, c-format msgid "%s was added to the database." msgstr "%s is toegevoegd aan de gegevensbank." #: src/gedlib/messages.c:241 #, c-format msgid "%s was added as a child." msgstr "%s is toegevoegd als een kind." #: src/gedlib/messages.c:242 #, c-format msgid "%s was added as a spouse and/or parent." msgstr "%s is toegevoegd als een partner en/of ouder." #: src/gedlib/messages.c:243 msgid "The new family was added to the database." msgstr "De nieuwe familie is toegevoegd aan de gegevensbank." #: src/gedlib/messages.c:244 #, c-format msgid "%s was modified in the database." msgstr "%s is gewijzigd in de gegevensbank." #: src/gedlib/messages.c:245 msgid "The family was modified in the database." msgstr "De familie is gewijzigd in de gegevensbank." #: src/gedlib/messages.c:246 msgid "The source was modified in the database." msgstr "De bron is gewijzigd in de gegevensbank." #: src/gedlib/messages.c:247 msgid "The event was modified in the database." msgstr "De gebeurtenis is gewijzigd in de gegevensbank." #: src/gedlib/messages.c:248 msgid "The record was modified in the database." msgstr "De structuur is gewijzigd in de gegevensbank." #: src/gedlib/messages.c:250 #, c-format msgid "Could not open file %s." msgstr "Kon file %s niet openen." #: src/gedlib/messages.c:251 msgid "Filepath too long." msgstr "Bestandspad te lang." #: src/gedlib/messages.c:253 #, fuzzy msgid "Please mark a record first." msgstr "Markeer eerst een persoon." #: src/gedlib/messages.c:255 #, c-format msgid "The current list is now named %s." msgstr "De huidige lijst is nu %s genoemd." #: src/gedlib/messages.c:256 msgid "The current list is not named." msgstr "De huidige lijst heeft geen naam." #: src/gedlib/messages.c:257 msgid "What should the name of this list be?" msgstr "Wat moet de naam van deze lijst zijn?" #: src/gedlib/messages.c:258 msgid "No persons were added to the current list." msgstr "Er zijn geen personen toegevoegd aan de huidige lijst." #: src/gedlib/messages.c:259 msgid "What persons or list do you want to add to the current list?" msgstr "Welke personen of lijst wilt u toevoegen aan de huidige lijst?" #: src/gedlib/messages.c:260 msgid "You are at the bottom of the list." msgstr "U bent aan de onderkant van de lijst." #: src/gedlib/messages.c:261 msgid "You are at the top of the list." msgstr "U bent aan de top van de lijst." #: src/gedlib/messages.c:262 msgid "New persons were added to the current list." msgstr "Er zijn nieuwe personen toegevoegd aan de huidige lijst." #: src/gedlib/messages.c:264 msgid "System error: illegal map code" msgstr "Systeemfout: illegale mapcode" #: src/gedlib/messages.c:265 msgid "No such translation table in this database" msgstr "Vertalingstabel niet gevonden in deze gegevensbank" #: src/gedlib/messages.c:268 msgid "Because of errors the GEDCOM file was not loaded.\n" msgstr "Wegens foutmeldingen is het GEDCOM-bestand niet geladen.\n" #: src/gedlib/messages.c:269 msgid "No errors; adding records with original keys..." msgstr "" "Geen fouten; bezig met het toevoegen van opgaven met originele sleutels..." #: src/gedlib/messages.c:270 msgid "No errors; adding records with new keys..." msgstr "" "Geen foutmeldingen; bezig met het toevoegen van opgaven met nieuwe " "sleutels..." #: src/gedlib/messages.c:271 msgid "Use original keys from GEDCOM file?" msgstr "Originele sleutels uit GEDCOM-bestand gebruiken?" #: src/gedlib/messages.c:272 #, fuzzy msgid "Proceed?" msgstr "Voortgaan?" #: src/gedlib/messages.c:273 msgid "Enter name of output archive file." msgstr "Geef naam van uitvoerarchiefbestand in." #: src/gedlib/messages.c:274 #, c-format msgid "Database `%s' has been saved in `%s'." msgstr "Gegevensbank `%s' is opgeslagen in `%s'." #: src/gedlib/messages.c:275 msgid "Enter name of translation table file to write" msgstr "Geef de naam in van het vertalingstabelbestand om te schrijven" #: src/gedlib/messages.c:276 msgid "Enter name of translation table file to read" msgstr "Geef naam in van vertalingstabelbestand om te lezen" #: src/gedlib/messages.c:277 #, c-format msgid "Line %d: The person defined here has no key: skipped." msgstr "" "Regel %d: De persoon hier gedefinieerd heeft geen sleutel; overgeslagen." #: src/gedlib/messages.c:278 #, c-format msgid "Line %d: The family defined here has no key." msgstr "Regel %d: De familie hier gedefinieerd heeft geen sleutel." #: src/gedlib/messages.c:279 #, c-format msgid "Lines %d and %d: Person %s is multiply defined: skipped." msgstr "Regels %d en %d: Persoon %s is meermaals gedefinieerd: overgeslagen." #: src/gedlib/messages.c:280 #, c-format msgid "Lines %d and %d: Family %s is multiply defined." msgstr "Regels %d en %d: Familie %s is meermaals gedefinieerd." #: src/gedlib/messages.c:281 #, c-format msgid "Line %d: Person %s has an incorrect key: skipped." msgstr "Regel %d: Persoon %s heeft een verkeerde sleutel: overgeslagen." #: src/gedlib/messages.c:282 #, c-format msgid "Line %d: Family %s has an incorrect key." msgstr "Regel %d: Familie %s heeft een verkeerde sleutel." #: src/gedlib/messages.c:283 #, c-format msgid "Person %s is referred to but not defined." msgstr "Naar persoon %s wordt verwezen maar is niet gedefinieerd." #: src/gedlib/messages.c:284 #, c-format msgid "Family %s is referred to but not defined." msgstr "Naar familie %s wordt verwezen maar is niet gedefinieerd." #: src/gedlib/messages.c:285 #, c-format msgid "Source %s is referred to but not defined." msgstr "Naar bron %s wordt verwezen maar is niet gedefinieerd." #: src/gedlib/messages.c:286 #, c-format msgid "Event %s is referred to but not defined." msgstr "Naar gebeurtenis %s wordt verwezen maar is niet gedefinieerd." #: src/gedlib/messages.c:287 #, c-format msgid "Line %d: This line has a level number that is too large." msgstr "Regel %d: Deze regel heeft een niveaunummer dat te groot is." #: src/gedlib/messages.c:288 #, c-format msgid "Line %d: Person defined here has no name." msgstr "Regel %d: Persoon hier gedefinieerd heeft geen naam." #: src/gedlib/messages.c:294 msgid "" msgstr "" #: src/gedlib/messages.c:296 msgid "What is the name of the program?" msgstr "Wat is de naam van het programma?" #: src/gedlib/messages.c:297 msgid "Please enter the name of the GEDCOM file." msgstr "Geef de naam van het GEDCOM-bestand in." #: src/gedlib/messages.c:299 msgid "What is the name of the output file?" msgstr "Wat is de naam van het uitvoerbestand?" #: src/gedlib/messages.c:300 msgid "Malformed configuration file: line too long." msgstr "Verkeerd gevormd configuratiebestand: regel te lang." #: src/gedlib/messages.c:301 msgid "Unsupported file encoding (no multibyte encodings except UTF-8)." msgstr "" "Niet-ondersteunde bestandscodering (geen multibyte coderingen behalve UTF-8)." #: src/gedlib/messages.c:302 #, c-format msgid "Unsupported file encoding: %s." msgstr "Niet-ondersteunde bestandscodering: %s." #: src/gedlib/messages.c:305 msgid "Enter string for program" msgstr "Geef tekenreeks voor programma in" #: src/gedlib/messages.c:306 msgid "enter string: " msgstr "geef of tekenreeks in: " #: src/gedlib/messages.c:307 msgid "enter integer:" msgstr "geef geheel getal in:" #: src/gedlib/messages.c:308 msgid "enter name: " msgstr "geef naam in: " #: src/gedlib/messages.c:309 msgid "Strike any key to continue." msgstr "Sla een toets aan om verder te gaan." #: src/gedlib/messages.c:313 msgid "" "0 SOUR\n" "1 REFN\n" "1 TITL Title\n" "1 AUTH Author" msgstr "" "0 SOUR\n" "1 REFN\n" "1 TITL Titel\n" "1 AUTH Auteur" #: src/gedlib/messages.c:314 msgid "" "0 EVEN\n" "1 REFN\n" "1 DATE\n" "1 PLAC\n" "1 INDI\n" " 2 NAME\n" " 2 ROLE\n" "1 SOUR" msgstr "" "0 EVEN\n" "1 REFN\n" "1 DATE\n" "1 PLAC\n" "1 INDI\n" " 2 NAME\n" " 2 ROLE\n" "1 SOUR" #: src/gedlib/messages.c:315 msgid "" "0 XXXX\n" "1 REFN" msgstr "" "0 XXXX\n" "1 REFN" #: src/gedlib/messages.c:319 msgid "The file is as positioned at EOF." msgstr "Het bestand is geplaatst op bestandseinde." #: src/gedlib/messages.c:320 #, c-format msgid "Line %d: This line is empty; EOF?" msgstr "Regel %d: Deze regel is leeg; bestandseinde?" #: src/gedlib/messages.c:321 #, c-format msgid "Line %d: This line is too long." msgstr "Regel %d: Deze regel is te lang." #: src/gedlib/messages.c:322 #, c-format msgid "Line %d: This line has no level number." msgstr "Regel %d: Deze regel heeft geen niveaunummer." #: src/gedlib/messages.c:323 #, c-format msgid "Line %d: This line is incomplete." msgstr "Regel %d: Deze regel is onvolledig." #: src/gedlib/messages.c:324 #, c-format msgid "Line %d: This line has a bad link." msgstr "Regel %d: Deze regel heeft een slechte koppeling." #: src/gedlib/messages.c:325 #, c-format msgid "Line %d: This line needs white space before tag." msgstr "Regel %d: Deze regel heeft een witte spatie nodig voor tag." #: src/gedlib/messages.c:326 #, c-format msgid "Line %d: This line has an illegal level." msgstr "Regel %d: Deze regel heeft een illegaal niveau." #: src/gedlib/messages.c:327 msgid "The record begins at wrong level." msgstr "De opgave begint op verkeerd niveau." #: src/gedlib/messages.c:330 msgid "" "\n" "Aborting now. Core dump? [y/n]" msgstr "" "\n" "Nu bezig met afbreken. Geheugendump? [j/n]" #: src/gedlib/messages.c:331 msgid "" "Looks like a program was running.\n" "Check file %1 around line %2.\n" msgstr "" "Het lijkt erop dat een programma werd uitgevoerd.\n" "Controleer bestand %1 omstreeks regel %2.\n" #: src/gedlib/messages.c:332 msgid "signal %1: %2" msgstr "signaal %1: %2" #: src/gedlib/messages.c:334 msgid "SIGNAL 0" msgstr "SIGNAAL 0" #: src/gedlib/messages.c:335 msgid "HANGUP" msgstr "OPHANGEN" #: src/gedlib/messages.c:336 msgid "INTERRUPT" msgstr "ONDERBREKEN" #: src/gedlib/messages.c:337 msgid "QUIT" msgstr "AFSLUITEN" #: src/gedlib/messages.c:338 msgid "ILLEGAL INSTRUCTION" msgstr "ILLEGALE INSTRUCTIE" #: src/gedlib/messages.c:339 msgid "TRACE TRAP" msgstr "VALKUIL OPSPOREN" #: src/gedlib/messages.c:340 msgid "ABORT" msgstr "AFBREKEN" #: src/gedlib/messages.c:341 msgid "EMT INST" msgstr "" #: src/gedlib/messages.c:342 msgid "FLOATING POINT EXCEPTION" msgstr "" #: src/gedlib/messages.c:343 msgid "KILL" msgstr "DODEN" #: src/gedlib/messages.c:344 msgid "BUS ERROR" msgstr "BUS FOUT" #: src/gedlib/messages.c:345 msgid "SEGMENTATION ERROR" msgstr "SEGMENTATIE FOUT" #: src/gedlib/messages.c:346 msgid "SYSTEM CALL ERROR" msgstr "SYSTEEMFUNCTIE FOUT" #: src/gedlib/messages.c:347 msgid "PIPE WRITE" msgstr "" #: src/gedlib/messages.c:348 msgid "ALARM CLOCK" msgstr "ALARMKLOK" #: src/gedlib/messages.c:350 msgid "TERMINATE FROM KILL" msgstr "BEËINDIGEN DOOR DODEN" #: src/gedlib/messages.c:351 msgid "USER SIGNAL 1" msgstr "GEBRUIKERSSIGNAAL 1" #: src/gedlib/messages.c:352 msgid "USER SIGNAL 2" msgstr "GEBRUIKERSSIGNAAL 2" #: src/gedlib/messages.c:353 msgid "DEATH OF CHILD" msgstr "DOOD VAN KIND" #: src/gedlib/messages.c:354 msgid "POWER-FAIL RESTART" msgstr "STROOMTEKORT HERSTARTEN" #: src/gedlib/messages.c:355 msgid "WINDOW CHANGE" msgstr "VENSTERVERANDERING" #: src/gedlib/messages.c:356 msgid "Unknown signal" msgstr "Onbekend signaal" #: src/gedlib/messages.c:360 msgid "person" msgstr "persoon" #: src/gedlib/messages.c:361 msgid ", of " msgstr "" #: src/gedlib/messages.c:362 msgid "father" msgstr "vader" #: src/gedlib/messages.c:363 msgid "mother" msgstr "moeder" #: src/gedlib/messages.c:364 msgid "spouse" msgstr "partner" #: src/gedlib/messages.c:365 msgid "child" msgstr "kind" #: src/gedlib/messages.c:368 msgid "m. " msgstr "" #: src/gedlib/messages.c:370 msgid "div. " msgstr "gesch." #: src/gedlib/messages.c:372 msgid "b. " msgstr "" #: src/gedlib/messages.c:374 msgid "bap. " msgstr "" #: src/gedlib/messages.c:376 msgid "d. " msgstr "" #: src/gedlib/messages.c:378 msgid "bur. " msgstr "begr." #: src/gedlib/messages.c:380 msgid "cb. " msgstr "" #: src/gedlib/messages.c:382 msgid "married: " msgstr "getrouwd: " #: src/gedlib/messages.c:383 msgid "born: " msgstr "geboren: " #: src/gedlib/messages.c:384 msgid "bapt: " msgstr "" #: src/gedlib/messages.c:385 msgid "died: " msgstr "gestorven: " #: src/gedlib/messages.c:386 msgid "buri: " msgstr "begraven: " #: src/gedlib/messages.c:390 msgid "You cannot edit the INDI line in a person record." msgstr "U kunt de INDI-regel in een persoonsopgave niet bewerken." #: src/gedlib/messages.c:391 msgid "You cannot edit the FAMC line in a person record." msgstr "U kunt de FAMC-regel in een persoonsopgave niet bewerken." #: src/gedlib/messages.c:392 msgid "You cannot edit the FAMS lines in a person record." msgstr "U kunt de FAMS-regel in een persoonsopgave niet bewerken." #: src/gedlib/messages.c:393 msgid "You cannot edit the FAM line in a family record." msgstr "U kunt de FAM-regel in een familie-opgave niet bewerken." #: src/gedlib/messages.c:394 msgid "You cannot edit the HUSB line in a family record." msgstr "U kunt de HUSB-regel (echtgenoot) niet bewerken in een familie-opgave." #: src/gedlib/messages.c:395 msgid "You cannot edit the WIFE line in a family record." msgstr "U kunt de WIFE-regel (echtgenote) niet bewerken in een familie-opgave." #: src/gedlib/messages.c:396 msgid "You cannot edit the CHIL lines in a family record." msgstr "U kunt de KIND-regel in een familie-opgave niet bewerken." #: src/gedlib/messages.c:397 msgid "The record is empty." msgstr "De opgave is leeg." #: src/gedlib/messages.c:398 msgid "The record does not begin with an INDI line." msgstr "De opgave begint niet met een INDI-regel." #: src/gedlib/messages.c:399 msgid "The record does not begin with a FAM line." msgstr "De opgave begint niet met een FAM-regel." #: src/gedlib/messages.c:400 msgid "The record does not begin with a SOUR line." msgstr "De opgave begint niet met een SOUR-regel." #: src/gedlib/messages.c:401 msgid "The record does not begin with an EVEN line." msgstr "De opgave begint niet met een EVEN-regel." #: src/gedlib/messages.c:402 msgid "INDI, FAM, SOUR, EVEN records may not be other records." msgstr "INDI-, FAM-, SOUR-, en EVEN-opgaven mogen geen andere opgaven zijn." #: src/gedlib/messages.c:403 msgid "The record contains multiple level 0 lines." msgstr "De opgave bevat meerdere niveau 0-regels." #: src/gedlib/messages.c:404 msgid "This person record has bad GEDCOM name syntax." msgstr "Deze persoonopgave heeft slechte GEDCOM-naam schrijfwijze." #: src/gedlib/messages.c:405 msgid "You cannot change the sex of a parent." msgstr "U kunt het geslacht van een ouder niet veranderen." #: src/gedlib/messages.c:406 msgid "REFN key is already in use." msgstr "REFN-sleutel is al in gebruik." #: src/gedlib/messages.c:408 msgid "Tag is too long to connect automatically." msgstr "Tag is te lang om automatisch te verbinden." #: src/gedlib/messages.c:410 msgid "Database records" msgstr "Gegevensbankopgaven" #: src/gedlib/messages.c:411 #, c-format msgid "%dI, %dF, %dS, %dE, %dX" msgstr "%dI, %dF, %dS, %dE, %dX" #: src/gedlib/messages.c:414 #, c-format msgid "LifeLines %s - Genealogical DB and Programming System" msgstr "LifeLines %s - Genealogische DB en programmeersysteem" #: src/gedlib/messages.c:415 msgid "Copyright(c) 1991 to 1996, by T. T. Wetmore IV" msgstr "Auteursrecht(c) 1991 tot 1996, door T. T. Wetmore IV" #: src/gedlib/messages.c:416 #, c-format msgid "Current Database - %s" msgstr "Huidige gegevensbank - %s" #: src/gedlib/messages.c:418 msgid " (immutable)" msgstr "" #: src/gedlib/messages.c:420 msgid " (read only)" msgstr " (enkel lezen)" #: src/gedlib/messages.c:421 msgid "Please choose an operation:" msgstr "Kies een actie:" #: src/gedlib/messages.c:422 msgid "Not valid command" msgstr "Ongeldige opdracht" #: src/gedlib/messages.c:425 msgid "enter y (yes) or n (no): " msgstr "geef j (ja) of n (nee) in: " #: src/gedlib/messages.c:426 msgid "yYnN" msgstr "jJnN" #: src/gedlib/messages.c:427 msgid "yY" msgstr "jJ" #: src/gedlib/messages.c:430 msgid "LifeLines -- Person Browse Screen (* toggles menu)" msgstr "LifeLines - Persoonbladerscherm (* roept menu op)" #: src/gedlib/messages.c:431 msgid "LifeLines -- Family Browse Screen (* toggles menu)" msgstr "LifeLines - Familiebladerscherm (* roept menu op)" #: src/gedlib/messages.c:432 msgid "LifeLines -- Two Person Browse Screen (* toggles menu)" msgstr "LifeLines - Twee persoonsbladerscherm (* roept menu op)" #: src/gedlib/messages.c:433 msgid "LifeLines -- Two Family Browse Screen (* toggles menu)" msgstr "LifeLines - Twee familiesbladerscherm (* roept menu op)" #: src/gedlib/messages.c:434 msgid "LifeLines -- Auxiliary Browse Screen (* toggles menu)" msgstr "LifeLines - Hulpbladerscherm (* roept menu op)" #: src/gedlib/messages.c:435 msgid "LifeLines -- List Browse Screen (* toggles menu)" msgstr "LifeLines - Lijstbladerscherm (* roept menu op)" #: src/gedlib/messages.c:439 msgid "Commands: Select by number, u Page Up, d Page Down, i Select, q Quit" msgstr "" "Opdrachten: Selecteren op nummer, u Pagina omhoog, d Pagina omlaag, i " "Selecteren, q Afsluiten" #: src/gedlib/messages.c:440 msgid "Commands: u Page Up, d Page Down, q Quit" msgstr "Opdrachten: u Pagina omhoog, d Pagina omlaag, q Afsluiten" #: src/gedlib/messages.c:441 msgid "Messages:" msgstr "Berichten:" #: src/gedlib/messages.c:444 msgid "Please choose from the following options:" msgstr "Kies uit de volgende opties:" #: src/gedlib/messages.c:445 #, c-format msgid "New record is %s" msgstr "Nieuwe opgave is %s" #: src/gedlib/messages.c:446 msgid "Insert xref automatically at bottom of current record." msgstr "Voer automatisch xref in aan de onderkant van de huidige opgave." #: src/gedlib/messages.c:447 msgid "Edit current record now to add xref manually." msgstr "Bewerk huidige opgave nu om handmatig xref toe te voegen." #: src/gedlib/messages.c:448 msgid "Browse new record (without adding xref)." msgstr "Nieuwe opgave bladeren (zonder xref toe te voegen)." #: src/gedlib/messages.c:449 msgid "Return to current record (without adding xref)." msgstr "Keer terug naar huidige opgave (zonder xref toe te voegen)." #: src/gedlib/messages.c:452 msgid "Spouse unknown" msgstr "Onbekende partner" #: src/gedlib/messages.c:453 msgid "No more history" msgstr "Geen geschiedenis meer" #: src/gedlib/messages.c:454 msgid "Bad history count" msgstr "Slechte geschiedenistelling" #: src/gedlib/messages.c:455 msgid "Bad backup history count" msgstr "Slechte telling van veiligheidskopie geschiedenis" #: src/gedlib/messages.c:456 msgid "Bad history length" msgstr "Slechte geschiedenislengte" #: src/gedlib/messages.c:457 #, fuzzy, c-format msgid "Delete history (%d entries)?" msgstr "Geschiedenis verwijderen (%d items) ?" #: src/gedlib/messages.c:458 msgid "Error accessing data" msgstr "Fout bij het benaderen van gegevens" #: src/gedlib/messages.c:459 msgid "Choose from history" msgstr "Uit geschiedenis kiezen" #: src/gedlib/messages.c:460 msgid "" "Cannot combine immutable (-i) or read-only (-r) with read-write (-w) access." msgstr "" #: src/gedlib/messages.c:461 msgid "Cannot combine forceopen (-f) and lock (-l) flags." msgstr "Kan openbreken- (-f) en vergrendelen- (-l) vlaggen niet combineren." #: src/gedlib/messages.c:462 msgid "Default path: " msgstr "Standaard pad: " #: src/gedlib/messages.c:463 msgid "WARNING: missing keys" msgstr "WAARSCHUWING: ontbrekende sleutels" #: src/gedlib/messages.c:464 msgid "This does not point to another record in the database!" msgstr "Dit wijst niet naar een andere opgave in de gegevensbank!" #: src/gedlib/messages.c:465 msgid "enter file name" msgstr "bestandsnaam ingeven" #: src/gedlib/messages.c:466 #, c-format msgid "enter file name (*%s)" msgstr "bestandsnaam ingeven (*%s)" #: src/gedlib/messages.c:467 msgid "There is no record with that key or reference." msgstr "Er is geen opgave met die sleutel of verwijzing." #: src/gedlib/messages.c:468 msgid "Database was corrupt." msgstr "Er zaten fouten in de gegevensbank." #: src/gedlib/messages.c:471 msgid "Bad decimal number format." msgstr "Slecht decimaal nummerformaat." #: src/gedlib/messages.c:472 msgid "Bad hexidecimal number format." msgstr "Slecht hexadecimaal nummerformaat." #: src/gedlib/messages.c:473 msgid "No replacement string on line." msgstr "Geen vervangtekenreeks op regel." #: src/gedlib/messages.c:474 msgid "No original string on line." msgstr "Geen originele tekenreeks op regel." #: src/gedlib/messages.c:475 msgid "Bad escape format." msgstr "" #: src/gedlib/messages.c:476 #, c-format msgid "%s: line %d (entry %d): %s" msgstr "%s: regel %d (ingave %d): %s" #: src/gedlib/messages.c:479 src/liflines/brwsmenu.c:26 msgid "q Return to main menu" msgstr "q Terugkeren naar hoofdmenu" #: src/gedlib/messages.c:480 msgid "q Return to previous menu" msgstr "q Terugkeren naar vorige menu" #: src/gedlib/messages.c:481 msgid "q Quit program" msgstr "q Programma afsluiten" #: src/gedlib/messages.c:482 msgid "Q Quit current database" msgstr "Q Huidige gegevensbank afsluiten" #: src/gedlib/messages.c:485 msgid "b Browse the persons in the database" msgstr "b Bladeren in de personen in de gegevensbank" #: src/gedlib/messages.c:486 msgid "s Search database" msgstr "s Gegevensbank zoeken" #: src/gedlib/messages.c:487 msgid "a Add information to the database" msgstr "a Informatie toevoegen aan de gegevensbank" #: src/gedlib/messages.c:488 msgid "d Delete information from the database" msgstr "d Informatie verwijderen uit de gegevensbank" #: src/gedlib/messages.c:489 msgid "r Generate report by entering report name" msgstr "r Opgave tot stand brengen door een opgavenaam in te geven" #: src/gedlib/messages.c:490 msgid "p Pick a report from list and run" msgstr "p Een opgave uit lijst kiezen en uitvoeren" #: src/gedlib/messages.c:491 msgid "c Character set options" msgstr "c Letterteken opties" #: src/gedlib/messages.c:492 msgid "t Modify character translation tables" msgstr "t Lettertekenvertalingstabellen wijzigen" #: src/gedlib/messages.c:493 msgid "u Miscellaneous utilities" msgstr "u Verschillende nuttigheden" #: src/gedlib/messages.c:494 msgid "x Handle source, event and other records" msgstr "x Bron, gebeurtenis en andere opgaven behandelen" #: src/gedlib/messages.c:497 msgid "What utility do you want to perform?" msgstr "Welke nuttigheid wilt u uitvoeren?" #: src/gedlib/messages.c:498 msgid "s Save the database in a GEDCOM file" msgstr "s De gegevensbank opslaan in een GEDCOM-bestand" #: src/gedlib/messages.c:499 msgid "r Read in data from a GEDCOM file" msgstr "r Gegevens inlezen uit een GEDCOM-bestand" #: src/gedlib/messages.c:500 msgid "R Pick a GEDCOM file and read in" msgstr "R Een GEDCOM-bestand kiezen en inlezen" #: src/gedlib/messages.c:501 msgid "k Find a person's key value" msgstr "k De sleutelwaarde van een persoon vinden" #: src/gedlib/messages.c:502 msgid "i Identify a person from key value" msgstr "i Een persoon identificeren door sleutelwaarde" #: src/gedlib/messages.c:503 msgid "d Show database statistics" msgstr "d Gegevensbankstatistieken tonen" #: src/gedlib/messages.c:504 msgid "m Show memory statistics" msgstr "m Geheugenstatistieken tonen" #: src/gedlib/messages.c:505 msgid "e Edit the place abbreviation file" msgstr "e Het plaatsafkortingsbestand bewerken" #: src/gedlib/messages.c:506 msgid "o Edit the user options file" msgstr "o Het gebruikersoptiesbestand bewerken" #: src/gedlib/messages.c:509 msgid "What activity do you want to perform?" msgstr "Welke activiteit wilt u uitvoeren?" #: src/gedlib/messages.c:510 msgid "s Browse source records" msgstr "s Bronopgaven bladeren" #: src/gedlib/messages.c:511 msgid "e Browse event records" msgstr "e Gebeurtenisopgaven bladeren" #: src/gedlib/messages.c:512 msgid "x Browse other records" msgstr "x Andere opgaven bladeren" #: src/gedlib/messages.c:513 msgid "1 Add a source record to the database" msgstr "1 Een bronopgave toevoegen aan de gegevensbank" #: src/gedlib/messages.c:514 msgid "2 Edit source record from the database" msgstr "2 Bronopgave van gegevensbank bewerken" #: src/gedlib/messages.c:515 msgid "3 Add an event record to the database" msgstr "3 Een gebeurtenisopgave toevoegen aan de gegevensbank" #: src/gedlib/messages.c:516 msgid "4 Edit event record from the database" msgstr "4 Gebeurtenisopgave van gegevensbank bewerken" #: src/gedlib/messages.c:517 msgid "5 Add an other record to the database" msgstr "5 Nog een opgave toevoegen aan de gegevensbank" #: src/gedlib/messages.c:518 msgid "6 Edit other record from the database" msgstr "6 Andere opgave van gegevensbank bewerken" #: src/gedlib/messages.c:521 msgid "Translation Tables" msgstr "Vertalingstabellen" #: src/gedlib/messages.c:522 msgid "e edit individual tables (in db)" msgstr "e individuele tabellen bewerken (in db)" #: src/gedlib/messages.c:523 msgid "l load a table from a file (into db)" msgstr "l een tabel uit een bestand laden (in db)" #: src/gedlib/messages.c:524 msgid "s save a table to a file (from db)" msgstr "s een tabel naar een bestand opslaan (uit db)" #: src/gedlib/messages.c:525 msgid "x export all tables (from db to files)" msgstr "x alle tabellen uitvoeren (van db naar bestanden)" #: src/gedlib/messages.c:526 msgid "i import all tables (from files into db)" msgstr "i alle tabellen invoeren (van bestanden naar db)" #: src/gedlib/messages.c:527 msgid "export/import directory:" msgstr "uitvoer-/invoermap:" #: src/gedlib/messages.c:530 msgid "Which character mapping do you want to edit?" msgstr "Welke numerieke code-afbeelding wilt u bewerken?" #: src/gedlib/messages.c:531 msgid "Which character mapping do you want to save?" msgstr "Welke numerieke code-afbeelding wilt u opslaan?" #: src/gedlib/messages.c:534 msgid "Not implemented yet" msgstr "Nog niet ingeprogrammeerd" #: src/gedlib/messages.c:537 msgid "What do you want to add?" msgstr "Wat wilt u toevoegen?" #: src/gedlib/messages.c:538 msgid "p Person - add new person to the database" msgstr "p Persoon - nieuwe persoon toevoegen aan de gegevensbank" #: src/gedlib/messages.c:539 msgid "f Family - create family record from one or two spouses" msgstr "f Familie - Familie-opgave maken uit één of twee partners" #: src/gedlib/messages.c:540 msgid "c Child - add a child to an existing family" msgstr "c Kind - een kind toevoegen aan een bestaande familie" #: src/gedlib/messages.c:541 msgid "s Spouse - add a spouse to an existing family" msgstr "s Partner - een partner toevoegen aan een bestaande familie" #: src/gedlib/messages.c:544 msgid "What do you want to remove?" msgstr "Wat wilt u verwijderen?" #: src/gedlib/messages.c:545 msgid "c Child - remove a child from his/her family" msgstr "c Kind - een kind verwijderen van zijn/haar familie" #: src/gedlib/messages.c:546 msgid "s Spouse - remove a spouse from a family" msgstr "s Partner - een partner verwijderen uit een familie" #: src/gedlib/messages.c:547 msgid "i Individual - remove a person completely" msgstr "i Individu - een persoon helemaal verwijderen" #: src/gedlib/messages.c:548 msgid "f Family - remove a family completely" msgstr "f Familie - een familie helemaal verwijderen" #: src/gedlib/messages.c:549 #, fuzzy msgid "o Other - remove other record completely" msgstr "i Individu - een persoon helemaal verwijderen" #: src/gedlib/messages.c:552 msgid "How would you like to find a record?" msgstr "Hoe zou u een opgave willen vinden?" #: src/gedlib/messages.c:555 msgid "Performing full name scan" msgstr "Volledige naam zoeken aan het uitvoeren" #: src/gedlib/messages.c:556 msgid "Performing name fragment scan" msgstr "Zoeken op deel van naam aan het uitvoeren" #: src/gedlib/messages.c:557 msgid "Performing refn scan" msgstr "Refn zoeken aan het uitvoeren" #: src/gedlib/messages.c:558 #, fuzzy msgid "Performing source scan" msgstr "Refn zoeken aan het uitvoeren" #: src/gedlib/messages.c:559 msgid "No records found in scan" msgstr "Geen opgaven gevonden bij het zoeken" #: src/gedlib/messages.c:562 msgid "abt %1" msgstr "inf %1" #: src/gedlib/messages.c:563 msgid "about %1" msgstr "info %1" #: src/gedlib/messages.c:564 msgid "est %1" msgstr "schat %1" #: src/gedlib/messages.c:565 msgid "estimated %1" msgstr "geschat %1" #: src/gedlib/messages.c:566 msgid "cal %1" msgstr "ber %1" #: src/gedlib/messages.c:567 msgid "calculated %1" msgstr "berekend %1" #: src/gedlib/messages.c:568 msgid "fr %1" msgstr "van %1" #: src/gedlib/messages.c:569 msgid "from %1" msgstr "van %1" #: src/gedlib/messages.c:570 src/gedlib/messages.c:571 msgid "to %1" msgstr "naar %1" #: src/gedlib/messages.c:572 msgid "fr %1 to %2" msgstr "van %1 naar %2" #: src/gedlib/messages.c:573 msgid "from %1 to %2" msgstr "van %1 naar %2" #: src/gedlib/messages.c:574 msgid "bef %1" msgstr "voor %1" #: src/gedlib/messages.c:575 msgid "before %1" msgstr "voorheen %1" #: src/gedlib/messages.c:576 msgid "aft %1" msgstr "na %1" #: src/gedlib/messages.c:577 msgid "after %1" msgstr "nadien %1" #: src/gedlib/messages.c:578 msgid "bet %1 and %2" msgstr "tss %1 en %2" #: src/gedlib/messages.c:579 msgid "between %1 and %2" msgstr "tussen %1 en %2" #: src/gedlib/messages.c:582 msgid "B.C." msgstr "b.C." #: src/gedlib/messages.c:584 msgid "BC" msgstr "bC" #: src/gedlib/messages.c:586 msgid "B.C.E." msgstr "B.C.E." #: src/gedlib/messages.c:588 msgid "BCE" msgstr "BCE" #: src/gedlib/messages.c:590 msgid "A.D." msgstr "n.C." #: src/gedlib/messages.c:592 msgid "AD" msgstr "nC" #: src/gedlib/messages.c:594 msgid "C.E." msgstr "C.E." #: src/gedlib/messages.c:596 msgid "CE" msgstr "CE" #: src/gedlib/messages.c:599 msgid "%1J" msgstr "%1J" #: src/gedlib/messages.c:601 msgid "%1 HEB" msgstr "%1 HEB" #: src/gedlib/messages.c:603 msgid "%1 FR" msgstr "%1 FR" #: src/gedlib/messages.c:605 msgid "%1 AUC" msgstr "" #: src/gedlib/messages.c:607 msgid "jan" msgstr "jan" #: src/gedlib/messages.c:608 msgid "january" msgstr "januari" #: src/gedlib/messages.c:609 msgid "feb" msgstr "feb" #: src/gedlib/messages.c:610 msgid "february" msgstr "februari" #: src/gedlib/messages.c:611 msgid "mar" msgstr "maa" #: src/gedlib/messages.c:612 msgid "march" msgstr "maart" #: src/gedlib/messages.c:613 msgid "apr" msgstr "apr" #: src/gedlib/messages.c:614 msgid "april" msgstr "april" #: src/gedlib/messages.c:616 msgid "**may" msgstr "**mei" #: src/gedlib/messages.c:617 msgid "may" msgstr "mei" #: src/gedlib/messages.c:618 msgid "jun" msgstr "jun" #: src/gedlib/messages.c:619 msgid "june" msgstr "juni" #: src/gedlib/messages.c:620 msgid "jul" msgstr "jul" #: src/gedlib/messages.c:621 msgid "july" msgstr "juli" #: src/gedlib/messages.c:622 msgid "aug" msgstr "aug" #: src/gedlib/messages.c:623 msgid "august" msgstr "augustus" #: src/gedlib/messages.c:624 msgid "sep" msgstr "sep" #: src/gedlib/messages.c:625 msgid "september" msgstr "september" #: src/gedlib/messages.c:626 msgid "oct" msgstr "oct" #: src/gedlib/messages.c:627 msgid "october" msgstr "october" #: src/gedlib/messages.c:628 msgid "nov" msgstr "nov" #: src/gedlib/messages.c:629 msgid "november" msgstr "november" #: src/gedlib/messages.c:630 msgid "dec" msgstr "dec" #: src/gedlib/messages.c:631 msgid "december" msgstr "december" #: src/gedlib/messages.c:633 msgid "tsh" msgstr "tsh" #: src/gedlib/messages.c:634 msgid "tishri" msgstr "tishri" #: src/gedlib/messages.c:635 msgid "csh" msgstr "csh" #: src/gedlib/messages.c:636 msgid "cheshvan" msgstr "cheshvan" #: src/gedlib/messages.c:637 msgid "ksl" msgstr "ksl" #: src/gedlib/messages.c:638 msgid "kislev" msgstr "kislev" #: src/gedlib/messages.c:639 msgid "tvt" msgstr "tvt" #: src/gedlib/messages.c:640 msgid "tevet" msgstr "tevet" #: src/gedlib/messages.c:641 msgid "shv" msgstr "shv" #: src/gedlib/messages.c:642 msgid "shevat" msgstr "shevat" #: src/gedlib/messages.c:643 msgid "adr" msgstr "adr" #: src/gedlib/messages.c:644 msgid "adar" msgstr "adar" #: src/gedlib/messages.c:645 msgid "ads" msgstr "ads" #: src/gedlib/messages.c:646 msgid "adar sheni" msgstr "adar sheni" #: src/gedlib/messages.c:647 msgid "nsn" msgstr "nsn" #: src/gedlib/messages.c:648 msgid "nisan" msgstr "nisan" #: src/gedlib/messages.c:649 msgid "iyr" msgstr "iyr" #: src/gedlib/messages.c:650 msgid "iyar" msgstr "iyar" #: src/gedlib/messages.c:651 msgid "svn" msgstr "svn" #: src/gedlib/messages.c:652 msgid "sivan" msgstr "sivan" #: src/gedlib/messages.c:653 msgid "tmz" msgstr "tmz" #: src/gedlib/messages.c:654 msgid "tamuz" msgstr "tamuz" #: src/gedlib/messages.c:655 msgid "aav" msgstr "aav" #: src/gedlib/messages.c:656 msgid "av" msgstr "av" #: src/gedlib/messages.c:657 msgid "ell" msgstr "ell" #: src/gedlib/messages.c:658 msgid "elul" msgstr "elul" #: src/gedlib/messages.c:660 msgid "vend" msgstr "vend" #: src/gedlib/messages.c:661 msgid "vendemiaire" msgstr "vendemiaire" #: src/gedlib/messages.c:662 msgid "brum" msgstr "brum" #: src/gedlib/messages.c:663 msgid "brumaire" msgstr "brumaire" #: src/gedlib/messages.c:664 msgid "frim" msgstr "frim" #: src/gedlib/messages.c:665 msgid "frimaire" msgstr "frimaire" #: src/gedlib/messages.c:666 msgid "nivo" msgstr "nivo" #: src/gedlib/messages.c:667 msgid "nivose" msgstr "nivose" #: src/gedlib/messages.c:668 msgid "pluv" msgstr "pluv" #: src/gedlib/messages.c:669 msgid "pluviose" msgstr "pluviose" #: src/gedlib/messages.c:670 msgid "vent" msgstr "vent" #: src/gedlib/messages.c:671 msgid "ventose" msgstr "ventose" #: src/gedlib/messages.c:672 msgid "germ" msgstr "germ" #: src/gedlib/messages.c:673 msgid "germinal" msgstr "germinal" #: src/gedlib/messages.c:674 msgid "flor" msgstr "flor" #: src/gedlib/messages.c:675 msgid "floreal" msgstr "floreal" #: src/gedlib/messages.c:676 msgid "prai" msgstr "prai" #: src/gedlib/messages.c:677 msgid "prairial" msgstr "prairial" #: src/gedlib/messages.c:678 msgid "mess" msgstr "mess" #: src/gedlib/messages.c:679 msgid "messidor" msgstr "messidor" #: src/gedlib/messages.c:680 msgid "ther" msgstr "ther" #: src/gedlib/messages.c:681 msgid "thermidor" msgstr "thermidor" #: src/gedlib/messages.c:682 msgid "fruc" msgstr "fruc" #: src/gedlib/messages.c:683 msgid "fructidor" msgstr "fructidor" #: src/gedlib/messages.c:684 msgid "comp" msgstr "comp" #: src/gedlib/messages.c:685 msgid "jour_complementairs" msgstr "jour_complementairs" #: src/gedlib/node.c:610 msgid "NO NAME" msgstr "GEEN NAAM" #: src/gedlib/node.c:1167 #, c-format msgid "Node memory leaks:" msgstr "" #: src/gedlib/node.c:1170 src/gedlib/record.c:361 src/interp/pvalalloc.c:301 #, c-format msgid "%d item leaked" msgid_plural "%d items leaked" msgstr[0] "" msgstr[1] "" #: src/gedlib/record.c:358 #, c-format msgid "Record memory leaks:" msgstr "" #: src/gedlib/remove.c:250 msgid "Families may not yet be removed in this fashion." msgstr "" #. TRANSLATORS: Character set conversion from external editor to database internal #: src/gedlib/translat.c:100 #, fuzzy msgid "Editor to Internal" msgstr "e Editor naar intern afbeelden " #. TRANSLATORS: Character set conversion from database internal to external editor #: src/gedlib/translat.c:102 #, fuzzy msgid "Internal to Editor" msgstr "m Intern naar editor afbeelden " #: src/gedlib/translat.c:103 #, fuzzy msgid "GEDCOM to Internal" msgstr "i GEDCOM naar intern afbeelden " #: src/gedlib/translat.c:104 #, fuzzy msgid "Internal to GEDCOM" msgstr "x Intern naar GEDCOM afbeelden " #: src/gedlib/translat.c:105 #, fuzzy msgid "Display to Internal" msgstr "g Weergave naar intern afbeelden" #: src/gedlib/translat.c:106 #, fuzzy msgid "Internal to Display" msgstr "d Intern naar weergave afbeelden" #: src/gedlib/translat.c:107 #, fuzzy msgid "Report to Internal" msgstr "e Editor naar intern afbeelden " #: src/gedlib/translat.c:108 #, fuzzy msgid "Internal to Report" msgstr "r Intern naar melding afbeelden " #. TRANSLATORS: key for "Editor to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:119 msgid "menu|trantable|e" msgstr "" #. TRANSLATORS: key for "Internal to Editor" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:122 msgid "menu|trantable|m" msgstr "" #. TRANSLATORS: key for "GEDCOM to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:125 msgid "menu|trantable|i" msgstr "" #. TRANSLATORS: key for "Internal to GEDCOM" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:128 msgid "menu|trantable|x" msgstr "" #. TRANSLATORS: key for "Display to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:131 msgid "menu|trantable|g" msgstr "" #. TRANSLATORS: key for "Internal to Display" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:134 msgid "menu|trantable|d" msgstr "" #. TRANSLATORS: key for "Report to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:137 msgid "menu|trantable|p" msgstr "" #. TRANSLATORS: key for "Internal to Report" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:140 msgid "menu|trantable|r" msgstr "" #. TRANSLATORS: db internal translation table note for tt menu #: src/gedlib/translat.c:473 #, c-format msgid " (dbint tt: %s)" msgstr "" #: src/gedlib/valid.c:75 msgid "This person record does not have a name line." msgstr "Deze persoonsopgave heeft geen naamregel" #: src/gedlib/xlat.c:347 #, fuzzy, c-format msgid "ttpath get_conversion_dyntt:from <%s> to <%s>: %s" msgstr "Kan codeset niet converteren (van <%s> naar <%s>)" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 msgid "succeeded" msgstr "" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 #, fuzzy msgid "failed" msgstr "vijf" #: src/gedlib/xlat.c:369 #, c-format msgid "ttpath get_subcoding_dyntt from <%s> to subcode <%s>: %s" msgstr "" #: src/gedlib/xlat.c:435 msgid "No TTPATH config variable" msgstr "" #: src/gedlib/xlat.c:464 #, c-format msgid "ttpath checking dir <%s>" msgstr "" #: src/gedlib/xlat.c:478 #, fuzzy, c-format msgid "ttpath file <%s> typed as %d" msgstr "In bestand <%s> op regel %d" #: src/gedlib/xlat.c:690 #, fuzzy msgid "(no conversion)" msgstr "Geen omzetting" #. TRANSLATORS: steps in a chain of codeset conversions, eg, Editor-to-Internal #: src/gedlib/xlat.c:713 #, fuzzy, c-format msgid "%d step" msgid_plural "%d steps" msgstr[0] "%d hersteld" msgstr[1] "%d hersteld" #: src/gedlib/xreffile.c:400 #, c-format msgid "Corrupt DELETESET %c" msgstr "" #: src/gedlib/xreffile.c:425 #, c-format msgid "Tried to add already-deleted record (%ld) to xref (%c)!" msgstr "" #: src/interp/alloc.c:798 #, c-format msgid "Error: file \"%s\": line %d: " msgstr "Fout: bestand \"%s\": regel %d: " #: src/interp/alloc.c:903 #, c-format msgid "%s: the arg must be an integer." msgstr "%s: het arg moet een geheel getal zijn." #: src/interp/alloc.c:904 #, c-format msgid "%s: the arg #%s must be an integer." msgstr "%s: het arg #%s moet een geheel getal zijn." #: src/interp/alloc.c:905 #, c-format msgid "%s: the arg #%s must be a float." msgstr "%s: het arg #%s moet een reëel getal zijn." #: src/interp/alloc.c:906 #, c-format msgid "%s: the arg must be a string." msgstr "%s: het arg moet een tekenreeks zijn." #: src/interp/alloc.c:907 #, c-format msgid "%s: the arg #%s must be a string." msgstr "%s: het arg #%s moet een tekenreeks zijn." #: src/interp/alloc.c:908 #, c-format msgid "%s: null arg not permissible." msgstr "%s: leeg arg is niet toegelaten." #: src/interp/alloc.c:909 #, c-format msgid "%s: the arg must be a filename." msgstr "%s: het arg moet een bestandsnaam zijn." #: src/interp/alloc.c:910 #, c-format msgid "%s: the arg must be a node or string." msgstr "%s: het arg moet een node of tekenreeks zijn." #: src/interp/alloc.c:911 #, c-format msgid "%s: the arg must be a person." msgstr "%s: het arg moet een persoon zijn." #: src/interp/alloc.c:912 #, c-format msgid "%s: the arg #%s must be a person." msgstr "%s: het arg #%s moet een persoon zijn." #: src/interp/alloc.c:913 #, c-format msgid "%s: the arg must be a family." msgstr "%s: het arg moet een familie zijn." #: src/interp/alloc.c:914 #, c-format msgid "%s: the arg #%s must be a family." msgstr "%s: het arg #%s moet een familie zijn." #: src/interp/alloc.c:915 #, c-format msgid "%s: the arg #%s must be a record." msgstr "%s: het arg #%s moet een opgave zijn." #: src/interp/alloc.c:916 #, c-format msgid "%s: the arg must be a node." msgstr "%s: het arg moet een node zijn." #: src/interp/alloc.c:917 #, c-format msgid "%s: the arg #%s must be a node." msgstr "%s: het arg #%s moet een node zijn." #: src/interp/alloc.c:918 #, c-format msgid "%s: the arg must be a variable." msgstr "%s: het arg moet een variabele zijn." #: src/interp/alloc.c:919 #, c-format msgid "%s: the arg #%s must be a variable." msgstr "%s: het arg #%s moet een variabele zijn." #: src/interp/alloc.c:920 #, c-format msgid "%s: the arg #%s must be a boolean." msgstr "%s: het arg #%s moet een booleaan zijn." #: src/interp/alloc.c:921 #, c-format msgid "%s: the arg must be a list." msgstr "%s: het arg moet een lijst zijn." #: src/interp/alloc.c:922 #, c-format msgid "%s: the arg #%s must be a list." msgstr "%s: het arg #%s moet een lijst zijn." #: src/interp/alloc.c:923 #, c-format msgid "%s: the arg #%s must be a table." msgstr "%s: het arg #%s moet een tabel zijn." #: src/interp/alloc.c:924 #, fuzzy, c-format msgid "%s: the arg must be a set." msgstr "%s: het arg moet een lijst zijn." #: src/interp/alloc.c:925 #, fuzzy, c-format msgid "%s: the arg #%s must be a set." msgstr "%s: het arg #%s moet een lijst zijn." #: src/interp/alloc.c:926 #, c-format msgid "%s: Bad arguments" msgstr "%s: Slechte argumenten" #: src/interp/alloc.c:927 #, c-format msgid "%s: the arg had a major error." msgstr "%s: het arg gaf een grote fout." #: src/interp/alloc.c:928 #, c-format msgid "%s: the arg #%s had a major error." msgstr "%s: het arg #%s gaf een grote fout." #: src/interp/alloc.c:929 #, fuzzy, c-format msgid "%s: the arg #%s would cause an arithmetic exception." msgstr "%s: het arg #%s moet een geheel getal zijn." #: src/interp/builtin.c:111 msgid "Enter integer for program" msgstr "Geef geheel getal in voor programma" #: src/interp/builtin.c:181 msgid "Identify person for program:" msgstr "Identificeer persoon voor programma:" #: src/interp/builtin.c:206 msgid "Enter a spouse from family." msgstr "Voer een partner in van familie." #: src/interp/builtin.c:207 msgid "Enter a sibling from family." msgstr "Voer een broer of zus in van familie." #: src/interp/builtin.c:240 msgid "Identify list of persons for program:" msgstr "Identificeer lijst van personen voor programma:" #: src/interp/builtin.c:329 msgid "name: person does not have a name" msgstr "naam: persoon heeft geen naam" #: src/interp/builtin.c:385 msgid "fullname: person does not have a name" msgstr "volledige naam: persoon heeft geen naam" #: src/interp/builtin.c:412 msgid "surname: person does not have a name" msgstr "voornaam: persoon heeft geen naam" #: src/interp/builtin.c:437 msgid "soundex: person does not have a name" msgstr "" #: src/interp/builtin.c:500 #, c-format msgid "Bad escape code at offset %d in bytecode string <%s>" msgstr "" #: src/interp/builtin.c:643 msgid "(givens) person does not have a name" msgstr "" #: src/interp/builtin.c:670 #, c-format msgid "set(%s, ) is invalid" msgstr "" #: src/interp/builtin.c:1191 msgid "first" msgstr "eerst(e)" #: src/interp/builtin.c:1191 msgid "second" msgstr "tweede" #: src/interp/builtin.c:1191 msgid "third" msgstr "derde" #: src/interp/builtin.c:1191 msgid "fourth" msgstr "vierde" #: src/interp/builtin.c:1191 msgid "fifth" msgstr "vijfde" #: src/interp/builtin.c:1192 msgid "sixth" msgstr "zesde" #: src/interp/builtin.c:1192 msgid "seventh" msgstr "zevende" #: src/interp/builtin.c:1192 msgid "eighth" msgstr "achtste" #: src/interp/builtin.c:1192 msgid "ninth" msgstr "negende" #: src/interp/builtin.c:1192 msgid "tenth" msgstr "tiende" #: src/interp/builtin.c:1193 msgid "eleventh" msgstr "elfde" #: src/interp/builtin.c:1193 msgid "twelfth" msgstr "twaalfde" #: src/interp/builtin.c:1210 #, fuzzy, c-format msgid "%ldth" msgstr "%de" #: src/interp/builtin.c:1220 msgid "zero" msgstr "nul" #: src/interp/builtin.c:1220 msgid "one" msgstr "één" #: src/interp/builtin.c:1220 msgid "two" msgstr "twee" #: src/interp/builtin.c:1220 msgid "three" msgstr "drie" #: src/interp/builtin.c:1220 msgid "four" msgstr "vier" #: src/interp/builtin.c:1220 msgid "five" msgstr "vijf" #: src/interp/builtin.c:1221 msgid "six" msgstr "zes" #: src/interp/builtin.c:1221 msgid "seven" msgstr "zeven" #: src/interp/builtin.c:1221 msgid "eight" msgstr "acht" #: src/interp/builtin.c:1221 msgid "nine" msgstr "negen" #: src/interp/builtin.c:1221 msgid "ten" msgstr "tien" #: src/interp/builtin.c:1222 msgid "eleven" msgstr "elf" #: src/interp/builtin.c:1222 msgid "twelve" msgstr "twaalf" #: src/interp/builtin.c:2173 msgid "the arg to empty is not a list, table or set" msgstr "" #: src/interp/builtin.c:2283 msgid "the arg to length is not a list, table or set" msgstr "" #: src/interp/builtin.c:2470 msgid "He" msgstr "Hij" #: src/interp/builtin.c:2470 msgid "he" msgstr "hij" #: src/interp/builtin.c:2470 msgid "His" msgstr "Zijn" #: src/interp/builtin.c:2470 msgid "his" msgstr "zijn" #: src/interp/builtin.c:2470 msgid "him" msgstr "hem" #: src/interp/builtin.c:2472 msgid "She" msgstr "Zij" #: src/interp/builtin.c:2472 msgid "she" msgstr "zij" #: src/interp/builtin.c:2472 msgid "Her" msgstr "Haar" #: src/interp/builtin.c:2472 msgid "her" msgstr "haar" #: src/interp/builtin.c:2472 msgid "her_" msgstr "haar_" #: src/interp/builtin.c:2850 msgid "(trimname) person does not have a name" msgstr "" #: src/interp/builtin.c:2940 msgid "Sunday" msgstr "" #: src/interp/builtin.c:2940 msgid "Monday" msgstr "" #: src/interp/builtin.c:2940 msgid "Tuesday" msgstr "" #: src/interp/builtin.c:2941 msgid "Wednesday" msgstr "" #: src/interp/builtin.c:2941 msgid "Thursday" msgstr "" #: src/interp/builtin.c:2941 msgid "Friday" msgstr "" #: src/interp/builtin.c:2941 msgid "Saturday" msgstr "" #: src/interp/eval.c:244 #, fuzzy, c-format msgid "Undefined func: %s" msgstr "Niet-gedefinieerde proc: %s" #: src/interp/eval.c:246 #, fuzzy, c-format msgid "Ambiguous call to func: %s" msgstr "Dubbelzinnige oproep voor proc: %s" #: src/interp/interp.c:247 #, c-format msgid "Report not found: %s " msgstr "Melding niet gevonden: %s" #: src/interp/interp.c:258 #, c-format msgid "Error: file <%s> not found" msgstr "Fout: bestand <%s> niet gevonden" #: src/interp/interp.c:316 #, fuzzy msgid "Program contains errors.\n" msgstr "bevat fouten.\n" #: src/interp/interp.c:323 #, fuzzy msgid "Program needs a starting procedure.\n" msgstr "heeft een startprocedure nodig.\n" #: src/interp/interp.c:340 #, c-format msgid "Proc %s must be called with %d (not %d) parameters." msgstr "Proc %s moet worden opgeroepen met %d (niet %d) parameters." #: src/interp/interp.c:355 #, fuzzy msgid "Program is running..." msgstr "is bezig met uitvoeren..." #: src/interp/interp.c:410 #, fuzzy msgid "Program was run successfully.\n" msgstr "is succesvol uitgevoerd.\n" #: src/interp/interp.c:414 #, fuzzy msgid "Program was cancelled.\n" msgstr "is geannuleerd.\n" #: src/interp/interp.c:416 #, fuzzy msgid "Program was not run because of errors.\n" msgstr "is niet uitgevoerd wegens fouten.\n" #: src/interp/interp.c:506 #, c-format msgid "Error: file <%s> not found: %s\n" msgstr "Fout: bestand <%s> niet gevonden: %s\n" #: src/interp/interp.c:538 #, c-format msgid "" "\n" "Report duration %s (ui duration %s)\n" msgstr "" #: src/interp/interp.c:610 #, c-format msgid "identifier: %s should be a string\n" msgstr "variabele-naam: %s moet een tekenreeks zijn\n" #: src/interp/interp.c:1778 #, c-format msgid "Undefined proc: %s" msgstr "Niet-gedefinieerde proc: %s" #: src/interp/interp.c:1780 #, c-format msgid "Ambiguous call to proc: %s" msgstr "Dubbelzinnige oproep voor proc: %s" #: src/interp/interp.c:2017 #, c-format msgid "Duplicate proc %s (lines %d and %d) in report: %s" msgstr "Kopiëer proc %s (regels %d en %d) in melding: %s" #: src/interp/interp.c:2047 #, c-format msgid "Duplicate func %s (lines %d and %d) in report: %s" msgstr "Kopiëer func %s (regels %d en %d) in melding: %s" #: src/interp/interp.c:2110 msgid "This report requires a newer program to run\n" msgstr "" "Deze melding heeft een nieuwer programma nodig om te worden uitgevoerd\n" #: src/interp/interp.c:2166 #, c-format msgid "Program forgot to unlock %d record" msgid_plural "Program forgot to unlock %d records" msgstr[0] "" msgstr[1] "" #: src/interp/intrpseq.c:303 msgid "missing or incorrect value for sort" msgstr "" #: src/interp/lex.c:219 #, c-format msgid "" "String constant overflowing internal buffer tokbuf len=%d, file: %s, start " "line: %ld" msgstr "" #: src/interp/more.c:648 msgid "Please choose from the following list." msgstr "Kies uit de volgende lijst." #: src/interp/more.c:685 msgid "Illegal type found in list in menuchoose" msgstr "Illegale soort gevonden in lijst in menukiezen" #: src/interp/more.c:976 msgid "error evaluating arg to lock" msgstr "" #: src/interp/more.c:982 msgid "null arg in lock" msgstr "" #: src/interp/more.c:993 msgid "node passed to lock must be inside a record" msgstr "" #: src/interp/more.c:999 #, fuzzy msgid "the arg to lock must be a record or node" msgstr "het arg om te vergrendelen moet een persoon of familie zijn" #: src/interp/more.c:1007 msgid "Error: there are 999,999 locks on arg to lock" msgstr "" #: src/interp/more.c:1027 msgid "error evaluating arg to unlock" msgstr "" #: src/interp/more.c:1033 msgid "null arg in unlock" msgstr "" #: src/interp/more.c:1044 #, fuzzy msgid "node passed to unlock must be inside a record" msgstr "het arg om te ontgrendelen moet een persoon of familie zijn" #: src/interp/more.c:1050 #, fuzzy msgid "the arg to unlock must be a record or node" msgstr "het arg om te ontgrendelen moet een persoon of familie zijn" #: src/interp/pvalalloc.c:295 #, c-format msgid "PVALUE memory leak report:" msgstr "" #: src/interp/pvalmath.c:70 #, c-format msgid "Nonnumeric type to operation %s: %s" msgstr "" #: src/interp/pvalmath.c:85 #, c-format msgid "Illegal value to operation %s: %s" msgstr "" #: src/interp/pvalmath.c:411 #, c-format msgid "%s: not compatible numeric types: %s and %s" msgstr "" #: src/interp/pvalue.c:810 #, c-format msgid "%s: Incomparable types: %s and %s" msgstr "" #: src/interp/pvalue.c:907 msgid "NOT PVALUE: NULL!" msgstr "" #: src/interp/pvalue.c:911 #, c-format msgid "NOT PVALUE: invalid type=%d)!" msgstr "" #: src/interp/pvalue.c:949 #, fuzzy, c-format msgid "%d item" msgid_plural "%d items" msgstr[0] "%d hersteld" msgstr[1] "%d hersteld" #: src/interp/pvalue.c:956 #, fuzzy, c-format msgid "%d entry" msgid_plural "%d entries" msgstr[0] "%d fout" msgstr[1] "%d fouten" #: src/interp/pvalue.c:963 #, fuzzy, c-format msgid "%d record" msgid_plural "%d records" msgstr[0] "%d fout" msgstr[1] "%d fouten" #: src/interp/pvalue.c:970 #, fuzzy, c-format msgid "%d element" msgid_plural "%d elements" msgstr[0] "elfde" msgstr[1] "elfde" #: src/interp/progerr.c:125 msgid "Enter d for debugger, q to quit" msgstr "Voer d in voor debugger, q om af te sluiten" #: src/interp/progerr.c:140 #, fuzzy, c-format msgid "Display local (%d var)" msgid_plural "Display locals (%d vars)" msgstr[0] "Lokale weergeven (%d)" msgstr[1] "Lokale weergeven (%d)" #: src/interp/progerr.c:146 #, fuzzy, c-format msgid "Display global (%d var)" msgid_plural "Display globals (%d vars)" msgstr[0] "Globale weergeven (%d)" msgstr[1] "Globale weergeven (%d)" #: src/interp/progerr.c:151 #, c-format msgid "Call stack has %d higher level" msgid_plural "Call stack has %d higher levels" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:154 msgid " Go up one level" msgstr "" #: src/interp/progerr.c:160 #, c-format msgid "Call stack has %d lower level" msgid_plural "Call stack has %d lower levels" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:164 msgid " Go down one level" msgstr "" #: src/interp/progerr.c:169 msgid "Quit debugger" msgstr "Debugger afsluiten" #: src/interp/progerr.c:171 msgid "Report debugger" msgstr "Debugger rapporteren" #: src/interp/progerr.c:175 msgid "Local variables" msgstr "Lokale variabelen" #: src/interp/progerr.c:178 msgid "Global variables" msgstr "Globale variabelen" #: src/interp/progerr.c:338 msgid "Report cancelled" msgstr "Melding geannuleerd" #: src/interp/progerr.c:346 msgid "Report file: " msgstr "Bestand melden: " #: src/interp/progerr.c:355 #, c-format msgid "Parsing Error at line %d: " msgstr "Ontleedfout op regel %d: " #: src/interp/progerr.c:357 #, c-format msgid "Runtime Error at line %d: " msgstr "Uitvoertijdfout op regel %d: " #: src/interp/progerr.c:360 msgid "Aborting: " msgstr "Bezig met afbreken: " #: src/interp/rassa.c:242 #, c-format msgid "Could not open file %s" msgstr "Kon bestand %s niet openen" #: src/interp/rassa.c:271 msgid "Report stopping due to error opening output file" msgstr "" "Bezig met stoppen van melding wegens fout bij het openen van het " "uitvoerbestand" #: src/interp/rassa.c:273 msgid "Report stopping due to lack of output file" msgstr "Bezig met stoppen van melden wegens gebrek aan uitvoerbestand" #: src/interp/rassa.c:330 msgid "illegal call to pos." msgstr "" #: src/interp/rptsort.c:104 #, fuzzy msgid "First argument to (r)sort must be list or array" msgstr "Argument om te vergrendelen (-l) moet j of n zijn." #: src/interp/rptsort.c:117 src/interp/rptsort.c:128 #, fuzzy msgid "Arguments to (r)sort must be of same size" msgstr "Argument om te vergrendelen (-l) moet j of n zijn." #: src/interp/rptsort.c:137 #, fuzzy msgid "Second argument to (r)sort must be list or array" msgstr "Argument om te vergrendelen (-l) moet j of n zijn." #: src/liflines/add.c:68 #, c-format msgid "There was %d unresolved reference." msgid_plural "There were %d unresolved references." msgstr[0] "Er was %d onuitgemaakte verwijzing." msgstr[1] "Er waren %d onuitgemaakte verwijzingen." #: src/liflines/brwsmenu.c:25 msgid "? Other menu choices" msgstr "? Andere menukeuzes" #: src/liflines/brwsmenu.c:69 msgid "e Edit the person" msgstr "e De persoon bewerken" #: src/liflines/brwsmenu.c:70 msgid "e Edit the family" msgstr "e De familie bewerken" #: src/liflines/brwsmenu.c:71 msgid "e Edit record" msgstr "e De opgave bewerken" #: src/liflines/brwsmenu.c:72 msgid "e Edit top person" msgstr "e Bovenste persoon bewerken" #: src/liflines/brwsmenu.c:73 #, fuzzy msgid "e Edit top family" msgstr "e De familie bewerken" #: src/liflines/brwsmenu.c:74 msgid "f Browse to father" msgstr "f Naar vader bladeren" #: src/liflines/brwsmenu.c:75 msgid "f Browse top father" msgstr "f Naar bovenste vader bladeren" #: src/liflines/brwsmenu.c:76 msgid "m Browse to mother" msgstr "m Naar moeder bladeren" #: src/liflines/brwsmenu.c:77 msgid "m Browse top mother" msgstr "m Naar bovenste moeder bladeren" #: src/liflines/brwsmenu.c:78 msgid "s Browse to spouse/s" msgstr "s Naar partner(s) bladeren" #: src/liflines/brwsmenu.c:79 msgid "s Browse top spouse/s" msgstr "s Naar bovenste partner(s) bladeren" #: src/liflines/brwsmenu.c:80 msgid "c Browse to children" msgstr "c Naar kinderen bladeren" #: src/liflines/brwsmenu.c:81 msgid "c Browse top children" msgstr "c Naar bovenste kinderen bladeren" #: src/liflines/brwsmenu.c:82 msgid "o Browse to older sib" msgstr "o Naar oudere broer of zus bladeren" #: src/liflines/brwsmenu.c:83 msgid "y Browse to younger sib" msgstr "y Naar jongere broer of zus bladeren" #: src/liflines/brwsmenu.c:84 msgid "g Browse to family" msgstr "g Naar familie bladeren" #: src/liflines/brwsmenu.c:85 msgid "u Browse to parents" msgstr "u Naar ouders bladeren" #: src/liflines/brwsmenu.c:86 msgid "b Browse to persons" msgstr "b Naar personen bladeren" #: src/liflines/brwsmenu.c:87 msgid "t Browse to top" msgstr "t Naar top bladeren" #: src/liflines/brwsmenu.c:88 msgid "b Browse to bottom" msgstr "b Naar onderzijde bladeren" #: src/liflines/brwsmenu.c:89 msgid "h Add as spouse" msgstr "h Als partner toevoegen" #: src/liflines/brwsmenu.c:90 msgid "i Add as child" msgstr "i Als kind toevoegen" #: src/liflines/brwsmenu.c:91 msgid "s Add spouse to family" msgstr "s Partner aan familie toevoegen" #: src/liflines/brwsmenu.c:92 msgid "a Add child to family" msgstr "a Kind aan familie toevoegen" #: src/liflines/brwsmenu.c:93 msgid "a Add family" msgstr "a Familie toevoegen" #: src/liflines/brwsmenu.c:94 msgid "x Swap two families" msgstr "x Twee families omwisselen" #: src/liflines/brwsmenu.c:95 msgid "x Swap two children" msgstr "x Twee kinderen omwisselen" #: src/liflines/brwsmenu.c:97 #, no-c-format msgid "%c Reorder child" msgstr "%c Kind herordenen" #: src/liflines/brwsmenu.c:98 msgid "x Switch top/bottom" msgstr "x Bovenzijde/onderzijde omwisselen" #: src/liflines/brwsmenu.c:99 msgid "n Create new person" msgstr "n Nieuwe persoon maken" #: src/liflines/brwsmenu.c:100 msgid "a Create new family" msgstr "a Nieuwe familie maken" #: src/liflines/brwsmenu.c:101 msgid "tt Enter tandem mode" msgstr "" #: src/liflines/brwsmenu.c:102 msgid "tt Enter family tandem" msgstr "" #: src/liflines/brwsmenu.c:103 msgid "zi Browse to indi" msgstr "zi Naar indi bladeren" #: src/liflines/brwsmenu.c:104 msgid "zz Browse to any" msgstr "" #: src/liflines/brwsmenu.c:105 msgid "r Remove as spouse" msgstr "r Als partner verwijderen" #: src/liflines/brwsmenu.c:106 msgid "d Remove as child" msgstr "d Als kind verwijderen" #: src/liflines/brwsmenu.c:107 msgid "r Remove spouse from" msgstr "r Partner verwijderen uit" #: src/liflines/brwsmenu.c:108 msgid "d Remove child from" msgstr "d Kind verwijderen uit" #: src/liflines/brwsmenu.c:109 msgid "( Scroll up" msgstr "( Naar boven schuiven" #: src/liflines/brwsmenu.c:110 msgid ") Scroll down" msgstr ") Naar beneden schuiven" #: src/liflines/brwsmenu.c:111 msgid "] Increase tree depth" msgstr "] Boomdiepte vergroten" #: src/liflines/brwsmenu.c:112 msgid "[ Decrease tree depth" msgstr "[ Boomdiepte verkleinen" #: src/liflines/brwsmenu.c:113 msgid "(t Scroll top up" msgstr "(t Top omhoog schuiven" #: src/liflines/brwsmenu.c:114 msgid ")t Scroll top down" msgstr ")t Top omlaag schuiven" #: src/liflines/brwsmenu.c:115 msgid "(b Scroll bottom up" msgstr "(b Onderkant omhoog schuiven" #: src/liflines/brwsmenu.c:116 msgid ")b Scroll bottom down" msgstr ")b Onderkant omlaag schuiven" #: src/liflines/brwsmenu.c:117 msgid "(( Scroll both up" msgstr "(( Beide omhoog schuiven" #: src/liflines/brwsmenu.c:118 msgid ")) Scroll both down" msgstr ")) Beide omlaag schuiven" #: src/liflines/brwsmenu.c:119 msgid "# Toggle childnos" msgstr "" #: src/liflines/brwsmenu.c:120 msgid "!g GEDCOM mode" msgstr "!g GEDCOM modus" #: src/liflines/brwsmenu.c:121 msgid "!x GEDCOMX mode" msgstr "!x GEDCOMX modus" #: src/liflines/brwsmenu.c:122 msgid "!t GEDCOMT mode" msgstr "!t GEDCOMT modus" #: src/liflines/brwsmenu.c:123 msgid "!a Ancestors mode" msgstr "!a Vooroudermodus" #: src/liflines/brwsmenu.c:124 msgid "!d Descendants mode" msgstr "!d Afstammelingenmodus" #: src/liflines/brwsmenu.c:125 msgid "!n Normal mode" msgstr "!n Normale modus" #: src/liflines/brwsmenu.c:126 msgid "p Pedigree mode" msgstr "p Stamboommodus" #: src/liflines/brwsmenu.c:127 msgid "!! Cycle mode" msgstr "!! Cyclusmodus" #: src/liflines/brwsmenu.c:129 msgid "(1-9) Browse to child" msgstr "(1-9) Naar kind bladeren" #: src/liflines/brwsmenu.c:130 msgid "y Turn on sync" msgstr "y Sync aanzetten" #: src/liflines/brwsmenu.c:131 msgid "A Advanced view" msgstr "A Uitgebreide weergave" #: src/liflines/brwsmenu.c:132 msgid "tc Tandem to children" msgstr "" #: src/liflines/brwsmenu.c:133 msgid "tf Tandem to father/s" msgstr "" #: src/liflines/brwsmenu.c:134 msgid "tg Tandem to family/s" msgstr "" #: src/liflines/brwsmenu.c:135 msgid "f Browse to fathers" msgstr "f Naar vaders bladeren" #: src/liflines/brwsmenu.c:136 msgid "m Browse to mothers" msgstr "m Naar moeders bladeren" #: src/liflines/brwsmenu.c:137 msgid "tm Tandem to mother/s" msgstr "" #: src/liflines/brwsmenu.c:138 msgid "ts Tandem to spouse/s" msgstr "" #: src/liflines/brwsmenu.c:139 msgid "tu Tandem to parents" msgstr "" #: src/liflines/brwsmenu.c:140 msgid "< Enlarge menu area" msgstr "< Menugebied groter maken" #: src/liflines/brwsmenu.c:141 msgid "> Shrink menu area" msgstr "> Menugebied kleiner maken" #: src/liflines/brwsmenu.c:142 msgid "M> More menu cols" msgstr "" #: src/liflines/brwsmenu.c:143 msgid "M< Less menu cols" msgstr "" #: src/liflines/brwsmenu.c:144 msgid "+ Next in db" msgstr "+ Volgende in db" #: src/liflines/brwsmenu.c:145 msgid "- Prev in db" msgstr "- Vorige in db" #: src/liflines/brwsmenu.c:146 msgid "d Copy top to bottom" msgstr "d Top naar onderzijde kopiëren" #: src/liflines/brwsmenu.c:147 msgid "j Merge bottom to top" msgstr "j Onderzijde naar top samenvoegen" #: src/liflines/brwsmenu.c:148 src/liflines/listui.c:842 msgid "j Move down list" msgstr "j Lijst omlaag schuiven" #: src/liflines/brwsmenu.c:149 src/liflines/listui.c:843 msgid "k Move up list" msgstr "k Lijst omhoog schuiven" #: src/liflines/brwsmenu.c:150 src/liflines/listui.c:844 msgid "e Edit this person" msgstr "e Deze persoon bewerken" #: src/liflines/brwsmenu.c:151 src/liflines/listui.c:845 msgid "i Browse this person" msgstr "i Deze persoon bladeren" #: src/liflines/brwsmenu.c:152 src/liflines/listui.c:846 msgid "m Mark this person" msgstr "m Deze persoon markeren" #: src/liflines/brwsmenu.c:153 msgid "d Delete from list" msgstr "d Uit lijst verwijderen" #: src/liflines/brwsmenu.c:154 src/liflines/listui.c:849 msgid "n Name this list" msgstr "n Deze lijst benoemen" #: src/liflines/brwsmenu.c:155 src/liflines/listui.c:850 msgid "b Browse new persons" msgstr "b Nieuwe personen bladeren" #: src/liflines/brwsmenu.c:156 src/liflines/listui.c:851 msgid "a Add to this list" msgstr "a Aan deze lijst toevoegen" #: src/liflines/brwsmenu.c:157 src/liflines/listui.c:852 msgid "x Swap mark/current" msgstr "x Gemarkeerde/huidige omwisselen" #: src/liflines/brwsmenu.c:158 msgid "$s List sources" msgstr "$s Bronnen weergeven" #: src/liflines/brwsmenu.c:159 msgid "$n List notes" msgstr "$n Notities weergeven" #: src/liflines/brwsmenu.c:160 msgid "$$ List references" msgstr "$$ Verwijzingen weergeven" #: src/liflines/brwsmenu.c:161 msgid "^b History/back" msgstr "^b Geschiedenis/terug" #: src/liflines/brwsmenu.c:162 msgid "^f History/fwd" msgstr "^f Geschiedenis/vooruit" #: src/liflines/brwsmenu.c:163 msgid "^l History list" msgstr "^l Geschiedenislijst" #: src/liflines/brwsmenu.c:164 msgid "^c Clear history" msgstr "^c Geschiedenis leegmaken" #: src/liflines/brwsmenu.c:165 msgid "^xb ChngHist/back" msgstr "^xb WijzGesch/terug" #: src/liflines/brwsmenu.c:166 msgid "^xf ChngHist/fwd" msgstr "^xf WijzGesch/vooruit" #: src/liflines/brwsmenu.c:167 msgid "^xl ChngHist list" msgstr "^xl WijzGesch weergeven" #: src/liflines/brwsmenu.c:168 msgid "^xc Clear ChngHist" msgstr "^xc WijzGesch leegmaken" #: src/liflines/brwsmenu.c:170 #, no-c-format msgid "%s Add source" msgstr "%s Bron toevoegen" #: src/liflines/brwsmenu.c:172 #, no-c-format msgid "%e Add event" msgstr "%e Gebeurtenis toevoegen" #: src/liflines/brwsmenu.c:174 #, no-c-format msgid "%o Add other" msgstr "%o Andere toevoegen" #: src/liflines/brwsmenu.c:177 msgid "B Browse new family" msgstr "B Nieuwe familie bladeren" #: src/liflines/brwsmenu.c:490 msgid "Missing title" msgstr "Ontbrekende titel" #: src/liflines/delete.c:85 #, c-format msgid "%d spouse" msgid_plural "%d spouses" msgstr[0] "%d partner" msgstr[1] "%d partners" #: src/liflines/delete.c:88 #, c-format msgid "%d child" msgid_plural "%d children" msgstr[0] "%d kind" msgstr[1] "%d kinderen" #: src/liflines/error.c:63 src/tools/dbverify.c:1504 msgid "Fatal Error" msgstr "Fatale fout" #: src/liflines/error.c:66 msgid "FATAL ERROR" msgstr "FATALE FOUT" #: src/liflines/error.c:70 #, c-format msgid " in file <%s> at line %d\n" msgstr " in bestand <%s> op regel %d\n" #: src/liflines/error.c:72 src/tools/dbverify.c:1515 msgid "ASSERT failure" msgstr "" #: src/liflines/import.c:169 msgid "This is not a lineage linked GEDCOM file." msgstr "" #: src/liflines/import.c:170 #, fuzzy msgid "Proceed anyway?" msgstr "Toch voortgaan ?" #: src/liflines/import.c:186 msgid "No current internal codeset, so no codeset conversion can be done" msgstr "" "Geen huidige interne codeset, dus er kan geen codesetomzetting worden gedaan" #: src/liflines/import.c:187 #, fuzzy msgid "Proceed without codeset conversion?" msgstr "Voortgaan zonder codesetomzetting ?" #: src/liflines/import.c:204 #, c-format msgid "%d warning during import" msgid_plural "%d warnings during import" msgstr[0] "%d waarschuwing tijdens het invoeren" msgstr[1] "%d waarschuwingen tijdens het invoeren" #: src/liflines/import.c:220 #, c-format msgid "Cannot convert codeset (from <%s> to <%s>)" msgstr "Kan codeset niet converteren (van <%s> naar <%s>)" #: src/liflines/import.c:223 msgid "Enter codeset to assume (* for none)" msgstr "Geef codeset in om toe te eigenen (* voor geen)" #: src/liflines/import.c:246 #, fuzzy, c-format msgid "Using original keys, %d deleted record will be in the database." msgid_plural "Using original keys, %d deleted records will be in the database." msgstr[0] "" "Originele sleutels aan het gebruiken, %d verwijderde opgaven zullen in de " "gegevensbank zitten." msgstr[1] "" "Originele sleutels aan het gebruiken, %d verwijderde opgaven zullen in de " "gegevensbank zitten." #: src/liflines/lbrowse.c:219 msgid "Tandom browse only compatible with persons or families." msgstr "" #: src/liflines/lines_usage.c:21 #, c-format msgid "%s invokes the Lifelines report execution program without GUI." msgstr "" #: src/liflines/lines_usage.c:23 #, c-format msgid "%s invokes the Lifelines GUI." msgstr "" #: src/liflines/lines_usage.c:26 #, c-format msgid "" "Lifelines is a program to manipulate genealogical information\n" "in lineage-linked GEDCOM format. It has a curses interface and a\n" "built-in interpreter for its own genealogical report language.\n" "\n" "It has its own databases, and records are edited directly in GEDCOM\n" "(with an editor of the user's choice). Records store\n" "information about people, families, sources, events, and\n" "other types of data (such as notes). Lifelines includes a\n" "custom report language and comes with a collection of reports." msgstr "" #: src/liflines/lines_usage.c:36 #, c-format msgid "Usage: %s [OPTIONS] [database]" msgstr "" #: src/liflines/lines_usage.c:38 src/tools/btedit.c:238 #, c-format msgid "Options:" msgstr "" #: src/liflines/lines_usage.c:40 #, c-format msgid "-C[FILE]" msgstr "" #: src/liflines/lines_usage.c:42 #, fuzzy, c-format msgid "Specify configuration file location" msgstr "Verkeerd gevormd configuratiebestand: regel te lang." #: src/liflines/lines_usage.c:44 #, c-format msgid "Finnish option (if compiled to allow Finnish option)" msgstr "" #: src/liflines/lines_usage.c:46 #, c-format msgid "-I[KEY=VALUE]" msgstr "" #: src/liflines/lines_usage.c:48 #, c-format msgid "Specify a user property (e.g. -ILLEDITOR=gvim)" msgstr "" #: src/liflines/lines_usage.c:50 #, c-format msgid "log dynamic memory operation (for debugging)" msgstr "" #: src/liflines/lines_usage.c:52 #, c-format msgid "-c[TYPE][DIRECT,INDIRECT]" msgstr "" #: src/liflines/lines_usage.c:54 #, c-format msgid "" "supply cache values (eg, -ci400,4000f400,4000 sets direct indi\n" "\t\t& fam caches to 400, and indirect indi & fam caches to 4000)" msgstr "" #: src/liflines/lines_usage.c:57 #, c-format msgid "debug mode (disable signal trapping)" msgstr "" #: src/liflines/lines_usage.c:59 #, c-format msgid "force open (for recovery from errors or power failure)" msgstr "" #: src/liflines/lines_usage.c:61 #, c-format msgid "open database with immutable access (for use on read-only media)" msgstr "" #: src/liflines/lines_usage.c:63 #, c-format msgid "always show keys (even if REFN available)" msgstr "" #: src/liflines/lines_usage.c:65 #, c-format msgid "unlock a database (for correct access on read-write media)" msgstr "" #: src/liflines/lines_usage.c:67 #, c-format msgid "lock a database (for use on read-only media)" msgstr "" #: src/liflines/lines_usage.c:69 #, c-format msgid "do not use traditional family rules" msgstr "" #: src/liflines/lines_usage.c:71 #, c-format msgid "Specify program output filename (eg, -o/tmp/mytests)" msgstr "" #: src/liflines/lines_usage.c:73 #, c-format msgid "" "open database with read-only access (prohibiting other\n" "\t\twrite access)" msgstr "" #: src/liflines/lines_usage.c:76 #, c-format msgid "trace function calls in report programs (for debugging)" msgstr "" #: src/liflines/lines_usage.c:78 #, c-format msgid "-u[HEIGHT,WIDTH]" msgstr "" #: src/liflines/lines_usage.c:80 #, c-format msgid "" "specify window size (eg, -u120,34 specifies 120 columns\n" "\t\tby 34 rows)" msgstr "" #: src/liflines/lines_usage.c:83 #, c-format msgid "display this help and exit" msgstr "" #: src/liflines/lines_usage.c:85 #, c-format msgid "open database with writeable access (this is the default)" msgstr "" #: src/liflines/lines_usage.c:89 #, c-format msgid "execute a single lifelines report program directly" msgstr "" #: src/liflines/lines_usage.c:91 #, c-format msgid "" "Use normal ASCII characters for drawing lines, instead of\n" "\t\tspecial VT100 terminal characters" msgstr "" #: src/liflines/lines_usage.c:94 #, c-format msgid "output version information and exit" msgstr "" #: src/liflines/lines_usage.c:96 src/tools/btedit.c:244 #, c-format msgid "Examples:" msgstr "" #: src/liflines/lines_usage.c:99 #, c-format msgid "%s myfamily -x eol" msgstr "" #: src/liflines/lines_usage.c:101 #, c-format msgid "Open the database 'myfamily' with Lifelines" msgstr "" #: src/liflines/lines_usage.c:103 #, c-format msgid "and run the eol.ll report" msgstr "" #: src/liflines/lines_usage.c:105 #, c-format msgid "%s -f myfamily -x eol" msgstr "" #: src/liflines/lines_usage.c:107 #, c-format msgid "Unlock database 'myfamily', after a power failure left the" msgstr "" #: src/liflines/lines_usage.c:109 #, c-format msgid "database locked and run 'eol.ll' report" msgstr "" #: src/liflines/lines_usage.c:112 #, fuzzy, c-format msgid "%s myfamily" msgstr "Lege familie" #: src/liflines/lines_usage.c:114 #, c-format msgid "Open database 'myfamily' with Lifelines" msgstr "" #: src/liflines/lines_usage.c:116 #, fuzzy, c-format msgid "%s -f myfamily" msgstr "Lege familie" #: src/liflines/lines_usage.c:118 #, c-format msgid "" "Unlock database 'myfamily', after a power failure left\n" "\t\tthe database locked" msgstr "" #: src/liflines/lines_usage.c:122 #, c-format msgid "REPORTING BUGS" msgstr "" #: src/liflines/lines_usage.c:124 src/tools/btedit.c:250 #, c-format msgid "Report bugs to lifelines.sourceforge.net" msgstr "" #: src/liflines/lines_usage.c:126 #, c-format msgid "COPYRIGHT" msgstr "" #: src/liflines/lines_usage.c:131 #, c-format msgid "SEE ALSO" msgstr "" #: src/liflines/listui.c:155 src/liflines/listui.c:252 msgid "Commands: j Move down k Move up i Select q Quit" msgstr "" "Opdrachten: j Naar beneden verplaatsen k Naar boven verplaatsen i " "Selecteren q Afsluiten" #: src/liflines/listui.c:157 msgid "Commands: j Move down k Move up q Quit" msgstr "" "Opdrachten: j Naar beneden verplaatsen k Naar boven verplaatsen q " "Afsluiten" #: src/liflines/listui.c:249 msgid "Commands: j Move down k Move up d Delete i Select q Quit" msgstr "" "Opdrachten: j Naar beneden verplaatsen k Naar boven verplaatsen d " "Verwijderen i Selecteren q Afsluiten" #: src/liflines/listui.c:431 msgid "--- CURRENT SELECTION ---" msgstr "--- HUIDIGE SELECTIE ---" #: src/liflines/listui.c:434 src/liflines/listui.c:597 msgid "--- LIST ---" msgstr "--- LIJST ---" #: src/liflines/listui.c:628 msgid "-- CURRENT SELECTION --" msgstr "-- HUIDIGE SELECTIE --" #: src/liflines/listui.c:840 msgid "Choose an operation:" msgstr "Kies een actie:" #: src/liflines/listui.c:847 msgid "r Remove from list" msgstr "r Verwijderen uit lijst" #: src/liflines/listui.c:848 msgid "t Enter tandem mode" msgstr "t Binnengaan in koppelmodus" #: src/liflines/loadsave.c:94 msgid "Person" msgid_plural "Persons" msgstr[0] "Persoon" msgstr[1] "Personen" #: src/liflines/loadsave.c:98 msgid "Family" msgid_plural "Families" msgstr[0] "Familie" msgstr[1] "Families" #: src/liflines/loadsave.c:102 msgid "Source" msgid_plural "Sources" msgstr[0] "Bron" msgstr[1] "Bronnen" #: src/liflines/loadsave.c:106 msgid "Event" msgid_plural "Events" msgstr[0] "Gebeurtenis" msgstr[1] "Gebeurtenissen" #: src/liflines/loadsave.c:110 msgid "Other" msgid_plural "Others" msgstr[0] "Ander" msgstr[1] "Andere" #: src/liflines/loadsave.c:160 msgid "Checking GEDCOM file for errors.\n" msgstr "Bezig met het controleren van GEDCOM-bestand op fouten.\n" #: src/liflines/loadsave.c:163 #, fuzzy msgid "Error" msgid_plural "Errors" msgstr[0] "fout" msgstr[1] "fout" #: src/liflines/loadsave.c:169 #, fuzzy msgid "Warning" msgid_plural "Warnings" msgstr[0] "waarschuwing" msgstr[1] "waarschuwing" #: src/liflines/loadsave.c:184 msgid "The database is read-only; loading has been canceled." msgstr "De gegevensbank is enkel-lezen; het laden is geannuleerd." #: src/liflines/loadsave.c:190 msgid "Adding unused keys as deleted keys..." msgstr "" "Bezig met het toevoegen van ongebruikte sleutels als verwijderde sleutels..." #. TRANSLATORS: how long Import ran, and how much of that was UI delay #: src/liflines/loadsave.c:255 #, fuzzy, c-format msgid "Import time %s (ui %s)\n" msgstr "Ontoelaatbare echtgenote (%s) in familie (%s)" #: src/liflines/loadsave.c:282 msgid "The database was not saved." msgstr "De gegevensbank is niet opgeslagen." #: src/liflines/main.c:385 msgid "Warning: database codeset unspecified" msgstr "Waarschuwing: gegevensbankcodeset niet gespecificeerd" #: src/liflines/main.c:387 msgid "Warning: not all conversions available" msgstr "Waarschuwing: niet alle omzettingen zijn beschikbaar" #: src/liflines/menuset.c:155 #, c-format msgid "Menu (%s) choice sequence too long: %s" msgstr "Menu (%s) reekskeuze te lang: %s" #: src/liflines/menuset.c:159 #, c-format msgid "Menu (%s) item lacked choice sequence: %s" msgstr "" #: src/liflines/menuset.c:242 src/liflines/menuset.c:254 #, c-format msgid "In menu: %s" msgstr "In menu: %s" #: src/liflines/menuset.c:244 #, c-format msgid "Duplicate hotkey for item: %s" msgstr "" #: src/liflines/menuset.c:247 #, c-format msgid "Clash with longer hotkey in item: %s" msgstr "" #: src/liflines/menuset.c:255 #, c-format msgid "Clash with shorter hotkey in item: %s" msgstr "" #: src/liflines/merge.c:772 #, c-format msgid "Bad spouse tag: %s" msgstr "" #: src/liflines/merge.c:800 src/liflines/merge.c:919 #, c-format msgid "Mismatched lineage spouse links between %s and %s: %ld and %ld" msgstr "" #: src/liflines/merge.c:816 src/liflines/merge.c:935 #, c-format msgid "Bad child tag: %s" msgstr "" #: src/liflines/merge.c:844 src/liflines/merge.c:963 #, c-format msgid "Mismatched lineage child links between %s and %s: %ld and %ld" msgstr "" #: src/liflines/merge.c:882 src/liflines/merge.c:891 #, c-format msgid "Bad HUSB tag: %s" msgstr "" #: src/liflines/miscutls.c:51 msgid "Whose key value do you want?" msgstr "Wiens sleutelwaarde wilt u?" #: src/liflines/miscutls.c:67 msgid "Please enter person's internal key value." msgstr "Geef interne sleutelwaarde van persoon in." #: src/liflines/miscutls.c:68 msgid "enter key:" msgstr "geef sleutel in:" #: src/liflines/miscutls.c:78 src/liflines/miscutls.c:82 #: src/liflines/miscutls.c:87 #, c-format msgid "No one in database has key value %s." msgstr "Niemand in gegevensbank heeft sleutelwaarde %s." #: src/liflines/scan.c:100 msgid "Enter pattern to match against single surname or given name." msgstr "" "Geef patroon in om overeen te stemmen met enkele voornaam of gegeven naam." #: src/liflines/scan.c:112 msgid "Enter pattern to match against full name." msgstr "Geef patroon in om overeen te stemmen met volledige naam." #: src/liflines/scan.c:128 src/liflines/scan.c:178 src/liflines/scan.c:201 msgid "pattern: " msgstr "patroon: " #: src/liflines/scan.c:151 src/liflines/scan.c:165 #, fuzzy msgid "Enter pattern to match against author." msgstr "Geef patroon in om overeen te stemmen met refn." #: src/liflines/screen.c:317 #, c-format msgid "initscr failed" msgstr "" #: src/liflines/screen.c:334 #, fuzzy, c-format msgid "" "The requested window size (%ld,%ld) is too large for your terminal (%d,%d).\n" msgstr "" "De gevraagde venstergrootte (%d,%d) is te groot voor uw terminal (%d,%d).\n" #: src/liflines/screen.c:342 #, fuzzy, c-format msgid "" "The requested window size (%ld,%ld) is too small for LifeLines (%d,%d).\n" msgstr "" "De gevraagde venstergrootte (%d,%d) is te klein voor LifeLines (%d,%d).\n" #: src/liflines/screen.c:706 #, fuzzy msgid "Search results" msgstr "Zoekresultaten:" #: src/liflines/screen.c:813 #, c-format msgid "(pg %d/%d)" msgstr "(pg %d/%d)" #: src/liflines/screen.c:1431 msgid "No conversion" msgstr "Geen omzetting" #: src/liflines/screen.c:1517 msgid "Internal codeset" msgstr "Interne codeset" #: src/liflines/screen.c:1520 #, fuzzy msgid "Internal UTF-8: Yes" msgstr "Interne codeset" #: src/liflines/screen.c:1522 #, fuzzy msgid "Internal UTF-8: No" msgstr "m Intern naar editor afbeelden " #: src/liflines/screen.c:1526 msgid "Locales are enabled." msgstr "Taaldefinities zijn ingeschakeld." #: src/liflines/screen.c:1528 msgid "Locales are disabled." msgstr "Gebieden zijn uitgeschakeld." #: src/liflines/screen.c:1531 #, fuzzy msgid "NLS (National Language Support) is compiled in." msgstr "NLS (Nationale Taalondersteuning) is uitgeschakeld." #: src/liflines/screen.c:1537 #, fuzzy msgid "NLS (National Language Support) is not compiled in." msgstr "NLS (Nationale Taalondersteuning) is ingeschakeld." #: src/liflines/screen.c:1550 #, fuzzy msgid "iconv (codeset conversion) is compiled in." msgstr "iconv (codesetomzetting) is uitgeschakeld." #: src/liflines/screen.c:1552 #, fuzzy msgid "iconv (codeset conversion) is not compiled in." msgstr "iconv (codesetomzetting) is ingeschakeld." #: src/liflines/screen.c:1554 #, c-format msgid "Startup collate locale: %s" msgstr "Opstartsorteergebied: %s" #: src/liflines/screen.c:1557 #, c-format msgid "Startup messages locale: %s" msgstr "Opstartberichtengebied: %s" #: src/liflines/screen.c:1560 #, c-format msgid "Current collate locale: %s" msgstr "Huidig sorteergebied: %s" #: src/liflines/screen.c:1563 #, c-format msgid "Current messages locale: %s" msgstr "Huidig berichtengebied: %s" #: src/liflines/screen.c:1566 #, c-format msgid "Collation routine: %s" msgstr "Sorteermethode: %s" #: src/liflines/screen.c:1570 #, c-format msgid "GUI codeset: %s" msgstr "GUI codeset: %s" #: src/liflines/screen.c:1573 #, c-format msgid "GUI output codeset: %s" msgstr "GUI uitvoercodeset: %s" #: src/liflines/screen.c:1575 #, c-format msgid "GUI input codeset: %s" msgstr "GUI invoercodeset: %s" #: src/liflines/screen.c:1580 #, c-format msgid "editor codeset: %s" msgstr "editorcodeset: %s" #: src/liflines/screen.c:1583 #, c-format msgid "editor output codeset: %s" msgstr "editoruitvoercodeset: %s" #: src/liflines/screen.c:1585 #, c-format msgid "editor input codeset: %s" msgstr "editorinvoercodeset: %s" #: src/liflines/screen.c:1590 #, c-format msgid "report codeset: %s" msgstr "codeset melden: %s" #: src/liflines/screen.c:1593 #, c-format msgid "report output codeset: %s" msgstr "uitvoercodeset melden: %s" #: src/liflines/screen.c:1595 #, c-format msgid "report input codeset: %s" msgstr "invoercodeset melden: %s" #: src/liflines/screen.c:1600 #, c-format msgid "GEDCOM codeset: %s" msgstr "GEDCOM codeset: %s" #: src/liflines/screen.c:1603 #, c-format msgid "gedcom output codeset: %s" msgstr "gedcom uitvoercodeset: %s" #: src/liflines/screen.c:1605 #, c-format msgid "gedcom input codeset: %s" msgstr "gedcom invoercodeset: %s" #: src/liflines/screen.c:1613 msgid "UTF-8 charprops loaded" msgstr "" #: src/liflines/screen.c:1615 msgid "UTF-8 charprops not loaded" msgstr "" #: src/liflines/screen.c:1619 msgid "Codeset information" msgstr "Codesetinformatie" #: src/liflines/screen.c:1636 #, c-format msgid "gettext dll: %s" msgstr "gettext dll: %s" #: src/liflines/screen.c:1640 #, c-format msgid "gettext dll version: %s" msgstr "gettext dllversie: %s" #: src/liflines/screen.c:1645 msgid "gettext dll had no version" msgstr "gettext dll had geen versie" #: src/liflines/screen.c:1650 msgid "no gettext dll found" msgstr "geen gettext dll gevonden" #: src/liflines/screen.c:1659 #, c-format msgid "iconv dll: %s" msgstr "iconv dll: %s" #: src/liflines/screen.c:1663 #, c-format msgid "iconv dll version: %s" msgstr "iconv dllversie: %s" #: src/liflines/screen.c:1668 msgid "iconv dll had no version" msgstr "iconv dll had geen versie" #: src/liflines/screen.c:1673 msgid "no iconv dll found" msgstr "geen iconv dll gevonden" #: src/liflines/screen.c:1931 msgid "Impermissible to change codeset in a populated database" msgstr "Niet toegelaten om codeset te veranderen in een bevolkte gegevensbank" #: src/liflines/screen.c:2032 msgid "LifeLines -- Main Menu" msgstr "LifeLines -- Hoofdmenu" #: src/liflines/searchui.c:133 #, c-format msgid "v Review visit history (%d record)" msgid_plural "v Review visit history (%d records)" msgstr[0] "v Bezoekgeschiedenis herbekijken (%d opgave)" msgstr[1] "v Bezoekgeschiedenis herbekijken (%d opgaven)" #: src/liflines/searchui.c:137 msgid "(visit history is empty)" msgstr "(bezoekgeschiedenis is leeg)" #: src/liflines/searchui.c:143 #, c-format msgid "c Review change history (%d record)" msgid_plural "c Review change history (%d records)" msgstr[0] "c Wijzigingengeschiedenis herbekijken (%d opgave)" msgstr[1] "c Wijzigingengeschiedenis herbekijken (%d opgaven)" #: src/liflines/searchui.c:147 msgid "(change history is empty)" msgstr "(wijzigingengeschiedenis is leeg)" #: src/liflines/searchui.c:151 msgid "f Full database scan" msgstr "f Volledige gegevensbank doorzoeken" #: src/liflines/searchui.c:220 msgid "What scan type?" msgstr "Welke zoeksoort?" #: src/liflines/searchui.c:223 msgid "f Full name scan" msgstr "f Volledige naam zoeken" #: src/liflines/searchui.c:224 msgid "n Name fragment (whitespace-delimited) scan" msgstr "" #: src/liflines/searchui.c:225 msgid "r Refn scan" msgstr "r Refn zoeken" #: src/liflines/searchui.c:226 #, fuzzy msgid "s Source scan" msgstr "r Refn zoeken" #: src/liflines/searchui.c:290 msgid "Scan on what source field?" msgstr "" #: src/liflines/searchui.c:293 msgid "a Scan by author" msgstr "" #: src/liflines/searchui.c:294 msgid "t Scan by title" msgstr "" #: src/liflines/selectdb.c:95 msgid "Choose database to open" msgstr "Gegevensbank kiezen om te openen" #: src/liflines/selectdb.c:103 msgid "No databases found in database path" msgstr "Geen gegevensbanken gevonden in gegevensbankpad" #: src/liflines/show.c:123 msgid "born" msgstr "geboren" #: src/liflines/show.c:124 src/liflines/show.c:125 msgid "bapt" msgstr "" #: src/liflines/show.c:126 #, fuzzy msgid "barm" msgstr "brum" #: src/liflines/show.c:127 msgid "basm" msgstr "" #: src/liflines/show.c:128 msgid "bles" msgstr "" #: src/liflines/show.c:129 msgid "adop" msgstr "geadopteerd" #: src/liflines/show.c:130 msgid "resi" msgstr "" #: src/liflines/show.c:134 msgid "died" msgstr "gestorven" #: src/liflines/show.c:135 msgid "buri" msgstr "begraven" #: src/liflines/show.c:136 msgid "crem" msgstr "gecremeerd" #: src/liflines/show.c:1009 #, c-format msgid "Cached: I:%s; F:%s" msgstr "Gecached: I:%s; F:%s" #: src/liflines/valgdcom.c:92 #, c-format msgid "Record %s is referred to but not defined." msgstr "Naar opgave %s wordt verwezen maar is niet gedefinieerd." #: src/liflines/valgdcom.c:93 #, fuzzy, c-format msgid "Line %d: Reference to undefined record %s" msgstr "Regel %d: De gebeurtenis hier gedefinieerd heeft geen sleutel." #: src/liflines/valgdcom.c:94 #, fuzzy, c-format msgid "Line %d: Tag %s found in unexpected record: %s %s." msgstr "Ontbrekende niet-verwijderde opgave %c%d" #: src/liflines/valgdcom.c:190 #, fuzzy, c-format msgid "Line %d: Family has no members (%s %s)." msgstr "Regel %d: Familie heeft geen leden." #: src/liflines/valgdcom.c:390 #, c-format msgid "Line %d: The source defined here has no key." msgstr "Regel %d: De bron hier gedefinieerd heeft geen sleutel." #: src/liflines/valgdcom.c:404 #, c-format msgid "Line %d: Source %s has an incorrect key." msgstr "Regel %d: Bron %s heeft een onjuiste sleutel." #: src/liflines/valgdcom.c:411 #, c-format msgid "Lines %d and %d: Source %s is multiply defined." msgstr "Regels %d en %d: Bron %s is meermaals gedefinieerd." #: src/liflines/valgdcom.c:434 #, c-format msgid "Line %d: The event defined here has no key." msgstr "Regel %d: De gebeurtenis hier gedefinieerd heeft geen sleutel." #: src/liflines/valgdcom.c:447 #, c-format msgid "Line %d: Event %s has an incorrect key." msgstr "Regel %d: Gebeurtenis %s heeft een onjuiste sleutel." #: src/liflines/valgdcom.c:454 #, c-format msgid "Lines %d and %d: Event %s is multiply defined." msgstr "Regels %d en %d: Gebeurtenis %s is meermaals gedefinieerd." #: src/liflines/valgdcom.c:477 #, c-format msgid "Line %d: The record defined here has no key." msgstr "Regel %d: De opgave hier gedefinieerd heeft geen sleutel." #: src/liflines/valgdcom.c:490 #, c-format msgid "Line %d: Record %s has an incorrect key." msgstr "Regel %d: Opgave %s heeft een onjuiste sleutel." #: src/liflines/valgdcom.c:497 #, c-format msgid "Lines %d and %d: Record %s is multiply defined." msgstr "Regels %d en %d: Opgave %s is meermaals gedefinieerd." #: src/liflines/valgdcom.c:539 #, fuzzy, c-format msgid "Line %d: This %s line is missing a value field (%s %s)." msgstr "Regel %d: Deze %s regel mist een veldwaarde." #: src/liflines/valgdcom.c:590 #, fuzzy, c-format msgid "Line %d: Bad NAME syntax (%s %s)." msgstr "Regel %d: Slechte NAAM-schrijfwijze" #: src/liflines/valgdcom.c:820 #, c-format msgid "Line %d: Person %s has multiple father links." msgstr "Regel %d: Persoon %s heeft meerdere vaderkoppelingen." #: src/liflines/valgdcom.c:824 #, c-format msgid "Line %d: Person %s has multiple mother links." msgstr "Regel %d: Persoon %s heeft meerdere moederkoppelingen." #: src/liflines/valgdcom.c:836 #, c-format msgid "Line %d: Person %s is both male and female." msgstr "Regel %d: Persoon %s is zowel mannelijk als vrouwelijk." #: src/liflines/valgdcom.c:840 #, c-format msgid "Line %d: Person %s is male but must be female." msgstr "Regel %d: Persoon %s is mannelijk maar moet vrouwelijk zijn." #: src/liflines/valgdcom.c:844 #, c-format msgid "Line %d: Person %s is female but must be male." msgstr "Regel %d: Persoon %s is vrouwelijk maar moet mannelijk zijn." #: src/liflines/valgdcom.c:848 #, c-format msgid "Line %d: Person %s is implied to be both male and female." msgstr "" "Regel %d: Persoon %s is geïmpliceerd om zowel mannelijk als vrouwelijk te " "zijn." #: src/liflines/valgdcom.c:860 #, c-format msgid "Line %d: Family %s has multiple husband links." msgstr "Regel %d: Familie %s heeft meerdere echtgenootbanden." #: src/liflines/valgdcom.c:864 #, c-format msgid "Line %d: Family %s has multiple wife links." msgstr "Regel %d: Familie %s heeft meerdere echtgenotebanden." #: src/liflines/valgdcom.c:920 msgid "error" msgstr "fout" #: src/liflines/valgdcom.c:928 #, c-format msgid "%6d Error" msgid_plural "%6d Errors" msgstr[0] "%6d Fout" msgstr[1] "%6d Fouten" #: src/liflines/valgdcom.c:930 src/liflines/valgdcom.c:958 #, c-format msgid " (see log file <%s>)" msgstr " (zie logbestand <%s>)" #: src/liflines/valgdcom.c:932 src/liflines/valgdcom.c:960 msgid " (no log file)" msgstr " (geen logbestand)" #: src/liflines/valgdcom.c:948 msgid "warning" msgstr "waarschuwing" #: src/liflines/valgdcom.c:956 #, c-format msgid "%6d Warning" msgid_plural "%6d Warnings" msgstr[0] "%6d Waarschuwing" msgstr[1] "%6d Waarschuwingen" #: src/liflines/valgdcom.c:1067 #, c-format msgid "Processed %d lines without finding end of HEAD" msgstr "%d regels behandeld zonder het einde van HOOFD te vinden" #: src/liflines/valgdcom.c:1072 #, c-format msgid "End of file at line %d" msgstr "Einde van bestand op regel %d" #: src/liflines/valgdcom.c:1076 #, c-format msgid "Error at line %d: %s" msgstr "Fout op regel %d: %s" #: src/liflines/valgdcom.c:1080 #, c-format msgid "Bad level at line %d" msgstr "Slecht niveau op regel %d" #: src/liflines/valgdcom.c:1086 #, c-format msgid "Duplicate HEAD line at line %d" msgstr "HOOFD-regel op regel %d kopiëren" #: src/liflines/valgdcom.c:1092 #, c-format msgid "Missing HEAD line at line %d" msgstr "Ontbrekende HOOFD-regel op regel %d" #: src/stdlib/errlog.c:61 #, c-format msgid " in file <%s> at line %d\n" msgstr " in bestand <%s> op regel %d\n" #: src/stdlib/errlog.c:63 msgid "Current database" msgstr "Huidige gegevensbank" #: src/tools/btedit.c:108 #, c-format msgid "btedit requires 2 arguments (btree and key)." msgstr "" #: src/tools/btedit.c:110 #, c-format msgid "See `btedit --help' for more information." msgstr "" #: src/tools/btedit.c:117 #, fuzzy, c-format msgid "Failed to open btree: %s." msgstr "Kon file %s niet openen." #: src/tools/btedit.c:124 #, fuzzy, c-format msgid "There is no record with key: %s" msgstr "Er is geen opgave met die sleutel of verwijzing." #: src/tools/btedit.c:126 #, fuzzy, c-format msgid "Error accessing record: %s" msgstr "Fout bij het benaderen van gegevens" #: src/tools/btedit.c:135 #, c-format msgid "Editor or system call failed." msgstr "" #: src/tools/btedit.c:137 #, fuzzy, c-format msgid "Database was not be modified." msgstr "De gegevensbank is niet opgeslagen." #: src/tools/btedit.c:143 #, fuzzy, c-format msgid "Readonly database can not be modified." msgstr "De gegevensbank is niet opgeslagen." #: src/tools/btedit.c:150 #, c-format msgid "Error writing file 'btedit.tmp'." msgstr "" #: src/tools/btedit.c:156 #, c-format msgid "Record %s modified." msgstr "" #: src/tools/btedit.c:226 #, fuzzy msgid "\"\\My Documents\\LifeLines\\Databases\\MyFamily\"" msgstr "\\Mijn Documenten\\LifeLines\\Gegevensbanken\\MijnFamilie" #: src/tools/btedit.c:228 src/tools/dbverify.c:232 msgid "/home/users/myname/lifelines/databases/myfamily" msgstr "/home/users/myname/lifelines/gegevensbanken/mijnfamilie" #: src/tools/btedit.c:231 #, c-format msgid "" "lifelines `btedit' edits raw binary btree blocks\n" "in lifelines database files. Do NOT use this unless\n" "you know what you are doing and you have backed up\n" "your database." msgstr "" #: src/tools/btedit.c:236 #, c-format msgid "Usage btedit [database] [rkey]" msgstr "" #: src/tools/btedit.c:240 #, c-format msgid "\t--help\tdisplay this help and exit" msgstr "" #: src/tools/btedit.c:242 #, c-format msgid "\t--version\toutput version information and exit" msgstr "" #: src/tools/btedit.c:246 #, c-format msgid "\tbtedit %s I34" msgstr "" #: src/tools/btedit.c:248 #, c-format msgid "edit raw btree block for person I34" msgstr "" #: src/tools/dbverify.c:175 msgid "Orphan names" msgstr "Weesnamen" #: src/tools/dbverify.c:176 msgid "Ghost names" msgstr "Geestnamen" #: src/tools/dbverify.c:177 src/tools/dbverify.c:178 msgid "Duplicate names" msgstr "Namen kopiëren" #: src/tools/dbverify.c:179 msgid "Non-indi names" msgstr "Niet-indi namen" #: src/tools/dbverify.c:180 msgid "Duplicate individuals" msgstr "Personen kopiëren" #: src/tools/dbverify.c:181 msgid "Duplicate families" msgstr "Families kopiëren" #: src/tools/dbverify.c:182 msgid "Duplicate sources" msgstr "Bronnen kopiëren" #: src/tools/dbverify.c:183 msgid "Duplicate events" msgstr "Gebeurtenissen kopiëren" #: src/tools/dbverify.c:184 msgid "Duplicate others" msgstr "Andere kopiëren" #: src/tools/dbverify.c:185 #, fuzzy msgid "Missing records (from deleteset)" msgstr "Ontbrekende opgaven" #: src/tools/dbverify.c:186 msgid "Deleted records" msgstr "Verwijderde opgaven" #: src/tools/dbverify.c:187 msgid "Bad name" msgstr "Slechte naam" #: src/tools/dbverify.c:188 msgid "Bad family reference" msgstr "Slechte familieverwijzing" #: src/tools/dbverify.c:189 msgid "Missing child" msgstr "Ontbrekend kind" #: src/tools/dbverify.c:190 msgid "Missing spouse" msgstr "Ontbrekende partner" #: src/tools/dbverify.c:191 msgid "Bad HUSB reference" msgstr "Slechte HUSB (echtgenoot) verwijzing" #: src/tools/dbverify.c:192 msgid "Bad WIFE reference" msgstr "Slechte WIFE (echtgenote) verwijzing" #: src/tools/dbverify.c:193 msgid "Bad CHIL reference" msgstr "Slechte CHIL (kind) verwijzing" #: src/tools/dbverify.c:194 msgid "Improper HUSB" msgstr "Ontoelaatbare echtgenoot" #: src/tools/dbverify.c:195 msgid "Improper WIFE" msgstr "Ontoelaatbare echtgenote" #: src/tools/dbverify.c:196 msgid "Improper child" msgstr "Ontoelaatbaar kind" #: src/tools/dbverify.c:197 msgid "Empty family" msgstr "Lege familie" #: src/tools/dbverify.c:198 msgid "Single person family" msgstr "Familie bestaande uit één persoon" #: src/tools/dbverify.c:199 msgid "Bad pointer" msgstr "Slechte wijzer" #: src/tools/dbverify.c:200 #, fuzzy msgid "Missing data records" msgstr "Ontbrekende opgaven" #: src/tools/dbverify.c:230 msgid "\\My Documents\\LifeLines\\Databases\\MyFamily" msgstr "\\Mijn Documenten\\LifeLines\\Gegevensbanken\\MijnFamilie" #: src/tools/dbverify.c:236 #, c-format msgid "usage: dbverify -(flags) \n" msgstr "" #: src/tools/dbverify.c:237 #, c-format msgid "flags:\n" msgstr "" #: src/tools/dbverify.c:238 #, c-format msgid "\t-a = Perform all checks (does not include fixes)\n" msgstr "" #: src/tools/dbverify.c:239 #, c-format msgid "\t-g = Check for ghosts (names/refns)\n" msgstr "" #: src/tools/dbverify.c:240 #, c-format msgid "\t-G = Check for & fix ghosts (names/refns)\n" msgstr "" #: src/tools/dbverify.c:241 #, fuzzy, c-format msgid "\t-i = Check individuals\n" msgstr "Personen kopiëren" #: src/tools/dbverify.c:242 #, c-format msgid "\t-f = Check families\n" msgstr "" #: src/tools/dbverify.c:243 #, c-format msgid "\t-F = Alter any bad family lineage pointers (to _badptr)\n" msgstr "" #: src/tools/dbverify.c:244 #, c-format msgid "\t-h = Display help text (this text)\n" msgstr "" #: src/tools/dbverify.c:245 #, c-format msgid "\t-s = Check sours\n" msgstr "" #: src/tools/dbverify.c:246 #, c-format msgid "\t-e = Check events\n" msgstr "" #: src/tools/dbverify.c:247 #, c-format msgid "\t-x = Check others\n" msgstr "" #: src/tools/dbverify.c:248 #, c-format msgid "\t-l = Check database structure\n" msgstr "" #: src/tools/dbverify.c:249 #, c-format msgid "\t-m = Check for records missing data entries\n" msgstr "" #: src/tools/dbverify.c:250 #, c-format msgid "\t-M = Fix records missing data entries\n" msgstr "" #: src/tools/dbverify.c:251 #, c-format msgid "\t-D = Fix bad delete entries\n" msgstr "" #: src/tools/dbverify.c:252 #, c-format msgid "\t-n = Noisy (echo every record processed)\n" msgstr "" #: src/tools/dbverify.c:253 #, c-format msgid "example: dbverify -ifsex \"%s\"\n" msgstr "voorbeeld: dbverifiëren -wanneergeslacht \"%s\"\n" #: src/tools/dbverify.c:386 #, c-format msgid "Non-indi name, key=%s, name=%s" msgstr "Niet-indinamen, sleutel=%s, naam=%s" #: src/tools/dbverify.c:403 #, c-format msgid "Orphaned name: %s" msgstr "Wees geworden naam: %s" #: src/tools/dbverify.c:417 #, c-format msgid "Ghost name: %s -> %s" msgstr "Geestnaam: %s -> %s" #: src/tools/dbverify.c:449 #, c-format msgid "Orphaned refn: %s" msgstr "Wees geworden refn: %s" #: src/tools/dbverify.c:489 #, c-format msgid "Duplicate name for %s (%s)" msgstr "Naam voor %s (%s) kopiëren" #: src/tools/dbverify.c:524 #, c-format msgid "Duplicate refn for %s (%s)" msgstr "Refn voor %s (%s) kopiëren" #: src/tools/dbverify.c:637 #, c-format msgid "Duplicate individual for %s" msgstr "Persoon voor %s kopiëren" #: src/tools/dbverify.c:679 #, c-format msgid "Bad name for individual %s: %s" msgstr "Slechte naam voor persoon %s: %s" #: src/tools/dbverify.c:697 src/tools/dbverify.c:721 #, c-format msgid "Bad family reference (%s) individual %s" msgstr "Slechte familieverwijzing (%s) persoon %s" #: src/tools/dbverify.c:703 #, c-format msgid "Missing child (%s) in family (%s)" msgstr "Ontbrekend kind (%s) in familie (%s)" #: src/tools/dbverify.c:707 #, fuzzy, c-format msgid "Fixed missing child (%s) in family (%s)" msgstr "Ontbrekend kind (%s) in familie (%s)" #: src/tools/dbverify.c:727 #, c-format msgid "Missing spouse (%s) in family (%s)" msgstr "Ontbrekende partner (%s) in familie (%s)" #: src/tools/dbverify.c:731 #, fuzzy, c-format msgid "Fixed missing spouse (%s) in family (%s)" msgstr "Ontbrekende partner (%s) in familie (%s)" #: src/tools/dbverify.c:765 #, c-format msgid "Duplicate family for %s" msgstr "Familie voor %s kopiëren" #: src/tools/dbverify.c:816 #, c-format msgid "Bad HUSB reference (%s) in family %s" msgstr "Slechte HUSB-verwijzing (%s) in familie %s" #: src/tools/dbverify.c:822 #, fuzzy, c-format msgid "Fixed Bad HUSB reference (%s) in family %s" msgstr "Slechte HUSB-verwijzing (%s) in familie %s" #: src/tools/dbverify.c:831 #, c-format msgid "Improper HUSB (%s) in family (%s)" msgstr "Ontoelaatbare HUSB (%s) in familie (%s)" #: src/tools/dbverify.c:844 #, c-format msgid "Bad wife reference (%s) in family %s" msgstr "Slechte echtgenoteverwijzing (%s) in familie %s" #: src/tools/dbverify.c:850 #, fuzzy, c-format msgid "Fixed Bad wife reference (%s) in family %s" msgstr "Slechte echtgenoteverwijzing (%s) in familie %s" #: src/tools/dbverify.c:859 #, c-format msgid "Improper wife (%s) in family (%s)" msgstr "Ontoelaatbare echtgenote (%s) in familie (%s)" #: src/tools/dbverify.c:872 #, c-format msgid "Bad child reference (%s) in family %s" msgstr "Slechte kindverwijzing (%s) in familie %s" #: src/tools/dbverify.c:878 #, fuzzy, c-format msgid "Fixed bad child reference (%s) in family %s" msgstr "Slechte kindverwijzing (%s) in familie %s" #: src/tools/dbverify.c:887 #, fuzzy, c-format msgid "Improper child: Child (%s) without FAMC reference to family (%s)" msgstr "Ontoelaatbaar kind (%s) in familie (%s)" #: src/tools/dbverify.c:895 #, c-format msgid "Empty family (%s)" msgstr "Lege familie (%s)" #: src/tools/dbverify.c:897 #, c-format msgid "Single person family (%s)" msgstr "Familie bestaande uit één persoon (%s)" #: src/tools/dbverify.c:923 #, c-format msgid "Duplicate source for %s" msgstr "Bron voor %s kopiëren" #: src/tools/dbverify.c:939 #, c-format msgid "Duplicate event for %s" msgstr "Gebeurtenis voor %s kopiëren" #: src/tools/dbverify.c:955 #, c-format msgid "Duplicate record for %s" msgstr "Opgave voor %s kopiëren" #: src/tools/dbverify.c:1026 #, c-format msgid "Bad pointer (in %s): %s" msgstr "Slechte wijzer (in %s): %s" #: src/tools/dbverify.c:1064 #, c-format msgid "Missing undeleted record %c%d" msgstr "Ontbrekende niet-verwijderde opgave %c%d" #: src/tools/dbverify.c:1071 #, fuzzy, c-format msgid "Fixed missing undeleted record %c%d" msgstr "Ontbrekende niet-verwijderde opgave %c%d" #: src/tools/dbverify.c:1075 #, fuzzy, c-format msgid "Failed to fix missing undeleted record %c%d" msgstr "Ontbrekende niet-verwijderde opgave %c%d" #: src/tools/dbverify.c:1087 #, c-format msgid "Delete set contains valid record %s" msgstr "" #: src/tools/dbverify.c:1092 #, c-format msgid "Fixed delete set contains valid record %s" msgstr "" #: src/tools/dbverify.c:1096 #, fuzzy, c-format msgid "Failed to fix missing undeleted record %s" msgstr "Ontbrekende niet-verwijderde opgave %c%d" #: src/tools/dbverify.c:1117 #, c-format msgid "Master fkey misaligned" msgstr "" #: src/tools/dbverify.c:1144 #, c-format msgid "Cycle in indexes, file %s found again!\n" msgstr "" #: src/tools/dbverify.c:1151 #, fuzzy, c-format msgid "Error loading index at key" msgstr "Fout bij het benaderen van gegevens" #: src/tools/dbverify.c:1199 #, c-format msgid "First key in block below parent's limit\n" msgstr "" #: src/tools/dbverify.c:1207 #, c-format msgid "Last key in block above parent's limit\n" msgstr "" #: src/tools/dbverify.c:1215 #, c-format msgid "Key not below next key" msgstr "" #: src/tools/dbverify.c:1232 src/tools/dbverify.c:1234 msgid "data block" msgstr "" #: src/tools/dbverify.c:1235 #, c-format msgid "%s fkey=%d, file=%s" msgstr "" #: src/tools/dbverify.c:1248 #, fuzzy, c-format msgid "Invalid errs array[%d] in dbverify - fix program\n" msgstr "" "Ongeldige foutenvector[%d] in gegevensbankverifiëren - programma herstellen\n" #: src/tools/dbverify.c:1285 #, fuzzy, c-format msgid "Missing data record (%s)" msgstr "Ontbrekende opgaven" #: src/tools/dbverify.c:1289 #, fuzzy, c-format msgid "Fixed missing data record (%s)" msgstr "Ontbrekende opgaven" #: src/tools/dbverify.c:1420 #, c-format msgid "Checking %s" msgstr "" #: src/tools/dbverify.c:1476 #, c-format msgid "%d error" msgid_plural "%d errors" msgstr[0] "%d fout" msgstr[1] "%d fouten" #: src/tools/dbverify.c:1480 #, c-format msgid "%d fixed" msgid_plural "%d fixed" msgstr[0] "%d hersteld" msgstr[1] "%d hersteld" #: src/tools/dbverify.c:1487 msgid "No errors found" msgstr "Geen fouten gevonden" #: src/tools/dbverify.c:1506 #, c-format msgid "FATAL ERROR: " msgstr "FATALE FOUT" #: src/tools/dbverify.c:1511 #, c-format msgid "In file <%s> at line %d" msgstr "In bestand <%s> op regel %d" #~ msgid "Program" #~ msgstr "Programma" #~ msgid "Error: output file <%s> could not be created.\n" #~ msgstr "Fout: uitvoerbestand <%s> kon niet worden gemaakt.\n" #~ msgid "" #~ "usage: dbverify -(flags) \n" #~ "flags:\n" #~ "\t-a = Perform all checks (does not include fixes)\n" #~ "\t-g = Check for ghosts (names/refns)\n" #~ "\t-G = Check for & fix ghosts (names/refns)\n" #~ "\t-i = Check individuals\n" #~ "\t-f = Check families\n" #~ "\t-s = Check sours\n" #~ "\t-e = Check events\n" #~ "\t-x = Check others\n" #~ "\t-n = Noisy (echo every record processed)\n" #~ msgstr "" #~ "gebruik: dbverifiëren -(vlaggen) \n" #~ "vlaggen:\n" #~ "\t-a = Alle controles uitvoeren (omvat geen herstellingen)\n" #~ "\t-g = Controleren op geesten (namen/refns)\n" #~ "\t-G = Controleren op & herstellen van geesten (namen/refns)\n" #~ "\t-i = Individuen controleren\n" #~ "\t-f = Families controleren\n" #~ "\t-s = Bronnen controleren\n" #~ "\t-e = Gebeurtenissen controleren\n" #~ "\t-x = Andere controleren\n" #~ "\t-n = Lawaaierig (schrijf elke behandelde opgave)\n" #~ msgid "Added (%dP, %dF, %dS, %dE, %dX) records" #~ msgstr "(%dP, %dF, %dS, %dE, %dX) opgaven toegevoegd" lifelines-3.0.61/po/pl.gmo0000700002540200244210000023400310656417756015521 0ustar prappDomain UsersÞ•ì|QÜ> T!T9?T+yT'¥T2ÍTUU%*UPUiU-‰U*·UâUõU V%)VOVlV‡V —V¤V ³VÀV ÕVãVõV WW'W7WGWZWnW}WŽW”W›W¡W¨W¬WÁWÚWìWXX&XEX2ZXX¥X®X·XÀX ÉX ×XåXôXY'!YIY gYˆYšYµY"ÓY"öY!Z ;Z\Z|Z!œZ!¾ZàZ!ÿZ ![#B[#f[Š[©[Ç[ç[%\)\E\c\~\œ\¼\ Ü\é\û\]&]8]L]$f] ‹]–]&§]Î]ç]ö] ^ ^3^ 9^ G^U^m^ ‡^/”^;Ä^(_ )_&7_'^_&†_&­_&Ô_&û_"`7` R`\`p`†`&—`+¾`ê`ï`õ` ø`a a%aDa$_a=„a>Âa%b)'bQbfbkbrbub ybƒb–b$©bÎbáb%úb c4;cpcƒc'˜cÀcßcñcdd"d AdMd$ed2Šd)½d&çd(e7e•O• _•m•0ƒ•*´•ß•/ò•"–=–P–Y–0k–7œ–Ô–Ø–í–4—<—)K—u—„—Ÿ—»—×—ö— ˜)˜*?˜j˜!‰˜)«˜-Õ˜™3™6R™5‰™6¿™5ö™,šFš'bš;Šš8Æš(ÿš!(›)J›7t›!¬›+Λ*ú›+%œ,Qœ,~œ«œ(Àœ(éœ+>]6|1³6å.ž'KžGsž1»ž6íž.$Ÿ-SŸ8Ÿ3ºŸ4îŸ8# 6\ )“ )½ ,ç 1¡*F¡3q¡9¥¡+ß¡) ¢75¢8m¢4¦¢-Û¢. £,8£,e£.’£2Á£,ô£%!¤G¤0Z¤4‹¤ À¤ Τ(ܤ¥¥@'¥h¥#‡¥«¥ Á¥Ï¥%à¥&¦%-¦GS¦›¦´¦$Ц õ¦<§ S§4t§©§%¹§$ß§,¨,1¨'^¨(†¨,¯¨ܨ)ö¨ ©"=©`©&€©2§©0Ú©1 ª2=ª1pª1¢ª1Ôª«$«*;«f«}«Ž«Ÿ«¯«À«Ó«æ«ø« ¬ "¬"0¬S¬g¬|¬€¬‰¬¬ •¬ ¬¥¬©¬­¬´¬½¬Á¬ǬˬÒ¬Õ¬%묭%­:­>­D­I­P­U­Z­ a­ k­y­‹­­•­œ­¡­ª­°­µ­¼­Ò­é­,®-/®J]®¨® ¯®½®®Ë®Ñ®+Ö®,¯?/¯+o¯ ›¯¼¯Á¯ůÛ¯'ﯰ*°?°[° _°$j°°“°œ°¡°¨°®°ưÕ°è°#û°±3±F±!Y±{±ޱ§±Á±DZαÕ±Þ±â±ç±÷± ²² 0² ;² H²U²d²~²#„²¨² ¯²¼²Û²ô²³³82³&k³’³¨³º³Á³ųγԳڳ߳ç³ì³ô³ù³´ ´´´ ´ (´6´ ;´%E´k´´˜´²´·´À´Û´ó´µµµµ µ$µ(µ8µ#Nµ*rµ)µ*ǵ.òµ!¶:¶ P¶"^¶¶–¶›¶Ÿ¶¶¶ȶ̶Ô¶è¶ì¶ñ¶õ¶ú¶·'·;·W·q·x·%|·¢·¶·Ë·à·ô·¸¸¸ ¸&¸*¸;¸L¸]¸n¸¸¸¡¸²¸·¸À¸Ǹ,ܸ ¹¹!9¹[¹`¹f¹l¹q¹x¹¹8 ¹Ù¹ݹæ¹ê¹º)ºIºMºUºYº*jº"•º ¸ººɺκ׺ܺåºõº »*'»"R» u»‚»–»ª»À»Ó»ì»"¼)¼.¼F¼_¼u¼%Œ¼²¼.ż)ô¼#½B½I½ M½W½r½x½€½„½‹½ ½½£½§½$­½Ò½$Ù½þ½¾¾&(¾O¾U¾k¾o¾u¾{¾‘¾,§¾-Ô¾¿ ¿¿¿¿$¿:¿>¿D¿Z¿^¿u¿Š¿Ÿ¿£¿«¿²¿¶¿Ë¿!æ¿HÀQÀ VÀbÀgÀoÀwÀ)À¹ÀÎÀãÀøÀ' Á5ÁNÁ^ÁaÁfÁkÁ}ÁÉŽÁ,XÃ?…Ã.ÅÃ4ôÃ-)ÄWÄqÄ%ˆÄ®Ä$ÃÄ4èÄ3ÅQÅgÅ,{Å0¨ÅÙÅöÅÆ!Æ5ÆLÆ_Æ{ƒƣƴÆÃÆÒÆâÆòÆÇÇ-Ç>ÇDÇKÇQÇXÇ\Ç-zǨÇÂÇáÇ+üÇ=(È%fÈTŒÈ9áÈÉ$É-É6É?É RÉ`ÉpÉ„É&œÉÃÉ ÝÉþÉÊ#/Ê!SÊ-uÊ"£Ê-ÆÊ ôÊ!Ë 7Ë#XË"|Ë)ŸË!ÉË"ëË+Ì:ÌXÌ"wÌšÌ1·ÌéÌÍ$Í%CÍiÍ'ˆÍ°ÍÂÍØÍîÍÎÎ/ÎFÎ eÎqÎ ‰ÎªÎÊÎÚÎïÎÏÏ Ï1ÏCÏXÏ oÏ/}Ï;­Ï'éÏ Ð'Ð'GÐ,oÐ,œÐ#ÉÐ#íÐÑ&Ñ @ÑMÑcÑxÑ,ŽÑ*»ÑæÑëÑñÑ ôÑÒ Ò0Ò*NÒyÒ2—Ò4ÊÒ1ÿÒ11ÓcÓ{Ó€Ó‡ÓŠÓ ŽÓ˜Ó­Ó'ÂÓêÓ!ÿÓ*!ÔLÔ6kÔ¢Ô¶Ô(ÑÔ úÔÕ0ÕEÕ _ÕlÕ†Õ–Õ'±Õ3ÙÕ$ Ö#2Ö,VÖƒÖˆÖ‹ÖI£ÖníÖ2\×+×.»×,êר)ØIØ-\Ø-ŠØ¸ØÏØIèØ<2Ù/oÙ2ŸÙ>ÒÙ+Ú=ÚYÚ)vÚ3 ÚÔÚ íÚÛ#"Û/FÛvÛ)…Û¯ÛÅÛÙÛùÛ Ü',ÜTÜeÜ4wÜ6¬Ü4ãÜ2Ý4KÝ3€Ý?´Ý-ôÝ+"Þ5NÞ8„Þ/½Þ-íÞ+ß-Gß+uß&¡ß'ÈßFðß%7àF]à#¤àDÈà$ áE2á#xáEœáâá â##âGâeâ|â‘â8©â%ââãã1ãOãeã:wã²ãÍãçãää3ä1<änä ää¢ä!¼äÞäúä#å,8å#eå)‰å5³å2éå1æ$Næ2sæ¦æÅæ׿îæçç#8ç\çyç#˜ç¼ç/Øç"è+è:èKè=dè:¢è%Ýèé,éGéVé8hé/¡é2Ñé2ê57ê5mê1£ê'Õê4ýê,2ë _ë)€ëªë¿ë*Òë4ýë42ìgììì¡ì¨ì«ì¯ì´ìÏì?ãì #í%-í4Sí+ˆí,´í"áí#îA(îjî/Šîºî#Õî8ùî92ï8lï$¥ï"Êï-íï ð+<ð&hð4ð5Äð%úð ñ#1ñUñfñ#wñ›ñ µñ4Àñõñ òò/òBò4UòŠò¥ò%Áò&çòó.ó?BóN‚ó>Ñó<ôMô<fôD£ôBèô(+õ,Tõ2õ2´õ4çõ0ö1Mö:ö6ºöKñö6=÷0t÷%¥÷%Ë÷/ñ÷4!ø=Vø,”ø2Áø)ôø+ù,Jù,wù&¤ù(Ëù$ôù;ú=Uú;“úDÏú:û:OûŠûšû¬ûG½ûüü,0ü']ü-…ü ³ü¿ü8Ûüý!&ýHýeý~ýžý"±ý Ôý!àý)þ*,þ Wþ,eþ’þF¡þèþO÷þ+Gÿ sÿ2ÿ8´ÿ íÿûÿ##!Gi*|§Ç#Ø ü !8M2e˜(±Úì 0H\ mx‹,ª2×* 5*F(qš$³Øó-D'd Œ­!Í(ï(,A+n3š"Î ñ .&O%v*œ(Ç1ð")@0j'›Ã$Ý!$'='e>œÛ ö  7% !]  „  — ¸ *Õ   - = L ;g 2£ Ö ,é  4 G P 6b =™ × Û ð ? J ,_ Œ #ž & )é ! 5  I 1T +† ² "Î (ñ @[:y;´9ð9*5dš¸/Ò528-k™#²4Ö$ '0$X%}%£%Éï+,.+[‡ (¹,â2.B"q\”(ñ.IfC„6È7ÿ<7;t-°/Þ&45(j4“>È'+/9[:•9Ð) <4%q&—)¾:è2#-V„4—:Ì  ,#PnN~#Í(ñ 2!@%b*ˆ³FÅ "/R5l¢)Àê#"B!e'‡&¯!Öø.=\s!4¯3ä22K4~2³4æ 5 *M x  ¢ ¶ Ë Þ ó !!4!E!"V!y!!¦!ª!³!º! ¿!Ê!Ï!Ó!×!Ý!ã!ç!ð!ô!ý!""" 9"G"V"["b"h"p"u"z"ƒ" Œ"™"«"°"´"¹"¾"Ç"Î"Ó"Û"ì" #1'#(Y#q‚#ô# ü# $$$#$8($=a$\Ÿ$=ü$+:%f%l%p%‡% —%¸%Í%Ý%ý% &.&=&A&J&N&T&[&y&‹&&(­&Ö&é&û&%'<'R'r'’'˜' ' ¨'²'¶'»'Í'å'ý' ( (.(=(Q(n(-s(¡(ª(³(Ó(ð(ÿ()@*)"k)Ž)0«)Ü)ã)ç)ì)ò)û)** ***$* **6*;*D* J*V* [*e*…*—*¶*Õ*Ú*ã*ý*+$+;+>+B+G+L+Q+g+,{+¨+-Ç+%õ+&,B,Z, n,.|,«,È,Í,Ñ,æ,ý,- --!-(-,-5-T- l-&-´-Ó-Ú-!Þ-.. .;.O.k.p.t.{.‚.†.ˆ.Š.Œ.Ž..’.”.–.›.¤.ª.*¿.ê. ú./7/ @/J/P/U/\/w/<‘/Î/Ò/Û/ß/*õ/ 0?0 C0O0U0*h0#“0·0À0Æ0Ë0Ô0Ù0â0ø0 1$+1P1p1‡11­1¾1 Õ1 ö1 282=2O2n22 2¾23×2% 3 13R3X3\3$e3Š3‘3˜3œ3£3 §3µ3»3Á3È3ç3ð344"4!;4]4c4y4 ‚4Œ4’4¦4;»4<÷445 95C5J5O5V5j5n5t5Œ55¥5¼5Ô5Ø5 á5ë5ï56"6q86ª6 ¯6»6À6 È6Ô6$ï6717J7c7.u7¤7º7Ò7Õ7Ú7ß7ï7± niõ2ç׉Ó#†ÖžHYæ¦*+U&>ACŠ‰ÉªKë}ý9X.Î…!’Áƨò~t#ZWÃŽŠÒ533]›y+ص»9 J×Öl­7á\,°·‚ød«ðe‘ÿ§¹ò¸¢õô‚úG+5^Ň.5îùæM³²¢_‹å5Žédx­zàÏ>R*ý¸‘G+!pRæNƒöÝ'w˜ï=áHôo¯ç¸oûކ§á«?ÞÌãt`k*© “§°¥ÄŸü4U*“pg¯ßÝ6¥A°tÏùrÀ`±ª#x©Å:Î÷þéÎe“iMKÑ8iÒG)v£W¼ÊzÒ¼ÚÇ“ˆ?ÚV²;Ì€•aÒ"38aq씳ÐXZ¤Õ24·ÿËò7%Eu—=ÆEÆkÊ„y,(Çm}Ñ?Ôˆ¶|ÿ·™w%¦ [R{ ¤h œ‡åYwñàBÑÍb悤†¾l1Q½ãL[¶I3&Áª½ÚT àÙG(LSósÅþFŸíš÷TrH›®Œ1•^/ì0˜¨`"èJÂÈ;JTšÈoq œ>Xq” ™î>Jƒ7ǾÑDj÷ZÁzØÂÕ ®‹—<W_y¬hv~èÛ¶êKßÜ jP€ …BX»””Ü´µ—F^ É´x@RÕÁnNËП‡'!:d¤ÂÇ»©³ÊË«‹£%y…\fø•jÏâ;‘@[µ-D_m¬ úÓ(rOž‹A}Ô¡K•ì$Ãïê†îÄ(€H¯«6ç_ÅQ'<ÔO`´…âÈaäœÙ±-Ež  QµöËÞ]\ÄIûlš È×s&ŠóؾOlV¸Ê@D¹™{eÜt:IÐ.[ÐQ,Ý^B'b¹¡ë› ºc¨v½¼¢ÃZˆÆ ƒ£êAºÂwg FuƒÝ¶âÉ­nˆLgãihÏ"é I¿&mÓcŒ nV)/~߬{ØñÞãYUÙ£L À¨À– ›º  ý/é–Fõbº$o)Pq²C0S$Û´Í?<åäûNèSud=.¡Äž]»a­f|MhDÖ0ùÞÔþ{Vۄ׉W\S¿ß’xpçk¦:)–ë®#ŸvBCb§4ä/Ú2äTø½¿;ìOŽ1E’ê-ÉÍ·¾Ûªô~7sŒ2É!à²8e°åmü–Í9˜Ù â©fëcÀ’¬Nίš‘€¥¥ÓŠ í0¼®kï¡9ÜŒüY˜ó]Ì„ðÌ|‡¦6}<ðög61³P%@Õ±¿C‚áñfu|¢rs¹=UÖMèú—4"í$„P,œp™jc8-z -D = Fix bad delete entries -F = Alter any bad family lineage pointers (to _badptr) -G = Check for & fix ghosts (names/refns) -M = Fix records missing data entries -a = Perform all checks (does not include fixes) -e = Check events -f = Check families -g = Check for ghosts (names/refns) -i = Check individuals -l = Check database structure -m = Check for records missing data entries -n = Noisy (echo every record processed) -s = Check sours -x = Check others Aborting now. Core dump? [y/n] Report duration %s (ui duration %s) in file <%s> at line %d in file <%s> at line %d (dbint tt: %s) (immutable) (no log file) (read only) (see log file <%s>)!! Cycle mode!a Ancestors mode!d Descendants mode!g GEDCOM mode!n Normal mode!t GEDCOMT mode!x GEDCOMX mode# Toggle childnos$$ List references$n List notes$s List sources%02ds%1 AUC%1 FR%1 HEB%1J%6d Error%6d Errors%6d Warning%6d Warnings%c Reorder child%d child%d children%d error%d errors%d fixed%d fixed%d item leaked%d items leaked%d spouse%d spouses%d warning during import%d warnings during import%dI, %dF, %dS, %dE, %dX%dd%02dh%dh%02dm%dm%02ds%dy%03dd%e Add event%o Add other%s Add source%s fkey=%d, file=%s%s was added as a child.%s was added as a spouse and/or parent.%s was added to the database.%s was modified in the database.%s: Bad arguments%s: line %d (entry %d): %s%s: null arg not permissible.%s: the arg #%s had a major error.%s: the arg #%s must be a boolean.%s: the arg #%s must be a family.%s: the arg #%s must be a float.%s: the arg #%s must be a list.%s: the arg #%s must be a node.%s: the arg #%s must be a person.%s: the arg #%s must be a record.%s: the arg #%s must be a set.%s: the arg #%s must be a string.%s: the arg #%s must be a table.%s: the arg #%s must be a variable.%s: the arg #%s must be an integer.%s: the arg had a major error.%s: the arg must be a family.%s: the arg must be a filename.%s: the arg must be a list.%s: the arg must be a node or string.%s: the arg must be a node.%s: the arg must be a person.%s: the arg must be a set.%s: the arg must be a string.%s: the arg must be a variable.%s: the arg must be an integer.( Scroll up(( Scroll both up(1-9) Browse to child(Family %s (%s, %s)(Separator is %s)(b Scroll bottom up(change history is empty)(givens) person does not have a name(pg %d/%d)(t Scroll top up(trimname) person does not have a name(visit history is empty)) Scroll down)) Scroll both down)b Scroll bottom down)t Scroll top down**may+ Next in db- Prev in db-- CURRENT SELECTION ----- CURRENT SELECTION ------ LIST ---/home/users/myname/lifelines/databases/myfamily0 EVEN 1 REFN 1 DATE 1 PLAC 1 INDI 2 NAME 2 ROLE 1 SOUR0 SOUR 1 REFN 1 TITL Title 1 AUTH Author0 XXXX 1 REFN1 Add a source record to the database2 Edit source record from the database3 Add an event record to the database4 Edit event record from the database5 Add an other record to the database6 Edit other record from the database< Enlarge menu area> Shrink menu area? Other menu choicesA Advanced viewA family cannot be merged with itself.A person cannot be merged with him/herself.A.D.ABORTADALARM CLOCKASSERT failureAborting: Adding unused keys as deleted keys...Ambiguous call to proc: %sAre you sure you want to merge them?Are you sure you want to remove the person from the database?Are you sure you want to remove this record from the database?Argument to lock (-l) must be y or n.Arguments to (r)sort must be of same sizeB Browse new familyB.C.B.C.E.BCBCEBUS ERRORBad CHIL referenceBad HUSB referenceBad HUSB reference (%s) in family %sBad WIFE referenceBad backup history countBad child reference (%s) in family %sBad decimal number format.Bad escape code at offset %d in bytecode string <%s>Bad escape format.Bad family referenceBad family reference (%s) individual %sBad hexidecimal number format.Bad history countBad history lengthBad level at line %dBad nameBad name for individual %s: %sBad pointerBad pointer (in %s): %sBad wife reference (%s) in family %sBecause of errors the GEDCOM file was not loaded. Both families must have husbands/fathers.Both families must have wives/mothers.Browse new record (without adding xref).C.E.CECached: I:%s; F:%sCannot combine forceopen (-f) and lock (-l) flags.Cannot combine immutable (-i) or read-only (-r) with read-write (-w) access.Cannot convert codeset (from <%s> to <%s>)Cannot remove last person from family.Checking GEDCOM file for errors. Choose a family by selecting a spouse/parent.Choose an operation:Choose database to openChoose from historyClash with longer hotkey in item: %sClash with shorter hotkey in item: %sCodeset informationCollation routine: %sCommands: Select by number, u Page Up, d Page Down, i Select, q QuitCommands: j Move down k Move up i Select q QuitCommands: j Move down k Move up q QuitCommands: u Page Up, d Page Down, q QuitCommands: j Move down k Move up d Delete i Select q QuitCopyright(c) 1991 to 1996, by T. T. Wetmore IVCould not open file %sCould not open file %s.Create a family with this person as a child.Create a family with this person as a spouse/parent.Current Database - %sCurrent collate locale: %sCurrent databaseCurrent messages locale: %sCycle in indexes, file %s found again! DEATH OF CHILDDatabase `%s' has been saved in `%s'.Database error: -- Database recordsDatabase was corrupt.Default path: Delete history (%d entries)?Delete set contains valid record %sDeleted recordsDisplay to InternalDo you really want to add this child to the family?Do you really want to add this event to the database?Do you really want to add this family to the database?Do you really want to add this person to the database?Do you really want to add this record to the database?Do you really want to add this source to the database?Do you really want to add this spouse/parent to the family?Do you really want to merge these two families?Do you really want to merge these two persons?Do you really want to remove this child from his/her family?Do you really want to remove this spouse from his/her family?Do you really want to update this event?Do you really want to update this family?Do you really want to update this person?Do you really want to update this record?Do you really want to update this source?Do you want to create a database there?Do you want to edit the event again?Do you want to edit the event again? (Otherwise changes will be discarded.)Do you want to edit the family again?Do you want to edit the family again? (Otherwise changes will be discarded.)Do you want to edit the person again?Do you want to edit the person again? (Otherwise changes will be discarded.)Do you want to edit the record again?Do you want to edit the record again? (Otherwise changes will be discarded.)Do you want to edit the source again?Do you want to edit the source again? (Otherwise changes will be discarded.)Do you want to enter another name?Do you want to re-edit it?Duplicate HEAD line at line %dDuplicate event for %sDuplicate eventsDuplicate familiesDuplicate family for %sDuplicate func %s (lines %d and %d) in report: %sDuplicate hotkey for item: %sDuplicate individual for %sDuplicate individualsDuplicate name for %s (%s)Duplicate namesDuplicate othersDuplicate proc %s (lines %d and %d) in report: %sDuplicate record for %sDuplicate refn for %s (%s)Duplicate source for %sDuplicate sourcesDuplicated REFN - please choose.EMT INSTEdit current record now to add xref manually.Editor to InternalEmpty familyEmpty family (%s)End of file at line %dEnter Family Number to Browse toEnter a sibling from family.Enter a spouse from family.Enter codeset to assume (* for none)Enter d for debugger, q to quitEnter integer for programEnter name of output archive file.Enter name of translation table file to readEnter name of translation table file to writeEnter pattern to match against full name.Enter pattern to match against refn.Enter pattern to match against single surname or given name.Enter string for programErrorErrorsError accessing dataError at line %d: %sError in abbreviations file.Error in character mapping file.Error in user options file.Error: file "%s": line %d: Error: file <%s> not foundError: file <%s> not found: %s EventEventsEvent %s is referred to but not defined.Existing database found.FATAL ERRORFATAL ERROR: FLOATING POINT EXCEPTIONFailed to fix missing undeleted record %c%dFailed to fix missing undeleted record %sFamilies may not yet be removed in this fashion.FamilyFamiliesFamily %s is referred to but not defined.Fatal ErrorFilepath too long.First argument to (r)sort must be list or arrayFirst key in block below parent's limit Fixed Bad HUSB reference (%s) in family %sFixed Bad wife reference (%s) in family %sFixed bad child reference (%s) in family %sFixed delete set contains valid record %sFixed missing child (%s) in family (%s)Fixed missing data record (%s)Fixed missing spouse (%s) in family (%s)Fixed missing undeleted record %c%dFrom which family is the child to be removed?From which family is the spouse/parent to be removed?GEDCOM codeset: %sGEDCOM to InternalGUI codeset: %sGUI input codeset: %sGUI output codeset: %sGhost name: %s -> %sGhost namesGlobal variablesHANGUPHeHerHisHow would you like to find a record?ILLEGAL INSTRUCTIONINDI, FAM, SOUR, EVEN records may not be other records.INTERRUPTIdentify a child of the family, if known.Identify a parent in the family having children swapped.Identify a spouse of the family, if known.Identify a spouse/parent for the new family.Identify child already in family.Identify child in second family.Identify family (enter nothing to identify by individual members).Identify list of persons for program:Identify one of the child's parents, if known.Identify person for program:Identify second person to browse to.Identify spouse/parent already in family, if known.Identify spouse/parent in second family, if known.Identify spouse/parent to add to an existing family.Identify the child to reorder.Identify the first child to swap.Identify the first family/spouse to swap.Identify the second child to swap.Identify the second family/spouse to swap.Identify the second spouse/parent, if known.Illegal type found in list in menuchooseImpermissible to change codeset in a populated databaseImport time %s (ui %s) Improper HUSBImproper HUSB (%s) in family (%s)Improper WIFEImproper childImproper wife (%s) in family (%s)In file <%s> at line %dIn menu: %sInsert xref automatically at bottom of current record.Internal codesetInternal to DisplayInternal to EditorInternal to GEDCOMInternal to ReportInvalid properties set for new databaseIs this the new child? Is this the new spouse? Is this the person? Select if so.Is this the record? Select if so.KILLLast key in block above parent's limit LifeLines %s - Genealogical DB and Programming SystemLifeLines -- Auxiliary Browse Screen (* toggles menu)LifeLines -- Family Browse Screen (* toggles menu)LifeLines -- List Browse Screen (* toggles menu)LifeLines -- Main MenuLifeLines -- Person Browse Screen (* toggles menu)LifeLines -- Two Family Browse Screen (* toggles menu)LifeLines -- Two Person Browse Screen (* toggles menu)Line %d: Event %s has an incorrect key.Line %d: Family %s has an incorrect key.Line %d: Family %s has multiple husband links.Line %d: Family %s has multiple wife links.Line %d: Person %s has an incorrect key: skipped.Line %d: Person %s has multiple father links.Line %d: Person %s has multiple mother links.Line %d: Person %s is both male and female.Line %d: Person %s is female but must be male.Line %d: Person %s is implied to be both male and female.Line %d: Person %s is male but must be female.Line %d: Person defined here has no name.Line %d: Record %s has an incorrect key.Line %d: Source %s has an incorrect key.Line %d: The event defined here has no key.Line %d: The family defined here has no key.Line %d: The person defined here has no key: skipped.Line %d: The record defined here has no key.Line %d: The source defined here has no key.Line %d: This line has a bad link.Line %d: This line has a level number that is too large.Line %d: This line has an illegal level.Line %d: This line has no level number.Line %d: This line is empty; EOF?Line %d: This line is incomplete.Line %d: This line is too long.Line %d: This line needs white space before tag.Lines %d and %d: Event %s is multiply defined.Lines %d and %d: Family %s is multiply defined.Lines %d and %d: Person %s is multiply defined: skipped.Lines %d and %d: Record %s is multiply defined.Lines %d and %d: Source %s is multiply defined.Local variablesLocales are disabled.Locales are enabled.Looks like a program was running. Check file %1 around line %2. M< Less menu colsM> More menu colsMalformed configuration file: line too long.Menu (%s) choice sequence too long: %sMenu (%s) item lacked choice sequence: %sMessages:Missing HEAD line at line %dMissing NAME line in INDI record; record ignored. Missing childMissing child (%s) in family (%s)Missing data record (%s)Missing data recordsMissing records (from deleteset)Missing spouseMissing spouse (%s) in family (%s)Missing titleMissing undeleted record %c%dNLS (National Language Support) is compiled in.NLS (National Language Support) is not compiled in.NO NAMENew persons were added to the current list.New record is %sNew spouse/parent has unknown sex; can't add to family.No conversionNo current internal codeset, so no codeset conversion can be doneNo databases found in database pathNo errors foundNo errors; adding records with new keys...No errors; adding records with original keys...No events present.No more historyNo notes present.No one in database has key value %s.No original string on line.No others present.No persons were added to the current list.No records found in scanNo references present.No replacement string on line.No sources present.No such child.No such family.No such person.No such record.No such translation table in this databaseNode memory leaks:Non-indi name, key=%s, name=%sNon-indi namesNot implemented yetNot valid commandOrphan namesOrphaned name: %sOrphaned refn: %sOtherOthersPIPE WRITEPOWER-FAIL RESTARTParsing Error at line %d: Performing full name scanPerforming name fragment scanPerforming refn scanPersonPersonsPerson %s is referred to but not defined.Place the child last in the family.Please choose an operation:Please choose family create operation.Please choose from among these people.Please choose from among these records.Please choose from the following list.Please choose from the following options:Please choose the child to browse to.Please choose the child to remove from the family.Please choose the event to view.Please choose the family to browse to.Please choose the father/husband to browse to.Please choose the first child to browse to.Please choose the first family to browse to.Please choose the first father/husband to browse to.Please choose the first mother/wife to browse to.Please choose the first spouse/parent to browse to.Please choose the mother/wife to browse to.Please choose the note to view.Please choose the other to view.Please choose the reference to view.Please choose the second child to browse to.Please choose the second family to browse to.Please choose the second father/husband to browse to.Please choose the second mother/wife to browse to.Please choose the second spouse/parent to browse to.Please choose the source to view.Please choose the spouse/parent to browse to.Please choose the spouse/parent to remove from the family.Please enter person's internal key value.Please enter the name of the GEDCOM file.Please identify next person to browse to.Please identify one of the child's siblings.Please identify one of the spouses.Please identify person or persons to browse to.Please identify record to browse to.Please identify the child.Proc %s must be called with %d (not %d) parameters.Proceed anyway?Proceed without codeset conversion?Proceed?Processed %d lines without finding end of HEADQ Quit current databaseQUITQuit debuggerR Pick a GEDCOM file and read inREFN key is already in use.Record %s is referred to but not defined.Remove this family record?Report cancelledReport debuggerReport file: Report not found: %s Report stopping due to error opening output fileReport stopping due to lack of output fileReport to InternalReturn to current record (without adding xref).Runtime Error at line %d: SEGMENTATION ERRORSIGNAL 0SYSTEM CALL ERRORSecond argument to (r)sort must be list or arraySelect the child the new child precedes or select last.SheSingle person familySingle person family (%s)Something impossible happened. Contact tech support.SourceSourcesSource %s is referred to but not defined.Spouse unknownStartup collate locale: %sStartup messages locale: %sStrike any key to continue.System error: illegal map codeTERMINATE FROM KILLTRACE TRAPTag is too long to connect automatically.The child was removed from his/her family.The current list is not named.The current list is now named %s.The database is already open for writing.The database is locked (no readwrite access).The database is read only.The database is read only; you may not add records.The database is read only; you may not change records.The database is read only; you may not merge records.The database is read only; you may not remove records.The database is read-only; loading has been canceled.The database is unlocked.The database was not saved.The event was modified in the database.The families have different fathers/husbands; cannot merge.The families have different wives/mothers; cannot merge.The family was modified in the database.The file is as positioned at EOF.The new family was added to the database.The persons are not of opposite sex; can't make family.The record begins at wrong level.The record contains multiple level 0 lines.The record does not begin with a FAM line.The record does not begin with a SOUR line.The record does not begin with an EVEN line.The record does not begin with an INDI line.The record is empty.The record was modified in the database.The source was modified in the database.The spouse was removed from his/her family.The two children were swapped.The two families were swapped.There are no children in the database for this family.There is no LifeLines database in that directory.There is no one in the database with that name or key.There is no record with that key or reference.There is something wrong with the data.There was %d unresolved reference.There were %d unresolved references.These persons are children in different families.This does not point to another record in the database!This family already has a husband/male parent.This family already has a wife/female parent.This family has both spouses/parents; can't add another.This family has less than two children; can't swap.This family has neither spouse/parent; can't remove.This family has no female spouse/parent in the database.This family has no male spouse/parent in the database.This family still has links; not removed.This is not a lineage linked GEDCOM file.This person has no children in the database.This person has no older sibling in the database.This person has no spouse in the database.This person has no younger sibling in the database.This person is a spouse/parent in less than two families.This person is already a child in a family.This person is not a child in any family.This person is not a child in the family; can't remove.This person is not a spouse in the family; can't remove.This person is not a spouse or parent in any family.This person record does not have a name line.This person record has bad GEDCOM name syntax.This person's father is not in the database.This person's mother is not in the database.This person's parents are not in the database.This person's sex is not known; can't make family.This report requires a newer program to run Too many spouses to display full listTranslation TablesTwo parents of different sexes cannot be merged.Two persons with different parents cannot be merged.USER SIGNAL 1USER SIGNAL 2Undefined database error -- fix program.Undefined proc: %sUnknown signalUnsupported file encoding (no multibyte encodings except UTF-8).Unsupported file encoding: %s.Use original keys from GEDCOM file?WARNING: missing keysWINDOW CHANGEWarningWarningsWarning: database codeset unspecifiedWarning: not all conversions availableWhat activity do you want to perform?What directory holds (or will hold) the LifeLines database? (? to list)What do you want to add?What do you want to remove?What is the name of the output file?What is the name of the program?What persons or list do you want to add to the current list?What record do you want to edit?What record do you want to remove from the database?What scan type?What should the name of this list be?What utility do you want to perform?Which character mapping do you want to edit?Which character mapping do you want to save?Which event record do you want to edit?Which source record do you want to edit?Who do you want to remove from the database?Whom do you want to edit?Whose families/spouses are to be swapped?Whose key value do you want?You are at the bottom of the list.You are at the top of the list.You cannot change the sex of a parent.You cannot edit the CHIL lines in a family record.You cannot edit the FAM line in a family record.You cannot edit the FAMC line in a person record.You cannot edit the FAMS lines in a person record.You cannot edit the HUSB line in a family record.You cannot edit the INDI line in a person record.You cannot edit the WIFE line in a family record.You must identify a database.[ Decrease tree depth\My Documents\LifeLines\Databases\MyFamily] Increase tree depth^b History/back^c Clear history^f History/fwd^l History list^xb ChngHist/back^xc Clear ChngHist^xf ChngHist/fwd^xl ChngHist lista Add child to familya Add familya Add information to the databasea Add to this lista Create new familyaavabout %1abt %1adaradar sheniadopadradsaft %1after %1apraprilaugaugustavb Browse new personsb Browse the persons in the databaseb Browse to bottomb Browse to personsb. bap. baptbapt: barmbasmbef %1before %1bet %1 and %2between %1 and %2blesbornborn: brumbrumairebur. buriburi: c Browse to childrenc Browse top childrenc Character set optionsc Child - add a child to an existing familyc Child - remove a child from his/her familyc Review change history (%d record)c Review change history (%d records)cal %1calculated %1cb. cheshvanchildcompcould not open, read or write a block file.could not open, read or write an index file.could not open, read or write the key file (to alter database).could not open, read or write the key file.creation of new database failed.cremcshd Copy top to bottomd Delete from listd Delete information from the databased Remove as childd Remove child fromd Show database statisticsd. data blockdb directory is file, not directory.decdecemberdieddied: div. e Browse event recordse Edit recorde Edit the familye Edit the persone Edit the place abbreviation filee Edit this persone Edit top familye Edit top persone edit individual tables (in db)editor codeset: %seditor input codeset: %seditor output codeset: %seighteightheleveneleventhellelulenter file nameenter file name (*%s)enter integer:enter key or refn: enter key:enter name: enter path: enter string: enter y (yes) or n (no): errorerror accessing database directory.est %1estimated %1example: dbverify -ifsex "%s" export/import directory:f Browse to fatherf Browse to fathersf Browse top fatherf Family - create family record from one or two spousesf Family - remove a family completelyf Full database scanf Full name scanfatherfebfebruaryfifthfirstfiveflags: florflorealfourfourthfr %1fr %1 to %2frimfrimairefrom %1from %1 to %2frucfructidorfullname: person does not have a nameg Browse to familygedcom input codeset: %sgedcom output codeset: %sgermgerminalgettext dll had no versiongettext dll version: %sgettext dll: %sh Add as spouseheherher_himhisi Add as childi Browse this personi Identify a person from key valuei Individual - remove a person completelyi import all tables (from files into db)iconv (codeset conversion) is compiled in.iconv (codeset conversion) is not compiled in.iconv dll had no versioniconv dll version: %siconv dll: %sidentifier: %s should be a string illegal call to pos.iyariyrj Merge bottom to topj Move down listjanjanuaryjour_complementairsjuljulyjunjunek Find a person's key valuek Move up listkeyfile is corrupt.keyfile is wrong alignment.keyfile is wrong version.kislevksll load a table from a file (into db)m Browse to motherm Browse to mothersm Browse top motherm Mark this personm Show memory statisticsm. marmarchmarried: maymenu|trantable|dmenu|trantable|emenu|trantable|gmenu|trantable|imenu|trantable|mmenu|trantable|pmenu|trantable|rmenu|trantable|xmessmessidormothern Create new personn Name fragment (whitespace-delimited) scann Name this listname of database is too long.name: person does not have a namenineninthnisannivonivoseno gettext dll foundno iconv dll foundno keyfile (directory does not appear to be a database).novnovembernsno Browse to older sibo Edit the user options fileo Other - remove other record completelyoctoctoberonep Pedigree modep Person - add new person to the databasep Pick a report from list and runpattern: personpluvpluviosepraiprairialq Quit programq Return to main menuq Return to previous menur Generate report by entering report namer Read in data from a GEDCOM filer Refn scanr Remove as spouser Remove from listr Remove spouse fromreport codeset: %sreport input codeset: %sreport output codeset: %srequested database does not exist.resis Add spouse to familys Browse source recordss Browse to spouse/ss Browse top spouse/ss Save the database in a GEDCOM files Search databases Spouse - add a spouse to an existing familys Spouse - remove a spouse from a familys save a table to a file (from db)secondsepseptemberset(%s, ) is invalidsevenseventhsheshevatshvsignal %1: %2sivansixsixthsoundex: person does not have a namespousesurname: person does not have a namesvnt Browse to topt Enter tandem modet Modify character translation tablestamuztc Tandem to childrentententhtevettf Tandem to father/stg Tandem to family/sthe arg to empty is not a list, table or setthe arg to length is not a list, table or settherthermidorthirdthreetishritm Tandem to mother/stmzto %1ts Tandem to spouse/stshtt Enter family tandemtt Enter tandem modetu Tandem to parentstvttwelfthtwelvetwou Browse to parentsu Miscellaneous utilitiesusage: dbverify -(flags) v Review visit history (%d record)v Review visit history (%d records)vendvendemiaireventventosewarningx Browse other recordsx Handle source, event and other recordsx Swap mark/currentx Swap two childrenx Swap two familiesx Switch top/bottomx export all tables (from db to files)y Browse to younger siby Turn on syncyYyYnNzerozi Browse to indizz Browse to anyProject-Id-Version: lifelines 3.0.44 Report-Msgid-Bugs-To: POT-Creation-Date: 2007-08-08 15:56-0400 PO-Revision-Date: 2005-04-15 17:56+0200 Last-Translator: Piotr Bolek Language-Team: Polish MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); -D = Popraw nieprawid³owo usuniête pozycje -F = Popraw wszystkie b³êdne odsy³acze do rodzin (na _badptr) -G = Znajd¼ i popraw duchy (nazwiska/refn-y) -M = Popraw rekordy z brakuj±cymi pozycjami danych -a = Wykonaj wszystkie testy (bez poprawek) -e = Sprawd¼ wydarzenia -f = Sprawd¼ rodziny -g = Znajd¼ duchy (nazwiska/refn-y) -i = Sprawd¼ osoby -l = Sprawd¼ strukturê bazy danych -m = Znajd¼ rekordy z brakuj±cymi pozycjami danych -n = Ha³a¶liwie (wy¶wietlaj przetwarzane rekordy) -s = sprawd¼ ¼ród³a -x = Sprawd¼ inne Przerywamy dzia³anie. Dumpujemy cora? [y/n] Czas wykonania raportu %s (czas interfejsu %s) w pliku <%s>, wiersz %d w pliku <%s>, wiersz %d (dbint tt: %s) (niemodyfikowalne) (brak pliku rejestru)(tylko do odczytu) (patrz plik rejestru <%s>)!! Prze³±czanie trybów!a Tryb przodków!d Tryb potomków!g tryb GEDCOM!n Tryb zwyk³y!t tryb GEDCOMT!x tryb GEDCOMX# Numeruj dzieci$$ Poka¿ odno¶niki$n Poka¿ komentarze$s Poka¿ ¼ród³a%02ds%1 AUC%1 FR%1 HEB%1J%6d b³±d%6d b³êdy%6d b³êdów%6d ostrze¿enie%6d ostrze¿enia%6d ostrze¿eñ%c Zmieñ kolejno¶æ dzieci%d dziecko%d dzieci%d dzieci%d b³±d%d b³êdy%d b³êdów%d poprawiony%d poprawione%d poprawionychWyciek³ %d elementWyciek³y %d elementyWyciek³o %d elementów%d ma³¿onek%d ma³¿onków%d ma³¿onków%d ostrze¿enie przy imporcie%d ostrze¿enia przy imporcie%d ostrze¿eñ przy imporcieosób: %d, rodzin: %d, ¼róde³: %d, zdarzeñ: %d, innych: %d%dd%02dg%dg%02dm%dm%02ds%dl%03dd%e Dodaj zdarzenie%o Dodaj inne%s Dodaj ¼ród³o%s fkey=%d, plik=%s%s dodano jako dziecko.%s dodano jako ma³¿onka i/lub rodzica.%s dodano do bazy danych.%s zmodyfikowano w bazie danych.%s: Z³e argumenty%s: wiersz %d (pozycja %d): %s%s: pusty argument niedopuszczalny.%s: argument #%s ma powa¿ny b³±d.%s: argument #%s musi byæ warto¶ci± logiczn±.%s: argument #%s musi byæ rodzin±.%s: argument #%s musi byæ liczb± rzeczywist±.%s: argument #%s musi byæ list±.%s: argument #%s musi byæ wêz³em.%s: argument #%s musi byæ osob±.%s: argument #%s musi byæ rekordem.%s: argument #%s musi byæ zbiorem.%s: argument #%s musi byæ ci±giem znaków.%s: argument #%s musi byæ tabel±.%s: argument #%s musi byæ zmienn±.%s: argument #%s musi byæ liczb± ca³kowit±.%s: argument ma powa¿ny b³±d.%s: argument musi byæ rodzin±.%s: argumnet musi byæ nazw± pliku.%s: argument musi byæ list±.%s: argument musi byæ wêz³em albo ci±giem znaków.%s: argument musi byæ wêz³em.%s: argument musi byæ osob±.%s: argument musi byæ zbiorem.%s: argument musi byæ ci±giem znaków.%s: argument musi byæ zmienn±.%s: argument musi byæ liczb± ca³kowit±.( Przewiñ w górê(( Przewiñ oba w górê(1-9) Id¼ do dzieckaRodzina %s (%s, %s)(Separatorem jest %s)(b Przewiñ dó³ na górê(historia zmian pusta)(givens) osoba nie ma nazwiska(str %d/%d)(t Przewiñ na sam± górê(trimname) osoba nie ma nazwiska(historia odwiedzin jest pusta)) Przewiñ w dó³)) Przewiñ oba w dó³)b Przewiñ dó³ na dó³)t Przewiñ górê na dó³maj+ Nast. w bazie- Poprz. w bazie-- AKTUALNY WYBÓR ----- AKTUALNY WYBÓR ------ LISTA ---/home/users/myname/lifelines/databases/myfamily0 EVEN 1 REFN 1 DATE 1 PLAC 1 INDI 2 NAME 2 ROLE 1 SOUR0 SOUR 1 REFN 1 TITL Tytu³ 1 AUTH Autor0 XXXX 1 REFN1 Dodaj rekord ¼ród³owy do bazy danych2 Edytuj rekord ¼ród³owy z bazy danych3 Dodaj rekord ze zdarzeniem do bazy danych4 Edytuj rekord ze zdarzeniem z bazy danych5 Dodaj inny rekord do bazy danych6 Edytuj inny rekord z bazy danych< Zwiêksz pole menu> Zmniejsz pole menu? Inne pozycje menuA Widok zaawansowanyRodzina nie mo¿e byæ po³±czona sama ze sob±.Osoba nie mo¿e byæ po³±czona sama ze sob±.A.D.ABORTADALARM CLOCKnieudany ASSERTPrzerwanie: Dodano nieu¿ywane klucze jako klucze usuniête...Niejednoznaczne odwo³anie do procedury: %sCzy na pewno chcesz po³±czyæ?Czy na pewno chcesz usun±æ tê osobê z bazy danych?Czy na pewno chcesz usun±æ ten rekord z bazy danych?Argumentem dla opcji lock (-l) musi byæ y albo n.Argumenty dla (r)sort musz± mieæ taki sam rozmiarB Id¼ do nowej rodzinyB.C.B.C.E.BCBCEBUS ERRORB³êdny odno¶nik CHILB³êdny odno¶nik HUSBB³êdny odno¶nik HUSB (%s) w rodzinie %sB³êdny odno¶nik WIFEZ³y licznik historii archiwizacjiB³êdny odno¶nik dziecka (%s) w rodzinie %sZ³y format liczby dziesiêtnej.Z³y znak unikowy, przesuniêcie %d w ci±g bajtowym <%s>Z³y format unikowy.B³êdny odno¶nik do rodzinyB³êdny odno¶nik do rodziny (%s) osoba %sZ³y format liczby szesnastkowej.Z³y licznik historiiZ³a d³ugo¶æ historiiB³±d poziomu w wierszu %dB³êdna nazwaZ³e nazwisko osoby %s: %sB³êdny wska¼nikB³êdny wska¼nik (w %s): %sB³êdny odno¶nik WIFE (%s) w rodzinie %sPlik GEDCOM nie zosta³ za³adowany z powodu b³êdów. Obie rodziny musz± mieæ mê¿ów/ojców.Obie rodziny musz± mieæ ¿ony/matki.Przegl±daj nowy rekord (bez dodawania xref).C.E.CEZbuforowane: O:%s; R:%sNie mo¿na ³±czyæ opcji bezwarunkowego otwarcia (-f) z opcj± blokady (-l).Nie mo¿na ³±czyæ trybu niemodyfikowalnego (-i) albo tylko do czytania (-r) z dostêpem do odczytu-zapisu (-w).Nie mo¿na przekszta³ciæ kodowania (z <%s> na <%s>)Nie mo¿na usun±æ ostatniej osoby z rodziny.Sprawdzanie czy w pliku GEDCOM nie ma b³êdów. Wybierz rodzinê wybieraj±c ma³¿onka/rodzica.Wybierz operacjê:Wybierz bazê danych do otwarciaWybierz z historiiKonflikt z d³u¿szym klawiszem w elemencie: %sKonflikt z krótszym klawiszem w elemencie: %sInformacja o kodowaniuProcedura porównania: %sPolecenia: Wybierz numer, u Str. w górê, d Str. w dó³, i Wybór, q Wyj¶ciePolecenia: j Do do³u k Do góry i Wybierz q Wyjd¼Polecenia: j Do do³u k Do góry q Wyjd¼Polecenia: u Str. w górê, d Str. w dó³, q Wyj¶ciePolecenia: j W dó³ k Do góry d Usuñ i Wybierz q Wyj¶cieCopyright(c) 1991-1996, by T. T. Wetmore IVNie mo¿na otworzyæ pliku %sNie mo¿na otworzyæ pliku %s.Utwórz rodzinê z t± osob± jako dzieckiem.Utwórz rodzinê z t± osob± jako ma³¿onkiem/rodzicem.Bie¿±ca baza danych - %sBie¿±ca lokalizacja porównañ: %sBie¿±ca baza danychBie¿±ca lokalizacja komunikatów: %sCykl w indeksach, plik %s znaleziony ponownie! DEATH OF CHILDBaza danych `%s' zosta³a zapisana w `%s'.B³±d bazy danych: -- Rekordy bazy danychBaza danych zosta³a uszkodzona.Domy¶lna ¶cie¿ka: Skasowaæ historiê (%d pozycji)?Usuniêty zbiór zawiera wa¿ne rekordy %sUsuniête rekordyEkran->WewnêtrzneCzy na pewno chcesz dodaæ to dziecko do bazy danych?Czy na pewno chcesz dodaæ to zdarzenie do bazy danych?Czy na pewno chcesz dodaæ tê rodzinê do bazy danych?Czy na pewno chcesz dodaæ tê osobê do bazy danych?Czy na pewno chcesz dodaæ ten rekord do bazy danych?Czy na pewno chcesz dodaæ to ¼ród³o do bazy danych?Czy na pewno chcesz dodaæ tego ma³¿onka/rodzica do bazy danych?Czy na pewno chcesz po³±czyæ te dwie rodziny?Czy na pewno chcesz po³±czyæ te dwie osoby?Czy na pewno chcesz usun±æ to dziecko z jego rodziny?Czy na pewno chcesz usun±æ tego ma³¿onka z jego rodziny?Czy na pewno chcesz zaktualizowaæ to zdarzenie?Czy na pewno chcesz zaktualizowaæ tê rodzinê?Czy na pewno chcesz zaktualizowaæ tê osobê?Czy na pewno chcesz zaktualizowaæ ten rekord?Czy na pewno chcesz zaktualizowaæ tê osobê?Czy chcesz tutaj utworzyæ bazê danych?Czy chcesz edytowaæ zdarzenie ponownie?Czy edujesz zdarzenie ponownie? (Je¶li nie, to zmiany bêd± odrzucone).Czy chcesz edytowaæ rodzinê ponownie?Czy edytujesz rodzinê ponownie? (Je¶li nie, to zmiany bêd± odrzucone).Czy chcesz edytowaæ osobê ponownie?Czy edytujesz osobê ponownie? (Je¶li nie, to zmiany bêd± odrzucone).Czy chcesz edytowaæ rekord ponownie?Czy edytujesz rekord ponownie? (Je¶li nie, to zmiany bêd± odrzucone).Czy chcesz ¼ród³o rodzinê ponownie?Czy edytujesz ¼ród³o ponownie? (Je¶li nie, to zmiany bêd± odrzucone).Czy chcesz podaæ inne nazwisko?Czy chcesz edytowaæ to ponownie?Zduplikowane pole HEAD w wierszu %dZduplikowane zdarzenie dla %sZduplikowane zdarzeniaZduplikowane rodzinyZduplikowana rodzina %sZduplikowana funkcja %s (wiersze %d i %d) w raporcie: %sZduplikowany klawisz dla elementu: %sZduplikowana osoba %sZduplikowane osobyZduplikowane nazwisko %s (%s)Zduplikowane nazwiskaZduplikowane inneZduplikowana procedura %s (wiersze %d i %d) w raporcie: %sZduplikowany rekord dla %sZduplikowane refn %s (%s)Zduplikowane ¼ród³o dla %sZduplikowane ¼ród³aZduplikowane REFN - wybierz.EMT INSTEdytuj teraz bie¿±cy rekord i dodaj recznie xref.Edytor->WewnêtrznePusta rodzinaPusta rodzina (%s)Koniec pliku w wierszu %dPodaj Numer Rodziny do przerzeniaPodaj rodzeñstwo z rodziny.Podaj ma³¿onka z rodziny.Podaj domy¶lne kodowanie (* - brak)Podaj d aby przej¶æ do debugera, q - wyj¶ciePodaj liczbê ca³kowit± dla programuPodaj nazwê wyj¶ciowego pliku z archiwum.Podaj nazwê pliku z tabel± translacji do przeczytaniaPodaj nazwê pliku z tabel± translacji do zapisaniaPodaj wzorzec do dopasowania do pe³nego nazwiska.Podaj wzorzec do dopasoania do refn.Podaj wzorzec dopasowania do nazwiska lub imienia.Podaj ci±g znaków dla programub³±db³êdyb³êdówB³±d dostêpu do danychB³±d w wierszu %d: %sB³±d w pliku skrótów.B³±d w pliku z mapami znaków.B³±d w pliku z opcjami u¿ytkownika.B³±d: plik "%s": wiersz %d: B³±d: plik <%s> nie znalezionyB³±d: plik <%s> nie znaleziony: %s ZdarzenieZdarzeniaZdarzeñS± odno¶niki do niezdefiniowanego zdarzenia %s.Znaleziono istniej±c± bazê danych.B£¡Ð KRYTYCZNYB£¡D KRYTYCZNY: FLOATING POINT EXCEPTIONNie uda³o siê poprawiæ brakuj±cego nieusuniêtego rekordu %c%dNie uda³o siê poprawiæ brakuj±cego nieusuniêtego rekord %sNie mo¿na usuwaæ rodzin w ten sposób.RodzinaRodzinyRodzinS± odno¶niki do niezdefiniowanej rodziny %s.B³±d krytyczny¦cie¿ka za d³uga.Pierwszy argument dla (r)sort musi byæ list± lub tablic±Pierwszy klucz w bloku poni¿ej limitu rodziców Poprawiono b³êdny odno¶nik HUSB (%s) w rodzinie %sPoprawiono b³êdny odno¶nik WIFE (%s) w rodzinie %sPoprawiono b³êdny odno¶nik dziecka (%s) w rodzinie %sPoprawiony usuniêty zbiór zawiera poprawne rekordy %sPoprawiono brakuj±ce dziecko (%s) w rodzinie (%s)Poprawiono brakuj±cy rekord danych (%s)Poprawiono brakuj±cego ma³¿onka (%s) w rodzinie (%s)Poprawiono brakuj±cy nieusuniêty rekord %c%dZ której rodziny usun±æ dziecko?Z której rodziny usun±æ ma³¿onka/rodzica?kodowanie GEDCOM: %sGEDCOM->WewnêtrzneKodowanie interfejsu u¿ytkownika (GUI): %sKodowanie wej¶ciowe interfejsu u¿ytkownika (GUI): %sKodowanie wyj¶ciowe interfejsu u¿ytkownika (GUI): %sNazwisko duch: %s -> %sNazwiska - duchyZmienne globalneHANGUPOnJejJegoJak chcesz znale¼æ rekord?ILLEGAL INSTRUCTIONRekordy INDI, FAM, SOUR, EVEN nie mog± byæ rekordami typu inny.INTERRUPTPodaj dziecko z rodziny, je¶li znane.Podaj rodzica z rodziny, która ma zamienione dzieci.Podaj ma³¿onka z rodziny, je¶li jest znany.Wybierz ma³¿onka/rodzica dla nowej rodziny.Wybierz dziecko bêd±ce w rodzinie.Wybierz dziecko w drugiej rodzinie.Podaj rodzinê (nic nie wpisuj aby wybraæ przez cz³onków rodziny).Znajd¼ listê osób dla programu:Podaj jedno z rodziców dziecka, je¶li s± znani.Znajd¼ osobê dla programu:Wybierz drug± osobê do przejrzenia.Wybierz ma³¿onka/rodzica bêd±cego rodzinie, je¶li znany.Wybierz ma³¿onka/rodzica w drugiej rodzinie, je¶li znani.Podaj ma³¿onka/rodzica aby dodaæ do istniej±cej rodziny.Podaj dziecko do zamiany kolejno¶ci.Podaj pierwsze dziecko do zamiany.Podaj pierwszego ma³¿onka/rodzica do zamiany.Podaj drugie dziecko do zamiany.Podaj drugiego ma³¿onka/rodzica do zamiany.Wybierz ma³¿onka/rodzica, je¶li znany.Niedopuszczalny typ znaleziony na li¶cie wyboru menuNie mo¿na zmieniaæ kodowania w niepustej bazie danychCzas importu %s (czas interfejsu %s) Niew³a¶ciwy HUSBNiew³a¶ciwy HUSB (%s) w rodzinie %sNiew³a¶ciwy WIFENiew³a¶ciwy CHILNiew³a¶ciwa WIFE (%s) w rodzinie %sW pliku <%s> w wierszu %dW menu: %sAutomatycznie wstaw xref na koñcu bie¿±cego rekordu.Kodowanie wewnêtrzneWewnêtrzne->EkranWewnêtrzne->EdytorWewnêtrzne->GEDCOMWewnêtrzne->RaportNiew³a¶ciwy zestaw w³a¶ciwo¶ci dla nowej bazy danychCzy to jest nowe dziecko? Czy to jest nowy ma³¿onek? Czy to jest osoba? Wybierz je¶li tak.Czy to jest rekord? Wybierz je¶li tak.KILLOstatni klucz w bloku powy¿ej limitu rodziców LifeLines %s - Genealogiczna baza danych i system przetwarzaniaLifeLines -- Ekran przegl±dania dodarkowych informacji (* w³±cza/wy³±cza menu)LifeLines -- Ekran przegl±dania rodzin (* w³±cza/wy³±cza menu)LifeLines -- Ekran przegl±dania list (* w³±cza/wy³±cza menu)LifeLines -- Menu G³ówneLifeLines -- Ekran przegl±dania osób (* w³±cza/wy³±cza menu)LifeLines -- Ekran przegl±dania dwóch rodzin (* w³±cza/wy³±cza menu)LifeLines -- Ekran przegl±dania dwóch osób (* w³±cza/wy³±cza menu)Wiersz %d: Zdarzenie %s ma b³êdny klucz.Wiersz %d: Rodzina %s ma niew³a¶ciwy klucza.Wiersz %d: Rodzina %s ma wiele odno¶ników do mê¿a.Wiersz %d: Rodzina %s ma wiele odno¶ników do ¿ony.Wiersz %d: Osoba %s ma niew³a¶ciwy klucz: pominiêto.Wiersz %d: Osoba %s ma wiele odno¶ników do ojca.Wiersz %d: Osoba %s ma wiele odno¶ników do matki.Wiersz %d: Osoba %s jest jednocze¶nie kobiet± i mê¿czyzn±.Wiersz %d: Osoba %s jest kobiet± a musi byæ mê¿czyzn±.Wiersz %d: Osoba %s domy¶lnie powinna byæ jednocze¶nie kobiet± i mê¿czyzn±.Wiersz %d: Osoba %s jest mê¿czyzn± a musi byæ kobiet±.Wiersz %d: Zdefiniowana tu osoba nie ma imienia.Wiersz %d: Rekord %s ma b³êdny klucz.Wiersz %d: ¬ród³o %s ma b³êdny klucz.Wiersz %d: Definiowane zdarzenie nie ma klucza.Wiersz %d: Zdefiniowana tutaj rodzina nie ma klucza.Wiersz %d: Zdefiniowana tutaj osoba nie ma klucza: pominiêta.Wiersz %d: Definiowany rekord nie ma klucza.Wiersz %d: ¬ród³o zdefiniowane, ale nie ma klucza.Wiersz %d: Ten wiersz ma b³êdny odsy³acz.Wiersz %d: Wiersz ma za du¿y numer poziomu.Wiersz %d: Ten wiersz ma niew³a¶ciwy poziom.Wiersz %d: Ten wiersz nie ma numeru poziomu.Wiersz %d: Ten wiersz jest pusty; EOF?Wiersz %d: Ten wiersz jest niekompletny.Wiersz %d: Ten wiersz jest za d³ugi.Wiersz %d: W tym wierszu brakuje odstêpu przed znacznikiem.Wiersze %d i %d: Zdarzenie %s jest zdefiniowane wielokrotnie.Wiersze %d i %d: Rodzina %s jest wielokrotnie zdefiniowana.Wiersze %d i %d: Osoba %s jest wielokrotnie zdefiniowana: pominiêto.Wiersze %d i %d: Rekord %s jest zdefiniowany wielokrotnie.Wiersze %d i %d: ¬ród³o %s jest zdefiniowane wielokrotnie.Zmienne lokalneLocale wy³±czone.Locale w³±czone.Wygl±da jakby program dzia³a³. Sprawd¼ plik %1 w okolicach wiersza %2. M< Mniej kolumn menuM> Wiêcej kolumn menuB³êdny plik konfiguracyjny: za d³ugi wiersz.Menu (%s) sekwencja wyboru za d³uga: %sMenu (%s) element nie ma sekwencji wyboru: %sKomunikaty:Brak pola HEAD w wierszu %dBrak wiersza NAME w rekordzie INDI; rekord zignorowany. Brakuj±ce dzieckoBrak dziecka (%s) w rodzinie (%s)Brakuj±cy rekord danych (%s)Brakuj±ce rekordy danychBrakuj±ce rekordy (z deleteset)Brakuj±cy ma³¿onekBrak ma³¿onka (%s) w rodzinie (%s)Brak tytu³uBrakuj±cy nieusuniêty rekord %c%dNLS (National Language Support) w³±czone.NLS (National Language Support) wy³±czone.BRAK NAZWISKANowe osoby zosta³y dodane do bie¿±cej listy.Nowy rekord %sNowy ma³¿onek/rodzic ma nieokre¶lon± p³eæ; nie mo¿na dodaæ do rodziny.Brak konwersjiBie¿±cy kod wewnêtrzny niezdefiniowany, nie da siê wiêc wykonaæ konwersji kodówNie znaleziono baz danych w podanej ¶cie¿ceNie ma b³êdówNie ma b³êdów; dodajê rekordy z nowymi kluczami...Nie ma b³êdów; dodajê rekordy z oryginalnymi kluczami...Brak zdarzeñ.Nie ma wiêcej historiiBrak komentarzy.Nikt w bazie danych nie ma kodu %s.Brak ci±gu pierwotnego w wierszu.Nic innego nie ma.Nie dodano ¿adnej osoby do bie¿±cej listy.Nie znaleziono ¿adnych rekordówBrak odno¶ników.Brak ci±gu zastêpuj±cego w wierszu.Brak ¼róde³.Nie ma takiego dziecka.Nie ma takiej rodziny.Nie ma takiej osoby.Nie ma takiego rekordu.Nie ma takiej tabeli translacji w tej bazie danychWycieki pamiêci w wê¼le:Nazwisko nie-indi, klucz=%s, nazwisko=%sNazwiska nie-indiJeszcze nie zaimplementowaneNieznane polecenieOsierocone nazwiskaOsierocone nazwisko: %sOsierocone refn: %sInneInneInnychPIPE WRITEPOWER-FAIL RESTARTB³±d sk³adniowy w wierszu %d: Wykonywanie przeszukiwania po ca³ym nazwiskuWykonywanie przeszukiwania po imieniu lub nazwiskuWykonywanie pe³nego przeszukiwania po refnOsobaOsobyOsóbS± odno¶niki do niezdefiniowanej osoby %s.Umie¶æ dziecko jako ostatnie w rodzinie.Proszê wybraæ dzia³anie:Wybierz operacjê utworzenia rodziny.Wybierz z poni¿szych osób.Wybierz z poni¿szych rekordów.Wybierz z poni¿szej listy.Wybierz jedn± z opcji:Wybierz dziecko do przejrzenia.Wybierz dziecko do usuniêcia z rodziny.Wybierz zdarzenie do obejrzenia.Wybierz rodzinê do przejrzenia.Wybierz ojca/m꿱 do przejrzenia.Wybierz pierwsze dziecko do przejrzenia.Wybierz pierwsz± rodzinê do przejrzenia.Wybierz pierwszego ojca/m꿱 do przejrzenia.Wybierz pierwsz± matkê/¿onê do przejrzenia.Wybierz pierwszego ma³¿onka/rodzica do przejrzenia.Wybierz matkê/¿onê do przejrzenia.Wybierz komentarz do obejrzenia.Wybierz inne do obejrzenia.Wybierz odno¶nik do przejrzenia.Wybierz drugie dziecko do przejrzenia.Wybierz drug± rodzinê do przejrzenia.Wybierz drugiego ojca/m꿱 do przejrzenia.Wybierz drug± matkê/¿onê do przejrzenia.Wybierz drugiego ma³¿onka/rodzica do przejrzenia.Wybierz ¼ród³a do obejrzenia.Wybiersz ma³¿onka/rodzica do przejrzenia.Wybierz ma³¿onka/rodzica do usuniêcia z rodziny.Podaj warto¶æ wewnêtrzego klucza osoby.Podaj nazwê pliku GEDCOM.Podaj nastêpn± osobê do przejrzenia.Podaj jedno z rodzeñstwa dziecka.Podaj jedno z ma³¿onków.Wybierz osobê lub osoby do przejrzenia.Wybierz nastêpny rekord do przejrzenia.Podaj dziecko.Procedura %s musi byæ wywo³ana z %d (a nie z %d) parameterami.Kontynuowaæ mimo wszystko?Kontynuowaæ bez konwersji kodów?Kontynuujemy?Przetworzono %d wierszy bez znalezienia koñca pola HEADQ Wyj¶cie z bie¿±cej bazy danychQUITWyj¶cie z debugeraR Wybierz i wczytaj plik GEDCOMKlucz REFN jest ju¿ u¿ywany.Odwo³anie do niezdefiniowanego rekordu %s.Usun±æ ten rekord rodziny?Raport wstrzymanyRaport debugeraPlik raportu: Raport nie znaleziony: %s Raport zatrzymany z powodu b³êdu otwarcia pliku wyj¶ciowegoRaport zatrzymany z powodu braku pliku wyj¶ciowegoRaport->WewnêtrzneWróæ do nowego rekordu (bez dodawania xref).B³±d wykonania w wierszu %d: SEGMENTATION ERRORSIGNAL 0SYSTEM CALL ERRORDrugi argument dla (r)sort musi byæ list± albo tablic±Wybierz dziecko, przed którym ma byæ nowe lub wstaw ostatnie.OnaRodzina jednoosobowaRodzina jednoosobowa (%s)Sta³o siê co¶ niemo¿liwego. Skontaktuj siê z pomoc± techniczn±.¬ród³o¬ród³a¬róde³S± odno¶niki do niezdefiniowanego ¼ród³a %s.Ma³¿onek nieznanyPocz±tkowa lokalizacja porównañ: %sPocz±tkowa lokalizacja komunikatów: %sNaci¶nij dowolny klawisz aby kontynuowaæ.B³±d systemy: nielegalny kod mapyTERMINATE FROM KILLTRACE TRAPZnacznik za d³ugi ¿eby go po³±czyæ automatycznie.Dziecko zosta³o usuniête ze swojej rodziny.Bie¿±ca lista nie ma nazwy.Bie¿±ca lista nazywa siê teraz %s.Baza danych jest ju¿ otwarta do pisania.Baza danych jest zablokowana (brak dostêpu do odczytu i zapisu).Baza danych tylko do odczytu.Baza danych tylko do odczytu; nie mo¿esz dodawaæ rekordów.Baza danych tylko do odczytu; nie mo¿esz zmieniaæ rekordów.Baza danych tylko do odczytu; nie mo¿esz ³±czyæ rekordów.Baza danych tylko do odczytu; nie mo¿esz usuwaæ rekordów.Baza danych tylko do odczytu; wczytywanie zaniechane.Baza danych jest odblokowana.Baza danych nie zapisana.Zdarzenie zosta³o zmodyfikowane w bazie danych.Rodziny maj± ró¿nych ojców/mê¿ów; nie mo¿na po³±czyæ.Rodziny maj± ró¿ne matki/¿ony; nie mo¿na po³±czyæ.Rodzina zosta³a zmodyfikowana w bazie danych.Plik ustawiony na koñcu.Nowa rodzina dodana do bazy danych.Osoby nie s± ró¿nej p³ci; nie mog± utworzyæ rodziny.Rekord zaczyna siê na z³ym poziomie.Rekord zawiera wiele wierszy poziomu 0.Rekord nie zaczyna siê wierszem FAM.Rekord nie zaczyna siê wierszem SOUR.Rekord nie zaczyna siê wierszem EVEN.Rekord nie zaczyna siê wierszem INDI.Rekord jest pusty.Rekord zosta³ zmodyfikowany w bazie danych.¬ród³o zosta³o zmodyfikowane w bazie danych.Ma³¿onek zosta³ usuniêty ze swojej rodziny.Zamieniono dwoje dzieci.Zamieniono dwie rodziny.Ta rodzina nie ma dzieci w bazie danych.W tym katalogu nie ma bazy danych LifeLines.Nie ma w bazie nikogo o takim nazwisku lub kluczu.Nie ma rekordu z takim kluczem lub odsy³aczem.Co¶ niedobrego sta³o siê z danymi.By³o %d nietrafione odwo³anie.By³y %d nietrafione odwo³ania.By³o %d nietrafionych odwo³añ.Te osoby s± dzieæmi w ró¿nych rodzinach.To nie wskazuje na inny rekord w bazie danych!Ta rodzina ma ju¿ mê¿a/ojca.Ta rodzina ma ju¿ ¿onê/matkê.Ta rodzina ma ju¿ oboje ma³¿onków/rodziców; nie mo¿na dodaæ wiêcej.Rodzina ma mniej ni¿ dwoje dzieci; nie mo¿na zamieniæ.Ta rodzina nie ma ma³¿onków/rodziców; nie mo¿na usun±æ.Ta rodzina nie ma ¿eñskiego ma³¿onka/rodzica w bazie danych.Ta rodzina nie ma mêskiego ma³¿onka/rodzica w bazie danych.Ta rodzina dalej ma powi±zania; nie usuniêta.To nie jest plik GEDCOM typu 'lineage linked'.Ta osoba nie ma dzieci w bazie danych.Ta osoba nie ma starszego rodzeñstwa w bazie danych.Ta osoba nie ma ma³¿onka w bazie danych.Ta osoba nie ma m³odszego rodzeñstwa w bazie danych.Ta osoba jest ma³¿onkiem/rodzicem w mniej ni¿ dwóch rodzinach.Ta osoba jest ju¿ dzieckiem w rodzinie.Osoba nie jest dzieckiem w ¿adnej rodzinie.Ta osoba nie jest dzieckiem w rodzinie; nie mo¿na usun±æ.Ta osoba nie jest ma³¿onkiem w rodzinie; nie mo¿na usun±æ.Osoba nie jest ma³¿onkiem ani rodzicem w ¿adnej rodzinie.Rekord tej osoby nie ma wiersza nazwiska.W rekordzie tej osoby nazwisko niezgodne ze sk³adni± GEDCOM.Ojca tej osoby nie ma w bazie danych.Matki tej osoby nie ma w bazie danych.Rodziców tej osoby nie ma w bazie danych.P³eæ tej osoby nie jest znana; nie mo¿na utworzyæ rodziny.Ten raport wymaga do dzia³ania noweszego programu Za du¿o ma³¿onków ¿eby wy¶wietliæ pe³n± listêTablice translacjiDwoje rodziców ró¿nej p³æi nie mo¿e byæ po³±czonych.Dwie osoby maj±ce ró¿nych rodziców nie mog± byæ po³±czone.USER SIGNAL 1USER SIGNAL 2Nieznany b³±d bazy danych -- popraw program.Niezdefiniowana procedura: %sNieznany sygna³Nieobs³ugiwane kodowanie pliku (z kodowañ wielobajtowych - mo¿na tylko UTF-8).Nieobs³ugiwane kodowanie pliku: %s.U¿yæ oryginalnych kluczy z pliku GEDCOM?UWAGA: brakuj±ce kluczeWINDOW CHANGEostrze¿enieostrze¿eniaostrze¿eñUwaga: nieokre¶lone kodowanie w bazieUwaga: nie wszystkie konwersje s± dostêpneCo chcesz zrobiæ?W którym katalogu jest (lub bêdzie) baza danych LifeLines? (? = lista)Co chcesz dodaæ?Co chcesz usun±æ?Jaka jest nazwa pliku wyj¶ciowego?Jaka jest nazwa programu?Któr± osobê lub listê chcesz dodaæ do bie¿±cej listy?Który rekord chcesz edytowaæ?Który rekord chcesz usun±æ z bazy danych?Jaki sposób przeszukiwania?Jak ma siê nazywaæ ta lista?Jakiego narzêdzia chcesz u¿yæ?Któr± mapê znaków chcesz edytowaæ?Któr± mapê znaków chcesz zapisaæ?Który rekord zdarzenia chcesz edytowaæ?Który rekord ¼ród³owy chcesz edytowaæ?Kogo chcesz usun±æ z bazy danych?Kogo chcesz edytowaæ?Które rodziny/ma³¿onkowie maj± byæ zamienieni?Któr± warto¶æ klawisza chcesz?Jeste¶ na koñcu listy.Jeste¶ na pocz±tku listy.Nie mo¿esz zmieniaæ p³ci rodzica.Nie mo¿esz zmieniaæ wiersza CHIL w rekorcie rodziny.Nie mo¿esz zmieniaæ wiersza FAM w rekorcie rodziny.Nie mo¿esz zmieniaæ wiersza FAMC w rekorcie osoby.Nie mo¿esz zmieniaæ wierszy FAMS w rekorcie osoby.Nie mo¿esz zmieniaæ wiersza HUSB w rekorcie rodziny.Nie mo¿esz zmieniaæ wiersza INDI w rekorcie osoby.Nie mo¿esz zmieniaæ wiersza WIFE w rekorcie rodziny.Musisz podaæ bazê danych.[ Zmniejsz wys. drzewa\My Documents\LifeLines\Databases\MyFamily] Zwiêksz wys. drzewa^b Historia/w ty³^c Skasuj historiê^f Historia/w przód^l Poka¿ historiê^xb HistZmian/w ty³^xc Skasuj HistZmian^xf HistZmian/w przód^xl Poka¿ HistZmiana Dodaj dzieckoa Dodaj rodzinêa Dodaj informacje do bazy danycha Dodaj do tej listya Utwórz now± rodzinêaavoko³o %1ok. %1adaradar sheniadopadradspo %1po %1kwikwiecieñsiesierpieñavb Id¼ do nowych osóbb Przegl±daj osoby w bazie danychb Id¼ na dó³b Id¼ do osóbur. chrz. chrz.chrz.: barmbasmprzed %1przed %1pom. %1 a %2between %1 and %2blesur.ur.:brumbrumairepoch. pog.poch.: c Id¼ do dziecic Id¼ do najwy¿szych dziecic Ustawienia zestawów znakówc Dziecko - dodaj dziecko do istniej±cej rodzinyc Dziecko - usuñ dziecko z jego rodzinyc Zobacz historiê zmian (%d rekord)c Zobacz historiê zmian (%d rekordy)c Zobacz historiê zmian (%d rekordów)obl. %1obliczone %1ur. dz. cheshvandzieckocompnie mo¿na otworzyæ, przeczytaæ albo zapisaæ bloku pliku.nie mo¿na otworzyæ, przeczytaæ albo zapisaæ pliku z indeksem.nie mo¿na otworzyæ, przeczytaæ albo zapisaæ pliku z kluczami (przy dostêpie do bazy danych).nie mo¿na otworzyæ, przeczytaæ albo zapisaæ pliku z kluczami.nie uda³o siê utworzenie nowej bazy danych.krem.cshd Skopiuj górê na dó³d Usuñ z listyd Usuñ informacje z bazy danychd Usuñ jako dzieckod Usuñ dzieckod Poka¿ statystyki bazy danychzm. blok danychkatalog z baz± jest plikiem, a nie katalogiem.grugrudzieñzm.zm.: rozw. e Przegl±daj rekordy zdarzeñe Edycja rekordue Edycja rodzinye Edycja osobye Edycja pliku ze skrótami miejscowo¶cie Edytuj tê osobêe Edycja rodzinye Edycja najwy¿szej osobye edycja poszczególnych tabel (w bd)kodowanie edytora: %skodowanie wej¶ciowe edytora: %skodowanie wyj¶ciowe edytora: %sosiemósmyjedena¶ciejedenastyellelulpodaj nazwê plikupodaj nazwê pliku (*%s)podaj liczbê ca³kowit±:podaj klucz albo refnpodaj klucz:podaj nazwê: podaj ¶cie¿kê:podaj ci±g znaków: podaj t (tak) albo n (nie): b³±db³±d przy dostêpie do katalogu z baz± danych.szac. %1szac. %1przyk³ad: dbverify -ifsex "%s" katalog do eksportu/importu:f Id¼ do ojcaf Id¼ do ojcówf Id¼ do najwy¿szego ojcaf Rodzina - utwórz rekord rodziny z jednego lub dwóch ma³¿onkówf Rodzina - usuñ rodzinê zupe³nief Przeszukiwanie ca³ej bazyf Przeszukiwanie po ca³ym nazwisku (z imionami)ojcieclutlutypi±typierwszypiêæopcje: florflorealczteryczwartyod %1od %1 do %2frimfrimaireod %1od %1 do %2frucfructidorfullname: osoba nie ma nazwiskag Id¼ do rodzinykodowanie wej¶ciowe GEDCOM: %skodowanie wyj¶ciowe GEDCOM: %sgermgerminalgettext dll nie ma wersjigettext dll wersja: %sgettext dll: %sh Dodaj jako ma³¿onkaonjejjej_jemujegoi Dodaj jako dzieckoi Id¼ do tej osobyi Znajd¼ osobê na podstawie warto¶ci kluczai Osoba - usuñ osobê zupe³niei importuj wszystkie tabele (z plików do bd)iconv (konwersja kodowania) w³±czona.iconv (konwersja kodowania) wy³±czona.iconv dll nie ma wersjiiconv dll wesja: %siconv dll: %sidentifikator: %s powinien byæ ci±giem znaków nielegalne odwo³anie do poz.iyariyrj Po³±cz dó³ z gór±j Przesuñ listê w dó³stystyczeñjour_complementairsliplipiecczeczerwieck Znajd¼ warto¶æ klucza osobyk Przesuñ listê w górêplik z kluczami jest uszkodzony.plik z kluczami ma b³êdne wyrówniania.plik z kliczami z z³ej wersji.kislevksll wczytaj tabele z pliku (do bd)m Id¼ do matkim Id¼ do matekm Id¼ do najwy¿szej matkim Zaznacz tê osobêm Poka¿ statystyki pamiêci¶l. marmarzec¶lub: majdegimprxmessmessidormatkan Utwórz now± osobên Przeszukiwanie po nazwisku lub imionachn Nazwij listênazwa bazy danych jest za d³uga.name: osoba nie ma nazwiskadziewiêædziewi±tynisannivonivosenie znaleziono gettext dllnie znalezionoe dll iconvbrak pliku z kluczami (katalog nie wygl±da jak baza danych).lislistopadnsno Starsze rodzeñstwoo Edycja pliku z ustawieniami u¿ytkownikao Inne - usuñ rekord zupe³niepa¼pa¼dziernikjedenp Tryb genealogiip Osoba - dodaj now± osobê do bazy danychp Wybierz i wykonaj raport z listywzorzec:Osobapluvpluviosepraiprairialq Wyj¶cie z programuq Do menu g³ównegoq Powrót do poprzedniego menur Generuj raport podaj±c jego nazwêr Odczytaj dane z pliku GEDCOMr Przeszukiwanie refnr Usuñ jako ma³¿onkar Usuñ z listyr Usuñ ma³¿onkakodowanie raportów: %skodowanie wej¶ciowe raportów: %skodowanie wyj¶ciowe raportów: %spodana baza danych nie istnieje.zam.s Dodaj ma³¿onkas Przegl±daj rekordy ¼ród³owes Id¼ do ma³¿onkas Id¼ do najwy¿szego ma³¿onkas Zapisz bazê w pliku GEDCOMs Szukaj w bazie danychs Ma³¿onek - dodaj ma³¿onka do istniej±cej rodzinys Ma³¿onek - usuñ ma³¿onka z rodzinys zapisz tabele do pliku (z bd)drugiwrzwrzesieñset(%s, ) jest niedopuszczalnesiedemsiódmyonashevatshvsygna³ %1: %2sivansze¶æszóstysoundex: osoba nie ma nazwiskama³¿oneksurname: osoba nie ma nazwiskasvnt Id¼ na górêt Wejd¼ w tryb podwójnyt Zmieñ tabele translacji znakówtamuztc Tryb dwójki dziecidziesiêædziesi±tytevettf Tryb dwóch ojcówtg Tryb dwóch rodzinargument polecenie empty nie jest list±, tabel± ani zbioremargument polecenia length nie jest list±, tabel± ani zbioremtherthermidortrzecitrzytishritm Tryb dwóch matektmzdo %1ts Tryb dwóch ma³¿onkówtshtt Tryb dwóch rodzintt Wejd¼ w tryb tandemtu Tryb dwojga rodzicówtvtdwunastydwana¶ciedwau Id¼ do rodzicówu Ró¿ne narzêdziau¿ycie: dbverify -(opcje) v Zobacz historiê wizyt (%d rekord)v Zobacz historiê wizyt (%d rekordy)v Zobacz historiê wizyt (%d rekordów)vendvendemiaireventventoseostrze¿eniex Przegl±daj inne rekordyx Edycja ¼róde³, zdarzeñ i rekordówx Zamieñ zaznaczony/bie¿±cyx Przestaw dwoje dziecix Przestaw dwie rodzinyx Zmieñ górê/dó³x eksportuj wszystkie tabele (z bd do plików)y M³odsze rodzeñstwoy W³±cz synchronizacjêtTtTnNzerozi Id¼ do osobyzz Id¼ do dowolnegolifelines-3.0.61/po/pl.po0000700002540200244210000040342410656417751015355 0ustar prappDomain Users# Polish messages for Lifelines # Copyright (C) 2004 Free Software Foundation, Inc. # This file is distributed under the same license as the lifelines package. # Translation by Piotr Bolek , 2004. # msgid "" msgstr "" "Project-Id-Version: lifelines 3.0.44\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-08-08 15:56-0400\n" "PO-Revision-Date: 2005-04-15 17:56+0200\n" "Last-Translator: Piotr Bolek \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" #: src/btree/btrec.c:369 #, c-format msgid "Failed (errno=%d) to open blockfile (rkey=%s): %s" msgstr "" #: src/btree/btrec.c:438 #, c-format msgid "Btree lookup looped back to master (%ld)!" msgstr "" #: src/gedlib/charmaps.c:769 msgid "" msgstr "" #. TRANSLATORS: seconds time interval #: src/gedlib/dateprint.c:783 #, c-format msgid "%02ds" msgstr "%02ds" #. TRANSLATORS: minutes & seconds time interval #: src/gedlib/dateprint.c:789 #, c-format msgid "%dm%02ds" msgstr "%dm%02ds" #. TRANSLATORS: hours & minutes time interval #: src/gedlib/dateprint.c:795 #, c-format msgid "%dh%02dm" msgstr "%dg%02dm" #. TRANSLATORS: days & hours time interval #: src/gedlib/dateprint.c:801 #, c-format msgid "%dd%02dh" msgstr "%dd%02dg" #. TRANSLATORS: years & days time interval #: src/gedlib/dateprint.c:805 #, c-format msgid "%dy%03dd" msgstr "%dl%03dd" #: src/gedlib/dbcontext.c:276 msgid "Database error: -- " msgstr "B³±d bazy danych: -- " #: src/gedlib/dbcontext.c:280 msgid "requested database does not exist." msgstr "podana baza danych nie istnieje." #: src/gedlib/dbcontext.c:283 msgid "db directory is file, not directory." msgstr "katalog z baz± jest plikiem, a nie katalogiem." #: src/gedlib/dbcontext.c:286 msgid "creation of new database failed." msgstr "nie uda³o siê utworzenie nowej bazy danych." #: src/gedlib/dbcontext.c:289 msgid "error accessing database directory." msgstr "b³±d przy dostêpie do katalogu z baz± danych." #: src/gedlib/dbcontext.c:292 msgid "no keyfile (directory does not appear to be a database)." msgstr "brak pliku z kluczami (katalog nie wygl±da jak baza danych)." #: src/gedlib/dbcontext.c:295 msgid "could not open, read or write an index file." msgstr "nie mo¿na otworzyæ, przeczytaæ albo zapisaæ pliku z indeksem." #: src/gedlib/dbcontext.c:298 msgid "could not open, read or write the key file." msgstr "nie mo¿na otworzyæ, przeczytaæ albo zapisaæ pliku z kluczami." #: src/gedlib/dbcontext.c:301 msgid "could not open, read or write the key file (to alter database)." msgstr "" "nie mo¿na otworzyæ, przeczytaæ albo zapisaæ pliku z kluczami (przy dostêpie " "do bazy danych)." #: src/gedlib/dbcontext.c:304 msgid "could not open, read or write a block file." msgstr "nie mo¿na otworzyæ, przeczytaæ albo zapisaæ bloku pliku." #: src/gedlib/dbcontext.c:307 msgid "name of database is too long." msgstr "nazwa bazy danych jest za d³uga." #: src/gedlib/dbcontext.c:310 msgid "The database is already open for writing." msgstr "Baza danych jest ju¿ otwarta do pisania." #: src/gedlib/dbcontext.c:313 msgid "The database is locked (no readwrite access)." msgstr "Baza danych jest zablokowana (brak dostêpu do odczytu i zapisu)." #: src/gedlib/dbcontext.c:316 msgid "The database is unlocked." msgstr "Baza danych jest odblokowana." #: src/gedlib/dbcontext.c:319 msgid "keyfile is corrupt." msgstr "plik z kluczami jest uszkodzony." #: src/gedlib/dbcontext.c:322 msgid "keyfile is wrong alignment." msgstr "plik z kluczami ma b³êdne wyrówniania." #: src/gedlib/dbcontext.c:325 msgid "keyfile is wrong version." msgstr "plik z kliczami z z³ej wersji." #: src/gedlib/dbcontext.c:328 msgid "Existing database found." msgstr "Znaleziono istniej±c± bazê danych." #: src/gedlib/dbcontext.c:332 #, fuzzy, c-format msgid "The database is already opened for read access by %d user." msgid_plural "The database is already opened for read access by %d users." msgstr[0] "" "Baza danych jest ju¿ otwarta do czytania przez %d u¿ytkowników.\n" " " msgstr[1] "" "Baza danych jest ju¿ otwarta do czytania przez %d u¿ytkowników.\n" " " msgstr[2] "" "Baza danych jest ju¿ otwarta do czytania przez %d u¿ytkowników.\n" " " #: src/gedlib/dbcontext.c:338 msgid "Invalid properties set for new database" msgstr "Niew³a¶ciwy zestaw w³a¶ciwo¶ci dla nowej bazy danych" #: src/gedlib/dbcontext.c:341 msgid "Undefined database error -- fix program." msgstr "Nieznany b³±d bazy danych -- popraw program." #: src/gedlib/gedcom.c:112 msgid "Missing NAME line in INDI record; record ignored.\n" msgstr "Brak wiersza NAME w rekordzie INDI; rekord zignorowany.\n" #: src/gedlib/init.c:228 src/tools/btedit.c:207 #, fuzzy, c-format msgid "Copyright (C) 1991-2007 Thomas T. Wetmore IV et al." msgstr "Copyright(c) 1991-1996, by T. T. Wetmore IV" #: src/gedlib/init.c:230 src/tools/btedit.c:209 #, c-format msgid "" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." msgstr "" #: src/gedlib/init.c:235 src/tools/btedit.c:214 #, c-format msgid "Written by Tom Wetmore. Maintained at lifelines.sourceforge.net." msgstr "" #: src/gedlib/keytonod.c:686 #, c-format msgid "Database error caused by reference to nonexisting key <%s>." msgstr "" #: src/gedlib/keytonod.c:687 msgid "It might be possible to fix this with btedit." msgstr "" #: src/gedlib/keytonod.c:688 msgid "Neighboring keys include:" msgstr "" #: src/gedlib/keytonod.c:1045 #, c-format msgid "Bad cache entry <%s> != <%s>" msgstr "" #: src/gedlib/keytonod.c:1072 #, c-format msgid "Cache [%s] overflowed its max size (%d)" msgstr "" #: src/gedlib/messages.c:44 msgid "You must identify a database." msgstr "Musisz podaæ bazê danych." #: src/gedlib/messages.c:45 msgid "What directory holds (or will hold) the LifeLines database? (? to list)" msgstr "W którym katalogu jest (lub bêdzie) baza danych LifeLines? (? = lista)" #: src/gedlib/messages.c:46 msgid "enter path: " msgstr "podaj ¶cie¿kê:" #: src/gedlib/messages.c:47 msgid "There is no LifeLines database in that directory." msgstr "W tym katalogu nie ma bazy danych LifeLines." #: src/gedlib/messages.c:48 msgid "Do you want to create a database there?" msgstr "Czy chcesz tutaj utworzyæ bazê danych?" #: src/gedlib/messages.c:49 msgid "Argument to lock (-l) must be y or n." msgstr "Argumentem dla opcji lock (-l) musi byæ y albo n." #: src/gedlib/messages.c:50 msgid "Cannot remove last person from family." msgstr "Nie mo¿na usun±æ ostatniej osoby z rodziny." #: src/gedlib/messages.c:52 #, fuzzy msgid "lines [-adkrwiflntcuFxoCzI] [database] # Use -F for Finnish database" msgstr "lines [-adkrwiflntcuFxoC] [baza danych] # U¿yj -F dla bazy fiñskiej" #: src/gedlib/messages.c:54 #, fuzzy msgid "lines [-adkrwiflntcuxoCzI] [database] # Finnish database" msgstr "lines [-adkrwiflntcuxoC] [baza danych] # baza fiñska" #: src/gedlib/messages.c:56 #, fuzzy msgid "lines [-adkrwiflntcuxoCzI] [database]" msgstr "lines [-adkrwiflntcuxoC] [baza danych]" #: src/gedlib/messages.c:58 msgid "The database is read only; you may not add records." msgstr "Baza danych tylko do odczytu; nie mo¿esz dodawaæ rekordów." #: src/gedlib/messages.c:59 msgid "The database is read only; you may not change records." msgstr "Baza danych tylko do odczytu; nie mo¿esz zmieniaæ rekordów." #: src/gedlib/messages.c:60 msgid "The database is read only; you may not merge records." msgstr "Baza danych tylko do odczytu; nie mo¿esz ³±czyæ rekordów." #: src/gedlib/messages.c:61 msgid "The database is read only; you may not remove records." msgstr "Baza danych tylko do odczytu; nie mo¿esz usuwaæ rekordów." #: src/gedlib/messages.c:62 msgid "The database is read only." msgstr "Baza danych tylko do odczytu." #: src/gedlib/messages.c:64 #, fuzzy msgid "Name, key, refn, list, or @:" msgstr "podaj nazwisko, klucz, refn albo listê:" #: src/gedlib/messages.c:65 msgid "enter key or refn: " msgstr "podaj klucz albo refn" #: src/gedlib/messages.c:66 msgid "Please choose the child to remove from the family." msgstr "Wybierz dziecko do usuniêcia z rodziny." #: src/gedlib/messages.c:67 msgid "Please choose the spouse/parent to remove from the family." msgstr "Wybierz ma³¿onka/rodzica do usuniêcia z rodziny." #: src/gedlib/messages.c:68 msgid "From which family is the child to be removed?" msgstr "Z której rodziny usun±æ dziecko?" #: src/gedlib/messages.c:69 msgid "From which family is the spouse/parent to be removed?" msgstr "Z której rodziny usun±æ ma³¿onka/rodzica?" #: src/gedlib/messages.c:70 msgid "Identify family (enter nothing to identify by individual members)." msgstr "Podaj rodzinê (nic nie wpisuj aby wybraæ przez cz³onków rodziny)." #: src/gedlib/messages.c:71 msgid "Identify a spouse of the family, if known." msgstr "Podaj ma³¿onka z rodziny, je¶li jest znany." #: src/gedlib/messages.c:72 msgid "Identify a child of the family, if known." msgstr "Podaj dziecko z rodziny, je¶li znane." #: src/gedlib/messages.c:73 msgid "Identify the first child to swap." msgstr "Podaj pierwsze dziecko do zamiany." #: src/gedlib/messages.c:74 msgid "Identify the second child to swap." msgstr "Podaj drugie dziecko do zamiany." #: src/gedlib/messages.c:75 msgid "Identify the child to reorder." msgstr "Podaj dziecko do zamiany kolejno¶ci." #: src/gedlib/messages.c:76 msgid "Identify the first family/spouse to swap." msgstr "Podaj pierwszego ma³¿onka/rodzica do zamiany." #: src/gedlib/messages.c:77 msgid "Identify the second family/spouse to swap." msgstr "Podaj drugiego ma³¿onka/rodzica do zamiany." #: src/gedlib/messages.c:78 msgid "Please choose the spouse/parent to browse to." msgstr "Wybiersz ma³¿onka/rodzica do przejrzenia." #: src/gedlib/messages.c:79 msgid "Please choose the first spouse/parent to browse to." msgstr "Wybierz pierwszego ma³¿onka/rodzica do przejrzenia." #: src/gedlib/messages.c:80 msgid "Please choose the second spouse/parent to browse to." msgstr "Wybierz drugiego ma³¿onka/rodzica do przejrzenia." #: src/gedlib/messages.c:81 msgid "Please choose the child to browse to." msgstr "Wybierz dziecko do przejrzenia." #: src/gedlib/messages.c:82 msgid "Please choose the first child to browse to." msgstr "Wybierz pierwsze dziecko do przejrzenia." #: src/gedlib/messages.c:83 msgid "Please choose the second child to browse to." msgstr "Wybierz drugie dziecko do przejrzenia." #: src/gedlib/messages.c:84 msgid "Please choose the family to browse to." msgstr "Wybierz rodzinê do przejrzenia." #: src/gedlib/messages.c:85 msgid "Enter Family Number to Browse to" msgstr "Podaj Numer Rodziny do przerzenia" #: src/gedlib/messages.c:86 msgid "Please choose the first family to browse to." msgstr "Wybierz pierwsz± rodzinê do przejrzenia." #: src/gedlib/messages.c:87 msgid "Please choose the second family to browse to." msgstr "Wybierz drug± rodzinê do przejrzenia." #: src/gedlib/messages.c:88 msgid "Please choose the father/husband to browse to." msgstr "Wybierz ojca/m꿱 do przejrzenia." #: src/gedlib/messages.c:89 msgid "Please choose the first father/husband to browse to." msgstr "Wybierz pierwszego ojca/m꿱 do przejrzenia." #: src/gedlib/messages.c:90 msgid "Please choose the second father/husband to browse to." msgstr "Wybierz drugiego ojca/m꿱 do przejrzenia." #: src/gedlib/messages.c:91 msgid "Please choose the mother/wife to browse to." msgstr "Wybierz matkê/¿onê do przejrzenia." #: src/gedlib/messages.c:92 msgid "Please choose the first mother/wife to browse to." msgstr "Wybierz pierwsz± matkê/¿onê do przejrzenia." #: src/gedlib/messages.c:93 msgid "Please choose the second mother/wife to browse to." msgstr "Wybierz drug± matkê/¿onê do przejrzenia." #: src/gedlib/messages.c:94 msgid "Identify a parent in the family having children swapped." msgstr "Podaj rodzica z rodziny, która ma zamienione dzieci." #: src/gedlib/messages.c:95 msgid "Whose families/spouses are to be swapped?" msgstr "Które rodziny/ma³¿onkowie maj± byæ zamienieni?" #: src/gedlib/messages.c:96 msgid "Identify one of the child's parents, if known." msgstr "Podaj jedno z rodziców dziecka, je¶li s± znani." #: src/gedlib/messages.c:98 src/liflines/scan.c:127 msgid "Enter pattern to match against refn." msgstr "Podaj wzorzec do dopasoania do refn." #: src/gedlib/messages.c:100 msgid "Please choose from among these people." msgstr "Wybierz z poni¿szych osób." #: src/gedlib/messages.c:101 msgid "Please choose from among these records." msgstr "Wybierz z poni¿szych rekordów." #: src/gedlib/messages.c:102 msgid "Is this the new child? " msgstr "Czy to jest nowe dziecko? " #: src/gedlib/messages.c:103 msgid "Is this the new spouse? " msgstr "Czy to jest nowy ma³¿onek? " #: src/gedlib/messages.c:104 msgid "Is this the person? Select if so." msgstr "Czy to jest osoba? Wybierz je¶li tak." #: src/gedlib/messages.c:105 msgid "Is this the record? Select if so." msgstr "Czy to jest rekord? Wybierz je¶li tak." #: src/gedlib/messages.c:106 msgid "Select the child the new child precedes or select last." msgstr "Wybierz dziecko, przed którym ma byæ nowe lub wstaw ostatnie." #: src/gedlib/messages.c:107 msgid "Please identify next person to browse to." msgstr "Podaj nastêpn± osobê do przejrzenia." #: src/gedlib/messages.c:108 msgid "Please identify record to browse to." msgstr "Wybierz nastêpny rekord do przejrzenia." #: src/gedlib/messages.c:109 msgid "Please identify one of the spouses." msgstr "Podaj jedno z ma³¿onków." #: src/gedlib/messages.c:110 msgid "Please identify person or persons to browse to." msgstr "Wybierz osobê lub osoby do przejrzenia." #: src/gedlib/messages.c:111 msgid "Please choose family create operation." msgstr "Wybierz operacjê utworzenia rodziny." #: src/gedlib/messages.c:112 msgid "Do you want to enter another name?" msgstr "Czy chcesz podaæ inne nazwisko?" #: src/gedlib/messages.c:114 msgid "This person is not a spouse or parent in any family." msgstr "Osoba nie jest ma³¿onkiem ani rodzicem w ¿adnej rodzinie." #: src/gedlib/messages.c:115 msgid "This person is not a child in any family." msgstr "Osoba nie jest dzieckiem w ¿adnej rodzinie." #: src/gedlib/messages.c:116 msgid "There is no one in the database with that name or key." msgstr "Nie ma w bazie nikogo o takim nazwisku lub kluczu." #: src/gedlib/messages.c:118 msgid "This person's father is not in the database." msgstr "Ojca tej osoby nie ma w bazie danych." #: src/gedlib/messages.c:119 msgid "This person's mother is not in the database." msgstr "Matki tej osoby nie ma w bazie danych." #: src/gedlib/messages.c:120 msgid "This person has no spouse in the database." msgstr "Ta osoba nie ma ma³¿onka w bazie danych." #: src/gedlib/messages.c:121 msgid "This person has no younger sibling in the database." msgstr "Ta osoba nie ma m³odszego rodzeñstwa w bazie danych." #: src/gedlib/messages.c:122 msgid "This person has no older sibling in the database." msgstr "Ta osoba nie ma starszego rodzeñstwa w bazie danych." #: src/gedlib/messages.c:123 msgid "This person's parents are not in the database." msgstr "Rodziców tej osoby nie ma w bazie danych." #: src/gedlib/messages.c:124 msgid "This family has no male spouse/parent in the database." msgstr "Ta rodzina nie ma mêskiego ma³¿onka/rodzica w bazie danych." #: src/gedlib/messages.c:125 msgid "This family has no female spouse/parent in the database." msgstr "Ta rodzina nie ma ¿eñskiego ma³¿onka/rodzica w bazie danych." #: src/gedlib/messages.c:126 msgid "There are no children in the database for this family." msgstr "Ta rodzina nie ma dzieci w bazie danych." #: src/gedlib/messages.c:127 msgid "This person has no children in the database." msgstr "Ta osoba nie ma dzieci w bazie danych." #: src/gedlib/messages.c:128 msgid "No such child." msgstr "Nie ma takiego dziecka." #: src/gedlib/messages.c:129 msgid "No such person." msgstr "Nie ma takiej osoby." #: src/gedlib/messages.c:130 msgid "No such record." msgstr "Nie ma takiego rekordu." #: src/gedlib/messages.c:131 msgid "No such family." msgstr "Nie ma takiej rodziny." #: src/gedlib/messages.c:132 msgid "No sources present." msgstr "Brak ¼róde³." #: src/gedlib/messages.c:133 msgid "Please choose the source to view." msgstr "Wybierz ¼ród³a do obejrzenia." #: src/gedlib/messages.c:134 msgid "No events present." msgstr "Brak zdarzeñ." #: src/gedlib/messages.c:135 msgid "Please choose the event to view." msgstr "Wybierz zdarzenie do obejrzenia." #: src/gedlib/messages.c:136 msgid "No others present." msgstr "Nic innego nie ma." #: src/gedlib/messages.c:137 msgid "Please choose the other to view." msgstr "Wybierz inne do obejrzenia." #: src/gedlib/messages.c:138 msgid "No notes present." msgstr "Brak komentarzy." #: src/gedlib/messages.c:139 msgid "Please choose the note to view." msgstr "Wybierz komentarz do obejrzenia." #: src/gedlib/messages.c:140 msgid "No references present." msgstr "Brak odno¶ników." #: src/gedlib/messages.c:141 msgid "Please choose the reference to view." msgstr "Wybierz odno¶nik do przejrzenia." #: src/gedlib/messages.c:142 msgid "Duplicated REFN - please choose." msgstr "Zduplikowane REFN - wybierz." #: src/gedlib/messages.c:144 msgid "New spouse/parent has unknown sex; can't add to family." msgstr "Nowy ma³¿onek/rodzic ma nieokre¶lon± p³eæ; nie mo¿na dodaæ do rodziny." #: src/gedlib/messages.c:145 msgid "The persons are not of opposite sex; can't make family." msgstr "Osoby nie s± ró¿nej p³ci; nie mog± utworzyæ rodziny." #: src/gedlib/messages.c:146 msgid "This person is not a spouse in the family; can't remove." msgstr "Ta osoba nie jest ma³¿onkiem w rodzinie; nie mo¿na usun±æ." #: src/gedlib/messages.c:147 msgid "This person is not a child in the family; can't remove." msgstr "Ta osoba nie jest dzieckiem w rodzinie; nie mo¿na usun±æ." #: src/gedlib/messages.c:148 msgid "This person's sex is not known; can't make family." msgstr "P³eæ tej osoby nie jest znana; nie mo¿na utworzyæ rodziny." #: src/gedlib/messages.c:149 msgid "This family already has a husband/male parent." msgstr "Ta rodzina ma ju¿ mê¿a/ojca." #: src/gedlib/messages.c:150 msgid "This family already has a wife/female parent." msgstr "Ta rodzina ma ju¿ ¿onê/matkê." #: src/gedlib/messages.c:151 msgid "This family has both spouses/parents; can't add another." msgstr "Ta rodzina ma ju¿ oboje ma³¿onków/rodziców; nie mo¿na dodaæ wiêcej." #: src/gedlib/messages.c:152 msgid "This family has neither spouse/parent; can't remove." msgstr "Ta rodzina nie ma ma³¿onków/rodziców; nie mo¿na usun±æ." #: src/gedlib/messages.c:153 msgid "This family still has links; not removed." msgstr "Ta rodzina dalej ma powi±zania; nie usuniêta." #: src/gedlib/messages.c:155 msgid "Choose a family by selecting a spouse/parent." msgstr "Wybierz rodzinê wybieraj±c ma³¿onka/rodzica." #: src/gedlib/messages.c:156 msgid "" "Do you want to edit the person again? (Otherwise changes will be discarded.)" msgstr "Czy edytujesz osobê ponownie? (Je¶li nie, to zmiany bêd± odrzucone)." #: src/gedlib/messages.c:157 msgid "Do you want to edit the person again?" msgstr "Czy chcesz edytowaæ osobê ponownie?" #: src/gedlib/messages.c:158 msgid "" "Do you want to edit the family again? (Otherwise changes will be discarded.)" msgstr "Czy edytujesz rodzinê ponownie? (Je¶li nie, to zmiany bêd± odrzucone)." #: src/gedlib/messages.c:159 msgid "Do you want to edit the family again?" msgstr "Czy chcesz edytowaæ rodzinê ponownie?" #: src/gedlib/messages.c:160 msgid "" "Do you want to edit the source again? (Otherwise changes will be discarded.)" msgstr "Czy edytujesz ¼ród³o ponownie? (Je¶li nie, to zmiany bêd± odrzucone)." #: src/gedlib/messages.c:161 msgid "Do you want to edit the source again?" msgstr "Czy chcesz ¼ród³o rodzinê ponownie?" #: src/gedlib/messages.c:162 msgid "" "Do you want to edit the event again? (Otherwise changes will be discarded.)" msgstr "Czy edujesz zdarzenie ponownie? (Je¶li nie, to zmiany bêd± odrzucone)." #: src/gedlib/messages.c:163 msgid "Do you want to edit the event again?" msgstr "Czy chcesz edytowaæ zdarzenie ponownie?" #: src/gedlib/messages.c:164 msgid "" "Do you want to edit the record again? (Otherwise changes will be discarded.)" msgstr "Czy edytujesz rekord ponownie? (Je¶li nie, to zmiany bêd± odrzucone)." #: src/gedlib/messages.c:165 msgid "Do you want to edit the record again?" msgstr "Czy chcesz edytowaæ rekord ponownie?" #: src/gedlib/messages.c:166 msgid "Whom do you want to edit?" msgstr "Kogo chcesz edytowaæ?" #: src/gedlib/messages.c:167 msgid "Which source record do you want to edit?" msgstr "Który rekord ¼ród³owy chcesz edytowaæ?" #: src/gedlib/messages.c:168 msgid "Which event record do you want to edit?" msgstr "Który rekord zdarzenia chcesz edytowaæ?" #: src/gedlib/messages.c:169 msgid "What record do you want to edit?" msgstr "Który rekord chcesz edytowaæ?" #: src/gedlib/messages.c:171 msgid "Do you really want to add this person to the database?" msgstr "Czy na pewno chcesz dodaæ tê osobê do bazy danych?" #: src/gedlib/messages.c:172 msgid "Do you really want to add this family to the database?" msgstr "Czy na pewno chcesz dodaæ tê rodzinê do bazy danych?" #: src/gedlib/messages.c:173 msgid "Do you really want to add this child to the family?" msgstr "Czy na pewno chcesz dodaæ to dziecko do bazy danych?" #: src/gedlib/messages.c:174 msgid "Do you really want to add this spouse/parent to the family?" msgstr "Czy na pewno chcesz dodaæ tego ma³¿onka/rodzica do bazy danych?" #: src/gedlib/messages.c:175 msgid "Do you really want to add this source to the database?" msgstr "Czy na pewno chcesz dodaæ to ¼ród³o do bazy danych?" #: src/gedlib/messages.c:176 msgid "Do you really want to add this event to the database?" msgstr "Czy na pewno chcesz dodaæ to zdarzenie do bazy danych?" #: src/gedlib/messages.c:177 msgid "Do you really want to add this record to the database?" msgstr "Czy na pewno chcesz dodaæ ten rekord do bazy danych?" #: src/gedlib/messages.c:178 msgid "Do you really want to update this person?" msgstr "Czy na pewno chcesz zaktualizowaæ tê osobê?" #: src/gedlib/messages.c:179 msgid "Do you really want to update this family?" msgstr "Czy na pewno chcesz zaktualizowaæ tê rodzinê?" #: src/gedlib/messages.c:180 msgid "Do you really want to update this source?" msgstr "Czy na pewno chcesz zaktualizowaæ tê osobê?" #: src/gedlib/messages.c:181 msgid "Do you really want to update this event?" msgstr "Czy na pewno chcesz zaktualizowaæ to zdarzenie?" #: src/gedlib/messages.c:182 msgid "Do you really want to update this record?" msgstr "Czy na pewno chcesz zaktualizowaæ ten rekord?" #: src/gedlib/messages.c:183 msgid "Are you sure you want to remove the person from the database?" msgstr "Czy na pewno chcesz usun±æ tê osobê z bazy danych?" #: src/gedlib/messages.c:184 msgid "Are you sure you want to remove this record from the database?" msgstr "Czy na pewno chcesz usun±æ ten rekord z bazy danych?" #: src/gedlib/messages.c:185 msgid "Remove this family record?" msgstr "Usun±æ ten rekord rodziny?" #: src/gedlib/messages.c:186 #, c-format msgid "(Family %s (%s, %s)" msgstr "Rodzina %s (%s, %s)" #: src/gedlib/messages.c:187 msgid "Do you really want to merge these two persons?" msgstr "Czy na pewno chcesz po³±czyæ te dwie osoby?" #: src/gedlib/messages.c:188 msgid "Do you really want to merge these two families?" msgstr "Czy na pewno chcesz po³±czyæ te dwie rodziny?" #: src/gedlib/messages.c:189 #, fuzzy msgid "Do you really want to swap spouse orders?" msgstr "Czy na pewno chcesz zaktualizowaæ ten rekord?" #: src/gedlib/messages.c:190 #, fuzzy msgid "Do you really want to reorder children?" msgstr "Czy na pewno chcesz zaktualizowaæ to zdarzenie?" #: src/gedlib/messages.c:191 msgid "Do you really want to remove this child from his/her family?" msgstr "Czy na pewno chcesz usun±æ to dziecko z jego rodziny?" #: src/gedlib/messages.c:192 msgid "Do you really want to remove this spouse from his/her family?" msgstr "Czy na pewno chcesz usun±æ tego ma³¿onka z jego rodziny?" #: src/gedlib/messages.c:193 msgid "Too many spouses to display full list" msgstr "Za du¿o ma³¿onków ¿eby wy¶wietliæ pe³n± listê" #: src/gedlib/messages.c:194 msgid "These persons are children in different families." msgstr "Te osoby s± dzieæmi w ró¿nych rodzinach." #: src/gedlib/messages.c:195 msgid "Are you sure you want to merge them?" msgstr "Czy na pewno chcesz po³±czyæ?" #: src/gedlib/messages.c:197 msgid "There is something wrong with the data." msgstr "Co¶ niedobrego sta³o siê z danymi." #: src/gedlib/messages.c:198 msgid "Please identify the child." msgstr "Podaj dziecko." #: src/gedlib/messages.c:199 msgid "Please identify one of the child's siblings." msgstr "Podaj jedno z rodzeñstwa dziecka." #: src/gedlib/messages.c:200 msgid "Identify spouse/parent to add to an existing family." msgstr "Podaj ma³¿onka/rodzica aby dodaæ do istniej±cej rodziny." #: src/gedlib/messages.c:201 msgid "Identify spouse/parent already in family, if known." msgstr "Wybierz ma³¿onka/rodzica bêd±cego rodzinie, je¶li znany." #: src/gedlib/messages.c:202 msgid "Identify child already in family." msgstr "Wybierz dziecko bêd±ce w rodzinie." #: src/gedlib/messages.c:204 msgid "This person is already a child in a family." msgstr "Ta osoba jest ju¿ dzieckiem w rodzinie." #: src/gedlib/messages.c:205 msgid "Identify a spouse/parent for the new family." msgstr "Wybierz ma³¿onka/rodzica dla nowej rodziny." #: src/gedlib/messages.c:206 msgid "Identify the second spouse/parent, if known." msgstr "Wybierz ma³¿onka/rodzica, je¶li znany." #: src/gedlib/messages.c:207 msgid "Both families must have husbands/fathers." msgstr "Obie rodziny musz± mieæ mê¿ów/ojców." #: src/gedlib/messages.c:208 msgid "Both families must have wives/mothers." msgstr "Obie rodziny musz± mieæ ¿ony/matki." #: src/gedlib/messages.c:210 msgid "Identify spouse/parent in second family, if known." msgstr "Wybierz ma³¿onka/rodzica w drugiej rodzinie, je¶li znani." #: src/gedlib/messages.c:211 msgid "Identify child in second family." msgstr "Wybierz dziecko w drugiej rodzinie." #: src/gedlib/messages.c:212 msgid "Identify second person to browse to." msgstr "Wybierz drug± osobê do przejrzenia." #: src/gedlib/messages.c:214 msgid "Create a family with this person as a child." msgstr "Utwórz rodzinê z t± osob± jako dzieckiem." #: src/gedlib/messages.c:215 msgid "Create a family with this person as a spouse/parent." msgstr "Utwórz rodzinê z t± osob± jako ma³¿onkiem/rodzicem." #: src/gedlib/messages.c:216 msgid "This family has less than two children; can't swap." msgstr "Rodzina ma mniej ni¿ dwoje dzieci; nie mo¿na zamieniæ." #: src/gedlib/messages.c:217 msgid "This person is a spouse/parent in less than two families." msgstr "Ta osoba jest ma³¿onkiem/rodzicem w mniej ni¿ dwóch rodzinach." #: src/gedlib/messages.c:218 msgid "Something impossible happened. Contact tech support." msgstr "Sta³o siê co¶ niemo¿liwego. Skontaktuj siê z pomoc± techniczn±." #: src/gedlib/messages.c:220 msgid "The two children were swapped." msgstr "Zamieniono dwoje dzieci." #: src/gedlib/messages.c:221 msgid "The two families were swapped." msgstr "Zamieniono dwie rodziny." #: src/gedlib/messages.c:222 msgid "The child was removed from his/her family." msgstr "Dziecko zosta³o usuniête ze swojej rodziny." #: src/gedlib/messages.c:223 msgid "The spouse was removed from his/her family." msgstr "Ma³¿onek zosta³ usuniêty ze swojej rodziny." #: src/gedlib/messages.c:225 msgid "A person cannot be merged with him/herself." msgstr "Osoba nie mo¿e byæ po³±czona sama ze sob±." #: src/gedlib/messages.c:226 msgid "A family cannot be merged with itself." msgstr "Rodzina nie mo¿e byæ po³±czona sama ze sob±." #: src/gedlib/messages.c:227 msgid "Two persons with different parents cannot be merged." msgstr "Dwie osoby maj±ce ró¿nych rodziców nie mog± byæ po³±czone." #: src/gedlib/messages.c:228 msgid "Two parents of different sexes cannot be merged." msgstr "Dwoje rodziców ró¿nej p³æi nie mo¿e byæ po³±czonych." #: src/gedlib/messages.c:229 msgid "The families have different fathers/husbands; cannot merge." msgstr "Rodziny maj± ró¿nych ojców/mê¿ów; nie mo¿na po³±czyæ." #: src/gedlib/messages.c:230 msgid "The families have different wives/mothers; cannot merge." msgstr "Rodziny maj± ró¿ne matki/¿ony; nie mo¿na po³±czyæ." #: src/gedlib/messages.c:231 msgid "Who do you want to remove from the database?" msgstr "Kogo chcesz usun±æ z bazy danych?" #: src/gedlib/messages.c:232 msgid "What record do you want to remove from the database?" msgstr "Który rekord chcesz usun±æ z bazy danych?" #: src/gedlib/messages.c:233 msgid "Place the child last in the family." msgstr "Umie¶æ dziecko jako ostatnie w rodzinie." #: src/gedlib/messages.c:234 msgid "Error in abbreviations file." msgstr "B³±d w pliku skrótów." #: src/gedlib/messages.c:235 msgid "Error in user options file." msgstr "B³±d w pliku z opcjami u¿ytkownika." #: src/gedlib/messages.c:236 msgid "Error in character mapping file." msgstr "B³±d w pliku z mapami znaków." #: src/gedlib/messages.c:237 #, c-format msgid "(Separator is %s)" msgstr "(Separatorem jest %s)" #: src/gedlib/messages.c:238 msgid "Do you want to re-edit it?" msgstr "Czy chcesz edytowaæ to ponownie?" #: src/gedlib/messages.c:240 #, c-format msgid "%s was added to the database." msgstr "%s dodano do bazy danych." #: src/gedlib/messages.c:241 #, c-format msgid "%s was added as a child." msgstr "%s dodano jako dziecko." #: src/gedlib/messages.c:242 #, c-format msgid "%s was added as a spouse and/or parent." msgstr "%s dodano jako ma³¿onka i/lub rodzica." #: src/gedlib/messages.c:243 msgid "The new family was added to the database." msgstr "Nowa rodzina dodana do bazy danych." #: src/gedlib/messages.c:244 #, c-format msgid "%s was modified in the database." msgstr "%s zmodyfikowano w bazie danych." #: src/gedlib/messages.c:245 msgid "The family was modified in the database." msgstr "Rodzina zosta³a zmodyfikowana w bazie danych." #: src/gedlib/messages.c:246 msgid "The source was modified in the database." msgstr "¬ród³o zosta³o zmodyfikowane w bazie danych." #: src/gedlib/messages.c:247 msgid "The event was modified in the database." msgstr "Zdarzenie zosta³o zmodyfikowane w bazie danych." #: src/gedlib/messages.c:248 msgid "The record was modified in the database." msgstr "Rekord zosta³ zmodyfikowany w bazie danych." #: src/gedlib/messages.c:250 #, c-format msgid "Could not open file %s." msgstr "Nie mo¿na otworzyæ pliku %s." #: src/gedlib/messages.c:251 msgid "Filepath too long." msgstr "¦cie¿ka za d³uga." #: src/gedlib/messages.c:253 #, fuzzy msgid "Please mark a record first." msgstr "Najpierw zaznacz osobê." #: src/gedlib/messages.c:255 #, c-format msgid "The current list is now named %s." msgstr "Bie¿±ca lista nazywa siê teraz %s." #: src/gedlib/messages.c:256 msgid "The current list is not named." msgstr "Bie¿±ca lista nie ma nazwy." #: src/gedlib/messages.c:257 msgid "What should the name of this list be?" msgstr "Jak ma siê nazywaæ ta lista?" #: src/gedlib/messages.c:258 msgid "No persons were added to the current list." msgstr "Nie dodano ¿adnej osoby do bie¿±cej listy." #: src/gedlib/messages.c:259 msgid "What persons or list do you want to add to the current list?" msgstr "Któr± osobê lub listê chcesz dodaæ do bie¿±cej listy?" #: src/gedlib/messages.c:260 msgid "You are at the bottom of the list." msgstr "Jeste¶ na koñcu listy." #: src/gedlib/messages.c:261 msgid "You are at the top of the list." msgstr "Jeste¶ na pocz±tku listy." #: src/gedlib/messages.c:262 msgid "New persons were added to the current list." msgstr "Nowe osoby zosta³y dodane do bie¿±cej listy." #: src/gedlib/messages.c:264 msgid "System error: illegal map code" msgstr "B³±d systemy: nielegalny kod mapy" #: src/gedlib/messages.c:265 msgid "No such translation table in this database" msgstr "Nie ma takiej tabeli translacji w tej bazie danych" #: src/gedlib/messages.c:268 msgid "Because of errors the GEDCOM file was not loaded.\n" msgstr "Plik GEDCOM nie zosta³ za³adowany z powodu b³êdów.\n" #: src/gedlib/messages.c:269 msgid "No errors; adding records with original keys..." msgstr "Nie ma b³êdów; dodajê rekordy z oryginalnymi kluczami..." #: src/gedlib/messages.c:270 msgid "No errors; adding records with new keys..." msgstr "Nie ma b³êdów; dodajê rekordy z nowymi kluczami..." #: src/gedlib/messages.c:271 msgid "Use original keys from GEDCOM file?" msgstr "U¿yæ oryginalnych kluczy z pliku GEDCOM?" #: src/gedlib/messages.c:272 msgid "Proceed?" msgstr "Kontynuujemy?" #: src/gedlib/messages.c:273 msgid "Enter name of output archive file." msgstr "Podaj nazwê wyj¶ciowego pliku z archiwum." #: src/gedlib/messages.c:274 #, c-format msgid "Database `%s' has been saved in `%s'." msgstr "Baza danych `%s' zosta³a zapisana w `%s'." #: src/gedlib/messages.c:275 msgid "Enter name of translation table file to write" msgstr "Podaj nazwê pliku z tabel± translacji do zapisania" #: src/gedlib/messages.c:276 msgid "Enter name of translation table file to read" msgstr "Podaj nazwê pliku z tabel± translacji do przeczytania" #: src/gedlib/messages.c:277 #, c-format msgid "Line %d: The person defined here has no key: skipped." msgstr "Wiersz %d: Zdefiniowana tutaj osoba nie ma klucza: pominiêta." #: src/gedlib/messages.c:278 #, c-format msgid "Line %d: The family defined here has no key." msgstr "Wiersz %d: Zdefiniowana tutaj rodzina nie ma klucza." #: src/gedlib/messages.c:279 #, c-format msgid "Lines %d and %d: Person %s is multiply defined: skipped." msgstr "Wiersze %d i %d: Osoba %s jest wielokrotnie zdefiniowana: pominiêto." #: src/gedlib/messages.c:280 #, c-format msgid "Lines %d and %d: Family %s is multiply defined." msgstr "Wiersze %d i %d: Rodzina %s jest wielokrotnie zdefiniowana." #: src/gedlib/messages.c:281 #, c-format msgid "Line %d: Person %s has an incorrect key: skipped." msgstr "Wiersz %d: Osoba %s ma niew³a¶ciwy klucz: pominiêto." #: src/gedlib/messages.c:282 #, c-format msgid "Line %d: Family %s has an incorrect key." msgstr "Wiersz %d: Rodzina %s ma niew³a¶ciwy klucza." #: src/gedlib/messages.c:283 #, c-format msgid "Person %s is referred to but not defined." msgstr "S± odno¶niki do niezdefiniowanej osoby %s." #: src/gedlib/messages.c:284 #, c-format msgid "Family %s is referred to but not defined." msgstr "S± odno¶niki do niezdefiniowanej rodziny %s." #: src/gedlib/messages.c:285 #, c-format msgid "Source %s is referred to but not defined." msgstr "S± odno¶niki do niezdefiniowanego ¼ród³a %s." #: src/gedlib/messages.c:286 #, c-format msgid "Event %s is referred to but not defined." msgstr "S± odno¶niki do niezdefiniowanego zdarzenia %s." #: src/gedlib/messages.c:287 #, c-format msgid "Line %d: This line has a level number that is too large." msgstr "Wiersz %d: Wiersz ma za du¿y numer poziomu." #: src/gedlib/messages.c:288 #, c-format msgid "Line %d: Person defined here has no name." msgstr "Wiersz %d: Zdefiniowana tu osoba nie ma imienia." #: src/gedlib/messages.c:294 msgid "" msgstr "" #: src/gedlib/messages.c:296 msgid "What is the name of the program?" msgstr "Jaka jest nazwa programu?" #: src/gedlib/messages.c:297 msgid "Please enter the name of the GEDCOM file." msgstr "Podaj nazwê pliku GEDCOM." #: src/gedlib/messages.c:299 msgid "What is the name of the output file?" msgstr "Jaka jest nazwa pliku wyj¶ciowego?" #: src/gedlib/messages.c:300 msgid "Malformed configuration file: line too long." msgstr "B³êdny plik konfiguracyjny: za d³ugi wiersz." #: src/gedlib/messages.c:301 msgid "Unsupported file encoding (no multibyte encodings except UTF-8)." msgstr "" "Nieobs³ugiwane kodowanie pliku (z kodowañ wielobajtowych - mo¿na tylko UTF-" "8)." #: src/gedlib/messages.c:302 #, c-format msgid "Unsupported file encoding: %s." msgstr "Nieobs³ugiwane kodowanie pliku: %s." #: src/gedlib/messages.c:305 msgid "Enter string for program" msgstr "Podaj ci±g znaków dla programu" #: src/gedlib/messages.c:306 msgid "enter string: " msgstr "podaj ci±g znaków: " #: src/gedlib/messages.c:307 msgid "enter integer:" msgstr "podaj liczbê ca³kowit±:" #: src/gedlib/messages.c:308 msgid "enter name: " msgstr "podaj nazwê: " #: src/gedlib/messages.c:309 msgid "Strike any key to continue." msgstr "Naci¶nij dowolny klawisz aby kontynuowaæ." #: src/gedlib/messages.c:313 msgid "" "0 SOUR\n" "1 REFN\n" "1 TITL Title\n" "1 AUTH Author" msgstr "" "0 SOUR\n" "1 REFN\n" "1 TITL Tytu³\n" "1 AUTH Autor" #: src/gedlib/messages.c:314 msgid "" "0 EVEN\n" "1 REFN\n" "1 DATE\n" "1 PLAC\n" "1 INDI\n" " 2 NAME\n" " 2 ROLE\n" "1 SOUR" msgstr "" "0 EVEN\n" "1 REFN\n" "1 DATE\n" "1 PLAC\n" "1 INDI\n" " 2 NAME\n" " 2 ROLE\n" "1 SOUR" #: src/gedlib/messages.c:315 msgid "" "0 XXXX\n" "1 REFN" msgstr "" "0 XXXX\n" "1 REFN" #: src/gedlib/messages.c:319 msgid "The file is as positioned at EOF." msgstr "Plik ustawiony na koñcu." #: src/gedlib/messages.c:320 #, c-format msgid "Line %d: This line is empty; EOF?" msgstr "Wiersz %d: Ten wiersz jest pusty; EOF?" #: src/gedlib/messages.c:321 #, c-format msgid "Line %d: This line is too long." msgstr "Wiersz %d: Ten wiersz jest za d³ugi." #: src/gedlib/messages.c:322 #, c-format msgid "Line %d: This line has no level number." msgstr "Wiersz %d: Ten wiersz nie ma numeru poziomu." #: src/gedlib/messages.c:323 #, c-format msgid "Line %d: This line is incomplete." msgstr "Wiersz %d: Ten wiersz jest niekompletny." #: src/gedlib/messages.c:324 #, c-format msgid "Line %d: This line has a bad link." msgstr "Wiersz %d: Ten wiersz ma b³êdny odsy³acz." #: src/gedlib/messages.c:325 #, c-format msgid "Line %d: This line needs white space before tag." msgstr "Wiersz %d: W tym wierszu brakuje odstêpu przed znacznikiem." #: src/gedlib/messages.c:326 #, c-format msgid "Line %d: This line has an illegal level." msgstr "Wiersz %d: Ten wiersz ma niew³a¶ciwy poziom." #: src/gedlib/messages.c:327 msgid "The record begins at wrong level." msgstr "Rekord zaczyna siê na z³ym poziomie." #: src/gedlib/messages.c:330 msgid "" "\n" "Aborting now. Core dump? [y/n]" msgstr "" "\n" "Przerywamy dzia³anie. Dumpujemy cora? [y/n]" #: src/gedlib/messages.c:331 msgid "" "Looks like a program was running.\n" "Check file %1 around line %2.\n" msgstr "" "Wygl±da jakby program dzia³a³.\n" "Sprawd¼ plik %1 w okolicach wiersza %2.\n" #: src/gedlib/messages.c:332 msgid "signal %1: %2" msgstr "sygna³ %1: %2" #: src/gedlib/messages.c:334 msgid "SIGNAL 0" msgstr "SIGNAL 0" #: src/gedlib/messages.c:335 msgid "HANGUP" msgstr "HANGUP" #: src/gedlib/messages.c:336 msgid "INTERRUPT" msgstr "INTERRUPT" #: src/gedlib/messages.c:337 msgid "QUIT" msgstr "QUIT" #: src/gedlib/messages.c:338 msgid "ILLEGAL INSTRUCTION" msgstr "ILLEGAL INSTRUCTION" #: src/gedlib/messages.c:339 msgid "TRACE TRAP" msgstr "TRACE TRAP" #: src/gedlib/messages.c:340 msgid "ABORT" msgstr "ABORT" #: src/gedlib/messages.c:341 msgid "EMT INST" msgstr "EMT INST" #: src/gedlib/messages.c:342 msgid "FLOATING POINT EXCEPTION" msgstr "FLOATING POINT EXCEPTION" #: src/gedlib/messages.c:343 msgid "KILL" msgstr "KILL" #: src/gedlib/messages.c:344 msgid "BUS ERROR" msgstr "BUS ERROR" #: src/gedlib/messages.c:345 msgid "SEGMENTATION ERROR" msgstr "SEGMENTATION ERROR" #: src/gedlib/messages.c:346 msgid "SYSTEM CALL ERROR" msgstr "SYSTEM CALL ERROR" #: src/gedlib/messages.c:347 msgid "PIPE WRITE" msgstr "PIPE WRITE" #: src/gedlib/messages.c:348 msgid "ALARM CLOCK" msgstr "ALARM CLOCK" #: src/gedlib/messages.c:350 msgid "TERMINATE FROM KILL" msgstr "TERMINATE FROM KILL" #: src/gedlib/messages.c:351 msgid "USER SIGNAL 1" msgstr "USER SIGNAL 1" #: src/gedlib/messages.c:352 msgid "USER SIGNAL 2" msgstr "USER SIGNAL 2" #: src/gedlib/messages.c:353 msgid "DEATH OF CHILD" msgstr "DEATH OF CHILD" #: src/gedlib/messages.c:354 msgid "POWER-FAIL RESTART" msgstr "POWER-FAIL RESTART" #: src/gedlib/messages.c:355 msgid "WINDOW CHANGE" msgstr "WINDOW CHANGE" #: src/gedlib/messages.c:356 msgid "Unknown signal" msgstr "Nieznany sygna³" #: src/gedlib/messages.c:360 msgid "person" msgstr "Osoba" #: src/gedlib/messages.c:361 msgid ", of " msgstr "" #: src/gedlib/messages.c:362 msgid "father" msgstr "ojciec" #: src/gedlib/messages.c:363 msgid "mother" msgstr "matka" #: src/gedlib/messages.c:364 msgid "spouse" msgstr "ma³¿onek" #: src/gedlib/messages.c:365 msgid "child" msgstr "dziecko" #: src/gedlib/messages.c:368 msgid "m. " msgstr "¶l. " #: src/gedlib/messages.c:370 msgid "div. " msgstr "rozw. " #: src/gedlib/messages.c:372 msgid "b. " msgstr "ur. " #: src/gedlib/messages.c:374 msgid "bap. " msgstr "chrz. " #: src/gedlib/messages.c:376 msgid "d. " msgstr "zm. " #: src/gedlib/messages.c:378 msgid "bur. " msgstr "poch. " #: src/gedlib/messages.c:380 msgid "cb. " msgstr "ur. dz. " #: src/gedlib/messages.c:382 msgid "married: " msgstr "¶lub: " #: src/gedlib/messages.c:383 msgid "born: " msgstr "ur.:" #: src/gedlib/messages.c:384 msgid "bapt: " msgstr "chrz.: " #: src/gedlib/messages.c:385 msgid "died: " msgstr "zm.: " #: src/gedlib/messages.c:386 msgid "buri: " msgstr "poch.: " #: src/gedlib/messages.c:390 msgid "You cannot edit the INDI line in a person record." msgstr "Nie mo¿esz zmieniaæ wiersza INDI w rekorcie osoby." #: src/gedlib/messages.c:391 msgid "You cannot edit the FAMC line in a person record." msgstr "Nie mo¿esz zmieniaæ wiersza FAMC w rekorcie osoby." #: src/gedlib/messages.c:392 msgid "You cannot edit the FAMS lines in a person record." msgstr "Nie mo¿esz zmieniaæ wierszy FAMS w rekorcie osoby." #: src/gedlib/messages.c:393 msgid "You cannot edit the FAM line in a family record." msgstr "Nie mo¿esz zmieniaæ wiersza FAM w rekorcie rodziny." #: src/gedlib/messages.c:394 msgid "You cannot edit the HUSB line in a family record." msgstr "Nie mo¿esz zmieniaæ wiersza HUSB w rekorcie rodziny." #: src/gedlib/messages.c:395 msgid "You cannot edit the WIFE line in a family record." msgstr "Nie mo¿esz zmieniaæ wiersza WIFE w rekorcie rodziny." #: src/gedlib/messages.c:396 msgid "You cannot edit the CHIL lines in a family record." msgstr "Nie mo¿esz zmieniaæ wiersza CHIL w rekorcie rodziny." #: src/gedlib/messages.c:397 msgid "The record is empty." msgstr "Rekord jest pusty." #: src/gedlib/messages.c:398 msgid "The record does not begin with an INDI line." msgstr "Rekord nie zaczyna siê wierszem INDI." #: src/gedlib/messages.c:399 msgid "The record does not begin with a FAM line." msgstr "Rekord nie zaczyna siê wierszem FAM." #: src/gedlib/messages.c:400 msgid "The record does not begin with a SOUR line." msgstr "Rekord nie zaczyna siê wierszem SOUR." #: src/gedlib/messages.c:401 msgid "The record does not begin with an EVEN line." msgstr "Rekord nie zaczyna siê wierszem EVEN." #: src/gedlib/messages.c:402 msgid "INDI, FAM, SOUR, EVEN records may not be other records." msgstr "Rekordy INDI, FAM, SOUR, EVEN nie mog± byæ rekordami typu inny." #: src/gedlib/messages.c:403 msgid "The record contains multiple level 0 lines." msgstr "Rekord zawiera wiele wierszy poziomu 0." #: src/gedlib/messages.c:404 msgid "This person record has bad GEDCOM name syntax." msgstr "W rekordzie tej osoby nazwisko niezgodne ze sk³adni± GEDCOM." #: src/gedlib/messages.c:405 msgid "You cannot change the sex of a parent." msgstr "Nie mo¿esz zmieniaæ p³ci rodzica." #: src/gedlib/messages.c:406 msgid "REFN key is already in use." msgstr "Klucz REFN jest ju¿ u¿ywany." #: src/gedlib/messages.c:408 msgid "Tag is too long to connect automatically." msgstr "Znacznik za d³ugi ¿eby go po³±czyæ automatycznie." #: src/gedlib/messages.c:410 msgid "Database records" msgstr "Rekordy bazy danych" #: src/gedlib/messages.c:411 #, c-format msgid "%dI, %dF, %dS, %dE, %dX" msgstr "osób: %d, rodzin: %d, ¼róde³: %d, zdarzeñ: %d, innych: %d" #: src/gedlib/messages.c:414 #, c-format msgid "LifeLines %s - Genealogical DB and Programming System" msgstr "LifeLines %s - Genealogiczna baza danych i system przetwarzania" #: src/gedlib/messages.c:415 msgid "Copyright(c) 1991 to 1996, by T. T. Wetmore IV" msgstr "Copyright(c) 1991-1996, by T. T. Wetmore IV" #: src/gedlib/messages.c:416 #, c-format msgid "Current Database - %s" msgstr "Bie¿±ca baza danych - %s" #: src/gedlib/messages.c:418 msgid " (immutable)" msgstr " (niemodyfikowalne)" #: src/gedlib/messages.c:420 msgid " (read only)" msgstr "(tylko do odczytu)" #: src/gedlib/messages.c:421 msgid "Please choose an operation:" msgstr "Proszê wybraæ dzia³anie:" #: src/gedlib/messages.c:422 msgid "Not valid command" msgstr "Nieznane polecenie" #: src/gedlib/messages.c:425 msgid "enter y (yes) or n (no): " msgstr "podaj t (tak) albo n (nie): " #: src/gedlib/messages.c:426 msgid "yYnN" msgstr "tTnN" #: src/gedlib/messages.c:427 msgid "yY" msgstr "tT" #: src/gedlib/messages.c:430 msgid "LifeLines -- Person Browse Screen (* toggles menu)" msgstr "LifeLines -- Ekran przegl±dania osób (* w³±cza/wy³±cza menu)" #: src/gedlib/messages.c:431 msgid "LifeLines -- Family Browse Screen (* toggles menu)" msgstr "LifeLines -- Ekran przegl±dania rodzin (* w³±cza/wy³±cza menu)" #: src/gedlib/messages.c:432 msgid "LifeLines -- Two Person Browse Screen (* toggles menu)" msgstr "LifeLines -- Ekran przegl±dania dwóch osób (* w³±cza/wy³±cza menu)" #: src/gedlib/messages.c:433 msgid "LifeLines -- Two Family Browse Screen (* toggles menu)" msgstr "LifeLines -- Ekran przegl±dania dwóch rodzin (* w³±cza/wy³±cza menu)" #: src/gedlib/messages.c:434 msgid "LifeLines -- Auxiliary Browse Screen (* toggles menu)" msgstr "" "LifeLines -- Ekran przegl±dania dodarkowych informacji (* w³±cza/wy³±cza " "menu)" #: src/gedlib/messages.c:435 msgid "LifeLines -- List Browse Screen (* toggles menu)" msgstr "LifeLines -- Ekran przegl±dania list (* w³±cza/wy³±cza menu)" #: src/gedlib/messages.c:439 msgid "Commands: Select by number, u Page Up, d Page Down, i Select, q Quit" msgstr "" "Polecenia: Wybierz numer, u Str. w górê, d Str. w dó³, i Wybór, q Wyj¶cie" #: src/gedlib/messages.c:440 msgid "Commands: u Page Up, d Page Down, q Quit" msgstr "Polecenia: u Str. w górê, d Str. w dó³, q Wyj¶cie" #: src/gedlib/messages.c:441 msgid "Messages:" msgstr "Komunikaty:" #: src/gedlib/messages.c:444 msgid "Please choose from the following options:" msgstr "Wybierz jedn± z opcji:" #: src/gedlib/messages.c:445 #, c-format msgid "New record is %s" msgstr "Nowy rekord %s" #: src/gedlib/messages.c:446 msgid "Insert xref automatically at bottom of current record." msgstr "Automatycznie wstaw xref na koñcu bie¿±cego rekordu." #: src/gedlib/messages.c:447 msgid "Edit current record now to add xref manually." msgstr "Edytuj teraz bie¿±cy rekord i dodaj recznie xref." #: src/gedlib/messages.c:448 msgid "Browse new record (without adding xref)." msgstr "Przegl±daj nowy rekord (bez dodawania xref)." #: src/gedlib/messages.c:449 msgid "Return to current record (without adding xref)." msgstr "Wróæ do nowego rekordu (bez dodawania xref)." #: src/gedlib/messages.c:452 msgid "Spouse unknown" msgstr "Ma³¿onek nieznany" #: src/gedlib/messages.c:453 msgid "No more history" msgstr "Nie ma wiêcej historii" #: src/gedlib/messages.c:454 msgid "Bad history count" msgstr "Z³y licznik historii" #: src/gedlib/messages.c:455 msgid "Bad backup history count" msgstr "Z³y licznik historii archiwizacji" #: src/gedlib/messages.c:456 msgid "Bad history length" msgstr "Z³a d³ugo¶æ historii" #: src/gedlib/messages.c:457 #, c-format msgid "Delete history (%d entries)?" msgstr "Skasowaæ historiê (%d pozycji)?" #: src/gedlib/messages.c:458 msgid "Error accessing data" msgstr "B³±d dostêpu do danych" #: src/gedlib/messages.c:459 msgid "Choose from history" msgstr "Wybierz z historii" #: src/gedlib/messages.c:460 msgid "" "Cannot combine immutable (-i) or read-only (-r) with read-write (-w) access." msgstr "" "Nie mo¿na ³±czyæ trybu niemodyfikowalnego (-i) albo tylko do czytania (-r) \n" "z dostêpem do odczytu-zapisu (-w)." #: src/gedlib/messages.c:461 msgid "Cannot combine forceopen (-f) and lock (-l) flags." msgstr "" "Nie mo¿na ³±czyæ opcji bezwarunkowego otwarcia (-f) z opcj± blokady (-l)." #: src/gedlib/messages.c:462 msgid "Default path: " msgstr "Domy¶lna ¶cie¿ka: " #: src/gedlib/messages.c:463 msgid "WARNING: missing keys" msgstr "UWAGA: brakuj±ce klucze" #: src/gedlib/messages.c:464 msgid "This does not point to another record in the database!" msgstr "To nie wskazuje na inny rekord w bazie danych!" #: src/gedlib/messages.c:465 msgid "enter file name" msgstr "podaj nazwê pliku" #: src/gedlib/messages.c:466 #, c-format msgid "enter file name (*%s)" msgstr "podaj nazwê pliku (*%s)" #: src/gedlib/messages.c:467 msgid "There is no record with that key or reference." msgstr "Nie ma rekordu z takim kluczem lub odsy³aczem." #: src/gedlib/messages.c:468 msgid "Database was corrupt." msgstr "Baza danych zosta³a uszkodzona." #: src/gedlib/messages.c:471 msgid "Bad decimal number format." msgstr "Z³y format liczby dziesiêtnej." #: src/gedlib/messages.c:472 msgid "Bad hexidecimal number format." msgstr "Z³y format liczby szesnastkowej." #: src/gedlib/messages.c:473 msgid "No replacement string on line." msgstr "Brak ci±gu zastêpuj±cego w wierszu." #: src/gedlib/messages.c:474 msgid "No original string on line." msgstr "Brak ci±gu pierwotnego w wierszu." #: src/gedlib/messages.c:475 msgid "Bad escape format." msgstr "Z³y format unikowy." #: src/gedlib/messages.c:476 #, c-format msgid "%s: line %d (entry %d): %s" msgstr "%s: wiersz %d (pozycja %d): %s" #: src/gedlib/messages.c:479 src/liflines/brwsmenu.c:26 msgid "q Return to main menu" msgstr "q Do menu g³ównego" #: src/gedlib/messages.c:480 msgid "q Return to previous menu" msgstr "q Powrót do poprzedniego menu" #: src/gedlib/messages.c:481 msgid "q Quit program" msgstr "q Wyj¶cie z programu" #: src/gedlib/messages.c:482 msgid "Q Quit current database" msgstr "Q Wyj¶cie z bie¿±cej bazy danych" #: src/gedlib/messages.c:485 msgid "b Browse the persons in the database" msgstr "b Przegl±daj osoby w bazie danych" #: src/gedlib/messages.c:486 msgid "s Search database" msgstr "s Szukaj w bazie danych" #: src/gedlib/messages.c:487 msgid "a Add information to the database" msgstr "a Dodaj informacje do bazy danych" #: src/gedlib/messages.c:488 msgid "d Delete information from the database" msgstr "d Usuñ informacje z bazy danych" #: src/gedlib/messages.c:489 msgid "r Generate report by entering report name" msgstr "r Generuj raport podaj±c jego nazwê" #: src/gedlib/messages.c:490 msgid "p Pick a report from list and run" msgstr "p Wybierz i wykonaj raport z listy" #: src/gedlib/messages.c:491 msgid "c Character set options" msgstr "c Ustawienia zestawów znaków" #: src/gedlib/messages.c:492 msgid "t Modify character translation tables" msgstr "t Zmieñ tabele translacji znaków" #: src/gedlib/messages.c:493 msgid "u Miscellaneous utilities" msgstr "u Ró¿ne narzêdzia" #: src/gedlib/messages.c:494 msgid "x Handle source, event and other records" msgstr "x Edycja ¼róde³, zdarzeñ i rekordów" #: src/gedlib/messages.c:497 msgid "What utility do you want to perform?" msgstr "Jakiego narzêdzia chcesz u¿yæ?" #: src/gedlib/messages.c:498 msgid "s Save the database in a GEDCOM file" msgstr "s Zapisz bazê w pliku GEDCOM" #: src/gedlib/messages.c:499 msgid "r Read in data from a GEDCOM file" msgstr "r Odczytaj dane z pliku GEDCOM" #: src/gedlib/messages.c:500 msgid "R Pick a GEDCOM file and read in" msgstr "R Wybierz i wczytaj plik GEDCOM" #: src/gedlib/messages.c:501 msgid "k Find a person's key value" msgstr "k Znajd¼ warto¶æ klucza osoby" #: src/gedlib/messages.c:502 msgid "i Identify a person from key value" msgstr "i Znajd¼ osobê na podstawie warto¶ci klucza" #: src/gedlib/messages.c:503 msgid "d Show database statistics" msgstr "d Poka¿ statystyki bazy danych" #: src/gedlib/messages.c:504 msgid "m Show memory statistics" msgstr "m Poka¿ statystyki pamiêci" #: src/gedlib/messages.c:505 msgid "e Edit the place abbreviation file" msgstr "e Edycja pliku ze skrótami miejscowo¶ci" #: src/gedlib/messages.c:506 msgid "o Edit the user options file" msgstr "o Edycja pliku z ustawieniami u¿ytkownika" #: src/gedlib/messages.c:509 msgid "What activity do you want to perform?" msgstr "Co chcesz zrobiæ?" #: src/gedlib/messages.c:510 msgid "s Browse source records" msgstr "s Przegl±daj rekordy ¼ród³owe" #: src/gedlib/messages.c:511 msgid "e Browse event records" msgstr "e Przegl±daj rekordy zdarzeñ" #: src/gedlib/messages.c:512 msgid "x Browse other records" msgstr "x Przegl±daj inne rekordy" #: src/gedlib/messages.c:513 msgid "1 Add a source record to the database" msgstr "1 Dodaj rekord ¼ród³owy do bazy danych" #: src/gedlib/messages.c:514 msgid "2 Edit source record from the database" msgstr "2 Edytuj rekord ¼ród³owy z bazy danych" #: src/gedlib/messages.c:515 msgid "3 Add an event record to the database" msgstr "3 Dodaj rekord ze zdarzeniem do bazy danych" #: src/gedlib/messages.c:516 msgid "4 Edit event record from the database" msgstr "4 Edytuj rekord ze zdarzeniem z bazy danych" #: src/gedlib/messages.c:517 msgid "5 Add an other record to the database" msgstr "5 Dodaj inny rekord do bazy danych" #: src/gedlib/messages.c:518 msgid "6 Edit other record from the database" msgstr "6 Edytuj inny rekord z bazy danych" #: src/gedlib/messages.c:521 msgid "Translation Tables" msgstr "Tablice translacji" #: src/gedlib/messages.c:522 msgid "e edit individual tables (in db)" msgstr "e edycja poszczególnych tabel (w bd)" #: src/gedlib/messages.c:523 msgid "l load a table from a file (into db)" msgstr "l wczytaj tabele z pliku (do bd)" #: src/gedlib/messages.c:524 msgid "s save a table to a file (from db)" msgstr "s zapisz tabele do pliku (z bd)" #: src/gedlib/messages.c:525 msgid "x export all tables (from db to files)" msgstr "x eksportuj wszystkie tabele (z bd do plików)" #: src/gedlib/messages.c:526 msgid "i import all tables (from files into db)" msgstr "i importuj wszystkie tabele (z plików do bd)" #: src/gedlib/messages.c:527 msgid "export/import directory:" msgstr "katalog do eksportu/importu:" #: src/gedlib/messages.c:530 msgid "Which character mapping do you want to edit?" msgstr "Któr± mapê znaków chcesz edytowaæ?" #: src/gedlib/messages.c:531 msgid "Which character mapping do you want to save?" msgstr "Któr± mapê znaków chcesz zapisaæ?" #: src/gedlib/messages.c:534 msgid "Not implemented yet" msgstr "Jeszcze nie zaimplementowane" #: src/gedlib/messages.c:537 msgid "What do you want to add?" msgstr "Co chcesz dodaæ?" #: src/gedlib/messages.c:538 msgid "p Person - add new person to the database" msgstr "p Osoba - dodaj now± osobê do bazy danych" #: src/gedlib/messages.c:539 msgid "f Family - create family record from one or two spouses" msgstr "f Rodzina - utwórz rekord rodziny z jednego lub dwóch ma³¿onków" #: src/gedlib/messages.c:540 msgid "c Child - add a child to an existing family" msgstr "c Dziecko - dodaj dziecko do istniej±cej rodziny" #: src/gedlib/messages.c:541 msgid "s Spouse - add a spouse to an existing family" msgstr "s Ma³¿onek - dodaj ma³¿onka do istniej±cej rodziny" #: src/gedlib/messages.c:544 msgid "What do you want to remove?" msgstr "Co chcesz usun±æ?" #: src/gedlib/messages.c:545 msgid "c Child - remove a child from his/her family" msgstr "c Dziecko - usuñ dziecko z jego rodziny" #: src/gedlib/messages.c:546 msgid "s Spouse - remove a spouse from a family" msgstr "s Ma³¿onek - usuñ ma³¿onka z rodziny" #: src/gedlib/messages.c:547 msgid "i Individual - remove a person completely" msgstr "i Osoba - usuñ osobê zupe³nie" #: src/gedlib/messages.c:548 msgid "f Family - remove a family completely" msgstr "f Rodzina - usuñ rodzinê zupe³nie" #: src/gedlib/messages.c:549 msgid "o Other - remove other record completely" msgstr "o Inne - usuñ rekord zupe³nie" #: src/gedlib/messages.c:552 msgid "How would you like to find a record?" msgstr "Jak chcesz znale¼æ rekord?" #: src/gedlib/messages.c:555 msgid "Performing full name scan" msgstr "Wykonywanie przeszukiwania po ca³ym nazwisku" #: src/gedlib/messages.c:556 msgid "Performing name fragment scan" msgstr "Wykonywanie przeszukiwania po imieniu lub nazwisku" #: src/gedlib/messages.c:557 msgid "Performing refn scan" msgstr "Wykonywanie pe³nego przeszukiwania po refn" #: src/gedlib/messages.c:558 #, fuzzy msgid "Performing source scan" msgstr "Wykonywanie pe³nego przeszukiwania po refn" #: src/gedlib/messages.c:559 msgid "No records found in scan" msgstr "Nie znaleziono ¿adnych rekordów" #: src/gedlib/messages.c:562 msgid "abt %1" msgstr "ok. %1" #: src/gedlib/messages.c:563 msgid "about %1" msgstr "oko³o %1" #: src/gedlib/messages.c:564 msgid "est %1" msgstr "szac. %1" #: src/gedlib/messages.c:565 msgid "estimated %1" msgstr "szac. %1" #: src/gedlib/messages.c:566 msgid "cal %1" msgstr "obl. %1" #: src/gedlib/messages.c:567 msgid "calculated %1" msgstr "obliczone %1" #: src/gedlib/messages.c:568 msgid "fr %1" msgstr "od %1" #: src/gedlib/messages.c:569 msgid "from %1" msgstr "od %1" #: src/gedlib/messages.c:570 src/gedlib/messages.c:571 msgid "to %1" msgstr "do %1" #: src/gedlib/messages.c:572 msgid "fr %1 to %2" msgstr "od %1 do %2" #: src/gedlib/messages.c:573 msgid "from %1 to %2" msgstr "od %1 do %2" #: src/gedlib/messages.c:574 msgid "bef %1" msgstr "przed %1" #: src/gedlib/messages.c:575 msgid "before %1" msgstr "przed %1" #: src/gedlib/messages.c:576 msgid "aft %1" msgstr "po %1" #: src/gedlib/messages.c:577 msgid "after %1" msgstr "po %1" #: src/gedlib/messages.c:578 msgid "bet %1 and %2" msgstr "pom. %1 a %2" #: src/gedlib/messages.c:579 msgid "between %1 and %2" msgstr "between %1 and %2" #: src/gedlib/messages.c:582 msgid "B.C." msgstr "B.C." #: src/gedlib/messages.c:584 msgid "BC" msgstr "BC" #: src/gedlib/messages.c:586 msgid "B.C.E." msgstr "B.C.E." #: src/gedlib/messages.c:588 msgid "BCE" msgstr "BCE" #: src/gedlib/messages.c:590 msgid "A.D." msgstr "A.D." #: src/gedlib/messages.c:592 msgid "AD" msgstr "AD" #: src/gedlib/messages.c:594 msgid "C.E." msgstr "C.E." #: src/gedlib/messages.c:596 msgid "CE" msgstr "CE" #: src/gedlib/messages.c:599 msgid "%1J" msgstr "%1J" #: src/gedlib/messages.c:601 msgid "%1 HEB" msgstr "%1 HEB" #: src/gedlib/messages.c:603 msgid "%1 FR" msgstr "%1 FR" #: src/gedlib/messages.c:605 msgid "%1 AUC" msgstr "%1 AUC" #: src/gedlib/messages.c:607 msgid "jan" msgstr "sty" #: src/gedlib/messages.c:608 msgid "january" msgstr "styczeñ" #: src/gedlib/messages.c:609 msgid "feb" msgstr "lut" #: src/gedlib/messages.c:610 msgid "february" msgstr "luty" #: src/gedlib/messages.c:611 msgid "mar" msgstr "mar" #: src/gedlib/messages.c:612 msgid "march" msgstr "marzec" #: src/gedlib/messages.c:613 msgid "apr" msgstr "kwi" #: src/gedlib/messages.c:614 msgid "april" msgstr "kwiecieñ" #: src/gedlib/messages.c:616 msgid "**may" msgstr "maj" #: src/gedlib/messages.c:617 msgid "may" msgstr "maj" #: src/gedlib/messages.c:618 msgid "jun" msgstr "cze" #: src/gedlib/messages.c:619 msgid "june" msgstr "czerwiec" #: src/gedlib/messages.c:620 msgid "jul" msgstr "lip" #: src/gedlib/messages.c:621 msgid "july" msgstr "lipiec" #: src/gedlib/messages.c:622 msgid "aug" msgstr "sie" #: src/gedlib/messages.c:623 msgid "august" msgstr "sierpieñ" #: src/gedlib/messages.c:624 msgid "sep" msgstr "wrz" #: src/gedlib/messages.c:625 msgid "september" msgstr "wrzesieñ" #: src/gedlib/messages.c:626 msgid "oct" msgstr "pa¼" #: src/gedlib/messages.c:627 msgid "october" msgstr "pa¼dziernik" #: src/gedlib/messages.c:628 msgid "nov" msgstr "lis" #: src/gedlib/messages.c:629 msgid "november" msgstr "listopad" #: src/gedlib/messages.c:630 msgid "dec" msgstr "gru" #: src/gedlib/messages.c:631 msgid "december" msgstr "grudzieñ" #: src/gedlib/messages.c:633 msgid "tsh" msgstr "tsh" #: src/gedlib/messages.c:634 msgid "tishri" msgstr "tishri" #: src/gedlib/messages.c:635 msgid "csh" msgstr "csh" #: src/gedlib/messages.c:636 msgid "cheshvan" msgstr "cheshvan" #: src/gedlib/messages.c:637 msgid "ksl" msgstr "ksl" #: src/gedlib/messages.c:638 msgid "kislev" msgstr "kislev" #: src/gedlib/messages.c:639 msgid "tvt" msgstr "tvt" #: src/gedlib/messages.c:640 msgid "tevet" msgstr "tevet" #: src/gedlib/messages.c:641 msgid "shv" msgstr "shv" #: src/gedlib/messages.c:642 msgid "shevat" msgstr "shevat" #: src/gedlib/messages.c:643 msgid "adr" msgstr "adr" #: src/gedlib/messages.c:644 msgid "adar" msgstr "adar" #: src/gedlib/messages.c:645 msgid "ads" msgstr "ads" #: src/gedlib/messages.c:646 msgid "adar sheni" msgstr "adar sheni" #: src/gedlib/messages.c:647 msgid "nsn" msgstr "nsn" #: src/gedlib/messages.c:648 msgid "nisan" msgstr "nisan" #: src/gedlib/messages.c:649 msgid "iyr" msgstr "iyr" #: src/gedlib/messages.c:650 msgid "iyar" msgstr "iyar" #: src/gedlib/messages.c:651 msgid "svn" msgstr "svn" #: src/gedlib/messages.c:652 msgid "sivan" msgstr "sivan" #: src/gedlib/messages.c:653 msgid "tmz" msgstr "tmz" #: src/gedlib/messages.c:654 msgid "tamuz" msgstr "tamuz" #: src/gedlib/messages.c:655 msgid "aav" msgstr "aav" #: src/gedlib/messages.c:656 msgid "av" msgstr "av" #: src/gedlib/messages.c:657 msgid "ell" msgstr "ell" #: src/gedlib/messages.c:658 msgid "elul" msgstr "elul" #: src/gedlib/messages.c:660 msgid "vend" msgstr "vend" #: src/gedlib/messages.c:661 msgid "vendemiaire" msgstr "vendemiaire" #: src/gedlib/messages.c:662 msgid "brum" msgstr "brum" #: src/gedlib/messages.c:663 msgid "brumaire" msgstr "brumaire" #: src/gedlib/messages.c:664 msgid "frim" msgstr "frim" #: src/gedlib/messages.c:665 msgid "frimaire" msgstr "frimaire" #: src/gedlib/messages.c:666 msgid "nivo" msgstr "nivo" #: src/gedlib/messages.c:667 msgid "nivose" msgstr "nivose" #: src/gedlib/messages.c:668 msgid "pluv" msgstr "pluv" #: src/gedlib/messages.c:669 msgid "pluviose" msgstr "pluviose" #: src/gedlib/messages.c:670 msgid "vent" msgstr "vent" #: src/gedlib/messages.c:671 msgid "ventose" msgstr "ventose" #: src/gedlib/messages.c:672 msgid "germ" msgstr "germ" #: src/gedlib/messages.c:673 msgid "germinal" msgstr "germinal" #: src/gedlib/messages.c:674 msgid "flor" msgstr "flor" #: src/gedlib/messages.c:675 msgid "floreal" msgstr "floreal" #: src/gedlib/messages.c:676 msgid "prai" msgstr "prai" #: src/gedlib/messages.c:677 msgid "prairial" msgstr "prairial" #: src/gedlib/messages.c:678 msgid "mess" msgstr "mess" #: src/gedlib/messages.c:679 msgid "messidor" msgstr "messidor" #: src/gedlib/messages.c:680 msgid "ther" msgstr "ther" #: src/gedlib/messages.c:681 msgid "thermidor" msgstr "thermidor" #: src/gedlib/messages.c:682 msgid "fruc" msgstr "fruc" #: src/gedlib/messages.c:683 msgid "fructidor" msgstr "fructidor" #: src/gedlib/messages.c:684 msgid "comp" msgstr "comp" #: src/gedlib/messages.c:685 msgid "jour_complementairs" msgstr "jour_complementairs" #: src/gedlib/node.c:610 msgid "NO NAME" msgstr "BRAK NAZWISKA" #: src/gedlib/node.c:1167 #, c-format msgid "Node memory leaks:" msgstr "Wycieki pamiêci w wê¼le:" #: src/gedlib/node.c:1170 src/gedlib/record.c:361 src/interp/pvalalloc.c:301 #, c-format msgid "%d item leaked" msgid_plural "%d items leaked" msgstr[0] "Wyciek³ %d element" msgstr[1] "Wyciek³y %d elementy" msgstr[2] "Wyciek³o %d elementów" #: src/gedlib/record.c:358 #, fuzzy, c-format msgid "Record memory leaks:" msgstr "Wycieki pamiêci w wê¼le:" #: src/gedlib/remove.c:250 msgid "Families may not yet be removed in this fashion." msgstr "Nie mo¿na usuwaæ rodzin w ten sposób." #. TRANSLATORS: Character set conversion from external editor to database internal #: src/gedlib/translat.c:100 msgid "Editor to Internal" msgstr "Edytor->Wewnêtrzne" #. TRANSLATORS: Character set conversion from database internal to external editor #: src/gedlib/translat.c:102 msgid "Internal to Editor" msgstr "Wewnêtrzne->Edytor" #: src/gedlib/translat.c:103 msgid "GEDCOM to Internal" msgstr "GEDCOM->Wewnêtrzne" #: src/gedlib/translat.c:104 msgid "Internal to GEDCOM" msgstr "Wewnêtrzne->GEDCOM" #: src/gedlib/translat.c:105 msgid "Display to Internal" msgstr "Ekran->Wewnêtrzne" #: src/gedlib/translat.c:106 msgid "Internal to Display" msgstr "Wewnêtrzne->Ekran" #: src/gedlib/translat.c:107 msgid "Report to Internal" msgstr "Raport->Wewnêtrzne" #: src/gedlib/translat.c:108 msgid "Internal to Report" msgstr "Wewnêtrzne->Raport" #. TRANSLATORS: key for "Editor to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:119 msgid "menu|trantable|e" msgstr "e" #. TRANSLATORS: key for "Internal to Editor" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:122 msgid "menu|trantable|m" msgstr "m" #. TRANSLATORS: key for "GEDCOM to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:125 msgid "menu|trantable|i" msgstr "i" #. TRANSLATORS: key for "Internal to GEDCOM" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:128 msgid "menu|trantable|x" msgstr "x" #. TRANSLATORS: key for "Display to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:131 msgid "menu|trantable|g" msgstr "g" #. TRANSLATORS: key for "Internal to Display" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:134 msgid "menu|trantable|d" msgstr "d" #. TRANSLATORS: key for "Report to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:137 msgid "menu|trantable|p" msgstr "p" #. TRANSLATORS: key for "Internal to Report" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:140 msgid "menu|trantable|r" msgstr "r" #. TRANSLATORS: db internal translation table note for tt menu #: src/gedlib/translat.c:473 #, c-format msgid " (dbint tt: %s)" msgstr " (dbint tt: %s)" #: src/gedlib/valid.c:75 msgid "This person record does not have a name line." msgstr "Rekord tej osoby nie ma wiersza nazwiska." #: src/gedlib/xlat.c:347 #, fuzzy, c-format msgid "ttpath get_conversion_dyntt:from <%s> to <%s>: %s" msgstr "Nie mo¿na przekszta³ciæ kodowania (z <%s> na <%s>)" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 msgid "succeeded" msgstr "" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 #, fuzzy msgid "failed" msgstr "piêæ" #: src/gedlib/xlat.c:369 #, c-format msgid "ttpath get_subcoding_dyntt from <%s> to subcode <%s>: %s" msgstr "" #: src/gedlib/xlat.c:435 msgid "No TTPATH config variable" msgstr "" #: src/gedlib/xlat.c:464 #, c-format msgid "ttpath checking dir <%s>" msgstr "" #: src/gedlib/xlat.c:478 #, fuzzy, c-format msgid "ttpath file <%s> typed as %d" msgstr "W pliku <%s> w wierszu %d" #: src/gedlib/xlat.c:690 #, fuzzy msgid "(no conversion)" msgstr "Brak konwersji" #. TRANSLATORS: steps in a chain of codeset conversions, eg, Editor-to-Internal #: src/gedlib/xlat.c:713 #, fuzzy, c-format msgid "%d step" msgid_plural "%d steps" msgstr[0] "%d poprawiony" msgstr[1] "%d poprawione" msgstr[2] "%d poprawionych" #: src/gedlib/xreffile.c:400 #, c-format msgid "Corrupt DELETESET %c" msgstr "" #: src/gedlib/xreffile.c:425 #, c-format msgid "Tried to add already-deleted record (%ld) to xref (%c)!" msgstr "" #: src/interp/alloc.c:798 #, c-format msgid "Error: file \"%s\": line %d: " msgstr "B³±d: plik \"%s\": wiersz %d: " #: src/interp/alloc.c:903 #, c-format msgid "%s: the arg must be an integer." msgstr "%s: argument musi byæ liczb± ca³kowit±." #: src/interp/alloc.c:904 #, c-format msgid "%s: the arg #%s must be an integer." msgstr "%s: argument #%s musi byæ liczb± ca³kowit±." #: src/interp/alloc.c:905 #, c-format msgid "%s: the arg #%s must be a float." msgstr "%s: argument #%s musi byæ liczb± rzeczywist±." #: src/interp/alloc.c:906 #, c-format msgid "%s: the arg must be a string." msgstr "%s: argument musi byæ ci±giem znaków." #: src/interp/alloc.c:907 #, c-format msgid "%s: the arg #%s must be a string." msgstr "%s: argument #%s musi byæ ci±giem znaków." #: src/interp/alloc.c:908 #, c-format msgid "%s: null arg not permissible." msgstr "%s: pusty argument niedopuszczalny." #: src/interp/alloc.c:909 #, c-format msgid "%s: the arg must be a filename." msgstr "%s: argumnet musi byæ nazw± pliku." #: src/interp/alloc.c:910 #, c-format msgid "%s: the arg must be a node or string." msgstr "%s: argument musi byæ wêz³em albo ci±giem znaków." #: src/interp/alloc.c:911 #, c-format msgid "%s: the arg must be a person." msgstr "%s: argument musi byæ osob±." #: src/interp/alloc.c:912 #, c-format msgid "%s: the arg #%s must be a person." msgstr "%s: argument #%s musi byæ osob±." #: src/interp/alloc.c:913 #, c-format msgid "%s: the arg must be a family." msgstr "%s: argument musi byæ rodzin±." #: src/interp/alloc.c:914 #, c-format msgid "%s: the arg #%s must be a family." msgstr "%s: argument #%s musi byæ rodzin±." #: src/interp/alloc.c:915 #, c-format msgid "%s: the arg #%s must be a record." msgstr "%s: argument #%s musi byæ rekordem." #: src/interp/alloc.c:916 #, c-format msgid "%s: the arg must be a node." msgstr "%s: argument musi byæ wêz³em." #: src/interp/alloc.c:917 #, c-format msgid "%s: the arg #%s must be a node." msgstr "%s: argument #%s musi byæ wêz³em." #: src/interp/alloc.c:918 #, c-format msgid "%s: the arg must be a variable." msgstr "%s: argument musi byæ zmienn±." #: src/interp/alloc.c:919 #, c-format msgid "%s: the arg #%s must be a variable." msgstr "%s: argument #%s musi byæ zmienn±." #: src/interp/alloc.c:920 #, c-format msgid "%s: the arg #%s must be a boolean." msgstr "%s: argument #%s musi byæ warto¶ci± logiczn±." #: src/interp/alloc.c:921 #, c-format msgid "%s: the arg must be a list." msgstr "%s: argument musi byæ list±." #: src/interp/alloc.c:922 #, c-format msgid "%s: the arg #%s must be a list." msgstr "%s: argument #%s musi byæ list±." #: src/interp/alloc.c:923 #, c-format msgid "%s: the arg #%s must be a table." msgstr "%s: argument #%s musi byæ tabel±." #: src/interp/alloc.c:924 #, c-format msgid "%s: the arg must be a set." msgstr "%s: argument musi byæ zbiorem." #: src/interp/alloc.c:925 #, c-format msgid "%s: the arg #%s must be a set." msgstr "%s: argument #%s musi byæ zbiorem." #: src/interp/alloc.c:926 #, c-format msgid "%s: Bad arguments" msgstr "%s: Z³e argumenty" #: src/interp/alloc.c:927 #, c-format msgid "%s: the arg had a major error." msgstr "%s: argument ma powa¿ny b³±d." #: src/interp/alloc.c:928 #, c-format msgid "%s: the arg #%s had a major error." msgstr "%s: argument #%s ma powa¿ny b³±d." #: src/interp/alloc.c:929 #, fuzzy, c-format msgid "%s: the arg #%s would cause an arithmetic exception." msgstr "%s: argument #%s musi byæ liczb± ca³kowit±." #: src/interp/builtin.c:111 msgid "Enter integer for program" msgstr "Podaj liczbê ca³kowit± dla programu" #: src/interp/builtin.c:181 msgid "Identify person for program:" msgstr "Znajd¼ osobê dla programu:" #: src/interp/builtin.c:206 msgid "Enter a spouse from family." msgstr "Podaj ma³¿onka z rodziny." #: src/interp/builtin.c:207 msgid "Enter a sibling from family." msgstr "Podaj rodzeñstwo z rodziny." #: src/interp/builtin.c:240 msgid "Identify list of persons for program:" msgstr "Znajd¼ listê osób dla programu:" #: src/interp/builtin.c:329 msgid "name: person does not have a name" msgstr "name: osoba nie ma nazwiska" #: src/interp/builtin.c:385 msgid "fullname: person does not have a name" msgstr "fullname: osoba nie ma nazwiska" #: src/interp/builtin.c:412 msgid "surname: person does not have a name" msgstr "surname: osoba nie ma nazwiska" #: src/interp/builtin.c:437 msgid "soundex: person does not have a name" msgstr "soundex: osoba nie ma nazwiska" #: src/interp/builtin.c:500 #, c-format msgid "Bad escape code at offset %d in bytecode string <%s>" msgstr "Z³y znak unikowy, przesuniêcie %d w ci±g bajtowym <%s>" #: src/interp/builtin.c:643 msgid "(givens) person does not have a name" msgstr "(givens) osoba nie ma nazwiska" #: src/interp/builtin.c:670 #, c-format msgid "set(%s, ) is invalid" msgstr "set(%s, ) jest niedopuszczalne" #: src/interp/builtin.c:1191 msgid "first" msgstr "pierwszy" #: src/interp/builtin.c:1191 msgid "second" msgstr "drugi" #: src/interp/builtin.c:1191 msgid "third" msgstr "trzeci" #: src/interp/builtin.c:1191 msgid "fourth" msgstr "czwarty" #: src/interp/builtin.c:1191 msgid "fifth" msgstr "pi±ty" #: src/interp/builtin.c:1192 msgid "sixth" msgstr "szósty" #: src/interp/builtin.c:1192 msgid "seventh" msgstr "siódmy" #: src/interp/builtin.c:1192 msgid "eighth" msgstr "ósmy" #: src/interp/builtin.c:1192 msgid "ninth" msgstr "dziewi±ty" #: src/interp/builtin.c:1192 msgid "tenth" msgstr "dziesi±ty" #: src/interp/builtin.c:1193 msgid "eleventh" msgstr "jedenasty" #: src/interp/builtin.c:1193 msgid "twelfth" msgstr "dwunasty" #: src/interp/builtin.c:1210 #, fuzzy, c-format msgid "%ldth" msgstr "%d" #: src/interp/builtin.c:1220 msgid "zero" msgstr "zero" #: src/interp/builtin.c:1220 msgid "one" msgstr "jeden" #: src/interp/builtin.c:1220 msgid "two" msgstr "dwa" #: src/interp/builtin.c:1220 msgid "three" msgstr "trzy" #: src/interp/builtin.c:1220 msgid "four" msgstr "cztery" #: src/interp/builtin.c:1220 msgid "five" msgstr "piêæ" #: src/interp/builtin.c:1221 msgid "six" msgstr "sze¶æ" #: src/interp/builtin.c:1221 msgid "seven" msgstr "siedem" #: src/interp/builtin.c:1221 msgid "eight" msgstr "osiem" #: src/interp/builtin.c:1221 msgid "nine" msgstr "dziewiêæ" #: src/interp/builtin.c:1221 msgid "ten" msgstr "dziesiêæ" #: src/interp/builtin.c:1222 msgid "eleven" msgstr "jedena¶cie" #: src/interp/builtin.c:1222 msgid "twelve" msgstr "dwana¶cie" #: src/interp/builtin.c:2173 msgid "the arg to empty is not a list, table or set" msgstr "argument polecenie empty nie jest list±, tabel± ani zbiorem" #: src/interp/builtin.c:2283 msgid "the arg to length is not a list, table or set" msgstr "argument polecenia length nie jest list±, tabel± ani zbiorem" #: src/interp/builtin.c:2470 msgid "He" msgstr "On" #: src/interp/builtin.c:2470 msgid "he" msgstr "on" #: src/interp/builtin.c:2470 msgid "His" msgstr "Jego" #: src/interp/builtin.c:2470 msgid "his" msgstr "jego" #: src/interp/builtin.c:2470 msgid "him" msgstr "jemu" #: src/interp/builtin.c:2472 msgid "She" msgstr "Ona" #: src/interp/builtin.c:2472 msgid "she" msgstr "ona" #: src/interp/builtin.c:2472 msgid "Her" msgstr "Jej" #: src/interp/builtin.c:2472 msgid "her" msgstr "jej" #: src/interp/builtin.c:2472 msgid "her_" msgstr "jej_" #: src/interp/builtin.c:2850 msgid "(trimname) person does not have a name" msgstr "(trimname) osoba nie ma nazwiska" #: src/interp/builtin.c:2940 msgid "Sunday" msgstr "" #: src/interp/builtin.c:2940 msgid "Monday" msgstr "" #: src/interp/builtin.c:2940 msgid "Tuesday" msgstr "" #: src/interp/builtin.c:2941 msgid "Wednesday" msgstr "" #: src/interp/builtin.c:2941 msgid "Thursday" msgstr "" #: src/interp/builtin.c:2941 msgid "Friday" msgstr "" #: src/interp/builtin.c:2941 msgid "Saturday" msgstr "" #: src/interp/eval.c:244 #, fuzzy, c-format msgid "Undefined func: %s" msgstr "Niezdefiniowana procedura: %s" #: src/interp/eval.c:246 #, fuzzy, c-format msgid "Ambiguous call to func: %s" msgstr "Niejednoznaczne odwo³anie do procedury: %s" #: src/interp/interp.c:247 #, c-format msgid "Report not found: %s " msgstr "Raport nie znaleziony: %s " #: src/interp/interp.c:258 #, c-format msgid "Error: file <%s> not found" msgstr "B³±d: plik <%s> nie znaleziony" #: src/interp/interp.c:316 #, fuzzy msgid "Program contains errors.\n" msgstr "zawiera b³êdy.\n" #: src/interp/interp.c:323 #, fuzzy msgid "Program needs a starting procedure.\n" msgstr "wymaga procedury pocz±tkowej.\n" #: src/interp/interp.c:340 #, c-format msgid "Proc %s must be called with %d (not %d) parameters." msgstr "Procedura %s musi byæ wywo³ana z %d (a nie z %d) parameterami." #: src/interp/interp.c:355 #, fuzzy msgid "Program is running..." msgstr "dzia³a..." #: src/interp/interp.c:410 #, fuzzy msgid "Program was run successfully.\n" msgstr "zadzia³a³ pomy¶lnie.\n" #: src/interp/interp.c:414 #, fuzzy msgid "Program was cancelled.\n" msgstr "zosta³ przerwany.\n" #: src/interp/interp.c:416 #, fuzzy msgid "Program was not run because of errors.\n" msgstr "nie zosta³ uruchomiony z powodu b³êdów.\n" #: src/interp/interp.c:506 #, c-format msgid "Error: file <%s> not found: %s\n" msgstr "B³±d: plik <%s> nie znaleziony: %s\n" #: src/interp/interp.c:538 #, c-format msgid "" "\n" "Report duration %s (ui duration %s)\n" msgstr "" "\n" "Czas wykonania raportu %s (czas interfejsu %s)\n" #: src/interp/interp.c:610 #, c-format msgid "identifier: %s should be a string\n" msgstr "identifikator: %s powinien byæ ci±giem znaków\n" #: src/interp/interp.c:1778 #, c-format msgid "Undefined proc: %s" msgstr "Niezdefiniowana procedura: %s" #: src/interp/interp.c:1780 #, c-format msgid "Ambiguous call to proc: %s" msgstr "Niejednoznaczne odwo³anie do procedury: %s" #: src/interp/interp.c:2017 #, c-format msgid "Duplicate proc %s (lines %d and %d) in report: %s" msgstr "Zduplikowana procedura %s (wiersze %d i %d) w raporcie: %s" #: src/interp/interp.c:2047 #, c-format msgid "Duplicate func %s (lines %d and %d) in report: %s" msgstr "Zduplikowana funkcja %s (wiersze %d i %d) w raporcie: %s" #: src/interp/interp.c:2110 msgid "This report requires a newer program to run\n" msgstr "Ten raport wymaga do dzia³ania noweszego programu\n" #: src/interp/interp.c:2166 #, c-format msgid "Program forgot to unlock %d record" msgid_plural "Program forgot to unlock %d records" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/interp/intrpseq.c:303 msgid "missing or incorrect value for sort" msgstr "" #: src/interp/lex.c:219 #, c-format msgid "" "String constant overflowing internal buffer tokbuf len=%d, file: %s, start " "line: %ld" msgstr "" #: src/interp/more.c:648 msgid "Please choose from the following list." msgstr "Wybierz z poni¿szej listy." #: src/interp/more.c:685 msgid "Illegal type found in list in menuchoose" msgstr "Niedopuszczalny typ znaleziony na li¶cie wyboru menu" #: src/interp/more.c:976 msgid "error evaluating arg to lock" msgstr "" #: src/interp/more.c:982 msgid "null arg in lock" msgstr "" #: src/interp/more.c:993 msgid "node passed to lock must be inside a record" msgstr "" #: src/interp/more.c:999 #, fuzzy msgid "the arg to lock must be a record or node" msgstr "argumentem do lock musi byæ osoba albo rodzina" #: src/interp/more.c:1007 msgid "Error: there are 999,999 locks on arg to lock" msgstr "" #: src/interp/more.c:1027 msgid "error evaluating arg to unlock" msgstr "" #: src/interp/more.c:1033 msgid "null arg in unlock" msgstr "" #: src/interp/more.c:1044 #, fuzzy msgid "node passed to unlock must be inside a record" msgstr "argumentem do unlock musi byæ osoba albo rodzina" #: src/interp/more.c:1050 #, fuzzy msgid "the arg to unlock must be a record or node" msgstr "argumentem do unlock musi byæ osoba albo rodzina" #: src/interp/pvalalloc.c:295 #, c-format msgid "PVALUE memory leak report:" msgstr "" #: src/interp/pvalmath.c:70 #, c-format msgid "Nonnumeric type to operation %s: %s" msgstr "" #: src/interp/pvalmath.c:85 #, fuzzy, c-format msgid "Illegal value to operation %s: %s" msgstr "nielegalne odwo³anie do poz." #: src/interp/pvalmath.c:411 #, c-format msgid "%s: not compatible numeric types: %s and %s" msgstr "" #: src/interp/pvalue.c:810 #, c-format msgid "%s: Incomparable types: %s and %s" msgstr "" #: src/interp/pvalue.c:907 msgid "NOT PVALUE: NULL!" msgstr "" #: src/interp/pvalue.c:911 #, c-format msgid "NOT PVALUE: invalid type=%d)!" msgstr "" #: src/interp/pvalue.c:949 #, fuzzy, c-format msgid "%d item" msgid_plural "%d items" msgstr[0] "%d poprawiony" msgstr[1] "%d poprawione" msgstr[2] "%d poprawionych" #: src/interp/pvalue.c:956 #, fuzzy, c-format msgid "%d entry" msgid_plural "%d entries" msgstr[0] "%d b³±d" msgstr[1] "%d b³êdy" msgstr[2] "%d b³êdów" #: src/interp/pvalue.c:963 #, fuzzy, c-format msgid "%d record" msgid_plural "%d records" msgstr[0] "%d b³±d" msgstr[1] "%d b³êdy" msgstr[2] "%d b³êdów" #: src/interp/pvalue.c:970 #, fuzzy, c-format msgid "%d element" msgid_plural "%d elements" msgstr[0] "jedenasty" msgstr[1] "jedenasty" msgstr[2] "jedenasty" #: src/interp/progerr.c:125 msgid "Enter d for debugger, q to quit" msgstr "Podaj d aby przej¶æ do debugera, q - wyj¶cie" #: src/interp/progerr.c:140 #, fuzzy, c-format msgid "Display local (%d var)" msgid_plural "Display locals (%d vars)" msgstr[0] "Wy¶wietl zmienne loklane (%d)" msgstr[1] "Wy¶wietl zmienne loklane (%d)" msgstr[2] "Wy¶wietl zmienne loklane (%d)" #: src/interp/progerr.c:146 #, fuzzy, c-format msgid "Display global (%d var)" msgid_plural "Display globals (%d vars)" msgstr[0] "Wy¶wietl zmienne globalne (%d)" msgstr[1] "Wy¶wietl zmienne globalne (%d)" msgstr[2] "Wy¶wietl zmienne globalne (%d)" #: src/interp/progerr.c:151 #, c-format msgid "Call stack has %d higher level" msgid_plural "Call stack has %d higher levels" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/interp/progerr.c:154 #, fuzzy msgid " Go up one level" msgstr "Zdejmij jeden poziom" #: src/interp/progerr.c:160 #, c-format msgid "Call stack has %d lower level" msgid_plural "Call stack has %d lower levels" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/interp/progerr.c:164 #, fuzzy msgid " Go down one level" msgstr "Zdejmij jeden poziom" #: src/interp/progerr.c:169 msgid "Quit debugger" msgstr "Wyj¶cie z debugera" #: src/interp/progerr.c:171 msgid "Report debugger" msgstr "Raport debugera" #: src/interp/progerr.c:175 msgid "Local variables" msgstr "Zmienne lokalne" #: src/interp/progerr.c:178 msgid "Global variables" msgstr "Zmienne globalne" #: src/interp/progerr.c:338 msgid "Report cancelled" msgstr "Raport wstrzymany" #: src/interp/progerr.c:346 msgid "Report file: " msgstr "Plik raportu: " #: src/interp/progerr.c:355 #, c-format msgid "Parsing Error at line %d: " msgstr "B³±d sk³adniowy w wierszu %d: " #: src/interp/progerr.c:357 #, c-format msgid "Runtime Error at line %d: " msgstr "B³±d wykonania w wierszu %d: " #: src/interp/progerr.c:360 msgid "Aborting: " msgstr "Przerwanie: " #: src/interp/rassa.c:242 #, c-format msgid "Could not open file %s" msgstr "Nie mo¿na otworzyæ pliku %s" #: src/interp/rassa.c:271 msgid "Report stopping due to error opening output file" msgstr "Raport zatrzymany z powodu b³êdu otwarcia pliku wyj¶ciowego" #: src/interp/rassa.c:273 msgid "Report stopping due to lack of output file" msgstr "Raport zatrzymany z powodu braku pliku wyj¶ciowego" #: src/interp/rassa.c:330 msgid "illegal call to pos." msgstr "nielegalne odwo³anie do poz." #: src/interp/rptsort.c:104 msgid "First argument to (r)sort must be list or array" msgstr "Pierwszy argument dla (r)sort musi byæ list± lub tablic±" #: src/interp/rptsort.c:117 src/interp/rptsort.c:128 msgid "Arguments to (r)sort must be of same size" msgstr "Argumenty dla (r)sort musz± mieæ taki sam rozmiar" #: src/interp/rptsort.c:137 msgid "Second argument to (r)sort must be list or array" msgstr "Drugi argument dla (r)sort musi byæ list± albo tablic±" #: src/liflines/add.c:68 #, c-format msgid "There was %d unresolved reference." msgid_plural "There were %d unresolved references." msgstr[0] "By³o %d nietrafione odwo³anie." msgstr[1] "By³y %d nietrafione odwo³ania." msgstr[2] "By³o %d nietrafionych odwo³añ." #: src/liflines/brwsmenu.c:25 msgid "? Other menu choices" msgstr "? Inne pozycje menu" #: src/liflines/brwsmenu.c:69 msgid "e Edit the person" msgstr "e Edycja osoby" #: src/liflines/brwsmenu.c:70 msgid "e Edit the family" msgstr "e Edycja rodziny" #: src/liflines/brwsmenu.c:71 msgid "e Edit record" msgstr "e Edycja rekordu" #: src/liflines/brwsmenu.c:72 msgid "e Edit top person" msgstr "e Edycja najwy¿szej osoby" #: src/liflines/brwsmenu.c:73 msgid "e Edit top family" msgstr "e Edycja rodziny" #: src/liflines/brwsmenu.c:74 msgid "f Browse to father" msgstr "f Id¼ do ojca" #: src/liflines/brwsmenu.c:75 msgid "f Browse top father" msgstr "f Id¼ do najwy¿szego ojca" #: src/liflines/brwsmenu.c:76 msgid "m Browse to mother" msgstr "m Id¼ do matki" #: src/liflines/brwsmenu.c:77 msgid "m Browse top mother" msgstr "m Id¼ do najwy¿szej matki" #: src/liflines/brwsmenu.c:78 msgid "s Browse to spouse/s" msgstr "s Id¼ do ma³¿onka" #: src/liflines/brwsmenu.c:79 msgid "s Browse top spouse/s" msgstr "s Id¼ do najwy¿szego ma³¿onka" #: src/liflines/brwsmenu.c:80 msgid "c Browse to children" msgstr "c Id¼ do dzieci" #: src/liflines/brwsmenu.c:81 msgid "c Browse top children" msgstr "c Id¼ do najwy¿szych dzieci" #: src/liflines/brwsmenu.c:82 msgid "o Browse to older sib" msgstr "o Starsze rodzeñstwo" #: src/liflines/brwsmenu.c:83 msgid "y Browse to younger sib" msgstr "y M³odsze rodzeñstwo" #: src/liflines/brwsmenu.c:84 msgid "g Browse to family" msgstr "g Id¼ do rodziny" #: src/liflines/brwsmenu.c:85 msgid "u Browse to parents" msgstr "u Id¼ do rodziców" #: src/liflines/brwsmenu.c:86 msgid "b Browse to persons" msgstr "b Id¼ do osób" #: src/liflines/brwsmenu.c:87 msgid "t Browse to top" msgstr "t Id¼ na górê" #: src/liflines/brwsmenu.c:88 msgid "b Browse to bottom" msgstr "b Id¼ na dó³" #: src/liflines/brwsmenu.c:89 msgid "h Add as spouse" msgstr "h Dodaj jako ma³¿onka" #: src/liflines/brwsmenu.c:90 msgid "i Add as child" msgstr "i Dodaj jako dziecko" #: src/liflines/brwsmenu.c:91 msgid "s Add spouse to family" msgstr "s Dodaj ma³¿onka" #: src/liflines/brwsmenu.c:92 msgid "a Add child to family" msgstr "a Dodaj dziecko" #: src/liflines/brwsmenu.c:93 msgid "a Add family" msgstr "a Dodaj rodzinê" #: src/liflines/brwsmenu.c:94 msgid "x Swap two families" msgstr "x Przestaw dwie rodziny" #: src/liflines/brwsmenu.c:95 msgid "x Swap two children" msgstr "x Przestaw dwoje dzieci" #: src/liflines/brwsmenu.c:97 #, no-c-format msgid "%c Reorder child" msgstr "%c Zmieñ kolejno¶æ dzieci" #: src/liflines/brwsmenu.c:98 msgid "x Switch top/bottom" msgstr "x Zmieñ górê/dó³" #: src/liflines/brwsmenu.c:99 msgid "n Create new person" msgstr "n Utwórz now± osobê" #: src/liflines/brwsmenu.c:100 msgid "a Create new family" msgstr "a Utwórz now± rodzinê" #: src/liflines/brwsmenu.c:101 msgid "tt Enter tandem mode" msgstr "tt Wejd¼ w tryb tandem" #: src/liflines/brwsmenu.c:102 msgid "tt Enter family tandem" msgstr "tt Tryb dwóch rodzin" #: src/liflines/brwsmenu.c:103 msgid "zi Browse to indi" msgstr "zi Id¼ do osoby" #: src/liflines/brwsmenu.c:104 msgid "zz Browse to any" msgstr "zz Id¼ do dowolnego" #: src/liflines/brwsmenu.c:105 msgid "r Remove as spouse" msgstr "r Usuñ jako ma³¿onka" #: src/liflines/brwsmenu.c:106 msgid "d Remove as child" msgstr "d Usuñ jako dziecko" #: src/liflines/brwsmenu.c:107 msgid "r Remove spouse from" msgstr "r Usuñ ma³¿onka" #: src/liflines/brwsmenu.c:108 msgid "d Remove child from" msgstr "d Usuñ dziecko" #: src/liflines/brwsmenu.c:109 msgid "( Scroll up" msgstr "( Przewiñ w górê" #: src/liflines/brwsmenu.c:110 msgid ") Scroll down" msgstr ") Przewiñ w dó³" #: src/liflines/brwsmenu.c:111 msgid "] Increase tree depth" msgstr "] Zwiêksz wys. drzewa" #: src/liflines/brwsmenu.c:112 msgid "[ Decrease tree depth" msgstr "[ Zmniejsz wys. drzewa" #: src/liflines/brwsmenu.c:113 msgid "(t Scroll top up" msgstr "(t Przewiñ na sam± górê" #: src/liflines/brwsmenu.c:114 msgid ")t Scroll top down" msgstr ")t Przewiñ górê na dó³" #: src/liflines/brwsmenu.c:115 msgid "(b Scroll bottom up" msgstr "(b Przewiñ dó³ na górê" #: src/liflines/brwsmenu.c:116 msgid ")b Scroll bottom down" msgstr ")b Przewiñ dó³ na dó³" #: src/liflines/brwsmenu.c:117 msgid "(( Scroll both up" msgstr "(( Przewiñ oba w górê" #: src/liflines/brwsmenu.c:118 msgid ")) Scroll both down" msgstr ")) Przewiñ oba w dó³" #: src/liflines/brwsmenu.c:119 msgid "# Toggle childnos" msgstr "# Numeruj dzieci" #: src/liflines/brwsmenu.c:120 msgid "!g GEDCOM mode" msgstr "!g tryb GEDCOM" #: src/liflines/brwsmenu.c:121 msgid "!x GEDCOMX mode" msgstr "!x tryb GEDCOMX" #: src/liflines/brwsmenu.c:122 msgid "!t GEDCOMT mode" msgstr "!t tryb GEDCOMT" #: src/liflines/brwsmenu.c:123 msgid "!a Ancestors mode" msgstr "!a Tryb przodków" #: src/liflines/brwsmenu.c:124 msgid "!d Descendants mode" msgstr "!d Tryb potomków" #: src/liflines/brwsmenu.c:125 msgid "!n Normal mode" msgstr "!n Tryb zwyk³y" #: src/liflines/brwsmenu.c:126 msgid "p Pedigree mode" msgstr "p Tryb genealogii" #: src/liflines/brwsmenu.c:127 msgid "!! Cycle mode" msgstr "!! Prze³±czanie trybów" #: src/liflines/brwsmenu.c:129 msgid "(1-9) Browse to child" msgstr "(1-9) Id¼ do dziecka" #: src/liflines/brwsmenu.c:130 msgid "y Turn on sync" msgstr "y W³±cz synchronizacjê" #: src/liflines/brwsmenu.c:131 msgid "A Advanced view" msgstr "A Widok zaawansowany" #: src/liflines/brwsmenu.c:132 msgid "tc Tandem to children" msgstr "tc Tryb dwójki dzieci" #: src/liflines/brwsmenu.c:133 msgid "tf Tandem to father/s" msgstr "tf Tryb dwóch ojców" #: src/liflines/brwsmenu.c:134 msgid "tg Tandem to family/s" msgstr "tg Tryb dwóch rodzin" #: src/liflines/brwsmenu.c:135 msgid "f Browse to fathers" msgstr "f Id¼ do ojców" #: src/liflines/brwsmenu.c:136 msgid "m Browse to mothers" msgstr "m Id¼ do matek" #: src/liflines/brwsmenu.c:137 msgid "tm Tandem to mother/s" msgstr "tm Tryb dwóch matek" #: src/liflines/brwsmenu.c:138 msgid "ts Tandem to spouse/s" msgstr "ts Tryb dwóch ma³¿onków" #: src/liflines/brwsmenu.c:139 msgid "tu Tandem to parents" msgstr "tu Tryb dwojga rodziców" #: src/liflines/brwsmenu.c:140 msgid "< Enlarge menu area" msgstr "< Zwiêksz pole menu" #: src/liflines/brwsmenu.c:141 msgid "> Shrink menu area" msgstr "> Zmniejsz pole menu" #: src/liflines/brwsmenu.c:142 msgid "M> More menu cols" msgstr "M> Wiêcej kolumn menu" #: src/liflines/brwsmenu.c:143 msgid "M< Less menu cols" msgstr "M< Mniej kolumn menu" #: src/liflines/brwsmenu.c:144 msgid "+ Next in db" msgstr "+ Nast. w bazie" #: src/liflines/brwsmenu.c:145 msgid "- Prev in db" msgstr "- Poprz. w bazie" #: src/liflines/brwsmenu.c:146 msgid "d Copy top to bottom" msgstr "d Skopiuj górê na dó³" #: src/liflines/brwsmenu.c:147 msgid "j Merge bottom to top" msgstr "j Po³±cz dó³ z gór±" #: src/liflines/brwsmenu.c:148 src/liflines/listui.c:842 msgid "j Move down list" msgstr "j Przesuñ listê w dó³" #: src/liflines/brwsmenu.c:149 src/liflines/listui.c:843 msgid "k Move up list" msgstr "k Przesuñ listê w górê" #: src/liflines/brwsmenu.c:150 src/liflines/listui.c:844 msgid "e Edit this person" msgstr "e Edytuj tê osobê" #: src/liflines/brwsmenu.c:151 src/liflines/listui.c:845 msgid "i Browse this person" msgstr "i Id¼ do tej osoby" #: src/liflines/brwsmenu.c:152 src/liflines/listui.c:846 msgid "m Mark this person" msgstr "m Zaznacz tê osobê" #: src/liflines/brwsmenu.c:153 msgid "d Delete from list" msgstr "d Usuñ z listy" #: src/liflines/brwsmenu.c:154 src/liflines/listui.c:849 msgid "n Name this list" msgstr "n Nazwij listê" #: src/liflines/brwsmenu.c:155 src/liflines/listui.c:850 msgid "b Browse new persons" msgstr "b Id¼ do nowych osób" #: src/liflines/brwsmenu.c:156 src/liflines/listui.c:851 msgid "a Add to this list" msgstr "a Dodaj do tej listy" #: src/liflines/brwsmenu.c:157 src/liflines/listui.c:852 msgid "x Swap mark/current" msgstr "x Zamieñ zaznaczony/bie¿±cy" #: src/liflines/brwsmenu.c:158 msgid "$s List sources" msgstr "$s Poka¿ ¼ród³a" #: src/liflines/brwsmenu.c:159 msgid "$n List notes" msgstr "$n Poka¿ komentarze" #: src/liflines/brwsmenu.c:160 msgid "$$ List references" msgstr "$$ Poka¿ odno¶niki" #: src/liflines/brwsmenu.c:161 msgid "^b History/back" msgstr "^b Historia/w ty³" #: src/liflines/brwsmenu.c:162 msgid "^f History/fwd" msgstr "^f Historia/w przód" #: src/liflines/brwsmenu.c:163 msgid "^l History list" msgstr "^l Poka¿ historiê" #: src/liflines/brwsmenu.c:164 msgid "^c Clear history" msgstr "^c Skasuj historiê" #: src/liflines/brwsmenu.c:165 msgid "^xb ChngHist/back" msgstr "^xb HistZmian/w ty³" #: src/liflines/brwsmenu.c:166 msgid "^xf ChngHist/fwd" msgstr "^xf HistZmian/w przód" #: src/liflines/brwsmenu.c:167 msgid "^xl ChngHist list" msgstr "^xl Poka¿ HistZmian" #: src/liflines/brwsmenu.c:168 msgid "^xc Clear ChngHist" msgstr "^xc Skasuj HistZmian" #: src/liflines/brwsmenu.c:170 #, no-c-format msgid "%s Add source" msgstr "%s Dodaj ¼ród³o" #: src/liflines/brwsmenu.c:172 #, no-c-format msgid "%e Add event" msgstr "%e Dodaj zdarzenie" #: src/liflines/brwsmenu.c:174 #, no-c-format msgid "%o Add other" msgstr "%o Dodaj inne" #: src/liflines/brwsmenu.c:177 msgid "B Browse new family" msgstr "B Id¼ do nowej rodziny" #: src/liflines/brwsmenu.c:490 msgid "Missing title" msgstr "Brak tytu³u" #: src/liflines/delete.c:85 #, c-format msgid "%d spouse" msgid_plural "%d spouses" msgstr[0] "%d ma³¿onek" msgstr[1] "%d ma³¿onków" msgstr[2] "%d ma³¿onków" #: src/liflines/delete.c:88 #, c-format msgid "%d child" msgid_plural "%d children" msgstr[0] "%d dziecko" msgstr[1] "%d dzieci" msgstr[2] "%d dzieci" #: src/liflines/error.c:63 src/tools/dbverify.c:1504 msgid "Fatal Error" msgstr "B³±d krytyczny" #: src/liflines/error.c:66 msgid "FATAL ERROR" msgstr "B£¡Ð KRYTYCZNY" #: src/liflines/error.c:70 #, c-format msgid " in file <%s> at line %d\n" msgstr " w pliku <%s>, wiersz %d\n" #: src/liflines/error.c:72 src/tools/dbverify.c:1515 msgid "ASSERT failure" msgstr "nieudany ASSERT" #: src/liflines/import.c:169 msgid "This is not a lineage linked GEDCOM file." msgstr "To nie jest plik GEDCOM typu 'lineage linked'." #: src/liflines/import.c:170 msgid "Proceed anyway?" msgstr "Kontynuowaæ mimo wszystko?" #: src/liflines/import.c:186 msgid "No current internal codeset, so no codeset conversion can be done" msgstr "" "Bie¿±cy kod wewnêtrzny niezdefiniowany, nie da siê wiêc wykonaæ konwersji " "kodów" #: src/liflines/import.c:187 msgid "Proceed without codeset conversion?" msgstr "Kontynuowaæ bez konwersji kodów?" #: src/liflines/import.c:204 #, c-format msgid "%d warning during import" msgid_plural "%d warnings during import" msgstr[0] "%d ostrze¿enie przy imporcie" msgstr[1] "%d ostrze¿enia przy imporcie" msgstr[2] "%d ostrze¿eñ przy imporcie" #: src/liflines/import.c:220 #, c-format msgid "Cannot convert codeset (from <%s> to <%s>)" msgstr "Nie mo¿na przekszta³ciæ kodowania (z <%s> na <%s>)" #: src/liflines/import.c:223 msgid "Enter codeset to assume (* for none)" msgstr "Podaj domy¶lne kodowanie (* - brak)" #: src/liflines/import.c:246 #, fuzzy, c-format msgid "Using original keys, %d deleted record will be in the database." msgid_plural "Using original keys, %d deleted records will be in the database." msgstr[0] "" "U¿ywam oryginalnych kluczy, %d usuniêtych rekordów bêdzie w bazie danych." msgstr[1] "" "U¿ywam oryginalnych kluczy, %d usuniêtych rekordów bêdzie w bazie danych." msgstr[2] "" "U¿ywam oryginalnych kluczy, %d usuniêtych rekordów bêdzie w bazie danych." #: src/liflines/lbrowse.c:219 msgid "Tandom browse only compatible with persons or families." msgstr "" #: src/liflines/lines_usage.c:21 #, c-format msgid "%s invokes the Lifelines report execution program without GUI." msgstr "" #: src/liflines/lines_usage.c:23 #, c-format msgid "%s invokes the Lifelines GUI." msgstr "" #: src/liflines/lines_usage.c:26 #, c-format msgid "" "Lifelines is a program to manipulate genealogical information\n" "in lineage-linked GEDCOM format. It has a curses interface and a\n" "built-in interpreter for its own genealogical report language.\n" "\n" "It has its own databases, and records are edited directly in GEDCOM\n" "(with an editor of the user's choice). Records store\n" "information about people, families, sources, events, and\n" "other types of data (such as notes). Lifelines includes a\n" "custom report language and comes with a collection of reports." msgstr "" #: src/liflines/lines_usage.c:36 #, c-format msgid "Usage: %s [OPTIONS] [database]" msgstr "" #: src/liflines/lines_usage.c:38 src/tools/btedit.c:238 #, c-format msgid "Options:" msgstr "" #: src/liflines/lines_usage.c:40 #, c-format msgid "-C[FILE]" msgstr "" #: src/liflines/lines_usage.c:42 #, fuzzy, c-format msgid "Specify configuration file location" msgstr "B³êdny plik konfiguracyjny: za d³ugi wiersz." #: src/liflines/lines_usage.c:44 #, c-format msgid "Finnish option (if compiled to allow Finnish option)" msgstr "" #: src/liflines/lines_usage.c:46 #, c-format msgid "-I[KEY=VALUE]" msgstr "" #: src/liflines/lines_usage.c:48 #, c-format msgid "Specify a user property (e.g. -ILLEDITOR=gvim)" msgstr "" #: src/liflines/lines_usage.c:50 #, c-format msgid "log dynamic memory operation (for debugging)" msgstr "" #: src/liflines/lines_usage.c:52 #, c-format msgid "-c[TYPE][DIRECT,INDIRECT]" msgstr "" #: src/liflines/lines_usage.c:54 #, c-format msgid "" "supply cache values (eg, -ci400,4000f400,4000 sets direct indi\n" "\t\t& fam caches to 400, and indirect indi & fam caches to 4000)" msgstr "" #: src/liflines/lines_usage.c:57 #, c-format msgid "debug mode (disable signal trapping)" msgstr "" #: src/liflines/lines_usage.c:59 #, c-format msgid "force open (for recovery from errors or power failure)" msgstr "" #: src/liflines/lines_usage.c:61 #, c-format msgid "open database with immutable access (for use on read-only media)" msgstr "" #: src/liflines/lines_usage.c:63 #, c-format msgid "always show keys (even if REFN available)" msgstr "" #: src/liflines/lines_usage.c:65 #, c-format msgid "unlock a database (for correct access on read-write media)" msgstr "" #: src/liflines/lines_usage.c:67 #, c-format msgid "lock a database (for use on read-only media)" msgstr "" #: src/liflines/lines_usage.c:69 #, c-format msgid "do not use traditional family rules" msgstr "" #: src/liflines/lines_usage.c:71 #, c-format msgid "Specify program output filename (eg, -o/tmp/mytests)" msgstr "" #: src/liflines/lines_usage.c:73 #, c-format msgid "" "open database with read-only access (prohibiting other\n" "\t\twrite access)" msgstr "" #: src/liflines/lines_usage.c:76 #, c-format msgid "trace function calls in report programs (for debugging)" msgstr "" #: src/liflines/lines_usage.c:78 #, c-format msgid "-u[HEIGHT,WIDTH]" msgstr "" #: src/liflines/lines_usage.c:80 #, c-format msgid "" "specify window size (eg, -u120,34 specifies 120 columns\n" "\t\tby 34 rows)" msgstr "" #: src/liflines/lines_usage.c:83 #, c-format msgid "display this help and exit" msgstr "" #: src/liflines/lines_usage.c:85 #, c-format msgid "open database with writeable access (this is the default)" msgstr "" #: src/liflines/lines_usage.c:89 #, c-format msgid "execute a single lifelines report program directly" msgstr "" #: src/liflines/lines_usage.c:91 #, c-format msgid "" "Use normal ASCII characters for drawing lines, instead of\n" "\t\tspecial VT100 terminal characters" msgstr "" #: src/liflines/lines_usage.c:94 #, c-format msgid "output version information and exit" msgstr "" #: src/liflines/lines_usage.c:96 src/tools/btedit.c:244 #, c-format msgid "Examples:" msgstr "" #: src/liflines/lines_usage.c:99 #, c-format msgid "%s myfamily -x eol" msgstr "" #: src/liflines/lines_usage.c:101 #, c-format msgid "Open the database 'myfamily' with Lifelines" msgstr "" #: src/liflines/lines_usage.c:103 #, c-format msgid "and run the eol.ll report" msgstr "" #: src/liflines/lines_usage.c:105 #, c-format msgid "%s -f myfamily -x eol" msgstr "" #: src/liflines/lines_usage.c:107 #, c-format msgid "Unlock database 'myfamily', after a power failure left the" msgstr "" #: src/liflines/lines_usage.c:109 #, c-format msgid "database locked and run 'eol.ll' report" msgstr "" #: src/liflines/lines_usage.c:112 #, fuzzy, c-format msgid "%s myfamily" msgstr "Pusta rodzina" #: src/liflines/lines_usage.c:114 #, c-format msgid "Open database 'myfamily' with Lifelines" msgstr "" #: src/liflines/lines_usage.c:116 #, fuzzy, c-format msgid "%s -f myfamily" msgstr "Pusta rodzina" #: src/liflines/lines_usage.c:118 #, c-format msgid "" "Unlock database 'myfamily', after a power failure left\n" "\t\tthe database locked" msgstr "" #: src/liflines/lines_usage.c:122 #, c-format msgid "REPORTING BUGS" msgstr "" #: src/liflines/lines_usage.c:124 src/tools/btedit.c:250 #, c-format msgid "Report bugs to lifelines.sourceforge.net" msgstr "" #: src/liflines/lines_usage.c:126 #, c-format msgid "COPYRIGHT" msgstr "" #: src/liflines/lines_usage.c:131 #, c-format msgid "SEE ALSO" msgstr "" #: src/liflines/listui.c:155 src/liflines/listui.c:252 msgid "Commands: j Move down k Move up i Select q Quit" msgstr "Polecenia: j Do do³u k Do góry i Wybierz q Wyjd¼" #: src/liflines/listui.c:157 msgid "Commands: j Move down k Move up q Quit" msgstr "Polecenia: j Do do³u k Do góry q Wyjd¼" #: src/liflines/listui.c:249 msgid "Commands: j Move down k Move up d Delete i Select q Quit" msgstr "Polecenia: j W dó³ k Do góry d Usuñ i Wybierz q Wyj¶cie" #: src/liflines/listui.c:431 msgid "--- CURRENT SELECTION ---" msgstr "--- AKTUALNY WYBÓR ---" #: src/liflines/listui.c:434 src/liflines/listui.c:597 msgid "--- LIST ---" msgstr "--- LISTA ---" #: src/liflines/listui.c:628 msgid "-- CURRENT SELECTION --" msgstr "-- AKTUALNY WYBÓR --" #: src/liflines/listui.c:840 msgid "Choose an operation:" msgstr "Wybierz operacjê:" #: src/liflines/listui.c:847 msgid "r Remove from list" msgstr "r Usuñ z listy" #: src/liflines/listui.c:848 msgid "t Enter tandem mode" msgstr "t Wejd¼ w tryb podwójny" #: src/liflines/loadsave.c:94 msgid "Person" msgid_plural "Persons" msgstr[0] "Osoba" msgstr[1] "Osoby" msgstr[2] "Osób" #: src/liflines/loadsave.c:98 msgid "Family" msgid_plural "Families" msgstr[0] "Rodzina" msgstr[1] "Rodziny" msgstr[2] "Rodzin" #: src/liflines/loadsave.c:102 msgid "Source" msgid_plural "Sources" msgstr[0] "¬ród³o" msgstr[1] "¬ród³a" msgstr[2] "¬róde³" #: src/liflines/loadsave.c:106 msgid "Event" msgid_plural "Events" msgstr[0] "Zdarzenie" msgstr[1] "Zdarzenia" msgstr[2] "Zdarzeñ" #: src/liflines/loadsave.c:110 msgid "Other" msgid_plural "Others" msgstr[0] "Inne" msgstr[1] "Inne" msgstr[2] "Innych" #: src/liflines/loadsave.c:160 msgid "Checking GEDCOM file for errors.\n" msgstr "Sprawdzanie czy w pliku GEDCOM nie ma b³êdów.\n" #: src/liflines/loadsave.c:163 msgid "Error" msgid_plural "Errors" msgstr[0] "b³±d" msgstr[1] "b³êdy" msgstr[2] "b³êdów" #: src/liflines/loadsave.c:169 msgid "Warning" msgid_plural "Warnings" msgstr[0] "ostrze¿enie" msgstr[1] "ostrze¿enia" msgstr[2] "ostrze¿eñ" #: src/liflines/loadsave.c:184 msgid "The database is read-only; loading has been canceled." msgstr "Baza danych tylko do odczytu; wczytywanie zaniechane." #: src/liflines/loadsave.c:190 msgid "Adding unused keys as deleted keys..." msgstr "Dodano nieu¿ywane klucze jako klucze usuniête..." #. TRANSLATORS: how long Import ran, and how much of that was UI delay #: src/liflines/loadsave.c:255 #, c-format msgid "Import time %s (ui %s)\n" msgstr "Czas importu %s (czas interfejsu %s)\n" #: src/liflines/loadsave.c:282 msgid "The database was not saved." msgstr "Baza danych nie zapisana." #: src/liflines/main.c:385 msgid "Warning: database codeset unspecified" msgstr "Uwaga: nieokre¶lone kodowanie w bazie" #: src/liflines/main.c:387 msgid "Warning: not all conversions available" msgstr "Uwaga: nie wszystkie konwersje s± dostêpne" #: src/liflines/menuset.c:155 #, c-format msgid "Menu (%s) choice sequence too long: %s" msgstr "Menu (%s) sekwencja wyboru za d³uga: %s" #: src/liflines/menuset.c:159 #, c-format msgid "Menu (%s) item lacked choice sequence: %s" msgstr "Menu (%s) element nie ma sekwencji wyboru: %s" #: src/liflines/menuset.c:242 src/liflines/menuset.c:254 #, c-format msgid "In menu: %s" msgstr "W menu: %s" #: src/liflines/menuset.c:244 #, c-format msgid "Duplicate hotkey for item: %s" msgstr "Zduplikowany klawisz dla elementu: %s" #: src/liflines/menuset.c:247 #, c-format msgid "Clash with longer hotkey in item: %s" msgstr "Konflikt z d³u¿szym klawiszem w elemencie: %s" #: src/liflines/menuset.c:255 #, c-format msgid "Clash with shorter hotkey in item: %s" msgstr "Konflikt z krótszym klawiszem w elemencie: %s" #: src/liflines/merge.c:772 #, c-format msgid "Bad spouse tag: %s" msgstr "" #: src/liflines/merge.c:800 src/liflines/merge.c:919 #, c-format msgid "Mismatched lineage spouse links between %s and %s: %ld and %ld" msgstr "" #: src/liflines/merge.c:816 src/liflines/merge.c:935 #, c-format msgid "Bad child tag: %s" msgstr "" #: src/liflines/merge.c:844 src/liflines/merge.c:963 #, c-format msgid "Mismatched lineage child links between %s and %s: %ld and %ld" msgstr "" #: src/liflines/merge.c:882 src/liflines/merge.c:891 #, c-format msgid "Bad HUSB tag: %s" msgstr "" #: src/liflines/miscutls.c:51 msgid "Whose key value do you want?" msgstr "Któr± warto¶æ klawisza chcesz?" #: src/liflines/miscutls.c:67 msgid "Please enter person's internal key value." msgstr "Podaj warto¶æ wewnêtrzego klucza osoby." #: src/liflines/miscutls.c:68 msgid "enter key:" msgstr "podaj klucz:" #: src/liflines/miscutls.c:78 src/liflines/miscutls.c:82 #: src/liflines/miscutls.c:87 #, c-format msgid "No one in database has key value %s." msgstr "Nikt w bazie danych nie ma kodu %s." #: src/liflines/scan.c:100 msgid "Enter pattern to match against single surname or given name." msgstr "Podaj wzorzec dopasowania do nazwiska lub imienia." #: src/liflines/scan.c:112 msgid "Enter pattern to match against full name." msgstr "Podaj wzorzec do dopasowania do pe³nego nazwiska." #: src/liflines/scan.c:128 src/liflines/scan.c:178 src/liflines/scan.c:201 msgid "pattern: " msgstr "wzorzec:" #: src/liflines/scan.c:151 src/liflines/scan.c:165 #, fuzzy msgid "Enter pattern to match against author." msgstr "Podaj wzorzec do dopasoania do refn." #: src/liflines/screen.c:317 #, c-format msgid "initscr failed" msgstr "" #: src/liflines/screen.c:334 #, fuzzy, c-format msgid "" "The requested window size (%ld,%ld) is too large for your terminal (%d,%d).\n" msgstr "" "¯±dana wielko¶æ okna (%d,%d) jest za du¿a dla twojego terminala (%d,%d).\n" #: src/liflines/screen.c:342 #, fuzzy, c-format msgid "" "The requested window size (%ld,%ld) is too small for LifeLines (%d,%d).\n" msgstr "¯±dana wielko¶æ okna (%d,%d) jest za ma³a dla LifeLines (%d,%d).\n" #: src/liflines/screen.c:706 #, fuzzy msgid "Search results" msgstr "Przejrzyj wyniki:" #: src/liflines/screen.c:813 #, c-format msgid "(pg %d/%d)" msgstr "(str %d/%d)" #: src/liflines/screen.c:1431 msgid "No conversion" msgstr "Brak konwersji" #: src/liflines/screen.c:1517 msgid "Internal codeset" msgstr "Kodowanie wewnêtrzne" #: src/liflines/screen.c:1520 #, fuzzy msgid "Internal UTF-8: Yes" msgstr "Kodowanie wewnêtrzne" #: src/liflines/screen.c:1522 #, fuzzy msgid "Internal UTF-8: No" msgstr "Wewnêtrzne->Edytor" #: src/liflines/screen.c:1526 msgid "Locales are enabled." msgstr "Locale w³±czone." #: src/liflines/screen.c:1528 msgid "Locales are disabled." msgstr "Locale wy³±czone." #: src/liflines/screen.c:1531 msgid "NLS (National Language Support) is compiled in." msgstr "NLS (National Language Support) w³±czone." #: src/liflines/screen.c:1537 msgid "NLS (National Language Support) is not compiled in." msgstr "NLS (National Language Support) wy³±czone." #: src/liflines/screen.c:1550 msgid "iconv (codeset conversion) is compiled in." msgstr "iconv (konwersja kodowania) w³±czona." #: src/liflines/screen.c:1552 msgid "iconv (codeset conversion) is not compiled in." msgstr "iconv (konwersja kodowania) wy³±czona." #: src/liflines/screen.c:1554 #, c-format msgid "Startup collate locale: %s" msgstr "Pocz±tkowa lokalizacja porównañ: %s" #: src/liflines/screen.c:1557 #, c-format msgid "Startup messages locale: %s" msgstr "Pocz±tkowa lokalizacja komunikatów: %s" #: src/liflines/screen.c:1560 #, c-format msgid "Current collate locale: %s" msgstr "Bie¿±ca lokalizacja porównañ: %s" #: src/liflines/screen.c:1563 #, c-format msgid "Current messages locale: %s" msgstr "Bie¿±ca lokalizacja komunikatów: %s" #: src/liflines/screen.c:1566 #, c-format msgid "Collation routine: %s" msgstr "Procedura porównania: %s" #: src/liflines/screen.c:1570 #, c-format msgid "GUI codeset: %s" msgstr "Kodowanie interfejsu u¿ytkownika (GUI): %s" #: src/liflines/screen.c:1573 #, c-format msgid "GUI output codeset: %s" msgstr "Kodowanie wyj¶ciowe interfejsu u¿ytkownika (GUI): %s" #: src/liflines/screen.c:1575 #, c-format msgid "GUI input codeset: %s" msgstr "Kodowanie wej¶ciowe interfejsu u¿ytkownika (GUI): %s" #: src/liflines/screen.c:1580 #, c-format msgid "editor codeset: %s" msgstr "kodowanie edytora: %s" #: src/liflines/screen.c:1583 #, c-format msgid "editor output codeset: %s" msgstr "kodowanie wyj¶ciowe edytora: %s" #: src/liflines/screen.c:1585 #, c-format msgid "editor input codeset: %s" msgstr "kodowanie wej¶ciowe edytora: %s" #: src/liflines/screen.c:1590 #, c-format msgid "report codeset: %s" msgstr "kodowanie raportów: %s" #: src/liflines/screen.c:1593 #, c-format msgid "report output codeset: %s" msgstr "kodowanie wyj¶ciowe raportów: %s" #: src/liflines/screen.c:1595 #, c-format msgid "report input codeset: %s" msgstr "kodowanie wej¶ciowe raportów: %s" #: src/liflines/screen.c:1600 #, c-format msgid "GEDCOM codeset: %s" msgstr "kodowanie GEDCOM: %s" #: src/liflines/screen.c:1603 #, c-format msgid "gedcom output codeset: %s" msgstr "kodowanie wyj¶ciowe GEDCOM: %s" #: src/liflines/screen.c:1605 #, c-format msgid "gedcom input codeset: %s" msgstr "kodowanie wej¶ciowe GEDCOM: %s" #: src/liflines/screen.c:1613 msgid "UTF-8 charprops loaded" msgstr "" #: src/liflines/screen.c:1615 msgid "UTF-8 charprops not loaded" msgstr "" #: src/liflines/screen.c:1619 msgid "Codeset information" msgstr "Informacja o kodowaniu" #: src/liflines/screen.c:1636 #, c-format msgid "gettext dll: %s" msgstr "gettext dll: %s" #: src/liflines/screen.c:1640 #, c-format msgid "gettext dll version: %s" msgstr "gettext dll wersja: %s" #: src/liflines/screen.c:1645 msgid "gettext dll had no version" msgstr "gettext dll nie ma wersji" #: src/liflines/screen.c:1650 msgid "no gettext dll found" msgstr "nie znaleziono gettext dll" #: src/liflines/screen.c:1659 #, c-format msgid "iconv dll: %s" msgstr "iconv dll: %s" #: src/liflines/screen.c:1663 #, c-format msgid "iconv dll version: %s" msgstr "iconv dll wesja: %s" #: src/liflines/screen.c:1668 msgid "iconv dll had no version" msgstr "iconv dll nie ma wersji" #: src/liflines/screen.c:1673 msgid "no iconv dll found" msgstr "nie znalezionoe dll iconv" #: src/liflines/screen.c:1931 msgid "Impermissible to change codeset in a populated database" msgstr "Nie mo¿na zmieniaæ kodowania w niepustej bazie danych" #: src/liflines/screen.c:2032 msgid "LifeLines -- Main Menu" msgstr "LifeLines -- Menu G³ówne" #: src/liflines/searchui.c:133 #, c-format msgid "v Review visit history (%d record)" msgid_plural "v Review visit history (%d records)" msgstr[0] "v Zobacz historiê wizyt (%d rekord)" msgstr[1] "v Zobacz historiê wizyt (%d rekordy)" msgstr[2] "v Zobacz historiê wizyt (%d rekordów)" #: src/liflines/searchui.c:137 msgid "(visit history is empty)" msgstr "(historia odwiedzin jest pusta)" #: src/liflines/searchui.c:143 #, c-format msgid "c Review change history (%d record)" msgid_plural "c Review change history (%d records)" msgstr[0] "c Zobacz historiê zmian (%d rekord)" msgstr[1] "c Zobacz historiê zmian (%d rekordy)" msgstr[2] "c Zobacz historiê zmian (%d rekordów)" #: src/liflines/searchui.c:147 msgid "(change history is empty)" msgstr "(historia zmian pusta)" #: src/liflines/searchui.c:151 msgid "f Full database scan" msgstr "f Przeszukiwanie ca³ej bazy" #: src/liflines/searchui.c:220 msgid "What scan type?" msgstr "Jaki sposób przeszukiwania?" #: src/liflines/searchui.c:223 msgid "f Full name scan" msgstr "f Przeszukiwanie po ca³ym nazwisku (z imionami)" #: src/liflines/searchui.c:224 msgid "n Name fragment (whitespace-delimited) scan" msgstr "n Przeszukiwanie po nazwisku lub imionach" #: src/liflines/searchui.c:225 msgid "r Refn scan" msgstr "r Przeszukiwanie refn" #: src/liflines/searchui.c:226 #, fuzzy msgid "s Source scan" msgstr "r Przeszukiwanie refn" #: src/liflines/searchui.c:290 msgid "Scan on what source field?" msgstr "" #: src/liflines/searchui.c:293 msgid "a Scan by author" msgstr "" #: src/liflines/searchui.c:294 msgid "t Scan by title" msgstr "" #: src/liflines/selectdb.c:95 msgid "Choose database to open" msgstr "Wybierz bazê danych do otwarcia" #: src/liflines/selectdb.c:103 msgid "No databases found in database path" msgstr "Nie znaleziono baz danych w podanej ¶cie¿ce" #: src/liflines/show.c:123 msgid "born" msgstr "ur." #: src/liflines/show.c:124 src/liflines/show.c:125 msgid "bapt" msgstr "chrz." #: src/liflines/show.c:126 msgid "barm" msgstr "barm" #: src/liflines/show.c:127 msgid "basm" msgstr "basm" #: src/liflines/show.c:128 msgid "bles" msgstr "bles" #: src/liflines/show.c:129 msgid "adop" msgstr "adop" #: src/liflines/show.c:130 msgid "resi" msgstr "zam." #: src/liflines/show.c:134 msgid "died" msgstr "zm." #: src/liflines/show.c:135 msgid "buri" msgstr "pog." #: src/liflines/show.c:136 msgid "crem" msgstr "krem." #: src/liflines/show.c:1009 #, c-format msgid "Cached: I:%s; F:%s" msgstr "Zbuforowane: O:%s; R:%s" #: src/liflines/valgdcom.c:92 #, c-format msgid "Record %s is referred to but not defined." msgstr "Odwo³anie do niezdefiniowanego rekordu %s." #: src/liflines/valgdcom.c:93 #, fuzzy, c-format msgid "Line %d: Reference to undefined record %s" msgstr "Wiersz %d: Definiowane zdarzenie nie ma klucza." #: src/liflines/valgdcom.c:94 #, fuzzy, c-format msgid "Line %d: Tag %s found in unexpected record: %s %s." msgstr "Nie uda³o siê poprawiæ brakuj±cego nieusuniêtego rekord %s" #: src/liflines/valgdcom.c:190 #, fuzzy, c-format msgid "Line %d: Family has no members (%s %s)." msgstr "Wiersz %d: Rodzina nie ma cz³onków." #: src/liflines/valgdcom.c:390 #, c-format msgid "Line %d: The source defined here has no key." msgstr "Wiersz %d: ¬ród³o zdefiniowane, ale nie ma klucza." #: src/liflines/valgdcom.c:404 #, c-format msgid "Line %d: Source %s has an incorrect key." msgstr "Wiersz %d: ¬ród³o %s ma b³êdny klucz." #: src/liflines/valgdcom.c:411 #, c-format msgid "Lines %d and %d: Source %s is multiply defined." msgstr "Wiersze %d i %d: ¬ród³o %s jest zdefiniowane wielokrotnie." #: src/liflines/valgdcom.c:434 #, c-format msgid "Line %d: The event defined here has no key." msgstr "Wiersz %d: Definiowane zdarzenie nie ma klucza." #: src/liflines/valgdcom.c:447 #, c-format msgid "Line %d: Event %s has an incorrect key." msgstr "Wiersz %d: Zdarzenie %s ma b³êdny klucz." #: src/liflines/valgdcom.c:454 #, c-format msgid "Lines %d and %d: Event %s is multiply defined." msgstr "Wiersze %d i %d: Zdarzenie %s jest zdefiniowane wielokrotnie." #: src/liflines/valgdcom.c:477 #, c-format msgid "Line %d: The record defined here has no key." msgstr "Wiersz %d: Definiowany rekord nie ma klucza." #: src/liflines/valgdcom.c:490 #, c-format msgid "Line %d: Record %s has an incorrect key." msgstr "Wiersz %d: Rekord %s ma b³êdny klucz." #: src/liflines/valgdcom.c:497 #, c-format msgid "Lines %d and %d: Record %s is multiply defined." msgstr "Wiersze %d i %d: Rekord %s jest zdefiniowany wielokrotnie." #: src/liflines/valgdcom.c:539 #, fuzzy, c-format msgid "Line %d: This %s line is missing a value field (%s %s)." msgstr "Wiersz %d: W wierszu %s brak pola z warto¶ci±." #: src/liflines/valgdcom.c:590 #, fuzzy, c-format msgid "Line %d: Bad NAME syntax (%s %s)." msgstr "Wiersz %d: B³±d sk³adniowy w nazwisku." #: src/liflines/valgdcom.c:820 #, c-format msgid "Line %d: Person %s has multiple father links." msgstr "Wiersz %d: Osoba %s ma wiele odno¶ników do ojca." #: src/liflines/valgdcom.c:824 #, c-format msgid "Line %d: Person %s has multiple mother links." msgstr "Wiersz %d: Osoba %s ma wiele odno¶ników do matki." #: src/liflines/valgdcom.c:836 #, c-format msgid "Line %d: Person %s is both male and female." msgstr "Wiersz %d: Osoba %s jest jednocze¶nie kobiet± i mê¿czyzn±." #: src/liflines/valgdcom.c:840 #, c-format msgid "Line %d: Person %s is male but must be female." msgstr "Wiersz %d: Osoba %s jest mê¿czyzn± a musi byæ kobiet±." #: src/liflines/valgdcom.c:844 #, c-format msgid "Line %d: Person %s is female but must be male." msgstr "Wiersz %d: Osoba %s jest kobiet± a musi byæ mê¿czyzn±." #: src/liflines/valgdcom.c:848 #, c-format msgid "Line %d: Person %s is implied to be both male and female." msgstr "" "Wiersz %d: Osoba %s domy¶lnie powinna byæ jednocze¶nie kobiet± i mê¿czyzn±." #: src/liflines/valgdcom.c:860 #, c-format msgid "Line %d: Family %s has multiple husband links." msgstr "Wiersz %d: Rodzina %s ma wiele odno¶ników do mê¿a." #: src/liflines/valgdcom.c:864 #, c-format msgid "Line %d: Family %s has multiple wife links." msgstr "Wiersz %d: Rodzina %s ma wiele odno¶ników do ¿ony." #: src/liflines/valgdcom.c:920 msgid "error" msgstr "b³±d" #: src/liflines/valgdcom.c:928 #, c-format msgid "%6d Error" msgid_plural "%6d Errors" msgstr[0] "%6d b³±d" msgstr[1] "%6d b³êdy" msgstr[2] "%6d b³êdów" #: src/liflines/valgdcom.c:930 src/liflines/valgdcom.c:958 #, c-format msgid " (see log file <%s>)" msgstr " (patrz plik rejestru <%s>)" #: src/liflines/valgdcom.c:932 src/liflines/valgdcom.c:960 msgid " (no log file)" msgstr " (brak pliku rejestru)" #: src/liflines/valgdcom.c:948 msgid "warning" msgstr "ostrze¿enie" #: src/liflines/valgdcom.c:956 #, c-format msgid "%6d Warning" msgid_plural "%6d Warnings" msgstr[0] "%6d ostrze¿enie" msgstr[1] "%6d ostrze¿enia" msgstr[2] "%6d ostrze¿eñ" #: src/liflines/valgdcom.c:1067 #, c-format msgid "Processed %d lines without finding end of HEAD" msgstr "Przetworzono %d wierszy bez znalezienia koñca pola HEAD" #: src/liflines/valgdcom.c:1072 #, c-format msgid "End of file at line %d" msgstr "Koniec pliku w wierszu %d" #: src/liflines/valgdcom.c:1076 #, c-format msgid "Error at line %d: %s" msgstr "B³±d w wierszu %d: %s" #: src/liflines/valgdcom.c:1080 #, c-format msgid "Bad level at line %d" msgstr "B³±d poziomu w wierszu %d" #: src/liflines/valgdcom.c:1086 #, c-format msgid "Duplicate HEAD line at line %d" msgstr "Zduplikowane pole HEAD w wierszu %d" #: src/liflines/valgdcom.c:1092 #, c-format msgid "Missing HEAD line at line %d" msgstr "Brak pola HEAD w wierszu %d" #: src/stdlib/errlog.c:61 #, c-format msgid " in file <%s> at line %d\n" msgstr " w pliku <%s>, wiersz %d\n" #: src/stdlib/errlog.c:63 msgid "Current database" msgstr "Bie¿±ca baza danych" #: src/tools/btedit.c:108 #, c-format msgid "btedit requires 2 arguments (btree and key)." msgstr "" #: src/tools/btedit.c:110 #, c-format msgid "See `btedit --help' for more information." msgstr "" #: src/tools/btedit.c:117 #, fuzzy, c-format msgid "Failed to open btree: %s." msgstr "Nie mo¿na otworzyæ pliku %s." #: src/tools/btedit.c:124 #, fuzzy, c-format msgid "There is no record with key: %s" msgstr "Nie ma rekordu z takim kluczem lub odsy³aczem." #: src/tools/btedit.c:126 #, fuzzy, c-format msgid "Error accessing record: %s" msgstr "B³±d dostêpu do danych" #: src/tools/btedit.c:135 #, c-format msgid "Editor or system call failed." msgstr "" #: src/tools/btedit.c:137 #, fuzzy, c-format msgid "Database was not be modified." msgstr "Baza danych nie zapisana." #: src/tools/btedit.c:143 #, fuzzy, c-format msgid "Readonly database can not be modified." msgstr "Baza danych nie zapisana." #: src/tools/btedit.c:150 #, c-format msgid "Error writing file 'btedit.tmp'." msgstr "" #: src/tools/btedit.c:156 #, c-format msgid "Record %s modified." msgstr "" #: src/tools/btedit.c:226 #, fuzzy msgid "\"\\My Documents\\LifeLines\\Databases\\MyFamily\"" msgstr "\\My Documents\\LifeLines\\Databases\\MyFamily" #: src/tools/btedit.c:228 src/tools/dbverify.c:232 msgid "/home/users/myname/lifelines/databases/myfamily" msgstr "/home/users/myname/lifelines/databases/myfamily" #: src/tools/btedit.c:231 #, c-format msgid "" "lifelines `btedit' edits raw binary btree blocks\n" "in lifelines database files. Do NOT use this unless\n" "you know what you are doing and you have backed up\n" "your database." msgstr "" #: src/tools/btedit.c:236 #, c-format msgid "Usage btedit [database] [rkey]" msgstr "" #: src/tools/btedit.c:240 #, c-format msgid "\t--help\tdisplay this help and exit" msgstr "" #: src/tools/btedit.c:242 #, c-format msgid "\t--version\toutput version information and exit" msgstr "" #: src/tools/btedit.c:246 #, c-format msgid "\tbtedit %s I34" msgstr "" #: src/tools/btedit.c:248 #, c-format msgid "edit raw btree block for person I34" msgstr "" #: src/tools/dbverify.c:175 msgid "Orphan names" msgstr "Osierocone nazwiska" #: src/tools/dbverify.c:176 msgid "Ghost names" msgstr "Nazwiska - duchy" #: src/tools/dbverify.c:177 src/tools/dbverify.c:178 msgid "Duplicate names" msgstr "Zduplikowane nazwiska" #: src/tools/dbverify.c:179 msgid "Non-indi names" msgstr "Nazwiska nie-indi" #: src/tools/dbverify.c:180 msgid "Duplicate individuals" msgstr "Zduplikowane osoby" #: src/tools/dbverify.c:181 msgid "Duplicate families" msgstr "Zduplikowane rodziny" #: src/tools/dbverify.c:182 msgid "Duplicate sources" msgstr "Zduplikowane ¼ród³a" #: src/tools/dbverify.c:183 msgid "Duplicate events" msgstr "Zduplikowane zdarzenia" #: src/tools/dbverify.c:184 msgid "Duplicate others" msgstr "Zduplikowane inne" #: src/tools/dbverify.c:185 msgid "Missing records (from deleteset)" msgstr "Brakuj±ce rekordy (z deleteset)" #: src/tools/dbverify.c:186 msgid "Deleted records" msgstr "Usuniête rekordy" #: src/tools/dbverify.c:187 msgid "Bad name" msgstr "B³êdna nazwa" #: src/tools/dbverify.c:188 msgid "Bad family reference" msgstr "B³êdny odno¶nik do rodziny" #: src/tools/dbverify.c:189 msgid "Missing child" msgstr "Brakuj±ce dziecko" #: src/tools/dbverify.c:190 msgid "Missing spouse" msgstr "Brakuj±cy ma³¿onek" #: src/tools/dbverify.c:191 msgid "Bad HUSB reference" msgstr "B³êdny odno¶nik HUSB" #: src/tools/dbverify.c:192 msgid "Bad WIFE reference" msgstr "B³êdny odno¶nik WIFE" #: src/tools/dbverify.c:193 msgid "Bad CHIL reference" msgstr "B³êdny odno¶nik CHIL" #: src/tools/dbverify.c:194 msgid "Improper HUSB" msgstr "Niew³a¶ciwy HUSB" #: src/tools/dbverify.c:195 msgid "Improper WIFE" msgstr "Niew³a¶ciwy WIFE" #: src/tools/dbverify.c:196 msgid "Improper child" msgstr "Niew³a¶ciwy CHIL" #: src/tools/dbverify.c:197 msgid "Empty family" msgstr "Pusta rodzina" #: src/tools/dbverify.c:198 msgid "Single person family" msgstr "Rodzina jednoosobowa" #: src/tools/dbverify.c:199 msgid "Bad pointer" msgstr "B³êdny wska¼nik" #: src/tools/dbverify.c:200 msgid "Missing data records" msgstr "Brakuj±ce rekordy danych" #: src/tools/dbverify.c:230 msgid "\\My Documents\\LifeLines\\Databases\\MyFamily" msgstr "\\My Documents\\LifeLines\\Databases\\MyFamily" #: src/tools/dbverify.c:236 #, c-format msgid "usage: dbverify -(flags) \n" msgstr "u¿ycie: dbverify -(opcje) \n" #: src/tools/dbverify.c:237 #, c-format msgid "flags:\n" msgstr "opcje:\n" #: src/tools/dbverify.c:238 #, c-format msgid "\t-a = Perform all checks (does not include fixes)\n" msgstr "\t-a = Wykonaj wszystkie testy (bez poprawek)\n" #: src/tools/dbverify.c:239 #, c-format msgid "\t-g = Check for ghosts (names/refns)\n" msgstr "\t-g = Znajd¼ duchy (nazwiska/refn-y)\n" #: src/tools/dbverify.c:240 #, c-format msgid "\t-G = Check for & fix ghosts (names/refns)\n" msgstr "\t-G = Znajd¼ i popraw duchy (nazwiska/refn-y)\n" #: src/tools/dbverify.c:241 #, c-format msgid "\t-i = Check individuals\n" msgstr "\t-i = Sprawd¼ osoby\n" #: src/tools/dbverify.c:242 #, c-format msgid "\t-f = Check families\n" msgstr "\t-f = Sprawd¼ rodziny\n" #: src/tools/dbverify.c:243 #, c-format msgid "\t-F = Alter any bad family lineage pointers (to _badptr)\n" msgstr "\t-F = Popraw wszystkie b³êdne odsy³acze do rodzin (na _badptr)\n" #: src/tools/dbverify.c:244 #, c-format msgid "\t-h = Display help text (this text)\n" msgstr "" #: src/tools/dbverify.c:245 #, c-format msgid "\t-s = Check sours\n" msgstr "\t-s = sprawd¼ ¼ród³a\n" #: src/tools/dbverify.c:246 #, c-format msgid "\t-e = Check events\n" msgstr "\t-e = Sprawd¼ wydarzenia\n" #: src/tools/dbverify.c:247 #, c-format msgid "\t-x = Check others\n" msgstr "\t-x = Sprawd¼ inne\n" #: src/tools/dbverify.c:248 #, c-format msgid "\t-l = Check database structure\n" msgstr "\t-l = Sprawd¼ strukturê bazy danych\n" #: src/tools/dbverify.c:249 #, c-format msgid "\t-m = Check for records missing data entries\n" msgstr "\t-m = Znajd¼ rekordy z brakuj±cymi pozycjami danych\n" #: src/tools/dbverify.c:250 #, c-format msgid "\t-M = Fix records missing data entries\n" msgstr "\t-M = Popraw rekordy z brakuj±cymi pozycjami danych\n" #: src/tools/dbverify.c:251 #, c-format msgid "\t-D = Fix bad delete entries\n" msgstr "\t-D = Popraw nieprawid³owo usuniête pozycje\n" #: src/tools/dbverify.c:252 #, c-format msgid "\t-n = Noisy (echo every record processed)\n" msgstr "\t-n = Ha³a¶liwie (wy¶wietlaj przetwarzane rekordy)\n" #: src/tools/dbverify.c:253 #, c-format msgid "example: dbverify -ifsex \"%s\"\n" msgstr "przyk³ad: dbverify -ifsex \"%s\"\n" #: src/tools/dbverify.c:386 #, c-format msgid "Non-indi name, key=%s, name=%s" msgstr "Nazwisko nie-indi, klucz=%s, nazwisko=%s" #: src/tools/dbverify.c:403 #, c-format msgid "Orphaned name: %s" msgstr "Osierocone nazwisko: %s" #: src/tools/dbverify.c:417 #, c-format msgid "Ghost name: %s -> %s" msgstr "Nazwisko duch: %s -> %s" #: src/tools/dbverify.c:449 #, c-format msgid "Orphaned refn: %s" msgstr "Osierocone refn: %s" #: src/tools/dbverify.c:489 #, c-format msgid "Duplicate name for %s (%s)" msgstr "Zduplikowane nazwisko %s (%s)" #: src/tools/dbverify.c:524 #, c-format msgid "Duplicate refn for %s (%s)" msgstr "Zduplikowane refn %s (%s)" #: src/tools/dbverify.c:637 #, c-format msgid "Duplicate individual for %s" msgstr "Zduplikowana osoba %s" #: src/tools/dbverify.c:679 #, c-format msgid "Bad name for individual %s: %s" msgstr "Z³e nazwisko osoby %s: %s" #: src/tools/dbverify.c:697 src/tools/dbverify.c:721 #, c-format msgid "Bad family reference (%s) individual %s" msgstr "B³êdny odno¶nik do rodziny (%s) osoba %s" #: src/tools/dbverify.c:703 #, c-format msgid "Missing child (%s) in family (%s)" msgstr "Brak dziecka (%s) w rodzinie (%s)" #: src/tools/dbverify.c:707 #, c-format msgid "Fixed missing child (%s) in family (%s)" msgstr "Poprawiono brakuj±ce dziecko (%s) w rodzinie (%s)" #: src/tools/dbverify.c:727 #, c-format msgid "Missing spouse (%s) in family (%s)" msgstr "Brak ma³¿onka (%s) w rodzinie (%s)" #: src/tools/dbverify.c:731 #, c-format msgid "Fixed missing spouse (%s) in family (%s)" msgstr "Poprawiono brakuj±cego ma³¿onka (%s) w rodzinie (%s)" #: src/tools/dbverify.c:765 #, c-format msgid "Duplicate family for %s" msgstr "Zduplikowana rodzina %s" #: src/tools/dbverify.c:816 #, c-format msgid "Bad HUSB reference (%s) in family %s" msgstr "B³êdny odno¶nik HUSB (%s) w rodzinie %s" #: src/tools/dbverify.c:822 #, c-format msgid "Fixed Bad HUSB reference (%s) in family %s" msgstr "Poprawiono b³êdny odno¶nik HUSB (%s) w rodzinie %s" #: src/tools/dbverify.c:831 #, c-format msgid "Improper HUSB (%s) in family (%s)" msgstr "Niew³a¶ciwy HUSB (%s) w rodzinie %s" #: src/tools/dbverify.c:844 #, c-format msgid "Bad wife reference (%s) in family %s" msgstr "B³êdny odno¶nik WIFE (%s) w rodzinie %s" #: src/tools/dbverify.c:850 #, c-format msgid "Fixed Bad wife reference (%s) in family %s" msgstr "Poprawiono b³êdny odno¶nik WIFE (%s) w rodzinie %s" #: src/tools/dbverify.c:859 #, c-format msgid "Improper wife (%s) in family (%s)" msgstr "Niew³a¶ciwa WIFE (%s) w rodzinie %s" #: src/tools/dbverify.c:872 #, c-format msgid "Bad child reference (%s) in family %s" msgstr "B³êdny odno¶nik dziecka (%s) w rodzinie %s" #: src/tools/dbverify.c:878 #, c-format msgid "Fixed bad child reference (%s) in family %s" msgstr "Poprawiono b³êdny odno¶nik dziecka (%s) w rodzinie %s" #: src/tools/dbverify.c:887 #, fuzzy, c-format msgid "Improper child: Child (%s) without FAMC reference to family (%s)" msgstr "Niew³a¶ciwa dziecko (%s) w rodzinie %s" #: src/tools/dbverify.c:895 #, c-format msgid "Empty family (%s)" msgstr "Pusta rodzina (%s)" #: src/tools/dbverify.c:897 #, c-format msgid "Single person family (%s)" msgstr "Rodzina jednoosobowa (%s)" #: src/tools/dbverify.c:923 #, c-format msgid "Duplicate source for %s" msgstr "Zduplikowane ¼ród³o dla %s" #: src/tools/dbverify.c:939 #, c-format msgid "Duplicate event for %s" msgstr "Zduplikowane zdarzenie dla %s" #: src/tools/dbverify.c:955 #, c-format msgid "Duplicate record for %s" msgstr "Zduplikowany rekord dla %s" #: src/tools/dbverify.c:1026 #, c-format msgid "Bad pointer (in %s): %s" msgstr "B³êdny wska¼nik (w %s): %s" #: src/tools/dbverify.c:1064 #, c-format msgid "Missing undeleted record %c%d" msgstr "Brakuj±cy nieusuniêty rekord %c%d" #: src/tools/dbverify.c:1071 #, c-format msgid "Fixed missing undeleted record %c%d" msgstr "Poprawiono brakuj±cy nieusuniêty rekord %c%d" #: src/tools/dbverify.c:1075 #, c-format msgid "Failed to fix missing undeleted record %c%d" msgstr "Nie uda³o siê poprawiæ brakuj±cego nieusuniêtego rekordu %c%d" #: src/tools/dbverify.c:1087 #, c-format msgid "Delete set contains valid record %s" msgstr "Usuniêty zbiór zawiera wa¿ne rekordy %s" #: src/tools/dbverify.c:1092 #, c-format msgid "Fixed delete set contains valid record %s" msgstr "Poprawiony usuniêty zbiór zawiera poprawne rekordy %s" #: src/tools/dbverify.c:1096 #, c-format msgid "Failed to fix missing undeleted record %s" msgstr "Nie uda³o siê poprawiæ brakuj±cego nieusuniêtego rekord %s" #: src/tools/dbverify.c:1117 #, fuzzy, c-format msgid "Master fkey misaligned" msgstr "G³ówny fkey uszkodzony (%d != %d)\n" #: src/tools/dbverify.c:1144 #, c-format msgid "Cycle in indexes, file %s found again!\n" msgstr "Cykl w indeksach, plik %s znaleziony ponownie!\n" #: src/tools/dbverify.c:1151 #, fuzzy, c-format msgid "Error loading index at key" msgstr "B³±d ³adowania indeksu przy kluczu %d\n" #: src/tools/dbverify.c:1199 #, c-format msgid "First key in block below parent's limit\n" msgstr "Pierwszy klucz w bloku poni¿ej limitu rodziców\n" #: src/tools/dbverify.c:1207 #, c-format msgid "Last key in block above parent's limit\n" msgstr "Ostatni klucz w bloku powy¿ej limitu rodziców\n" #: src/tools/dbverify.c:1215 #, fuzzy, c-format msgid "Key not below next key" msgstr "Klucz %d nie jest ni¿ej ni¿ nastêpny klucz\n" #: src/tools/dbverify.c:1232 src/tools/dbverify.c:1234 msgid "data block" msgstr "blok danych" #: src/tools/dbverify.c:1235 #, c-format msgid "%s fkey=%d, file=%s" msgstr "%s fkey=%d, plik=%s" #: src/tools/dbverify.c:1248 #, fuzzy, c-format msgid "Invalid errs array[%d] in dbverify - fix program\n" msgstr "B³êdna tablica b³êdów[%d] w dbverify - popraw program\n" #: src/tools/dbverify.c:1285 #, c-format msgid "Missing data record (%s)" msgstr "Brakuj±cy rekord danych (%s)" #: src/tools/dbverify.c:1289 #, c-format msgid "Fixed missing data record (%s)" msgstr "Poprawiono brakuj±cy rekord danych (%s)" #: src/tools/dbverify.c:1420 #, c-format msgid "Checking %s" msgstr "" #: src/tools/dbverify.c:1476 #, c-format msgid "%d error" msgid_plural "%d errors" msgstr[0] "%d b³±d" msgstr[1] "%d b³êdy" msgstr[2] "%d b³êdów" #: src/tools/dbverify.c:1480 #, c-format msgid "%d fixed" msgid_plural "%d fixed" msgstr[0] "%d poprawiony" msgstr[1] "%d poprawione" msgstr[2] "%d poprawionych" #: src/tools/dbverify.c:1487 msgid "No errors found" msgstr "Nie ma b³êdów" #: src/tools/dbverify.c:1506 #, c-format msgid "FATAL ERROR: " msgstr "B£¡D KRYTYCZNY: " #: src/tools/dbverify.c:1511 #, c-format msgid "In file <%s> at line %d" msgstr "W pliku <%s> w wierszu %d" #~ msgid "Program" #~ msgstr "Program" #~ msgid "Error: output file <%s> could not be created.\n" #~ msgstr "B³±d: nie mo¿na utworzyæ pliku wyj¶ciowego <%s>.\n" lifelines-3.0.61/po/POTFILES.in0000700002540200244210000000335010655637037016151 0ustar prappDomain Users# List of source files containing translatable strings. # Most strings are in messages.c, and the browse menu strings are # in menuitem.c. Then a handful are scattered elsewhere. # This list may not be complete. src/btree/btrec.c src/gedlib/charmaps.c src/gedlib/datei.c src/gedlib/dateparse.c src/gedlib/dateprint.c src/gedlib/dbcontext.c src/gedlib/dblist.c src/gedlib/editmap.c src/gedlib/editvtab.c src/gedlib/gedcom.c src/gedlib/gstrings.c src/gedlib/init.c src/gedlib/keytonod.c src/gedlib/lloptions.c src/gedlib/messages.c src/gedlib/node.c src/gedlib/nodeio.c src/gedlib/record.c src/gedlib/remove.c src/gedlib/translat.c src/gedlib/valid.c src/gedlib/xlat.c src/gedlib/xreffile.c src/interp/alloc.c src/interp/builtin.c src/interp/eval.c src/interp/interp.c src/interp/intrpseq.c src/interp/lex.c src/interp/more.c src/interp/pvalalloc.c src/interp/pvalmath.c src/interp/pvalue.c src/interp/progerr.c src/interp/rassa.c src/interp/rptsort.c src/liflines/add.c src/liflines/ask.c src/liflines/askgedc.c src/liflines/askprogram.c src/liflines/browse.c src/liflines/brwsmenu.c src/liflines/delete.c src/liflines/dynmenu.c src/liflines/edit.c src/liflines/error.c src/liflines/export.c src/liflines/import.c src/liflines/interact.c src/liflines/lbrowse.c src/liflines/lines_usage.c src/liflines/listui.c src/liflines/llexec.c src/liflines/loadsave.c src/liflines/main.c src/liflines/menuset.c src/liflines/merge.c src/liflines/miscutls.c src/liflines/newrecs.c src/liflines/scan.c src/liflines/screen.c src/liflines/searchui.c src/liflines/selectdb.c src/liflines/show.c src/liflines/swap.c src/liflines/tandem.c src/liflines/valgdcom.c src/stdlib/errlog.c src/stdlib/llabort.c src/stdlib/signals.c src/tools/btedit.c src/tools/dbverify.c src/ui/ui_cli.c lifelines-3.0.61/po/quot.sed0000700002540200244210000000023107477522374016061 0ustar prappDomain Userss/"\([^"]*\)"/“\1â€/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“â€/""/g lifelines-3.0.61/po/remove-potcdate.sin0000700002540200244210000000066007477522374020213 0ustar prappDomain Users# Sed script that remove the POT-Creation-Date line in the header entry # from a POT file. # # The distinction between the first and the following occurrences of the # pattern is achieved by looking at the hold space. /^"POT-Creation-Date: .*"$/{ x # Test if the hold space is empty. s/P/P/ ta # Yes it was empty. First occurrence. Remove the line. g d bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } lifelines-3.0.61/po/Rules-quot0000700002540200244210000000323107477522374016402 0ustar prappDomain Users# Special Makefile rules for English message catalogs with quotation marks. DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot .SUFFIXES: .insert-header .po-update-en en@quot.po-update: en@quot.po-update-en en@boldquot.po-update: en@boldquot.po-update-en .insert-header.po-update-en: @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ ll=`echo $$lang | sed -e 's/@.*//'`; \ LC_ALL=C; export LC_ALL; \ cd $(srcdir); \ if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "creation of $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi en@quot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header en@boldquot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header mostlyclean: mostlyclean-quot mostlyclean-quot: rm -f *.insert-header lifelines-3.0.61/po/rw.gmo0000700002540200244210000000071210656417756015534 0ustar prappDomain UsersÞ•,<PQhXÁsecondProject-Id-Version: lifelines 3.0.29 Report-Msgid-Bugs-To: POT-Creation-Date: 2007-08-08 15:56-0400 PO-Revision-Date: 2005-04-04 10:55-0700 Last-Translator: Steven Michael Murphy Language-Team: Kinyarwanda MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit isegondalifelines-3.0.61/po/rw.po0000700002540200244210000037107110656417752015375 0ustar prappDomain Users# Kinyarwanda translations for lifelines package. # Copyright (C) 2005 Free Software Foundation, Inc. # This file is distributed under the same license as the lifelines package. # Steve Murphy , 2005. # Steve performed initial rough translation from compendium built from translations provided by the following translators: # Philibert Ndandali , 2005. # Viateur MUGENZI , 2005. # Noëlla Mupole , 2005. # Carole Karema , 2005. # JEAN BAPTISTE NGENDAHAYO , 2005. # Augustin KIBERWA , 2005. # Donatien NSENGIYUMVA , 2005. # Antoine Bigirimana , 2005. # msgid "" msgstr "" "Project-Id-Version: lifelines 3.0.29\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-08-08 15:56-0400\n" "PO-Revision-Date: 2005-04-04 10:55-0700\n" "Last-Translator: Steven Michael Murphy \n" "Language-Team: Kinyarwanda \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/btree/btrec.c:369 #, c-format msgid "Failed (errno=%d) to open blockfile (rkey=%s): %s" msgstr "" #: src/btree/btrec.c:438 #, c-format msgid "Btree lookup looped back to master (%ld)!" msgstr "" #: src/gedlib/charmaps.c:769 #, fuzzy msgid "" msgstr "." msgstr "" #: src/gedlib/keytonod.c:687 msgid "It might be possible to fix this with btedit." msgstr "" #: src/gedlib/keytonod.c:688 msgid "Neighboring keys include:" msgstr "" #: src/gedlib/keytonod.c:1045 #, c-format msgid "Bad cache entry <%s> != <%s>" msgstr "" #: src/gedlib/keytonod.c:1072 #, c-format msgid "Cache [%s] overflowed its max size (%d)" msgstr "" #: src/gedlib/messages.c:44 #, fuzzy msgid "You must identify a database." msgstr "a Ububikoshingiro" #: src/gedlib/messages.c:45 #, fuzzy msgid "What directory holds (or will hold) the LifeLines database? (? to list)" msgstr "" "Project- Id- Version: basctl\n" "POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n" "PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n" "Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n" "Content- Type: text/ plain; charset= UTF- 8\n" "Content- Transfer- Encoding: 8bit\n" "X- Generator: KBabel 1. 0\n" "." #: src/gedlib/messages.c:46 #, fuzzy msgid "enter path: " msgstr "Injiza Inzira" #: src/gedlib/messages.c:47 #, fuzzy msgid "There is no LifeLines database in that directory." msgstr "ni Oya Ububikoshingiro in bushyinguro" #: src/gedlib/messages.c:48 #, fuzzy msgid "Do you want to create a database there?" msgstr "Kuri Kurema a Ububikoshingiro" #: src/gedlib/messages.c:49 #, fuzzy msgid "Argument to lock (-l) must be y or n." msgstr "Kuri L Y Cyangwa N" #: src/gedlib/messages.c:50 #, fuzzy msgid "Cannot remove last person from family." msgstr "Gukuraho... Iheruka Bivuye" #: src/gedlib/messages.c:52 #, fuzzy msgid "lines [-adkrwiflntcuFxoCzI] [database] # Use -F for Finnish database" msgstr "Imirongo Ububikoshingiro kugirango Ububikoshingiro" #: src/gedlib/messages.c:54 #, fuzzy msgid "lines [-adkrwiflntcuxoCzI] [database] # Finnish database" msgstr "Imirongo Ububikoshingiro Ububikoshingiro" #: src/gedlib/messages.c:56 #, fuzzy msgid "lines [-adkrwiflntcuxoCzI] [database]" msgstr "Imirongo Ububikoshingiro" #: src/gedlib/messages.c:58 #, fuzzy msgid "The database is read only; you may not add records." msgstr "Ububikoshingiro ni Gusoma Gicurasi OYA Kongeramo Ibyabitswe" #: src/gedlib/messages.c:59 #, fuzzy msgid "The database is read only; you may not change records." msgstr "Ububikoshingiro ni Gusoma Gicurasi OYA Guhindura>> Ibyabitswe" #: src/gedlib/messages.c:60 #, fuzzy msgid "The database is read only; you may not merge records." msgstr "Ububikoshingiro ni Gusoma Gicurasi OYA Gukomatanya Ibyabitswe" #: src/gedlib/messages.c:61 #, fuzzy msgid "The database is read only; you may not remove records." msgstr "Ububikoshingiro ni Gusoma Gicurasi OYA Gukuraho... Ibyabitswe" #: src/gedlib/messages.c:62 #, fuzzy msgid "The database is read only." msgstr "Ububikoshingiro ni Gusoma" #: src/gedlib/messages.c:64 #, fuzzy msgid "Name, key, refn, list, or @:" msgstr "Injiza Izina: Urufunguzo Cyangwa Urutonde" #: src/gedlib/messages.c:65 #, fuzzy msgid "enter key or refn: " msgstr "Injiza Urufunguzo Cyangwa" #: src/gedlib/messages.c:66 #, fuzzy msgid "Please choose the child to remove from the family." msgstr "Guhitamo i Kuri Gukuraho... Bivuye i" #: src/gedlib/messages.c:67 #, fuzzy msgid "Please choose the spouse/parent to remove from the family." msgstr "Guhitamo i Kuri Gukuraho... Bivuye i" #: src/gedlib/messages.c:68 #, fuzzy msgid "From which family is the child to be removed?" msgstr "ni i Kuri Cyavanyweho" #: src/gedlib/messages.c:69 #, fuzzy msgid "From which family is the spouse/parent to be removed?" msgstr "ni i Kuri Cyavanyweho" #: src/gedlib/messages.c:70 #, fuzzy msgid "Identify family (enter nothing to identify by individual members)." msgstr "Injiza Kuri ku" #: src/gedlib/messages.c:71 #, fuzzy msgid "Identify a spouse of the family, if known." msgstr "a Bya i NIBA" #: src/gedlib/messages.c:72 #, fuzzy msgid "Identify a child of the family, if known." msgstr "a Bya i NIBA" #: src/gedlib/messages.c:73 #, fuzzy msgid "Identify the first child to swap." msgstr "i Itangira Kuri" #: src/gedlib/messages.c:74 #, fuzzy msgid "Identify the second child to swap." msgstr "i ISEGONDA Kuri" #: src/gedlib/messages.c:75 #, fuzzy msgid "Identify the child to reorder." msgstr "i Kuri Kwongera gupanga" #: src/gedlib/messages.c:76 #, fuzzy msgid "Identify the first family/spouse to swap." msgstr "i Itangira Kuri" #: src/gedlib/messages.c:77 #, fuzzy msgid "Identify the second family/spouse to swap." msgstr "i ISEGONDA Kuri" #: src/gedlib/messages.c:78 #, fuzzy msgid "Please choose the spouse/parent to browse to." msgstr "Guhitamo i Kuri Gushakisha... Kuri" #: src/gedlib/messages.c:79 #, fuzzy msgid "Please choose the first spouse/parent to browse to." msgstr "Guhitamo i Itangira Kuri Gushakisha... Kuri" #: src/gedlib/messages.c:80 #, fuzzy msgid "Please choose the second spouse/parent to browse to." msgstr "Guhitamo i ISEGONDA Kuri Gushakisha... Kuri" #: src/gedlib/messages.c:81 #, fuzzy msgid "Please choose the child to browse to." msgstr "Guhitamo i Kuri Gushakisha... Kuri" #: src/gedlib/messages.c:82 #, fuzzy msgid "Please choose the first child to browse to." msgstr "Guhitamo i Itangira Kuri Gushakisha... Kuri" #: src/gedlib/messages.c:83 #, fuzzy msgid "Please choose the second child to browse to." msgstr "Guhitamo i ISEGONDA Kuri Gushakisha... Kuri" #: src/gedlib/messages.c:84 #, fuzzy msgid "Please choose the family to browse to." msgstr "Guhitamo i Kuri Gushakisha... Kuri" #: src/gedlib/messages.c:85 #, fuzzy msgid "Enter Family Number to Browse to" msgstr "Kuri Kuri" #: src/gedlib/messages.c:86 #, fuzzy msgid "Please choose the first family to browse to." msgstr "Guhitamo i Itangira Kuri Gushakisha... Kuri" #: src/gedlib/messages.c:87 #, fuzzy msgid "Please choose the second family to browse to." msgstr "Guhitamo i ISEGONDA Kuri Gushakisha... Kuri" #: src/gedlib/messages.c:88 #, fuzzy msgid "Please choose the father/husband to browse to." msgstr "Guhitamo i Kuri Gushakisha... Kuri" #: src/gedlib/messages.c:89 #, fuzzy msgid "Please choose the first father/husband to browse to." msgstr "Guhitamo i Itangira Kuri Gushakisha... Kuri" #: src/gedlib/messages.c:90 #, fuzzy msgid "Please choose the second father/husband to browse to." msgstr "Guhitamo i ISEGONDA Kuri Gushakisha... Kuri" #: src/gedlib/messages.c:91 #, fuzzy msgid "Please choose the mother/wife to browse to." msgstr "Guhitamo i Kuri Gushakisha... Kuri" #: src/gedlib/messages.c:92 #, fuzzy msgid "Please choose the first mother/wife to browse to." msgstr "Guhitamo i Itangira Kuri Gushakisha... Kuri" #: src/gedlib/messages.c:93 #, fuzzy msgid "Please choose the second mother/wife to browse to." msgstr "Guhitamo i ISEGONDA Kuri Gushakisha... Kuri" #: src/gedlib/messages.c:94 #, fuzzy msgid "Identify a parent in the family having children swapped." msgstr "a in i" #: src/gedlib/messages.c:95 #, fuzzy msgid "Whose families/spouses are to be swapped?" msgstr "Kuri" #: src/gedlib/messages.c:96 #, fuzzy msgid "Identify one of the child's parents, if known." msgstr "Bya i NIBA" #: src/gedlib/messages.c:98 src/liflines/scan.c:127 #, fuzzy msgid "Enter pattern to match against refn." msgstr "Ishusho Kuri BIHUYE" #: src/gedlib/messages.c:100 #, fuzzy msgid "Please choose from among these people." msgstr "Guhitamo Bivuye Ibyabitswe" #: src/gedlib/messages.c:101 #, fuzzy msgid "Please choose from among these records." msgstr "Guhitamo Bivuye Ibyabitswe" #: src/gedlib/messages.c:102 #, fuzzy msgid "Is this the new child? " msgstr "iyi i Gishya" #: src/gedlib/messages.c:103 #, fuzzy msgid "Is this the new spouse? " msgstr "iyi i Gishya" #: src/gedlib/messages.c:104 #, fuzzy msgid "Is this the person? Select if so." msgstr "iyi i NIBA" #: src/gedlib/messages.c:105 #, fuzzy msgid "Is this the record? Select if so." msgstr "iyi i NIBA" #: src/gedlib/messages.c:106 #, fuzzy msgid "Select the child the new child precedes or select last." msgstr "i i Gishya Cyangwa Guhitamo Iheruka" #: src/gedlib/messages.c:107 #, fuzzy msgid "Please identify next person to browse to." msgstr "Komeza>> Kuri Gushakisha... Kuri" #: src/gedlib/messages.c:108 #, fuzzy msgid "Please identify record to browse to." msgstr "Icyabitswe Kuri Gushakisha... Kuri" #: src/gedlib/messages.c:109 #, fuzzy msgid "Please identify one of the spouses." msgstr "Bya i" #: src/gedlib/messages.c:110 #, fuzzy msgid "Please identify person or persons to browse to." msgstr "Cyangwa Kuri Gushakisha... Kuri" #: src/gedlib/messages.c:111 #, fuzzy msgid "Please choose family create operation." msgstr "Guhitamo Kurema" #: src/gedlib/messages.c:112 #, fuzzy msgid "Do you want to enter another name?" msgstr "Kuri Injiza Izina:" #: src/gedlib/messages.c:114 #, fuzzy msgid "This person is not a spouse or parent in any family." msgstr "ni OYA a Cyangwa in" #: src/gedlib/messages.c:115 #, fuzzy msgid "This person is not a child in any family." msgstr "ni OYA a in" #: src/gedlib/messages.c:116 #, fuzzy msgid "There is no one in the database with that name or key." msgstr "ni Oya in i Ububikoshingiro Na: Izina: Cyangwa Urufunguzo" #: src/gedlib/messages.c:118 #, fuzzy msgid "This person's father is not in the database." msgstr "ni OYA in i Ububikoshingiro" #: src/gedlib/messages.c:119 #, fuzzy msgid "This person's mother is not in the database." msgstr "ni OYA in i Ububikoshingiro" #: src/gedlib/messages.c:120 #, fuzzy msgid "This person has no spouse in the database." msgstr "Oya in i Ububikoshingiro" #: src/gedlib/messages.c:121 #, fuzzy msgid "This person has no younger sibling in the database." msgstr "Oya in i Ububikoshingiro" #: src/gedlib/messages.c:122 #, fuzzy msgid "This person has no older sibling in the database." msgstr "Oya in i Ububikoshingiro" #: src/gedlib/messages.c:123 #, fuzzy msgid "This person's parents are not in the database." msgstr "OYA in i Ububikoshingiro" #: src/gedlib/messages.c:124 #, fuzzy msgid "This family has no male spouse/parent in the database." msgstr "Oya Gabo in i Ububikoshingiro" #: src/gedlib/messages.c:125 #, fuzzy msgid "This family has no female spouse/parent in the database." msgstr "Oya Gore in i Ububikoshingiro" #: src/gedlib/messages.c:126 #, fuzzy msgid "There are no children in the database for this family." msgstr "Oya in i Ububikoshingiro kugirango iyi" #: src/gedlib/messages.c:127 #, fuzzy msgid "This person has no children in the database." msgstr "Oya in i Ububikoshingiro" #: src/gedlib/messages.c:128 msgid "No such child." msgstr "" #: src/gedlib/messages.c:129 msgid "No such person." msgstr "" #: src/gedlib/messages.c:130 #, fuzzy msgid "No such record." msgstr "Icyabitswe" #: src/gedlib/messages.c:131 msgid "No such family." msgstr "" #: src/gedlib/messages.c:132 msgid "No sources present." msgstr "" #: src/gedlib/messages.c:133 #, fuzzy msgid "Please choose the source to view." msgstr "Guhitamo i Inkomoko Kuri Kureba" #: src/gedlib/messages.c:134 #, fuzzy msgid "No events present." msgstr "Ibyabaye" #: src/gedlib/messages.c:135 #, fuzzy msgid "Please choose the event to view." msgstr "Guhitamo i Icyabaye Kuri Kureba" #: src/gedlib/messages.c:136 #, fuzzy msgid "No others present." msgstr "Ibindi" #: src/gedlib/messages.c:137 #, fuzzy msgid "Please choose the other to view." msgstr "Guhitamo i Ikindi Kuri Kureba" #: src/gedlib/messages.c:138 #, fuzzy msgid "No notes present." msgstr "Ibisobanuro" #: src/gedlib/messages.c:139 #, fuzzy msgid "Please choose the note to view." msgstr "Guhitamo i Impugukirwa Kuri Kureba" #: src/gedlib/messages.c:140 #, fuzzy msgid "No references present." msgstr "Indango" #: src/gedlib/messages.c:141 #, fuzzy msgid "Please choose the reference to view." msgstr "Guhitamo i Indango Kuri Kureba" #: src/gedlib/messages.c:142 #, fuzzy msgid "Duplicated REFN - please choose." msgstr "Guhitamo" #: src/gedlib/messages.c:144 #, fuzzy msgid "New spouse/parent has unknown sex; can't add to family." msgstr "Kitazwi Kongeramo Kuri" #: src/gedlib/messages.c:145 #, fuzzy msgid "The persons are not of opposite sex; can't make family." msgstr "OYA Bya Ubwoko" #: src/gedlib/messages.c:146 #, fuzzy msgid "This person is not a spouse in the family; can't remove." msgstr "ni OYA a in i Gukuraho..." #: src/gedlib/messages.c:147 #, fuzzy msgid "This person is not a child in the family; can't remove." msgstr "ni OYA a in i Gukuraho..." #: src/gedlib/messages.c:148 #, fuzzy msgid "This person's sex is not known; can't make family." msgstr "ni OYA Ubwoko" #: src/gedlib/messages.c:149 #, fuzzy msgid "This family already has a husband/male parent." msgstr "a Gabo" #: src/gedlib/messages.c:150 #, fuzzy msgid "This family already has a wife/female parent." msgstr "a Gore" #: src/gedlib/messages.c:151 #, fuzzy msgid "This family has both spouses/parents; can't add another." msgstr "Byombi Kongeramo" #: src/gedlib/messages.c:152 #, fuzzy msgid "This family has neither spouse/parent; can't remove." msgstr "Gukuraho..." #: src/gedlib/messages.c:153 #, fuzzy msgid "This family still has links; not removed." msgstr "amahuza OYA Cyavanyweho" #: src/gedlib/messages.c:155 #, fuzzy msgid "Choose a family by selecting a spouse/parent." msgstr "a ku a" #: src/gedlib/messages.c:156 #, fuzzy msgid "" "Do you want to edit the person again? (Otherwise changes will be discarded.)" msgstr "Kuri Guhindura i Amahinduka" #: src/gedlib/messages.c:157 #, fuzzy msgid "Do you want to edit the person again?" msgstr "Kuri Guhindura i" #: src/gedlib/messages.c:158 #, fuzzy msgid "" "Do you want to edit the family again? (Otherwise changes will be discarded.)" msgstr "Kuri Guhindura i Amahinduka" #: src/gedlib/messages.c:159 #, fuzzy msgid "Do you want to edit the family again?" msgstr "Kuri Guhindura i" #: src/gedlib/messages.c:160 #, fuzzy msgid "" "Do you want to edit the source again? (Otherwise changes will be discarded.)" msgstr "Kuri Guhindura i Inkomoko Amahinduka" #: src/gedlib/messages.c:161 #, fuzzy msgid "Do you want to edit the source again?" msgstr "Kuri Guhindura i Inkomoko" #: src/gedlib/messages.c:162 #, fuzzy msgid "" "Do you want to edit the event again? (Otherwise changes will be discarded.)" msgstr "Kuri Guhindura i Icyabaye Amahinduka" #: src/gedlib/messages.c:163 #, fuzzy msgid "Do you want to edit the event again?" msgstr "Kuri Guhindura i Icyabaye" #: src/gedlib/messages.c:164 #, fuzzy msgid "" "Do you want to edit the record again? (Otherwise changes will be discarded.)" msgstr "Kuri Guhindura i Icyabitswe Amahinduka" #: src/gedlib/messages.c:165 #, fuzzy msgid "Do you want to edit the record again?" msgstr "Kuri Guhindura i Icyabitswe" #: src/gedlib/messages.c:166 #, fuzzy msgid "Whom do you want to edit?" msgstr "Kuri Guhindura" #: src/gedlib/messages.c:167 #, fuzzy msgid "Which source record do you want to edit?" msgstr "Inkomoko Icyabitswe Kuri Guhindura" #: src/gedlib/messages.c:168 #, fuzzy msgid "Which event record do you want to edit?" msgstr "Icyabaye Icyabitswe Kuri Guhindura" #: src/gedlib/messages.c:169 #, fuzzy msgid "What record do you want to edit?" msgstr "Icyabitswe Kuri Guhindura" #: src/gedlib/messages.c:171 #, fuzzy msgid "Do you really want to add this person to the database?" msgstr "Kuri Kongeramo iyi Kuri i Ububikoshingiro" #: src/gedlib/messages.c:172 #, fuzzy msgid "Do you really want to add this family to the database?" msgstr "Kuri Kongeramo iyi Kuri i Ububikoshingiro" #: src/gedlib/messages.c:173 #, fuzzy msgid "Do you really want to add this child to the family?" msgstr "Kuri Kongeramo iyi Kuri i" #: src/gedlib/messages.c:174 #, fuzzy msgid "Do you really want to add this spouse/parent to the family?" msgstr "Kuri Kongeramo iyi Kuri i" #: src/gedlib/messages.c:175 #, fuzzy msgid "Do you really want to add this source to the database?" msgstr "Kuri Kongeramo iyi Inkomoko Kuri i Ububikoshingiro" #: src/gedlib/messages.c:176 #, fuzzy msgid "Do you really want to add this event to the database?" msgstr "Kuri Kongeramo iyi Icyabaye Kuri i Ububikoshingiro" #: src/gedlib/messages.c:177 #, fuzzy msgid "Do you really want to add this record to the database?" msgstr "Kuri Kongeramo iyi Icyabitswe Kuri i Ububikoshingiro" #: src/gedlib/messages.c:178 #, fuzzy msgid "Do you really want to update this person?" msgstr "Kuri Kuvugurura iyi" #: src/gedlib/messages.c:179 #, fuzzy msgid "Do you really want to update this family?" msgstr "Kuri Kuvugurura iyi" #: src/gedlib/messages.c:180 #, fuzzy msgid "Do you really want to update this source?" msgstr "Kuri Kuvugurura iyi Inkomoko" #: src/gedlib/messages.c:181 #, fuzzy msgid "Do you really want to update this event?" msgstr "Kuri Kuvugurura iyi Icyabaye" #: src/gedlib/messages.c:182 #, fuzzy msgid "Do you really want to update this record?" msgstr "Kuri Kuvugurura iyi Icyabitswe" #: src/gedlib/messages.c:183 #, fuzzy msgid "Are you sure you want to remove the person from the database?" msgstr "Kuri Gukuraho... i Bivuye i Ububikoshingiro" #: src/gedlib/messages.c:184 #, fuzzy msgid "Are you sure you want to remove this record from the database?" msgstr "Kuri Gukuraho... i Bivuye i Ububikoshingiro" #: src/gedlib/messages.c:185 #, fuzzy msgid "Remove this family record?" msgstr "iyi Icyabitswe" #: src/gedlib/messages.c:186 #, c-format msgid "(Family %s (%s, %s)" msgstr "" #: src/gedlib/messages.c:187 #, fuzzy msgid "Do you really want to merge these two persons?" msgstr "Kuri Gukomatanya" #: src/gedlib/messages.c:188 #, fuzzy msgid "Do you really want to merge these two families?" msgstr "Kuri Gukomatanya" #: src/gedlib/messages.c:189 #, fuzzy msgid "Do you really want to swap spouse orders?" msgstr "Kuri Kuvugurura iyi Icyabitswe" #: src/gedlib/messages.c:190 #, fuzzy msgid "Do you really want to reorder children?" msgstr "Kuri Kuvugurura iyi Icyabaye" #: src/gedlib/messages.c:191 #, fuzzy msgid "Do you really want to remove this child from his/her family?" msgstr "Kuri Gukuraho... iyi Bivuye" #: src/gedlib/messages.c:192 #, fuzzy msgid "Do you really want to remove this spouse from his/her family?" msgstr "Kuri Gukuraho... iyi Bivuye" #: src/gedlib/messages.c:193 #, fuzzy msgid "Too many spouses to display full list" msgstr "Kuri Kugaragaza Urutonde" #: src/gedlib/messages.c:194 #, fuzzy msgid "These persons are children in different families." msgstr "in" #: src/gedlib/messages.c:195 #, fuzzy msgid "Are you sure you want to merge them?" msgstr "Kuri Gukomatanya" #: src/gedlib/messages.c:197 #, fuzzy msgid "There is something wrong with the data." msgstr "ni Na: i Ibyatanzwe" #: src/gedlib/messages.c:198 #, fuzzy msgid "Please identify the child." msgstr "i" #: src/gedlib/messages.c:199 #, fuzzy msgid "Please identify one of the child's siblings." msgstr "Bya i" #: src/gedlib/messages.c:200 #, fuzzy msgid "Identify spouse/parent to add to an existing family." msgstr "Kuri Kongeramo Kuri" #: src/gedlib/messages.c:201 #, fuzzy msgid "Identify spouse/parent already in family, if known." msgstr "in NIBA" #: src/gedlib/messages.c:202 #, fuzzy msgid "Identify child already in family." msgstr "in" #: src/gedlib/messages.c:204 #, fuzzy msgid "This person is already a child in a family." msgstr "ni a in a" #: src/gedlib/messages.c:205 #, fuzzy msgid "Identify a spouse/parent for the new family." msgstr "a kugirango i Gishya" #: src/gedlib/messages.c:206 #, fuzzy msgid "Identify the second spouse/parent, if known." msgstr "i ISEGONDA NIBA" #: src/gedlib/messages.c:207 msgid "Both families must have husbands/fathers." msgstr "" #: src/gedlib/messages.c:208 msgid "Both families must have wives/mothers." msgstr "" #: src/gedlib/messages.c:210 #, fuzzy msgid "Identify spouse/parent in second family, if known." msgstr "in ISEGONDA NIBA" #: src/gedlib/messages.c:211 #, fuzzy msgid "Identify child in second family." msgstr "in ISEGONDA" #: src/gedlib/messages.c:212 #, fuzzy msgid "Identify second person to browse to." msgstr "ISEGONDA Kuri Gushakisha... Kuri" #: src/gedlib/messages.c:214 #, fuzzy msgid "Create a family with this person as a child." msgstr "a Na: iyi Nka a" #: src/gedlib/messages.c:215 #, fuzzy msgid "Create a family with this person as a spouse/parent." msgstr "a Na: iyi Nka a" #: src/gedlib/messages.c:216 #, fuzzy msgid "This family has less than two children; can't swap." msgstr "Birutwa" #: src/gedlib/messages.c:217 #, fuzzy msgid "This person is a spouse/parent in less than two families." msgstr "ni a in Birutwa" #: src/gedlib/messages.c:218 #, fuzzy msgid "Something impossible happened. Contact tech support." msgstr "Gushigikira" #: src/gedlib/messages.c:220 msgid "The two children were swapped." msgstr "" #: src/gedlib/messages.c:221 msgid "The two families were swapped." msgstr "" #: src/gedlib/messages.c:222 #, fuzzy msgid "The child was removed from his/her family." msgstr "Cyavanyweho Bivuye" #: src/gedlib/messages.c:223 #, fuzzy msgid "The spouse was removed from his/her family." msgstr "Cyavanyweho Bivuye" #: src/gedlib/messages.c:225 #, fuzzy msgid "A person cannot be merged with him/herself." msgstr "A Na:" #: src/gedlib/messages.c:226 #, fuzzy msgid "A family cannot be merged with itself." msgstr "A Na:" #: src/gedlib/messages.c:227 #, fuzzy msgid "Two persons with different parents cannot be merged." msgstr "Na:" #: src/gedlib/messages.c:228 #, fuzzy msgid "Two parents of different sexes cannot be merged." msgstr "Bya" #: src/gedlib/messages.c:229 #, fuzzy msgid "The families have different fathers/husbands; cannot merge." msgstr "Gukomatanya" #: src/gedlib/messages.c:230 #, fuzzy msgid "The families have different wives/mothers; cannot merge." msgstr "Gukomatanya" #: src/gedlib/messages.c:231 #, fuzzy msgid "Who do you want to remove from the database?" msgstr "Kuri Gukuraho... Bivuye i Ububikoshingiro" #: src/gedlib/messages.c:232 #, fuzzy msgid "What record do you want to remove from the database?" msgstr "Kuri Gukuraho... Bivuye i Ububikoshingiro" #: src/gedlib/messages.c:233 #, fuzzy msgid "Place the child last in the family." msgstr "i Iheruka in i" #: src/gedlib/messages.c:234 #, fuzzy msgid "Error in abbreviations file." msgstr "in IDOSIYE" #: src/gedlib/messages.c:235 #, fuzzy msgid "Error in user options file." msgstr "in Ukoresha: Amahitamo IDOSIYE" #: src/gedlib/messages.c:236 #, fuzzy msgid "Error in character mapping file." msgstr "in Inyuguti Igereranya IDOSIYE" #: src/gedlib/messages.c:237 #, fuzzy, c-format msgid "(Separator is %s)" msgstr "(ni" #: src/gedlib/messages.c:238 #, fuzzy msgid "Do you want to re-edit it?" msgstr "Kuri Guhindura" #: src/gedlib/messages.c:240 #, fuzzy, c-format msgid "%s was added to the database." msgstr "%sKyongewe Kuri i Ububikoshingiro" #: src/gedlib/messages.c:241 #, fuzzy, c-format msgid "%s was added as a child." msgstr "%sKyongewe Nka a" #: src/gedlib/messages.c:242 #, fuzzy, c-format msgid "%s was added as a spouse and/or parent." msgstr "%sKyongewe Nka a Na Cyangwa" #: src/gedlib/messages.c:243 #, fuzzy msgid "The new family was added to the database." msgstr "Gishya Kyongewe Kuri i Ububikoshingiro" #: src/gedlib/messages.c:244 #, fuzzy, c-format msgid "%s was modified in the database." msgstr "%sByahinduwe in i Ububikoshingiro" #: src/gedlib/messages.c:245 #, fuzzy msgid "The family was modified in the database." msgstr "Byahinduwe in i Ububikoshingiro" #: src/gedlib/messages.c:246 #, fuzzy msgid "The source was modified in the database." msgstr "Inkomoko Byahinduwe in i Ububikoshingiro" #: src/gedlib/messages.c:247 #, fuzzy msgid "The event was modified in the database." msgstr "Icyabaye Byahinduwe in i Ububikoshingiro" #: src/gedlib/messages.c:248 #, fuzzy msgid "The record was modified in the database." msgstr "Icyabitswe Byahinduwe in i Ububikoshingiro" #: src/gedlib/messages.c:250 #, fuzzy, c-format msgid "Could not open file %s." msgstr "OYA Gufungura IDOSIYE" #: src/gedlib/messages.c:251 msgid "Filepath too long." msgstr "" #: src/gedlib/messages.c:253 #, fuzzy msgid "Please mark a record first." msgstr "Ikimenyetso a Itangira" #: src/gedlib/messages.c:255 #, fuzzy, c-format msgid "The current list is now named %s." msgstr "KIGEZWEHO Urutonde ni NONEAHA" #: src/gedlib/messages.c:256 #, fuzzy msgid "The current list is not named." msgstr "KIGEZWEHO Urutonde ni OYA" #: src/gedlib/messages.c:257 #, fuzzy msgid "What should the name of this list be?" msgstr "i Izina: Bya iyi Urutonde" #: src/gedlib/messages.c:258 #, fuzzy msgid "No persons were added to the current list." msgstr "Kyongewe Kuri i KIGEZWEHO Urutonde" #: src/gedlib/messages.c:259 #, fuzzy msgid "What persons or list do you want to add to the current list?" msgstr "Cyangwa Urutonde Kuri Kongeramo Kuri i KIGEZWEHO Urutonde" #: src/gedlib/messages.c:260 #, fuzzy msgid "You are at the bottom of the list." msgstr "ku i Hasi: Bya i Urutonde" #: src/gedlib/messages.c:261 #, fuzzy msgid "You are at the top of the list." msgstr "ku i Hejuru: Bya i Urutonde" #: src/gedlib/messages.c:262 #, fuzzy msgid "New persons were added to the current list." msgstr "Kyongewe Kuri i KIGEZWEHO Urutonde" #: src/gedlib/messages.c:264 #, fuzzy msgid "System error: illegal map code" msgstr "Ikosa ITEGEKONGENGA" #: src/gedlib/messages.c:265 #, fuzzy msgid "No such translation table in this database" msgstr "Umwandiko wahinduwe ururimi imbonerahamwe# in iyi Ububikoshingiro" #: src/gedlib/messages.c:268 #, fuzzy msgid "Because of errors the GEDCOM file was not loaded.\n" msgstr "Bya Amakosa i IDOSIYE OYA" #: src/gedlib/messages.c:269 #, fuzzy msgid "No errors; adding records with original keys..." msgstr "Amakosa Wongera Ibyabitswe Na: Umwimerere Utubuto" #: src/gedlib/messages.c:270 #, fuzzy msgid "No errors; adding records with new keys..." msgstr "Amakosa Wongera Ibyabitswe Na: Gishya Utubuto" #: src/gedlib/messages.c:271 #, fuzzy msgid "Use original keys from GEDCOM file?" msgstr "Umwimerere Utubuto Bivuye IDOSIYE" #: src/gedlib/messages.c:272 #, fuzzy msgid "Proceed?" msgstr "Komeza ibyarbyo byose" #: src/gedlib/messages.c:273 #, fuzzy msgid "Enter name of output archive file." msgstr "Izina: Bya Ibisohoka IDOSIYE" #: src/gedlib/messages.c:274 #, fuzzy, c-format msgid "Database `%s' has been saved in `%s'." msgstr "in" #: src/gedlib/messages.c:275 #, fuzzy msgid "Enter name of translation table file to write" msgstr "" "Izina: Bya Umwandiko wahinduwe ururimi imbonerahamwe# IDOSIYE Kuri Kwandika" #: src/gedlib/messages.c:276 #, fuzzy msgid "Enter name of translation table file to read" msgstr "" "Izina: Bya Umwandiko wahinduwe ururimi imbonerahamwe# IDOSIYE Kuri Gusoma" #: src/gedlib/messages.c:277 #, fuzzy, c-format msgid "Line %d: The person defined here has no key: skipped." msgstr "Oya Urufunguzo" #: src/gedlib/messages.c:278 #, fuzzy, c-format msgid "Line %d: The family defined here has no key." msgstr "Oya Urufunguzo" #: src/gedlib/messages.c:279 #, fuzzy, c-format msgid "Lines %d and %d: Person %s is multiply defined: skipped." msgstr "Na ni Gukuba" #: src/gedlib/messages.c:280 #, fuzzy, c-format msgid "Lines %d and %d: Family %s is multiply defined." msgstr "Na ni Gukuba" #: src/gedlib/messages.c:281 #, fuzzy, c-format msgid "Line %d: Person %s has an incorrect key: skipped." msgstr "Urufunguzo" #: src/gedlib/messages.c:282 #, fuzzy, c-format msgid "Line %d: Family %s has an incorrect key." msgstr "Urufunguzo" #: src/gedlib/messages.c:283 #, fuzzy, c-format msgid "Person %s is referred to but not defined." msgstr "ni Kuri OYA" #: src/gedlib/messages.c:284 #, fuzzy, c-format msgid "Family %s is referred to but not defined." msgstr "ni Kuri OYA" #: src/gedlib/messages.c:285 #, fuzzy, c-format msgid "Source %s is referred to but not defined." msgstr "ni Kuri OYA" #: src/gedlib/messages.c:286 #, fuzzy, c-format msgid "Event %s is referred to but not defined." msgstr "ni Kuri OYA" #: src/gedlib/messages.c:287 #, fuzzy, c-format msgid "Line %d: This line has a level number that is too large." msgstr "Umurongo a urwego Umubare ni Binini" #: src/gedlib/messages.c:288 #, fuzzy, c-format msgid "Line %d: Person defined here has no name." msgstr "Oya Izina:" #: src/gedlib/messages.c:294 #, fuzzy msgid "" msgstr "> i Bya a" #: src/gedlib/messages.c:406 #, fuzzy msgid "REFN key is already in use." msgstr "Urufunguzo ni in Gukoresha" #: src/gedlib/messages.c:408 #, fuzzy msgid "Tag is too long to connect automatically." msgstr "ni Kuri Kwihuza ku buryo bwikora" #: src/gedlib/messages.c:410 #, fuzzy msgid "Database records" msgstr "Ibyabitswe" #: src/gedlib/messages.c:411 #, c-format msgid "%dI, %dF, %dS, %dE, %dX" msgstr "" #: src/gedlib/messages.c:414 #, fuzzy, c-format msgid "LifeLines %s - Genealogical DB and Programming System" msgstr "Na" #: src/gedlib/messages.c:415 #, fuzzy msgid "Copyright(c) 1991 to 1996, by T. T. Wetmore IV" msgstr "C Kuri ku" # 1305 #: src/gedlib/messages.c:416 #, fuzzy, c-format msgid "Current Database - %s" msgstr "ibyibanze bihari" #: src/gedlib/messages.c:418 msgid " (immutable)" msgstr "" # sfx2/source\view\view.src:STR_READONLY.text #: src/gedlib/messages.c:420 #, fuzzy msgid " (read only)" msgstr "(gusoma gusa)" #: src/gedlib/messages.c:421 #, fuzzy msgid "Please choose an operation:" msgstr "Guhitamo" #: src/gedlib/messages.c:422 #, fuzzy msgid "Not valid command" msgstr "Byemewe Komandi:" #: src/gedlib/messages.c:425 #, fuzzy msgid "enter y (yes) or n (no): " msgstr "Injiza Y Yego Cyangwa N Oya" #: src/gedlib/messages.c:426 msgid "yYnN" msgstr "" #: src/gedlib/messages.c:427 msgid "yY" msgstr "" #: src/gedlib/messages.c:430 #, fuzzy msgid "LifeLines -- Person Browse Screen (* toggles menu)" msgstr "Ibikubiyemo" #: src/gedlib/messages.c:431 #, fuzzy msgid "LifeLines -- Family Browse Screen (* toggles menu)" msgstr "Ibikubiyemo" #: src/gedlib/messages.c:432 #, fuzzy msgid "LifeLines -- Two Person Browse Screen (* toggles menu)" msgstr "Ibikubiyemo" #: src/gedlib/messages.c:433 #, fuzzy msgid "LifeLines -- Two Family Browse Screen (* toggles menu)" msgstr "Ibikubiyemo" #: src/gedlib/messages.c:434 #, fuzzy msgid "LifeLines -- Auxiliary Browse Screen (* toggles menu)" msgstr "Ibikubiyemo" #: src/gedlib/messages.c:435 #, fuzzy msgid "LifeLines -- List Browse Screen (* toggles menu)" msgstr "Ibikubiyemo" #: src/gedlib/messages.c:439 #, fuzzy msgid "Commands: Select by number, u Page Up, d Page Down, i Select, q Quit" msgstr "ku Umubare u D i Q" #: src/gedlib/messages.c:440 #, fuzzy msgid "Commands: u Page Up, d Page Down, q Quit" msgstr "u D Q" #: src/gedlib/messages.c:441 #, fuzzy msgid "Messages:" msgstr "Ubutumwa" #: src/gedlib/messages.c:444 #, fuzzy msgid "Please choose from the following options:" msgstr "Guhitamo Bivuye i Amahitamo" #: src/gedlib/messages.c:445 #, fuzzy, c-format msgid "New record is %s" msgstr "Icyabitswe ni" #: src/gedlib/messages.c:446 #, fuzzy msgid "Insert xref automatically at bottom of current record." msgstr "X- Ngenderwaho ku buryo bwikora ku Hasi: Bya KIGEZWEHO Icyabitswe" #: src/gedlib/messages.c:447 #, fuzzy msgid "Edit current record now to add xref manually." msgstr "KIGEZWEHO Icyabitswe NONEAHA Kuri Kongeramo X- Ngenderwaho" #: src/gedlib/messages.c:448 #, fuzzy msgid "Browse new record (without adding xref)." msgstr "Gishya Icyabitswe Wongera X- Ngenderwaho" #: src/gedlib/messages.c:449 #, fuzzy msgid "Return to current record (without adding xref)." msgstr "Kuri KIGEZWEHO Icyabitswe Wongera X- Ngenderwaho" #: src/gedlib/messages.c:452 #, fuzzy msgid "Spouse unknown" msgstr "Kitazwi" #: src/gedlib/messages.c:453 #, fuzzy msgid "No more history" msgstr "Birenzeho Urutonde" #: src/gedlib/messages.c:454 #, fuzzy msgid "Bad history count" msgstr "Urutonde IBARA" #: src/gedlib/messages.c:455 #, fuzzy msgid "Bad backup history count" msgstr "Inyibutsa Urutonde IBARA" #: src/gedlib/messages.c:456 #, fuzzy msgid "Bad history length" msgstr "Urutonde Uburebure" #: src/gedlib/messages.c:457 #, fuzzy, c-format msgid "Delete history (%d entries)?" msgstr "Urutonde Ibyinjijwe" #: src/gedlib/messages.c:458 #, fuzzy msgid "Error accessing data" msgstr "Ibyatanzwe" #: src/gedlib/messages.c:459 #, fuzzy msgid "Choose from history" msgstr "Bivuye Urutonde" #: src/gedlib/messages.c:460 #, fuzzy msgid "" "Cannot combine immutable (-i) or read-only (-r) with read-write (-w) access." msgstr "Kuvanga i Cyangwa Gusoma R Na: Gusoma Kwandika W" #: src/gedlib/messages.c:461 #, fuzzy msgid "Cannot combine forceopen (-f) and lock (-l) flags." msgstr "Kuvanga F Na L Amabendera" #: src/gedlib/messages.c:462 #, fuzzy msgid "Default path: " msgstr "Inzira" #: src/gedlib/messages.c:463 #, fuzzy msgid "WARNING: missing keys" msgstr "Ibuze Utubuto" #: src/gedlib/messages.c:464 #, fuzzy msgid "This does not point to another record in the database!" msgstr "OYA Akadomo Kuri Icyabitswe in i Ububikoshingiro" #: src/gedlib/messages.c:465 #, fuzzy msgid "enter file name" msgstr "Injiza IDOSIYE Izina:" #: src/gedlib/messages.c:466 #, fuzzy, c-format msgid "enter file name (*%s)" msgstr "Injiza IDOSIYE Izina:" #: src/gedlib/messages.c:467 #, fuzzy msgid "There is no record with that key or reference." msgstr "ni Oya Icyabitswe Na: Urufunguzo Cyangwa Indango" #: src/gedlib/messages.c:468 msgid "Database was corrupt." msgstr "" #: src/gedlib/messages.c:471 #, fuzzy msgid "Bad decimal number format." msgstr "NYACUMI Umubare Imiterere" #: src/gedlib/messages.c:472 #, fuzzy msgid "Bad hexidecimal number format." msgstr "Umubare Imiterere" #: src/gedlib/messages.c:473 #, fuzzy msgid "No replacement string on line." msgstr "Ikurikiranyanyuguti ku Umurongo" #: src/gedlib/messages.c:474 #, fuzzy msgid "No original string on line." msgstr "Umwimerere Ikurikiranyanyuguti ku Umurongo" #: src/gedlib/messages.c:475 #, fuzzy msgid "Bad escape format." msgstr "Imiterere" #: src/gedlib/messages.c:476 #, fuzzy, c-format msgid "%s: line %d (entry %d): %s" msgstr "%s:Umurongo Icyinjijwe" #: src/gedlib/messages.c:479 src/liflines/brwsmenu.c:26 #, fuzzy msgid "q Return to main menu" msgstr "Q Kuri Ibikubiyemo" #: src/gedlib/messages.c:480 #, fuzzy msgid "q Return to previous menu" msgstr "Q Kuri Ibanjirije Ibikubiyemo" #: src/gedlib/messages.c:481 #, fuzzy msgid "q Quit program" msgstr "Q Porogaramu" #: src/gedlib/messages.c:482 #, fuzzy msgid "Q Quit current database" msgstr "KIGEZWEHO Ububikoshingiro" #: src/gedlib/messages.c:485 #, fuzzy msgid "b Browse the persons in the database" msgstr "B i in i Ububikoshingiro" #: src/gedlib/messages.c:486 #, fuzzy msgid "s Search database" msgstr "S Ububikoshingiro" #: src/gedlib/messages.c:487 #, fuzzy msgid "a Add information to the database" msgstr "a Ibisobanuro Kuri i Ububikoshingiro" #: src/gedlib/messages.c:488 #, fuzzy msgid "d Delete information from the database" msgstr "D Ibisobanuro Bivuye i Ububikoshingiro" #: src/gedlib/messages.c:489 #, fuzzy msgid "r Generate report by entering report name" msgstr "R Icyegeranyo ku Icyegeranyo Izina:" #: src/gedlib/messages.c:490 #, fuzzy msgid "p Pick a report from list and run" msgstr "P a Icyegeranyo Bivuye Urutonde Na Gukoresha" #: src/gedlib/messages.c:491 #, fuzzy msgid "c Character set options" msgstr "C Gushyiraho Amahitamo" #: src/gedlib/messages.c:492 #, fuzzy msgid "t Modify character translation tables" msgstr "T Inyuguti Umwandiko wahinduwe ururimi Imbonerahamwe" #: src/gedlib/messages.c:493 #, fuzzy msgid "u Miscellaneous utilities" msgstr "u" #: src/gedlib/messages.c:494 #, fuzzy msgid "x Handle source, event and other records" msgstr "X Inkomoko Icyabaye Na Ikindi Ibyabitswe" #: src/gedlib/messages.c:497 #, fuzzy msgid "What utility do you want to perform?" msgstr "Kuri" #: src/gedlib/messages.c:498 #, fuzzy msgid "s Save the database in a GEDCOM file" msgstr "S Kubika i Ububikoshingiro in a IDOSIYE" #: src/gedlib/messages.c:499 #, fuzzy msgid "r Read in data from a GEDCOM file" msgstr "R in Ibyatanzwe Bivuye a IDOSIYE" #: src/gedlib/messages.c:500 #, fuzzy msgid "R Pick a GEDCOM file and read in" msgstr "a IDOSIYE Na Gusoma in" #: src/gedlib/messages.c:501 #, fuzzy msgid "k Find a person's key value" msgstr "K a Urufunguzo Agaciro" #: src/gedlib/messages.c:502 #, fuzzy msgid "i Identify a person from key value" msgstr "i a Bivuye Urufunguzo Agaciro" #: src/gedlib/messages.c:503 #, fuzzy msgid "d Show database statistics" msgstr "D Ububikoshingiro Sitatisitiki" #: src/gedlib/messages.c:504 #, fuzzy msgid "m Show memory statistics" msgstr "M Ububiko Sitatisitiki" #: src/gedlib/messages.c:505 #, fuzzy msgid "e Edit the place abbreviation file" msgstr "E i Impine IDOSIYE" #: src/gedlib/messages.c:506 #, fuzzy msgid "o Edit the user options file" msgstr "o i Ukoresha: Amahitamo IDOSIYE" #: src/gedlib/messages.c:509 #, fuzzy msgid "What activity do you want to perform?" msgstr "Umurimo Kuri" #: src/gedlib/messages.c:510 #, fuzzy msgid "s Browse source records" msgstr "S Inkomoko Ibyabitswe" #: src/gedlib/messages.c:511 #, fuzzy msgid "e Browse event records" msgstr "E Icyabaye Ibyabitswe" #: src/gedlib/messages.c:512 #, fuzzy msgid "x Browse other records" msgstr "X Ikindi Ibyabitswe" #: src/gedlib/messages.c:513 #, fuzzy msgid "1 Add a source record to the database" msgstr "1. a Inkomoko Icyabitswe Kuri i Ububikoshingiro" #: src/gedlib/messages.c:514 #, fuzzy msgid "2 Edit source record from the database" msgstr "2. Inkomoko Icyabitswe Bivuye i Ububikoshingiro" #: src/gedlib/messages.c:515 #, fuzzy msgid "3 Add an event record to the database" msgstr "3. Icyabaye Icyabitswe Kuri i Ububikoshingiro" #: src/gedlib/messages.c:516 #, fuzzy msgid "4 Edit event record from the database" msgstr "4. Icyabaye Icyabitswe Bivuye i Ububikoshingiro" #: src/gedlib/messages.c:517 #, fuzzy msgid "5 Add an other record to the database" msgstr "5 Ikindi Icyabitswe Kuri i Ububikoshingiro" #: src/gedlib/messages.c:518 #, fuzzy msgid "6 Edit other record from the database" msgstr "6 Ikindi Icyabitswe Bivuye i Ububikoshingiro" #: src/gedlib/messages.c:521 msgid "Translation Tables" msgstr "" #: src/gedlib/messages.c:522 #, fuzzy msgid "e edit individual tables (in db)" msgstr "E Guhindura Imbonerahamwe in DB" #: src/gedlib/messages.c:523 #, fuzzy msgid "l load a table from a file (into db)" msgstr "L Ibirimo a imbonerahamwe# Bivuye a IDOSIYE DB" #: src/gedlib/messages.c:524 #, fuzzy msgid "s save a table to a file (from db)" msgstr "S Kubika a imbonerahamwe# Kuri a IDOSIYE Bivuye DB" #: src/gedlib/messages.c:525 #, fuzzy msgid "x export all tables (from db to files)" msgstr "X Kohereza Byose Imbonerahamwe Bivuye DB Kuri Idosiye" #: src/gedlib/messages.c:526 #, fuzzy msgid "i import all tables (from files into db)" msgstr "i Kuzana Byose Imbonerahamwe Bivuye Idosiye DB" #: src/gedlib/messages.c:527 #, fuzzy msgid "export/import directory:" msgstr "Kohereza Kuzana bushyinguro" #: src/gedlib/messages.c:530 #, fuzzy msgid "Which character mapping do you want to edit?" msgstr "Inyuguti Igereranya Kuri Guhindura" #: src/gedlib/messages.c:531 #, fuzzy msgid "Which character mapping do you want to save?" msgstr "Inyuguti Igereranya Kuri Kubika" #: src/gedlib/messages.c:534 msgid "Not implemented yet" msgstr "" #: src/gedlib/messages.c:537 #, fuzzy msgid "What do you want to add?" msgstr "Kuri Kongeramo" #: src/gedlib/messages.c:538 #, fuzzy msgid "p Person - add new person to the database" msgstr "P Kongeramo Gishya Kuri i Ububikoshingiro" #: src/gedlib/messages.c:539 #, fuzzy msgid "f Family - create family record from one or two spouses" msgstr "F Kurema Icyabitswe Bivuye Cyangwa" #: src/gedlib/messages.c:540 #, fuzzy msgid "c Child - add a child to an existing family" msgstr "C Kongeramo a Kuri" #: src/gedlib/messages.c:541 #, fuzzy msgid "s Spouse - add a spouse to an existing family" msgstr "S Kongeramo a Kuri" #: src/gedlib/messages.c:544 #, fuzzy msgid "What do you want to remove?" msgstr "Kuri Gukuraho..." #: src/gedlib/messages.c:545 #, fuzzy msgid "c Child - remove a child from his/her family" msgstr "C Gukuraho... a Bivuye" #: src/gedlib/messages.c:546 #, fuzzy msgid "s Spouse - remove a spouse from a family" msgstr "S Gukuraho... a Bivuye a" #: src/gedlib/messages.c:547 #, fuzzy msgid "i Individual - remove a person completely" msgstr "i Gukuraho... a" #: src/gedlib/messages.c:548 #, fuzzy msgid "f Family - remove a family completely" msgstr "F Gukuraho... a" #: src/gedlib/messages.c:549 #, fuzzy msgid "o Other - remove other record completely" msgstr "i Gukuraho... a" #: src/gedlib/messages.c:552 #, fuzzy msgid "How would you like to find a record?" msgstr "nka Kuri Gushaka a Icyabitswe" #: src/gedlib/messages.c:555 #, fuzzy msgid "Performing full name scan" msgstr "Izina: Gusikana" #: src/gedlib/messages.c:556 #, fuzzy msgid "Performing name fragment scan" msgstr "Izina: Gusikana" #: src/gedlib/messages.c:557 #, fuzzy msgid "Performing refn scan" msgstr "Gusikana" #: src/gedlib/messages.c:558 #, fuzzy msgid "Performing source scan" msgstr "Gusikana" #: src/gedlib/messages.c:559 #, fuzzy msgid "No records found in scan" msgstr "Ibyabitswe Byabonetse in Gusikana" #: src/gedlib/messages.c:562 msgid "abt %1" msgstr "" # offmgr/source\offapp\intro\intro.hrc:TEXT_DEFAULTABOUT.text #: src/gedlib/messages.c:563 #, fuzzy msgid "about %1" msgstr "Ibyerekeye %1" #: src/gedlib/messages.c:564 msgid "est %1" msgstr "" #: src/gedlib/messages.c:565 msgid "estimated %1" msgstr "" #: src/gedlib/messages.c:566 msgid "cal %1" msgstr "" #: src/gedlib/messages.c:567 msgid "calculated %1" msgstr "" #: src/gedlib/messages.c:568 msgid "fr %1" msgstr "" #: src/gedlib/messages.c:569 #, fuzzy msgid "from %1" msgstr "Kuva:" # sw/source\ui\envelp\mailmrge.src:DLG_MAILMERGE.FT_BIS.text #: src/gedlib/messages.c:570 src/gedlib/messages.c:571 #, fuzzy msgid "to %1" msgstr "Kuri:" #: src/gedlib/messages.c:572 #, fuzzy msgid "fr %1 to %2" msgstr "Kuri" #: src/gedlib/messages.c:573 #, fuzzy msgid "from %1 to %2" msgstr "Bivuye Kuri" #: src/gedlib/messages.c:574 msgid "bef %1" msgstr "" #: src/gedlib/messages.c:575 #, fuzzy msgid "before %1" msgstr "Mbere" #: src/gedlib/messages.c:576 msgid "aft %1" msgstr "" #: src/gedlib/messages.c:577 #, fuzzy msgid "after %1" msgstr "Nyuma" #: src/gedlib/messages.c:578 #, fuzzy msgid "bet %1 and %2" msgstr "Na" #: src/gedlib/messages.c:579 #, fuzzy msgid "between %1 and %2" msgstr "hagati Na" #: src/gedlib/messages.c:582 #, fuzzy msgid "B.C." msgstr "C." #: src/gedlib/messages.c:584 msgid "BC" msgstr "" #: src/gedlib/messages.c:586 #, fuzzy msgid "B.C.E." msgstr "C. E." #: src/gedlib/messages.c:588 msgid "BCE" msgstr "" #: src/gedlib/messages.c:590 #, fuzzy msgid "A.D." msgstr "A." #: src/gedlib/messages.c:592 msgid "AD" msgstr "" #: src/gedlib/messages.c:594 #, fuzzy msgid "C.E." msgstr "C. E." #: src/gedlib/messages.c:596 msgid "CE" msgstr "" # basctl/source\basicide\basidesh.src:RID_IMGBTN_REMOVEWATCH.text #: src/gedlib/messages.c:599 #, fuzzy msgid "%1J" msgstr "%1J" #: src/gedlib/messages.c:601 msgid "%1 HEB" msgstr "" #: src/gedlib/messages.c:603 msgid "%1 FR" msgstr "" #: src/gedlib/messages.c:605 msgid "%1 AUC" msgstr "" # sc/source\ui\src\autofmt.src:RID_SCDLG_AUTOFORMAT.STR_JAN.text #: src/gedlib/messages.c:607 #, fuzzy msgid "jan" msgstr "Mutarama" # wizards/source\schedule\schedule.src:dlgMonth.text #: src/gedlib/messages.c:608 #, fuzzy msgid "january" msgstr "Mutarama" # sc/source\ui\src\autofmt.src:RID_SCDLG_AUTOFORMAT.STR_FEB.text #: src/gedlib/messages.c:609 #, fuzzy msgid "feb" msgstr "Gashyantare" # wizards/source\schedule\schedule.src:dlgMonth+1.text #: src/gedlib/messages.c:610 #, fuzzy msgid "february" msgstr "Gashyantare" # sc/source\ui\src\autofmt.src:RID_SCDLG_AUTOFORMAT.STR_MAR.text #: src/gedlib/messages.c:611 #, fuzzy msgid "mar" msgstr "Werurwe" # wizards/source\schedule\schedule.src:dlgMonth+2.text #: src/gedlib/messages.c:612 #, fuzzy msgid "march" msgstr "Werurwe" # 246 #: src/gedlib/messages.c:613 #, fuzzy msgid "apr" msgstr "Mat" # wizards/source\schedule\schedule.src:dlgMonth+3.text #: src/gedlib/messages.c:614 #, fuzzy msgid "april" msgstr "Mata" #: src/gedlib/messages.c:616 #, fuzzy msgid "**may" msgstr "**Gic" # wizards/source\schedule\schedule.src:dlgMonth+4.text #: src/gedlib/messages.c:617 #, fuzzy msgid "may" msgstr "Gicurasi" # 3329 #: src/gedlib/messages.c:618 #, fuzzy msgid "jun" msgstr "Kam" # wizards/source\schedule\schedule.src:dlgMonth+5.text #: src/gedlib/messages.c:619 #, fuzzy msgid "june" msgstr "Kamena" # 3327 #: src/gedlib/messages.c:620 #, fuzzy msgid "jul" msgstr "Nyak.( anga)" # wizards/source\schedule\schedule.src:dlgMonth+6.text #: src/gedlib/messages.c:621 #, fuzzy msgid "july" msgstr "Nyakanga" # 366 #: src/gedlib/messages.c:622 #, fuzzy msgid "aug" msgstr "kan." # wizards/source\schedule\schedule.src:dlgMonth+7.text #: src/gedlib/messages.c:623 #, fuzzy msgid "august" msgstr "Kanama" # 5480 #: src/gedlib/messages.c:624 #, fuzzy msgid "sep" msgstr "Itandukanya" # wizards/source\schedule\schedule.src:dlgMonth+8.text #: src/gedlib/messages.c:625 #, fuzzy msgid "september" msgstr "Nzeri" # 4370 #: src/gedlib/messages.c:626 #, fuzzy msgid "oct" msgstr "ukw." # wizards/source\schedule\schedule.src:dlgMonth+9.text #: src/gedlib/messages.c:627 #, fuzzy msgid "october" msgstr "Ukwakira" # 4262 #: src/gedlib/messages.c:628 #, fuzzy msgid "nov" msgstr "ugushyingo" # wizards/source\schedule\schedule.src:dlgMonth+10.text #: src/gedlib/messages.c:629 #, fuzzy msgid "november" msgstr "Ugushyingo" # 1483 #: src/gedlib/messages.c:630 #, fuzzy msgid "dec" msgstr "Ukub.( Ukuboza)" # wizards/source\schedule\schedule.src:dlgMonth+11.text #: src/gedlib/messages.c:631 #, fuzzy msgid "december" msgstr "Ukuboza" #: src/gedlib/messages.c:633 msgid "tsh" msgstr "" #: src/gedlib/messages.c:634 msgid "tishri" msgstr "" #: src/gedlib/messages.c:635 msgid "csh" msgstr "" #: src/gedlib/messages.c:636 msgid "cheshvan" msgstr "" #: src/gedlib/messages.c:637 msgid "ksl" msgstr "" #: src/gedlib/messages.c:638 msgid "kislev" msgstr "" #: src/gedlib/messages.c:639 msgid "tvt" msgstr "" #: src/gedlib/messages.c:640 msgid "tevet" msgstr "" #: src/gedlib/messages.c:641 msgid "shv" msgstr "" #: src/gedlib/messages.c:642 msgid "shevat" msgstr "" #: src/gedlib/messages.c:643 msgid "adr" msgstr "" #: src/gedlib/messages.c:644 msgid "adar" msgstr "" #: src/gedlib/messages.c:645 msgid "ads" msgstr "" #: src/gedlib/messages.c:646 msgid "adar sheni" msgstr "" #: src/gedlib/messages.c:647 msgid "nsn" msgstr "" #: src/gedlib/messages.c:648 msgid "nisan" msgstr "" #: src/gedlib/messages.c:649 msgid "iyr" msgstr "" #: src/gedlib/messages.c:650 msgid "iyar" msgstr "" #: src/gedlib/messages.c:651 msgid "svn" msgstr "" #: src/gedlib/messages.c:652 msgid "sivan" msgstr "" #: src/gedlib/messages.c:653 msgid "tmz" msgstr "" #: src/gedlib/messages.c:654 msgid "tamuz" msgstr "" #: src/gedlib/messages.c:655 msgid "aav" msgstr "" #: src/gedlib/messages.c:656 msgid "av" msgstr "" #: src/gedlib/messages.c:657 msgid "ell" msgstr "" #: src/gedlib/messages.c:658 msgid "elul" msgstr "" #: src/gedlib/messages.c:660 msgid "vend" msgstr "" #: src/gedlib/messages.c:661 msgid "vendemiaire" msgstr "" #: src/gedlib/messages.c:662 msgid "brum" msgstr "" #: src/gedlib/messages.c:663 msgid "brumaire" msgstr "" #: src/gedlib/messages.c:664 msgid "frim" msgstr "" #: src/gedlib/messages.c:665 msgid "frimaire" msgstr "" #: src/gedlib/messages.c:666 msgid "nivo" msgstr "" #: src/gedlib/messages.c:667 msgid "nivose" msgstr "" #: src/gedlib/messages.c:668 msgid "pluv" msgstr "" #: src/gedlib/messages.c:669 msgid "pluviose" msgstr "" #: src/gedlib/messages.c:670 msgid "vent" msgstr "" #: src/gedlib/messages.c:671 msgid "ventose" msgstr "" #: src/gedlib/messages.c:672 msgid "germ" msgstr "" #: src/gedlib/messages.c:673 msgid "germinal" msgstr "" #: src/gedlib/messages.c:674 msgid "flor" msgstr "" #: src/gedlib/messages.c:675 msgid "floreal" msgstr "" #: src/gedlib/messages.c:676 msgid "prai" msgstr "" #: src/gedlib/messages.c:677 msgid "prairial" msgstr "" #: src/gedlib/messages.c:678 msgid "mess" msgstr "" #: src/gedlib/messages.c:679 msgid "messidor" msgstr "" #: src/gedlib/messages.c:680 msgid "ther" msgstr "" #: src/gedlib/messages.c:681 msgid "thermidor" msgstr "" #: src/gedlib/messages.c:682 msgid "fruc" msgstr "" #: src/gedlib/messages.c:683 msgid "fructidor" msgstr "" #: src/gedlib/messages.c:684 msgid "comp" msgstr "" #: src/gedlib/messages.c:685 msgid "jour_complementairs" msgstr "" #: src/gedlib/node.c:610 msgid "NO NAME" msgstr "" #: src/gedlib/node.c:1167 #, c-format msgid "Node memory leaks:" msgstr "" #: src/gedlib/node.c:1170 src/gedlib/record.c:361 src/interp/pvalalloc.c:301 #, c-format msgid "%d item leaked" msgid_plural "%d items leaked" msgstr[0] "" msgstr[1] "" #: src/gedlib/record.c:358 #, c-format msgid "Record memory leaks:" msgstr "" #: src/gedlib/remove.c:250 msgid "Families may not yet be removed in this fashion." msgstr "" #. TRANSLATORS: Character set conversion from external editor to database internal #: src/gedlib/translat.c:100 #, fuzzy msgid "Editor to Internal" msgstr "E Kuri Igereranya" #. TRANSLATORS: Character set conversion from database internal to external editor #: src/gedlib/translat.c:102 #, fuzzy msgid "Internal to Editor" msgstr "M Kuri Igereranya" #: src/gedlib/translat.c:103 #, fuzzy msgid "GEDCOM to Internal" msgstr "i Kuri Igereranya" #: src/gedlib/translat.c:104 #, fuzzy msgid "Internal to GEDCOM" msgstr "X Kuri Igereranya" #: src/gedlib/translat.c:105 #, fuzzy msgid "Display to Internal" msgstr "g Kuri Igereranya" #: src/gedlib/translat.c:106 #, fuzzy msgid "Internal to Display" msgstr "D Kuri Igereranya" #: src/gedlib/translat.c:107 #, fuzzy msgid "Report to Internal" msgstr "E Kuri Igereranya" #: src/gedlib/translat.c:108 #, fuzzy msgid "Internal to Report" msgstr "R Kuri Igereranya" #. TRANSLATORS: key for "Editor to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:119 msgid "menu|trantable|e" msgstr "" #. TRANSLATORS: key for "Internal to Editor" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:122 msgid "menu|trantable|m" msgstr "" #. TRANSLATORS: key for "GEDCOM to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:125 msgid "menu|trantable|i" msgstr "" #. TRANSLATORS: key for "Internal to GEDCOM" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:128 msgid "menu|trantable|x" msgstr "" #. TRANSLATORS: key for "Display to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:131 msgid "menu|trantable|g" msgstr "" #. TRANSLATORS: key for "Internal to Display" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:134 msgid "menu|trantable|d" msgstr "" #. TRANSLATORS: key for "Report to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:137 msgid "menu|trantable|p" msgstr "" #. TRANSLATORS: key for "Internal to Report" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:140 msgid "menu|trantable|r" msgstr "" #. TRANSLATORS: db internal translation table note for tt menu #: src/gedlib/translat.c:473 #, c-format msgid " (dbint tt: %s)" msgstr "" #: src/gedlib/valid.c:75 #, fuzzy msgid "This person record does not have a name line." msgstr "Icyabitswe OYA a Izina: Umurongo" #: src/gedlib/xlat.c:347 #, fuzzy, c-format msgid "ttpath get_conversion_dyntt:from <%s> to <%s>: %s" msgstr "GUHINDURA Bivuye Kuri" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 msgid "succeeded" msgstr "" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 msgid "failed" msgstr "" #: src/gedlib/xlat.c:369 #, c-format msgid "ttpath get_subcoding_dyntt from <%s> to subcode <%s>: %s" msgstr "" #: src/gedlib/xlat.c:435 msgid "No TTPATH config variable" msgstr "" #: src/gedlib/xlat.c:464 #, c-format msgid "ttpath checking dir <%s>" msgstr "" #: src/gedlib/xlat.c:478 #, fuzzy, c-format msgid "ttpath file <%s> typed as %d" msgstr "IDOSIYE ku Umurongo" #: src/gedlib/xlat.c:690 #, fuzzy msgid "(no conversion)" msgstr "Ihindurangero" # sw/source\ui\utlui\initui.src:RID_SW_SHELLRES.STR_FIELD_FIXED.text #. TRANSLATORS: steps in a chain of codeset conversions, eg, Editor-to-Internal #: src/gedlib/xlat.c:713 #, fuzzy, c-format msgid "%d step" msgid_plural "%d steps" msgstr[0] "%dbidahinduka)" msgstr[1] "%dbidahinduka)" #: src/gedlib/xreffile.c:400 #, c-format msgid "Corrupt DELETESET %c" msgstr "" #: src/gedlib/xreffile.c:425 #, c-format msgid "Tried to add already-deleted record (%ld) to xref (%c)!" msgstr "" #: src/interp/alloc.c:798 #, fuzzy, c-format msgid "Error: file \"%s\": line %d: " msgstr "IDOSIYE Umurongo" #: src/interp/alloc.c:903 #, fuzzy, c-format msgid "%s: the arg must be an integer." msgstr "%s:i Umubare wuzuye" #: src/interp/alloc.c:904 #, fuzzy, c-format msgid "%s: the arg #%s must be an integer." msgstr "%s:i Umubare wuzuye" #: src/interp/alloc.c:905 #, fuzzy, c-format msgid "%s: the arg #%s must be a float." msgstr "%s:i a Kureremba" #: src/interp/alloc.c:906 #, fuzzy, c-format msgid "%s: the arg must be a string." msgstr "%s:i a Ikurikiranyanyuguti" #: src/interp/alloc.c:907 #, fuzzy, c-format msgid "%s: the arg #%s must be a string." msgstr "%s:i a Ikurikiranyanyuguti" #: src/interp/alloc.c:908 #, fuzzy, c-format msgid "%s: null arg not permissible." msgstr "%s:NTAGIHARI OYA" #: src/interp/alloc.c:909 #, fuzzy, c-format msgid "%s: the arg must be a filename." msgstr "%s:i a Izina ry'idosiye:" #: src/interp/alloc.c:910 #, fuzzy, c-format msgid "%s: the arg must be a node or string." msgstr "%s:i a Cyangwa Ikurikiranyanyuguti" #: src/interp/alloc.c:911 #, fuzzy, c-format msgid "%s: the arg must be a person." msgstr "%s:i a" #: src/interp/alloc.c:912 #, fuzzy, c-format msgid "%s: the arg #%s must be a person." msgstr "%s:i a" #: src/interp/alloc.c:913 #, fuzzy, c-format msgid "%s: the arg must be a family." msgstr "%s:i a" #: src/interp/alloc.c:914 #, fuzzy, c-format msgid "%s: the arg #%s must be a family." msgstr "%s:i a" #: src/interp/alloc.c:915 #, fuzzy, c-format msgid "%s: the arg #%s must be a record." msgstr "%s:i a Icyabitswe" #: src/interp/alloc.c:916 #, fuzzy, c-format msgid "%s: the arg must be a node." msgstr "%s:i a" #: src/interp/alloc.c:917 #, fuzzy, c-format msgid "%s: the arg #%s must be a node." msgstr "%s:i a" #: src/interp/alloc.c:918 #, fuzzy, c-format msgid "%s: the arg must be a variable." msgstr "%s:i a IMPINDURAGACIRO" #: src/interp/alloc.c:919 #, fuzzy, c-format msgid "%s: the arg #%s must be a variable." msgstr "%s:i a IMPINDURAGACIRO" #: src/interp/alloc.c:920 #, fuzzy, c-format msgid "%s: the arg #%s must be a boolean." msgstr "%s:i a Icyungo" #: src/interp/alloc.c:921 #, fuzzy, c-format msgid "%s: the arg must be a list." msgstr "%s:i a Urutonde" #: src/interp/alloc.c:922 #, fuzzy, c-format msgid "%s: the arg #%s must be a list." msgstr "%s:i a Urutonde" #: src/interp/alloc.c:923 #, fuzzy, c-format msgid "%s: the arg #%s must be a table." msgstr "%s:i a imbonerahamwe#" #: src/interp/alloc.c:924 #, fuzzy, c-format msgid "%s: the arg must be a set." msgstr "%s:i a Urutonde" #: src/interp/alloc.c:925 #, fuzzy, c-format msgid "%s: the arg #%s must be a set." msgstr "%s:i a Urutonde" #: src/interp/alloc.c:926 #, fuzzy, c-format msgid "%s: Bad arguments" msgstr "%s:ingingo" #: src/interp/alloc.c:927 #, fuzzy, c-format msgid "%s: the arg had a major error." msgstr "%s:i a Ikosa" #: src/interp/alloc.c:928 #, fuzzy, c-format msgid "%s: the arg #%s had a major error." msgstr "%s:i a Ikosa" #: src/interp/alloc.c:929 #, fuzzy, c-format msgid "%s: the arg #%s would cause an arithmetic exception." msgstr "%s:i Umubare wuzuye" #: src/interp/builtin.c:111 #, fuzzy msgid "Enter integer for program" msgstr "Umubare wuzuye kugirango Porogaramu" #: src/interp/builtin.c:181 #, fuzzy msgid "Identify person for program:" msgstr "kugirango Porogaramu" #: src/interp/builtin.c:206 #, fuzzy msgid "Enter a spouse from family." msgstr "a Bivuye" #: src/interp/builtin.c:207 #, fuzzy msgid "Enter a sibling from family." msgstr "a Bivuye" #: src/interp/builtin.c:240 #, fuzzy msgid "Identify list of persons for program:" msgstr "Urutonde Bya kugirango Porogaramu" #: src/interp/builtin.c:329 #, fuzzy msgid "name: person does not have a name" msgstr "Izina: OYA a Izina:" #: src/interp/builtin.c:385 #, fuzzy msgid "fullname: person does not have a name" msgstr "OYA a Izina:" #: src/interp/builtin.c:412 #, fuzzy msgid "surname: person does not have a name" msgstr "OYA a Izina:" #: src/interp/builtin.c:437 #, fuzzy msgid "soundex: person does not have a name" msgstr "OYA a Izina:" #: src/interp/builtin.c:500 #, fuzzy, c-format msgid "Bad escape code at offset %d in bytecode string <%s>" msgstr "ITEGEKONGENGA ku Nta- boneza in Ikurikiranyanyuguti" #: src/interp/builtin.c:643 #, fuzzy msgid "(givens) person does not have a name" msgstr "(OYA a Izina:" #: src/interp/builtin.c:670 #, fuzzy, c-format msgid "set(%s, ) is invalid" msgstr "Gushyiraho ni Sibyo" #: src/interp/builtin.c:1191 #, fuzzy msgid "first" msgstr "Itangira" #: src/interp/builtin.c:1191 msgid "second" msgstr "isegonda" #: src/interp/builtin.c:1191 msgid "third" msgstr "" #: src/interp/builtin.c:1191 msgid "fourth" msgstr "" #: src/interp/builtin.c:1191 msgid "fifth" msgstr "" #: src/interp/builtin.c:1192 msgid "sixth" msgstr "" #: src/interp/builtin.c:1192 msgid "seventh" msgstr "" #: src/interp/builtin.c:1192 msgid "eighth" msgstr "" #: src/interp/builtin.c:1192 msgid "ninth" msgstr "" #: src/interp/builtin.c:1192 msgid "tenth" msgstr "" #: src/interp/builtin.c:1193 msgid "eleventh" msgstr "" #: src/interp/builtin.c:1193 msgid "twelfth" msgstr "" # basctl/source\basicide\basidesh.src:RID_IMGBTN_REMOVEWATCH.text #: src/interp/builtin.c:1210 #, fuzzy, c-format msgid "%ldth" msgstr "%dth" # officecfg/registry\schema\org\openoffice\Office\Writer.xcs:....AlignmentType.Position..0.text #: src/interp/builtin.c:1220 #, fuzzy msgid "zero" msgstr "Zeru" #: src/interp/builtin.c:1220 msgid "one" msgstr "" #: src/interp/builtin.c:1220 msgid "two" msgstr "" #: src/interp/builtin.c:1220 msgid "three" msgstr "" #: src/interp/builtin.c:1220 msgid "four" msgstr "" #: src/interp/builtin.c:1220 msgid "five" msgstr "" #: src/interp/builtin.c:1221 msgid "six" msgstr "" #: src/interp/builtin.c:1221 msgid "seven" msgstr "" #: src/interp/builtin.c:1221 msgid "eight" msgstr "" #: src/interp/builtin.c:1221 msgid "nine" msgstr "" #: src/interp/builtin.c:1221 msgid "ten" msgstr "" #: src/interp/builtin.c:1222 msgid "eleven" msgstr "" #: src/interp/builtin.c:1222 msgid "twelve" msgstr "" #: src/interp/builtin.c:2173 msgid "the arg to empty is not a list, table or set" msgstr "" #: src/interp/builtin.c:2283 msgid "the arg to length is not a list, table or set" msgstr "" #: src/interp/builtin.c:2470 msgid "He" msgstr "" #: src/interp/builtin.c:2470 msgid "he" msgstr "" #: src/interp/builtin.c:2470 msgid "His" msgstr "" #: src/interp/builtin.c:2470 msgid "his" msgstr "" #: src/interp/builtin.c:2470 msgid "him" msgstr "" #: src/interp/builtin.c:2472 msgid "She" msgstr "" #: src/interp/builtin.c:2472 msgid "she" msgstr "" #: src/interp/builtin.c:2472 msgid "Her" msgstr "" #: src/interp/builtin.c:2472 msgid "her" msgstr "" #: src/interp/builtin.c:2472 msgid "her_" msgstr "" #: src/interp/builtin.c:2850 #, fuzzy msgid "(trimname) person does not have a name" msgstr "(OYA a Izina:" #: src/interp/builtin.c:2940 msgid "Sunday" msgstr "" #: src/interp/builtin.c:2940 msgid "Monday" msgstr "" #: src/interp/builtin.c:2940 msgid "Tuesday" msgstr "" #: src/interp/builtin.c:2941 msgid "Wednesday" msgstr "" #: src/interp/builtin.c:2941 msgid "Thursday" msgstr "" #: src/interp/builtin.c:2941 msgid "Friday" msgstr "" #: src/interp/builtin.c:2941 msgid "Saturday" msgstr "" #: src/interp/eval.c:244 #, c-format msgid "Undefined func: %s" msgstr "" #: src/interp/eval.c:246 #, fuzzy, c-format msgid "Ambiguous call to func: %s" msgstr "Kuri" #: src/interp/interp.c:247 #, fuzzy, c-format msgid "Report not found: %s " msgstr "OYA Byabonetse" #: src/interp/interp.c:258 #, fuzzy, c-format msgid "Error: file <%s> not found" msgstr "IDOSIYE OYA Byabonetse" #: src/interp/interp.c:316 #, fuzzy msgid "Program contains errors.\n" msgstr "Kirimo Amakosa" #: src/interp/interp.c:323 #, fuzzy msgid "Program needs a starting procedure.\n" msgstr "a" #: src/interp/interp.c:340 #, fuzzy, c-format msgid "Proc %s must be called with %d (not %d) parameters." msgstr "Na: OYA Ibigenga" #: src/interp/interp.c:355 #, fuzzy msgid "Program is running..." msgstr "ni" #: src/interp/interp.c:410 #, fuzzy msgid "Program was run successfully.\n" msgstr "Gukoresha" #: src/interp/interp.c:414 #, fuzzy msgid "Program was cancelled.\n" msgstr "Kureka" #: src/interp/interp.c:416 #, fuzzy msgid "Program was not run because of errors.\n" msgstr "OYA Gukoresha Bya Amakosa" #: src/interp/interp.c:506 #, fuzzy, c-format msgid "Error: file <%s> not found: %s\n" msgstr "IDOSIYE OYA Byabonetse" #: src/interp/interp.c:538 #, fuzzy, c-format msgid "" "\n" "Report duration %s (ui duration %s)\n" msgstr "Igihe- ngombwa Igihe- ngombwa" #: src/interp/interp.c:610 #, fuzzy, c-format msgid "identifier: %s should be a string\n" msgstr "Ikiranga a" #: src/interp/interp.c:1778 #, c-format msgid "Undefined proc: %s" msgstr "" #: src/interp/interp.c:1780 #, fuzzy, c-format msgid "Ambiguous call to proc: %s" msgstr "Kuri" #: src/interp/interp.c:2017 #, fuzzy, c-format msgid "Duplicate proc %s (lines %d and %d) in report: %s" msgstr "Imirongo Na in Icyegeranyo" #: src/interp/interp.c:2047 #, fuzzy, c-format msgid "Duplicate func %s (lines %d and %d) in report: %s" msgstr "Imirongo Na in Icyegeranyo" #: src/interp/interp.c:2110 #, fuzzy msgid "This report requires a newer program to run\n" msgstr "Icyegeranyo a Porogaramu Kuri" #: src/interp/interp.c:2166 #, c-format msgid "Program forgot to unlock %d record" msgid_plural "Program forgot to unlock %d records" msgstr[0] "" msgstr[1] "" #: src/interp/intrpseq.c:303 msgid "missing or incorrect value for sort" msgstr "" #: src/interp/lex.c:219 #, c-format msgid "" "String constant overflowing internal buffer tokbuf len=%d, file: %s, start " "line: %ld" msgstr "" #: src/interp/more.c:648 #, fuzzy msgid "Please choose from the following list." msgstr "Guhitamo Bivuye i Urutonde" #: src/interp/more.c:685 #, fuzzy msgid "Illegal type found in list in menuchoose" msgstr "Ubwoko Byabonetse in Urutonde in" #: src/interp/more.c:976 msgid "error evaluating arg to lock" msgstr "" #: src/interp/more.c:982 msgid "null arg in lock" msgstr "" #: src/interp/more.c:993 msgid "node passed to lock must be inside a record" msgstr "" #: src/interp/more.c:999 #, fuzzy msgid "the arg to lock must be a record or node" msgstr "i Kuri a Cyangwa" #: src/interp/more.c:1007 msgid "Error: there are 999,999 locks on arg to lock" msgstr "" #: src/interp/more.c:1027 msgid "error evaluating arg to unlock" msgstr "" #: src/interp/more.c:1033 msgid "null arg in unlock" msgstr "" #: src/interp/more.c:1044 #, fuzzy msgid "node passed to unlock must be inside a record" msgstr "i Kuri a Cyangwa" #: src/interp/more.c:1050 #, fuzzy msgid "the arg to unlock must be a record or node" msgstr "i Kuri a Cyangwa" #: src/interp/pvalalloc.c:295 #, c-format msgid "PVALUE memory leak report:" msgstr "" #: src/interp/pvalmath.c:70 #, c-format msgid "Nonnumeric type to operation %s: %s" msgstr "" #: src/interp/pvalmath.c:85 #, fuzzy, c-format msgid "Illegal value to operation %s: %s" msgstr "Kuri" #: src/interp/pvalmath.c:411 #, c-format msgid "%s: not compatible numeric types: %s and %s" msgstr "" #: src/interp/pvalue.c:810 #, c-format msgid "%s: Incomparable types: %s and %s" msgstr "" #: src/interp/pvalue.c:907 msgid "NOT PVALUE: NULL!" msgstr "" #: src/interp/pvalue.c:911 #, c-format msgid "NOT PVALUE: invalid type=%d)!" msgstr "" # sw/source\ui\utlui\initui.src:RID_SW_SHELLRES.STR_FIELD_FIXED.text #: src/interp/pvalue.c:949 #, fuzzy, c-format msgid "%d item" msgid_plural "%d items" msgstr[0] "%dbidahinduka)" msgstr[1] "%dbidahinduka)" #: src/interp/pvalue.c:956 #, fuzzy, c-format msgid "%d entry" msgid_plural "%d entries" msgstr[0] "%dIkosa rya" msgstr[1] "%dIkosa rya" #: src/interp/pvalue.c:963 #, fuzzy, c-format msgid "%d record" msgid_plural "%d records" msgstr[0] "%dIkosa rya" msgstr[1] "%dIkosa rya" #: src/interp/pvalue.c:970 #, fuzzy, c-format msgid "%d element" msgid_plural "%d elements" msgstr[0] "%eIcyabaye" msgstr[1] "%eIcyabaye" #: src/interp/progerr.c:125 #, fuzzy msgid "Enter d for debugger, q to quit" msgstr "D kugirango Q Kuri Kuvamo" #: src/interp/progerr.c:140 #, c-format msgid "Display local (%d var)" msgid_plural "Display locals (%d vars)" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:146 #, c-format msgid "Display global (%d var)" msgid_plural "Display globals (%d vars)" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:151 #, c-format msgid "Call stack has %d higher level" msgid_plural "Call stack has %d higher levels" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:154 #, fuzzy msgid " Go up one level" msgstr "urwego" #: src/interp/progerr.c:160 #, c-format msgid "Call stack has %d lower level" msgid_plural "Call stack has %d lower levels" msgstr[0] "" msgstr[1] "" #: src/interp/progerr.c:164 #, fuzzy msgid " Go down one level" msgstr "urwego" #: src/interp/progerr.c:169 msgid "Quit debugger" msgstr "" #: src/interp/progerr.c:171 msgid "Report debugger" msgstr "" #: src/interp/progerr.c:175 #, fuzzy msgid "Local variables" msgstr "Ibihinduka" #: src/interp/progerr.c:178 #, fuzzy msgid "Global variables" msgstr "Ibihinduka" #: src/interp/progerr.c:338 #, fuzzy msgid "Report cancelled" msgstr "Kureka" #: src/interp/progerr.c:346 #, fuzzy msgid "Report file: " msgstr "IDOSIYE" #: src/interp/progerr.c:355 #, fuzzy, c-format msgid "Parsing Error at line %d: " msgstr "ku Umurongo" #: src/interp/progerr.c:357 #, fuzzy, c-format msgid "Runtime Error at line %d: " msgstr "ku Umurongo" #: src/interp/progerr.c:360 msgid "Aborting: " msgstr "" #: src/interp/rassa.c:242 #, fuzzy, c-format msgid "Could not open file %s" msgstr "OYA Gufungura IDOSIYE" #: src/interp/rassa.c:271 #, fuzzy msgid "Report stopping due to error opening output file" msgstr "Kuri Ikosa Gufungura%S Ibisohoka IDOSIYE" #: src/interp/rassa.c:273 #, fuzzy msgid "Report stopping due to lack of output file" msgstr "Kuri Bya Ibisohoka IDOSIYE" #: src/interp/rassa.c:330 #, fuzzy msgid "illegal call to pos." msgstr "Kuri" #: src/interp/rptsort.c:104 #, fuzzy msgid "First argument to (r)sort must be list or array" msgstr "Kuri R Ishungura Urutonde Cyangwa Imbonerahamwe" #: src/interp/rptsort.c:117 src/interp/rptsort.c:128 #, fuzzy msgid "Arguments to (r)sort must be of same size" msgstr "Kuri R Ishungura Bya Ingano" #: src/interp/rptsort.c:137 #, fuzzy msgid "Second argument to (r)sort must be list or array" msgstr "Kuri R Ishungura Urutonde Cyangwa Imbonerahamwe" #: src/liflines/add.c:68 #, fuzzy, c-format msgid "There was %d unresolved reference." msgid_plural "There were %d unresolved references." msgstr[0] "Indango" #: src/liflines/brwsmenu.c:25 #, fuzzy msgid "? Other menu choices" msgstr "" "Project- Id- Version: basctl\n" "POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n" "PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n" "Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n" "Content- Type: text/ plain; charset= UTF- 8\n" "Content- Transfer- Encoding: 8bit\n" "X- Generator: KBabel 1. 0\n" "." #: src/liflines/brwsmenu.c:69 #, fuzzy msgid "e Edit the person" msgstr "E i" #: src/liflines/brwsmenu.c:70 #, fuzzy msgid "e Edit the family" msgstr "E i" #: src/liflines/brwsmenu.c:71 #, fuzzy msgid "e Edit record" msgstr "E Icyabitswe" #: src/liflines/brwsmenu.c:72 #, fuzzy msgid "e Edit top person" msgstr "E Hejuru:" #: src/liflines/brwsmenu.c:73 #, fuzzy msgid "e Edit top family" msgstr "E i" #: src/liflines/brwsmenu.c:74 #, fuzzy msgid "f Browse to father" msgstr "F Kuri" #: src/liflines/brwsmenu.c:75 #, fuzzy msgid "f Browse top father" msgstr "F Hejuru:" #: src/liflines/brwsmenu.c:76 #, fuzzy msgid "m Browse to mother" msgstr "M Kuri" #: src/liflines/brwsmenu.c:77 #, fuzzy msgid "m Browse top mother" msgstr "M Hejuru:" #: src/liflines/brwsmenu.c:78 #, fuzzy msgid "s Browse to spouse/s" msgstr "S Kuri S" #: src/liflines/brwsmenu.c:79 #, fuzzy msgid "s Browse top spouse/s" msgstr "S Hejuru: S" #: src/liflines/brwsmenu.c:80 #, fuzzy msgid "c Browse to children" msgstr "C Kuri" #: src/liflines/brwsmenu.c:81 #, fuzzy msgid "c Browse top children" msgstr "C Hejuru:" #: src/liflines/brwsmenu.c:82 #, fuzzy msgid "o Browse to older sib" msgstr "o Kuri" #: src/liflines/brwsmenu.c:83 #, fuzzy msgid "y Browse to younger sib" msgstr "Y Kuri" #: src/liflines/brwsmenu.c:84 #, fuzzy msgid "g Browse to family" msgstr "g Kuri" #: src/liflines/brwsmenu.c:85 #, fuzzy msgid "u Browse to parents" msgstr "u Kuri" #: src/liflines/brwsmenu.c:86 #, fuzzy msgid "b Browse to persons" msgstr "B Kuri" #: src/liflines/brwsmenu.c:87 #, fuzzy msgid "t Browse to top" msgstr "T Kuri Hejuru:" #: src/liflines/brwsmenu.c:88 #, fuzzy msgid "b Browse to bottom" msgstr "B Kuri Hasi:" #: src/liflines/brwsmenu.c:89 #, fuzzy msgid "h Add as spouse" msgstr "h Nka" #: src/liflines/brwsmenu.c:90 #, fuzzy msgid "i Add as child" msgstr "i Nka" #: src/liflines/brwsmenu.c:91 #, fuzzy msgid "s Add spouse to family" msgstr "S Kuri" #: src/liflines/brwsmenu.c:92 #, fuzzy msgid "a Add child to family" msgstr "a Kuri" #: src/liflines/brwsmenu.c:93 #, fuzzy msgid "a Add family" msgstr "a" #: src/liflines/brwsmenu.c:94 #, fuzzy msgid "x Swap two families" msgstr "X" #: src/liflines/brwsmenu.c:95 #, fuzzy msgid "x Swap two children" msgstr "X" #: src/liflines/brwsmenu.c:97 #, no-c-format msgid "%c Reorder child" msgstr "" #: src/liflines/brwsmenu.c:98 #, fuzzy msgid "x Switch top/bottom" msgstr "X Hejuru: Hasi:" #: src/liflines/brwsmenu.c:99 #, fuzzy msgid "n Create new person" msgstr "N Gishya" #: src/liflines/brwsmenu.c:100 #, fuzzy msgid "a Create new family" msgstr "a Gishya" #: src/liflines/brwsmenu.c:101 #, fuzzy msgid "tt Enter tandem mode" msgstr "Ubwoko" #: src/liflines/brwsmenu.c:102 msgid "tt Enter family tandem" msgstr "" #: src/liflines/brwsmenu.c:103 #, fuzzy msgid "zi Browse to indi" msgstr "Kuri" #: src/liflines/brwsmenu.c:104 #, fuzzy msgid "zz Browse to any" msgstr "Kuri" #: src/liflines/brwsmenu.c:105 #, fuzzy msgid "r Remove as spouse" msgstr "R Nka" #: src/liflines/brwsmenu.c:106 #, fuzzy msgid "d Remove as child" msgstr "D Nka" #: src/liflines/brwsmenu.c:107 #, fuzzy msgid "r Remove spouse from" msgstr "R Bivuye" #: src/liflines/brwsmenu.c:108 #, fuzzy msgid "d Remove child from" msgstr "D Bivuye" #: src/liflines/brwsmenu.c:109 #, fuzzy msgid "( Scroll up" msgstr "(Hejuru" #: src/liflines/brwsmenu.c:110 #, fuzzy msgid ") Scroll down" msgstr ")Hasi" #: src/liflines/brwsmenu.c:111 #, fuzzy msgid "] Increase tree depth" msgstr "]Ubujyakuzimu" #: src/liflines/brwsmenu.c:112 #, fuzzy msgid "[ Decrease tree depth" msgstr "[Ubujyakuzimu" #: src/liflines/brwsmenu.c:113 #, fuzzy msgid "(t Scroll top up" msgstr "(T Hejuru: Hejuru" #: src/liflines/brwsmenu.c:114 #, fuzzy msgid ")t Scroll top down" msgstr ")T Hejuru: Hasi" #: src/liflines/brwsmenu.c:115 #, fuzzy msgid "(b Scroll bottom up" msgstr "(B Hasi: Hejuru" #: src/liflines/brwsmenu.c:116 #, fuzzy msgid ")b Scroll bottom down" msgstr ")B Hasi: Hasi" #: src/liflines/brwsmenu.c:117 #, fuzzy msgid "(( Scroll both up" msgstr "((Byombi Hejuru" #: src/liflines/brwsmenu.c:118 #, fuzzy msgid ")) Scroll both down" msgstr "))Byombi Hasi" #: src/liflines/brwsmenu.c:119 msgid "# Toggle childnos" msgstr "" #: src/liflines/brwsmenu.c:120 #, fuzzy msgid "!g GEDCOM mode" msgstr "!g Ubwoko" #: src/liflines/brwsmenu.c:121 #, fuzzy msgid "!x GEDCOMX mode" msgstr "!X Ubwoko" #: src/liflines/brwsmenu.c:122 #, fuzzy msgid "!t GEDCOMT mode" msgstr "!T Ubwoko" #: src/liflines/brwsmenu.c:123 #, fuzzy msgid "!a Ancestors mode" msgstr "!a Ubwoko" #: src/liflines/brwsmenu.c:124 #, fuzzy msgid "!d Descendants mode" msgstr "!D Ubwoko" #: src/liflines/brwsmenu.c:125 #, fuzzy msgid "!n Normal mode" msgstr "!N Ubwoko" #: src/liflines/brwsmenu.c:126 #, fuzzy msgid "p Pedigree mode" msgstr "P Ubwoko" #: src/liflines/brwsmenu.c:127 #, fuzzy msgid "!! Cycle mode" msgstr "!!Ubwoko" #: src/liflines/brwsmenu.c:129 #, fuzzy msgid "(1-9) Browse to child" msgstr "(1. 9 Kuri" #: src/liflines/brwsmenu.c:130 #, fuzzy msgid "y Turn on sync" msgstr "Y ku" #: src/liflines/brwsmenu.c:131 #, fuzzy msgid "A Advanced view" msgstr "A Kureba" #: src/liflines/brwsmenu.c:132 #, fuzzy msgid "tc Tandem to children" msgstr "Kuri" #: src/liflines/brwsmenu.c:133 #, fuzzy msgid "tf Tandem to father/s" msgstr "Kuri S" #: src/liflines/brwsmenu.c:134 #, fuzzy msgid "tg Tandem to family/s" msgstr "Kuri S" #: src/liflines/brwsmenu.c:135 #, fuzzy msgid "f Browse to fathers" msgstr "F Kuri" #: src/liflines/brwsmenu.c:136 #, fuzzy msgid "m Browse to mothers" msgstr "M Kuri" #: src/liflines/brwsmenu.c:137 #, fuzzy msgid "tm Tandem to mother/s" msgstr "Kuri S" #: src/liflines/brwsmenu.c:138 #, fuzzy msgid "ts Tandem to spouse/s" msgstr "Kuri S" #: src/liflines/brwsmenu.c:139 #, fuzzy msgid "tu Tandem to parents" msgstr "Kuri" #: src/liflines/brwsmenu.c:140 #, fuzzy msgid "< Enlarge menu area" msgstr " Shrink menu area" msgstr ">Ibikubiyemo Ubuso" #: src/liflines/brwsmenu.c:142 #, fuzzy msgid "M> More menu cols" msgstr "Ibikubiyemo" #: src/liflines/brwsmenu.c:143 #, fuzzy msgid "M< Less menu cols" msgstr "Ibikubiyemo" #: src/liflines/brwsmenu.c:144 #, fuzzy msgid "+ Next in db" msgstr "+in DB" #: src/liflines/brwsmenu.c:145 #, fuzzy msgid "- Prev in db" msgstr "-in DB" #: src/liflines/brwsmenu.c:146 #, fuzzy msgid "d Copy top to bottom" msgstr "D Hejuru: Kuri Hasi:" #: src/liflines/brwsmenu.c:147 #, fuzzy msgid "j Merge bottom to top" msgstr "j Hasi: Kuri Hejuru:" #: src/liflines/brwsmenu.c:148 src/liflines/listui.c:842 #, fuzzy msgid "j Move down list" msgstr "j Hasi Urutonde" #: src/liflines/brwsmenu.c:149 src/liflines/listui.c:843 #, fuzzy msgid "k Move up list" msgstr "K Hejuru Urutonde" #: src/liflines/brwsmenu.c:150 src/liflines/listui.c:844 #, fuzzy msgid "e Edit this person" msgstr "E iyi" #: src/liflines/brwsmenu.c:151 src/liflines/listui.c:845 #, fuzzy msgid "i Browse this person" msgstr "i iyi" #: src/liflines/brwsmenu.c:152 src/liflines/listui.c:846 #, fuzzy msgid "m Mark this person" msgstr "M iyi" #: src/liflines/brwsmenu.c:153 #, fuzzy msgid "d Delete from list" msgstr "D Bivuye Urutonde" #: src/liflines/brwsmenu.c:154 src/liflines/listui.c:849 #, fuzzy msgid "n Name this list" msgstr "N iyi Urutonde" #: src/liflines/brwsmenu.c:155 src/liflines/listui.c:850 #, fuzzy msgid "b Browse new persons" msgstr "B Gishya" #: src/liflines/brwsmenu.c:156 src/liflines/listui.c:851 #, fuzzy msgid "a Add to this list" msgstr "a Kuri iyi Urutonde" #: src/liflines/brwsmenu.c:157 src/liflines/listui.c:852 #, fuzzy msgid "x Swap mark/current" msgstr "X Ikimenyetso KIGEZWEHO" #: src/liflines/brwsmenu.c:158 #, fuzzy msgid "$s List sources" msgstr "$S" #: src/liflines/brwsmenu.c:159 #, fuzzy msgid "$n List notes" msgstr "$N Ibisobanuro" #: src/liflines/brwsmenu.c:160 #, fuzzy msgid "$$ List references" msgstr "$$Indango" #: src/liflines/brwsmenu.c:161 #, fuzzy msgid "^b History/back" msgstr "^B Inyuma" #: src/liflines/brwsmenu.c:162 #, fuzzy msgid "^f History/fwd" msgstr "^F" #: src/liflines/brwsmenu.c:163 #, fuzzy msgid "^l History list" msgstr "^L Urutonde" #: src/liflines/brwsmenu.c:164 #, fuzzy msgid "^c Clear history" msgstr "^C Urutonde" #: src/liflines/brwsmenu.c:165 #, fuzzy msgid "^xb ChngHist/back" msgstr "^Inyuma" #: src/liflines/brwsmenu.c:166 msgid "^xf ChngHist/fwd" msgstr "" #: src/liflines/brwsmenu.c:167 #, fuzzy msgid "^xl ChngHist list" msgstr "^xl Urutonde" #: src/liflines/brwsmenu.c:168 msgid "^xc Clear ChngHist" msgstr "" #: src/liflines/brwsmenu.c:170 #, fuzzy, no-c-format msgid "%s Add source" msgstr "%sInkomoko" #: src/liflines/brwsmenu.c:172 #, fuzzy, no-c-format msgid "%e Add event" msgstr "%eIcyabaye" #: src/liflines/brwsmenu.c:174 #, fuzzy, no-c-format msgid "%o Add other" msgstr "%oIkindi" #: src/liflines/brwsmenu.c:177 #, fuzzy msgid "B Browse new family" msgstr "Gishya" #: src/liflines/brwsmenu.c:490 #, fuzzy msgid "Missing title" msgstr "Umutwe" #: src/liflines/delete.c:85 #, c-format msgid "%d spouse" msgid_plural "%d spouses" msgstr[0] "" msgstr[1] "" #: src/liflines/delete.c:88 #, c-format msgid "%d child" msgid_plural "%d children" msgstr[0] "" msgstr[1] "" #: src/liflines/error.c:63 src/tools/dbverify.c:1504 msgid "Fatal Error" msgstr "" #: src/liflines/error.c:66 msgid "FATAL ERROR" msgstr "" #: src/liflines/error.c:70 #, fuzzy, c-format msgid " in file <%s> at line %d\n" msgstr "in IDOSIYE ku Umurongo" #: src/liflines/error.c:72 src/tools/dbverify.c:1515 msgid "ASSERT failure" msgstr "" #: src/liflines/import.c:169 #, fuzzy msgid "This is not a lineage linked GEDCOM file." msgstr "ni OYA a IDOSIYE" #: src/liflines/import.c:170 #, fuzzy msgid "Proceed anyway?" msgstr "Komeza ibyarbyo byose" #: src/liflines/import.c:186 #, fuzzy msgid "No current internal codeset, so no codeset conversion can be done" msgstr "KIGEZWEHO By'imbere Oya Ihindurangero Byakozwe" #: src/liflines/import.c:187 #, fuzzy msgid "Proceed without codeset conversion?" msgstr "Ihindurangero" #: src/liflines/import.c:204 #, fuzzy, c-format msgid "%d warning during import" msgid_plural "%d warnings during import" msgstr[0] "%dIburira Kuzana" #: src/liflines/import.c:220 #, fuzzy, c-format msgid "Cannot convert codeset (from <%s> to <%s>)" msgstr "GUHINDURA Bivuye Kuri" #: src/liflines/import.c:223 #, fuzzy msgid "Enter codeset to assume (* for none)" msgstr "Kuri kugirango Ntacyo" #: src/liflines/import.c:246 #, fuzzy, c-format msgid "Using original keys, %d deleted record will be in the database." msgid_plural "Using original keys, %d deleted records will be in the database." msgstr[0] "Umwimerere Utubuto Cyasibwe Ibyabitswe in i Ububikoshingiro" msgstr[1] "Umwimerere Utubuto Cyasibwe Ibyabitswe in i Ububikoshingiro" #: src/liflines/lbrowse.c:219 msgid "Tandom browse only compatible with persons or families." msgstr "" #: src/liflines/lines_usage.c:21 #, c-format msgid "%s invokes the Lifelines report execution program without GUI." msgstr "" #: src/liflines/lines_usage.c:23 #, c-format msgid "%s invokes the Lifelines GUI." msgstr "" #: src/liflines/lines_usage.c:26 #, c-format msgid "" "Lifelines is a program to manipulate genealogical information\n" "in lineage-linked GEDCOM format. It has a curses interface and a\n" "built-in interpreter for its own genealogical report language.\n" "\n" "It has its own databases, and records are edited directly in GEDCOM\n" "(with an editor of the user's choice). Records store\n" "information about people, families, sources, events, and\n" "other types of data (such as notes). Lifelines includes a\n" "custom report language and comes with a collection of reports." msgstr "" #: src/liflines/lines_usage.c:36 #, c-format msgid "Usage: %s [OPTIONS] [database]" msgstr "" #: src/liflines/lines_usage.c:38 src/tools/btedit.c:238 #, c-format msgid "Options:" msgstr "" #: src/liflines/lines_usage.c:40 #, c-format msgid "-C[FILE]" msgstr "" #: src/liflines/lines_usage.c:42 #, fuzzy, c-format msgid "Specify configuration file location" msgstr "Iboneza IDOSIYE Umurongo" #: src/liflines/lines_usage.c:44 #, c-format msgid "Finnish option (if compiled to allow Finnish option)" msgstr "" #: src/liflines/lines_usage.c:46 #, c-format msgid "-I[KEY=VALUE]" msgstr "" #: src/liflines/lines_usage.c:48 #, c-format msgid "Specify a user property (e.g. -ILLEDITOR=gvim)" msgstr "" #: src/liflines/lines_usage.c:50 #, c-format msgid "log dynamic memory operation (for debugging)" msgstr "" #: src/liflines/lines_usage.c:52 #, c-format msgid "-c[TYPE][DIRECT,INDIRECT]" msgstr "" #: src/liflines/lines_usage.c:54 #, c-format msgid "" "supply cache values (eg, -ci400,4000f400,4000 sets direct indi\n" "\t\t& fam caches to 400, and indirect indi & fam caches to 4000)" msgstr "" #: src/liflines/lines_usage.c:57 #, c-format msgid "debug mode (disable signal trapping)" msgstr "" #: src/liflines/lines_usage.c:59 #, c-format msgid "force open (for recovery from errors or power failure)" msgstr "" #: src/liflines/lines_usage.c:61 #, c-format msgid "open database with immutable access (for use on read-only media)" msgstr "" #: src/liflines/lines_usage.c:63 #, c-format msgid "always show keys (even if REFN available)" msgstr "" #: src/liflines/lines_usage.c:65 #, c-format msgid "unlock a database (for correct access on read-write media)" msgstr "" #: src/liflines/lines_usage.c:67 #, c-format msgid "lock a database (for use on read-only media)" msgstr "" #: src/liflines/lines_usage.c:69 #, c-format msgid "do not use traditional family rules" msgstr "" #: src/liflines/lines_usage.c:71 #, c-format msgid "Specify program output filename (eg, -o/tmp/mytests)" msgstr "" #: src/liflines/lines_usage.c:73 #, c-format msgid "" "open database with read-only access (prohibiting other\n" "\t\twrite access)" msgstr "" #: src/liflines/lines_usage.c:76 #, c-format msgid "trace function calls in report programs (for debugging)" msgstr "" #: src/liflines/lines_usage.c:78 #, c-format msgid "-u[HEIGHT,WIDTH]" msgstr "" #: src/liflines/lines_usage.c:80 #, c-format msgid "" "specify window size (eg, -u120,34 specifies 120 columns\n" "\t\tby 34 rows)" msgstr "" #: src/liflines/lines_usage.c:83 #, c-format msgid "display this help and exit" msgstr "" #: src/liflines/lines_usage.c:85 #, c-format msgid "open database with writeable access (this is the default)" msgstr "" #: src/liflines/lines_usage.c:89 #, c-format msgid "execute a single lifelines report program directly" msgstr "" #: src/liflines/lines_usage.c:91 #, c-format msgid "" "Use normal ASCII characters for drawing lines, instead of\n" "\t\tspecial VT100 terminal characters" msgstr "" #: src/liflines/lines_usage.c:94 #, c-format msgid "output version information and exit" msgstr "" #: src/liflines/lines_usage.c:96 src/tools/btedit.c:244 #, c-format msgid "Examples:" msgstr "" #: src/liflines/lines_usage.c:99 #, c-format msgid "%s myfamily -x eol" msgstr "" #: src/liflines/lines_usage.c:101 #, c-format msgid "Open the database 'myfamily' with Lifelines" msgstr "" #: src/liflines/lines_usage.c:103 #, c-format msgid "and run the eol.ll report" msgstr "" #: src/liflines/lines_usage.c:105 #, c-format msgid "%s -f myfamily -x eol" msgstr "" #: src/liflines/lines_usage.c:107 #, c-format msgid "Unlock database 'myfamily', after a power failure left the" msgstr "" #: src/liflines/lines_usage.c:109 #, c-format msgid "database locked and run 'eol.ll' report" msgstr "" #: src/liflines/lines_usage.c:112 #, c-format msgid "%s myfamily" msgstr "" #: src/liflines/lines_usage.c:114 #, c-format msgid "Open database 'myfamily' with Lifelines" msgstr "" #: src/liflines/lines_usage.c:116 #, c-format msgid "%s -f myfamily" msgstr "" #: src/liflines/lines_usage.c:118 #, c-format msgid "" "Unlock database 'myfamily', after a power failure left\n" "\t\tthe database locked" msgstr "" #: src/liflines/lines_usage.c:122 #, c-format msgid "REPORTING BUGS" msgstr "" #: src/liflines/lines_usage.c:124 src/tools/btedit.c:250 #, c-format msgid "Report bugs to lifelines.sourceforge.net" msgstr "" #: src/liflines/lines_usage.c:126 #, c-format msgid "COPYRIGHT" msgstr "" #: src/liflines/lines_usage.c:131 #, c-format msgid "SEE ALSO" msgstr "" #: src/liflines/listui.c:155 src/liflines/listui.c:252 #, fuzzy msgid "Commands: j Move down k Move up i Select q Quit" msgstr "j Hasi K Hejuru i Q" #: src/liflines/listui.c:157 #, fuzzy msgid "Commands: j Move down k Move up q Quit" msgstr "j Hasi K Hejuru Q" #: src/liflines/listui.c:249 #, fuzzy msgid "Commands: j Move down k Move up d Delete i Select q Quit" msgstr "j Hasi K Hejuru D i Q" #: src/liflines/listui.c:431 msgid "--- CURRENT SELECTION ---" msgstr "" #: src/liflines/listui.c:434 src/liflines/listui.c:597 msgid "--- LIST ---" msgstr "" #: src/liflines/listui.c:628 msgid "-- CURRENT SELECTION --" msgstr "" #: src/liflines/listui.c:840 #, fuzzy msgid "Choose an operation:" msgstr "Guhitamo" #: src/liflines/listui.c:847 #, fuzzy msgid "r Remove from list" msgstr "R Bivuye Urutonde" #: src/liflines/listui.c:848 #, fuzzy msgid "t Enter tandem mode" msgstr "T Ubwoko" #: src/liflines/loadsave.c:94 msgid "Person" msgid_plural "Persons" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:98 msgid "Family" msgid_plural "Families" msgstr[0] "" msgstr[1] "" #: src/liflines/loadsave.c:102 #, fuzzy msgid "Source" msgid_plural "Sources" msgstr[0] "Inkomoko" msgstr[1] "Inkomoko" # #-#-#-#-# sfx2.pot (PACKAGE VERSION) #-#-#-#-# # sfx2/source\dialog\eventdlg.src:TP_CONFIG_EVENT.STR_EVENT.text # #-#-#-#-# sfx2.pot (PACKAGE VERSION) #-#-#-#-# # sfx2/source\dialog\macropg.src:RID_SFX_TP_MACROASSIGN.STR_EVENT.text #: src/liflines/loadsave.c:106 #, fuzzy msgid "Event" msgid_plural "Events" msgstr[0] "Icyabaye" msgstr[1] "Icyabaye" # framework/source\classes\fltdlg.src:STR_FILTER_OTHERS.text #: src/liflines/loadsave.c:110 #, fuzzy msgid "Other" msgid_plural "Others" msgstr[0] "Ikindi" msgstr[1] "Ikindi" #: src/liflines/loadsave.c:160 #, fuzzy msgid "Checking GEDCOM file for errors.\n" msgstr "IDOSIYE kugirango Amakosa" #: src/liflines/loadsave.c:163 #, fuzzy msgid "Error" msgid_plural "Errors" msgstr[0] "Ikosa" msgstr[1] "Ikosa" #: src/liflines/loadsave.c:169 #, fuzzy msgid "Warning" msgid_plural "Warnings" msgstr[0] "Iburira" msgstr[1] "Iburira" #: src/liflines/loadsave.c:184 #, fuzzy msgid "The database is read-only; loading has been canceled." msgstr "Ububikoshingiro ni Gusoma Itangira..." #: src/liflines/loadsave.c:190 #, fuzzy msgid "Adding unused keys as deleted keys..." msgstr "Kidakoreshwa Utubuto Nka Cyasibwe Utubuto" #. TRANSLATORS: how long Import ran, and how much of that was UI delay #: src/liflines/loadsave.c:255 #, fuzzy, c-format msgid "Import time %s (ui %s)\n" msgstr "Igihe- ngombwa Igihe- ngombwa" #: src/liflines/loadsave.c:282 #, fuzzy msgid "The database was not saved." msgstr "Ububikoshingiro OYA" #: src/liflines/main.c:385 #, fuzzy msgid "Warning: database codeset unspecified" msgstr "Ububikoshingiro" #: src/liflines/main.c:387 #, fuzzy msgid "Warning: not all conversions available" msgstr "OYA Byose Bihari" #: src/liflines/menuset.c:155 #, c-format msgid "Menu (%s) choice sequence too long: %s" msgstr "" #: src/liflines/menuset.c:159 #, fuzzy, c-format msgid "Menu (%s) item lacked choice sequence: %s" msgstr "Ikintu" #: src/liflines/menuset.c:242 src/liflines/menuset.c:254 #, fuzzy, c-format msgid "In menu: %s" msgstr "Ibikubiyemo" #: src/liflines/menuset.c:244 #, fuzzy, c-format msgid "Duplicate hotkey for item: %s" msgstr "kugirango Ikintu" #: src/liflines/menuset.c:247 #, fuzzy, c-format msgid "Clash with longer hotkey in item: %s" msgstr "Na: in Ikintu" #: src/liflines/menuset.c:255 #, fuzzy, c-format msgid "Clash with shorter hotkey in item: %s" msgstr "Na: in Ikintu" #: src/liflines/merge.c:772 #, c-format msgid "Bad spouse tag: %s" msgstr "" #: src/liflines/merge.c:800 src/liflines/merge.c:919 #, c-format msgid "Mismatched lineage spouse links between %s and %s: %ld and %ld" msgstr "" #: src/liflines/merge.c:816 src/liflines/merge.c:935 #, c-format msgid "Bad child tag: %s" msgstr "" #: src/liflines/merge.c:844 src/liflines/merge.c:963 #, c-format msgid "Mismatched lineage child links between %s and %s: %ld and %ld" msgstr "" #: src/liflines/merge.c:882 src/liflines/merge.c:891 #, c-format msgid "Bad HUSB tag: %s" msgstr "" #: src/liflines/miscutls.c:51 #, fuzzy msgid "Whose key value do you want?" msgstr "Urufunguzo Agaciro" #: src/liflines/miscutls.c:67 #, fuzzy msgid "Please enter person's internal key value." msgstr "Injiza By'imbere Urufunguzo Agaciro" #: src/liflines/miscutls.c:68 #, fuzzy msgid "enter key:" msgstr "Injiza Urufunguzo" #: src/liflines/miscutls.c:78 src/liflines/miscutls.c:82 #: src/liflines/miscutls.c:87 #, fuzzy, c-format msgid "No one in database has key value %s." msgstr "in Ububikoshingiro Urufunguzo Agaciro" #: src/liflines/scan.c:100 #, fuzzy msgid "Enter pattern to match against single surname or given name." msgstr "Ishusho Kuri BIHUYE UMWE Cyangwa Izina:" #: src/liflines/scan.c:112 #, fuzzy msgid "Enter pattern to match against full name." msgstr "Ishusho Kuri BIHUYE Izina:" # sc/source\ui\src\autofmt.src:RID_SCDLG_AUTOFORMAT.BTN_PATTERN.text #: src/liflines/scan.c:128 src/liflines/scan.c:178 src/liflines/scan.c:201 #, fuzzy msgid "pattern: " msgstr "Ishusho" #: src/liflines/scan.c:151 src/liflines/scan.c:165 #, fuzzy msgid "Enter pattern to match against author." msgstr "Ishusho Kuri BIHUYE" #: src/liflines/screen.c:317 #, c-format msgid "initscr failed" msgstr "" #: src/liflines/screen.c:334 #, fuzzy, c-format msgid "" "The requested window size (%ld,%ld) is too large for your terminal (%d,%d).\n" msgstr "Idirishya Ingano ni Binini kugirango" #: src/liflines/screen.c:342 #, fuzzy, c-format msgid "" "The requested window size (%ld,%ld) is too small for LifeLines (%d,%d).\n" msgstr "Idirishya Ingano ni Gitoya kugirango" #: src/liflines/screen.c:706 #, fuzzy msgid "Search results" msgstr "Ibisubizo ku" #: src/liflines/screen.c:813 #, c-format msgid "(pg %d/%d)" msgstr "" #: src/liflines/screen.c:1431 #, fuzzy msgid "No conversion" msgstr "Ihindurangero" #: src/liflines/screen.c:1517 msgid "Internal codeset" msgstr "" #: src/liflines/screen.c:1520 msgid "Internal UTF-8: Yes" msgstr "" #: src/liflines/screen.c:1522 #, fuzzy msgid "Internal UTF-8: No" msgstr "M Kuri Igereranya" #: src/liflines/screen.c:1526 #, fuzzy msgid "Locales are enabled." msgstr "Bikora" #: src/liflines/screen.c:1528 #, fuzzy msgid "Locales are disabled." msgstr "Yahagaritswe" #: src/liflines/screen.c:1531 #, fuzzy msgid "NLS (National Language Support) is compiled in." msgstr "ni Yahagaritswe" #: src/liflines/screen.c:1537 #, fuzzy msgid "NLS (National Language Support) is not compiled in." msgstr "ni Bikora" #: src/liflines/screen.c:1550 #, fuzzy msgid "iconv (codeset conversion) is compiled in." msgstr "Ihindurangero ni Yahagaritswe" #: src/liflines/screen.c:1552 #, fuzzy msgid "iconv (codeset conversion) is not compiled in." msgstr "Ihindurangero ni Bikora" #: src/liflines/screen.c:1554 #, fuzzy, c-format msgid "Startup collate locale: %s" msgstr "Guteranya Umwanya" #: src/liflines/screen.c:1557 #, fuzzy, c-format msgid "Startup messages locale: %s" msgstr "Ubutumwa Umwanya" #: src/liflines/screen.c:1560 #, fuzzy, c-format msgid "Current collate locale: %s" msgstr "Guteranya Umwanya" #: src/liflines/screen.c:1563 #, fuzzy, c-format msgid "Current messages locale: %s" msgstr "Ubutumwa Umwanya" #: src/liflines/screen.c:1566 #, c-format msgid "Collation routine: %s" msgstr "" #: src/liflines/screen.c:1570 #, c-format msgid "GUI codeset: %s" msgstr "" #: src/liflines/screen.c:1573 #, fuzzy, c-format msgid "GUI output codeset: %s" msgstr "Ibisohoka" #: src/liflines/screen.c:1575 #, fuzzy, c-format msgid "GUI input codeset: %s" msgstr "Iyinjiza" #: src/liflines/screen.c:1580 #, fuzzy, c-format msgid "editor codeset: %s" msgstr "Muhinduzi" #: src/liflines/screen.c:1583 #, fuzzy, c-format msgid "editor output codeset: %s" msgstr "Muhinduzi Ibisohoka" #: src/liflines/screen.c:1585 #, fuzzy, c-format msgid "editor input codeset: %s" msgstr "Muhinduzi Iyinjiza" #: src/liflines/screen.c:1590 #, fuzzy, c-format msgid "report codeset: %s" msgstr "Icyegeranyo" #: src/liflines/screen.c:1593 #, fuzzy, c-format msgid "report output codeset: %s" msgstr "Icyegeranyo Ibisohoka" #: src/liflines/screen.c:1595 #, fuzzy, c-format msgid "report input codeset: %s" msgstr "Icyegeranyo Iyinjiza" #: src/liflines/screen.c:1600 #, c-format msgid "GEDCOM codeset: %s" msgstr "" #: src/liflines/screen.c:1603 #, fuzzy, c-format msgid "gedcom output codeset: %s" msgstr "Ibisohoka" #: src/liflines/screen.c:1605 #, fuzzy, c-format msgid "gedcom input codeset: %s" msgstr "Iyinjiza" #: src/liflines/screen.c:1613 msgid "UTF-8 charprops loaded" msgstr "" #: src/liflines/screen.c:1615 msgid "UTF-8 charprops not loaded" msgstr "" #: src/liflines/screen.c:1619 #, fuzzy msgid "Codeset information" msgstr "Ibisobanuro" #: src/liflines/screen.c:1636 #, c-format msgid "gettext dll: %s" msgstr "" #: src/liflines/screen.c:1640 #, fuzzy, c-format msgid "gettext dll version: %s" msgstr "Verisiyo" #: src/liflines/screen.c:1645 #, fuzzy msgid "gettext dll had no version" msgstr "Oya Verisiyo" #: src/liflines/screen.c:1650 #, fuzzy msgid "no gettext dll found" msgstr "Oya Byabonetse" #: src/liflines/screen.c:1659 #, c-format msgid "iconv dll: %s" msgstr "" #: src/liflines/screen.c:1663 #, fuzzy, c-format msgid "iconv dll version: %s" msgstr "Verisiyo" #: src/liflines/screen.c:1668 #, fuzzy msgid "iconv dll had no version" msgstr "Oya Verisiyo" #: src/liflines/screen.c:1673 #, fuzzy msgid "no iconv dll found" msgstr "Oya Byabonetse" #: src/liflines/screen.c:1931 #, fuzzy msgid "Impermissible to change codeset in a populated database" msgstr "Kuri Guhindura>> in a Ububikoshingiro" #: src/liflines/screen.c:2032 msgid "LifeLines -- Main Menu" msgstr "" #: src/liflines/searchui.c:133 #, fuzzy, c-format msgid "v Review visit history (%d record)" msgid_plural "v Review visit history (%d records)" msgstr[0] "v Urutonde Icyabitswe" #: src/liflines/searchui.c:137 #, fuzzy msgid "(visit history is empty)" msgstr "(Urutonde ni ubusa" #: src/liflines/searchui.c:143 #, fuzzy, c-format msgid "c Review change history (%d record)" msgid_plural "c Review change history (%d records)" msgstr[0] "C Guhindura>> Urutonde Icyabitswe" #: src/liflines/searchui.c:147 #, fuzzy msgid "(change history is empty)" msgstr "(Guhindura>> Urutonde ni ubusa" #: src/liflines/searchui.c:151 #, fuzzy msgid "f Full database scan" msgstr "F Ububikoshingiro Gusikana" #: src/liflines/searchui.c:220 #, fuzzy msgid "What scan type?" msgstr "Gusikana Ubwoko" #: src/liflines/searchui.c:223 #, fuzzy msgid "f Full name scan" msgstr "F Izina: Gusikana" #: src/liflines/searchui.c:224 #, fuzzy msgid "n Name fragment (whitespace-delimited) scan" msgstr "N Gusikana" #: src/liflines/searchui.c:225 #, fuzzy msgid "r Refn scan" msgstr "R Gusikana" #: src/liflines/searchui.c:226 #, fuzzy msgid "s Source scan" msgstr "R Gusikana" #: src/liflines/searchui.c:290 msgid "Scan on what source field?" msgstr "" #: src/liflines/searchui.c:293 msgid "a Scan by author" msgstr "" #: src/liflines/searchui.c:294 msgid "t Scan by title" msgstr "" #: src/liflines/selectdb.c:95 #, fuzzy msgid "Choose database to open" msgstr "Ububikoshingiro Kuri Gufungura" #: src/liflines/selectdb.c:103 #, fuzzy msgid "No databases found in database path" msgstr "Ububikoshingiro Byabonetse in Ububikoshingiro Inzira" #: src/liflines/show.c:123 msgid "born" msgstr "" #: src/liflines/show.c:124 src/liflines/show.c:125 msgid "bapt" msgstr "" #: src/liflines/show.c:126 msgid "barm" msgstr "" #: src/liflines/show.c:127 msgid "basm" msgstr "" #: src/liflines/show.c:128 msgid "bles" msgstr "" #: src/liflines/show.c:129 msgid "adop" msgstr "" #: src/liflines/show.c:130 msgid "resi" msgstr "" #: src/liflines/show.c:134 msgid "died" msgstr "" #: src/liflines/show.c:135 msgid "buri" msgstr "" #: src/liflines/show.c:136 msgid "crem" msgstr "" #: src/liflines/show.c:1009 #, c-format msgid "Cached: I:%s; F:%s" msgstr "" #: src/liflines/valgdcom.c:92 #, fuzzy, c-format msgid "Record %s is referred to but not defined." msgstr "ni Kuri OYA" #: src/liflines/valgdcom.c:93 #, fuzzy, c-format msgid "Line %d: Reference to undefined record %s" msgstr "Icyabaye Oya Urufunguzo" #: src/liflines/valgdcom.c:94 #, fuzzy, c-format msgid "Line %d: Tag %s found in unexpected record: %s %s." msgstr "Icyabitswe" #: src/liflines/valgdcom.c:190 #, fuzzy, c-format msgid "Line %d: Family has no members (%s %s)." msgstr "Oya" #: src/liflines/valgdcom.c:390 #, fuzzy, c-format msgid "Line %d: The source defined here has no key." msgstr "Inkomoko Oya Urufunguzo" #: src/liflines/valgdcom.c:404 #, fuzzy, c-format msgid "Line %d: Source %s has an incorrect key." msgstr "Urufunguzo" #: src/liflines/valgdcom.c:411 #, fuzzy, c-format msgid "Lines %d and %d: Source %s is multiply defined." msgstr "Na ni Gukuba" #: src/liflines/valgdcom.c:434 #, fuzzy, c-format msgid "Line %d: The event defined here has no key." msgstr "Icyabaye Oya Urufunguzo" #: src/liflines/valgdcom.c:447 #, fuzzy, c-format msgid "Line %d: Event %s has an incorrect key." msgstr "Urufunguzo" #: src/liflines/valgdcom.c:454 #, fuzzy, c-format msgid "Lines %d and %d: Event %s is multiply defined." msgstr "Na ni Gukuba" #: src/liflines/valgdcom.c:477 #, fuzzy, c-format msgid "Line %d: The record defined here has no key." msgstr "Icyabitswe Oya Urufunguzo" #: src/liflines/valgdcom.c:490 #, fuzzy, c-format msgid "Line %d: Record %s has an incorrect key." msgstr "Urufunguzo" #: src/liflines/valgdcom.c:497 #, fuzzy, c-format msgid "Lines %d and %d: Record %s is multiply defined." msgstr "Na ni Gukuba" #: src/liflines/valgdcom.c:539 #, fuzzy, c-format msgid "Line %d: This %s line is missing a value field (%s %s)." msgstr "Umurongo ni Ibuze a Agaciro Umwanya" #: src/liflines/valgdcom.c:590 #, c-format msgid "Line %d: Bad NAME syntax (%s %s)." msgstr "" #: src/liflines/valgdcom.c:820 #, fuzzy, c-format msgid "Line %d: Person %s has multiple father links." msgstr "Igikubo amahuza" #: src/liflines/valgdcom.c:824 #, fuzzy, c-format msgid "Line %d: Person %s has multiple mother links." msgstr "Igikubo amahuza" #: src/liflines/valgdcom.c:836 #, fuzzy, c-format msgid "Line %d: Person %s is both male and female." msgstr "ni Byombi Gabo Na Gore" #: src/liflines/valgdcom.c:840 #, fuzzy, c-format msgid "Line %d: Person %s is male but must be female." msgstr "ni Gabo Gore" #: src/liflines/valgdcom.c:844 #, fuzzy, c-format msgid "Line %d: Person %s is female but must be male." msgstr "ni Gore Gabo" #: src/liflines/valgdcom.c:848 #, fuzzy, c-format msgid "Line %d: Person %s is implied to be both male and female." msgstr "ni Kuri Byombi Gabo Na Gore" #: src/liflines/valgdcom.c:860 #, fuzzy, c-format msgid "Line %d: Family %s has multiple husband links." msgstr "Igikubo amahuza" #: src/liflines/valgdcom.c:864 #, fuzzy, c-format msgid "Line %d: Family %s has multiple wife links." msgstr "Igikubo amahuza" #: src/liflines/valgdcom.c:920 #, fuzzy msgid "error" msgstr "Ikosa" #: src/liflines/valgdcom.c:928 #, fuzzy, c-format msgid "%6d Error" msgid_plural "%6d Errors" msgstr[0] "%6dIkosa rya" msgstr[1] "%6dIkosa rya" #: src/liflines/valgdcom.c:930 src/liflines/valgdcom.c:958 #, fuzzy, c-format msgid " (see log file <%s>)" msgstr "(LOG IDOSIYE" #: src/liflines/valgdcom.c:932 src/liflines/valgdcom.c:960 #, fuzzy msgid " (no log file)" msgstr "(Oya LOG IDOSIYE" #: src/liflines/valgdcom.c:948 #, fuzzy msgid "warning" msgstr "Iburira" #: src/liflines/valgdcom.c:956 #, fuzzy, c-format msgid "%6d Warning" msgid_plural "%6d Warnings" msgstr[0] "%6dIburira" msgstr[1] "%6dIburira" #: src/liflines/valgdcom.c:1067 #, fuzzy, c-format msgid "Processed %d lines without finding end of HEAD" msgstr "Imirongo Impera Bya" #: src/liflines/valgdcom.c:1072 #, fuzzy, c-format msgid "End of file at line %d" msgstr "Impera Bya IDOSIYE ku Umurongo" #: src/liflines/valgdcom.c:1076 #, fuzzy, c-format msgid "Error at line %d: %s" msgstr "ku Umurongo" #: src/liflines/valgdcom.c:1080 #, fuzzy, c-format msgid "Bad level at line %d" msgstr "urwego ku Umurongo" #: src/liflines/valgdcom.c:1086 #, fuzzy, c-format msgid "Duplicate HEAD line at line %d" msgstr "Umurongo ku Umurongo" #: src/liflines/valgdcom.c:1092 #, fuzzy, c-format msgid "Missing HEAD line at line %d" msgstr "Umurongo ku Umurongo" #: src/stdlib/errlog.c:61 #, fuzzy, c-format msgid " in file <%s> at line %d\n" msgstr "in IDOSIYE ku Umurongo" # 1305 #: src/stdlib/errlog.c:63 #, fuzzy msgid "Current database" msgstr "ibyibanze bihari" #: src/tools/btedit.c:108 #, c-format msgid "btedit requires 2 arguments (btree and key)." msgstr "" #: src/tools/btedit.c:110 #, c-format msgid "See `btedit --help' for more information." msgstr "" #: src/tools/btedit.c:117 #, fuzzy, c-format msgid "Failed to open btree: %s." msgstr "OYA Gufungura IDOSIYE" #: src/tools/btedit.c:124 #, fuzzy, c-format msgid "There is no record with key: %s" msgstr "ni Oya Icyabitswe Na: Urufunguzo Cyangwa Indango" #: src/tools/btedit.c:126 #, fuzzy, c-format msgid "Error accessing record: %s" msgstr "Ibyatanzwe" #: src/tools/btedit.c:135 #, c-format msgid "Editor or system call failed." msgstr "" #: src/tools/btedit.c:137 #, fuzzy, c-format msgid "Database was not be modified." msgstr "Ububikoshingiro OYA" #: src/tools/btedit.c:143 #, fuzzy, c-format msgid "Readonly database can not be modified." msgstr "Ububikoshingiro OYA" #: src/tools/btedit.c:150 #, c-format msgid "Error writing file 'btedit.tmp'." msgstr "" #: src/tools/btedit.c:156 #, c-format msgid "Record %s modified." msgstr "" #: src/tools/btedit.c:226 #, fuzzy msgid "\"\\My Documents\\LifeLines\\Databases\\MyFamily\"" msgstr "\\MY" #: src/tools/btedit.c:228 src/tools/dbverify.c:232 #, fuzzy msgid "/home/users/myname/lifelines/databases/myfamily" msgstr "/Ku Ntangiriro Ububikoshingiro" #: src/tools/btedit.c:231 #, c-format msgid "" "lifelines `btedit' edits raw binary btree blocks\n" "in lifelines database files. Do NOT use this unless\n" "you know what you are doing and you have backed up\n" "your database." msgstr "" #: src/tools/btedit.c:236 #, c-format msgid "Usage btedit [database] [rkey]" msgstr "" #: src/tools/btedit.c:240 #, c-format msgid "\t--help\tdisplay this help and exit" msgstr "" #: src/tools/btedit.c:242 #, c-format msgid "\t--version\toutput version information and exit" msgstr "" #: src/tools/btedit.c:246 #, c-format msgid "\tbtedit %s I34" msgstr "" #: src/tools/btedit.c:248 #, c-format msgid "edit raw btree block for person I34" msgstr "" #: src/tools/dbverify.c:175 #, fuzzy msgid "Orphan names" msgstr "Amazina" #: src/tools/dbverify.c:176 #, fuzzy msgid "Ghost names" msgstr "Amazina" #: src/tools/dbverify.c:177 src/tools/dbverify.c:178 #, fuzzy msgid "Duplicate names" msgstr "Amazina" #: src/tools/dbverify.c:179 #, fuzzy msgid "Non-indi names" msgstr "Amazina" #: src/tools/dbverify.c:180 msgid "Duplicate individuals" msgstr "" #: src/tools/dbverify.c:181 msgid "Duplicate families" msgstr "" #: src/tools/dbverify.c:182 msgid "Duplicate sources" msgstr "" #: src/tools/dbverify.c:183 #, fuzzy msgid "Duplicate events" msgstr "Ibyabaye" #: src/tools/dbverify.c:184 #, fuzzy msgid "Duplicate others" msgstr "Ibindi" #: src/tools/dbverify.c:185 #, fuzzy msgid "Missing records (from deleteset)" msgstr "Ibyabitswe" #: src/tools/dbverify.c:186 #, fuzzy msgid "Deleted records" msgstr "Ibyabitswe" #: src/tools/dbverify.c:187 #, fuzzy msgid "Bad name" msgstr "Izina:" #: src/tools/dbverify.c:188 #, fuzzy msgid "Bad family reference" msgstr "Indango" #: src/tools/dbverify.c:189 msgid "Missing child" msgstr "" #: src/tools/dbverify.c:190 msgid "Missing spouse" msgstr "" #: src/tools/dbverify.c:191 #, fuzzy msgid "Bad HUSB reference" msgstr "Indango" #: src/tools/dbverify.c:192 #, fuzzy msgid "Bad WIFE reference" msgstr "Indango" #: src/tools/dbverify.c:193 #, fuzzy msgid "Bad CHIL reference" msgstr "Indango" #: src/tools/dbverify.c:194 msgid "Improper HUSB" msgstr "" #: src/tools/dbverify.c:195 msgid "Improper WIFE" msgstr "" #: src/tools/dbverify.c:196 msgid "Improper child" msgstr "" #: src/tools/dbverify.c:197 msgid "Empty family" msgstr "" #: src/tools/dbverify.c:198 msgid "Single person family" msgstr "" #: src/tools/dbverify.c:199 #, fuzzy msgid "Bad pointer" msgstr "Mweretsi" #: src/tools/dbverify.c:200 #, fuzzy msgid "Missing data records" msgstr "Ibyabitswe" #: src/tools/dbverify.c:230 #, fuzzy msgid "\\My Documents\\LifeLines\\Databases\\MyFamily" msgstr "\\MY" #: src/tools/dbverify.c:236 #, c-format msgid "usage: dbverify -(flags) \n" msgstr "" #: src/tools/dbverify.c:237 #, c-format msgid "flags:\n" msgstr "" #: src/tools/dbverify.c:238 #, c-format msgid "\t-a = Perform all checks (does not include fixes)\n" msgstr "" #: src/tools/dbverify.c:239 #, c-format msgid "\t-g = Check for ghosts (names/refns)\n" msgstr "" #: src/tools/dbverify.c:240 #, c-format msgid "\t-G = Check for & fix ghosts (names/refns)\n" msgstr "" #: src/tools/dbverify.c:241 #, c-format msgid "\t-i = Check individuals\n" msgstr "" #: src/tools/dbverify.c:242 #, c-format msgid "\t-f = Check families\n" msgstr "" #: src/tools/dbverify.c:243 #, c-format msgid "\t-F = Alter any bad family lineage pointers (to _badptr)\n" msgstr "" #: src/tools/dbverify.c:244 #, c-format msgid "\t-h = Display help text (this text)\n" msgstr "" #: src/tools/dbverify.c:245 #, c-format msgid "\t-s = Check sours\n" msgstr "" #: src/tools/dbverify.c:246 #, c-format msgid "\t-e = Check events\n" msgstr "" #: src/tools/dbverify.c:247 #, c-format msgid "\t-x = Check others\n" msgstr "" #: src/tools/dbverify.c:248 #, c-format msgid "\t-l = Check database structure\n" msgstr "" #: src/tools/dbverify.c:249 #, c-format msgid "\t-m = Check for records missing data entries\n" msgstr "" #: src/tools/dbverify.c:250 #, c-format msgid "\t-M = Fix records missing data entries\n" msgstr "" #: src/tools/dbverify.c:251 #, c-format msgid "\t-D = Fix bad delete entries\n" msgstr "" #: src/tools/dbverify.c:252 #, c-format msgid "\t-n = Noisy (echo every record processed)\n" msgstr "" #: src/tools/dbverify.c:253 #, fuzzy, c-format msgid "example: dbverify -ifsex \"%s\"\n" msgstr "Urugero" #: src/tools/dbverify.c:386 #, fuzzy, c-format msgid "Non-indi name, key=%s, name=%s" msgstr "Izina: Urufunguzo Izina:" #: src/tools/dbverify.c:403 #, fuzzy, c-format msgid "Orphaned name: %s" msgstr "Izina:" #: src/tools/dbverify.c:417 #, fuzzy, c-format msgid "Ghost name: %s -> %s" msgstr "Izina:" #: src/tools/dbverify.c:449 #, c-format msgid "Orphaned refn: %s" msgstr "" #: src/tools/dbverify.c:489 #, fuzzy, c-format msgid "Duplicate name for %s (%s)" msgstr "Izina: kugirango" #: src/tools/dbverify.c:524 #, fuzzy, c-format msgid "Duplicate refn for %s (%s)" msgstr "kugirango" #: src/tools/dbverify.c:637 #, fuzzy, c-format msgid "Duplicate individual for %s" msgstr "kugirango" #: src/tools/dbverify.c:679 #, fuzzy, c-format msgid "Bad name for individual %s: %s" msgstr "Izina: kugirango" #: src/tools/dbverify.c:697 src/tools/dbverify.c:721 #, fuzzy, c-format msgid "Bad family reference (%s) individual %s" msgstr "Indango" #: src/tools/dbverify.c:703 #, fuzzy, c-format msgid "Missing child (%s) in family (%s)" msgstr "in" #: src/tools/dbverify.c:707 #, fuzzy, c-format msgid "Fixed missing child (%s) in family (%s)" msgstr "in" #: src/tools/dbverify.c:727 #, fuzzy, c-format msgid "Missing spouse (%s) in family (%s)" msgstr "in" #: src/tools/dbverify.c:731 #, fuzzy, c-format msgid "Fixed missing spouse (%s) in family (%s)" msgstr "in" #: src/tools/dbverify.c:765 #, fuzzy, c-format msgid "Duplicate family for %s" msgstr "kugirango" #: src/tools/dbverify.c:816 #, fuzzy, c-format msgid "Bad HUSB reference (%s) in family %s" msgstr "Indango in" #: src/tools/dbverify.c:822 #, fuzzy, c-format msgid "Fixed Bad HUSB reference (%s) in family %s" msgstr "Indango in" #: src/tools/dbverify.c:831 #, fuzzy, c-format msgid "Improper HUSB (%s) in family (%s)" msgstr "in" #: src/tools/dbverify.c:844 #, fuzzy, c-format msgid "Bad wife reference (%s) in family %s" msgstr "Indango in" #: src/tools/dbverify.c:850 #, fuzzy, c-format msgid "Fixed Bad wife reference (%s) in family %s" msgstr "Indango in" #: src/tools/dbverify.c:859 #, fuzzy, c-format msgid "Improper wife (%s) in family (%s)" msgstr "in" #: src/tools/dbverify.c:872 #, fuzzy, c-format msgid "Bad child reference (%s) in family %s" msgstr "Indango in" #: src/tools/dbverify.c:878 #, fuzzy, c-format msgid "Fixed bad child reference (%s) in family %s" msgstr "Indango in" #: src/tools/dbverify.c:887 #, fuzzy, c-format msgid "Improper child: Child (%s) without FAMC reference to family (%s)" msgstr "in" #: src/tools/dbverify.c:895 #, c-format msgid "Empty family (%s)" msgstr "" #: src/tools/dbverify.c:897 #, c-format msgid "Single person family (%s)" msgstr "" #: src/tools/dbverify.c:923 #, fuzzy, c-format msgid "Duplicate source for %s" msgstr "Inkomoko kugirango" #: src/tools/dbverify.c:939 #, fuzzy, c-format msgid "Duplicate event for %s" msgstr "Icyabaye kugirango" #: src/tools/dbverify.c:955 #, fuzzy, c-format msgid "Duplicate record for %s" msgstr "Icyabitswe kugirango" #: src/tools/dbverify.c:1026 #, fuzzy, c-format msgid "Bad pointer (in %s): %s" msgstr "Mweretsi in" #: src/tools/dbverify.c:1064 #, fuzzy, c-format msgid "Missing undeleted record %c%d" msgstr "Icyabitswe" #: src/tools/dbverify.c:1071 #, fuzzy, c-format msgid "Fixed missing undeleted record %c%d" msgstr "Icyabitswe" #: src/tools/dbverify.c:1075 #, fuzzy, c-format msgid "Failed to fix missing undeleted record %c%d" msgstr "Icyabitswe" #: src/tools/dbverify.c:1087 #, fuzzy, c-format msgid "Delete set contains valid record %s" msgstr "Gushyiraho Kirimo Byemewe Icyabitswe" #: src/tools/dbverify.c:1092 #, fuzzy, c-format msgid "Fixed delete set contains valid record %s" msgstr "Gushyiraho Kirimo Byemewe Icyabitswe" #: src/tools/dbverify.c:1096 #, fuzzy, c-format msgid "Failed to fix missing undeleted record %s" msgstr "Icyabitswe" #: src/tools/dbverify.c:1117 #, c-format msgid "Master fkey misaligned" msgstr "" #: src/tools/dbverify.c:1144 #, c-format msgid "Cycle in indexes, file %s found again!\n" msgstr "" #: src/tools/dbverify.c:1151 #, fuzzy, c-format msgid "Error loading index at key" msgstr "Ibyatanzwe" #: src/tools/dbverify.c:1199 #, c-format msgid "First key in block below parent's limit\n" msgstr "" #: src/tools/dbverify.c:1207 #, c-format msgid "Last key in block above parent's limit\n" msgstr "" #: src/tools/dbverify.c:1215 #, c-format msgid "Key not below next key" msgstr "" #: src/tools/dbverify.c:1232 src/tools/dbverify.c:1234 msgid "data block" msgstr "" #: src/tools/dbverify.c:1235 #, c-format msgid "%s fkey=%d, file=%s" msgstr "" #: src/tools/dbverify.c:1248 #, fuzzy, c-format msgid "Invalid errs array[%d] in dbverify - fix program\n" msgstr "Imbonerahamwe in" #: src/tools/dbverify.c:1285 #, fuzzy, c-format msgid "Missing data record (%s)" msgstr "Ibyabitswe" #: src/tools/dbverify.c:1289 #, fuzzy, c-format msgid "Fixed missing data record (%s)" msgstr "Ibyabitswe" #: src/tools/dbverify.c:1420 #, c-format msgid "Checking %s" msgstr "" #: src/tools/dbverify.c:1476 #, fuzzy, c-format msgid "%d error" msgid_plural "%d errors" msgstr[0] "%dIkosa rya" msgstr[1] "%dIkosa rya" # sw/source\ui\utlui\initui.src:RID_SW_SHELLRES.STR_FIELD_FIXED.text #: src/tools/dbverify.c:1480 #, fuzzy, c-format msgid "%d fixed" msgid_plural "%d fixed" msgstr[0] "%dbidahinduka)" msgstr[1] "%dbidahinduka)" #: src/tools/dbverify.c:1487 #, fuzzy msgid "No errors found" msgstr "Amakosa Byabonetse" #: src/tools/dbverify.c:1506 #, c-format msgid "FATAL ERROR: " msgstr "" #: src/tools/dbverify.c:1511 #, fuzzy, c-format msgid "In file <%s> at line %d" msgstr "IDOSIYE ku Umurongo" #~ msgid "Program" #~ msgstr "Porogaramu" #, fuzzy #~ msgid "Error: output file <%s> could not be created.\n" #~ msgstr "Ibisohoka IDOSIYE OYA Byaremwe" #, fuzzy #~ msgid "Added (%dP, %dF, %dS, %dE, %dX) records" #~ msgstr "Ibyabitswe" #, fuzzy #~ msgid "" #~ "usage: dbverify -(flags) \n" #~ "flags:\n" #~ "\t-a = Perform all checks (does not include fixes)\n" #~ "\t-g = Check for ghosts (names/refns)\n" #~ "\t-G = Check for & fix ghosts (names/refns)\n" #~ "\t-i = Check individuals\n" #~ "\t-f = Check families\n" #~ "\t-s = Check sours\n" #~ "\t-e = Check events\n" #~ "\t-x = Check others\n" #~ "\t-n = Noisy (echo every record processed)\n" #~ msgstr "" #~ "Ikoresha: Amabendera Amabendera a Byose OYA Gushyiramo g kugirango " #~ "Amazina kugirango Amazina i F S E X N buri Icyabitswe" lifelines-3.0.61/po/sv.gmo0000700002540200244210000025733710656417757015556 0ustar prappDomain UsersÞ•T¼"É\E€\"\.¤\Ó\9ñ\++]'W]2]²]Æ]%Ü]$^'^@^-`^*Ž^¹^Ì^à^ï^%_5_R_m_ }_Š_ ™_¦_»_Î_ ß_í_ÿ_`"`1`A`,Q`~`‘`¥`´`Å`Ë`Ò`Ø`ß`ã`ø`a#a8aOacavaˆa™a¸aÍa2âab-b6b?bHb Qb_b ebsb‚b–b'¯b×b õbc!(cJcec"ƒc"¦c!Éc ëc d,d!Ld!ndd!¯d Ñd#òd#e4:eoeŽe¬eÌe%èef*fHfcff¡f ÁfÎfàf÷f gg1g$Kg pg{g&Œg³gÌgÛgïghh h,h 2h@hXh rh/h;¯h(ëh i&"i'Ii&qi&˜i&¿i&æi j"j =jGj[jqj&‚j+©jÕjÚjàj ãjïj þj% k/k$Jk=ok>­k%ìk)l¸o<÷o24pLgp*´p&ßp q!q-4qbqwqq$£q%ÈqîqrFr<_r/œr*Ìr@÷r38s.ls›s²s,Ês4÷s,tBt]tnt'Št²t%Át;çt#u7uHu^u|u‹u#¨uÌu1Üu/v>v3Rv5†v6¼v6óv6*w6aw;˜w/Ôw.x<3x=px'®x)Öx(y))y)Sy)}y)§y'Ñy$ùyKz%jzLz%ÝzL{%P{Lv{%Ã{Lé{"6|Y|t|“|ª|»|Î|1æ|}6}R}h}ƒ}“}1¤}Ö}î} ~!~ 3~T~-]~‹~©~ ¼~É~Û~ ò~0$Lq‘"«,Î-û&)€)P€$z€<Ÿ€Ü€ õ€2G d…¡ ¼Ýù‚-4‚ b‚(o‚ ˜‚¢‚ »‚ ǂՂ+î‚)ƒDƒ0^ƒƒ)Ÿƒ ɃÕƒ/èƒ(„*A„*l„+—„)Ä'í„…(4…#]……-ˆ…5¶…ì…ÿ…†"†8†O† d†p††ˆ†‹††$“†¸†7̆ ‡)‡88‡*q‡,œ‡!ɇ ë‡B ˆ%Oˆ.uˆ¤ˆ$Áˆ3æˆ2‰4M‰‚‰!¡‰)É"í‰*Š,;Š(hŠ7‘ŠÉŠ áŠ!ïŠ ‹‹@.‹!o‹‘‹ ©‹6µ‹ì‹ÿ‹Œ$Œ8ŒKŒ^Œ1qŒ'£ŒËŒãŒ"üŒ"-Bpu'Œ5´5ê2 Ž0SŽ„Ž2›Ž6ÎŽ6!<'^(†.¯+Þ' 12-d-’+À.ì9‘.U‘)„‘(®‘)ב(’2*’+]’,‰’5¶’,ì’,“7F“"~“8¡“(Ú“'”!+”!M”o”0”.À”/ï”8•/X•/ˆ•¸•ȕޕ@ó•4–F–,X–…–&œ–)Ö í–=÷–>5—t—2‘— Ä—!Ò—ô— ˜ "˜C˜"R˜ u˜ƒ˜¡˜/¨˜3ؘ ™™&™D™a™+{™§™7¸™ ð™Aþ™#@šdš*tš/ŸšÏšâšòš$›)›E›*X›ƒ›œ›³›Ò›æ›õ›œœ*%œPœcœ‚œ‘œ¥œ·œ ÀœÍœßœ ñœ þœ 7Qo„›)ª#Ôø&ž&;ž'bž&Šž)±ž%Ûž2Ÿ 4Ÿ&UŸ.|Ÿ+«Ÿ,ן4 19 3k +Ÿ Ë  ë $ ¡,1¡-^¡5Œ¡2¡4õ¡!*¢-L¢:z¢)µ¢)ߢ) £,3£#`£/„£$´£Ù£ô£3¤D¤#T¤x¤.¤°¤Fʤ¥$'¥L¥'d¥Œ¥«¥Ä¥ É¥!×¥ù¥&¦)<¦f¦z¦(•¦¾¦Ϧ ߦí¦0§*4§_§/r§¢§½§ЧÙ§ë§ô§0¨)4¨7^¨–¨š¨¯¨4ɨþ¨) ©7©F©a©}©™© ©¿© Ó©)Þ©7ª*@ªkª!Šª)¬ªvÖª-M«{«3–«6Ê«5¬67¬5n¬¤¬¾¬'Ú¬;­8>­(w­! ­)­7ì­!$®+F®*r®+®,É®,ö®#¯(8¯La¯H®¯(÷¯+ °L°k°6а1Á°6ó°*±.J±'y±G¡±1é±6².R²-²8¯²3è²4³8Q³6г)Á³–ë³)‚´,¬´1Ù´* µ36µ9jµ+¤µ)е7úµ82¶4k¶- ¶.ζ,ý¶,*·.W·2†·,¹·æ·%ï·¸(¸00¸4a¸ –¸ ¤¸²¸ɸ(ä¸ ¹ ¹@/¹p¹¹#®¹€Ò¹Sº iºwº%ˆº&®º Õº%ߺG»M»f»$‚» §»<È» ¼4&¼[¼%k¼$‘¼,¶¼,ã¼'½(8½,a½޽)¨½Ò½@ï½"0¾S¾&s¾2š¾0;1þ¾20¿1c¿1•¿1Ç¿ù¿À*.ÀYÀpÀÀ’À¢À³ÀÆÀÙÀëÀþÀ Á"#ÁFÁZÁoÁsÁ|ÁƒÁ ˆÁ“Á˜ÁœÁ Á§Á°Á´ÁºÁ¾ÁÅÁÈÁ%ÞÁÂÂ-Â1Â7Â<ÂCÂHÂM T ^ÂlÂ~ƒˆÂ”Â,ÂÊÂÐÂÕÂÜÂò Ã,"Ã-OÃJ}ÃÈà ÏÃÝÃâÃëÃñÃ+öÃ,"Ä?OÄ+Ä »ÄÜÄáÄåÄûÄ'Å7ÅJÅ_Å{Å Å$ŠÅ¯Å³Å¼ÅÁÅÈÅÎÅæÅõÅÆ#Æ?ÆSÆfÆ!yÆ#›Æ¿ÆÒÆëÆÇ ÇÇÇ"Ç&Ç+Ç;ÇQÇ`Ç tÇ Ç ŒÇ™Ç¨ÇÂÇ#ÈÇìÇ È(È /È<È[ÈtȈÈÈ8²È&ëÈÉ(É:ÉAÉEÉNÉTÉZÉ_ÉgÉlÉtÉyÉ€É †É’É—É É ¨É¶É »É%ÅÉëÉÿÉÊ2Ê7Ê@Ê[ÊsʃʔʗʛʠʤʨʸÊ#ÎÊ*òÊ)Ë*GË.rË¡ËºË ÐË"ÞËÌÌ%Ì*Ì.ÌEÌWÌ[ÌcÌwÌ{̶̦̀̄̉ÌÊÌæÌÍÍ% ͦ1ÍFØÍ%Î:E΀ΔΩξÎÒÎìÎðÎôÎ úÎÏÏÏ*Ï;ÏLÏ]ÏnÏÏϕϞϥÏ,ºÏçÏùÏ!Ð9Ð>ÐDÐJÐOÐVÐkÐ8~Ð+·Ð-ãÐÑÑÑ"Ñ3ÑFÑ]Ñ){ѥѩѱѵÑ*ÆÑ"ñÑ ÒÒ%Ò*Ò3Ò8ÒAÒQÒhÒ*ƒÒ"®Ò ÑÒÞÒòÒÓÓ/ÓHÓ"bÓ…ÓŠÓ¢Ó»ÓÑÓ%èÓÔ.!Ô)PÔ#zÔžÔ¥Ô ©Ô³ÔÎÔÔÔÜÔàÔçÔ ëÔùÔÿÔÕ$ Õ.Õ$5ÕZÕ^ÕoÕ&„Õ«Õ±ÕÇÕËÕÑÕ×ÕíÕ,Ö-0Ö(^Ö*‡Ö²Ö ·ÖÁÖÇÖÍÖÔÖêÖîÖôÖ ××%×:×O×S×[×b×f×{×!–×H¸×Ø ØØØØ'Ø)?ØiØ~ؓبØ'½ØåØþØÙÙÙÙ-Ù~>Ù$½Ú3âÚ,ÛACÛ-…Û,³Û9àÛÜ7Ü$SÜ"xÜ›Ü"¸Ü8ÛÜ,ÝAÝ[ÝuÝ)„ÝA®ÝðÝ Þ(Þ7ÞGÞXÞgÞzÞŠÞšÞ «ÞµÞÅÞÔÞäÞôÞ.ß3ßGß\ßnß߅ߌߒߙßß­ßÇßÙßéßÿß à'à:à!Màoàà1—àÉàáàêàóàüàáá"á6áJá]á/uá¥áÀáÝá ôáâ2â(Râ({â)¤â(Îâ(÷â& ã)Gã'qã.™ã+Èã)ôã+ä*Jä;uä#±ä$Õä&úä#!å.Eå!tå$–å)»å$åå& æ%1æWæfæxææ£æ´æÇæ ãæ çç""çEç_çnç€ç“ç¥ç©ç¾çÆçÜçôç è2è;Oè,‹è ¸è$Æè ëè( é$5é-Zé,ˆéµéÄé ßéééûé ê-ê-Jêxêêˆê Œê˜ê ¬ê5·êíê* ëC6ëAzë=¼ë1úë,ìCìJìQìUìYìaìwì&ì´ìÊì+àì í+,íXímí@í Îíïí'î%/îUîoî…î î «îÌîÛîöî+ ï69ï#pï(”ï0½ïîïõï+ùï%ð=:ð=xð:¶ðSñð7Eñ3}ñ±ñ#Áñ5åñò.òEò'Vò(~ò§òÄòIØòB"ó7eó.óGÌó/ô.Dôsôô*¨ô8Óô õ!õ=õMõ#iõ õ%—õ@½õþõ öö2öOö`ö5öµö*Æö(ñö÷7,÷;d÷: ÷:Û÷8ø8OøFˆø1Ïø1ù=3ùBqù ´ù-Õù.ú-2ú-`ú+Žú+ºúæú ûK%ûqûJ‘ûÜûJüûGüHeü®üHÌü ý6ýOýmý‡ýœý°ý3Èý"üýþ8þMþiþyþ3‹þ¿þÕþñþÿÿ1ÿ=:ÿ'xÿ ÿ ³ÿ¾ÿÎÿ'áÿ! #+-O+}©#Å4é8'W.!®8Ð %-A]p‡&¡$È(í. J+k—3ªÞçÿ5/3e%™.¿î2þ1@<T/‘-Á2ï2")U%¥*Â"í'6?v“1¦=Ø=Tgp‚ŠŽ•"š½>Ó ) 8D -} 7« ,ã & G7 / -¯ Ý 0ù C* =n D¬ %ñ ( 6@ 'w 5Ÿ 5Õ % 71 $i  Ž  œ  ½ Ë =Ú  9 Q6\“¦¸Íßò3/M}—¶Õ0ò#!)-K=y3·1ë.L0c4”4É$þ,#+P3|3°*ä83H3|+°2Ü82H0{)¬)Ö)/*6Z5‘BÇ3 3>;r&®6Õ( '5"]"€£/Â=ò<0Im:·:ò->WFnµË&à"%(H q=~>¼û1 HTsˆ›»#Ì ðý+ 0L }ˆ›#¸Ü.ô#B8{H0Ø /8K„š«&¿"æ /Ll!ƒ¥¸Ñë 0 N $_ „ • « ½ Æ Ø î  ! !!3!M!j!ˆ!ž!¶!2Æ!ù!"#,"P"l"†""ž"Á"$Ý"##!;#(]#*†#.±#.à#7$!G$i$"$¤$'¿$)ç$-%-?%6m%¤%)¼%1æ%*& C&*d&"&²&3Í&''1'2H'{',Š' ·'1Á'ó'I (V("f(‰( ›(¼(Ú(õ(ü( )0))K)0u)¦)º)-Ù)** **7*<W*0”*Å*7Ù*+*+;+D+T+ [+;g+'£+<Ë+, ,$,3A, u,0‚,³, Ã, ä,*-0-!7-Y-b-/q->¡-"à-#.%'.(M.mv.0ä./90/?j/9ª/6ä/40P0d0#}04¡09Ö0"1"31(V191¹1)Ô1"þ1#!2#E2#i22 œ2R½2P3 a3'‚3ª3Ã31à314=D4#‚46¦4Ý4<ò4(/5.X5/‡51·5Ré54<6@q6:²68í62&7ŸY7%ù7'80G8-x80¦8;×8+9)?95i9<Ÿ9=Ü9#:/>:+n:+š:/Æ:6ö:5-;c;(k;”;°;1·;6é; <1<"B<'e<*<¸< Í<7Ú<=")=7L=„=">:>I>0[>.Œ>»> Â>Gã>+?C?!X?z?E—?Ý?+û?'@ >@_@'@$§@%Ì@!ò@#A8ANAnA@‹AÌAçA&B3(B0\B0B0¾B1ïB0!C1RC „C¥C,¸CåCõCDD-D?DSDeDzDD¤D$¸DÝDöD E EEE $E/E4E8EFkFqFvF}F’F&¦F2ÍF+GM,GzG GG’G›G G5¥G5ÛGOH5aH&—H¾HÃHÇHÞH%ôHI.ICI\I `I&jI‘I•IžI¢I¨I­IÉIÚIïI"J'J@JVJ$mJ'’JºJ(×J(K)K.K6K;KAKEKJK[KrKƒKŸK±KÁKÓKåKL" L#,L%PLvL }L‹LªLÇLÝLñL4 M*?MjM†MœM¢M¦M¯MµM¼M ÀMÊMÏM×MÜMãM éMôMùMN NN N!)NKN(`N(‰N²N·NÀNßNûNO(O,O3O9O?ODOZO(sO*œO/ÇO6÷O8.PgP„PžP%°PÖPðPQ QQ%Q9Q=QEQYQ]QbQfQ!kQQ¡Q¸Q×QôQûQ(ÿQ¢(REËR$S66SmSƒS˜S±SÈSàSäSèSíSõSùSûSýSÿSTTTT TTTT/0T`T!wT™T¸T¼TÃTÉTÎTÕTðT@ U2JU5}U³U·UÀUÄUØUîU)V./V^VbVjV mV+zV%¦V ÌVÖVÝVâVëVðVùVW)W/HW!xWšWªWÃWÙWóW+X+?X&kX’X™XµXÍXéX"Y'Y;:Y<vY(³YÜYâY æYðY ZZZZ"Z &Z4Z:Z>Z EZ fZ pZ‘Z•ZªZ(ÁZêZðZ[[[[.[@E[>†[2Å[4ø[-\ 2\<\C\G\N\i\m\r\‘\•\¬\Ã\Ú\Þ\å\ê\î\](]IB]Œ] ‘]]¢]ª]²]-Ð]þ]^'^=^/Q^^˜^§^¬^³^¸^Ì^Øoòïq(–N±üÙác†B5ÓoLû²ÃQ ­`¸†ÑÀR.,8y¬›&‘‰¥Ò§z¿žU}€UwÝð!ÆíñóœF£ >5_ÛlqB`ä¢>­ý'[ͼL%©ö•ù ^æ¼»6hZ{Õn-Ž7¹ü°¬mïæF‰ŠoîOЂÊß6ÿ£Ô{ôèŠ9ÆPá·\/¶!_,-Å®ËÇú½Ö±1-Ï Q"TS/ž¡fÐ﹚~ ¢® Ç ´$Ó¢z°š>¤™³¤å‡Mj%(›A]pHèÔØì÷SH«ÛU]½<^„cßEsÃ0´[2ŽÙ¥Ýr1ÚY8¸ÐiDJ\\½0KyˆÕ*pãÅ?[o7J×Îàí]Á=uØ}|ZhЛӕ}_ËZJbÍÈ ìÄ9us݉ε­1õ ;ÏÔ݅—€Œ0fî ñðž(¬åXlÌ u©ÞÜ Ÿ'’.(T@BCÜ“÷é5‚—<#qÄf`RÍÚ‘PO;rû&Y#:¦š" ºÁåòj4á+b¯Â·š¿X#¥™ÏÿÇëɪ›Ñ.äQËE±;¦Þ¡×Ò”ßd¸p3t 9f3‰r<µaGûøl]Ép Ikáºç@«†±P1´ýç%8mÒ©úµ’¦ˆÎEÎ!„|ÊVJetÍ? 3`‘ßÔ€¤VLN“T(#D÷;mvÅèQÿ;˜Jd¡œh**„+%UÁ R¹.:V¿heI!ÌÈ•§‹«)P¥œü«N vIì¾A˜øN9CLjYªG³H¶“ãdv–tnmg}ÿnòNq !2¯Ì~¢"CxrH¾z8¨ÄIÔ 0’k'@ÛWñž:ïׄ»—õ¾'FÕ…Ù0Ò°Ñ ¼C{Èõ ²O^QêÂ3i¾’ôw?i7¯w4OÛ2Sñ¸'‚à/2Öë>yM#ô» xþÓM[I&â”iÏ“S1óOB®_ÞºÌþ³â,xDsVƒ|$*äë"·6PLþ,§²Mxdý®wãŽÞþ2¯êcŸk.îsà)Ä8 Aù¡µ4n³XÀƒ)•Á^~¶öõ?Êg{‡FŸªä¦Ùö@ìGEÃç‚ÜêK⺙:vcTù°´ü†ƒ %¹ŒRgyýÉ-€ËW6)òbèu‹H b 5? :ûéÀðTj+Õ–²=FÖÊ­"♜=>z¨LS‹)7¶XëDKW$~6KˆôlíEØa|té+Æ=éÜ7Y¬¨£3\»9‹$<ŽAúêj‡+å ‘…A˜í&aŸ5ð/Šk e  CZ©ÑDaWóƒãG—4*,§GM…Ææg<ª¼Ö¨K=½÷ Ú4×Ќɖ”ö·Å$æÈŒ¿ù/À&¤ç£àB-Rúó˜‡ø øÚ@îe --help display this help and exit --version output version information and exit -D = Fix bad delete entries -F = Alter any bad family lineage pointers (to _badptr) -G = Check for & fix ghosts (names/refns) -M = Fix records missing data entries -a = Perform all checks (does not include fixes) -e = Check events -f = Check families -g = Check for ghosts (names/refns) -h = Display help text (this text) -i = Check individuals -l = Check database structure -m = Check for records missing data entries -n = Noisy (echo every record processed) -s = Check sours -x = Check others btedit %s I34 Aborting now. Core dump? [y/n] Report duration %s (ui duration %s) in file <%s> at line %d in file <%s> at line %d (dbint tt: %s) (immutable) (no log file) (read only) (see log file <%s>) Go down one level Go up one level!! Cycle mode!a Ancestors mode!d Descendants mode!g GEDCOM mode!n Normal mode!t GEDCOMT mode!x GEDCOMX mode"\My Documents\LifeLines\Databases\MyFamily"# Toggle childnos$$ List references$n List notes$s List sources%02ds%1 AUC%1 FR%1 HEB%1J%6d Error%6d Errors%6d Warning%6d Warnings%c Reorder child%d child%d children%d element%d elements%d entry%d entries%d error%d errors%d fixed%d fixed%d item%d items%d item leaked%d items leaked%d record%d records%d spouse%d spouses%d warning during import%d warnings during import%dI, %dF, %dS, %dE, %dX%dd%02dh%dh%02dm%dm%02ds%dy%03dd%e Add event%ldth%o Add other%s Add source%s fkey=%d, file=%s%s was added as a child.%s was added as a spouse and/or parent.%s was added to the database.%s was modified in the database.%s: Bad arguments%s: Incomparable types: %s and %s%s: line %d (entry %d): %s%s: null arg not permissible.%s: the arg #%s had a major error.%s: the arg #%s must be a boolean.%s: the arg #%s must be a family.%s: the arg #%s must be a float.%s: the arg #%s must be a list.%s: the arg #%s must be a node.%s: the arg #%s must be a person.%s: the arg #%s must be a record.%s: the arg #%s must be a set.%s: the arg #%s must be a string.%s: the arg #%s must be a table.%s: the arg #%s must be a variable.%s: the arg #%s must be an integer.%s: the arg #%s would cause an arithmetic exception.%s: the arg had a major error.%s: the arg must be a family.%s: the arg must be a filename.%s: the arg must be a list.%s: the arg must be a node or string.%s: the arg must be a node.%s: the arg must be a person.%s: the arg must be a set.%s: the arg must be a string.%s: the arg must be a variable.%s: the arg must be an integer.( Scroll up(( Scroll both up(1-9) Browse to child(Family %s (%s, %s)(Separator is %s)(b Scroll bottom up(change history is empty)(givens) person does not have a name(pg %d/%d)(t Scroll top up(trimname) person does not have a name(visit history is empty)) Scroll down)) Scroll both down)b Scroll bottom down)t Scroll top down**may+ Next in db, of - Prev in db-- CURRENT SELECTION ----- CURRENT SELECTION ------ LIST ---/home/users/myname/lifelines/databases/myfamily0 EVEN 1 REFN 1 DATE 1 PLAC 1 INDI 2 NAME 2 ROLE 1 SOUR0 SOUR 1 REFN 1 TITL Title 1 AUTH Author0 XXXX 1 REFN1 Add a source record to the database2 Edit source record from the database3 Add an event record to the database4 Edit event record from the database5 Add an other record to the database6 Edit other record from the database< Enlarge menu area> Shrink menu area? Other menu choicesA Advanced viewA family cannot be merged with itself.A person cannot be merged with him/herself.A.D.ABORTADALARM CLOCKASSERT failureAborting: Adding unused keys as deleted keys...Ambiguous call to proc: %sAre you sure you want to merge them?Are you sure you want to remove the person from the database?Are you sure you want to remove this record from the database?Argument to lock (-l) must be y or n.Arguments to (r)sort must be of same sizeB Browse new familyB.C.B.C.E.BCBCEBUS ERRORBad CHIL referenceBad HUSB referenceBad HUSB reference (%s) in family %sBad HUSB tag: %sBad WIFE referenceBad backup history countBad cache entry <%s> != <%s>Bad child reference (%s) in family %sBad child tag: %sBad decimal number format.Bad escape code at offset %d in bytecode string <%s>Bad escape format.Bad family referenceBad family reference (%s) individual %sBad hexidecimal number format.Bad history countBad history lengthBad level at line %dBad nameBad name for individual %s: %sBad pointerBad pointer (in %s): %sBad spouse tag: %sBad wife reference (%s) in family %sBecause of errors the GEDCOM file was not loaded. Both families must have husbands/fathers.Both families must have wives/mothers.Browse new record (without adding xref).C.E.CECache [%s] overflowed its max size (%d)Cached: I:%s; F:%sCall stack has %d higher levelCall stack has %d higher levelsCall stack has %d lower levelCall stack has %d lower levelsCannot combine forceopen (-f) and lock (-l) flags.Cannot combine immutable (-i) or read-only (-r) with read-write (-w) access.Cannot convert codeset (from <%s> to <%s>)Cannot remove last person from family.Checking %sChecking GEDCOM file for errors. Choose a family by selecting a spouse/parent.Choose an operation:Choose database to openChoose from historyClash with longer hotkey in item: %sClash with shorter hotkey in item: %sCodeset informationCollation routine: %sCommands: Select by number, u Page Up, d Page Down, i Select, q QuitCommands: j Move down k Move up i Select q QuitCommands: j Move down k Move up q QuitCommands: u Page Up, d Page Down, q QuitCommands: j Move down k Move up d Delete i Select q QuitCopyright (C) 1991-2007 Thomas T. Wetmore IV et al.Copyright(c) 1991 to 1996, by T. T. Wetmore IVCould not open file %sCould not open file %s.Create a family with this person as a child.Create a family with this person as a spouse/parent.Current Database - %sCurrent collate locale: %sCurrent databaseCurrent messages locale: %sCycle in indexes, file %s found again! DEATH OF CHILDDatabase `%s' has been saved in `%s'.Database error caused by reference to nonexisting key <%s>.Database error: -- Database recordsDatabase was corrupt.Database was not be modified.Default path: Delete history (%d entries)?Delete set contains valid record %sDeleted recordsDisplay global (%d var)Display globals (%d vars)Display local (%d var)Display locals (%d vars)Display to InternalDo you really want to add this child to the family?Do you really want to add this event to the database?Do you really want to add this family to the database?Do you really want to add this person to the database?Do you really want to add this record to the database?Do you really want to add this source to the database?Do you really want to add this spouse/parent to the family?Do you really want to merge these two families?Do you really want to merge these two persons?Do you really want to remove this child from his/her family?Do you really want to remove this spouse from his/her family?Do you really want to reorder children?Do you really want to swap spouse orders?Do you really want to update this event?Do you really want to update this family?Do you really want to update this person?Do you really want to update this record?Do you really want to update this source?Do you want to create a database there?Do you want to edit the event again?Do you want to edit the event again? (Otherwise changes will be discarded.)Do you want to edit the family again?Do you want to edit the family again? (Otherwise changes will be discarded.)Do you want to edit the person again?Do you want to edit the person again? (Otherwise changes will be discarded.)Do you want to edit the record again?Do you want to edit the record again? (Otherwise changes will be discarded.)Do you want to edit the source again?Do you want to edit the source again? (Otherwise changes will be discarded.)Do you want to enter another name?Do you want to re-edit it?Duplicate HEAD line at line %dDuplicate event for %sDuplicate eventsDuplicate familiesDuplicate family for %sDuplicate func %s (lines %d and %d) in report: %sDuplicate hotkey for item: %sDuplicate individual for %sDuplicate individualsDuplicate name for %s (%s)Duplicate namesDuplicate othersDuplicate proc %s (lines %d and %d) in report: %sDuplicate record for %sDuplicate refn for %s (%s)Duplicate source for %sDuplicate sourcesDuplicated REFN - please choose.EMT INSTEdit current record now to add xref manually.Editor or system call failed.Editor to InternalEmpty familyEmpty family (%s)End of file at line %dEnter Family Number to Browse toEnter a sibling from family.Enter a spouse from family.Enter codeset to assume (* for none)Enter d for debugger, q to quitEnter integer for programEnter name of output archive file.Enter name of translation table file to readEnter name of translation table file to writeEnter pattern to match against author.Enter pattern to match against full name.Enter pattern to match against refn.Enter pattern to match against single surname or given name.Enter string for programErrorErrorsError accessing dataError accessing record: %sError at line %d: %sError in abbreviations file.Error in character mapping file.Error in user options file.Error loading index at keyError writing file 'btedit.tmp'.Error: file "%s": line %d: Error: file <%s> not foundError: file <%s> not found: %s Error: there are 999,999 locks on arg to lockEventEventsEvent %s is referred to but not defined.Examples:Existing database found.FATAL ERRORFATAL ERROR: FLOATING POINT EXCEPTIONFailed to fix missing undeleted record %c%dFailed to fix missing undeleted record %sFailed to open btree: %s.Families may not yet be removed in this fashion.FamilyFamiliesFamily %s is referred to but not defined.Fatal ErrorFilepath too long.First argument to (r)sort must be list or arrayFirst key in block below parent's limit Fixed Bad HUSB reference (%s) in family %sFixed Bad wife reference (%s) in family %sFixed bad child reference (%s) in family %sFixed delete set contains valid record %sFixed missing child (%s) in family (%s)Fixed missing data record (%s)Fixed missing spouse (%s) in family (%s)Fixed missing undeleted record %c%dFridayFrom which family is the child to be removed?From which family is the spouse/parent to be removed?GEDCOM codeset: %sGEDCOM to InternalGUI codeset: %sGUI input codeset: %sGUI output codeset: %sGhost name: %s -> %sGhost namesGlobal variablesHANGUPHeHerHisHow would you like to find a record?ILLEGAL INSTRUCTIONINDI, FAM, SOUR, EVEN records may not be other records.INTERRUPTIdentify a child of the family, if known.Identify a parent in the family having children swapped.Identify a spouse of the family, if known.Identify a spouse/parent for the new family.Identify child already in family.Identify child in second family.Identify family (enter nothing to identify by individual members).Identify list of persons for program:Identify one of the child's parents, if known.Identify person for program:Identify second person to browse to.Identify spouse/parent already in family, if known.Identify spouse/parent in second family, if known.Identify spouse/parent to add to an existing family.Identify the child to reorder.Identify the first child to swap.Identify the first family/spouse to swap.Identify the second child to swap.Identify the second family/spouse to swap.Identify the second spouse/parent, if known.Illegal type found in list in menuchooseImpermissible to change codeset in a populated databaseImport time %s (ui %s) Improper HUSBImproper HUSB (%s) in family (%s)Improper WIFEImproper childImproper child: Child (%s) without FAMC reference to family (%s)Improper wife (%s) in family (%s)In file <%s> at line %dIn menu: %sInsert xref automatically at bottom of current record.Internal UTF-8: NoInternal UTF-8: YesInternal codesetInternal to DisplayInternal to EditorInternal to GEDCOMInternal to ReportInvalid errs array[%d] in dbverify - fix program Invalid properties set for new databaseIs this the new child? Is this the new spouse? Is this the person? Select if so.Is this the record? Select if so.It might be possible to fix this with btedit.KILLKey not below next keyLast key in block above parent's limit LifeLines %s - Genealogical DB and Programming SystemLifeLines -- Auxiliary Browse Screen (* toggles menu)LifeLines -- Family Browse Screen (* toggles menu)LifeLines -- List Browse Screen (* toggles menu)LifeLines -- Main MenuLifeLines -- Person Browse Screen (* toggles menu)LifeLines -- Two Family Browse Screen (* toggles menu)LifeLines -- Two Person Browse Screen (* toggles menu)Line %d: Bad NAME syntax (%s %s).Line %d: Event %s has an incorrect key.Line %d: Family %s has an incorrect key.Line %d: Family %s has multiple husband links.Line %d: Family %s has multiple wife links.Line %d: Family has no members (%s %s).Line %d: Person %s has an incorrect key: skipped.Line %d: Person %s has multiple father links.Line %d: Person %s has multiple mother links.Line %d: Person %s is both male and female.Line %d: Person %s is female but must be male.Line %d: Person %s is implied to be both male and female.Line %d: Person %s is male but must be female.Line %d: Person defined here has no name.Line %d: Record %s has an incorrect key.Line %d: Reference to undefined record %sLine %d: Source %s has an incorrect key.Line %d: Tag %s found in unexpected record: %s %s.Line %d: The event defined here has no key.Line %d: The family defined here has no key.Line %d: The person defined here has no key: skipped.Line %d: The record defined here has no key.Line %d: The source defined here has no key.Line %d: This %s line is missing a value field (%s %s).Line %d: This line has a bad link.Line %d: This line has a level number that is too large.Line %d: This line has an illegal level.Line %d: This line has no level number.Line %d: This line is empty; EOF?Line %d: This line is incomplete.Line %d: This line is too long.Line %d: This line needs white space before tag.Lines %d and %d: Event %s is multiply defined.Lines %d and %d: Family %s is multiply defined.Lines %d and %d: Person %s is multiply defined: skipped.Lines %d and %d: Record %s is multiply defined.Lines %d and %d: Source %s is multiply defined.Local variablesLocales are disabled.Locales are enabled.Looks like a program was running. Check file %1 around line %2. M< Less menu colsM> More menu colsMalformed configuration file: line too long.Master fkey misalignedMenu (%s) choice sequence too long: %sMenu (%s) item lacked choice sequence: %sMessages:Mismatched lineage child links between %s and %s: %ld and %ldMismatched lineage spouse links between %s and %s: %ld and %ldMissing HEAD line at line %dMissing NAME line in INDI record; record ignored. Missing childMissing child (%s) in family (%s)Missing data record (%s)Missing data recordsMissing records (from deleteset)Missing spouseMissing spouse (%s) in family (%s)Missing titleMissing undeleted record %c%dMondayNLS (National Language Support) is compiled in.NLS (National Language Support) is not compiled in.NO NAMENOT PVALUE: NULL!NOT PVALUE: invalid type=%d)!Name, key, refn, list, or @:Neighboring keys include:New persons were added to the current list.New record is %sNew spouse/parent has unknown sex; can't add to family.No conversionNo current internal codeset, so no codeset conversion can be doneNo databases found in database pathNo errors foundNo errors; adding records with new keys...No errors; adding records with original keys...No events present.No more historyNo notes present.No one in database has key value %s.No original string on line.No others present.No persons were added to the current list.No records found in scanNo references present.No replacement string on line.No sources present.No such child.No such family.No such person.No such record.No such translation table in this databaseNode memory leaks:Non-indi name, key=%s, name=%sNon-indi namesNot implemented yetNot valid commandOptions:Orphan namesOrphaned name: %sOrphaned refn: %sOtherOthersPIPE WRITEPOWER-FAIL RESTARTParsing Error at line %d: Performing full name scanPerforming name fragment scanPerforming refn scanPerforming source scanPersonPersonsPerson %s is referred to but not defined.Place the child last in the family.Please choose an operation:Please choose family create operation.Please choose from among these people.Please choose from among these records.Please choose from the following list.Please choose from the following options:Please choose the child to browse to.Please choose the child to remove from the family.Please choose the event to view.Please choose the family to browse to.Please choose the father/husband to browse to.Please choose the first child to browse to.Please choose the first family to browse to.Please choose the first father/husband to browse to.Please choose the first mother/wife to browse to.Please choose the first spouse/parent to browse to.Please choose the mother/wife to browse to.Please choose the note to view.Please choose the other to view.Please choose the reference to view.Please choose the second child to browse to.Please choose the second family to browse to.Please choose the second father/husband to browse to.Please choose the second mother/wife to browse to.Please choose the second spouse/parent to browse to.Please choose the source to view.Please choose the spouse/parent to browse to.Please choose the spouse/parent to remove from the family.Please enter person's internal key value.Please enter the name of the GEDCOM file.Please identify next person to browse to.Please identify one of the child's siblings.Please identify one of the spouses.Please identify person or persons to browse to.Please identify record to browse to.Please identify the child.Please mark a record first.Proc %s must be called with %d (not %d) parameters.Proceed anyway?Proceed without codeset conversion?Proceed?Processed %d lines without finding end of HEADProgram contains errors. Program forgot to unlock %d recordProgram forgot to unlock %d recordsProgram is running...Program needs a starting procedure. Program was cancelled. Program was not run because of errors. Program was run successfully. Q Quit current databaseQUITQuit debuggerR Pick a GEDCOM file and read inREFN key is already in use.Readonly database can not be modified.Record %s is referred to but not defined.Record %s modified.Remove this family record?Report bugs to lifelines.sourceforge.netReport cancelledReport debuggerReport file: Report not found: %s Report stopping due to error opening output fileReport stopping due to lack of output fileReport to InternalReturn to current record (without adding xref).Runtime Error at line %d: SEGMENTATION ERRORSIGNAL 0SYSTEM CALL ERRORSaturdaySearch resultsSecond argument to (r)sort must be list or arraySee `btedit --help' for more information.Select the child the new child precedes or select last.SheSingle person familySingle person family (%s)Something impossible happened. Contact tech support.SourceSourcesSource %s is referred to but not defined.Spouse unknownStartup collate locale: %sStartup messages locale: %sStrike any key to continue.SundaySystem error: illegal map codeTERMINATE FROM KILLTRACE TRAPTag is too long to connect automatically.Tandom browse only compatible with persons or families.The child was removed from his/her family.The current list is not named.The current list is now named %s.The database is already open for writing.The database is already opened for read access by %d user.The database is already opened for read access by %d users.The database is locked (no readwrite access).The database is read only.The database is read only; you may not add records.The database is read only; you may not change records.The database is read only; you may not merge records.The database is read only; you may not remove records.The database is read-only; loading has been canceled.The database is unlocked.The database was not saved.The event was modified in the database.The families have different fathers/husbands; cannot merge.The families have different wives/mothers; cannot merge.The family was modified in the database.The file is as positioned at EOF.The new family was added to the database.The persons are not of opposite sex; can't make family.The record begins at wrong level.The record contains multiple level 0 lines.The record does not begin with a FAM line.The record does not begin with a SOUR line.The record does not begin with an EVEN line.The record does not begin with an INDI line.The record is empty.The record was modified in the database.The requested window size (%ld,%ld) is too large for your terminal (%d,%d). The requested window size (%ld,%ld) is too small for LifeLines (%d,%d). The source was modified in the database.The spouse was removed from his/her family.The two children were swapped.The two families were swapped.There are no children in the database for this family.There is no LifeLines database in that directory.There is no one in the database with that name or key.There is no record with key: %sThere is no record with that key or reference.There is something wrong with the data.There was %d unresolved reference.There were %d unresolved references.These persons are children in different families.This does not point to another record in the database!This family already has a husband/male parent.This family already has a wife/female parent.This family has both spouses/parents; can't add another.This family has less than two children; can't swap.This family has neither spouse/parent; can't remove.This family has no female spouse/parent in the database.This family has no male spouse/parent in the database.This family still has links; not removed.This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.This is not a lineage linked GEDCOM file.This person has no children in the database.This person has no older sibling in the database.This person has no spouse in the database.This person has no younger sibling in the database.This person is a spouse/parent in less than two families.This person is already a child in a family.This person is not a child in any family.This person is not a child in the family; can't remove.This person is not a spouse in the family; can't remove.This person is not a spouse or parent in any family.This person record does not have a name line.This person record has bad GEDCOM name syntax.This person's father is not in the database.This person's mother is not in the database.This person's parents are not in the database.This person's sex is not known; can't make family.This report requires a newer program to run ThursdayToo many spouses to display full listTranslation TablesTuesdayTwo parents of different sexes cannot be merged.Two persons with different parents cannot be merged.USER SIGNAL 1USER SIGNAL 2UTF-8 charprops loadedUTF-8 charprops not loadedUndefined database error -- fix program.Undefined proc: %sUnknown signalUnsupported file encoding (no multibyte encodings except UTF-8).Unsupported file encoding: %s.Usage btedit [database] [rkey]Use original keys from GEDCOM file?Using original keys, %d deleted record will be in the database.Using original keys, %d deleted records will be in the database.WARNING: missing keysWINDOW CHANGEWarningWarningsWarning: database codeset unspecifiedWarning: not all conversions availableWednesdayWhat activity do you want to perform?What directory holds (or will hold) the LifeLines database? (? to list)What do you want to add?What do you want to remove?What is the name of the output file?What is the name of the program?What persons or list do you want to add to the current list?What record do you want to edit?What record do you want to remove from the database?What scan type?What should the name of this list be?What utility do you want to perform?Which character mapping do you want to edit?Which character mapping do you want to save?Which event record do you want to edit?Which source record do you want to edit?Who do you want to remove from the database?Whom do you want to edit?Whose families/spouses are to be swapped?Whose key value do you want?Written by Tom Wetmore. Maintained at lifelines.sourceforge.net.You are at the bottom of the list.You are at the top of the list.You cannot change the sex of a parent.You cannot edit the CHIL lines in a family record.You cannot edit the FAM line in a family record.You cannot edit the FAMC line in a person record.You cannot edit the FAMS lines in a person record.You cannot edit the HUSB line in a family record.You cannot edit the INDI line in a person record.You cannot edit the WIFE line in a family record.You must identify a database.[ Decrease tree depth\My Documents\LifeLines\Databases\MyFamily] Increase tree depth^b History/back^c Clear history^f History/fwd^l History list^xb ChngHist/back^xc Clear ChngHist^xf ChngHist/fwd^xl ChngHist lista Add child to familya Add familya Add information to the databasea Add to this lista Create new familyaavabout %1abt %1adaradar sheniadopadradsaft %1after %1apraprilaugaugustavb Browse new personsb Browse the persons in the databaseb Browse to bottomb Browse to personsb. bap. baptbapt: barmbasmbef %1before %1bet %1 and %2between %1 and %2blesbornborn: brumbrumairebtedit requires 2 arguments (btree and key).bur. buriburi: c Browse to childrenc Browse top childrenc Character set optionsc Child - add a child to an existing familyc Child - remove a child from his/her familyc Review change history (%d record)c Review change history (%d records)cal %1calculated %1cb. cheshvanchildcompcould not open, read or write a block file.could not open, read or write an index file.could not open, read or write the key file (to alter database).could not open, read or write the key file.creation of new database failed.cremcshd Copy top to bottomd Delete from listd Delete information from the databased Remove as childd Remove child fromd Show database statisticsd. data blockdb directory is file, not directory.decdecemberdieddied: div. e Browse event recordse Edit recorde Edit the familye Edit the persone Edit the place abbreviation filee Edit this persone Edit top familye Edit top persone edit individual tables (in db)edit raw btree block for person I34editor codeset: %seditor input codeset: %seditor output codeset: %seighteightheleveneleventhellelulenter file nameenter file name (*%s)enter integer:enter key or refn: enter key:enter name: enter path: enter string: enter y (yes) or n (no): errorerror accessing database directory.error evaluating arg to lockerror evaluating arg to unlockest %1estimated %1example: dbverify -ifsex "%s" export/import directory:f Browse to fatherf Browse to fathersf Browse top fatherf Family - create family record from one or two spousesf Family - remove a family completelyf Full database scanf Full name scanfatherfebfebruaryfifthfirstfiveflags: florflorealfourfourthfr %1fr %1 to %2frimfrimairefrom %1from %1 to %2frucfructidorfullname: person does not have a nameg Browse to familygedcom input codeset: %sgedcom output codeset: %sgermgerminalgettext dll had no versiongettext dll version: %sgettext dll: %sh Add as spouseheherher_himhisi Add as childi Browse this personi Identify a person from key valuei Individual - remove a person completelyi import all tables (from files into db)iconv (codeset conversion) is compiled in.iconv (codeset conversion) is not compiled in.iconv dll had no versioniconv dll version: %siconv dll: %sidentifier: %s should be a string illegal call to pos.initscr failediyariyrj Merge bottom to topj Move down listjanjanuaryjour_complementairsjuljulyjunjunek Find a person's key valuek Move up listkeyfile is corrupt.keyfile is wrong alignment.keyfile is wrong version.kislevksll load a table from a file (into db)lifelines `btedit' edits raw binary btree blocks in lifelines database files. Do NOT use this unless you know what you are doing and you have backed up your database.lines [-adkrwiflntcuFxoCzI] [database] # Use -F for Finnish databaselines [-adkrwiflntcuxoCzI] [database]lines [-adkrwiflntcuxoCzI] [database] # Finnish databasem Browse to motherm Browse to mothersm Browse top motherm Mark this personm Show memory statisticsm. marmarchmarried: maymenu|trantable|dmenu|trantable|emenu|trantable|gmenu|trantable|imenu|trantable|mmenu|trantable|pmenu|trantable|rmenu|trantable|xmessmessidormothern Create new personn Name fragment (whitespace-delimited) scann Name this listname of database is too long.name: person does not have a namenineninthnisannivonivoseno gettext dll foundno iconv dll foundno keyfile (directory does not appear to be a database).node passed to lock must be inside a recordnode passed to unlock must be inside a recordnovnovembernsnnull arg in locknull arg in unlocko Browse to older sibo Edit the user options fileo Other - remove other record completelyoctoctoberonep Pedigree modep Person - add new person to the databasep Pick a report from list and runpattern: personpluvpluviosepraiprairialq Quit programq Return to main menuq Return to previous menur Generate report by entering report namer Read in data from a GEDCOM filer Refn scanr Remove as spouser Remove from listr Remove spouse fromreport codeset: %sreport input codeset: %sreport output codeset: %srequested database does not exist.resis Add spouse to familys Browse source recordss Browse to spouse/ss Browse top spouse/ss Save the database in a GEDCOM files Search databases Spouse - add a spouse to an existing familys Spouse - remove a spouse from a familys save a table to a file (from db)secondsepseptemberset(%s, ) is invalidsevenseventhsheshevatshvsignal %1: %2sivansixsixthsoundex: person does not have a namespousesurname: person does not have a namesvnt Browse to topt Enter tandem modet Modify character translation tablestamuztc Tandem to childrentententhtevettf Tandem to father/stg Tandem to family/sthe arg to empty is not a list, table or setthe arg to length is not a list, table or setthe arg to lock must be a record or nodethe arg to unlock must be a record or nodetherthermidorthirdthreetishritm Tandem to mother/stmzto %1ts Tandem to spouse/stshtt Enter family tandemtt Enter tandem modetu Tandem to parentstvttwelfthtwelvetwou Browse to parentsu Miscellaneous utilitiesusage: dbverify -(flags) v Review visit history (%d record)v Review visit history (%d records)vendvendemiaireventventosewarningx Browse other recordsx Handle source, event and other recordsx Swap mark/currentx Swap two childrenx Swap two familiesx Switch top/bottomx export all tables (from db to files)y Browse to younger siby Turn on syncyYyYnNzerozi Browse to indizz Browse to anyProject-Id-Version: lifelines 3.0.60 Report-Msgid-Bugs-To: POT-Creation-Date: 2007-08-08 15:56-0400 PO-Revision-Date: 2007-08-05 18:13+0200 Last-Translator: Jens Arvidsson Language-Team: Swedish MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); --help visa denna hjälp och avsluta --version skriv ut versionsinformation och avsluta -D = Laga felaktiga borttagningsnoteringar -F = Ändra alla ogiltiga anlänkade familjepekare (till _badptr) -G = Sök efter och laga spöken (namn/refnr) -M = Laga poster med saknade noterade data -a = Genomför alla kontroller (inkluderar ej lagningar) -e = Kontrollera händelser -f = Kontrollera familjer -g = Sök efter spöken (namn/refnr) -h = Visa hjälptext (denna text) -i = Kontrollera individer -l = Kontrollera databasstruktur -m = Kontrollera efter poster som saknar noterade data -n = Bullrigt (eka alla behandlade poster) -s = Kontrollera källor -x = Kontrollera övriga btedit %s I34 Avbryter nu. Skapa minnesutskrift? [y/n] Rapportens varaktighet %s (användargränsnittets varaktighet %s) i filen <%s> vid rad %d i filen <%s> vid rad %d (dbint tt: %s) (oföränderlig) (ingen loggfil)(skrivskyddad) (se loggfil <%s>) Gå ned en nivå Gå upp en nivå!! Cykliskt läge!a Anläge!d Ättlingaläge!g GEDCOM-läge!n Normalt läge!t GEDCOMT-läge!x GEDCOMX-läge"\Mina Dokument\LifeLines\Databaser\MinFamilj"# Slå på/av barnnr$$ Lista referenser$n Lista notiser$s Lista källor%02ds%1 AUC%1 FR%1 HEB%1J%6d fel%6d fel%6d varning%6d varningar%c Ordna om barn%d barn%d barn%d element%d element%d notering%d noteringar%d fel%d fel%d lagad%d lagade%d lagad%d lagade%d objekt läckte%d objekt läckte%d post%d poster%d maka/make%d makar%d varning under import%d varningar under import%dI, %dF, %dS, %dE, %dX%dd%03dt%dt%02dm%dm%02ds%då%03dd%e Lägg till händelse%ld:e%o Lägg till övrig%s Lägg till källa%s fkey=%d, fil=%s%s lades till som barn.%s lades till som maka/make och/eller förälder.%s lades till i databasen.%s modifierades i databasen.%s: Felaktiga argument%s: Ojämförbara typer: %s och %s%s: rad %d (notering %d): %s%s: nullargument inte tillåtet.%s: argument nr. %s hade ett större fel.%s: argument nr. %s måste vara booleskt.%s: argument nr. %s måste vara en familj.%s: argument nr. %s måste vara en float.%s: argument nr. %s måste vara en lista.%s: argument nr. %s måste vara en nod.%s: argument nr. %s måste vara en person.%s: argument nr. %s måste vara en post.%s: argument nr. %s måste vara en uppsättning.%s: argumentet nr. %s måste vara en sträng.%s: argument nr. %s måste vara en tabell.%s: argument nr. %s måste vara en variabel.%s: argument nr. %s måste vara ett heltal.%s: argument nr. %s skulle orsaka ett aritmetiskt undantag.%s: argumentet hade ett större fel.%s: argumentet måste vara en familj.%s: argumentet måste vara ett filnamn.%s: argumentet måste vara en lista.%s: argumentet måste vara en nod eller sträng.%s: argumentet måste vara en nod.%s: argumentet måste vara en person.%s: argumentet måste vara en uppsättning.%s: argumentet måste vara en sträng.%s: argumentet måste vara en variabel.%s: argumentet måste vara ett heltal.( Rulla uppåt(( Rulla båda upp(1-9) Bläddra t. barn(Familj %s (%s, %s)(Avdelare är %s)(b Rulla nedre upp(ändringshistoriken är tom)(givens) personen har inget namn(sid %d/%d)(t Rulla övre upp(trimname) personen har inget namn(besökshistoriken är tom)) Rulla nedåt)) Rulla båda ned)b Rulla nedre ned)t Rulla övre nedmaj+ Nästa i databasen, från - Föreg. i databasen-- AKTUELL MARKERING ----- AKTUELL MARKERING ------ LISTA ---/home/users/mittnamn/lifelines/databaser/minfamilj0 EVEN 1 REFN 1 DATE 1 PLAC 1 INDI 2 NAME 2 ROLE 1 SOUR0 SOUR 1 REFN 1 TITL Titel 1 AUTH Författare0 XXXX 1 REFN1 Lägg till en källpost i databasen2 Redigera källpost i databasen3 Lägg till en händelsepost i databasen4 Redigera händelsepost i databasen5 Lägg till en post av övrig typ i databasen6 Redigera en post av övrig typ i databasen< Öka menyyta> Minska menyyta? Andra menyvalA Avancerad vyEn familj kan inte slås samman med sig själv.En person kan inte slås samman med sig själv.e. Kr.AVBRUTENeKrALARMKLOCKAASSERT-misslyckandeAvbryter: Lägger till obrukade nycklar som borttagna nycklar...Tvetydigt anrop till proc: %sÄr du säker på att du vill slå samman dem?Är du säker på att du vill ta bort den här personen från databasen?Är du säker på att du vill ta bort den här posten från databasen?Argumentet för att låsa (-l) måste vara y (ja) eller n (nej).Argument till (r)sort måste vara av samma storlekB Bläddra i ny familjf. Kr.f. Kr.fKrfKrBUSSFELOgiltig CHIL-referensOgiltig HUSB-referensOgiltig HUSB-referens (%s) i familj %sOgiltig HUSB-tagg: %sOgiltig WIFE-referensOgiltig säkerhetskopierad historiknumreringOgiltig cachenotis <%s> != <%s>Ogiltig referens till barn (%s) i familj %sOgiltig barntagg: %sOgiltigt format för decimaltal.Ogiltig kontrollsekvenskod vid position %d i bytekodssträng <%s>Felaktigt kontrollsekvensformat.Ogiltig familjereferensOgiltig familjereferens (%s) individ %sOgiltigt format för hexadecimala tal.Ogiltig historiknumreringOgiltig historiklängdOgiltig nivå vid rad %dOgiltigt namnOgiltigt namn för individ %s: %sOgiltig pekareFelaktig pekare (i %s): %sOgiltig spousetagg: %sOgiltig referens till maka (%s) i familj %sPå grund av felaktigheter laddades inte GEDCOM-filen. Båda familjerna måste ha män/fäder.Båda familjerna måste ha hustrur/mödrar.Bläddra i ny post (utan att lägga till korsref).e. Kr.eKrCache [%s] spillde över sin maxstorlek (%d)Buffrade: I:%s; F:%sAnropsstack har %d högre nivåAnropsstack har %d högre nivåerAnropsstack har %d lägre nivåAnropsstack har %d lägre nivåerKan inte kombinera flaggorna tvinga upp (-f) och lås (-l).Kan inte kombinera oföränderlig (-i) eller skrivskyddad (-r) med skrivåtkomst (-w).Kan inte konvertera teckenkodning (från <%s> till <%s>)Kan inte ta bort den sista personen från en familj.Kontrollerar %sKontrollerar GEDCOM-filen för fel. Välj en familj genom att välja en maka/make/förälder.Välj ett kommando:Välj databas att öppnaVälj ur historikKrock med längre snabbnyckel i post: %sKrock med kortare snabbnyckel i post: %sInformation om teckenkodningSorteringsrutin: %sKommandon: Välj efter nummer, u Sida upp, d Sida ned, i Välj, q AvslutaKommandon: j Flytta ned k Flytta upp i Välj q AvslutaKommandon: j Flytta ned k Flytta upp q AvslutaKommandon: u Sida upp, d Sida ned, q AvslutaKommandon: j Flytta ned k Flytta upp d Ta bort i Välj q AvslutaCopyright© 1991-2007 Thomas T. Wetmore IV m.fl.Copyright© 1991 till 1996, av T. T. Wetmore IVKunde inte öppna filen %sKunde inte öppna filen %s.Skapa en familj med denna person som barn.Skapa en familj med denna person som maka/make/förälder.Aktuell databas - %sAktuell sorteringslokal: %sAktuell databasAktuell meddelandelokal: %sCykel i index, fil %s hittad igen! BARN DÖTTDatabasen "%s" har sparats till "%s".Databasfel orsakat av referens till ickeexisterande nyckel <%s>.Databasfel: -- DatabasposterDatabasen var trasig.Databasen modifierades inte.Förvald sökväg: Ta bort historik (%d stycken)?Uppsättning för borttagning innehåller giltig post %sBorttagna posterVisa global (%d var)Visa globala (%d var)Visa lokal (%d var)Visa lokala (%d var)Skärm till InternVill du verkligen lägga till det här barnet i familjen?Vill du verkligen lägga till den här händelsen i databasen?Vill du verkligen lägga till den här familjen i databasen?Vill du verkligen lägga till den här personen i databasen?Vill du verkligen lägga till den här posten i databasen?Vill du verkligen lägga till den här källan i databasen?Vill du verkligen lägga till den här makan/maken/föräldern i familjen?Vill du verkligen slå samman dessa båda familjer?Vill du verkligen slå samman dessa båda personer?Vill du verkligen ta bort detta barn från hans/hennes familj?Vill du verkligen ta bort denna maka/make från hans/hennes familj?Vill du verkligen ordna om barn?Vill du verkligen växla ordning mellan makar?Vill du verkligen uppdatera den här händelsen?Vill du verkligen uppdatera den här familjen?Vill du verkligen uppdatera den här personen?Vill du verkligen uppdatera den här posten?Vill du verkligen uppdatera den här källan?Vill du skapa en databas där?Vill du redigera händelsen igen?Vill du redigera händelsen igen? (Om inte, så kommer ändringar att kastas.)Vill du redigera familjen igen?Vill du redigera familjen igen? (Om inte, så kommer ändringar att kastas.)Vill du redigera personen igen?Vill du redigera personen igen? (Om inte, så kommer ändringar att kastas.)Vill du redigera posten igen?Vill du redigera posten igen? (Om inte, så kommer ändringar att kastas.)Vill du redigera källan igen?Vill du redigera källan igen? (Om inte, så kommer ändringar att kastas.)Vill du skriva in ett namn till?Vill du redigera om den?Dubblerad HEAD-rad vid rad %dDubblerad händelse för %sDubblerade händelserDubblerade familjerDubblerad familj för %sDubblerad func %s (raderna %d och %d) i rapport: %sDubblerad snabbnyckel för post: %sDubblerad individ för %sDubblerade individerDubblerat namn för %s: (%s)Dubblerade namnDubblerade övrigaDubblerad proc %s (raderna %d och %d) i rapport: %sDubblerad post för %sDubblerad refn för %s: (%s)Dubblerad källa för %sDubblerade källorDubblerat REFN - välj.EMT INSTRedigera aktuell post nu för att lägga till korsref manuellt.Editor- eller systemanrop misslyckades.Editor till InternTom familjTom familj (%s)Filslut vid rad %dSkriv in familjenummer att bläddra tillLägg till ett syskon från familj.Lägg till en maka/make från familj.Skriv in teckenkodning att anta (* för ingen)Skriv in d för felsökare, q för att avslutaSkriv in heltal för programSkriv in namn för utmatad arkivfil.Skriv in namn på översättningstabellsfil att läsa inSkriv in namn på översättningstabellsfil att skriva tillAnge mönster för att matcha författare.Ange mönster för att matcha fullständigt namn.Ange mönster för att matcha refn.Ange mönster för att matcha ensamt efter- eller förnamn.Skriv in sträng för programFelFelFel vid dataåtkomstFel vid åtkomst av post: %sFel vid rad %d: %sFel i förkortningsfil.Fel i teckenmappningsfil.Fel i filen för användarinställningar.Fel vid laddning av index vid nyckelFel vid skrivning till fil 'btedit.tmp'.Fel: fil "%s": rad %d: Fel: filen <%s> hittades ejFel: filen <%s> hittades ej: %s Fel: det finns 999 999 lås på arg till lockHändelseHändelserReferens till händelsen %s, som inte är definierad.Exempel:Fann befintlig databas.SYSTEMANROPSFELÖDESDIGERT FELFLYTTALSUNDANTAGMisslyckades med att laga saknad återskapad post %c%dMisslyckades med att laga saknad återskapad post %sMisslyckades med att öppna btree: %s.Familjer kan ännu inte tas bort på detta sätt.FamiljFamiljerReferens till familjen %s, som inte är definierad.Ödesdigert felFilsökväg för lång.Första argumentet till (r)sort måste vara lista eller vektorFörsta nyckel i block nedanför förälders gräns Lagade ogiltig HUSB-referens (%s) i familj %sLagade ogiltig referens till maka (%s) i familj %sLagade ogiltig referens till barn (%s) i familj %sLagat deleteset innehåller giltig post %sLagade saknat barn (%s) i familj (%s)Lagade saknad dataposte (%s)Lagade saknad maka/make (%s) i familj (%s)Lagade saknad återskapad post %c%dFredagFrån vilken familj ska barnet tas bort?Från vilken familj ska makan/maken/föräldern tas bort?Teckenkodning för GEDCOM: %sGEDCOM till InternTeckenkodning för grafiskt användargränssnitt: %sTeckenkodning för indata till grafiskt användargränssnitt: %sTeckenkodning för utdata till grafiskt användargränssnitt: %sSpöknamn: %s -> %sSpöknamnGlobala variablerAVRINGDHanHennesHansHur skulle du vilja finna en post?OTILLÅTEN INSTRUKTIONINDI-, FAM-, SOUR- och EVEN-poster får inte vara andra poster.AVBROTTIdentifiera ett barn i familjen, om känt.Identifiera en förälder i familjen vars barn ska växlas.Identifiera en maka/make i familjen, om känd.Identifiera en maka/make/förälder för den nya familjen.Identifiera barn som redan finns i familjen.Identifiera barn i den andra familjen.Identifiera familj (lämna blank för att identifiera via familjemedlem).Identifiera lista över personer för programmet:Identifiera en av barnens föräldrar, om känd.Skriv in sträng för programIdentifiera den andra personen att bläddra till.Identifiera maka/make/förälder som redan finns i familjen, om känd.Identifiera maka/make/förälder i den andra familjen, om känd.Identifiera maka/make/förälder att lägga till i en befintlig familj.Identifiera barnet som ska ordnas om.Identifiera det första barnet att växla.Identifiera den första familjen/makan/maken att växla.Identifiera det andra barnet att växla.Identifiera den andra familjen/makan/maken att växla.Identifiera den andra makan/maken/föräldern, om känd.Fann ogiltig typ i lista i menuchooseOtillåtet att ändra teckenkodning i en befolkad databasImporttid %s (användargränsnitt %s) Felaktig HUSBFelaktig HUSB (%s) i familj (%s)Felaktig WIFEFelaktigt barnFelaktigt barn: Barn (%s) utan FAMC-referens till familj (%s)Felaktig maka (%s) i familj (%s)I filen <%s> vid rad %dI meny: %sLägg in korsref automatiskt längst ned i aktuell post.UTF-8 internt: NejUTF-8 internt: JaIntern teckenkodningIntern till SkärmIntern till EditorIntern till GEDCOMIntern till RapportOgiltig felvektor[%d] i dbverify - laga programmet Ogiltiga egenskapsinställningar för ny databas.Är detta det nya barnet? Är detta den nya makan/maken? Är detta personen? Välj om så.Är detta posten? Välj om så.Det är kanske möjligt att laga detta med btedit.DÖDADNyckel inte nedanför nästa nyckelSista nyckel i block ovanför förälders gräns LifeLines %s - Genealogiskt databas- och programmeringssystemLifeLines -- Assistentfönster (* visar/döljer meny)LifeLines -- Familjefönster (* visar/döljer meny)LifeLines -- Listfönster (* visar/döljer meny)LifeLines -- HuvudmenyLifeLines -- Personfönster (* visar/döljer meny)LifeLines -- Tvåfamiljsfönster (* visar/döljer meny)LifeLines -- Tvåpersonsfönster (* visar/döljer meny)Rad %d: Ogiltig NAME-syntax (%s %s).Rad %d: Händelsen %s har en felaktig nyckel.Rad %d: Familjen %s har en felaktig nyckel.Rad %d: Familjen %s har länkar till mer än en make.Rad %d: Familjen %s har länkar till mer än en maka.Rad %d: Familj har inga medlemmar (%s %s).Rad %d: Personen %s har en felaktig nyckel: hoppas över.Rad %d: Personen %s är länkad till mer än en fader.Rad %d: Personen %s är länkad till mer än en moder.Rad %d: Personen %s är både man och kvinna.Rad %d: Personen %s är kvinna, men måste vara man.Rad %d: Personen %s förutsätts vara både man och kvinna.Rad %d: Personen %s är man, men måste vara kvinna.Rad %d: Personen som definieras här saknar namn.Rad %d: Posten %s har en felaktig nyckel.Rad %d: Referens till odefinierad post %sRad %d: Källan %s har en felaktig nyckel.Rad %d: Tagg %s hittades i oväntad post: %s %s.Rad %d: Händelsen som definieras här har ingen nyckel.Rad %d: Familjen som definieras här har ingen nyckel.Rad %d: Personen som definieras här har ingen nyckel: hoppas över.Rad %d: Posten som definieras här har ingen nyckel.Rad %d: Källan som definieras här har ingen nyckel.Rad %d: Denna %s-rad saknar ett fält med ett värde (%s %s).Rad %d: Denna rad har en ogiltig länk.Rad %d: Denna rad har ett nivånummer som är för stort.Rad %d: Denna rad har en otillåten nivå.Rad %d: Denna rad har inget nivånummer.Rad %d: Denna rad är tom; filslut?Rad %d: Denna rad är ofullständig.Rad %d: Denna rad är för lång.Rad %d: Denna rad behöver blanksteg innan tagg.Raderna %d och %d: Händelsen %s är definierad mer än en gång.Raderna %d och %d: Familjen %s är definierad mer än en gång.Raderna %d och %d: Personen %s är definierad mer än en gång: hoppas över.Raderna %d och %d: Posten %s är definierad mer än en gång.Raderna %d och %d: Källan %s är definierad mer än en gång.Lokala variablerLokaler är avaktiverade.Lokaler är aktiverade.Verkar som att ett program kördes. Kontrollera fil %1 omkring rad %2. M< Färre menykolumnerM> Fler menykolumnerFel i konfigurationsfil: för lång rad.Övergripande fkey feljusteradMeny (%s): Valsekvens för lång: %sMeny (%s): objekt saknade valsekvens: %sMeddelanden:Anlänkning av barn mellan %s och %s stämmer inte: %ld och %ldAnlänkning av makar mellan %s och %s stämmer inte: %ld och %ldHEAD-rad saknas vid rad %dNAME-rad saknas i INDI-posten; posten ignoreras. Saknat barnSaknat barn (%s) i familj (%s)Saknad datapost (%s)Saknade dataposterSaknade poster (från deleteset)Saknad maka/makeSaknad maka/make (%s) i familj (%s)Titel saknasSaknad återskapad post %c%dMåndagNLS (nationellt språkstöd) är inkompilerat.NLS (nationellt språkstöd) är inte inkompilerat.INGET NAMNINTE PVALUE: NULL!INTE PVALUE: ogiltig typ=%d!Namn, nyckel, refn, lista, eller @:Grannycklar inkluderar:Nya personer lades till i den aktuella listan.Den nya posten är %sNy maka/make/förälder har okänt kön; kan inte lägga till i familj.Ingen konvertering.Ingen aktuell intern teckenkodning, så ingen kodkonvertering kan utförasInga databaser hittades i sökvägen för databaserInga fel hittadesInga fel; lägger till poster med nya nycklar...Inga fel; lägger till poster med ursprungliga nycklar...Finns inga händelser.Slut på historikFinns inga notiser.Ingen i databasen har nyckelvärdet %s.Ingen ursprunglig sträng på raden.Finns inga övriga.Inga personer lades till i den aktuella listan.Inga poster återfanns i sökningFinns inga referenser.Ingen ersättningssträng på raden.Finns inga källor.Finns inget sådant barn.Finns ingen sådan familj.Finns ingen sådan person.Finns ingen sådan post.Ingen sådan översättningstabell i denna databas.Nodminnesläckor:Icke-individnamn, nyckel=%s, namn=%sIcke-individnamnEj implementerat ännuOgiltigt kommandoFlaggor:Föräldralösa namnFöräldralöst namn: %sFöräldralöst refn: %sÖvrigÖvrigaRÖRSKRIVNINGSTRÖMAVBROTTSOMSTARTTolkningsfel vid rad %d: Utför sökning på hela namnetUtför sökning på namnfragmentUtför sökning på refnUtför sökning på källorPersonPersonerReferens till personen %s, som inte är definierad.Placera barnet sist i familjen.Välj ett kommando:Välj kommando för att skapa familj.Välj mellan dessa personer.Välj mellan dessa poster.Välj ur följande lista:Välj något av följande alternativ:Välj barn att bläddra till.Välj barn att ta bort från familjen:Välj händelse att granska.Välj familj att bläddra till.Välj fader/make att bläddra till.Välj det första barnet att bläddra till.Välj den första familjen att bläddra till.Välj den första fadern/maken att bläddra till.Välj den första modern/makan att bläddra till.Välj den första makan/maken/föräldern att bläddra till.Välj moder/maka att bläddra till.Välj notis att granska.Välj vilken av övriga att granska.Välj referens att granska.Välj det andra barnet att bläddra till.Välj den andra familjen att bläddra till.Välj den andra fadern/maken att bläddra till.Välj den andra modern/makan att bläddra till.Välj den andra makan/maken/föräldern att bläddra till.Välj källa att granska.Välj maka/make/förälder att bläddra till.Välj maka/make/förälder att ta bort från familjenSkriv in internt nyckelvärde för personen.Skriv in namnet på GEDCOM-filen.Identifiera nästa person att bläddra till.Identifiera ett av barnets syskon.Identifiera en av makarna.Identifiera person eller personer att bläddra till.Välj post att bläddra till.Identifiera barnet.Markera en post först.Proc %s måste anropas med %d (inte %d) parametrar.Fortsätt ändå?Fortsätt utan konvertering av teckenkodning?Fortsätt?Behandlade %d rader utan att hitta slutet av HEADProgram innehåller fel. Program glömde att låsa upp %d postProgram glömde att låsa upp %d posterProgram körs...Program behöver en startprocedur. Program avbröts. Program kördes inte p.g.a. fel. Program kördes utan problem. Q Avsluta aktuell databasLÄMNADAvsluta felsökarenR Välj en GEDCOM-fil och läs inREFN-nyckel används redan.Skrivskyddad databas kan inte modifieras.Referens till posten %s, som inte är definierad.Post %s modifierad.Ta bort den här familjeposten?Rapportera fel till lifelines.sourceforge.netRapporten avbrötsRapportfelsökareRapportfil: Rapporten kunde inte hittas: %sRapport stoppar på grund av fel vid öppning av utmatningsfilRapport stoppar på grund av saknad utmatningsfilRapport till InternÅtergå till aktuell post (utan att lägga till korsref).Körningsfel vid rad %d: SEGMENTERINGSFELSIGNAL 0SYSTEMANROPSFELLördagSökresultatAndra argumentet till (r)sort måste vara lista eller vektorSe `btedit --help' för mer information.Välj vilket barn som det nya barnet föregår eller välj sist.HonFamilj med ensam personFamilj med ensam person (%s)Någonting omöjligt hände. Kontakta teknisk support.KällaKällorReferens till källan %s, som inte är definierad.Maka/make okändSorteringslokal vid uppstart: %sMeddelandelokal vid uppstart: %sTryck på valfri tangent för att fortsätta.SöndagSystemfel: otillåten mappningskodAVSLUTADSPÅRNINGSFÄLLATaggen är för lång för att anknyta automatiskt.Tandembläddring endast kompatibel med personer eller familjer.Barnet togs bort från dess familj.Den aktuella listan har inget namn.Den aktuella listan har nu namnet %s.Databasen är redan öppnad för skrivning.Databasen är redan öppnad för läsning av %d användare.Databasen är redan öppnad för läsning av %d användare.Databasen är låst (ingen läs- och skrivåtkomst).Databasen är skrivskyddad.Databasen är skrivskyddad; du får inte lägga till poster.Databasen är skrivskyddad; du får inte göra ändringar i poster.Databasen är skrivskyddad; du får inte slå samman poster.Databasen är skrivskyddad; du får inte ta bort poster.Databasen är skrivskyddad; laddningen har avbrutits.Databasen är olåst.Databasen sparades inte.Händelsen modifierades i databasen.Familjerna har olika fäder/män; kan inte slå samman.Familjerna har olika hustrur/mödrar; kan inte slå samman.Familjen modifierades i databasen.Filen är positionerad vid filslut.Den nya familjen lades till i databasen.Personerna är inte av motsatt kön; kan inte skapa familj.Posten börjar på fel nivå.Posten innehåller flera rader på 0-nivån.Posten börjar inte med en FAM-rad.Posten börjar inte med en SOUR-rad.Posten börjar inte med en EVEN-rad.Posten börjar inte med en INDI-rad.Posten är tom.Posten modifierades i databasen.Den efterfrågade fönsterstorleken (%ld,%ld) är för stor för din terminal (%d,%d). Den efterfrågade fönsterstorleken (%ld,%ld) är för liten för LifeLines (%d,%d). Källan modifierades i databasen.Makan/maken togs bort från dess familj.De båda barnen växlades.De båda familjerna växlades.Det finns inga barn i databasen för denna familj.Det finns ingen LifeLinesdatabas i den katalogen.Det finns ingen i databasen med det namnet eller den nyckeln.Det finns ingen post med nyckel: %sDet finns ingen post med den nyckeln eller referensen.Något är fel i data.Det fanns %d olöst referens.Det fanns %d olösta referenser.Dessa personer är barn i olika familjer.Detta pekar inte på en annan post i databasen!Denna familj har redan en make/manlig förälder.Denna familj har redan en maka/kvinnlig förälder.I denna familj finns båda makarna/föräldrarna; kan inte lägga till ytterligare en.Denna familj har mindre än två barn; kan inte växla.I denna familj finns ingendera av föräldrarna; kan inte ta bort.Denna familj har ingen maka/kvinnlig förälder i databasen.Denna familj har ingen make/manlig förälder i databasen.Denna familj har fortfarande länkar; ej borttagen.Det här är fri programvara; se källkoden för kopieringsvillkor. Det finns INGA garantier; inte ens för SÄLJBARHET eller LÄMPLIGHET FÖR NÅGOT SPECIELLT ÄNDAMÅL.Detta är inte en anlänkad GEDCOM-fil.Denna person har inga barn i databasen.Denna person har inget äldre syskon i databasen.Denna person har ingen maka/make i databasen.Denna person har inget yngre syskon i databasen.Denna person är maka/make/förälder i färre än två familjer.Den här personen är redan barn i en familj.Denna person är inte barn i någon familj.Denna person är inte barn i familj; kan inte ta bort.Denna person är inte maka/make i familjen; kan inte ta bort.Denna person är inte maka/make eller förälder i någon familj.Denna personpost har ingen namnrad.Denna personpost har ogiltig GEDCOM-namnsyntax.Denna persons fader finns inte i databasen.Denna persons moder finns inte i databasen.Denna persons föräldrar finns inte i databasen.Denna persons kön är inte känt; kan inte skapa familj.Denna rapport kräver ett nyare program för att köras TorsdagFör många makar för att visa hela listanTeckenöversättningstabellerTisdagTvå föräldrar med olika kön kan inte slås samman.Två personer med olika föräldrar kan inte slås samman.ANVÄNDARSIGNAL 1ANVÄNDARSIGNAL 2Teckenegenskaper för UTF-8 laddadeTeckenegenskaper för UTF-8 inte laddadeOdefinierat databasfel -- laga programmet.Odefinierad proc: %sOkänd signalOstödd filkodning (inga multibytekodningar utom UTF-8).Ostödd filkodning: %s.Användning btedit [databas] [rkey]Vill du använda ursprungliga nycklar från GEDCOM-filen?Med ursprungliga nycklar kommer det att finnas %d borttagen post i databasen.Med ursprungliga nycklar kommer det att finnas %d borttagna poster i databasen.VARNING: nycklar saknasFÖNSTERÄNDRINGVarningVarningarVarning: Teckenkodning för databas ospecificeradVarning: alla konverteringar inte tillgängligaOnsdagVilken funktion vill du använda?Vilken katalog inrymmer (ska inrymma) LifeLinesdatabasen? (? för lista)Vad vill du lägga till?Vad vill du ta bort?Vad är namnet på utmatningsfilen?Vad är namnet på programmet?Vilka personer/vilken lista vill du lägga till i den aktuella listan?Vilken post vill du redigera?Vilken post vill du ta bort från databasen?Vilken typ av sökning?Vad ska denna lista ha för namn?Vilket verktyg vill du använda?Vilken teckenmappning vill du redigera?Vilken teckenmappning vill du spara?Vilken händelsepost vill du redigera?Vilken källpost vill du redigera?Vem vill du ta bort från databasen?Vem vill du redigera?Vems familjer/makar ska växlas?Vems nyckelvärde vill du ha?Skriven av Tom Wetmore. Underhålls på lifelines.sourceforge.net.Du är längst ned i listan.Du är högst upp i listan.Du kan inte ändra kön för en förälder.Du kan inte redigera CHIL-raderna i en familjepost.Du kan inte redigera FAM-raden i en familjepost.Du kan inte redigera FAMC-raden i en personpost.Du kan inte redigera FAMS-raden i en personpost.Du kan inte redigera HUSB-raden i en familjepost.Du kan inte redigera INDI-raden i en personpost.Du kan inte redigera WIFE-raden i en familjepost.Du måste identifiera en databas.[  Minska träddjup\Mina Dokument\LifeLines\Databaser\MinFamilj] Öka träddjup^b Historik/bakåt^c Töm historik^f Historik/framåt^l Historiklista^xb Ändrhist/bakåt^xc Töm Ändrhist^xf Ändrhist/framåt^xl Ändrhistlistaa Lägg t. barn i fam.a Lägg till familja Lägg till information i databasena Lägg t. i denna listaa Skapa ny familjaavomkring %1omk %1adaradar sheniadopadradseft %1efter %1apraprilaugaugustiavb Bläddra till nya pers.b Bläddra mellan personer i databasenb Bläddra t. nedreb Bläddra t. personerf. döpt döptdöpt: barmbasmför %1före %1mel %1 och %2mellan %1 och %2välsföddfödd: brumbrumairebtedit kräver 2 argument (btree och nyckel).beg. begrbegr: c Bläddra till barnc Bl. t. övre barnc Inställningar för teckenuppsättningc Barn - lägg till ett barn i en befintlig familjc Barn - ta bort ett barn från dess familjc Granska ändringshistorik (%d post)c Granska ändringshistorik (%d poster)ber %1beräknat %1bf. cheshvanbarncompkunde inte öppna, läsa eller skriva till en blockfil.kunde inte öppna, läsa eller skriva till en indexfil.kunde inte öppna, läsa eller skriva till nyckelfilen (för att ändra databasen).kunde inte öppna, läsa eller skriva till nyckelfilen.misslyckades med att skapa ny databas.kremcshd Kopiera öv. t. ned.d Ta bort från listad Ta bort information från databasend Ta bort som barnd Ta bort barn frånd Visa databasstatistikd. datablockdb-katalog är en fil, inte en katalog.decdecemberdöddöd: ski.e Bläddra i händelsepostere Redigera poste Redigera familjene Redigera personene Redigera platsförkortningsfilene Redigera denna persone Redigera övre fam.e Redigera övre pers.e redigera enskilda tabeller (i db)redigera rått btreeblock för person I34teckenkodning för editor: %steckenkodning för indata till editor: %steckenkodning för utdata från editor: %såttaåttondeelvaelfteellelulskriv in filnamnskriv in filnamn (*%s)skriv in heltal:skriv in nyckel eller refn:skriv in nyckel: skriv in namn: skriv in sökväg: skriv in sträng: skriv in j (ja) eller n (nej): felfel vid åtkomst av databaskatalog.fel vid evaluering av arg till lockfel vid evaluering av arg till unlockupp %1uppskattat %1exempel: dbverify -ifsex "%s" exportera/importera katalog:f Bläddra till faderf Bläddra t. fäderf Bläddra t. övre faderf Familj - skapa familjepost med en eller två makarf Familj - ta bort en familj fullständigtf Sökning i hela databasenf Sök på hela namnetfaderfebfebruarifemteförstafemflaggor: florflorealfyrafjärdefr %1fr %1 t %2frimfrimairefrån %1från %1 till %2frucfructidorfullname: personen har inget namng Bläddra t. familjteckenkodning för indata från gedcom: %steckenkodning för utdata till gedcom: %sgermgerminalgettext-dll hade ingen versionversion för gettext-dll: %sdll för gettext: %sh Lägg t. som maka/makehanhenneshennehonomhansi Lägg till som barni Bl. till denna personi Identifiera en person via nyckelvärdei Person - ta bort en person fullständigti importera alla tabeller (från filer till db)iconv (konvertering av teckenkodning) är inkompilerad.iconv (konvertering av teckenkodning) inte inkompilerad.iconv-dll hade ingen versionversion för iconv-dll: %sdll för iconv: %sidentifierare: %s bör vara en sträng otillåtet anrop till pos.initscr misslyckadesiyariyrj Sammanl. ned. - öv.j Gå nedåt i listajanjanuarijour_complementairsjuljulijunjunik Finn nyckelvärde för en personk Gå uppåt i listanyckelfilen är trasig.nyckelfilen har fel justering.nyckelfilen har fel version.kislevksll ladda en tabell från en fil (till db)lifelines `btedit' redigerar råa binära btreeblock i lifelines databasfiler. Använd INTE detta utom om du vet vad du gör och du har säkerhetskopierat din databas.lines [-adkrwiflntcuFxoCzI] [databas] # Använd -F för finsk databaslines [-adkrwiflntcuxoCzI] [databas]lines [-adkrwiflntcuxoCzI] [databas] # finsk databasm Bläddra till moderm Bläddra t. mödrarm Bläddra t. övre moderm Markera denna pers.m Visa minnesstatistikg. marmarsgifta: majdegimprxmessmessidormodern Skapa ny personn Sök på namnfragment (avdelade med blanksteg)n Ge denna lista namnnamnet på databasen är för långt.name: personen har inget namn.nioniondenisannivonivoseingen gettext-dll hittadesingen iconv-dll hittadesingen nyckelfil (katalogen förefaller inte att vara en databas).nod som skickas till lock måste vara inuti en postnod som skickas till unlock måste vara inuti en post.novnovembernsnnollargument i locknollargument i unlocko Bl. t. äldre syskono Redigera fil för användarinställningarö Övriga - ta bort en övrig post fullständigtoktoktoberenp Tavellägep Person - lägg till ny person i databasenp Välj en rapport från lista och körmönster: personpluvpluviosepraiprairialq Avsluta programmetq Återgå till huvudmenynq Återgå till föregående menyr Skapa rapport genom att ange rapportens namnr Läs in data från en GEDCOM-filr Refn-sökningr Ta bort som maka/maked Ta bort från listar Ta bort maka/make frånteckenkodning för rapporter: %steckenkodning för indata till rapporter: %steckenkodning för utdata från rapporter: %sden efterfrågade databasen finns inte.bosatts Lägg t. maka/make i fam.s Bläddra i källposters Bläddra till make/maka/rs Bl. t. övre make/maka/rs Spara databasen till GEDCOM-fils Sök i databasens Maka/make - lägg till en maka/make i en befintlig familjs Maka/make - ta bort en maka/make från en befintlig familjs spara en tabell till en fil (från db)andrasepseptemberset(%s, ) är ogiltigtsjusjundehonshevatshvsignal %1: %2sivansexsjättesoundex: personen har inget namnmaka/makesurname: personen har inget namnsvnt Bläddra till övret Växla t. tandemläget Modifiera teckenöversättningstabellertamuztc Tandem till barntiotiondetevettf Tandem t. fader/fädertg Tandem t. familj/erargumentet till empty är inte en lista, tabell eller uppsättningargumentet till length är inte lista, tabell eller uppsättningargumentet till lock måste vara en post eller nod.argumentet till unlock måste vara en post eller nod.therthermidortredjetretishritm Tandem t. moder/mödrar/tmzt %1ts Tandem till make/maka/makartshtt Växla t. fam.tandemtt Växla t. tandemlägetu Tandem t. föräldrartvttolftetolvtvåu Bläddra t. föräldraru Diverse verktyganvändning: dbverify -(flaggor) v Granska besökshistorik (%d post)v Granska besökshistorik (%d poster)vendvendemiaireventventosevarningx Bläddra i övriga posttyperx Hantera käll-, händelse- och övriga posterx Växla märke/aktuellx Växla två barnx Växla två familjerx Växla övre/nedrex exportera alla tabeller (från db till filer)y Bl. t. yngre syskony Slå på synkyYjJyYjJnNnollzi Bläddra t. pers.zz Bläddra t. allalifelines-3.0.61/po/sv.po0000700002540200244210000040657710656417752015407 0ustar prappDomain Users# Swedish messages for LifeLines. # Copyright (C) 2002-2007 Free Software Foundation, Inc. # Jens Arvidsson , 2002-2007. # msgid "" msgstr "" "Project-Id-Version: lifelines 3.0.60\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-08-08 15:56-0400\n" "PO-Revision-Date: 2007-08-05 18:13+0200\n" "Last-Translator: Jens Arvidsson \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/btree/btrec.c:369 #, c-format msgid "Failed (errno=%d) to open blockfile (rkey=%s): %s" msgstr "" #: src/btree/btrec.c:438 #, c-format msgid "Btree lookup looped back to master (%ld)!" msgstr "" #: src/gedlib/charmaps.c:769 msgid "" msgstr "" #. TRANSLATORS: seconds time interval #: src/gedlib/dateprint.c:783 #, c-format msgid "%02ds" msgstr "%02ds" #. TRANSLATORS: minutes & seconds time interval #: src/gedlib/dateprint.c:789 #, c-format msgid "%dm%02ds" msgstr "%dm%02ds" #. TRANSLATORS: hours & minutes time interval #: src/gedlib/dateprint.c:795 #, c-format msgid "%dh%02dm" msgstr "%dt%02dm" #. TRANSLATORS: days & hours time interval #: src/gedlib/dateprint.c:801 #, c-format msgid "%dd%02dh" msgstr "%dd%03dt" #. TRANSLATORS: years & days time interval #: src/gedlib/dateprint.c:805 #, c-format msgid "%dy%03dd" msgstr "%då%03dd" #: src/gedlib/dbcontext.c:276 msgid "Database error: -- " msgstr "Databasfel: -- " #: src/gedlib/dbcontext.c:280 msgid "requested database does not exist." msgstr "den efterfrågade databasen finns inte." #: src/gedlib/dbcontext.c:283 msgid "db directory is file, not directory." msgstr "db-katalog är en fil, inte en katalog." #: src/gedlib/dbcontext.c:286 msgid "creation of new database failed." msgstr "misslyckades med att skapa ny databas." #: src/gedlib/dbcontext.c:289 msgid "error accessing database directory." msgstr "fel vid åtkomst av databaskatalog." #: src/gedlib/dbcontext.c:292 msgid "no keyfile (directory does not appear to be a database)." msgstr "ingen nyckelfil (katalogen förefaller inte att vara en databas)." #: src/gedlib/dbcontext.c:295 msgid "could not open, read or write an index file." msgstr "kunde inte öppna, läsa eller skriva till en indexfil." #: src/gedlib/dbcontext.c:298 msgid "could not open, read or write the key file." msgstr "kunde inte öppna, läsa eller skriva till nyckelfilen." #: src/gedlib/dbcontext.c:301 msgid "could not open, read or write the key file (to alter database)." msgstr "" "kunde inte öppna, läsa eller skriva till nyckelfilen (för att ändra " "databasen)." #: src/gedlib/dbcontext.c:304 msgid "could not open, read or write a block file." msgstr "kunde inte öppna, läsa eller skriva till en blockfil." #: src/gedlib/dbcontext.c:307 msgid "name of database is too long." msgstr "namnet på databasen är för långt." #: src/gedlib/dbcontext.c:310 msgid "The database is already open for writing." msgstr "Databasen är redan öppnad för skrivning." #: src/gedlib/dbcontext.c:313 msgid "The database is locked (no readwrite access)." msgstr "Databasen är låst (ingen läs- och skrivåtkomst)." #: src/gedlib/dbcontext.c:316 msgid "The database is unlocked." msgstr "Databasen är olåst." #: src/gedlib/dbcontext.c:319 msgid "keyfile is corrupt." msgstr "nyckelfilen är trasig." #: src/gedlib/dbcontext.c:322 msgid "keyfile is wrong alignment." msgstr "nyckelfilen har fel justering." #: src/gedlib/dbcontext.c:325 msgid "keyfile is wrong version." msgstr "nyckelfilen har fel version." #: src/gedlib/dbcontext.c:328 msgid "Existing database found." msgstr "Fann befintlig databas." #: src/gedlib/dbcontext.c:332 #, c-format msgid "The database is already opened for read access by %d user." msgid_plural "The database is already opened for read access by %d users." msgstr[0] "Databasen är redan öppnad för läsning av %d användare." msgstr[1] "Databasen är redan öppnad för läsning av %d användare." #: src/gedlib/dbcontext.c:338 msgid "Invalid properties set for new database" msgstr "Ogiltiga egenskapsinställningar för ny databas." #: src/gedlib/dbcontext.c:341 msgid "Undefined database error -- fix program." msgstr "Odefinierat databasfel -- laga programmet." #: src/gedlib/gedcom.c:112 msgid "Missing NAME line in INDI record; record ignored.\n" msgstr "NAME-rad saknas i INDI-posten; posten ignoreras.\n" #: src/gedlib/init.c:228 src/tools/btedit.c:207 #, c-format msgid "Copyright (C) 1991-2007 Thomas T. Wetmore IV et al." msgstr "Copyright© 1991-2007 Thomas T. Wetmore IV m.fl." #: src/gedlib/init.c:230 src/tools/btedit.c:209 #, c-format msgid "" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." msgstr "" "Det här är fri programvara; se källkoden för kopieringsvillkor. Det\n" "finns INGA garantier; inte ens för SÄLJBARHET eller LÄMPLIGHET FÖR\n" "NÅGOT SPECIELLT ÄNDAMÅL." #: src/gedlib/init.c:235 src/tools/btedit.c:214 #, c-format msgid "Written by Tom Wetmore. Maintained at lifelines.sourceforge.net." msgstr "Skriven av Tom Wetmore. Underhålls på lifelines.sourceforge.net." #: src/gedlib/keytonod.c:686 #, c-format msgid "Database error caused by reference to nonexisting key <%s>." msgstr "Databasfel orsakat av referens till ickeexisterande nyckel <%s>." #: src/gedlib/keytonod.c:687 msgid "It might be possible to fix this with btedit." msgstr "Det är kanske möjligt att laga detta med btedit." #: src/gedlib/keytonod.c:688 msgid "Neighboring keys include:" msgstr "Grannycklar inkluderar:" #: src/gedlib/keytonod.c:1045 #, c-format msgid "Bad cache entry <%s> != <%s>" msgstr "Ogiltig cachenotis <%s> != <%s>" #: src/gedlib/keytonod.c:1072 #, c-format msgid "Cache [%s] overflowed its max size (%d)" msgstr "Cache [%s] spillde över sin maxstorlek (%d)" #: src/gedlib/messages.c:44 msgid "You must identify a database." msgstr "Du måste identifiera en databas." #: src/gedlib/messages.c:45 msgid "What directory holds (or will hold) the LifeLines database? (? to list)" msgstr "" "Vilken katalog inrymmer (ska inrymma) LifeLinesdatabasen? (? för lista)" #: src/gedlib/messages.c:46 msgid "enter path: " msgstr "skriv in sökväg: " #: src/gedlib/messages.c:47 msgid "There is no LifeLines database in that directory." msgstr "Det finns ingen LifeLinesdatabas i den katalogen." #: src/gedlib/messages.c:48 msgid "Do you want to create a database there?" msgstr "Vill du skapa en databas där?" #: src/gedlib/messages.c:49 msgid "Argument to lock (-l) must be y or n." msgstr "Argumentet för att låsa (-l) måste vara y (ja) eller n (nej)." #: src/gedlib/messages.c:50 msgid "Cannot remove last person from family." msgstr "Kan inte ta bort den sista personen från en familj." #: src/gedlib/messages.c:52 msgid "lines [-adkrwiflntcuFxoCzI] [database] # Use -F for Finnish database" msgstr "lines [-adkrwiflntcuFxoCzI] [databas] # Använd -F för finsk databas" #: src/gedlib/messages.c:54 msgid "lines [-adkrwiflntcuxoCzI] [database] # Finnish database" msgstr "lines [-adkrwiflntcuxoCzI] [databas] # finsk databas" #: src/gedlib/messages.c:56 msgid "lines [-adkrwiflntcuxoCzI] [database]" msgstr "lines [-adkrwiflntcuxoCzI] [databas]" #: src/gedlib/messages.c:58 msgid "The database is read only; you may not add records." msgstr "Databasen är skrivskyddad; du får inte lägga till poster." #: src/gedlib/messages.c:59 msgid "The database is read only; you may not change records." msgstr "Databasen är skrivskyddad; du får inte göra ändringar i poster." #: src/gedlib/messages.c:60 msgid "The database is read only; you may not merge records." msgstr "Databasen är skrivskyddad; du får inte slå samman poster." #: src/gedlib/messages.c:61 msgid "The database is read only; you may not remove records." msgstr "Databasen är skrivskyddad; du får inte ta bort poster." #: src/gedlib/messages.c:62 msgid "The database is read only." msgstr "Databasen är skrivskyddad." #: src/gedlib/messages.c:64 msgid "Name, key, refn, list, or @:" msgstr "Namn, nyckel, refn, lista, eller @:" #: src/gedlib/messages.c:65 msgid "enter key or refn: " msgstr "skriv in nyckel eller refn:" #: src/gedlib/messages.c:66 msgid "Please choose the child to remove from the family." msgstr "Välj barn att ta bort från familjen:" #: src/gedlib/messages.c:67 msgid "Please choose the spouse/parent to remove from the family." msgstr "Välj maka/make/förälder att ta bort från familjen" #: src/gedlib/messages.c:68 msgid "From which family is the child to be removed?" msgstr "Från vilken familj ska barnet tas bort?" #: src/gedlib/messages.c:69 msgid "From which family is the spouse/parent to be removed?" msgstr "Från vilken familj ska makan/maken/föräldern tas bort?" #: src/gedlib/messages.c:70 msgid "Identify family (enter nothing to identify by individual members)." msgstr "" "Identifiera familj (lämna blank för att identifiera via familjemedlem)." #: src/gedlib/messages.c:71 msgid "Identify a spouse of the family, if known." msgstr "Identifiera en maka/make i familjen, om känd." #: src/gedlib/messages.c:72 msgid "Identify a child of the family, if known." msgstr "Identifiera ett barn i familjen, om känt." #: src/gedlib/messages.c:73 msgid "Identify the first child to swap." msgstr "Identifiera det första barnet att växla." #: src/gedlib/messages.c:74 msgid "Identify the second child to swap." msgstr "Identifiera det andra barnet att växla." #: src/gedlib/messages.c:75 msgid "Identify the child to reorder." msgstr "Identifiera barnet som ska ordnas om." #: src/gedlib/messages.c:76 msgid "Identify the first family/spouse to swap." msgstr "Identifiera den första familjen/makan/maken att växla." #: src/gedlib/messages.c:77 msgid "Identify the second family/spouse to swap." msgstr "Identifiera den andra familjen/makan/maken att växla." #: src/gedlib/messages.c:78 msgid "Please choose the spouse/parent to browse to." msgstr "Välj maka/make/förälder att bläddra till." #: src/gedlib/messages.c:79 msgid "Please choose the first spouse/parent to browse to." msgstr "Välj den första makan/maken/föräldern att bläddra till." #: src/gedlib/messages.c:80 msgid "Please choose the second spouse/parent to browse to." msgstr "Välj den andra makan/maken/föräldern att bläddra till." #: src/gedlib/messages.c:81 msgid "Please choose the child to browse to." msgstr "Välj barn att bläddra till." #: src/gedlib/messages.c:82 msgid "Please choose the first child to browse to." msgstr "Välj det första barnet att bläddra till." #: src/gedlib/messages.c:83 msgid "Please choose the second child to browse to." msgstr "Välj det andra barnet att bläddra till." #: src/gedlib/messages.c:84 msgid "Please choose the family to browse to." msgstr "Välj familj att bläddra till." #: src/gedlib/messages.c:85 msgid "Enter Family Number to Browse to" msgstr "Skriv in familjenummer att bläddra till" #: src/gedlib/messages.c:86 msgid "Please choose the first family to browse to." msgstr "Välj den första familjen att bläddra till." #: src/gedlib/messages.c:87 msgid "Please choose the second family to browse to." msgstr "Välj den andra familjen att bläddra till." #: src/gedlib/messages.c:88 msgid "Please choose the father/husband to browse to." msgstr "Välj fader/make att bläddra till." #: src/gedlib/messages.c:89 msgid "Please choose the first father/husband to browse to." msgstr "Välj den första fadern/maken att bläddra till." #: src/gedlib/messages.c:90 msgid "Please choose the second father/husband to browse to." msgstr "Välj den andra fadern/maken att bläddra till." #: src/gedlib/messages.c:91 msgid "Please choose the mother/wife to browse to." msgstr "Välj moder/maka att bläddra till." #: src/gedlib/messages.c:92 msgid "Please choose the first mother/wife to browse to." msgstr "Välj den första modern/makan att bläddra till." #: src/gedlib/messages.c:93 msgid "Please choose the second mother/wife to browse to." msgstr "Välj den andra modern/makan att bläddra till." #: src/gedlib/messages.c:94 msgid "Identify a parent in the family having children swapped." msgstr "Identifiera en förälder i familjen vars barn ska växlas." #: src/gedlib/messages.c:95 msgid "Whose families/spouses are to be swapped?" msgstr "Vems familjer/makar ska växlas?" #: src/gedlib/messages.c:96 msgid "Identify one of the child's parents, if known." msgstr "Identifiera en av barnens föräldrar, om känd." #: src/gedlib/messages.c:98 src/liflines/scan.c:127 msgid "Enter pattern to match against refn." msgstr "Ange mönster för att matcha refn." #: src/gedlib/messages.c:100 msgid "Please choose from among these people." msgstr "Välj mellan dessa personer." #: src/gedlib/messages.c:101 msgid "Please choose from among these records." msgstr "Välj mellan dessa poster." #: src/gedlib/messages.c:102 msgid "Is this the new child? " msgstr "Är detta det nya barnet? " #: src/gedlib/messages.c:103 msgid "Is this the new spouse? " msgstr "Är detta den nya makan/maken? " #: src/gedlib/messages.c:104 msgid "Is this the person? Select if so." msgstr "Är detta personen? Välj om så." #: src/gedlib/messages.c:105 msgid "Is this the record? Select if so." msgstr "Är detta posten? Välj om så." #: src/gedlib/messages.c:106 msgid "Select the child the new child precedes or select last." msgstr "Välj vilket barn som det nya barnet föregår eller välj sist." #: src/gedlib/messages.c:107 msgid "Please identify next person to browse to." msgstr "Identifiera nästa person att bläddra till." #: src/gedlib/messages.c:108 msgid "Please identify record to browse to." msgstr "Välj post att bläddra till." #: src/gedlib/messages.c:109 msgid "Please identify one of the spouses." msgstr "Identifiera en av makarna." #: src/gedlib/messages.c:110 msgid "Please identify person or persons to browse to." msgstr "Identifiera person eller personer att bläddra till." #: src/gedlib/messages.c:111 msgid "Please choose family create operation." msgstr "Välj kommando för att skapa familj." #: src/gedlib/messages.c:112 msgid "Do you want to enter another name?" msgstr "Vill du skriva in ett namn till?" #: src/gedlib/messages.c:114 msgid "This person is not a spouse or parent in any family." msgstr "Denna person är inte maka/make eller förälder i någon familj." #: src/gedlib/messages.c:115 msgid "This person is not a child in any family." msgstr "Denna person är inte barn i någon familj." #: src/gedlib/messages.c:116 msgid "There is no one in the database with that name or key." msgstr "Det finns ingen i databasen med det namnet eller den nyckeln." #: src/gedlib/messages.c:118 msgid "This person's father is not in the database." msgstr "Denna persons fader finns inte i databasen." #: src/gedlib/messages.c:119 msgid "This person's mother is not in the database." msgstr "Denna persons moder finns inte i databasen." #: src/gedlib/messages.c:120 msgid "This person has no spouse in the database." msgstr "Denna person har ingen maka/make i databasen." #: src/gedlib/messages.c:121 msgid "This person has no younger sibling in the database." msgstr "Denna person har inget yngre syskon i databasen." #: src/gedlib/messages.c:122 msgid "This person has no older sibling in the database." msgstr "Denna person har inget äldre syskon i databasen." #: src/gedlib/messages.c:123 msgid "This person's parents are not in the database." msgstr "Denna persons föräldrar finns inte i databasen." #: src/gedlib/messages.c:124 msgid "This family has no male spouse/parent in the database." msgstr "Denna familj har ingen make/manlig förälder i databasen." #: src/gedlib/messages.c:125 msgid "This family has no female spouse/parent in the database." msgstr "Denna familj har ingen maka/kvinnlig förälder i databasen." #: src/gedlib/messages.c:126 msgid "There are no children in the database for this family." msgstr "Det finns inga barn i databasen för denna familj." #: src/gedlib/messages.c:127 msgid "This person has no children in the database." msgstr "Denna person har inga barn i databasen." #: src/gedlib/messages.c:128 msgid "No such child." msgstr "Finns inget sådant barn." #: src/gedlib/messages.c:129 msgid "No such person." msgstr "Finns ingen sådan person." #: src/gedlib/messages.c:130 msgid "No such record." msgstr "Finns ingen sådan post." #: src/gedlib/messages.c:131 msgid "No such family." msgstr "Finns ingen sådan familj." #: src/gedlib/messages.c:132 msgid "No sources present." msgstr "Finns inga källor." #: src/gedlib/messages.c:133 msgid "Please choose the source to view." msgstr "Välj källa att granska." #: src/gedlib/messages.c:134 msgid "No events present." msgstr "Finns inga händelser." #: src/gedlib/messages.c:135 msgid "Please choose the event to view." msgstr "Välj händelse att granska." #: src/gedlib/messages.c:136 msgid "No others present." msgstr "Finns inga övriga." #: src/gedlib/messages.c:137 msgid "Please choose the other to view." msgstr "Välj vilken av övriga att granska." #: src/gedlib/messages.c:138 msgid "No notes present." msgstr "Finns inga notiser." #: src/gedlib/messages.c:139 msgid "Please choose the note to view." msgstr "Välj notis att granska." #: src/gedlib/messages.c:140 msgid "No references present." msgstr "Finns inga referenser." #: src/gedlib/messages.c:141 msgid "Please choose the reference to view." msgstr "Välj referens att granska." #: src/gedlib/messages.c:142 msgid "Duplicated REFN - please choose." msgstr "Dubblerat REFN - välj." #: src/gedlib/messages.c:144 msgid "New spouse/parent has unknown sex; can't add to family." msgstr "Ny maka/make/förälder har okänt kön; kan inte lägga till i familj." #: src/gedlib/messages.c:145 msgid "The persons are not of opposite sex; can't make family." msgstr "Personerna är inte av motsatt kön; kan inte skapa familj." #: src/gedlib/messages.c:146 msgid "This person is not a spouse in the family; can't remove." msgstr "Denna person är inte maka/make i familjen; kan inte ta bort." #: src/gedlib/messages.c:147 msgid "This person is not a child in the family; can't remove." msgstr "Denna person är inte barn i familj; kan inte ta bort." #: src/gedlib/messages.c:148 msgid "This person's sex is not known; can't make family." msgstr "Denna persons kön är inte känt; kan inte skapa familj." #: src/gedlib/messages.c:149 msgid "This family already has a husband/male parent." msgstr "Denna familj har redan en make/manlig förälder." #: src/gedlib/messages.c:150 msgid "This family already has a wife/female parent." msgstr "Denna familj har redan en maka/kvinnlig förälder." #: src/gedlib/messages.c:151 msgid "This family has both spouses/parents; can't add another." msgstr "" "I denna familj finns båda makarna/föräldrarna; kan inte lägga till " "ytterligare en." #: src/gedlib/messages.c:152 msgid "This family has neither spouse/parent; can't remove." msgstr "I denna familj finns ingendera av föräldrarna; kan inte ta bort." #: src/gedlib/messages.c:153 msgid "This family still has links; not removed." msgstr "Denna familj har fortfarande länkar; ej borttagen." #: src/gedlib/messages.c:155 msgid "Choose a family by selecting a spouse/parent." msgstr "Välj en familj genom att välja en maka/make/förälder." #: src/gedlib/messages.c:156 msgid "" "Do you want to edit the person again? (Otherwise changes will be discarded.)" msgstr "" "Vill du redigera personen igen? (Om inte, så kommer ändringar att kastas.)" #: src/gedlib/messages.c:157 msgid "Do you want to edit the person again?" msgstr "Vill du redigera personen igen?" #: src/gedlib/messages.c:158 msgid "" "Do you want to edit the family again? (Otherwise changes will be discarded.)" msgstr "" "Vill du redigera familjen igen? (Om inte, så kommer ändringar att kastas.)" #: src/gedlib/messages.c:159 msgid "Do you want to edit the family again?" msgstr "Vill du redigera familjen igen?" #: src/gedlib/messages.c:160 msgid "" "Do you want to edit the source again? (Otherwise changes will be discarded.)" msgstr "" "Vill du redigera källan igen? (Om inte, så kommer ändringar att kastas.)" #: src/gedlib/messages.c:161 msgid "Do you want to edit the source again?" msgstr "Vill du redigera källan igen?" #: src/gedlib/messages.c:162 msgid "" "Do you want to edit the event again? (Otherwise changes will be discarded.)" msgstr "" "Vill du redigera händelsen igen? (Om inte, så kommer ändringar att kastas.)" #: src/gedlib/messages.c:163 msgid "Do you want to edit the event again?" msgstr "Vill du redigera händelsen igen?" #: src/gedlib/messages.c:164 msgid "" "Do you want to edit the record again? (Otherwise changes will be discarded.)" msgstr "" "Vill du redigera posten igen? (Om inte, så kommer ändringar att kastas.)" #: src/gedlib/messages.c:165 msgid "Do you want to edit the record again?" msgstr "Vill du redigera posten igen?" #: src/gedlib/messages.c:166 msgid "Whom do you want to edit?" msgstr "Vem vill du redigera?" #: src/gedlib/messages.c:167 msgid "Which source record do you want to edit?" msgstr "Vilken källpost vill du redigera?" #: src/gedlib/messages.c:168 msgid "Which event record do you want to edit?" msgstr "Vilken händelsepost vill du redigera?" #: src/gedlib/messages.c:169 msgid "What record do you want to edit?" msgstr "Vilken post vill du redigera?" #: src/gedlib/messages.c:171 msgid "Do you really want to add this person to the database?" msgstr "Vill du verkligen lägga till den här personen i databasen?" #: src/gedlib/messages.c:172 msgid "Do you really want to add this family to the database?" msgstr "Vill du verkligen lägga till den här familjen i databasen?" #: src/gedlib/messages.c:173 msgid "Do you really want to add this child to the family?" msgstr "Vill du verkligen lägga till det här barnet i familjen?" #: src/gedlib/messages.c:174 msgid "Do you really want to add this spouse/parent to the family?" msgstr "Vill du verkligen lägga till den här makan/maken/föräldern i familjen?" #: src/gedlib/messages.c:175 msgid "Do you really want to add this source to the database?" msgstr "Vill du verkligen lägga till den här källan i databasen?" #: src/gedlib/messages.c:176 msgid "Do you really want to add this event to the database?" msgstr "Vill du verkligen lägga till den här händelsen i databasen?" #: src/gedlib/messages.c:177 msgid "Do you really want to add this record to the database?" msgstr "Vill du verkligen lägga till den här posten i databasen?" #: src/gedlib/messages.c:178 msgid "Do you really want to update this person?" msgstr "Vill du verkligen uppdatera den här personen?" #: src/gedlib/messages.c:179 msgid "Do you really want to update this family?" msgstr "Vill du verkligen uppdatera den här familjen?" #: src/gedlib/messages.c:180 msgid "Do you really want to update this source?" msgstr "Vill du verkligen uppdatera den här källan?" #: src/gedlib/messages.c:181 msgid "Do you really want to update this event?" msgstr "Vill du verkligen uppdatera den här händelsen?" #: src/gedlib/messages.c:182 msgid "Do you really want to update this record?" msgstr "Vill du verkligen uppdatera den här posten?" #: src/gedlib/messages.c:183 msgid "Are you sure you want to remove the person from the database?" msgstr "Är du säker på att du vill ta bort den här personen från databasen?" #: src/gedlib/messages.c:184 msgid "Are you sure you want to remove this record from the database?" msgstr "Är du säker på att du vill ta bort den här posten från databasen?" #: src/gedlib/messages.c:185 msgid "Remove this family record?" msgstr "Ta bort den här familjeposten?" #: src/gedlib/messages.c:186 #, c-format msgid "(Family %s (%s, %s)" msgstr "(Familj %s (%s, %s)" #: src/gedlib/messages.c:187 msgid "Do you really want to merge these two persons?" msgstr "Vill du verkligen slå samman dessa båda personer?" #: src/gedlib/messages.c:188 msgid "Do you really want to merge these two families?" msgstr "Vill du verkligen slå samman dessa båda familjer?" #: src/gedlib/messages.c:189 msgid "Do you really want to swap spouse orders?" msgstr "Vill du verkligen växla ordning mellan makar?" #: src/gedlib/messages.c:190 msgid "Do you really want to reorder children?" msgstr "Vill du verkligen ordna om barn?" #: src/gedlib/messages.c:191 msgid "Do you really want to remove this child from his/her family?" msgstr "Vill du verkligen ta bort detta barn från hans/hennes familj?" #: src/gedlib/messages.c:192 msgid "Do you really want to remove this spouse from his/her family?" msgstr "Vill du verkligen ta bort denna maka/make från hans/hennes familj?" #: src/gedlib/messages.c:193 msgid "Too many spouses to display full list" msgstr "För många makar för att visa hela listan" #: src/gedlib/messages.c:194 msgid "These persons are children in different families." msgstr "Dessa personer är barn i olika familjer." #: src/gedlib/messages.c:195 msgid "Are you sure you want to merge them?" msgstr "Är du säker på att du vill slå samman dem?" #: src/gedlib/messages.c:197 msgid "There is something wrong with the data." msgstr "Något är fel i data." #: src/gedlib/messages.c:198 msgid "Please identify the child." msgstr "Identifiera barnet." #: src/gedlib/messages.c:199 msgid "Please identify one of the child's siblings." msgstr "Identifiera ett av barnets syskon." #: src/gedlib/messages.c:200 msgid "Identify spouse/parent to add to an existing family." msgstr "Identifiera maka/make/förälder att lägga till i en befintlig familj." #: src/gedlib/messages.c:201 msgid "Identify spouse/parent already in family, if known." msgstr "Identifiera maka/make/förälder som redan finns i familjen, om känd." #: src/gedlib/messages.c:202 msgid "Identify child already in family." msgstr "Identifiera barn som redan finns i familjen." #: src/gedlib/messages.c:204 msgid "This person is already a child in a family." msgstr "Den här personen är redan barn i en familj." #: src/gedlib/messages.c:205 msgid "Identify a spouse/parent for the new family." msgstr "Identifiera en maka/make/förälder för den nya familjen." #: src/gedlib/messages.c:206 msgid "Identify the second spouse/parent, if known." msgstr "Identifiera den andra makan/maken/föräldern, om känd." #: src/gedlib/messages.c:207 msgid "Both families must have husbands/fathers." msgstr "Båda familjerna måste ha män/fäder." #: src/gedlib/messages.c:208 msgid "Both families must have wives/mothers." msgstr "Båda familjerna måste ha hustrur/mödrar." #: src/gedlib/messages.c:210 msgid "Identify spouse/parent in second family, if known." msgstr "Identifiera maka/make/förälder i den andra familjen, om känd." #: src/gedlib/messages.c:211 msgid "Identify child in second family." msgstr "Identifiera barn i den andra familjen." #: src/gedlib/messages.c:212 msgid "Identify second person to browse to." msgstr "Identifiera den andra personen att bläddra till." #: src/gedlib/messages.c:214 msgid "Create a family with this person as a child." msgstr "Skapa en familj med denna person som barn." #: src/gedlib/messages.c:215 msgid "Create a family with this person as a spouse/parent." msgstr "Skapa en familj med denna person som maka/make/förälder." #: src/gedlib/messages.c:216 msgid "This family has less than two children; can't swap." msgstr "Denna familj har mindre än två barn; kan inte växla." #: src/gedlib/messages.c:217 msgid "This person is a spouse/parent in less than two families." msgstr "Denna person är maka/make/förälder i färre än två familjer." #: src/gedlib/messages.c:218 msgid "Something impossible happened. Contact tech support." msgstr "Någonting omöjligt hände. Kontakta teknisk support." #: src/gedlib/messages.c:220 msgid "The two children were swapped." msgstr "De båda barnen växlades." #: src/gedlib/messages.c:221 msgid "The two families were swapped." msgstr "De båda familjerna växlades." #: src/gedlib/messages.c:222 msgid "The child was removed from his/her family." msgstr "Barnet togs bort från dess familj." #: src/gedlib/messages.c:223 msgid "The spouse was removed from his/her family." msgstr "Makan/maken togs bort från dess familj." #: src/gedlib/messages.c:225 msgid "A person cannot be merged with him/herself." msgstr "En person kan inte slås samman med sig själv." #: src/gedlib/messages.c:226 msgid "A family cannot be merged with itself." msgstr "En familj kan inte slås samman med sig själv." #: src/gedlib/messages.c:227 msgid "Two persons with different parents cannot be merged." msgstr "Två personer med olika föräldrar kan inte slås samman." #: src/gedlib/messages.c:228 msgid "Two parents of different sexes cannot be merged." msgstr "Två föräldrar med olika kön kan inte slås samman." #: src/gedlib/messages.c:229 msgid "The families have different fathers/husbands; cannot merge." msgstr "Familjerna har olika fäder/män; kan inte slå samman." #: src/gedlib/messages.c:230 msgid "The families have different wives/mothers; cannot merge." msgstr "Familjerna har olika hustrur/mödrar; kan inte slå samman." #: src/gedlib/messages.c:231 msgid "Who do you want to remove from the database?" msgstr "Vem vill du ta bort från databasen?" #: src/gedlib/messages.c:232 msgid "What record do you want to remove from the database?" msgstr "Vilken post vill du ta bort från databasen?" #: src/gedlib/messages.c:233 msgid "Place the child last in the family." msgstr "Placera barnet sist i familjen." #: src/gedlib/messages.c:234 msgid "Error in abbreviations file." msgstr "Fel i förkortningsfil." #: src/gedlib/messages.c:235 msgid "Error in user options file." msgstr "Fel i filen för användarinställningar." #: src/gedlib/messages.c:236 msgid "Error in character mapping file." msgstr "Fel i teckenmappningsfil." #: src/gedlib/messages.c:237 #, c-format msgid "(Separator is %s)" msgstr "(Avdelare är %s)" #: src/gedlib/messages.c:238 msgid "Do you want to re-edit it?" msgstr "Vill du redigera om den?" #: src/gedlib/messages.c:240 #, c-format msgid "%s was added to the database." msgstr "%s lades till i databasen." #: src/gedlib/messages.c:241 #, c-format msgid "%s was added as a child." msgstr "%s lades till som barn." #: src/gedlib/messages.c:242 #, c-format msgid "%s was added as a spouse and/or parent." msgstr "%s lades till som maka/make och/eller förälder." #: src/gedlib/messages.c:243 msgid "The new family was added to the database." msgstr "Den nya familjen lades till i databasen." #: src/gedlib/messages.c:244 #, c-format msgid "%s was modified in the database." msgstr "%s modifierades i databasen." #: src/gedlib/messages.c:245 msgid "The family was modified in the database." msgstr "Familjen modifierades i databasen." #: src/gedlib/messages.c:246 msgid "The source was modified in the database." msgstr "Källan modifierades i databasen." #: src/gedlib/messages.c:247 msgid "The event was modified in the database." msgstr "Händelsen modifierades i databasen." #: src/gedlib/messages.c:248 msgid "The record was modified in the database." msgstr "Posten modifierades i databasen." #: src/gedlib/messages.c:250 #, c-format msgid "Could not open file %s." msgstr "Kunde inte öppna filen %s." #: src/gedlib/messages.c:251 msgid "Filepath too long." msgstr "Filsökväg för lång." #: src/gedlib/messages.c:253 msgid "Please mark a record first." msgstr "Markera en post först." #: src/gedlib/messages.c:255 #, c-format msgid "The current list is now named %s." msgstr "Den aktuella listan har nu namnet %s." #: src/gedlib/messages.c:256 msgid "The current list is not named." msgstr "Den aktuella listan har inget namn." #: src/gedlib/messages.c:257 msgid "What should the name of this list be?" msgstr "Vad ska denna lista ha för namn?" #: src/gedlib/messages.c:258 msgid "No persons were added to the current list." msgstr "Inga personer lades till i den aktuella listan." #: src/gedlib/messages.c:259 msgid "What persons or list do you want to add to the current list?" msgstr "Vilka personer/vilken lista vill du lägga till i den aktuella listan?" #: src/gedlib/messages.c:260 msgid "You are at the bottom of the list." msgstr "Du är längst ned i listan." #: src/gedlib/messages.c:261 msgid "You are at the top of the list." msgstr "Du är högst upp i listan." #: src/gedlib/messages.c:262 msgid "New persons were added to the current list." msgstr "Nya personer lades till i den aktuella listan." #: src/gedlib/messages.c:264 msgid "System error: illegal map code" msgstr "Systemfel: otillåten mappningskod" #: src/gedlib/messages.c:265 msgid "No such translation table in this database" msgstr "Ingen sådan översättningstabell i denna databas." #: src/gedlib/messages.c:268 msgid "Because of errors the GEDCOM file was not loaded.\n" msgstr "På grund av felaktigheter laddades inte GEDCOM-filen.\n" #: src/gedlib/messages.c:269 msgid "No errors; adding records with original keys..." msgstr "Inga fel; lägger till poster med ursprungliga nycklar..." #: src/gedlib/messages.c:270 msgid "No errors; adding records with new keys..." msgstr "Inga fel; lägger till poster med nya nycklar..." #: src/gedlib/messages.c:271 msgid "Use original keys from GEDCOM file?" msgstr "Vill du använda ursprungliga nycklar från GEDCOM-filen?" #: src/gedlib/messages.c:272 msgid "Proceed?" msgstr "Fortsätt?" #: src/gedlib/messages.c:273 msgid "Enter name of output archive file." msgstr "Skriv in namn för utmatad arkivfil." #: src/gedlib/messages.c:274 #, c-format msgid "Database `%s' has been saved in `%s'." msgstr "Databasen \"%s\" har sparats till \"%s\"." #: src/gedlib/messages.c:275 msgid "Enter name of translation table file to write" msgstr "Skriv in namn på översättningstabellsfil att skriva till" #: src/gedlib/messages.c:276 msgid "Enter name of translation table file to read" msgstr "Skriv in namn på översättningstabellsfil att läsa in" #: src/gedlib/messages.c:277 #, c-format msgid "Line %d: The person defined here has no key: skipped." msgstr "Rad %d: Personen som definieras här har ingen nyckel: hoppas över." #: src/gedlib/messages.c:278 #, c-format msgid "Line %d: The family defined here has no key." msgstr "Rad %d: Familjen som definieras här har ingen nyckel." #: src/gedlib/messages.c:279 #, c-format msgid "Lines %d and %d: Person %s is multiply defined: skipped." msgstr "" "Raderna %d och %d: Personen %s är definierad mer än en gång: hoppas över." #: src/gedlib/messages.c:280 #, c-format msgid "Lines %d and %d: Family %s is multiply defined." msgstr "Raderna %d och %d: Familjen %s är definierad mer än en gång." #: src/gedlib/messages.c:281 #, c-format msgid "Line %d: Person %s has an incorrect key: skipped." msgstr "Rad %d: Personen %s har en felaktig nyckel: hoppas över." #: src/gedlib/messages.c:282 #, c-format msgid "Line %d: Family %s has an incorrect key." msgstr "Rad %d: Familjen %s har en felaktig nyckel." #: src/gedlib/messages.c:283 #, c-format msgid "Person %s is referred to but not defined." msgstr "Referens till personen %s, som inte är definierad." #: src/gedlib/messages.c:284 #, c-format msgid "Family %s is referred to but not defined." msgstr "Referens till familjen %s, som inte är definierad." #: src/gedlib/messages.c:285 #, c-format msgid "Source %s is referred to but not defined." msgstr "Referens till källan %s, som inte är definierad." #: src/gedlib/messages.c:286 #, c-format msgid "Event %s is referred to but not defined." msgstr "Referens till händelsen %s, som inte är definierad." #: src/gedlib/messages.c:287 #, c-format msgid "Line %d: This line has a level number that is too large." msgstr "Rad %d: Denna rad har ett nivånummer som är för stort." #: src/gedlib/messages.c:288 #, c-format msgid "Line %d: Person defined here has no name." msgstr "Rad %d: Personen som definieras här saknar namn." #: src/gedlib/messages.c:294 msgid "" msgstr "" #: src/gedlib/messages.c:296 msgid "What is the name of the program?" msgstr "Vad är namnet på programmet?" #: src/gedlib/messages.c:297 msgid "Please enter the name of the GEDCOM file." msgstr "Skriv in namnet på GEDCOM-filen." #: src/gedlib/messages.c:299 msgid "What is the name of the output file?" msgstr "Vad är namnet på utmatningsfilen?" #: src/gedlib/messages.c:300 msgid "Malformed configuration file: line too long." msgstr "Fel i konfigurationsfil: för lång rad." #: src/gedlib/messages.c:301 msgid "Unsupported file encoding (no multibyte encodings except UTF-8)." msgstr "Ostödd filkodning (inga multibytekodningar utom UTF-8)." #: src/gedlib/messages.c:302 #, c-format msgid "Unsupported file encoding: %s." msgstr "Ostödd filkodning: %s." #: src/gedlib/messages.c:305 msgid "Enter string for program" msgstr "Skriv in sträng för program" #: src/gedlib/messages.c:306 msgid "enter string: " msgstr "skriv in sträng: " #: src/gedlib/messages.c:307 msgid "enter integer:" msgstr "skriv in heltal:" #: src/gedlib/messages.c:308 msgid "enter name: " msgstr "skriv in namn: " #: src/gedlib/messages.c:309 msgid "Strike any key to continue." msgstr "Tryck på valfri tangent för att fortsätta." #: src/gedlib/messages.c:313 msgid "" "0 SOUR\n" "1 REFN\n" "1 TITL Title\n" "1 AUTH Author" msgstr "" "0 SOUR\n" "1 REFN\n" "1 TITL Titel\n" "1 AUTH Författare" #: src/gedlib/messages.c:314 msgid "" "0 EVEN\n" "1 REFN\n" "1 DATE\n" "1 PLAC\n" "1 INDI\n" " 2 NAME\n" " 2 ROLE\n" "1 SOUR" msgstr "" "0 EVEN\n" "1 REFN\n" "1 DATE\n" "1 PLAC\n" "1 INDI\n" " 2 NAME\n" " 2 ROLE\n" "1 SOUR" #: src/gedlib/messages.c:315 msgid "" "0 XXXX\n" "1 REFN" msgstr "" "0 XXXX\n" "1 REFN" #: src/gedlib/messages.c:319 msgid "The file is as positioned at EOF." msgstr "Filen är positionerad vid filslut." #: src/gedlib/messages.c:320 #, c-format msgid "Line %d: This line is empty; EOF?" msgstr "Rad %d: Denna rad är tom; filslut?" #: src/gedlib/messages.c:321 #, c-format msgid "Line %d: This line is too long." msgstr "Rad %d: Denna rad är för lång." #: src/gedlib/messages.c:322 #, c-format msgid "Line %d: This line has no level number." msgstr "Rad %d: Denna rad har inget nivånummer." #: src/gedlib/messages.c:323 #, c-format msgid "Line %d: This line is incomplete." msgstr "Rad %d: Denna rad är ofullständig." #: src/gedlib/messages.c:324 #, c-format msgid "Line %d: This line has a bad link." msgstr "Rad %d: Denna rad har en ogiltig länk." #: src/gedlib/messages.c:325 #, c-format msgid "Line %d: This line needs white space before tag." msgstr "Rad %d: Denna rad behöver blanksteg innan tagg." #: src/gedlib/messages.c:326 #, c-format msgid "Line %d: This line has an illegal level." msgstr "Rad %d: Denna rad har en otillåten nivå." #: src/gedlib/messages.c:327 msgid "The record begins at wrong level." msgstr "Posten börjar på fel nivå." #: src/gedlib/messages.c:330 msgid "" "\n" "Aborting now. Core dump? [y/n]" msgstr "" "\n" "Avbryter nu. Skapa minnesutskrift? [y/n]" #: src/gedlib/messages.c:331 msgid "" "Looks like a program was running.\n" "Check file %1 around line %2.\n" msgstr "" "Verkar som att ett program kördes.\n" "Kontrollera fil %1 omkring rad %2.\n" #: src/gedlib/messages.c:332 msgid "signal %1: %2" msgstr "signal %1: %2" #: src/gedlib/messages.c:334 msgid "SIGNAL 0" msgstr "SIGNAL 0" #: src/gedlib/messages.c:335 msgid "HANGUP" msgstr "AVRINGD" #: src/gedlib/messages.c:336 msgid "INTERRUPT" msgstr "AVBROTT" #: src/gedlib/messages.c:337 msgid "QUIT" msgstr "LÄMNAD" #: src/gedlib/messages.c:338 msgid "ILLEGAL INSTRUCTION" msgstr "OTILLÅTEN INSTRUKTION" #: src/gedlib/messages.c:339 msgid "TRACE TRAP" msgstr "SPÅRNINGSFÄLLA" #: src/gedlib/messages.c:340 msgid "ABORT" msgstr "AVBRUTEN" #: src/gedlib/messages.c:341 msgid "EMT INST" msgstr "EMT INST" #: src/gedlib/messages.c:342 msgid "FLOATING POINT EXCEPTION" msgstr "FLYTTALSUNDANTAG" #: src/gedlib/messages.c:343 msgid "KILL" msgstr "DÖDAD" #: src/gedlib/messages.c:344 msgid "BUS ERROR" msgstr "BUSSFEL" #: src/gedlib/messages.c:345 msgid "SEGMENTATION ERROR" msgstr "SEGMENTERINGSFEL" #: src/gedlib/messages.c:346 msgid "SYSTEM CALL ERROR" msgstr "SYSTEMANROPSFEL" #: src/gedlib/messages.c:347 msgid "PIPE WRITE" msgstr "RÖRSKRIVNING" #: src/gedlib/messages.c:348 msgid "ALARM CLOCK" msgstr "ALARMKLOCKA" #: src/gedlib/messages.c:350 msgid "TERMINATE FROM KILL" msgstr "AVSLUTAD" #: src/gedlib/messages.c:351 msgid "USER SIGNAL 1" msgstr "ANVÄNDARSIGNAL 1" #: src/gedlib/messages.c:352 msgid "USER SIGNAL 2" msgstr "ANVÄNDARSIGNAL 2" #: src/gedlib/messages.c:353 msgid "DEATH OF CHILD" msgstr "BARN DÖTT" #: src/gedlib/messages.c:354 msgid "POWER-FAIL RESTART" msgstr "STRÖMAVBROTTSOMSTART" #: src/gedlib/messages.c:355 msgid "WINDOW CHANGE" msgstr "FÖNSTERÄNDRING" #: src/gedlib/messages.c:356 msgid "Unknown signal" msgstr "Okänd signal" #: src/gedlib/messages.c:360 msgid "person" msgstr "person" #: src/gedlib/messages.c:361 msgid ", of " msgstr ", från " #: src/gedlib/messages.c:362 msgid "father" msgstr "fader" #: src/gedlib/messages.c:363 msgid "mother" msgstr "moder" #: src/gedlib/messages.c:364 msgid "spouse" msgstr "maka/make" #: src/gedlib/messages.c:365 msgid "child" msgstr "barn" #: src/gedlib/messages.c:368 msgid "m. " msgstr "g. " #: src/gedlib/messages.c:370 msgid "div. " msgstr "ski." #: src/gedlib/messages.c:372 msgid "b. " msgstr "f. " #: src/gedlib/messages.c:374 msgid "bap. " msgstr "döpt " #: src/gedlib/messages.c:376 msgid "d. " msgstr "d. " #: src/gedlib/messages.c:378 msgid "bur. " msgstr "beg. " #: src/gedlib/messages.c:380 msgid "cb. " msgstr "bf. " #: src/gedlib/messages.c:382 msgid "married: " msgstr "gifta: " #: src/gedlib/messages.c:383 msgid "born: " msgstr "född: " #: src/gedlib/messages.c:384 msgid "bapt: " msgstr "döpt: " #: src/gedlib/messages.c:385 msgid "died: " msgstr "död: " #: src/gedlib/messages.c:386 msgid "buri: " msgstr "begr: " #: src/gedlib/messages.c:390 msgid "You cannot edit the INDI line in a person record." msgstr "Du kan inte redigera INDI-raden i en personpost." #: src/gedlib/messages.c:391 msgid "You cannot edit the FAMC line in a person record." msgstr "Du kan inte redigera FAMC-raden i en personpost." #: src/gedlib/messages.c:392 msgid "You cannot edit the FAMS lines in a person record." msgstr "Du kan inte redigera FAMS-raden i en personpost." #: src/gedlib/messages.c:393 msgid "You cannot edit the FAM line in a family record." msgstr "Du kan inte redigera FAM-raden i en familjepost." #: src/gedlib/messages.c:394 msgid "You cannot edit the HUSB line in a family record." msgstr "Du kan inte redigera HUSB-raden i en familjepost." #: src/gedlib/messages.c:395 msgid "You cannot edit the WIFE line in a family record." msgstr "Du kan inte redigera WIFE-raden i en familjepost." #: src/gedlib/messages.c:396 msgid "You cannot edit the CHIL lines in a family record." msgstr "Du kan inte redigera CHIL-raderna i en familjepost." #: src/gedlib/messages.c:397 msgid "The record is empty." msgstr "Posten är tom." #: src/gedlib/messages.c:398 msgid "The record does not begin with an INDI line." msgstr "Posten börjar inte med en INDI-rad." #: src/gedlib/messages.c:399 msgid "The record does not begin with a FAM line." msgstr "Posten börjar inte med en FAM-rad." #: src/gedlib/messages.c:400 msgid "The record does not begin with a SOUR line." msgstr "Posten börjar inte med en SOUR-rad." #: src/gedlib/messages.c:401 msgid "The record does not begin with an EVEN line." msgstr "Posten börjar inte med en EVEN-rad." #: src/gedlib/messages.c:402 msgid "INDI, FAM, SOUR, EVEN records may not be other records." msgstr "INDI-, FAM-, SOUR- och EVEN-poster får inte vara andra poster." #: src/gedlib/messages.c:403 msgid "The record contains multiple level 0 lines." msgstr "Posten innehåller flera rader på 0-nivån." #: src/gedlib/messages.c:404 msgid "This person record has bad GEDCOM name syntax." msgstr "Denna personpost har ogiltig GEDCOM-namnsyntax." #: src/gedlib/messages.c:405 msgid "You cannot change the sex of a parent." msgstr "Du kan inte ändra kön för en förälder." #: src/gedlib/messages.c:406 msgid "REFN key is already in use." msgstr "REFN-nyckel används redan." #: src/gedlib/messages.c:408 msgid "Tag is too long to connect automatically." msgstr "Taggen är för lång för att anknyta automatiskt." #: src/gedlib/messages.c:410 msgid "Database records" msgstr "Databasposter" #: src/gedlib/messages.c:411 #, c-format msgid "%dI, %dF, %dS, %dE, %dX" msgstr "%dI, %dF, %dS, %dE, %dX" #: src/gedlib/messages.c:414 #, c-format msgid "LifeLines %s - Genealogical DB and Programming System" msgstr "LifeLines %s - Genealogiskt databas- och programmeringssystem" #: src/gedlib/messages.c:415 msgid "Copyright(c) 1991 to 1996, by T. T. Wetmore IV" msgstr "Copyright© 1991 till 1996, av T. T. Wetmore IV" #: src/gedlib/messages.c:416 #, c-format msgid "Current Database - %s" msgstr "Aktuell databas - %s" #: src/gedlib/messages.c:418 msgid " (immutable)" msgstr " (oföränderlig)" #: src/gedlib/messages.c:420 msgid " (read only)" msgstr "(skrivskyddad)" #: src/gedlib/messages.c:421 msgid "Please choose an operation:" msgstr "Välj ett kommando:" #: src/gedlib/messages.c:422 msgid "Not valid command" msgstr "Ogiltigt kommando" #: src/gedlib/messages.c:425 msgid "enter y (yes) or n (no): " msgstr "skriv in j (ja) eller n (nej): " #: src/gedlib/messages.c:426 msgid "yYnN" msgstr "yYjJnN" #: src/gedlib/messages.c:427 msgid "yY" msgstr "yYjJ" #: src/gedlib/messages.c:430 msgid "LifeLines -- Person Browse Screen (* toggles menu)" msgstr "LifeLines -- Personfönster (* visar/döljer meny)" #: src/gedlib/messages.c:431 msgid "LifeLines -- Family Browse Screen (* toggles menu)" msgstr "LifeLines -- Familjefönster (* visar/döljer meny)" #: src/gedlib/messages.c:432 msgid "LifeLines -- Two Person Browse Screen (* toggles menu)" msgstr "LifeLines -- Tvåpersonsfönster (* visar/döljer meny)" #: src/gedlib/messages.c:433 msgid "LifeLines -- Two Family Browse Screen (* toggles menu)" msgstr "LifeLines -- Tvåfamiljsfönster (* visar/döljer meny)" #: src/gedlib/messages.c:434 msgid "LifeLines -- Auxiliary Browse Screen (* toggles menu)" msgstr "LifeLines -- Assistentfönster (* visar/döljer meny)" #: src/gedlib/messages.c:435 msgid "LifeLines -- List Browse Screen (* toggles menu)" msgstr "LifeLines -- Listfönster (* visar/döljer meny)" #: src/gedlib/messages.c:439 msgid "Commands: Select by number, u Page Up, d Page Down, i Select, q Quit" msgstr "" "Kommandon: Välj efter nummer, u Sida upp, d Sida ned, i Välj, q Avsluta" #: src/gedlib/messages.c:440 msgid "Commands: u Page Up, d Page Down, q Quit" msgstr "Kommandon: u Sida upp, d Sida ned, q Avsluta" #: src/gedlib/messages.c:441 msgid "Messages:" msgstr "Meddelanden:" #: src/gedlib/messages.c:444 msgid "Please choose from the following options:" msgstr "Välj något av följande alternativ:" #: src/gedlib/messages.c:445 #, c-format msgid "New record is %s" msgstr "Den nya posten är %s" #: src/gedlib/messages.c:446 msgid "Insert xref automatically at bottom of current record." msgstr "Lägg in korsref automatiskt längst ned i aktuell post." #: src/gedlib/messages.c:447 msgid "Edit current record now to add xref manually." msgstr "Redigera aktuell post nu för att lägga till korsref manuellt." #: src/gedlib/messages.c:448 msgid "Browse new record (without adding xref)." msgstr "Bläddra i ny post (utan att lägga till korsref)." #: src/gedlib/messages.c:449 msgid "Return to current record (without adding xref)." msgstr "Återgå till aktuell post (utan att lägga till korsref)." #: src/gedlib/messages.c:452 msgid "Spouse unknown" msgstr "Maka/make okänd" #: src/gedlib/messages.c:453 msgid "No more history" msgstr "Slut på historik" #: src/gedlib/messages.c:454 msgid "Bad history count" msgstr "Ogiltig historiknumrering" #: src/gedlib/messages.c:455 msgid "Bad backup history count" msgstr "Ogiltig säkerhetskopierad historiknumrering" #: src/gedlib/messages.c:456 msgid "Bad history length" msgstr "Ogiltig historiklängd" #: src/gedlib/messages.c:457 #, c-format msgid "Delete history (%d entries)?" msgstr "Ta bort historik (%d stycken)?" #: src/gedlib/messages.c:458 msgid "Error accessing data" msgstr "Fel vid dataåtkomst" #: src/gedlib/messages.c:459 msgid "Choose from history" msgstr "Välj ur historik" #: src/gedlib/messages.c:460 msgid "" "Cannot combine immutable (-i) or read-only (-r) with read-write (-w) access." msgstr "" "Kan inte kombinera oföränderlig (-i) eller skrivskyddad (-r) med " "skrivåtkomst (-w)." #: src/gedlib/messages.c:461 msgid "Cannot combine forceopen (-f) and lock (-l) flags." msgstr "Kan inte kombinera flaggorna tvinga upp (-f) och lås (-l)." #: src/gedlib/messages.c:462 msgid "Default path: " msgstr "Förvald sökväg: " #: src/gedlib/messages.c:463 msgid "WARNING: missing keys" msgstr "VARNING: nycklar saknas" #: src/gedlib/messages.c:464 msgid "This does not point to another record in the database!" msgstr "Detta pekar inte på en annan post i databasen!" #: src/gedlib/messages.c:465 msgid "enter file name" msgstr "skriv in filnamn" #: src/gedlib/messages.c:466 #, c-format msgid "enter file name (*%s)" msgstr "skriv in filnamn (*%s)" #: src/gedlib/messages.c:467 msgid "There is no record with that key or reference." msgstr "Det finns ingen post med den nyckeln eller referensen." #: src/gedlib/messages.c:468 msgid "Database was corrupt." msgstr "Databasen var trasig." #: src/gedlib/messages.c:471 msgid "Bad decimal number format." msgstr "Ogiltigt format för decimaltal." #: src/gedlib/messages.c:472 msgid "Bad hexidecimal number format." msgstr "Ogiltigt format för hexadecimala tal." #: src/gedlib/messages.c:473 msgid "No replacement string on line." msgstr "Ingen ersättningssträng på raden." #: src/gedlib/messages.c:474 msgid "No original string on line." msgstr "Ingen ursprunglig sträng på raden." #: src/gedlib/messages.c:475 msgid "Bad escape format." msgstr "Felaktigt kontrollsekvensformat." #: src/gedlib/messages.c:476 #, c-format msgid "%s: line %d (entry %d): %s" msgstr "%s: rad %d (notering %d): %s" #: src/gedlib/messages.c:479 src/liflines/brwsmenu.c:26 msgid "q Return to main menu" msgstr "q Återgå till huvudmenyn" #: src/gedlib/messages.c:480 msgid "q Return to previous menu" msgstr "q Återgå till föregående meny" #: src/gedlib/messages.c:481 msgid "q Quit program" msgstr "q Avsluta programmet" #: src/gedlib/messages.c:482 msgid "Q Quit current database" msgstr "Q Avsluta aktuell databas" #: src/gedlib/messages.c:485 msgid "b Browse the persons in the database" msgstr "b Bläddra mellan personer i databasen" #: src/gedlib/messages.c:486 msgid "s Search database" msgstr "s Sök i databasen" #: src/gedlib/messages.c:487 msgid "a Add information to the database" msgstr "a Lägg till information i databasen" #: src/gedlib/messages.c:488 msgid "d Delete information from the database" msgstr "d Ta bort information från databasen" #: src/gedlib/messages.c:489 msgid "r Generate report by entering report name" msgstr "r Skapa rapport genom att ange rapportens namn" #: src/gedlib/messages.c:490 msgid "p Pick a report from list and run" msgstr "p Välj en rapport från lista och kör" #: src/gedlib/messages.c:491 msgid "c Character set options" msgstr "c Inställningar för teckenuppsättning" #: src/gedlib/messages.c:492 msgid "t Modify character translation tables" msgstr "t Modifiera teckenöversättningstabeller" #: src/gedlib/messages.c:493 msgid "u Miscellaneous utilities" msgstr "u Diverse verktyg" #: src/gedlib/messages.c:494 msgid "x Handle source, event and other records" msgstr "x Hantera käll-, händelse- och övriga poster" #: src/gedlib/messages.c:497 msgid "What utility do you want to perform?" msgstr "Vilket verktyg vill du använda?" #: src/gedlib/messages.c:498 msgid "s Save the database in a GEDCOM file" msgstr "s Spara databasen till GEDCOM-fil" #: src/gedlib/messages.c:499 msgid "r Read in data from a GEDCOM file" msgstr "r Läs in data från en GEDCOM-fil" #: src/gedlib/messages.c:500 msgid "R Pick a GEDCOM file and read in" msgstr "R Välj en GEDCOM-fil och läs in" #: src/gedlib/messages.c:501 msgid "k Find a person's key value" msgstr "k Finn nyckelvärde för en person" #: src/gedlib/messages.c:502 msgid "i Identify a person from key value" msgstr "i Identifiera en person via nyckelvärde" #: src/gedlib/messages.c:503 msgid "d Show database statistics" msgstr "d Visa databasstatistik" #: src/gedlib/messages.c:504 msgid "m Show memory statistics" msgstr "m Visa minnesstatistik" #: src/gedlib/messages.c:505 msgid "e Edit the place abbreviation file" msgstr "e Redigera platsförkortningsfilen" #: src/gedlib/messages.c:506 msgid "o Edit the user options file" msgstr "o Redigera fil för användarinställningar" #: src/gedlib/messages.c:509 msgid "What activity do you want to perform?" msgstr "Vilken funktion vill du använda?" #: src/gedlib/messages.c:510 msgid "s Browse source records" msgstr "s Bläddra i källposter" #: src/gedlib/messages.c:511 msgid "e Browse event records" msgstr "e Bläddra i händelseposter" #: src/gedlib/messages.c:512 msgid "x Browse other records" msgstr "x Bläddra i övriga posttyper" #: src/gedlib/messages.c:513 msgid "1 Add a source record to the database" msgstr "1 Lägg till en källpost i databasen" #: src/gedlib/messages.c:514 msgid "2 Edit source record from the database" msgstr "2 Redigera källpost i databasen" #: src/gedlib/messages.c:515 msgid "3 Add an event record to the database" msgstr "3 Lägg till en händelsepost i databasen" #: src/gedlib/messages.c:516 msgid "4 Edit event record from the database" msgstr "4 Redigera händelsepost i databasen" #: src/gedlib/messages.c:517 msgid "5 Add an other record to the database" msgstr "5 Lägg till en post av övrig typ i databasen" #: src/gedlib/messages.c:518 msgid "6 Edit other record from the database" msgstr "6 Redigera en post av övrig typ i databasen" #: src/gedlib/messages.c:521 msgid "Translation Tables" msgstr "Teckenöversättningstabeller" #: src/gedlib/messages.c:522 msgid "e edit individual tables (in db)" msgstr "e redigera enskilda tabeller (i db)" #: src/gedlib/messages.c:523 msgid "l load a table from a file (into db)" msgstr "l ladda en tabell från en fil (till db)" #: src/gedlib/messages.c:524 msgid "s save a table to a file (from db)" msgstr "s spara en tabell till en fil (från db)" #: src/gedlib/messages.c:525 msgid "x export all tables (from db to files)" msgstr "x exportera alla tabeller (från db till filer)" #: src/gedlib/messages.c:526 msgid "i import all tables (from files into db)" msgstr "i importera alla tabeller (från filer till db)" #: src/gedlib/messages.c:527 msgid "export/import directory:" msgstr "exportera/importera katalog:" #: src/gedlib/messages.c:530 msgid "Which character mapping do you want to edit?" msgstr "Vilken teckenmappning vill du redigera?" #: src/gedlib/messages.c:531 msgid "Which character mapping do you want to save?" msgstr "Vilken teckenmappning vill du spara?" #: src/gedlib/messages.c:534 msgid "Not implemented yet" msgstr "Ej implementerat ännu" #: src/gedlib/messages.c:537 msgid "What do you want to add?" msgstr "Vad vill du lägga till?" #: src/gedlib/messages.c:538 msgid "p Person - add new person to the database" msgstr "p Person - lägg till ny person i databasen" #: src/gedlib/messages.c:539 msgid "f Family - create family record from one or two spouses" msgstr "f Familj - skapa familjepost med en eller två makar" #: src/gedlib/messages.c:540 msgid "c Child - add a child to an existing family" msgstr "c Barn - lägg till ett barn i en befintlig familj" #: src/gedlib/messages.c:541 msgid "s Spouse - add a spouse to an existing family" msgstr "s Maka/make - lägg till en maka/make i en befintlig familj" #: src/gedlib/messages.c:544 msgid "What do you want to remove?" msgstr "Vad vill du ta bort?" #: src/gedlib/messages.c:545 msgid "c Child - remove a child from his/her family" msgstr "c Barn - ta bort ett barn från dess familj" #: src/gedlib/messages.c:546 msgid "s Spouse - remove a spouse from a family" msgstr "s Maka/make - ta bort en maka/make från en befintlig familj" #: src/gedlib/messages.c:547 msgid "i Individual - remove a person completely" msgstr "i Person - ta bort en person fullständigt" #: src/gedlib/messages.c:548 msgid "f Family - remove a family completely" msgstr "f Familj - ta bort en familj fullständigt" #: src/gedlib/messages.c:549 msgid "o Other - remove other record completely" msgstr "ö Övriga - ta bort en övrig post fullständigt" #: src/gedlib/messages.c:552 msgid "How would you like to find a record?" msgstr "Hur skulle du vilja finna en post?" #: src/gedlib/messages.c:555 msgid "Performing full name scan" msgstr "Utför sökning på hela namnet" #: src/gedlib/messages.c:556 msgid "Performing name fragment scan" msgstr "Utför sökning på namnfragment" #: src/gedlib/messages.c:557 msgid "Performing refn scan" msgstr "Utför sökning på refn" #: src/gedlib/messages.c:558 msgid "Performing source scan" msgstr "Utför sökning på källor" #: src/gedlib/messages.c:559 msgid "No records found in scan" msgstr "Inga poster återfanns i sökning" #: src/gedlib/messages.c:562 msgid "abt %1" msgstr "omk %1" #: src/gedlib/messages.c:563 msgid "about %1" msgstr "omkring %1" #: src/gedlib/messages.c:564 msgid "est %1" msgstr "upp %1" #: src/gedlib/messages.c:565 msgid "estimated %1" msgstr "uppskattat %1" #: src/gedlib/messages.c:566 msgid "cal %1" msgstr "ber %1" #: src/gedlib/messages.c:567 msgid "calculated %1" msgstr "beräknat %1" #: src/gedlib/messages.c:568 msgid "fr %1" msgstr "fr %1" #: src/gedlib/messages.c:569 msgid "from %1" msgstr "från %1" #: src/gedlib/messages.c:570 src/gedlib/messages.c:571 msgid "to %1" msgstr "t %1" #: src/gedlib/messages.c:572 msgid "fr %1 to %2" msgstr "fr %1 t %2" #: src/gedlib/messages.c:573 msgid "from %1 to %2" msgstr "från %1 till %2" #: src/gedlib/messages.c:574 msgid "bef %1" msgstr "för %1" #: src/gedlib/messages.c:575 msgid "before %1" msgstr "före %1" #: src/gedlib/messages.c:576 msgid "aft %1" msgstr "eft %1" #: src/gedlib/messages.c:577 msgid "after %1" msgstr "efter %1" #: src/gedlib/messages.c:578 msgid "bet %1 and %2" msgstr "mel %1 och %2" #: src/gedlib/messages.c:579 msgid "between %1 and %2" msgstr "mellan %1 och %2" #: src/gedlib/messages.c:582 msgid "B.C." msgstr "f. Kr." #: src/gedlib/messages.c:584 msgid "BC" msgstr "fKr" #: src/gedlib/messages.c:586 msgid "B.C.E." msgstr "f. Kr." #: src/gedlib/messages.c:588 msgid "BCE" msgstr "fKr" #: src/gedlib/messages.c:590 msgid "A.D." msgstr "e. Kr." #: src/gedlib/messages.c:592 msgid "AD" msgstr "eKr" #: src/gedlib/messages.c:594 msgid "C.E." msgstr "e. Kr." #: src/gedlib/messages.c:596 msgid "CE" msgstr "eKr" #: src/gedlib/messages.c:599 msgid "%1J" msgstr "%1J" #: src/gedlib/messages.c:601 msgid "%1 HEB" msgstr "%1 HEB" #: src/gedlib/messages.c:603 msgid "%1 FR" msgstr "%1 FR" #: src/gedlib/messages.c:605 msgid "%1 AUC" msgstr "%1 AUC" #: src/gedlib/messages.c:607 msgid "jan" msgstr "jan" #: src/gedlib/messages.c:608 msgid "january" msgstr "januari" #: src/gedlib/messages.c:609 msgid "feb" msgstr "feb" #: src/gedlib/messages.c:610 msgid "february" msgstr "februari" #: src/gedlib/messages.c:611 msgid "mar" msgstr "mar" #: src/gedlib/messages.c:612 msgid "march" msgstr "mars" #: src/gedlib/messages.c:613 msgid "apr" msgstr "apr" #: src/gedlib/messages.c:614 msgid "april" msgstr "april" #: src/gedlib/messages.c:616 msgid "**may" msgstr "maj" #: src/gedlib/messages.c:617 msgid "may" msgstr "maj" #: src/gedlib/messages.c:618 msgid "jun" msgstr "jun" #: src/gedlib/messages.c:619 msgid "june" msgstr "juni" #: src/gedlib/messages.c:620 msgid "jul" msgstr "jul" #: src/gedlib/messages.c:621 msgid "july" msgstr "juli" #: src/gedlib/messages.c:622 msgid "aug" msgstr "aug" #: src/gedlib/messages.c:623 msgid "august" msgstr "augusti" #: src/gedlib/messages.c:624 msgid "sep" msgstr "sep" #: src/gedlib/messages.c:625 msgid "september" msgstr "september" #: src/gedlib/messages.c:626 msgid "oct" msgstr "okt" #: src/gedlib/messages.c:627 msgid "october" msgstr "oktober" #: src/gedlib/messages.c:628 msgid "nov" msgstr "nov" #: src/gedlib/messages.c:629 msgid "november" msgstr "november" #: src/gedlib/messages.c:630 msgid "dec" msgstr "dec" #: src/gedlib/messages.c:631 msgid "december" msgstr "december" #: src/gedlib/messages.c:633 msgid "tsh" msgstr "tsh" #: src/gedlib/messages.c:634 msgid "tishri" msgstr "tishri" #: src/gedlib/messages.c:635 msgid "csh" msgstr "csh" #: src/gedlib/messages.c:636 msgid "cheshvan" msgstr "cheshvan" #: src/gedlib/messages.c:637 msgid "ksl" msgstr "ksl" #: src/gedlib/messages.c:638 msgid "kislev" msgstr "kislev" #: src/gedlib/messages.c:639 msgid "tvt" msgstr "tvt" #: src/gedlib/messages.c:640 msgid "tevet" msgstr "tevet" #: src/gedlib/messages.c:641 msgid "shv" msgstr "shv" #: src/gedlib/messages.c:642 msgid "shevat" msgstr "shevat" #: src/gedlib/messages.c:643 msgid "adr" msgstr "adr" #: src/gedlib/messages.c:644 msgid "adar" msgstr "adar" #: src/gedlib/messages.c:645 msgid "ads" msgstr "ads" #: src/gedlib/messages.c:646 msgid "adar sheni" msgstr "adar sheni" #: src/gedlib/messages.c:647 msgid "nsn" msgstr "nsn" #: src/gedlib/messages.c:648 msgid "nisan" msgstr "nisan" #: src/gedlib/messages.c:649 msgid "iyr" msgstr "iyr" #: src/gedlib/messages.c:650 msgid "iyar" msgstr "iyar" #: src/gedlib/messages.c:651 msgid "svn" msgstr "svn" #: src/gedlib/messages.c:652 msgid "sivan" msgstr "sivan" #: src/gedlib/messages.c:653 msgid "tmz" msgstr "tmz" #: src/gedlib/messages.c:654 msgid "tamuz" msgstr "tamuz" #: src/gedlib/messages.c:655 msgid "aav" msgstr "aav" #: src/gedlib/messages.c:656 msgid "av" msgstr "av" #: src/gedlib/messages.c:657 msgid "ell" msgstr "ell" #: src/gedlib/messages.c:658 msgid "elul" msgstr "elul" #: src/gedlib/messages.c:660 msgid "vend" msgstr "vend" #: src/gedlib/messages.c:661 msgid "vendemiaire" msgstr "vendemiaire" #: src/gedlib/messages.c:662 msgid "brum" msgstr "brum" #: src/gedlib/messages.c:663 msgid "brumaire" msgstr "brumaire" #: src/gedlib/messages.c:664 msgid "frim" msgstr "frim" #: src/gedlib/messages.c:665 msgid "frimaire" msgstr "frimaire" #: src/gedlib/messages.c:666 msgid "nivo" msgstr "nivo" #: src/gedlib/messages.c:667 msgid "nivose" msgstr "nivose" #: src/gedlib/messages.c:668 msgid "pluv" msgstr "pluv" #: src/gedlib/messages.c:669 msgid "pluviose" msgstr "pluviose" #: src/gedlib/messages.c:670 msgid "vent" msgstr "vent" #: src/gedlib/messages.c:671 msgid "ventose" msgstr "ventose" #: src/gedlib/messages.c:672 msgid "germ" msgstr "germ" #: src/gedlib/messages.c:673 msgid "germinal" msgstr "germinal" #: src/gedlib/messages.c:674 msgid "flor" msgstr "flor" #: src/gedlib/messages.c:675 msgid "floreal" msgstr "floreal" #: src/gedlib/messages.c:676 msgid "prai" msgstr "prai" #: src/gedlib/messages.c:677 msgid "prairial" msgstr "prairial" #: src/gedlib/messages.c:678 msgid "mess" msgstr "mess" #: src/gedlib/messages.c:679 msgid "messidor" msgstr "messidor" #: src/gedlib/messages.c:680 msgid "ther" msgstr "ther" #: src/gedlib/messages.c:681 msgid "thermidor" msgstr "thermidor" #: src/gedlib/messages.c:682 msgid "fruc" msgstr "fruc" #: src/gedlib/messages.c:683 msgid "fructidor" msgstr "fructidor" #: src/gedlib/messages.c:684 msgid "comp" msgstr "comp" #: src/gedlib/messages.c:685 msgid "jour_complementairs" msgstr "jour_complementairs" #: src/gedlib/node.c:610 msgid "NO NAME" msgstr "INGET NAMN" #: src/gedlib/node.c:1167 #, c-format msgid "Node memory leaks:" msgstr "Nodminnesläckor:" #: src/gedlib/node.c:1170 src/gedlib/record.c:361 src/interp/pvalalloc.c:301 #, c-format msgid "%d item leaked" msgid_plural "%d items leaked" msgstr[0] "%d objekt läckte" msgstr[1] "%d objekt läckte" #: src/gedlib/record.c:358 #, fuzzy, c-format msgid "Record memory leaks:" msgstr "Nodminnesläckor:" #: src/gedlib/remove.c:250 msgid "Families may not yet be removed in this fashion." msgstr "Familjer kan ännu inte tas bort på detta sätt." #. TRANSLATORS: Character set conversion from external editor to database internal #: src/gedlib/translat.c:100 msgid "Editor to Internal" msgstr "Editor till Intern" #. TRANSLATORS: Character set conversion from database internal to external editor #: src/gedlib/translat.c:102 msgid "Internal to Editor" msgstr "Intern till Editor" #: src/gedlib/translat.c:103 msgid "GEDCOM to Internal" msgstr "GEDCOM till Intern" #: src/gedlib/translat.c:104 msgid "Internal to GEDCOM" msgstr "Intern till GEDCOM" #: src/gedlib/translat.c:105 msgid "Display to Internal" msgstr "Skärm till Intern" #: src/gedlib/translat.c:106 msgid "Internal to Display" msgstr "Intern till Skärm" #: src/gedlib/translat.c:107 msgid "Report to Internal" msgstr "Rapport till Intern" #: src/gedlib/translat.c:108 msgid "Internal to Report" msgstr "Intern till Rapport" #. TRANSLATORS: key for "Editor to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:119 msgid "menu|trantable|e" msgstr "e" #. TRANSLATORS: key for "Internal to Editor" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:122 msgid "menu|trantable|m" msgstr "m" #. TRANSLATORS: key for "GEDCOM to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:125 msgid "menu|trantable|i" msgstr "i" #. TRANSLATORS: key for "Internal to GEDCOM" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:128 msgid "menu|trantable|x" msgstr "x" #. TRANSLATORS: key for "Display to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:131 msgid "menu|trantable|g" msgstr "g" #. TRANSLATORS: key for "Internal to Display" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:134 msgid "menu|trantable|d" msgstr "d" #. TRANSLATORS: key for "Report to Internal" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:137 msgid "menu|trantable|p" msgstr "p" #. TRANSLATORS: key for "Internal to Report" on translation table menu #. Omit everything up to and including final | #: src/gedlib/translat.c:140 msgid "menu|trantable|r" msgstr "r" #. TRANSLATORS: db internal translation table note for tt menu #: src/gedlib/translat.c:473 #, c-format msgid " (dbint tt: %s)" msgstr "(dbint tt: %s)" #: src/gedlib/valid.c:75 msgid "This person record does not have a name line." msgstr "Denna personpost har ingen namnrad." #: src/gedlib/xlat.c:347 #, fuzzy, c-format msgid "ttpath get_conversion_dyntt:from <%s> to <%s>: %s" msgstr "Kan inte konvertera teckenkodning (från <%s> till <%s>)" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 msgid "succeeded" msgstr "" #: src/gedlib/xlat.c:349 src/gedlib/xlat.c:371 #, fuzzy msgid "failed" msgstr "fem" #: src/gedlib/xlat.c:369 #, c-format msgid "ttpath get_subcoding_dyntt from <%s> to subcode <%s>: %s" msgstr "" #: src/gedlib/xlat.c:435 msgid "No TTPATH config variable" msgstr "" #: src/gedlib/xlat.c:464 #, c-format msgid "ttpath checking dir <%s>" msgstr "" #: src/gedlib/xlat.c:478 #, fuzzy, c-format msgid "ttpath file <%s> typed as %d" msgstr "I filen <%s> vid rad %d" #: src/gedlib/xlat.c:690 #, fuzzy msgid "(no conversion)" msgstr "Ingen konvertering." #. TRANSLATORS: steps in a chain of codeset conversions, eg, Editor-to-Internal #: src/gedlib/xlat.c:713 #, fuzzy, c-format msgid "%d step" msgid_plural "%d steps" msgstr[0] "%d lagad" msgstr[1] "%d lagade" #: src/gedlib/xreffile.c:400 #, c-format msgid "Corrupt DELETESET %c" msgstr "" #: src/gedlib/xreffile.c:425 #, c-format msgid "Tried to add already-deleted record (%ld) to xref (%c)!" msgstr "" #: src/interp/alloc.c:798 #, c-format msgid "Error: file \"%s\": line %d: " msgstr "Fel: fil \"%s\": rad %d: " #: src/interp/alloc.c:903 #, c-format msgid "%s: the arg must be an integer." msgstr "%s: argumentet måste vara ett heltal." #: src/interp/alloc.c:904 #, c-format msgid "%s: the arg #%s must be an integer." msgstr "%s: argument nr. %s måste vara ett heltal." #: src/interp/alloc.c:905 #, c-format msgid "%s: the arg #%s must be a float." msgstr "%s: argument nr. %s måste vara en float." #: src/interp/alloc.c:906 #, c-format msgid "%s: the arg must be a string." msgstr "%s: argumentet måste vara en sträng." #: src/interp/alloc.c:907 #, c-format msgid "%s: the arg #%s must be a string." msgstr "%s: argumentet nr. %s måste vara en sträng." #: src/interp/alloc.c:908 #, c-format msgid "%s: null arg not permissible." msgstr "%s: nullargument inte tillåtet." #: src/interp/alloc.c:909 #, c-format msgid "%s: the arg must be a filename." msgstr "%s: argumentet måste vara ett filnamn." #: src/interp/alloc.c:910 #, c-format msgid "%s: the arg must be a node or string." msgstr "%s: argumentet måste vara en nod eller sträng." #: src/interp/alloc.c:911 #, c-format msgid "%s: the arg must be a person." msgstr "%s: argumentet måste vara en person." #: src/interp/alloc.c:912 #, c-format msgid "%s: the arg #%s must be a person." msgstr "%s: argument nr. %s måste vara en person." #: src/interp/alloc.c:913 #, c-format msgid "%s: the arg must be a family." msgstr "%s: argumentet måste vara en familj." #: src/interp/alloc.c:914 #, c-format msgid "%s: the arg #%s must be a family." msgstr "%s: argument nr. %s måste vara en familj." #: src/interp/alloc.c:915 #, c-format msgid "%s: the arg #%s must be a record." msgstr "%s: argument nr. %s måste vara en post." #: src/interp/alloc.c:916 #, c-format msgid "%s: the arg must be a node." msgstr "%s: argumentet måste vara en nod." #: src/interp/alloc.c:917 #, c-format msgid "%s: the arg #%s must be a node." msgstr "%s: argument nr. %s måste vara en nod." #: src/interp/alloc.c:918 #, c-format msgid "%s: the arg must be a variable." msgstr "%s: argumentet måste vara en variabel." #: src/interp/alloc.c:919 #, c-format msgid "%s: the arg #%s must be a variable." msgstr "%s: argument nr. %s måste vara en variabel." #: src/interp/alloc.c:920 #, c-format msgid "%s: the arg #%s must be a boolean." msgstr "%s: argument nr. %s måste vara booleskt." #: src/interp/alloc.c:921 #, c-format msgid "%s: the arg must be a list." msgstr "%s: argumentet måste vara en lista." #: src/interp/alloc.c:922 #, c-format msgid "%s: the arg #%s must be a list." msgstr "%s: argument nr. %s måste vara en lista." #: src/interp/alloc.c:923 #, c-format msgid "%s: the arg #%s must be a table." msgstr "%s: argument nr. %s måste vara en tabell." #: src/interp/alloc.c:924 #, c-format msgid "%s: the arg must be a set." msgstr "%s: argumentet måste vara en uppsättning." #: src/interp/alloc.c:925 #, c-format msgid "%s: the arg #%s must be a set." msgstr "%s: argument nr. %s måste vara en uppsättning." #: src/interp/alloc.c:926 #, c-format msgid "%s: Bad arguments" msgstr "%s: Felaktiga argument" #: src/interp/alloc.c:927 #, c-format msgid "%s: the arg had a major error." msgstr "%s: argumentet hade ett större fel." #: src/interp/alloc.c:928 #, c-format msgid "%s: the arg #%s had a major error." msgstr "%s: argument nr. %s hade ett större fel." #: src/interp/alloc.c:929 #, c-format msgid "%s: the arg #%s would cause an arithmetic exception." msgstr "%s: argument nr. %s skulle orsaka ett aritmetiskt undantag." #: src/interp/builtin.c:111 msgid "Enter integer for program" msgstr "Skriv in heltal för program" #: src/interp/builtin.c:181 msgid "Identify person for program:" msgstr "Skriv in sträng för program" #: src/interp/builtin.c:206 msgid "Enter a spouse from family." msgstr "Lägg till en maka/make från familj." #: src/interp/builtin.c:207 msgid "Enter a sibling from family." msgstr "Lägg till ett syskon från familj." #: src/interp/builtin.c:240 msgid "Identify list of persons for program:" msgstr "Identifiera lista över personer för programmet:" #: src/interp/builtin.c:329 msgid "name: person does not have a name" msgstr "name: personen har inget namn." #: src/interp/builtin.c:385 msgid "fullname: person does not have a name" msgstr "fullname: personen har inget namn" #: src/interp/builtin.c:412 msgid "surname: person does not have a name" msgstr "surname: personen har inget namn" #: src/interp/builtin.c:437 msgid "soundex: person does not have a name" msgstr "soundex: personen har inget namn" #: src/interp/builtin.c:500 #, c-format msgid "Bad escape code at offset %d in bytecode string <%s>" msgstr "Ogiltig kontrollsekvenskod vid position %d i bytekodssträng <%s>" #: src/interp/builtin.c:643 msgid "(givens) person does not have a name" msgstr "(givens) personen har inget namn" #: src/interp/builtin.c:670 #, c-format msgid "set(%s, ) is invalid" msgstr "set(%s, ) är ogiltigt" #: src/interp/builtin.c:1191 msgid "first" msgstr "första" #: src/interp/builtin.c:1191 msgid "second" msgstr "andra" #: src/interp/builtin.c:1191 msgid "third" msgstr "tredje" #: src/interp/builtin.c:1191 msgid "fourth" msgstr "fjärde" #: src/interp/builtin.c:1191 msgid "fifth" msgstr "femte" #: src/interp/builtin.c:1192 msgid "sixth" msgstr "sjätte" #: src/interp/builtin.c:1192 msgid "seventh" msgstr "sjunde" #: src/interp/builtin.c:1192 msgid "eighth" msgstr "åttonde" #: src/interp/builtin.c:1192 msgid "ninth" msgstr "nionde" #: src/interp/builtin.c:1192 msgid "tenth" msgstr "tionde" #: src/interp/builtin.c:1193 msgid "eleventh" msgstr "elfte" #: src/interp/builtin.c:1193 msgid "twelfth" msgstr "tolfte" #: src/interp/builtin.c:1210 #, c-format msgid "%ldth" msgstr "%ld:e" #: src/interp/builtin.c:1220 msgid "zero" msgstr "noll" #: src/interp/builtin.c:1220 msgid "one" msgstr "en" #: src/interp/builtin.c:1220 msgid "two" msgstr "två" #: src/interp/builtin.c:1220 msgid "three" msgstr "tre" #: src/interp/builtin.c:1220 msgid "four" msgstr "fyra" #: src/interp/builtin.c:1220 msgid "five" msgstr "fem" #: src/interp/builtin.c:1221 msgid "six" msgstr "sex" #: src/interp/builtin.c:1221 msgid "seven" msgstr "sju" #: src/interp/builtin.c:1221 msgid "eight" msgstr "åtta" #: src/interp/builtin.c:1221 msgid "nine" msgstr "nio" #: src/interp/builtin.c:1221 msgid "ten" msgstr "tio" #: src/interp/builtin.c:1222 msgid "eleven" msgstr "elva" #: src/interp/builtin.c:1222 msgid "twelve" msgstr "tolv" #: src/interp/builtin.c:2173 msgid "the arg to empty is not a list, table or set" msgstr "argumentet till empty är inte en lista, tabell eller uppsättning" #: src/interp/builtin.c:2283 msgid "the arg to length is not a list, table or set" msgstr "argumentet till length är inte lista, tabell eller uppsättning" #: src/interp/builtin.c:2470 msgid "He" msgstr "Han" #: src/interp/builtin.c:2470 msgid "he" msgstr "han" #: src/interp/builtin.c:2470 msgid "His" msgstr "Hans" #: src/interp/builtin.c:2470 msgid "his" msgstr "hans" #: src/interp/builtin.c:2470 msgid "him" msgstr "honom" #: src/interp/builtin.c:2472 msgid "She" msgstr "Hon" #: src/interp/builtin.c:2472 msgid "she" msgstr "hon" #: src/interp/builtin.c:2472 msgid "Her" msgstr "Hennes" #: src/interp/builtin.c:2472 msgid "her" msgstr "hennes" #: src/interp/builtin.c:2472 msgid "her_" msgstr "henne" #: src/interp/builtin.c:2850 msgid "(trimname) person does not have a name" msgstr "(trimname) personen har inget namn" #: src/interp/builtin.c:2940 msgid "Sunday" msgstr "Söndag" #: src/interp/builtin.c:2940 msgid "Monday" msgstr "Måndag" #: src/interp/builtin.c:2940 msgid "Tuesday" msgstr "Tisdag" #: src/interp/builtin.c:2941 msgid "Wednesday" msgstr "Onsdag" #: src/interp/builtin.c:2941 msgid "Thursday" msgstr "Torsdag" #: src/interp/builtin.c:2941 msgid "Friday" msgstr "Fredag" #: src/interp/builtin.c:2941 msgid "Saturday" msgstr "Lördag" #: src/interp/eval.c:244 #, fuzzy, c-format msgid "Undefined func: %s" msgstr "Odefinierad proc: %s" #: src/interp/eval.c:246 #, fuzzy, c-format msgid "Ambiguous call to func: %s" msgstr "Tvetydigt anrop till proc: %s" #: src/interp/interp.c:247 #, c-format msgid "Report not found: %s " msgstr "Rapporten kunde inte hittas: %s" #: src/interp/interp.c:258 #, c-format msgid "Error: file <%s> not found" msgstr "Fel: filen <%s> hittades ej" #: src/interp/interp.c:316 msgid "Program contains errors.\n" msgstr "Program innehåller fel.\n" #: src/interp/interp.c:323 msgid "Program needs a starting procedure.\n" msgstr "Program behöver en startprocedur.\n" #: src/interp/interp.c:340 #, c-format msgid "Proc %s must be called with %d (not %d) parameters." msgstr "Proc %s måste anropas med %d (inte %d) parametrar." #: src/interp/interp.c:355 msgid "Program is running..." msgstr "Program körs..." #: src/interp/interp.c:410 msgid "Program was run successfully.\n" msgstr "Program kördes utan problem.\n" #: src/interp/interp.c:414 msgid "Program was cancelled.\n" msgstr "Program avbröts.\n" #: src/interp/interp.c:416 msgid "Program was not run because of errors.\n" msgstr "Program kördes inte p.g.a. fel.\n" #: src/interp/interp.c:506 #, c-format msgid "Error: file <%s> not found: %s\n" msgstr "Fel: filen <%s> hittades ej: %s\n" #: src/interp/interp.c:538 #, c-format msgid "" "\n" "Report duration %s (ui duration %s)\n" msgstr "" "\n" "Rapportens varaktighet %s (användargränsnittets varaktighet %s)\n" #: src/interp/interp.c:610 #, c-format msgid "identifier: %s should be a string\n" msgstr "identifierare: %s bör vara en sträng\n" #: src/interp/interp.c:1778 #, c-format msgid "Undefined proc: %s" msgstr "Odefinierad proc: %s" #: src/interp/interp.c:1780 #, c-format msgid "Ambiguous call to proc: %s" msgstr "Tvetydigt anrop till proc: %s" #: src/interp/interp.c:2017 #, c-format msgid "Duplicate proc %s (lines %d and %d) in report: %s" msgstr "Dubblerad proc %s (raderna %d och %d) i rapport: %s" #: src/interp/interp.c:2047 #, c-format msgid "Duplicate func %s (lines %d and %d) in report: %s" msgstr "Dubblerad func %s (raderna %d och %d) i rapport: %s" #: src/interp/interp.c:2110 msgid "This report requires a newer program to run\n" msgstr "Denna rapport kräver ett nyare program för att köras\n" #: src/interp/interp.c:2166 #, c-format msgid "Program forgot to unlock %d record" msgid_plural "Program forgot to unlock %d records" msgstr[0] "Program glömde att låsa upp %d post" msgstr[1] "Program glömde att låsa upp %d poster" #: src/interp/intrpseq.c:303 msgid "missing or incorrect value for sort" msgstr "" #: src/interp/lex.c:219 #, c-format msgid "" "String constant overflowing internal buffer tokbuf len=%d, file: %s, start " "line: %ld" msgstr "" #: src/interp/more.c:648 msgid "Please choose from the following list." msgstr "Välj ur följande lista:" #: src/interp/more.c:685 msgid "Illegal type found in list in menuchoose" msgstr "Fann ogiltig typ i lista i menuchoose" #: src/interp/more.c:976 msgid "error evaluating arg to lock" msgstr "fel vid evaluering av arg till lock" #: src/interp/more.c:982 msgid "null arg in lock" msgstr "nollargument i lock" #: src/interp/more.c:993 msgid "node passed to lock must be inside a record" msgstr "nod som skickas till lock måste vara inuti en post" #: src/interp/more.c:999 msgid "the arg to lock must be a record or node" msgstr "argumentet till lock måste vara en post eller nod." #: src/interp/more.c:1007 msgid "Error: there are 999,999 locks on arg to lock" msgstr "Fel: det finns 999 999 lås på arg till lock" #: src/interp/more.c:1027 msgid "error evaluating arg to unlock" msgstr "fel vid evaluering av arg till unlock" #: src/interp/more.c:1033 msgid "null arg in unlock" msgstr "nollargument i unlock" #: src/interp/more.c:1044 msgid "node passed to unlock must be inside a record" msgstr "nod som skickas till unlock måste vara inuti en post." #: src/interp/more.c:1050 msgid "the arg to unlock must be a record or node" msgstr "argumentet till unlock måste vara en post eller nod." #: src/interp/pvalalloc.c:295 #, c-format msgid "PVALUE memory leak report:" msgstr "" #: src/interp/pvalmath.c:70 #, c-format msgid "Nonnumeric type to operation %s: %s" msgstr "" #: src/interp/pvalmath.c:85 #, fuzzy, c-format msgid "Illegal value to operation %s: %s" msgstr "otillåtet anrop till pos." #: src/interp/pvalmath.c:411 #, fuzzy, c-format msgid "%s: not compatible numeric types: %s and %s" msgstr "%s: Ojämförbara typer: %s och %s" #: src/interp/pvalue.c:810 #, c-format msgid "%s: Incomparable types: %s and %s" msgstr "%s: Ojämförbara typer: %s och %s" #: src/interp/pvalue.c:907 msgid "NOT PVALUE: NULL!" msgstr "INTE PVALUE: NULL!" #: src/interp/pvalue.c:911 #, c-format msgid "NOT PVALUE: invalid type=%d)!" msgstr "INTE PVALUE: ogiltig typ=%d!" #: src/interp/pvalue.c:949 #, c-format msgid "%d item" msgid_plural "%d items" msgstr[0] "%d lagad" msgstr[1] "%d lagade" #: src/interp/pvalue.c:956 #, c-format msgid "%d entry" msgid_plural "%d entries" msgstr[0] "%d notering" msgstr[1] "%d noteringar" #: src/interp/pvalue.c:963 #, c-format msgid "%d record" msgid_plural "%d records" msgstr[0] "%d post" msgstr[1] "%d poster" #: src/interp/pvalue.c:970 #, c-format msgid "%d element" msgid_plural "%d elements" msgstr[0] "%d element" msgstr[1] "%d element" #: src/interp/progerr.c:125 msgid "Enter d for debugger, q to quit" msgstr "Skriv in d för felsökare, q för att avsluta" #: src/interp/progerr.c:140 #, c-format msgid "Display local (%d var)" msgid_plural "Display locals (%d vars)" msgstr[0] "Visa lokal (%d var)" msgstr[1] "Visa lokala (%d var)" #: src/interp/progerr.c:146 #, c-format msgid "Display global (%d var)" msgid_plural "Display globals (%d vars)" msgstr[0] "Visa global (%d var)" msgstr[1] "Visa globala (%d var)" #: src/interp/progerr.c:151 #, c-format msgid "Call stack has %d higher level" msgid_plural "Call stack has %d higher levels" msgstr[0] "Anropsstack har %d högre nivå" msgstr[1] "Anropsstack har %d högre nivåer" #: src/interp/progerr.c:154 msgid " Go up one level" msgstr " Gå upp en nivå" #: src/interp/progerr.c:160 #, c-format msgid "Call stack has %d lower level" msgid_plural "Call stack has %d lower levels" msgstr[0] "Anropsstack har %d lägre nivå" msgstr[1] "Anropsstack har %d lägre nivåer" #: src/interp/progerr.c:164 msgid " Go down one level" msgstr " Gå ned en nivå" #: src/interp/progerr.c:169 msgid "Quit debugger" msgstr "Avsluta felsökaren" #: src/interp/progerr.c:171 msgid "Report debugger" msgstr "Rapportfelsökare" #: src/interp/progerr.c:175 msgid "Local variables" msgstr "Lokala variabler" #: src/interp/progerr.c:178 msgid "Global variables" msgstr "Globala variabler" #: src/interp/progerr.c:338 msgid "Report cancelled" msgstr "Rapporten avbröts" #: src/interp/progerr.c:346 msgid "Report file: " msgstr "Rapportfil: " #: src/interp/progerr.c:355 #, c-format msgid "Parsing Error at line %d: " msgstr "Tolkningsfel vid rad %d: " #: src/interp/progerr.c:357 #, c-format msgid "Runtime Error at line %d: " msgstr "Körningsfel vid rad %d: " #: src/interp/progerr.c:360 msgid "Aborting: " msgstr "Avbryter: " #: src/interp/rassa.c:242 #, c-format msgid "Could not open file %s" msgstr "Kunde inte öppna filen %s" #: src/interp/rassa.c:271 msgid "Report stopping due to error opening output file" msgstr "Rapport stoppar på grund av fel vid öppning av utmatningsfil" #: src/interp/rassa.c:273 msgid "Report stopping due to lack of output file" msgstr "Rapport stoppar på grund av saknad utmatningsfil" #: src/interp/rassa.c:330 msgid "illegal call to pos." msgstr "otillåtet anrop till pos." #: src/interp/rptsort.c:104 msgid "First argument to (r)sort must be list or array" msgstr "Första argumentet till (r)sort måste vara lista eller vektor" #: src/interp/rptsort.c:117 src/interp/rptsort.c:128 msgid "Arguments to (r)sort must be of same size" msgstr "Argument till (r)sort måste vara av samma storlek" #: src/interp/rptsort.c:137 msgid "Second argument to (r)sort must be list or array" msgstr "Andra argumentet till (r)sort måste vara lista eller vektor" #: src/liflines/add.c:68 #, c-format msgid "There was %d unresolved reference." msgid_plural "There were %d unresolved references." msgstr[0] "Det fanns %d olöst referens." msgstr[1] "Det fanns %d olösta referenser." #: src/liflines/brwsmenu.c:25 msgid "? Other menu choices" msgstr "? Andra menyval" #: src/liflines/brwsmenu.c:69 msgid "e Edit the person" msgstr "e Redigera personen" #: src/liflines/brwsmenu.c:70 msgid "e Edit the family" msgstr "e Redigera familjen" #: src/liflines/brwsmenu.c:71 msgid "e Edit record" msgstr "e Redigera post" #: src/liflines/brwsmenu.c:72 msgid "e Edit top person" msgstr "e Redigera övre pers." #: src/liflines/brwsmenu.c:73 msgid "e Edit top family" msgstr "e Redigera övre fam." #: src/liflines/brwsmenu.c:74 msgid "f Browse to father" msgstr "f Bläddra till fader" #: src/liflines/brwsmenu.c:75 msgid "f Browse top father" msgstr "f Bläddra t. övre fader" #: src/liflines/brwsmenu.c:76 msgid "m Browse to mother" msgstr "m Bläddra till moder" #: src/liflines/brwsmenu.c:77 msgid "m Browse top mother" msgstr "m Bläddra t. övre moder" #: src/liflines/brwsmenu.c:78 msgid "s Browse to spouse/s" msgstr "s Bläddra till make/maka/r" #: src/liflines/brwsmenu.c:79 msgid "s Browse top spouse/s" msgstr "s Bl. t. övre make/maka/r" #: src/liflines/brwsmenu.c:80 msgid "c Browse to children" msgstr "c Bläddra till barn" #: src/liflines/brwsmenu.c:81 msgid "c Browse top children" msgstr "c Bl. t. övre barn" #: src/liflines/brwsmenu.c:82 msgid "o Browse to older sib" msgstr "o Bl. t. äldre syskon" #: src/liflines/brwsmenu.c:83 msgid "y Browse to younger sib" msgstr "y Bl. t. yngre syskon" #: src/liflines/brwsmenu.c:84 msgid "g Browse to family" msgstr "g Bläddra t. familj" #: src/liflines/brwsmenu.c:85 msgid "u Browse to parents" msgstr "u Bläddra t. föräldrar" #: src/liflines/brwsmenu.c:86 msgid "b Browse to persons" msgstr "b Bläddra t. personer" #: src/liflines/brwsmenu.c:87 msgid "t Browse to top" msgstr "t Bläddra till övre" #: src/liflines/brwsmenu.c:88 msgid "b Browse to bottom" msgstr "b Bläddra t. nedre" #: src/liflines/brwsmenu.c:89 msgid "h Add as spouse" msgstr "h Lägg t. som maka/make" #: src/liflines/brwsmenu.c:90 msgid "i Add as child" msgstr "i Lägg till som barn" #: src/liflines/brwsmenu.c:91 msgid "s Add spouse to family" msgstr "s Lägg t. maka/make i fam." #: src/liflines/brwsmenu.c:92 msgid "a Add child to family" msgstr "a Lägg t. barn i fam." #: src/liflines/brwsmenu.c:93 msgid "a Add family" msgstr "a Lägg till familj" #: src/liflines/brwsmenu.c:94 msgid "x Swap two families" msgstr "x Växla två familjer" #: src/liflines/brwsmenu.c:95 msgid "x Swap two children" msgstr "x Växla två barn" #: src/liflines/brwsmenu.c:97 #, no-c-format msgid "%c Reorder child" msgstr "%c Ordna om barn" #: src/liflines/brwsmenu.c:98 msgid "x Switch top/bottom" msgstr "x Växla övre/nedre" #: src/liflines/brwsmenu.c:99 msgid "n Create new person" msgstr "n Skapa ny person" #: src/liflines/brwsmenu.c:100 msgid "a Create new family" msgstr "a Skapa ny familj" #: src/liflines/brwsmenu.c:101 msgid "tt Enter tandem mode" msgstr "tt Växla t. tandemläge" #: src/liflines/brwsmenu.c:102 msgid "tt Enter family tandem" msgstr "tt Växla t. fam.tandem" #: src/liflines/brwsmenu.c:103 msgid "zi Browse to indi" msgstr "zi Bläddra t. pers." #: src/liflines/brwsmenu.c:104 msgid "zz Browse to any" msgstr "zz Bläddra t. alla" #: src/liflines/brwsmenu.c:105 msgid "r Remove as spouse" msgstr "r Ta bort som maka/make" #: src/liflines/brwsmenu.c:106 msgid "d Remove as child" msgstr "d Ta bort som barn" #: src/liflines/brwsmenu.c:107 msgid "r Remove spouse from" msgstr "r Ta bort maka/make från" #: src/liflines/brwsmenu.c:108 msgid "d Remove child from" msgstr "d Ta bort barn från" #: src/liflines/brwsmenu.c:109 msgid "( Scroll up" msgstr "( Rulla uppåt" #: src/liflines/brwsmenu.c:110 msgid ") Scroll down" msgstr ") Rulla nedåt" #: src/liflines/brwsmenu.c:111 msgid "] Increase tree depth" msgstr "] Öka träddjup" #: src/liflines/brwsmenu.c:112 msgid "[ Decrease tree depth" msgstr "[  Minska träddjup" #: src/liflines/brwsmenu.c:113 msgid "(t Scroll top up" msgstr "(t Rulla övre upp" #: src/liflines/brwsmenu.c:114 msgid ")t Scroll top down" msgstr ")t Rulla övre ned" #: src/liflines/brwsmenu.c:115 msgid "(b Scroll bottom up" msgstr "(b Rulla nedre upp" #: src/liflines/brwsmenu.c:116 msgid ")b Scroll bottom down" msgstr ")b Rulla nedre ned" #: src/liflines/brwsmenu.c:117 msgid "(( Scroll both up" msgstr "(( Rulla båda upp" #: src/liflines/brwsmenu.c:118 msgid ")) Scroll both down" msgstr ")) Rulla båda ned" #: src/liflines/brwsmenu.c:119 msgid "# Toggle childnos" msgstr "# Slå på/av barnnr" #: src/liflines/brwsmenu.c:120 msgid "!g GEDCOM mode" msgstr "!g GEDCOM-läge" #: src/liflines/brwsmenu.c:121 msgid "!x GEDCOMX mode" msgstr "!x GEDCOMX-läge" #: src/liflines/brwsmenu.c:122 msgid "!t GEDCOMT mode" msgstr "!t GEDCOMT-läge" #: src/liflines/brwsmenu.c:123 msgid "!a Ancestors mode" msgstr "!a Anläge" #: src/liflines/brwsmenu.c:124 msgid "!d Descendants mode" msgstr "!d Ättlingaläge" #: src/liflines/brwsmenu.c:125 msgid "!n Normal mode" msgstr "!n Normalt läge" #: src/liflines/brwsmenu.c:126 msgid "p Pedigree mode" msgstr "p Tavelläge" #: src/liflines/brwsmenu.c:127 msgid "!! Cycle mode" msgstr "!! Cykliskt läge" #: src/liflines/brwsmenu.c:129 msgid "(1-9) Browse to child" msgstr "(1-9) Bläddra t. barn" #: src/liflines/brwsmenu.c:130 msgid "y Turn on sync" msgstr "y Slå på synk" #: src/liflines/brwsmenu.c:131 msgid "A Advanced view" msgstr "A Avancerad vy" #: src/liflines/brwsmenu.c:132 msgid "tc Tandem to children" msgstr "tc Tandem till barn" #: src/liflines/brwsmenu.c:133 msgid "tf Tandem to father/s" msgstr "tf Tandem t. fader/fäder" #: src/liflines/brwsmenu.c:134 msgid "tg Tandem to family/s" msgstr "tg Tandem t. familj/er" #: src/liflines/brwsmenu.c:135 msgid "f Browse to fathers" msgstr "f Bläddra t. fäder" #: src/liflines/brwsmenu.c:136 msgid "m Browse to mothers" msgstr "m Bläddra t. mödrar" #: src/liflines/brwsmenu.c:137 msgid "tm Tandem to mother/s" msgstr "tm Tandem t. moder/mödrar/" #: src/liflines/brwsmenu.c:138 msgid "ts Tandem to spouse/s" msgstr "ts Tandem till make/maka/makar" #: src/liflines/brwsmenu.c:139 msgid "tu Tandem to parents" msgstr "tu Tandem t. föräldrar" #: src/liflines/brwsmenu.c:140 msgid "< Enlarge menu area" msgstr "< Öka menyyta" #: src/liflines/brwsmenu.c:141 msgid "> Shrink menu area" msgstr "> Minska menyyta" #: src/liflines/brwsmenu.c:142 msgid "M> More menu cols" msgstr "M> Fler menykolumner" #: src/liflines/brwsmenu.c:143 msgid "M< Less menu cols" msgstr "M< Färre menykolumner" #: src/liflines/brwsmenu.c:144 msgid "+ Next in db" msgstr "+ Nästa i databasen" #: src/liflines/brwsmenu.c:145 msgid "- Prev in db" msgstr "- Föreg. i databasen" #: src/liflines/brwsmenu.c:146 msgid "d Copy top to bottom" msgstr "d Kopiera öv. t. ned." #: src/liflines/brwsmenu.c:147 msgid "j Merge bottom to top" msgstr "j Sammanl. ned. - öv." #: src/liflines/brwsmenu.c:148 src/liflines/listui.c:842 msgid "j Move down list" msgstr "j Gå nedåt i lista" #: src/liflines/brwsmenu.c:149 src/liflines/listui.c:843 msgid "k Move up list" msgstr "k Gå uppåt i lista" #: src/liflines/brwsmenu.c:150 src/liflines/listui.c:844 msgid "e Edit this person" msgstr "e Redigera denna person" #: src/liflines/brwsmenu.c:151 src/liflines/listui.c:845 msgid "i Browse this person" msgstr "i Bl. till denna person" #: src/liflines/brwsmenu.c:152 src/liflines/listui.c:846 msgid "m Mark this person" msgstr "m Markera denna pers." #: src/liflines/brwsmenu.c:153 msgid "d Delete from list" msgstr "d Ta bort från lista" #: src/liflines/brwsmenu.c:154 src/liflines/listui.c:849 msgid "n Name this list" msgstr "n Ge denna lista namn" #: src/liflines/brwsmenu.c:155 src/liflines/listui.c:850 msgid "b Browse new persons" msgstr "b Bläddra till nya pers." #: src/liflines/brwsmenu.c:156 src/liflines/listui.c:851 msgid "a Add to this list" msgstr "a Lägg t. i denna lista" #: src/liflines/brwsmenu.c:157 src/liflines/listui.c:852 msgid "x Swap mark/current" msgstr "x Växla märke/aktuell" #: src/liflines/brwsmenu.c:158 msgid "$s List sources" msgstr "$s Lista källor" #: src/liflines/brwsmenu.c:159 msgid "$n List notes" msgstr "$n Lista notiser" #: src/liflines/brwsmenu.c:160 msgid "$$ List references" msgstr "$$ Lista referenser" #: src/liflines/brwsmenu.c:161 msgid "^b History/back" msgstr "^b Historik/bakåt" #: src/liflines/brwsmenu.c:162 msgid "^f History/fwd" msgstr "^f Historik/framåt" #: src/liflines/brwsmenu.c:163 msgid "^l History list" msgstr "^l Historiklista" #: src/liflines/brwsmenu.c:164 msgid "^c Clear history" msgstr "^c Töm historik" #: src/liflines/brwsmenu.c:165 msgid "^xb ChngHist/back" msgstr "^xb Ändrhist/bakåt" #: src/liflines/brwsmenu.c:166 msgid "^xf ChngHist/fwd" msgstr "^xf Ändrhist/framåt" #: src/liflines/brwsmenu.c:167 msgid "^xl ChngHist list" msgstr "^xl Ändrhistlista" #: src/liflines/brwsmenu.c:168 msgid "^xc Clear ChngHist" msgstr "^xc Töm Ändrhist" #: src/liflines/brwsmenu.c:170 #, no-c-format msgid "%s Add source" msgstr "%s Lägg till källa" #: src/liflines/brwsmenu.c:172 #, no-c-format msgid "%e Add event" msgstr "%e Lägg till händelse" #: src/liflines/brwsmenu.c:174 #, no-c-format msgid "%o Add other" msgstr "%o Lägg till övrig" #: src/liflines/brwsmenu.c:177 msgid "B Browse new family" msgstr "B Bläddra i ny familj" #: src/liflines/brwsmenu.c:490 msgid "Missing title" msgstr "Titel saknas" #: src/liflines/delete.c:85 #, c-format msgid "%d spouse" msgid_plural "%d spouses" msgstr[0] "%d maka/make" msgstr[1] "%d makar" #: src/liflines/delete.c:88 #, c-format msgid "%d child" msgid_plural "%d children" msgstr[0] "%d barn" msgstr[1] "%d barn" #: src/liflines/error.c:63 src/tools/dbverify.c:1504 msgid "Fatal Error" msgstr "Ödesdigert fel" #: src/liflines/error.c:66 msgid "FATAL ERROR" msgstr "SYSTEMANROPSFEL" #: src/liflines/error.c:70 #, c-format msgid " in file <%s> at line %d\n" msgstr " i filen <%s> vid rad %d\n" #: src/liflines/error.c:72 src/tools/dbverify.c:1515 msgid "ASSERT failure" msgstr "ASSERT-misslyckande" #: src/liflines/import.c:169 msgid "This is not a lineage linked GEDCOM file." msgstr "Detta är inte en anlänkad GEDCOM-fil." #: src/liflines/import.c:170 msgid "Proceed anyway?" msgstr "Fortsätt ändå?" #: src/liflines/import.c:186 msgid "No current internal codeset, so no codeset conversion can be done" msgstr "" "Ingen aktuell intern teckenkodning, så ingen kodkonvertering kan utföras" #: src/liflines/import.c:187 msgid "Proceed without codeset conversion?" msgstr "Fortsätt utan konvertering av teckenkodning?" #: src/liflines/import.c:204 #, c-format msgid "%d warning during import" msgid_plural "%d warnings during import" msgstr[0] "%d varning under import" msgstr[1] "%d varningar under import" #: src/liflines/import.c:220 #, c-format msgid "Cannot convert codeset (from <%s> to <%s>)" msgstr "Kan inte konvertera teckenkodning (från <%s> till <%s>)" #: src/liflines/import.c:223 msgid "Enter codeset to assume (* for none)" msgstr "Skriv in teckenkodning att anta (* för ingen)" #: src/liflines/import.c:246 #, c-format msgid "Using original keys, %d deleted record will be in the database." msgid_plural "Using original keys, %d deleted records will be in the database." msgstr[0] "" "Med ursprungliga nycklar kommer det att finnas %d borttagen post i databasen." msgstr[1] "" "Med ursprungliga nycklar kommer det att finnas %d borttagna poster i " "databasen." #: src/liflines/lbrowse.c:219 msgid "Tandom browse only compatible with persons or families." msgstr "Tandembläddring endast kompatibel med personer eller familjer." #: src/liflines/lines_usage.c:21 #, c-format msgid "%s invokes the Lifelines report execution program without GUI." msgstr "" #: src/liflines/lines_usage.c:23 #, c-format msgid "%s invokes the Lifelines GUI." msgstr "" #: src/liflines/lines_usage.c:26 #, c-format msgid "" "Lifelines is a program to manipulate genealogical information\n" "in lineage-linked GEDCOM format. It has a curses interface and a\n" "built-in interpreter for its own genealogical report language.\n" "\n" "It has its own databases, and records are edited directly in GEDCOM\n" "(with an editor of the user's choice). Records store\n" "information about people, families, sources, events, and\n" "other types of data (such as notes). Lifelines includes a\n" "custom report language and comes with a collection of reports." msgstr "" #: src/liflines/lines_usage.c:36 #, c-format msgid "Usage: %s [OPTIONS] [database]" msgstr "" #: src/liflines/lines_usage.c:38 src/tools/btedit.c:238 #, c-format msgid "Options:" msgstr "Flaggor:" #: src/liflines/lines_usage.c:40 #, c-format msgid "-C[FILE]" msgstr "" #: src/liflines/lines_usage.c:42 #, fuzzy, c-format msgid "Specify configuration file location" msgstr "Fel i konfigurationsfil: för lång rad." #: src/liflines/lines_usage.c:44 #, c-format msgid "Finnish option (if compiled to allow Finnish option)" msgstr "" #: src/liflines/lines_usage.c:46 #, c-format msgid "-I[KEY=VALUE]" msgstr "" #: src/liflines/lines_usage.c:48 #, c-format msgid "Specify a user property (e.g. -ILLEDITOR=gvim)" msgstr "" #: src/liflines/lines_usage.c:50 #, c-format msgid "log dynamic memory operation (for debugging)" msgstr "" #: src/liflines/lines_usage.c:52 #, c-format msgid "-c[TYPE][DIRECT,INDIRECT]" msgstr "" #: src/liflines/lines_usage.c:54 #, c-format msgid "" "supply cache values (eg, -ci400,4000f400,4000 sets direct indi\n" "\t\t& fam caches to 400, and indirect indi & fam caches to 4000)" msgstr "" #: src/liflines/lines_usage.c:57 #, c-format msgid "debug mode (disable signal trapping)" msgstr "" #: src/liflines/lines_usage.c:59 #, c-format msgid "force open (for recovery from errors or power failure)" msgstr "" #: src/liflines/lines_usage.c:61 #, c-format msgid "open database with immutable access (for use on read-only media)" msgstr "" #: src/liflines/lines_usage.c:63 #, c-format msgid "always show keys (even if REFN available)" msgstr "" #: src/liflines/lines_usage.c:65 #, c-format msgid "unlock a database (for correct access on read-write media)" msgstr "" #: src/liflines/lines_usage.c:67 #, c-format msgid "lock a database (for use on read-only media)" msgstr "" #: src/liflines/lines_usage.c:69 #, c-format msgid "do not use traditional family rules" msgstr "" #: src/liflines/lines_usage.c:71 #, c-format msgid "Specify program output filename (eg, -o/tmp/mytests)" msgstr "" #: src/liflines/lines_usage.c:73 #, c-format msgid "" "open database with read-only access (prohibiting other\n" "\t\twrite access)" msgstr "" #: src/liflines/lines_usage.c:76 #, c-format msgid "trace function calls in report programs (for debugging)" msgstr "" #: src/liflines/lines_usage.c:78 #, c-format msgid "-u[HEIGHT,WIDTH]" msgstr "" #: src/liflines/lines_usage.c:80 #, c-format msgid "" "specify window size (eg, -u120,34 specifies 120 columns\n" "\t\tby 34 rows)" msgstr "" #: src/liflines/lines_usage.c:83 #, fuzzy, c-format msgid "display this help and exit" msgstr "\t--help\tvisa denna hjälp och avsluta" #: src/liflines/lines_usage.c:85 #, c-format msgid "open database with writeable access (this is the default)" msgstr "" #: src/liflines/lines_usage.c:89 #, c-format msgid "execute a single lifelines report program directly" msgstr "" #: src/liflines/lines_usage.c:91 #, c-format msgid "" "Use normal ASCII characters for drawing lines, instead of\n" "\t\tspecial VT100 terminal characters" msgstr "" #: src/liflines/lines_usage.c:94 #, fuzzy, c-format msgid "output version information and exit" msgstr "\t--version\tskriv ut versionsinformation och avsluta" #: src/liflines/lines_usage.c:96 src/tools/btedit.c:244 #, c-format msgid "Examples:" msgstr "Exempel:" #: src/liflines/lines_usage.c:99 #, c-format msgid "%s myfamily -x eol" msgstr "" #: src/liflines/lines_usage.c:101 #, c-format msgid "Open the database 'myfamily' with Lifelines" msgstr "" #: src/liflines/lines_usage.c:103 #, c-format msgid "and run the eol.ll report" msgstr "" #: src/liflines/lines_usage.c:105 #, c-format msgid "%s -f myfamily -x eol" msgstr "" #: src/liflines/lines_usage.c:107 #, c-format msgid "Unlock database 'myfamily', after a power failure left the" msgstr "" #: src/liflines/lines_usage.c:109 #, c-format msgid "database locked and run 'eol.ll' report" msgstr "" #: src/liflines/lines_usage.c:112 #, fuzzy, c-format msgid "%s myfamily" msgstr "Tom familj" #: src/liflines/lines_usage.c:114 #, c-format msgid "Open database 'myfamily' with Lifelines" msgstr "" #: src/liflines/lines_usage.c:116 #, fuzzy, c-format msgid "%s -f myfamily" msgstr "Tom familj" #: src/liflines/lines_usage.c:118 #, c-format msgid "" "Unlock database 'myfamily', after a power failure left\n" "\t\tthe database locked" msgstr "" #: src/liflines/lines_usage.c:122 #, c-format msgid "REPORTING BUGS" msgstr "" #: src/liflines/lines_usage.c:124 src/tools/btedit.c:250 #, c-format msgid "Report bugs to lifelines.sourceforge.net" msgstr "Rapportera fel till lifelines.sourceforge.net" #: src/liflines/lines_usage.c:126 #, c-format msgid "COPYRIGHT" msgstr "" #: src/liflines/lines_usage.c:131 #, c-format msgid "SEE ALSO" msgstr "" #: src/liflines/listui.c:155 src/liflines/listui.c:252 msgid "Commands: j Move down k Move up i Select q Quit" msgstr "Kommandon: j Flytta ned k Flytta upp i Välj q Avsluta" #: src/liflines/listui.c:157 msgid "Commands: j Move down k Move up q Quit" msgstr "Kommandon: j Flytta ned k Flytta upp q Avsluta" #: src/liflines/listui.c:249 msgid "Commands: j Move down k Move up d Delete i Select q Quit" msgstr "" "Kommandon: j Flytta ned k Flytta upp d Ta bort i Välj q Avsluta" #: src/liflines/listui.c:431 msgid "--- CURRENT SELECTION ---" msgstr "--- AKTUELL MARKERING ---" #: src/liflines/listui.c:434 src/liflines/listui.c:597 msgid "--- LIST ---" msgstr "--- LISTA ---" #: src/liflines/listui.c:628 msgid "-- CURRENT SELECTION --" msgstr "-- AKTUELL MARKERING --" #: src/liflines/listui.c:840 msgid "Choose an operation:" msgstr "Välj ett kommando:" #: src/liflines/listui.c:847 msgid "r Remove from list" msgstr "d Ta bort från lista" #: src/liflines/listui.c:848 msgid "t Enter tandem mode" msgstr "t Växla t. tandemläge" #: src/liflines/loadsave.c:94 msgid "Person" msgid_plural "Persons" msgstr[0] "Person" msgstr[1] "Personer" #: src/liflines/loadsave.c:98 msgid "Family" msgid_plural "Families" msgstr[0] "Familj" msgstr[1] "Familjer" #: src/liflines/loadsave.c:102 msgid "Source" msgid_plural "Sources" msgstr[0] "Källa" msgstr[1] "Källor" #: src/liflines/loadsave.c:106 msgid "Event" msgid_plural "Events" msgstr[0] "Händelse" msgstr[1] "Händelser" #: src/liflines/loadsave.c:110 msgid "Other" msgid_plural "Others" msgstr[0] "Övrig" msgstr[1] "Övriga" #: src/liflines/loadsave.c:160 msgid "Checking GEDCOM file for errors.\n" msgstr "Kontrollerar GEDCOM-filen för fel.\n" #: src/liflines/loadsave.c:163 msgid "Error" msgid_plural "Errors" msgstr[0] "Fel" msgstr[1] "Fel" #: src/liflines/loadsave.c:169 msgid "Warning" msgid_plural "Warnings" msgstr[0] "Varning" msgstr[1] "Varningar" #: src/liflines/loadsave.c:184 msgid "The database is read-only; loading has been canceled." msgstr "Databasen är skrivskyddad; laddningen har avbrutits." #: src/liflines/loadsave.c:190 msgid "Adding unused keys as deleted keys..." msgstr "Lägger till obrukade nycklar som borttagna nycklar..." #. TRANSLATORS: how long Import ran, and how much of that was UI delay #: src/liflines/loadsave.c:255 #, c-format msgid "Import time %s (ui %s)\n" msgstr "Importtid %s (användargränsnitt %s)\n" #: src/liflines/loadsave.c:282 msgid "The database was not saved." msgstr "Databasen sparades inte." #: src/liflines/main.c:385 msgid "Warning: database codeset unspecified" msgstr "Varning: Teckenkodning för databas ospecificerad" #: src/liflines/main.c:387 msgid "Warning: not all conversions available" msgstr "Varning: alla konverteringar inte tillgängliga" #: src/liflines/menuset.c:155 #, c-format msgid "Menu (%s) choice sequence too long: %s" msgstr "Meny (%s): Valsekvens för lång: %s" #: src/liflines/menuset.c:159 #, c-format msgid "Menu (%s) item lacked choice sequence: %s" msgstr "Meny (%s): objekt saknade valsekvens: %s" #: src/liflines/menuset.c:242 src/liflines/menuset.c:254 #, c-format msgid "In menu: %s" msgstr "I meny: %s" #: src/liflines/menuset.c:244 #, c-format msgid "Duplicate hotkey for item: %s" msgstr "Dubblerad snabbnyckel för post: %s" #: src/liflines/menuset.c:247 #, c-format msgid "Clash with longer hotkey in item: %s" msgstr "Krock med längre snabbnyckel i post: %s" #: src/liflines/menuset.c:255 #, c-format msgid "Clash with shorter hotkey in item: %s" msgstr "Krock med kortare snabbnyckel i post: %s" #: src/liflines/merge.c:772 #, c-format msgid "Bad spouse tag: %s" msgstr "Ogiltig spousetagg: %s" #: src/liflines/merge.c:800 src/liflines/merge.c:919 #, c-format msgid "Mismatched lineage spouse links between %s and %s: %ld and %ld" msgstr "Anlänkning av makar mellan %s och %s stämmer inte: %ld och %ld" #: src/liflines/merge.c:816 src/liflines/merge.c:935 #, c-format msgid "Bad child tag: %s" msgstr "Ogiltig barntagg: %s" #: src/liflines/merge.c:844 src/liflines/merge.c:963 #, c-format msgid "Mismatched lineage child links between %s and %s: %ld and %ld" msgstr "Anlänkning av barn mellan %s och %s stämmer inte: %ld och %ld" #: src/liflines/merge.c:882 src/liflines/merge.c:891 #, c-format msgid "Bad HUSB tag: %s" msgstr "Ogiltig HUSB-tagg: %s" #: src/liflines/miscutls.c:51 msgid "Whose key value do you want?" msgstr "Vems nyckelvärde vill du ha?" #: src/liflines/miscutls.c:67 msgid "Please enter person's internal key value." msgstr "Skriv in internt nyckelvärde för personen." #: src/liflines/miscutls.c:68 msgid "enter key:" msgstr "skriv in nyckel: " #: src/liflines/miscutls.c:78 src/liflines/miscutls.c:82 #: src/liflines/miscutls.c:87 #, c-format msgid "No one in database has key value %s." msgstr "Ingen i databasen har nyckelvärdet %s." #: src/liflines/scan.c:100 msgid "Enter pattern to match against single surname or given name." msgstr "Ange mönster för att matcha ensamt efter- eller förnamn." #: src/liflines/scan.c:112 msgid "Enter pattern to match against full name." msgstr "Ange mönster för att matcha fullständigt namn." #: src/liflines/scan.c:128 src/liflines/scan.c:178 src/liflines/scan.c:201 msgid "pattern: " msgstr "mönster: " #: src/liflines/scan.c:151 src/liflines/scan.c:165 msgid "Enter pattern to match against author." msgstr "Ange mönster för att matcha författare." #: src/liflines/screen.c:317 #, c-format msgid "initscr failed" msgstr "initscr misslyckades" #: src/liflines/screen.c:334 #, c-format msgid "" "The requested window size (%ld,%ld) is too large for your terminal (%d,%d).\n" msgstr "" "Den efterfrågade fönsterstorleken (%ld,%ld) är för stor för din terminal (%d," "%d).\n" #: src/liflines/screen.c:342 #, c-format msgid "" "The requested window size (%ld,%ld) is too small for LifeLines (%d,%d).\n" msgstr "" "Den efterfrågade fönsterstorleken (%ld,%ld) är för liten för LifeLines (%d,%" "d).\n" #: src/liflines/screen.c:706 msgid "Search results" msgstr "Sökresultat" #: src/liflines/screen.c:813 #, c-format msgid "(pg %d/%d)" msgstr "(sid %d/%d)" #: src/liflines/screen.c:1431 msgid "No conversion" msgstr "Ingen konvertering." #: src/liflines/screen.c:1517 msgid "Internal codeset" msgstr "Intern teckenkodning" #: src/liflines/screen.c:1520 msgid "Internal UTF-8: Yes" msgstr "UTF-8 internt: Ja" #: src/liflines/screen.c:1522 msgid "Internal UTF-8: No" msgstr "UTF-8 internt: Nej" #: src/liflines/screen.c:1526 msgid "Locales are enabled." msgstr "Lokaler är aktiverade." #: src/liflines/screen.c:1528 msgid "Locales are disabled." msgstr "Lokaler är avaktiverade." #: src/liflines/screen.c:1531 msgid "NLS (National Language Support) is compiled in." msgstr "NLS (nationellt språkstöd) är inkompilerat." #: src/liflines/screen.c:1537 msgid "NLS (National Language Support) is not compiled in." msgstr "NLS (nationellt språkstöd) är inte inkompilerat." #: src/liflines/screen.c:1550 msgid "iconv (codeset conversion) is compiled in." msgstr "iconv (konvertering av teckenkodning) är inkompilerad." #: src/liflines/screen.c:1552 msgid "iconv (codeset conversion) is not compiled in." msgstr "iconv (konvertering av teckenkodning) inte inkompilerad." #: src/liflines/screen.c:1554 #, c-format msgid "Startup collate locale: %s" msgstr "Sorteringslokal vid uppstart: %s" #: src/liflines/screen.c:1557 #, c-format msgid "Startup messages locale: %s" msgstr "Meddelandelokal vid uppstart: %s" #: src/liflines/screen.c:1560 #, c-format msgid "Current collate locale: %s" msgstr "Aktuell sorteringslokal: %s" #: src/liflines/screen.c:1563 #, c-format msgid "Current messages locale: %s" msgstr "Aktuell meddelandelokal: %s" #: src/liflines/screen.c:1566 #, c-format msgid "Collation routine: %s" msgstr "Sorteringsrutin: %s" #: src/liflines/screen.c:1570 #, c-format msgid "GUI codeset: %s" msgstr "Teckenkodning för grafiskt användargränssnitt: %s" #: src/liflines/screen.c:1573 #, c-format msgid "GUI output codeset: %s" msgstr "Teckenkodning för utdata till grafiskt användargränssnitt: %s" #: src/liflines/screen.c:1575 #, c-format msgid "GUI input codeset: %s" msgstr "Teckenkodning för indata till grafiskt användargränssnitt: %s" #: src/liflines/screen.c:1580 #, c-format msgid "editor codeset: %s" msgstr "teckenkodning för editor: %s" #: src/liflines/screen.c:1583 #, c-format msgid "editor output codeset: %s" msgstr "teckenkodning för utdata från editor: %s" #: src/liflines/screen.c:1585 #, c-format msgid "editor input codeset: %s" msgstr "teckenkodning för indata till editor: %s" #: src/liflines/screen.c:1590 #, c-format msgid "report codeset: %s" msgstr "teckenkodning för rapporter: %s" #: src/liflines/screen.c:1593 #, c-format msgid "report output codeset: %s" msgstr "teckenkodning för utdata från rapporter: %s" #: src/liflines/screen.c:1595 #, c-format msgid "report input codeset: %s" msgstr "teckenkodning för indata till rapporter: %s" #: src/liflines/screen.c:1600 #, c-format msgid "GEDCOM codeset: %s" msgstr "Teckenkodning för GEDCOM: %s" #: src/liflines/screen.c:1603 #, c-format msgid "gedcom output codeset: %s" msgstr "teckenkodning för utdata till gedcom: %s" #: src/liflines/screen.c:1605 #, c-format msgid "gedcom input codeset: %s" msgstr "teckenkodning för indata från gedcom: %s" #: src/liflines/screen.c:1613 msgid "UTF-8 charprops loaded" msgstr "Teckenegenskaper för UTF-8 laddade" #: src/liflines/screen.c:1615 msgid "UTF-8 charprops not loaded" msgstr "Teckenegenskaper för UTF-8 inte laddade" #: src/liflines/screen.c:1619 msgid "Codeset information" msgstr "Information om teckenkodning" #: src/liflines/screen.c:1636 #, c-format msgid "gettext dll: %s" msgstr "dll för gettext: %s" #: src/liflines/screen.c:1640 #, c-format msgid "gettext dll version: %s" msgstr "version för gettext-dll: %s" #: src/liflines/screen.c:1645 msgid "gettext dll had no version" msgstr "gettext-dll hade ingen version" #: src/liflines/screen.c:1650 msgid "no gettext dll found" msgstr "ingen gettext-dll hittades" #: src/liflines/screen.c:1659 #, c-format msgid "iconv dll: %s" msgstr "dll för iconv: %s" #: src/liflines/screen.c:1663 #, c-format msgid "iconv dll version: %s" msgstr "version för iconv-dll: %s" #: src/liflines/screen.c:1668 msgid "iconv dll had no version" msgstr "iconv-dll hade ingen version" #: src/liflines/screen.c:1673 msgid "no iconv dll found" msgstr "ingen iconv-dll hittades" #: src/liflines/screen.c:1931 msgid "Impermissible to change codeset in a populated database" msgstr "Otillåtet att ändra teckenkodning i en befolkad databas" #: src/liflines/screen.c:2032 msgid "LifeLines -- Main Menu" msgstr "LifeLines -- Huvudmeny" #: src/liflines/searchui.c:133 #, c-format msgid "v Review visit history (%d record)" msgid_plural "v Review visit history (%d records)" msgstr[0] "v Granska besökshistorik (%d post)" msgstr[1] "v Granska besökshistorik (%d poster)" #: src/liflines/searchui.c:137 msgid "(visit history is empty)" msgstr "(besökshistoriken är tom)" #: src/liflines/searchui.c:143 #, c-format msgid "c Review change history (%d record)" msgid_plural "c Review change history (%d records)" msgstr[0] "c Granska ändringshistorik (%d post)" msgstr[1] "c Granska ändringshistorik (%d poster)" #: src/liflines/searchui.c:147 msgid "(change history is empty)" msgstr "(ändringshistoriken är tom)" #: src/liflines/searchui.c:151 msgid "f Full database scan" msgstr "f Sökning i hela databasen" #: src/liflines/searchui.c:220 msgid "What scan type?" msgstr "Vilken typ av sökning?" #: src/liflines/searchui.c:223 msgid "f Full name scan" msgstr "f Sök på hela namnet" #: src/liflines/searchui.c:224 msgid "n Name fragment (whitespace-delimited) scan" msgstr "n Sök på namnfragment (avdelade med blanksteg)" #: src/liflines/searchui.c:225 msgid "r Refn scan" msgstr "r Refn-sökning" #: src/liflines/searchui.c:226 #, fuzzy msgid "s Source scan" msgstr "r Refn-sökning" #: src/liflines/searchui.c:290 msgid "Scan on what source field?" msgstr "" #: src/liflines/searchui.c:293 msgid "a Scan by author" msgstr "" #: src/liflines/searchui.c:294 msgid "t Scan by title" msgstr "" #: src/liflines/selectdb.c:95 msgid "Choose database to open" msgstr "Välj databas att öppna" #: src/liflines/selectdb.c:103 msgid "No databases found in database path" msgstr "Inga databaser hittades i sökvägen för databaser" #: src/liflines/show.c:123 msgid "born" msgstr "född" #: src/liflines/show.c:124 src/liflines/show.c:125 msgid "bapt" msgstr "döpt" #: src/liflines/show.c:126 msgid "barm" msgstr "barm" #: src/liflines/show.c:127 msgid "basm" msgstr "basm" #: src/liflines/show.c:128 msgid "bles" msgstr "väls" #: src/liflines/show.c:129 msgid "adop" msgstr "adop" #: src/liflines/show.c:130 msgid "resi" msgstr "bosatt" #: src/liflines/show.c:134 msgid "died" msgstr "död" #: src/liflines/show.c:135 msgid "buri" msgstr "begr" #: src/liflines/show.c:136 msgid "crem" msgstr "krem" #: src/liflines/show.c:1009 #, c-format msgid "Cached: I:%s; F:%s" msgstr "Buffrade: I:%s; F:%s" #: src/liflines/valgdcom.c:92 #, c-format msgid "Record %s is referred to but not defined." msgstr "Referens till posten %s, som inte är definierad." #: src/liflines/valgdcom.c:93 #, c-format msgid "Line %d: Reference to undefined record %s" msgstr "Rad %d: Referens till odefinierad post %s" #: src/liflines/valgdcom.c:94 #, c-format msgid "Line %d: Tag %s found in unexpected record: %s %s." msgstr "Rad %d: Tagg %s hittades i oväntad post: %s %s." #: src/liflines/valgdcom.c:190 #, c-format msgid "Line %d: Family has no members (%s %s)." msgstr "Rad %d: Familj har inga medlemmar (%s %s)." #: src/liflines/valgdcom.c:390 #, c-format msgid "Line %d: The source defined here has no key." msgstr "Rad %d: Källan som definieras här har ingen nyckel." #: src/liflines/valgdcom.c:404 #, c-format msgid "Line %d: Source %s has an incorrect key." msgstr "Rad %d: Källan %s har en felaktig nyckel." #: src/liflines/valgdcom.c:411 #, c-format msgid "Lines %d and %d: Source %s is multiply defined." msgstr "Raderna %d och %d: Källan %s är definierad mer än en gång." #: src/liflines/valgdcom.c:434 #, c-format msgid "Line %d: The event defined here has no key." msgstr "Rad %d: Händelsen som definieras här har ingen nyckel." #: src/liflines/valgdcom.c:447 #, c-format msgid "Line %d: Event %s has an incorrect key." msgstr "Rad %d: Händelsen %s har en felaktig nyckel." #: src/liflines/valgdcom.c:454 #, c-format msgid "Lines %d and %d: Event %s is multiply defined." msgstr "Raderna %d och %d: Händelsen %s är definierad mer än en gång." #: src/liflines/valgdcom.c:477 #, c-format msgid "Line %d: The record defined here has no key." msgstr "Rad %d: Posten som definieras här har ingen nyckel." #: src/liflines/valgdcom.c:490 #, c-format msgid "Line %d: Record %s has an incorrect key." msgstr "Rad %d: Posten %s har en felaktig nyckel." #: src/liflines/valgdcom.c:497 #, c-format msgid "Lines %d and %d: Record %s is multiply defined." msgstr "Raderna %d och %d: Posten %s är definierad mer än en gång." #: src/liflines/valgdcom.c:539 #, c-format msgid "Line %d: This %s line is missing a value field (%s %s)." msgstr "Rad %d: Denna %s-rad saknar ett fält med ett värde (%s %s)." #: src/liflines/valgdcom.c:590 #, c-format msgid "Line %d: Bad NAME syntax (%s %s)." msgstr "Rad %d: Ogiltig NAME-syntax (%s %s)." #: src/liflines/valgdcom.c:820 #, c-format msgid "Line %d: Person %s has multiple father links." msgstr "Rad %d: Personen %s är länkad till mer än en fader." #: src/liflines/valgdcom.c:824 #, c-format msgid "Line %d: Person %s has multiple mother links." msgstr "Rad %d: Personen %s är länkad till mer än en moder." #: src/liflines/valgdcom.c:836 #, c-format msgid "Line %d: Person %s is both male and female." msgstr "Rad %d: Personen %s är både man och kvinna." #: src/liflines/valgdcom.c:840 #, c-format msgid "Line %d: Person %s is male but must be female." msgstr "Rad %d: Personen %s är man, men måste vara kvinna." #: src/liflines/valgdcom.c:844 #, c-format msgid "Line %d: Person %s is female but must be male." msgstr "Rad %d: Personen %s är kvinna, men måste vara man." #: src/liflines/valgdcom.c:848 #, c-format msgid "Line %d: Person %s is implied to be both male and female." msgstr "Rad %d: Personen %s förutsätts vara både man och kvinna." #: src/liflines/valgdcom.c:860 #, c-format msgid "Line %d: Family %s has multiple husband links." msgstr "Rad %d: Familjen %s har länkar till mer än en make." #: src/liflines/valgdcom.c:864 #, c-format msgid "Line %d: Family %s has multiple wife links." msgstr "Rad %d: Familjen %s har länkar till mer än en maka." #: src/liflines/valgdcom.c:920 msgid "error" msgstr "fel" #: src/liflines/valgdcom.c:928 #, c-format msgid "%6d Error" msgid_plural "%6d Errors" msgstr[0] "%6d fel" msgstr[1] "%6d fel" #: src/liflines/valgdcom.c:930 src/liflines/valgdcom.c:958 #, c-format msgid " (see log file <%s>)" msgstr " (se loggfil <%s>)" #: src/liflines/valgdcom.c:932 src/liflines/valgdcom.c:960 msgid " (no log file)" msgstr " (ingen loggfil)" #: src/liflines/valgdcom.c:948 msgid "warning" msgstr "varning" #: src/liflines/valgdcom.c:956 #, c-format msgid "%6d Warning" msgid_plural "%6d Warnings" msgstr[0] "%6d varning" msgstr[1] "%6d varningar" #: src/liflines/valgdcom.c:1067 #, c-format msgid "Processed %d lines without finding end of HEAD" msgstr "Behandlade %d rader utan att hitta slutet av HEAD" #: src/liflines/valgdcom.c:1072 #, c-format msgid "End of file at line %d" msgstr "Filslut vid rad %d" #: src/liflines/valgdcom.c:1076 #, c-format msgid "Error at line %d: %s" msgstr "Fel vid rad %d: %s" #: src/liflines/valgdcom.c:1080 #, c-format msgid "Bad level at line %d" msgstr "Ogiltig nivå vid rad %d" #: src/liflines/valgdcom.c:1086 #, c-format msgid "Duplicate HEAD line at line %d" msgstr "Dubblerad HEAD-rad vid rad %d" #: src/liflines/valgdcom.c:1092 #, c-format msgid "Missing HEAD line at line %d" msgstr "HEAD-rad saknas vid rad %d" #: src/stdlib/errlog.c:61 #, c-format msgid " in file <%s> at line %d\n" msgstr " i filen <%s> vid rad %d\n" #: src/stdlib/errlog.c:63 msgid "Current database" msgstr "Aktuell databas" #: src/tools/btedit.c:108 #, c-format msgid "btedit requires 2 arguments (btree and key)." msgstr "btedit kräver 2 argument (btree och nyckel)." #: src/tools/btedit.c:110 #, c-format msgid "See `btedit --help' for more information." msgstr "Se `btedit --help' för mer information." #: src/tools/btedit.c:117 #, c-format msgid "Failed to open btree: %s." msgstr "Misslyckades med att öppna btree: %s." #: src/tools/btedit.c:124 #, c-format msgid "There is no record with key: %s" msgstr "Det finns ingen post med nyckel: %s" #: src/tools/btedit.c:126 #, c-format msgid "Error accessing record: %s" msgstr "Fel vid åtkomst av post: %s" #: src/tools/btedit.c:135 #, c-format msgid "Editor or system call failed." msgstr "Editor- eller systemanrop misslyckades." #: src/tools/btedit.c:137 #, c-format msgid "Database was not be modified." msgstr "Databasen modifierades inte." #: src/tools/btedit.c:143 #, c-format msgid "Readonly database can not be modified." msgstr "Skrivskyddad databas kan inte modifieras." #: src/tools/btedit.c:150 #, c-format msgid "Error writing file 'btedit.tmp'." msgstr "Fel vid skrivning till fil 'btedit.tmp'." #: src/tools/btedit.c:156 #, c-format msgid "Record %s modified." msgstr "Post %s modifierad." #: src/tools/btedit.c:226 msgid "\"\\My Documents\\LifeLines\\Databases\\MyFamily\"" msgstr "\"\\Mina Dokument\\LifeLines\\Databaser\\MinFamilj\"" #: src/tools/btedit.c:228 src/tools/dbverify.c:232 msgid "/home/users/myname/lifelines/databases/myfamily" msgstr "/home/users/mittnamn/lifelines/databaser/minfamilj" #: src/tools/btedit.c:231 #, c-format msgid "" "lifelines `btedit' edits raw binary btree blocks\n" "in lifelines database files. Do NOT use this unless\n" "you know what you are doing and you have backed up\n" "your database." msgstr "" "lifelines `btedit' redigerar råa binära btreeblock\n" "i lifelines databasfiler. Använd INTE detta utom om\n" "du vet vad du gör och du har säkerhetskopierat din\n" "databas." #: src/tools/btedit.c:236 #, c-format msgid "Usage btedit [database] [rkey]" msgstr "Användning btedit [databas] [rkey]" #: src/tools/btedit.c:240 #, c-format msgid "\t--help\tdisplay this help and exit" msgstr "\t--help\tvisa denna hjälp och avsluta" #: src/tools/btedit.c:242 #, c-format msgid "\t--version\toutput version information and exit" msgstr "\t--version\tskriv ut versionsinformation och avsluta" #: src/tools/btedit.c:246 #, c-format msgid "\tbtedit %s I34" msgstr "\tbtedit %s I34" #: src/tools/btedit.c:248 #, c-format msgid "edit raw btree block for person I34" msgstr "redigera rått btreeblock för person I34" #: src/tools/dbverify.c:175 msgid "Orphan names" msgstr "Föräldralösa namn" #: src/tools/dbverify.c:176 msgid "Ghost names" msgstr "Spöknamn" #: src/tools/dbverify.c:177 src/tools/dbverify.c:178 msgid "Duplicate names" msgstr "Dubblerade namn" #: src/tools/dbverify.c:179 msgid "Non-indi names" msgstr "Icke-individnamn" #: src/tools/dbverify.c:180 msgid "Duplicate individuals" msgstr "Dubblerade individer" #: src/tools/dbverify.c:181 msgid "Duplicate families" msgstr "Dubblerade familjer" #: src/tools/dbverify.c:182 msgid "Duplicate sources" msgstr "Dubblerade källor" #: src/tools/dbverify.c:183 msgid "Duplicate events" msgstr "Dubblerade händelser" #: src/tools/dbverify.c:184 msgid "Duplicate others" msgstr "Dubblerade övriga" #: src/tools/dbverify.c:185 msgid "Missing records (from deleteset)" msgstr "Saknade poster (från deleteset)" #: src/tools/dbverify.c:186 msgid "Deleted records" msgstr "Borttagna poster" #: src/tools/dbverify.c:187 msgid "Bad name" msgstr "Ogiltigt namn" #: src/tools/dbverify.c:188 msgid "Bad family reference" msgstr "Ogiltig familjereferens" #: src/tools/dbverify.c:189 msgid "Missing child" msgstr "Saknat barn" #: src/tools/dbverify.c:190 msgid "Missing spouse" msgstr "Saknad maka/make" #: src/tools/dbverify.c:191 msgid "Bad HUSB reference" msgstr "Ogiltig HUSB-referens" #: src/tools/dbverify.c:192 msgid "Bad WIFE reference" msgstr "Ogiltig WIFE-referens" #: src/tools/dbverify.c:193 msgid "Bad CHIL reference" msgstr "Ogiltig CHIL-referens" #: src/tools/dbverify.c:194 msgid "Improper HUSB" msgstr "Felaktig HUSB" #: src/tools/dbverify.c:195 msgid "Improper WIFE" msgstr "Felaktig WIFE" #: src/tools/dbverify.c:196 msgid "Improper child" msgstr "Felaktigt barn" #: src/tools/dbverify.c:197 msgid "Empty family" msgstr "Tom familj" #: src/tools/dbverify.c:198 msgid "Single person family" msgstr "Familj med ensam person" #: src/tools/dbverify.c:199 msgid "Bad pointer" msgstr "Ogiltig pekare" #: src/tools/dbverify.c:200 msgid "Missing data records" msgstr "Saknade dataposter" #: src/tools/dbverify.c:230 msgid "\\My Documents\\LifeLines\\Databases\\MyFamily" msgstr "\\Mina Dokument\\LifeLines\\Databaser\\MinFamilj" #: src/tools/dbverify.c:236 #, c-format msgid "usage: dbverify -(flags) \n" msgstr "användning: dbverify -(flaggor) \n" #: src/tools/dbverify.c:237 #, c-format msgid "flags:\n" msgstr "flaggor:\n" #: src/tools/dbverify.c:238 #, c-format msgid "\t-a = Perform all checks (does not include fixes)\n" msgstr "\t-a = Genomför alla kontroller (inkluderar ej lagningar)\n" #: src/tools/dbverify.c:239 #, c-format msgid "\t-g = Check for ghosts (names/refns)\n" msgstr "\t-g = Sök efter spöken (namn/refnr)\n" #: src/tools/dbverify.c:240 #, c-format msgid "\t-G = Check for & fix ghosts (names/refns)\n" msgstr "\t-G = Sök efter och laga spöken (namn/refnr)\n" #: src/tools/dbverify.c:241 #, c-format msgid "\t-i = Check individuals\n" msgstr "\t-i = Kontrollera individer\n" #: src/tools/dbverify.c:242 #, c-format msgid "\t-f = Check families\n" msgstr "\t-f = Kontrollera familjer\n" #: src/tools/dbverify.c:243 #, c-format msgid "\t-F = Alter any bad family lineage pointers (to _badptr)\n" msgstr "\t-F = Ändra alla ogiltiga anlänkade familjepekare (till _badptr)\n" #: src/tools/dbverify.c:244 #, c-format msgid "\t-h = Display help text (this text)\n" msgstr "\t-h = Visa hjälptext (denna text)\n" #: src/tools/dbverify.c:245 #, c-format msgid "\t-s = Check sours\n" msgstr "\t-s = Kontrollera källor\n" #: src/tools/dbverify.c:246 #, c-format msgid "\t-e = Check events\n" msgstr "\t-e = Kontrollera händelser\n" #: src/tools/dbverify.c:247 #, c-format msgid "\t-x = Check others\n" msgstr "\t-x = Kontrollera övriga\n" #: src/tools/dbverify.c:248 #, c-format msgid "\t-l = Check database structure\n" msgstr "\t-l = Kontrollera databasstruktur\n" #: src/tools/dbverify.c:249 #, c-format msgid "\t-m = Check for records missing data entries\n" msgstr "\t-m = Kontrollera efter poster som saknar noterade data\n" #: src/tools/dbverify.c:250 #, c-format msgid "\t-M = Fix records missing data entries\n" msgstr "\t-M = Laga poster med saknade noterade data\n" #: src/tools/dbverify.c:251 #, c-format msgid "\t-D = Fix bad delete entries\n" msgstr "\t-D = Laga felaktiga borttagningsnoteringar\n" #: src/tools/dbverify.c:252 #, c-format msgid "\t-n = Noisy (echo every record processed)\n" msgstr "\t-n = Bullrigt (eka alla behandlade poster)\n" #: src/tools/dbverify.c:253 #, c-format msgid "example: dbverify -ifsex \"%s\"\n" msgstr "exempel: dbverify -ifsex \"%s\"\n" #: src/tools/dbverify.c:386 #, c-format msgid "Non-indi name, key=%s, name=%s" msgstr "Icke-individnamn, nyckel=%s, namn=%s" #: src/tools/dbverify.c:403 #, c-format msgid "Orphaned name: %s" msgstr "Föräldralöst namn: %s" #: src/tools/dbverify.c:417 #, c-format msgid "Ghost name: %s -> %s" msgstr "Spöknamn: %s -> %s" #: src/tools/dbverify.c:449 #, c-format msgid "Orphaned refn: %s" msgstr "Föräldralöst refn: %s" #: src/tools/dbverify.c:489 #, c-format msgid "Duplicate name for %s (%s)" msgstr "Dubblerat namn för %s: (%s)" #: src/tools/dbverify.c:524 #, c-format msgid "Duplicate refn for %s (%s)" msgstr "Dubblerad refn för %s: (%s)" #: src/tools/dbverify.c:637 #, c-format msgid "Duplicate individual for %s" msgstr "Dubblerad individ för %s" #: src/tools/dbverify.c:679 #, c-format msgid "Bad name for individual %s: %s" msgstr "Ogiltigt namn för individ %s: %s" #: src/tools/dbverify.c:697 src/tools/dbverify.c:721 #, c-format msgid "Bad family reference (%s) individual %s" msgstr "Ogiltig familjereferens (%s) individ %s" #: src/tools/dbverify.c:703 #, c-format msgid "Missing child (%s) in family (%s)" msgstr "Saknat barn (%s) i familj (%s)" #: src/tools/dbverify.c:707 #, c-format msgid "Fixed missing child (%s) in family (%s)" msgstr "Lagade saknat barn (%s) i familj (%s)" #: src/tools/dbverify.c:727 #, c-format msgid "Missing spouse (%s) in family (%s)" msgstr "Saknad maka/make (%s) i familj (%s)" #: src/tools/dbverify.c:731 #, c-format msgid "Fixed missing spouse (%s) in family (%s)" msgstr "Lagade saknad maka/make (%s) i familj (%s)" #: src/tools/dbverify.c:765 #, c-format msgid "Duplicate family for %s" msgstr "Dubblerad familj för %s" #: src/tools/dbverify.c:816 #, c-format msgid "Bad HUSB reference (%s) in family %s" msgstr "Ogiltig HUSB-referens (%s) i familj %s" #: src/tools/dbverify.c:822 #, c-format msgid "Fixed Bad HUSB reference (%s) in family %s" msgstr "Lagade ogiltig HUSB-referens (%s) i familj %s" #: src/tools/dbverify.c:831 #, c-format msgid "Improper HUSB (%s) in family (%s)" msgstr "Felaktig HUSB (%s) i familj (%s)" #: src/tools/dbverify.c:844 #, c-format msgid "Bad wife reference (%s) in family %s" msgstr "Ogiltig referens till maka (%s) i familj %s" #: src/tools/dbverify.c:850 #, c-format msgid "Fixed Bad wife reference (%s) in family %s" msgstr "Lagade ogiltig referens till maka (%s) i familj %s" #: src/tools/dbverify.c:859 #, c-format msgid "Improper wife (%s) in family (%s)" msgstr "Felaktig maka (%s) i familj (%s)" #: src/tools/dbverify.c:872 #, c-format msgid "Bad child reference (%s) in family %s" msgstr "Ogiltig referens till barn (%s) i familj %s" #: src/tools/dbverify.c:878 #, c-format msgid "Fixed bad child reference (%s) in family %s" msgstr "Lagade ogiltig referens till barn (%s) i familj %s" #: src/tools/dbverify.c:887 #, c-format msgid "Improper child: Child (%s) without FAMC reference to family (%s)" msgstr "Felaktigt barn: Barn (%s) utan FAMC-referens till familj (%s)" #: src/tools/dbverify.c:895 #, c-format msgid "Empty family (%s)" msgstr "Tom familj (%s)" #: src/tools/dbverify.c:897 #, c-format msgid "Single person family (%s)" msgstr "Familj med ensam person (%s)" #: src/tools/dbverify.c:923 #, c-format msgid "Duplicate source for %s" msgstr "Dubblerad källa för %s" #: src/tools/dbverify.c:939 #, c-format msgid "Duplicate event for %s" msgstr "Dubblerad händelse för %s" #: src/tools/dbverify.c:955 #, c-format msgid "Duplicate record for %s" msgstr "Dubblerad post för %s" #: src/tools/dbverify.c:1026 #, c-format msgid "Bad pointer (in %s): %s" msgstr "Felaktig pekare (i %s): %s" #: src/tools/dbverify.c:1064 #, c-format msgid "Missing undeleted record %c%d" msgstr "Saknad återskapad post %c%d" #: src/tools/dbverify.c:1071 #, c-format msgid "Fixed missing undeleted record %c%d" msgstr "Lagade saknad återskapad post %c%d" #: src/tools/dbverify.c:1075 #, c-format msgid "Failed to fix missing undeleted record %c%d" msgstr "Misslyckades med att laga saknad återskapad post %c%d" #: src/tools/dbverify.c:1087 #, c-format msgid "Delete set contains valid record %s" msgstr "Uppsättning för borttagning innehåller giltig post %s" #: src/tools/dbverify.c:1092 #, c-format msgid "Fixed delete set contains valid record %s" msgstr "Lagat deleteset innehåller giltig post %s" #: src/tools/dbverify.c:1096 #, c-format msgid "Failed to fix missing undeleted record %s" msgstr "Misslyckades med att laga saknad återskapad post %s" #: src/tools/dbverify.c:1117 #, c-format msgid "Master fkey misaligned" msgstr "Övergripande fkey feljusterad" #: src/tools/dbverify.c:1144 #, c-format msgid "Cycle in indexes, file %s found again!\n" msgstr "Cykel i index, fil %s hittad igen!\n" #: src/tools/dbverify.c:1151 #, c-format msgid "Error loading index at key" msgstr "Fel vid laddning av index vid nyckel" #: src/tools/dbverify.c:1199 #, c-format msgid "First key in block below parent's limit\n" msgstr "Första nyckel i block nedanför förälders gräns\n" #: src/tools/dbverify.c:1207 #, c-format msgid "Last key in block above parent's limit\n" msgstr "Sista nyckel i block ovanför förälders gräns\n" #: src/tools/dbverify.c:1215 #, c-format msgid "Key not below next key" msgstr "Nyckel inte nedanför nästa nyckel" #: src/tools/dbverify.c:1232 src/tools/dbverify.c:1234 msgid "data block" msgstr "datablock" #: src/tools/dbverify.c:1235 #, c-format msgid "%s fkey=%d, file=%s" msgstr "%s fkey=%d, fil=%s" #: src/tools/dbverify.c:1248 #, c-format msgid "Invalid errs array[%d] in dbverify - fix program\n" msgstr "Ogiltig felvektor[%d] i dbverify - laga programmet\n" #: src/tools/dbverify.c:1285 #, c-format msgid "Missing data record (%s)" msgstr "Saknad datapost (%s)" #: src/tools/dbverify.c:1289 #, c-format msgid "Fixed missing data record (%s)" msgstr "Lagade saknad dataposte (%s)" #: src/tools/dbverify.c:1420 #, c-format msgid "Checking %s" msgstr "Kontrollerar %s" #: src/tools/dbverify.c:1476 #, c-format msgid "%d error" msgid_plural "%d errors" msgstr[0] "%d fel" msgstr[1] "%d fel" #: src/tools/dbverify.c:1480 #, c-format msgid "%d fixed" msgid_plural "%d fixed" msgstr[0] "%d lagad" msgstr[1] "%d lagade" #: src/tools/dbverify.c:1487 msgid "No errors found" msgstr "Inga fel hittades" #: src/tools/dbverify.c:1506 #, c-format msgid "FATAL ERROR: " msgstr "ÖDESDIGERT FEL" #: src/tools/dbverify.c:1511 #, c-format msgid "In file <%s> at line %d" msgstr "I filen <%s> vid rad %d" #~ msgid "Program" #~ msgstr "Program" #~ msgid "Error: output file <%s> could not be created.\n" #~ msgstr "Fel: utmatningsfilen <%s> kunde inte skapas.\n" #~ msgid "Added (%dP, %dF, %dS, %dE, %dX) records" #~ msgstr "Lade till (%dP, %dF, %dS, %dE, %dX) poster" #~ msgid "" #~ "usage: dbverify -(flags) \n" #~ "flags:\n" #~ "\t-a = Perform all checks (does not include fixes)\n" #~ "\t-g = Check for ghosts (names/refns)\n" #~ "\t-G = Check for & fix ghosts (names/refns)\n" #~ "\t-i = Check individuals\n" #~ "\t-f = Check families\n" #~ "\t-s = Check sours\n" #~ "\t-e = Check events\n" #~ "\t-x = Check others\n" #~ "\t-n = Noisy (echo every record processed)\n" #~ msgstr "" #~ "användning: dbverify -(flaggor) \n" #~ "flaggor:\n" #~ "\t-a = Genomför alla kontroller (inkluderar ej lagningar)\n" #~ "\t-g = Sök efter spöken (namn/refno)\n" #~ "\t-G = Sök efter och laga spöken (namn/refno)\n" #~ "\t-i = Kontrollera individer\n" #~ "\t-f = Kontrollera familjer\n" #~ "\t-s = Kontrollera källor\n" #~ "\t-e = Kontrollera händelser\n" #~ "\t-x = Kontrollera övriga\n" #~ "\t-n = Bullrigt (eka alla behandlade poster)\n" lifelines-3.0.61/README0000700002540200244210000000202610655637141014631 0ustar prappDomain UsersLifeLines Source Release, Version 3.0.61 http://lifelines.sourceforge.net ------------------------------------------------------------------------- This is the source distribution of the LifeLines system, a genealogy software system. To build and install LifeLines, please refer to the installation instructions located in the INSTALL file. GUI Versions of LifeLines for Windows and UNIX/GNOME are under development. Visit the LifeLines home page (see end of file for URL) for details on how to obtain pre-compiled or beta (test) copies of these versions. The DOS text mode version has been integrated into the primary distribution. The original author of LifeLines is Thomas T. Wetmore IV, who released it to the open source community under a MIT-style licence (see LICENCE). LifeLines is now maintained by the open source community, and is the result of much effort by many people. For a list of contributors, see AUTHORS. Please visit http://lifelines.sourceforge.net to check for updates, report bugs, or to contribute to LifeLines. lifelines-3.0.61/README.AUTOCONF0000700002540200244210000001722710621453776016062 0ustar prappDomain UsersBasic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. lifelines-3.0.61/README.DEVELOPERS0000700002540200244210000001116510654132723016277 0ustar prappDomain UsersTable of Contents 1) Required software 2) automake/autoconf notes 3) which does what 4) building code *************************** 1) Software required for developers: In order to compile lifelines from the cvs sources, the developer needs to have a number of tools available. make: build process requires gmake autotools suite: both autoconf and automake (which in turn require the m4 macro processor) are used to generate Makefiles and various build files. bison: Is required to compile lifelines/src/interp/yacc.y. m4: Is required by the autotools suite as well as for generation of the default lifelines configuration prototypes. perl: Is required to generate the file index.html in the reports directory, as well as for generation of lines.cfg. jw: Is used to compile the documentation. It is at least available in the debian text/docbook-utils package and the Redhat docbook-utils package. Lack of this tool is not critical, however, and the make will continue, only listing these lacks as warnings. The generated documention is included in both the cvs and src distributions. This will only prevent regeneration of the documention. jadetex: Is used to produce pdf versions of the documentation. It is at least available in the Redhat jadetext package. See jw above. lynx: Is used to compile text versions of documentation. See jw above. Note: These requirements are for compiling from the cvs sources, not from a distribution tarball. Distribution tarballs are built so as not to require autotools or bison. However, m4 and perl are required. *************************** 2) Some notes about using automake/autoconf: Many of the files you're used to editing by hand are automatically generated by automake &/or autoconf. These include any file named Makefile, Makefile.in, config.h, config.h.in, or configure. The proper files to modify by hand are configure.ac (if there's something new you need to determine about the host system at configuration time) and Makefile.am (if source files are added or removed, targets added, or dependencies changed). As long as you have autoconf and automake installed on your system, the Makefiles generated will be able to regenerate any file dependent on a Makefile.am or configure.ac. To regenerate the build system explicitly, sh autogen.sh The autogen script *must* be run after freshly checking a copy of the project out of CVS -- the files generated automatically are no longer included in the CVS repository. I'm happy to help anyone who needs help adjusting the automake/autoconf build system to suit your development needs... Rob Fugina robf@geekthing.com (Perry added autogen.sh, 2002.06.04) *************************** 3) Which does what: At development (or package creation) time, the autogen.sh script will perform the following 4 steps for you: 1) aclocal: This generates aclocal.m4 from acinclude.m4. For lifelines aclocal is invoked as 'aclocal -I m4 -I build/autotools' in order to get all the autoconf, automake and gettext macros into aclocal.m4. 2) autoheader: This generates acconfig.h. 3) automake: This generates Makefile.in files from Makefile.am files. 4) autoconf: This generates configure from configure.ac. On remote machine compiling a source distribution package: configure will generate config.h and Makefile files from Makefile.in files. 4) Building the code 1. check out the code from cvs - there is a link off http://lifelines.sourceforge.net which gives instructions for checking out the code. If you're not a sourceforge developer, you can use the anonymous checkout procedure. 2. For building, refer to the README.MAINTAINERS file and execute the commands under 'Run autotools:' and 'Build local copy in ./bld subdirectory:' Note: these commands describe one way to proceed. There are many other approaches which will also work. 3. The language files po/*.po get updated when you build code; they are also updated from CVS. If you find that conflicts occur with these files, you can simply remove them and update them from CVS again. Then your build should proceed as normal. 4. curses.h. It seems that every distribution places curses.h and libcurses.so in different places or has slightly different names for the files. For example, libcursesw.so or libcursesw.a seem the most prominant versions. If you find that lifelines can't find curses.h on your system, you can pass in the directory of the file on the configure step. For example if your curses.h was in /usr/local/ncurses and it wasn't being found, you could add to the configure step ../configure CPPFLAGS=-I/usr/local/ncurses lifelines-3.0.61/README.INTERNATIONAL0000700002540200244210000000671207473042450016642 0ustar prappDomain UsersLifelines was gettextized in Feb of 2002. lifelines-3.0.12 was submitted to Free Translation Project on May 12, 2002 Included versions are: sv: Swedish (Thanks to Jens Arvidsson) de: German (Thanks to Carl Becker) Versions under private development: fr: French If you would like to volunteer to help with a new or existing translation, please contact the Free Translation Project http://www.iro.montreal.ca/contrib/po/HTML except for the de & fr translations, for which send email to the long-running lifelines mailing list, LINES-L, which is explained at: http://www.rootsweb.com/~nozell/lines-l Issues for translators: gettext If you are not familiar with gettext, it would be beneficial to look not only at the ABOUT-NLS file (in the root of lifelines), but also the gettext manual, which may be seen at http://www.gnu.org/manual/gettext/index.html Free Translation Project The Translation Project is a collaborative effort to translate free software packages: http://www.iro.montreal.ca/contrib/po/HTML Menus. The large menus (main menu, utility menu, etc) still have hardcoded letters, so that "u" always invokes the utility menu from the main menu, and this cannot be changed at present. The list browse screen also has fixed menu letters. Widths. The main menu has room for 70 characters after the spaces of each item (eg, after "u " you may use 70 characters). Submenus must be smaller. The small menus at the bottom of browse screens (person browse, family browse, tandem browses, other browse, but not list browse) draw their menu assignment letters from the actual text, so that the the letter codes may be localized. Note that you must be familiar with the lifelines menu screens to localize these letters; if not, simply leave the leading letter codes as they are, and localize the subsequent explanatory test. Eg, for "e Edit top person", leave the leading e as it is, unless you have worked out an entire set of localized letters for this menu (this particular menu item is used in both the tandem person menu and the tandem family menu). The column widths of these flexible menu items are also figured dynamically from the width of the widest menu item. NB: These texts are all drawn from menuitem.c, whereas the fixed menu texts are all drawn from messages.c. Months: Month short & long names are explicitly in the translations, rather than being drawn from strftime, because the package is used on MSWin^h^h^h^h^h platforms with poor libc support. May: The month of May has the same short & long form in English, so the short form is marked as "may**", so that it may be localized. Do not include asterisks in your localized version. French Republic months: The names of the French Republic months (eg, Vendemiaire) should probably stay in French. printf-style format specifiers (%s and %d): The order of the printf specifiers must be preserved. The glibc extensions to allow reordering these cannot be used, because this will fail on systems without glibc (and if a %s and a %d are reversed, it will crash). For example, (%s: %d spouse(s), %d child(ren)) All translations must have the %s first, then the %d for spouses, then the one for children. If this is a problem in a particular case, please post a message to the LINES-L list. If the specifiers are %1 and %2, then they may be moved around in order. (These are ones handled specially to allow reordering.) lifelines-3.0.61/README.LAYOUT0000700002540200244210000000651510607565414015654 0ustar prappDomain UsersLifeLines Source Release, Version 3.0.54 http://lifelines.sourceforge.net ------------------------------------------------------------------------- This is a brief description of the directory layout. Source Code Directories ----------------------- ./build/autotools Some of the scripts needed for autotools based development README.DEVELOPERS has some information about autotools ./build/gettext m4 macro files needed by gettext (the GNU internationalization package) ./build/gnu Unused & empty ./build/msvc6 Project files for Miscrosoft Visual C++ 6 ./build/rpm spec file used to create rpm (source & binary) distributions (rpm is RedHat package distribution format) ./intl/ Local gettext implementation, which substitutes in appropriate language translation strings on the fly. ./m4/ m4 language macros for the Autoconf/Automake system, mostly for the gettext intl subdirectory. The contents of this directory will be entirely created by the autotools during development. ./po/ Translations (gettext message catalogs). ./src/arch/ Library of replacement functions missing on some platforms. ./src/btree/ btree (database) implementation, with access functions. Used by the rest of lifelines to access the binary database. ./src/gedlib/ Implementation of the INDISEQ type. Implementation of NAME & REFN records. Node functions (extracting from & sending to db, and some top-level node conversions, eg indi_to_event). messages (attempt to put together all strings for hopeful localization). miscellaneous other stuff (including initialization code & options). ./src/hdrs/ Header files. screen.h is curses-specific, and will probably be moved eventually. ./src/hdrs/win32/ Headers for win32 implementation code. ./src/interp/ Report generator program interpreter. ./src/liflines/ The frontend logic and GUI code of the LifeLines application. Code to implement import & export, editing, & merging records. The curses interface is somewhat but not entirely separated from the application. Curses specific: browse.c lbrowse.c loadsave.c main.c menuitem.c pedigree.c screen.c, show.c tandem.c (Although browse, lbrowse, & menuitem embody the main command handling, and will have to be duplicated in other versions, unlesss they can be reused ?) ./src/stdlib/ Common data types & functions used by other LifeLines modules, including: lists (in double.c), tables, sequences, string stuff These are all independent of LifeLines or GEDCOM. ./src/tools/ btedit - edit the binary records in the btree (database) itself dbverify - check a database for errors ./ui/ (IN THE FUTURE) Will contain UI-specific code for obtaining input and displaying output ./win32/ (ALMOST OBSOLETE) Code from the win32 port, used only when creating win32 target ./win32/hdrs/ (OBSOLETE) Headers used in win32 port (before ./hdrs existed) Non-Source Code Directories --------------------------- ./docs/ Documentation in various formats, including old quickref, and the new users guide and report manual (and developers guide). ./reports/ Lifelines language reports (*.ll) ./tt/ Translation tables, for character set conversions for users without iconv, or for custom conversions. lifelines-3.0.61/README.MAINTAINERS0000700002540200244210000000542410643536251016404 0ustar prappDomain UsersThese instructions are for building a new lifelines release, in your cvs working directory, and actually releasing it. Fetch latest cvs if desired, eg $ cvs -z3 up -d Edit the version number, setting it to the new release: (Running, eg, "cd build; sh setversions.sh 3.0.19; cd .." does this) (NB: setversions.sh requires bash3) NEWS INSTALL README configure.ac build/rpm/lifelines.spec src/hdrs/version.h build/msvc6/btedit/btedit.rc (4 occurrences) build/msvc6/dbverify/dbVerify.rc (4 occurrences) build/msvc6/llexec/llexec.rc (4 occurrences) build/msvc6/llines/llines.rc (4 occurrences) docs/ll-devguide.xml (2 occurrences) docs/ll-reportmanual.xml (2 occurrences) docs/ll-userguide.xml (2 occurrences) docs/llines.1 (& year & month as well) Run autotools: $ sh autogen.sh Note: There are several reports which do not build correctly in UTF-8 locale. Therefore, if you use a UTF-8 locale, do something like so: export LANG=en_US.ISO-8859-1 Build local copy in ./bld subdirectory: $ rm -rf bld $ mkdir bld $ cd bld $ ../configure $ make Update master message catalog template (for i18n): $ mv ../po/lifelines.pot ../po/lifelines.old.pot $ cd po $ make lifelines.pot $ cd .. Build distribution tarball: $ make dist $ cd .. Add an entry mentioning the new version in the ChangeLog Commit changes (new version number, new message catalogs): $ cvs -z3 ci Announce new version to Free Translation Project. Per: http://www.iro.umontreal.ca/translation/HTML/maintainers.html Free Translation Project page for lifelines: http://www.iro.umontreal.ca/translation/registry.cgi?domain=lifelines Build any other files (eg, other tarball formats, MS-Windows binary packages, rpm packages). rpm: See README.MAINTAINERS.rpm debian: lifelines is a supported debian package and has a debian maintainer (q.v.) MS-Windows: See README.MAINTAINERS.win32 Go to lifelines admin page, and create a new beta release. Paste in top part of ./NEWS file for ChangeLog entry, and copy & paste release notes from previous beta release, updating md5 signatures to those of new release files. Upload the release files (tarball etc.) to uploads.sourceforge.net. From the release page (above, opened from project admin), refresh and attach the release files, and set properties appropriately (can look at previous releases to see how to set them). Tag the cvs source via (for example, for version 3.0.25) cvs tag v3_0_25 Send an announcement to the LINES-L mailing list (send to user LINES-L at domain LISTSERV.NODAK.EDU). lifelines-3.0.61/README.MAINTAINERS.rpm0000700002540200244210000000163510607565625017210 0ustar prappDomain UsersTo make rpms as a regular (non-root) users, you need to have the rpm program installed on your system (of course). If you run "rpm --help" and get a lot of text back, you have rpm :) To create a local rpm directory for creating rpm releases, you may copy the sample rpmmacros file in the build/rpm directory to your home directory as .rpmmacros, like so: $ cp build/rpm/rpmmacros_sample ~/.rpmmacros The settings in that rpmmacros file work in a directory ~/myrm, so you must create that directory, and a subdirectory for lifelines files: $ mkdir ~/myrpm $ mkdir ~/myrpm/lifelines Now you are ready to create an rpm release. This is a two step operation ========= #1) Copy the distribution tarball to the lifelines rpm directory: $ cp bld/lifelines*.tar.gz ~/myrpm/lifelines ========= #2) Create the rpms $ cd build/rpm $ rpmbuild -ba lifelines.spec or on older systems, $ cd build/rpm $ rpm -ba lifelines.spec lifelines-3.0.61/README.MAINTAINERS.win320000700002540200244210000000154110607571123017336 0ustar prappDomain UsersPerry has been building MS-Windows binary packages on a Windows machine with: cygwin and a local cvs copy (UNIX line endings) another local cvs copy (Windows line endings) Microsoft Visual Studio 6 (MSVC6) Build a release in the local cvs copy under cygwin, following README.MAINTAINER instructions, up to the part that says to come to this file for win32. Update your local cvs Windows copy to the latest. Compile the executables in MSVC6 to release mode. Run a batch file to create a new release directory. You must create this batch file (once, not once per release), and it just calls the create_lifelines_release.vbs script with directory arguments telling it where the local cvs unix copy is, and where the local cvs windows copy is. (The script copies some files, including the tarball and the translated message files, from the local unix copy.) lifelines-3.0.61/reports/0000700002540200244210000000000010657071735015447 5ustar prappDomain Userslifelines-3.0.61/reports/2ppage.ll0000700002540200244210000001405110076661056017156 0ustar prappDomain Users/* * @progname 2ppage.ll * @version 1.0 * @author Wetmore, Manis * @category * @output Text, 80 cols * @description * * It will produce a report of all INDI's in the database, with * two records printed per page. Record 1 and 2 will be on the * first page. * * 2ppage (2 INDI's per page) * * * Code by Tom Wetmore, ttw@cbnewsl.att.com * Modifications by Cliff Manis * * This report works only with the LifeLines Genealogy program * * version one of this report was written by Tom Wetmore, in 1991, * and it has been modified many times since. * * It will produce a report of all INDI's in the database, with * two records printed per page. Record 1 and 2 will be on the * first page. * * It will produce ASCII file output. This short report show how many different things may be done with the report language. These next two paragraphs were by Tom, when he sent me the following report - which we had been discussing via email. At the time I wanted this format for a book I was writing for a Mother-in-Law. This report is using the `pagemode' feature. This allows use use of the `pos' command to go to any row and column coordinate on a page. The routine `pageout' dumps the current page to the output file, and prepares for the program to compose another page. Notice how the `gettoday' function is used to get today's date to print out. Also note that the `mod' function is used to put every other person on the top half, and the other every other person on the bottom half. Also note that the variable `page' counts the page numbers. */ proc main () { pagemode(66,80) monthformat(4) set(tday, save(stddate(gettoday()))) set(page, 1) forindi(i, n) { if (mod(n,2)) { pos(2,1) " = = = = MANES / MANIS Family History & Genealogy = = = " tday nl() pos(65,1) " = = = Cliff Manis, PO Box 33937, San Antonio, TX 78265 = = " d(page) nl () set(page, add(page,1)) pos(4,1) call oneout(i) } else { pos(34,1) call oneout(i) pageout() } } if (mod(n,2)) { pageout() } } proc oneout (i) { set(f, father(i)) set(m, mother(i)) " FULL NAME: " name(i) col(46) "(" key(i) ")" nl() nl() " FATHER: " name(f) col(46) "(" key(f) ")" nl() " MOTHER: " name(m) col(46) "(" key(m) ")" nl() nl() " Born: " stddate(birth(i)) " at " place(birth(i)) nl() call outmarriages(i) nl() " Died: " stddate(death(i)) " at " place(death(i)) nl() nl() call outchildren(i) } proc outmarriages (i) { spouses(i, s, f, n) { if (eq(1, n)) { " Married: " stddate(marriage(f)) nl() " Married to: " name(s) col(46) "("key(s)")" nl() } else { " Remarried: " stddate(marriage(f)) nl() " Remarried to:" name(s) col(46) "("key(s)")" nl() } } } proc outchildren (i) { set(j, 0) families(i, f, s, n) { set(j, add(j, nchildren(f))) } " Number of Children: " d(j) nl() set(j, 1) families(i, f, s, n) { children(f, c, m) { " " d(j) ". " name(c) col(46) "("key(c)")" col(57) "Born: " stddate(birth(c)) nl() set(j, add(j,1)) } } } /* * Sample output = = = = MANES / MANIS Family History & Genealogy = = = 15 Jan 1993 FULL NAME: Wilee "Wyley" WORWICK (3) FATHER: Wyley WORWICK (1) MOTHER: Wife of Wyley WORWICK (2) Born: 1824 at Married: 31 Oct 1844 Married to: Martha D. JOHNSON (4) Died: Nov 1874 at Union Co, TN Number of Children: 10 1. Tempia Catherine WARWICK (5) Born: 1846 2. Louisa Mahayla WARWICK (6) Born: 1848 3. Margarett WARWICK (7) Born: 1850 4. Mary WARWICK (8) Born: 1852 5. Matilda WARWICK (9) Born: 1854 6. Calaway WARWICK (10) Born: 29 Jul 1855 7. Jamima WARWICK (11) Born: 1858 8. Nancy Elizabeth WARWICK (12) Born: 1860 9. Rebecca WARWICK (13) Born: 1864 10. Martha WARWICK (14) Born: Sep 1869 FULL NAME: Martha D. JOHNSON (4) FATHER: () MOTHER: () Born: 1825 at NC Married: 31 Oct 1844 Married to: Wilee "Wyley" WORWICK (3) Remarried: Remarried to:William PETREE (22) Died: at Number of Children: 10 1. Tempia Catherine WARWICK (5) Born: 1846 2. Louisa Mahayla WARWICK (6) Born: 1848 3. Margarett WARWICK (7) Born: 1850 4. Mary WARWICK (8) Born: 1852 5. Matilda WARWICK (9) Born: 1854 6. Calaway WARWICK (10) Born: 29 Jul 1855 7. Jamima WARWICK (11) Born: 1858 8. Nancy Elizabeth WARWICK (12) Born: 1860 9. Rebecca WARWICK (13) Born: 1864 10. Martha WARWICK (14) Born: Sep 1869 = = = Cliff Manis, PO Box 33937, San Antonio, TX 78265 = = 2 - end of report - */ lifelines-3.0.61/reports/4gen1.ll0000700002540200244210000000726310076661056016725 0ustar prappDomain Users/* * @progname 4gen1.ll * @version 1.0 * @author Wetmore, Manis * @category * @output Text, 80 cols * @description * * select and produce a ancestor report for the person selected. * Output is an ASCII file, and will probably need to be printed * using 10 or 12 pitch. * * 4gen1 * * Code by Tom Wetmore, ttw@cbnewsl.att.com * With modifications by: Cliff Manis * * This report works only with the LifeLines Genealogy program * * version one of this report was written by Tom Wetmore, in 1990, * * select and produce a ancestor report for the person selected. * * Output is an ASCII file, and will probably need to be printed * using 10 or 12 pitch. * * An example of the output may be seen at end of this report. */ proc main () { getindi(indi) pagemode(64,80) call pedout(indi,1,4,1,64) pageout() print(nl()) } proc pedout (indi, gen, max, top, bot) { if (and(indi,le(gen,max))) { set(gen,add(1,gen)) set(fath,father(indi)) set(moth,mother(indi)) set(height,add(1,sub(bot,top))) set(offset,div(sub(height,8),2)) call block(indi,add(top,offset),mul(10,sub(gen,2))) set(half,div(height,2)) call pedout(fath,gen,max,top,sub(add(top,half),1)) call pedout(moth,gen,max,add(top,half),bot) } } proc block (indi, row, col) { print(".") set(row,add(3,row)) set(col,add(3,col)) pos(row,col) name(indi) set(row,add(row,1)) pos(row,col) set(e,birth(indi)) " b. " if (and(e,date(e))) { date(e) } set(row,add(row,1)) pos(row,col) " bp. " if (and(e,place(e))) { place(e) } } /* Sample output of the 4gen1 report: Person requested was: a c /manis William Thomas MANES b. 26 Nov 1828 bp. Hamblen, Tennessee William Bowers MANES b. 6 Jan 1868 bp. Hamblen Co, TN ? Martha A. BOWERS b. 14 APR 1829 bp. TN Fuller Ruben MANES b. 19 Nov 1902 bp. Union Valley, Sevier Co, TN James H. CANTER b. ca 1847 bp. Claiborne Co, TN Cordelia "Corda" F. CANTER b. 7 Dec 1869 bp. Jonesboro, Washington Co, TN Martha Marie WHITEHORN b. 22 DEC 1846 bp. Washington Co, TN ? Alda Clifford MANIS b. 11 MAR 1939 bp. Knoxville, Knox Co, TN Thomas D.A.F.S. MANIS b. 1 Feb 1839 bp. Fair Garden, TN or Cocke Co, TN ? William Loyd MANIS b. 5 Sep 1872 bp. Sevier Co, TN Frances Amanda BIRD b. 8 FEB 1845 bp. Sevier Co, TN Edith Alberta MANIS b. 8 APR 1914 bp. Dandridge, Jefferson Co, TN John Franklin NEWMAN b. 4 MAY 1830 bp. Jefferson Co, TN Lillie Caroline "Carolyn" NEWMAN b. 13 JUN 1881 bp. Jefferson Co, TN Mary Jean CORBETT b. 9 OCT 1843 bp. Jefferson Co, TN */ /* End of Report */ lifelines-3.0.61/reports/6gen1.ll0000700002540200244210000001173110076661056016722 0ustar prappDomain Users/* * @progname 6gen1.ll * @version 1.0 * @author Wetmore, Manis * @category * @output Text, 80 cols * @description * * select and produce a 6 generation ancestor report for * the person selected. * Output is an ASCII file, and will probably need to be printed * using 10 or 12 pitch. * * 6gen1 * * Code by Tom Wetmore, ttw@cbnewsl.att.com * With modifications by: Cliff Manis * * This report works only with the LifeLines Genealogy program * * version one of this report was written by Tom Wetmore, in 1990, * * select and produce a 6 generation ancestor report for * the person selected. * * Output is an ASCII file, and will probably need to be printed * using 10 or 12 pitch. * * An example of the output may be seen at end of this report. */ proc main () { getindi(indi) set (nl,nl()) pagemode(70,80) call pedout(indi,1,6,1,64) pageout() print(nl()) } proc pedout (indi, gen, max, top, bot) { if (le(gen,max)) { set(gen,add(1,gen)) set(fath,father(indi)) set(moth,mother(indi)) set(height,add(1,sub(bot,top))) set(offset,div(sub(height,1),2)) call block(indi,add(top,offset),mul(8,sub(gen,2))) set(half,div(height,2)) call pedout(fath,gen,max,top,sub(add(top,half),1)) call pedout(moth,gen,max,add(top,half),bot) } } proc block (indi, row, col) { print(".") set(row,add(3,row)) set(col,add(3,col)) pos(row,col) if (indi) { name(indi) } else { "_______________" } } /* Sample output of the 6gen1 report for: a c /manis John MANESS Samuel P. MANES _______________ William Thomas MANES _______________ Fanny (MANES) _______________ William Bowers MANES James BOWERS Anderson BOWERS Martha Martha A. BOWERS Christopher Columbus COWAN Lurina Viney "Vina" COWAN Mary BOYD Fuller Ruben MANES _______________ Henry B. CANTER _______________ James H. CANTER _______________ Polina (CANTER) _______________ Cordelia "Corda" F. CANTER _______________ James WHITEHORN _______________ Martha Marie WHITEHORN Kennedy "Kan" Powell FOSTER Martha "Patsy" FOSTER Rebecca KERSAWN Alda Clifford MANIS _______________ Amos MANIS _______________ Thomas D.A.F.S. MANIS David FRANCIS Mary Elizabeth FRANCIS Mary CROCKETT William Loyd MANIS Jacob BIRD John BIRD Mrs. (BIRD) Frances Amanda BIRD G. Christopher SHRADER Elizabeth SHRADER Mary WEBB Edith Alberta MANIS John NEWMAN Aaron NEWMAN Nancy FRANKLIN John Franklin NEWMAN Thomas B. RANKIN Sinea RANKIN Jennet BRADSHAW Lillie Caroline "Carolyn" NEWMAN James CORBETT John Williams CORBETT Polly GRESHAMS Mary Jean CORBETT _______________ Betsy EUDAILY _______________ */ /* End of Report */ lifelines-3.0.61/reports/8gen1.ll0000700002540200244210000000315310076661056016723 0ustar prappDomain Users/* * @progname 8gen1.ll * @version 1.0 * @author Wetmore, Manis * @category * @output Text, 132 cols * @description * * Produce an 8 generation descendant report for the person selected. * Output is an ASCII file, and will probably need to be printed * using 132 column format. * * 8gen1 * * Code by Tom Wetmore, ttw@cbnewsl.att.com * With modifications by: Cliff Manis * * This report works only with the LifeLines Genealogy program * * version one of this report was written by Tom Wetmore, in 1990, * * Produce an 8 generation descendant report for the person selected. * * Output is an ASCII file, and will probably need to be printed * using 132 column format. * * An example of the output, is not included because it would add * 20k to this report. */ proc main () { getindi(indi) set (nl, nl()) pagemode(260,132) call pedout(indi,1,8,1,256) pageout() print(nl()) } proc pedout (indi, gen, max, top, bot) { if (le(gen,max)) { set(gen,add(1,gen)) set(fath,father(indi)) set(moth,mother(indi)) set(height,add(1,sub(bot,top))) set(offset,div(sub(height,1),2)) call block(indi,add(top,offset),mul(10,sub(gen,2))) set(half,div(height,2)) call pedout(fath,gen,max,top,sub(add(top,half),1)) call pedout(moth,gen,max,add(top,half),bot) } } proc block (indi, row, col) { print(".") set(row,add(3,row)) set(col,add(3,col)) set(e,birth(indi)) pos(row,col) if (indi) { name(indi) ", " if (and(e,date(e))) { date(e) } ", " if (and(e,place(e))) { place(e) } } else { " |--------" } } /* End of Report */ lifelines-3.0.61/reports/addsour.ll0000700002540200244210000000444610340217253017436 0ustar prappDomain Users/* * @progname addsour * @version 1.0 * @author Stephen Dum * @category * @output Modifies Database * @description This script prompts for a message and adds the message along with todays date as a Source record on each individual and Family in the database. It checks to see if the source already exists, and allows you to skip or replace an existing source record. Warning, this script modifies your database, making a backup of your data before running this script is advised. */ option("explicitvars") proc main() { print("\n") print("This script will add a SOUR record to each indi and fam in your database\n") print("The value will be the message you supply with todays date appended.\n") print("Warning: This script modifies your database - backup your data\n", "before running it -- enter abort to abort\n\n") getstr(msg,"Enter Message to add to SOUR") if (index(lower(msg),"abort",1)) { return() } /* iterate thru each individual adding sources to end of each */ forindi(indiv,cnt) { set(ok,"ok") fornodes(indiv,n) { if (eqstr(tag(n),"SOUR")) { if (index(value(n),msg,1)) { print("Warning, ",key(indiv),": SOUR ",value(n),nl()) print("Message already exists in level 1 SOUR record",nl()) getstr(ok,"Press return to skip add, rep to replace, else ok") if (index(lower(ok),"rep",1)) { /* replace node */ detachnode(n) set(n,nn) } } } set(nn,n) } if (strlen(ok)) { print("adding msg for ",key(indiv),nl()) set(s,createnode("SOUR",concat(msg," ",date(gettoday())))) addnode(s,indiv,nn) writeindi(indiv) } } forfam(fam,cnt) { fornodes(fam,n) { if (eqstr(tag(n),"SOUR")) { if (index(value(n),msg,1)) { print("Warning, ",key(fam),": SOUR ",value(n),nl()) print("Message already exists in level 1 SOUR record",nl()) getstr(ok,"Press return to skip add, rep to replace, else ok") if (index(lower(ok),"rep",1)) { /* replace node */ detachnode(n) set(n,nn) } } } set(nn,n) } if (strlen(ok)) { print("adding msg for ",key(fam),nl()) set(s,createnode("SOUR",concat(msg," ",date(gettoday())))) addnode(s,fam,nn) writefam(fam) } } } lifelines-3.0.61/reports/af-import.ll0000700002540200244210000002451610324560353017677 0ustar prappDomain Users/* * @progname af-import.ll * @version 4.12 * @author baud@research.att.com * @category * @output GedCom * @description * * convert ancestral-file gedcom to lifelines-standard gedcom * * AF gedcom has the following defects that must be corrected: * * NAME - Delete name LIVING (Actually, 3.0.1 requires some kind * of name, so use "/"). * - Convert UPPERCASE surnames to upper- and lowercase. Try to * figure out von's and such, but otherwise simply capitalize * the first letters. * - Remove periods used for abbreviations. * - Delete given name "Stillborn". * - Alternate surnames (given in parentheses) are converted * to subsequent NAME records. * DATE - LIVING -- delete associated event. * - Convert "" to "ABT X". * - Marriage date with trailing (DIV) indicates divorce -- * strip string and convert to DIV record. * PLAC - Burial place "Cremated" converted to NOTE record. * - Strip leading commas. * events - Add SOUR cross-reference to "Ancestral File" to all. * * 12 NOV 1994 (3.0.1) baud@research.att.com */ proc main () { getstrmsg (msg, "AF Version [default 4.12/1992]?") if (streq (msg, "")) { set (afversion, "4.12") set (afdate, "1992") } else { if (i, index (msg, "/", 1)) { set (afversion, save (trim (msg, sub (i, 1)))) set (afdate, save (cut (msg, add(i, 1)))) } else { set (afversion, save (msg)) set (afdate, "") } } "0 HEAD \n" "1 SOUR LIFELINES\n" "2 VER " version() "\n" "2 NAME AF-IMPORT REPORT\n" "1 DEST LIFELINES\n" "2 VER 3.0.1\n" "1 DATE " date (gettoday ()) "\n" "1 COPR Copyright " date (gettoday ()) ". Permission is granted to repro" "duce any subset\n2 CONT of the data contained herein under the condit" "ion that this copyright\n2 CONT notice is preserved, that the origina" "l source citations referenced\n2 CONT in the subset are included, and" " that the submitter of this file is\n2 CONT credited with original au" "thorship as appropriate.\n" "1 CHAR ASCII\n" "0 @S1@ SOUR\n" "1 NAME Ancestral File\n" "1 PUBR The Church of Jesus Christ of Latter-day Saints\n" if (strlen (afversion)) { "1 VER " afversion "\n" } if (strlen (afdate)) { "1 DATE " afdate "\n" } print ("Processing nodes ...\n") forindi (indi, in) { print ("i") afimportindi (indi) } forfam (fam, fn) { print ("f") afimportfam (fam) } "0 TRLR \n" } func afimportindi (indi) { set (root, inode (indi)) if (streq (name (indi), "LIVING")) { replacenode (createnode ("NAME", "/"), subnode (root, "NAME")) } elsif (index (name (indi), "Stillborn ", 1)) { set (namenode, subnode (root, "NAME")) replacenode (createnode ("NAME", save (cut (value (namenode), 11))), namenode) } reformatnames (root, "@S1@") if (streq (date (birth (indi)), "LIVING")) { deletenode (birth (indi)) } if (streq (date (baptism (indi)), "LIVING")) { deletenode (baptism (indi)) } reformatdates (root) fornodes (root, node) { if (eventP (node)) { if (place (node)) { if (streq (place (node), "Cremated")) { replacenode (createnode ("NOTE", "Cremated."), subnode (node, "PLAC")) } else { list (placelist) extractplaces (node, placelist, placenumber) replacenode (createnode ("PLAC", strjoin (denull (placelist), ",")), subnode (node, "PLAC")) } } catnode (node, createnode ("SOUR", "@S1@")) } } gedcomnode (root) return (0) } func eventP (root) { if (root) { if (streq (tag (root), "BIRT")) { return (1) } if (streq (tag (root), "CHR")) { return (1) } if (streq (tag (root), "DEAT")) { return (1) } if (streq (tag (root), "BURI")) { return (1) } } return (0) } func afimportfam (fam) { set (root, fnode (fam)) reformatdates (root) if (node, marriage (fam)) { if (i, index (date (node), " (DIV)", 1)) { replacenode (createnode ("DATE", save (trim (date (node), sub (i, 1)))), subnode (node, "DATE")) set (divorcenode, createnode ("DIV", "")) catnode (divorcenode, createnode ("SOUR", "@S1@")) catnode (root, divorcenode) } if (place (node)) { list (placelist) extractplaces (node, placelist, placenumber) replacenode (createnode ("PLAC", strjoin (denull (placelist), ",")), subnode (node, "PLAC")) } catnode (node, createnode ("SOUR", "@S1@")) } gedcomnode (root) return (0) } /* common import/export functions */ func cond (x, a, b) { if (x) { return (a) } else { return (b) } } func gedcomnode (root) { traverse (root, node, level) { d (level) if (x, xref (node)) { " " x } if (x, tag (node)) { " " x } if (x, value (node)) { " " x } "\n" } return (0) } func denull (alist) { list (blist) forlist (alist, a, an) { if (a) { enqueue (blist, a) } } return (blist) } func reformatdates (root) { traverse (root, node, level) { if (streq (tag (node), "DATE")) { if (v, value (node)) { if (and (eq (index (v, "<", 1), 1), eq (index (v, ">", 1), strlen (v)))) { replacenode (createnode ("DATE", save (substring (v, 2, sub (strlen (v), 1)))), subnode (node, "DATE")) } } } } return (0) } func reformatnames (root, sourcetext) { list (namelist) list (surnamelist) list (choppedsurnamelist) list (newchoppedsurnamelist) if (namenode, subnode (root, "NAME")) { extractnames (namenode, namelist, nameN, surnameN) set (lastnamenode, namenode) forlist (namelist, s, sn) { set (s, strremove (s, ".")) set (s, strremove (s, "_")) setel (namelist, sn, s) } enqueue (surnamelist, getel (namelist, surnameN)) while (surname, dequeue (surnamelist)) { set (choppedsurnamelist, strchop (surname, " ")) forlist (choppedsurnamelist, s, sn) { if (streq ("VON", s)) { enqueue (newchoppedsurnamelist, s) } elsif (streq ("DER", s)) { enqueue (newchoppedsurnamelist, s) } elsif (and (eq (index (s, "(", 1), 1), eq (index (s, ")", 1), strlen (s)))) { enqueue (surnamelist, save (substring (s, 2, sub (strlen (s), 1)))) } else { enqueue (newchoppedsurnamelist, save (capitalize (lower (s)))) } } set (newsurname, strjoin (newchoppedsurnamelist, " ")) if (strlen (newsurname)) { if (i, index (newsurname, "Mc ", 1)) { set (newsurname, save (concat (trim (newsurname, add (i, 1)), cut (newsurname, add (i, 3))))) } set (newsurname, save (concat3 ("/", newsurname, "/"))) } setel (namelist, surnameN, newsurname) set (newnamenode, createnode ("NAME", strjoin (namelist, " "))) addnode (newnamenode, parent (lastnamenode), lastnamenode) if (sourcetext) { catnode (newnamenode, createnode ("SOUR", sourcetext)) } set (lastnamenode, newnamenode) } deletenode (namenode) } return (0) } func streq (x, y) { return (not (strcmp (x, y))) } func createnodes (tag, text) { set (text, trimspaces (text)) if (le (strlen (text), 72)) { return (createnode (tag, text)) } else { list (textlist) while (gt (strlen (text), 72)) { set (n, 1) if (i, index (text, " ", n)) { set (j, i) } else { set (j, add (strlen (text), 1)) } while (and (i, lt (i, 73))) { incr (n) set (j, i) set (i, index (text, " ", n)) } enqueue (textlist, save (trim (text, sub (j, 1)))) set (text, save (cut (text, add (j, 1)))) } if (gt (strlen (text), 0)) { enqueue (textlist, text) } set (root, createnode (tag, dequeue (textlist))) set (lastnode, 0) forlist (textlist, text, tn) { set (node, createnode ("CONT", text)) addnode (node, root, lastnode) set (lastnode, node) } return (root) } } func trimspaces (text) { set (ss, 0) set (s0, 1) set (sn, strlen (text)) while (and (le (s0, sn), streq (substring (text, s0, s0), " "))) { set (ss, 1) incr (s0) } while (and (le (s0, sn), streq (substring (text, sn, sn), " "))) { set (ss, 1) decr (sn) } if (ss) { return (save (substring (text, s0, sn))) } else { return (text) } } func catnode (root, newnode) { if (root) { set (lastnode, 0) fornodes (root, node) { set (lastnode, node) } addnode (newnode, root, lastnode) } return (0) } func strchop (s, d) { list (slist) set (dn, strlen (d)) if (strlen (s)) { set (n, 1) set (s0, 1) while (sn, index (s, d, n)) { enqueue (slist, save (substring (s, s0, sub (sn, 1)))) set (s0, add (sn, dn)) incr (n) } enqueue (slist, save (cut (s, s0))) } return (slist) } func strjoin (slist, d) { forlist (slist, s, sn) { if (not (strlen (str))) { set (str, s) } elsif (strlen (s)) { set (str, save (concat3 (str, d, s))) } } return (str) } func subnode (root, tag) { if (root) { fornodes (root, node) { if (streq (tag (node), tag)) { return (node) } } } return (0) } func subnodes (root, tag) { list (nodelist) if (root) { fornodes (root, node) { if (streq (tag (node), tag)) { enqueue (nodelist, node) } } } return (nodelist) } func replacenode (newnode, oldnode) { if (newnode) { if (root, parent (oldnode)) { addnode (newnode, root, oldnode) deletenode (oldnode) } } return (0) } func concat3 (x, y, z) { return (concat (x, concat (y, z))) } func cut (s, n) { return (substring (s, n, strlen (s))) } func values (root) { if (root) { set (str, value (root)) fornodes (root, node) { if (not (str)) { set (str, value (node)) } elsif (strlen (value (node))) { set (str, save (concat3 (str, " ", value (node)))) } } return (str) } else { return (0) } } func strremove (s, d) { if (strlen (s)) { while (i, index (s, d, 1)) { set (s, save (concat (trim (s, sub (i, 1)), cut (s, add (i, 1))))) } } return (s) } lifelines-3.0.61/reports/afn_match.ll0000700002540200244210000000270310076661056017721 0ustar prappDomain Users/* * @progname afn_match.ll * @version 1.0 of 1995-08-25 * @author Scott McGee * @category * @output Text * @description * * Find individuals with matching Ancestral File numbers, report matches. * This program is designed to search a database and find individuals with the same AFN's. The output is a report of such matching individuals. Last updated 25 Aug, 1995 by Scott McGee (smcgee@microware.com) */ global(first) proc main (){ table(t) set(first, 1) print("Processing database ") set(cnt, 0) forindi(indi, n){ if(afn, get_afn(indi)){ if(match, lookup(t, afn)){ call found_match(indi, save(afn), match) }else{ insert(t, save(afn), indi) } } incr(cnt) if(eq(cnt, 100)){ set(cnt, 0) print(".") } } } func get_afn(indi){ if(indi){ fornodes(inode(indi), subnode){ if(eqstr(tag(subnode), "AFN")){ return(value(subnode)) } } } return(0) } proc found_match(i2, afn, i1){ if(first){ set(first, 0) "Ancestral File Number match report\n\n" "produced by afn_match.ll version 1.0\n" "by Scott McGee (smcgee@microware.com)\n\n" "Database: " database() "\nDate: " long(gettoday()) "\n\n" "AFN Key1 Key2 Name1\n" "_________________________________________________________________________\n" } afn col(10) key(i1) col(20) key(i2) col(30) name(i1, 0) "\n" } lifelines-3.0.61/reports/ahnenliste.ll0000700002540200244210000004700210565726616020143 0ustar prappDomain Users/* * @progname ahnenliste.ll * @version 6 * @author Jim Eggert * @category * @output Text * @description * * Generate an Ahnenliste, an ancestral report for an individual * ahnenliste - a LifeLines report program to aid in the generation of an Ahnenliste (German ancestral report). Given a person, this generates an Ahnenliste for that person and his/her ancestors. BEFORE YOU RUN THE PROGRAM: Change the routine write_header() to use your submitter tag, name, and address. Version 1, 14 July 1994, by Jim Eggert, EggertJ@verizon.net Version 2, 18 Aug 1998, added HTML Version 3, 17 Feb 1999, added surnames to location list Version 4, 15 Jan 2000, fixed quicksort bug Version 5, 26 Jan 2000, added sorting translation Version 6, 22 Jun 2000, improved handling of intersecting lines */ global(locationsurname_list) global(locationsurname_table) global(i_list) global(i_table) global(a_list) global(g_list) global(ahn_table) global(html) global(sep) global(par) global(br) global(bold) global(unbold) global(gt) global(lt) global(born) global(bapt) global(died) global(burd) global(marr) global(sort_xlat) global(html_xlat) global(ISO8859_xlat) /* write_header writes a little header */ proc write_header(person) { sep if (html) { "

" } "Ahnenliste " autohtml(mysurname(person)) "\n" if (html) { "

" } sep "\n" bold "Proband:" unbold " " autohtml(fullname(person,0,1,80)) br bold "Autor:" unbold " James R. Eggert" par bold "Inhalt:" unbold br if (html) { " Erläuterungen," } else { " Erl\"auterungen," } br " Landschaften," br " Orte," br " Namen" par "\n" if (html) { "Ergänzungen" } else { "Erg\"anzungen" } ", Berichtigungen, Anfragen oder Kommentare werden als\n" "eMail erbeten an:" br if (html) { "Jim Eggert" "(EggertJ@verizon.net)" } else { "Jim Eggert (EggertJ@verizon.net)" } par dayformat(1) monthformat(4) dateformat(0) bold "Stand:" unbold " " stddate(gettoday()) par if (html) { call section("Erläuterungen") } else { call section("Erl\"auterungen") } "Die genealogischen Zeichen wurden durch folgende Satzzeichen ersetzt:" br " " born " -- geboren" br " " bapt " -- getauft" br " " died " -- gestorben" br " " burd " -- begraben" br " " marr " -- verheiratet" br br "Die zweiteilige Nummer vor jeder Zahl setzt sich zusammen auf die\n" "Generation (bezogen auf den Probanden) und der Ordnungszahl im\n" "Kekule'schen System. Nach diesem System ist die Ahnenzahl des Vaters\n" "einer Person immer doppelt so gross wie deren Zahl, die der Mutter\n" if (html) { "um einen Wert höher als die des Vaters. Daraus ergibt sich, daß\n" "(mit Ausnahme eines männlichen Probanden) gerade Ordnungszahlen\n" "immer zu Männern, ungerade immer zu Frauen gehören." par } else { "um einen Wert h\"oher als die des Vaters. Daraus ergibt sich, dass\n" "(mit Ausnahme eines m\"annlichen Probanden) gerade Ordnungszahlen\n" "immer zu M\"annern, ungerade immer zu Frauen geh\"oren." par } "---" gt " Bezugsperson = n, Vater = 2n, Mutter = 2n+1" par call section("Landschaften") "deutsche Gebiete: Hannover (Amt Dannenberg), Schaumburg-Lippe,\n" " Provinz Posen, Westpreussen, Pfalz" br "US-amerikanische Bundesstaate: Illinois, Kansas, Massachusetts,\n" " Minnesota, Nebraska, New Jersey" br "Syrien" par } proc main() { table(sort_xlat) table(html_xlat) table(ISO8859_xlat) call init_xlat() getintmsg(html,"Enter 0 for text, 1 for HTML output:") set(born,"*") set(bapt,"=") set(died,"+") set(marr,"oo") if (html) { set(sep,"
") set(par,"

\n") set(br,"
\n") set(bold,"") set(unbold,"") set(gt,">") set(lt,"<") set(burd,"±") } else { set(sep, "_________________________________________________________________\n") set(par,"\n") set(br,"\n") set(bold,"") set(unbold,"") set(gt,">") set(lt,"<") set(burd,"±") } getindi(person) call write_header(person) table(locationsurname_table) list(i_list) /* holds all root ancestors, just once */ table(i_table) /* lookup mechanism for i_list */ list(a_list) /* ahnentafel numbers for i_list */ list(g_list) /* generation numbers for i_list */ list(s_list) /* child one down in ancestry */ list(work_i_list) list(work_a_list) list(work_g_list) list(work_c_list) list(locationsurname_list) table(ahn_table) /* holds all ancestors once, with ahnentafel numbers */ enqueue(work_i_list, person) enqueue(work_a_list, 1) enqueue(work_g_list, 1) enqueue(work_c_list, 0) /* Traverse ancestry twice, first pass to collect places, surnames, and keys, second pass to produce ancestral lines. */ set(curgen,0) set(done,0) while(person,dequeue(work_i_list)) { set(ahnen,dequeue(work_a_list)) set(gen,dequeue(work_g_list)) set(child,dequeue(work_c_list)) if (not(lookup(ahn_table,key(person)))) { /* only do a person once */ insert(ahn_table,key(person),ahnen) call locations(person) /* test for inclusion of this individual as a root */ set(include,0) if (child) { if (strcmp(soundex(person),soundex(child))) { set(include,1) } elsif (and(female(person),father(child))) { set(include,1) } } else { set(include,1) } if (include) { enqueue(i_list,person) insert(i_table,save(key(person)),ahnen) enqueue(a_list,ahnen) enqueue(g_list,gen) enqueue(s_list,save(mysurname(person))) } /* iterate into working lists */ incr(gen) set(ahnen,mul(ahnen,2)) if (f,father(person)) { enqueue(work_i_list,f) enqueue(work_a_list,ahnen) enqueue(work_g_list,gen) enqueue(work_c_list,person) } if (m,mother(person)) { enqueue(work_i_list,m) enqueue(work_a_list,add(ahnen,1)) enqueue(work_g_list,gen) enqueue(work_c_list,person) } } } call section("Orte") list(index_list) list(trans_locsur_list) call translate(locationsurname_list,trans_locsur_list) call quicksort(trans_locsur_list,index_list) set(prevplace,"zzznowhere") set(prevsurname,"zzznoone") set(prevfirstplace,"zzznothere") set(yearfrom,9999) set(yearto,0) forlist(index_list,index,i) { set(locationsurname,getel(locationsurname_list,index)) list(ls) extracttokens(locationsurname,ls,nls,":") set(location,getel(ls,1)) set(surname,getel(ls,2)) set(years,lookup(locationsurname_table,locationsurname)) if (strcmp(location,prevplace)) { if (strcmp(prevplace,"zzznowhere")) { if (yearto) { " (" if (ne(yearfrom,yearto)) { d(yearfrom) "-" } d(yearto) ")" } br } set(yearfrom,getel(years,1)) set(yearto,getel(years,2)) list(placenamelist) extracttokens(location,placenamelist,nplaces,",") set(name,getel(placenamelist,1)) if (not(strcmp(name,prevfirstplace))) { print("Warning: ambiguous placename initial element: ", name,"\n") } set(prevfirstplace,save(name)) forlist(placenamelist,placename,np) { autohtml(placename) if (lt(np,nplaces)) { if (eq(np,1)) { " - " } else { ", " } } } ": " autohtml(surname) set(prevplace,save(location)) set(prevsurname,save(surname)) } else { if (strcmp(surname,prevsurname)) { ", " autohtml(surname) set(prevsurname,save(surname)) } if (thisyearfrom,getel(years,1)) { if (or(lt(thisyearfrom,yearfrom),eq(yearfrom,0))) { set(yearfrom,thisyearfrom) } } if (gt(getel(years,2),yearto)) { set(yearto,getel(years,2)) } } } if (yearto) { " (" if (ne(yearfrom,yearto)) { d(yearfrom) "-" } d(yearto) ")" } br call section("Namen") list(index_list) list(trans_s_list) call translate(s_list,trans_s_list) call quicksort(trans_s_list,index_list) set(ni,length(index_list)) set(prevname,"zzxxyyzz") set(comma,0) forlist(index_list,index,i) { set(name,getel(s_list,index)) if (strcmp(name,prevname)) { if (comma) { ", " } autohtml(name) set(comma,1) set(prevname,save(name)) } } par /* Second traversal of ancestry, in surname order, but proband first. */ call doline(1) forlist(index_list,index,i) { if (ne(index,1)) { call doline(index) } } } proc section(header) { sep if (html) { "

" } else { "\n" } header if (html) { "

" } par par } proc doline(person_index) { set(person,getel(i_list,person_index)) sep if (html) { "

" } else { "\n" } /* First pass to print out appropriate surnames */ table(prev_surname_table) autohtml(mysurname(person)) insert(prev_surname_table,save(mysurname(person)),1) while (person,father(person)) { if (lookup(i_table,key(person))) { set(person,0) } else { set(s,save(mysurname(person))) if (not(lookup(prev_surname_table,s))) { ", " autohtml(s) insert(prev_surname_table,s,1) } } } if (html) { "

" } "\n\n" /* Second pass to print out detailed information */ set(person,getel(i_list,person_index)) set(gen,getel(g_list,person_index)) set(ahn,getel(a_list,person_index)) call doperson(person,gen,ahn) while (person,father(person)) { incr(gen) set(ahn,add(ahn,ahn)) set(prev_ahn,lookup(i_table,key(person))) /* stop if person is a key... */ if (not(prev_ahn)) { set(prev_ahn,lookup(ahn_table,key(person))) if (eq(prev_ahn,ahn)) { set(prev_ahn,0) } /* or if we did them already */ } if (prev_ahn) { bold if (lt(gen,10)) { "0" } d(gen) " " d(ahn) unbold " " autohtml(fullname(person,0,1,80)) " siehe " set(gen2,ahn2gen(prev_ahn)) if (lt(gen2,10)) { "0" } d(gen2) " " d(prev_ahn) "." br set(person,0) } else { call doperson(person,gen,ahn) } } } /* ahn2gen converts ahnentafel number to generation number */ func ahn2gen(ahn) { set(gen,1) while (gt(ahn,1)) { incr(gen) set(ahn,div(ahn,2)) } return(gen) } proc doperson(person,gen,ahn) { bold if (lt(gen,10)) { "0" } d(gen) " " d(ahn) unbold " " autohtml(mygivens(person)) set(comma,0) if (b,birth(person)) { " " born call doevent(b) set(comma,1) } if (b,baptism(person)) { if (comma) { "," } " " bapt call doevent(b) set(comma,1) } set(nfam,nfamilies(person)) families(person,fam,spouse,fnum) { set(m,marriage(fam)) if (or(m,spouse,gt(nfamilies,1))) { if (comma) { "," } " " marr if (gt(nfamilies,1)) { d(fnum) } if (m) { call doevent(m) } if (spouse) { " " autohtml(mygivens(spouse)) " " bold autohtml(mysurname(spouse)) unbold } set(comma,1) } } if (b,death(person)) { if (comma) { "," } " " died call doevent(b) set(comma,1) } if (b,burial(person)) { if (comma) { "," } " " burd call doevent(b) set(comma,1) } "." br } func mygivens(person) { set(g,givens(person)) if (strlen(g)) { return(g) } return("____") } func mysurname(person) { set(s,surname(person)) if (strcmp(s,"")) { return(s) } return ("____") } proc doevent(event) { list(placelist) extractplaces(event,placelist,nplaces) if (nplaces) { set(place,dequeue(placelist)) if (strlen(place)) { " " } autohtml(place) } set(d,date(event)) if (strlen(d)) { " " } set(lopoff,4) if (eq (index (d, "AFT", 1), 1)) { gt } elsif (eq (index (d, "Aft", 1), 1)) { gt } elsif (eq (index (d, "BEF", 1), 1)) { lt } elsif (eq (index (d, "Bef", 1), 1)) { lt } elsif (eq (index (d, "ABT", 1), 1)) { "c" } elsif (eq (index (d, "Abt", 1), 1)) { "c" } else { set(lopoff,1) } set(d,substring(d,lopoff,strlen(d))) while (eq (index (d, " ", 1), 1)) { set(d,substring(d,2,strlen(d))) } if (m, index (d, "JAN", 1)) { "" } elsif (m, index (d, "FEB", 1)) { "" } elsif (m, index (d, "MAR", 1)) { "" } elsif (m, index (d, "APR", 1)) { "" } elsif (m, index (d, "MAY", 1)) { "" } elsif (m, index (d, "JUN", 1)) { "" } elsif (m, index (d, "JUL", 1)) { "" } elsif (m, index (d, "AUG", 1)) { "" } elsif (m, index (d, "SEP", 1)) { "" } elsif (m, index (d, "OCT", 1)) { "" } elsif (m, index (d, "NOV", 1)) { "" } elsif (m, index (d, "DEC", 1)) { "" } if (gt(m,1)) { trim(d,sub(m,1)) } if (m) { capitalize(lower(substring(d,m,strlen(d)))) } else { d } } proc locations(person) { call one_location(burial(person),mysurname(person),death(person)) call one_location(death(person),mysurname(person),burial(person)) if (female(person)) { families(person,family,husband,fnum) { set(lasthusband,husband) } /* find last husband */ call one_location(burial(person),mysurname(lasthusband),death(person)) call one_location(death(person),mysurname(lasthusband),burial(person)) } families(person,family,spouse,fnum) { call one_location(marriage(family),mysurname(person),0) call one_location(marriage(family),mysurname(spouse),0) } call one_location(baptism(person),mysurname(person),birth(person)) call one_location(birth(person),mysurname(person),baptism(person)) } proc one_location(event,surname,event2) { if (event) { set(loc,place(event)) set(yr,atoi(year(event))) if (not(yr)) { set(yr,atoi(year(event2))) } if (not(yr)) { set(yr,0) } if (strlen(loc)) { set(loc,locfilter(loc)) set(locsur,concat(loc,":",surname)) if (not(lookup(locationsurname_table,locsur))) { list(locsuryears) setel(locsuryears,1,yr) setel(locsuryears,2,yr) insert(locationsurname_table,save(locsur),locsuryears) enqueue(locationsurname_list,save(locsur)) } elsif (yr) { set(locsuryears,lookup(locationsurname_table,locsur)) if (lt(yr,getel(locsuryears,1))) { setel(locsuryears,1,yr) } elsif (gt(yr,getel(locsuryears,2))) { setel(locsuryears,2,yr) } if (eq(getel(locsuryears,1),0)) { setel(locsuryears,1,yr) } } } } } /* remove unneeded location info from location name */ func locfilter(string) { set(string,strfilterstart(string,"near ")) set(string,strfilter(string,"?")) return(string) } /* remove a string at the start of another string, if present */ func strfilterstart(string,start) { if (strcmp(substring(string,1,strlen(start)),start)) { return(string) } return(substring(string,add(strlen(start),1),strlen(string))) } /* remove a string from another string, multiple times if needed */ func strfilter(string,sub) { while (m,index(string,sub,1)) { set(string,concat(substring(string,1,sub(m,1)), substring(string,add(m,strlen(sub)),strlen(string)))) } return(string) } /* translate a string but only if html global is set */ func autohtml(string) { if (html) { return(strxlat(html_xlat,string)) } return(string) } /* translate a whole list via sort_xlat to a sortable list */ proc translate(listin,listout) { forlist(listin,element,i) { enqueue(listout,strxlat(sort_xlat,element)) } } /* translate string according to xlat table */ func strxlat(xlat,string) { set(fixstring,"") set(pos,strlen(string)) while(pos) { set(char,substring(string,pos,pos)) if (special,lookup(xlat,char)) { set(fixstring,concat(special,fixstring)) } else { set(fixstring,concat(char,fixstring)) } decr(pos) } return(fixstring) } proc init_xlat() { /* This initializes the various translation tables. Note that these use the Macintosh encoding scheme! */ /* Translation table for sorting purposes. Note that this is mostly to handle German characters. */ insert(sort_xlat,"š","oe") insert(sort_xlat,"ö","oe") insert(sort_xlat,"Ÿ","ue") insert(sort_xlat,"ü","ue") insert(sort_xlat,"Š","ae") insert(sort_xlat,"ä","ae") insert(sort_xlat,"§","ss") insert(sort_xlat,"ß","ss") insert(sort_xlat,"€","Ae") insert(sort_xlat,"Ä","Ae") insert(sort_xlat,"…","Oe") insert(sort_xlat,"Ö","Oe") insert(sort_xlat,"†","Ue") insert(sort_xlat,"Ü","Ue") insert(sort_xlat,"‘","e") insert(sort_xlat,"ë","e") insert(sort_xlat,"Ø","y") insert(sort_xlat,"ÿ","y") insert(sort_xlat,"Ž","e") insert(sort_xlat,"é","e") insert(sort_xlat,"–","n~") insert(sort_xlat,"ñ","n~") insert(sort_xlat,"Ï","oe") insert(sort_xlat,"œ","oe") /* For the full list of HTML encodings for special characters, see http://info.cern.ch/hypertext/WWW/MarkUp/ISOlat1.html */ insert(html_xlat,"š","ö") insert(html_xlat,"ö","ö") insert(html_xlat,"Ÿ","ü") insert(html_xlat,"ü","ü") insert(html_xlat,"Š","ä") insert(html_xlat,"ä","ä") insert(html_xlat,"§","ß") insert(html_xlat,"ß","ß") insert(html_xlat,"€","Ä") insert(html_xlat,"Ä","Ä") insert(html_xlat,"…","Ö") insert(html_xlat,"Ö","Ö") insert(html_xlat,"†","Ü") insert(html_xlat,"Ü","Ü") insert(html_xlat,"‘","ë") insert(html_xlat,"ë","ë") insert(html_xlat,"Ø","ÿ") insert(html_xlat,"ÿ","ÿ") insert(html_xlat,"Ž","é") insert(html_xlat,"é","é") insert(html_xlat,"&","&") insert(html_xlat,"–","ñ") insert(html_xlat,"ñ","ñ") insert(html_xlat,"Ï","œ") insert(html_xlat,"œ","œ") /* ISO 8859 translation for the GENDEX.txt file */ insert(ISO8859_xlat,"š","ö") insert(ISO8859_xlat,"Ÿ","ü") insert(ISO8859_xlat,"Š","ä") insert(ISO8859_xlat,"§","ß") insert(ISO8859_xlat,"€","Ä") insert(ISO8859_xlat,"…","Ö") insert(ISO8859_xlat,"†","Ü") insert(ISO8859_xlat,"‘","ë") insert(ISO8859_xlat,"Ø","ÿ") insert(ISO8859_xlat,"Ž","é") insert(ISO8859_xlat,"–","ñ") insert(ISO8859_xlat,"Ï","œ") } /* quicksort: Sort an input list by generating a permuted index list Input: alist - list to be sorted Output: ilist - list of index pointers into "alist" in sorted order Needed: compare- external function of two arguments to return -1,0,+1 according to relative order of the two arguments */ proc quicksort(alist,ilist) { set(len,length(alist)) set(index,len) while(index) { setel(ilist,index,index) decr(index) } if (ge(len,2)) { call qsort(alist,ilist,1,len) } } /* recursive core of quicksort */ proc qsort(alist,ilist,left,right) { if(pcur,getpivot(alist,ilist,left,right)) { set(pivot,getel(alist,getel(ilist,pcur))) set(mid,partition(alist,ilist,left,right,pivot)) call qsort(alist,ilist,left,sub(mid,1)) call qsort(alist,ilist,mid,right) } } /* partition around pivot */ func partition(alist,ilist,left,right,pivot) { while(1) { set(tmp,getel(ilist,left)) setel(ilist,left,getel(ilist,right)) setel(ilist,right,tmp) while(lt(compare(getel(alist,getel(ilist,left)),pivot),0)) { incr(left) } while(ge(compare(getel(alist,getel(ilist,right)),pivot),0)) { decr(right) } if(gt(left,right)) { break() } } return(left) } /* choose pivot */ func getpivot(alist,ilist,left,right) { set(pivot,getel(alist,getel(ilist,left))) set(left0,left) incr(left) while(le(left,right)) { set(rel,compare(getel(alist,getel(ilist,left)),pivot)) if (gt(rel,0)) { return(left) } if (lt(rel,0)) { return(left0) } incr(left) } return(0) } /* compare strings */ func compare(string1,string2) { return(strcmp(string1,string2)) } lifelines-3.0.61/reports/ahnentafel.ll0000700002540200244210000000377110324560353020106 0ustar prappDomain Users/* * @progname ahnentafel.ll * @version 1 * @author Wetmore * @category * @output Text * @description * * Generate an ahnentafel chart for the selected person. * * ahnentafel -- Generate an ahnentafel chart */ /* Tom Wetmore */ /* Version 1, 4/27/95 */ proc main () { getindimsg(indi, "Whose Ahnentafel do you want?") if (not(indi)) { return() } "Ahnentafel of " name(indi) "\n\n" print("Computing ahnentafel of ", name(indi), "\n", " Dots show persons per generation\n\n") list(ilist) list(alist) list(glist) table(ktab) enqueue(ilist,indi) enqueue(alist,1) enqueue(glist,1) set(gen, 0) while(indi,dequeue(ilist)) { set(ahnen, dequeue(alist)) set (newgen, dequeue(glist)) if (ne(gen, newgen)) { "Generation " upper(roman(newgen)) ".\n\n" print("\n", roman(newgen), " ") set(gen, newgen) } set(before, lookup(ktab, key(indi))) if (before) { d(ahnen) ". Same as " d(before) ".\n" } else { print(".") insert(ktab, save(key(indi)), ahnen) d(ahnen) ". " name(indi) "\n" if (e, birth(indi)) { " b. " long(e) "\n" } if (e, death(indi)) { " d. " long(e) "\n" } } "\n" if (par,father(indi)) { enqueue(ilist, par) enqueue(alist, mul(2,ahnen)) enqueue(glist, add(gen, 1)) } if (par,mother(indi)) { enqueue(ilist, par) enqueue(alist, add(1,mul(2,ahnen))) enqueue(glist, add(gen, 1)) } } } lifelines-3.0.61/reports/alive.ll0000700002540200244210000001766010076661056017111 0ustar prappDomain Users/* * @progname alive.ll * @version 6 * @author Jim Eggert * @category * @output Text * @description This report program is for finding people living in a given year. This finds who in the database, or among ancestors or descendants of an individual, was likely alive in a certain year. Good for looking at population snapshots like censuses, tax rolls, etc. Version 1, 13 July 1994, by Jim Eggert, eggertj@ll.mit.edu Version 2, 14 July 1994, by Jim Eggert, fixed bug in estimate_byear Version 3, 22 July 1994, by Jim Eggert, fixed another bug in estimate_byear, minor format improvement Version 4, 15 March 1995, by Frank Flaesland, added support for listing places Version 5, 17 March 1995, J.F.Chandler, modified to prune place list Version 6, 27 Aug 1997, by Jim Eggert, fixed bug in print_header() ** SourceForge Versions: ** ** $Log: alive.ll,v $ ** Revision 1.6 2004/07/19 05:54:54 dr_doom ** Merge Vincent Broman Changes to reports ** ** Revision 1.4 2000/11/29 12:17:11 nozell ** Fix typo. ** ** Revision 1.3 2000/11/28 21:39:45 nozell ** Add keyword tags to all reports ** Extend the report script menu to display script output format ** ** Revision 1.2 2000/11/11 17:48:13 pere ** Get this report working. Fixed type problems and handle empty ** place tags without crashing. Add meta information. ** ** */ global(byear) global(byear_delta) global(byear_est) global(byear_est_delta) global(dyear_est) global(dyear_est_delta) global(old_age) global(maximum_age) global(mother_age) global(father_age) global(years_between_kids) global(first_person) global(who) global(of) global(places) proc main() { /* Assumptions for guessing year of birth */ set(old_age,60) /* assumed age at death */ set(maximum_age,120)/* maximum possible age */ set(mother_age,23) /* assumed age of first motherhood */ set(father_age,25) /* assumed age of first fatherhood */ set(years_between_kids,2) /* assumed years between children */ indiset(people) set(first_person,1) getintmsg(who, "Find live persons (0=all, 1=desc, 2=desc and spouses, 3=anc) ") if (who) { getindimsg(of,"of ") } getintmsg(when,"alive in which year?") set(places, 1) getstrmsg(yesno,"List possible places? (y/n) ") if (strlen(yesno)) { if (strcmp(upper(trim(yesno,1)),"Y")) { set(places,0) } } if (eq(who,0)) { forindi(person,pnum) { call alive(person,when) } } else { addtoset(people,of,0) if (or(eq(who,1),eq(who,2))) { set(people,descendentset(people)) } elsif (eq(who,3)) { set(people,ancestorset(people)) } addtoset(people,of,0) if (eq(who,2)) { set(people,union(people,spouseset(people))) } forindiset(people,person,pval,pnum) { call alive(person,when) } } } proc print_person(person) { key(person) col(9) fullname(person,0,1,50) col(61) "(" if (gt(byear_est_delta,1)) { "c" } d(byear_est) "-" if (gt(dyear_est_delta,1)) { "c" } d(dyear_est) ")\n" if (eq(places,1)) { call print_places(person) } } proc print_places(person) { list(place_names) table(places_seen) traverse (inode(person), node, level) { if (eq(strcmp(tag(node), "PLAC"), 0)) { set(p, value(node)) if(lookup(places_seen,p)) { continue() } insert(places_seen, p, 1) extractplaces(node, place_names, num_places) if (gt (num_places,0)) { " " pop(place_names) while (p, pop(place_names)) { ", " p } "\n" } } } } proc print_header(year) { set(current_year,strtoint(year(gettoday()))) if (ge(year,current_year)) { set(future,1) } else { set(future,0) } "________________________________________________________________________\n" "List of " if (eq(who,0)) { "all persons" } elsif (or(eq(who,1),eq(who,2))) { "descendants" } elsif (eq(who,3)) { "ancestors" } if (ge(who,1)) { " of\n" key(of) " " fullname(of,0,1,70) "\n" } else { " " } if (eq(who,2)) { "and their spouses" } if (future) { "who are likely to be" } else { "who are likely to have been" } " alive in " d(year) "\n\n" "________________________________________________________________________\n" "Key" col(9) "Name" col(61) "(born-died)\n" "________________________________________________________________________\n" } proc alive(person,year) { set(dyear_est,0) call estimate_byear(person) if (byear_est) { if (and(le(byear_est,add(year,byear_est_delta)), gt(byear_est,sub(year,maximum_age)))) { set(dyear_est,atoi(year(death(person)))) if (not(dyear_est)) { set(dyear_est,atoi(year(burial(person)))) } else { set(dyear_est_delta,0) } if (not(dyear_est)) { set(dyear_est,add(byear_est,old_age)) set(dyear_est_delta,20) } else { set(dyear_est_delta,1) } if (ge(dyear_est,year)) { if (first_person) { call print_header(year) set(first_person,0) } call print_person(person) } } } } proc estimate_byear(person) { set(byear_est,0) set(byear_est_delta,neg(1)) call get_byear(person) if (byear) { set(byear_est,byear) set(byear_est_delta,byear_delta) } else { /* estimate from siblings */ set(older,person) set(younger,person) set(yeardiff,0) set(border,0) set(this_uncertainty,1) while (and(not(byear_est),or(older,younger))) { set(older,prevsib(older)) set(younger,nextsib(younger)) set(yeardiff,add(yeardiff,years_between_kids)) set(this_uncertainty,add(this_uncertainty,1)) if (older) { set(border,add(border,1)) call get_byear(older) if (byear) { set(byear_est,add(byear,yeardiff)) set(byear_est_delta,this_uncertainty) } } if (and(not(byear_est),younger)) { call get_byear(younger) if (byear) { set(byear_est,sub(byear,yeardiff)) set(byear_est_delta,this_uncertainty) } } } } if (not(byear_est)) { /* estimate from parents' marriage */ if (m,marriage(parents(person))) { extractdate(m,bd,bm,my) } if (my) { set(byear_est,add(add(my,mul(years_between_kids,border)),1)) set(byear_est_delta,add(border,1)) } } if (not(byear_est)) { /* estimate from first marriage */ families(person,fam,spouse,fnum) { if (eq(fnum,1)) { if (m,marriage(fam)) { extractdate(m,bd,bm,my) } if (my) { if (female(person)) { set(byear_est,sub(my,mother_age)) } else { set(byear_est,sub(my,father_age)) } set(byear_est_delta,5) } else { children(fam,child,cnum) { if (not(byear_est)) { call get_byear(child) if (byear) { if (female(person)) { set(byear_est,sub(sub(byear, mul(sub(cnum,1),years_between_kids)), mother_age)) } else { set(byear_est,sub(sub(byear, mul(sub(cnum,1),years_between_kids)), father_age)) } set(byear_est_delta,add(5,cnum)) } } } } } } } if (not(byear_est)) { /* estimate from parents' birthyear */ call get_byear(mother(person)) if (byear) { set(byear_est,add(byear,mother_age)) } else { call get_byear(father(person)) if (byear) { set(byear_est,add(byear,father_age)) } } if (byear) { set(byear_est_delta,5) set(older,person) while(older,prevsib(older)) { set(byear_est,add(byear_est,years_between_kids)) set(byear_est_delta,add(byear_est_delta,1)) } } } } proc get_byear(person) { set(byear,0) if (person) { if (b,birth(person)) { extractdate(b,day,month,byear) } if (byear) { set(byear_delta,0) set(dstring,trim(date(b),3)) if (not(strcmp(dstring,"BEF"))) { set(byear_delta,3) } elsif (not(strcmp(dstring,"AFT"))) { set(byear_delta,3) } elsif (not(strcmp(dstring,"ABT"))) { set(byear_delta,2) } } else { if (b,baptism(person)) { extractdate(b,day,month,byear) } if (byear) { set(byear_delta,1) set(dstring,trim(date(b),3)) if (not(strcmp(dstring,"BEF"))) { set(byear_delta,3) } elsif (not(strcmp(dstring,"AFT"))) { set(byear_delta,3) } elsif (not(strcmp(dstring,"ABT"))) { set(byear_delta,2) } } } } } lifelines-3.0.61/reports/allfam10c.ll0000700002540200244210000000634010076661056017542 0ustar prappDomain Users/* * @progname allfam10c.ll * @version 1.1 * @author Cliff Manis, Jim Eggert * @category * @output Text * @description * * Display all families in the DB, 1 per page. * * allfam10c * by: Cliff Manis , modified by Jim Eggert * Family Report for LifeLines */ proc main() { forfam(fam,fnum) { call fam10c(fam) " " /* this is the form-feed character, octal 014 hex 0C*/ /* You may have to change it for your needs */ } } proc fam10c (fam) { /* getfam(fam) */ dayformat(0) monthformat(4) dateformat(0) set(tday, gettoday()) set (nl,nl()) set(h,husband(fam)) set(w,wife(fam)) col(55) "Date: " stddate(tday) nl col(0) "Family Report (fam10)" nl nl col(0) "HUSBAND: " fullname(h,1,1,50) col(63) "(RN=" key(h) ")" nl nl set(evt, birth(h)) col(0) "Born: " stddate(evt) col(25) "Place: " place(evt) set(evt, marriage(fam)) col(0) "Marr: " stddate(evt) col (25) "Place: " place(evt) set(evt, death(h)) col(0) "Died: " stddate(evt) col(25) "Place: " place(evt) nl nl col(0) "HUSBAND'S FATHER: " name(father(h)) col(63) "(RN=" key(father(h)) ")" nl col(0) "HUSBAND'S MOTHER: " name(mother(h)) col(63) "(RN=" key(mother(h)) ")" nl nl col(0) "WIFE: " fullname(w,1,1,50) col(63) "(RN=" key(w) ")" nl nl set(evt, birth(w)) col(0) "Born: " stddate(evt) col(25) "Place: " place(evt) set(evt, death(w)) col(0) "Died: " stddate(evt) col(25) "Place: " place(evt) nl nl col(0) " WIFE'S FATHER: " name(father(w)) col(63) "(RN=" key(father(w)) ")" col(0) " WIFE'S MOTHER: " name(mother(w)) col(63) "(RN=" key(mother(w)) ")" nl nl col(0) "========================================================================" nl col(0) "# M/F" col(12) "Childrens Names" col(63) "RECORD NUM" nl col(0) "========================================================================" nl children(fam, child, num) { col(0) d(num) col(4) sex(child) col(12) name(child) col(63) "(RN=" key(child) ")" col(4) "Born:" col(13) stddate(birth(child)) col(26) place(birth(child)) nl col(4) "Died:" col(13) stddate(death(child)) col(26) place(death(child)) nl families(child, fvar, svar, num) { if (eq(num,1)) { col(4) "Marr:" col(13) stddate(marriage(fvar)) col(26) if (svar) { name(svar) col(63) "(RN=" key(svar) ")" } else { " " } nl } } if (eq(nfamilies(child),0)) { " " nl } col(4) "---------------------------------------------------------" } } /* End of Report */ lifelines-3.0.61/reports/alllines.ll0000700002540200244210000005525110324560353017604 0ustar prappDomain Users/* * @progname allines.sgml.ll * @version 1.1 * @author Wetmore, Nozell * @category * @output SGML, NROFF * @description * * This program shows all ancestral lines of a specified person * using a pseudo-Register format. * * Output is in nroff or sgml format. This may change to something * more generic. * * Tom Wetmore, ttw@shore.net * beta version, 27 February 1997 * * Marc Nozell, nozell@rootsweb.com * Added sgmldoc (formerly known as linuxdoc), 3 March 1997 */ global(format_type) /* what format? nroff or sgml? */ global(CurID) /* ID values assigned to ancestors */ global(BOLK) /* list of keys of persons who begin lines */ global(BOLG) /* generations of begin line persons */ global(BOLR) /* relationships of begin line persons */ global(CurK) /* current line being processed */ global(CurG) /* generations in current line */ global(CurR) /* relations in current line */ global(AncT) /* table of all ancestors */ global(AncL) /* list of all ancestors */ global(KeyT) /* table of all saved keys */ global(TOLT) /* table of top of line persons */ global(TOLL) /* list of top of line persons */ global(FamT) /* NEED COMMENT TO DESCRIBE THIS!! */ /* User Options */ global(OPat) /* follow paternal lines */ global(ORel) /* show relationships */ /* LineParent -- Return parent in line direction. */ func LineParent (p) { if (OPat) { return(father(p)) } else { return(mother(p)) } } /* OthrParent -- Return parent in non-line direction. */ func OthrParent (p) { if (OPat) { return(mother(p)) } else { return(father(p)) } } /* * main - This is the main routine; it asks the user to identify a person * and then calls the DoIt routine. */ proc main () { getindi(i, "Enter person whose full registry ancestry is wanted.") if (i) { call DoIt(i) } else { print("Program not run.") } } /* * DoIt - This is the top routine of the program; it calls routines to * perform the main algorithmic jobs and then calls a routine to write the * report. */ proc DoIt (i) { set(CurID, 1) table(KeyT) call GetUserOptions() /* * The first step in this program is to compute the list of "bottom of * line" persons. These persons are those that on first sight seem to * require an ancestral line generated in the program's output. Because * multiple bottom of line persons may have the same top of line ancestor * (due to pedigree collapse) it may turn out that there is not a separate * line computed for each bottom of line person. This complication is * dealt with later. The first bottom of line person is always the * starting person, and the first ancestral line shown in the output will * be the parental line of this person. Normally this parental line will * be the paternal line. */ print("Finding all bottom of line persons.\n") call BFirstCreateBOLLists(i)/**/ /* call ShowBOLLists() /*DEBUG*/ /* * The second step is to build an ancestor table that contains all the * information about the ancestors of the key person that is needed in * generating the program's output. The table accumulates the information * needed to deal with pedigree collapse. */ print("Creating table of all ancestors.\n") call CreateAncStructures() /* call ShowAncTable() /**/ /* * The third step is to number the ancestors in the ancestor table in such * a way that on output each numbered ancestor magically has the right * sequential number. */ print("Numbering all ancestors in table.\n") call NumberAncestors() /* call ShowAncTable() /**/ /* * The fourth step is to compute the list of top of line ancestors. Due * to pedigree collapse there may be fewer top of line ancestors than * there are bottom of line persons. Whenever this is the case, there * will be an ancestor somewhere in the line who has more than one child * who are also ancestors (the essence of pedigree collapse). This program * collapses all lines that begin with the same person but lead to * different descendants (who are still all ancestors of the starting * person) */ print("Computing top of line ancestors.\n") call CreateTOLList() /* call ShowTOLList() /**/ /* * The last step is to write the report. */ print("Printing final report.\n") call WriteReport() } /* * GetUserOptions - As you can see, users can't actually select them yet! */ proc GetUserOptions () { getintmsg(format_type, "Enter 0 for nroff, 1 for sgml") set(OPat, 1) /* this version only follows paternal lines */ set(ORel, 1) /* this version shows relationships */ } /* * BFirstCreateBOLLists - This routine creates the beginning of lines lists. * This is the breadth first version of this routine. Following is the * moving front version. I don't know which order is the best. Try them * both and see which you prefer. */ proc BFirstCreateBOLLists (i) { list(BOLK) list(BOLG) list(BOLR) list(TmpK) list(TmpG) list(TmpR) enqueue(TmpK, savekey(key(i))) enqueue(TmpG, 1) enqueue(TmpR, 1) while (k, dequeue(TmpK)) { set(p, indi(k)) set(g, dequeue(TmpG)) set(r, dequeue(TmpR)) if (eq(1, mod(r, 2))) { enqueue(BOLK, k) enqueue(BOLG, g) enqueue(BOLR, r) } set(g, add(1, g)) set(r, mul(2, r)) if (f, LineParent(p)) { enqueue(TmpK, savekey(key(f))) enqueue(TmpG, g) enqueue(TmpR, r) } set(r, add(1, r)) if (m, OthrParent(p)) { enqueue(TmpK, savekey(key(m))) enqueue(TmpG, g) enqueue(TmpR, r) } } } /* * MFrontCreateBOLLists - This routine also creates the beginning of line * lists. This is the moving front version, and is not used in this beta * version. */ proc MFrontCreateBOLLists (i) { list(BOLK) list(BOLG) list(BOLR) list(TmpK) list(TmpG) list(TmpR) enqueue(TmpK, savekey(key(i))) enqueue(TmpG, 1) enqueue(TmpR, 1) while (k, dequeue(TmpK)) { set(g, dequeue(TmpG)) set(r, dequeue(TmpR)) set(p, indi(k)) enqueue(BOLK, k) enqueue(BOLG, g) enqueue(BOLR, r) while (p) { set(g, add(g, 1)) set(r, mul(r, 2)) if (m, OthrParent(p)) { enqueue(TmpK, savekey(key(m))) enqueue(TmpG, g) enqueue(TmpR, add(r, 1)) } set(p, LineParent(p)) } } } /* * CreateAncStructures - This routine creates the AncT table and AncL list. * These are data structures that hold information about all ancestors of * the starting person. This routine operates by considering each bottom * of line person in turn. For each bottom of line person his or her * ancestral line is computed and then the ProcessCurLine routine is * called. It is the ProcessCurLine routine that actually updates the * data structures. * * Note that the only use of the AncL list is in the debugging routine * ShowAncTable. */ proc CreateAncStructures () { table(AncT) list(AncL) forlist(BOLK, k, n) { /* for each bottom of line person ... */ set(g, getel(BOLG, n)) set(r, getel(BOLR, n)) set(p, indi(k)) list(CurK) list(CurG) list(CurR) /* make them empty */ while (p) { /* start with BOL person and follow line back */ push(CurK, savekey(key(p))) push(CurG, g) push(CurR, r) set(g, add(1, g)) set(r, mul(2, r)) set(p, LineParent(p)) } call ProcessCurLine() } } /* * ProcessCurLine - This routine updates the ancestor table and list based * on an ancestral line just computed for a bottom of line person by the * CreateAncStructures routine. This line is stored in the three global * lists CurK, CurG, and CurR, which form the interface between this * routine and CreateAncStructures. This routine processes the line from * the last line ancestor of the bottom of line person to the bottom of * line person. */ proc ProcessCurLine () { set(f, 0) /* f holds the line parent of the current person */ set(k, pop(CurK)) while (k) { set(p, indi(k)) set(g, pop(CurG)) set(r, pop(CurR)) call AddToAncTable(k, g, r, f) /*name(p) " (" d(g) ", " d(r) ") "/*DEBUG*/ set(f, k) set(k, pop(CurK)) } } /* * AddToAncTable - This routine adds information to the ancestor table. * Each table entry is a list with six elements: * 1 Key of person * 2 ID of person * 3 Number of appearances in pedigree * 4 List of generations relative to key person by appearance * 5 List of relationships to key person by appearance * 6 List of children of this person who are also ancestors of key person */ proc AddToAncTable (k, g, r, f) { if (e, lookup(AncT, k)) { /* if person is already in table ... */ setel(e, 3, add(1, getel(e, 3))) /* incr num of appearances */ set(l, getel(e, 4)) enqueue(l, g) /* update list of generations */ set(l, getel(e, 5)) enqueue(l, r) /* update list of relationships */ } else { /* this is the first time this ancestor has been seen */ list(e) /* create new, empty table entry for person */ enqueue(e, k) /* add person's key */ enqueue(e, 0) /* init id to zero */ enqueue(e, 1) /* init num of appearences to one */ list(l) /* create sub-list to hold generations */ enqueue(l, g) /* init sub-list to current generation */ enqueue(e, l) /* add sub-list to table entry */ list(l) /* create sub-list to hold relationships */ enqueue(l, r) /* init sub-list to current relationship */ enqueue(e, l) /* add sub-list to table entry */ list(l) /* create sub-list to hold line descendants */ enqueue(e, l) /* add (empty) sub-list to table entry */ insert(AncT, k, e) /* add new entry to ancestor table */ enqueue(AncL, k) /* add key of person to ancestor list */ } if (f) { /* if not top of line make a child of line parent */ set(d, lookup(AncT, f)) set(l, getel(d, 6)) if (not(inlist(l, k))) { enqueue (l, k) } } } /* * NumberAncestors - This routine numbers the ancestors in the ancestor * table. */ proc NumberAncestors () { forlist(BOLK, k, n) { set(p, indi(k)) while (f, LineParent(p)) { set(p, f) } call NumberLine(key(p)) } } proc NumberLine (k) { set(e, lookup(AncT, k)) if (ne(0, getel(e, 2))) { return() } list(TmpQ) enqueue(TmpQ, k) while (k, dequeue(TmpQ)) { set(p, indi(k)) set(e, lookup(AncT, k)) setel(e, 2, CurID) set(CurID, add(1, CurID)) set(cl, getel(e, 6)) families (p, f, s, n) { children (f, o, m) { if (inlist(cl, key(o))) { enqueue(TmpQ, savekey(key(o))) } } } } } proc CreateTOLList () { table(TOLT) list(TOLL) forlist (BOLK, k, n) { set(p, indi(k)) while (f, LineParent(p)) { set(p, f) } set(s, savekey(key(p))) if (and(nestr(k, s), not(lookup(TOLT, s)))) { enqueue(TOLL, s) insert(TOLT, s, s) } } } proc ShowTOLList () { "START OF LINE LIST --\n" forlist (TOLL, k, n) { name(indi(k)) "\n" } } /* * WriteReport - This routine controls writing a report. Right now this * program has built in knowledge that the report is being generated in * nroff format. This should be changed so that only generic routines * are called out of this routine, making substitution for different report * formats (e.g., LaTeX, HTML) easier in the future. */ proc WriteReport () { call WriteHeading() table(FamT) forlist (TOLL, k, n) { call WriteLine(k) } call WriteTail() } /* * WriteLine - This routine is responsible writing a single line to the * report file. */ proc WriteLine (k) /* k -- key of a line's top of line person */ { call LineTitle(k) set(e, lookup(AncT, k)) list(TmpQ) enqueue(TmpQ, k) while (k, dequeue(TmpQ)) { set(e, lookup(AncT, k)) call WriteLinePerson(e) call WriteChildren(e) forlist(getel(e, 6), c, n) { enqueue(TmpQ, c) } } } proc EmitPara () { if (eq(format_type, 0)) { call nroffPara() } else { call sgmlPara() } } proc EmitLeftSquareBracket () { if (eq(format_type, 0)) { call nroffLeftSquareBracket() } else { call sgmlLeftSquareBracket() } } proc EmitRightSquareBracket () { if (eq(format_type, 0)) { call nroffRightSquareBracket() } else { call sgmlRightSquareBracket() } } proc EmitStartList () { if (eq(format_type, 0)) { call nroffStartList() } else { call sgmlStartList() } } proc EmitEndList () { if (eq(format_type, 0)) { call nroffEndList() } else { call sgmlEndList() } } proc EmitChildItem () { if (eq(format_type, 0)) { call nroffChildItem() } else { call sgmlChildItem() } } proc WriteHeading () { if (eq(format_type, 0)) { call nroffhead() } else { call sgmlhead() } } proc WriteTail () { if (eq(format_type, 0)) { call nrofftail() } else { call sgmltail() } } proc LineTitle (k) { if (eq(format_type, 0)) { call nroffLineTitle(k) } else { call sgmlLineTitle(k) } } proc nroffhead () { ".de CH\n" ".sp\n" ".in 11n\n" ".ti 1\n" "\\h'3n'\\h'-\\w'\\\\$1'u'\\\\$1\\h'5n'\\h'-\\w'\\\\$2'u'\\\\$2\\h'1n'\n" "..\n" ".de P\n.sp\n.in 0\n..\n" /*".po 5\n"*/ ".ll 72\n" ".ls 1\n" ".na\n" } proc sgmlhead () { "" nl() "
" nl() "All Lines" nl() "by Marc Nozell" " " nl() "This shows all ancestral lines of a specified person using a pseudo-Register format." "" nl() "" nl() } proc nrofftail () { " " nl() /* pretty boring... */ } proc sgmltail () { "
" nl() } proc nroffLineTitle (k) { ".P\n.sp 2\nANCESTRAL LINE FROM " upper(name(indi(k))) "\n" ".br\n-----------------------------------------------------\n" } proc sgmlLineTitle (k) { nl()"Ancestral line from " upper(name(indi(k))) "\n" } proc nroffPara () { ".P\n" } proc sgmlPara () { "

\n" } proc nroffLeftSquareBracket () { "[" } proc sgmlLeftSquareBracket () { "[" } proc nroffRightSquareBracket () { "]" } proc sgmlRightSquareBracket () { "]" } proc nroffStartList () { "\n" } proc sgmlStartList () { "\n" } proc nroffEndList () { "\n" } proc sgmlEndList () { "\n" } proc nroffChildItem () { " " } proc sgmlChildItem () { "\n" } /* * WriteChildren - This routine writes out the children for a person in an * ancestral line. */ proc WriteChildren (e) { set(p, indi(getel(e, 1))) set(cl, getel(e, 6)) /* list of child keys also in this line */ families (p, f, s, n) { if (s) { set(u, save(name(s))) } else { set(u, "(_____)") } if (lookup(FamT, key(f))) { call EmitPara() "Children of " name(p) " and " u " listed under " u ".\n" } elsif (gt(nchildren(f), 0)) { call EmitPara() "Children of " name(p) " and " u ":\n" call EmitStartList() children(f, c, m) { if (inlist(cl, key(c))) { set(ce, lookup(AncT, key(c))) call EmitChildItem() d(getel(ce, 2)) " " roman(m) "\n" call shortvitals(c) } else { call EmitChildItem() roman(m) "\n" call middlevitals(c) } } insert(FamT, savekey(key(f)), 1) call EmitEndList() } } } proc shortvitals (i) { name(i) set(b, birth(i)) set(d, death(i)) if (and(b, short(b))) { ", b. " short(b) } if (and(d, short(d))) { ", d. " short(d) } ".\n" call EmitPara() } proc middlevitals (i) { name(i) ".\n" set(e, birth(i)) if(and(e,long(e))) { call EmitPara() "Born " long(e) ".\n" } if (eq(1, nspouses(i))) { spouses(i, s, f, n) { call EmitPara() "Married" call spousevitals(s, f) } } else { spouses(i, s, f, n) { call EmitPara() "Married " ord(n) "," call spousevitals(s, f) } } set(e, death(i)) if(and(e, long(e))) { call EmitPara() "Died " long(e) ".\n" } set(p, 0) } /* * WriteLinePerson - This routine generates the report output for one * person in one of the ancestral lines. This version of the routine * generates output in nroff format. It prints boiler plate vitals * information about the person followed by all notes in the person's * record in the database. This routine does not print the person's * children (see routine >>>>> for this). */ proc WriteLinePerson (e) { set(p, indi(getel(e, 1))) call EmitPara() d(getel(e, 2)) " " name(p) if (ORel) { call EmitLeftSquareBracket() set(c, "") forlist (getel(e, 5), r, n) { c call ShowRel(r) set(c, ", ") } call EmitRightSquareBracket() } ".\n" call EmitPara() set(o, birth(p)) if(and(o, long(o))) { "Born " long(o) ".\n" } if (eq(1, nspouses(p))) { spouses(p, s, f, n) { "Married" call spousevitals(s, f) } } else { spouses(p, s, f, n) { "Married " ord(n) "," call spousevitals(s, f) } } set(o, death(p)) if(and(o, long(o))) { "Died " long(o) ".\n" } set(b, 0) fornotes(root(p), n) { if (not(b)) { call EmitPara() set(b, 1) } n "\n" } } proc spousevitals (s, f) { set(e, marriage(f)) if (and(e, long(e))) { "\n" long(e) "," } "\n" name(s) set(e, birth(s)) if (and(e, long(e))) { ",\nborn " long(e) } set(e, death(s)) if (and(e, long(e))) { ",\ndied " long(e) } set(d, LineParent(s)) set(m, OthrParent(s)) if (or(d, m)) { ",\n" if (male(s)) { "son of " } elsif (female(s)) { "daughter of " } else { "child of " } } if (d) { name(d) } if (and(d, m)) { "\nand " } if (m) { name(m) } ".\n" } /* * ShowBOLLists - This debug routine shows the bottom of line persons as * recorded in the BOLK, BOLG, and BOLR lists */ proc ShowBOLLists () { forlist(BOLK, k, n) { set(g, getel(BOLG, n)) set(r, getel(BOLR, n)) name(indi(k)) " " d(g) " " d(r) " (" call ShowRel(r) ")\n" } } proc ShowCurLine () { set(k, pop(CurK)) set(p, indi(k)) while (p) { set(g, pop(CurG)) set(r, pop(CurR)) name(p) " (" d(g) "," d(r) ") " set(k, pop(CurK)) set(p, indi(k)) } "\n" } /* ShowAncTable -- Debug routine which shows contents of AncT. */ proc ShowAncTable () { forlist(AncL, k, n) { set(e, lookup(AncT, k)) set(p, indi(k)) set(i, getel(e, 2)) set(g, getel(e, 4)) set(r, getel(e, 5)) set(d, getel(e, 6)) k " " name(p) " " d(i) " " forlist (g, j, l) { d(getel(g, l)) " " } forlist (r, j, l) { call ShowRel(getel(r, l)) " " } forlist (d, c, l) { name(indi(c)) " " } "\n" } } proc ShowRel (r) { if (eq(r, 1)) { "s" } if (gt(r, 1)) { list(RelStack) push(RelStack, neg(1)) while (gt(r, 1)) { set(m, mod(r, 2)) set(r, div(r, 2)) push(RelStack, m) } set(r, pop(RelStack)) while (ne(r, neg(1))) { if (r) { "m" } else { "f" } set(r, pop(RelStack)) } } } /* inlist -- See if a string is in a list of strings */ func inlist (l, s) { forlist(l, e, n) { if (eqstr(e, s)) { return(1) } } return(0) } func savekey (k) { if (e, lookup(KeyT, k)) { return(e) } set(k, save(k)) insert(KeyT, k, k) return(k) } lifelines-3.0.61/reports/all_anc_lines.ll0000700002540200244210000003076010076661056020570 0ustar prappDomain Users/* * @progname all_anc_lines.ll * @version 2 * @author Tom Wetmore * @category * @output Text * @description * * report all ancestral lines in a Register-like format * all_anc_lines -- Shows all ancestral lines of a specified person using a pseudo-Register format. The paternal line of the person is shown first; then the paternal line of his/her mother; then the paternal line of his/her paternal grandmother; and so on, in a depth-first manner. A new feature was added to follow maternal lines also. Future option -- breadth first versus depth first coverage -- easy to implement by changing the algorithm that builds dlist from a stack to a queue. by Tom Wetmore, ttw@beltway.att.com version 1, 14 Nov 1995 version 2, 23 Nov 1995 */ global(mlist) /* list of pending key persons */ global(glist) /* generations of pending key persons */ global(stable) /* table of seen key persons */ global(dlist) /* list of final key persons */ global(hlist) /* list of final generations */ global(ilist) /* list of isolated persons */ global(pat) global(depth) global(ftable) /* list of shown families */ global(ptable) /* table of printed persons */ proc main () { getindi(i, "Enter person whose full registry ancestry is wanted.") if (i) { list(menu) enqueue(menu, "Follow paternal lines; or") enqueue(menu, "Follow maternal lines.") set(m, menuchoose(menu, "Select whether to:")) if (eq(1, m)) { set(pat, 1) } else { set(pat, 0) } list(menu) /* enqueue(menu, "Output lines depth-first; or") enqueue(menu, "Output lines breadth-first.") set(m, menuchoose(menu, "Select whether to:")) if (eq(1, m)) { set(depth, 1) } else { set(depth, 0) } */ list(mlist) list(glist) table(stable) list(dlist) list(hlist) list(ilist) table(ftable) table(ptable) call doit(i) } else { print("Program not run.") } } proc doit (i) { call makedlist(i) call genreport() } proc makedlist (i) { enqueue(mlist, i) enqueue(glist, 1) while (p, dequeue(mlist)) { set(g, dequeue(glist)) enqueue(dlist, p) enqueue(hlist, g) while (p) { set(g, add(g, 1)) if (pat) { if (m, mother(p)) { if (not(lookup(stable, key(m)))) { insert(stable, save(key(m)), 1) enqueue(mlist, m) enqueue(glist, g) } } set(p, father(p)) } else { if (f, father(p)) { if (not(lookup(stable, key(f)))) { insert(stable, save(key(f)), 1) enqueue(mlist, f) enqueue(glist, g) } } set(p, mother(p)) } } } } proc genreport () { call nroffhead() forlist (dlist, p, n) { set(g, dequeue(hlist)) if (not(lookup(ptable, key(p)))) { if (pat) { set(q, father(p)) } else { set(q, mother(p)) } if (q) { call showline(p, g) } else { insert (ptable, save(key(p)), 1) enqueue(ilist, p) } } } forlist (ilist, p, n) { "ISOLATED PERSON " name(p) "\n" } } proc showline (p, g) { if (pat) { call showsurnames(p) /*".NL\nPATERNAL LINE OF " upper(name(p)) "\n\n"*/ print(surname(p), " ") } else { ".NL\nMATERNAL LINE OF " upper(name(p)) "\n\n" } list(alist) if (pat) { while (f, father(p)) { push(alist, p) set(p, f) set(g, add(g, 1)) } } else { while (m, mother(p)) { push(alist, p) set(p, m) set(g, add(g, 1)) } } push(alist, p) set(a, pop(alist)) while (a) { set(b, pop(alist)) call dotwo(a, b, g) set(a, b) set(g, sub(g, 1)) } } proc dotwo (a, b, g) { /*".GN\nGENERATION " d(g) "\n\n"*/ ".IN\n" d(g) ". " call longvitals(a) /* show main line person */ insert(ptable, save(key(a)), 1) if (pat) { set(c, mother(b)) } else { set(c, father(b)) } if (pat) { set(d, father(c)) } else { set(d, mother(c)) } if (and(c, not(d))) { call gammavitals(c, a) insert(ptable, save(key(c)), 1) } call dochildren(a, b) if (and(c, not(d))) { call gammachildren(c) } } proc nroffhead () { ".de hd\n'sp .8i\n..\n" ".de fo\n'bp\n..\n" ".wh 0 hd\n.wh -.8i fo\n" ".de CH\n" ".sp\n" ".in 11n\n" ".ti 0\n" "\\h'3n'\\h'-\\w'\\\\$1'u'\\\\$1\\h'6n'\\h'-\\w'\\\\$2'u'\\\\$2\\h'1n'\n" "..\n" ".de IN\n.sp\n.in 0\n..\n" ".de NL\n.br\n.ne 2i\n.sp 2\n.in 0\n.ce\n..\n" ".de GN\n.br\n.ne 2i\n.sp 2\n.in 0\n.ce\n..\n" ".de P\n.sp\n.in 0\n.ti 5\n..\n" ".po 5\n" ".ll 7i\n" ".ls 1\n" ".na\n" } proc dochildren (i, c) { if (c) { set(ckey, save(key(c))) } else { set(ckey, "JUNK") } families (i, f, s, n) { ".P\n" if (s) { set(sname, save(name(s))) } else { set(sname, "(_____)") } if (eq(0, nchildren(f))) { name(i) " and " sname " had no children.\n" } elsif (lookup(ftable, key(f))) { "Children of " name(i) " and " sname " listed under " sname ".\n" /* children(f, k, m) { if (not(strcmp(key(k), ckey))) { ".CH (+) " roman(m) "\n" call shortvitals(k) } else { ".CH \"\" " roman(m) "\n" call shortvitals(k) } } */ } else { "Children of " name(i) " and " sname ":\n" children(f, k, m) { if (not(strcmp(key(k), ckey))) { /*print(name(k), "\n")*/ ".CH (+) " roman(m) "\n" call shortvitals(k) } else { ".CH \"\" " roman(m) "\n" call middlevitals(k) } } insert(ftable, save(key(f)), 1) } } } proc shortvitals (i) { name(i) set(b, birth(i)) set(d, death(i)) if (and(b, short(b))) { ", b. " short(b) } if (and(d, short(d))) { ", d. " short(d) } ".\n" } proc middlevitals (i) { name(i) ".\n" set(e, birth(i)) if(and(e,long(e))) { "Born " long(e) ".\n" } if (eq(1, nspouses(i))) { spouses(i, s, f, n) { "Married" call spousevitals(s, f) } } else { spouses(i, s, f, n) { "Married " ord(n) "," call spousevitals(s, f) } } set(e, death(i)) if(and(e, long(e))) { "Died " long(e) ".\n" } set(p, 0) } proc longvitals (i) { name(i) ".\n" set(e, birth(i)) if(and(e,long(e))) { "Born " long(e) ".\n" } if (eq(1, nspouses(i))) { spouses(i, s, f, n) { "Married" call spousevitals(s, f) } } else { spouses(i, s, f, n) { "Married " ord(n) "," call spousevitals(s, f) } } set(e, death(i)) if(and(e, long(e))) { "Died " long(e) ".\n" } set(p, 0) fornotes(inode(i), n) { if (not(p)) { ".P\n" set(p, 1) } n "\n" } } proc spousevitals (s, f) { set(e, marriage(f)) if (and(e, long(e))) { "\n" long(e) "," } "\n" name(s) set(e, birth(s)) if (and(e, long(e))) { ",\nborn " long(e) } set(e, death(s)) if (and(e, long(e))) { ",\ndied " long(e) } set(d, father(s)) set(m, mother(s)) if (or(d, m)) { ",\n" if (male(s)) { "son of " } elsif (female(s)) { "daughter of " } else { "child of " } } if (d) { name(d) } if (and(d, m)) { "\nand " } if (m) { name(m) } ".\n" } proc gammavitals(a, c) { set(n, nfamilies(a)) set(m, mother(a)) set(d, father(a)) if (or(gt(n, 1), or(m, d))) { ".P\n" name(a) ", " if (or(d, m)) { if (male(a)) { "son of " } elsif (female(a)) { "daughter of " } else { "child of " } } if (d) { name(d) } if (and(d, m)) { "\nand " } if (m) { name(m) } if (or(d, m)) { ",\n" } if (gt(n, 1)) { if (eq(1, nspouses(a))) { spouses(a, s, f, n) { "Married " if (eqstr(key(c), key(s))) { name(s) ".\n" } else { call spousevitals(s, f) } } } else { spouses(a, s, f, n) { "Married " ord(n) "," if (eqstr(key(c), key(s))) { name(s) ".\n" } else { call spousevitals(s, f) } } } ".\n" } } } proc gammachildren (p) { families (p, f, s, n) { if (not(lookup(ftable, key(f)))) { ".P\n" if (s) { set(sname, save(name(s))) } else { set(sname, "(_____)") } if (eq(0, nchildren(f))) { name(p) " and " sname " had no children.\n" } else { "Children of " name(p) " and " sname ":\n" children(f, k, m) { ".CH \"\" " roman(m) "\n" call middlevitals(k) } } } } } proc showsurnames(p) { /*".NL\nPATERNAL LINE OF " upper(name(p)) "\n\n"*/ ".NL\n" list(snames) table(stable) while (p) { if (not(lookup(stable, surname(p)))) { enqueue(snames, save(surname(p))) insert(stable, save(surname(p)), 1) } set(p, father(p)) } set(c, "") forlist (snames, s, n) { c upper(s) set(c, ", ") } "\n" } lifelines-3.0.61/reports/altern.ll0000700002540200244210000000410110076661056017260 0ustar prappDomain Users/* * @progname altern.ll * @version 2.0 * @author Rafal T. Prinke * @category * @output Text * @description * find the longest line of alternating male/female links * v.1.0 Rafal T. Prinke - 14 APR 1997 v.2.0 Rafal T. Prinke - 16 NOV 1999 */ global(who) global(was) global(final) proc main() { set(final,0) list(who) table(was) forfam(f, y) { if(eq(nchildren,0)) { if(husband(f)) { call line(husband(f)) insert(was, key(husband(f)), 1) } if(wife(f)) { call line(wife(f)) insert(was, key(wife(f)), 1) } } } "The longest alternating ancestral lines are: \n\n" while(not(empty(who))) { set(n, dequeue(who)) set(count, 1) d(count) ". " name(n, 0) "\n" while(parents(n)) { set(count, add(count, 1)) if (eqstr(sex(n),"M")) { set(n, mother(n)) } else { set(n, father(n)) } d(count) ". " name(n, 0) "\n" } "\n" } } proc line (x) { if(not(lookup(was,key(x)))) { set(p, x) set(count,1) while(parents(x)) { if (eqstr(sex(x),"M")) { set(x, mother(x)) } else { set(x, father(x)) } set(count,add(count,1)) } if (eq(count, final)) { enqueue(who, p) } if (gt(count, final)) { list(who) enqueue(who, p) set(final, count) } } } lifelines-3.0.61/reports/anc2_ged.ll0000700002540200244210000000567110325560127017444 0ustar prappDomain Users/* * @progname anc2_ged.ll * @version 1.0 * @author Dennis Nicklaus * @category * @output GedCom * @description * make a gedcom file of the ancestors of a set of individuals * */ proc main () { indiset(a) monthformat(4) indiset(b) getindi(i) while (i){ addtoset(a, i, 0) set(i,0) getindimsg(i,"Enter next person to output GEDCOM ancestors of") } set(b,ancestorset(a)) set(b,union(b,a)) call print_header() gengedcom(b) call sour_init() call sour_addset(b) call sour_ged() "0 TRLR\n" } proc print_header() { "0 HEAD\n" "1 SOUR Lifelines\n" "1 DATE " stddate(gettoday()) nl() "0 @SM1@ SUBM\n" "1 NAME " getproperty("user.fullname") "\n" "1 ADDR " getproperty("user.address") "\n" "2 CONT " getproperty("user.email") "\n" } global(sour_list) global(sour_table) proc sour_init() { table(sour_table) list(sour_list) } /* sour_addind() adds the sources referenced for this individual */ proc sour_addind(i) { traverse(root(i), m, l) { if (nestr("SOUR", tag(m))) { continue() } set(v, value(m)) if (eqstr("", v)) { continue() } if(reference(v)) { if (ne(0, lookup(sour_table, v))) { continue() } set(v, save(v)) insert(sour_table, v, 1) enqueue(sour_list, v) } } } proc sour_addset(s) { forindiset (s, i, a, n) { call sour_addind(i) families(i, f, sp, m) { call sour_addind(f) } } } /* sour_ged() outputs the current source list in GEDCOM format */ proc sour_ged() { table(other_table) list(other_list) forlist(sour_list, k, n) { set(r, dereference(k)) traverse(r, s, l) { d(l) if (xref(s)) { " " xref(s) } " " tag(s) if (v, value(s)) { " " v if(reference(v)) { if (ne(0, lookup(other_table, v))) { continue() } if (ne(0, lookup(sour_table, v))) { continue() } set(v, save(v)) insert(other_table, v, 1) enqueue(other_list, v) } } "\n" } } forlist(other_list, k, n) { set(r, dereference(k)) traverse(r, s, l) { d(l) if (xref(s)) { " " xref(s) } " " tag(s) if (v, value(s)) { " " v } "\n" } } } lifelines-3.0.61/reports/ancestors2.ll0000700002540200244210000001317210076661056020066 0ustar prappDomain Users/* * @progname ancestors2.ll * @version 2.0 * @author Wetmore, Cliff Manis * @category * @output Text * @description * * It will produce a report of all ancestors of a person, with * sorted names as output, birth and death dates. * * ancestors2 * * Initial Code by Tom Wetmore, ttw@cbnewsl.att.com * Modifications by Cliff Manis, this is a modification of the * report "ancestors1". * * This report works only with the LifeLines Genealogy program * * version one of this report was written by Tom Wetmore, in 1990, * and it has been modified many times since. * * It will produce a report of all ancestors of a person, with * sorted names as output, birth and death dates. * * It will produce ASCII file output. * */ proc main () { indiset(a) monthformat(4) indiset(b) getindi(i) addtoset(a, i, 0) set(b,ancestorset(a)) namesort(b) "ANCESTORS OF -- " upper(name(i)) " (" key(i) ") " nl() nl() forindiset(b, i, x, n) { col(1) fullname(i,1,0,36) col(38) key(i) col(49) stddate(birth(i)) col(64) stddate(death(i)) nl() } } /* Sample output of report ANCESTORS OF -- ALDA CLIFFORD MANIS (107) BARTH, Johann Ludwig 2243 1730 23 Jun 1770 BIRD, Frances Amanda 377 8 Feb 1845 26 Dec 1898 BIRD, Jacob 783 1760 BIRD, John 551 11 Oct 1795 3 Jul 1889 BIRD, Wife of Jacob 784 BOWERS, Anderson 20 1803 BOWERS, James 52 BOWERS, Martha A. 9 14 Apr 1829 22 Jul 1899 BOYD, Mary 55 1772 BRADSHAW, Jennet 9723 21 May 1772 24 Jan 1824 BRADSHAW, John F. 10033 Mar 1743 30 Sep 1818 CANTER, Cordelia "Corda" F. 39 7 Dec 1869 18 Apr 1960 CANTER, Henry B. 162 1820 CANTER, James H. 80 1847 27 Dec 1937 CARROLL, Joseph 12109 CARROLL, Sarah 9967 CLENDENIN, Agnes "Annie" 10034 May 1748 Aug 1823 CLENDENIN, Isabella 10021 CLENDENIN, John 10133 1704 1797 CORBETT, James 896 CORBETT, John 1122 CORBETT, John Williams 607 CORBETT, Mary Jane 386 9 Oct 1843 2 Nov 1918 COWAN, Christopher Columbus 54 1765 COWAN, Lurina Viney "Vina" 21 1808 COWAN, Samuel 699 COWAN, William 2250 CROCKETT, Mary 771 1780 EUDAILY, Betsy 608 FOSTER, Martha "Patsy" 6906 1810 1870 FOSTER, Thomas 6902 1780 FOSTER, Wife of Thomas 6903 FRANCIS, David 770 1769 1850 FRANCIS, Edward 965 1745 1800 FRANCIS, Mary Elizabeth 549 15 1810 FRANKLIN, Nancy 9703 GRESHAMS, Polly 897 HOUSTON, Janet "Jean" 10134 1797 HOUSTON, John 13239 6 Dec 1769 MANES, Fuller Ruben 45 19 Nov 1902 20 Jun 1980 MANES, Samuel P. 1 1780 Jan 1831 MANES, William Bowers 16 6 Jan 1868 5 May 1933 MANES, William Thomas 8 26 Nov 1828 2 Mar 1907 MANESS, John 3643 1770 MANIS, Amos 548 1805 1840 MANIS, Edith Alberta 105 8 Apr 1914 18 Jun 1992 MANIS, Thomas D.A.F.S. 376 1 Feb 1839 25 Sep 1919 MANIS, William Loyd 220 5 Sep 1872 15 Mar 1946 MCELWEE, Jane 10123 MCMURTRY, Anna 2240 9 Feb 1849 NEWMAN, Aaron 9632 18 Jan 1802 24 Jul 1884 NEWMAN, John 9702 11 Dec 1782 8 Oct 1865 NEWMAN, John Franklin 9617 4 May 1830 18 Sep 1921 NEWMAN, Jonathan 9966 25 Dec 1730 17 May 1817 NEWMAN, Lillie Caroline "Carolyn" 221 13 Jun 1881 29 Sep 1949 RANKIN, Alexander 10178 RANKIN, John 10122 1690 1749 RANKIN, Sinea 9633 7 May 1806 23 Mar 1833 RANKIN, Thomas 10020 1724 1812 RANKIN, Thomas B. 9722 3 Mar 1764 3 Aug 1821 RANKIN, William 10165 REED, Elizabeth 1123 SHRADER, Elizabeth 552 1799 19 Feb 1885 SHRADER, G. Christopher 786 1776 STEWART, George 13237 STEWART, Martha 13238 WEBB, Jesse 2239 1766 25 Mar 1848 WEBB, Mary 787 1789 WHITEHORN, James 2824 1860 WHITEHORN, Martha Marie 81 22 Dec 1846 end of report sample */ lifelines-3.0.61/reports/anniver.ll0000700002540200244210000005401610450764133017443 0ustar prappDomain Users/* * @progname anniver.ll * @version 4.0 * @author Stephen Dum * @category * @output HTML * @description Generate calendar of birth, death, marriage events arranged by the month and day that they occurred. Generates a top level index calendar, with actual events stored in a separate html file for each month. Some properties must be set in your lifelines configuration file for this report to run, see comments at beginning of the report for details. Warning, this report requires lifelines version 3.0.50 or later. by Stephen Dum (stephen.dum@verizon.net) Version 1 March 2003 Version 2 November 2005 Support privitizing data Version 3 December 2005 Do html char set encoding Version 4 June 2006 incorporated mods by Dave Eaton (dwe@arde.com) May 2006 This program was inspired by similar efforts by Mitch Blank (mitch@ctrpnt.com) but without ever seeing the code he used to do a similar thing. Originally this program used getel and setel to access the dates and events lists and to sort them. It ran about 400 seconds on 11850 element lists. Conversations between myself and Perry Rapp about sorting the large lists created by this program led to the sort and rsort functions being added to the report language. This program uses them. Also care was taken to avoid using getel or setel functions on the dates and events lists as random access to very large lists is very slow. With these changes run time dropped to 10 seconds. Before using, there are a few properties that need to be customized for your own environment so add them to your .linesrc ( or for windows lines.cfg) file. You can also set them on the command line (like -Ianniver.htmldir=/tmp/foo) The properties that are looked up are: user.fullname -- name of the database owner user.email -- email address of the db owner anniver.htmldir -- path to the directory to store results in e.g. /home/joe/genealogy/html (program expects a subdir in this directory with the name of the database in it.) anniver.backgroundimage -- path to the background image, no image if not defined. e.g. ../../image/crink.jpg this places image at the same level as /home/joe/genealogy/html privatization: This report respects 2 levels of privatization 1. if a record "RESN confidential" exists on an individual they are skipped (as this report is designed to be shared, this seems like a reasonable default) 2. skip anyone estimated to be living History. Version 2 Add code to allow respecting privatized data. Version 3 switch from baptism() to get_baptism() for wider coverage use translation tables to convert data to properly escaped html. This is very codeset dependent. Version 4 added changes by Dave Eaton (dwe@arde.com) Added "firstyear" that events may be on the calendar Added "includedeath" check to drop deaths if those are not desired Added ability to generate report for descendants of more than one individual Added ability to generate report only for living people (omitting confidential if desired) */ /* customization globals */ char_encoding("ASCII") option("explicitvars") global(base_filename) /* where to store the results */ global(background) /* path of background image relative to final html * location, or "" */ global(hi_bg_color) /* highlighted year background color */ global(lo_bg_color) /* non-highlighted year background color */ global(db_owner) /* name of database owner - from config file */ global(owner_email) /* email of database owner - from config file */ global(justliving) /* should we generate a report only for living people? */ global(privatize) /* should we privatize the data * 0 = display all data * 1 = skip confidential records * 2 = skip confidential and living */ global(withkey) /* should we include key's in the output */ global(cutoff_year) /* 100 years before today */ /* birth >= cutoff_year is about 101 years, * and we consider person living */ global(firstyear) /* earliest year for which entries should be included */ global(includedeath) /* if set, then include the death events on the calendar */ global(month_name) /* names of the months */ global(events) /* list of events to print */ global(dates) /* list of dates of the events */ global(keynames) /* name(s) of the key individuals for this report */ proc main () { /* initialization of globals */ set(hi_bg_color,"\"#ddb99f\"") set(lo_bg_color,"\"#e5d3c5\"") set(db_owner, getproperty("user.fullname")) set(owner_email, concat("mailto:",getproperty("user.email"))) set(background,getproperty("anniver.backgroundimage")) set(base_filename,concat(getproperty("anniver.htmldir"),"/",database(),"/")) if (not(test("d",base_filename))) { print("Error, property anniver.htmldir=",base_filename, ", is not a directory,aborting\n") print("Please read comments at beginning of report about setting properties\n") return() } /* other globals*/ list(month_name) enqueue(month_name,"January") enqueue(month_name,"February") enqueue(month_name,"March") enqueue(month_name,"April") enqueue(month_name,"May") enqueue(month_name,"June") enqueue(month_name,"July") enqueue(month_name,"August") enqueue(month_name,"September") enqueue(month_name,"October") enqueue(month_name,"November") enqueue(month_name,"December") extractdate(gettoday(),day,mon,cutoff_year) decr(cutoff_year,100) set(cs,getproperty("codeset")) if (eqstr(cs,"UTF-8")) { set(srccs,"UTF-8") set(dstcs,"UTF-8//html") } elsif (eqstr(cs,"ISO-8859-15")) { set(srccs,"ISO-8859-15//html") set(dstcs,"UTF-8") } else { print("\nDatabase codeset ",cs," not supported, exiting\n") } /* end of initialization of globals */ getint(justliving,"Enter 1 to include only living people, 0 otherwise") if (justliving) { /* Default the choices which conflict with "justliving" */ set(includedeath,0) /* We want living people, so see if we also want confidental */ getint(noconfidential,"Enter 1 to omit confidential living people, 0 otherwise") if (noconfidential) { set(privatize,1) } else { set(privatize,0) } } else { getint(privatize,"\nPrivatization: 0 print all data; 1 skip confidential records; 2 skip confidential and living") getint(includedeath,"Enter 1 to include deaths on calendar, 0 otherwise") } getint(withkey,"Enter 1 to include keys, 0 otherwise") getint(firstyear,"Enter oldest year to be on calendar, 0 for no limit") getindi(person,"Enter person for whom to find descendants (return for all)") indiset(thisgen) indiset(allgen) list(events) list(dates) list(keynames) set(firstpass,1) /* if a person is entered, the generated list of people include * person and spouse, and all the children of either * and then recursively the people, their spouses and all the children * thereof */ if (person) { while (person) { addtoset(thisgen, person, 0) addtoset(allgen, person, 0) print("Computing descendants of ", name(person), " ") enqueue(keynames,concat(name(person))) set(thisgensize,1) set(gen,neg(1)) while(thisgensize) { set(gen,add(gen,1)) print("adding ",d(thisgensize)," individuals for generation ",d(gen),"\n") indiset(spouse) set(spouse,spouseset(thisgen)) set(thisgen,childset(union(thisgen,spouse))) set(allgen,union(allgen,spouse)) set(allgen,union(allgen,thisgen)) set(thisgensize,length(thisgen)) /* the following check prevents looping if the * database has been corrupted and a parent is listed * as a child of that parent, and diagnoses the fault */ if (eq(length(intersect(allgen,thisgen)),thisgensize)) { set(thisgensize,0) print("Warning child is listed as its own parent\n") forindiset(thisgen,indi,val,i) { print (name(indi)," ") } print("\n") } } if (firstpass) { print ("Total of ") set(firstpass,0) } else { print ("New total of ") } print (d(length(allgen))," individuals",nl()) getindi(person,"Enter next person for whom to find descendants") } /* now generate list of events */ forindiset(allgen,indi,val,i) { if (not(mod(i,100))) { print(".") } call add_indi(indi) } print("\n") } else { print("Traversing all individuals ") forindi (indi, val) { if (not(mod(val,100))) { print(".") } call add_indi(indi) set(max,val) } print (nl(), "Total of ",d(max)," individuals",nl()) } print( d(length(dates))," events generated",nl()) print("sorting data") rsort(events,dates) /* Now print out all the data for each month */ print(nl()) list(daymask) set(dm_day,1) /* last day dealt with */ set(mask,1) /* mask for this day */ set(lastday,-1) set(lastmonth,-1) set(in_day,0) while(length(dates)) { set(val,pop(dates)) set(event,pop(events)) set(month,div(val,1000000)) set(year,mod(val,1000000)) set(day,div(year,10000)) set(year,mod(val,10000)) if (ne(lastmonth,month)) { if (ne(lastmonth,-1)) { if (in_day) { "\n" } call write_tail() setel(daymask,lastmonth,dm) } set(lastday,-1) set(dm,0) set(dm_day,1) set(mask,1) set(m_name, getel(month_name,month)) call openfile(lower(m_name),concat(m_name," Anniversary Dates")) set(lastmonth,month) } if (ne(lastday,day)) { if (ne(lastday,-1)) { if (in_day) { "\n" } } if (lastday,day) { while(lt(dm_day,day)) { incr(dm_day) set(mask,add(mask,mask)) } set(dm,add(dm,mask)) "

" m_name " " d(day) "\n" "\n" } else { /* don't know day, so just generic month */ "

" m_name "\n" "

\n" } set(in_day,1) } "\n" nl() } if (ne(lastmonth,-1)) { if (in_day) { "
" if (year) { d(year) } else { " " } "" nl() "" if (srccs) { convertcode(event,srccs,dstcs) } else { event } "
\n" } call write_tail() setel(daymask,lastmonth,dm) } /* Now print out the calendar page indexing the individual month files */ /* debug print out month masks set(i,1) while(le(i,12)) { set(dm,getel(daymask,i)) print( "Month ",d(i)," ") while(dm) { print( d(mod(dm,2))) set(dm,div(dm,2)) } print(nl()) incr(i) } */ call openfile("annver","Calendar of Anniversary Dates") "

This calendar of anniversary dates lists events" nl() if (firstyear) { "since " d(firstyear) nl() } if (justliving) { "of living people" nl() } "arranged by the" nl() "month and day that they occurred." nl() if (not(includedeath)) { "" nl() } if (length(keynames)) { "
Events listed are for descendants of:" nl() while(length(keynames)) { set(nxtname,pop(keynames)) set(nameout,length(keynames)) nxtname if (nameout) { "," } else { "." } nl() } } "

" nl() "

Click on the month name or any highlighted day to see the events" nl() "for that time.

" nl() "
" nl() "" nl() /* The calendar is arranged with 4 months across * so we need to process 4 months at a time */ list(month_len) enqueue(month_len,31) enqueue(month_len,29) enqueue(month_len,31) enqueue(month_len,30) enqueue(month_len,31) enqueue(month_len,30) enqueue(month_len,31) enqueue(month_len,31) enqueue(month_len,30) enqueue(month_len,31) enqueue(month_len,30) enqueue(month_len,31) list(inds) set(i,0) /* i iterates over 3 chunks of 4 months */ while(le(i,2)) { /* generate the headings */ "" nl() set(j,1) while(le(j,4)) { "" nl() "" nl() incr(j) } "" nl() /* now compute the starting indexes for each month */ set(wk,0) while(le(wk,4)) { /* for each of the 5 weeks in the months */ "" nl() /* start a row in the table */ set(k,0) while(le(k,3)) { /* for each of the 4 months in this line */ set(mon,add(mul(i,4),k,1)) set(m_name,getel(month_name,mon)) set(m_len,getel(month_len,mon)) set(ind,getel(daymask,mon)) set(day,add(mul(wk,7),1)) set(l,1) while(le(l,7)) { /* for each of the 7 days in a week */ /* do a day */ if (gt(day,m_len)) { /* empty square */ "" nl() } elsif(mod(ind,2)) { /* linked square */ "" nl() } else { /* output transparent number */ "" nl() } incr(day) incr(l) set(ind,div(ind,2)) } if (ne(k,3)) { /* add separator between months */ "" nl() } setel(daymask,mon,ind) /* save away latest day mask */ incr(k) } "" nl() incr(wk) } "" nl() incr(i) } "
" nl() set(m_name,getel(month_name,add(mul(i,4),j))) "" m_name "" nl() "
" d(day) "" nl() "" d(day) "
\n" call write_tail() } /* openfile(filename, title_to_use) * open output file and write out header information */ proc openfile(name,title) { set(filename, concat(base_filename,name,".html")) print("Writing ", filename, "\n") newfile(filename, 0) "\n" "\n" "\n\n" "\n" " " title " \n" "\n" "\n" if (eqstr(background,"")) { "\n" } else { "\n" } "

" title "

\n
\n" } /* write_tail() * write out common footer information for file. */ proc write_tail() { "

\n" monthformat(6) "This page was created " stddate(gettoday()) "
\n" "Database maintained by " "\n" db_owner "
\n" "" nl() "\n" } /* add_indi(individual) * check a given individual and see if there are any events to add * at the moment we do birth, death and marriage events. * Additional events can be added here */ proc add_indi(indi) { set(birth_type,0) if (birth,birth(indi)) { set(birth,get_date(birth)) set(birth_type," born") } elsif (birth, get_baptism(indi)) { set(birth,get_date(birth)) set(birth_type," baptized") } set(death_type,0) if (death,death(indi)) { set(death,get_date(death)) set(death_type," died") } elsif (death, burial(indi)) { set(death,get_date(death)) set(death_type," buried") } /* skip confidential records and living people */ if (privatize) { if (confidential(indi)) { return() } /* living - birth, no death, and birth < 101 years ago */ if (and(ge(privatize,2),birth,not(death))) { if (ge(mod(birth,10000),cutoff_year)) { return()} } } if (birth) { /* Make certain that if we only want living people that this is (or at least may be) */ if (not(or(and(justliving,death),and(justliving,lt(mod(birth,10000),cutoff_year))))) { if (withkey) { enqueue(events,concat(name(indi),"(",key(indi),")",birth_type)) } else { enqueue(events,concat(name(indi),birth_type)) } enqueue(dates,birth) } } if (and(includedeath,death)) { if (withkey) { enqueue(events,concat(name(indi),"(",key(indi),")",death_type)) } else { enqueue(events,concat(name(indi),death_type)) } enqueue(dates,death) } families(indi,famly, spouse, cnt) { /* skip confidential families */ if (confidential(famly)) { continue() } if (and(privatize,spouse)) { if (confidential(spouse)) { continue() } } if (justliving) { /* make sure the person is living: no death, birth and birth < 101 years ago */ /* Nope, we know they have died */ if (death) { return() } if (birth) { /* Nope, estimated they would be too old now */ if (lt(mod(birth,10000),cutoff_year)) { return() } } } /* living - birth, no death, and birth < 101 years ago */ if (ge(privatize,2)) { if (and(birth(spouse),not(death(spouse)))) { if (ge(mod(get_date(birth(spouse)),10000),cutoff_year)) { continue()} } } /* to avoid duplication, only enter data * if indi is male, or there is no spouse */ if (or(male(indi),not(spouse))) { fornodes(fnode(famly), node) { if(eqstr(tag(node),"MARR")) { if (spouse) { set(names,concat(name(indi)," and ",name(spouse))) set(keys,concat("(",key(indi),",",key(spouse),")")) } else { set(names,name(indi)) set(keys,concat("(",key(indi),")")) } set(marr,get_date(node)) if (marr) { /* Make sure date is plausible for living or that we don't care */ if (or(not(justliving),ge(mod(marr,10000),cutoff_year))) { if (withkey) { enqueue(events,concat(names,keys," married")) } else { enqueue(events,concat(names," married")) } enqueue(dates,marr) } } } } } } } /* get_date(node) * if event node has a date associated with it return it encoded as * (mon * 100 + day) * 10000 + yr * These values facilitate sorting. */ func get_date(node) { extractdate(node,day,mon,yr) if (mon) { if (ge(yr,firstyear)) { return(add(mul(add(mul(mon,100),day),10000),yr)) } else { /* Nope, this one should not be on the calendar */ return(0) } } return(0) } func confidential(n) { fornodes(n,node) { if (eqstr(tag(node),"RESN")) { if (eqstr(value(node),"confidential")) { return(1) } } } return(0) } func get_baptism(ind) { fornodes(ind,node) { if (index(" BAPM BAPL CHR CHRA ",concat(" ",upper(tag(node))," "),1)) { return(node) } } return(0) } lifelines-3.0.61/reports/bday_cover.ll0000700002540200244210000001327310327604315020114 0ustar prappDomain Users/* * @progname bday_cover.ll * @version 1 of 1994-11-02 * @author Andrew Deacon * @category * @output Text * @description A novelty report that lists on which days of the year people were born and how many people share the same birthday. All valid birthdays are considered. A valid birthday is one where the extracted birthday, performed using extractdate(), has a month in the range 1-12 and a day within that month. This program works only with LifeLines. The output is not sorted. The following are examples of how to sort the output using UNIX sort: # sort by frequency sort +2n +0M bday.out sort +2nr +0M bday.out # sort by month sort -M bday.out */ global(julian) global(daysinmonth) proc main () { table(day_counts) list(day_list) /* Formats/modes for date functions */ monthformat(3) dayformat(1) dateformat(1) set(julian, 0) /* change to use Julian dates */ /* Initialize counters */ set(totaldays, 0) set(totalmonths, 0) set(totalbirths, 0) /* Iterate over whole database */ forindi (indi, num) { /* if birthday recorded for individual */ if (bth, birth(indi)) { /* Extract birthday for individual */ extractdate(bth, birthday, birthmonth, birthyear) call get_days_in_month(birthday, birthmonth, birthyear) /* if valid birthday */ if (and(gt(birthday, 0), le(birthday, daysinmonth))) { /* Extract the month name and day */ set(bday, concat(substring(stddate(birth(indi)),1,6)," ")) /* if existing birthday found - just increment */ if(nmatch, lookup(day_counts, bday)) { set(nmatch, add(nmatch, 1)) } /* else new birthday - insert */ else { set(totaldays, add(totaldays,1)) enqueue(day_list, bday) set(nmatch, 1) } insert(day_counts, bday, nmatch) set(totalbirths, add(totalbirths,1)) /* Extract the month name */ set(bmon, concat(substring(stddate(birth(indi)),1,4),"**")) /* if existing birth month found - just increment */ if(nmatch, lookup(day_counts, bmon)) { set(nmatch, add(nmatch, 1)) } /* else new birth month - insert */ else { set(totalmonths, add(totalmonths,1)) enqueue(day_list, bmon) set(nmatch, 1) } insert(day_counts, bmon, nmatch) } } } /* Write report to file - use Unix sort to sort output! */ "Distribution of birth days\n\n" "Month & day Frequency\n\n" forlist(day_list, bday, num) { bday set(nmatch, lookup(day_counts, bday)) col(sub(25, strlen(d(nmatch)))) d(nmatch) "\n" } "Total birthdays in database: " d(totalbirths) "\n" "Total days (out of 366) : " d(totaldays) "\n" "Total months (out of 12) : " d(totalmonths) "\n" } proc get_days_in_month(birthday, birthmonth, birthyear) { /* code from a routine in "dates" by Jim Eggert */ /* procedure sets global variable daysinmonth */ set(daysinmonth, 31) if (or(le(birthmonth, 0), gt(birthmonth, 12))) { set(daysinmonth, 0) } elsif (or(or(eq(birthmonth, 9), eq(birthmonth, 4)), or(eq(birthmonth, 6), eq(birthmonth, 11)))) { set(daysinmonth, 30) } elsif (eq(birthmonth, 2)) { if (and(eq(mod(birthyear, 4), 0), or(julian, or(ne(mod(birthyear, 100), 0), eq(mod(birthyear, 400), 0))))) { set(daysinmonth, 29) } else { set(daysinmonth, 28) } } else { set(daysinmonth, 31) } } /* Sample output: sorted by sort +2nr +0M sample.output and then edited Distribution of birthdays Total birthdays in database: 374 Total days (out of 366) : 236 Total months (out of 12) : 12 Month & day Frequency AUG 12 6 SEP 12 5 FEB 10 4 MAR 03 4 APR 12 4 JUN 17 4 JAN 06 3 JAN 18 3 JAN 29 3 ........ */ /* Below is a simple C program hack to check if your values are similar to those generated randomly by the program. Extract the program from these comment to compile and execute. Change the RSEED to do different tests; change the ITERATIONS to vary accuracy. Can also change the NUM_DAYS_REQUIRED to the value obtained for your database and check if the people required is similar. #define RSEED 1576 #define NUM_DAYS 365 #define NUM_DAYS_REQUIRED NUM_DAYS #define ITERATIONS 2000 #define FALSE 0 #define TRUE 1 static int days[NUM_DAYS]; static int num_got; static int running_total; int get_day() { return rand() % NUM_DAYS; } do_it() { int i; int j; int r; for (i = 0; i < NUM_DAYS; i++) { days[i] = FALSE; } num_got = 0; i = 0; while (num_got < NUM_DAYS_REQUIRED) { i++; r = get_day(); if (!days[r]) { days[r] = TRUE; num_got++; } } printf("Required %d people to cover %d days.\n",i, NUM_DAYS_REQUIRED); running_total = running_total + i; } main() { int i; running_total = 0; srand(RSEED); for (i = 0; i < ITERATIONS; i++) { do_it(); } printf("Average was %d.\n",(int)(running_total/ITERATIONS)); } */ lifelines-3.0.61/reports/bias.ll0000700002540200244210000001760510327604315016720 0ustar prappDomain Users/* * @progname bias.ll * @version 1.4 * @author Chandler * @category * @output Text * @description Ever notice that certain families seem to have all boys or all girls? Sometimes five or six in a row of all the same sex? Is this a mere statistical fluctuation, or is something special happening? This program gives statistics for male vs female births. Compute sex bias based on previous births Version 1.3 - 1993 Aug 23 - John F. Chandler Version 1.4 - 1994 Jul 19 (requires LL 3.0 or higher) Ever notice that certain families seem to have all boys or all girls? Sometimes five or six in a row of all the same sex? Is this a mere statistical fluctuation, or is something special happening? This program gives statistics for male vs female births. First, it tabulates the number of males and females next born after each possible proportion of previous births in the same family. In particular, it gives the sex tally of first-borns (where the proportion of previous births is 0 males and 0 females), then the tally for second-borns where the first child was a female (0+1), and so on. Any combination that doesn't actually occur in the database is skipped in the report (for example, if no family is found with more than 3 sons, the tallies for 3+0, 3+1, and so on would all show a total of 0 males, and there would be no tallies listed for 4+0, 4+1, and so on). Children of unknown sex are not included in these statistics. The program next prints out the relative excess of male births (typically a positive value) over the nominally expected 50%. For many files, there is a tendency to include incomplete families with only one known child; for this reason, "only" children are excluded from these statistics. Also, the male excess is computed for two different subsets of the children: (A) the set of all children not born last, and (B) the set of all children not born first. For both of these, there is also a measure of the variability of the sex ratio to put the percentages in perspective. In addition, the program prints out the correlation between the sex ratio for children already born into a family and the likelihood of getting a male (or female) as the *next* child. If the sample is unbiased, and if the sex of each child is truly random, this correlation should be 0. It also tallies the fraction of births matching the sex of the previous birth in the same family (again, excluding any children of unknown sex). These results are printed out for a succession of increasingly restricted cases: first, for all births of non-first-borns; then, for births preceded by two-in-a-row of the same sex; then, for three-in-a-row; and so on. Bug: combinations with more than 9 sons or more than 9 daughters are not listed properly. This program works only with LifeLines. */ global(maxcount) /* maximum attained runcount */ global(nextsex) /* sex of next offspring in family */ global(prevsex) /* sex of previous offspring in family */ global(runcount) /* number of offspring so far in family */ /* Square Root function. */ func sqrt(x) { set(sqrtval,0) if(gt(x,0)) { set(sqrtval,1) set(approx,1) set(y,4096) while(le(y,x)) { /* coarse grid */ set(approx,y) set(sqrtval,mul(sqrtval,64)) set(y,mul(y,4096)) } set(y,mul(approx,4)) while(le(y,x)) { /* fine grid */ set(approx,y) set(sqrtval,mul(sqrtval,2)) set(y,mul(y,4)) } set(count,0) while(and(ne(y,sqrtval),lt(count,9))) { set(y,div(x,sqrtval)) set(sqrtval,div(add(y,sqrtval),2)) set(count,add(1,count)) } } return(sqrtval) } proc accstep(list) { set(x,1) while(le(x,runcount)) { setel(list,x,add(1,getel(list,x))) set(x,add(1,x)) } } proc accum(samsex,difsex) { if(gt(runcount,0)) { if(strcmp(nextsex,prevsex)) { call accstep(difsex) set(runcount,0) } else { call accstep(samsex) } } set(prevsex,nextsex) set(runcount,add(1,runcount)) if(gt(runcount,maxcount)) {set(maxcount,runcount)} } proc main () { list(males) list(fems) list(samsex) list(difsex) set(totmales,0) set(totfems,0) set(onlymales,0) set(onlyfems,0) forfam (family, num) { set(count,0) set(runcount,0) children(family,child,fnum) { set(nextsex,sex(child)) if(not(strcmp(nextsex,"M"))) { call accum(samsex,difsex) if(gt(count,0)) { set(totmales,add(1,totmales)) setel(males,count,add(1,getel(males,count))) } else {set(onlymales,add(1,onlymales))} set(count,add(count,10)) } elsif(not(strcmp(nextsex,"F"))) { call accum(samsex,difsex) if(gt(count,0)) { set(totfems,add(1,totfems)) setel(fems,count,add(1,getel(fems,count))) } else {set(onlyfems,add(1,onlyfems))} if(gt(9,mod(count,10))) {set(count,add(count,1))} else { print("More than 9 daughters\n") } } } } /* Initialize statistics */ set(tot,add(totmales,totfems)) set(count,1) set(nsample,0) set(sumnfract,0) set(sumpfract,0) set(sumsqnfract,0) set(sumsqpfract,0) set(prodfract,0) set(nrecs,0) "Previous\nbirth Next\nrecord birth\nMF M F\n" "00" col(sub(13,strlen(d(onlymales)))) d(onlymales) col(sub(20,strlen(d(onlyfems)))) d(onlyfems) " (excluded from statistics)\n\n" while(lt(count,100)) { set(nmales,getel(males,count)) set(nfems,getel(fems,count)) if(or(nmales,nfems)) { set(nrecs,add(1,nrecs)) if(lt(count,10)) { "0" } d(count) col(sub(13,strlen(d(nmales)))) d(nmales) col(sub(20,strlen(d(nfems)))) d(nfems) "\n" set(nsample,add(nsample,1)) set(pboys,div(count,10)) set(pgirls,mod(count,10)) set(weight,add(nmales,nfems)) set(p,add(pboys,pgirls)) /* scales: pf-100, sqpf-10000, nf-100, sqnf-10000, prod-10000 i.e., express fractions as percent This makes integer arithmetic acceptable. Note that pfract is too small, on average, by 0.5, etc. */ set(pfract,div(mul(100,sub(pboys,pgirls)),p)) set(wtpfr,mul(weight,pfract)) set(sumpfract,add(sumpfract,wtpfr)) set(sumsqpfract,add(sumsqpfract,mul(pfract,wtpfr))) set(wtnfr,mul(100,sub(nmales,nfems))) set(nfract,div(wtnfr,weight)) /* set(sumnfract,add(sumnfract,wtnfr)) -- use grand difference */ set(sumsqnfract,add(sumsqnfract,mul(nfract,wtnfr))) set(prodfract,add(prodfract,mul(wtnfr,pfract))) } set(count, add(count,1)) } "Total:" col(sub(13,strlen(d(totmales)))) d(totmales) col(sub(20,strlen(d(totfems)))) d(totfems) "\n" d(nrecs) " birth combinations found\n" d(tot) " 'next' individuals (excluding firstborns)\n\n" /* Make approximate corrections for roundoff errors */ set(sqcorr,mul(50,sub(totmales,totfems))) set(sumnfract,mul(100,sub(totmales,totfems))) set(sumsqnfract,add(sumsqnfract,sqcorr)) set(procfract,add(prodfract,sqcorr)) set(sumpfract,add(sumpfract,div(tot,2))) set(sumsqpfract,sub(add(sumsqpfract,sumpfract),div(tot,3))) set(sumsqpfract,sub(sumsqpfract,div(mul(sumpfract,sumpfract),tot))) set(sumsqnfract,sub(sumsqnfract,div(mul(sumnfract,sumnfract),tot))) set(prodfract,sub(prodfract,div(mul(sumpfract,sumnfract),tot))) set(rssp,sqrt(sumsqpfract)) set(rssn,sqrt(sumsqnfract)) set(correl,div(mul(div(prodfract,rssp),100),rssn)) set(rmsp,sqrt(div(sumsqpfract,tot))) set(rmsn,sqrt(div(sumsqnfract,tot))) "Male excess of previous births= " d(div(sumpfract,tot)) "% +/- " d(rmsp) "%\n" "Male excess of next births = " d(div(sumnfract,tot)) "% +/- " d(rmsn) "%\n" "Correlation between previous and next = " d(correl) "%\n" set(count,1) "\nFraction of births that match (in sex) a run of previous births in the" "\nsame family. Children of unknown sex ignored in this tabulation.\n" "\nRun" col(sub(13,5)) "Total" col(sub(25,9)) "Matching" "\nLength" col(sub(13,5)) "Cases" col(sub(23,5)) "Cases" col(sub(29,1)) "%\n" while(le(count,maxcount)) { set(samesex,getel(samsex,count)) set(diffsex,getel(difsex,count)) set(allsex,add(diffsex,samesex)) if(gt(allsex,0)) { d(count) col(sub(13,strlen(d(allsex)))) d(allsex) col(sub(23,strlen(d(samesex)))) d(samesex) set(percent,d(div(mul(100,samesex),allsex))) col(sub(29,strlen(percent))) percent "\n" } set(count,add(1,count)) set(birth,"births") } } lifelines-3.0.61/reports/bib2html.c0000700002540200244210000000315410076661056017320 0ustar prappDomain Users#include /* bib2html.c. By Dennis Nicklaus nicklaus@fnal.gov, July 1998. Converts the bib.tex bibliography file output by the book-latex lifelines report into an HTML file, which is suitable for use as the bibliography file referenced by the HTML output of the html.dn report. Compile this simply as cc -o bib2html bib2html.c Then run it as a filter (assuming your file/database name is "dad"): bib2html < dad-bib.tex > dadbib.html Things will be a lot nicer if you first sort your bib.tex file by source number, something like: sort -n -t S -k 2 < dad-bib.tex > bibsort and then run it (bibsort) through bib2html This simple filter is by no means completely robust. You might have things in your bibliography that will confuse it. (Other LaTex commands, e.g.) It can handle {\em text} constructs, but that is about all. Ya' get what ya' pay for, I guess. */ main() { char c,word[80],*cptr; printf("\n
\n"); while ((c=getchar()) != EOF){ if (c== '\\'){ c=getchar(); if (c== 'b'){ /* then it is a new bibitem */ while ((c=getchar()) != '{'); /* go to bracket opening bibnumber */ cptr = word; while ((c=getchar()) != '}'){ *cptr =c; cptr++; } *cptr = '\0';/* end of bibitem name/number */ printf("\n
%s ",word,word); } else{ if (c== 'e'){ /* then it had better be \em */ c=getchar(); printf(" "); } } } else if (c == '}') printf(""); else if (c == '{'); /* ignore it */ else putchar(c); } printf("
\n"); } lifelines-3.0.61/reports/bkdes16-1.ll0000700002540200244210000000332210076661056017374 0ustar prappDomain Users/* * @progname bkdes16-1.ll * @version 1.0 * @author Wetmore, Manis * @category * @output Text * @description * * It will produce a report of all descendents of a person, * and is presently designed for 16 pitch, HP laserjet III. * This report produces an ASCII file, in output format. * * bkdes16-1 * * Code by Tom Wetmore, ttw@cbnewsl.att.com * Modifications by Cliff Manis * * This report works only with the LifeLines Genealogy program * * version one of this report was written by Tom Wetmore, in 1990, * and it has been modified many times since. * */ proc main () { set (nl,nl()) getindi(indi) col(10) "Report by: Cliff Manis MANIS / MANES Family History P. O. Box 33937 San Antonio, TX 78265-3937 " nl() col(10) "Phone: 1-512-654-9912" nl() col(10) "Date: 27 Jun 1992" nl() nl() col(10)"DESCENDANTS OF: " name(indi) nl() nl() call pout(0, indi) } proc pout(gen, indi) { col(10) print(name(indi)) print(nl()) set(ndots, 0) while (lt(ndots, gen)) {". " set(ndots, add(1,ndots))} "* " name(indi) if (e, birth(indi)) {", b. " long(e) } nl() col(10) spouses(indi,sp,fam,num) { set(ndots, 0) col(10) while (lt(ndots, gen)) {" " set(ndots,add(1,ndots))} " m. " name(sp) nl() } set(next, add(1,gen)) if (lt(next,15)) { families(indi,fam,sp,num) { children(fam, child, no) { call pout(next, child) } } } } /* end of report */ lifelines-3.0.61/reports/boc.gif0000700002540200244210000001661507612400727016707 0ustar prappDomain UsersGIF89a²àÔ/BB9ih\~røðÁôì¾ìä¸âÛ°µ¯USI‘…×Χǿ›#"¡Ÿ˜31,Éò œdø//¢11øXX¦VV÷ŠŠçççØØØÌÌÌÁÁÁ²²²!ù ,²àû !Ždižhª®lë¾E,¿tmßx®çóá†ÙnH,©˜‘ ˆ`@H ‚ȬvË%ʼnäCvDä„ÐÀvßðx«VÔ„G‡³áp:h nrˆ‰\ w •}–} c ŒŠ ¡;Œ ª˜¬– ž¢µ¶s ± ª”“¾”½«“²´·ÉÊAj©½¿ÂÓÓÇŸËÚŠÍ Ôáâ½Æ‡Ûé]tÎàÑÒãâ ÙêøHŒ ßÓ•«ñÄ=8Åà^¾ƒ£p0韰†À®"ð2„o` @ªV1I\Õášû½Œ(iСH@Ã?­*ñ±$ñ?)sÎi@@Ÿ?öÌ” s˜¿j<€€À Î§A8“t+?BPYàO4a<Ø9 µlž ú ³!ÑriBP@`¨Ì¤Î85›‘Åj=öúfÉ4ˆ!tÀÔ˽|vƒà`ÏZVý]ÚÐáb2 æ7 òÓ >„®Êž¯¢?«Öà .šÆX€ßµI/ŽùsƒÙdº6¶ýÀLÓÝ)§V .|èÌë•LÉV@ýÁƒô Bç}@@eàÁƒþl‹½Ã£Ï¼_@ßÙñùèDjy­e?ØÉT‰c ûPÖ“wô  è…ßAt˜ÇV˜ù‡Õ…D]7Z‚(E²@ö`2Œ0ØP˜q XŠ@µVI}çÄdx¦Ús#ªSÀ_0ö—¢kÍD VóÙñÍ dÁ|°:9*ƒn¬a6 é‹m Ÿ0 äPˆQ†Ò ƒ¬HÝeIIÓ€,Àà, ˆ¹$™œ‚cšË(ä@›+V˜^–C­òÇÐÓ€ž{V MZ„& ˆ¬¤¡Â5ä­¨È7J.YÁ©“N €,Pbª&AÀ©®õÏ]Þ™‚Á˜’¦šjf&p©«qtk¡{Ôê¢+16û¯½ú:é KìÝ8ƒJ¡†hjÁdVAÒ¦J­^ûj;ÜVw!€~بþŠnº”V¤›»Ü0Àà̹9!mzp/ºç6|.¿¬ú¤µkQ@c`·êaâ­.Pà°Ãüë@!ÃÊ,C–€1 pЬ]wiò#?œnŸÜ—ò,p0ÐÀÑ  DÐXÜ6h¼­i¦"ƒàœ3¿ëŠ÷s3 Ð@]zH™1Äb† °@ x"ÃEÂ1aÔ¨KÈ9ï+m“ü»õÛ 4Q ˜!…Vž˜t5ÐÔšmì&ÝYbûsÕW§Ûä,ç¨(€FÙså‘âf®PØeGe °€! ˜ãÁ®=ä’X`>2¿«ž“òçaÐØ“Æt{üb€j=`$! èÔ‹S÷tw‹¼»´}ÖãîÛMÐÁPî qWÏ™Ít¨ÔmÕNxXM2öÕbª h·†$ÃÌ‘CÀ0Þ‹214ćcrŸ¢0ëÍÏWÔ@»ðó…0|n‰I8ÿ±Â%wSuªƒº .ª™óU¥ü™0ÁHXú ŒD"±î*2BD9Dw„)ÂTõŽ‚Ýx€)pÿ ȉ ¼¡ô<æŒø,ü§[‰êŸZ¦–;ùéìWjhƒi\¨Ä²l|·*¥Ôq@èáÁ8èF.ê®aô€ÖÊB‡0(è‰C/ÿ±±|àÃmpŲ?*¢õ6­uNŒh@@5O|‡ÄaC+uÊ4tãr@¿ë¥js§iÄÝ"¡EWc|ƒ¼ÍгÆZ’ω\O1ô'«Ðq˜+úÎRLáÀ/J€g{ÌðÇߌ6·,_û>h—DzŠf |ÍO´b¡,FF³ƒŽ‰Gu}c‚Û0Ö8iíÁþ³)Z«ÍfacÔœJ'aÀÜ–27­R˜ã` ¶¸ Òö)ÛÌ$ꙃ lþLáɶï}íIíœîZ™ìo¨%0ó`Àß.vsŽî~¶9µá~µ{Í™c7zP5…÷œjªpñC­2ÁŨ†3XÁÛéEªÝûZÖ|j^ãFx¹‰î«6<¤¥lû8kjÊÁº R©v—q¦ºâäÐÐq‚‰8ƒšæ0Ž/Œ!Ü¢(¨@C—0*å}sæä¥szžÀ¶Ík€‡¼£ªžãt[äÜ9zk˜K?¬j¯ÓòªC†‡æ…Ü"Ê×b7CîöàGAáe_Oê©Aut©;ò%¢¦îЩËfÚ´¼Q —ùŒU[Í^†A=ñ÷µÃ 6!v§æ¹¾xrË=ÝíNø¨ÙÌrEu)‡°ôüá-«W„ÛEkÛ0öTœ¶ñQg·©ßœVÓ«^ÐL·ŽjaA•:ª˜æW–MÂm%Œ jÉ'MKÝ¢jµû¨â©žú½¶ü·ÀFñdCú+èåRÜî],¸UDÊFØ”«Êß'_å¨''†vod É5TÈçWïW^œÁ%ùóÂr Sâr0b¥€lÕå|-·Eb|ÅçH¡¢C r)–0ˆò}„Á~YÖšW,Ø× ˆm«u ÊQT°v< whÂ|ð•V$—Xd0f¿lÝ"w2{† ηÀxÀ"æ7KùG\æõXÁ?Xp¤MFRÀõâ&RHTå€0¦`)uÅ4R#tñUIÑ%Â>ZeõdlÝZ3·jjGV„ãkÔ€".M÷sH `ue±†ˆü t‡r‰fnGj .Ê3:ŸÁY´gr†ÂnVå€ÎÐ3ÜVã‰ÈÑŠ¿Ápä§j±}OÖxX%€ØŠ0^ÓS%øjÚÄ(]²QU ÓŠÈhdQ¶m* ÷I:øZª—jŽÁ:È(þDC´r‹F8VN°çŠEpÈx©¶vŽW_î5xíwOõb'ˆq”’æ)sPL8PƒBÅÂ刌“L­q™¸t*ˆp`'¬XŽ‘P]š1—?XR BVj€2âØuøÛArgFT…çP¨|¢òñXŽ»ˆx¢Dˆ£8BóÑSh bD"±Ã‘­èj6‹üiKÓa%:'YŽ€T_éxSRÈSvH† %Ra“ÈX 4’ã'zL×€ é!AÉ‘ÀHsW&GL‘e<%›Â™¢PÙŠ@2’LJÍb[ •ÀMéaTE/áÔ&2’ K4†‘ªˆÚ±–­ˆÞ”&WacˆÉ–“,£xUW/òQ‘=E# Ð „©Š…‘‰Œßc:´Ò—NÐ!t9š©˜°e0—Y(¢™©I#wù8 Å{¬i“ôЛôP—»‰1ô}±‰™³¹€œe):eƒ¸™POœÒ9B¹‹Æ’²9›<µ‰sécÖ—üSBäYžLD›™¹=58­Ãn“1Xžô¹›¸1g98 =””©ù×@:UpᙢYŸj“÷iï i}‰œÝgAð™ëà†z¡å˜>'2qÑKÝ¡œú“6à8BÐö‡¡( ¡Äã…Fc(0(Z¢Ìô2)Š¢ßc‡ Ò¨T22 @£:qŒ7ZŸéÃfXy½xó1P}C¡¢@ŽEJK¡Q É¢ˆdqô¡->7¤þ8¥ÁÙàó#ÿaem„•/Y8ÅÈGަ£¹ 0Xz($"!E¢BÈ ¾ÓB5é¦Y¥ŒÄ}ñMQ¤iÈS»€–ü’~ ‰S€¤óf…JxH ¨œ°€ c¤–Zs¡QÞ4=ÒEw”Z©š¨Pª&_:¥g“61S+ªõfŠaв(ÈÙ%eÃ9б‘*Sœ„r('דùY¨©¥úøŠÊ}J¥«ª6³â)c LHƒ¤K³ö—­v ¹~™ ѬTœ­j0Ѓ%-‰„tjsG(ø’f©M tP‚7™6Z3³yœò±¯œ2;µÒ)§D2ÅF³•eõQ8ð‚§q¢²Ñ–ËÁ¯–ª –Чxʯrh _Xj;c%Õ¤ïљɪ :h#¿uy/)±UQtù­¾™Süy ÕgX¤%u ²ƒ° ?æ "ò·œærJ«8€´¯[œf†³ÁU{I±Ì™>mpªân (#µéŒ£6 ð(Ds¶g‹?hp—þjJHI†ýäXö°ÇÙ%”µ×92Ô,NÀ:ÃÃ6nÓ2-³Nw…¯4ë—³ó«s'·>ú¹:ƒ0 0²Ð1Ü!Ì© ¡BÚmÞ@™Iüj0Ë‚ž;F±z´ 1˜Z !`i–÷ɺ?·w1I±â:²r±™QŠÚ™8ià@x׺äQ )»"; ?7` 2¶íé3ŠÕD«dÅŠJ&üÄ›w®²¿Y8›ŸG o˜s±+RºÑÐ,ƒ@”ñ( )Ûk¼‘ ¬:¹Ì š“šyÐ6Î0X"5$ce …°95&^Ö¶5^¿ú ¸¨ñ ?¨|öâ/10»rçÄ70œ)`ƒ†2Šò÷ ns b*ûUôËÀ8À.Ér Â<ñ»oMˆ.¼ ld‹¯¢;_à  ÁZÇÂ=ŒImª1¸«y` 8¼ÂªA¹KŒ- `[ú†Ka ¶|2ð ]ºÅ¶À·D€@g3€p|*X ¯j,žÞ wÉ+Ôòü ax<MÒ–ñºÇ˜”~H"&WL¼lCNrÜ:ž©Èâ™»Â++ì°#@õjÉâÉ ÉZgÂŒ&I3¡¢¬#! ä"):|{ŒÀ4­,ž(ü§"蠆 -|ËG°#@ȼ¼*Ü Ìâ9Ä|NfÌÉ¿ŒÌ*À*ûv Z Í Ð €/¼ÜcÏŒÍ#VÜÌ̪ñÍà¼Î@Í›cÎçüsAÈì$ìÜÎ6ÐÃ,ËMâ„ô¬#©ÏÉó¼Ï0ÐÏx<¿­#¤L&”R¼=Ê0.òËÐ I -¿ÐÝmíe¾œÑ>ÜìÐÔ¤@ÁìÑ*ÑÏü"}{,&Gó(yò5e‹@^+³Ä€ÁKrNÞ¬·õŸß B-²ràB2­{.,Ì|NÐo"²P`Çb#`Iü¤q€Ê#ÔwYÓ?ÃΠÉf’ÆAÐÅ¥œ¢ÐÀ‚Õo IÍ Çšö7!ìšœÏOí ãR*ÌÑ'¦š¬l?©Ø;ýÏ,­6.ä2)}^Y1˜Á½,¹Ñ¨Ô\Í¥q)5™/ˆ›fË(pqKâ0f|Ù¿ÂÏb*ÌÜÔ/é\Ìma’eÙ%Ð ±Ód@½ü$_]ؼrN&CÖø6Û¯íÌ7±…`küh¿Ô Í™ÈLz-Ëÿ\Û¶¦Ü+¼À*ÁÇ+”güpÄ]1ƒÝÛca)ÆÝ$ÒmAÍÀ"ÞýÐ ÛÖÐØ#}Ó_]­ËÆM-p)ÂìÏùý³7ȯ¤ßQÑÛH,ϘíÃ@‘ÂË Îàï|ÅÀ"×¼ŠPIl=úäÃÁò:×ä¢Ö³¼à,`Ä{½.%+puÆ}}±Ãâ| ×¶¿[Á61~/3îáv­wË9î'›†?4²%àÜeÓØÀR¸j Ð(²CWÐB¯¼äÌÜÌÈ= åÿÌÜõŒm!Cz” kRÇG\Ùç"çüõcÉ`Çg|Y|1PNͧ¬ÚIÂkÎÝc-b°b „<g¢â±ÃØ•­u©Ý.ãçÛ½Rf!ÜŒÇ5Îà¹LãnìT8¦Òw{´Üûr.g|–tÞ¦™lô°ÌÃ*Ÿߺ¼ËûÖËõ}m bê¾ÙRǬÀí²w4âØfÜ–“»Û]L×`iúâߟ> êIìÝ'êÆá*î†gÝß$n€1ÚNΗg:}˜>ImŽÜ’á†Ü|.Iìæ‰þê ÍÔþŽ ÍÔë¾Û¯ûÐ.ØyFmÜÁnÈÀ­ÀøîºñíünÆÇNípðÌuü4c0ŽmÍÿ˽òáçë -ÇóŸÑ•׌I 1ÍòÈÞÅ‹Þð$]ölò<è*.Î+ŸØ^€Â°ÌÓ…Ó¬É)¡-ÔÅøì;<Øøfô—Žô»íÀ,ô}’ðIÿäQnã»-ÎW,dI³4  ^ÕZÇÁÖâ ðLÎd>0îÊ,ËMý/ä.Ëå¬q¯¬÷ë¾öƒîënßË¥1r¿×Õüó%ðå£qyð|_î÷ñîñk®*`ï9ro³œøÈþºPîØMîͰ è*>ù#^ù¡Ö¯ù¨Âì0έïlÕˆ?fðvMçSج~9Ò”ÿß2î÷ûg<*|Ó`£  Ì­üpøÌúA×¾R;¯°$Ýú ÞCáÚ,äÿÅ÷Š.x|ÆAl8èÕ¯û×ì‚ðL]8iÓS¦ d²u iÄgURbII]kHlŒÃ'"V,Ä‚YQ ŒQ/*R«Ö«ï‘²L&”ÏàzH@R+V$=|ÚnÇMB 4 05Œ|ÏÒX™Ê^ˇBÂAÌLÅQÅÅÍYÓ–å%¦ÕÌ—˜ÝTƒ Nšé£RäÝHP'!ëTƒÀ iÚD‚âК#á„áAh&sóUA£çÁr€û£Z×Dš±±)€Ãß-ÄÄ*7ò‚-w8A´'ïöš°3ÿ´´._ÖYÁA  $l˜Ð‹Ã>\!P@àÂŒúl5p@bF‡Hi  MÆ”,HäïåK€~XWÀZ “Ü´ à“'P74ˆ1FÀNŸ– XÀC‚’úÜÙs@Q) pP5€¸„i¶‚(XHÈFÁ‚ Êö8À Á‚¼q4HààÀ‚4xjô®ß # Kâ@ßÄ‘nüϾ|çú8ëÓ2Vƒ~0€•›ªW³n½ZŠë›ÿb«Öäú3nK(ü€!à Â1\°ppcîäÊ—ãÞmñÂo¿ãðP‡9öìÚ1=`}ú6;pn/ož9"Q§æø<üøÍ…™Á ÂDg¬åóï/cÁçìñEäYÙ,@– žW€ƒ°@VáÆ/j¨„f øA5Ì8·^q߆)涉|HP&·xÇ­¨x£g,R§N…ÿ0à‘#s\WEmü¼c8™@ í}P‹ˆ 2  Ûe%©H–$"›mv©¤n¶ˆ04saO¼'Ã+  ÀˆÀ‰r* €,ø¦Q è9”qF¦%@¨2aMû[JY¦UÒ œTƒ °é¨UqTO8І;L1†VyÕQˆ>cÀs;‚èè<X£š% ð@=`ü†AOm@àÔ© ø„ÁoÉb@à•€ÄEbÄ (㪊Ê"3 pl<¹ÌK"]m![¢×ö@ƒÉF’*î½ ÖtFH0É8´ÞX g²€ ·˜˜ôoT€L®?Ä+ïÔëÀP!õ+H( ”ðJ=Ó±ñÁ”CPÐ/¶©¼­¿»}‹,½rØ(ƒ/ƒ701àFg2h±îÈ Í€µ®0©Ào <@Sòrʰik߬ ûñF{L̜Ө‘„‡Ò¾CàD(Lÿî=ucb~Ý '€1c7µ ¼‘Hõ-`l'8œèÎפàièŠÀºÞáiØú-Œ°NxÆN˜ó,ˆS‰ŒX³PšÝ+HYaZvÔˆ#:·µ’ÅÏpò-´>˜ŠüHšïû.½ÑÐo=~1²³µà4&œ`uÆÐ™¸¬ƒ:uH`ʳßcÀÃ|Lü‚^Ì$8:ûDc×óß.@¿T$@§Ð@§¾ 6©Ë‹BT0¼yXqû‡dÆM¢qL aßÄ4Â4 Wž¸!·•®J*$Aw’(UÐ;6\ %”¿&1NM,Bàéjã%êiO;¹ˆ#x¤¾Mm€2Xƒ€‹UŠè`j7dž h¡Ì¼øÃña”™ÛžàB<$ SÐ" F%Ó¬x#8É¢¬§ƒðy)*†PÏÄ äñXDAuøÇ™ì^Ôt'”Œ´ fVåÜÖJ*QC4@X 5”|@€¹¢õ,u(ØŸ@äû˜j ìc”< r’ÁÄYfÑH ­>  ݈ŒŠg+ Ð  –°=ô m°ÀÖðÑ©# À$M'ìi|åÓÙ*ˆGá›#[éȶB\è¢]ðÆ#$†ŽPŽà[zÇ ä@€|÷HH@bJmšð„h@'Ͷ© oÄ$Yã"Ü‹bj«ÚL¹Z®#ÄÀÇAL!/P,EäD:Òñ–¶/ŸJý‚îµxdr !YJâÕŒ(°3€SHÐVâ1Š0 ¬*+OLs7¸õ¡’úØßñ @ËMkÔ•T¾’)$,å+†5WúpHà­®dê˜u¢à°'$ AÝ;& —)TjȬ¬4 Ù; @T}"À¦Dû׺d†0ŠAl£™ÙnæPu‘à½(@À¶ºÕ­ŠÙ ·_âcÜ®–6ÎÝ–Z“šç:ê6ÓEî%B;lifelines-3.0.61/reports/book-latex.ll0000700002540200244210000031360010337534166020050 0ustar prappDomain Users/* ** @progname book-latex.ll ** @author Nicklaus ** @version 3.1 ** @category ** @output LaTeX ** @description ** ** Generates really spiffy register reports for formatting with LaTex. Reports ** read like a book. Includes source citation, footnotes, etc. Register ** reports are either descendant or ancestor/ahnentafel style. ** $Id: book-latex.ll,v 1.14 2005/11/19 05:30:30 memmerto Exp $ ** ** SourceForge Versions: ** ** $Log: book-latex.ll,v $ ** Revision 1.14 2005/11/19 05:30:30 memmerto ** - Add missing
tags, as per SF Patch 551968. ** - Add "usepackage{isolatin1}" to register-tex.ll, as per SF Patch # 402021. ** - Add comments about how to change between A4/Letter paper. ** - Add -v (version) option; clean up -h/-? (usage) options, as per SF Feature Request # 1310390. ** - Add "temp" and "random" hints to more file operations. ** ** Revision 1.13 2005/10/26 04:40:45 dr_doom ** make user property usage more consistent ** ** Revision 1.12 2005/06/18 00:29:39 dr_doom ** Update formatted docs, minor cleanup in merge families ** ** Revision 1.11 2004/09/02 23:11:04 rsimms ** Enhanced book-latex.ll to filter text to render harmless those ** characters meaningful to the LaTeX system. Also added an option ** to suppress e-mail addresses of source authors when they're specified ** as EMAI subnodes of AUTH nodes. Also indented all of the code with ** spaces (instead of tabs/spaces mix) to make the code easier to follow. ** ** Revision 1.10 2004/07/19 05:54:54 dr_doom ** Merge Vincent Broman Changes to reports ** ** Revision 1.9 2003/01/19 02:50:23 dr_doom ** ** Revision 1.8 2001/10/03 02:58:55 dabright ** Restored some previous additions to this report. ** The update from Dennis Nicklaus on 12 Aug 2001 ** had deleted them and he asked me to re-add them. So: ** Add CREM (cremated) tag processing; ** modified OCCU tag processing so that it can recognize date ranges ** (and so avoid saying "xx is a yy and a zz and a ..."); modified ** OCCU tag processing to recognize a subordinate AGNC tag indicating ** employer; modified onDate to recognize date ranges (FROM dd mmm ** yyyy TO dd mmm yyyy) - this still has some rough edges. ** ** Revision 1.7 2001/08/12 20:53:59 nozell ** Update by Dennis Nicklaus to his book-latex.ll ** ** Revision 1.5 2000/11/28 21:39:45 nozell ** Add keyword tags to all reports ** Extend the report script menu to display script output format ** ** Revision 1.4 2000/11/11 07:52:06 pere ** Use ISO 8859/1 charset in LaTeX. Add meta-information in header. ** ** Revision 1.3 2000/11/11 07:46:47 pere ** Include index even when there is no bibliography. ** ** Revision 1.2 2000/11/11 04:07:37 dabright ** ** reports/book-latex.ll: Added processing for BAPM tag, corrected ** error in referencing "spouse" rather than "s" in longvitals, ** added processing for the TYPE tag (modifier for EVENT), corrected ** setDayNumber so that it only uses text phrases (e.g., "on the same ** day") when both previous date and current date are fully ** specified, preserve line breaks represented by blank CONT/CONC ** tags, ensure "cn" variable in sourceIt is initialized before ** referenced, and miscellaneous typographical corrections. ** ** ** Revision 1.1 2000/11/10 dabright ** Initial revision - copy of Version 2.5 from Dennis Nicklaus ** ** Pre-SourceForge history: ** ## Dennis Nicklaus (dnicklaus at yahoo.com) ** Version 2.5 Feb. 2000 ** ** Requires LifeLines version 2.3.3 or later ** Requires tree.tex (for formatting) (tex macros for tree drawing). ** (found in TUGboat, vol. 6 (1985) and online in various places, ** including with the desc-tex lifelines report) ** ** based on work by David Olsen (dko@cs.wisc.edu) which in turn was ** based on work originally done by Tom Wetmore (ttw@cbnews1.att.com). ** also work by Kurt Baudendistel (baud@research.att.com). ** A few others, such as Ed Sternin (edik@brocku.ca) made other suggestions. ** and corrections. ** ** This report prints, in register/book format, information about all ** descendants of a person (or persons) and all of their spouses. ** It tries to understand as many different ** GEDCOM tags as possible. All source information (SOUR lines) is in the ** bibliography and footnotes. ** ** An alternate usage (new in version 2) lets you print out sort of a ** combination ahnentafel and register report going through the ancestors of ** the persons chosen. ** ** The output is in LaTeX format. Therefore, the name of the output file ** should end in ".tex". To print (assuming the name of the output file is ** "out.tex"): ** latex out < ignore lots of warnings about underfull \hboxes > ** makeindex out < not all systems have makeindex available ** if yours is one, just remove the \input{file.ind} line ** from the LaTeX output and skip the 'makeindex'> ** latex out < repeat latex-ing to get cross-references resolved> ** latex out < needed to get the index into the TOC> ** < you may need to repeat more if Latex ** says so, e.g. if page refs change. > ** dvips -o out < without the -o, dvips will likely print to your ** < default printer instead of creating a .ps file. ** lpr out.ps ** < the last three commands here may be replaced by > ** pdflatex out -- if you have 'pdflatex' and a PDF is ** the desired final product > ** ** I admit that this is lot of post-processing, but the results are worth it. ** ** NOTE ON PAPER SIZES: ** Paper sizes (A4 or letter) can be specified within the LaTeX output, ** but this requires editing by folks who don't like the default. ** ** Since dvips (a neccessary processing step) can take a paper-size ** argument on the command line, it's much simpler to let the user ** specify the desired page size when running dvips (outlined above) ** instead of editing the report/LaTeX output. ** ** Example: ** dvips -t letter out [ for US Letter-sized paper, 8.5x11" ] ** dvips -t a4 out [ for ISO/European A4-sized paper, 8.3x11.7" ] ** ** A special note about indexing. If you have names with double quotes in ** them, e.g. Forrest "Foggy" Morrison, not the nice Latex quotes style: ** Forrest ``Foggy'' Morrison, then the " marks will screw up the index. If you'd like to credit me & this program in your introduction if it's something you're really going to publish that'd be nice (but not required). Something like this could be used: "This document was prepared using LifeLines v." version() " genealogical database program\n" "by Thomas T.~Wetmore~IV, {\\tt ttw@beltway.att.com}. The script {\\tt book-latex}\n" "by Dennis Nicklaus {\\tt dnicklaus at yahoo.com} was used to generate the \\LaTeX\\ code.\n" */ /* WHAT DENNIS NICKLAUS DID: I expanded this program greatly, mostly based on a "book" report done by Kurt Baudendistel (baud@research.att.com). I combined what I liked best about register-tex and the book report. numbering: Register-tex had modified register numbering, where book had no numbering, and just always referred to people by page number, so I took the mod. reg. numbering. sources/bibliography: book had really nice SOUR support, so I took that and modified it a little bit, so that it supports a more std. gedcom usage of the SOUR definitions (according to my reading of the std). nothing needed in database: book required that you have various things like CHAP and PART additions to your lifelines gedcom database in order to find who to include in the book. I didn't include that multiple-person selection: On the other hand, maybe you want to include the descendants of more than one person. I included the ability (which was sort of there in book) of specifying multiple people. For Instance, you might specify your maternal grandfather and your paternal grandfather to get all your first cousins on both sides into the same book. This report asks you to keep selecting as many people as you want. It does the complete descendancy for each person selected. Each person so selected starts a new chapter in the book. I make up a title of the book based on the surnames of indi's chosen. When you don't want to select any more people, just hit return at the "select indi" prompt. english sentences: The book report was very good at automatically making real sentences instead of just fragments. I used that. I try to make compound sentences using "and" whenever possible, and this makes for a lot of rules in the code to try to handle a lot of cases. I probably missed a few where the English will still come out poorly. placename smarts: Also from book is the ability to recognize a place which is used multiple times. For instance, the first time it sees Keswick,Keokuk Co.,Iowa, it'll print the whole thing. But then every subsequent time, it'll just print Keswick. Makes things VERY readable, but it can leave some ambiguous things, like if you have two Keswick's, it might be hard to figure out which is meant. Likewise, I picked up ADDR support from book. if you have: 2 PLAC thattown 3 ADDR thisplace It'll say "at thisplace in thattown". Simply having 2 PLAC results in "in thattown". One thing I did change from book was making sure it always says "in thattown" after saying "at thisplace". Book was happy just saying "at thisplace" and assuming you know what it meant. But if you have several of 2 PLAC Town,County,State 3 ADDR his home Then just saying "at his home" doesn't do much, so I made sure it always says at least "at his home in Town". (the first time, it'd say, "at his home in Town,County, State".) (also useful if you have lots of different St. Mary's, e.g.) I also made it watch for words like "near, north,..." for the "town" part of the place, so that it doesn't say something icky like "in near Mytown". many events: register-tex supported a lot more GEDCOM fields, so I tried to include all of them. But I personally don't use all of them, so some may look ugly. charts: I added a feature that makes it draw 3 gen desc. tree charts for any indi who heads up a chapter. I took code from desc-tex to do this. (and modified it slightly because it didn't work for some cases). So you need the tree.tex macros, which this will try to include. Note: I modified the tree.tex macro a little bit to scrunch things up because I have some ancestors with huge families, and all their 10 kids had big families, so I had to scrunch the spacing to fit 3 gen. onto one page. I dropped most of the pedigree chart capabilities in book, but I did add one thing to look for the something like: 1 NOTE BOOKPEDIGREE on each indi. If a note like that is found for an indi, that indi's pedigree (8 gen, I think) will be printed as a latex figure in the book. I find this useful, for instance, when I do a book of all the desc. of all the grandparents of my grandmother. I have a BOOKPEDIGREE note on my grandmother so you can see how all these lines fit together. If you have 1 NOTE BOOKDESCENDENT on an individual, it'll draw a 3-gen desc. chart for that person. excursions: These are for when you are following one family down, say SMITH, and one of the SMITHs marries a JONES. If you want to include the JONES ancestry in this book, but don't really want to follow every JONES descendant, then if you put a note on the JONES person: 1 NOTE BOOKEXCURSION That causes this report to wait until the end of the chapter, then make a subsection which goes to the farthest male JONES ancestor, and document the direct line between that JONES ancestor and the JONES who married the SMITH. It doesn't follow every JONES line down, but includes info about each child of each direct JONES ancestor. intro I include the possibility that you might want to put your own introduction before most of the book. You can input your own intro file if you want. It should contain all the Latex directives you want also, such as \chapter{Introduction}. grandchild divisions Starting with the 4th generation down from each chapter head, I group together sets of grandchildren with over and under braces. (It doesn't make any sense to do it for generations 1-3 because they'd all be in the same group.) The idea is that if patriarch has kids A,B,C... Then by generation 4, you'll get a grouping of A's grandkids followed by B's grandkids, followed by C's grandkids. Lots of intermarrying might occasionally confuse the code which does this. Chapter splits If you put a 1 NOTE BOOKCHAPSPLIT on the person who is a chapter head, then each of his children will head up their own chapters with the children of that head as Generation 1 in their respective chapters. You should be careful not to have a BOOKCHAPSPLIT on anyone who is not the head of a line, or it'll probably come out ugly. Okay, now that you know how to produce a report, here are the formatting conventions you must follow to get a good one. All records shown here are optional, and all other records are okay -- they'll just be ignored by the book report: 1 NAME - Multiple name records allowed. First is ``true name.'' - Later ones, with given but no surname, are ``nicknames'' or familiars. - Later ones, with surname but no given, are aliases or alternate spellings. - Later ones, with both surname and given, are aliases. - Post-titles, such as MD, should be included in this name. 2 SOUR ... - Source for name. 1 TITL ... - Pre-titles, such as Reverend. (but I don't call people by their titl much. I mean after all, a person isn't Captain John yet when they are born. So I currently ignore this.) 1 SEX ... 1 SOUR ... - Source for parentage if no BIRT or CHR is given. This produces better output than BIRT-SOUR records with no DATE or PLAC given. I also use this when I have a general source which tells me everything about the person and I don't want to mess things up by citing it separately 8 times for birth, death, marr,... 1 evnt ... - BIRT, CHR, DEAT, BURI, CREM, MARR, DIV, DIVF, or ANUL,... 2 DATE ... - Date should be of format [ABT|BEF|AFT|BET] [day] [JAN|...|DEC] [year] [-year for BET] 2 PLAC ... - Comma separated list of localities appropriate for the expression ``in ...''. 3 ADDR ... - Location appropriate for the expression ``at ... in ...''. 3 CEME ... - Location appropriate for the expression ``at ... in ...''. 2 AGE ... - Age appropriate for the expression ``at age ...''. 2 CAUS ... - Cause of death appropriate for the expression ``died of ...''. 2 SOUR ... - Source for event. 2 NOTE ... - Text to be inserted in book following technical details of the event. (I use this instead of TEXT) 3 SOUR ... - Source for text. 1 OCCU ... - Description (title) of an occupation (job). 2 AGNC ... - Employer (produces "worked [or became] a with "). 1 TEXT ... - Text to be inserted in book about the person. I toyed with putting this before the death info, but decided I like having all the vital stuff first, then the more interesting text stuff. 2 SOUR ... - Source for text. 1 NCHI ... - Number of children (family records only). n CONT ... - Appropriate for TEXT and SOUR. You have the option of selecting either 1 TEXT, 1 NOTE or (not and) only those 1 NOTE records which start with an ! (exclamation) to include as the main body of text for each individual. From the GEDCOM std, TEXT "contains information from the source document." One might argue that I'm misusing it here. But it depends on what kinds of things you use 1 TEXT for. It might be nicely readable and technically appropriate if, for example, you copy a bio. of someone from an old book and want it included in your printout. Also, in sort of a self-referential way, you're including text from the book you publish with this. :-) I personally don't print out the "1 NOTE" records because I personally (and feel it is common that most people) have a lot of garbage in their notes, either general reminders to themselves, or PAF-style source notes (e.g. 1 NOTE BIRTH-DEATH: whatever source) However, with version 2.2, I give the option to print out either all 1 TEXT, all 1 NOTE, or all 1 NOTE !-tagged notes. (where if the 1st char of the note is !, then the 1 NOTE gets included). Something that I consider a typical 2 NOTE usage might be: 1 BURI 2 DATE when 2 PLAC somewhere 2 NOTE (with her parents) But you do have to be a little aware of what this report is going to generate if you want to make it a grammatically correct sentence SOURCE records are complicated, but they produce great output. To document a fact with a simple footnote, use n SOUR ... +1 CONT ... This can get more complicated (all records optional): (actually, I'm not sure what all is supported for footnotes any more, I mostly use bibliography entries.) n SOUR ... +1 CONT ... +1 PAGE ... +1 VOLU ... +1 NOTE ... +2 CONT ... +1 SOUR @id@ The +1 SOUR @id@ produces a citation to an entry in the bibliography, not a footnote, that is attached to the text of the footnote. To get a citation in the text itself, use n SOUR +1 SOUR @id@ or the more simple n SOUR @id@ To create a bibliographic entry that can be referenced as a citation, include a cross-reference definition. This can be included at the point where a citation is wanted. However, since you will like re-use the same citation many times and you'll want to be consist, define the cross-reference definition separately. A cross-reference definition takes this form (start at level 0) n @id@ SOUR - no text allowed here +1 AUTH ... - author of source +2 EMAI ... - e-mail address of author (useful for fellow genealogists) there is now an option to block e-mail addresses from showing in the output (in their place is a mention that one is on file) +2 ADDR ... - postal address of author +1 TITL ... - title of article or book +1 PUBL - publishing info record note that all these +2 things have to be under it for a bib. entry. (rules are diff. for footnotes). This is the way I read the 5.3 GEDCOM std. +2 NAME ... - name of publication,e.g. journal +2 PUBR ... - publisher name +2 ADDR ... - address +2 PHON ... - phone number +2 DATE ... - date of pub. +2 VOLU ... - volume or list or range +2 NUM ... - number or list or range +1 FILM ... - LDS film number +1 FICH ... - LDS fiche number +1 PAGE ... - page or list or range +1 REPO ... - library name +1 NOTE ... - free form text +2 CONT ... +1 SOUR @id@ - cite another source from bibliographic entry +1 TEXT ... - free form text to print +2 CONT ... Note that the id can be most text that begins with an alphanumeric character -- check your gedcom spec! Using a descriptive name of the source that it represents, such as kurts-death-record or 0996198 (for film numbers) is a good idea. (but Lifelines eats the nice names when it reads them in) SEMI-BROKEN STUFF A few problems you might notice: I'm not really happy with the desc. trees in several other cases, such as multiple spouses, and had to fix desctex a little bit to make it work better. It still isn't perfect, I don't think. The sentence structure may come out badly in some odd cases I haven't encountered/tested yet. It's been a real pain to get it as far as it is, and I'm still not happy with it. (It gets complicated because I try to make compound sentences and use pronouns so it isn't so choppy.) The "test for common grandparents" thing was just the simplest way of doing it I could think of. Not perfect, but works 99%. I really want to put some smarts in so placename ambiguity is less of a problem. For instance to distinguish the town of Washington, Iowa from the state of Washington. My LaTex is sort of rusty, and some things aren't really properly done, possibly. (Like the spacing on the overbraces designed to fill one column.) Also, it's line-filling is pretty weird sometimes, such as just putting one or two words in the first line of a person's description. I don't understand why it does that. FOR VERSION 2: I also now support a book which goes through an individual's ancestors in ascending order. Numbering is ahnentafel style. A new chapter for each generation. FOR VERSION 2.2 (Several of these were suggested by Ed Sternin (edik@brocku.ca) a. Fixed problem where in the descendant trees if a spouse's last name isn't known. It now puts in escaped underscores. (Also fixed printfirstname [now printablefirstname] to print underscores when no given name is known.) b. Added the BOOKCHAPSPLIT option If you put a 1 NOTE BOOKCHAPSPLIT on the person who is a chapter head, then each of his children will head up their own chapters with the children of that head as Generation 1 in their respective chapters. I added this because I have a family where the father had 3 sons. I want to include the info on the father, but I also want each of the three sons to have their own chapter. So I put a BOOKCHAPSPLIT note on the father, and it all comes out automatically. You should be careful not to have a BOOKCHAPSPLIT on anyone who is not the head of a line, or it'll probably come out ugly. (It causes subsequently members of the generation of the noted person to have separate chapters, as well as the children of the noted person.) c. I give the option to print out either all 1 TEXT, all 1 NOTE, or all 1 NOTE !-tagged notes (where if the 1st char of the note is !, then the 1 NOTE gets included). d. Fixed mistake with running headers in ancestor format books so the running header is now " Ancestors", not "Descendents". e. Added option (query turned off by default to match old way since it is confusing to a beginner) to reset the placenametable at each generation. If this option is selected, then the effect is that any placename will have the fully specified (long) name printed out once in each generation. I find this useful sometimes, just to remind people where you're talking about since it might have been a long time since the place was introduced. f. if there is a 1 Event, 2 DATE or 2 PLAC record where there is no value on the 2 DATE or 2 PLAC (but the record is present), it'll no fill in an underscore where the date/place would be, e.g., Joe was born in ____ in ____ . Previously if the 2 DATE or 2 PLAC were present and empty, it would have said "born in in ." which isn't so nice. g. Changed from supporting 3 SITE records to 3 ADDR records because SITE isn't supposed to be part of std. GEDCOM anymore, ADDR is. I hope this is as easy of a global replace for you as it was for me. (of a gedcom file in a text editor). h. Fixed A back-reference number (explaining that children were shown earlier) in ancestor mode. i. Fixed problem in ancestor mode that would print out the long text for some individuals more than once. New For Version 2.3 Not much is new: Don't do excursions in ancestor mode Added a couple LaTex macros that I use for pictures. New For Version 2.4 Some contributions by Dave Steiner (steiner@bakerst.rutgers.edu) Some very minor typesetting fixups to make some spacing more consistent. Some spaces added in certain parts, spaces taken out of other places. Says a couple "have no children" instead of "had no children" if it looks like the couple are still married and living. The bibliography filename will now be -bib.tex instead of -bib.tex. Supports CONC as well as CONT continuation lines in most places. I've made a couple other similarly minor cosmetic changes, one of which forces a new paragraph during excursions in an oddball case. Made a change in ancestor mode so that if cousins marry, it won't print the information about the common ancestors twice. Also an ancestor mode change so that ref. numbers for a person's parents appear in the text in the longvitals() description. New For Version 2.5. Fixed a mistake in check_print_divinfo which made it not work at all. New For Version 3.0 Several miscellaneous fixes. Now part of lifelines sourceforge distribution. See sourceforge history. Uses documentclass instead of documentstyle Added ability to print a limited number of generations in descendant-style books. At the terminal generation, if a person is not dead, it will only print the birth year, not full date. Fixed the titlepage generation. Some fixes to support latest version of lifelines (or maybe its just differences for lifelines under solaris): Intersect() can't be used inside an if() call. It has to call intersect separately and use the result in a set() The childnum argument of children() is now only valid within the scope of the children() loop. */ /* Stuff I haven't implemented: adler@math.toronto.edu (Jeffrey D. Adler) One suggestion came from "Denis B. Roegel" regarding the over/under braces. He suggested using something like: \begin{minipage}{\columnwidth} $\overbrace{\hspace*{3in}}$ \vspace{3ex} \begin{center}{\large\bf 24\ Henry REGLE}\end{center} \end{minipage} \nobreak Henry {\sc REGLE}\index{REGLE, Henry|bfit}, ... and For \underbrace, try to put a \nobreak before: \nobreak $\underbrace{\hspace*{3in}}$ I haven't tried this out to see if I like it better. But I did include some of the \nobreaks before the underbrace and after the big center-ed person's name. */ global(maxgenprint) /* number of generations to print full info for.*/ global(atmax_generation) /* used so we don't print full birthdates of living individuals at the MAX-th generation */ global(ancestormode) global(notes_text_mode) global(eventPlaceTable) global(atAddrValue) global(eventNameTable) global(in) global(out) global(idex) global(stab) global(powValue) global(namereturn) global(excurlist) global(sourceList) global(bibList) global(bibTable) global(figureCiteList) global(figureNodeList) global(gotValue) global(gottenNode) global(gottenValue) global(dayNumber) global(previousDayNumber) global(daysToMonthList) global(not_married_flag) global(dumpplacetable_each_gen) global(hadsplitnote) global(force_desc_chart) global(pedigreeFigureLabel) global(global_dead)/* used at the MAX-th generation so we know if indi is dead*/ global(tex_xlat) /* table used to escape characters meaningful to TeX */ global(opt_xlat) global(opt_email) /* flag indicating whether source author's e-mail should be shown */ proc main() { list(headlist) table(stab) /* Table of numbers for each individual */ list(bibList) list(excurlist) table(bibTable) list(figureCiteList) list(figureNodeList) list (sourceList) set(opt_xlat, 1) table(tex_xlat) insert(tex_xlat, "$", "\\$") insert(tex_xlat, "&", "\\&") insert(tex_xlat, "%", "\\%") insert(tex_xlat, "#", "\\#") insert(tex_xlat, "_", "\\_") insert(tex_xlat, "{", "\\{") insert(tex_xlat, "}", "\\}") insert(tex_xlat, "~", "\\verb|~|") insert(tex_xlat, "^", "\\verb|^|") insert(tex_xlat, "\\", "\\verb|\\|") insert(tex_xlat, "<", "$<$") /* out of math mode, < and > produce */ insert(tex_xlat, ">", "$>$") /* upsidedown ! and ? marks */ list(daysToMonthList) setel(daysToMonthList, 1, 0) setel(daysToMonthList, 2, 31) setel(daysToMonthList, 3, 59) setel(daysToMonthList, 4, 90) setel(daysToMonthList, 5, 120) setel(daysToMonthList, 6, 151) setel(daysToMonthList, 7, 181) setel(daysToMonthList, 8, 212) setel(daysToMonthList, 9, 243) setel(daysToMonthList, 10, 273) setel(daysToMonthList, 11, 304) setel(daysToMonthList, 12, 334) set(force_desc_chart, 0) getindimsg(indi, "Enter the first person for the report") if(not(indi)) { return(0) /* assume the user wants to quit */ } set(familycount, 0) while(indi) { set(familycount, add(familycount, 1)) enqueue(headlist, indi) set(indi, 0) getindimsg(indi, "Enter another root person or none to proceed") } if(1) { getintmsg(ancestormode, "Enter 0 for descendant, 1 for ancestor report") } else { set(ancestormode, 0) } set(maxgenprint, 999) if(eq(0, ancestormode)) { if(1) { getintmsg(maxgenprint, "Max generations for descendancy books") } else { set(maxgenprint, 999) } } if(1) { getintmsg(notes_text_mode, "Book Text:1='1 TEXT'; 2= all '1 NOTE'; 3= !-tag '1 NOTE's") } else { set(notes_text_mode, 1) } if(0) { /* change this to "if (1)" to turn this query on. */ getintmsg(dumpplacetable_each_gen, "Enter 1 to reset place name table each generation, 0 to not") } else { set(dumpplacetable_each_gen, 0) } if(1) { getintmsg(opt_email, "Enter 1 to show source authors' e-mail addresses, 0 to not") } else { set(opt_email, 0) } /* Print preamble. Feel free to change this to suit your tastes. */ "\\documentclass[twocolumn,twoside,titlepage]{book}\n" /* LaTeX 2e */ /*"\\documentstyle[twocolumn,makeidx]{book}\n"*/ "\\pagestyle{myheadings}\n\n" "% Enable ISO 8859/1 charset" nl() "\\usepackage{isolatin1}" nl() "% Shrink the margins to use more of the page.\n" "% This is taken from fullpage.sty, which is on some systems.\n" "\\topmargin 0pt\n" "\\advance \\topmargin by -\\headheight\n" "\\advance \\topmargin by -\\headsep\n" "\\textheight 8.9in\n" "\\oddsidemargin 0pt\n" "\\evensidemargin \\oddsidemargin\n" "\\textwidth 6.5in\n\n" "\\newcounter{childnumber}\n\n" "% The \\noname command is needed because TeX doesnt like underscores.\n" "\\newcommand{\\noname}{\\underline{\\ \\ \\ \\ \\ }}\n\n" "\\newcommand{\\nodate}{\\underline{\\ \\ \\ \\ }}\n\n" "% Environment for printing the list of children.\n" "\\newenvironment{childrenlist}" "{\\begin{small}\\begin{list}{\\sc\\roman{childnumber}.}" "{\\usecounter{childnumber}\\setlength{\\leftmargin}{0.5in}" "\\setlength{\\labelsep}{0.07in}\\setlength{\\labelwidth}{0.43in}}}" "{\\end{list}\\end{small}}\n\n" "% The following commands are used to create the index.\n" "\\newcommand{\\bold}[1]{{\\bf #1}}\n" "\\newcommand{\\bfit}[1]{{\\bf\\it #1}}\n" "%%\\newcommand{\\see}[2]{{\\it see #1}} %not needed with makeidx.sty\n\n" "% Command to use at the beginning of each new generation.\n" if(ancestormode) { "\\newcommand{\\generation}[2]" "{\\newpage\\begin{center}{\\huge\\bf Generation #1}\\end{center}" "\\vspace{3ex}\\setcounter{footnote}{0}" "\\markright{#2 Ancestors" "\\hfill Generation #1\\hfill\\ }" "}\n\n" } else { "\\newcommand{\\generation}[2]" "{\\newpage\\begin{center}{\\huge\\bf Generation #1}\\end{center}" "\\vspace{3ex}\\setcounter{footnote}{0}" "\\markright{#2 Descendants" "\\hfill Generation #1\\hfill\\ }" "}\n\n" } "\\newcommand{\\image}[4]" "{\\begin{figure}\n\\centerline{\\psfig{figure=#1,height=#4}}\n" "\\label{#3}\n" "\\caption{#2}\n\\end{figure}}\n" "\\newcommand{\\imwide}[4]" "{\\begin{figure*}\n\\centerline{\\psfig{figure=#1,height=#4}}\n" "\\label{#3}\n" "\\caption{#2}\n\\end{figure*}}\n" "\\makeindex\n\n" "\n\\input{tree}\n" /* needed for making descendant trees */ "\\begin{document}\n\n" /*******************************************/ /* Make the title */ /*******************************************/ "\\title{ The " forlist(headlist,head,localcount) { if(gt(localcount,1)) { if(gt(familycount,2)) { /* don't say "a, and b." */ ", " } if(eq(localcount,familycount)) { " and " } } strxlat(tex_xlat, surname(head)) } if(eq(1,familycount)) { " Family}\n" } else { " Families}\n" } getstrmsg(author, "Enter the author(s) of this document:") "\\author{" strxlat(tex_xlat, author) "}\n" "\\date{\\today}\n" "\\maketitle\n" "\\clearpage\n" "\\onecolumn\n" "\\pagestyle{empty}\n" "\\mbox{ }\n" "\\vfill\n" "\\begin{center}\n" "Copyright \\copyright \\ \\today \\ " strxlat(tex_xlat, author) "\\\\" getstrmsg(copyplace, "Enter the place for the copyright notice:") strxlat(tex_xlat, copyplace) "\n" "\\end{center}\n" "\\clearpage\n" "\\pagestyle{myheadings}\n" "\\twocolumn\n" "\\setcounter{page}{1}\n" "\\tableofcontents" getstrmsg(intro, "File that contains introduction (if any):") if(ne(strcmp(intro, ""), 0)) { "\\input{" intro "}\n" } table(eventNameTable) table(eventPlaceTable) table(eventNameTable) insert(eventNameTable, "BIRT", "was born") insert(eventNameTable, "ADOP", "was adopted") insert(eventNameTable, "BAPM", "was baptized") insert(eventNameTable, "CHR", "was baptized") insert(eventNameTable, "DEAT", "died") insert(eventNameTable, "BURI", "was buried") insert(eventNameTable, "CREM", "was cremated") /* GRAD left blank since it is done as a separate case */ insert(eventNameTable, "GRAD", "") insert(eventNameTable, "NATU", "was naturalized") insert(eventNameTable, "CHRA", "was christened (as an adult)") insert(eventNameTable, "CENS", "was listed in the census") insert(eventNameTable, "ORDN", "was ordained") insert(eventNameTable, "RELI", "") insert(eventNameTable, "RESI", "lived") insert(eventNameTable, "CONL", "was confirmed") insert(eventNameTable, "CONF", "was confirmed") insert(eventNameTable, "BLES", "was blessed") insert(eventNameTable, "BASM", "was bat mitzvah-ed") insert(eventNameTable, "BARM", "was bar mitzvah-ed") /* these two Will related things come out kind of icky because I just always use plain pronouns like he, she, not possessive ones, so I have to say "he wrote a will" instead of "his will was dated" */ insert(eventNameTable, "PROB", "had a will probated") insert(eventNameTable, "WILL", "wrote a will") insert(eventNameTable, "RETI", "retired") indiset(idex) set(out, 1) set(in, 1) dayformat(2) monthformat(6) dateformat(1) while(indi, dequeue(headlist)) { if(ancestormode) { call ancestor_chapterproc(indi) } else { call chapterproc(indi) } } set(basename, save(substring(outfile(), 1, sub(index(outfile(), ".", 1), 1)))) /* Output bibliography commands */ if(not(empty(bibList))) { "\n\n\\onecolumn" "\n\\cleardoublepage" "\n\\label{Bibliography}" "\n\\addcontentsline{toc}{chapter}{Bibliography}" "\n\\begin{thebibliography}{9.99}" "\n\\input{" basename "-bib.tex}" "\n\\end{thebibliography}" } "\n\n\\cleardoublepage" "\n\\label{Index}" "\n\\addcontentsline{toc}{chapter}{Index}" "\n\\input{" basename ".ind}" "\n\n\\end{document}\n" /* Output bibliography file */ print("\n\nCreating support files ...") if( not(empty(bibList)) ) { newfile(concat(basename, "-bib.tex"), 0) print("writing to : ") print("\n") print(concat(basename, "-bib.tex")) print("\n") while(b, dequeue(bibList)) { b } } } proc chapterproc(topguy) { list(ilist) /* List of individuals */ list(glist) /* List of generation for each individual */ set(last_grandparents,0) indiset(grandparentset) indiset(hisset) indiset(last_grandparentset) set(chapterTitle, save(concat("The ", concat(fullname(topguy, 0, 1, 99), "\ Family")))) "\n\\chapter{" chapterTitle "}" "\n" enqueue(ilist, topguy) enqueue(glist, 1) set(curgen, 0) set(printed_brace,0) set(just_printed_brace,0) /* we have to do this add1 once for the topguy of each chapter We used to start out with "in" initialized to 2, but that made the numberings bad when there were multiple chapters, so now we init to 1 and do this +1 here */ set(in, add(in, 1)) set(hadsplitnote,0) set(this_level_hadsplitnote,0) while(indi, dequeue(ilist)) { /* This is where we implement the "Chapter Split". The idea is, that if you put a BOOKCHAPSPLIT note on the head of a line, then each of his children will head up their own chapters with the children of that line as Generation 1 in their respective chapters. */ if(eq(1,this_level_hadsplitnote)) { call chapterproc(indi) } else { set(thisgen, dequeue(glist)) if(ne(curgen, thisgen)) { /* If we are starting a new generation, close off brace from previous gen. if necessary */ if(printed_brace) { "\n\\nobreak" "\n" "$\\underbrace{\\hspace*{3in}}$" "\n\n" set(printed_brace,0) } if(dumpplacetable_each_gen) { table(eventPlaceTable) } print("Generation ") print(d(thisgen)) print("\n") "\n\n\\generation{" d(thisgen) "}" "{" strxlat(tex_xlat, surname(topguy)) "}" "\n" "\n\\addcontentsline{toc}{section}{Generation " d(thisgen) "}\n" set(curgen, thisgen) set(last_grandparents,0) indiset(last_grandparentset) set(printed_brace,0) if(eq(curgen,maxgenprint)) { set(atmax_generation,1) } else { set(atmax_generation,0) } } /* decide if we have the same grandparents or not */ /* I try to group people together with over/under braces for people descended from the same grandparent in this descendancy */ /* rather than remember who belongs to what line, I just look at all their grandparents and if they overlap with the grandparents of the previous person, then I assume I'm on the same line. This isn't always true, but it is a start, at least. */ if(gt(curgen,3)) { if(eq(0,last_grandparents)) { "\n" "$\\overbrace{\\hspace*{3in}}$" "\n" set(printed_brace,1) set(just_printed_brace,1) indiset(hisset) addtoset(hisset,indi,1) set(grandparentset,parentset(parentset(hisset))) set(last_grandparentset,grandparentset) set(last_grandparents,1) } else { indiset(hisset) addtoset(hisset,indi,1) set(grandparentset,parentset(parentset(hisset))) set(doit,1) indiset(extraSet) set(extraSet,intersect(grandparentset,last_grandparentset)) forindiset(extraSet, joe, a, b) { set(doit,0) } if(doit) { if(printed_brace) { "\n\\nobreak" "\n" "$\\underbrace{\\hspace*{3in}}$" "\n\n" } "\n" "$\\overbrace{\\hspace*{3in}}$" "\n\n" set(printed_brace,1) set(just_printed_brace,1) /* also reset the place table after each set of grandchildren. This makes it repeat the whole location name the next time it sees any location. Otherwise, it can get too far from the introduction of the place for my liking. */ if(dumpplacetable_each_gen) { table(eventPlaceTable) } } set(last_grandparentset,grandparentset) set(last_grandparents,1) } } print(d(out)) print(" ") print(name(indi)) print("\n") /* only do the vspace between people if there was no overbrace printed. Otherwise there is too much white space and it looks icky. */ if(eq(0,just_printed_brace)) { "\n\\vspace{3ex}\\ \\\\" } set(just_printed_brace,0) "\\begin{center}{\\large\\bf " d(out) "\\ " strxlat(tex_xlat, name(indi)) "}\\end{center}\n" "\\nobreak\n" insert(stab, save(key(indi)), out) call longvitals(indi, 1, 2) if(hadsplitnote) { set(this_level_hadsplitnote,1) } addtoset(idex, indi, 0) set(out, add(out, 1)) /* check whether the children we are about to print are at the Max generation */ set(save_atmax_generation,atmax_generation) if(eq(add(curgen,1),maxgenprint)) { set(atmax_generation,1) } families(indi, fam, spouse, nfam) { "\n\n" if(eq(0, nchildren(fam))) { call texname(inode(indi), 0) "\\ and " if(spouse) { call texname(inode(spouse), 0) } else { "\\noname" } call havehadchildren(indi, spouse) } elsif(and(spouse, lookup(stab, key(spouse)))) { "Children of " call texname(inode(indi), 0) "\\ and " call texname(inode(spouse), 0) "\\ are shown under " call texname(inode(spouse), 0) "(" d(lookup(stab, key(spouse))) ").\n" } else { "Children of " call texname(inode(indi), 0) "\\ and " if(spouse) { call texname(inode(spouse), 0) } else { "\\noname" } ":\n\\begin{childrenlist}\n" children(fam, child, nchl) { set(haschild, 0) families(child, cfam, cspou, ncf) { if(ne(0, nchildren(cfam))) { set(haschild, 1) } } if(and(haschild,lt(curgen,maxgenprint))) { if(not(lookup(stab, key(child)))) { enqueue(ilist, child) enqueue(glist, add(1, curgen)) "\n\\item[{\\bf " d(in) "}\\ \\hfill" "\\addtocounter{childnumber}{1}" "{\\sc\\roman{childnumber}}.]" set(in, add(in, 1)) call shortvitals(child) } else { "\n\\item[{\\bf " d(lookup(stab, key(child))) "}\\ \\hfill" "\\addtocounter{childnumber}{1}" "{\\sc\\roman{childnumber}}.]" call shortvitals(child) " Details of " pn(child, 3) " family were shown earlier." } } else { if(haschild) { set(force_desc_chart, 1) } "\n\\item " call longvitals(child, 0, 1) set(force_desc_chart,0) addtoset(idex, child, 0) } } "\\end{childrenlist}\n" } } set(atmax_generation, save_atmax_generation) if(eq(indi,topguy)) { set(descFigureLabel, save(concat(key(indi), "-figure-desc"))) "\nA brief chart of the descendants of this line is contained in " "Figure~\\ref{" descFigureLabel "}." "\n\\begin{figure*}\n" "\\centering\n" call desc_chart_main3(indi) "\n\\caption{Descendents of " fullname(indi,0,1,99) "({\\bf " d(lookup(stab, key(indi))) "})}" nl() "\\label{" descFigureLabel "}" "\\end{figure*}\n" } } } /* Close off the last braces if necessary */ if(printed_brace) { "\n\\nobreak" "\n" "$\\underbrace{\\hspace*{3in}}$" "\n\n" } set(printed_brace,0) while(indi, dequeue(excurlist)) { call excursion(indi) } } /* Run this routine if you want an ahnentafel style report for the individuals named */ proc ancestor_chapterproc(topguy) { list(ilist) /* List of individuals */ list(glist) /* List of generation for each individual */ list(alist) set(chapterTitle, save(concat(fullname(topguy, 0, 1, 99), "\ Ancestors"))) "\n\\chapter{" chapterTitle "}" "\n" enqueue(ilist, topguy) enqueue(alist,1) enqueue(glist, 1) set(curgen, 0) insert(stab, save(key(topguy)), 1) while(indi, dequeue(ilist)) { set(ahnen, dequeue(alist)) set(thisgen, dequeue(glist)) if(ne(curgen, thisgen)) { print("Generation ") print(d(thisgen)) print("\n") "\n\n\\generation{" d(thisgen) "}" "{" strxlat(tex_xlat, surname(topguy)) "}" "\n" "\n\\addcontentsline{toc}{section}{Generation " d(thisgen) "}\n" set(curgen, thisgen) /* reset the place table at each generation if asked to. */ if(dumpplacetable_each_gen) { table(eventPlaceTable) } } print(d(ahnen)) print(" ") print(name(indi)) print("\n") "\n\\vspace{3ex}\\ \\\\" "\\begin{center}{\\large\\bf " d(ahnen) "\\ " strxlat(tex_xlat, name(indi)) "}\\end{center}\n" /****************************************************************/ /* first, enqueue his parents onto the lists so their numbers will be printed out in the description of "indi" */ /* also includes a check to see if indi's parents are already there such as will happen when cousins marry. */ set(print_dad_note,0) set(print_mom_note,0) if(par,father(indi)) { if(not(lookup(stab,key(par)))) { enqueue(ilist, par) enqueue(alist, mul(2,ahnen)) enqueue(glist, add(curgen, 1)) insert(stab, save(key(par)), mul(2,ahnen)) } else { set(print_dad_note,key(par)) } } if(par, mother(indi)) { if(not(lookup(stab,key(par)))) { enqueue(ilist, par) enqueue(alist, add(1,mul(2,ahnen))) enqueue(glist, add(curgen, 1)) insert(stab, save(key(par)), add(1,mul(2,ahnen))) } else { set(print_mom_note,key(par)) } } /****************************************************************/ /* now to print out info about this person */ call longvitals(indi, 1, 2) addtoset(idex, indi, 0) families(indi, fam, spouse, nfam) { "\n\n" if(eq(0, nchildren(fam))) { call texname(inode(indi), 0) "\\ and " if(spouse) { call texname(inode(spouse), 0) } else { "\\noname" } call havehadchildren(indi, spouse) } elsif( and(female(indi), spouse, lookup(stab, key(spouse))) ) { /* note that the form of that if is different here than in descendant reports. It is different because we explicitly form the queue by adding the father before the mother. Thus, for the parent-set, the children will be printed under the father. We don't check to see if the father's spouse had them previously printed because that would only happen if a different (non-ancestor) wife also happened to be an ancestor from a different branch, which could happen, but has to be pretty rare. (E.g. your dad's dad marries your mom's mom for the 2nd marriage for both of them, something like that. Ick.) */ "Children of " call texname(inode(indi), 0) "\\ and " call texname(inode(spouse), 0) "\\ are shown under " call texname(inode(spouse), 0) "(" d(lookup(stab, key(spouse))) ").\n" } else { "Children of " call texname(inode(indi), 0) "\\ and " if(spouse) { call texname(inode(spouse), 0) } else { "\\noname" } ":\n\\begin{childrenlist}\n" children(fam, child, nchl) { set(haschild, 0) families(child, cfam, cspou, ncf) { if(ne(0, nchildren(cfam))) { set(haschild, 1) } } "\n\\item " if(not(lookup(stab, key(child)))) { call longvitals(child, 0, 1) addtoset(idex, child, 0) } else { call shortvitals(child) " Details of " pn(child,3) " family were shown earlier " "({\\bf " d(lookup(stab, key(child))) "})" "." } } "\\end{childrenlist}\n" } } /* END families loop */ /* if his parents are not numbered as expected, tell 'em so. */ if(ne(0,print_dad_note)) { "\n Note that " pn(indi,3) " father " "({\\bf " d(lookup(stab, print_dad_note)) "})" " is not found in the usual " "ahnentafel-style numbering place due to intermarriages.\n" } if(ne(0,print_mom_note)) { "Note that " pn(indi,3) " mother " "({\\bf " d(lookup(stab, print_mom_note)) "})" " is not found in the usual " "ahnentafel-style numbering place due to intermarriages.\n" "\n" } if(eq(indi,topguy)) { call pedigreeFigure(indi) if(strcmp(pedigreeFigureLabel, "")) { pn(indi, 2) " pedigree is illustrated in Figure \\protect\\ref{" pedigreeFigureLabel "}." } } } } /* shortvitals(indi): Displays the short form of the vital statistics (birth and death only) of an individual. */ proc shortvitals(indi) { call resetdayplace() call texname(inode(indi), 1) set(b, birth(indi)) set(d, death(indi)) set(local_dead,global_dead) /* save for restore */ set(global_dead,d) if(and(b, long(b))) { call process_event(b) if(and(d, long(d))) { " and " pn(indi,1) call process_event(d) } } else { /* know death info, not birth*/ if(and(d, long(d))) { call process_event(d) } } "." set(global_dead,local_dead) /* restore */ } /* longvitals(i, name_parents, name_type) Prints out the complete vital statistics of the individual (i). If name_parents is not 0, then the names of the parents of the individual will be printed. The parameter name_type is passed to texname. The GEDCOM tags are divided into ones that would likely occur before getting married and ones that would likely occur after getting married. Within the two sets they are printed in the order in which they appear in the database. I haven't yet figured out a convenient way of indicating the sex. */ proc longvitals(i, name_parents, name_type) { call resetdayplace() set(local_dead,global_dead) /* save for restore */ set(global_dead,death(i)) call texname(inode(i), name_type) call print_sources(inode(i)) call getValue(inode(i),"NAME") if(gotValue) { call print_sources(gottenNode) } /* remember the value so it doesn't affect spousevitals */ set(save_force_chart,force_desc_chart) set(force_desc_chart,0) set(dad, father(i)) set(mom, mother(i)) if(and(name_parents, or(dad, mom))) { ", " if(male(i)) { "the son of " } elsif(female(i)) { "the daughter of " } else { "the child of " } if(dad) { call texname(inode(dad), 0) if(lookup(stab, key(dad))) { "({\\bf " d(lookup(stab, key(dad))) "})" } } if(and(dad, mom)) { "\nand " } if(mom) { call texname(inode(mom), 0) if(lookup(stab, key(mom))) { "({\\bf " d(lookup(stab, key(mom))) "})" } } ",\n" } set(name_found, 0) set(needname,0) set(canUseAnd,1) set(printedOne,1) /* at the start, we have just printed his fullname*/ set(pronoun," ") set(anythingprinted,0) set(putPeriod,0) /* there is a mistake in this for right now, if we don't have any pre-marriage info, it'll be ugly for the death. */ fornodes(inode(i), n) { if(not(printedOne)) { if(needname) { set(pronoun, printablefirstname(i)) set(needname,0) set(canUseAnd,1) set(printedOne,1) set(putPeriod,0) set(pronoun," ") } else { if(canUseAnd) { set(pronoun," and ") set(canUseAnd,0) set(printedOne,1) set(putPeriod,1) } else { /* set up for "He" this time, "and" next time. */ /* put the period in for the first time */ if(not(anythingprinted)) { set(putPeriod,1) } else { set(putPeriod,0) } set(pronoun,pn(i,0)) set(canUseAnd,1) set(printedOne,1) } } set(anythingprinted,1) }/* end if not printedone */ if( or(eq(strcmp(tag(n), "ADOP"), 0), eq(strcmp(tag(n), "BAPL"), 0), eq(strcmp(tag(n), "BAPM"), 0), eq(strcmp(tag(n), "BARM"), 0), eq(strcmp(tag(n), "BASM"), 0), eq(strcmp(tag(n), "BIRT"), 0), eq(strcmp(tag(n), "BLES"), 0), eq(strcmp(tag(n), "CONF"), 0), eq(strcmp(tag(n), "CONL"), 0), eq(strcmp(tag(n), "ORDN"), 0), eq(strcmp(tag(n), "CHR" ), 0) )) { pronoun set(printedOne,0) call process_event(n) if(putPeriod) {". "} } if(eq(strcmp(tag(n), "GRAD"), 0)) { pronoun set(printedOne,0) " graduated from " call valuec(n) call process_event(n) if(putPeriod) {". "} } if(eq(strcmp(tag(n), "CAST"), 0)) { pronoun set(printedOne,0) " was a member of Caste: " call valuec(n) call process_event(n) if(putPeriod) {". "} } if(eq(strcmp(tag(n), "NAME"), 0)) { if(eq(name_found, 0)) { set(name_found, 1) } else { pronoun set(printedOne,0) " was also known as " call texname(n, 3) call print_notes(n, " ") call print_sources(n) if(putPeriod) {". "} "\n" } } if(eq(strcmp(tag(n), "NAMR"), 0)) { pronoun set(printedOne,0) " had the religious name of: " call valuec(n) call process_event(n) if(putPeriod) {". "} } if(eq(strcmp(tag(n), "RELI"), 0)) { pronoun set(printedOne,0) " was a " call valuec(n) call process_event(n) if(putPeriod) {". "} } /* if(eq(strcmp(tag(n), "TITL"), 0)) { pronoun set(printedOne,0) " held the title of " value(n) call print_sources(n) if(putPeriod) {". "} "\n" } */ } /* END fornodes(inode(i), n) */ if(and(putPeriod,anythingprinted)) { ". " } set(inhibit_text_charts,0) if(eq(1, nfamilies(i))) { families(i, f, s, n) { if(s) { if(anythingprinted) { pn(i,0) } set(anythingprinted,1) call illegit_check(f) if(not_married_flag) { " had a child with" } else { " married" } /* it is OK to assume they had children if the Not married flag is raised. Cuz if they weren't married and didn't have kids, there isn't much point in the family existing (as far as this program is concerned). */ call print_sources(fnode(f)) call spousevitals(s, f) } } /* END families(i, f, s, n) */ } else { /* individual 'i' had more than one family */ families(i, f, s, n) { if(anythingprinted) { /* print "he" (or "she") for first marriage, and his first name for all later marriages */ if(gt(n,1)) { printablefirstname(i) } else { pn(i,0) } } set(anythingprinted, 1) if(s) { call illegit_check(f) if(not_married_flag) { " had child(ren) with " } else { " married " } ord(n) "," call print_sources(fnode(f)) call spousevitals(s, f) /* make sure we don't print this (i) persons text and charts a second time. The theory here being that if the spouse is in the stab, then this person (i) has already had their notes/charts done as part of their spouse. We don't want to print a 2nd time */ if(not(ancestormode)) { if(lookup(stab, key(s))) { set(inhibit_text_charts,1) } } } else { " " ord(n) " had a child with an unknown spouse. " } } /* END families(i, f, s, n) */ } " " /* if(anythingprinted) { call getText(inode(i),0) } */ /* otherwise hold off on getText until after the death info & all */ /* I changed my mind. I like getText at the end. */ set(needname,1) set(canUseAnd,0) set(putPeriod,0) if(anythingprinted) { set(printedOne,0) /* haven't printed a name here after the spouse info */ /* this works because pronoun is still a blank */ } else { set(printedOne,1) /* we still have his name from way at the start */ set(putPeriod,1) /* JUST ADDED THIS LINE 5/24/96. Don't know if works */ /* test it on Galbraith kids where know only death.*/ } fornodes(inode(i), n) { /* process DEATH related gedcom nodes */ if(not(printedOne)) { if(needname) { set(pronoun, printablefirstname(i)) set(needname,0) set(canUseAnd,1) set(printedOne,1) set(putPeriod,0) } else { if(canUseAnd) { set(pronoun," and ") set(canUseAnd,0) set(printedOne,1) set(putPeriod,1) } else { set(pronoun,pn(i,0)) set(canUseAnd,1) set(printedOne,1) set(putPeriod,0) } } } if( or( eq(strcmp(tag(n), "BURI"), 0), eq(strcmp(tag(n), "CREM"), 0), eq(strcmp(tag(n), "CENS"), 0), eq(strcmp(tag(n), "CHRA"), 0), eq(strcmp(tag(n), "DEAT"), 0), eq(strcmp(tag(n), "NATU"), 0), eq(strcmp(tag(n), "RETI"), 0), eq(strcmp(tag(n), "RESI"), 0), eq(strcmp(tag(n), "PROB"), 0), eq(strcmp(tag(n), "WILL"), 0) )) { pronoun set(printedOne,0) call process_event(n) if(putPeriod) {". "} } /* One part of the GEDCOM standard says the tag should be DSCR, another part says DESR. */ if(eq(strcmp(tag(n), "DESR"), 0)) { pronoun set(printedOne,0) "Description: " call valuec(n) call print_sources(n) if(putPeriod) {". "} } if(eq(strcmp(tag(n), "EVEN"), 0)) { pronoun set(printedOne,0) value(n) call process_event(n) if(putPeriod) {". "} } if(eq(strcmp(tag(n), "OCCU"), 0)) { pronoun set(printedOne,0) /* should also check for a RETIred node and always say WAS if it exists */ /* DAB - replace with do_occu; delete this when do_occu accepted call getValue(inode(i),"RETI") if(gotValue) { " was" } else { call iswas(i) } " " call aAn(value(n)) " " call valuec(n) call process_event(n) */ call do_occu(n, i) if(putPeriod) {". "} } if(eq(strcmp(tag(n), "PROP"), 0)) { pronoun set(printedOne,0) "had possessions: " call valuec(n) "." call print_sources(n) if(putPeriod) {". "} } } if(putPeriod) {". "} /* restore forcing of desc. charts */ set(force_desc_chart,save_force_chart) if(not(inhibit_text_charts)) { call getText(inode(i),0) call process_book_notes(i) } set(global_dead,local_dead) /* restore */ } /* isRange(d) - Indicate if a date node is a range * * d - DATE node(could be NIL) * * Returns: 1 if is of the form "[BET] date1-date2"; 0 otherwise * */ func isRange(d) { set(r, 0) if(d) { if(i, index(d, "-", 1)) { set(r, 1) } elsif(i, index(d, "FROM", 1)) { set(r, 1) } } return(r) } /* do_occu(n, i) - Process an OCCU node * * n - OCCU node * i - INDI containing * * An OCCU node will produce text saying " is/was a with ...." * It is assumed that the was printed before this routine was called. * If the person is (likely) deceased, if the OCCU node has a subordinate RETI node, * or if the DATE tag subordinate to the OCCU node is a range, then "was" is used in * the sentence; otherwise, "is" is used. The "with " clause is added if a * AGNC node is subordinate to the OCCU node; it is taken to be the name of the * employer. * */ proc do_occu(n, i) { /* Check for date range or RETI node and use "was" if either present. */ set(d, date(n)) call getValue(inode(i), "RETI") if(or(gotValue, isRange(d))) { " was" } else { call iswas(i) } " " call aAn(value(n)) " " call valuec(n) call getValue(n, "AGNC") if(gotValue) { " with " gottenValue } call process_event(n) /* if(putPeriod) {". "} */ } /* spousevitals(spouse, fam) Prints out information about a marriage (fam) and about a spouse in the marriage (spouse). */ proc spousevitals(spouse, fam) { call texname(inode(spouse), 3) if(spouse) { call print_sources(inode(spouse)) call getValue(inode(spouse),"NAME") if(gotValue) { call print_sources(gottenNode) } } if(e, marriage(fam)) { call process_event(e) } ". " call check_print_divinfo(fam) if(spouse) { set(bir, birth(spouse)) set(chr, baptism(spouse)) set(dea, death(spouse)) set(bur, burial(spouse)) set(dad, father(spouse)) set(mom, mother(spouse)) set(local_dead,global_dead) /* save for restore */ set(global_dead,dea) if(or(bir, chr, dea, bur, mom, dad)) { printablefirstname(spouse) if(or(mom, dad)) { ", " if(male(spouse)) { "the son of " } elsif(female(spouse)) { "the daughter of " } else { "the child of " } if(dad) { call texname(inode(dad), 3) if(lookup(stab, key(dad))) { "({\\bf " d(lookup(stab, key(dad))) "})" } } if(and(mom, dad)) { " and " } if(mom) { call texname(inode(mom), 3) if(lookup(stab, key(mom))) { "({\\bf " d(lookup(stab, key(mom))) "})" } ", " } } if(or(or(or(bir, chr), dea), bur)) { if(bir) { call vitalEvent(bir,1) call print_sources(bir) if(chr) { " and" call vitalEvent(chr,0) call print_sources(chr) ". " } if(dea) { if(chr) { pn(spouse,0) } else { " and" } call vitalEvent(dea,1) call print_sources(dea) ". " } else { if(not(chr)) { ". " } } /* born, but nothing more */ } if(and(chr, not(bir))) { call vitalEvent(chr,1) call print_sources(chr) ". " } if(and(dea,not(bir))) { /* if bir, then dea is already handled */ if(chr) { /* then need to print pronoun, otherwise don't since we still have the name standing there, not finishing a sentence */ pn(spouse,0) } call vitalEvent(dea,1) call print_sources(dea) ". " } if(bur) { if(or(or(bir,dea),chr)) { pn(spouse,0) } call vitalEvent(bur,0) call print_sources(bur) ".\n" } } } if(gt(nfamilies(spouse), 1)) { set(beforefam,1) families(spouse, newfam, newspouse, n) { if(ne(newfam, fam)) { printablefirstname(spouse) if(beforefam) { " had " if(gt(n, 1)) { "also " } "previously married " } else { " later remarried " } if(newspouse) { call texname(inode(newspouse), 3) } set(e,marriage(newfam)) if(e) { call process_event(e) } if(gt(nchildren(newfam), 0)) { ", and had " d(nchildren(newfam)) if(gt(nchildren(newfam), 1)) { " children " } else { " child" } " by that marriage: " children(newfam, stepchild, numerical) { if(gt(numerical,1)) { ", " } printablefirstname(stepchild) } } ". " } else { /* newfam = fam */ set(beforefam,0) /* we see the current family */ } } /* END families(spouse, newfam, newspouse, n) */ } /* END if(gt(nfamilies(spouse), 1)) */ if(not(lookup(stab, key(spouse)))) { /* don't print a 2nd time */ call getValue(inode(spouse),"OCCU") if(gotValue) { set(savenode,gottenNode) printablefirstname(spouse) /* should also check for a RETIred node and always say WAS if it exists */ /* DAB - replace with do_occu; delete this when do_occu is accepted call getValue(inode(spouse),"RETI") if(gotValue) { " was" } else { call iswas(spouse) } " " call aAn(value(savenode)) " " call valuec(savenode) call process_event(savenode) ". " */ call do_occu(savenode, spouse) ". " } call getText(inode(spouse),0) call process_book_notes(spouse) } set(global_dead,local_dead) /* restore */ } else { "\\noname" ".\n" } /* END if(spouse) block */ } /* texname(i, type) Prints an individual's name in LaTeX format, with the surname in small caps. For example, "David Kenneth /Olsen/ Jr." would be printed as "David Kenneth {\sc Olsen} Jr.". The type argument determines how the name will appear in the index. type = 0: no index type = 1: page number appears in bold type = 2: page number appears in bold-italics type = 3: page number appears in normal text The parameter i can be either an INDI node (NOT an individual) or a NAME node. */ proc texname(i, type) { list(name_list) set(sname, "") extractnames(i, name_list, num_names, surname_no) forlist(name_list, nm, num) { if(eq(num, surname_no)) { if(eq(strcmp(nm, ""), 0)) { " \\noname" set(sname, "\\noname") } else { if(eq(strcmp(nm, "____"), 0)) { set(sname, "\\noname") } else { " {\\sc " strxlat(tex_xlat, save(nm)) "}" set(sname, nm) } } } else { " " strxlat(tex_xlat, nm) } } if(gt(type, 0)) { "\\index{" strxlat(tex_xlat, sname) if(gt(num_names, 1)) { "," } forlist(name_list, nm, num) { if(ne(num, surname_no)) { " " strxlat(tex_xlat, nm) } } if(eq(type, 1)) { "|bold" } elsif(eq(type, 2)) { "|bfit" } "}" } } /* process_event(event_node, event_name) Prints information about a particular event (event_node, which is a GEDCOM node). event_name is verb form of the text describing the event (such as "Born", "Died", etc.). */ proc process_event(event_node) { call vitalEvent(event_node,0) call print_sources(event_node) call print_notes(event_node, " ") } proc inPlace(event) { if(place(event)) { if(eq(strcmp(place(event),""),0)) { " in \\noname" } else { call atAddr(event) if(not(strcmp(atAddrValue,""))) { set(fullSpecCompare,1) } else { set(fullSpecCompare,2) } /* there was an ADDR. We want to say at X in Y */ list(placeList) list(placeTextList) list(placeTagList) extractplaces(event, placeList, nPlaces) requeue(placeList, atAddrValue) while(placeText, dequeue(placeList)) { enqueue(placeTextList, placeText) set(placeTag, placeText) forlist(placeList, place, placeN) { set(placeTag, save(concat(placeTag, concat("-", place)))) } enqueue(placeTagList, placeTag) } set(there, getel(placeTagList, 1)) if(not(strcmp(there, lookup(eventPlaceTable, "@there@")))) { "\nthere" } else { insert(eventPlaceTable, "@there@", there) set(fullySpecified, 0) forlist(placeTextList, place, placeN) { set(placeTag, dequeue(placeTagList)) if(not(eq(fullySpecified,fullSpecCompare))) { if(eq(placeN, 2)) { /* if the name of the place doesn't start with "near", say "in" */ if(and( strcmp(substring(place,1,4), "near"), strcmp(substring(place,1,2), "in"), strcmp(substring(place,1,5), "south"), strcmp(substring(place,1,5), "north"), strcmp(substring(place,1,4), "west"), strcmp(substring(place,1,4), "from"), strcmp(substring(place,1,4), "east"))) { /* note that case matters a lot in that comparison */ /* a town might be named North English, but one should always have written, "north of English" if you just want to say it is outside of town */ "\nin " } else { if(not(strcmp(substring(place,1,4), "from"))) { " and was\n" /* Actually, that isn't quite what I want because if it has someone b. PLAC from there but no date, it'll wind up outputting "He was born and was from there". But oh well. */ } else { "\n" /* put nothing there if it says "near" */ } } } elsif(gt(placeN, 2)) { ", " } place if(strlen(place)) { if(not(lookup(eventPlaceTable, placeTag))) { insert(eventPlaceTable, placeTag, 1) /* this next fiddling with fullSpecCompare is because the FIRST time we see an "at ADDR in a,b,c" since ADDR-a-b-c isn't in the table, it would try to print "at ADDR in a,b". We just want it to print "at ADDR in a" if a,b,c was previously defined. */ set(fullSpecCompare,1) } else { set(fullySpecified, add(fullySpecified,1)) } if(gt(index(place,"Twp",1),0)) { /* then it is just the name of a township, which I don't think is much use without the county name, so I'm always going to force it to print the county name if it gives a township */ set(fullSpecCompare,add(1,fullSpecCompare)) } } }/* end if not fullySpecified */ } } }/* matches the else for place being non-null */ } } /* Possible customization I have chosen not to implement: Suggested by: "John F. Chandler" if(gt(nPlaces,1)) { set(inWord,"at") } else { set(inWord,"in") } if(not(strcmp(tag(event),"IMMI"))) { set(inWord,"to") } if(not(strcmp(tag(event),"GRAD"))) { if(eq(nPlaces,1)) { set(inWord,"from") } else { set(inWord,"-") } } inWord " " instead of the original "in ". This assumes that the institution is recorded in the PLAC I (DN) Think there is a little more to it than that because of the way I currently use atAddr, but I'm sure you can figure all that out. I currently assume that the institution name is the value of the 1 GRAD line, e.g. 1 GRAD Univ. of Iowa and I handle it as a special case. */ proc atAddr(root) { set(atAddrValue, "") if(root) { fornodes(root, node) { if(not(strcmp(tag(node), "PLAC"))) { fornodes(node, subnode) { if(and(not(strcmp(atAddrValue, "")), or(not(strcmp(tag(subnode), "ADDR")), not(strcmp(tag(subnode), "CEME"))))) { if(val, value(subnode)) { set(atAddrValue, save(concat("\nat ", val))) } } } } } } } proc check_print_divinfo(fam) { call getValue(fnode(fam), "DIV") if(gotValue) { " They divorced" call process_event(gottenNode) ". " } } /* print_notes(root, sep): Prints all the notes (NOTE nodes) associated with the GEDCOM line root, separated by the given separator. */ proc print_notes(root, sep) { fornotes(root, note) { sep strxlat(tex_xlat, note) /* " "*/ } } proc process_book_notes(indi) { set(hadpednote,0) set(haddescnote,0) set(doexcursion,0) fornotes(inode(indi), note) { set(i, index(note, "BOOKPEDIGREE", 1)) if(gt(i, 0)) { set(hadpednote, 1) } set(i, index(note, "BOOKDESCENDENT", 1)) if(gt(i, 0)) { set(haddescnote, 1) } set(i, index(note, "BOOKEXCURSION", 1)) if(gt(i, 0)) { set(doexcursion, 1) } set(i, index(note, "BOOKCHAPSPLIT", 1)) if(gt(i, 0)) { set(hadsplitnote, 1) } } if(eq(hadpednote,1)) { call pedigreeFigure(indi) if(strcmp(pedigreeFigureLabel, "")) { pn(indi, 2) " pedigree is illustrated in Figure \\protect\\ref{" pedigreeFigureLabel "}." } } if(force_desc_chart) { set(haddescnote,1) } if(eq(haddescnote,1)) { set(descFigureLabel, save(concat(key(indi), "-figure-desc"))) "\nA brief chart of the descendants of " call texname(inode(indi), 3) " is contained in " "Figure~\\ref{" descFigureLabel "}." "\n\\begin{figure*}\n" "\\centering\n" call desc_chart_main3(indi) "\n\\caption{Descendents of " strxlat(tex_xlat, fullname(indi,0,1,99)) "({\\bf " d(lookup(stab, key(indi))) "})}" nl() "\\label{" descFigureLabel "}" "\\end{figure*}\n" } if(eq(0, ancestormode)) { if(eq(doexcursion, 1)) { pn(indi, 2) " ancestors will be discussed in depth on page~\\pageref{" key(indi) "-excur-ref}" " in this chapter.\n\n" enqueue(excurlist, indi) } } } proc pedigreeFigure(i) { indiset(iSet) addtoset(iSet, i, 1) set(max, 0) indiset(extraSet) set(extraSet,ancestorset(iSet)) forindiset(extraSet, indi, val, num) { if(gt(val, max)) { set(max, val) } } if(gt(max, 1)) { set(pedigreeFigureLabel, save(concat(key(i), "-figure-pedigree"))) if(gt(max, 5)) { set(max, 5) } call figPed(max, i) } else { set(pedigreeFigureLabel, "") } } proc figPed(n, indi) { "\n\\begin{figure*}" "\n\\centering" "\n\\small" "\n\\setlength{\\unitlength}{" if(eq(n, 5)) { ".8" } else { ".9" } "\n\\baselineskip}" call pow(2, n) "\n\\begin{picture}(" d(add(mul(6, n), 12)) "," d(sub(mul(powValue, 2), 1)) ")(0,.5)" call ped6(indi, 0, powValue, powValue) "\n\\end{picture}" "\n\\caption{Pedigree of " call scname(indi) "}" "\n\\label{" pedigreeFigureLabel "}" "\n\\end{figure*}" } proc ped6(indi, x, y, z) { "\n\\put(" d(mul(x, 6)) "," d(y) "){\\makebox(0,0)[l]{" call scname(indi) "}}" if(x) { "\n\\put(" d(sub(mul(x, 6), 3)) "," d(y) "){\\line(1,0){" d(3) "}}" "\n\\put(" d(sub(mul(x, 6), 3)) "," d(y) "){\\line(0," if(female(indi)) { "1" } else { "-1" } "){" d(sub(z, 1)) ".4}}" } if(z2, div(z, 2)) { if(f, father(indi)) { call ped6(f, add(x, 1), add(y, z2), z2) } if(m, mother(indi)) { call ped6(m, add(x, 1), sub(y, z2), z2) } } } proc scname(indi) { strxlat(tex_xlat, fullname(indi, 0, 1, 99)) if(lookup(stab, key(indi))) { "({\\bf " d( lookup(stab, key(indi))) "})" } } proc pow(x, i) { set(powValue, 1) call powIt(x, i) } proc powIt(x, i) { if(i) { set(powValue, mul(powValue, x)) call powIt(x, sub(i, 1)) } } /* print_sources(root) Prints all sources (SOUR lines) associated with the given GEDCOM line. The sources are formatted as LaTeX footnotes. This routine prints each SOUR line as a separate footnote, which is not correct. This should be corrected so that all sources are combined into a single footnote. */ proc print_sources(root) { enqueue(sourceList,root) call sourceIt(sourceList) } /* valuec(n): Prints the value of a GEDCOM node and the values of any CONT lines associated with it. */ proc valuec(n) { value(n) fornodes(n, n1) { if(eq(strcmp(tag(n1), "CONT"), 0)) { "\n" value(n1) } elsif(eq(strcmp(tag(n1), "CONC"), 0)) { value(n1) } } } proc resetdayplace() { call setDayNumber(0) insert(eventPlaceTable, "@there@", "") } proc vitalEvent(event, reset) { if(reset) { call setDayNumber(0) insert(eventPlaceTable, "@there@", "") } if(event) { if(eventName, lookup(eventNameTable, tag(event))) { " " eventName if( or( not(strcmp(tag(event), "ADOP")), not(strcmp(tag(event), "CHR")), not(strcmp(tag(event), "CREM")), not(strcmp(tag(event), "BURI")) )) { set(previousDayNumber, dayNumber) } else { set(previousDayNumber, 0) } } if(not(eventName)) { call getValue(event, "TYPE") if(gotValue) { " " strxlat(tex_xlat, gottenValue) } } if(not(strcmp(tag(event), "DEAT"))) { call ofCause(event) } call onDate(event) call atAge(event) call inPlace(event) } } proc setDayNumber(event) { set(dayNumber, 0) if(date(event)) { extractdate(event, day, month, year) /* DAB - Have to check day month and year, otherwise two events for which only the year is known are said to have occurred on "the same day" */ if(and(and(year, month), day)) { set(yearNumber, add(mul(year, 365), div(year, 4), neg(div(year, 100)), div(year, 400))) set(monthNumber, getel(daysToMonthList, month)) set(leapYear, and(eq(mod(year, 4), 0), not(and(eq(mod(year, 100), 0), ne(mod(year, 400), 0))))) if(and(leapYear, le(month, 2))) { decr(monthNumber) } set(dayNumber, add(yearNumber, monthNumber, day)) } } } /* This was the old way, replaced by the above by Jim Eggert */ /* proc setDayNumber(event) { set(dayNumber, 0) if(date(event)) { extractdate(event, day, month, year) if(year) { set(yearNumber, sub(add(mul(year, 365), div(year, 4)), div(year, 400))) set(monthNumber, getel(daysToMonthList, month)) set(leapYear, and(eq(mod(year, 4), 0), not(and(eq(mod(year, 100), 0), ne(mod(year, 400), 0))))) if(and(leapYear, gt(month, 2))) { incr(monthNumber) } set(dayNumber, add(yearNumber, monthNumber, day)) } } } */ proc atAge(event) { call getValueCont(event, "AGE") if(gotValue) { if(not(strcmp(gottenValue, "young"))) { "\nyoung" } elsif(not(strcmp(gottenValue, "0"))) { "\nas an infant" } elsif(not(strcmp(gottenValue, "infancy"))) { "\nas an infant" } else { "\nat age " strxlat(tex_xlat, gottenValue) } } } proc ofCause(event) { call getValueCont(event, "CAUS") if(gotValue) { "\nof " strxlat(tex_xlat, gottenValue) } } proc onDate(event) { if(atmax_generation) { if(global_dead) { set(year_only,0) } else { set(year_only,1) } } else { set(year_only,0) } call setDayNumber(event) if(d, date(event)) { if(strcmp(d, "Not married")) { if(eq(strcmp(d, ""),0)) { "\nin \\nodate\\ " } elsif(eq(index(d, "AFT", 1), 1)) { "\nsome time after " } elsif(eq(index(d, "Aft", 1), 1)) { "\nsome time after " } elsif(eq(index(d, "BEF", 1), 1)) { "\nsome time before " } elsif(eq(index(d, "Bef", 1), 1)) { "\nsome time before " } elsif(eq(index(d, "ABT", 1), 1)) { "\ncirca " } elsif(eq(index(d, "Abt", 1), 1)) { "\ncirca " } elsif(eq(index(d, "FROM", 1), 1)) { set(t, index(d, "TO", 1)) /* DAB - experimental (and not working) set(fromDateEvent, createnode("EVEN", "")) set(fromDateNode, createnode("DATE", substring(d, add(1, strlen("FROM")), sub(t, 1)) )) addnode(fromDateNode, fromDateEvent, 0) set(toDateEvent, createnode("EVEN", "")) set(toDateNode, createnode("DATE", substring(d, add(t, strlen("TO")), strlen(d)) )) addnode(toDateNode, toDateEvent, 0) DEBUG: "\n from date nodes: " traverse(fromDateEvent, xx, yy) { d(yy) ": " tag(xx) " " value(xx) } "\n to date nodes: " traverse(toDateEvent, xx, yy) { d(yy) ": " tag(xx) " " value(xx) } "\nfrom " stddate(fromDateEvent) " to " stddate(toDateEvent) deletenode(toDateNode) deletenode(toDateEvent) deletenode(fromDateNode) deletenode(fromDateEvent) DAB - end of experimental */ /* DAB - This way work, but doesn't necessarily produce dates in the same format as stddate */ "\nfrom " substring(d, add(1, strlen("FROM")), sub(t, 1)) " to " substring(d, add(t, strlen("TO")), strlen(d)) set(event, 0) } elsif(i, index(d, "-", 1)) { "\nbetween " substring(d, 1, sub(i, 1)) " and " substring(d, add(i, 1), strlen(d)) set(event, 0) } elsif(and(dayNumber, eq(dayNumber, previousDayNumber))) { "\non the same day" set(event, 0) } elsif(and(dayNumber, eq(dayNumber, add(previousDayNumber, 1)))) { "\non the next day" set(event, 0) } elsif(and(dayNumber, eq(dayNumber, add(previousDayNumber, 2)))) { "\ntwo days later" set(event, 0) } elsif(and(dayNumber, eq(dayNumber, add(previousDayNumber, 7)))) { "\none week later" set(event, 0) } else { if(year_only) { "\nin " } else { extractdate(event, d, m, y) if(d) { "\non " } else { "\nin " } } } if(event) { if(and(dayNumber, eq(dayNumber, previousDayNumber))) { "that day" } else { if(year_only) { year(event) } else { stddate(event) } } } } } } proc getValue(root, t) { set(gotValue, 0) if(root) { fornodes(root, node) { if(and(not(gotValue), not(strcmp(tag(node), t)))) { set(gotValue, 1) set(gottenNode, node) set(gottenValue, save(value(node))) } } } } proc getValueCont(root, t) { set(gotValue, 0) if(root) { fornodes(root, node) { if(and(not(gotValue), not(strcmp(tag(node), t)))) { set(gotValue, 1) set(gottenNode, node) set(gottenValue, save(value(node))) fornodes(node, subnode) { if(not(strcmp("CONT", tag(subnode)))) { /* If you want empty CONT tags to not leave a blank line, uncomment the following "if". * However, a blank line can be very useful (or even necessary) for some TeX formatting. */ /*if(strlen(value(subnode))) {*/ set(gottenValue, save(concat(gottenValue, "\n", value(subnode)))) /*}*/ } elsif(not(strcmp("CONC", tag(subnode)))) { /* Same comment as above, this time for CONC tags */ /*if(strlen(value(subnode))) {*/ set(gottenValue, save(concat(gottenValue, value(subnode)))) /*}*/ } } } } } } proc getValueCommaCont(root, t) { set(gotValue, 0) if(root) { fornodes(root, node) { if(and(not(gotValue), not(strcmp(tag(node), t)))) { set(gotValue, 1) set(gottenNode, node) set(gottenValue, save(value(node))) fornodes(node, subnode) { if(not(strcmp("CONT", tag(subnode)))) { if(strlen(value(subnode))) { set(gottenValue, save(concat(gottenValue, ",\n", value(subnode)))) } } elsif(not(strcmp("CONC", tag(subnode)))) { if(strlen(value(subnode))) { set(gottenValue, save(concat(gottenValue, value(subnode)))) } } } } } } } proc aAn(s) { set(s, save(trim(lower(s), 1))) if(not(strcmp(s, "a"))) { "an" } elsif(not(strcmp(s, "e"))) { "an" } elsif(not(strcmp(s, "i"))) { "an" } elsif(not(strcmp(s, "o"))) { "an" } elsif(not(strcmp(s, "u"))) { "an" } elsif(not(strcmp(s, "x"))) { "an" } else { "a" } } func printablefirstname(i) { set(firstname, givens(i)) if(eq(strcmp(firstname, ""), 0)) { set(namereturn, save("\\noname")) } else { set(where, index(firstname, " ", 1)) /* don't print out middle names */ if(gt(where, 0)) { set(namereturn, save(substring(firstname, 1, sub(where, 1)))) } else { set(namereturn, save(firstname)) } /* if no middle names */ set(namereturn, strxlat(tex_xlat, namereturn)) } return(namereturn) } proc iswas(indi) { call setDayNumber(birth(indi)) if(or(death(indi), or(not(dayNumber), lt(dayNumber, 693971)))) { "\nwas" } else { "\nis" } } /* Check to see if this family might still have children at some point: If one spouse is dead, too old, or they are divorced; then they won't. */ proc havehadchildren(indi, spouse) { call setDayNumber(birth(indi)) set(indiDayNumber, dayNumber) call setDayNumber(birth(spouse)) set(divp, 0) spouses(indi, s, f, n) { if(eq(s, spouse)) { call getValue(fnode(f), "DIV") set(divp, gotValue) break() } } if( or( death(indi), or(not(indiDayNumber), lt(indiDayNumber, 693971)), death(spouse), or(not(dayNumber), lt(dayNumber, 693971)), divp )) { "\\ had no children.\n" } else { "\\ have no children.\n" } } /* illegit_check gives people a break. If we have no marriage record, the assumption still is that the couple were married and that is the word we stick in the text. Only if it specifically says they were not married, do we state that they weren't */ proc illegit_check(fam) { set(not_married_flag, 0) if(e,marriage(fam)) { if(d, date(e)) { if(not(strcmp(d, "Not married"))) { set(not_married_flag, 1) } } } } proc sourceIt(sourceList) { list(cList) list(fList) set(cn, 0) while(root, dequeue(sourceList)) { fornodes(root, node) { if(not(strcmp( tag(node), "SOUR"))) { set(footnote, 1) set(val, value(node)) if(val) { if(reference(val)) { call bibliographize(dereference(val)) } } if(xref(node)) { call bibliographize(node) set(val, xref(node)) } if(val) { set(a1, index(val, "@", 1)) set(a2, index(val, "@", 2)) if(and(eq(a1, 1), eq(a2, strlen(val)))) { set(c, save(substring(val, 2, sub(strlen(val), 1)))) enqueue(cList, c) incr(cn) set(footnote, 0) } } else { set(subnodecount, 0) fornodes(node, subnode) { if(strcmp(tag(subnode), "SOUR")) { incr(subnodecount) } } if(eq(subnodecount, 0)) { fornodes(node, subnode) { set(val, value(subnode)) /* With loadsources, this is needed here. It is technically illegal gedcom. */ if(xref(subnode)) { call bibliographize(subnode) set(val, xref(subnode)) } if(val) { set(a1, index(val, "@", 1)) set(a2, index(val, "@", 2)) if(and(eq(a1, 1), eq(a2, strlen(val)))) { set(c, save(substring(val, 2, sub(strlen(val), 1)))) enqueue(cList, c) incr(cn) } } } set(footnote, 0) } } if(footnote) { enqueue(fList, node) } } } } while(cn) { forlist(cList, c, n) { if(and(ne(n, cn), not(strcmp(c, getel(cList, cn))))) { setel(cList, cn, "") } } decr(cn) } if(not(empty(fList))) { "\n\\footnote{" while(f, dequeue(fList)) { set(first, 1) call getValueCont(f, "TITL") if(gotValue) { if(not(first)) { ", " } else { set(first, 0) } "\n" strxlat(tex_xlat, gottenValue) } call getValueCont(f, "DATE") if(gotValue) { if(not(first)) { ", " } else { set(first, 0) } "\n" strxlat(tex_xlat, gottenValue) } call getValueCont(f, "PLAC") if(gotValue) { if(not(first)) { ", " } else { set(first, 0) } "\n" strxlat(tex_xlat, gottenValue) } call getValueCont(f, "VOLU") if(gotValue) { if(not(first)) { ", " } else { set(first, 0) } if( or(index(gottenValue, "-", 1), index(gottenValue, ",", 1), index(gottenValue, "and ", 1) )) { "\nVolumes " } else { "\nVolume " } strxlat(tex_xlat, gottenValue) } call getValueCont(f, "PAGE") if(gotValue) { if(not(first)) { ", " } else { set(first, 0) } if( or(index(gottenValue, "-", 1), index(gottenValue, ",", 1), index(gottenValue, "and ", 1) )) { "\nPages " } else { "\nPage " } strxlat(tex_xlat, gottenValue) } call getValueCont(f, "FILM") if(gotValue) { if(not(first)) { ", " } else { set(first, 0) } "on Latter Day Saints Microfilm Number " strxlat(tex_xlat, gottenValue) } call getValueCont(f, "TEXT") if(gotValue) { set(first, 0) "\n" strxlat(tex_xlat, gottenValue) } if(not(first)) { "\\@." } call getValueCont(f, "NOTE") if(gotValue) { set(first, 0) "\n" strxlat(tex_xlat, gottenValue) } if(and(first, not(value(f)))) { "\n" } call values(f) } "}" } if(not(empty(cList))) { "\\cite{" while(c, dequeue(cList)) { if(strlen(c)) { if(cn) { "," } c incr(cn) } } "}" } } proc bibliographize(root) { set(val, xref(root)) set(c, save(substring(val, 2, sub(strlen(val), 1)))) if(not(lookup(bibTable, c))) { insert(bibTable, c, 1) /* call getValueCont(root, "TEXT") if(figureFlag, gotValue) { enqueue(figureCiteList, c) enqueue(figureNodeList, gottenNode) } */ set(cref, save(concat("\\protect\\ref{", c, "}"))) set(pref, save(concat("\\protect\\pageref{", c, "}"))) set(b, "\\bibitem") if(figureFlag) { set(b, save(concat(b, "[", cref, "]"))) } set(b, save(concat(b, "{", c, "} "))) call getValueCont(root, "TITL") if(gotValue) { set(b, save(concat(b, "{\\em ", strxlat(tex_xlat, gottenValue), "}, "))) } call getValueCont(root, "AUTH") if(gotValue) { set(b, save(concat(b, " ", strxlat(tex_xlat, gottenValue), ", "))) set(authnode, gottenNode) call getValueCont(authnode, "EMAI") if(gotValue) { if(opt_email) { set(b, save(concat(b, strxlat(tex_xlat, gottenValue), ", "))) } else { set(b, save(concat(b, "e-mail address on file, "))) } } } call getValueCont(root, "PUBL") if(gotValue) { set(pubnode,gottenNode) call getValueCont(pubnode, "NAME") if(gotValue) { set(b, save( concat(b, "in {\\em ", strxlat(tex_xlat, gottenValue), "}, "))) } call getValueCommaCont(pubnode, "ADDR") if(gotValue) { set(b, save( concat(b, strxlat(tex_xlat, gottenValue), ": "))) } call getValueCont(pubnode, "PUBR") if(gotValue) { set(b, save( concat(b, strxlat(tex_xlat, gottenValue), ", "))) } call getValueCont(pubnode, "PHON") if(gotValue) { set(b, save(concat(b, strxlat(tex_xlat, gottenValue), ", "))) } call getValueCont(pubnode, "DATE") if(gotValue) { set(b, save( concat(b, strxlat(tex_xlat, gottenValue), ", "))) } call getValueCont(pubnode, "VOLU") if(gotValue) { set(word, "Volume ") if( or(index(gottenValue, "-", 1), index(gottenValue, ",", 1), index(gottenValue, "and ", 1) )) { set(word, "Volumes ") } set(b, save(concat(b, word, strxlat(tex_xlat, gottenValue), ", "))) } call getValueCont(pubnode, "NUM") if(gotValue) { set(word, "Number ") if( or(index(gottenValue, "-", 1), index(gottenValue, ",", 1), index(gottenValue, "and ", 1) )) { set(word, "Numbers ") } set(b, save(concat(b, word, strxlat(tex_xlat, gottenValue), ", "))) } call getValueCont(root, "LCCN") if(gotValue) { set(b, save( concat(b, "Call Number ", strxlat(tex_xlat, gottenValue), ", "))) } } call getValueCont(root, "PAGE") if(gotValue) { set(word, "page ") if( or(index(gottenValue, "-", 1), index(gottenValue, ",", 1), index(gottenValue, "and ", 1) )) { set(word, "pages ") } set(b, save(concat(b, word, strxlat(tex_xlat, gottenValue), ", "))) } call getValueCont(root, "FILM") if(gotValue) { set(b, save(concat(b, "Filmed by the Church of Jesus Christ of Latter Day Saints, ", "Microfilm Number ", strxlat(tex_xlat, gottenValue), ", "))) } call getValueCont(root, "FICH") if(gotValue) { set(b, save(concat(b, "Filmed by the Church of Jesus Christ of Latter Day Saints, ", "Microfiche Number ", strxlat(tex_xlat, gottenValue), ", "))) } call getValueCont(root, "REPO") if(gotValue) { set(b, save(concat(b, "at ", strxlat(tex_xlat, gottenValue), ", "))) } if(index(b, ", ", 1)) { set(b, save(concat(save(substring(b, 1, sub(strlen(b), 2))), "."))) } call getValueCont(root, "NOTE") if(gotValue) { set(b, save(concat(b, " ", strxlat(tex_xlat, gottenValue)))) } call getValueCont(root, "TEXT") if(gotValue) { set(b, save(concat(b, " ", strxlat(tex_xlat, gottenValue)))) } call getValueCont(root, "HIDE") if(gotValue) { set(b, save(concat(b, " ", strxlat(tex_xlat, gottenValue)))) } call getValueCont(root, "SOUR") if(gotValue) { set(bb, "?") if(gottenValue) { set(a1, index(gottenValue, "@", 1)) set(a2, index(gottenValue, "@", 2)) if(and(eq(a1, 1), eq(a2, strlen(gottenValue)))) { set(bb, save(substring(gottenValue, 2, sub(strlen(gottenValue), 1)))) } } set(b, save(concat(b, "\\cite{", strxlat(tex_xlat, bb), "}"))) } if(figureFlag) { set(b, save(concat(b, " See figure on page~", pref, "."))) } /* This while loop undoes the line breaking in a CONT/CONC. Since those line breaks can be significant, it is commented out. */ /* while(i, index(b, "\n", 1)) { set(b, save( concat( substring(b, 1, sub(i, 1)), " ", substring(b, add(i, 1), strlen(b)) ) )) } */ enqueue(bibList, save(concat(b, "\n"))) } } proc getText(root, paragraph) { set(pronounOkay, 1) if(root) { if(eq(1,notes_text_mode)) { /* only 1 TEXT records */ fornodes(root, node) { if(not(strcmp("TEXT", tag(node)))) { set(pronounOkay, 0) if(paragraph) { "\n\n" set(paragraph, 0) } call values(node) "\n\n" } } } else { if(eq(2,notes_text_mode)) { /* all 1 NOTE records */ fornotes(root, note) { if(paragraph) { "\n\n" set(paragraph, 0) } strxlat(tex_xlat, note) "\n\n" set(pronounOkay, 0) } } else { /* only !-tagged 1 NOTE records (1st char must be !) */ fornotes(root, note) { set(i, index(note,"!",1)) if(eq(1,i)) { set(pronounOkay, 0) if(paragraph) { "\n\n" set(paragraph, 0) } strxlat(tex_xlat, substring(note, 2, strlen(note))) "\n\n" } } } } } /* if we printed any notes, then reset things so we don't use "there" in place names right after the notes. */ if(not(pronounOkay)) { insert(eventPlaceTable, "@there@", "") } } proc values(root) { if(root) { if(strlen(value(root))) { "\n" strxlat(tex_xlat, value(root)) } fornodes(root, node) { if(not(strcmp("CONT", tag(node)))) { if(strlen(value(node))) { "\n" strxlat(tex_xlat, value(node)) } } elsif(not(strcmp("CONC", tag(node)))) { if(strlen(value(node))) { strxlat(tex_xlat, value(node)) } } } if(root) { enqueue(sourceList, root) } call sourceIt(sourceList) } } /********************************************************************/ /* below here are routines for printing descendant charts */ /* * These are adapted from desc-tex * By Eric Majani (eric@elroy.jpl.nasa.gov) */ proc desc_chart_main3(indi) { "\\tree\n" call desc_chart_out(indi,3,1) "\\endtree\n" } proc descch_indi(indi) { "{\\bf " call desc_chart_name(indi) "}" if(or(birth(indi),death(indi))) { " " if(e, birth(indi)) { year(e) } "-" if(e, death(indi)) { year(e) } } nl() families(indi,fam,sp,num) { if(e,marriage(fam)) { " m. " short(e) nl() } } } proc desc_chart_name(i) { set(whole, givens(i)) set(space,index(whole, " ", 1)) if(gt(space, 0)) { strxlat(tex_xlat, substring(whole, 1, space)) } else { strxlat(tex_xlat, whole) " " } if(eq(strcmp(surname(i), "____"), 0)) { " \\noname" } else { strxlat(tex_xlat, surname(i)) } } proc descch_indinomar(indi) { "{\\bf " call desc_chart_name(indi) "}" if(or(birth(indi),death(indi))) { " " if(e, birth(indi)) { year(e) } "-" if(e, death(indi)) { year(e) } } nl() } proc descch_prcouple(indi,fam,num) { if(eq(num,1)) { "{\\bf " call desc_chart_name(indi) "}" if(e, birth(indi)) { " " year(e)"-" } if(e, death(indi)) { if(not(birth(indi))) { " -" } year(e) } } nl() /* I can't remember why I put this IF in here. I guess I'll take it out and see what breaks! */ /* if(eq(num,nfamilies(indi))) { */ if(e,marriage(fam)) { " m. " year(e) " " } else { "m.\\ \\ \\ \\ \\ \\ " } /* space over without date */ /*}*/ } proc descch_printfam(indi,fam,sp) { "\\spouse{ " call desc_chart_name(sp) "}" nl() } proc desc_chart_out(indi,depth,level) { if(or(eq(0,nfamilies(indi)),eq(depth,level))) { call descch_indinomar(indi) } if(lt(level,depth)) { families(indi,fam,sp,num) { call descch_prcouple(indi,fam,num) call descch_printfam(indi,fam,sp) set(level,add(level,1)) set(num2,0) if(le(level,depth)) { children(fam,child,num2) { "\\subtree " nl() call desc_chart_out(child,depth,level) "\\endsubtree " nl() } } set(num2,nchildren(fam)) set(level,sub(level,1)) set(temp1,ne(num,nfamilies(indi))) set(temp2,gt(num2,0)) if(and(temp1,temp2)) /* if(ne(num,nfamilies(indi))) */ { if(eq(level,1)) { "\\endtree " nl() "\\tree " nl() } else { "\\endsubtree " nl() "\\subtree " nl() } } } } } proc excursion(indi) { list(anclist) indiset(ancset) "\n\\section{" strxlat(tex_xlat, surname(indi)) " Ancestors" "}" "\n" "\\label{" key(indi) "-excur-ref}" "\n" /* get us to the patriarch of the line.*/ set(thisguy,indi) addtoset(ancset,thisguy,0) while(father(thisguy)) { set(thisguy,father(thisguy)) push(anclist,thisguy) addtoset(ancset,thisguy,0) } "The " strxlat(tex_xlat, surname(indi)) " line has been traced back to " call texname(inode(thisguy), 0) "." while(indi,pop(anclist)) { print("Excursion: ") print(name(indi)) print("\n") call longvitals(indi,1,2) families(indi, fam, spouse, nfam) { "\n\n" if(eq(0, nchildren(fam))) { call texname(inode(indi), 0) "\\ and " if(spouse) { call texname(inode(spouse), 0) } else { "\\noname" } call havehadchildren(indi, spouse) } elsif(and(spouse, lookup(stab, key(spouse)))) { "Children of " call texname(inode(indi), 0) "\\ and " call texname(inode(spouse), 0) "\\ are shown under " call texname(inode(spouse), 0) "(" d(lookup(stab, key(spouse))) ").\n\n" } else { "Children of " call texname(inode(indi), 0) "\\ and " if(spouse) { call texname(inode(spouse), 0) } else { "\\noname" } ":\n\\begin{childrenlist}\n" children(fam, child, nchl) { "\n\\item " set(personIsAnc,0) forindiset(ancset,them,val,num) { if(eq(them, child)) { set(personIsAnc,1) } } if(personIsAnc) { "**" call shortvitals(child) } else { call longvitals(child, 0,2) } addtoset(idex, child, 0) } "\\end{childrenlist}\n" } } } "\n\n\n" } /* ** function: strxlat ** ** This idea was copied and/or adapted from Jim Eggert's modification ** to the ps-circ(le) program for LifeLines. ** A typical call would look like: ** set(str, strxlat(tex_xlat, name(person))) ** which would translate characters in person's name according to the ** table called tex_xlat -- which escapes the special characters being ** displayed as text via LaTeX. The output is assigned to str. ** The output of strxlat() can also be sent directly to output. ** */ func strxlat(xlat, string) { if(opt_xlat) { set(fixstring, "") set(pos, 1) while(le(pos, strlen(string))) { set(char, substring(string, pos, pos)) if(special, lookup(xlat, char)) { set(fixstring, concat(fixstring, special)) } else { set(fixstring, concat(fixstring, char)) } incr(pos) } } else { set(fixstring, string) } return(save(fixstring)) /* save() is used for compatibilty with older LL */ } lifelines-3.0.61/reports/browser.ll0000700002540200244210000000463010313647737017471 0ustar prappDomain Users/* * @progname browser.ll * @version 1.0 * @author Prinke * @category * @output onscreen * @description browsing via all kinds of links, especially in non-standard or experimental GEDCOM structures browser.ll v.1.0 Rafal T. Prinke -- 19 APR 1997 -- rafalp@hum.amu.edu.pl */ proc main() { list(back) list(backhdr) getindi(p, "Person to start with: ") if(not(p)) { break() } set(i, savenode(root(p))) set(hdr, concat("*** INDI: ", name(p,0)," ***")) set(bh, "----- BACK") while(i) { list(mnu) list(gto) enqueue(gto,0) enqueue(gto,0) enqueue(mnu,"----- STOP") enqueue(mnu,bh) traverse (i, node, x) { if (reference(value(node))) { set (n, dereference(value(node))) enqueue(gto, savenode(n)) if(eq(substring(value(node),1,2),"@I")) { set(show,concat("INDI: ", name(indi(value(node)),0))) } elsif(eq(substring(value(node),1,2),"@S")) { set(show,concat("SOUR: ", value(child(n)) )) } elsif(eq(substring(value(node),1,2),"@E")) { set(show,concat("EVEN: ", value(child(n)) )) } elsif(eq(substring(value(node),1,2),"@F")) { set(show,concat("FAM: ", name(husband(fam(value(node))),0), " & ", name(wife(fam(value(node))),0))) } else { set(show, concat("OTHER:",value(child(node)))) } enqueue(mnu, show) } } set(why, menuchoose(mnu, hdr)) if(eq(why, 1)) { break() } elsif(eq(why, 2)) { if(empty(back)) { set(bh, "-- THIS IS THE FIRST RECORD - CAN'T GO BACK --") push(back, savenode(i)) push(backhdr, hdr) } set(i, pop(back)) set(hdr, pop(backhdr)) } else { push(back, savenode(i)) push(backhdr, hdr) set(nd, getel(gto, why)) set(hdr, concat("*** ",getel(mnu, why)," ***")) set(i, nd) set(bh, "----- BACK") } } } lifelines-3.0.61/reports/burial_index.ll0000700002540200244210000002023010076661056020441 0ustar prappDomain Users/* * @progname burial_index.ll * @version 1.0 * @author Nicklaus * @category * @output Text * @description Write an (unsorted) list of every person in the database whose burial place contains a requested string (which is the "town" that this report asks for). It matches for the town anywhere in the place field. so town can also be a state or county. Personally, many of my relatives are from Iowa, so I like to make a file of everyone buried in Iowa by entering Iowa to the prompt. For MY typical record, which looks like 1 NAME First /Last/ 1 BIRT 2 DATE 31 Dec 1900 1 DEAT 2 DATE 1 Jan 2000 1 BURI 2 PLAC town,county,state 3 ADDR cemeteryname (technically should be 2 ADDR acc. to new GEDCOM std.) burial_index produces a line which looks like: town,cemeteryname : Last, First (1900-2000) If your database looks like: 1 BURI 2 PLAC cemeteryname,town,county,state Then you'll probably want to change this report around a bit. Where I do: "getel(parts,1)", you'll want: "getel(parts,2) getel(parts,1)". For married women, it attempts to make their name what it may be on their tombstone, that is, the surname of their first husband, but includes a "nee" (= "born", but without the accent mark) and the maiden name. This generally works great for the standard once-married person. If a woman was married multiple times, it puts all the husbands' surnames on there, starting with the first husband, ending with the maiden surname. So my ancestor, Ruth, maiden surname Matthews, who first married E. Scott, 2nd J. Alkire, and 3rd married N. Bates, gets an entry like this: Scott, a.k.a. Alkire, a.k.a. Bates, nee Matthews, Ruth (1831-1917) where a.k.a. stands for "also known as". In doing all this, it'll (possibly wrongly) assume both that a woman was married and took on the father's surname for any family she was a parent in. It's pretty tough to cover every case automatically, so you just have to examine and edit the output when it's done if you care. It is probably useful to run the output of this through Unix sort. There is also a companion program, bury.c, which reformats the sorted output to make it prettier. An example is at: http://www.geocities.com/grandmashannon/iowa_burials.txt Written 1999, Dennis Nicklaus, nicklaus@fnal.gov */ proc main () { list(parts) getstrmsg(town, "Enter town for burial index") set (town,save(town)) print("Looking for ") print(town) " Burials in " town "\n" forindi(person, number) { set(e,burial(person)) if (and(e,place(e))) { if (index(place(e),town,1)) { extractplaces(e,parts,np) getel(parts,1) call doSite(e) " : " if (female(person)) { /* print out married surnames of women */ set(nffam,nfamilies(person)) families(person,fam,sp,spi) { surname(sp) if (eq(spi,nffam)) { /* the next IF is designed to catch a case where a woman had one child where the father wasn't known and she didn't otherwise marry. In that case, just her maiden surname will appear, no "nee". Odd cases will still circumvent this, and make things look odd, such as multiple kids by different unknown fathers, ... I don't care. */ if (or(sp,gt(nffam,1))) { ", nee " } } else { /* cover the case where the father's name isn't known at all. Don't print an extra "a.k.a". odd cases will still look bad, such as married, then mother with unknown father. */ if (sp) { ", a.k.a. " } } } } fullname(person,0,0,80) " (" year(birth(person)) "-" year(death(person)) ")" "\n" } } } } proc doSite(event) { fornodes(event, subnode) { if (eq(0,strcmp("PLAC", tag(subnode)))) { fornodes(subnode, subnode2) { if (eq(0,strcmp("ADDR", tag(subnode2)))) { ", " value(subnode2) }}}} } /* bury.c. Written 1999, Dennis Nicklaus, nicklaus@fnal.gov This program is used as a filter to help format the output of the Lifelines report called "burial_index". This program makes it so each cemetery name only appears once, with the list of people buried in that cemetery listed below it. You can compile this simply with: cc -o bury bury.c To use this, first run the burial index program, then run the output of that through Unix's sort (just default arguments to sort), then run it through this program. Suppose your output from burial index is called "iowa.txt". What I typically do is: sort iowa.txt | bury > iowa.sort How it works: It just compares each "cemetery name" with the previous one in the file. If the cemetery name is different, it begins a new heading for that cemetery, and lists under it each name that follows with the same cemetery name. That's why it's important to run through sort, first. For MY typical record, which looks like 1 NAME First /Last/ 1 BIRT 2 DATE 31 Dec 1900 1 DEAT 2 DATE 1 Jan 2000 1 BURI 2 PLAC town,county,state 3 ADDR cemeteryname The lifelines report burial_index produces a line which looks like: town,cemetery : Last, First (1900-2000) Since I generally make a index for a town, county, or state, running sort with default (no) parameters works for me. These sorted lines are the input to this program. */ /* Start C code. #include char getline (char *line) { char c; int in=0; c=getchar(); while ((c != '\n') && (c != EOF)){ line[in++] = c; c=getchar(); } line[in]=0; return c; } main() { char line[200],last[200],*name; int colon,in,maxcompare; while(getline(line) != EOF){ colon = strcspn(line,":"); maxcompare = strlen(last); if (colon > maxcompare) maxcompare = colon; if (strncmp(line,last,maxcompare)){ strncpy(last,line,colon); last[colon] = '\0'; printf("\n\t\t\t%s\n",last); } name = line+colon+1; printf("%s\n",name); } } end of C code */ /* Sample output after going through bury.c: Carlisle, Carlisle Cemetery Morgan, Chester Howell (1889-1900) Morgan, Elmer Eugene (1861-1931) Morgan, nee Dressler, Mary Alice (1861-1950) Carroll Walden, nee Lucey, Kathleen J. ``Kay'' (1918-1996) Carroll, Mt. Olivet Cemetery Foley, George (1878-1948) Foley, nee Cuddy, Mary Cornelia (1885-1972) Hamill, Robert J. (1872-1953) Hamill, nee Lucey, Jennie Frances (1874-1940) Lucey, Edward J. (1849-1922) Lucey, George Raymond (1884-1971) Lucey, Rosemary (1920-1951) Lucey, nee Kemp, Clara Catherine (1887-1969) Lucey, Jeremiah ``Jerry'' (1886-1914) Lucey, John (1883-1914) Lucey, Julia (-1914) Lucey, Margaret (-1914) Lucey, nee Grace, Mary Elizabeth (1856-1914) */ lifelines-3.0.61/reports/bury.c0000700002540200244210000000544010076661056016576 0ustar prappDomain Users/* bury.c. Written 1999, Dennis Nicklaus, nicklaus@fnal.gov This program is used as a filter to help format the output of the Lifelines report called "burial_index". This program makes it so each cemetery name only appears once, with the list of people buried in that cemetery listed below it. You can compile this simply with: cc -o bury bury.c To use this, first run the burial index program, then run the output of that through Unix's sort (just default arguments to sort), then run it through this program. Suppose your output from burial index is called "iowa.txt". What I typically do is: sort iowa.txt | bury > iowa.sort How it works: It just compares each "cemetery name" with the previous one in the file. If the cemetery name is different, it begins a new heading for that cemetery, and lists under it each name that follows with the same cemetery name. That's why it's important to run through sort, first. For MY typical record, which looks like 1 NAME First /Last/ 1 BIRT 2 DATE 31 Dec 1900 1 DEAT 2 DATE 1 Jan 2000 1 BURI 2 PLAC town,county,state 3 ADDR cemeteryname The lifelines report burial_index produces a line which looks like: town,cemetery : Last, First (1900-2000) Since I generally make a index for a town, county, or state, running sort with default (no) parameters works for me. These sorted lines are the input to this program. */ #include char getline (char *line) { char c; int in=0; c=getchar(); while ((c != '\n') && (c != EOF)){ line[in++] = c; c=getchar(); } line[in]=0; return c; } main() { char line[200],last[200],*name; int colon,in,maxcompare; while(getline(line) != EOF){ colon = strcspn(line,":"); maxcompare = strlen(last); if (colon > maxcompare) maxcompare = colon; if (strncmp(line,last,maxcompare)){ /* then they are different */ strncpy(last,line,colon); last[colon] = '\0'; printf("\n\t\t\t%s\n",last); } name = line+colon+1; printf("%s\n",name); } } /* Sample output after going through bury.c: Carlisle, Carlisle Cemetery Morgan, Chester Howell (1889-1900) Morgan, Elmer Eugene (1861-1931) Morgan, nee Dressler, Mary Alice (1861-1950) Carroll Walden, nee Lucey, Kathleen J. ``Kay'' (1918-1996) Carroll, Mt. Olivet Cemetery Foley, George (1878-1948) Foley, nee Cuddy, Mary Cornelia (1885-1972) Hamill, Robert J. (1872-1953) Hamill, nee Lucey, Jennie Frances (1874-1940) Lucey, Edward J. (1849-1922) Lucey, George Raymond (1884-1971) Lucey, Rosemary (1920-1951) Lucey, nee Kemp, Clara Catherine (1887-1969) Lucey, Jeremiah ``Jerry'' (1886-1914) Lucey, John (1883-1914) Lucey, Julia (-1914) Lucey, Margaret (-1914) Lucey, nee Grace, Mary Elizabeth (1856-1914) */ lifelines-3.0.61/reports/BW_descendants.ll0000700002540200244210000003644510327604315020670 0ustar prappDomain Users/* * @progname BW_descendants.ll * @version 1.00 * @author Birger Wathne * @category * @output Text * @description * List successors with notes BW_descendants - a LifeLines report by Birger Wathne (Birger.Wathne@sdata.no) Version 1.00 This program partially based on code by Brad Frecker and Dick Knowles. Suggestions and comments welcome. Output sample at bottom of this source file. This report generates a list of successors of the given person. For each successor and its spouse(s), all level 1 notes are listed. The report asks for some parameters: - Number of generations to include (0 gives all) - Amount of output for spouse's other families 0 - Only list the main person's marriages. Don't even mention the fact that the spouse(s) have had other relationships. 1 - Print a one-line summary for each of the spouse's other relationships (number of children, spouses name, etc) 2 - Print the one-liner from option 1, plus a full listing of all stepchildren (not recursive) - Output type 0 - Text. Plain ascii output (like the sample) 1 - roff. Not finished, as I don't have an 8-bit clean roff. If someone wants this, please finish it, and send me the code. 2 - HTML. This output uses tags, so you need HTML 3.0 support. Uses bold fonts, etc. Nice.... - Language for generated text. The header, and all those small words used in the output can be generated in the language you have your data. Makes it look more natural. If you add new languages, please tell me. */ global(strings) global(outputtype) global(true) global(false) func init_strings(language) { if ( eq( language, 0)) { insert(strings, "Header", "Successors of") insert(strings, "Headerdate", "Date") insert(strings, "Born", "Born") insert(strings, "Dead", "Dead") insert(strings, "Married", "Married") insert(strings, "Relationship", "Relationship") insert(strings, "with", "with") insert(strings, "unknownspouse", "unknown spouse") insert(strings, "descendants", "descendants") insert(strings, "generations", "generations") insert(strings, "children", "children") insert(strings, "had", "had") insert(strings, "all", "all") insert(strings, "Notesfor", "Notes for") return(0) } if ( eq( language, 1)) { insert(strings, "Header", "Etterkommere etter") insert(strings, "Headerdate", "Dato") insert(strings, "Born", "Fädt") insert(strings, "Dead", "Däd") insert(strings, "Married", "Gift") insert(strings, "Relationship", "Forhold") insert(strings, "with", "med") insert(strings, "unknownspouse", "ukjent ektefelle") insert(strings, "descendants", "etterkommere") insert(strings, "generations", "generasjoner") insert(strings, "children", "barn") insert(strings, "had", "hadde") insert(strings, "all", "alle") insert(strings, "Notesfor", "Notater for") return(0) } return(1) } proc main () { table(strings) set(true, 1) set(false, 0) dayformat(0) monthformat(4) dateformat(0) getindi(indi) getintmsg (generation_count, "How many generations (0 for all)?") if ( lt( generation_count, 0)) { print("Illegal number of generations") return() } getintmsg ( spousefamilies, "How much output for spouse's other families (0=none, 1=summary, 2=list children)?" ) if ( or( lt( spousefamilies, 0), gt( spousefamilies, 2))) { print("Illegal answer") return() } getintmsg(outputtype, "Output type (0=TEXT, 1=ROFF, 2=HTML)?") if ( or( lt( outputtype, 0), gt( outputtype, 2))) { print("Illegal output type") return() } getintmsg( language, "Language for generated text (0=English, 1=Norwegian)?" ) if ( ne( init_strings(language), 0)) { print("Couldn't initialize string table to selected language") return() } output_init() /* Headers */ if ( eq( generation_count, 0)) { output_header1 ( concat( lookup( strings, "Header")," ", name(indi), " ", lookup( strings, "with"), " ", lookup( strings, "all"), " ", lookup( strings, "descendants") ) ) } else { if ( eq( generation_count, 1)) { output_header1 ( concat( lookup( strings, "Header"), " ", name(indi), " " ) ) } else { output_header1 ( concat( lookup( strings, "Header"), " ", name(indi), " ", lookup( strings, "with"), " ", d(sub(generation_count,1)), " ", lookup( strings, "generations"), " ", lookup( strings, "descendants") ) ) } } nl() nl() output_header2( concat( lookup( strings, "Headerdate"), ": ", stddate(gettoday()) ) ) nl() nl() call descendants(indi, "1", generation_count, spousefamilies) output_terminate() } proc descendants (indi, number, generation_count, spousefamilies) { output_startpara() number output_linebreak() call print_person(indi, 1) call write_notes(indi) set(childnumber, 0) families(indi, family, spouse, i) { if(e, marriage(family)) { lookup( strings, "Married") " " stddate(e) } else { lookup( strings, "Relationship") } if ( ne( spouse, null)) { " " lookup( strings, "with") " " call print_person(spouse, 1) } else { " " lookup( strings, "with") " " lookup( strings, "unknownspouse") } if ( ne(spousefamilies, 0)) { families(spouse, spfamily, spspouse, j) { if (ne(family, spfamily)) { name(spouse) " " lookup( strings, "had") " " d(nchildren(spfamily)) " " lookup( strings, "children") if ( ne( spspouse, null)) { " " lookup( strings, "with") " " call print_person(spspouse, 0) } else { " " lookup( strings, "with") " " lookup( strings, "unknownspouse") } if( eq(spousefamilies, 2)) { output_leftin() children(spfamily, child, k) { "\t" call print_person(child, 0) } output_leftout() } } } } call write_notes(spouse) output_leftin() children(family, child, j) { "\t" number "." d(add(j, childnumber)) nl() "\t" call print_person(child, 1) } output_leftout() set(childnumber, add(childnumber, j)) } output_endpara() set(childnumber, 0) families(indi, family, spouse, i) { if (ne(1, generation_count)) { if ( gt(generation_count, 1)) { decr(generation_count) } children(family, child, j) { call descendants ( child, strconcat( number, ".", d(add(j, childnumber)) ), generation_count, spousefamilies) } set(childnumber, add(childnumber, j)) } } } proc write_notes(indi) { set(done_header, 0) fornodes(inode(indi), node) { if (eq(0,strcmp("FILE", tag(node)))) { if ( eq(done_header, 0) ) { lookup( strings, "Notesfor") " " name(indi) ":" output_linebreak() incr(done_header) } copyfile(value(node)) } elsif (eq(0,strcmp("NOTE", tag(node)))) { if ( eq(done_header, 0) ) { lookup( strings, "Notesfor") " " name(indi) ":" output_linebreak() incr(done_header) } value(node) fornodes(node, subnode) { if (eq(0,strcmp("CONT", tag(subnode)))) { nl() value(subnode) } } output_linebreak() } } } proc print_person (indi, bold) { if(bold) { output_bold( name(indi)) } else { name(indi) } if (e, stddate(birth(indi))) { ", " lookup( strings, "Born") " " e } if(e, stddate(death(indi))) { ", " lookup( strings, "Dead") " " e } "." output_linebreak() } func output_header1 (string) { if ( eq( outputtype, 1)) { return(concat( ".(b C", nl(), ".ps 16", nl(), "\\fB", split(string), "\\fP", nl(), ".ps 8", nl(), ".)b", nl())) } if ( eq( outputtype, 2)) { return(concat( "

", string, "

")) } return(string) } func output_header2 (string) { if ( eq( outputtype, 1)) { return(concat( ".(b C", nl(), ".ps 12", nl(), "\\fB", string, "\\fP", nl(), ".ps 8", nl(), ".)b", nl())) } if ( eq( outputtype, 2)) { return(concat( "

", string, "

")) } return(string) } func output_init () { if ( eq( outputtype, 1)) { return(concat( ".po 0.8i", nl(), ".ll 6.8i", nl(), ".pl +1.5i", nl(), ".nf", nl(), ".ps 8", nl())) } if ( eq( outputtype, 2)) { return(concat("Descendant chart", nl() )) } } func output_terminate () { if ( eq( outputtype, 2)) { return("") } } func output_linebreak () { if ( eq( outputtype, 1)) { return(nl()) } if ( eq( outputtype, 2)) { return("
") } return(nl()) } func output_startpara () { if ( eq( outputtype, 2)) { return("

") } } func output_endpara () { if ( eq( outputtype, 2)) { return("

") } return(concat( output_linebreak(), output_linebreak())) } func output_bold (string) { if ( eq( outputtype, 1)) { return(concat( "\\fB", string, "\\fP")) } if ( eq( outputtype, 2)) { return(concat( "", string, "")) } return(string) } func output_leftin () { if ( eq( outputtype, 2)) { return(concat( "
")) } } func output_leftout () { if ( eq( outputtype, 2)) { return(concat( "
")) } } func split(string) { set(i, 1) set(tmpstr, "") while( ne( i, strlen(string))) { if ( nestr( substring( string, i, i), " ")) { set(tmpstr, concat(tmpstr, substring( string, i, i))) } else { set(tmpstr, concat(tmpstr, "\\0")) } incr(i) } return (tmpstr) } /* Sample output: Successors of N.N. Helgesdtr. ¤SE with 2 generations descendants Date: 14 Jun 1995 1 N.N. Helgesdtr. ¤SE. Relationship with Tjeran Hallvardson (Halldors.) VASSHUS, Born 1610. Notes for Tjeran Hallvardson (Halldors.) VASSHUS: Er nevnt som leilending i 1635 sammen med Helge ¤se som sannsynligvis var hans svigerfar. Tjeran og broren Rasmus stevnet stefaren Laurits Asserson for odelsgods i Kluge, Gjesdal som deres mor eide. 1.1 Lars Tjeranson ¤SE, Born 1643, Dead 9 Jun 1702. 1.2 Marite Tjerandsdtr. ¤SE, Dead 1691. 1.3 Hallvard TJERANSON, Born 1651. 1.4 Helge TJERANSON, Born 1654. 1.1 Lars Tjeranson ¤SE, Born 1643, Dead 9 Jun 1702. Notes for Lars Tjeranson ¤SE: Gift I med Kirsti Olsdtr. Malmeim (f.1665 d.12.04.1695). II med Johanna Gunnarsdtr. Sveinsvoll (d.1741). Lars hadde vØrt soldat i 10 ðr. 2 barn kjent. 1.2 Marite Tjerandsdtr. ¤SE, Dead 1691. Relationship with Ola Olson KJOSAVIK, Born 1623, Dead 9 1702. Ola Olson KJOSAVIK had 7 children with KariI Pedersdtr., Born 16 , Dead 1674. Ola Olson KJOSAVIK had 1 children with KariII Torkellsdtr. ALSNES, Born 1661, Dead 30 Mar 1705. Notes for Ola Olson KJOSAVIK: 7 barn av färste ekteskap, 3 av andre og 1 av tredje ekteskap. 1.2.1 Berit Olsdtr. KJOSAVIK, Born 1674, Dead 1746. 1.2.2 Kristoffer Olson KJOSAVIK, Born 1677. 1.2.3 Ola O. KJOSAVIK, Born 1681, Dead 23 1695. . . . */ lifelines-3.0.61/reports/cgi_html.li0000700002540200244210000001340610327604315017560 0ustar prappDomain Users/* * @progname cgi_html.li * @version 1.4 * @author Scott McGee (smcgee@microware.com) * @category * @output HTML * @description This is a library of CGI based functions and data used by a variety of CGI GenWeb programs. It also provides all needed customizing data in one file to allow easy customization of the genweb CGI system to a new site. The proc set_cgi_globals() should be called early in programs using this library, before any other calls to its code are made. This proc sets the customization globals. The do_head() proc will output the header info for the html files. The input parameters are the individual for whom the file is generated, and the title string which would usually be Pedigree, Descendant, or Individual to indicate the type of file produced. The do_tail() proc is similar but writes the trailer info or the html file. It too requires you to pass the indi for whom the file is generated. The href() function will return a string containing an anchor linking to the indi specified as an input parameter and (via CGI) returning the type of report specified in the second (type) parameter. This type must be one of Pedigree, Descendant, or Lookup (for individual page). @(#)cgi_html.li 1.4 10/13/95 */ /* customization globals */ global(db_owner) /* name of database owner */ global(owner_addr) /* URL of database owner (mailto or homepage) */ global(use_image) /* flag to indicate whether to use GenWeb image */ global(genweb_image) /* name of GenWeb image to place on each page */ global(use_page) /* flag to add link to GenWeb page or homepage */ global(genweb_page) /* URL of base GenWeb (or homepage) web page */ global(page_name) /* name of base GenWeb (or homepage) web page */ global(cgi_script) /* URL of base CGI script */ global(index_url) /* base URL of database index files */ global(localhost) /* base URL for locally hosted files */ /* other globals */ global(is_indi_html) /* signals if report generates an indi HTML file */ /*************************************************************************** * This function is used to initialize all the site specific customization * * globals. This should be the only part of the entire GenWeb CGI system * * that needed editing to install on a new site. * **************************************************************************/ proc set_cgi_html_globals(){ /* customize these globals to customize the output to your site */ set(db_owner, getproperty("user.fullname")) set(owner_addr, getproperty("user.email")) set(use_image, 1) /* 1 to use image, 0 to not use image */ set(genweb_image, "http://www.emcee.com/~smcgee/pics/genweb.gif") set(use_page, 1) /* 1 to use link to page, 0 if not */ set(genweb_page, "http://www.emcee.com/~smcgee/genweb/genweb.html") set(page_name, "GenWeb page") /* might change to "my homepage" */ set(cgi_script, "http://www.emcee.com/~smcgee/cgi-bin/genweb.cgi") set(index_url, concat("http://www.emcee.com/~smcgee/genweb/", save(database()), "_idx.html")) set(localhost, "http://www.emcee.com/") set(is_indi_html, 0) /* default to non-indi HTML report */ } /************************************************************************** * do_chart_head() - this function writes the common header portion of an * * HTML file. It specifies the chart type in both the and in a * * header (<H3>) line along with the name of the individual. * *************************************************************************/ proc do_chart_head(indi, title){ "<HTML><HEAD>\n" "<TITLE>" name(indi,0) " : " title " Chart" "\n" "\n" if(use_image){ "\"\"

\n" } "

" givens(indi) " " surname(indi) " - " title " Chart

\n" } /*************************************************************************** * do_tail() - this function writes the common trailer portion of the HTML * * file. * **************************************************************************/ proc do_tail(indi){ "
\n" "
\n" if(eq(is_indi_html, 0)){ /* do this stuff only for non-indi HTML reports */ "[" "Back to Individual Page]
" } "[" "Index to database]
\n" if(use_page){ "[" "Return to GenWeb page]
\n" } "


\n" "HTML files created on demand by \n" "\n" "LifeLines, a genealogical database program by \n" "\n" "Thomas Wetmore!\n" "
\n" "Database maintained by \n" "\n" db_owner "" "
\n" "Report generated " date(gettoday()) "
\n" "\n" } /*********************************************************************** * href() - this function will return a string with an anchor of the * * specified type. Currently supported types are "Lookup", "Pedigree", * * and "Descendant". * **********************************************************************/ func href(indi, type){ "" if(is_indi_html){ if(t, title(indi)){ t " " } fullname(indi,0,1,50) }else{ fullname(indi,1,1,30) } "" } lifelines-3.0.61/reports/cid.ll0000700002540200244210000001042110076661056016534 0ustar prappDomain Users/* * @progname cid.ll * @version 1.0 * @author Wetmore, Chandler * @category * @output Text * @description Generates Pete Cook's CID (Chronological Identifier) for a person in a LifeLines database. The program first computes the C-Vector, a seven element array of the birth years of a person and his/her parents and grandparents in ahnentafel order. The program then subtracts the base person's birth year from those of the others. Those differences are converted to the follow letters: Char Parent Age Grandparent Age 0 0-15 0-30 1-9 16-24 31-39 A-Z 25-50 40-65 a-y 51-75 66-90 z over 75 over 90 - unknown unknown Version 1, 15 Mar 1995, Tom Wetmore, modified by J.F.Chandler */ proc main () { getindi(i, "Compute CID for what person?") if (eq(0, i)) { return() } set(b, getyear(birth(i))) if (lt(b, 1000)) { print("Base person has no birth year") return() } set(f, father(i)) set(m, mother(i)) set(ff, father(f)) set(fm, mother(f)) set(mf, father(m)) set(mm, mother(m)) set(bf, getyear(birth(f))) set(bm, getyear(birth(m))) set(bff, getyear(birth(ff))) set(bfm, getyear(birth(fm))) set(bmf, getyear(birth(mf))) set(bmm, getyear(birth(mm))) set(bf, sub(sub(b, bf), 15)) set(bm, sub(sub(b, bm), 15)) set(bff, sub(sub(b, bff), 30)) set(bfm, sub(sub(b, bfm), 30)) set(bmf, sub(sub(b, bmf), 30)) set(bmm, sub(sub(b, bmm), 30)) print("The CID for ", name(i), " is: ", d(b), letter(bf), letter(bm), letter(bff), letter(bfm), letter(bmf), letter(bmm), "\n") } func getyear(event) { set(mod, trim(date(event),3)) if (and( strcmp(mod,"BEF"), strcmp(mod,"AFT"), strcmp(mod,"ABT") )) { return(atoi(year(event))) } return(0) } func letter (yr) { if (gt(yr, 500)) { return("-") } if (lt(yr, 0)) { return("0") } if (le(yr, 9)) { return(d(yr)) } if (eq(yr, 10)) { return("A") } if (eq(yr, 11)) { return("B") } if (eq(yr, 12)) { return("C") } if (eq(yr, 13)) { return("D") } if (eq(yr, 14)) { return("E") } if (eq(yr, 15)) { return("F") } if (eq(yr, 16)) { return("G") } if (eq(yr, 17)) { return("H") } if (eq(yr, 18)) { return("I") } if (eq(yr, 19)) { return("J") } if (eq(yr, 20)) { return("K") } if (eq(yr, 21)) { return("L") } if (eq(yr, 22)) { return("M") } if (eq(yr, 23)) { return("N") } if (eq(yr, 24)) { return("O") } if (eq(yr, 25)) { return("P") } if (eq(yr, 26)) { return("Q") } if (eq(yr, 27)) { return("R") } if (eq(yr, 28)) { return("S") } if (eq(yr, 29)) { return("T") } if (eq(yr, 30)) { return("U") } if (eq(yr, 31)) { return("V") } if (eq(yr, 32)) { return("W") } if (eq(yr, 33)) { return("X") } if (eq(yr, 34)) { return("Y") } if (eq(yr, 35)) { return("Z") } if (eq(yr, 36)) { return("a") } if (eq(yr, 37)) { return("b") } if (eq(yr, 38)) { return("c") } if (eq(yr, 39)) { return("d") } if (eq(yr, 40)) { return("e") } if (eq(yr, 41)) { return("f") } if (eq(yr, 42)) { return("g") } if (eq(yr, 43)) { return("h") } if (eq(yr, 44)) { return("i") } if (eq(yr, 45)) { return("j") } if (eq(yr, 46)) { return("k") } if (eq(yr, 47)) { return("l") } if (eq(yr, 48)) { return("m") } if (eq(yr, 49)) { return("n") } if (eq(yr, 50)) { return("o") } if (eq(yr, 51)) { return("p") } if (eq(yr, 52)) { return("q") } if (eq(yr, 53)) { return("r") } if (eq(yr, 54)) { return("s") } if (eq(yr, 55)) { return("t") } if (eq(yr, 56)) { return("u") } if (eq(yr, 57)) { return("v") } if (eq(yr, 58)) { return("w") } if (eq(yr, 59)) { return("x") } if (eq(yr, 60)) { return("y") } return("z") } lifelines-3.0.61/reports/common.ll0000700002540200244210000001006410327604315017262 0ustar prappDomain Users/* * @progname common.ll * @version 0 of 1996-06-11 * @author H. Väisänen * @category * @output Text * @description Show common ancestors of a person. Pedigree collapse means that someone is descended from some persons in two or more ways. If person's father and mother are related, this program lists the common ancestors and the people between them and the person. The program probably does not work if person is descended from common ancestors in more than two ways or if there is different number of generations in those two ways. by H. Visnen Version 0, 11 June 1996 */ proc main() { getindi (person) "Common ancestors of " name (person) "\n\n\n" /* Father and his ancestors. */ indiset (father_set) if (f, father(person)) { addtoset (father_set, f, 0) set (father_set, union (father_set, ancestorset (father_set))) } /* Mother and her ancestors. */ indiset (mother_set) if (m, mother(person)) { addtoset (mother_set, m, 0) set (mother_set, union (mother_set, ancestorset (mother_set))) } /* Their intersection. */ indiset (intersection_set) set (intersection_set, intersect (father_set, mother_set)) valuesort (intersection_set) /* Is minimum of v always zero? I'm not sure... */ set (min, 10000) forindiset (intersection_set, indi, v, n) { if (lt(v, min)) {set (min, v)} } /* First common ancestors. */ indiset (common_ancestor_set) forindiset (intersection_set, indi, v, n) { if (eq(min, v)) { addtoset (common_ancestor_set, indi, 0) } } if (eq(lengthset(common_ancestor_set), 0)) { print ("Person's father and mother are not related.") "Person's father and mother are not related.\n" return() } set (max_name_length, max_length (common_ancestor_set)) /* Print first common ancestors. */ forindiset (common_ancestor_set, indi, v, n) { col (20) call print_indi (indi, v, add(max_name_length, 20)) "\n" } "\n" /* Descendants of first common ancestors. */ indiset (descendant_set) set (descendant_set, descendantset(common_ancestor_set)) /* Links from the father's side. */ indiset (set1) set (set1, intersect (descendant_set, father_set)) valuesort (set1) /* Links from the mother's side. */ indiset (set2) set (set2, intersect (descendant_set, mother_set)) valuesort (set2) set (max_name_length, max_length(set1)) set (length2, max_length(set2)) if (gt(length2, max_name_length)) {set (max_name_length, length2)} /* Print father's line on the left, mother's line on the right. */ table (mom) forindiset (set2, indi, v, n) { insert (mom, d(v), indi) } forindiset (set1, indi, v, n) { call print_indi (indi, v, add(max_name_length,1)) col(40) call print_indi (lookup(mom, d(v)), v, add(max_name_length,40)) "\n" } "\n" col (20) call print_indi (person, add(v,1), add(max_name_length, 20)) "\n" } proc print_indi (indi, v, length) { name (indi) col(length) " (" if (p, birth(indi)) {year(p)} else {" "} " - " if (p, death(indi)) {year(p)} else {" "} ") (" d(v) ")" } /* Maximum length of a name of a person in person_set. */ func max_length (person_set) { set (max_name_length, 0) forindiset (person_set, indi, v, n) { if (lt(max_name_length, strlen(name(indi)))) { set (max_name_length, strlen(name(indi))) } } return (max_name_length) } /* ----------------------------------------------------------------------- This is an example of the output. I have deleted the surnames because they contain 8 bit letters. Common ancestors of Juho XXXXXXXX Maria AAAAAAAAAAA (1606 - 1661) (0) Heikki XXXXXXXX (1603 - 1670) (0) Heikki XXXXXXXX (1628 - 1705) (1) Lauri XXXXXXXX (1637 - 1701) (1) Heikki XXXXXXXX (1666 - 1731) (2) Eeva XXXXXXXX (1659 - 1724) (2) Aatami XXXXXXXX (1687 - 1733) (3) Anna BBBBBBBB (1691 - 1746) (3) Juho XXXXXXXX (1721 - 1775) (4) Ulla CCCCCCCC (1724 - 1789) (4) Juho XXXXXXXX (1761 - 1848) (5) */ lifelines-3.0.61/reports/connect2.ll0000700002540200244210000001363610327604315017515 0ustar prappDomain Users/* * @progname connect2.ll * @version 2.1 * @author Simms * @category * @output Text * @description * Describes the family line connecting an ancestor/descendant Written by: Robert Simms, 19 Sep 1997 rsimms@math.clemson.edu, http://www.math.clemson.edu/~rsimms Asks for a descendant and an ancestor then produces, for the line connecting the two persons, an indented report on an individual and all families associated with that individual. Details on individuals include NOTE lines. Line wrapping is done with indenting maintained. This program does not check to make sure that the descendant given is really a descendant of the ancestor. An error will result if not. At the beginning of main() is provided the means to easily change page width, tab size, left margin, and whether or not to include notes in output. Revisions: 2: Robert Simms, 17 Feb 2000, made line-wrapping code more consistent in its use of the parameters page_width, and left_margin. 2.1: Robert Simms, 30 May 2001, fixed the concatenation of multiple notes so that two spaces are inserted before every note after the first note. Thanks to M.W. Poirier for pointing this out. */ global(page_width) global(tab_size) global(left_margin) global(note_flag) global(plist) proc main() { set(page_width, 80) set(tab_size, 3) set(left_margin, 0) set(note_flag, 1) /*set equal to 1 to include notes, 0 NOT to include notes*/ list(plist) getindi(indi1, "Descendant") getindi(indi2, "Ancestor") set(connects, 0) if(connect(indi1, indi2)) { forlist(plist, person, pnum) { if(ne(pnum, 1)) { nl() nl() } set(x, 0) set(skip, left_margin) set(x, outfam(person, skip, x)) } nl() " -------------------------------------" nl() } } func connect(person, target) { set(connects, 0) if(eq(person, target)) { set(connects, 1) } else { if(dad, father(person)) { if(connect(dad, target)) { set(connects, 1) } else { if(mom, mother(person)) { if(connect(mom, target)) { set(connects, 1) } } } } } if(connects) { enqueue(plist, person) } return(connects) } func outfam(indi, skip, x) { set(x, outpers(indi, skip, x)) if(gt(nfamilies(indi), 0)) { set(skip, add(skip, tab_size)) families(indi, fam, sp, num) { set(x, 0) set(x, outline(concat("Family #", d(num)), skip, x)) if(date(marriage(fam))) { set(x, outline(concat(", ", date(marriage(fam))), skip, x)) } set(x, 0) set(skip, add(skip, tab_size)) set(x, outpers(sp, skip, x)) if(gt(nchildren(fam), 0)) { set(x, outline("Children", skip, x)) set(x, 0) set(skip, add(skip, tab_size)) children(fam, child, no) { set(x, outpers(child, skip, x)) } set(skip, sub(skip, tab_size)) } set(skip, sub(skip, tab_size)) } } return(x) } func outpers(indi, skip, x) { if(indi) { print(name(indi), nl()) set(x, 0) set(x, outline(name(indi), skip, x)) set(skip, add(skip, tab_size)) set(s, "") if(birth(indi)) { set(s, concat(", b. ", long(birth(indi)))) } if(death(indi)) { set(s, concat(s, ", d. ", long(death(indi)))) } if(burial(indi)) { set(s, concat(s, ", buried at ", place(burial(indi)))) } set(s, concat(s, ". ")) set(x, outline(s, skip, x)) if(note_flag) { set(s, "") set(note_separator, "") fornotes(inode(indi), note) { set(s, concat(s, note_separator, note)) set(note_separator, " ") } set(x, outtxt(s, skip, x)) set(skip, sub(skip, tab_size)) } } else { print("_____ _____", nl()) set(x, 0) set(x, outline("_____ _____", skip, x)) } set(x, 0) return(x) } func outtxt(txt, skip, x) { set(cr, index(txt, nl(), 1)) while(ne(cr, 0)) { set(txt, save(txt)) set(txt2, concat(substring(txt, 1, sub(cr, 1)), " ")) set(x, outline(txt2, skip, x)) set(txt, substring(txt, add(cr, 1), strlen(txt))) set(cr, index(txt, nl(), 1)) } if(gt(strlen(txt), 0)) { set(x, outline(txt, skip, x)) } return(x) } func outline(text, skip, x) { if(eq(x, 0)) { col(add(skip, 1)) set(x, skip) } set(max, sub(page_width, x)) if(gt(strlen(text), max)) { set(space, breakpoint(text, max)) if(eq(space, 0)) { if(eq(x, skip)) { set(text, strsave(text)) substring(text, 1, sub(max, 1)) "-" set(x, 0) set(text, substring(text, max, strlen(text))) set(x, outline(text, skip, x)) } else { set(x, 0) set(x, outline(text, skip, x)) } } else { /* space gt 0 -- good break point found*/ set(text, strsave(text)) substring(text, 1, sub(space, 1)) set(x, 0) set(text, strsave(substring(text, add(space, 1), strlen(text)))) while(eqstr(" ", substring(text, 1, 1))) { /* strip leading spaces */ set(text, strsave(substring(text, 2, strlen(text)))) } set(x, outline(text, skip, x)) } } else { text set(x, add(x, strlen(text))) } return(x) } func breakpoint(text, max) { set(space, 0) set(occ, 1) set(next, index(text, " ", occ)) incr(occ) while ( and(le(next, add(max, 1)), ne (next, 0))) { set(space, next) set(next, index(text, " ", occ)) incr(occ) } return(space) } lifelines-3.0.61/reports/cons.ll0000700002540200244210000001605410327604315016741 0ustar prappDomain Users/* * @progname cons.ll * @version 1.0 * @author Teschler * @category * @output Text * @description Calculates coefficient of inbreeding F(A,B) for the offspring of two individuals A and B. The consanguity (blood in common) C(A,B) is 2*F(A,B) F(A,B) = sum(0.5^(n(i)+p(i)) * (1+F(J(i))/2) The sum extends over the number of distinct chains of relationship connecting A and B. The ith chain has n(i)+p(i) links ascending from A and B to the common ancestor J(i), whose coefficient of inbreeding is f(J(i)). A chain of relationship consists of all links leading from A and B to a common ancestor J, and has no other point in common except J. Two chains are considered distinct if they differ in at least one link. Result goes to file /tmp/t1 This is one of my first LL programs so please do not look for elegance ;-) Arthur.Teschler@uni-giessen.de */ global(anc_line) /* holds the current way from A towards B */ global(to_anc) /* B's ancestors */ global(from_anc) /* A's ancestors */ global(common_anc) /* A's and B's common ancestors */ global(common_stack) /* holds J(i) for later inbreed check */ global(anc_line_stack) /* holds lines for later output */ global(coefftab) /* holds inbreed coefficients for J(i) */ func coanc(A,B) { indiset(from_anc) addtoset(from_anc,A,0) set(from_anc,ancestorset(from_anc)) addtoset(from_anc,A,0) indiset(to_anc) addtoset(to_anc,B,0) set(to_anc,ancestorset(to_anc)) addtoset(to_anc,B,0) indiset(common_anc) set(common_anc,intersect(from_anc,to_anc)) list(anc_line) if (lengthset(common_anc)) { push(anc_line_stack,"--") /*Marker*/ if (gt(lengthset(from_anc),lengthset(to_anc))) { call swap(from_anc,to_anc) call swap(A,B) } call iter(A,0,B) /* At this point we have collected all paths leading from A to B on anc_line_stack Now we have to calculate f(J(i)) for all common ancestors that are in our list of paths (saved on common_stack), then we can sum up things. */ while(pers,dequeue(common_stack)) { if (not(lookup(coefftab,key(pers,0)))) { set(pc,coanc(father(pers),mother(pers))) insert(coefftab,key(pers),pc) } } print "Results for :" print fullname(A,0,0,50) sp() print fullname(B,0,0,50) nl() set(result,sum_up()) } else { set(result,"0 1") } return(result) } proc iter(current,common,target) /* Recursively traverses the tree (better hedge) to find all paths leading from current to target. Makes use of precalculated sets common_anc and to_anc. Fills up a list of paths */ { print (".") push(anc_line,current) if (eq(current,target)) { call found(common) pop(anc_line) return() } if (not(common)) { /* We are ascending */ if (father(current)) { call iter(father(current),0,target) } if (mother(current)) { call iter(mother(current),0,target) } if (iselement(current,common_anc)) { set(common,current) } } if (common) { /* We have found a common ancestor now we check for descendants */ families(current,curfam,spouse,cnt) { children(curfam,curchild,cnt) { if (notchecked(curchild)) { if(iselement(curchild,to_anc)) { /* <- speeds up! */ call iter(curchild,common,target) } /* iselement */ } /* notchecked */ } /* children */ } /* families */ } /* common */ pop(anc_line) } proc found(common) { /* Unfortunately LL pushes references. I had liked to push values. Now I have to do my own special stack handling. Not very elegant, though :( */ print("!") push(anc_line_stack,"-") /*Marker*/ forlist(anc_line,pers,cnt) { push(anc_line_stack,key(pers)) } push(anc_line_stack,key(common)) push(common_stack,common) } func sum_up() { /* pops anc_lines from anc_line_stack and sums up their values. prints them as a side effect, otherwise there would be no need to save all those steps, the length would have been enough */ set(sum,"0 1") set(lcnt,0) set(element,pop(anc_line_stack)) while(strcmp(element,"--")) { incr(lcnt) set(common,element) print "Common ancestor: " fullname(indi(common),0,0,50) nl() set(factor,lookup(coefftab,common)) if (strcmp(factor,"0 1")) { print "(Inbreeding coefficient: " showfrac(factor) ")" nl() } set(length,0) set(pers,pop(anc_line_stack)) while(strcmp(pers,"-")) { incr(length) print " " d(length) " " fullname(indi(pers),0,0,50) nl() set(pers,pop(anc_line_stack)) } set(element,pop(anc_line_stack)) set(factor,addfrac("1 0",factor)) set(factor, mulfrac( factor,concat("1 ",d(length)))) print "------------" nl() print showfrac(factor) nl() nl() set(sum,addfrac(sum,factor)) } print "============" nl() print "Sum: " showfrac(sum) " (" d(lcnt) " different lines)" nl() print nl() return(sum) } /* Some functions to handle fractions follow here. Lifelines has no type fraction let's put nominator denominator as space separated strings. As the denominator is always 2^x, we put just x */ func addfrac(A,B) { set(nomA,atoi(A)) set(denA,atoi(substring(A,index(A," ",1),strlen(A)))) set(nomB,atoi(B)) set(denB,atoi(substring(B,index(B," ",1),strlen(B)))) while (lt(denA,denB)) { incr(denA) set(nomA,mul(nomA,2)) } while (lt(denB,denA)) { incr(denB) set(nomB,mul(nomB,2)) } set(nomA,add(nomA,nomB)) while (eq(0,mod(nomA,2))) { decr(denA) set(nomA,div(nomA,2)) } set(result,concat(d(nomA)," ")) return(concat(result,d(denA))) } func mulfrac(A,B) { /* Multiply my funny fractions */ set(nomA,atoi(A)) set(denA,atoi(substring(A,index(A," ",1),strlen(A)))) set(nomB,atoi(B)) set(denB,atoi(substring(B,index(B," ",1),strlen(B)))) set(nomA,mul(nomA,nomB)) set(denA,add(denA,denB)) while (eq(0,mod(nomA,2))) { decr(denA) set(nomA,div(nomA,2)) } set(result,concat(d(nomA)," ")) return(concat(result,d(denA))) } func showfrac(A) { /* show my funny fractions */ set(nomA,atoi(A)) set(denA,atoi(substring(A,index(A," ",1),strlen(A)))) return(concat(d(nomA),concat("/",d(exp(2,denA))))) } proc swap(V1,V2) { set(help,V1) set(V1,V2) set(V2,help) } /* I'm sure there are better ways to handle the following two ... */ func iselement(E,S) { indiset(test) addtoset(test,E,0) return (lengthset(intersect(test,S))) } func notchecked(i) { forlist(anc_line,pers,cnt) { if (eq(key(pers,0),key(i,0))) { return (0) } } return (1) } proc show_stack() { /* for debugging purposes */ print "Current:" nl() forlist(anc_line,pers,cnt) { print " " d(cnt) fullname(pers,0,0,50) nl() } } proc main() { getindimsg(from,"1st :") getindimsg(to,"2nd :") list(common_stack) list(anc_line_stack) table(coefftab) newfile("/tmp/t1",0) set(cf,mulfrac("2 0",coanc(from,to))) print "Consanguity factor: " showfrac(cf) nl() } lifelines-3.0.61/reports/cont.ll0000700002540200244210000000333410076661056016745 0ustar prappDomain Users/* * @progname cont.ll * @version 1.0 * @author Väisänen * @category * @output Text * @description This program iterates over all persons and families in a database and reports all records that have erroneous CONT lines. It finds errors like 2 TAG blah 2 CONT blah 2 CONT blah 2 CONT blah 3 CONT blah 2 TAG blah If the output is These individuals may have problems with CONT lines These families may have problems with CONT lines then the program found no errors. Written by Hannu Väisänen 22 September 1999. */ proc main() { "These individuals may have problems with CONT lines\n" forindi (person, m) { print ("i") call check (person, 0) } "These families may have problems with CONT lines\n" forfam (family, m) { print ("f") call check (family, 1) } } proc check (person, isfam) { set (prev_level, 0) set (prev_tag, "xxxx") traverse (root(person), node, n) { if (eqstr(tag(node), "CONT")) { if (eqstr(prev_tag, "CONT")) { if (ne(prev_level, n)) { if (eq(isfam,1)) { "Husband " key(husband(person)) " " name(husband(person)) "\n" "Wife " key(wife(person)) " " name(wife(person)) "\n\n" } else { key(person) " " name(person) "\n" } } } else { if (ne(add(prev_level,1), n)) { if (eq(isfam,1)) { "Husband " key(husband(person)) " " name(husband(person)) "\n" "Wife " key(wife(person)) " " name(wife(person)) "\n\n" } else { name(person) " " key(person) "\n" } } } } set (prev_level, n) set (prev_tag, tag(node)) } } lifelines-3.0.61/reports/count_anc.ll0000700002540200244210000000252210076661056017751 0ustar prappDomain Users/* * @progname count_anc.ll * @version 2.0 * @author Eggert * @category * @output Text * @description This program counts ancestors of a person by generation. Only unique individuals in each generation are counted. A person counts in all the generations he/she is in, but only counts once in the grand total. count_anc - a LifeLines ancestors counting program by Jim Eggert (eggertj@atc.ll.mit.edu) Version 1, 19 November 1992 Version 2, 16 February 1995, use lengthset(), print(,) */ proc main () { getindimsg(person,"Enter person to count ancestors of") indiset(thisgen) indiset(allgen) addtoset(thisgen, person, 0) print("Counting generation ") "Number of ancestors of " key(person) " " name(person) " by generation:\n" set(thisgensize,1) set(gen,1) while(thisgensize) { set(thisgensize,0) if (thisgensize,lengthset(thisgen)) { set(gen,sub(gen,1)) print(d(gen)," ") "Generation " d(gen) " has " d(thisgensize) " individual" if (gt(thisgensize,1)) { "s" } ".\n" set(thisgen,parentset(thisgen)) set(allgen,union(allgen,thisgen)) } } "Total unique ancestors in generations " d(gen) " to -1 is " d(lengthset(allgen)) ".\n" } lifelines-3.0.61/reports/count_desc.ll0000700002540200244210000000253610076661056020133 0ustar prappDomain Users/* * @progname count_desc.ll * @version 2.0 * @author Eggert * @category * @output Text * @description This program counts descendants of a person by generation. Only unique individuals in each generation are counted. A person counts in all the generations he/she is in, but only counts once in the grand total. count_desc - a LifeLines descendants counting program by Jim Eggert (eggertj@atc.ll.mit.edu) Version 1, 19 November 1992 Version 2, 16 February 1995, use lengthset(), print(,) */ proc main () { getindimsg(person,"Enter person to count descendants of") indiset(thisgen) indiset(allgen) addtoset(thisgen, person, 0) print("Counting generation ") "Number of descendants of " key(person) " " name(person) " by generation:\n" set(thisgensize,1) set(gen,neg(1)) while(thisgensize) { set(thisgensize,0) if (thisgensize,lengthset(thisgen)) { set(gen,add(gen,1)) print(d(gen)," ") "Generation " d(gen) " has " d(thisgensize) " individual" if (gt(thisgensize,1)) { "s" } ".\n" set(thisgen,childset(thisgen)) set(allgen,union(allgen,thisgen)) } } "Total unique descendants in generations 1-" d(gen) " is " d(lengthset(allgen)) ".\n" } lifelines-3.0.61/reports/count_dup.ll0000700002540200244210000000251110076661056017776 0ustar prappDomain Users/* * @progname count_dup.ll * @version 1.0 * @author anon * @category * @output Text * @description * Count dups among ancestors? */ global(cnttab) global(indtab) global(undone) global(allind) global(maxcount) global(maxindi) proc main() { list(undone) list(allind) table(cnttab) table(indtab) getindi(person) set(maxcount,0) set(maxindi,person) call addaperson(person) set(c,0) while (person,dequeue(undone)) { incr(c) /* print(d(c)," ",key(person),"\n") */ if(eq(mod(c,1000), 0)) { print(d(c)," ",d(maxcount)," ",key(maxindi)," ",name(maxindi),"\n") } if (p,father(person)) { call addaperson(p) } if (p,mother(person)) { call addaperson(p) } } while(p,dequeue(allind)) { set(count,lookup(cnttab,key(p))) d(count) " " key(p) " " name(p) " " title(p) "\n" } } proc addaperson(p) { enqueue(undone,p) set(count,lookup(cnttab,key(p))) if(ne(count,0)) { set(count, add(count,1)) if(gt(count, maxcount)) { set(maxcount, count) set(maxindi, p) } } else { set(count,1) insert(indtab, key(p), p) enqueue(allind,p) } insert(cnttab, key(p), count) } lifelines-3.0.61/reports/count_paternal_desc.ll0000700002540200244210000000333110165161650022005 0ustar prappDomain Users/* * @progname count_paternal_desc.ll * @version 2.0 * @author Eggert * @category * @output Text * @description This program counts paternal descendants of a person by generation. Only unique individuals in each generation are counted. A person counts in all the generations he/she is in, but only counts once in the grand total. Male paternal descendants are also counted separately. count_paternal_desc - a LifeLines descendants counting program by Jim Eggert (eggertj@atc.ll.mit.edu) Version 1, 1 August 1994 Version 2, 16 February 1995, use lengthset(), print(,) */ proc main () { getindimsg(person,"Enter person to count paternal descendants of") indiset(thisgen) indiset(allgen) indiset(allmalegen) addtoset(thisgen, person, 0) if (male(person)) { addtoset(allmalegen, person, 0) } print("Counting generation ") "Number of paternal descendants of " key(person) " " name(person) " by generation:\n" set(gen,neg(1)) while(lengthset(thisgen)) { indiset(thismalegen) forindiset(thisgen,person,val,count) { if (male(person)) { addtoset(thismalegen,person,0) } } incr(gen) print(d(gen)," ") "Generation " d(gen) " has " d(lengthset(thisgen)) " paternal descendant" if (gt(lengthset(thisgen),1)) { "s" } " of which " d(lengthset(thismalegen)) " are male.\n" set(thisgen,childset(thismalegen)) set(allgen,union(allgen,thisgen)) set(allmalegen,union(allmalegen,thismalegen)) } "Total unique paternal descendants in generations 1-" d(gen) " is " d(lengthset(allgen)) " of which " d(lengthset(allmalegen)) " are male paternal descendants.\n" } lifelines-3.0.61/reports/cousins.ll0000700002540200244210000003243310076661056017467 0ustar prappDomain Users/* * @progname cousins.ll * @version 6.0 * @author Wetmore * @category * @output Text * @description Finds the relationship between two persons in a LifeLines database. If there is no common ancestor, the program will attempt to find a sequence of genetic relations that link the two persons. In the cases where the two persons are genetically related (have a common ancestor), the program will find and display the relationship. If the two persons are not genetically related, the program will attempt to discover a sequence of genetic relationships that link the two persons. For example, the program will display the relationship between your two grandmothers as a sequence of two genetic relations with a grandchild as the link between. Note that two persons may be related to each other in many ways; this program finds only the shortest one (or ones if there are different, equally short paths). This program requires version 3 of LifeLines. author -- Tom Wetmore, ttw@beltway.att.com version history 1 - 08 Sep 1993 -- modified from the relate program 2 - 08 Sep 1993 -- fixed niece/nephew bug 3 - 09 Sep 1993 -- extensive modification 4 - 13 Aug 1994 -- more modifications 5 - 2 Mar 1995 -- check for direct descendants first. Chris Bone 6 - 2 Mar 1995 -- Neater cousin removes, find all short paths. J.F. Chandler */ global(links) /* table of links back one person */ global(rels) /* table showing direction of the links */ global(klist) /* list of found persons not linked back to yet */ global(numb) /* number of persons considered so far */ /*====================================================================== * notes on global data structures -- * o links -- implements the function link(key1) --> key2, where key1 * is the key of a person, and key2 is the key of the person that * person key1 links back to * o rels -- implements the function rels(key1) --> dir, where key1 is * the key of a person, and dir is the relationship direction (up or * down) between this person and person link(key1) *=====================================================================*/ /*===================================================================== * main -- Get the user to identify two persons; if all goes well, call * relate to do the hard stuff. *===================================================================*/ proc main () { print("This program finds the relationship between two persons.\n\n") getindimsg(from, "Please identify the first person.") set(to, 0) if (from) { getindimsg(to, "Please identify the second person.") } if (and(from, to)) { print("Searching for relationships between:\n\t") print(name(from), " and ", name(to)) print(".\n\nThis may take a while -- ") print("each dot is 25 persons considered.\n") set(fkey, save(key(from))) set(tkey, save(key(to))) call relate(tkey, fkey) } else { print("Please call again.\n") } } /*====================================================================== * relate -- Attempt to find a relationship between two persons by * constructing a path of parent and/or child links between them; if a * path is found, call foundpath to display the results; else report * that there is no relation between the persons. *====================================================================*/ proc relate (fkey, tkey) { table(links) /* table of links back one person */ table(rels) list(klist) /* keys of persons not linked back to yet */ set(up, 1) set(down, neg(1)) set(numb, 0) set(pathlength, 0) set(toolong, 0) set(found, 0) /* Link the first person to him/herself with no direction, and make him/her the first entry in the list of unlinked back to persons. A "zero" person in the list marks the start of next-longer paths. */ insert(links, fkey, fkey) insert(rels, fkey, 0) enqueue(klist, fkey) enqueue(klist, 0) /* Iterate through the list of unlinked back to persons; remove them one by one; link their parents and children back to them; add their parents and children to the unlinked back to list; check each iteration to see if one of the new parents or children is the searched for person; if so quit the iteration and call foundpath; else continue iterating. */ while ( gt(length(klist),1) ) { set(key, dequeue(klist)) if(not(key)) { set(pathlength, add(1,pathlength)) if(eq(pathlength,toolong)) { break() } enqueue(klist, 0) continue() } set(indi, indi(key)) set(dir, lookup(rels, key)) call include(key, father(indi), down) call include(key, mother(indi), down) families(indi, fam, spouse, num1) { children(fam, child, num2) { call include(key, child, up) } } if (key, lookup(links, tkey)) { if(found) { "\n\nAlternate relationship" } else { "Relationship from " name(indi(tkey)) " to " name(indi(fkey)) } ":\n" set(found, 1) call foundpath(tkey) call fullpath(tkey) set(toolong, add(1,pathlength)) insert(links, tkey, 0) } } /* Check to see if there is no relation between the persons, and if there is none let the user know and quit. */ if (not(found)) { print("\nThey are not blood-related to one another.") "They are not blood-related to one another." } } /*========================================================================= * include -- Links a newly discovered person (indi) back to another person * (key), with a specified direction (rel); the new person is then put on * the list of unlinked back to persons. *=======================================================================*/ proc include (key, indi, rel) { /* Only include the person if he/she has not been found before. */ if (and(indi, not(lookup(links, key(indi))))) { /* Keep user happy watching those dots! */ set(numb, add(numb, 1)) if (eq(0, mod(numb, 25))) { print(".") } /* Update the data structures. */ set(new, save(key(indi))) insert(links, new, key) insert(rels, new, rel) enqueue(klist, new) } } /*================================================================= * foundpath -- Show the relationship path between the two persons. *===============================================================*/ proc foundpath (key) { print("\n") "\n" list(nexkeys) list(nexlens) /* Init the nexus person from the first (to) person. */ set(nexus, key) set(dir, lookup(rels, key)) set(len, dir) set(again, 1) /* Create the nexus list, the list of persons where relationships change direction; a nexus person is either the first person, the last person, or the common ancestor or descendent of two other nexus persons. */ while (again) { /* Get the next person from the path. */ set(key, lookup(links, key)) set(rel, lookup(rels, key)) /* If the new person's direction is 0 this is the last person in the path (the from person) so add the current nexus person and the last person to the nexus list and quit the loop */ if (eq(0, rel)) { enqueue(nexkeys, nexus) enqueue(nexlens, len) enqueue(nexkeys, key) enqueue(nexlens, 0) set(again, 0) /* if new person changes direction, add the current nexus person to the nexus list, and make the new person the new current nexus person */ } elsif (ne(rel, dir)) { enqueue(nexkeys, nexus) enqueue(nexlens, len) set(nexus, key) set(dir, rel) set(len, rel) /* if the new person continues in the same direction, record the step */ } else { set(len, add(len, rel)) } } set(one, dequeue(nexkeys)) set(len, dequeue(nexlens)) set(again, 1) /* step down the nexus list, computing and displaying the relationships between either two nexus persons (where it is appropriate to show pure ancestry or descendency) or three nexus persons (where it is appropriate to show two nexus persons as cousins with their common ancestor) */ while (and(again, length(nexkeys))) { set(llen, length(nexkeys)) /* If the initial direction is down, show first nexus person as a simple ancestor of the second nexus person; this condition can only be true in the first iteration */ if (lt(len, 0)) { set(two, dequeue(nexkeys)) set(new, dequeue(nexlens)) call showancs(one, two, neg(len)) set(one, two) set(len, new) /* If the direction is up, there are two subcases: */ } elsif (gt(len, 0)) { /* If the nexus list has only one remaining entry then show the (last-1)th nexus person as a simple descendent of the last nexus person */ if (eq(1, llen)) { set(two, dequeue(nexkeys)) set(new, dequeue(nexlens)) call showdesc(one, two, len) set(again, 0) /* If the nexus list has more than one remaining entry then show the current nexus person and the next two as two "cousins" with an intervening common ancestor, and make the last of the three persons the current nexus person for the next loop iteration */ } else { set(two, dequeue(nexkeys)) set(tmp, dequeue(nexlens)) set(three, dequeue(nexkeys)) set(new, dequeue(nexlens)) call showcous(one, two, three, len, neg(tmp)) set(one, three) set(len, new) } /* This is the special case where a person is related to him/herself. */ } else { print("They're the same person.\n") "They're the same person.\n" set(again, 0) } } } /*================================================= * showancs -- Show a direct ancestry relationship. *==============================================*/ proc showancs (one, two, len) { set(indi, indi(one)) if (male(indi)) { set(pword, "father ") } elsif (female(indi)) { set(pword, "mother ") } else { set(pword, "parent ") } if (eq(1, len)) { set(aword, "the ") } else { set(aword, "a ") } print(name(indi), " is ", aword) name(indi) " is " aword if (eq(2, len)) { print("grand") "grand" } elsif (eq(3, len)) { print("great grand") "great grand" } elsif (lt(3, len)) { print("great(", d(sub(len, 2)), ") grand") "great(" d(sub(len, 2)) ") grand" } print(pword, "of\n ", name(indi(two)), ".\n") pword "of\n " name(indi(two)) ".\n" } /*==================================================== * showdesc -- Show a direct descendency relationship. *==================================================*/ proc showdesc (one, two, len) { set(indi, indi(one)) if (male(indi)) { set(pword, "son ") } elsif (female(indi)) { set(pword, "daughter ") } else { set(pword, "child ") } print(name(indi), " is a ") name(indi) " is a " if (eq(2, len)) { print("grand") "grand" } elsif (eq(3, len)) { print("great grand") "great grand" } elsif (lt(3, len)) { print("great(", d(sub(len, 2)), ") grand") "great(" d(sub(len, 2)) ") grand" } print(pword, "of\n ", name(indi(two)), ".\n") pword "of\n " name(indi(two)) ".\n" } /*========================================================================= * showcous -- Show a cousin relationship; for the purposes of this * program, siblings, uncles, aunts, nieces and nephews are considered to * be special cases of cousins. *=======================================================================*/ proc showcous (one, two, three, up, down) { set(indi, indi(one)) if (male(indi)) { set(sword, " brother ") set(nword, " nephew ") set(uword, " uncle ") } elsif (female(indi)) { set(sword, " sister ") set(nword, " niece ") set(uword, " aunt ") } else { set(sword, " sibling ") set(nword, " niece or nephew ") set(uword, " uncle or aunt ") } print(name(indi(one)), " is a") name(indi(one)) " is a" if (and(eq(up,1), eq(down, 1))) { /* sibling cases */ print(sword, "of") sword "of" } elsif (eq(up, 1)) { /* uncle/aunt cases */ if (eq(down, 2)) { print("n", uword, "of") "n" uword "of" } elsif (eq(down, 3)) { print(" great", uword, "of") " great" uword "of" } else { print(" great(", d(sub(down, 2)), ")", uword, "of") " great(" d(sub(down, 2)) ")" uword "of" } } elsif (eq(down, 1)) { /* niece/nephew cases */ if (eq(up, 2)) { print(nword, "of") nword "of" } elsif (eq(up, 3)) { print(" great", nword, "of") " great" nword "of" } else { print(" great(", d(sub(up, 2)), ")", nword, "of") " great(" d(sub(up, 2)) ")" nword "of" } } else { /* cousin cases */ if (gt(up, down)) { set(gen, down) set(rem, sub(up, down)) } else { set(gen, up) set(rem, sub(down, up)) } print(" ", ord(sub(gen,1)), " cousin ") " " ord(sub(gen,1)) " cousin " if (ne(rem, 0)) { if (eq(rem,1)) {print("once") "once"} elsif (eq(rem,2)) {print("twice") "twice"} elsif (eq(rem,3)) {print("thrice") "thrice"} else { print(card(rem), " times") card(rem) " times" } print(" removed ") " removed " } print("of") "of" } print("\n ", name(indi(three))) "\n " name(indi(three)) print(", through their ancestor,\n ", name(indi(two)), ".\n") ", through their ancestor,\n " name(indi(two)) ".\n" } /*======================================================================= * fullpath -- Show full path between the two persons. *======================================================================*/ proc fullpath (key) { "\nThe full relationship path between them is:\n\n" set(again, 1) while (again) { name(indi(key)) set(new, lookup(links, key)) set(dir, lookup(rels, key)) if (gt(dir, 0)) { " is the child of" } if (lt(dir, 0)) { " is the parent of" } "\n" if (eq(0, strcmp(key, new))) { set(again, 0) } else { set(key, new) } } } lifelines-3.0.61/reports/coverage.ll0000700002540200244210000000456710076661056017606 0ustar prappDomain Users/* * @progname coverage.ll * @version 4 * @author Wetmore, Woodbridge, Eggert * @category * @output Text * @description * * Display percentage of ancestors of each generation discovered coverage -- Displays "ancestor coverage," that is, what percentage of ancestors have been discovered for each generation back in time. First version by T. Wetmore, 21 February 1994 2nd version by S. Woodbridge, 6 March 1994 3rd version by J. Eggert, 7 March 1994 4th version by J. Eggert, 9 November 1998 */ proc main () { getindi(person0, "Enter person to compute ancestor coverage for.") print("Collecting data .... \n") "Ancestor Coverage Table for " name(person0) "\n\n" col(1) "Gen" col(9) "Total" col(19) "Found" col(30) "(Diff)" col(38) "Percentage\n\n" list(ilist) list(glist) table(dtable) enqueue(ilist, person0) enqueue(glist, 1) set(g,0) set(d,0) set(gsum,0) set(dsum,0) set(totpos,1) set(oldgen,1) while(person, dequeue(ilist)) { set(gen, dequeue(glist)) if (ne(gen,oldgen)) { call printgen(oldgen,g,d,totpos) set(gsum,add(gsum,g)) set(dsum,add(dsum,d)) set(g,0) set(d,0) set(totpos,mul(totpos,2)) set(oldgen,gen) } incr(g) if (not(lookup(dtable, key(person)))) { insert(dtable, key(person), gen) incr(d) } /* print(name(person), "\n") */ incr(gen) if (par,father(person)) { enqueue(ilist, par) enqueue(glist, gen) } if (par,mother(person)) { enqueue(ilist, par) enqueue(glist, gen) } } set(gsum,add(gsum,g)) set(dsum,add(dsum,d)) call printgen(oldgen,g,d,totpos) "\n" call printgen(0,gsum,dsum,0) } proc printgen(gen,g,d,tot) { if (tot) { col(1) rjustify(d(sub(gen,1)),3) col(6) if (lt(gen,31)) { rjustify(d(tot),8) } } else { col(1) "all" } col(16) rjustify(d(g),8) if (ne(g,d)) { col(26) rjustify(concat("(",d(d),")"),10) } if (and(tot,lt(gen,31))) { col(38) set(u, mul(g, 100)) set(q, div(u, tot)) set(m, mod(u, tot)) set(m, mul(m, 100)) set(m, div(m, tot)) rjustify(d(q),3) "." if (lt(m, 10)) {"0"} d(m) " %" } "\n" } lifelines-3.0.61/reports/CREDIT0000700002540200244210000000273610320266233016341 0ustar prappDomain Users Thanks to all the lifelines report writers. IMHO this is the real power of lifelines! -marc ------------------------------------------------------------------------ Bill Alford Kurt Baudendistel Paul Buckely Vincent Broman John F. Chandler Dave Close Andrew Deacon Stephen Dum Chris Eagle Jim Eggert Wes Groleau James Kirby Dick Knowles Eric Majani Cliff Manis Paul B. McBride Doug McCallum Scott McGee Dennis Nicklaus Marc Nozell David Olsen Alexander Ottl James Patton Jones Rafal Prinke Perry Rapp Denis Roegel Henry Sikkema Robert Simms Hume Smith Larry Soule Kris Stanton Phil Stringer Arthur Teschler Birger Wathne Tom Wetmore Fred Wheeler Stephen Woodbridge lifelines-3.0.61/reports/cron.ll0000700002540200244210000004572210450764133016746 0ustar prappDomain Users/* * @progname cron.ll * @version 4.0 * @author Stephen Dum * @category * @output HTML * @description Generate calendar of birth, death, marriage events arranged by the year, month and day that they occurred. Generates a top level index by year, with actual events stored in a separate html file for each decade. Some properties must be set in your lifelines configuration file for this report to run, see comments at beginning of the report for details. Warning, this report requires lifelines version 3.0.50 or later. by Stephen Dum (stephen.dum@verizon.net) Version 1 March 2003 Version 2 November 2005 Support privitizing data Version 3 December 2005 Do html char set encoding Version 4 June 2006 incorporated mods by Dave Eaton (dwe@arde.com) May 2006 This program was inspired by similar efforts by Mitch Blank (mitch@ctrpnt.com) but without ever seeing the code he used to do a similar thing. The code used in cron.ll is very similar to anniver.ll. Other than the sort order and print out details, the two programs share about 3/4 of their code. Before using, there are a few properties that need to be customized for your own environment so add them to your .linesrc ( or for windows lines.cfg) file. You can also set them on the command line (like -Ianniver.htmldir=/tmp/foo) The properties that are looked up are: user.fullname -- name of the database owner user.email -- email address of the db owner cron.htmldir -- path to the directory to store results in e.g. /home/joe/genealogy/html (program expects a subdir in this directory with the name of the database in it.) cron.backgroundimage -- path to the background image, no image if not defined. e.g. ../../image/crink.jpg this places image at the same level as /home/joe/genealogy/html privatization: This report respects 2 levels of privatization 1. if a record "RESN confidential" exists on an individual they are skipped (as this report is designed to be shared, this seems like a reasonable default) 2. skip anyone estimated to be living History. Version 2 Add code to allow respecting privatized data. Version 3 switch from baptism() to get_baptism() for wider coverage use translation tables to convert data to properly escaped html. This is very codeset dependent. Version 4 added changes by Dave Eaton (dwe@arde.com) These were actually changes to anniver4, but merged here too. Added "firstyear" that events may be on the calendar Added "includedeath" check to drop deaths if those are not desired Added ability to generate report for descendants of more than one individual Added ability to generate report only for living people (omitting confidential if desired) */ /* customization globals */ char_encoding("ASCII") option("explicitvars") global(base_filename) /* where to store the results */ global(background) /* path of background image relative to final html * location, or "" */ global(hi_bg_color) /* highlighted year background color */ global(lo_bg_color) /* non-highlighted year background color */ global(db_owner) /* name of database owner - from config file */ global(owner_email) /* email of database owner - from config file */ global(justliving) /* should we generate a report only for living people? */ global(privatize) /* should we privatize the data * 0 = display all data * 1 = skip confidential records * 2 = skip confidential and living */ global(withkey) /* should we include key's in the output */ global(cutoff_year) /* 100 years before today */ /* birth >= cutoff_year is about 101 years, * and we consider person living */ global(firstyear) /* earliest year for which entries should be included */ global(includedeath) /* if set, then include the death events on the calendar */ global(month_name) /* names of the months */ global(events) /* list of events to print */ global(dates) /* list of dates of the events */ global(keynames) /* name(s) of the key individuals for this report */ proc main () { /* initialization of globals */ set(hi_bg_color,"\"#ddb99f\"") set(lo_bg_color,"\"#e5d3c5\"") set(db_owner, getproperty("user.fullname")) set(owner_email, concat("mailto:",getproperty("user.email"))) set(background,getproperty("cron.backgroundimage")) set(base_filename,concat(getproperty("cron.htmldir"),"/",database(),"/")) if (not(test("d",base_filename))) { print("Error, property cron.htmldir=",base_filename, ", is not a directory,aborting\n") print("Please read comments at beginning of report about setting properties\n") return() } /* other globals*/ list(month_name) enqueue(month_name,"January") enqueue(month_name,"February") enqueue(month_name,"March") enqueue(month_name,"April") enqueue(month_name,"May") enqueue(month_name,"June") enqueue(month_name,"July") enqueue(month_name,"August") enqueue(month_name,"September") enqueue(month_name,"October") enqueue(month_name,"November") enqueue(month_name,"December") extractdate(gettoday(),day,mon,cutoff_year) decr(cutoff_year,100) set(cs,getproperty("codeset")) if (eqstr(cs,"UTF-8")) { set(srccs,"UTF-8") set(dstcs,"UTF-8//html") } elsif (eqstr(cs,"ISO-8859-15")) { set(srccs,"ISO-8859-15//html") set(dstcs,"UTF-8") } else { print("\nDatabase codeset ",cs," not supported, exiting\n") } /* end of initialization of globals */ getint(justliving,"Enter 1 to include only living people, 0 otherwise") if (justliving) { /* Default the choices which conflict with "justliving" */ set(includedeath,0) /* We want living people, so see if we also want confidental */ getint(noconfidential,"Enter 1 to omit confidential living people, 0 otherwise") if (noconfidential) { set(privatize,1) } else { set(privatize,0) } } else { getint(privatize,"\nPrivatization: 0 print all data; 1 skip confidential records; 2 skip confidential and living") getint(includedeath,"Enter 1 to include deaths on calendar, 0 otherwise") } getint(withkey,"Enter 1 to include keys, 0 otherwise") getint(firstyear,"Enter oldest year to be on calendar, 0 for no limit") getindi(person,"Enter person for whom to find descendants (return for all)") indiset(thisgen) indiset(allgen) list(events) list(dates) list(keynames) set(firstpass,1) /* if a person is entered, the generated list of people include * person and spouse, and all the children of either * and then recursively the people, their spouses and all the children * thereof */ if (person) { while (person) { addtoset(thisgen, person, 0) addtoset(allgen, person, 0) print("Computing descendants of ", name(person), " ") enqueue(keynames,concat(name(person))) set(thisgensize,1) set(gen,neg(1)) while(thisgensize) { set(gen,add(gen,1)) print("adding ",d(thisgensize)," individuals for generation ",d(gen),"\n") indiset(spouse) set(spouse,spouseset(thisgen)) set(thisgen,childset(union(thisgen,spouse))) set(allgen,union(allgen,spouse)) set(allgen,union(allgen,thisgen)) set(thisgensize,length(thisgen)) /* the following check prevents looping if the * database has been corrupted and a parent is listed * as a child of that parent, and diagnoses the fault */ if (eq(length(intersect(allgen,thisgen)),thisgensize)) { set(thisgensize,0) print("Warning child is listed as its own parent\n") forindiset(thisgen,indi,val,i) { print (name(indi)," ") } print("\n") } } if (firstpass) { print ("Total of ") set(firstpass,0) } else { print ("New total of ") } print (d(length(allgen))," individuals",nl()) getindi(person,"Enter next person for whom to find descendants") } /* now generate list of events */ forindiset(allgen,indi,val,i) { if (not(mod(i,100))) { print(".") } call add_indi(indi) } print("\n") } else { print("Traversing all individuals ") forindi (indi, val) { if (not(mod(val,100))) { print(".") } call add_indi(indi) set(max,val) } print (nl(), "Total of ",d(max)," individuals",nl()) } print( d(length(dates))," events generated",nl()) print("sorting data") rsort(events,dates) /* Now print out all the data for each year */ print(nl()) list(yearmask) set(lastyear,-1) set(lastmonth,-1) set(lastdecade,-1) set(in_year,0) print( d(length(dates))," events",nl()) while(length(dates)) { set(val,pop(dates)) set(event,pop(events)) set(year,div(val,10000)) set(mon, mod(val,10000)) set(day, mod(mon,100)) set(mon, div(mon,100)) set(decade, div(year,10)) /* print(d(mon),"/",d(day),"/",d(year)," ", event, nl()) debug */ if (ne(lastdecade,decade)) { if (ne(lastdecade,-1)) { if (in_year) { "\n" set(in_year,0) } call write_tail() } call openfile(concat("dec",d(decade)),concat(d(mul(decade,10)), " - ",d(add(mul(decade,10),9))," Events")) set(lastdecade,decade) } if (ne(lastyear,year)) { if (in_year) { "\n" } "

" d(year) "

" nl() push(yearmask,year) "" nl() set(in_year,1) set(lastyear,year) } if (mon) { if (day) { set(title,concat(getel(month_name,mon)," ",d(day))) } else { set(title,getel(month_name,mon)) } } else { if (day) { set(title,d(day)) } else { set(title,"") } } "\n\n" } if (in_year) { "
" "" title "\n" "" if (srccs) { convertcode(event,srccs,dstcs) } else { event } "
\n" } call write_tail() /* Now print out the index page */ call openfile("cron","Chronological Event Calendar") "This calendar indexes events by the year in which they occurred.\n" "

Click on the year to see the events that occurred in that year.\n" "


\n" "\n" /* The calendar is arranged with 10 years across. */ set(decade,div(getel(yearmask,1),10)) set(cur_year,mul(decade,10)) set(lastdecade,div(getel(yearmask,0),10)) set(minyear,getel(yearmask,1)) set(maxyear,getel(yearmask,0)) forlist(yearmask,this_year,cnt) { while(le(cur_year,this_year)) { if (eq(mod(cur_year,10),0)) { /* print("processing decade ",d(decade),nl()) / * debug */ "" nl() } if (eq(cur_year,this_year)) { /* print year with a link to year page */ "\n" } else { if (or(lt(cur_year,minyear),gt(cur_year,maxyear))) { /* blank out year */ "" nl() } else { /* print year without a link to year page */ "" nl() } } incr(cur_year) if (eq(mod(cur_year,10),0)) { "" nl() incr(decade) } } } "
" d(cur_year) "\n" d(cur_year) "
\n" call write_tail() } /* openfile(filename, title_to_use) * open output file and write out header information */ proc openfile(name,title) { set(filename, concat(base_filename,name,".html")) print("Writing ", filename, "\n") newfile(filename, 0) "\n" "\n" "\n\n" "\n" " " title " \n" "\n" "\n" if (eqstr(background,"")) { "\n" } else { "\n" } "

" title "

\n
\n" } /* write_tail() * write out common footer information for file. */ proc write_tail() { "

\n" monthformat(6) "This page was created " stddate(gettoday()) "
\n" "Database maintained by " "\n" db_owner "
\n" "" nl() "\n" } /* add_indi(individual) * check a given individual and see if there are any events to add * at the moment we do birth, death and marriage events. * Additional events can be added here */ proc add_indi(indi) { set(birth_type,0) if (birth,birth(indi)) { set(birth,get_date(birth)) set(birth_type," born") } elsif (birth, get_baptism(indi)) { set(birth,get_date(birth)) set(birth_type," baptized") } set(death_type,0) if (death,death(indi)) { set(death,get_date(death)) set(death_type," died") } elsif (death, burial(indi)) { set(death,get_date(death)) set(death_type," buried") } /* skip confidential records and living people */ if (privatize) { if (confidential(indi)) { return() } /* living - birth, no death, and birth < 101 years ago */ if (and(ge(privatize,2),birth,not(death))) { if (ge(div(birth,10000),cutoff_year)) { return()} } } if (birth) { /* Make certain that if we only want living people that this is (or at least may be) */ if (not(or(and(justliving,death),and(justliving,lt(mod(birth,10000),cutoff_year))))) { if (withkey) { enqueue(events,concat(name(indi),"(",key(indi),")",birth_type)) } else { enqueue(events,concat(name(indi),birth_type)) } enqueue(dates,birth) } } if (and(includedeath,death)) { if (withkey) { enqueue(events,concat(name(indi),"(",key(indi),")",death_type)) } else { enqueue(events,concat(name(indi),death_type)) } enqueue(dates,death) } families(indi,famly, spouse, cnt) { /* skip confidential families */ if (confidential(famly)) { continue() } if (and(privatize,spouse)) { if (confidential(spouse)) { continue() } } if (justliving) { /* make sure the person is living: no death, birth and birth < 101 years ago */ /* Nope, we know they have died */ if (death) { return() } if (birth) { /* Nope, estimated they would be too old now */ if (lt(mod(birth,10000),cutoff_year)) { return() } } } /* living - birth, no death, and birth < 101 years ago */ if (ge(privatize,2)) { if (and(birth(spouse),not(death(spouse)))) { if (ge(mod(get_date(birth(spouse)),10000),cutoff_year)) { continue()} } } /* to avoid duplication, only enter data * if indi is male, or there is no spouse */ if (or(male(indi),not(spouse))) { fornodes(fnode(famly), node) { if(eqstr(tag(node),"MARR")) { if (spouse) { set(names,concat(name(indi)," and ",name(spouse))) set(keys,concat("(",key(indi),",",key(spouse),")")) } else { set(names,name(indi)) set(keys,concat("(",key(indi),")")) } set(marr,get_date(node)) if (marr) { /* Make sure date is plausible for living or that we don't care */ if (or(not(justliving),ge(mod(marr,10000),cutoff_year))) { if (withkey) { enqueue(events,concat(names,keys," married")) } else { enqueue(events,concat(names," married")) } enqueue(dates,marr) } } } } } } } /* get_date(node) * if event node has a date associated with it return it encoded as * (year * 100 + month) * 100 + day * These values facilitate sorting. */ func get_date(node) { extractdate(node,day,mon,yr) if (yr) { return(add(mul(add(mul(yr,100),mon),100),day)) } return(0) } func confidential(n) { fornodes(n,node) { if (eqstr(tag(node),"RESN")) { if (eqstr(value(node),"confidential")) { return(1) } } } return(0) } func get_baptism(ind) { fornodes(ind,node) { if (index(" BAPM BAPL CHR CHRA ",concat(" ",upper(tag(node))," "),1)) { return(node) } } return(0) } lifelines-3.0.61/reports/d-rtf.ll0000700002540200244210000002562510313310013016777 0ustar prappDomain Users/* * @progname d-rtf.ll * @version 1.1 of 2000-06-11 * @author Paul Buckley * @category * @output RTF * @description * * This report will produce a document in Rich Text Format modeled after some * typewritten and typeset Henry format genealogies I've seen. * All descendants of a selected person, their spouses and their spouses * parents, event dates, and NOTEs are included. I generally reserve TEXT * items for comments I would prefer not to export. * * This version requires shorten.li, a library with a lookup table * to abbreviate the elements of the long placenames I tend to use * (town, county, state, country). * If you remove the calls to "shorten()" and just use the output of * long() it should work fine without the library. * * Added support for printing reference numbers after data. * Set "refs" to 0 to omit references. * * Written by: Paul Buckley, 11 Jun 2000, contact via LifeLines mail list * (with a lot of help from the archives) */ global(rtfH) /* string, RTF header and font info */ global(rulI) /* string, index person ruler */ global(rulS) /* string, spouse ruler */ global(rulC) /* string, children list ruler*/ global(rulN) /* string, notes ruler (same as spouse)*/ global(font_name) /* string, name of font */ global(font_size) /* int, font size in RTF values (2 x points) */ global(big_font) /* int, ~1.3 times font_size */ global(sml_font) /* int, ~2/3 times font_size */ include("shorten.li") proc main () { set(refs,1) /*set this to have reference numbers printed*/ indiset(sibs) indiset(nextgen) table(abbvtab) call setupabbvtab() getindi(p) newfile(concat(database(), ".", key(p), "-d.rtf"),0) call GetUserOptions() set(genN,1) set(Icnt,1) addtoset(sibs,p,Icnt) set(l,1) /* set(mark,concat("\\fs", d(div(font_size,2)), "\\up4 +\\up0\\fs", d(font_size))) */ set(mark,"*") rtfH "\\pard\\fs" d(big_font) "The Descendants of " upper(name(p)) "." "\\ql\\ulnone\\\n\\fs" d(font_size) "\\\n" while(l) { "\\pard\\qc\\i1\\fs" d(big_font) " " capitalize(ord(genN))" Generation \\i0\\ql\\fs" d(font_size) "\\\n\\\n" forindiset(sibs,person,var,i) { rulI upper(alpha(genN)) "-" d(var) "\t" name(person) if(or(date(birth(person)),place(birth(person)))) { ", b. " shorten(long(birth(person))) if(refs) {call refRTF(birth(person)) } } if(or(date(baptism(person)),place(baptism(person)))) { ", bt. " shorten(long(baptism(person))) if(ifwitn(root(person))) {". "} if(refs) {call refRTF(baptism(person)) } } if(or(place(death(person)),date(death(person)))) { ", d. " shorten(long(death(person))) if(refs) {call refRTF(death(person)) } } ".\\\n" traverse(root(person),node,cnt) { if (not(strcmp(tag(node),"NOTE"))) { rulN value(node) call refRTF(node) " \n" } } families(person,family,spouse,j) { rulS if(spouse) { givens(person) " married " name(spouse) if(date(marriage(family))) { " " shorten(long(marriage(family))) } ". " /*if(refs) {call refRTF(marriage(family))}*/ "\n" if(ifwitn(root(family))) {". "} set(comma,0) if(or(place(birth(spouse)),date(birth(spouse)))) { set(comma,1) pn(spouse,0) " was born " shorten(long(birth(spouse))) }elsif(parents(spouse)) { pn(spouse,0) " was born" shorten(long(birth(spouse))) } if(parents(spouse)) { " to " if(father(spouse)) { set(comma,1) name(father(spouse)) if(mother(spouse)) { set(comma,1) " and " name(mother(spouse)) } }elsif(mother(spouse)) { set(comma,1) name(mother(spouse)) } } if(or(date(death(spouse)),place(death(spouse)))) { if(comma) {", "} else { pn(spouse,0) " "} "died " shorten(long(death(spouse))) } if(comma) {". "} traverse(root(spouse),node,cnt) { if (not(strcmp(tag(node),"NOTE"))) { "\\\n" rulN value(node) call refRTF(node) } } "\\\n" } else {"Spouse unknown.\\\n"} children(family,kid,k) { if(kid) { set(genNx,add(genN,1)) rulC if(nfamilies(kid)) { addtoset(nextgen,kid,Icnt) upper(alpha(genNx)) "-" d(Icnt) mark "\t" name(kid) if(date(birth(kid))) { ", b. " shorten(date(birth(kid))) } if(date(baptism(kid))) { ", bt. " shorten(date(baptism(kid))) } if(date(death(kid))) { ", d. " shorten(date(death(kid))) } ".\\\n" }else { upper(alpha(genNx)) "-" d(Icnt) "\t" name(kid) if(or(date(birth(kid)),place(birth(kid)))) { ", b. " shorten(long(birth(kid))) if(refs) {call refRTF(birth(kid)) } } if(or(date(baptism(kid)),place(baptism(kid)))) { ", bt. " shorten(long(baptism(kid))) if(ifwitn(root(kid))) {""} if(refs) {call refRTF(baptism(kid)) } } if(or(date(death(kid)),place(death(kid)))) { ", d. " shorten(long(death(kid))) if(refs) {call refRTF(death(kid)) } } ".\\\n" traverse(root(kid),node,cnt) { if (not(strcmp(tag(node),"NOTE"))) { "\t" value(node) call refRTF(node) "\\\n" } } } set(Icnt,add(Icnt,1)) } } traverse(root(family),node,cnt) { if (not(strcmp(tag(node),"NOTE"))) { rulN value(node) call refRTF(node) " " } } } "\\\n" } set(l, lengthset(nextgen)) indiset(sibs) set(sibs,nextgen) indiset(nextgen) set(genN,add(genN,1)) set(Icnt,1) } rulI "\\\n Generated " date(gettoday()) " from " concat(database(),".gedcom") /* " by YOU " */ " using LifeLines genealogy software" ". \\\n } " } proc GetUserOptions () { /* ** QUESTION: What font should be used? ** ** Because it is such a pain to enter a font name, and a spelling mistake ** will get you an ugly default font, this should be set to a default. I ** suggest one of: Times-Roman, NewCenturySchlbk-Roman, or ZapfChancery. ** This is a modification of code from the original psanc uing NeXT fonts ** -PB ** */ if (0) { list(options) setel(options, 1, "Roman") setel(options, 2, "Italic") set(ff, menuchoose(options, "Select font face: ")) if (eq(1,ff)) { list(options) setel(options,1,"Times") setel(options,2,"New Century Schoolbook") setel(options,3,"Garamond") set(mc, menuchoose(options, "Select font family: ")) if (eq(3,mc)) { set (font_name, "AGaramond-Regular") } elsif (eq(2,mc)) { set (font_name, "NewCenturySchlbk-Roman") } else { set (font_name, "Times-Roman") } }else { setel(options,1,"Times") setel(options,2,"New Century Schoolbook") setel(options,3,"Garamond") setel(options,4,"ZapfChancery") set(mc, menuchoose(options, "Select font: ")) if (eq(1,mc)) { set (font_name, "Times-Italic") } elsif (eq(2,mc)) { set (font_name, "NewCenturySchlbk-Italic") } elsif (eq(3,mc)) { set (font_name, "AGaramond-Italic") } elsif (eq(4,mc)) { set (font_name, "ZapfChancery-MediumItalic") } } } else { set (font_name, "Times-Roman") } /* ** QUESTION: What font size should be used? ** ** I set this to 20 by default, which is about 10pt. ** A title font is generated about 1/3 bigger (dividing integers here) ** -PB ** */ if(0) { getintmsg (font_size, "Enter the font size in points.") set(font_size, mul(font_size,2)) } else { set(font_size, 20) } set(big_font,add(font_size,div(font_size,3))) set(sml_font,sub(font_size,div(font_size,3))) /* * Set RTF defaults. Modifed for Mac OS X TextEdit.app. * Don't forget the terminal space character. */ set(rtfH, concat("{\\rtf1\\ansicpg1000{\\fonttbl\\f0\\fnil ", concat(font_name, ";}"))) set(rtfH, concat(rtfH, "\n\\margl720\\margr720\\margt720\\margb720\\viewkind1")) set(rtfH, concat(rtfH, "\n\\f0\\b0\\i0\\ulnone\\ql\\fs")) set(rtfH, concat(rtfH, d(font_size))) set(rtfH, concat(rtfH, "\\fi0\\li0")) set(rulI, "\\pard\\tx720\\fi-720\\li720 ") set(rulS, "\\pard\\fi-180\\li1080 ") set(rulC, "\\pard\\tx1800\\fi-720\\li1800 ") set(rulN, "\\pard\\fi-180\\li1080 ") } func ifwitn (thisnode) { set(needand,0) set(amdone,0) traverse(thisnode,x,y) { if (not(strcmp(tag(x),"WITN"))) { if(needand) {" and"} " " value(x) set(needand,1) set(amdone,1) } else {set(needand,0)} } if(amdone) {" witnessed"} else {""} return(amdone) } proc refRTF (i) { fornodes(i,node) { if (not(strcmp(tag(node),"SOUR"))) { set(text,strsave(value(node))) if (index(text,"@",2)) { set(text,substring(value(node),3,sub(strlen(text),1))) } "\\fs" d(sml_font) "\\up" d(div(font_size,4)) "(" text ")" "\\fs" d(font_size) "\\up0" } } } lifelines-3.0.61/reports/dates.ll0000700002540200244210000001602410076661056017102 0ustar prappDomain Users/* * @progname dates.ll * @version 4 * @author Eggert * @category * @output Text * @description Prints out the value of all the lines in your database with the DATE tag, along with enough information so you can find the line easily. The purpose of this report is so you can sort all the dates in the database, so you can look for illegal dates, make birthday lists, etc. The dates are printed in the order that they appear in the database, Output can then be sorted if this is more useful than the native form. dates - a LifeLines dates extraction program by Jim Eggert (eggertj@atc.ll.mit.edu) Version 1, 3 December 1992 Version 2, 8 December 1992 (minor bug fix, report in columns) Version 3, 5 February 1993 (speedup of tag handling) Version 4, 1 September 1993 (bug fix for families with no parents) This code borrows heavily from the excellent program places, written by David Olsen (dko@cs.wisc.edu), and contains improvements by Steve Woodbridge (sew@pcbu.prime.com). Prints out the value of all the lines in your database with the DATE tag, along with enough information so you can find the line easily. The purpose of this report is so you can sort all the dates in the database, so you can look for illegal dates, make birthday lists, etc. The dates are printed in the order that they appear in the database, so the report is not very useful in its native form. To make it more useful, run the output file through the program 'sort', and perhaps 'grep' if you want to get only birthdates etc. To make sorting easier, each date is preceded by a eight-digit number of the form yyyymmdd. Then a simple ASCII line-by-line sort puts the dates in the right order. Days and months are checked for validity (thirty days hath September and all that) and futurity. It asks you if you want to use the Gregorian calendar or the Julian calendar. This only affects the validity of Feb 29ths, so don't fret too much. Any invalid or future date is marked with a * as the first character of the line. These will appear first in the sorted output. If the date is part of an individual record, it is followed by the key and name of the individual and by the hierarchy of tags between it and the INDI tag. (This is usually just a single tag, such as BIRT, CHR, or DEAT.) If the date is part of a family record, it is followed by the key and name of the husband (or the wife is there is no husband, or first child if there is no parent), the relationship in the family of that person, and by the hierarchy of tags between it and the FAM tag. (This is usually just the single tag MARR.) Some sample output (selected lines that have been sorted): 15800000 ABT 1580 | BIRT | I4403 Valentin BISMARCK 15810000 1581 | DEAT | I41 Catherina 15821221 21 DEC 1582 | BIRT | I4404 Berta ASSEBURG 15850000 ABT 1585 | BIRT | I2595 Henrich SPANUTH 15850529 29 MAY 1585 | DEAT | I4418 Brigitte BISMARCK 15860000 1586 | BIRT | I2596 Johan SPANUTH 15860301 1 MAR 1586 | BIRT | I2675 Catharine SPANUTH 15870000 1587/1589 | BIRT | I2597 Caspar SPANUTH 15880201 1 FEB 1588 | BIRT | I2676 Johan SPANUTH 15890226 26 FEB 1589 | BIRT | I2677 Johan SPANUTH 15960000 1596 | MARR | F883 I2679 Arend KOLLE, husb 16421009 9 OCT 1642 | BURI | I4404 Berta ASSEBURG 19800108 8 JAN 1980 | ENDL | I3635 Maria Catharina KINDLER 19800124 24 JAN 1980 | CHIL SLGC | F948 I2336 Anselm KINDLER, husb */ global(today) global(tomonth) global(toyear) global(julian) proc do_date(datenode) { extractdate(datenode,day,month,year) if (or(le(month,0),gt(month,12))) { set(daysinmonth,0) } elsif (or(or(eq(month,9),eq(month,4)), or(eq(month,6),eq(month,11)))) { set(daysinmonth,30) } elsif (eq(month,2)) { if (and(eq(mod(year,4),0), or(julian,or(ne(mod(year,100),0),eq(mod(year,400),0))))) { set(daysinmonth,29) } else { set(daysinmonth,28) } } else { set(daysinmonth,31) } set(future,0) if (gt(year,toyear)) { set(future,1) } elsif (eq(year,toyear)) { if (gt(month,tomonth)) { set(future,1) } elsif (and(eq(month,tomonth),gt(day,today))) { set(future,1) } } if (or(gt(day,daysinmonth),future)) { "*" } if (lt(year,0)) { d(year) } else { if (lt(year,10)) { "0" } if (lt(year,100)) { "0" } if (lt(year,1000)) { "0" } d(year) } if (lt(month,10)) { "0" } d(month) if (lt(day,10)) { "0" } d(day) " " } proc main() { getintmsg(julian, "Enter 0 for Gregorian (normal) or 1 for Julian (old) calendar") extractdate(gettoday(),today,tomonth,toyear) list(tag_stack) print("Printing all dates.\n") print("Be patient. This may take a while.\n") forindi (person, pnum) { traverse (inode(person), node, level) { setel(tag_stack, add(level, 1), tag(node)) if (eq(strcmp(tag(node), "DATE"), 0)) { call do_date(node) value(node) col(31) "| " set(tlength,0) set(tcount,0) forlist (tag_stack, a_tag, tnum) { if (and(gt(tnum, 1), le(tnum, level))) { a_tag " " set(tlength,add(tlength,strlen(a_tag))) set(tcount,add(tcount,1)) } } set(tlength,add(tlength,tcount)) if (lt(tlength,5)) { col(38) } "| " key(person) col(add(41,mul(5,tcount))) name(person) "\n" } } } forfam (fam, fnum) { traverse (fnode(fam), node, level) { setel(tag_stack, add(level, 1), tag(node)) if (eq(strcmp(tag(node), "DATE"), 0)) { call do_date(node) value(node) col(31) "| " set(tlength,0) set(tcount,0) forlist (tag_stack, a_tag, tnum) { if (and(gt(tnum, 1), le(tnum, level))) { a_tag " " set(tlength,add(tlength,strlen(a_tag))) set(tcount,add(tcount,1)) } } set(tlength,add(tlength,tcount)) if (lt(tlength,5)) { col(38) } "| " key(fam) if (person,husband(fam)) { set(relation,", husb") } elsif (person,wife(fam)) { set(relation,", wife") } else { children(fam,child,cnum) { if (eq(cnum,1)) { set(person,child) set(relation,", chil") } } } if (person) { col(add(41,mul(5,tcount))) key(person) " " col(add(47,mul(5,tcount))) name(person) relation } "\n" } } } } lifelines-3.0.61/reports/db_summary.ll0000700002540200244210000001026210076661056020142 0ustar prappDomain Users/* * @progname db_summary.ll * @version 1 * @author Eggert * @category * @output Text * @description This program gives you summary statistics on your database. It calculates the number of birth, baptism, marriage, death, and burial events, and gives the distribution over centuries of birth/baptisms, death/burials, and marriages. It tells you how many different names (given names and surnames separately) there are in the database, and how many persons have no surname in the database. db_summary - a LifeLines database summary program by Jim Eggert (eggertj@ll.mit.edu) Version 1, 29 March 1995 Initial release */ proc main() { table(surnames) table(givens) list(bcents) list(dcents) list(mcents) list(namelist) set(nsurnames,0) set(ngivens,0) set(nnosurnames,0) set(nnogivens,0) set(nemptysurnames,0) set(nbirths,0) set(nbaptisms,0) set(nmarrs,0) set(ndeaths,0) set(nburials,0) print("Collecting individual statistics...") forindi(person,pnum) { /* Do individual event statistics */ set(by,0) if (b,birth(person)) { incr(nbirths) extractdate(b,bd,bm,by) } if (b,baptism(person)) { incr(nbaptisms) if (not(by)) { extractdate(b,bd,bm,by) } } call increment_century(bcents,by) set(dy,0) if (d,death(person)) { incr(ndeaths) extractdate(d,dd,dm,dy) } if (d,burial(person)) { incr(nburials) if (not(dy)) { extractdate(d,dd,dm,dy) } } call increment_century(dcents,dy) /* Do name statistics */ extractnames(inode(person),namelist,nnames,isurname) if (not(isurname)) { incr(nnosurnames) } forlist(namelist,name,nnum) { if (eq(nnum,isurname)) { if (not(lookup(surnames,name))) { incr(nsurnames) insert(surnames,save(name),save(key(person))) } if (not(strcmp(name,""))) { incr(nemptysurnames) } if (not(name)) { incr(nnosurnames) } } else { if (not(lookup(givens,name))) { incr(ngivens) insert(givens,save(name),save(key(person))) } } } } print("done.\nCollecting family statistics...") forfam(family,fnum) { set(by,0) if (m,marriage(family)) { incr(nmarrs) extractdate(m,md,mm,my) call increment_century(mcents,my) } } print("done.\nGenerating report...") "The database " database() " contains:\n" d(pnum) " individuals\n" d(nsurnames) " unique surnames\n" d(ngivens) " unique given names\n" d(nemptysurnames) " individuals with empty surnames\n" d(nnosurnames) " individuals with no surname\n" d(nbirths) " birth events\n" d(nbaptisms) " baptism events\n" "Birth/baptism events distributed by century as\n" call list_centuries(bcents) d(ndeaths) " death events\n" d(nburials) " burial events\n" "Death/burial events distributed by century as\n" call list_centuries(dcents) "\n" d(fnum) " families\n" d(nmarrs) " marriage events distributed by century as\n" call list_centuries(mcents) print("done.\n") } proc increment_century(centuries,year) { if (year) { set(century,div(year,100)) if (not(length(centuries))) { enqueue(centuries,century) enqueue(centuries,1) } else { set(first_century,dequeue(centuries)) while (lt(century,first_century)) { requeue(centuries,0) set(first_century,sub(first_century,1)) } set(index,add(1,sub(century,first_century))) setel(centuries,index,add(getel(centuries,index),1)) requeue(centuries,first_century) } } } proc list_centuries(centuries) { set(century,dequeue(centuries)) while (count,dequeue(centuries)) { " " d(century) "00s " d(count) "\n" incr(century) } } lifelines-3.0.61/reports/desc-henry.ll0000700002540200244210000002371010076661056020043 0ustar prappDomain Users/* * @progname desc-henry.ll * @version 8 * @author Eggert * @category * @output Text * @description This program prints out a descendants report, assigning a d'Aboville, Henry, modified Henry, or modern Henry code to the individuals. The chosen ancestor, and all of his/her spouses, descendants, and descendants' spouses are included in the report. desc-henry - a LifeLines descendants listing program using Henry codes by Jim Eggert (eggertj@atc.ll.mit.edu) Versions 1-3 1992 Version 4, 7 Jan 1993 (added generation limit) Version 5, 22 Dec 1993 (added header, trailer, and optional keys) Version 6, ??????????? Version 7, 17 Mar 1995 (added grouped code option) Version 8, 6 Jun 1995 (added numbering options) Some sample codes are: d'Aboville Henry modified Henry modern Henry root 1 1 1 1 child 1 1.1 11 11 11 child 10 1.10 1X 1(10) 1A child 11 1.11 1A 1(11) 1B child 20 1.20 1J 1(20) 1K g-child 1.20.1 1J1 1(20)1 1K1 gg-child 1.20.1.4 1J14 1(20)14 1K14 ggg-child 1.20.1.4.15 1J14E 1(20)14(15) 1K14F gggg-child 1.20.1.4.15.3 1J14E3 1(20)14(15)3 1K14F3 Spouses codes, if requested, are indicated by appending .sn, where n indicates which spouse is meant, and is omitted if there is only one spouse. The root code is user selectable so that you can have arbitrary code prefixes. I use the latter feature when my database indicates that person X was not a descendant of Y, but I want to rig up a report which indicates X is to be included in Y's descendancy. I make two reports, one of Y's real descendancy, and the second of X's giving X the number he would have in Y's descendancy. Then I need merely edit the two files to achieve the desired result. The program can also generate grouped codes, where the generation separator (if any) is replace by a comma every three generations. The choice of arbitrary roots indicates that an additional parameter, the initial comma location, be selectable. The grouped format is sometimes used in published genealogies, using a single capital letter for the root symbol. The user can elect to include only male descendance lines. This is useful for single-name studies. In this case, spouses are not printed as separate entries, but are indicated with the descendant. For female descendants, an indication of the number of children is also printed. The user can select whether no dates, simple dates (birth - death), or dates and places (birth, baptism, death, burial, one per line) are to be printed. Also top-level notes can be optionally printed. The program only understands PAF-like events and notes. Printing simple dates and no notes gives a useful one-line-per-person outline. The user can also elect to limit the number of generations to be printed out. Selecting 0 means all generations will be printed out. The user can also elect to include keys for each individual in the report. The user can also elect to exclude, with annotation, repeated individuals. The report will include a header and a trailer. You may easily modify the do_header() and do_trailer() procedures to alter or eliminate these if you wish. */ global(do_notes) global(do_dates) global(do_keys) global(generations) global(written_people) global(this_indi_already_done) global(notation) global(grouped) global(code_sep) global(group_sep) global(comma_separation) global(first_comma) global(malesonly) proc main () { table(written_people) dayformat(1) monthformat(4) getindimsg(indi_root, "Enter root individual for report generation") getstrmsg(root, "Enter Henry code string for root individual (usually 1)") list(henry_list) push(henry_list,save(root)) list(choices) enqueue(choices,save(concat("d'Aboville ",root,".5.12.10"))) enqueue(choices,save(concat("Henry ",root,"5BX"))) enqueue(choices,save(concat("modified Henry ",root,"5(12)(10)"))) enqueue(choices,save(concat("modern Henry ",root,"5CA"))) set(notation,menuchoose(choices,"Select notation:")) if (eq(notation,1)) { set(code_sep,".") } else { set(code_sep,"") } getintmsg(grouped, "Enter 0 for ungrouped notation, 1 for grouped notation") if (grouped) { getintmsg(comma_separation, "Enter comma separation, usually 3") getintmsg(first_comma, "Enter comma offset (0-2, default=0)") set(group_sep,",") } else { set(group_sep,"") set(comma_separation,999) set(first_comma,0) } getintmsg(do_dates, "Enter 0 for no dates, 1 for dates, 2 for dates+places") getintmsg(do_notes,"Enter 0 for no notes, 1 for notes") getintmsg(do_keys,"Enter 0 for no keys, 1 for keys") getintmsg(malesonly, "Enter 0 for all descendants, 1 for male lines only") getintmsg(generations,"Enter number of generations (0=all)") call do_header(indi_root) call desc_sub(indi_root,henry_list) call do_trailer(indi_root) } proc do_header(indi_root) { "desc-henry: Descendant report for " fullname(indi_root,0,1,80) if (do_keys) { " (" key(indi_root) ")" } "\nGenerated by the LifeLines Genealogical System on " stddate(gettoday()) ".\n\n" } proc do_trailer(indi_root) { "\nEnd of Report\n" } proc do_name(person,henry_list,marr) { set(h,"") set(c,sub(first_comma,1)) /* less one for the root symbol */ forlist(henry_list,l,li) { if (not(strcmp(trim(l,1),"s"))) { set(h,save(concat(h,".",l))) } else { if (eq(li,1)) { set(h,concat(h,l)) } elsif (and(grouped,eq(c,0))) { set(h,concat(h,group_sep,l)) } else { set(h,concat(h,code_sep,l)) } incr(c) set(c,mod(c,comma_separation)) } } h ". " if (person) { fullname(person,0,1,80) } else { "" } if (and(person,eq(do_keys,1))) { " (" key(person) ")" } if (l,lookup(written_people,key(person))) { " appears above as " l "\n" } else { if (person) { insert(written_people,save(key(person)),h) } if (and(person,eq(do_dates,1))) { " (" set(e,birth(person)) if (and(e,date(e))) { date(e) } else { set(e,baptism(person)) if (and(e,date(e))) { "bap." date(e) } } " - " set(e,death(person)) if (and(e,date(e))) { date(e) } else { set(e,burial(person)) if (and(e,date(e))) { "bur." date(e) } } ")" } "\n" if (eq(do_dates,2)) { if (person) { if (e,birth(person)) { " b: " long(e) "\n" } if (e,baptism(person)) { " bap: " long(e) "\n" } } if (marr) { " m: " long(marr) "\n"} if (malesonly) { set(nfam,nfamilies(person)) families(person,fam,sp,spi) { if (gt(nfam,1)) { " m" d(spi) } else { " m" } ": " long(marriage(fam)) " to " if (sp) { fullname(sp,0,1,80) } else { "" } if (female(person)) { ", " set(nc,nchildren(fam)) if (not(nc)) { "no children" } else { card(nc) " child" if (gt(nc,1)) { "ren" } } } "\n" } } if (person) { if (e,death(person)) { " d: " long(e) "\n" } if (e,burial(person)) { " bur: " long(e) "\n" } } } if (and(person,eq(do_notes,1))) { fornodes(inode(person), node) { if (eq(0,strcmp("FILE", tag(node)))) { copyfile(value(node)) } elsif (eq(0,strcmp("NOTE", tag(node)))) { " " value(node) "\n" fornodes(node, subnode) { if (eq(0,strcmp("CONT", tag(subnode)))) { " " value(subnode) "\n" } } } } fornodes(inode(person), node) { if (eq(0,strcmp("REFN", tag(node)))) { " SOURCE: " value(node) "\n" } } } if (or(eq(do_dates,2),eq(do_notes,1))) { "\n" } } } func desc_code(number) { if (eq(notation,1)) { return(d(number)) } if (eq(notation,2)) { if (lt(number,10)) { return(d(number)) } if (eq(number,10)) { return("X") } return(upper(alpha(sub(number,10)))) } if (eq(notation,3)) { if (lt(number,10)) { return(d(number)) } return(concat("(",d(number),")")) } if (eq(notation,4)) { if (lt(number,10)) { return(d(number)) } return(upper(alpha(sub(number,9)))) } return("?") } proc desc_sub(person,henry_list) { call do_name(person,henry_list,0) set(nfam,nfamilies(person)) set(chi,0) families(person,fam,sp,spi) { if (not(malesonly)) { if (gt(nfam,1)) { push(henry_list,save(concat("s",d(spi)))) } else { push(henry_list,"s") } call do_name(sp,henry_list,marriage(fam)) set(junk,pop(henry_list)) } if (or(eq(generations,0), lt(length(henry_list),generations))) { if (or(not(malesonly),male(person))) { children (fam,ch,famchi) { incr(chi) push(henry_list,save(desc_code(chi))) call desc_sub(ch,henry_list) set(junk,pop(henry_list)) } } } } } lifelines-3.0.61/reports/desc-tex2/0000700002540200244210000000000010657071735017245 5ustar prappDomain Userslifelines-3.0.61/reports/desc-tex2/drsetup.tex0000700002540200244210000001451610077366774021475 0ustar prappDomain Users% drsetup.tex % % Some definitions for desc-tex2 % % D. Roegel, (roegel@loria.fr) 15 January 1995 % % Don't modify this file, but the file mysetup.tex, % which is loaded at the end of this file. % ================================================ % % \newif\ifDR % Uncomment this ONLY if you are the author % %\DRtrue % \hsize=10in \vsize=7.5in \parindent=20pt % This can probably be removed: \hoffset=-0.8in \voffset=-0.8in % \nopagenumbers % % english \today \def\today{\ifcase\month\or January\or February\or March\or April\or May\or June\or July\or August\or September\or October\or November\or December\fi \space\number\day, \number\year} % % This is for the frenchmen... (and includes french definition of \today) \ifDR \input french.sty \fi % % The tree macros: must be loaded after french.sty, *if* french.sty % is loaded, otherwise some things won't work % (the test for the \tree and \subtree arguments won't work % because they are not `catcode-independant' and french.sty changes % some key catcodes) % \input drtree % % The credits: % (put your favorite text here) \def\credits{\vbox{\hsize15cm\noindent This tree was made on \today\ by ******* with the {\tt Lifelines} program (from T.~Wetmore), the \TeX\ text processor (from D.~Knuth), \TeX\ commands for trees (from D.~Eppstein), \TeX\ commands for posters (from T. Van Zandt) and a program by E.~Majani completed by D.~Roegel.\par It may contain mistakes or omissions and I please those who would notice some to signal them to me at the following address:\par \noindent$\underline{\hbox{\tt **, **, **, USA}}$}} \ifDR \def\credits{\vbox{\hsize15cm\noindent Cet arbre a \'et\'e r\'ealis\'e le \today\ par Denis Roegel \`a l'aide du logiciel {\tt Lifelines} (de T.~Wetmore), du formatteur \TeX\ (de D.~Knuth), de commandes \TeX\ de r\'ealisation d'arbres (de D.~Eppstein), de commandes \TeX\ de d\'ecoupage (de T. Van Zandt) et d'un programme de E.~Majani compl\'et\'e par moi-m\^eme.\par Il peut comporter des erreurs ou des omissions et je prie ceux qui en rel\`everaient de me les signaler \`a l'adresse suivante:\par \noindent$\underline{\hbox{\tt Denis Roegel, 7 rue de la fonderie, 67400 ILLKIRCH-GRAFFENSTADEN}}$}} \fi % %--------------------------------------------------------------------------- % Title of the tree % % The title is centered above the tree % You can change the title fonts here. % You may also change the title text in the report produced. % %--------------------------------------------------------------------------- \font\titlefont=cmbx12 scaled 4300 \font\subtitlefont=cmbx10 scaled \magstep5 \ifDR % this is for the author only \def\title#1#2#3#4#5{% #1 = name of the ancestor % #2 = birth date % #3 = death date % #4 = number of generations (children=only one generation) % #5 = total width of the tree \hbox to#5{\hss\hbox{\titlefont Descendance de #1}\hss} \kern1cm \hbox to#5{\hss\hbox{\titlefont (#2 -- #3)}\hss} \kern1cm \hbox to#5{\hss\hbox{\subtitlefont(#4 g\'en\'erations)}\hss} } \else \def\title#1#2#3#4#5{% #1 = name of the ancestor % #2 = birth date % #3 = death date % #4 = number of generations (children=only one generation) % #5 = total width of the tree \hbox to#5{\hss\hbox{\titlefont Descendance of #1}\hss} \kern1cm \hbox to#5{\hss\hbox{\titlefont (#2 -- #3)}\hss} \kern1cm \hbox to#5{\hss\hbox{\subtitlefont(#4 generations)}\hss} } \fi %--------------------------------------------------------------------------- % Special fonts %--------------------------------------------------------------------------- \font\descfont=cmssbx10 % descendants \font\spousefont=cmss10 % spouses \font\occufont=cmssi10 % occupations \font\datefont=cmss8 % dates \font\placefont=cmss8 % places %--------------------------------------------------------------------------- % Various formatting things: \def\spouse#1{\spousefont#1} % Formatting of the occupation: \def\occupation#1{{\setbox0=\hbox{\occufont#1}% \ifdim\wd0>5cm \vbox{\hsize5cm\pretolerance10000 \raggedright\noindent\occufont#1\endgraf}% \else {\occufont#1}% \fi }} % Separation line in the boxes: \def\sepline{\noalign{\kern2pt\hrule\kern2pt}} %--------------------------------------------------------------------------- % Tags %--------------------------------------------------------------------------- % birth tag: %\def\btag{N:} \def\btag{$\circ$} % baptism tag: %\def\bapttag{B:} \def\bapttag{{\datefont bp:}} % marriage tag: %\def\mtag{M:} \def\mtag{$\mathord{\scriptstyle\bigcirc\mskip-10mu\bigcirc}$} % death tag: %\def\dtag{D:} \def\dtag{$\dag$} % at tag: \ifDR \def\at{\`a} \def\seeabove{** voir plus haut **} \def\unknown{(nom inconnu)} \else \def\at{at} \def\seeabove{** see above **} \def\unknown{(unknown name)} \fi %--------------------------------------------------------------------------- % Month names %--------------------------------------------------------------------------- \ifDR \def\jan{janvier} \def\feb{f\'evrier} \def\mar{mars} \def\apr{avril} \def\may{mai} \def\jun{juin} \def\jul{juillet} \def\aug{ao\^ut} \def\sep{septembre} \def\oct{octobre} \def\nov{novembre} \def\dec{d\'ecembre} \else \def\jan{jan} \def\feb{feb} \def\mar{mar} \def\apr{apr} \def\may{may} \def\jun{jun} \def\jul{jul} \def\aug{aug} \def\sep{sep} \def\oct{oct} \def\nov{nov} \def\dec{dec} \fi % Add your modifications to this file: \input mysetup % ----------------- end of file drsetup.tex -------------------- lifelines-3.0.61/reports/desc-tex2/drtree.tex0000700002540200244210000003471610077366774021300 0ustar prappDomain Users% Modifications to tree.tex by D. Roegel, for desc-tex2 % ----------------------------------------------------- % % (compare with the original file to see changes) % % 16 January 1995 D. Roegel (roegel@loria.fr) % % There are now six kinds of \subtree nodes: % % These nodes are boxes which are marked through a distinct % very small depth. This correspond to a dirty trick % mentionned in Appendix D of the TeXbook. % % \subtree{normal} (depth 0sp) % % \subtree{unframed;rules:right} (depth 5sp) % % \subtree{unframed;rules:left,right} (depth 1sp) % % \subtree{unframed;rules:left} (depth 3sp) % % \subtree{framed;rules:right} (depth 2sp) % % \subtree{unframed;norules} (depth 4sp) % % Case ``unframed;rules:left'' is normally never needed % and remains for historical reasons. % % % Note that 1sp is very small since 65536x72.27sp=2.54cm % % ----------------------------------------------------------------------- % Old documentation % % Tree -- a macro to make aligned (horizontal) trees in TeX % % Input is of the form % \tree % item % \subtree % \leaf{item} % . % . % . % \endsubtree % \subtree % . % . % . % \endsubtree % \endsubtree % \endtree % % Nesting is to any level. \leaf is defined as a subtree of one item: % \def\leaf#1{\subtree#1\endsubtree}. % % A structure: % \subtree % item_part1 % item_part2 % . % . % . % % will print item_part2 directly below item_part1 as a single item % as if they were in a \box. % % The macro is a 3-pass macro. On the first pass it sets up a data % structure from the \subtree ... \endsubtree definitions. On the second pass % it recursively calculates the width of each level of the tree. On the third % pass it sets up the boxes, glue and rules. % % By David Eppstein, TUGboat, vol. 6 (1985), no. 1, pp. 31--35. % Transcribed by Margaret Kromer (peg), Feb., 1986. % % Pass 1 % At the end of pass 1, the tree is coded as a nested collection of \hboxes % and \vboxes. \newbox\treebox\newcount\treeboxcnt %---------------------------------------------------------------------------- % Some new things: \def\ifequal#1#2{\def\first{#1}\def\second{#2}\ifx\first\second} \newif\ifdontframe \dontframefalse \newif\ifnolinkleft \nolinkleftfalse \newif\ifnolinkright \nolinkrightfalse \newif\ifnothing \nothingfalse \newif\ifrootandsecondfam \rootandsecondfamfalse \def\framesep{1mm} \def\framerule{0.4pt} \def\frameseprule{3.24pt} %---------------------------------------------------------------------------- \def\tree#1{\message{Begin tree}\treeboxcnt=1\global\setbox\treebox=\boxtree{#1}} \def\subtree#1{\ettext \advance\treeboxcnt by 1 \boxtree{#1}} \def\leaf#1{\subtree{n}#1\endsubtree} \def\endsubtree{\ettext \egroup \advance\treeboxcnt-1{}% \ifnum\treeboxcnt=-1 \treeerrora\fi} \def\endtree{\endsubtree \ifnum\treeboxcnt>0 \treeerrorb\fi% \settreesizes \typesettree\message{-- end tree}} % Error messages for unbalanced tree \def\treeerrora{\errhelp=\treeerrorahelp% \errmessage{Unbalanced tree -- too many endsubtrees}} \newhelp\treeerrorahelp{There are more subtrees closed than opened} \def\treeerrorb{\errhelp=\treeerrorbhelp% \errmessage{Unbalanced tree -- not enough endsubtrees}} \newhelp\treeerrorbhelp{Not all the subtrees of the tree are closed. If you continue, you'll get some mysterious secondary errors.} % Set up \vbox containing root of tree \newif\iftreetext\treetextfalse % Whether still aligning text \def\boxtree#1{\hbox\bgroup % Start outer box of tree or subtree \baselineskip 2.5ex % Narrow line spacing slightly \tabskip 0pt % No spurious glue in alignment %\kern\framerule %\kern\framesep \vbox\bgroup % Start inner text \vbox \kern\framerule \kern\framesep % Some new things: \ifequal{#1}{unframed;rules:left,right}\dontframetrue\fi \ifequal{#1}{framed;rules:right}\nolinklefttrue\fi \ifequal{#1}{unframed;rules:left}\nolinkrighttrue\fi \ifequal{#1}{unframed;norules}\nothingtrue\fi \ifequal{#1}{unframed;rules:right}\rootandsecondfamtrue\fi \treetexttrue % Remember for \ettext \let\par\crcr \obeylines % New line breaks without explicit \cr \halign\bgroup##\hfil\cr} % Start alignment with simple template \def\ettext{\iftreetext % Are we still in inner text \vbox? \crcr\egroup % Some new things: \kern\framesep \kern\framerule % various depths are added when some flags are set: \ifdontframe\hrule height0ptwidth0ptdepth1sp\fi \dontframefalse \ifnolinkleft\hrule height0ptwidth0ptdepth2sp\fi \nolinkleftfalse \ifnolinkright\hrule height0ptwidth0ptdepth3sp\fi \nolinkrightfalse \ifnothing\hrule height0ptwidth0ptdepth4sp\fi \nothingfalse \ifrootandsecondfam\hrule height0ptwidth0ptdepth5sp\fi \rootandsecondfamfalse \egroup \hskip\frameseprule\relax %\hskip\framerule\relax \fi} % Yes, end alignment and box % Pass 2 % Recursively calculate widths of tree with \setsizes; keep results in % \treesizes; \treewidth contains total width calculated so far. \treeworkbox % is workspace containing subtree being sized. \newbox\treeworkbox \def\cons#1#2{\edef#2{\xmark #1#2}} % Add something to start of list \def\car#1{\expandafter\docar#1\docar} % Take first element of list \def\docar\xmark#1\xmark#2\docar{#1} % ..by ignoring rest in expansion \def\cdr#1{\expandafter\docdr#1\docdr#1}% Similarly, drop first element \def\docdr\xmark#1\xmark#2\docdr#3{\def#3{\xmark #2}} \def\xmark{\noexpand\xmark} % List separator expands to self \def\nil{\xmark} % Empty list is just separator \def\settreesizes{\setbox\treeworkbox=\copy\treebox% \global\let\treesizes\nil \setsizes} \newdimen\treewidth % Width of this part of the tree \def\setsizes{\setbox\treeworkbox=\hbox\bgroup% Get a horiz list as a workspace \unhbox\treeworkbox\unskip % Take tree, unpack it into horiz list \inittreewidth % Get old width at this level \sizesubtrees % Recurse through all subtrees \sizelevel % Now set width from remaining \vbox \egroup} % All done, finish our \hbox \def\inittreewidth{\ifx\treesizes\nil % If this is the first at this level \treewidth=0pt % ..then we have no previous max width \else \treewidth=\car\treesizes % Otherwise take old max level width \global\cdr\treesizes % ..and advance level width storage \fi} % ..in preparation for next level. \def\sizesubtrees{\loop % For each box in horiz list (subtree) \setbox\treeworkbox=\lastbox \unskip % ..pull it off list and flush glue \ifhbox\treeworkbox \setsizes % If hbox, it's a subtree - recurse \repeat} % ..and loop; end loop on tree text \def\sizelevel{% \ifdim\treewidth<\wd\treeworkbox % If greater than previous maximum \treewidth=\wd\treeworkbox \fi % Then set max to new high \global\cons{\the\treewidth}\treesizes}% In either case, put back on list % Pass 3 % Recursively typeset tree with \maketree by adding an \hbox containing % a subtree (in \treebox) to the horizontal list. \newdimen\treeheight % Height of this part of the tree \newif\ifleaf % Tree has no subtrees (is a leaf) \newif\ifbotsub % Bottom subtree of parent \newif\iftopsub % Top subtree of parent \def\typesettree{\medskip\maketree\medskip} % Make whole tree \def\maketree{\hbox{\treewidth=\car\treesizes % Get width at this level \cdr\treesizes % Set up width list for recursion \makesubtreebox\unskip % Set \treebox to text, make subtrees \ifleaf \makeleaf % No subtrees, add glue \else \makeparent\fi}} % Have subtrees, stick them at right {\catcode`@=11 % Be able to use \voidb@x \gdef\makesubtreebox{\unhbox\treebox % Open up tree or subtree \unskip\global\setbox\treebox\lastbox % Pick up very last box \ifvbox\treebox % If we're already at the \vbox \global\leaftrue \let\next\relax % ..then this is a leaf \else \botsubtrue % Otherwise, we have subtrees \setbox\treeworkbox\box\voidb@x % Init stack of processed subs \botsubtrue \let\next\makesubtree % ..and call \maketree on them \fi \next}} % Finish up for whichever it was \def\makesubtree{\setbox1\maketree % Call \maketree on this subtree \unskip\global\setbox\treebox\lastbox % Pick up box before it \treeheight=\ht1 % Get height of subtree we made \advance\treeheight 2ex % Add some room around the edges \ifhbox\treebox \topsubfalse % If picked up box is a \vbox, \else \topsubtrue \fi % ..this is the top, otherwise not \addsubtreebox % Stack subtree with the rest \iftopsub \global\leaffalse % If top, remember not a leaf \let\next\relax \else % ..(after recursion), set return \botsubfalse \let\next\makesubtree % Otherwise, we have more subtrees \fi \next} % Do tail recursion or return \def\addsubtreebox{% \setbox\treeworkbox=\vbox{\subtreebox\unvbox\treeworkbox}} \def\subtreebox{\hbox\bgroup % Start \hbox of tree and lines \ifdim\dp1=2sp\def\norules{1}% \else\def\norules{0}% \fi \vbox to \treeheight\bgroup % Start \vbox for vertical rules \ifbotsub \iftopsub \vfil % If both bottom and top subtree \if\norules1% \hrule height0pt width 0.4pt \else \hrule width 0.4pt % ..vertical rule is just a dot \fi \else \treehalfrule{\norules}\fi \vfil % Bottom gets half-height rule \else \iftopsub \vfil \treehalfrule{\norules}% Top gets half-height the other way \else \if\norules1\hrule width 0.4pt height 0pt\kern\treeheight \else \hrule width 0.4pt height \treeheight \fi \fi\fi % Middle, full height \egroup % Finish vertical rule \vbox %\treectrbox{\hrule width 1em}\hskip 0.2em\treectrbox{\box1}\egroup} % Some new things: \if\norules1% \treectrbox{\hrule width 1em height0pt}% \else \treectrbox{\hrule width 1em}% \fi \treectrbox{\box1 % this rule enforces the depth to be 0pt, % and avoids transmission of this depth % towards the left \hrule width0ptheight0ptdepth0pt }\egroup} \def\treectrbox#1{{\setbox0=\vbox{#1}% \ifdim\dp0=2sp \gdef\newdp{2}% \else \gdef\newdp{0}% \fi \ifdim\dp0=1sp\gdef\newdp{1}\fi \vbox to \treeheight{\vfil\box0\vfil \hrule width0ptheight0ptdepth\newdp sp}}} \def\treehalfrule#1{\dimen\treeworkbox=\treeheight % Get total height \divide\dimen\treeworkbox 2% \advance\dimen\treeworkbox 0.2pt % Divide by two, add half horiz height \if#11\hrule width 0.4pt height 0pt\kern\dimen\treeworkbox \else \hrule width 0.4pt height \dimen\treeworkbox \fi }% Make a vertical rule that high % Some new things: % The frame is partly put *inside* the box, since we do not want % to change the dimensions of the resulting box (see \ettext) \def\ifdepth#1#2#3{\ifdim\dp\treebox=#1sp\gdef\newdp{#2}\gdef\newdpl{#3}\fi} \def\noframedtreebox#1{\hbox{\kern\framerule\kern\framesep \vbox{\kern\framerule\kern\framesep \box\treebox \kern\framerule\kern\framesep #1}% \kern\framerule\kern\framesep}} \def\makeleaf{\gdef\newdpl{0}\gdef\newdp{0}% \ifdepth{2}{2}{0}% \ifdepth{1}{1}{1}% \ifdepth{3}{1}{3}% \ifdepth{4}{2}{3}% \ifdepth{5}{2}{3}% \ifdim\dp\treebox=1sp \noframedtreebox{}% \else \if\newdpl3 \ifdim\dp\treebox=5sp\gdef\newdpl{0}\fi \noframedtreebox{\hrule height0ptwidth0ptdepth\newdp sp}% \else \vbox{\hrule \hbox{\vrule\kern\framesep \vbox{%\kern\framesep \box\treebox %\kern\framesep }% \kern\framesep \vrule }% \hrule \hrule height0ptwidth0ptdepth\newdp sp }% \fi \fi }% % Add leaf box to horiz list % This is an alternative definition giving braces: %\def\makeleaf{\vbox{\hbox{$\left\{\vcenter{\box\treebox}\right.$}\kern0pt}}% %\def\makeleaf{\box\treebox}% original definition \def\makeparent{\ifdim\ht\treebox>% \ht\treeworkbox % If text is higher than subtrees \treeheight=\ht\treebox % ..use that height \else \treeheight=\ht\treeworkbox \fi % Otherwise use height of subtrees \advance\treewidth-\wd\treebox % Take remainder of level width \advance\treewidth 1em % ..after accounting for text and glue %\treectrbox{\box\treebox}\hskip 0.2em % Add text, space before connection \treectrbox{\makeleaf}%\hskip 0.2em \if\newdpl3% \treectrbox{\hrule height 0pt width \treewidth}% \else \treectrbox{\hrule height 0.4pt width \treewidth}% \fi \treectrbox{\box\treeworkbox}} % Add \hrule, subs lifelines-3.0.61/reports/desc-tex2/ex1.tex0000700002540200244210000000245110077366774020477 0ustar prappDomain Users% example showing how two trees can be merged ``by hand'' % that is, you can take two trees generated by desc-tex2, % and put them aside, with a perfecr alignment, in that you create % invisible nodes. Just run this file through TeX to see what I mean. % % This was made after a suggestion by Michael P. Gerlek % % D. Roegel, 16 January 1995 % \input pstricks \input poster \input drsetup \Poster[hcenter=true,% vcenter=true,% clip=pstricks,% cropwidth=.4pt,paperwidth=210mm,paperheight=297mm] \vbox{\setbox0=\vbox{% Because \Poster processes in horizontal mode, % but the tree macros are in vertical mode. \tree{unframed;norules}% % Beginning of first tree \subtree{framed;rules:right}% node B1 \subtree{normal}% long node B2 \subtree{normal}% node B3 \endsubtree \endsubtree \endsubtree % End of first tree \subtree{unframed;norules}% once removed % Beginning of second tree \subtree{framed;rules:right}% node C \subtree{normal}% C1 \endsubtree \subtree{normal}% C2 \subtree{normal}% C2.1 \endsubtree \endsubtree \endsubtree % End of second tree \endsubtree \endtree }% End of \vbox \copy0 \vskip1cm \noindent\rlap{\hbox to\wd0{\hss%\credits }}} \endPoster \end lifelines-3.0.61/reports/desc-tex2/extree1.tex0000700002540200244210000002400710077366774021360 0ustar prappDomain Users%\mag1000 % this is default value of \mag \input pstricks \input poster \input drsetup \Poster[hcenter=true,% vcenter=true,% clip=pstricks,% cropwidth=.4pt] \vbox{\setbox0=\vbox{% Because \Poster processes in horizontal mode, % but the tree macros are in vertical mode. \tree{normal} {\descfont Joseph Patrick Kennedy} \sepline \hglue5mm \btag\ {\datefont 6 \sep{} 1888} {\placefont \at\ }{\placefont East Boston,Suffolk Co.,Massachusetts} \hglue5mm \bapttag\ {\datefont 9 \sep{} 1888} {\placefont \at\ }{\placefont East Boston,Suffolk Co.,Massachusetts} \hglue5mm \dtag\ {\datefont 18 \nov{} 1969} {\placefont \at\ }{\placefont Hyannis Port,Barnstable,Massachusetts} \hglue5mm \mtag\ {\datefont 7 \oct{} 1914} {\placefont \at\ }{\placefont Boston,Suffolk Co.,Massachusetts} \hglue5mm\spouse{Rose Elizabeth Fitzgerald} \hglue10mm \btag\ {\datefont 22 \jul{} 1890} {\placefont \at\ }{\placefont Boston,Suffolk Co.,Massachusetts} \subtree{normal}% {\descfont Joseph Patrick Kennedy} \hglue5mm \btag\ {\datefont 25 \jul{} 1915} {\placefont \at\ }{\placefont Hull,Plymouth Co.,Massachusetts} \hglue5mm \dtag\ {\datefont 12 \aug{} 1944} {\placefont \at\ }{\placefont Suffolk,England} \endsubtree \subtree{normal}% {\descfont John Fitzgerald Kennedy} \sepline \hglue5mm \btag\ {\datefont 29 \may{} 1917} {\placefont \at\ }{\placefont Brookline,Norfolk Co.,Massachusetts} \hglue5mm \dtag\ {\datefont 22 \nov{} 1963} {\placefont \at\ }{\placefont Dallas,Dallas Co.,Texas} \hglue5mm \mtag\ {\datefont 12 \sep{} 1953} {\placefont \at\ }{\placefont Newport,Rhode Island} \hglue5mm\spouse{Jacqueline Lee Bouvier} \hglue10mm \btag\ {\datefont 28 \jul{} 1929} {\placefont \at\ }{\placefont Southampton,Long Island,New York} \subtree{normal}% {\descfont (Stillborn) Kennedy} \hglue5mm \btag\ {\datefont 23 \aug{} 1956} {\placefont \at\ }{\placefont ? } \hglue5mm \dtag\ {\datefont 23 \aug{} 1956} {\placefont \at\ }{\placefont ? } \endsubtree \subtree{normal}% {\descfont Caroline Bouvier Kennedy} \sepline \hglue5mm \btag\ {\datefont 27 \nov{} 1957} {\placefont \at\ }{\placefont New York City,New York} \hglue5mm \mtag\ {\datefont 19 \jul{} 1987} {\placefont \at\ }{\placefont Centerville,Massachusetts} \hglue5mm\spouse{Edwin Arthur Schlossberg} \subtree{normal}% {\descfont Rose Schlossberg} \hglue5mm \btag\ {\datefont 25 \jun{} 1988} {\placefont \at\ }{\placefont New York} \endsubtree \endsubtree \subtree{normal}% {\descfont John Fitzgerald Kennedy} \hglue5mm \btag\ {\datefont 25 \nov{} 1960} {\placefont \at\ }{\placefont Washington D.C.} \endsubtree \subtree{normal}% {\descfont Patrick Bouvier Kennedy} \hglue5mm \btag\ {\datefont 7 \aug{} 1963} {\placefont \at\ }{\placefont Otis AF Base,Falmouth,Barnstable Co.,Massachusetts} \hglue5mm \dtag\ {\datefont 9 \aug{} 1963} {\placefont \at\ }{\placefont Boston,Suffolk Co.,Massachusetts} \endsubtree \endsubtree \subtree{normal}% {\descfont Rosemary (Rose-Marie) Kennedy} \hglue5mm \btag\ {\datefont 20 \feb{} 1920} {\placefont \at\ }{\placefont Brookline,Norfolk Co.,Massachusetts} \endsubtree \subtree{normal}% {\descfont Kathleen Kennedy} \sepline \hglue5mm \btag\ {\datefont 20 \feb{} 1920} {\placefont \at\ }{\placefont Brookline,Norfolk Co.,Massachusetts} \hglue5mm \dtag\ {\datefont 13 \may{} 1948} {\placefont \at\ }{\placefont Ste-Bauzille,Ardeche,France} \hglue5mm \mtag\ {\datefont 6 \may{} 1944} {\placefont \at\ }{\placefont London,England} \hglue5mm\spouse{John Robert Cavendish} \hglue10mm \btag\ {\datefont 1917} {\placefont \at\ }{\placefont ? } \hglue10mm \dtag\ {\datefont 1944} {\placefont \at\ }{\placefont ? } \endsubtree \subtree{normal}% {\descfont Eunice Mary Kennedy} \sepline \hglue5mm \btag\ {\datefont 10 \jul{} 1921} {\placefont \at\ }{\placefont Brookline,Norfolk Co.,Massachusetts} \hglue5mm \mtag\ {\datefont 23 \may{} 1953} {\placefont \at\ }{\placefont New York City,New York} \hglue5mm\spouse{Robert Sargent Shriver} \hglue10mm \btag\ {\datefont 1915} {\placefont \at\ }{\placefont ? } \subtree{normal}% {\descfont Robert Sargent Shriver} \hglue5mm \btag\ {\datefont 1954} {\placefont \at\ }{\placefont ? } \endsubtree \subtree{normal}% {\descfont Maria Owings Shriver} \hglue5mm \btag\ {\datefont 1955} {\placefont \at\ }{\placefont ? } \endsubtree \subtree{normal}% {\descfont Timothy Perry Shriver} \hglue5mm \btag\ {\datefont 1959} {\placefont \at\ }{\placefont ? } \endsubtree \subtree{normal}% {\descfont Mark Kennedy Shriver} \hglue5mm \btag\ {\datefont 1964} {\placefont \at\ }{\placefont ? } \endsubtree \subtree{normal}% {\descfont Anthony Paul Kennedy Shriver} \hglue5mm \btag\ {\datefont 1965} {\placefont \at\ }{\placefont ? } \endsubtree \endsubtree \subtree{normal}% {\descfont Patricia Kennedy} \sepline \hglue5mm \btag\ {\datefont 6 \may{} 1924} {\placefont \at\ }{\placefont Brookline,Norfolk Co.,Massachusetts} \hglue5mm \mtag\ {\datefont 24 \apr{} 1954} {\placefont \at\ }{\placefont New York City,New York} \hglue5mm\spouse{Peter Lawford} \hglue10mm \btag\ {\datefont 1923} {\placefont \at\ }{\placefont ? } \hglue10mm \dtag\ {\datefont 1984} {\placefont \at\ }{\placefont ? } \subtree{normal}% {\descfont Christopher Kennedy Lawford} \hglue5mm \btag\ {\datefont 1955} {\placefont \at\ }{\placefont ? } \endsubtree \subtree{normal}% {\descfont Sydney Maleia Lawford} \hglue5mm \btag\ {\datefont 1956} {\placefont \at\ }{\placefont ? } \endsubtree \subtree{normal}% {\descfont Victoria Francis Lawford} \hglue5mm \btag\ {\datefont 1958} {\placefont \at\ }{\placefont ? } \endsubtree \subtree{normal}% {\descfont Robin Elizabeth Lawford} \hglue5mm \btag\ {\datefont 1961} {\placefont \at\ }{\placefont ? } \endsubtree \endsubtree \subtree{normal}% {\descfont Robert Francis Kennedy} \sepline \hglue5mm \btag\ {\datefont 20 \nov{} 1925} {\placefont \at\ }{\placefont Brookline,Norfolk Co.,Massachusetts} \hglue5mm \dtag\ {\datefont 6 \jun{} 1968} {\placefont \at\ }{\placefont Los Angeles,Los Angeles Co.,Massachusetts} \hglue5mm \mtag\ {\datefont 17 \jun{} 1950} {\placefont \at\ }{\placefont Greenwich,Fairfield Co.,Connecticut} \hglue5mm\spouse{Ethel Skakel} \hglue10mm \btag\ {\datefont 11 \apr{} 1928} {\placefont \at\ }{\placefont Chicago,Cook Co.,Illinois} \subtree{normal}% {\descfont Kathleen Hartington Kennedy} \hglue5mm \btag\ {\datefont 4 \jul{} 1951} {\placefont \at\ }{\placefont Greenwich,Fairfield Co.,Connecticut} \endsubtree \subtree{normal}% {\descfont Joseph Patrick Kennedy} \hglue5mm \btag\ {\datefont 24 \sep{} 1952} {\placefont \at\ }{\placefont Boston,Suffolk Co.,Massachusetts} \endsubtree \subtree{normal}% {\descfont Robert Francis Kennedy} \hglue5mm \btag\ {\datefont 17 \jan{} 1954} {\placefont \at\ }{\placefont Washington D.C.} \endsubtree \subtree{normal}% {\descfont David Anthony Kennedy} \hglue5mm \btag\ {\datefont 15 \jun{} 1955} {\placefont \at\ }{\placefont Washington D.C.} \hglue5mm \dtag\ {\datefont 25 \apr{} 1984} {\placefont \at\ }{\placefont Palm Beach,Palm Beach Co.,Florida} \endsubtree \subtree{normal}% {\descfont Mary Courtney Kennedy} \hglue5mm \btag\ {\datefont 9 \sep{} 1956} {\placefont \at\ }{\placefont Boston,Suffolk Co.,Massachusetts} \endsubtree \subtree{normal}% {\descfont Michael LeMoyne Kennedy} \hglue5mm \btag\ {\datefont 27 \feb{} 1958} {\placefont \at\ }{\placefont Washington D.C.} \endsubtree \subtree{normal}% {\descfont Mary Kerry Kennedy} \hglue5mm \btag\ {\datefont 8 \sep{} 1959} {\placefont \at\ }{\placefont Washington D.C.} \endsubtree \subtree{normal}% {\descfont Christopher George Kennedy} \hglue5mm \btag\ {\datefont 4 \jul{} 1963} {\placefont \at\ }{\placefont Boston,Suffolk Co.,Massachusetts} \endsubtree \subtree{normal}% {\descfont Matthew Maxwell Taylor Kennedy} \hglue5mm \btag\ {\datefont 9 \jan{} 1965} {\placefont \at\ }{\placefont New York City,New York} \endsubtree \subtree{normal}% {\descfont Douglas Harriman Kennedy} \hglue5mm \btag\ {\datefont 24 \mar{} 1967} {\placefont \at\ }{\placefont Washington D.C.} \endsubtree \subtree{normal}% {\descfont Rory Elizabeth Katherine Kennedy} \hglue5mm \btag\ {\datefont 12 \dec{} 1968} {\placefont \at\ }{\placefont Washington D.C.} \endsubtree \endsubtree \subtree{normal}% {\descfont Jean Ann Kennedy} \sepline \hglue5mm \btag\ {\datefont 20 \feb{} 1928} {\placefont \at\ }{\placefont Boston,Suffolk Co.,New York} \hglue5mm \mtag\ {\datefont 19 \may{} 1956} {\placefont \at\ }{\placefont New York City,New York} \hglue5mm\spouse{Stephen Edward Smith} \hglue10mm \btag\ {\datefont 1927} {\placefont \at\ }{\placefont ? } \subtree{normal}% {\descfont Stephen Smith} \hglue5mm \btag\ {\datefont 1957} {\placefont \at\ }{\placefont ? } \endsubtree \subtree{normal}% {\descfont William Kennedy Smith} \hglue5mm \btag\ {\datefont 1960} {\placefont \at\ }{\placefont ? } \endsubtree \subtree{normal}% {\descfont Amanda Mary Smith} \hglue5mm \btag\ {\datefont 1967} {\placefont \at\ }{\placefont ? } \endsubtree \subtree{normal}% {\descfont Kym Maria Smith} \hglue5mm \btag\ {\datefont 1972} {\placefont \at\ }{\placefont ? } \endsubtree \endsubtree \subtree{normal}% {\descfont Edward Moore Kennedy} \sepline \hglue5mm \btag\ {\datefont 22 \feb{} 1932} {\placefont \at\ }{\placefont Boston,Suffolk Co.,Massachusetts} \hglue5mm \mtag\ {\datefont 30 \nov{} 1958} {\placefont \at\ }{\placefont Bronxville,Westchester Co.,New York} \hglue5mm\spouse{Virginia Joan Bennett} \hglue10mm \btag\ {\datefont 9 \sep{} 1936} {\placefont \at\ }{\placefont Riverdale,New York} \subtree{normal}% {\descfont Kara Anne Kennedy} \hglue5mm \btag\ {\datefont 27 \feb{} 1960} {\placefont \at\ }{\placefont Bronxville,Westchester Co.,New York} \endsubtree \subtree{normal}% {\descfont Edward Moore Kennedy} \hglue5mm \btag\ {\datefont 26 \sep{} 1961} {\placefont \at\ }{\placefont Boston,Suffolk Co.,Massachusetts} \endsubtree \subtree{normal}% {\descfont Patrick Joseph Kennedy} \hglue5mm \btag\ {\datefont 14 \jul{} 1967} {\placefont \at\ }{\placefont Boston,Suffolk Co.,Massachusetts} \endsubtree \endsubtree \endtree }% End of \vbox \title{Joseph Patrick Kennedy}{6 \sep{} 1888}{18 \nov{} 1969}{3}{\wd0} \vskip2cm \copy0 \vskip1cm \noindent\rlap{\hbox to\wd0{\hss\credits}}} \endPoster \end lifelines-3.0.61/reports/desc-tex2/extree2.tex0000700002540200244210000001600010077366774021353 0ustar prappDomain Users%\mag1000 % this is default value of \mag \input pstricks \input poster \input drsetup \Poster[hcenter=true,% vcenter=true,% clip=pstricks,% cropwidth=.4pt] \vbox{\setbox0=\vbox{% Because \Poster processes in horizontal mode, % but the tree macros are in vertical mode. \tree{unframed;norules} \subtree{framed;rules:right} {\descfont John Scott Harrison} \sepline \hglue5mm \btag\ {\datefont 4 \oct{} 1804} {\placefont \at\ }{\placefont Vincennes,Indiana} \hglue5mm \dtag\ {\datefont 25 \may{} 1878} {\placefont \at\ }{\placefont Point Farm,Nr North Bend,Ohio} \hglue5mm \mtag\ {\datefont 1824} {\placefont \at\ }{\placefont ? } \hglue5mm\spouse{Lucretia Knapp Johnson} \hglue10mm \btag\ {\datefont 16 \sep{} 1804} {\placefont \at\ }{\placefont Boone Co.,Kentucky} \hglue10mm \dtag\ {\datefont 6 \feb{} 1830} {\placefont \at\ }{\placefont ? } \subtree{normal}% {\descfont Elizabeth Short Harrison} \sepline \hglue5mm \btag\ {\datefont 1825} {\placefont \at\ }{\placefont ? } \hglue5mm \dtag\ {\datefont 1904} {\placefont \at\ }{\placefont ? } \hglue5mm\spouse{George Coleman Eaton} \endsubtree \subtree{normal}% {\descfont William Henry Harrison} \hglue5mm \btag\ {\datefont 1827} {\placefont \at\ }{\placefont ? } \hglue5mm \dtag\ {\datefont 1829} {\placefont \at\ }{\placefont ? } \endsubtree \subtree{normal}% {\descfont Sarah Lucretia Harrison} \sepline \hglue5mm \btag\ {\datefont 1829} {\placefont \at\ }{\placefont ? } \hglue5mm\spouse{Thomas Jefferson Devin} \endsubtree \endsubtree \subtree{unframed;rules:right}% {$\langle$ \descfont John Scott Harrison $\rangle$} \hglue5mm \mtag\ {\datefont 12 \aug{} 1831} {\placefont \at\ }{\placefont ? } \hglue5mm\spouse{Elizabeth Ramsey Irwin} \hglue10mm \btag\ {\datefont 18 \jul{} 1810} {\placefont \at\ }{\placefont Mercersburg,Pennsylvania} \hglue10mm \dtag\ {\datefont 15 \aug{} 1850} {\placefont \at\ }{\placefont North Bend,Ohio} \subtree{normal}% {\descfont Archibald Irwin Harrison} \sepline \hglue5mm \btag\ {\datefont 1832} {\placefont \at\ }{\placefont ? } \hglue5mm \dtag\ {\datefont 1870} {\placefont \at\ }{\placefont ? } \hglue5mm\spouse{Elizabeth Lawrence Sheets} \endsubtree \subtree{normal}% {\descfont Benjamin Harrison} \sepline \hglue5mm \btag\ {\datefont 20 \aug{} 1833} {\placefont \at\ }{\placefont North Bend,Ohio} \hglue5mm \dtag\ {\datefont 13 \mar{} 1901} {\placefont \at\ }{\placefont Indianapolis,Indiana} \hglue5mm \mtag\ {\datefont 20 \oct{} 1853} {\placefont \at\ }{\placefont Oxford,Ohio} \hglue5mm\spouse{Caroline Lavinia Scott} \hglue10mm \btag\ {\datefont 1 \oct{} 1832} {\placefont \at\ }{\placefont Oxford,Ohio} \hglue10mm \dtag\ {\datefont 25 \oct{} 1892} {\placefont \at\ }{\placefont White House,Washington D.C.} \subtree{normal}% {\descfont Russell Benjamin Harrison} \sepline \hglue5mm \btag\ {\datefont 12 \aug{} 1854} {\placefont \at\ }{\placefont Oxford,Ohio} \hglue5mm \dtag\ {\datefont 13 \dec{} 1936} {\placefont \at\ }{\placefont Indianapolis,Indiana} \hglue5mm \mtag\ {\datefont 9 \jan{} 1884} {\placefont \at\ }{\placefont Omaha,Nebraska} \hglue5mm\spouse{Mary Angeline Saunders} \hglue10mm \btag\ {\datefont 16 \nov{} 1861} {\placefont \at\ }{\placefont ? } \hglue10mm \dtag\ {\datefont 28 \nov{} 1944} {\placefont \at\ }{\placefont Washington D.C.} \endsubtree \subtree{normal}% {\descfont Mary Scott Harrison} \sepline \hglue5mm \btag\ {\datefont 3 \apr{} 1858} {\placefont \at\ }{\placefont Indianapolis,Indiana} \hglue5mm \dtag\ {\datefont 28 \oct{} 1930} {\placefont \at\ }{\placefont Greenwich,Connecticut} \hglue5mm \mtag\ {\datefont 5 \nov{} 1884} {\placefont \at\ }{\placefont Indianapolis,Indianapolis} \hglue5mm\spouse{(James) Robert McKee} \hglue10mm \btag\ {\datefont 9 \dec{} 1857} {\placefont \at\ }{\placefont Madison,Indiana} \hglue10mm \dtag\ {\datefont 21 \oct{} 1942} {\placefont \at\ }{\placefont Greenwich,Connecticut} \endsubtree \subtree{normal}% {\descfont Unnamed Harrison} \hglue5mm \btag\ {\datefont 13 \jun{} 1861} {\placefont \at\ }{\placefont ? } \hglue5mm \dtag\ {\datefont 13 \jun{} 1861} {\placefont \at\ }{\placefont ? } \endsubtree \endsubtree \subtree{unframed;rules:left,right}% {$\langle$ \descfont Benjamin Harrison $\rangle$} \hglue5mm \mtag\ {\datefont 6 \apr{} 1896} {\placefont \at\ }{\placefont St Thomas Church,New York City,New York} \hglue5mm\spouse{Mary Scott Dimmick Lord} \hglue10mm \btag\ {\datefont 30 \apr{} 1858} {\placefont \at\ }{\placefont Honesdale,Pennsylvania} \hglue10mm \dtag\ {\datefont 5 \jan{} 1948} {\placefont \at\ }{\placefont New York} \subtree{normal}% {\descfont Elizabeth Harrison} \sepline \hglue5mm \btag\ {\datefont 21 \feb{} 1897} {\placefont \at\ }{\placefont Indianapolis,Indiana} \hglue5mm \dtag\ {\datefont 25 \dec{} 1955} {\placefont \at\ }{\placefont New York City,New York} \hglue5mm \mtag\ {\datefont 6 \apr{} 1921} {\placefont \at\ }{\placefont New York City,New York} \hglue5mm\spouse{James Blaine Walker} \hglue10mm \btag\ {\datefont 20 \jan{} 1889} {\placefont \at\ }{\placefont Helena,Montana} \hglue10mm \dtag\ {\datefont AFT \apr{} 1921} {\placefont \at\ }{\placefont New York City,New York} \endsubtree \endsubtree \subtree{normal}% {\descfont Mary Jane Harrison} \sepline \hglue5mm \btag\ {\datefont 1835} {\placefont \at\ }{\placefont ? } \hglue5mm \dtag\ {\datefont 1867} {\placefont \at\ }{\placefont ? } \hglue5mm\spouse{Samuel Vance Morris} \endsubtree \subtree{normal}% {\descfont Anna Symmes Harrison} \hglue5mm \btag\ {\datefont 1837} {\placefont \at\ }{\placefont ? } \hglue5mm \dtag\ {\datefont 1838} {\placefont \at\ }{\placefont ? } \endsubtree \subtree{normal}% {\descfont John Irwin Harrison} \hglue5mm \btag\ {\datefont 1839} {\placefont \at\ }{\placefont ? } \hglue5mm \dtag\ {\datefont 1839} {\placefont \at\ }{\placefont ? } \endsubtree \subtree{normal}% {\descfont Carter Bassett Harrison} \sepline \hglue5mm \btag\ {\datefont 1840} {\placefont \at\ }{\placefont ? } \hglue5mm \dtag\ {\datefont 1905} {\placefont \at\ }{\placefont ? } \hglue5mm\spouse{Sophia Ridgely Lytle Dashiell} \endsubtree \subtree{normal}% {\descfont Anna Symmes Harrison} \hglue5mm \btag\ {\datefont 1842} {\placefont \at\ }{\placefont ? } \hglue5mm \dtag\ {\datefont 1926} {\placefont \at\ }{\placefont ? } \endsubtree \subtree{normal}% {\descfont John Scott Harrison} \sepline \hglue5mm \btag\ {\datefont 1844} {\placefont \at\ }{\placefont ? } \hglue5mm \dtag\ {\datefont 1926} {\placefont \at\ }{\placefont ? } \hglue5mm\spouse{Marie Sophie Elizabeth Lytle} \endsubtree \subtree{normal}% {\descfont James Findlay Harrison} \hglue5mm \btag\ {\datefont 1847} {\placefont \at\ }{\placefont ? } \hglue5mm \dtag\ {\datefont 1848} {\placefont \at\ }{\placefont ? } \endsubtree \subtree{normal}% {\descfont James Irwin Harrison} \hglue5mm \btag\ {\datefont 1849} {\placefont \at\ }{\placefont ? } \hglue5mm \dtag\ {\datefont 1850} {\placefont \at\ }{\placefont ? } \endsubtree \endsubtree \endtree }% End of \vbox \title{John Scott Harrison}{4 \oct{} 1804}{25 \may{} 1878}{3}{\wd0} \vskip2cm \copy0 \vskip1cm \noindent\rlap{\hbox to\wd0{\hss\credits}}} \endPoster \end lifelines-3.0.61/reports/desc-tex2/mysetup.tex0000700002540200244210000000021310077366774021502 0ustar prappDomain Users% here, your personal modifications and additions to drsetup.tex % % D. Roegel, January 15, 1995 % % Example: % %\def\btag{born} \endinputlifelines-3.0.61/reports/desc-tex2/poster.doc0000700002540200244210000002467210077366774021274 0ustar prappDomain Users%% BEGIN poster.doc %% %% Documentation for poster.tex/poster.sty. %% Run with LaTeX, with or without the NFSS. %% %% Change these for a4 paper: \def\paperwidth{8.5in} \def\paperheight{11in} \def\FileVersion{1.2} \def\FileDate{August 28, 1993} \documentstyle[12pt]{article} %% PAGE PARAMETERS % Paragraphs are marked by large space rather than indentation: \parindent 0pt \parskip 6pt plus 1pt minus 1pt % No headers, 1in top margin \topmargin 0pt \headheight 0pt \headsep 0pt % Total bottom margin 1in, text height 9in \textheight 9in \footskip .625in % Now adjust for different paper size: \newdimen\mydim \mydim=\paperwidth \advance\mydim-8.5in \divide\mydim 2 \advance\oddsidemargin \mydim \advance\evensidemargin \mydim \mydim=\paperheight \advance\mydim-11in \divide\mydim 2 \advance\topmargin \mydim %% OTHER % Short meta (works in verbatim. Can't use < for other purposes. \catcode`\<=13 \def<#1>{{\rm\it #1\/}} % (works in verbatim) % Short verbatim. \catcode`\"=13 \def"{\verb"} % To make smaller sections: \def\thesubsection{\arabic{subsection}} \catcode`\@=12 % In case I'm using AmS-LaTeX \begin{document} \begin{center} \begingroup \large\bf Documentation for poster.tex/poster.sty\\[2pt] Posters and banners with Generic \TeX\\[6pt] \endgroup Version \FileVersion\\ \FileDate\\[6pt] Timothy Van Zandt\\ tvz@Princeton.EDU \end{center} \subsection{The macros} "poster.tex/poster.sty" contains the macro \begin{verbatim} \poster{} \end{verbatim} for making posters and banners. is processed in restricted horizontal mode (i.e., "\hbox" or ``LR-mode'') and is then printed on as many sheets of paper as are needed. You can then construct the poster or banner by trimming and piecing together the sheets of paper. You can also write \begin{verbatim} \Poster \endPoster \end{verbatim} and \LaTeX\ users can write \begin{verbatim} \begin{Poster} \end{Poster} \end{verbatim} Here are a few details: \begin{itemize} \item Use a "\vbox" or \LaTeX's "minipage" or "\parbox" in if you want to include vertical mode material. For more help with LR-boxes, see "fancybox.sty", available from archives everywhere. \item Don't worry about margins, headers or footers; "\poster" ignores output routines entirely. \item can contain "\catcode" changes, such as verbatim environments. \end{itemize} If you want to use your regular output routines, and have "poster.tex" print out each page of your document as a poster, then instead put the command \begin{verbatim} \PosterPage \end{verbatim} towards the beginning of your document, or in the \LaTeX\ preamble. Each page is printed without its margins, but with the headers and footers, if any. (You can print out your whole dissertation on $8\times 10$-feet pages.) With "\PosterPage", you do not have to worry about LR-boxes. \subsection{Making the output look big} You can use these macros to print a large diagram, such as a genealogical tree, that would not normally fit on one page. You might also want to magnify the contents of the poster. For example, you might want to print ``Happy Birthday'' in 6 inch high letters. Here is a brief description of three ways to make your output look big. Note that these are not part of "poster.tex", but are described here for your convenience. For more information, see the \TeX book. \begin{enumerate} \item The simplest and most general method is to set \TeX's "\mag" parameter, by inserting the line \begin{verbatim} \mag \end{verbatim} at or near the beginning of the document (or in the \LaTeX\ preamble). The integer should be 1000 times the magnification factor. For example, to double the size of the output, use \begin{verbatim} \mag 2000 \end{verbatim} You may need to generate big bitmaps if using bitmapped fonts (e.g., \TeX's usual Metafont fonts), rather than scalable outline fonts (e.g., PostScript fonts). You can reduce the need for extra font bitmaps by using \begin{verbatim} \mag \magstep \end{verbatim} to magnify the document by $1.2^n$. $n$ can be between 1 and 5. For example, to magnify the document by $1.2^4=2.074$, use \begin{verbatim} \mag \magstep4 \end{verbatim} You can also set "\mag" to "\magstephalf", which scales the document by $1.2^{1.5}$. \item If you are making a banner with just one font, then you can define a large font. For example, \begin{verbatim} \font\bigroman=cmr at 8in \bigroman \poster[vcenter=true,landscape=true]{Happy Birthday} \end{verbatim} It is best to use scalable fonts, such as PostScript fonts, if available. \item If you are using a PostScript printer, then you can use macros for scaling boxes, such as the "\scalebox" and "\scaleboxto" commands in the PSTricks package. For example, here is the banner from the previous example: \begin{verbatim} \poster[vcenter=true,landscape=true]{% \scaleboxto(0,8in){Happy Birthday}} \end{verbatim} You must use scalable fonts, because scaled bitmaps look very ugly. \end{enumerate} \subsection{Parameters} "\poster", "\Poster" and "\PosterPage" use the following parameters: \begin{center} \def\arraystretch{1.1} \begin{tabular}{lll} {\em Parameter} & {\em Value} & {\em Default}\\[2pt] "paperwidth" & & "8.5in"\\ "paperheight" & & "11in"\\ "imagewidth" & & "7.5in"\\ "imageheight" & & "10in"\\ "landscape" & "true"/"false" & "false"\\ "hcenter" & "true"/"false" & "false"\\ "vcenter" & "true"/"false" & "false"\\ "crop" & "none"/"corners"/"full" & "corners"\\ "cropwidth" & & "2pt"\\ "clip" & "none"/"pstricks" & "none"\\ "immediatewrites" & "true"/"false" & "true"\\ "numbering" & "auto"/"rowcol"/"page"/"serial" & "auto" \end{tabular} \end{center} You can include parameter changes as a list of "=" pairs in an optional argument to "\poster", "\Poster" or "\PosterPage", enclosed in square brackets. E.g., \begin{verbatim} \poster[clip=pstricks,hcenter=true]{foo} \end{verbatim} No extraneous spaces, please. You can also redefine the parameters using "\def" or "\LaTeX"'s "\renewcommand". For parameter "foo", you should redefine "\POSTERfoo". E.g., the next example is like the last one: \begin{verbatim} \def\POSTERclip{pstricks} \def\POSTERhcenter{true} \poster{foo} \end{verbatim} This is mainly of interest when developing your own custom "\poster" command or "poster.tex" file. Here are some comments on the parameters: \begin{itemize} \item Don't adjust the "paper" and "image" dimensions for your document's magnification (and don't use \TeX's "true" dimensions). "poster.tex" does this for you. (That is, set the "page" and "image" dimensions to the actual values you want for the output.) \item Most printers cannot print right up to the edge of the paper. That is why the "imagewidth" and "imageheight" should be smaller than the "paperwidth" and "paperheight". The default values are good for printing on 8.5in by 11in paper in portrait mode with one-half inch margins. \item Setting "landscape" to "true" is just a convenient way to switch the "height" and "width" parameters. You still have to take care of printing your document in landscape mode. E.g., with Rokicki's "dvips", use \begin{verbatim} \special{landscape} \end{verbatim} For other dvi driver's, consult the documentation. \item Setting "hcenter" and "vcenter" to "true" causes the image to be centered horizontally and vertically, respectively, in the total number of pages that are printed. E.g., when "vcenter" is "true", extra space is added to the top of the first row of pages and to the bottom of the last row of pages. \item The "crop" parameter specifies what kind of crop marks are drawn, to help you trim each page to size. When "crop" equals "full", you get crop marks along the full length of all four sides. "cropwidth" is the width of the crop mark lines. The crop marks lie entirely off the page, for any width. \item Setting "clip" to "pstricks" causes each page to be clipped to the size of the image (rather than having the image overlap in the margins on each page), but this only works if you have loaded the PSTricks package. \item When "immediatewrites" is "true", all "\write"'s are "\immediate". I.e., auxiliary files are written to only when the poster file is first processed. This is the default. The page references may be incorrect in multi-page posters. Setting "immediatewrites" to "false" will fix the page references, but writing to auxiliary files will be repeated with each page of the poster. E.g., \LaTeX\ users will get errors about multiply defined labels, if they use the "\label" command in a poster. \item The "numbering" parameter sets the page numbers, as recognized by your "dvi" driver (it does not affect the page numbering as it appears in the document). Here is the scheme: \begin{description} \item["rowcol"] Each page is numbered "[.]". \item["page"] Each page is numbered "[..]", where is "\count0" (e.g., \LaTeX's "page" counter). \item["serial"] Pages are numbering serially. \item["auto"] Page numbering is "rowcol" for "\poster" and "\Poster", and "page" for "\PosterPage". \end{description} In each case, if the poster contains only one row of pages (i.e., if it is a banner), the number is suppressed. \end{itemize} \subsection{Samples} The file "poster1.tex" contains the following sample of a framed poster with a whole page of text: \begin{verbatim} \documentstyle[poster]{article} \mag\magstep5 % Magnification of 1.2^5 (roughly 2.5) % Use `true' dimensions below for magnified values. \begin{document} \begin{Poster}[vcenter=true,hcenter=true] \setlength{\fboxsep}{.8truein}% \setlength{\fboxrule}{.1truein}% \fbox{\begin{minipage}{11.1truein} \end{minipage}}% \end{Poster} \end{document} \end{verbatim} The file "poster2.tex" contain the following sample of a banner in landscape mode. "ptmr" is meant to be the name of the Times-Roman PostScript font, if your dvi driver supports such a thing. \begin{verbatim} \font\bigroman=ptmr at 7.5in \bigroman \poster[vcenter=true,landscape=true]{Animals} \end{verbatim} \subsection{Changes} \begin{description} \item[V1.2, 28 August 1993] Add "cropwidth" parameter. \item[V1.1, 1 June 1993] Added "immediatewrites" and "numbering" parameters. \item[V1.0, 13 May 1993] Added "\PosterPage". \item[V0.93, 11~Feb~1993] First stable release. \end{description} \end{document} %% %% END poster.doc lifelines-3.0.61/reports/desc-tex2/poster.tex0000700002540200244210000002647610077366774021333 0ustar prappDomain Users%% BEGIN poster.tex/poster.sty %% \def\fileversion{1.2} \def\filedate{93/08/28} %% %% COPYRIGHT 1993, by Timothy Van Zandt, tvz@Princeton.EDU %% %% DESCRIPTION: %% poster.tex/poster.sty contains a macro for making posters and banners %% with TeX. It is compatible with most TeX macro packages, including Plain %% TeX, LaTeX, AmSTeX, and Ams-LaTeX. The only special requirement is that %% your printer not be bothered by text that lies off the page. This is %% true of most printers, including laser printers and PostScript printers. %% %% INSTALLATION: %% Put this file where your TeX looks for inputs, under the name poster.tex. %% Name a copy poster.sty to use as a LaTeX style option, or create a file %% poster.sty with the lines: %% \input poster.tex %% \endinput %% %% DOCUMENTATION: %% See poster.doc, and the sample files poster1.tex and poster2.tex. %% These might be appended to this file. %% %% COPYING: %% Copying of part or all of this file is allowed under the following %% conditions only: %% (1) You may freely distribute unchanged copies of the file. Please %% include the documentation when you do so. %% (2) You may modify a renamed copy of the file, but only for personal %% use or use within an organization. %% (3) You may copy fragments from the file, for personal use or for %% distribution, as long as credit is given where credit is due. %% %% You are NOT ALLOWED to take money for the distribution or use of %% this file or modified versions or fragments thereof, except for %% a nominal charge for copying etc. %% %% CODE: % These macros use TeX primitives, plus the Plain TeX commands: % \dimen@, \dimen@i, \count@, \newcount, \newtoks, % \p@, \z@, \@ne % % Check if file is loaded, announce file on terminal, and take care of @: % \csname PosterLoaded\endcsname \let\PosterLoaded\endinput \message{\space\space v\fileversion\space\space\filedate\space\space } \edef\TheAtCode{\the\catcode`\@} \catcode`\@=11 \newbox\@posterbox \newbox\poster@savedbox \newbox\poster@cropbox \newcount\poster@cnt \def\POSTERpaperheight{11in} \def\POSTERpaperwidth{8.5in} \def\POSTERimageheight{10in} \def\POSTERimagewidth{7.5in} \def\POSTERlandscape{false} \def\POSTERclip{none} \def\POSTERcrop{corners} \def\POSTERcropwidth{2pt} \def\POSTERvcenter{false} \def\POSTERhcenter{false} \def\POSTERimmediatewrites{true} \def\POSTERnumbering{automatic} \def\poster@set#1[#2]{% \poster@@set#2,=\@nil,% \csname posterwrites@\POSTERimmediatewrites\endcsname #1} \def\poster@@set#1=#2,{% \ifx\@nil#2\else \expandafter\ifx\csname POSTER#1\endcsname\relax \errmessage{Poster parameter `#1' not defined}% \else \expandafter\edef\csname POSTER#1\endcsname{#2}% \fi \expandafter\poster@@set \fi} \def\poster@true{true} \def\poster{% \begingroup \futurelet\next\poster@i} \def\poster@i{% \ifx\next[% \expandafter\poster@set \fi \poster@ii} \def\poster@ii{% \let\posternumbering@automatic\posternumbering@rowcol \afterassignment\poster@iii \setbox\@posterbox=\hbox} \def\poster@iii{\aftergroup\poster@iv} \def\poster@iv{% \setbox\@posterbox=\hbox{\raise\dp\@posterbox\box\@posterbox}% \poster@savepage \poster@magtonum \ifx\POSTERlandscape\poster@true \poster@landscape \fi \poster@hoffsets \poster@voffsets \ifx\POSTERvcenter\poster@true \poster@vcenter \fi \ifx\POSTERhcenter\poster@true \poster@hcenter \fi \poster@makecropbox \count\@ne=\z@ \poster@vloop \endgroup} \def\Poster{% \begingroup \futurelet\next\Poster@i} \def\Poster@i{% \ifx\next[% \expandafter\poster@set \fi \Poster@ii} \def\Poster@ii{% \let\posternumbering@automatic\posternumbering@rowcol \setbox\@posterbox=\hbox\bgroup\ignorespaces} \def\endPoster{\egroup\poster@iv} \def\PosterPage{\futurelet\next\PosterPage@i} \def\PosterPage@i{% \ifx\next[% \expandafter\poster@set \fi \PosterPage@ii} \def\PosterPage@ii{% \let\posternumbering@automatic\posternumbering@page \let\poster@trueshipout\shipout \let\shipout\poster@pageshipout} \def\poster@pageshipout{% \begingroup \let\poster@savepage\relax \let\shipout\poster@trueshipout \setbox\@posterbox\box\voidb@x \afterassignment\poster@@pageshipout \setbox\@posterbox} \def\poster@@pageshipout{% \ifvoid\@posterbox\aftergroup\poster@iv\else\poster@iv\fi} \let\poster@swapcounters\relax % Make writes immediates, so that they are not repeated. \def\posterwrites@true{% \let\PosterSaved@write\write \let\PosterSaved@read\read \let\PosterSaved@openout\openout \let\PosterSaved@closeout\closeout \def\write{\PosterSaved@write-1{}\immediate\PosterSaved@write}% \def\read{\PosterSaved@write-1{}\immediate\PosterSaved@read}% \def\openout{\PosterSaved@write-1{}\immediate\PosterSaved@openout}% \def\closeout{\PosterSaved@write-1{}\immediate\PosterSaved@closeout}} \def\posternumbering@rowcol{% \count\z@=\count\@ne \count\@ne=\count\tw@ \count\tw@=\z@} \def\posternumbering@serial{% \count\z@=\poster@cnt \count\@ne=\z@ \count\tw@=\z@} % Save current contents of page in case it contains \special's: \def\poster@savepage{% \begingroup \global\setbox\poster@savedbox\box\voidb@x \output{\global\setbox\poster@savedbox\box\@cclv}% \par\hbox{}\penalty-10000 \endgroup \ifvoid\poster@savedbox\else \dp\poster@savedbox\z@ \ht\poster@savedbox\z@ \wd\poster@savedbox\z@ \fi} % \poster@mag set to decimal value of \mag. \def\poster@magtonum{% \ifnum\mag=1000 \def\poster@mag{}% \else \count@=10000000 \divide\count@\mag \advance\count@ by 200000000 \expandafter\poster@@magtonum\the\count@ \fi \dimen@=\POSTERcropwidth\relax \multiply\dimen@ 100 \divide\dimen@\mag \multiply\dimen@ 10 \edef\poster@cropwidth{\number\dimen@ sp }} \def\poster@@magtonum#1#2#3#4#5#6#7#8#9{% \count@ #2#3#4#5\relax \edef\poster@mag{\the\count@.#6#7#8#9}} \def\poster@landscape{% \let\next\POSTERpaperheight \let\POSTERpaperheight\POSTERpaperwidth \let\POSTERpaperwidth\next \let\next\POSTERimageheight \let\POSTERimageheight\POSTERimagewidth \let\POSTERimagewidth\next} % \dimen@ii set to imageheight \def\poster@voffsets{% \dimen@\POSTERimageheight\relax \dimen@ii=\poster@mag\dimen@ \voffset=\POSTERpaperheight\relax \advance\voffset-\dimen@ \divide\voffset\tw@ \ifdim\voffset<\z@ \voffset\z@ \fi \dimen@=\poster@mag\voffset \edef\poster@vmargin{\number\dimen@ sp }% \advance\voffset\m@ne in \voffset=\poster@mag\voffset} % \dimen@i set to imagewidth \def\poster@hoffsets{% \dimen@\POSTERimagewidth\relax \dimen@i=\poster@mag\dimen@ \hoffset=\POSTERpaperwidth\relax \advance\hoffset-\dimen@ \divide\hoffset\tw@ \ifdim\hoffset<\z@ \hoffset=\z@ \fi \dimen@=\poster@mag\hoffset \edef\poster@hmargin{\number\dimen@ sp }% \advance\hoffset\m@ne in \hoffset=\poster@mag\hoffset} % Center vertically \def\poster@vcenter{% \count@=\ht\@posterbox \divide\count@\dimen@ii \dimen@=\the\count@\dimen@ii \advance\dimen@-\ht\@posterbox \ifdim\dimen@<-.1pt \advance\count@\@ne \fi \setbox\@posterbox=\hbox{\vbox to \the\count@\dimen@ii{% \vss\box\@posterbox\vss}}} % Center horizontally \def\poster@hcenter{% \count@=\wd\@posterbox \divide\count@\dimen@i \dimen@=\the\count@\dimen@i \advance\dimen@-\wd\@posterbox \ifdim\dimen@<-.1pt \advance\count@\@ne \fi \setbox\@posterbox=\hbox to \the\count@\dimen@i{% \hss\box\@posterbox\hss}} % Print rows: \def\poster@vloop{% \ifdim\ht\@posterbox>.1\p@ \ifdim\ht\@posterbox<\dimen@ii \dimen@ii=\ht\@posterbox \poster@makecropbox \fi \advance\count\@ne\@ne \count\tw@=\z@ \dimen@=\wd\@posterbox \poster@hloop \dimen@=\ht\@posterbox \advance\dimen@-\dimen@ii \ht\@posterbox\dimen@ \expandafter\poster@vloop \fi} % Print columns. % \dimen@ is used as scratch to keep track of remaining width. \def\poster@hloop{% \ifdim\dimen@>.1\p@ \advance\count\tw@ by \@ne \begingroup \ifdim\dimen@<\dimen@i \dimen@i=\dimen@ \poster@makecropbox \fi \ifnum\count\@ne=\@ne \begingroup \advance\dimen@ii.1\p@ \ifdim\ht\@posterbox>\dimen@ii \global\let\next\relax \else \gdef\next{\count\@ne=\count\tw@ \count\tw@=\z@}% \fi \endgroup \next \fi \global\advance\poster@cnt\@ne \csname posternumbering@\POSTERnumbering\endcsname \poster@shipout \endgroup \advance\dimen@-\dimen@i \expandafter\poster@hloop \fi} % Shipout, aligning everything at the top-left corner: \def\poster@shipout{% \shipout\hbox{% \ifvoid\poster@savedbox\else\box\poster@savedbox\fi \csname beginposterclip@\POSTERclip\endcsname \lower\ht\@posterbox\hbox to\z@{% \advance\dimen@-\wd\@posterbox \kern\dimen@ \copy\@posterbox \hss}% \csname endposterclip@\POSTERclip\endcsname \copy\poster@cropbox}}% % clip=pstricks \def\beginposterclip@pstricks{% \expandafter\ifx\csname @pstrickserr\endcsname\relax \errmessage{% You must load PSTricks to use poster.tex's clip=pstricks option!}% \global\let\beginposterclip@pstricks\relax \else \gdef\beginposterclip@pstricks{\beginposterclip@@pstricks}% \gdef\endposterclip@pstricks{\pstVerb{currentpoint initclip moveto}}% \beginposterclip@@pstricks \fi} \let\endposterclip@pstricks\relax \def\beginposterclip@@pstricks{% \pst@Verb{% /mtrxc CM def \tx@STV CP translate newpath 0 0 moveto \pst@number\dimen@i 0 rlineto 0 \pst@number\dimen@ii neg rlineto \pst@number\dimen@i neg 0 rlineto closepath clip newpath 0 0 moveto mtrxc setmatrix}} \def\poster@makecropbox{% \setbox\poster@cropbox=\hbox{\csname postercrop@\POSTERcrop\endcsname}% \ht\poster@cropbox=\z@ \dp\poster@cropbox=\z@ \wd\poster@cropbox=\z@} \def\postercrop@corners{% \vtop{% \hbox{% \kern -\poster@hmargin \vrule height \poster@cropwidth width \poster@hmargin \kern -\poster@cropwidth \vrule height \poster@vmargin width \poster@cropwidth \kern \dimen@i \vrule height \poster@vmargin width \poster@cropwidth \kern -\poster@cropwidth \vrule height \poster@cropwidth width \poster@hmargin}% \nointerlineskip \vskip\dimen@ii \hbox{% \kern -\poster@hmargin \vrule height \z@ depth \poster@cropwidth width \poster@hmargin \kern -\poster@cropwidth \vrule height \z@ depth \poster@vmargin width \poster@cropwidth \kern \dimen@i \vrule height \z@ depth \poster@vmargin width \poster@cropwidth \kern -\poster@cropwidth \vrule height \z@ depth \poster@cropwidth width \poster@hmargin}}}% \def\postercrop@full{% \begingroup \hbox to\z@{% \advance\dimen@ii\poster@vmargin \kern -\poster@cropwidth \vrule height \poster@vmargin depth \dimen@ii width \poster@cropwidth \kern \dimen@i \vrule height \poster@vmargin depth \dimen@ii width \poster@cropwidth \hss}% \kern -\poster@hmargin \vtop{% \advance\dimen@i \poster@hmargin \advance\dimen@i \poster@hmargin \kern-\poster@cropwidth \hrule height \poster@cropwidth width \dimen@i \kern\dimen@ii \hrule height \z@ depth \poster@cropwidth width \dimen@i}% \endgroup} \catcode`\@=\TheAtCode\relax \endinput %% %% END poster.tex lifelines-3.0.61/reports/desc-tex2/poster1.tex0000700002540200244210000001111610077366774021375 0ustar prappDomain Users%% BEGIN poster1.tex %% %% Sample for poster.tex/poster.sty. %% Run with LaTeX, with or without the NFSS. %% You might have problems with missing fonts. %% %% See below if using A4 paper. \documentstyle{article} \input poster % Input here in case poster.sty not installed. \mag\magstep5 % Magnification of 1.2^5 (roughly 2.5) % Use "true" dimensions below for magnified values. \begin{document} %% Add paperwidth=210mm,paperheight=297mm if using A4 paper: \begin{Poster}[vcenter=true,hcenter=true] \setlength{\fboxsep}{.8truein}% \setlength{\fboxrule}{.1truein}% \fbox{\begin{minipage}{11.1truein} \begin{center} \bf ON SOME \boldmath$\Pi$-HEDRAL SURFACES IN QUASI-QUASI SPACE \end{center} \begin{center} CLAUDE HOPPER, Omnius University \end{center} There is at present a school of mathematicians which holds that the explosive growth of jargon within mathematics is a deplorable trend. It is our purpose in this note to continue the work of Redheffer~\cite{redheffer} in showing how terminology itself can lead to results of great elegance. I first consolidate some results of Baker~\cite{baker} and McLelland~\cite{mclelland}. We define a class of connected snarfs as follows: $S_\alpha=\Omega(\gamma_\beta)$. Then if $B=(\otimes,\rightarrow,\theta)$ is a Boolean left subideal, we have: $$ \nabla S_\alpha=\int\int\int_{E(\Omega)} B(\gamma_{\beta_0},\gamma_{\beta_0})\,d\sigma d\phi d\rho -\frac{19}{51}\Omega. $$ Rearranging, transposing, and collecting terms, we have: $\Omega=\Omega_0$. The significance of this is obvious, for if $\{S_\alpha\}$ be a class of connected snarfs, our result shows that its union is an utterly disjoint subset of a $\pi$-hedral surface in quasi-quasi space. We next use a result of Spyrpt~\cite{spyrpt} to derive a property of wild cells in door topologies. Let $\xi$ be the null operator on a door topology, $\Box$, which is a super-linear space. Let $\{P_\gamma\}$ be the collection of all nonvoid, closed, convex, bounded, compact, circled, symmetric, connected, central, $Z$-directed, meager sets in $\Box$. Then $P=\cup P_\gamma$ is perfect. Moreover, if $P\neq\phi$, then $P$ is superb. \smallskip {\it Proof.} The proof uses a lemma due to Sriniswamiramanathan~\cite{srinis}. This states that any unbounded fantastic set it closed. Hence we have $$ \Rightarrow P\sim\xi(P_\gamma)-\textstyle\frac{1}{3}. $$ After some manipulation we obtain $$ \textstyle\frac{1}{3}=\frac{1}{3} $$ I have reason to believe~\cite{russell} that this implies $P$ is perfect. If $P\neq\phi$, $P$ is superb. Moreover, if $\Box$ is a $T_2$ space, $P$ is simply superb. This completes the proof. Our final result is a generalization of a theorem of Tz, and encompasses some comments on the work of Beaman~\cite{beaman} on the Jolly function. Let $\Omega$ be any $\pi$-hedral surface in a semi-quasi space. Define a nonnegative, nonnegatively homogeneous subadditive linear functional $f$ on $X\supset\Omega$ such that $f$ violently suppresses $\Omega$. Then $f$ is the Jolly function. \smallskip {\it Proof.} Suppose $f$ is not the Jolly function. Then $\{\Lambda,\mbox{@},\xi\}\cap\{\Delta,\Omega,\Rightarrow\}$ is void. Hence $f$ is morbid. This is a contradiction, of course. Therefore, $f$ is the Jolly function. Moreover, if $\Omega$ is a circled husk, and $\Delta$ is a pointed spear, then $f$ is uproarious. \small \begin{center} \bf References \end{center} \def\thebibliography#1{% \list {\bf\arabic{enumi}.}{\settowidth\labelwidth{\bf #1.}\leftmargin\labelwidth \advance\leftmargin\labelsep \usecounter{enumi}} \def\newblock{\hskip .11em plus .33em minus .07em} \sloppy\clubpenalty4000\widowpenalty4000 \sfcode`\.=1000\relax} \begin{thebibliography}{9} \bibitem{redheffer} R. M. Redheffer, A real-life application of mathematical symbolism, this {\it Magazine}, 38 (1965) 103--4. \bibitem{baker} J. A. Baker, Locally pulsating manifolds, East Overshoe Math. J., 19 (1962) 5280--1. \bibitem{mclelland} J. McLelland, De-ringed pistons in cylindric algebras, Vereinigtermathematischerzeitung f\"ur Zilch, 10 (1962) 333--7. \bibitem{spyrpt} Mrowclaw Spyrpt, A matrix is a matrix is a matrix, Mat. Zburp., 91 (1959) 28--35. \bibitem{srinis} Rajagopalachari Sriniswamiramanathan, Some expansions on the Flausgloten Theorem on locally congested lutches, J. Math. Soc., North Bombay, 13 (1964) 72--6. \bibitem{russell} A. N. Whitehead and B. Russell, Principia Mathematica, Cambridge University Press, 1925. \bibitem{beaman} J. Beaman, Morbidity of the Jolly function, Mathematica Absurdica, 117 (1965) 338--9. \end{thebibliography} \end{minipage}}% \end{Poster} \end{document} %% END poster1.tex lifelines-3.0.61/reports/desc-tex2/poster2.tex0000700002540200244210000000102410077366774021373 0ustar prappDomain Users%% BEGIN poster2.tex %% %% A sample file for poster.tex/poster.sty. Makes a banner. %% Use Plain TeX (or add preamble and use LaTeX) \input poster \special{landscape} % This works with Rokicki's dvips % ptmr should be name of the PostScript Times-Roman font: % 8in is a good size for this font, but might not work with other fonts. % You can use a Computer Modern font, if you are prepared to make a big % font bitmap. \font\bigroman=ptmr at 8in \bigroman \poster[vcenter=true,landscape=true]{Happy} \end %% END poster2.tex lifelines-3.0.61/reports/desc-tex2/pstricks.con0000700002540200244210000003526110077366775021631 0ustar prappDomain Users%% BEGIN: pstricks.con %% %% Configuration file for PSTricks v0.93a, 93/03/12. %% %% !! SEE INSTRUCTIONS AT END !! %%%%%%%%%%% !! DRIVER CONFIGURATION DEFINITIONS GO HERE: !! %%%%%%%%%%%%%% %% ********************************************************************** %% ***** Rokicki's dvips ***** Rokicki's dvips ***** Rokicki's dvips **** %% ********************************************************************** %% Life is bliss with Rokicki's dvips (tested with v5.396, v5.47, 5.491): %% \def\pstdriver{Rokicki's dvips} {\catcode`\"=12\gdef\pstverb#1{\special{" #1}}} % Check catcode of " \def\pstunit{1bp}% \def\pstVerb#1{\special{ps: #1}} \def\pstverbscale{SDict begin normalscale end} \def\pstheader#1{\special{header=#1}} %% %% In the following, CP is short for currentpoint. %% The neg is necessary because dvips scales the coordinates by 1 -1. %% \tx@NET means neg exch neg exch translate. \def\pstrotate{% CP CP translate 3 -1 roll neg rotate \tx@NET} %% %% If using a version before 5.47, clipping may not work. You can %% try the following definition of \pstverb: %\def\pstverb#1{\special{ps: @beginspecial #1 @endspecial}} %% or change "{initclip}ifelse" to "if" in the definition of @setspecial %% in dvips' special.pro. %% %% ****************** END Rokicki's dvips ***************************** %%%%%%%%%%%%%%%%%%% !! CUSTOMIZATION STUFF GOES HERE: !! %%%%%%%%%%%%%%%%%% %% If you want to include your own customizations to pstricks.tex, then %% uncomment the \pstcustomize command, and include your modifications %% after \pstcustomize. These will be read in after pstricks.tex. %\pstcustomize %%%%%%%%%%%%%%%%%%%%%%%%% !! END OF INPUT !! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \endinput %%%%%%%%%%%%%%%%%%% !! GENERAL INSTRUCTIONS !! %%%%%%%%%%%%%%%%%%%%%%%%%%%% Because there are no standards for dvi-to-PS driver \special's, some driver-dependent commands must be defined in this file. Possibly correct definitions for some dvi drivers are given below. Copy the section for the driver you want to use to the indicated place near the beginning of the file, replacing any other definitions you might find there. When changing drivers, you may need to remake the header file. See the PSTricks read-me file for further installation instructions. Please report good and bad experiences with dvi-to-PS drivers, along with the definitions of these commands that worked for you, to tvz@Princeton.EDU. Thanks. %%%%%%%%%%%%%%%% DESCRIPTION OF CONFIGURATION DEFINITIONS %%%%%%%%%%%%%%% Here are the commands that must be defined in this file: \pstverb{} - The argument is included as verbatim PostScript, grouped by save and restore. The coordinate system should be square, not rotated, and with the origin at TeX's currentpoint. \pstVerb{} - The argument is included as verbatim PostScript, not grouped by (g)save and (g)restore. The currentpoint should be TeX's currentpoint. \pstunit - The units used by driver for graphics included with \pstverb. Probably 1bp or 1sp. \pstverbscale - The PostScript code that scales the coordinate system from that in effect with \pstVerb to that in effect with \pstverb. Should not translate to the currentpoint. \pstrotate - The PostScript code that takes a number off the stack and rotates the axes properly. I.e., \pstVerb{angle \pstrotate} is used to begin rotations. \pstheader{} - The argument is a header file (e.g., .pro file). If your driver does not support such a special, then the command might just remind you to include the header when printing. You can use PSTricks without a header, in which case it does not matter how you define \pstheader. See read-me.pst for details. If you cannot change the default directory where your driver looks for header files, and you cannot write to that directory, then you include the path for your PSTricks header files. E.g., \def\pstheader#1{\special{header=~/tex/#1}}. \pstdriver - The name of the driver. %%%%%%%%% !! HOW TO MAKE A TEX FORMAT WITH PSTRICKS PRELOADED !! %%%%%%%% See your local TeX documentation for instructions on creating a TeX format. Before making the format, be sure that this configuration file is correct. It will be read only when creating the format, and not with every job. If you are not using header files, there are no more special instructions. Special instructions when using header files: - If you want to include supplementary PSTricks files (e.g., pst-node.tex), add \input commands in the customization section above. - If your definition of \pstheader is, e.g. \def\pstheader#1{\special{\header=#1}} then change it to \def\pstheader#1{% \expandafter\everyjob\expandafter{\the\everyjob \special{header=#1}}} and put your original definition in the customization section, AFTER any \input commands. E.g., the customization section might look like: \pstcustomize \input pst-node.tex \input pst-coil.tex \def\pstheader#1{\special{header=#1}} - Input pstricks.tex at the appropriate time when creating the format. E.g., when initex stops running: *\input pstricks *\dump %%%%%%%%%% !! CONFIGURATIONS FOR SOME DRIVERS !! %%%%%%%%%%%%%%%%%%%%%%%% %% ********************************************************************** %% ***** Rokicki's dvips ***** Rokicki's dvips ***** Rokicki's dvips **** %% ********************************************************************** %% Life is bliss with Rokicki's dvips (tested with v5.396, v5.47, 5.491): %% \def\pstdriver{Rokicki's dvips} {\catcode`\"=12\gdef\pstverb#1{\special{" #1}}} % Check catcode of " \def\pstunit{1bp}% \def\pstVerb#1{\special{ps: #1}} \def\pstverbscale{SDict begin normalscale end} \def\pstheader#1{\special{header=#1}} %% %% In the following, CP is short for currentpoint. %% The neg is necessary because dvips scales the coordinates by 1 -1. %% \tx@NET means neg exch neg exch translate. \def\pstrotate{% CP CP translate 3 -1 roll neg rotate \tx@NET} %% %% If using a version before 5.47, clipping may not work. You can %% try the following definition of \pstverb: %\def\pstverb#1{\special{ps: @beginspecial #1 @endspecial}} %% or change "{initclip}ifelse" to "if" in the definition of @setspecial %% in dvips' special.pro. %% %% ****************** END Rokicki's dvips ***************************** %% ********************************************************************** %% **** Arbortext's dvips *** Arbortext's dvips *** Arbortext's dvips *** %% ********************************************************************** %% Thanks to Wolfgang Sienel: %% \def\pstdriver{Arbortext's dvips} \def\pstverb#1{% \special{ps::[asis] 0 SPB /ChartCheckPoint save def Xpos Ypos translate #1 ChartCheckPoint restore 0 SPE}} \def\pstunit{1bp} \def\pstVerb#1{\special{ps:: #1}} \def\pstverbscale{} \def\pstrotate{CP CP translate 3 -1 roll rotate \tx@NET} \def\pstheader#1{% \typeout{**********************************************************}% \typeout{** Don't forget to include #1 when printing:}% \typeout{** \space\space dvips -PRO #1 myfile}% \typeout{**********************************************************}} %% %% Comments by Wolfgang on header files: %% Normally the standard prolog file is downloaded once to the printer %% with psload.ps (the initializing file for your TeX-printer) before %% printing TeX-documents. If you don't make any changes to psload.ps %% you have to type dvips -PRO PATH/pstricks.pro myfile (-PRO just %% works for UNIX systems. I don't have any idea about other systems). %% If psload.ps was not downloaded to the printer you have to append %% pstricks.pro to the standard prolog file dvips.pro. In this case %% invoke dvips as always. Note that after hitting the enter key you %% have to specify the option download all prolog in both cases. If you %% are frequently using pstricks you might want to change psload.ps. In %% this case contact your local TeX-guru and ask him politely to do this %% for you. Attention: If psload.ps is getting too big you may run into %% trouble with printer memory! %% %% ****************** END Arbortext's dvips ***************************** %% ********************************************************************** %% **** Textures *** Textures *** Textures *** Textures *** Textures **** %% ********************************************************************** %% These have been tested with v1.3. It is nice to have a PostScript %% screen previewer, such as TScript (USA: 1-617-734-9700). (The %% Textures preview window will not show the PSTricks graphics.) %% \def\pstdriver{Textures} \def\pstunit{1bp} \def\pstverb#1{\special{postscript /TX@Save save def #1 TX@save restore}} \def\pstVerb#1{\special{postscript grestore #1 gsave}} \def\pstverbscale{Mag 1000 div 72.27 72 div mul dup neg scale} \def\pstrotate{% CP CP translate 3 -1 roll neg rotate \tx@NET} %% %% \pstVerb does not define the currentpoint properly. As a workaround, %% insert the following lines in the customization section above. %% %% \def\pst@Verb#1{% %% \special{postscript \pst@dict /sps { moveto /Mag ed } def %% userdict begin}% %% \special{postscript #1 end gsave}} %% %% Textures does not support header files. %% However, it may still be worth using a header file for increased speed. %% Also, some macros can overload Textures 1.3 when not used with a header %% file. You can include the header file pstricks.pro by saving the %% PostScript output to a file and inserting the pstricks.pro with an %% editor. Probably a better solution is to append pstricks.pro to a %% copy of the laserprep, and, by changing file names of the modified %% laserprep and the original laserprep, use the laserprep with pstricks.pro %% whenever you are printing pstricks documents. \def\pstheader#1{% \typeout{******************************************}% \typeout{*** Include header file #1!! ***}% \typeout{******************************************}} %% %% ****************** END Textures ************************************** %% ********************************************************************** %% ***** dvi2ps ***** dvi2ps ***** dvi2ps ***** dvi2ps ***** dvi2ps ***** %% ********************************************************************** %% I.e., dvi2ps, v2.xx. There are lot's of such things around. %% This probably doesn't work. Considering upgrading to Rokicki's dvips. %% \def\pstdriver{dvi2ps v2.xx} \def\pstunit{1pt} \def\pstverb#1{ pstext="save currentpoint translate Resolution 72.27 div neg scale #1 restore" \space} \def\pstVerb#1{ pstext="#1" \space} \def\pstverbscale{Resolution 72.27 div neg scale} \def\pstrotate{% CP CP translate 3 -1 roll neg rotate \tx@NET} \def\pstheader#1{% \typeout{******************************************************} \typeout{Don't forget to include the header file #1!!} \typeout{******************************************************} %% %% ***************************** END dvi2ps ***************************** %% ********************************************************************** %% ***** dvi3ps ***** dvi3ps ***** dvi3ps ***** dvi3ps ***** dvi3ps ***** %% ********************************************************************** %% I.e., dvi2ps, version 3.xx, by Kevin Coombes. %% This has not been tested. Consider upgrading to Rokicki's dvips. %% \def\pstdriver{dvi2ps v3.xx} \def\pstunit{1bp} \def\pstverb#1{pstext="#1"} % \def\pstVerb#1{% % \special{pstext="@endspecial #1 @beginspecial @setspecial"}} % v3.0 \def\pstVerb#1{\special{psraw="#1"}} % v3.3 \def\pstverbscale{Resolution 72.27 div neg scale} \def\pstrotate{% CP CP translate 3 -1 roll neg rotate \tx@NET} \def\pstheader#1{% \typeout{******************************************************} \typeout{Don't forget to include the header file #1!!} \typeout{******************************************************} %% %% ******************* END dvi3ps *************************************** %% ********************************************************************** %% **** OzTeX **** OzTeX **** OzTeX **** OzTeX **** OzTeX **** OzTeX **** %% ********************************************************************** %% Only the pure graphics objects are supported for OzTeX. %% No color, rotation, clipping, nodes and node connections, overlays, etc. %% Also, \rput cannot be used with \SpecialCoor. %% %% The reason is given in the documentation for Version 1.3, September 1990: %% %% OzTeX generates highly efficient PostScript code but it does so at %% the expense of some \special functionality. Many DVI-to-PostScript %% translators allow you to do things like use one \verb|\special| to start %% rotating TeX text and another to stop the rotation. The way OzTeX %% interprets a DVI page makes this impossible. %% %% If using the header file, you should copy pstricks.pro to global.ps, in %% the same directory as your dvi file. %% \def\pstdriver{OzTeX} \def\pstverb#1{\special{null.ps #1}} \def\pstunit{1bp} \def\pstVerb#1{% \typeout{PSTRICKS WARNING:}% \typeout{\space\space You are using features not supported by OzTeX.}% \typeout{\space\space These will be ignored.}% \gdef\pstVerb##1{}} \def\pstverbscale{} \def\pstrotate{} \def\pstheader#1{% \typeout{******************************************************} \typeout{Don't forget to include the header file #1!!} \typeout{******************************************************}} %% %% ************************* END OzTeX ********************************** %% ********************************************************************** %% ***** DirectTeX ***** DirectTeX ***** DirectTeX ***** DirectTeX ****** %% ********************************************************************** %% DirectTeX is for the Macintosh. These has been tested unsuccessfully, %% apparently due to a problem with DirectTeX. %% \def\pstdriver{DirectTeX} %% %% Check catcode of " {\catcode`\"=12\gdef\pstverb#1{\special{" #1 /Foo{}def }}} \def\pstunit{1bp} \def\pstVerb#1{\special{ps: #1 }} \def\pstverbscale{TeXDict begin normalscale end} %% %% In the following, CP is short for currentpoint. The neg is necessary %% because dvips scales the coordinates by 1 -1: \def\pstrotate{% CP CP translate 3 -1 roll neg rotate \tx@NET} %% \def\pstheader#1{% \typeout{**********************************************************}% \typeout{** Don't forget to include #1 when printing:}% \typeout{** \space\space DVIReader -header #1 myfile}% \typeout{**********************************************************}} %% %% ****************** END DirectTeX ***************************** %% END pstricks.con lifelines-3.0.61/reports/desc-tex2/pstricks.pro0000700002540200244210000002252410077366775021650 0ustar prappDomain Users%! % PostScript prologue for pstricks.tex. % Created 1993/3/12. Source file was pstricks.doc % Version 0.93a, 93/03/12. % For use with Rokicki's dvips. /tx@Dict 200 dict def tx@Dict begin /ADict 25 dict def /CM { matrix currentmatrix } bind def /SLW /setlinewidth load def /CLW /currentlinewidth load def /CP /currentpoint load def /ED { exch def } bind def /L /lineto load def /T /translate load def /Atan { /atan load stopped { pop pop 0 } if } def /Div { dup 0 eq { pop } { div } ifelse } def /NET { neg exch neg exch T } def /Pyth { dup mul exch dup mul add sqrt } def /PtoC { 2 copy cos mul 3 1 roll sin mul } def /PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } def /PathLength { flattenpath /z 0 def { /y1 ED /x1 ED /y2 y1 def /x2 x1 def } { /y ED /x ED PathLength@ } {} { /y y2 def /x x2 def PathLength@ } pathforall z } def /STP { .996264 dup scale } def /STV { SDict begin normalscale end STP } def /DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup y mul /y ED x mul /x ED x 0 eq y 0 eq and { /x 1 def /y 1 def } if [ y x ] 1 a sub y mul setdash stroke } def /DotLine { /b PathLength def /a ED /z ED /y CLW def /z y z add def a 0 gt { /b b a div def } { a 0 eq { /b b y sub def } { a -3 eq { /b b y add def } if } ifelse } ifelse [ 0 b b z Div round Div dup 0 le { pop 1 } if ] a 0 gt { 0 } { y 2 div a -2 gt { neg } if } ifelse setdash 1 setlinecap stroke } def /LineFill { abs CLW add /a ED gsave clip pathbbox a Div ceiling /y2 ED /x2 ED a Div floor /y1 ED /x1 ED /n y2 y1 sub 1 add cvi def /y1 a y1 mul def newpath 2 setlinecap n { currentstrokeadjust == x1 y1 moveto x2 y1 L stroke /y1 y1 a add def } repeat grestore } def /LineFill { abs CLW add /a ED gsave clip pathbbox a Div ceiling /y2 ED /x2 ED a Div floor /y1 ED /x1 ED /n y2 y1 sub 1 add cvi def /y1 a y1 mul def newpath 2 setlinecap systemdict /currentstrokeadjust known { currentstrokeadjust } { false } ifelse { /t { } def } { /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform } bind def } ifelse n { x1 y1 t moveto x2 y1 t L stroke /y1 y1 a add def } repeat grestore } def /BeginArrow { ADict begin /@mtrx CM def gsave 2 copy T 2 index sub neg exch 3 index sub exch Atan rotate newpath } def /EndArrow { @mtrx setmatrix CP grestore end } def /Arrow { CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill grestore } def /Tbar { CLW mul add /z ED z -2 div CLW 2 div moveto z 0 rlineto stroke 0 CLW moveto } def /Bracket { CLW mul add dup CLW sub 2 div /x ED mul CLW add /y ED /z CLW 2 div def x neg y moveto x neg CLW 2 div L x CLW 2 div L x y L stroke 0 CLW moveto } def /RoundBracket { CLW mul add dup 2 div /x ED mul /y ED /mtrx CM def 0 CLW 2 div T x y mul 0 ne { x y scale } if 1 1 moveto .85 .5 .35 0 0 0 curveto -.35 0 -.85 .5 -1 1 curveto mtrx setmatrix stroke 0 CLW moveto } def /Shadow { [ { /moveto load } { /lineto load } { /curveto load } { /closepath load } pathforall ] cvx newpath 3 1 roll T exec } def /SD { 0 360 arc fill } def /SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def /ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def /SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore } def /NArray { aload length 2 div dup dup cvi eq not { exch pop } if /n exch cvi def } def /NArray { /f ED counttomark 2 div dup cvi /n ED n eq not { exch pop } if f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } def /Line { NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub def n { Lineto } repeat CP 4 2 roll ArrowB L pop pop } if } def /Arcto { /a [ 6 -2 roll ] cvx def a r /arcto load stopped { 5 } { 4 } ifelse { pop } repeat a } def /CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq and { pop pop /n n 1 sub def } if } def /Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat } { n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1 ED x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def n { Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto Lineto pop pop closepath } ifelse } def /CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth def } def /CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth def } def /CC { /l0 l1 def /x1 x dx sub def /y1 y dy sub def /dx0 dx1 def /dy0 dy1 def CCA /dx dx0 l1 c exp mul dx1 l0 c exp mul add def /dy dy0 l1 c exp mul dy1 l0 c exp mul add def /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos abs b exp a mul dx dy Pyth Div 2 div def /x2 x l0 dx mul m mul sub def /y2 y l0 dy mul m mul sub def /dx l1 dx mul m mul neg def /dy l1 dy mul m mul neg def } def /IC { /c c 1 add def c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } ifelse /a a 2 mul 3 div 45 cos b exp div def CCA /dx 0 def /dy 0 def } def /BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def /NC { CC x1 y1 x2 y2 x y curveto } def /EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def /BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def /NAC { x2 y2 x y curveto CC x1 y1 } def /EAC { x2 y2 x y ArrowB curveto pop pop } def /OpenCurve { NArray n 3 lt { n { pop pop } repeat } { BOC /n n 3 sub def n { NC } repeat EOC } ifelse } def /AltCurve { { false NArray n 2 mul 2 roll [ n 2 mul 3 sub 1 roll ] aload /Points ED n 2 mul -2 roll } { false NArray } ifelse n 4 lt { n { pop pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse } def /ClosedCurve { NArray n 3 lt { n { pop pop } repeat } { n 3 gt { CheckClosed } if 6 copy n 2 mul 6 add 6 roll IC CC x y moveto n { NC } repeat closepath pop pop } ifelse } def /EndDot { { /z DS def } { /z 0 def } ifelse /b ED 0 z DS SD b { 0 z DS CLW sub SD } if 0 DS z add CLW 4 div sub moveto } def /Rect { x1 y1 y2 add 2 div moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto x1 y1 lineto closepath } def /OvalFrame { x1 x2 eq y1 y2 eq or { pop pop x1 y1 moveto x2 y2 L } { y1 y2 sub abs x1 x2 sub abs 2 copy gt { exch pop } { pop } ifelse 2 div exch { dup 3 1 roll mul exch } if 2 copy lt { pop } { exch pop } ifelse /b ED x1 y1 y2 add 2 div moveto x1 y2 x2 y2 b arcto x2 y2 x2 y1 b arcto x2 y1 x1 y1 b arcto x1 y1 x1 y2 b arcto 16 { pop } repeat closepath } ifelse } def /Frame { CLW mul /a ED 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add /y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq { pop pop Rect } { OvalFrame } ifelse } def /Parab { /y0 exch def /x0 exch def /y1 exch def /x1 exch def /dx x0 x1 sub 3 div def /dy y0 y1 sub 3 div def x0 dx sub y0 dy add x1 y1 ArrowA x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB curveto /Points [ x1 y1 x0 y0 x0 2 mul x1 sub y1 ] def } def /Grid { /a 4 string def /b ED /d ED /n ED cvi dup 1 lt { pop 1 } if /c ED c div dup 0 eq { pop 1 } if /cy ED c div dup 0 eq { pop 1 } if /cx ED cy div cvi /y ED cx div cvi /x ED cy div cvi /y2 ED cx div cvi /x2 ED cy div cvi /y1 ED cx div cvi /x1 ED /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def b 0 gt { /z1 b 4 div CLW 2 div add def /Helvetica findfont b scalefont setfont /b b .95 mul CLW 2 div add def } if gsave n 0 gt { 1 setlinecap [ 0 cy n div ] 0 setdash } { 2 setlinecap } ifelse /c x1 def /i 500 w mul x1 add def /e y cy mul def /f y1 cy mul def /g y2 cy mul def x1 cx mul 0 T { newpath 0 e moveto b 0 gt { gsave d c a cvs dup stringwidth pop /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse h 0 gt {b neg} {z1} ifelse rmoveto show grestore } if 0 f moveto 0 g L stroke cx w mul 0 T c x2 eq c i eq or {exit} if /c c w add def } loop grestore gsave n 0 gt { 1 setlinecap [ 0 cx n div ] 0 setdash } { 2 setlinecap } ifelse /c y1 def /i 500 h mul y1 add def /e x cx mul def /f x1 cx mul def /g x2 cx mul def 0 y1 cy mul T { newpath e 0 moveto b 0 gt { gsave d c a cvs dup stringwidth pop /z2 ED w 0 gt {z1 z2 add neg} {z1} ifelse h 0 gt {z1} {b neg} ifelse rmoveto show grestore } if f 0 moveto g 0 L stroke 0 cy h mul T c y2 eq c i eq or {exit} if /c c h add def } loop grestore } def /ArcArrow { /d ED /b ED /a ED gsave newpath 0 -1000 moveto clip newpath 0 1 0 0 b grestore c mul /e ED pop pop pop r a e d PtoC y add exch x add exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c mul neg d } def /Ellipse { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def /Rot { CP CP translate 3 -1 roll neg rotate NET } def /PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def /PutBegin { /lmtrx [ tx@Dict /lmtrx known { lmtrx aload pop } if CM ] def CP 4 2 roll T moveto } def /PutEnd { CP /lmtrx [ lmtrx aload pop setmatrix ] def moveto } def /Uput { /a ED add 2 div /h ED 2 div /w ED /s a sin def /c a cos def /b s abs c abs 2 copy gt dup /q ED { pop } { exch pop } ifelse def /w1 c b div w mul def /h1 s b div h mul def q { w1 abs w sub dup c mul abs } { h1 abs h sub dup s mul abs } ifelse } def /UUput { /z ED abs /y ED /x ED q { x s div c mul abs y gt } { x c div s mul abs y gt } ifelse { x x mul y y mul sub z z mul add sqrt z add } { q { x s div } { x c div } ifelse abs } ifelse a PtoC h1 add exch w1 add exch } def /BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { CP OLUnit T moveto /IfVisible true def } if } { IfVisible { CP OLUnit NET moveto /IfVisible false def } if } ifelse } def /InitOL { /OLUnit [ gsave CM STV 2890.79999 dup moveto setmatrix CP grestore ] cvx def /BOL { BeginOL } def /IfVisible true def } def end lifelines-3.0.61/reports/desc-tex2/pstricks.tex0000700002540200244210000015575510077366775021665 0ustar prappDomain Users%% BEGIN: pstricks.tex %% Generated on <1993/3/12> from `pstricks.doc'. %% For use with the PostScript header file `pstricks.pro'. %% \def\fileversion{0.93a} \def\filedate{93/03/12} %% %% See the PSTricks read-me file and the User's Guide for documentation. %% %% COPYRIGHT 1993, by Timothy Van Zandt, tvz@Princeton.EDU %% %% Copying of part or all of any file in the pstricks.tex package %% is allowed under the following conditions only: %% (1) You may freely distribute unchanged copies of the files. Please %% include the documentation when you do so. %% (2) You may modify a renamed copy of any file, but only for personal %% use or use within an organization. %% (3) You may copy fragments from the files, for personal use or for use %% in a macro package for distribution, as long as credit is given %% where credit is due. %% %% You are NOT ALLOWED to take money for the distribution or use of %% these files or modified versions or fragments thereof, except for %% a nominal charge for copying etc. %% \csname PSTricksLoaded\endcsname \let\PSTricksLoaded\endinput \edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax \expandafter\ifx\csname @latexerr\endcsname\relax \long\def\@ifundefined#1#2#3{\expandafter\ifx\csname #1\endcsname\relax#2\else#3\fi} \def\@namedef#1{\expandafter\def\csname #1\endcsname} \def\@nameuse#1{\csname #1\endcsname} \def\@eha{% Your command was ignored.^^J Type \space I \space to replace it with another command,^^J or \space \space to continue without it.} \def\@spaces{\space\space\space\space} \def\typeout#1{\immediate\write\@unused{#1}} \alloc@7\write\chardef\sixt@@n\@unused \def\@empty{} \def\@gobble#1{} \def\@nnil{\@nil} \def\@ifnextchar#1#2#3{% \let\@tempe#1\def\@tempa{#2}\def\@tempb{#3}\futurelet\@tempc\@ifnch} \def\@ifnch{% \ifx\@tempc\@sptoken \let\@tempd\@xifnch \else \ifx\@tempc\@tempe \let\@tempd\@tempa \else \let\@tempd\@tempb \fi \fi \@tempd} \begingroup \def\:{\global\let\@sptoken= } \: \def\:{\@xifnch} \expandafter\gdef\: {\futurelet\@tempc\@ifnch} \endgroup \fi \typeout{`PSTricks' v\fileversion\space\space <\filedate> (tvz)} \def\@pstrickserr#1#2{% \begingroup \newlinechar`\^^J \edef\pst@tempc{#2}% \expandafter\errhelp\expandafter{\pst@tempc}% \typeout{% PSTricks error. \space See User's Guide for further information.^^J \@spaces\@spaces\@spaces\@spaces Type \space H \space for immediate help.}% \errmessage{#1}% \endgroup} \def\@ehpa{% Your command was ignored. Default value substituted.^^J Type \space \space to procede.} \def\@ehpb{% Your command was ignored. Will recover best I can.^^J Type \space \space to procede.} \def\@ehpc{% You better fix this before proceding.^^J See the PSTricks User's Guide or ask your system administrator for help.^^J Type \space X \space to quit.} \def\pst@misplaced#1{\@pstrickserr{Misplaced \string#1 command}\@ehpb} \newdimen\pst@dima \newdimen\pst@dimb \newdimen\pst@dimc \newdimen\pst@dimd \newdimen\pst@dimg \newdimen\pst@dimh \newbox\pst@hbox \newbox\pst@boxg \newcount\pst@cnta \newcount\pst@cntb \newcount\pst@cntc \newcount\pst@cntd \newcount\pst@cntg \newcount\pst@cnth \newif\if@pst \newif\if@star \def\pst@ifstar#1{% \@ifnextchar*{\@startrue\def\next*{#1}\next}{\@starfalse#1}} \def\pst@expandafter#1#2{% \def\next{#1}% \edef\@tempa{#2}% \ifx\@tempa\@empty \@pstrickserr{Unexpected empty argument!}\@ehpb \def\@tempa{\@empty}% \fi \expandafter\next\@tempa} \def\pst@dimtonum#1#2{\edef#2{\pst@@dimtonum#1}} \def\pst@@dimtonum#1{\expandafter\pst@@@dimtonum\the#1} {\catcode`\p=12 \catcode`\t=12 \global\@namedef{pst@@@dimtonum}#1pt{#1}} \def\pst@pyth#1#2#3{% \ifdim#1>#2\pst@@pyth#1#2#3\else\pst@@pyth#2#1#3\fi} \def\pst@@pyth#1#2#3{% \ifdim4#1>9#2% #3=#1\advance#3 .2122#2% \else #3=.8384#1\advance#3 .5758#2% \fi} \def\pst@divide#1#2#3{% \begingroup \pst@dimg=#1\relax\pst@dimh=#2\relax \pst@cnta=\pst@dimg \pst@cntb=1073741824 \pst@cntc=65536 \def\pst@tempa{\fi\ifnum}% \loop\ifnum\pst@cnta<\pst@cntb \pst@tempa\pst@cntc>\@ne \multiply\pst@cnta2\divide\pst@cntc2 \repeat \divide\pst@dimh\pst@cntc \divide\pst@cnta\pst@dimh \global\pst@dimg\number\pst@cnta sp \endgroup \pst@dimtonum\pst@dimg#3} \def\pst@configerr#1{% \@pstrickserr{\string#1 not defined in pstricks.con}\@ehpc} % % \begin{macrocode} \def\pstVerb#1{\pst@configerr\pstVerb} \def\pstverb#1{\pst@configerr\pstverb} \def\pstverbscale{\pst@configerr\pstverbscale} \def\pstrotate{\pst@configerr\pstrotate} \def\pstheader#1{\pst@configerr\pstheader} \def\pstdriver{\pst@configerr\pstdriver} \@ifundefined{pstcustomize}% {\def\pstcustomize{\endinput\let\pstcustomize\relax}}{} \input pstricks.con \newif\ifPSTricks \PSTrickstrue \def\PSTricksOff{% \def\pstheader##1{}% \def\pstverb##1{}% \def\pstVerb##1{}% \PSTricksfalse} \@ifundefined{pst@def}{\def\pst@def#1<#2>{\@namedef{tx@#1}{#2 }}}{} \@ifundefined{pst@ATH}{\def\pst@ATH<#1>{}}{} \pstheader{pstricks.pro} \def\pst@dict{tx@Dict begin } \def\pst@theheaders{pstricks.pro} \def\pst@Verb#1{\pstVerb{\pst@dict #1 end}} \def\tx@Atan{Atan } \def\tx@Div{Div } \def\tx@NET{NET } \def\tx@Pyth{Pyth } \def\tx@PtoC{PtoC } \def\tx@PathLength@{PathLength@ } \def\tx@PathLength{PathLength } \pst@dimg=\pstunit\relax \ifdim\pst@dimg=1bp \def\pst@stp{.996264 dup scale} \else \edef\pst@stp{1 \pst@@dimtonum\pst@dimg\space div dup scale} \fi \def\tx@STP{STP } \def\tx@STV{STV } \def\pst@number#1{\pst@@dimtonum#1\space} \def\pst@checknum#1#2{% \edef\next{#1}% \ifx\next\@empty \let\pst@num\z@ \else \expandafter\pst@@checknum\next..\@nil \fi \ifnum\pst@num=\z@ \@pstrickserr{Bad number: `#1'. 0 substituted.}\@ehpa \def#2{0 }% \else \edef#2{\ifnum\pst@num=2 -\fi\the\pst@cntg.% \expandafter\@gobble\the\pst@cnth\space}% \fi} \def\pst@@checknum{% \@ifnextchar-% {\def\pst@num{2}\expandafter\pst@@@checknum\@gobble}% {\def\pst@num{1}\pst@@@checknum}} \def\pst@@@checknum#1.#2.#3\@nil{% \afterassignment\pst@@@@checknum\pst@cntg=0#1\relax\@nil \afterassignment\pst@@@@checknum\pst@cnth=1#2\relax\@nil} \def\pst@@@@checknum#1\relax\@nil{% \ifx\@nil#1\@nil\else\let\pst@num\z@\fi} \def\pst@getnumii#1 #2 #3\@nil{% \pst@checknum{#1}\pst@tempg \pst@checknum{#2}\pst@temph} \def\pst@getnumiii#1 #2 #3 #4\@nil{% \pst@checknum{#1}\pst@tempg \pst@checknum{#2}\pst@temph \pst@checknum{#3}\pst@tempi} \def\pst@getnumiv#1 #2 #3 #4 #5\@nil{% \pst@checknum{#1}\pst@tempg \pst@checknum{#2}\pst@temph \pst@checknum{#3}\pst@tempi \pst@checknum{#4}\pst@tempj} \def\pst@getdimnum#1 #2 #3\@nil{% \pssetlength\pst@dimg{#1}% \pst@checknum{#2}\pst@tempg} \def\pst@getscale#1#2{% \pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil \edef#2{\pst@tempg\space \pst@temph\space scale }% \ifdim\pst@tempg\p@=\z@ \@pstrickserr{Bad scaling argument `#1'}\@ehpa \def#2{}% \else \ifdim\pst@temph\p@=\z@ \@pstrickserr{Bad scaling argument}\@ehpa \def#2{}% \else \ifdim\pst@tempg\p@=\p@ \ifdim\pst@temph\p@=\p@ \def#2{}\fi\fi \fi \fi} \def\pst@getint#1#2{% \pst@cntg=#1\relax \edef#2{\the\pst@cntg\space}} \begingroup \catcode`\{=12 \catcode`\}=12 \catcode`\[=1 \catcode`\]=2 \gdef\pslbrace[{ ] \gdef\psrbrace[} ] \endgroup \def\@newcolor#1#2{% \expandafter\edef\csname #1\endcsname{\noexpand\pst@color{#2}}% \expandafter\edef\csname color@#1\endcsname{#2}% \ignorespaces} \def\pst@color#1{% \def\pst@currentcolor{#1}\pstVerb{#1}\aftergroup\pst@endcolor} \def\pst@endcolor{\pstVerb{\pst@currentcolor}} \def\pst@currentcolor{0 setgray} \def\altcolormode{% \def\pst@color##1{% \pstVerb{gsave ##1}\aftergroup\pst@endcolor}% \def\pst@endcolor{\pstVerb{\pst@grestore}}} \def\pst@grestore{% currentpoint matrix currentmatrix currentfont grestore setfont setmatrix moveto} \def\pst@usecolor#1{\csname color@#1\endcsname\space} \def\newgray#1#2{% \pst@checknum{#2}\pst@tempg \@newcolor{#1}{\pst@tempg setgray}} \def\newrgbcolor#1#2{% \pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi setrgbcolor}} \def\newhsbcolor#1#2{% \pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi sethsbcolor}} \def\newcmykcolor#1#2{% \pst@expandafter\pst@getnumiv{#2} {} {} {} {} {}\@nil \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi \pst@tempj setcmykcolor}} \newgray{black}{0} \newgray{darkgray}{.25} \newgray{gray}{.5} \newgray{lightgray}{.75} \newgray{white}{1} \newrgbcolor{red}{1 0 0} \newrgbcolor{green}{0 1 0} \newrgbcolor{blue}{0 0 1} \newrgbcolor{yellow}{1 1 0} \newrgbcolor{cyan}{0 1 1} \newrgbcolor{magenta}{1 0 1} \def\psset#1{\@psset#1,\@nil\ignorespaces} \def\@psset#1,{% \@@psset#1==\@nil \@ifnextchar\@nil{\@gobble}{\@psset}} \def\@@psset#1=#2=#3\@nil{% \@ifundefined{psset@#1}% {\@pstrickserr{Graphics parameter `#1' not defined.}\@ehpa}% {\@nameuse{psset@#1}{#2}}}% \def\psset@style#1{% \@ifundefined{pscs@#1}% {\@pstrickserr{Custom style `#1' undefined}\@ehpa}% {\@nameuse{pscs@#1}}} \def\newpsstyle#1#2{\@namedef{pscs@#1}{\psset{#2}}} \def\@none{none} \def\pst@getcolor#1#2{% \@ifundefined{color@#1}% {\@pstrickserr{Color `#1' not defined}\@eha}% {\edef#2{#1}}} \newdimen\psunit \psunit 1cm \newdimen\psxunit \psxunit 1cm \newdimen\psyunit \psyunit 1cm \let\psrunit\psunit \def\pstunit@off{\let\@psunit\ignorespaces\ignorespaces} \def\pssetlength#1#2{% \let\@psunit\psunit \afterassignment\pstunit@off #1 #2\@psunit} \def\psaddtolength#1#2{% \let\@psunit\psunit \afterassignment\pstunit@off \advance#1 #2\@psunit} \def\pssetxlength#1#2{% \let\@psunit\psxunit \afterassignment\pstunit@off #1 #2\@psunit} \def\pssetylength#1#2{% \let\@psunit\psyunit \afterassignment\pstunit@off #1 #2\@psunit} \def\psset@unit#1{% \pssetlength\psunit{#1}% \psxunit=\psunit \psyunit=\psunit} \def\psset@runit#1{\pssetlength\psrunit{#1}} \def\psset@xunit#1{\pssetxlength\psxunit{#1}} \def\psset@yunit#1{\pssetylength\psyunit{#1}} \def\pst@getlength#1#2{% \pssetlength\pst@dimg{#1}% \edef#2{\pst@number\pst@dimg}} \def\pst@@getlength#1#2{% \pssetlength\pst@dimg{#1}% \edef#2{\number\pst@dimg sp}} \def\pst@getcoor#1#2{\pst@@getcoor{#1}\let#2\pst@coor} \def\pst@coor{0 0 } \def\pst@getcoors#1#2{% \def\pst@aftercoors{\addto@pscode{#1 \pst@coors }#2}% \def\pst@coors{}% \pst@@getcoors} \def\pst@@getcoors(#1){% \pst@@getcoor{#1}% \edef\pst@coors{\pst@coor\pst@coors}% \@ifnextchar({\pst@@getcoors}{\pst@aftercoors}} \def\pst@getangle#1#2{\pst@@getangle{#1}\let#2\pst@angle} \def\pst@angle{0 } \def\cartesian@coor#1,#2,#3\@nil{% \pssetxlength\pst@dimg{#1}% \pssetylength\pst@dimh{#2}% \edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}} \def\NormalCoor{% \def\pst@@getcoor##1{\pst@expandafter\cartesian@coor{##1},\relax,\@nil}% \def\pst@@getangle##1{% \pst@checknum{##1}\pst@angle \edef\pst@angle{\pst@angle \pst@angleunit}}% \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@cartesian}} \NormalCoor \def\degrees{\@ifnextchar[{\@degrees}{\def\pst@angleunit{}}} \def\@degrees[#1]{% \pst@checknum{#1}\pst@tempg \edef\pst@angleunit{360 \pst@tempg div mul }% \ignorespaces} \def\radians{\def\pst@angleunit{57.2956 mul }} \def\pst@angleunit{} \def\SpecialCoor{% \def\pst@@getcoor##1{\pst@expandafter\special@coor{##1}||\@nil}% \def\pst@@getangle##1{\pst@expandafter\special@angle{##1}\@empty)\@nil}% \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@special}} \def\special@coor#1|#2|#3\@nil{% \ifx#3|\relax \mixed@coor{#1}{#2}% \else \special@@coor#1;;\@nil \fi} \def\special@@coor#1{% \ifcat#1a\relax \def\next{\node@coor#1}% \else \ifx#1[\relax \def\next{\Node@coor[}% \else \ifx#1!\relax \def\next{\raw@coor}% \else \def\next{\special@@@coor#1}% \fi \fi \fi \next} \def\special@@@coor#1;#2;#3\@nil{% \ifx#3;\relax \polar@coor{#1}{#2}% \else \cartesian@coor#1,\relax,\@nil \fi} \def\mixed@coor#1#2{% \begingroup \specialcoor@ii#1;;\@nil \let\pst@tempa\pst@coor \specialcoor@ii#2;;\@nil \xdef\pst@tempg{\pst@tempa pop \pst@coor exch pop }% \endgroup \let\pst@coor\pst@tempg} \def\polar@coor#1#2{% \pssetlength\pst@dimg{#1}% \pst@@getangle{#2}% \edef\pst@coor{\pst@number\pst@dimg \pst@angle \tx@PtoC}} \def\raw@coor#1;#2\@nil{% \edef\pst@coor{% #1 \pst@number\psyunit mul exch \pst@number\psxunit mul exch }} \def\node@coor#1\@nil{% \@pstrickserr{You must load `pst-node.tex' to use node coordinates.}\@ehps \def\pst@coor{0 0 }} \def\Node@coor{\node@coor} \def\special@angle#1#2)#3\@nil{% \ifx#1!\relax \edef\pst@angle{#2 \pst@angleunit}% \else \ifx#1(\relax \pst@@getcoor{#2}% \edef\pst@angle{\pst@coor exch \tx@Atan}% \else \pst@checknum{#1#2}\pst@angle \edef\pst@angle{\pst@angle \pst@angleunit}% \fi \fi} \def\Cartesian{% \def\cartesian@coor##1,##2,##3\@nil{% \pssetxlength\pst@dimg{##1}% \pssetylength\pst@dimh{##2}% \edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}}% \@ifnextchar({\Cartesian@}{}} \def\Cartesian@(#1,#2){% \pssetxlength\psxunit{#1}% \pssetylength\psyunit{#2}% \ignorespaces} \def\Polar{% \def\psput@cartesian{\psput@special}% \def\cartesian@coor##1,##2,##3\@nil{\polar@coor{##1}{##2}}}% \def\psset@origin#1{% \pst@@getcoor{#1}% \edef\psk@origin{\pst@coor \tx@NET }} \def\psk@origin{} \newif\ifswapaxes \def\psset@swapaxes#1{% \@nameuse{@pst#1}% \if@pst \def\psk@swapaxes{-90 rotate -1 1 scale }% \else \def\psk@swapaxes{}% \fi} \psset@swapaxes{false} \newif\ifshowpoints \def\psset@showpoints#1{\@nameuse{showpoints#1}} \psset@showpoints{false} \let\pst@setrepeatarrowsflag\relax \def\psset@border#1{% \pst@getlength{#1}\psk@border \pst@setrepeatarrowsflag} \psset@border{0pt} \def\psset@bordercolor#1{\pst@getcolor{#1}\psbordercolor} \psset@bordercolor{white} \newif\ifpsdoubleline \def\psset@doubleline#1{% \@nameuse{psdoubleline#1}% \pst@setrepeatarrowsflag} \psset@doubleline{false} \def\psset@doublesep#1{\def\psdoublesep{#1}} \psset@doublesep{1.25\pslinewidth} \def\psset@doublecolor#1{\pst@getcolor{#1}\psdoublecolor} \psset@doublecolor{white} \newif\ifpsshadow \def\psset@shadow#1{% \@nameuse{psshadow#1}% \pst@setrepeatarrowsflag} \psset@shadow{false} \def\psset@shadowsize#1{\pst@getlength{#1}\psk@shadowsize} \psset@shadowsize{3pt} \def\psset@shadowangle#1{\pst@getangle{#1}\psk@shadowangle} \psset@shadowangle{-45} \def\psset@shadowcolor#1{\pst@getcolor{#1}\psshadowcolor} \psset@shadowcolor{darkgray} \def\pst@repeatarrowsflag{\z@} \def\pst@setrepeatarrowsflag{% \edef\pst@repeatarrowsflag{% \ifdim\psk@border\p@>\z@ 1\else\ifpsdoubleline 1\else \ifpsshadow 1\else \z@\fi\fi\fi}} \def\psls@none{} \newdimen\pslinewidth \def\psset@linewidth#1{\pssetlength\pslinewidth{#1}} \psset@linewidth{.8pt} \def\psset@linecolor#1{\pst@getcolor{#1}\pslinecolor} \psset@linecolor{black} \def\psls@solid{0 setlinecap stroke } \def\psset@dash#1{% \pst@expandafter\psset@@dash{#1} * * *\@nil \edef\psk@dash{\pst@number\pst@dimg \pst@number\pst@dimh}} \def\psset@@dash#1 #2 #3\@nil{% \pssetlength\pst@dimg{#1}% \pssetlength\pst@dimh{#2}} \psset@dash{5pt 3pt} \def\psls@dashed{\psk@dash \pst@linetype\space \tx@DashLine} \def\tx@DashLine{DashLine } \def\psset@dotsep#1{\pst@getlength{#1}\psk@dotsep} \psset@dotsep{3pt} \def\psls@dotted{\psk@dotsep \pst@linetype\space \tx@DotLine}% \def\tx@DotLine{DotLine } \def\psset@linestyle#1{% \@ifundefined{psls@#1}% {\@pstrickserr{Line style `#1' not defined}\@eha}% {\edef\pslinestyle{#1}}} \psset@linestyle{solid} \def\psfs@none{} \def\psset@fillcolor#1{\pst@getcolor{#1}\psfillcolor} \psset@fillcolor{white} \def\psfs@solid{\pst@usecolor\psfillcolor fill } \def\psset@hatchwidth#1{\pst@getlength{#1}\psk@hatchwidth} \psset@hatchwidth{.8pt} \def\psset@hatchsep#1{\pst@getlength{#1}\psk@hatchsep} \psset@hatchsep{4pt} \def\psset@hatchcolor#1{\pst@getcolor{#1}\pshatchcolor} \psset@hatchcolor{black} \def\psset@hatchangle#1{\pst@getangle{#1}\psk@hatchangle} \psset@hatchangle{45} \def\psfs@hlines{% \psk@hatchangle rotate \psk@hatchwidth SLW \pst@usecolor\pshatchcolor \psk@hatchsep \tx@LineFill} \@namedef{psfs@hlines*}{gsave \psfs@solid grestore \psfs@hlines} \def\tx@LineFill{LineFill } \def\tx@LineFill{LineFill } \def\psfs@vlines{% 90 rotate \psfs@hlines} \@namedef{psfs@vlines*}{gsave \psfs@solid grestore \psfs@vlines} \def\psfs@crosshatch{gsave \psfs@hlines grestore \psfs@vlines} \@namedef{psfs@crosshatch*}{% gsave \psfs@solid grestore gsave \psfs@hlines grestore \psfs@vlines} \def\psset@fillstyle#1{% \@ifundefined{psfs@#1}% {\@pstrickserr{Undefined fill style: `#1'}\@eha}% {\edef\psfillstyle{#1}}} \psset@fillstyle{none} \def\psset@arrows#1{% \begingroup \pst@activearrows \xdef\pst@tempg{#1}% \endgroup \expandafter\psset@@arrows\pst@tempg\@empty-\@empty\@nil \if@pst\else \@pstrickserr{Bad arrows specification: #1}\@ehpa \fi} \def\psset@@arrows#1-#2\@empty#3\@nil{% \@psttrue \def\next##1,#1-##2,##3\@nil{\def\pst@tempg{##2}}% \expandafter\next\pst@arrowtable,#1-#1,\@nil \@ifundefined{psas@\pst@tempg}% {\@pstfalse\def\psk@arrowA{}}% {\let\psk@arrowA\pst@tempg}% \@ifundefined{psas@#2}% {\@pstfalse\def\psk@arrowB{}}% {\def\psk@arrowB{#2}}} \def\psk@arrowA{} \def\psk@arrowB{} \def\pst@arrowtable{,<->,<<->>,>-<,>>-<<,(-),[-]} \begingroup \catcode`\<=13 \catcode`\>=13 \catcode`\|=13 \gdef\pst@activearrows{\def<{\string<}\def>{\string>}\def|{\string|}} \endgroup \def\tx@BeginArrow{BeginArrow } \def\tx@EndArrow{EndArrow } \def\psset@arrowscale#1{\pst@getscale{#1}\psk@arrowscale} \psset@arrowscale{1} \def\psset@arrowsize#1{% \pst@expandafter\pst@getdimnum{#1} {} {} {}\@nil \edef\psk@arrowsize{\pst@number\pst@dimg \pst@tempg}} \psset@arrowsize{2pt 3} \def\psset@arrowlength#1{\pst@checknum{#1}\psk@arrowlength} \psset@arrowlength{1.4} \def\psset@arrowinset#1{\pst@checknum{#1}\psk@arrowinset}% \psset@arrowinset{.4} \def\tx@Arrow{Arrow } \@namedef{psas@>}{% false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow} \@namedef{psas@>>}{% false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow 0 h T gsave newpath false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow CP grestore CP newpath moveto 2 copy L stroke moveto} \@namedef{psas@<}{% true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow} \@namedef{psas@<<}{% true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow CP newpath moveto 0 a neg L stroke 0 h neg T false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow} \def\psset@tbarsize#1{% \pst@expandafter\pst@getdimnum{#1} {} {} {}\@nil \edef\psk@tbarsize{\pst@number\pst@dimg \pst@tempg}} \psset@tbarsize{2pt 5} \def\tx@Tbar{Tbar } \@namedef{psas@|}{\psk@tbarsize \tx@Tbar} \@namedef{psas@|*}{0 CLW -2 div T \psk@tbarsize \tx@Tbar} \def\psset@bracketlength#1{\pst@checknum{#1}\psk@bracketlength} \psset@bracketlength{.15} \def\tx@Bracket{Bracket } \@namedef{psas@]}{\psk@bracketlength \psk@tbarsize \tx@Bracket} \def\psset@rbracketlength#1{\pst@checknum{#1}\psk@rbracketlength} \psset@rbracketlength{.15} \def\tx@RoundBracket{RoundBracket } \@namedef{psas@)}{\psk@rbracketlength \psk@tbarsize \tx@RoundBracket} \def\psas@c{1 \psas@@c} \def\psas@cc{0 CLW 2 div T 1 \psas@@c} \def\psas@C{2 \psas@@c} \def\psas@@c{% setlinecap 0 0 moveto 0 CLW 2 div L stroke 0 0 moveto} \def\psas@{} \psset@arrows{-} \def\pst@par{} \def\addto@par#1{% \ifx\pst@par\@empty \def\pst@par{#1}% \else \expandafter\def\expandafter\pst@par\expandafter{\pst@par,#1}% \fi} \def\use@par{% \ifx\pst@par\@empty\else \expandafter\@psset\pst@par,\@nil \def\pst@par{}% \fi} \def\pst@object#1{% \pst@ifstar{\@ifnextchar[{\pst@@object{#1}}{\@nameuse{#1@i}}}} \def\pst@@object#1[#2]{% \addto@par{#2}\@ifnextchar+{\@nameuse{#1@i}}{\@nameuse{#1@i}}} \def\newpsobject#1#2#3{% \@ifundefined{#2@i}% {\@pstrickserr{Graphics object `#2' not defined}\@eha}% {\@namedef{#1}{\def\pst@par{#3}\pst@object{#2}}}\ignorespaces} \def\pst@getarrows#1{\@ifnextchar({#1}{\pst@@getarrows{#1}}} \def\pst@@getarrows#1#2{\addto@par{arrows=#2}#1} \def\begin@ClosedObj{% \leavevmode \pst@killglue \begingroup \use@par \solid@star \ifpsdoubleline \pst@setdoublesep \fi \init@pscode} \def\end@ClosedObj{% \ifpsshadow \pst@closedshadow \fi \ifdim\psk@border\p@>\z@ \pst@addborder \fi \pst@fill \pst@stroke \ifpsdoubleline \pst@doublestroke \fi \ifshowpoints \addto@pscode{Points aload length 2 div cvi /N ED \psdots@iii}% \fi \use@pscode \endgroup \ignorespaces} \def\begin@OpenObj{% \begin@ClosedObj \let\pst@linetype\pst@arrowtype \pst@addarrowdef} \def\begin@AltOpenObj{% \begin@ClosedObj \def\pst@repeatarrowsflag{\z@}% \def\pst@linetype{0}} \def\end@OpenObj{% \ifpsshadow \pst@openshadow \fi \ifdim\psk@border\p@>\z@ \pst@addborder \fi \pst@fill \pst@stroke \ifpsdoubleline \pst@doublestroke \fi \ifnum\pst@repeatarrowsflag>\z@ \pst@repeatarrows \fi \ifshowpoints \pst@OpenShowPoints \fi \use@pscode \endgroup \ignorespaces} \def\begin@SpecialObj{% \leavevmode \pst@killglue \begingroup \use@par \init@pscode} \def\end@SpecialObj{% \use@pscode \endgroup \ignorespaces} \def\pst@code{}% \def\init@pscode{% \addto@pscode{% \pst@number\pslinewidth SLW \pst@usecolor\pslinecolor}} \def\addto@pscode#1{\xdef\pst@code{\pst@code#1\space}} \def\use@pscode{% \pstverb{% \pst@dict \tx@STP newpath \psk@origin \psk@swapaxes \pst@code end}% \gdef\pst@code{}} \def\KillGlue{% \def\pst@killglue{\unskip\ifdim\lastskip>\z@\expandafter\pst@killglue\fi}} \def\DontKillGlue{\let\pst@killglue\relax} \DontKillGlue \def\solid@star{% \if@star \pslinewidth=\z@ \psdoublelinefalse \def\pslinestyle{none}% \def\psfillstyle{solid}% \let\psfillcolor\pslinecolor \fi} \def\pst@setdoublesep{% \pst@getlength\psdoublesep\psdoublesep \pslinewidth=2\pslinewidth \advance\pslinewidth\psdoublesep\p@ \let\pst@setdoublesep\relax} \def\tx@Shadow{Shadow } \def\pst@closedshadow{% \addto@pscode{% gsave \psk@shadowsize \psk@shadowangle \tx@PtoC \tx@Shadow \pst@usecolor\psshadowcolor gsave fill grestore stroke grestore gsave \pst@usecolor\psfillcolor gsave fill grestore stroke grestore}} \def\pst@openshadow{% \addto@pscode{% gsave \psk@shadowsize \psk@shadowangle \tx@PtoC \tx@Shadow \pst@usecolor\psshadowcolor \ifx\psfillstyle\@none\else gsave fill grestore \fi stroke}% \pst@repeatarrows \addto@pscode{grestore} \ifx\psfillstyle\@none\else \addto@pscode{% gsave \pst@usecolor\psfillcolor gsave fill grestore stroke grestore} \fi} \def\pst@addborder{% \addto@pscode{% gsave \psk@border 2 mul CLW add SLW \pst@usecolor\psbordercolor stroke grestore}} \def\pst@stroke{% \ifx\pslinestyle\@none\else \addto@pscode{% gsave \pst@number\pslinewidth SLW \pst@usecolor\pslinecolor \@nameuse{psls@\pslinestyle} grestore}% \fi} \def\pst@fill{% \ifx\psfillstyle\@none\else \addto@pscode{gsave \@nameuse{psfs@\psfillstyle} grestore}% \fi} \def\pst@doublestroke{% \addto@pscode{% gsave \psdoublesep SLW \pst@usecolor\psdoublecolor stroke grestore}} \def\pst@arrowtype{% \ifx\psk@arrowB\@empty 0 \else -2 \fi \ifx\psk@arrowA\@empty 0 \else -1 \fi add} \def\pst@addarrowdef{% \addto@pscode{% /ArrowA { \ifx\psk@arrowA\@empty \pst@oplineto \else \pst@arrowdef{A} moveto \fi } def /ArrowB { \ifx\psk@arrowB\@empty \else \pst@arrowdef{B} \fi } def}} \def\pst@arrowdef#1{% \ifnum\pst@repeatarrowsflag>\z@ /Arrow#1c [ 6 2 roll ] cvx def Arrow#1c \fi \tx@BeginArrow \psk@arrowscale \@nameuse{psas@\@nameuse{psk@arrow#1}} \tx@EndArrow} \def\pst@repeatarrows{% \addto@pscode{% gsave \ifx\psk@arrowA\@empty\else ArrowAc ArrowA pop pop \fi \ifx\psk@arrowB\@empty\else ArrowBc ArrowB pop pop pop pop \fi grestore}} \def\pst@OpenShowPoints{% \addto@pscode{% gsave \psk@dotsize \@nameuse{psds@\psk@dotstyle} /TheDot { gsave T \psk@dotangle \psk@dotscale Dot grestore } def newpath Points aload length 2 div 2 sub cvi /N ED N 0 ge { \ifx\psk@arrowA\@empty TheDot \else pop pop \fi N { TheDot } repeat \ifx\psk@arrowB\@empty TheDot \else pop pop \fi } { N 2 mul { pop } repeat } ifelse grestore}} \def\pscustom{\def\pst@par{}\pst@object{pscustom}} \long\def\pscustom@i#1{% \begin@SpecialObj \solid@star \let\pst@ifcustom\iftrue \let\begin@ClosedObj\begin@CustomObj \let\end@ClosedObj\endgroup \def\begin@OpenObj{\begin@CustomObj\pst@addarrowdef}% \let\end@OpenObj\endgroup \let\begin@AltOpenObj\begin@CustomObj \def\begin@SpecialObj{% \begingroup \pst@misplaced{special graphics object}% \def\addto@pscode####1{} \let\end@SpecialObj\endgroup}% \def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}% \def\psclip##1{\pst@misplaced\psclip}% \def\pst@repeatarrowsflag{\z@}% \let\pst@setrepeatarrowsflag\relax \showpointsfalse \let\showpointstrue\relax \def\pst@linetype{\pslinetype}% \let\psset@liftpen\psset@@liftpen \psset@liftpen{\z@}% \def\pst@cp{/currentpoint load stopped pop }% \def\pst@oplineto{/lineto load stopped { moveto } if }% \def\pst@optcp##1##2{% \ifnum##1=\z@\def##2{/currentpoint load stopped { 0 0 } if }\fi}% \let\caddto@pscode\addto@pscode \def\cuse@par##1{{\use@par##1}}% \the\pst@customdefs \setbox\pst@hbox=\hbox{#1}% \pst@fill \pst@stroke \end@SpecialObj} \def\begin@CustomObj{% \begingroup \use@par \addto@pscode{% \pst@number\pslinewidth SLW \pst@usecolor\pslinecolor}} \def\pst@oplineto{moveto } \def\pst@cp{} \def\pst@optcp#1#2{} \def\psset@liftpen#1{} \def\psset@@liftpen#1{% \ifcase#1\relax \def\psk@liftpen{\z@}% \def\pst@cp{/currentpoint load stopped pop }% \def\pst@oplineto{/lineto load stopped { moveto } if }% \or \def\psk@liftpen{1}% \def\pst@cp{}% \def\pst@oplineto{/lineto load stopped { moveto } if }% \or \def\psk@liftpen{2}% \def\pst@cp{}% \def\pst@oplineto{moveto }% \fi} \psset@liftpen{0} \def\psk@liftpen{-1} \def\psset@linetype#1{% \pst@getint{#1}\pslinetype \ifnum\pst@dimg<-3 \@pstrickserr{linetype must be greater than -3}\@ehpa \def\pslinetype{0}% \fi} \psset@linetype{0} \def\caddto@pscode#1{% \@pstrickserr{Command can only be used in \string\pscustom}\@ehpa} \let\cuse@par\caddto@pscode \def\tx@MSave{% /msavemtrx [ tx@Dict /msavemtrx known { msavemtrx aload pop } if CM ] def } \def\tx@MRestore{% tx@Dict /msavemtrx known { length 0 gt } { false } ifelse { /msavematrx [ msavematrx aload pop setmatrix ] def } if } \newtoks\pst@customdefs \pst@customdefs{% \def\newpath{\addto@pscode{newpath}}% \def\moveto(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}% \def\closepath{\addto@pscode{closepath}}% \def\gsave{\begingroup\addto@pscode{gsave}}% \def\grestore{\endgroup\addto@pscode{grestore}}% \def\translate(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}% \def\rotate#1{\pst@@getangle{#1}\addto@pscode{\pst@angle rotate}}% \def\scale#1{\pst@getscale{#1}\pst@tempg\addto@pscode{\pst@tempg}}% \def\msave{\addto@pscode{\tx@MSave}}% \def\mrestore{\addto@pscode{\tx@MRestore}}% \def\swapaxes{\addto@pscode{-90 rotate -1 1 scale}}% \def\stroke{\def\pst@par{}\pst@object{stroke}}% \def\fill{\def\pst@par{}\pst@object{fill}}% \def\openshadow{\def\pst@par{}\pst@object{openshadow}}% \def\closedshadow{\def\pst@par{}\pst@object{closedshadow}}% \def\movepath(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor tx@Shadow}}% \def\lineto{\pst@onecoor{lineto}}% \def\rlineto{\pst@onecoor{rlineto}}% \def\curveto{\pst@threecoor{curveto}}% \def\rcurveto{\pst@threecoor{rcurveto}}% \def\code#1{\addto@pscode{#1}}% \def\coor(#1){\pst@@getcoor{#1}\addto@pscode\pst@coor\@ifnextchar({\coor}{}}% \def\rcoor{\pst@getcoors{}{}}% \def\dim#1{\pssetlength\pst@dimg{#1}\addto@pscode{\pst@number\pst@dimg}}% \def\setcolor#1{% \@ifundefined{color@#1}{}{\addto@pscode{\use@color{#1}}}}% \def\arrows#1{{\psset@arrows{#1}\pst@addarrowdef}}% \let\file\pst@rawfile } % END \pst@customdefs \def\closedshadow@i{\cuse@par\pst@closedshadow} \def\openshadow@i{\cuse@par\pst@openshadow} \def\stroke@i{\cuse@par\pst@stroke}% \def\fill@i{\cuse@par\pst@fill}% \def\pst@onecoor#1(#2){% \pst@@getcoor{#2}% \addto@pscode{\pst@coor #1}} \def\pst@threecoor#1(#2)#3(#4)#5(#6){% \begingroup \pst@getcoor{#2}\pst@tempa \pst@getcoor{#4}\pst@tempb \pst@getcoor{#6}\pst@tembc \addto@pscode{\pst@tempa \pst@tempb \pst@tempc #1}% \endgroup} \def\pst@rawfile#1{% \begingroup \def\do##1{\catcode`##1=12\relax}" \dospecials \catcode`\%=14 \pst@@rawfile{#1}% \endgroup} \def\pst@@rawfile#1{% \immediate\openin1 #1 \ifeof1 \@pstrickserr{File `#1' not found}\@ehpa \else \immediate\read1 to \pst@tempg \loop \ifeof1 \@pstfalse\else\@psttrue\fi \if@pst \addto@pscode\pst@tempg \immediate\read1 to \pst@tempg \repeat \fi \immediate\closein1\relax} \def\tx@SD{SD } \def\tx@SQ{SQ } \def\tx@ST{ST } \def\tx@SP{SP } \@namedef{psds@*}{/Dot { 0 0 DS \tx@SD } def} \@namedef{psds@o}{% /r2 DS CLW sub def /Dot { 0 0 DS \tx@SD \pst@usecolor\psfillcolor 0 0 r2 \tx@SD } def} \@namedef{psds@square*}{% /r1 DS .886 mul def /Dot { r1 \tx@SQ } def} \@namedef{psds@square}{% /r1 DS .886 mul def /r2 r1 CLW sub def /Dot { r1 \tx@SQ \pst@usecolor\psfillcolor r2 \tx@SQ } def} \@namedef{psds@triangle*}{% /y1 DS .778 mul neg def /x1 y1 1.732 mul neg def /Dot { x1 y1 \tx@ST } def} \@namedef{psds@triangle}{% /y1 DS .778 mul neg def /x1 y1 1.732 mul neg def /y2 y1 CLW add def /x2 y2 1.732 mul neg def /Dot { x1 y1 \tx@ST \pst@usecolor\psfillcolor x2 y2 \tx@ST } def} \@namedef{psds@pentagon*}{% /r1 DS 1.149 mul def /Dot { r1 \tx@SP } def} \@namedef{psds@pentagon}{% DS .93 mul dup 1.236 mul /r1 ED CLW sub 1.236 mul /r2 ED /Dot { r1 \tx@SP \pst@usecolor\psfillcolor r2 \tx@SP } def} \@namedef{psds@+}{% /DS DS 1.253 mul def /Dot { DS 0 moveto DS neg 0 L stroke 0 DS moveto 0 DS neg L stroke } def} \@namedef{psds@|}{% \psk@tbarsize CLW mul add 2 div /DS ED /Dot { 0 DS moveto 0 DS neg L stroke } def} \def\psset@dotstyle#1{% \@ifundefined{psds@#1}% {\@pstrickserr{Dot style `#1' not defined}\@eha}% {\edef\psk@dotstyle{#1}}} \psset@dotstyle{*} \def\tx@NArray{NArray } \def\tx@NArray{NArray } \def\tx@Line{Line } \def\tx@Arcto{Arcto } \def\tx@CheckClosed{CheckClosed } \def\tx@Polygon{Polygon } \def\tx@CCA{CCA } \def\tx@CCA{CCA } \def\tx@CC{CC } \def\tx@IC{IC } \def\tx@BOC{BOC } \def\tx@NC{NC } \def\tx@EOC{EOC } \def\tx@BAC{BAC } \def\tx@NAC{NAC } \def\tx@EAC{EAC } \def\tx@OpenCurve{OpenCurve } \def\tx@AltCurve{AltCurve } \def\tx@ClosedCurve{ClosedCurve } \def\psset@curvature#1{% \edef\pst@tempg{#1 }% \expandafter\psset@@curvature\pst@tempg * * * \@nil} \def\psset@@curvature#1 #2 #3 #4\@nil{% \pst@checknum{#1}\pst@tempg \pst@checknum{#2}\pst@temph \pst@checknum{#3}\pst@tempi \edef\psk@curvature{\pst@tempg \pst@temph \pst@tempi}} \psset@curvature{1 .1 0} \def\pscurve{\def\pst@par{}\pst@object{pscurve}} \def\pscurve@i{% \pst@getarrows{% \begin@OpenObj \pst@getcoors[\pscurve@ii}} \def\pscurve@ii{% \addto@pscode{% \pst@cp \psk@curvature\space /c ED /b ED /a ED \ifshowpoints true \else false \fi \tx@OpenCurve}% \end@OpenObj} \def\psecurve{\def\pst@par{}\pst@object{psecurve}} \def\psecurve@i{% \pst@getarrows{% \begin@OpenObj \pst@getcoors[\psecurve@ii}} \def\psecurve@ii{% \addto@pscode{% \psk@curvature\space /c ED /b ED /a ED \ifshowpoints true \else false \fi \tx@AltCurve}% \end@OpenObj} \def\psccurve{\def\pst@par{}\pst@object{psccurve}} \def\psccurve@i{% \begin@ClosedObj \pst@getcoors[\psccurve@ii} \def\psccurve@ii{% \addto@pscode{% \psk@curvature\space /c ED /b ED /a ED \ifshowpoints true \else false \fi \tx@ClosedCurve}% \def\pst@linetype{1}% \end@ClosedObj} \def\psset@dotsize#1{% \edef\pst@tempg{#1 }% \expandafter\psset@@dotsize\pst@tempg -1 -1 -1\@nil} \def\psset@@dotsize#1 #2 #3\@nil{% \pst@checknum{#2}\pst@tempg \pssetlength\pst@dimg{#1}% \edef\psk@dotsize{% /DS \pst@number\pst@dimg \pst@tempg CLW mul add 2 div def }} \psset@dotsize{.5pt 2.5} \def\psset@dotscale#1{\pst@getscale{#1}\psk@dotscale} \psset@dotscale{1} \def\pst@Getangle#1#2{% \pst@getangle{#1}\pst@tempg \def\pst@temph{0. }% \ifx\pst@tempg\pst@temph \def#2{}% \else \edef#2{\pst@tempg\space rotate }% \fi} \def\psset@dotangle#1{\pst@Getangle{#1}\psk@dotangle} \psset@dotangle{0} \def\psdots{\def\pst@par{}\pst@object{psdots}} \def\psdots@i{% \begin@SpecialObj \pst@getcoors[\psdots@ii} \def\psdots@ii{% \addto@pscode{false \tx@NArray \psdots@iii}% \end@SpecialObj} \def\psdots@iii{% \psk@dotsize \@nameuse{psds@\psk@dotstyle} newpath n { gsave T \psk@dotangle \psk@dotscale Dot grestore } repeat} \def\tx@EndDot{EndDot } \def\psas@oo{{\pst@usecolor\psfillcolor true} true \psk@dotsize \tx@EndDot} \def\psas@o{{\pst@usecolor\psfillcolor true} false \psk@dotsize \tx@EndDot} \@namedef{psas@**}{{false} true \psk@dotsize \tx@EndDot} \@namedef{psas@*}{{false} false \psk@dotsize \tx@EndDot} \newdimen\pslinearc \def\psset@linearc#1{\pssetlength\pslinearc{#1}} \psset@linearc{0pt} \def\psline{\def\pst@par{}\pst@object{psline}} \def\psline@i{% \pst@getarrows{% \begin@OpenObj \pst@getcoors[\psline@ii}} \def\psline@ii{% \addto@pscode{\pst@cp \psline@iii \tx@Line}% \end@OpenObj} \def\psline@iii{% \ifdim\pslinearc>\z@ /r \pst@number\pslinearc def /Lineto { \tx@Arcto } def \else /Lineto /lineto load def \fi \ifshowpoints true \else false \fi} \def\qline(#1)(#2){% \def\pst@par{}% \begin@SpecialObj \def\pst@linetype{0}% \pst@getcoor{#1}\pst@tempa \pst@@getcoor{#2}% \addto@pscode{% \pst@tempa moveto \pst@coor L \@nameuse{psls@\pslinestyle}}% \end@SpecialObj} \def\pspolygon{\def\pst@par{}\pst@object{pspolygon}} \def\pspolygon@i{% \begin@ClosedObj \def\pst@cp{}% \pst@getcoors[\pspolygon@ii} \def\pspolygon@ii{% \addto@pscode{\psline@iii \tx@Polygon}% \def\pst@linetype{1}% \end@ClosedObj} \def\psset@framearc#1{\pst@checknum{#1}\psk@framearc} \psset@framearc{0} \def\psset@cornersize#1{% \pst@expandafter\psset@@cornersize{#1}\@nil} \def\psset@@cornersize#1#2\@nil{% \if #1a\relax \def\psk@cornersize{\pst@number\pslinearc false }% \else \def\psk@cornersize{\psk@framearc true }% \fi} \psset@cornersize{relative} \def\tx@Rect{Rect } \def\tx@OvalFrame{OvalFrame } \def\tx@Frame{Frame } \def\psset@dimen#1{% \pst@expandafter\psset@@dimen{#1}\@nil} \def\psset@@dimen#1#2\@nil{% \if #1o\relax \def\psk@dimen{.5 }% \else \if #1m\relax \def\psk@dimen{0 }% \else \if #1i\relax \def\psk@dimen{-.5 }% \fi \fi \fi} \psset@dimen{outer} \def\psframe{\def\pst@par{}\pst@object{psframe}} \def\psframe@i(#1){% \@ifnextchar({\psframe@ii(#1)}{\psframe@ii(0,0)(#1)}} \def\psframe@ii(#1)(#2){% \begin@ClosedObj \pst@getcoor{#1}\pst@tempa \pst@@getcoor{#2}% \addto@pscode{\psk@cornersize \pst@tempa \pst@coor \psk@dimen \tx@Frame}% \def\pst@linetype{2}% \showpointsfalse \end@ClosedObj} \def\psbezier{\def\pst@par{}\pst@object{psbezier}} \def\psbezier@i{\pst@getarrows\psbezier@ii} \def\psbezier@ii#1(#2)#3(#4)#5(#6){% \@ifnextchar({\psbezier@iii{1}(#2)(#4)(#6)}% {\psbezier@iii{\z@}(0,0)(#2)(#4)(#6)}} \def\psbezier@iii#1(#2)(#3)(#4)(#5){% \begin@OpenObj \pst@getcoor{#2}\pst@tempa \pst@getcoor{#3}\pst@tempb \pst@getcoor{#4}\pst@tempc \pst@getcoor{#5}\pst@tempd \pst@optcp{#1}\pst@tempa \ifshowpoints\psbezier@iv\fi \addto@pscode{ \pst@tempb \pst@tempa ArrowA \pst@tempc \pst@tempd ArrowB curveto}% \end@OpenObj} \def\psbezier@iv{% \addto@pscode{% gsave \pst@tempa \pst@tempb \pst@tempc \pst@tempd newpath moveto L L L CLW 2 div SLW [ \psk@dash\space ] 0 setdash stroke grestore /Points [\pst@tempa\pst@tempb\pst@tempc\pst@tempd] def}} \def\tx@Parab{Parab } \def\parabola{\def\pst@par{}\pst@object{parabola}} \def\parabola@i{\pst@getarrows\parabola@ii} \def\parabola@ii#1(#2)#3(#4){% \begin@OpenObj \pst@getcoor{#2}\pst@tempa \pst@@getcoor{#4}% \addto@pscode{\pst@tempa \pst@coor \tx@Parab}% \end@OpenObj} \def\psset@gridwidth#1{\pst@getlength{#1}\psk@gridwidth} \psset@gridwidth{.8pt} \def\psset@griddots#1{% \pst@cntg=#1\relax \edef\psk@griddots{\the\pst@cntg}} \psset@griddots{0} \def\psset@gridcolor#1{\pst@getcolor{#1}\psgridcolor} \psset@gridcolor{black} \def\psset@subgridwidth#1{\pst@getlength{#1}\psk@subgridwidth} \psset@subgridwidth{.4pt} \def\psset@subgridcolor#1{\pst@getcolor{#1}\pssubgridcolor} \psset@subgridcolor{gray} \def\psset@subgriddots#1{% \pst@cntg=#1\relax\edef\psk@subgriddots{\the\pst@cntg}} \psset@subgriddots{0} \def\psset@subgriddiv#1{% \pst@cntg=#1\relax\edef\psk@subgriddiv{\the\pst@cntg}} \psset@subgriddiv{5} \def\psset@gridlabels#1{\pst@getlength{#1}\psk@gridlabels} \psset@gridlabels{10pt} \def\psset@gridlabelcolor#1{\pst@getcolor{#1}\psgridlabelcolor} \psset@gridlabelcolor{black} \def\tx@Grid{Grid } \def\psgrid{\def\pst@par{}\pst@object{psgrid}} \def\psgrid@i{\@ifnextchar(% {\psgrid@ii}{\expandafter\psgrid@iv\pic@coor}} \def\psgrid@ii(#1){\@ifnextchar(% {\psgrid@iii(#1)}{\psgrid@iv(0,0)(0,0)(#1)}} \def\psgrid@iii(#1)(#2){\@ifnextchar(% {\psgrid@iv(#1)(#2)}{\psgrid@iv(#1)(#1)(#2)}} \def\psgrid@iv(#1)(#2)(#3){% \begin@SpecialObj \pst@getcoor{#1}\pst@tempa \pst@getcoor{#2}\pst@tempb \pst@@getcoor{#3}% \ifnum\psk@subgriddiv>1 \addto@pscode{gsave \psk@subgridwidth SLW \pst@usecolor\pssubgridcolor \pst@tempb \pst@coor \pst@tempa \pst@number\psxunit \pst@number\psyunit \psk@subgriddiv\space \psk@subgriddots\space {} 0 \tx@Grid grestore}% \fi \addto@pscode{gsave \psk@gridwidth SLW \pst@usecolor\psgridcolor \pst@tempb \pst@coor \pst@tempa \pst@number\psxunit \pst@number\psyunit 1 \psk@griddots\space { \pst@usecolor\psgridlabelcolor } \psk@gridlabels \tx@Grid grestore}% \end@SpecialObj} \newif\ifpsmathbox \psmathboxtrue \def\pst@mathflag{\z@} \newtoks\everypsbox \long\def\pst@makenotverbbox#1#2{% \edef\pst@mathflag{% \ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}% \setbox\pst@hbox=\hbox{% \ifcase\pst@mathflag\or$\m@th\textstyle\or$\m@th\displaystyle\fi {\the\everypsbox#2}% \ifnum\pst@mathflag>\z@$\fi}% #1} \def\pst@makeverbbox#1{% \def\pst@afterbox{#1}% \edef\pst@mathflag{% \ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}% \afterassignment\pst@beginbox \setbox\pst@hbox\hbox} \def\pst@beginbox{% \ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi \bgroup\aftergroup\pst@endbox \the\everypsbox} \def\pst@endbox{% \ifnum\pst@mathflag>\z@$\fi \egroup \pst@afterbox} \def\pst@makebox{\pst@@makebox} \def\psverbboxtrue{\def\pst@@makebox{\pst@makeverbbox}} \def\psverbboxfalse{\def\pst@@makebox{\pst@makenotverbbox}} \psverbboxfalse \def\pst@longbox{% \def\pst@makebox{% \gdef\pst@makebox{\pst@@makebox}% \pst@makelongbox}} \def\pst@makelongbox#1{% \def\pst@afterbox{#1}% \edef\pst@mathflag{% \ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}% \setbox\pst@hbox\hbox\bgroup \aftergroup\pst@afterbox \ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi \begingroup \the\everypsbox} \def\pst@endlongbox{% \endgroup \ifnum\pst@mathflag>\z@$\fi \egroup} \def\pslongbox#1#2{% \@namedef{#1}{\pst@longbox#2}% \@namedef{end#1}{\pst@endlongbox}} \newdimen\psframesep \def\psset@framesep#1{\pssetlength\psframesep{#1}} \psset@framesep{3pt} \newif\ifpsboxsep \def\psset@boxsep#1{\@nameuse{psboxsep#1}} \psset@boxsep{true} \def\pst@useboxpar{% \use@par \if@star \let\pslinecolor\psfillcolor \solid@star \let\solid@star\relax \fi \ifpsdoubleline \pst@setdoublesep \fi} \def\psframebox{\def\pst@par{}\pst@object{psframebox}} \def\psframebox@i{\pst@makebox\psframebox@ii} \def\psframebox@ii{% \begingroup \pst@useboxpar \pst@dima=\pslinewidth \advance\pst@dima by \psframesep \pst@dimc=\wd\pst@hbox\advance\pst@dimc by \pst@dima \pst@dimb=\dp\pst@hbox\advance\pst@dimb by \pst@dima \pst@dimd=\ht\pst@hbox\advance\pst@dimd by \pst@dima \setbox\pst@hbox=\hbox{% \ifpsboxsep\kern\pst@dima\fi \begin@ClosedObj \addto@pscode{% \psk@cornersize \pst@number\pst@dima neg \pst@number\pst@dimb neg \pst@number\pst@dimc \pst@number\pst@dimd .5 \tx@Frame}% \def\pst@linetype{2}% \showpointsfalse \end@ClosedObj \box\pst@hbox \ifpsboxsep\kern\pst@dima\fi}% \ifpsboxsep\dp\pst@hbox=\pst@dimb\ht\pst@hbox=\pst@dimd\fi \leavevmode\box\pst@hbox \endgroup} \def\psdblframebox{\def\pst@par{}\pst@object{psdblframebox}} \def\psdblframebox@i{\addto@par{doubleline=true}\psframebox@i} \def\psclip#1{% \leavevmode \begingroup \begin@psclip \begingroup \def\use@pscode{% \pstVerb{% \pst@dict /mtrxc CM def CP CP T \tx@STV \psk@origin \psk@swapaxes newpath \pst@code clip newpath mtrxc setmatrix moveto 0 setgray end}% \gdef\pst@code{}}% \def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}% \def\nc@object##1##2##3##4{\pst@misplaced{node connection}}% \hbox to\z@{#1}% \endgroup \def\endpsclip{% \end@psclip \endgroup}% \ignorespaces} \def\endpsclip{\pst@misplaced\endpsclip} \let\begin@psclip\relax \def\end@psclip{\pstVerb{currentpoint initclip moveto}} \def\AltClipMode{% \def\end@psclip{\pstVerb{\pst@grestore}}% \def\begin@psclip{\pstVerb{gsave}}} \def\clipbox{\@ifnextchar[{\psclipbox@}{psclipbox@[\z@]}} \def\clipbox@[#1]{\pst@makebox\psclipbox@@{#1}} \def\clipbox@@#1{% \pssetlength\pst@dimg{#1}% \leavevmode\hbox{% \begin@psclip \pst@Verb{% CM \tx@STV CP T newpath /a \pst@number\pst@dimg def /w \pst@number{\wd\pst@hbox}a add def /d \pst@number{\dp\pst@hbox}a add neg def /h \pst@number{\ht\pst@hbox}a add def a neg d moveto a neg h L w h L w d L closepath clip newpath 0 0 moveto setmatrix}% \unhbox\pst@hbox \end@psclip}} \def\psshadowbox{% \def\pst@par{}\pst@object{psshadowbox}} \def\psshadowbox@i{\pst@makebox\psshadowbox@ii} \def\psshadowbox@ii{% \begingroup \pst@useboxpar \psshadowtrue \psboxseptrue \def\psk@shadowangle{-45 }% \setbox\pst@hbox=\hbox{\psframebox@ii}% \pst@dimh=\psk@shadowsize\p@ \pst@dimh=.7071\pst@dimh \pst@dimg=\dp\pst@hbox \advance\pst@dimg\pst@dimh \dp\pst@hbox=\pst@dimg \pst@dimg=\wd\pst@hbox \advance\pst@dimg\pst@dimh \wd\pst@hbox=\pst@dimg \leavevmode \box\pst@hbox \endgroup} \def\pscirclebox{\def\pst@par{}\pst@object{pscirclebox}} \def\pscirclebox@i{\pst@makebox{\pscirclebox@ii{}}} \def\pscirclebox@ii#1{% \begingroup \pst@useboxpar \setbox\pst@hbox=\hbox{#1\pscirclebox@iii\box\pst@hbox}% \ifpsboxsep \pst@dima=.5\wd\pst@hbox \pst@pyth\pst@dima\pst@dimb\pst@dimc \advance\pst@dimc\pslinewidth \advance\pst@dimc\psframesep \setbox\pst@hbox=\hbox to2\pst@dimc{% \hss \vbox{\vskip\pst@dimc\vskip-\pst@dimb\box\pst@hbox}% \hss}% \advance\pst@dimc-\pst@dimb \dp\pst@hbox=\pst@dimc \fi \leavevmode\box\pst@hbox \endgroup} \def\pscirclebox@iii{% \if@star \pslinewidth\z@ \pstverb{\pst@dict \tx@STP \pst@usecolor\psfillcolor newpath \pscirclebox@iv \tx@SD end}% \else \begin@ClosedObj \def\pst@linetype{4}\showpointsfalse \addto@pscode{% \pscirclebox@iv CLW 2 div add 0 360 arc closepath}% \end@ClosedObj \fi} \def\pscirclebox@iv{% \pst@number{\wd\pst@hbox}2 div \pst@number{\ht\pst@hbox}\pst@number{\dp\pst@hbox}add 2 div 2 copy \pst@number{\dp\pst@hbox}sub 4 2 roll \tx@Pyth \pst@number\psframesep add } \def\psovalbox{\def\pst@par{}\pst@object{psovalbox}} \def\psovalbox@i{\pst@makebox{\psovalbox@ii{}}} \def\psovalbox@ii#1{% \begingroup \pst@useboxpar \pst@dimd=.707\pslinewidth\advance\pst@dimd by 1.414\psframesep \pst@dimg=\ht\pst@hbox\advance\pst@dimg\dp\pst@hbox \pst@dimb=.707\pst@dimg\advance\pst@dimb\pst@dimd \pst@dima=.707\wd\pst@hbox\advance\pst@dima\pst@dimd \setbox\pst@hbox=\hbox{#1\psovalbox@iii\box\pst@hbox}% \ifpsboxsep \setbox\pst@hbox\hbox to 2\pst@dima{\hss\unhbox\pst@hbox\hss}% \advance\pst@dimb-.5\pst@dimg \pst@dimg\ht\pst@hbox \advance\pst@dimg\pst@dimb \ht\pst@hbox=\pst@dimb \pst@dimg=\dp\pst@hbox \advance\pst@dimg\pst@dimb \dp\pst@hbox=\pst@dimb \fi \leavevmode\box\pst@hbox \endgroup} \def\psovalbox@iii{% \begin@ClosedObj \addto@pscode{% 0 360 \pst@number\pst@dima \pst@number\pst@dimb \pst@number{\wd\pst@hbox}2 div \pst@number\pst@dimg 2 div \pst@number{\dp\pst@hbox}sub \tx@Ellipse closepath}% \def\pst@linetype{2}% \end@ClosedObj} \def\psset@arcsepA#1{\pst@getlength{#1}\psk@arcsepA} \def\psset@arcsepB#1{\pst@getlength{#1}\psk@arcsepB} \def\psset@arcsep#1{% \psset@arcsepA{#1}\let\psk@arcsepB\psk@arcsepA} \psset@arcsep{0} \def\tx@ArcArrow{ArcArrow } \def\psarc{\def\pst@par{}\pst@object{psarc}} \def\psarc@i{% \@ifnextchar({\psarc@iii}{\psarc@ii}} \def\psarc@ii#1{\addto@par{arrows=#1}% \@ifnextchar({\psarc@iii}{\psarc@iii(0,0)}} \def\psarc@iii(#1)#2#3#4{% \begin@OpenObj \pst@getangle{#3}\pst@tempa \pst@getangle{#4}\pst@tempb \pst@@getcoor{#1}% \pssetlength\pst@dima{#2}% \addto@pscode{\psarc@iv \psarc@v}% \gdef\psarc@type{0}% \showpointsfalse \end@OpenObj} \def\psarc@iv{% \pst@coor /y ED /x ED /r \pst@number\pst@dima def /c 57.2957 r \tx@Div def /angleA \pst@tempa \psk@arcsepA c mul 2 div \ifcase \psarc@type add \or sub \fi def /angleB \pst@tempb \psk@arcsepB c mul 2 div \ifcase \psarc@type sub \or add \fi def \ifshowpoints\psarc@showpoints\fi \ifx\psk@arrowA\@empty \ifnum\psk@liftpen=2 r angleA \tx@PtoC y add exch x add exch moveto \fi \fi} \def\psarc@v{% x y r angleA \ifx\psk@arrowA\@empty\else { ArrowA CP } { \ifcase\psarc@type add \or sub \fi } \tx@ArcArrow \fi angleB \ifx\psk@arrowB\@empty\else { ArrowB } { \ifcase\psarc@type sub \or add \fi } \tx@ArcArrow \fi \ifcase\psarc@type arc \or arcn \fi} \def\psarc@type{0} \def\psarc@showpoints{% gsave newpath x y moveto x y r \pst@tempa \pst@tempb \ifcase\psarc@type arc \or arcn \fi closepath CLW 2 div SLW [ \psk@dash\space ] 0 setdash stroke grestore } \def\psarcn{\def\pst@par{}\pst@object{psarcn}} \def\psarcn@i{\def\psarc@type{1}\psarc@i} \def\pscircle{\def\pst@par{}\pst@object{pscircle}} \def\pscircle@i{\@ifnextchar({\pscircle@do}{\pscircle@do(0,0)}} \def\pscircle@do(#1)#2{% \if@star {\use@par\qdisk(#1){#2}}% \else \begin@ClosedObj \pst@@getcoor{#1}% \pssetlength\pst@dimc{#2}% \def\pst@linetype{4}% \addto@pscode{% \pst@coor \pst@number\pst@dimc \psk@dimen CLW mul sub 0 360 arc closepath}% \showpointsfalse \end@ClosedObj \fi \ignorespaces} \def\qdisk(#1)#2{% \def\pst@par{}% \begin@SpecialObj \pst@@getcoor{#1}% \pssetlength\pst@dimg{#2}% \addto@pscode{\pst@coor \pst@number\pst@dimg \tx@SD}% \end@SpecialObj} \def\pswedge{\def\pst@par{}\pst@object{pswedge}} \def\pswedge@i{\@ifnextchar({\pswedge@ii}{\pswedge@ii(0,0)}} \def\pswedge@ii(#1)#2#3#4{% \begin@ClosedObj \pssetlength\pst@dimc{#2} \pst@getangle{#3}\pst@tempa \pst@getangle{#4}\pst@tempb \pst@@getcoor{#1}% \def\pst@linetype{1}% \addto@pscode{% \pst@coor 2 copy moveto \pst@number\pst@dimc \psk@dimen CLW mul sub % Adjusted radius \pst@tempa \pst@tempb arc closepath}% \showpointsfalse \end@ClosedObj} \def\tx@Ellipse{Ellipse } \def\psellipse{\def\pst@par{}\pst@object{psellipse}} \def\psellipse@i(#1){\@ifnextchar(% {\psellipse@ii(#1)}{\psellipse@ii(0,0)(#1)}} \def\psellipse@ii(#1)(#2){% \begin@ClosedObj \pst@getcoor{#1}\pst@tempa \pst@@getcoor{#2}% \addto@pscode{% 0 360 \pst@coor \ifdim\psk@dimen\p@=\z@\else \psk@dimen CLW mul dup 3 1 roll sub 3 1 roll sub exch \fi \pst@tempa \tx@Ellipse closepath}% \def\pst@linetype{2}% \end@ClosedObj} \def\multirput{% \begingroup\pst@getref{\pst@getrputrot\multirput@i}} \def\multirput@i(#1){\@ifnextchar(% {\multirput@ii(#1)}{\multirput@ii(0,0)(#1)}} \def\multirput@ii(#1,#2)(#3,#4)#5{% \pst@makebox{\multirput@iii(#1,#2)(#3,#4){#5}}} \def\multirput@iii(#1,#2)(#3,#4)#5{% \pst@makesmall\pst@hbox \ifx\pst@rot\@empty\else\pst@rotate\pst@hbox\fi \pssetxlength\pst@dima{#1}\pssetylength\pst@dimb{#2} \pssetxlength\pst@dimc{#3}\pssetylength\pst@dimd{#4} \pst@cntg=#5\relax\pst@cnth=0\relax \leavevmode \loop\ifnum\pst@cntg>\pst@cnth \vbox to \z@{\vss\hbox to \z@{% \kern\pst@dima\copy\pst@hbox\hss}\vskip\pst@dimb}% \advance\pst@dima by\pst@dimc \advance\pst@dimb by\pst@dimd \advance\pst@cnth by 1 \repeat \endgroup\ignorespaces} \def\multips{\begingroup\pst@getrputrot\multips@i} \def\multips@i(#1){\@ifnextchar({\@multips@ii(#1)}{\@multips@ii(0,0)(#1)}} \def\@multips@ii(#1)(#2)#3#4{% \pst@getcoor{#1}\pst@tempa \pst@@getcoor{#2}% \pst@cnta=#3\relax \addto@pscode{% \pst@tempa T \the\pst@cnta\space \pslbrace gsave \ifx\pst@rot\@empty\else\pst@rot rotate \fi }% \hbox to\z@{% \def\init@pscode{% \addto@pscode{% gsave \pst@number\pslinewidth SLW \pst@usecolor\pslinecolor}}% \def\use@pscode{\addto@pscode{grestore}}% \def\psclip##1{\pst@misplaced\psclip}% \def\nc@object##1##2##3##4{\pst@misplaced{node connection}}% #4}% \addto@pscode{grestore \pst@coor T \psrbrace repeat}% \leavevmode \use@pscode \endgroup \ignorespaces} \def\scalebox#1{% \begingroup \pst@getscale{#1}\pst@tempa \pst@makebox{\@scalebox}} \def\@scalebox{% \leavevmode \ifx\pst@tempa\@empty \box\pst@hbox \else \hbox{% \ht\pst@hbox=\pst@temph\ht\pst@hbox% \dp\pst@hbox=\pst@temph\dp\pst@hbox% \pst@dima=\pst@tempg\wd\pst@hbox% \ifdim\pst@dima<\z@\kern-\pst@dima\fi \pst@Verb{CP CP T \pst@tempa \tx@NET}% \hbox to \z@{\box\pst@hbox\hss}% \pst@Verb{% CP CP T 1 \pst@tempg\space div 1 \pst@temph\space div scale \tx@NET}% \ifdim\pst@dima>\z@\kern\pst@dima\fi}% \fi \endgroup} \pslongbox{Scalebox}{\scalebox} \def\scaleboxto(#1,#2){% \begingroup \pssetlength\pst@dima{#1}% \pssetlength\pst@dimb{#2}% \pst@makebox{\@scaleboxto\@scalebox}} \def\@scaleboxto{% \ifdim\pst@dima=\z@\else \pst@divide{\pst@dima}{\wd\pst@hbox}\pst@tempg \fi \ifdim\pst@dimb=\z@ \let\pst@temph\pst@tempg \else \pst@dimc=\ht\pst@hbox\advance\pst@dimc\dp\pst@hbox \pst@divide{\pst@dimb}{\pst@dimc}\pst@temph \ifdim\pst@dima=\z@\let\pst@tempg\pst@temph\fi \fi \edef\pst@tempa{\pst@tempg\space\pst@temph\space scale }% \ifdim\pst@dima=\z@ \ifdim\pst@dimb=\z@ \@pstrickserr{% \string\scaleboxto\space dimensions cannot both be zero}\@ehpa \def\pst@tempa{}% \fi\fi} \pslongbox{Scaleboxto}{\scaleboxto} \def\tx@Rot{Rot } \def\rotateleft{\pst@makebox{\@rotateleft\pst@hbox}} \def\@rotateleft#1{% \leavevmode\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1% \pst@Verb{90 \tx@Rot} \vbox to \z@{\vss\hbox to \z@{\box#1\hss}\vskip\z@}% \pst@Verb{-90 \tx@Rot}}}} \def\rotateright{\pst@makebox{\@rotateright\pst@hbox}} \def\@rotateright#1{% \hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1% \pst@Verb{-90 \tx@Rot} \vbox to \z@{\hbox to \z@{\hss\box#1}\vss}% \pst@Verb{90 \tx@Rot}}}} \def\rotatedown{\pst@makebox{\@rotatedown\pst@hbox}} \def\@rotatedown#1{% \hbox{\hskip\wd#1\vbox{\vskip\ht#1\vskip\dp#1% \pst@Verb{180 \tx@Rot}% \vbox to \z@{\hbox to \z@{\box#1\hss}\vss}% \pst@Verb{-180 \tx@Rot}}}} \pslongbox{Rotateleft}{\rotateleft} \pslongbox{Rotateright}{\rotateright} \pslongbox{Rotatedown}{\rotatedown} \def\pst@getref#1{% \@ifnextchar[% {\def\refpoint@x{.5}\def\refpoint@y{.5}\pst@@getref{#1}}% {\let\refpoint@x\relax#1}} \def\pst@@getref#1[#2]{% \pst@expandafter\pst@@@getref{#2}\@empty,,\@nil#1} \def\pst@@@getref#1#2,#3,#4\@nil{% \ifx\@empty#3\@empty \@nameuse{getref@#1}\@nameuse{getref@#2}% \else \pst@checknum{#1#2}\refpoint@x \pst@checknum{#3}\refpoint@y \fi} \def\getref@t{\def\refpoint@y{1}} \def\getref@b{\def\refpoint@y{0}} \def\getref@B{\let\refpoint@y\relax} \def\getref@l{\def\refpoint@x{0}} \def\getref@r{\def\refpoint@x{1}} \def\pst@makesmall#1{% \ifx\refpoint@x\relax \setbox#1=\hbox to\z@{\hss\vbox to \z@{\vss\box#1\vss}\hss}% \else \pst@@makesmall{#1}% \fi} \def\pst@@makesmall#1{% \pst@dimh=\refpoint@x\wd#1% \ifx\refpoint@y\relax \pst@dimg=\dp#1% \else \pst@dimg=\refpoint@y\ht#1% \advance\pst@dimg\refpoint@y\dp#1% \fi \setbox#1=\hbox to\z@{% \hskip-\pst@dimh\vbox to\z@{\vss\box#1\vskip-\pst@dimg}\hss}} \def\pst@getrputrot#1{% \@ifnextchar(% {\def\pst@rot{}#1}% {\pst@getrot{\@ifnextchar({#1}{#1(0,0)}}}} \def\pst@getrot#1#2{% \pst@expandafter{\@ifnextchar*{\pst@@@getrot}{\pst@@getrot}}{#2}\@nil \ifx\pst@rotlist\@empty\else \edef\pst@rotlist{\pst@rotlist \pst@rot add }% \fi #1} \def\pst@@getrot#1\@nil{% \def\next##1@#1=##2@##3\@nil{% \ifx\relax##2% \pst@getangle{#1}\pst@rot \else \def\pst@rot{##2}% \fi}% \expandafter\next\pst@rottable @#1=\relax @\@nil} \def\pst@@@getrot#1#2\@nil{% \pst@@getrot#2\@nil \edef\pst@rot{\pst@rotlist neg \ifx\pst@rot\@empty\else\pst@rot add \fi}}% \def\pst@rotlist{0 } \def\pst@rot{} \def\pst@rottable{% @0=% @U=% @L=90 % @D=180 % @R=-90 % @N=\pst@rotlist neg % @W=\pst@rotlist neg 90 add % @S=\pst@rotlist neg 180 add % @E=\pst@rotlist neg 90 sub } \def\pst@rotate#1{% \setbox#1=\hbox{% \pst@Verb{\pst@rot \tx@Rot}% \box#1% \pst@Verb{\pst@rot neg \tx@Rot}}} \def\psput@cartesian#1{% \hbox to \z@{\kern\pst@dimg{\vbox to \z@{\vss\box#1\vskip\pst@dimh}\hss}}} \def\psput@special#1{% \hbox{% \pst@Verb{{ \pst@coor } \tx@PutCoor \tx@PutBegin}% \box#1% \pst@Verb{\tx@PutEnd}}} \def\tx@PutCoor{PutCoor } \def\tx@PutBegin{PutBegin } \def\tx@PutEnd{PutEnd } \def\begin@psput#1{\begingroup\pst@killglue\leavevmode\pst@ifstar{#1}}% \def\end@psput#1(#2){% \pst@makebox{% \if@star \setbox\pst@hbox\hbox{\psframebox*[boxsep=false]{\unhbox\pst@hbox}}% \fi #1(#2)% \endgroup \ignorespaces}} \def\rput{\begin@psput{\pst@getref{\pst@getrputrot{\end@psput\rput@i}}}} \def\rput@i(#1){% \pst@makesmall\pst@hbox \ifx\pst@rot\@empty\else\pst@rotate\pst@hbox\fi \psput@{#1}\pst@hbox} \def\cput{\def\pst@par{}\pst@object{cput}} \def\cput@i{\begingroup\pst@killglue\leavevmode\pst@getrputrot\cput@ii} \def\cput@ii(#1){\pst@makebox{\cput@iii{}(#1)}} \def\cput@iii#1(#2){% \setbox\pst@hbox=\hbox{\psboxsepfalse\pscirclebox@ii{#1}}% \let\refpoint@x\relax \rput@i(#2)% \endgroup \ignorespaces} \newdimen\pslabelsep \def\psset@labelsep#1{\pssetlength\pslabelsep{#1}} \psset@labelsep{5pt} \def\pst@getrefangle#1\@nil{% \def\next##1@#1=##2"##3@##4\@nil{% \ifx\relax##2% \pst@getangle{#1}\pst@refangle \def\pst@uputref{}% \else \edef\pst@refangle{##2}% \edef\pst@uputref{##3}% \fi}% \expandafter\next\pst@refangletable @#1=\relax"@\@nil} \def\pst@refangletable{% @r=0"20% @u=90"02% @l=180"10% @d=-90"01% @ur=45"22% @ul=135"12% @dr=-135"21% @dl=-45"11} \def\uput{\begin@psput{\@ifnextchar[{\uput@ii}{\uput@i}}} \def\uput@i#1{\pssetlength\pslabelsep{#1}\uput@ii} \def\uput@ii[#1]{% \pst@expandafter\pst@getrefangle{#1}\@nil \pst@getrputrot{\end@psput\uput@iii}} \def\uput@iii(#1){% \ifx\pst@uputref\@empty \uput@iv\tx@UUput \else \ifx\pst@rot\@empty \expandafter\uput@v\pst@uputref \else \uput@iv\tx@UUput \fi \fi \psput@{#1}\pst@hbox} \def\uput@iv#1{% \edef\pst@coor{% \pst@number\pslabelsep \pst@number{\wd\pst@hbox}% \pst@number{\ht\pst@hbox}% \pst@number{\dp\pst@hbox}% \pst@refangle\space \ifx\pst@rot\@empty\else\pst@rot\space sub \fi \tx@Uput #1}% \setbox\pst@hbox=\hbox to\z@{\hss\vbox to\z@{\vss\box\pst@hbox\vss}\hss}% \setbox\pst@hbox=\psput@special\pst@hbox \ifx\pst@rot\@empty\else\pst@rotate\pst@hbox\fi} \def\uput@v#1#2{% \ifnum#1>\z@\ifnum#2>\z@\pslabelsep=.707\pslabelsep\fi\fi \setbox\pst@hbox=\vbox to\z@{% \ifnum#2=1 \vskip\pslabelsep\else\vss\fi \hbox to\z@{% \ifnum#1=2 \hskip\pslabelsep\else\hss\fi \box\pst@hbox \ifnum#1=1 \hskip\pslabelsep\else\hss\fi}% \ifnum#2=2 \vskip\pslabelsep\else\vss\fi}} \def\tx@Uput{Uput } \def\tx@UUput{UUput } \def\pst@getlabelsep#1{% \@ifnextchar[% {\def\refpoint@x{.5}\def\refpoint@y{.5}\pst@@getref{#1}}% {\pst@@getlabelsep{#1}}} \def\pst@@getlabelsep#1#2{\pssetlength\pslabelsep{#2}\pst@getref{#1}} \def\Rput{% \begin@psput{\pst@getlabelsep{\pst@getrputrot{\end@psput{\Rput@i\rput@i}}}}} \def\Rput@i{% \pst@dimg=\dp\pst@hbox \advance\pst@dimg\pslabelsep \dp\pst@hbox=\pst@dimg \pst@dimg=\ht\pst@hbox \advance\pst@dimg\pslabelsep \ht\pst@hbox=\pst@dimg \setbox\pst@hbox\hbox{\kern\pslabelsep\box\pst@hbox\kern\pslabelsep}}% \def\pspicture{\begingroup\pst@ifstar\pst@picture} \def\pst@picture{% \@ifnextchar[{\pst@@picture}{\pst@@picture[0]}} \def\pst@@picture[#1]#2(#3,#4){% \@ifnextchar({\pst@@@picture[#1](#3,#4)}% {\pst@@@picture[#1](0,0)(#3,#4)}} \def\pst@@@picture[#1](#2,#3)(#4,#5){% \pssetxlength\pst@dima{#2}\pssetylength\pst@dimb{#3}% \pssetxlength\pst@dimc{#4}\pssetylength\pst@dimd{#5}% \def\pst@tempa{#1}% \setbox\pst@hbox=\hbox\bgroup \begingroup\KillGlue \@ifundefined{@latexerr}{}{\let\unitlength\psunit}% \edef\pic@coor{(#2,#3)(#2,#3)(#4,#5)}\ignorespaces} \def\pic@coor{(0,0)(0,0)(10,10)} \def\endpspicture{% \pst@killglue \endgroup \egroup \ifdim\wd\pst@hbox=\z@\else \@pstrickserr{Extraneous space in the pspicture environment}% {Type \space \space to procede.}% \fi \ht\pst@hbox=\pst@dimd \dp\pst@hbox=-\pst@dimb \setbox\pst@hbox=\hbox{% \kern-\pst@dima \ifx\pst@tempa\@empty\else \advance\pst@dimd-\pst@dimb \pst@dimd=\pst@tempa\pst@dimd \advance\pst@dimd\pst@dimb \lower\pst@dimd \fi \box\pst@hbox \kern\pst@dimc}% \if@star\setbox\pst@hbox=\hbox{\clipbox@@\z@}\fi \leavevmode\box\pst@hbox \endgroup} \@namedef{pspicture*}{\pspicture*} \@namedef{endpspicture*}{\endpspicture} \def\tx@BeginOL{BeginOL } \pst@dimg=40in \edef\pst@OLunit{\pst@number\pst@dimg} \def\tx@InitOL{InitOL } \def\pst@initoverlay#1{\pst@Verb{\tx@InitOL /TheOL (#1) def}} \def\pst@overlay#1{% \edef\curr@overlay{#1}% \pst@Verb{(#1) BOL}% \aftergroup\pst@endoverlay} \def\pst@endoverlay{% \pst@Verb{(\curr@overlay) BOL}} \def\curr@overlay{all} \newbox\theoverlaybox \def\overlaybox{% \setbox\theoverlaybox=\hbox\bgroup \begingroup \let\psoverlay\pst@overlay \def\overlaybox{% \@pstrickserr{Overlays cannot be nested}\@eha}% \def\putoverlaybox{% \@pstrickserr{You must end the overlay box before using \string\putoverlaybox}}% \psoverlay{main}} \def\endoverlaybox{\endgroup\egroup} \def\putoverlaybox#1{% \hbox{\pst@initoverlay{#1}\copy\theoverlaybox}} \def\psoverlay{\@pstrickserr{\string\psoverlay\space can only be used after \string\overlaybox}} \ifx\pstcustomize\relax \input pstricks.con \fi \catcode`\@=\PstAtCode\relax \endinput %% %% END: pstricks.tex lifelines-3.0.61/reports/desc-tex2/README0000700002540200244210000000327510627311226020124 0ustar prappDomain Usersdesc-txt is a program to generate Descendent tree's in TeX. Written by Eric Majani, modified by Pete Glassernbury, Jim Eggert and D. Roegel. Here is a short description of the files contained in this directory: README -> this file desc-tex.ll -> version 1 of desc-tex desc-tex2.ll -> version 2 of desc-tex drsetup.tex -> general personnalisation TeX macros (don't change this file; change mysetup.tex) drtree.tex -> modified tree macros for desc-tex2 ex1.tex -> an example showing how to merge two or more trees ``by hand'' and using invisible nodes. extree1.tex -> Source of previous file. extree2.tex -> Source of previous file. mysetup.tex -> Personal setup: feel free to modify this file. poster.doc -> source documentation of the poster macros poster.tex -> Tim Van Zandt's poster macros poster1.tex -> other poster macros poster2.tex -> other poster macros pstricks.con -> pstricks configuration file (you normally don't need to change it) pstricks.pro -> prologue file for dvips (needs to be put where dvips can find it) pstricks.tex -> Tim Van Zandt's pstricks macros. setup.tex -> some TeX macros used by version 1 of desc-tex tree.tex -> original tree macros for version 1 of desc-tex -------------------------------------------------------------------------- How to make it work ? - call the desc-tex2 report from Lifelines - answer the questions - generate a file .tex - apply TeX (not LaTeX) to this file - preview it with xdvi or an other previewer - generate PostScript with dvips -------------------------------------------------------------------------- lifelines-3.0.61/reports/desc-tex2/setup.tex0000700002540200244210000000014610077366775021142 0ustar prappDomain Users\hsize=10in \vsize=7.5in \parindent=20pt \hoffset=-0.8in \voffset=-0.8in \nopagenumbers \input drtree lifelines-3.0.61/reports/desc-tex2/tree.tex0000700002540200244210000002176710077366775020755 0ustar prappDomain Users% Tree -- a macro to make aligned (horizontal) trees in TeX % % Input is of the form % \tree % item % \subtree % \leaf{item} % . % . % . % \endsubtree % \subtree % . % . % . % \endsubtree % \endsubtree % \endtree % % Nesting is to any level. \leaf is defined as a subtree of one item: % \def\leaf#1{\subtree#1\endsubtree}. % % A structure: % \subtree % item_part1 % item_part2 % . % . % . % % will print item_part2 directly below item_part1 as a single item % as if they were in a \box. % % The macro is a 3-pass macro. On the first pass it sets up a data % structure from the \subtree ... \endsubtree definitions. On the second pass % it recursively calculates the width of each level of the tree. On the third % pass it sets up the boxes, glue and rules. % % By David Eppstein, TUGboat, vol. 6 (1985), no. 1, pp. 31--35. % Transcribed by Margaret Kromer (peg), Feb., 1986. % % Pass 1 % At the end of pass 1, the tree is coded as a nested collection of \hboxes % and \vboxes. \newbox\treebox\newcount\treeboxcnt \def\tree{\message{Begin tree}\treeboxcnt=1\global\setbox\treebox=\boxtree} \def\subtree{\ettext \advance\treeboxcnt by 1 \boxtree} \def\leaf#1{\subtree#1\endsubtree} \def\endsubtree{\ettext \egroup \advance\treeboxcnt-1{}% \ifnum\treeboxcnt=-1 \treeerrora\fi} \def\endtree{\endsubtree \ifnum\treeboxcnt>0 \treeerrorb\fi% \settreesizes \typesettree \message{-- end tree}} % Error messages for unbalanced tree \def\treeerrora{\errhelp=\treeerrorahelp% \errmessage{Unbalanced tree -- too many endsubtrees}} \newhelp\treeerrorahelp{There are more subtrees closed than opened} \def\treeerrorb{\errhelp=\treeerrorbhelp% \errmessage{Unbalanced tree -- not enough endsubtrees}} \newhelp\treeerrorbhelp{Not all the subtrees of the tree are closed. If you continue, you'll get some mysterious secondary errors.} % Set up \vbox containing root of tree \newif\iftreetext\treetextfalse % Whether still aligning text \def\boxtree{\hbox\bgroup % Start outer box of tree or subtree \baselineskip 2.5ex % Narrow line spacing slightly \tabskip 0pt % No spurious glue in alignment \vbox\bgroup % Start inner text \vbox \treetexttrue % Remember for \ettext \let\par\crcr \obeylines % New line breaks without explicit \cr \halign\bgroup##\hfil\cr} % Start alignment with simple template \def\ettext{\iftreetext % Are we still in inner text \vbox? \crcr\egroup \egroup \fi} % Yes, end alignment and box % Pass 2 % Recursively calculate widths of tree with \setsizes; keep results in % \treesizes; \treewidth contains total width calculated so far. \treeworkbox % is workspace containing subtree being sized. \newbox\treeworkbox \def\cons#1#2{\edef#2{\xmark #1#2}} % Add something to start of list \def\car#1{\expandafter\docar#1\docar} % Take first element of list \def\docar\xmark#1\xmark#2\docar{#1} % ..by ignoring rest in expansion \def\cdr#1{\expandafter\docdr#1\docdr#1}% Similarly, drop first element \def\docdr\xmark#1\xmark#2\docdr#3{\def#3{\xmark #2}} \def\xmark{\noexpand\xmark} % List separator expands to self \def\nil{\xmark} % Empty list is just separator \def\settreesizes{\setbox\treeworkbox=\copy\treebox% \global\let\treesizes\nil \setsizes} \newdimen\treewidth % Width of this part of the tree \def\setsizes{\setbox\treeworkbox=\hbox\bgroup% Get a horiz list as a workspace \unhbox\treeworkbox\unskip % Take tree, unpack it into horiz list \inittreewidth % Get old width at this level \sizesubtrees % Recurse through all subtrees \sizelevel % Now set width from remaining \vbox \egroup} % All done, finish our \hbox \def\inittreewidth{\ifx\treesizes\nil % If this is the first at this level \treewidth=0pt % ..then we have no previous max width \else \treewidth=\car\treesizes % Otherwise take old max level width \global\cdr\treesizes % ..and advance level width storage \fi} % ..in preparation for next level. \def\sizesubtrees{\loop % For each box in horiz list (subtree) \setbox\treeworkbox=\lastbox \unskip % ..pull it off list and flush glue \ifhbox\treeworkbox \setsizes % If hbox, it's a subtree - recurse \repeat} % ..and loop; end loop on tree text \def\sizelevel{% \ifdim\treewidth<\wd\treeworkbox % If greater than previous maximum \treewidth=\wd\treeworkbox \fi % Then set max to new high \global\cons{\the\treewidth}\treesizes}% In either case, put back on list % Pass 3 % Recursively typeset tree with \maketree by adding an \hbox containing % a subtree (in \treebox) to the horizontal list. \newdimen\treeheight % Height of this part of the tree \newif\ifleaf % Tree has no subtrees (is a leaf) \newif\ifbotsub % Bottom subtree of parent \newif\iftopsub % Top subtree of parent \def\typesettree{\medskip\maketree\medskip} % Make whole tree \def\maketree{\hbox{\treewidth=\car\treesizes % Get width at this level \cdr\treesizes % Set up width list for recursion \makesubtreebox\unskip % Set \treebox to text, make subtrees \ifleaf \makeleaf % No subtrees, add glue \else \makeparent \fi}} % Have subtrees, stick them at right {\catcode`@=11 % Be able to use \voidb@x \gdef\makesubtreebox{\unhbox\treebox % Open up tree or subtree \unskip\global\setbox\treebox\lastbox % Pick up very last box \ifvbox\treebox % If we're already at the \vbox \global\leaftrue \let\next\relax % ..then this is a leaf \else \botsubtrue % Otherwise, we have subtrees \setbox\treeworkbox\box\voidb@x % Init stack of processed subs \botsubtrue \let\next\makesubtree % ..and call \maketree on them \fi \next}} % Finish up for whichever it was \def\makesubtree{\setbox1\maketree % Call \maketree on this subtree \unskip\global\setbox\treebox\lastbox % Pick up box before it \treeheight=\ht1 % Get height of subtree we made \advance\treeheight 2ex % Add some room around the edges \ifhbox\treebox \topsubfalse % If picked up box is a \vbox, \else \topsubtrue \fi % ..this is the top, otherwise not \addsubtreebox % Stack subtree with the rest \iftopsub \global\leaffalse % If top, remember not a leaf \let\next\relax \else % ..(after recursion), set return \botsubfalse \let\next\makesubtree % Otherwise, we have more subtrees \fi \next} % Do tail recursion or return \def\addsubtreebox{\setbox\treeworkbox=\vbox{\subtreebox\unvbox\treeworkbox}} \def\subtreebox{\hbox\bgroup % Start \hbox of tree and lines \vbox to \treeheight\bgroup % Start \vbox for vertical rules \ifbotsub \iftopsub \vfil % If both bottom and top subtree \hrule width 0.4pt % ..vertical rule is just a dot \else \treehalfrule \fi \vfil % Bottom gets half-height rule \else \iftopsub \vfil \treehalfrule % Top gets half-height the other way \else \hrule width 0.4pt height \treeheight \fi\fi % Middle, full height \egroup % Finish vertical rule \vbox \treectrbox{\hrule width 1em}\hskip 0.2em\treectrbox{\box1}\egroup} \def\treectrbox#1{\vbox to \treeheight{\vfil #1\vfil}} \def\treehalfrule{\dimen\treeworkbox=\treeheight % Get total height \divide\dimen\treeworkbox 2% \advance\dimen\treeworkbox 0.2pt % Divide by two, add half horiz height \hrule width 0.4pt height \dimen\treeworkbox}% Make a vertical rule that high \def\makeleaf{\box\treebox} % Add leaf box to horiz list \def\makeparent{\ifdim\ht\treebox>% \ht\treeworkbox % If text is higher than subtrees \treeheight=\ht\treebox % ..use that height \else \treeheight=\ht\treeworkbox \fi % Otherwise use height of subtrees \advance\treewidth-\wd\treebox % Take remainder of level width \advance\treewidth 1em % ..after accounting for text and glue \treectrbox{\box\treebox}\hskip 0.2em % Add text, space before connection \treectrbox{\hrule width \treewidth}% \treectrbox{\box\treeworkbox}} % Add \hrule, subs % No idea what \spouse is supposed to do... wasn't included \def\spouse{\bf} lifelines-3.0.61/reports/desc-tree.ll0000700002540200244210000002251310076661057017656 0ustar prappDomain Users/* * @progname desc-tree.ll * @version 8 * @author Dick Knowles, knowles@inmet.camb.inmet.com * @category * @output Text * @description * This report prints a descendant tree for an individual. A line is printed for every spouse and child including name, database key number, birth, marriage, and death information. The user can set the number of generations or they can all be done (up to a maximum of 20). The user can also, optionally, include step children and family database numbers. There are two slightly different output styles, tree and numbered. Here are examples of each: Dick Knowles, knowles@inmet.camb.inmet.com 18 Feb 1993 18 Mar 1993 ver. 2 Add date to heading 19 Dec 1993 ver. 3 (partial) Changes for Cliff Manis 30 Dec 1993 ver. 4 Updates suggested by Cliff Manis 07 Mar 1994 ver. 5 Make 0 generations max at 20. Add message when stopping for gen count. 10 Mar 1994 ver. 6 Add max line count to limit output. 10 Aug 1994 ver. 7 Bugfix (by Jim Eggert). 31 Aug 1997 ver. 8 Added old bugfix for incorrect printing of step children. (Source of fix unknown at this time.) ----------------- numbered: Tree of descendants for Thomas Leo SARJEANT (19) Dated: 30 Dec 1993 1- Thomas Leo SARJEANT (19) b. 27 Mar 1916 d. 1 Oct 1978 s- Rita LACROIX (59) b. 28 Aug 1918 m. 1936 d. 28 Sep 1974 2- Thomas Leo SARJEANT (60) b. 26 Feb 1936 s- Joan MERRIAM (69) m. 13 May 1961 3- Thomas John SARJEANT (70) 3- Marjorie SARJEANT (71) 3- James SARJEANT (72) 2- John Bernard SARJEANT (61) b. 8 Nov 1939 s- Bettye MCPHERSON (504) b. 18 Apr 1932 m. 2 Sep 1973 2- Beverly Ann SARJEANT (62) b. 28 Jul 1942 s- Steven JOHNSON (73) m. 10 Nov 1960 s- Joseph COSTA (74) b. 20 Apr 1926 m. 8 Oct 1963 3- Michael Angelo COSTA (75) b. 30 Jun 1965 s- Elaine CARTER (319) b. 4 Feb 1966 m. 26 May 1990 s- Charlotte Lois BENJAMIN (20) b. 29 Nov 1923 m. 12 Oct 1949 2- Kathleen SARJEANT (14) b. 23 Jan 1950 s- Richard James KNOWLES (3) b. 20 Nov 1949 m. 14 Aug 1971 3- Jennifer Danielle KNOWLES (15) b. 28 Oct 1974 3- Kevin Scott KNOWLES (16) b. 14 May 1976 3- James Michael KNOWLES (17) b. 13 Oct 1979 3- Brenda Marie KNOWLES (18) b. 7 Oct 1981 ----------------- tree (with stepchildren and family numbers): Tree of descendants for Thomas Leo SARJEANT (19) Dated: 30 Dec 1993 -Thomas Leo SARJEANT (19) b. 27 Mar 1916 d. 1 Oct 1978 s-Rita LACROIX (59) b. 28 Aug 1918 m. 1936 (17) d. 28 Sep 1974 |-Thomas Leo SARJEANT (60) b. 26 Feb 1936 | s-Joan MERRIAM (69) m. 13 May 1961 (20) | |-(ST)Deborah CONNORS (295) | |-(ST)Diane CONNORS (296) | | s-John LIPSEY (482) b. m. (160) | | |-John LIPSEY (479) b. 27 Oct 1979 d. 8 Mar 1993 | |-(ST)Gayle CONNORS (297) | | |-Jennifer (483) b. | |-Thomas John SARJEANT (70) | |-Marjorie SARJEANT (71) | |-James SARJEANT (72) |-John Bernard SARJEANT (61) b. 8 Nov 1939 | s-Bettye MCPHERSON (504) b. 18 Apr 1932 m. 2 Sep 1973 (168) | |-(ST)Tammarra Victoria WALL (505) b. 7 Jul 1963 |-Beverly Ann SARJEANT (62) b. 28 Jul 1942 | s-Steven JOHNSON (73) m. 10 Nov 1960 (21) | s-Joseph COSTA (74) b. 20 Apr 1926 m. 8 Oct 1963 (22) | |-Michael Angelo COSTA (75) b. 30 Jun 1965 | | s-Elaine CARTER (319) b. 4 Feb 1966 m. 26 May 1990 (89) s-Charlotte Lois BENJAMIN (20) b. 29 Nov 1923 m. 12 Oct 1949 (3) |-Kathleen SARJEANT (14) b. 23 Jan 1950 | s-Richard James KNOWLES (3) b. 20 Nov 1949 m. 14 Aug 1971 (2) | |-Jennifer Danielle KNOWLES (15) b. 28 Oct 1974 | |-Kevin Scott KNOWLES (16) b. 14 May 1976 | |-James Michael KNOWLES (17) b. 13 Oct 1979 | |-Brenda Marie KNOWLES (18) b. 7 Oct 1981 */ global(MAXGENS) global(MAXLINES) global(linecount) global(gens) global(style) global(dofami) global(dostep) global(mainpre) global(spousepre) global(indentpre) proc main () { set(MAXGENS,20) /* make "all" gens max at 20 */ set(MAXLINES,500) /* set max report lines */ set(linecount,0) /* initialize linecount */ set(nm," ") getindi(nm) /* get individual */ getintmsg (gens, concat("How many generations (0 for all, max ", concat(d(MAXGENS),")?"))) if (eq(gens,0)) {set(gens,MAXGENS)} /* if 0, set max */ getintmsg (style, "Choose style: 0 for tree, 1 for numbered.") getintmsg (dofami, "Include family indices? 0 for no, 1 for yes.") getintmsg (dostep, "Show stepchildren? 0 for no, 1 for yes.") dayformat(0) monthformat(4) dateformat(0) /* Headers */ "Tree of descendants for " name(nm) " (" call key_no_char(nm) ")\n\n" "Dated: " stddate(gettoday()) "\n\n" if (eq(style,0)) { /* if tree */ set(mainpre, "-") set(spousepre, " s-") set(indentpre, " |") } else { /* if numbered */ set(mainpre, "- ") set(spousepre, "s- ") set(indentpre, " ") } call dofam(nm,"",1,0) /* start with first person */ } /* startfam: If we haven't reached the maximum or specified generation count, call dofam for each child in this family. Otherwise, print a message line if there are further descendants at this point. */ proc startfam (fam,prefix,level,isstep) { if (le(level,gens)) { /* if not at last generation */ children (fam,child,num) { /* for each child */ call dofam (child, /* call dofam */ concat(prefix, indentpre), add(level,1), isstep) } } else { /* don't do this generation */ if (gt(nchildren(fam),0)) { /* but if there are children, */ /* issue message */ prefix " [[Reached gen count or max. Further descendants here" if (eq(isstep,1)) { " (stepchildren)" } ".]]\n" incr(linecount) } } } /* dofam: Write out a person and check for spouses and children. Each spouse is written, then this routine is called recursively for each child. An incremented level is passed along in case the user specified a limited number of generations */ proc dofam (nm,prefix,level,isstep) { if (eq(style,0)) { set(pre,mainpre) } else { set(pre,concat(d(level),mainpre)) } if (eq(isstep,1)) { call printpers(nm, concat(prefix,concat(pre,"(ST)")),0,0) /* print this person */ } else { call printpers(nm,concat(prefix,pre),0,0) /* print this person */ } if (and(ge(linecount,MAXLINES),gt(nfamilies(nm),0))) { prefix " [[Reached line count max." " May be further descendants here." "]]\n" } else { families(nm, fam, spouse, num) { /* do for each family */ if (ne(spouse,null)) { /* if there is a spouse */ call printpers( /* print spouse */ spouse,concat(prefix,spousepre),1,fam) if (and(ge(linecount,MAXLINES),gt(nchildren(fam),0))) { prefix " [[Reached line count max." " May be further descendants here." "]]\n" } else { families (spouse, spsfam, ospouse, num2) { /* for each of the spouse families*/ if (eq(fam,spsfam)) {/* this is main family */ call startfam (spsfam,prefix,level,0) } else { /* this is step-family*/ if (eq (dostep,1)) { /* if we're doing stepfams */ call startfam (spsfam,prefix,level,1) } /*end if dostep */ } /*end else not stepfam*/ } /*end spouse's families*/ } /* end spouse not ge MAXLINES */ } else { /* there is no spouse */ call startfam (fam,prefix,level,0) } /*end else no spouse*/ } /*end 'families'*/ } /* end MAXLINES else */ } /*end 'proc dofam'*/ /* printpers: Write output line for one person. Include birth and death dates if known. For a spouse, include marriage date if known. */ proc printpers (nm, prefix, spouse, fam) { prefix name(nm) " (" call key_no_char(nm) ")" if(e, birth(nm)) { "\t b. " stddate(birth(nm)) } if(e, marriage(fam)) { if(eq(dofami,1)) { "\t m. " stddate(e) " (" call key_no_char(fam) ")" } else { "\t m. " stddate(e) } } if(e, death(nm)) { "\t d. " stddate(death(nm)) } "\n" incr(linecount) } /* end proc printpers */ /* key_no_char: Return string key of individual or family, without leading 'I' or 'F'. */ proc key_no_char (nm) { set(k, key(nm)) substring(k,2,strlen(k)) } /* end proc key_no_char */ lifelines-3.0.61/reports/descged.ll0000700002540200244210000000363010076661057017400 0ustar prappDomain Users/* * @progname descged.ll * @version 2000-07 * @author Tom Wetmore, Cliff Manis, and Chris Eagle * @category * @output Text * @description * * The output of this report is a GEDCOM file of the following: * all descendents of a named individual * all spouses of the named indivdual * spouses of all descendents of the named individual * (i.e. this program looks only down the tree, never up) * * This form of the program is probably the most useful for extracting * data when a person requests data about someone from your database. * * July 2000 * * modified by Chris Eagle from genancc1 by: * * by Tom Wetmore, ttw@cbnewsl.att.com * (as sent to Cliff Manis in August 1992) * * This report works only with the LifeLines Genealogy program * * [I have only given it a name and added lots of comments] /cliff * * August 1992 * */ proc main () { indiset(set1) /*declare an indi set*/ indiset(set2) /*declare another indi set*/ getindi(indi) /*ask user to identify person*/ addtoset(set1, indi, n) /*add that person to set1*/ set(set2, spouseset(set1)) /* get individuals spouse(s) */ set(set1, union(set1, set2)) /* combine set1 and set2 */ indiset(set3) /* set used in determining when to stop */ set(set3, set1) set(set2, childset(set1)) /* find first generation of children */ set(set1, union(set1, set2)) /* combine set1 and set2 */ while (lengthset(difference(set1, set3))) { set(set2, spouseset(set1)) /* add the childrens spouses */ set(set1, union(set1, set2)) /* combine set1 and set2 */ set(set3, set1) /* remember the previous state */ set(set2, childset(set1)) /* find more children */ set(set1, union(set1, set2)) /* combine set1 and set2 */ } gengedcom(set1) /*write final set as GEDCOM file*/ } /* end of report */ lifelines-3.0.61/reports/desc_ged.ll0000700002540200244210000000743410165161650017536 0ustar prappDomain Users/* * @progname desc_ged.ll * @version 1 * @author Nicklaus * @category * @output Text * @description Generate gedcom of descendents. For specified set of individuals for specified # of generations down from the top individuals. (e.g. name all your great-grandparents for all of your close cousins in one gedcom file) Author: Dennis Nicklaus nicklaus@fnal.gov June 1997 */ /* MODIFY this to put in your name and address! */ proc print_header() { "0 HEAD\n" "1 SOUR LIFELINES\n" "2 VERS 3.0.2\n" "2 NAME LifeLines for UNIX\n" "1 DATE " stddate(gettoday()) nl() "0 @SM1@ SUBM\n" "1 NAME your name here\n" "1 ADDR your street here\n" "2 CONT your town\n" "2 CONT your email\n" } proc main () { getindimsg(person,"Enter person to output GEDCOM descendants of") indiset(thisgen) indiset(allgen) while (person){ addtoset(thisgen, person, 0) addtoset(allgen, person, 0) set(person,0) getindimsg(person,"Enter next person to output GEDCOM descendants of") } set(allgen, union(allgen,spouseset(allgen))) getintmsg (ngen, "Enter number of generations") set(gen,1) while(and(lengthset(thisgen),le(gen,ngen))) { set (thisgensize,lengthset(thisgen)) print ("generation ",d(gen)," ",d(thisgensize)) if (gt(thisgensize,1)) { print(" people\n") } else { print(" person\n") } set(gen,add(gen,1)) set(thisgen,childset(thisgen)) set(allgen,union(allgen,thisgen)) set(allgen,union(allgen,spouseset(thisgen))) } call print_header() gengedcom(allgen) call sour_init() call sour_addset(allgen) call sour_ged() "0 TRLR\n" } global(sour_list) global(sour_table) proc sour_init() { table(sour_table) list(sour_list) } /* sour_addind() adds the sources referenced for this individual */ proc sour_addind(i) { traverse(root(i), m, l) { if (nestr("SOUR", tag(m))) { continue() } set(v, value(m)) if (eqstr("", v)) { continue() } if(reference(v)) { if (ne(0, lookup(sour_table, v))) { continue() } set(v, save(v)) insert(sour_table, v, 1) enqueue(sour_list, v) } } } proc sour_addset(s) { forindiset (s, i, a, n) { call sour_addind(i) families(i, f, sp, m) { call sour_addind(f) } } } /* sour_ged() outputs the current source list in GEDCOM format */ proc sour_ged() { table(other_table) list(other_list) forlist(sour_list, k, n) { set(r, dereference(k)) traverse(r, s, l) { d(l) if (xref(s)) { " " xref(s) } " " tag(s) if (v, value(s)) { " " v if(reference(v)) { if (ne(0, lookup(other_table, v))) { continue() } if (ne(0, lookup(sour_table, v))) { continue() } set(v, save(v)) insert(other_table, v, 1) enqueue(other_list, v) } } "\n" } } forlist(other_list, k, n) { set(r, dereference(k)) traverse(r, s, l) { d(l) if (xref(s)) { " " xref(s) } " " tag(s) if (v, value(s)) { " " v } "\n" } } } lifelines-3.0.61/reports/desc_html.ll0000700002540200244210000001061710076661057017747 0ustar prappDomain Users/* * @progname desc_html.ll * @version 1.4 * @author Dick Knowles, Scott McGee, anon * @category * @output HTML * @description This program is designed to be used in a cgi based genweb site to produce a descendant chart for a specified individual. It is based on the desc-tree program by Dick Knowles as modified by Scott McGee. A line is printed for every spouse and child including name, database key number, birth, marriage, and death information. @(#)desc_html.ll 1.4 10/4/95 */ include("cgi_html.li") global(MAXGENS) global(MAXLINES) global(linecount) global(gens) global(mainpre) global(spousepre) global(indentpre) proc main () { call set_cgi_html_globals() set(MAXGENS,20) /* make "all" gens max at 20 */ set(MAXLINES,500) /* set max report lines */ set(linecount,0) /* initialize linecount */ set(nm," ") getindi(nm) /* get individual */ set(gens, 3) dayformat(0) monthformat(4) dateformat(0) set(mainpre, "-") set(spousepre, " s-") set(indentpre, " |") call do_chart_head(nm, "Descendant") "
\n"
  call dofam(nm,"",1,0)               /* start with first person */
  "
\n" call do_tail(nm) } /* startfam: If we haven't reached the maximum or specified generation count, call dofam for each child in this family. Otherwise, print a message line if there are further descendants at this point. */ proc startfam (fam,prefix,level,isstep) { if (le(level,gens)) { /* if not at last generation */ children (fam,child,num) { /* for each child */ call dofam (child, /* call dofam */ concat(prefix, indentpre), add(level,1), isstep) } } else { /* don't do this generation */ if (gt(nchildren(fam),0)) { /* but if there are children, */ /* issue message */ prefix " [[Further descendants here" if (eq(isstep,1)) { " (stepchildren)" } ".]]\n" incr(linecount) } } } /* dofam: Write out a person and check for spouses and children. Each spouse is written, then this routine is called recursively for each child. An incremented level is passed along in case the user specified a limited number of generations */ proc dofam (nm,prefix,level,isstep) { set(pre,mainpre) call printpers(nm,concat(prefix,pre),0,0) /* print this person */ if (and(ge(linecount,MAXLINES),gt(nfamilies(nm),0))) { prefix " [[Reached line count max." " May be further descendants here." "]]\n" } else { families(nm, fam, spouse, num) { /* do for each family */ if (ne(spouse,null)) { /* if there is a spouse */ /* print spouse */ call printpers(spouse,concat(prefix,spousepre),1,fam) if (and(ge(linecount,MAXLINES),gt(nchildren(fam),0))) { prefix " [[Reached line count max." " May be further descendants here." "]]\n" } else { families (spouse, spsfam, ospouse, num2) { /* for each of the spouse families*/ if(eq(fam,spsfam)){ /* only non-step families */ call startfam (spsfam,prefix,level,0) } } /*end spouse's families*/ } /* end spouse not ge MAXLINES */ } else { /* there is no spouse */ call startfam (fam,prefix,level,0) } /*end else no spouse*/ } /*end 'families'*/ } /* end MAXLINES else */ } /*end 'proc dofam'*/ /* printpers: Write output line for one person. Include birth and death dates if known. For a spouse, include marriage date if known. */ proc printpers (nm, prefix, spouse, fam) { prefix if(nfamilies(nm)){ set(hasChildren, 0) families(nm, f, s, n){ if(nchildren(f)){ set(hasChildren, 1) } } } href(nm, "Descendant") if(e, birth(nm)) { "\t b. " stddate(birth(nm)) } if(e, marriage(fam)) { "\t m. " stddate(e) } if(e, death(nm)) { "\t d. " stddate(death(nm)) } "\n" incr(linecount) } /* end proc printpers */ /* key_no_char: Return string key of individual or family, without leading 'I' or 'F'. */ proc key_no_char (nm) { set(k, key(nm)) substring(k,2,strlen(k)) } /* end proc key_no_char */ lifelines-3.0.61/reports/divorce.li0000700002540200244210000000102110076661057017422 0ustar prappDomain Users/* * @progname divorce.li * @version 1.0 of 2004-07-03 * @author Vincent Broman (vpbroman@mstar2.net) * @category * @output gedcom event function values * @description * * Utility function supporting divorce/DIVO events in GeDCom data * divorce( fam) -> event, * * I put an equivalent function in my C source, but this can be used everywhere. */ func divorce( fam) { fornodes( root( fam), childnode) { if( eqstr( tag( childnode), "DIVO")) { return( childnode) } } return( 0) } lifelines-3.0.61/reports/drep2.ll0000700002540200244210000001407610076661057017024 0ustar prappDomain Users/* * @progname drep2.ll * @version 2.1 * @author Robert Simms * @category * @output Text * @description Produces an indented report on an individual's families and all descendant families. Details on individuals include NOTE lines, once. Line wrapping is done with indention maintained. At the beginning of main() is provided the means to easily change page width, tab size, and left margin. Written by: Robert Simms, 16 Feb 2000 rsimms@math.clemson.edu, http://www.math.clemson.edu/~rsimms This is based on indiv3.ll, also by Robert Simms. Version 2.1: 30 May 2001, fixed the concatenation of multiple notes so that two spaces are inserted before every note after the first. Thanks to M.W. Poirier for pointing this out. ______________ TODO: Clean up trailing spaces in output. */ global(page_width) global(tab_size) global(left_margin) global(gen) global(genlim) global(iparent) global(ichild) proc main() { set(page_width, 72) set(tab_size, 3) set(left_margin, 1) getindi(person) getintmsg (genlim, "Maximum number of generations") report(person, genlim) /* NOTE: this footer may need modifying if the page_width is changed */ concat(" ______________________________ This report was produced on ", stddate(gettoday()), " _______", nl()) } func report(person, genlim) { list(toPrint) list(toScan) set(gen, 1) set(iparent, 1) set(ichild, 2) enqueue(toPrint, person) while( and( le(gen,genlim), gt(length(toPrint), 0) ) ) { ">> Generation " d(gen) nl() while(i1, dequeue(toPrint)) { nl() doFams(i1) nl() enqueue(toScan, i1) } while(i1, dequeue(toScan)) { families(i1, fp, sp, fn) { children(fp, i_x, n_x) { if(gt(nfamilies(i_x), 0)) { enqueue(toPrint, i_x) } } } } set(gen, add(gen, 1)) if(gt(length(toPrint), 0)) { nl() } } } func doFams(indi) { set(x, 0) set(skip, left_margin) set(x, outfam(indi, skip, x)) } func outfam(indi, skip, x) { set(x, outpers(indi, skip, x, 1, 1)) if(gt(nfamilies(indi), 0)) { set(skip, add(skip, tab_size)) families(indi, fam, sp, num) { set(x, 0) set(x, outline(concat("Family #", d(num)), skip, x)) if(date(marriage(fam))) { set(s, concat(", ", date(marriage(fam)))) } if(nestr("", place(marriage(fam)))) { set(s, concat(s, ", ", place(marriage(fam)))) } set(x, outline(s, skip, x)) set(x, 0) set(skip, add(skip, tab_size)) set(x, outpers(sp, skip, x, 1, 0)) if(gt(nchildren(fam), 0)) { set(x, outline("Children", skip, x)) set(x, 0) set(skip, add(skip, tab_size)) children(fam, child, no) { set(x, outpers(child, skip, x, or(not(nfamilies(child)),eq(gen,genlim)), 0 )) } set(skip, sub(skip, tab_size)) } set(skip, sub(skip, tab_size)) } } return(x) } func outpers(indi, skip, x, note_flag, parent) { if(indi) { print(name(indi), nl()) set(x, 0) if(note_flag) { if(parent) { set(s, concat(d(iparent), ". ", name(indi))) set(iparent, add(iparent, 1)) } else { set(s, name(indi)) } } else { if(and(lt(gen,genlim), gt(nfamilies(indi), 0))) { set(s, concat(name(indi), " <",d(ichild),">" )) set(ichild, add(ichild, 1)) } else { set(s, name(indi)) } } set(x, outline(s, skip, x)) set(skip, add(skip, tab_size)) set(s, "") if(birth(indi)) { set(s, concat(", b. ", long(birth(indi)))) } if(death(indi)) { set(s, concat(s, ", d. ", long(death(indi)))) } if(burial(indi)) { set(s, concat(s, ", buried at ", place(burial(indi)))) } set(s, concat(s, ". ")) set(x, outline(s, skip, x)) if(note_flag) { set(s, "") set(note_separator, "") fornotes(inode(indi), note) { set(s, concat(s, note_separator, note)) set(note_separator, " ") } set(x, outtxt(s, skip, x)) set(skip, sub(skip, tab_size)) } } else { print("_____ _____", nl()) set(x, 0) set(x, outline("_____ _____", skip, x)) } set(x, 0) return(x) } func outtxt(txt, skip, x) { set(cr, index(txt, nl(), 1)) while(ne(cr, 0)) { set(txt, save(txt)) set(txt2, concat(substring(txt, 1, sub(cr, 1)), " ")) set(x, outline(txt2, skip, x)) set(txt, substring(txt, add(cr, 1), strlen(txt))) set(cr, index(txt, nl(), 1)) } if(gt(strlen(txt), 0)) { set(x, outline(txt, skip, x)) } return(x) } func outline(text, skip, x) { if(eq(x, 0)) { col(add(skip, 1)) set(x, skip) } set(max, sub(page_width, x)) if(gt(strlen(text), max)) { set(space, breakpoint(text, max)) if(eq(space, 0)) { if(eq(x, skip)) { set(text, strsave(text)) substring(text, 1, sub(max, 1)) "-" set(x, 0) set(text, substring(text, max, strlen(text))) set(x, outline(text, skip, x)) } else { set(x, 0) set(x, outline(text, skip, x)) } } else { /* space gt 0 */ set(text, strsave(text)) substring(text, 1, sub(space, 1)) set(x, 0) set(text, strsave(substring(text, add(space, 1), strlen(text)))) while(eqstr(" ", substring(text, 1, 1))) { /* strip leading spaces */ set(text, strsave(substring(text, 2, strlen(text)))) } set(x, outline(text, skip, x)) } } else { text set(x, add(x, strlen(text))) } return(x) } func breakpoint(text, max) { set(space, 0) set(occ, 1) set(next, index(text, " ", occ)) incr(occ) while ( and(le(next, add(max, 1)), ne (next, 0))) { set(space, next) set(next, index(text, " ", occ)) incr(occ) } return(space) } lifelines-3.0.61/reports/dump-ances.ll0000700002540200244210000001001010313310013017775 0ustar prappDomain Users/* * @progname dump-ances.ll * @version 1992-11 * @author Stephen Woodbridge * @category * @output Text, 80 cols * @description * * Program walks thru one's ancestors and dumps information * about each family. It prunes the tree so an individual is * only output once. It is a simple program that is easy to * make changes to, if you want more or less info printed. I * have included three date routines get_dates(), get_sdates(), * and get_ldates for variations in the amount of event info that * gets output to the file. The program lists all children of the * families as it walks the tree. The ">>>>" marker on a child * signifies the line of descent. * * Writen by Stephen Woodbridge, Nov 1992 */ global(UNKNOWN) global(DONE) global(ILIST) global(NLIST) global(RVAL) proc main() { table(DONE) list(ILIST) list(NLIST) list(RVAL) set(UNKNOWN, "____?____") getindi(me) getintmsg(max, " Maximum Depth :") enqueue(ILIST, me) enqueue(NLIST, 1) set(i, 1) while (me, dequeue(ILIST)) { set(depth, dequeue(NLIST)) if (not(lookup(DONE, key(me)))) { call do_me(me, depth, max) } } } proc do_me(me, depth, max) { call out_me(me, depth) insert(DONE, save(key(me)), 1) if (le(add(depth, 1), max)) { if (dad, father(me)) { enqueue(ILIST, dad) enqueue(NLIST, add(depth, 1)) } if (mom, mother(me)) { enqueue(ILIST, mom) enqueue(NLIST, add(depth, 1)) } } } proc out_me(me, depth) { "-------------------- " d(depth) " --------------------\n" if (dad, father(me)) { call get_sdates(dad) call print_name(dad, 1) pop(RVAL) col(45) pop(RVAL) "\n" } else { UNKNOWN "\n"} if (mom, mother(me)) { call get_sdates(mom) call print_name(mom, 1) pop(RVAL) col(45) pop(RVAL) "\n" } else { UNKNOWN "\n"} if (fam, parents(me)) { " m. " long(marriage(fam)) "\n" children( fam, child, nchild) { if (eq(me, child)) { ">>>> " } else { " " } call get_sdates(child) call print_name(child, 1) pop(RVAL) col(50) pop(RVAL) "\n" } } else { " m.\n" ">>>> " call get_sdates(me) call print_name(me, 1) pop(RVAL) col(50) pop(RVAL) "\n" } } proc print_name (me, last) { call get_title(me) push(RVAL, save(concat(fullname(me, 1, not(last), 45), pop(RVAL)))) } proc get_title (me) { fornodes(inode(me), node) { if (not(strcmp("TITL", tag(node)))) { set(n, node) } } if (n) { push(RVAL, save(concat(" ", value(n)))) } else { push(RVAL, "") } } proc get_sdates (me) { if (e, birth(me)) { set(b, save(concat("( ", short(e)))) } else { set(b, "( ") } if (e, death(me)) { set(d, save(concat(" - " , short(e)))) } else { set(d, " - ") } push(RVAL, save(concat(b, concat(d, " )")))) } proc get_ldates (me) { if (e, birth(me)) { set(b, save(concat("( ", long(e)))) } else { set(b, "( ") } if (e, death(me)) { set(d, save(concat(" - " , long(e)))) } else { set(d, " - ") } push(RVAL, save(concat(b, concat(d, " )")))) } proc get_dates (me) { if (e, birth(me)) { set(b, save(concat("( ", date(e)))) } else { set(b, "( ") } if (e, death(me)) { set(d, save(concat(" - " , date(e)))) } else { set(d, " - ") } push(RVAL, save(concat(b, concat(d, " )")))) } lifelines-3.0.61/reports/dump_html.ll0000700002540200244210000003257410077402654020001 0ustar prappDomain Users/* * @progname dump_html.ll * @version 1.3 * @author Scott McGee * @category * @output HTML * @description dump_html.ll is designed to dump an entire database to static HTML files. by Scott McGee @(#)dump_html.ll 1.3 10/1/95 /* Customization Before using, there are a few properties that need to be customized for your own environment. These are done by adding them to your .linesrc ( or for windows lines.cfg) file. This report is does not need to be modified. The properties that are looked up are: user.fullname -- Name of the database owner user.email -- Email address of db owner genweb.image -- define with path to image if you have one to use genweb.page -- define with path to page if you have one genweb.page_nam -- where your 'homepage' is genweb.isLDS -- define if true genweb.add_index -- define as 1 to add to INDEX file */ include("extract_set.li") include("tools.li") /* other globals */ global(found) /* external file to inline image found flag */ global(per_file) /* number of people per file to write */ global(first) /* first person shouldn't be asked about */ global(RVAL) /* ?? (part of borrowed code) */ global(last_surname) /* last surname in index - used for anchors */ global(first_indi) /* starting person */ /* customization globals - customize values assigned in main */ global(db_owner) /* name of database owner */ global(owner_addr) /* url of database owner (mailto or homepage) */ global(genweb_image) /* name of genweb image to place on each page */ global(genweb_page) /* URL of base genweb (or homepage) web page */ global(page_name) /* name of base genweb (or homepage) web page */ global(LDS) /* display LDS Ordinances? (1=yes 0=no) */ global(html_index) /* put HTML tag in INDEX file (1=yes 0=no) */ proc main () { indiset(out_set) call set_static_html_globals() set(per_file, 1) print("Reading data...\n") forindi(j, n) { addtoset(out_set, j, n) } print("Working...\n") call html_out(out_set) } proc set_static_html_globals(){ /* customize these globals to customize the output to your site */ set(db_owner, getproperty("user.fullname")) set(owner_addr, getproperty("user.email")) set(genweb_image, getproperty("genweb.image")) set(genweb_page, getproperty("genweb.page")) set(page_name, getproperty("genweb.page_name")) /* might change to "my homepage" */ set(LDS, getproperty("genweb.isLDS")) set(html_index, getproperty("genweb.add_index")) /* use 1 to add to INDEX file */ } proc html_out (o) { set(s, concat("There are ", d(lengthset(o)), " people in your list, how many per file?")) getstr(a,s) set(per_file, atoi(a)) if(not(per_file)) { set(per_file, 1) } set(loop_count, 0) set(file_count, 0) set(href_table, init_href(o)) forindiset(o, i, j, n) { set(indi, i) if(eq(loop_count, 0)) { incr(file_count) call write_head(file_count) } incr(loop_count) call genhtml(indi, o, href_table) if(or(eq(loop_count, per_file), eq(n, lengthset(o)))) { call write_tail() set(loop_count, 0) } } call do_index(o, href_table) } proc write_head(count) { set(filename, concat("genweb/", database(), "/genweb_", d(count), ".html")) print("Writing ", filename, "\n") newfile(filename, 0) "\n" " genweb_" d(count) ".html \n" "\n" if(genweb_image) { "\"\"

\n" } } proc write_tail() { "

\n" date(gettoday()) "
\n" "Database maintained by " "\n" db_owner "
\n" "\n" } proc genhtml (i, o, href_table) { /* print(" ", fullname(i,0,1,300), "\n") */ "\n" "

" set(vn,givens(i)) set(vn1,save(vn)) givens(i) " " set(nn,surname(i)) set(nn1,save(nn)) nn1 "

\n" set(path, get_picture(i)) if (found) { "\"\"

\n" } call afn(i) if (e, birth(i)) { "Born : " long(e) "
\n" } if (e, baptism(i)) { "Baptised : " long(e) "
\n" } elsif (e, bapt(i)) { "Baptised : " long(e) "
\n" } if (e, death(i)) { "Died : " long(e) "
\n" } if (e, burial(i)) { "Buried : " long(e) "
\n" } if(LDS) { /* LDS ordinances */ set(started, 0) fornodes(inode(i), node) { if (eq(0, strcmp(tag(node), "BAPL"))) { if(not(started)) { set(started, 1) "
LDS Ordinances: B " } } /* determine if endowed */ if (eq(0, strcmp(tag(node), "ENDL"))) { if(not(started)) { set(started, 1) "
LDS Ordinances: " } "E " } } /* determine if sealed to parents */ set(fam, fnode(parents(i))) set(ind, inode(i)) if(fam) { fornodes(fam, node) { if(and(eqstr("CHIL", tag(node)), eqstr(xref(ind), value(node)))) { fornodes(node, next) { if(eqstr(tag(next), "SLGC")) { if(not(started)) { set(started, 1) "
LDS Ordinances: " } "SC " } } } } } if(started){ "
\n" } } /* "
" */ call othernames(i) call print_html(i) "
\n" if (p, father(i)) { "" "Father : " set (path, get_href(p, href_table)) if(found) { "" } if (t,title(p)) {t " "} fullname(p,0,1,300) if(found) {""} do_info(p) "
\n" } if (p, mother(i)) { "" "Mother : " set (path, get_href(p, href_table)) if(found) { "" } if (t,title(p)) {t " "} fullname(p,0,1,300) if(found) {""} do_info(p) "
\n" } families(i, f, s, n) { "

" "Spouse" if (gt(nfamilies(i), 1)) { " " d(n) } " : \n" if (s) { /* family has a spouse */ set (path, get_href(s, href_table)) if(found) { "" } if (t,title(s)) {t " "} fullname(s,0,1,300) if(found) {""} do_info(s) "
\n" } if (e, marriage(f)) { "Married " long(e) "
\n" } if (e, divorced(f)) { "Divorced " long(e) "
\n" } if(LDS) { fornodes(fnode(f), node) { if (eq(0, strcmp(tag(node), "SLGS"))) { "
LDS Ordinances: SS\n" } } } "

    \n" children(f, c, nn) { "
  1. " set (path, get_href(c, href_table)) if(found) { "" } if (t,title(c)) {t " "} fullname(c,0,1,300) if(found) {""} do_info(c) "
  2. \n" } "
\n" } call print_notes(i) "
\n" /* Insert code here for Pedigree and Descendant charts if(parents(i)) { "Pedigree Chart
\n" } if(nfamilies(i)) { set(hasChildren, 0) families(i, f, s, n) { if(nchildren(f)) { set(hasChildren, 1) } } if(hasChildren) { "Descendant Chart\n" } } "
\n" */ "
\n" "[" "Index to database]
\n" if(genweb_page) { "[" "Return to " page_name " ]
\n" } "


\n" } func init_href(outset){ table(href_table) forindiset(outset, indi, j, number) { insert(href_table, save(key(indi)), number) } return(href_table) } func get_href(indi, href_table) { set(path, "") set(found, 0) set(value, lookup(href_table, key(indi))) if(value){ set(number, add(div(sub(value, 1), per_file), 1)) set(path, concat("genweb_", d(number), ".html")) set(found, 1) } return(path) } proc print_notes(indi){ set(first, 1) traverse(inode(indi), node, l) { if (not(strcmp("NOTE", tag(node)))) { if(first) { "Notes :
\n" set(first, 0) } "

" call show_path(node) value(node) "\n" fornodes(node, next) { value(next) "\n" } "

\n" } } } proc show_path (node){ list(path) while (node) { push(path, tag(node)) set(node, parent(node)) } "(" while (s, pop(path)) { if(eqstr(lower(s), "indi")){ "Individual " }elsif(eqstr(lower(s), "fam")){ "Family " }elsif(eqstr(lower(s), "famc")){ "family " }elsif(eqstr(lower(s), "fams")){ "family " }elsif(eqstr(lower(s), "note")){ "note" }elsif(eqstr(lower(s), "birt")){ "birth " }elsif(eqstr(lower(s), "deat")){ "death " }elsif(eqstr(lower(s), "buri")){ "burial " }elsif(eqstr(lower(s), "plac")){ "place " }else{ lower(s) " " } } ")\n" } proc do_index(indi_set, href_table) { set(last_surname, "ZZ") list(RVAL) indiset(index) set(index, indi_set) namesort(index) print("Writing INDEX.html\n") call create_index_file(index, href_table) print("Writing GENDEX.txt\n") call create_gendex_file(index, href_table) } proc create_gendex_file(index, href_table) { set(fn, save(concat("genweb/", database(), "/GENDEX.txt"))) newfile(fn, 0) forindiset(index, me, v, n) { set(path, concat(save(get_href(me, href_table)), "#", key(me))) path "|" surname(me) "|" givens(me) " /" surname(me) "/" "|" if (evt, birth(me)) { date(evt) } "|" if (evt, birth(me)) { place(evt) } "|" if (evt, death(me)) { date(evt) } "|" if (evt, death(me)) { place(evt) } "|\n" } } proc create_index_file(index, href_table) { set(fn, save(concat("genweb/", database(), "/INDEX.html"))) newfile(fn, 0) call html_header("Interactive Genealogical Server Index", html_index) "\n" if(genweb_image) { "\"\"

\n" } "

INDEX

\n" "
    \n" forindiset(index, me, v, n) { call href(me, href_table) "\n" } "
\n" call write_tail() } proc href(me, href_table) { if(me) { call print_name(me, 1) if(ne(strcmp(upper(surname(me)), last_surname), 0)) { print(" ", upper(surname(me)), "\n") set(last_surname, save(upper(surname(me)))) "\n" } "
  • " set (path, get_href(me, href_table)) if(found) { "\n" } pop(RVAL) if(found) { "" } do_info(me) } } proc html_header(str, isindex) { "\n" "\n" if(isindex) { "\n" } " " str " \n" "\n" } proc print_name (me, last) { call get_title(me) set(junk, pop(RVAL)) push(RVAL, save(concat(fullname(me, 1, not(last), 45), junk))) } proc get_title (me) { fornodes(inode(me), node) { if (not(strcmp("TITL", tag(node)))) { set(n, node) } } if (n) { push(RVAL, save(concat(" ", value(n)))) } else { push(RVAL, "") } } proc rjt(n, w) { if (lt(n, 10)) { set(d, 1) } elsif (lt(n, 100)) { set(d, 2) } elsif (lt(n, 1000)) { set(d, 3) } elsif (lt(n, 10000)) { set(d, 4) } else { set(d, 5) } if (lt(d, w)) { set(pad, save( trim(" ", sub(w, d)))) } else{ set(pad, "") } push(RVAL, save( concat(pad, save(d(n))))) } proc othernames(indi){ if(indi){ set(count, 0) fornodes(inode(indi), subnode){ if(eqstr(tag(subnode), "NAME")){ incr(count) if(eq(count, 2)){ "
    Other Names: \n
      " "
    • " call nameval(subnode) "
    • " }elsif(gt(count, 2)){ "
    • " call nameval(subnode) "
    • \n" } } } if(gt(count, 1)){ "
    \n" } } } proc afn(indi){ if(indi){ fornodes(inode(indi), subnode){ if(eqstr(tag(subnode), "AFN")){ "AFN " value(subnode) "

    \n" } } } } proc nameval(namenode){ list(np) extractnames(namenode, np, nc, sc) forlist(np, v, i){ v " " } } proc print_html(indi){ fornodes(inode(indi), node) { if (eqstr("REPORT", tag(node))) { set(m, child(node)) if (eqstr("TYPE", tag(m))) { if (eqstr("HTML", value(m))) { "
    \n" fornodes(m, o) { if (eqstr("DATA", tag(o))) { value(o) "\n" } } } else { if (eqstr("HTML-STATIC", value(m))) { "
    \n" fornodes(m, o) { if (eqstr("DATA", tag(o))) { value(o) "\n" } } } } } } } } func divorced(fam) { fornodes(fnode(fam), node) { if (eq(0, strcmp(tag(node), "DIV"))) { return(node) } } return(0) } lifelines-3.0.61/reports/dump_html_sd.ll0000700002540200244210000005417110320266233020454 0ustar prappDomain Users/* * @progname dump_html_sd.ll * @version 1.0 * @author Scott McGee, Steve Dum * @category sample * @output HTML * @description dump_html_sd.ll dumps an entire database to static HTML files. by Scott McGee (smcgee@microware.com) 1.4 13/06/02 lots of modifications by Steve Dum (stephen.dum@verizon.net) This report basically generate a master index and write a series of html files for everyone in your database. It generates both decendant and pedigree charts for each individual. There are lots of assumptions in how you store data in your database inbeded in the script -- or should I say how I store info. SD. */ /* customization globals - customize values assigned in main */ global(db_owner) /* name of database owner */ global(owner_addr) /* url of database owner (mailto or homepage) */ global(use_image) /* flag to indicate whether to use genweb image */ global(genweb_image) /* name of genweb image to place on each page */ global(use_page) /* flag to add link to genweb page or homepage */ global(genweb_page) /* URL of base genweb (or homepage) web page */ global(page_name) /* name of base genweb (or homepage) web page */ global(LDS) /* display LDS Ordinances? (1=yes 0=no) */ global(html_index) /* put HTML tag in INDEX file (1=yes 0=no) */ proc set_static_html_globals(){ /* customize these globals to customize the output to your site */ set(db_owner, getproperty("user.fullname")) set(owner_addr, getproperty("user.email")) set(use_image, 0) /* 1 to use image, 0 to not use image */ set(genweb_image, "../../pics/genweb.gif") set(use_page, 0) /* 1 to use link to page, 0 if not */ set(genweb_page, "../genweb.html") set(page_name, "genweb page") /* might change to "my homepage" */ set(LDS, 0) set(html_index, 0) /* use 1 to add to INDEX file */ } /* end of customization globals - customize values assigned in main */ /* other globals */ global(found) /* external file to inline image found flag */ global(per_file) /* number of people per file to write */ global(first) /* first person shouldn't be asked about */ global(RVAL) /* ?? (part of borrowed code) */ global(last_surname) /* last surname in index - used for anchors */ global(first_indi) /* starting person */ global(sour_count) /* count of source records */ global(sourcnt) /* count of source records when doing birth/death */ global(href_table) /* table that has filenames individuals are in */ global(linecount) /* globals for descendent chart */ global(MAXLINES) global(gens) global(mainpre) global(spousepre) global(indentpre) proc main () { set(gens, 3) set(mainpre, "-") set(spousepre, " s-") set(indentpre, " |") set(MAXLINES, 500) set(sour_count,0) indiset(out_set) call set_static_html_globals() set(per_file, 1) print("Reading data...\n") forindi(j, n) { addtoset(out_set, j, n) } print("Working...\n") call html_out(out_set) } proc html_out (o) { /* set(s, concat("There are ", d(lengthset(o)), " people in your list, how many per file?")) getstr(a,s) set(per_file, atoi(a)) */ set(per_file,50) if (not(per_file)) { set(per_file, 1) } set(loop_count, 0) set(file_count, 0) call init_href(o) forindiset(o, i, j, n) { set(indi, i) if (eq(loop_count, 0)) { incr(file_count) call write_head(file_count) } incr(loop_count) call genhtml(indi, o) if (or(eq(loop_count, per_file), eq(n, lengthset(o)))) { call write_tail() set(loop_count, 0) } } call do_index(o) } proc write_head(count) { set(filename, concat("html/", database(), "/",database(),"_", d(count), ".html")) print("Writing ", filename, "\n") newfile(filename, 0) "\n" " " database() "_" d(count) ".html \n" "\n" "\n" if (use_image) { "\"\"

    \n" } } proc write_tail() { "

    \n" date(gettoday()) "
    \n" "Database maintained by " "\n" db_owner "
    \n" "\n" } proc genhtml (i, o) { /* print(" ", fullname(i,0,1,300), "\n") */ "\n" /* was

    ...

    but fudged to get key in slightly smaller font */ "

    " givens(i) " " surname(i) " (" key(i) ")

    \n" set(path, get_picture(i)) if (found) { "\"\"
    \n" } "

    " date(birth(i)) " - " date(death(i)) "

    " nl() call afn(i) call scan_events(i,0) if (LDS) { /* LDS ordinances */ set(started, 0) fornodes(inode(i), node) { if (eq(0, strcmp(tag(node), "BAPL"))) { if (not(started)) { set(started, 1) "
    LDS Ordinances: B " } } /* determine if endowed */ if (eq(0, strcmp(tag(node), "ENDL"))) { if (not(started)) { set(started, 1) "
    LDS Ordinances: " } "E " } } /* determine if sealed to parents */ set(fam, fnode(parents(i))) set(ind, inode(i)) if (fam) { fornodes(fam, node) { if (and(eqstr("CHIL", tag(node)), eqstr(xref(ind), value(node)))) { fornodes(node, next) { if (eqstr(tag(next), "SLGC")) { if (not(started)) { set(started, 1) "
    LDS Ordinances: " } "SC " } } } } } if (started){ "
    \n" } } call othernames(i) call print_html(i) "
    \n" if (p, father(i)) { "

    \n" "" "Father : " call name_href(p,1) "
    \n" } if (p, mother(i)) { "

    \n" "" "Mother : " call name_href(p,1) "
    \n" } families(i, f, s, n) { "

    \n" "" "Spouse" if (gt(nfamilies(i), 1)) { " " d(n) } " : \n" if (s) { /* family has a spouse */ call name_href(s,1) "
    \n" } if (e, marriage(f)) { "

    \n" "Married " long(e) "
    \n" } if (e, divorced(f)) { "

    \n" "Divorced " long(e) "
    \n" } if (LDS) { fornodes(fnode(f), node) { if (eq(0, strcmp(tag(node), "SLGS"))) { "
    LDS Ordinances: SS\n" } } } if (nchildren(f)) { "

    \n" "Children\n" "

      \n" children(f, c, nn) { "
    1. " call name_href(c,1) "
    2. \n" } "
    \n" } } call print_notes(inode(i)) call print_indi_sources(i) if (parents(i)) { "

    \nPedigree Chart for " fullname(i,0,1,300) "
    \n

    \n"
         call pedigree(0,i)
         "
    \n" } if (nfamilies(i)) { "Descendent Chart for " fullname(i,0,1,300) "
    \n
    \n"
        set(linecount,0)
        call dofam(i,"",1,0)
        "
    \n" } /* scan events for sources */ call scan_events(i,1) "
    \n" /* Insert code here for Pedigree and Descendant charts if (parents(i)) { "Pedigree Chart
    \n" } if (nfamilies(i)) { set(hasChildren, 0) families(i, f, s, n) { if (nchildren(f)) { set(hasChildren, 1) } } if (hasChildren) { "Descendant Chart\n" } } "
    \n" */ "
    \n" "[" "Index]
    \n" if (use_page) { "[" "Return to " page_name " ]
    \n" } "


    \n" } proc init_href(outset){ table(href_table) forindiset(outset, indi, j, number) { insert(href_table, save(key(indi)), number) } } func get_href(indi) { set(path, "") set(found, 0) set(value, lookup(href_table, key(indi))) if (value){ set(number, add(div(sub(value, 1), per_file), 1)) set(path, concat(database(),"_", d(number), ".html")) set(found, 1) } return(path) } proc print_notes(i){ set(first, 1) fornodes(i, n) { set(hdr,"") if (eqstr(tag(n), "NOTE")) { set(hdr,"Note") } elsif(eqstr(tag(n),"NOTE_L")) { set(hdr,"Note_L") } elsif(eqstr(tag(n),"NOTE_Q")) { set(hdr,"Note_Q") } elsif(eqstr(tag(n),"NOTE_E")) { set(hdr,"Note_E") } if (strcmp(hdr,"")) { set(s, value(n)) if (and(strcmp("",s),reference(s))) { set(n,dereference(s)) set(hdr, save(concat(hdr," ",substring(s,2,sub(strlen(s),1))))) } print_note(n,hdr) } } } proc print_indi_sources(indi) { fornodes(inode(indi), node) { set(hdr,"") set(ntag,tag(node)) set(first,0) if (eqstr("SOUR", ntag)) { set(hdr,"Source") } elsif(eqstr("ADDR", ntag)) { set(hdr,"Address") } elsif(eqstr("_MDCL", ntag)) { set(hdr,"Medical") } elsif(eqstr("OCCU", ntag)) { set(hdr,"Occupation") } elsif(eqstr("_FA", trim(ntag,3))) { set(hdr,"Fact") } if (strcmp("",hdr)) { if (reference(value(node))) { set(node,dereference(value(node))) } "

    \n" "" hdr ":: " if (nestr("",value(node))) { incr(first) value(node) "
    \n" } fornodes(node, next) { if (nestr("",value(next))) { /* if(eq(first,1)) { "
    " } */ incr(first) value(next) "
    \n" } fornodes(next, nn) { if (nestr("",value(next))) { /* if(eq(first,1)) { "
    " } */ incr(first) value(nn) "
    \n" } } } if(gt(first,1)) { "\n" } } } } proc show_path (node){ list(path) while (node) { push(path, tag(node)) set(node, parent(node)) } "(" while (s, pop(path)) { if (eqstr(lower(s), "indi")){ "Individual " }elsif (eqstr(lower(s), "fam")){ "Family " }elsif (eqstr(lower(s), "famc")){ "family " }elsif (eqstr(lower(s), "fams")){ "family " }elsif (eqstr(lower(s), "note")){ "note" }elsif (eqstr(lower(s), "birt")){ "birth " }elsif (eqstr(lower(s), "deat")){ "death " }elsif (eqstr(lower(s), "buri")){ "burial " }elsif (eqstr(lower(s), "plac")){ "place " }else{ lower(s) " " } } ")\n" } proc do_index(indi_set) { set(last_surname, "ZZ") list(RVAL) indiset(index) set(index, indi_set) namesort(index) print("Writing index.html\n") call create_index_file(index) print("Writing gendex.txt\n") call create_gendex_file(index) } proc create_gendex_file(index) { set(fn, save(concat("html/", database(), "/gendex.txt"))) newfile(fn, 0) forindiset(index, me, v, n) { set(path, concat(save(get_href(me)), "#", key(me))) path "|" surname(me) "|" givens(me) " /" surname(me) "/" "|" if (evt, birth(me)) { date(evt) } "|" if (evt, birth(me)) { place(evt) } "|" if (evt, death(me)) { date(evt) } "|" if (evt, death(me)) { place(evt) } "|\n" } } proc create_index_file(index) { set(fn, save(concat("html/", database(), "/index.html"))) newfile(fn, 0) call html_header(concat("Index for ",database()," Database"), html_index) "\n" if (use_image) { "\"\"

    \n" } "

    Index

    \n" "
      \n" forindiset(index, me, v, n) { call href(me) "\n" } "
    \n" call write_tail() } /* href generates html link reference for name in form last,first */ proc href(indi) { if (indi) { call print_name(indi, 1) if (ne(strcmp(upper(surname(indi)), last_surname), 0)) { print(" ", upper(surname(indi)), "\n") set(last_surname, save(upper(surname(indi)))) "\n" } "
  • " set (path, get_href(indi)) if (found) { "\n" } pop(RVAL) if (found) { "" } do_info(indi,1) } } /* name_href generates html link reference for name */ proc name_href(indi,long) { set (path, get_href(indi)) if (found) { "" } if (t,title(indi)) { t " " } fullname(indi,0,1,300) if (found) {""} do_info(indi,long) } proc html_header(str, isindex) { "\n" "\n" if (isindex) { "\n" } " " str " \n" "\n" } proc print_name (me, last) { call get_title(me) set(junk, pop(RVAL)) push(RVAL, save(concat(fullname(me, 1, not(last), 45), junk))) } proc get_title (me) { fornodes(inode(me), node) { if (not(strcmp("TITL", tag(node)))) { set(n, node) } } if (n) { push(RVAL, save(concat(" ", value(n)))) } else { push(RVAL, "") } } proc rjt(n, w) { if (lt(n, 10)) { set(d, 1) } elsif (lt(n, 100)) { set(d, 2) } elsif (lt(n, 1000)) { set(d, 3) } elsif (lt(n, 10000)) { set(d, 4) } else { set(d, 5) } if (lt(d, w)) { set(pad, save( trim(" ", sub(w, d)))) } else{ set(pad, "") } push(RVAL, save( concat(pad, save(d(n))))) } proc othernames(indi){ if (indi){ set(count, 0) fornodes(inode(indi), subnode){ if (eqstr(tag(subnode), "NAME")){ incr(count) if (eq(count, 2)){ "
    Other Names: \n
      " "
    • " call nameval(subnode) "
    • " } elsif (gt(count, 2)){ "
    • " call nameval(subnode) "
    • \n" } } elsif (eqstr(tag(subnode),"ALIA")){ incr(count) if (eq(count, 2)){ "
      Other Names: \n
        " "
      • " value(subnode) "
      • " } elsif (gt(count, 2)){ "
      • " value(subnode) "
      • \n" } } } if (gt(count, 1)){ "
      \n" } } } proc afn(indi){ if (indi){ fornodes(inode(indi), subnode){ if (eqstr(tag(subnode), "AFN")){ "AFN " value(subnode) "

      \n" } } } } func do_info(me,long){ if(not(me)){ return("") } set(out, " -") if (evt, birth(me)) { if (long) { set(out, concat(out, " b. ", long(evt))) } else { set(out, concat(out, " b. ", short(evt))) } } else { if (evt, baptism(me)) { if (long) { set(out, concat(out, " bapt. ", long(evt))) } else { set(out, concat(out, " bapt. ", short(evt))) } } else { if (evt, bapt(me)) { if (long) { set(out, concat(out, " bapt. ", long(evt))) } else { set(out, concat(out, " bapt. ", short(evt))) } } } } if (evt, death(me)) { if (long) { set(out, concat(out, " d. ", long(evt))) } else { set(out, concat(out, " d. ", short(evt))) } } return(out) } func bapt (indi) { fornodes(inode(indi), node) { if (eq(0, strcmp(tag(node), "BAPL"))) { return(node) } if (eq(0, strcmp(tag(node), "BAPM"))) { return(node) } if (eq(0, strcmp(tag(node), "BAPT"))) { return(node) } } return(0) } proc nameval(namenode){ list(np) extractnames(namenode, np, nc, sc) forlist(np, v, i){ v " " } } proc print_html(indi){ fornodes(inode(indi), node) { if (eqstr("REPORT", tag(node))) { set(m, child(node)) if (eqstr("TYPE", tag(m))) { if (eqstr("HTML", value(m))) { "
      \n" fornodes(m, o) { if (eqstr("DATA", tag(o))) { value(o) "\n" } } } else { if (eqstr("HTML-STATIC", value(m))) { "
      \n" fornodes(m, o) { if (eqstr("DATA", tag(o))) { value(o) "\n" } } } } } } } } func divorced(fam) { fornodes(fnode(fam), node) { if (eq(0, strcmp(tag(node), "DIV"))) { return(node) } } return(0) } proc scan_events(indi, flag) { set(sourcnt,sour_count) fornodes(inode(indi),e) { set(match,1) if (eq(0, strcmp(tag(e), "BIRT"))) { set (type,"Birth") } elsif (eq(0, strcmp(tag(e), "DEAT"))) { set (type,"Death") } elsif (eq(0, strcmp(tag(e), "BAPL"))) { set (type,"Baptism") } elsif (eq(0, strcmp(tag(e), "CHR"))) { set (type,"Christening") } elsif (eq(0, strcmp(tag(e), "BURI"))) { set (type,"Burial") } elsif (eq(0, strcmp(tag(e), "BAPT"))) { set (type,"Baptism") } elsif (eq(0, strcmp(tag(e), "BAPM"))) { set (type,"Baptism") } else { set(match,0) } if (eq(match,1)) { if (flag) { /* flag == 1 print notes with sources */ print_sources(e,type) } else { "" type " : " long(e) fornodes(e, s) { if (and(eqstr(tag(s), "SOUR"),nestr(value(s),""))) { incr(sourcnt) " [" d(sourcnt) "]" } } "
      \n" } } } } func print_sources(e,t) { fornodes(e, s) { if (and(eqstr(tag(s), "SOUR"),nestr(value(s),""))) { incr(sour_count) "

      \n[" d(sour_count) "][Source " t "]\n" value(s) nl() fornodes(s, n) { set(hdr,"") if (eqstr(tag(n), "NOTE")) { set(hdr,"Note") } elsif(eqstr(tag(n),"NOTE_L")) { set(hdr,"Note_L") } elsif(eqstr(tag(n),"NOTE_Q")) { set(hdr,"Note_Q") } elsif(eqstr(tag(n),"NOTE_E")) { set(hdr,"Note_E") } if (strcmp(hdr,"")) { set(s, value(n)) if (and(strcmp("",s),reference(s))) { set(n,dereference(s)) set(hdr,save(concat(hdr," ",s))) } print_note(n,hdr) } } } } } func print_note(node,hdr) { "

      \n" "" hdr ": " if (strcmp("",value(node))) { value(node) nl() } fornodes(node,next) { set(ctag,tag(next)) if (or(eqstr("CONT",ctag),eqstr("CONC",ctag))) { if (eqstr("CONT",ctag)) { "
      " nl() } value(next) } } "

      \n" } func get_picture (indi) { /* Note: this code assumes the following tag sturcture return found==1 if url, found==2 if FILE 1 _PIC 2 FILE pics/scott.gif 2 DATE Jul 1989 1 _PIC 2 URL http://www.someurl.net/~user/userpic.gif where the first defines an external file stored on the same file system and gives the path in the FILE record and the type in the FORM record. The second defines an external file stored on another site and provides a URL for referencing it. I have proposed this as an extension to GEDCOM, but nobody said very much. */ set(found, 0) set(path, "") fornodes(inode(indi), node) { if (eqstr("_PIC", tag(node))) { set(m, child(node)) /* files on local system or file on remote system */ if (or(eqstr("FILE", tag(m)),eqstr("URL", tag(m)))) { set(path, value(m)) incr(found) if (eqstr("FILE",tag(m))) { incr(found) } } } } return(path) } proc pedigree (level, indi) { set(has_parent, or(father(indi), mother(indi))) if (and(lt(level, 4), has_parent)) { call pedigree(add(1,level), father(indi)) } if (indi) { col(mul(4,level)) call name_href(indi,le(level,3)) nl() } else { col(mul(4,level)) "(Spouse not known)" nl() } if (and(lt(level, 4), has_parent)) { call pedigree(add(1,level), mother(indi)) } } /* startfam: If we haven't reached the maximum or specified generation count, call dofam for each child in this family. Otherwise, print a message line if there are further descendants at this point. */ proc startfam (fam,prefix,level,isstep) { if (le(level,gens)) { /* if not at last generation */ children (fam,child,num) { /* for each child */ call dofam (child, /* call dofam */ concat(prefix, indentpre), add(level,1), isstep) } } else { /* don't do this generation */ if (gt(nchildren(fam),0)) { /* but if there are children, */ /* issue message */ prefix " [[Further descendants here" if (eq(isstep,1)) { " (stepchildren)" } ".]]\n" incr(linecount) } } } /* dofam: Write out a person and check for spouses and children. Each spouse is written, then this routine is called recursively for each child. An incremented level is passed along in case the user specified a limited number of generations */ proc dofam (nm,prefix,level,isstep) { set(pre,mainpre) call printpers(nm,concat(prefix,pre),0,0) /* print this person */ if (and(ge(linecount,MAXLINES),gt(nfamilies(nm),0))) { prefix " [[Reached line count max." " May be further descendants here." "]]\n" } else { families(nm, fam, spouse, num) { /* do for each family */ if (ne(spouse,null)) { /* if there is a spouse */ /* print spouse */ call printpers(spouse,concat(prefix,spousepre),1,fam) if (and(ge(linecount,MAXLINES),gt(nchildren(fam),0))) { prefix " [[Reached line count max." " May be further descendants here." "]]\n" } else { families (spouse, spsfam, ospouse, num2) { /* for each of the spouse families*/ if(eq(fam,spsfam)){ /* only non-step families */ call startfam (spsfam,prefix,level,0) } } /*end spouse's families*/ } /* end spouse not ge MAXLINES */ } else { /* there is no spouse */ call startfam (fam,prefix,level,0) } /*end else no spouse*/ } /*end 'families'*/ } /* end MAXLINES else */ } /*end 'proc dofam'*/ /* printpers: Write output line for one person. Include birth and death dates if known. For a spouse, include marriage date if known. */ proc printpers (nm, prefix, spouse, fam) { prefix if(nfamilies(nm)){ set(hasChildren, 0) families(nm, f, s, n){ if(nchildren(f)){ set(hasChildren, 1) } } } call name_href(nm,1) if (e, marriage(fam)) { "\t m. " stddate(e) } "\n" incr(linecount) } /* end proc printpers */ lifelines-3.0.61/reports/eol.ll0000700002540200244210000002211410113004165016536 0ustar prappDomain Users/* * @progname eol.ll * @version 4 of 1995-01 * @author Tom Wetmore and John Chandler * @category * @output Text, 80 cols * @description * Say you want to know who all of your end-of-line ancestors are, that is, your direct ancestors whose parents you have not yet discovered; these are the people most of us spend most of our time on researching. Here is a program that will produce the list. Any ancestor will be listed at most once, even in cases where lines cross. Each person is shown with date and place of birth and death -- a "guess" is made for the year of birth if it is not known. Set the Do_all variable to 1 if you want the end-of-line list to include even persons with an unknown surname. This program shares the birth-guessing subroutine with tinytafel. */ global(plist) global(abbvtab) /* Global definitions for birth-guessing subroutine */ global(pdate) global(pplace) global(datemod) /* value returned by get_modifier */ global(pdmax) global(pdmin) /* Assumptions for guessing year of birth */ global(Minpar) /* assumed minimum age of parenthood */ global(Typicl) /* typical age for parenthood or marriage */ global(Menopa) /* assumed maximum age of motherhood */ global(Oldage) /* assumed age at death */ proc main () { set(Do_all,0) /* if 0, then ignore surnameless persons */ /* Assumptions for guessing year of birth */ set(Minpar,14) /* assumed minimum age of parenthood */ set(Typicl,20) /* typical age for parenthood or marriage */ set(Menopa,50) /* assumed maximum age of motherhood */ set(Oldage,60) /* assumed age at death */ list(ilist) list(plist) list(pnlist) table(seen) table(abbvtab) indiset(set) getindi(indi) monthformat(4) "END OF LINE ANCESTORS OF " fullname(indi,1,1,30) "\n\n" call setupabbvtab() enqueue(ilist, indi) while(indi, dequeue(ilist)) { set(show, 1) if (par, father(indi)) { set(do_this,Do_all) if(not(Do_all)) { extractnames (inode(par),pnlist,n,s) set(do_this, strcmp(getel(pnlist,s),"")) } if(do_this) { enqueue(ilist, par) set(show, 0) } } if (par, mother(indi)) { set(do_this,Do_all) if(not(Do_all)) { extractnames (inode(par),pnlist,n,s) set(do_this, strcmp(getel(pnlist,s),"")) } if(do_this) { enqueue(ilist, par) set(show, 0) } } if (show) { set(pkey, key(indi)) if(not(lookup(seen,pkey))) { insert(seen,pkey,1) addtoset(set, indi, pkey) } } } namesort(set) forindiset (set, indi, val, num) { col(1) fullname(indi,1,0,27) call set_year_place(indi) call showevent(29, birth(indi), pdate, pplace) call showevent(55, death(indi), 0, 0) nl() } } proc showevent (column, event, apdate, applace) { col(column) set(column, add(column, 12)) if(year(event)) { stddate(event) sp() } elsif(apdate) { " c" apdate " " } extractplaces(event, plist, num) if (and(applace,eq(num,0))) { call extractstr(applace,plist) set(num,length(plist)) } if (gt(num, 0)) { col(column) set(last, getel(plist, num)) if (yes, lookup(abbvtab, last)) { set(last, yes) } trim(last, 10) } } proc extractstr (string,list) { list(list) call ext_step(list,string,1,strlen(string),0) } proc ext_step(list,string,start,len,nth) { if(gt(start,len)) {return()} set(nth,add(1,nth)) if (not(strcmp(substring(string,start,start)," "))) { set(start,add(1,start)) } set(end, sub(index(string, ",", nth),1)) if(lt(end,0)) {set(end,len)} enqueue (list, substring(string,start,end)) if (lt(end,len)) {call ext_step(list,string,add(end,2),len,nth)} } proc setupabbvtab () { insert(abbvtab, "Connecticut", "CT") insert(abbvtab, "Connecticut Colony", "CT") insert(abbvtab, "New Haven Colony", "CT") insert(abbvtab, "Massachusetts", "MA") insert(abbvtab, "Plymouth Colony", "MA") insert(abbvtab, "New York", "NY") insert(abbvtab, "England", "ENG") insert(abbvtab, "Holland", "HOL") insert(abbvtab, "Maryland", "MD") insert(abbvtab, "Wales", "WLS") insert(abbvtab, "Isle of Man", "IOM") insert(abbvtab, "Nova Scotia", "NS") insert(abbvtab, "Ireland", "IRE") insert(abbvtab, "Rhode Island", "RI") insert(abbvtab, "prob England", "ENG?") } /* set global variable datemod to +1 if event's date is marked AFT, -1 if marked BEF, and 0 otherwise */ proc get_modifier(event) { set (datemod,0) if (junk,date(event)) { set (junk,trim(junk,3)) if(not(strcmp(junk,"AFT"))) { set (datemod,1) } elsif(not(strcmp(junk,"BEF"))) { set (datemod,neg(1)) } } } /* get birth-year for given person -- use whatever clues available, in this order. The culture-dependent limits are defined in "main". 1. birth 2. baptism 3. birth of older sibling (+2) 4. birth of younger sibling (-2) 5. baptism of younger sibling (upper limit only) 6. birth of parent (+14: lower limit only) 7. death of parent (upper limit only) 8. marriage or birth of first child (-20: recursive) 9. marriage or birth of first child (-14: recursive upper limit) 9. birth of last child (-50: lower limit only) 10. death, known to be a parent (-60) 11. death, not known to be a parent */ proc set_year (person) { set (maxyr,9999) /* set upper bound */ set (minyr,0) /* and lower bound */ set (guess,0) /* clear "best" guess */ if (yr, year(birth(person))) { /* solid data */ call get_modifier(birth(person)) set (iyr,atoi(yr)) if(ge(datemod,0)) {set(minyr,iyr)} if(le(datemod,0)) {set(maxyr,iyr)} if(datemod) {set (yr,0)} } if (not(yr)) { if (yr, year(baptism(person))) { /* pretty good guess */ set(iyr,atoi(yr)) call get_modifier(baptism(person)) if(and(le(datemod,0),lt(iyr,maxyr))) {set(maxyr,iyr)} set (guess, iyr) } if(sibl,prevsib(person)) { /* try older sibling */ if (yr, year(birth(sibl))) { call get_modifier(birth(sibl)) if(ge(datemod,0)) { set (iyr,atoi(yr)) if(gt(iyr,minyr)) {set(minyr,iyr)} if(not(or(guess,datemod))) {set(guess,add(iyr,2))} } } } if(sibl,nextsib(person)) { /* try younger sibling */ if (yr, year(birth(sibl))) { call get_modifier(birth(sibl)) if(le(datemod,0)) { set (iyr,atoi(yr)) if(lt(iyr,maxyr)) {set(maxyr,iyr)} if(not(or(guess,datemod))) {set(guess,sub(iyr,2))} } else {set(yr,0)} } if (not(yr)) { if (yr, year(baptism(sibl))) { set(iyr,atoi(yr)) call get_modifier(baptism(sibl)) if(and(le(datemod,0),lt(iyr,maxyr))) {set(maxyr,iyr)} } } } if(sp,mother(person)) { /* set limits from mother */ if(yr,year(birth(sp))) { call get_modifier(birth(sp)) set(iyr,add(atoi(yr),Minpar)) if(and(ge(datemod,0),gt(iyr,minyr))) {set(minyr,iyr)} } if(yr,year(death(sp))) { call get_modifier(death(sp)) set(iyr,atoi(yr)) if(and(le(datemod,0),lt(iyr,maxyr))) {set(maxyr,iyr)} } } if(sp,father(person)) { /* set limits from father */ if(yr,year(birth(sp))) { call get_modifier(birth(sp)) set(iyr,add(atoi(yr),Minpar)) if(and(ge(datemod,0),gt(iyr,minyr))) {set(minyr,iyr)} } if(yr,year(death(sp))) { call get_modifier(death(sp)) set(iyr,add(atoi(yr),1)) if(and(le(datemod,0),lt(iyr,maxyr))) {set(maxyr,iyr)} } } set(maryr,9999) /* marriage date or upper limit */ set(marbest,9999) /* best guess at marriage date */ set(lastbirth,0) families(person,fam,sp,spi) { /* check on marriage/chidren */ if(yr, year(marriage(fam))) { call get_modifier(marriage(fam)) set(iyr,atoi(yr)) /* go by marriage date */ if(and(le(datemod,0),lt(iyr,maryr))) {set(maryr,iyr)} if(and(le(datemod,0),lt(iyr,marbest))) {set(marbest,iyr)} } if(or(eq(maryr,9999),female(person))) { children (fam,child,famchi) { call set_year(child) /* recurse on children */ if(lt(pdmax,maryr)) {set(maryr,pdmax)} if(strcmp(pdate,"????")) { set(iyr,atoi(pdate)) if(lt(iyr,marbest)) {set(marbest,iyr)} } if(gt(pdmin,lastbirth)) {set(lastbirth,pdmin)} /* get earliest & latest child */ } } } if(eq(marbest,9999)) {set(marbest,maryr)} if(lt(maryr,9999)) { set(iyr,sub(maryr,Minpar)) /* assume biological limit */ if(lt(iyr,maxyr)) {set(maxyr,iyr)} if(not(guess)) {set(guess,sub(marbest,Typicl))} /* typical age */ } if(gt(lastbirth,0)) { set(iyr,sub(lastbirth,Menopa)) /* another biological limit */ if(gt(iyr,minyr)) {set(minyr,iyr)} } if (yr, year(death(person))) {call get_modifier(death(person))} elsif (yr, year(burial(person))) {call get_modifier(burial(person))} if (yr) { set (iyr, atoi(yr)) if(and(le(datemod,0),lt(iyr,maxyr))) {set(maxyr,iyr)} if(not(guess)) { /* still need a guess? */ if(nfamilies(person)) { set(guess,sub(iyr,Oldage))} /* died old */ else {set(guess,iyr)} /* no family => died young */ } } if (gt(guess,maxyr)) { set(guess,maxyr) } /* apply limit, in case... */ if (lt(guess,minyr)) { set(guess,minyr) } if (gt(guess,0)) {set (yr,d(guess))} } if (not(yr)) { set (yr, "????") } set(pdate, yr) /* values returned */ set(pdmin,minyr) set(pdmax,maxyr) } proc set_year_place (person) { call set_year (person) set(pl, place(birth(person))) if (not(pl)) {set(pl, place(baptism(person)))} set(pplace, pl) } lifelines-3.0.61/reports/est_life_span.ll0000700002540200244210000002043210313327063020602 0ustar prappDomain Users/* * @progname est_life_span.ll * @version none * @author Rafal Prinke * @category * @output Text * @description The program below finds the widest possible span of life, estimating the uncertain and some unknown dates on the basis of user defined values in the table for various combinations of date modifiers etc. Then it compares the midpoints of this with midpoints of others' life spans and if they fall within a user defined range, the two are considered "possibly identical". This is actually just one procedure of several that should be in a program like that - but perhaps the most important one as people may change names, occupations, etc. but they cannot change the time period. I added two arbitrary tags: FAPP and LAPP for "first/last appearance" in sources. At present the program compares only the life midpoints and surnames (exactly as they are recorded). Adding other elements for comparison should not be a problem - but there should be a more complicated procedure for comparing names. I do not like soundex as it is misleading (and my bias is founded on the fact that two spellings of my own surname - Prinke and Brinke - never match under the standard soundex :-) Perhaps a soundex that would INCLUDE conversion of the first character into number would nee to be considered? That does not solve many problems of non-English name, either. So perhaps a user defined soundex? This might be possible with user defined functions! The procedure below does not deal with BETWEEN dates for death yet. Also people who have no dates at all are not dealt with properly - they should be compared with everyone (generating a lot of rubbish output) or their life span should be found out from children or spouses. */ global(year1) /* earliest possible */ global(year2) /* latest possible */ global(diffs) global(someone) global(another) proc life_span(someone) { set(year1,0) if (bt,birth(someone)) { set(year1,atoi(year(bt))) if (ne(index(upper(date(bt)),"BEF",1),0)) { set(year1,sub(year1,lookup(diffs,"bef_birt"))) } if (and(ne(index(upper(date(bt)),"ABT",1),0),ne(index(upper(date(bt)),"EST",1),0))) { set(year1,sub(year1,lookup(diffs,"abt_birt"))) } } if (eq(year1,0)) { if (bp,baptism(someone)) { set(year1,atoi(year(bp))) if (ne(index(upper(date(bp)),"BEF",1),0)) { set(year1,sub(year1,lookup(diffs,"bef_birt"))) } if (and(ne(index(upper(date(bp)),"ABT",1),0),ne(index(upper(date(bp)),"EST",1),0))) { set(year1,sub(year1,lookup(diffs,"abt_birt"))) } } } if (eq(year1,0)) { set(r, inode(someone)) fornodes (r, n) { if (eq(0, strcmp("FAPP", tag(n)))) { extractdate(n,da,mo,ye) set(year1,ye) set(year1,sub(year1,lookup(diffs,"app1"))) } } } if (and(eq(year1,0),ne(nfamilies(someone),0))) { set(myear,2000) families(someone,fm,sp,mnr) { set(fyear,atoi(year(marriage(fm)))) if (lt(fyear,myear)) { set (myear,fyear) set(mar,marriage(fm)) } } if (and(ne(myear,2000),ne(myear,0))) { set(year1,sub(myear,lookup(diffs,"f_marr"))) if (ne(index(upper(date(mar)),"BEF",1),0)) { set(year1,sub(year1,lookup(diffs,"bef_marr"))) } if (and(ne(index(upper(date(mar)),"ABT",1),0),ne(index(upper(date(bp)),"EST",1),0))) { set(year1,sub(year1,lookup(diffs,"abt_marr"))) } } } set(year2,0) if (dt,death(someone)) { set(year2,atoi(year(dt))) if (ne(index(upper(date(dt)),"AFT",1),0)) { set(year2,add(year2,lookup(diffs,"aft_deat"))) } if (and(ne(index(upper(date(dt)),"ABT",1),0),ne(index(upper(date(dt)),"EST",1),0))) { set(year2,add(year2,lookup(diffs,"abt_deat"))) } } if (eq(year2,0)) { if (br,burial(someone)) { set(year2,atoi(year(br))) if (ne(index(upper(date(br)),"AFT",1),0)) { set(year2,add(year2,lookup(diffs,"aft_deat"))) } if (and(ne(index(upper(date(br)),"ABT",1),0),ne(index(upper(date(br)),"EST",1),0))) { set(year2,add(year2,lookup(diffs,"abt_deat"))) } } } if (eq(year2,0)) { set(r, inode(someone)) fornodes (r, n) { if (eq(0, strcmp("LAPP", tag(n)))) { extractdate(n,da,mo,ye) set(year2,ye) set(year2,add(year2,lookup(diffs,"app2"))) } } } if (and(eq(year2,0),ne(nfamilies(someone),0))) { set(myear,0) families(someone,fm,sp,mnr) { set(lyear,atoi(year(marriage(fm)))) if (gt(lyear,myear)) { set (myear,lyear) set(mar,marriage(fm)) } } if (ne(myear,0)) { set(year2,add(myear,lookup(diffs,"l_marr"))) if (ne(index(upper(date(mar)),"AFT",1),0)) { set(year2,add(year2,lookup(diffs,"aft_marr"))) } if (and(ne(index(upper(date(mar)),"ABT",1),0),ne(index(upper(date(mar)),"EST",1),0))) { set(year2,add(year2,lookup(diffs,"abt_marr"))) } } } if (ne(add(year1,year2),0)) { if (and(eq(year1,0),ne(year2,0))) { set(year1,sub(year2,lookup(diffs,"birt_deat"))) } if (and(eq(year2,0),ne(year1,0))) { set(year2,add(year1,lookup(diffs,"birt_deat"))) } } } proc main() { table(diffs) /* values for range of date modifiers etc. */ insert(diffs,"bef_birt", 10) insert(diffs,"abt_birt", 10) insert(diffs,"aft_deat", 10) insert(diffs,"abt_deat", 10) insert(diffs,"f_marr",25) insert(diffs,"l_marr",13) insert(diffs,"bef_marr", 10) insert(diffs,"abt_marr", 8) insert(diffs,"aft_marr", 2) insert(diffs,"app1", 10) insert(diffs,"app2", 10) insert(diffs,"birt_deat", 88) insert(diffs,"dist", 50) forindi(someone,n1) { call life_span(someone) set(pb1,surname(someone)) set(pb1,save(pb1)) set(midspan1,div(add(year1,year2),2)) forindi(another,n2) { print(d(n1)," ",d(n2),"\n") if (gt(n2,n1)) { call life_span(another) set(pb2,surname(another)) set(pb2,save(pb2)) set(midspan2,div(add(year1,year2),2)) set(cont,0) if (ge(midspan1,midspan2)) { if (lt(sub(midspan1,midspan2),lookup(diffs,"dist"))) { set(cont,1) } } if (ge(midspan2,midspan1)) { if (lt(sub(midspan2,midspan1),lookup(diffs,"dist"))) { set(cont,1) } } if (and(eq(cont,1),eq(strcmp(pb1,pb2),0))) { " possibly contemporary: " nl() key(someone) " " name(someone) " " d(midspan1) " " pb1 nl() key(another) " " name(another) " " d(midspan2) " " pb2 nl() } } } } } lifelines-3.0.61/reports/extract_gedcom.ll0000700002540200244210000000317110076661057020772 0ustar prappDomain Users/* * @progname extract_gedcom.ll * @version 1.2 of 1995-08-27 * @author Scott McGee (smcgee@microware.com) * @category * @output GEDCOM * @description This program allows the user to select a group of individuals from a database and generate a GEDCOM file for them. It allows selection of multiple people by following family links, and then allows addition of all ancestors of the selected set or of the first individual, and then all descendants of the selected set or of the orignal individual. It also allows addition of all persons with a specified number of relations to any individual in any of the groups added above. For each person asked about, you will be given some information on them to aid in deciding if they are the one you want or not. This is similar to a person display when browsing with LifeLines. This program will also output all source records referred to in any person record in the gedcom output. Thanks to Tom Wetmore for many small routines that have been addapted for use in this program as well as LifeLines itself. Scott McGee */ include("extract_set.li") include("tools.li") include("outsources.li") global(first) /* first person shouldn't be asked about */ global(first_indi) /* starting person */ proc main () { getindi(indi) if (indi) { set(first_indi, indi) set(out, extract_set(indi)) call extract_gedcom(indi, out) } else { print("No one identified -- terminating\n") } } proc extract_gedcom(indi, out) { print("Generating GEDCOM file for ", d(lengthset(out)), " individuals.\n") gengedcom(out) call outsources(out) } lifelines-3.0.61/reports/extract_html.ll0000700002540200244210000003706210166311056020475 0ustar prappDomain Users/* * @progname extract_html.ll * @version 1.4 * @author Scott McGee (smcgee@microware.com) * @category * @output HTML * @description This program allows the user to select a group of individuals from a database and generate a set of HTML files for them. It allows writing multiple people per HTML file, and will create an index file and a GENWEB.txt file for genweb indexing of the resulting data. Before running this program, you will want to customize some global values for your site. In the original release, they are set as follow: set(db_owner, getproperty("user.fullname")) set(owner_addr, getproperty("user.email")) set(use_image, 1) set(genweb_image, "../../pics/genweb.gif") set(use_page, 1) set(genweb_page, "../genweb.html") set(page_name, "genweb page") set(html_index, 0) The first two sets will get your fullname and email address from the corresponding user properties. They do not require editing this file. The other customizations require editing of this file. It also says to put an image at the top of each HTML file and specifies that the image is called genweb.gif. Next, it specifies that a link to my base page be added to each HTML file, that the location of the base page is genweb.html, and that the text for the link be "genweb page". It also says not to use and tag in the INDEX.html file. The program, when run, will request a person to start with. It then allows selection of additional people by following family links. It then allows addition of all ancestors of the selected set or of the first individual, and then all descendants of the selected set or of the orignal individual. It also allows addition of all persons with a specified number of relations to any individual in any of the groups added above. For each person asked about, you will be given some information on them to aid in deciding if they are the one you want or not. This is similar to a person display when browsing with LifeLines. Note: This program will assume that you have a directory called genweb in your output directory (as specified by LL_REPORTS) and will write all output files in that directory. If the genweb directory does NOT exist (at least, with LL302) you will be prompted for the name of each output file. Be aware that if you use this to name the files diffently, the references within the files will NOT be changed to reflect the new file name! Future Enhancements (Let me know if you want to do one of these for me!): A hierarchical index would be a nice option. Need to add descendant and ancestor (pedigree) charts. Add seperate page(s) for sources and generate hyperlinks to them. Thanks to Tom Wetmore for many small routines that have been addapted for use in this program as well as LifeLines itself. Scott McGee @(#)extract_html.ll 1.4 10/1/95 */ include("extract_set.li") include("tools.li") /* customization globals - customize values assigned in main */ global(db_owner) /* name of database owner */ global(owner_addr) /* url of database owner (mailto or homepage) */ global(use_image) /* flag to indicate whether to use genweb image */ global(genweb_image) /* name of genweb image to place on each page */ global(use_page) /* flag to add link to genweb page or homepage */ global(genweb_page) /* URL of base genweb (or homepage) web page */ global(page_name) /* name of base genweb (or homepage) web page */ global(LDS) /* display LDS Ordinances? (1=yes 0=no) */ global(html_index) /* add tag to INDEX.html file (1=yes 0=no) */ /* other globals */ global(found) /* external file to inline image found flag */ global(per_file) /* number of people per file to write */ global(first) /* first person shouldn't be asked about */ global(RVAL) /* ?? (part of borrowed code) */ global(last_surname) /* last surname in index - used for anchors */ global(first_indi) /* starting person */ proc main () { indiset(out_set) /* customize these globals to customize the output to your site */ set(db_owner, getproperty("user.fullname")) set(owner_addr, getproperty("user.email")) set(use_image, 1) /* 1 to use image, 0 to not use image */ set(genweb_image, "../../pics/genweb.gif") set(use_page, 1) /* 1 to use link to page, 0 if not */ set(genweb_page, "../genweb.html") set(page_name, "genweb page") /* might change to "my homepage" */ set(LDS, 1) set(html_index, 0) /* 1 to use , 0 if not */ set(per_file, 1) getindi(indi) if (indi) { set(first_indi, indi) set(out, extract_set(indi)) call html_out(out) } else { print("No one identified -- terminating\n") } } proc html_out (o) { set(s, concat("There are ", d(lengthset(o)), " people in your list, how many per file?")) getstr(a,s) set(per_file, atoi(a)) if(not(per_file)) { set(per_file, 1) } set(loop_count, 0) set(file_count, 0) set(href_table, init_href(o)) forindiset(o, i, j, n) { set(indi, i) if(eq(loop_count, 0)) { incr(file_count) call write_head(file_count) } incr(loop_count) call genhtml(indi, o, href_table) if(or(eq(loop_count, per_file), eq(n, lengthset(o)))) { call write_tail() set(loop_count, 0) } } call do_index(o, href_table) } proc write_head(count) { set(filename, concat("genweb/", database(), "/genweb_", d(count), ".html")) print("Writing ", filename, "\n") newfile(filename, 0) "\n" " genweb_" d(count) ".html \n" "\n" if(use_image) { "\"\"

      \n" } } proc write_tail() { "

      \n" date(gettoday()) "
      \n" "Database maintained by " "\n" db_owner "
      \n" "\n" } proc genhtml (i, o, href_table) { /* print(" ", fullname(i,0,1,300), "\n") */ "\n" "

      " set(vn,givens(i)) set(vn1,save(vn)) givens(i) " " set(nn,surname(i)) set(nn1,save(nn)) nn1 "

      \n" set(path, get_picture(i)) if (found) { "\"\"

      \n" } call afn(i) if (e, birth(i)) { "Born : " long(e) "
      \n" } if (e, baptism(i)) { "Baptised : " long(e) "
      \n" } elsif (e, bapt(i)) { "Baptised : " long(e) "
      \n" } if (e, death(i)) { "Died : " long(e) "
      \n" } if (e, burial(i)) { "Buried : " long(e) "
      \n" } if(LDS) { /* LDS ordinances */ set(started, 0) fornodes(inode(i), node) { if (eq(0, strcmp(tag(node), "BAPL"))) { if(not(started)) { set(started, 1) "
      LDS Ordinances: B " } } /* determine if endowed */ if (eq(0, strcmp(tag(node), "ENDL"))) { if(not(started)) { set(started, 1) "
      LDS Ordinances: " } "E " } } /* determine if sealed to parents */ set(fam, fnode(parents(i))) set(ind, inode(i)) if(fam) { fornodes(fam, node) { if(and(eqstr("CHIL", tag(node)), eqstr(xref(ind), value(node)))) { fornodes(node, next) { if(eqstr(tag(next), "SLGC")) { if(not(started)) { set(started, 1) "
      LDS Ordinances: " } "SC " } } } } } if(started){ "
      \n" } } /* "
      " */ call othernames(i) call print_html(i) "
      \n" if (p, father(i)) { "" "Father : " set (path, get_href(p, href_table)) if(found) { "" } if (t,title(p)) {t " "} fullname(p,0,1,300) if(found) {""} do_info(p) "
      \n" } if (p, mother(i)) { "" "Mother : " set (path, get_href(p, href_table)) if(found) { "" } if (t,title(p)) {t " "} fullname(p,0,1,300) if(found) {""} do_info(p) "
      \n" } families(i, f, s, n) { "

      " "Spouse" if (gt(nfamilies(i), 1)) { " " d(n) } " : \n" if (s) { /* family has a spouse */ set (path, get_href(s, href_table)) if(found) { "" } if (t,title(s)) {t " "} fullname(s,0,1,300) if(found) {""} do_info(s) "
      \n" } if (e, marriage(f)) { "Married " long(e) "
      \n" } if (e, divorced(f)) { "Divorced " long(e) "
      \n" } if(LDS) { fornodes(fnode(f), node) { if (eq(0, strcmp(tag(node), "SLGS"))) { "
      LDS Ordinances: SS\n" } } } "

        \n" children(f, c, nn) { "
      1. " set (path, get_href(c, href_table)) if(found) { "" } if (t,title(c)) {t " "} fullname(c,0,1,300) if(found) {""} do_info(c) "
      2. \n" } "
      \n" } call print_notes(i) "
      \n" /* Insert code here for Pedigree and Descendant charts if(parents(i)) { "Pedigree Chart
      \n" } if(nfamilies(i)) { set(hasChildren, 0) families(i, f, s, n) { if(nchildren(f)) { set(hasChildren, 1) } } if(hasChildren) { "Descendant Chart\n" } } "
      \n" */ "
      \n" "[" "Index to database]
      \n" if(use_page) { "[" "Return to " page_name " ]
      \n" } "


      \n" } func init_href(outset){ table(href_table) forindiset(outset, indi, j, number) { insert(href_table, save(key(indi)), number) } return(href_table) } func get_href(indi, href_table) { set(path, "") set(found, 0) set(value, lookup(href_table, key(indi))) if(value){ set(number, add(div(sub(value, 1), per_file), 1)) set(path, concat("genweb_", d(number), ".html")) set(found, 1) } return(path) } proc print_notes(indi){ set(first, 1) traverse(inode(indi), node, l) { if (not(strcmp("NOTE", tag(node)))) { if(first) { "Notes :
      \n" set(first, 0) } "

      " call show_path(node) value(node) "\n" fornodes(node, next) { value(next) "\n" } "

      \n" } } } proc show_path (node){ list(path) while (node) { push(path, tag(node)) set(node, parent(node)) } "(" while (s, pop(path)) { if(eqstr(lower(s), "indi")){ "Individual " }elsif(eqstr(lower(s), "fam")){ "Family " }elsif(eqstr(lower(s), "famc")){ "family " }elsif(eqstr(lower(s), "fams")){ "family " }elsif(eqstr(lower(s), "note")){ "note" }elsif(eqstr(lower(s), "birt")){ "birth " }elsif(eqstr(lower(s), "deat")){ "death " }elsif(eqstr(lower(s), "buri")){ "burial " }elsif(eqstr(lower(s), "plac")){ "place " }else{ lower(s) " " } } ")\n" } proc do_index(indi_set, href_table) { set(last_surname, "ZZ") list(RVAL) indiset(index) set(index, indi_set) namesort(index) print("Writing INDEX.html\n") call create_index_file(index, href_table) print("Writing GENDEX.txt\n") call create_gendex_file(index, href_table) } proc create_gendex_file(index, href_table) { set(fn, save(concat("genweb/", database(), "/GENDEX.txt"))) newfile(fn, 0) forindiset(index, me, v, n) { set(path, concat(save(get_href(me, href_table)), "#", key(me))) path "|" surname(me) "|" givens(me) " /" surname(me) "/" "|" if (evt, birth(me)) { date(evt) } "|" if (evt, birth(me)) { place(evt) } "|" if (evt, death(me)) { date(evt) } "|" if (evt, death(me)) { place(evt) } "|\n" } } proc create_index_file(index, href_table) { set(fn, save(concat("genweb/", database(), "/INDEX.html"))) newfile(fn, 0) call html_header("Interactive Genealogical Server Index", html_index) "\n" if(use_image) { "\"\"

      \n" } "

      INDEX

      \n" "
        \n" forindiset(index, me, v, n) { call href(me, href_table) "\n" } "
      \n" call write_tail() } proc href(me, href_table) { if(me) { call print_name(me, 1) if(ne(strcmp(upper(surname(me)), last_surname), 0)) { print(" ", upper(surname(me)), "\n") set(last_surname, save(upper(surname(me)))) "\n" } "
    • " set (path, get_href(me, href_table)) if(found) { "\n" } pop(RVAL) if(found) { "" } do_info(me) } } proc html_header(str, isindex) { "\n" "\n" if(isindex) { "\n" } " " str " \n" "\n" } proc print_name (me, last) { call get_title(me) set(junk, pop(RVAL)) push(RVAL, save(concat(fullname(me, 1, not(last), 45), junk))) } proc get_title (me) { fornodes(inode(me), node) { if (not(strcmp("TITL", tag(node)))) { set(n, node) } } if (n) { push(RVAL, save(concat(" ", value(n)))) } else { push(RVAL, "") } } proc rjt(n, w) { if (lt(n, 10)) { set(d, 1) } elsif (lt(n, 100)) { set(d, 2) } elsif (lt(n, 1000)) { set(d, 3) } elsif (lt(n, 10000)) { set(d, 4) } else { set(d, 5) } if (lt(d, w)) { set(pad, save( trim(" ", sub(w, d)))) } else{ set(pad, "") } push(RVAL, save( concat(pad, save(d(n))))) } proc othernames(indi){ if(indi){ set(count, 0) fornodes(inode(indi), subnode){ if(eqstr(tag(subnode), "NAME")){ incr(count) if(eq(count, 2)){ "
      Other Names: \n
        " "
      • " call nameval(subnode) "
      • " }elsif(gt(count, 2)){ "
      • " call nameval(subnode) "
      • \n" } } } if(gt(count, 1)){ "
      \n" } } } proc afn(indi){ if(indi){ fornodes(inode(indi), subnode){ if(eqstr(tag(subnode), "AFN")){ "AFN " value(subnode) "

      \n" } } } } proc nameval(namenode){ list(np) extractnames(namenode, np, nc, sc) forlist(np, v, i){ v " " } } proc print_html(indi){ fornodes(inode(indi), node) { if (not(strcmp("REPORT", tag(node)))) { set(m, child(node)) if (not(strcmp("TYPE", tag(m)))) { if (not(strcmp("HTML", value(m)))) { "
      \n" fornodes(m, o) { if (not(strcmp("DATA", tag(o)))) { value(o) "\n" } "\n" } } else { if (eqstr("HTML-STATIC", value(m))) { "
      \n" fornodes(m, o) { if (eqstr("DATA", tag(o))) { value(o) "\n" } "\n" } } } } } } } func divorced(fam) { fornodes(fnode(fam), node) { if (eq(0, strcmp(tag(node), "DIV"))) { return(node) } } return(0) } lifelines-3.0.61/reports/extract_set.li0000700002540200244210000001610210076661057020322 0ustar prappDomain Users/* * @progname extract_set.li * @version 1.5 * @author Scott McGee (smcgee@microware.com) * @category * @output function values * @description A library containing routines to allow extraction of a set of related persons from a database. The function extract_set() is passed a starting indi, and traverses selected persons relatives until no selections are left. It returns an indi set of the selected persons. The do_info() function will return a string containing the name and birth/ death type info on the indi passed as a parameter. @(#)extract_set.li 1.5 10/13/95 */ func extract_set(indi){ list(w) /* working list */ indiset(o) /* output set */ indiset(out) /* output set */ table(t) /* table of seen persons */ indiset(us) /* temporary set */ set(first, 1) set(count, 1) enqueue(w, indi) while (indi, dequeue(w)) { if (not(lookup(t, key(indi)))) { insert(t, key(indi), 1) if (askabout(indi)) { addtoset(o, indi, count) incr(count) if (j, father(indi)) { enqueue(w, j) } if (j, mother(indi)) { enqueue(w, j) } families(indi, f, s, n) { if(s) { enqueue(w, s) } children(f, j, m) { enqueue(w, j) } } } } } print("You selected ", d(lengthset(o)), " individuals.\n") set(useout, 0) set(msg, "Do you want all the ancestors of these people added to this set? (y or n) ") getstr(answer, msg) if(eqstr(lower(trim(answer, 1)), "y")) { set(anc, ancestorset(o)) if(anc) { print("Found ", d(lengthset(difference(anc, intersect(anc, o)))), " additional ancestors.\n") set(out, union(o, anc)) set(rel, get_relatives(out)) if(rel){ print("Found ", d(lengthset(difference(rel, intersect(rel, out)))), " additional relatives.\n") set(out, union(out, rel)) } set(useout, 1) }else{ print("no ancestors found\n") } }else{ set(msg, concat("Do you want all the ancestors of ", name(first_indi), " added to this set? (y or n) ")) getstr(answer, msg) if(eqstr(lower(trim(answer, 1)), "y")) { set(m, 1) addtoset(us, first_indi, m) if(us) { set(anc, ancestorset(us)) if(anc) { print("Found ", d(lengthset(difference(anc, intersect(anc, o)))), " additional ancestors.\n") set(out, union(o, anc)) set(rel, get_relatives(out)) if(rel){ print("Found ", d(lengthset(difference(rel, intersect(rel, out)))), " additional relatives.\n") set(out, union(out, rel)) } set(useout, 1) }else{ print("no ancestors found\n") } }else{ print("error: nobody in 'us' set\n") } } } set(msg, "Do you want all the descendants of these people added to this set? (y or n) ") getstr(answer, msg) if(eqstr(lower(trim(answer, 1)), "y")) { set(anc, descendantset(o)) if(anc) { if(useout){ print("Found ", d(lengthset(difference(anc, intersect(anc, out)))), " additional descendants.\n") set(out, union(out, anc)) }else{ print("Found ", d(lengthset(difference(anc, intersect(anc, o)))), " additional descendants.\n") set(out, union(o, anc)) } set(rel, get_relatives(union(o, anc))) if(rel){ print("Found ", d(lengthset(difference(rel, intersect(rel, out)))), " additional relatives.\n") set(out, union(out, rel)) } }else{ print("no descendantss found\n") } }else{ set(msg, concat("Do you want all the descendants of ", name(first_indi), " added to this set? (y or n) ")) getstr(answer, msg) if(eqstr(lower(trim(answer, 1)), "y")) { set(m, 1) addtoset(us, first_indi, m) if(us) { set(anc, descendantset(us)) if(anc) { if(useout){ print("Found ", d(lengthset(difference(anc, intersect(anc, out)))), " additional descendants.\n") set(out, union(out, anc)) }else{ print("Found ", d(lengthset(difference(anc, intersect(anc, o)))), " additional descendants.\n") set(out, union(o, anc)) } set(rel, get_relatives(anc)) if(rel){ print("Found ", d(lengthset(difference(rel, intersect(rel, out)))), " additional relatives.\n") set(out, union(out, rel)) } }else{ print("no descendants found\n") } }else{ print("error: nobody in 'us' set\n") } } if(not(useout)){ set(out, o) } } return(out) } func askabout (indi) { if(not(first)) { call showinfo(indi) set(s, concat("Do you want ", name(indi), " in your output files? (y or n) ")) getstr(a, s) return (eqstr(lower(trim(a, 1)), "y")) }else{ set(first, 0) return (1) } } proc showinfo (indi) { print(name(indi), do_info(indi), " (", key(indi), ")\n\n") set(did_afn, afn(indi)) print("Father: ", name(father(indi)), do_info(father(indi)), "\n") print("Mother: ", name(mother(indi)), do_info(mother(indi)), "\n\n\n\n\n\n\n") set(f, 0) set(s, 0) families(indi, fa, sp, n) { if (eq(1, n)) { set(f, fa) set(s, sp) } } print("Married: ", long(marriage(f)), "\n") print("Spouse: ", name(s), do_info(s), "\n\n\n\n\n") if(not(did_afn)){ print("\n") } } func do_info(me){ if(not(me)){ return("") }else{ set(out, " -") if (evt, birth(me)) { set(out, concat(out, " born ", short(evt))) } else { if (evt, baptism(me)) { set(out, concat(out, " baptised ", short(evt))) } else { if (evt, bapt(me)) { set(out, concat(out, " baptised ", short(evt))) } } } if (evt, death(me)) { set(out, concat(out, " died ", short(evt))) } return(out) } } func afn(indi){ if(indi){ fornodes(inode(indi), subnode){ if(eqstr(tag(subnode), "AFN")){ print("AFN ", value(subnode), "\n") return(1) } } } return(0) } func get_relatives(in_set){ set(msg, "Do you want to add all relatives within a given link distance? (y or n) ") getstr(answer, msg) if(eqstr(lower(trim(answer, 1)), "y")) { getint(n, "Please enter link distance.") /* create set with all ancestors and descendents */ indiset(out_set) indiset(t) /* temporary working set */ /* create set of additional, linked-to persons */ set(t, in_set) while (gt(n, 0)) { set(a, parentset(t)) set(b, childset(t)) set(c, spouseset(t)) set(t, union(t, union(a, union(b, c)))) set(n, sub(n, 1)) } set(out_set, t) return(out_set) } return(0) } lifelines-3.0.61/reports/fam10c.ll0000700002540200244210000000657710076661057017066 0ustar prappDomain Users/* * @progname fam10c.ll * @version 1.0 * @author Manis * @category * @output Text * @description * * Generates a Family Report for one family. * * fam10c * by: Cliff Manis * Family Report for LifeLines */ proc main () { getfam(fam) dayformat(0) monthformat(4) dateformat(0) set(tday, gettoday()) set (nl,nl()) set(h,husband(fam)) set(w,wife(fam)) col(55) "Date: " stddate(tday) nl col(0) "Family Report (fam10)" nl nl col(0) "HUSBAND: " fullname(h,1,1,50) col(63) "(RN=" key(h) ")" nl nl set(evt, birth(h)) col(0) "Born: " stddate(evt) col(25) "Place: " place(evt) set(evt, marriage(fam)) col(0) "Marr: " stddate(evt) col (25) "Place: " place(evt) set(evt, death(h)) col(0) "Died: " stddate(evt) col(25) "Place: " place(evt) nl nl col(0) "HUSBAND'S FATHER: " name(father(h)) col(63) "(RN=" key(father(h)) ")" nl col(0) "HUSBAND'S MOTHER: " name(mother(h)) col(63) "(RN=" key(mother(h)) ")" nl nl col(0) "WIFE: " if (w) { fullname(w,1,1,50) col(63) "(RN=" key(w) ")" } nl nl set(evt, birth(w)) col(0) "Born: " stddate(evt) col(25) "Place: " place(evt) set(evt, death(w)) col(0) "Died: " stddate(evt) col(25) "Place: " place(evt) nl nl col(0) " WIFE'S FATHER: " name(father(w)) col(63) "(RN=" key(father(w)) ")" col(0) " WIFE'S MOTHER: " name(mother(w)) col(63) "(RN=" key(mother(w)) ")" nl nl col(0) "========================================================================" nl col(0) "# M/F" col(12) "Childrens Names" col(63) "RECORD NUM" nl col(0) "========================================================================" nl children(fam, child, num) { col(0) d(num) col(4) sex(child) col(12) name(child) col(63) "(RN=" key(child) ")" col(4) "Born:" col(13) stddate(birth(child)) col(26) place(birth(child)) nl col(4) "Died:" col(13) stddate(death(child)) col(26) place(death(child)) nl families(child, fvar, svar, num) { if (eq(num,1)) { col(4) "Marr:" col(13) stddate(marriage(fvar)) col(26) if (svar) { name(svar) col(63) "(RN=" key(svar) ")" } else { " " } nl } } if (eq(nfamilies(child),0)) { " " nl } col(4) "---------------------------------------------------------" } } /* End of Report */ /* -- Cliff Manis K4ZTF Manis/Manes Family History Researching: MANIS MANES MANESS MANAS WHITEHORN CANTER BIRD CORBETT NEWMAN USMAIL: P. O. Box 33937, San Antonio, Texas 78265-3937 INTERNET: cmanis@csoftec.csf.com -=> Don't waste time learning the tricks of the trade, learn the trade ! Standard Disclaimer: We are not associated with anyone. (PERIOD). (.) -- */ lifelines-3.0.61/reports/fam16rn1.ll0000700002540200244210000000662210076661057017341 0ustar prappDomain Users/* * @progname fam16rn1.ll * @version 1.0 * @author Wetmore, Manis * @category * @output Text * @description * * This program produces a family report of the person (husband), wife, * their children, and some data about the children's marriages. * It is presently designed for 16 pitch, HP laserjet III, * printing a single page of information about that family. * * fam16rn1 * * Code by Tom Wetmore, ttw@cbnewsl.att.com * Modifications by Cliff Manis * * This report works only with the LifeLines Genealogy program * * version one of this report was written by Tom Wetmore, in 1990, * and it has been modified many times since. * * Output is an ASCII file. * */ proc main () { getfam(fam) dayformat(0) monthformat(4) dateformat(0) set(tday, gettoday()) set (nl,nl()) set(h,husband(fam)) set(w,wife(fam)) col(6) "Report by: Cliff Manis " nl col(19) "MANIS / MANES Family History" col(50) "P. O. Box 33937 San Antonio, TX 78265-3937" nl nl nl col(6) "HUSBAND: " fullname(h,1,1,50) " (RN=" key(h) ")" col(80) "Report date: " stddate(tday) nl nl set(evt, birth(h)) col(6) "Born: " stddate(evt) col(35) "Place: " place(evt) set(evt, marriage(fam)) col(6) "Marr: " stddate(evt) col(35) "Place: " place(evt) set(evt, death(h)) col(6) "Died: " stddate(evt) col(35) "Place: " place(evt) col(6) "HUSBAND'S" col(50) "HUSBAND'S" col(6) "FATHER: " name(father(h)) " (RN=" key(father(h)) ")" col(50) "MOTHER: " name(mother(h)) " (RN=" key(mother(h)) ")" nl nl col(6) "WIFE: " fullname(w,1,1,50) " (RN=" key(w) ")" nl nl set(evt, birth(w)) col(6) "Born: " stddate(evt) col(35) "Place: " place(evt) set(evt, death(w)) col(6) "Died: " stddate(evt) col(35) "Place: " place(evt) col(6) "WIFE'S" col(50) "WIFE'S" col(6) "FATHER: " name(father(w)) " (RN=" key(father(w)) ")" col(50) "MOTHER: " name(mother(w)) " (RN=" key(mother(w)) ")" nl nl col(6) "===============================================" col(53) "=======================================" col(92) "==========================" nl col(8) "M/F" col(22) "CHILDREN" col(45) "WHEN BORN" col(62) "WHEN DIED" col(82) "WHERE BORN" nl col(45) "1st MARRIAGE" col(62) "SPOUSE" nl col(6) "===============================================" col(53) "=======================================" col(92) "==========================" nl children(fam, child, num) { col(6) d(num) col(9) sex(child) col(11) name(child) " (RN=" key(child) ")" col(45) stddate(birth(child)) col(62) stddate(death(child)) col(82) place(birth(child)) families(child, fvar, svar, num) { if (eq(num,1)) { col(45) stddate(marriage(fvar)) col(62) if (svar) { name(svar) " (RN=" key(child) ")" } else { " " } nl nl } } if (eq(nfamilies(child),0)) { " " nl nl } } } /* End of Report */ lifelines-3.0.61/reports/famgroup.ll0000700002540200244210000002024310355541367017622 0ustar prappDomain Users/* * @progname famgroup.ll * @version 1.1 * @author Kris Stanton * @category * @output TeX * @description * * Family Group Sheet for LifeLines * * Minor fixes by Patrick Texier 12/28/2005 * * The output is in LaTeX format. Therefore, the name of the output file * should end in ".tex". To print (assuming the name of the output file is * "out.tex"): * latex out * dvips out -o out.ps * lpr out.ps * or if you have it, you can generate a pdf with * pdflatex out */ proc main () { getfam(fam) dayformat(0) monthformat(6) dateformat(0) set(tday, gettoday()) set (nl,nl()) set(h,husband(fam)) set(w,wife(fam)) col(0) "\\documentclass[landscape]\{article\}" col(0) "\\setlength\{\\topmargin\}\{-1.3in\}" col(0) "\\setlength\{\\oddsidemargin\}\{-.8in\}" col(0) "\\setlength\{\\evensidemargin\}\{-.8in\}" col(0) "\\setlength\{\\textwidth\}\{11in\}" col(0) "\\setlength\{\\textheight\}\{9in\}" col(0) "\\pagestyle\{empty\}" col(0) "\\begin\{document\}" col(0) "\\begin{center}" col(0) "\\bfseries \\Large Family Group Sheet" col(0) "\\end{center}" nl nl col(0) "\\begin\{tabular\}\{lp\{7.85in\}\}" col(0) "\\bfseries \\Large Husband's Name & \\Large " col(0) fullname(h,1,1,50) " (\\#"key(h)") \\\\ \\cline{2-2}" col(0) "\\end{tabular}" nl nl set(evt, birth(h)) col(0) "\\begin{tabular}{p{.25in}p{.87in}p{3.75in}p{.4in}p{3.75in}}" col(0) "& When Born & " stddate(evt) " & Where & " place(evt) " \\\\ \\cline{3-3} \\cline{5-5}" set(evt, death(h)) col(0) "& When Died & " stddate(evt) " & Where & " place(evt)" \\\\ \\cline{3-3} \\cline{5-5}" set(evt, burial(h)) col(0) "& When Buried & " stddate(evt) " & Where & " place(evt) " \\\\ \\cline{3-3} \\cline{5-5}" set(evt, marriage(fam)) col(0) "& When Married & " stddate(evt) " & Where & " place(evt)" \\\\ \\cline{3-3} \\cline{5-5}" col(0) "\\end{tabular}" nl nl col(0) "\\begin{tabular}{p{.25in}lp{7.84in}}" col(0) "& Other Wives (if any) & " spouses (h, sname, famname, number) { if (ne(w,sname)) { "$\\triangleright$ " name(sname) " \\hspace{.1in} " } } " \\\\ \\cline{3-3}" col(0) "\\end{tabular}" nl nl col(0) "\\begin{tabular}{p{.25in}p{.87in}p{3.75in}p{.68in}p{3.48in}}" col(0) "& His Father & " name(father(h)) if (father(h)) { " (\\#" key(father(h))")" } " & His Mother & " name(mother(h)) if (father(h)) { " (\\#" key(mother(h))")" } " \\\\ \\cline{3-3} \\cline{5-5}" col(0) "\\end{tabular}" nl nl col(0) "\\vspace{.1in}" col(0) "\\begin{tabular}{lp{7.44in}}" col(0) "\\bfseries \\Large Wife's Maiden Name & \\Large " fullname(w,1,1,50) " (\\#"key(w)")" " \\\\ \\cline{2-2}" col(0) "\\end{tabular}" nl nl set(evt, birth(w)) col(0) "\\begin{tabular}{p{.25in}p{.87in}p{3.75in}p{.4in}p{3.75in}}" col(0) "& When Born & " stddate(evt) " & Where & " place(evt)" \\\\ \\cline{3-3} \\cline{5-5}" set(evt, death(w)) col(0) "& When Died & " stddate(evt) " & Where & " place(evt)" \\\\ \\cline{3-3} \\cline{5-5}" set(evt, burial(w)) col(0) "& When Buried & " stddate(evt) " & Where & " place(evt) " \\\\ \\cline{3-3} \\cline{5-5}" col(0) "\\end{tabular}" nl nl col(0) "\\begin{tabular}{p{.25in}lp{7.6in}}" col(0) "& Other Husbands (if any) & " spouses (w, sname, famname, number) { if (ne(h,sname)) { "$\\triangleright$ " name(sname) "\\hspace{.1in} " } } " \\\\ \\cline{3-3}" col(0) "\\end{tabular}" nl nl col(0) "\\begin{tabular}{p{.25in}p{.87in}p{3.75in}p{.7in}p{3.44in}}" col(0) "& Her Father & " name(father(w)) if (father(w)) { " (\\#" key(father(w))")" } " & Her Mother &" name(mother(w)) if (mother(w)) { " (\\#" key(mother(w))")" } " \\\\ \\cline{3-3} \\cline{5-5}" col(0) "\\end{tabular}" nl nl col(0) "\\vspace{.1in}" col(0) "\\scriptsize" col(0) "\\begin{tabular}{c|p{2.15in}|cp{.6in}p{.25in}|p{2in}|cp{.6in}p{.25in}|p{2.1in}} \\hline \\hline" col(0) "M/F & Children & " col(0) "\\multicolumn{3}{c|}{When Born} & Where Born & " col(0) "\\multicolumn{3}{c|}{When Died} & Married \\\\ " col(0) "& (in order of birth) & \\centering Day & \\centering Month & \\centering Year &" col(0) "City/Town, County, State/Country & " col(0) "\\centering Day & \\centering Month & \\centering Year & \\\\ \\hline \\hline" children(fam, child, num) { set(ns, nspouses(child)) families(child, fvar, svar, no) { if(eq(1,ns)) { col(0) "& (\\#"key(child)") & & & & & & & &\\small Date: " stddate(marriage(fvar)) " \\\\" } if(and(gt(ns,1),eq(no,1))) { col(0) "& (\\#"key(child)") & & & & & & & &\\small Date: " stddate(marriage(fvar)) " $\\dagger$ \\\\" } } if(eq(0,ns)) { col(0) "& (\\#"key(child)") & & & & & & & & \\small Date: \\\\ " } extractdate(birth(child), ddy, mmo, yyr) col(0) "\\small " sex(child) "& \\small " d(num)" \\hspace{.1in}" givens(child) nl " & \\centering \\small " if(ne(ddy,0)) {d(ddy)} " & \\centering \\small " if(eq(mmo,1)){ "January" } if(eq(mmo,2)){ "February" } if(eq(mmo,3)){ "March" } if(eq(mmo,4)){ "April" } if(eq(mmo,5)){ "May" } if(eq(mmo,6)){ "June" } if(eq(mmo,7)){ "July" } if(eq(mmo,8)){ "August" } if(eq(mmo,9)){ "September" } if(eq(mmo,10)){ "October" } if(eq(mmo,11)){ "November" } if(eq(mmo,12)){ "December" } " & \\centering \\small " if(ne(yyr,0)) {d(yyr)} " & \\small " place(birth(child)) if(death(child)) { extractdate(death(child), ddy, mmo, yyr) } else { set(ddy, 0) set(mmo, 0) set(yyr, 0) } col(0) " & \\centering \\small " if(ne(ddy,0)){d(ddy)} " & \\small \\centering " if(eq(mmo,1)){ "January" } if(eq(mmo,2)){ "February" } if(eq(mmo,3)){ "March" } if(eq(mmo,4)){ "April" } if(eq(mmo,5)){ "May" } if(eq(mmo,6)){ "June" } if(eq(mmo,7)){ "July" } if(eq(mmo,8)){ "August" } if(eq(mmo,9)){ "September" } if(eq(mmo,10)){ "October" } if(eq(mmo,11)){ "November" } if(eq(mmo,12)){ "December" } " & \\centering \\small " if(ne(yyr,0)){d(yyr)} " & \\small To: " families(child, fvar, svar, no) { if(and(gt(ns,0),eq(no,1))) { name(svar) " \\\\ \\hline "} } if(eq(0,ns)) { " \\\\ \\hline "} } set(left, sub(14, nchildren(fam))) while(gt(left, 0)) { col(0) "& & & & & & & & &\\small Date: \\\\" col(0) "&\\small " d(sub(15,left)) " & & & & & & & &\\small To: \\\\ \\hline" set(left, sub(left,1)) } col(0) "\\end{tabular}" nl nl col(0) "\\hspace{8in} \\scriptsize $\\dagger =$ more than one marriage" col(0) "\\end{document}" nl } /* End of Report */ lifelines-3.0.61/reports/fami-grps.ll0000700002540200244210000002216110076661057017667 0ustar prappDomain Users/* * @progname fami-grps.ll * @version 1993-01-12 * @author Stephen Woodbridge (woodbri@swoodbridge.com) * @category * @output Text, 80 cols * @description * * Program walks thru one's families and dumps information * about each family. It prunes the tree so an individual is * only output once. The program lists all children of the * families as it walks the tree. The "*" marker on a child * signifies the line of descent/ascent. * * Output assumes 132 characters wide and 80 lines per page. * * Issues: * * o only one child is marked in line of descent regardless * of the actual number of children one may descend from * o notes or family group records grater than LPP are NOT * paginated correctly * o program does not walk thru descendants yet * o does not output baptism or burial records * o does not list other spouses of HUSBAND or WIFE * * Copyright 1993 Stephen Woodbridge */ global(UNKNOWN) global(DONE) global(ILIST) global(NLIST) global(RVAL) global(nl) global(ff) global(PAGED) global(PAGENO) global(INDEXT) global(INDEXS) global(LPP) global(LC) global(NLF) global(NLH) global(NLW) global(ONCE) proc main() { table(DONE) table(INDEXT) indiset(INDEXS) list(ILIST) list(NLIST) list(RVAL) set(nl, "\n") set(ff, "\f") set(PAGED, 1) set(PAGENO, 0) set(LPP, 80) set(LC, 0) set(NLF, 0) set(NLH, 0) set(NLW, 0) set(ONCE, 1) getindi(me) getintmsg(max, " Maximum Depth :") enqueue(ILIST, me) enqueue(NLIST, 1) set(i, 1) while (me, dequeue(ILIST)) { set(depth, dequeue(NLIST)) if (not(lookup(DONE, key(me)))) { call do_me(me, depth, max) } } if (PAGED) { call print_index() } } proc do_me(me, depth, max) { call fam_group(parents(me), 1, me, depth) if (le(add(depth, 1), max)) { if (dad, father(me)) { enqueue(ILIST, dad) enqueue(NLIST, add(depth, 1)) } if (mom, mother(me)) { enqueue(ILIST, mom) enqueue(NLIST, add(depth, 1)) } } } proc fam_group(fam, notes, mchild, depth) { if (fam) { call count_fgrp(fam, notes) call fg_hdr(fam, depth) call pparent(husband(fam), "HUSBAND:") col(6) "M: " long(marriage(fam)) nl call pparent(wife(fam), " WIFE:") "CHILDREN:" nl children(fam, ch, nc) { insert(DONE, save(key(ch)), 1) call pchild(nc, ch, mchild) } if (notes) { call print_notes(husband(fam), "\nHusband: ", NLH) call print_notes(wife(fam), "\n Wife: ", NLW) } } else { if (mchild) { call fg_hdr(fam, depth) call pparent(0, "HUSBAND:") col(6) "M:" nl call pparent(0, " WIFE:") "CHILDREN:" nl insert(DONE, save(key(mchild)), 1) call pchild(1, mchild, mchild) if (notes) { call print_notes(mchild, "\n Child: ", 0) } } } } proc addtoindex(me) { addtoset(INDEXS, me, 1) if (l, lookup(INDEXT, key(me))) { enqueue(l, PAGENO) insert(INDEXT, save(key(me)), l) } else { list(l) enqueue(l, PAGENO) insert(INDEXT, save(key(me)), l) } } proc print_index() { "\f------------------------ INDEX -----------------------------\n" nl namesort(INDEXS) forindiset(INDEXS, me, v, n) { call print_name(me, 1) pop(RVAL) col(50) set(first, 1) set(last, 0) forlist(lookup(INDEXT, key(me)), pg, n) { if (ne(last, pg)) { if(first) { set(first, 0) } else { "," } d(pg) set(last, pg) } } nl } } proc fg_hdr(fam, depth) { set(dash, " --------------------------- ") if (PAGED) { if (and(gt(NLF, LC), lt(NLF, LPP))) { set(PAGENO, add(PAGENO, 1)) if (ONCE) { set(ONCE, 0) } else { ff } dash d(depth) dash col(80) "Page: " d(PAGENO) nl set(LC, sub(LPP, NLF)) } else { dash d(depth) dash nl set(LC, sub(LC, NLF)) } } else { dash d(depth) dash nl } } proc count_fgrp(fam, notes) { set(cnt, 13) children(fam, ch, nc) { set(cnt, add(cnt, 3)) set(cnt, add(cnt, nspouses(ch))) } set(NLF, cnt) call cnt_notes(husband(fam), notes) set(NLH, pop(RVAL)) call cnt_notes(wife(fam), notes) set(NLW, pop(RVAL)) } proc cnt_notes(me, notes) { set(c, 0) if (and(me, notes)) { fornodes(inode(me), node) { if (not(strcmp("NOTE", tag(node)))) { set(c, add(c, 1)) fornodes(node, next) { set(c, add(c, 1)) } } } } if (c) { set(c, add(c, 2)) } push(RVAL, c) } proc pparent(me, hdr) { if(me) { call get_refn(me) call print_name(me, 1) hdr col(10) pop(RVAL) col(55) "[" key(me) "]" col(62) pop(RVAL) nl col(6) "B:" col(10) long(birth(me)) nl col(6) "D:" col(10) long(death(me)) nl call addtoindex(me) if (fam, parents(me)) { if (i, husband(fam)) { call get_sdates(i) call print_name(i, 1) col(10) "FA:" col(15) pop(RVAL) col(60) pop(RVAL) nl call addtoindex(i) } if (i, wife(fam)) { call get_sdates(i) call print_name(i, 1) col(10) "MO:" col(15) pop(RVAL) col(60) pop(RVAL) nl call addtoindex(i) } } } else { hdr nl col(6) "B:" nl col(6) "D:" nl } } proc pchild(num, me, markme) { if (eq(me, markme)) { set(m, "*") } else { set(m, " ") } call print_name(me, 1) call rjt(num, 2) pop(RVAL) m sex(me) col(8) pop(RVAL) col(55) "[" key(me) "]" nl col(6) "B:" col(10) long(birth(me)) nl call addtoindex(me) spouses(me, sp, fam, nf) { call print_name(sp, 0) call addtoindex(sp) col(6) "M:" d(nf) col(10) long(marriage(fam)) " TO " pop(RVAL) " [" key(sp) "]" nl } col(6) "D:" col(10) long(death(me)) nl } proc print_notes(me, string, nlines) { if (me) { call paginate_notes(nlines) call addtoindex(me) set(hdr, 1) fornodes( inode(me), node) { if (not(strcmp("NOTE", tag(node)))) { if (hdr) { call print_name(me, 1) string pop(RVAL) " [" key(me) "]" nl set(hdr, 0) } col(8) value(node) nl fornodes(node, next) { col(8) value(next) nl } } } } } proc paginate_notes(nlines) { if (PAGED) { if (and(gt(nlines, LC), lt(nlines, LPP))) { set(PAGENO, add(PAGENO, 1)) ff col(80) "Page: " d(PAGENO) nl set(LC, sub(LPP, add(nlines, 1))) } else { set(LC, sub(LC, nlines)) } } } proc print_name (me, last) { call get_title(me) push(RVAL, save(concat(fullname(me, 1, not(last), 45), pop(RVAL)))) } proc get_refn (me) { fornodes( inode(me), node) { if (not(strcmp("REFN", tag(node)))) { set(refn, node) } } if (refn) { push(RVAL, save(value(refn))) } else { push(RVAL, "") } } proc get_title (me) { fornodes(inode(me), node) { if (not(strcmp("TITL", tag(node)))) { set(n, node) } } if (n) { push(RVAL, save(concat(" ", value(n)))) } else { push(RVAL, "") } } proc get_sdates (me) { if (e, birth(me)) { set(b, save(concat("( ", short(e)))) } else { set(b, "( ") } if (e, death(me)) { set(d, save(concat(" - " , short(e)))) } else { set(d, " - ") } push(RVAL, save(concat(b, concat(d, " )")))) } proc get_ldates (me) { if (e, birth(me)) { set(b, save(concat("( ", long(e)))) } else { set(b, "( ") } if (e, death(me)) { set(d, save(concat(" - " , long(e)))) } else { set(d, " - ") } push(RVAL, save(concat(b, concat(d, " )")))) } proc get_dates (me) { if (e, birth(me)) { set(b, save(concat("( ", date(e)))) } else { set(b, "( ") } if (e, death(me)) { set(d, save(concat(" - " , date(e)))) } else { set(d, " - ") } push(RVAL, save(concat(b, concat(d, " )")))) } proc rjt(n, w) { if (lt(n, 10)) { set(d, 1) } elsif (lt(n, 100)) { set(d, 2) } elsif (lt(n, 1000)) { set(d, 3) } elsif (lt(n, 10000)) { set(d, 4) } else { set(d, 5) } if (lt(d, w)) { set(pad, save( trim(" ", sub(w, d)))) } else { set(pad, "") } push(RVAL, save( concat(pad, save(d(n))))) } lifelines-3.0.61/reports/familycheck.ll0000700002540200244210000001670010076661057020263 0ustar prappDomain Users/* * @progname familycheck.ll * @version 2000-03-02 * @author Dennis Nicklaus nicklaus@fnal.gov * @category * @output Text, 80 cols * @description * Consistency checks between indi records and family records (making sure links between kids and spouses go both ways.) make sure each family that a person says he is a spouse of has him as a spouse, and, vice-versa, make sure each person that a family says is a spouse thinks he is a spouse of that family It also checks when a person says he is a child in a family that the family has that person as a child. And vice-versa, that every child in a family thinks he is a child of that family. Written by Dennis Nicklaus nicklaus@fnal.gov, 1997. */ /* Modifications: * 02-mar-00 pbm report multiple HUSB, WIFE, FAMC * 01-mar-00 pbm optionally allow SEX U, and missing SEX records * 25-sep-99 pbm check for a child in a family more than once * 19-feb-99 pbm check for multiple SEX records * 13-feb-99 pbm report a child in family when reporting a family with * no parents. * always show keys of family and individual involved. * display all messages on screen and write to file. */ global(ALLOWSEXU) /* set to 1 if "SEX U" is allowed */ global(WARNNOSEX) /* set to 1 to warn about INDIs with no SEX record */ proc main () { /* user customization section. change the following if desired: */ set(ALLOWSEXU, 1) /* 1: "SEX U" should not generate a warning */ set(WARNNOSEX, 0) /* 0: don't warn if INDI has no SEX record */ /* end of user customization section */ print("processing each person and family in the database...") forindi(person, number) { call checksex(person) families(person, fam, spouse, nfam) { set(okboss,0) set(s, child(root(fam))) while(s) { if(or(eqstr(tag(s), "HUSB"), eqstr(tag(s), "WIFE"))) { if(v, value(s)) { if(reference(v)) { if(eqstr(substring(v, 2,sub(strlen(v),1)),key(person))){ set(okboss, add(okboss,1)) } } } } set(s, sibling(s)) } if (eq(0,okboss)){ print("\nperson ",key(person)," is not a spouse in ",key(fam)) "person " key(person) " is not a spouse in " key(fam) nl() } elsif(ne(1,okboss)){ print("\nperson ",key(person)," is a spouse in ",key(fam), " ",d(okboss)," times") "person " key(person) " is a spouse in " key(fam) " " d(okboss) " times" nl() } } /* now check that this person is a child in the family he thinks he is (and only once) */ set(fcnt, 0) set(s, child(root(person))) while(s) { if(eqstr(tag(s), "FAMC")) { if(v, value(s)) { set(fcnt, add(fcnt, 1)) if(reference(v)) { set(okboss,0) children(fam(v),child,num){ if (eq(person,child)) {set(okboss, add(okboss,1))} } set(x, substring(v, 2, sub(strlen(v),1))) if (eq(0,okboss)){ print("\nperson ",key(person)," is not in family ", x) "person " key(person) " is not in family " x nl() } if (gt(okboss, 1)) { print("\nperson ",key(person)," is in family ",x," ", d(okboss), " times") "person " key(person) " is in family " x " " d(okboss) " times" nl() } } } } set(s, sibling(s)) } if(gt(fcnt, 1)) { print("\nperson ",key(person)," is a child in ", d(fcnt), " families") "person " key(person) " is a child in " d(fcnt) " families" nl() } } /* now check families so that for every spouse the family says is in the family, that spouse also thinks he/she is in the family. */ /* the family keys aren't terribly useful in LL (or out since LL will change the key numbers on import), so print out the key of the indi involved, also */ forfam(fam, number) { set(wcnt,0) set(hcnt,0) set(s, child(root(fam))) while(s) { if(or(eqstr(tag(s), "HUSB"), eqstr(tag(s), "WIFE"))) { if(eqstr(tag(s), "HUSB")) { set(hcnt, add(hcnt,1)) if(gt(hcnt, 1)) { print("\nfamily ",key(fam)," has more then one husband ", substring(value(s), 2, sub(strlen(value(s)),1))) "family " key(fam) " has more then one husband " substring(value(s), 2, sub(strlen(value(s)),1)) } } if(eqstr(tag(s), "WIFE")) { set(wcnt, add(wcnt,1)) if(gt(wcnt, 1)) { print("\nfamily ",key(fam)," has more then one wife ", substring(value(s), 2, sub(strlen(value(s)),1))) "family " key(fam) " has more then one wife " substring(value(s), 2, sub(strlen(value(s)),1)) } } if(v, value(s)) { if(reference(v)) { set(i, indi(v)) if(eq(i,0)) { print("\nmissing person ",v," in family ",key(fam)) "missing person " v " in family " key(fam) nl() } else { set(okboss,0) families(i, fam2, spouse, nfam) { if (eq(fam,fam2)){ set(okboss,add(okboss,1))} } if(eq(okboss, 0)) { print("\nperson ",key(i), " is not linked as a spouse to family ", key(fam)) "person " key(i) " is not linked as a spouse to family " key(fam) } if(gt(okboss, 1)) { print("\nperson ",key(i), " is linked as a spouse to family ", key(fam), " ",d(okboss)," times") "person " key(i) " is linked as a spouse to family " key(fam) " " d(okboss) " times" } } } } } set(s, sibling(s)) } if (eq(add(hcnt, wcnt),0)) { print("\nno parents in family ",key(fam)) "no parents in family " key(fam) children(fam,child,num){ print(" ",key(child)) " " key(child) break() } nl() } children(fam,child,num) { set(ccnt, 0) set(s, child(root(child))) while(s) { if(eqstr(tag(s), "FAMC")) { if(v, value(s)) { if(reference(v)) { if(eqstr(substring(v,2,sub(strlen(v),1)), key(fam))) { set(ccnt, add(ccnt, 1)) } } } } set(s, sibling(s)) } if(eq(ccnt,0)) { print("\nchild ",key(child)," is not linked to family ",key(fam)) "child " key(child) " is not linked to family " key(fam) nl() } if(gt(ccnt,1)) { print("\nchild ",key(child)," is linked to family ",key(fam), " ", d(ccnt)," times") "child " key(child) " is linked to family " key(fam) " " d(ccnt) " times" nl() } } } } proc checksex(i) { set(val, "") set(count, 0) set(r, inode(i)) traverse (r, n, x) { if(eqstr(tag(n), "SEX")) { set(count, add(count,1)) if(eq(value(n),0)) { print("\nSEX record with no value ",key(i)) "SEX record with no value " key(i) nl() } elsif(or(eqstr(value(n), "M"), eqstr(value(n), "F"), eqstr(value(n), "?"), and(ALLOWSEXU,eqstr(value(n), "U")))) { if(and(ne(count, 1),not(eqstr(value(n),val)))) { print("\nconflicting SEX records ",val," and ",value(n)," ",key(i)) "conflicting SEX records " val " and " value(n) " " key(i) nl() } set(val,value(n)) } else { print("\nSEX record with unrecognize value ",value(n)," ",key(i)) "SEX record with unrecognize value " value(n) " " key(i) nl() set(val,value(n)) } } } if(and(WARNNOSEX, eq(count, 0))) { print("\nno SEX record ",key(i)) "no SEX record " key(i) nl() } elsif(gt(count,1)) { print("\ntoo many SEX records (",d(count),") ",key(i)) "too many SEX records (" d(count) ") " key(i) nl() } } proc countnodes(n) { set(count, 0) if(n) { set(count, 1) set(t, tag(n)) while(s, sibling(n)) { if(eqstr(tag(s), t)) { set(count, add(count,1)) } } } return(count) } lifelines-3.0.61/reports/familyisfm1.ll0000700002540200244210000000635010076661057020225 0ustar prappDomain Users/* * @progname familyisfm1.ll * @version 1.0 * @author Wetmore, Manis * @category * @output Text, 132 cols * @description * * It will produce a report of all the INDI's in the database, * in the format as seen at end of report. May be sorted easily * to see the Father or Mother column sorted report. * The report name come from: isfm (Indi Spouse Father Mother) * It is designed for 16 pitch, HP laserjet III, 132 column * (ASCII output). * * familyisfm1 * * Code by Tom Wetmore, ttw@cbnewsl.att.com * Modifications by Cliff Manis * * This report works only with the LifeLines Genealogy program * * version one of this report was written by Tom Wetmore, in 1991, * and it has been modified many times since. * */ /* * familyisfm1 */ proc main () { indiset(idx) forindi(indi,n) { addtoset(idx,indi,n) print(d(n)) print(" ") } print(nl()) print("begin sorting") print(nl()) namesort(idx) print("done sorting") print(nl()) col(1) "INDEX OF ALL PERSONS IN DATABASE" col(1) "Individual" col(34) "Brth" col(39) "Deat" col(44) "First Spouse" col(75) "Father" col(106) "Mother" col(1) "----------------------------------------" "----------------------------------------" "----------------------------------------" forindiset(idx,indi,v,n) { col(1) fullname(indi,1,0,29) col(34) year(birth(indi)) col(39) year(death(indi)) if(gt(nspouses(indi), 0)) { spouses(indi, spou, fam, n) { if (eq(1,n)) { col(44) fullname(spou,1,0,29) } } } if(fath,father(indi)) { col(75) fullname(fath,1,0,29) } if(moth,mother(indi)) { col(106) fullname(moth,1,0,29) } } nl() print(nl()) } /* Sample output of this report. INDEX OF ALL PERSONS IN DATABASE Individual Brth Deat First Spouse Father Mother ------------------------------------------------------------------------------------------------------------------------ CUNNINGHAM, Margaret COLQUHOUN, Sir_John DE_COLQUHOUN, Sir_Humphry 1280 1330 DE_COLQUHOUN, Sir_Ingelramus DE_COLQUHOUN, Sir_Ingelramus 1250 DE_COLQUHOUN, Sir_Robert DE_COLQUHOUN, Sir_Robert 1310 1390 ____, Lady_of_Luss DE_COLQUHOUN, Sir_Humphry DE_COLQUHOUN, Sir_Robert 1220 1280 DE_KILPATRICK, Umfridus DE_KILPATRICK, Umfridus 1190 1260 DENTON, Denise Marie 1955 MANESS, Marion DOUGLAS, Archibald DUNBAR, Elizabeth DUNBAR, Elizabeth 1485 DOUGLAS, Archibald DUNBAR, James HAMILTON, Judith 1662 CALHOUN, Alexander */ /* End of Report */ lifelines-3.0.61/reports/famrep.ll0000700002540200244210000003323010077402654017250 0ustar prappDomain Users/* * @progname famrep.ll * @version 6.3 * @author James P. Jones (jjones@nas.nasa.gov) * @category * @output nroff * @description * * This report program produces a Family Group Sheet for the selected * individual, with options for generating sheets for married children * of the individual, and their children, etc. * * This report works only with the LifeLines Genealogy program * * version two: 1 Nov 1992 * version three: 28 Mar 1993 bug fixes * version four: 25 Apr 1993 added sources * version five: 26 Sep 1993 added multiple indi's, bug fix * version six: 3 Oct 1993 bug fixes * * This report program produces a Family Group Sheet for the selected * individual. User is given the choice of having sheets generated for * married children of individual, and the children of the children, etc. * Sources of information are indicated with end-note style * references. The report produces 'roff output, which I suggest you * convert to postscript for the highest quality report. Following are * several examples how to process and print the report (assuming the * output file name is "fam.out": * * tbl fam.out | xroff -me -tstdout | ipr -Pim7 -D"jobheader off" * tbl fam.out | xroff -me -PprinterName * tbl fam.out | groff -me | your_postscript_printer * tbl fam.out | troff -me | dpost | lp -dps * * The data in "compiler" table in main() is initialized with property's * obtained from the lifelines config file (~/.linesrc on unix else * lines.cfg) with values from * user.fullname * user.email * user.address * user.phone */ global(sourcelist) /* list of all sources used */ global(sourcestr) global(compiler) global(TRUE) global(FALSE) global(ONCE) proc main () { monthformat(4) dateformat(0) set(TRUE, 1) set(FALSE, 0) set(ONCE, TRUE) list(sourcelist) table(compiler) insert(compiler, "name", getproperty("user.fullname")) insert(compiler, "addr", getproperty("user.address")) insert(compiler, "phone", getproperty("user.phone")) insert(compiler, "email", getproperty("user.email")) set(indi, NULL) while (eq(strcmp(name(indi), NULL), 0)) { getindi(indi) /* select individual for report */ if (eq(strcmp(name(indi), NULL), 0)) { print("Individual not found in database.") print(nl()) } } while (or(lt(ionly,1), gt(ionly,2))) { getintmsg(ionly,"Choose (1) Individual only, (2) + Married Descendents: ") } if (eq(ionly, 2)) { set(sonly,0) while (or(lt(sonly,1), gt(sonly,2))) { getintmsg(sonly,"Choose (1) Select Spouse, (2) All Spouses: ") } } else { set(sonly, 1) } call FGsheet(indi, ionly, sonly) print("Report Done, ") } /* Select the individual's spouse for the Family Group Sheet. */ proc FGsheet(indi, ionly, sonly) { if (eq(sonly, 1)) { set(i, nspouses(indi)) spouses(indi, svar, fvar, no) { /* display spouses */ if (gt(i, 1)) { if (gt(no, 7)) { /* leave space for prompt */ print(nl()) print(nl()) print(nl()) print(nl()) } print(d(no)) print(". ") print(fullname(svar,TRUE,FALSE,50)) print(nl()) } } if (gt(i, 1)) { /* select a spouse */ getintmsg(num, "Choose which spouse for Family Report: ") } else { set(num, 1) } if (lt(i, 1)) { print(name(indi)) print(" has no spouse in database...") print(nl()) } else { if (eq(ONCE, TRUE)) { ".po 0.8i" nl() ".ll 6.8i" nl() ".pl +1.5i" nl() ".nf" nl() set(ONCE, FALSE) } } } spouses(indi, svar, fvar, no) { if (or(and(eq(sonly,1), eq(no, num)), eq(sonly,2))) { if (eq(strcmp(sex(indi), "F"), 0)) { set(tmp, indi) /* Check sex of individual,*/ set(tindi, svar) /* if Female, replace with */ set(tsvar, tmp) /* information on husband. */ set(i, nspouses(tindi)) /* Easier if assume head- */ set(num, 1) /* of-household is male... */ if (gt(i, 1)) { spouses(tindi, tmps, tmpf, no) { if (eq(name(tsvar), name(tmps))) { set(num, no) } } } call doform(tindi, tsvar, fvar, i, num) } else { call doform(indi, svar, fvar, i, num) } call printsources(sourcelist) while (not(empty(sourcelist))) { /* NULL out sources each time */ set(nil, dequeue(sourcelist)) set(sourcestr, NULL) } ".bp" nl() if (eq(ionly, 2)) { children(fvar, kid, j) { if(or(ge(nspouses(kid),1), ge(nfamilies(kid),1))) { call FGsheet(kid, ionly, 2) } } } } } } /* Produce the Family Group Sheet form. */ proc doform(indi, svar, fvar, numsp, cursp) { ".ps 16" nl() ".(b C" nl() if (e, surname(indi)) { upper(surname(indi)) } "\\0FAMILY\\0GROUP\\0SHEET" nl() ".ps 10" nl() "Compiled by: \\fI" lookup(compiler, "name") "\\fR\\0on\\0\\fI" stddate(gettoday()) "\\fR" nl() ".vs 10" nl() "\\fI" lookup(compiler, "addr") "\\fR" nl() "\\fIPhone:\\0" lookup(compiler, "phone") "\\0\\0\\0E-mail:\\0" lookup(compiler, "email") "\\fR" nl() ".)b" nl() ".ps 8" nl() ".TS" nl() "tab(+) expand box;" nl() "l s s." nl() "Husband's Full Name:\\0\\fI" if (e, name(indi)) { name(indi) "\\fR" nl() } else { "\\fR" } "_" nl() ".T&" nl() "l | l | l." nl() "Husband's Data+Day Month Year+City,\\0\\0Town or Place\\0\\0County or Province\\0\\0State or Country" nl() "_" nl() "\\0Birth+\\fI" set(aday, birth(indi)) if (e, stddate(aday)) { stddate(aday) } "+" if (e, place(aday)) { place(aday) } "\\fR" if (aday) { call dosource(aday) } nl() /* note: first call to source */ "_" nl() "\\0Christened+\\fI" set(aday, baptism(indi)) if (e, stddate(aday)) { stddate(aday) } "+" if (e, place(aday)) { place(aday) } "\\fR" if (aday) { call dosource(aday) } nl() "_" nl() "\\0Married+\\fI" set(aday, marriage(fvar)) if (e, stddate(aday)) { stddate(aday) } "+" if (e, place(aday)) { place(aday) } "\\fR" if (aday) { call dosource(aday) } nl() "_" nl() "\\0Death+\\fI" set(aday, death(indi)) if (e, stddate(aday)) { stddate(aday) } "+" if (e, place(aday)) { place(aday) } "\\fR" if (aday) { call dosource(aday) } nl() "_" nl() "\\0Burial+\\fI" set(aday, burial(indi)) if (e, stddate(aday)) { stddate(aday) } "+" if (e, place(aday)) { place(aday) } "\\fR" if (aday) { call dosource(aday) } nl() "_" nl() ".T&" nl() "l | l s." nl() "\\0Father's Name:+\\fI" if (e, name(father(indi))) { name(father(indi)) "\\fR" nl() } else { "\\fR" nl() } "_" nl() "\\0Mother's Maiden Name:+\\fI" if (e, name(mother(indi))) { name(mother(indi)) "\\fR" nl() } else { "\\fR" nl() } "_" nl() "\\0Other Wives:\\fI" set(f, 0) set(spstr, save(name(wife(fvar)))) spouses(indi, wifenm, tmpfvar, no) { set(wstr, save(name(wifenm))) if (ne(strcmp(spstr, wstr), 0)) { "\\fI+" name(wifenm) "\\fR" nl() set(f,1) } } if (eq(f, 0)) { "\\fR" nl() } "_" nl() ".TE" nl() ".TS" nl() "tab(+) expand box;" nl() "l s s." nl() "Wife's Full Maiden Name:\\0\\fI" if (e, name(svar)) { name(svar) } "\\fR" nl() "_" nl() ".T&" nl() "l | l | l." nl() "Wife's Data +Day Month Year+City,\\0\\0Town or Place\\0\\0County or Province\\0\\0State or Country" nl() "_" nl() "\\0Birth+\\fI" set(aday, birth(svar)) if (e, stddate(aday)) { stddate(aday) } "+" if (e, place(aday)) { place(aday) } "\\fR" if (aday) { call dosource(aday) } nl() "_" nl() "\\0Christened+\\fI" set(aday, baptism(svar)) if (e, stddate(aday)) { stddate(aday) } "+" if (e, place(aday)) { place(aday) } "\\fR" if (aday) { call dosource(aday) } nl() "_" nl() "\\0Death+\\fI" set(aday, death(svar)) if (e, stddate(aday)) { stddate(aday) } "+" if (e, place(aday)) { place(aday) } "\\fR" if (aday) { call dosource(aday) } nl() "_" nl() "\\0Burial+\\fI" set(aday, burial(svar)) if (e, stddate(aday)) { stddate(aday) } "+" if (e, place(aday)) { place(aday) } "\\fR" if (aday) { call dosource(aday) } nl() "_" nl() ".T&" nl() "l | l s." nl() "\\0Father's Name:+\\fI" if (e, name(father(svar))) { name(father(svar)) "\\fR" nl() } else { "\\fR" nl() } "_" nl() "\\0Mother's Maiden Name:+\\fI" if (e, name(mother(svar))) { name(mother(svar)) "\\fR" nl() } else { "\\fR" nl() } "_" nl() "\\0Other Husbands:\\fI" set(f, 0) set(spstr, save(name(indi))) spouses(svar, hubby, tmpfvar, no) { set(hstr, save(name(hubby))) if (ne(strcmp(spstr, hstr), 0)) { "\\fI+" name(hubby) "\\fR" nl() set(f,1) } } if (eq(f, 0)) { "\\fR" nl() } "_" nl() ".TE" nl() /* now for the children... */ set(haschild, 1) children(fvar, cvar, no) { if (eq(haschild, 1)) { ".TS" nl() "tab(+) expand box;" nl() "l |l| l | l | l." nl() "Complete Names of All Children+Sex+Event+Date+" "City, Town, County, State or Country" nl() "_" nl() set(haschild, 2) } if (or(eq(no, 4), eq(no, 12))) { /* If 4th or 12th kid, start */ ".TE" nl() /* a new page. There was an */ ".bp" nl() /* old woman, who lived in a */ ".TS" nl() /* shoe, she had so many kids... */ "tab(+) expand box;" nl() "l |l| l | l | l." nl() "Complete Names of All Children+Sex+Event+Date+" "City, Town, County/Province, State, Country" nl() "_" nl() } "T{" nl() "\\fI(" d(no) ") " if (e, name(cvar)) { name(cvar) } "\\fR" nl() "T}+\\fI" sex(cvar) "\\fR+Birth+\\fI" set(aday, birth(cvar)) if (e, stddate(aday)) { stddate(aday) } "+" if (e, place(aday)) { place(aday) } "\\fR" if (aday) { call dosource(aday) } nl() "_" nl() "\\^+\\^+Death+\\fI" set(aday, death(cvar)) if (e, stddate(aday)) { stddate(aday) } "+" if (e, place(aday)) { place(aday) } "\\fR" if (aday) { call dosource(aday) } nl() "_" nl() "\\^+\\^+Burial+\\fI" set(aday, burial(cvar)) if (e, stddate(aday)) { stddate(aday) } "+" if (e, place(aday)) { place(aday) } "\\fR" if (aday) { call dosource(aday) } nl() families(cvar, cfvar, csvar, no) { /* spouses */ "_" nl() "\\^+\\^+Marriage+\\fI" set(aday, marriage(cfvar)) if (e, stddate(aday)) { stddate(aday) } "+" if (e, name(csvar)) { name(csvar) } if (aday) { call dosource(aday) } "\\fR" nl() } "=" nl() } if (eq(haschild, 2)) { ".TE" nl() } } /* Short macro procedure to combine SOURCE and SOURCENUM calls, to shorten * above report code. */ proc dosource(eventnode) { call source(eventnode) /* get source of data */ if (sourcestr) { /* if source not NULL */ call sourcenum() /* print source number */ } } /* Retrieve source from a given event (EVENTNODE), and save it in the global * string SOURCESTR. */ proc source(eventnode) { set(sourcestr, NULL) traverse(eventnode, node, lev) { if (eq(strcmp(tag(node), "SOUR"), 0)) { set(sourcestr, value(node)) } } } /* Create a "List of Sources" table for the report; in the report itself, * print only a footnote number, and later the list these number refer to * can be printed (via PRINTSOURCES). */ proc sourcenum() { set(found,0) forlist(sourcelist, item, i) { set(numsources,i) if (eq(strcmp(item, sourcestr), 0)) { /* if source in list */ " \\s7(" d(i) ")\\s8" /* print out source index */ set(found, 1) } } if (not(eq(found, 1))) { push(sourcelist, sourcestr) /* otherwise add it to list */ " \\s7(" d(add(numsources,i,1)) ")\\s8" /* and print source index */ } } /* Print a list of all the sources refered to in the document. The numbers * preceeding each source entry are what the in-line references refer to. */ proc printsources(slist) { if (not(empty(slist))) { ".(b C" nl() "LIST OF SOURCES REFERENCED IN THIS REPORT" nl() ".)b" nl() forlist(slist, item, i) { "(" d(i) ") " item nl() } } } /* End of Report */ lifelines-3.0.61/reports/famtree1.ll0000700002540200244210000007601410324532741017505 0ustar prappDomain Users/* * @progname famtree1.ll * @version 2 * @author James P. Jones, jjones@nas.nasa.gov * @category * @output PostScript * @description * * This report builds a postscript ancestry chart, a "tree", containing * data on five generations. It prompts for the individual to begin with * and draws the tree including this person. The further from this person * the less data is printed. Maximum data include: * o date and place of birth * o date and place of marriage * o date and place of death * o last place of residence * o spouses of person #1 (up to five) * as well as: * o name, address, phone number and e-mail address of compiler * o date of chart * * version one: 9 May 1993 * * Code by James P. Jones, jjones@nas.nasa.gov * * Contains code from: * "famrep4" - By yours truely, jjones@nas.nasa.gov * "pedigree" - By Tom Wetmore, ttw@cbnewsl.att.com * - and Cliff Manis, cmanis@csoftec.csf.com * "ancestor.ps" - orginial postscript program by Phil Lloyd, * lloyd@prl.philips.co.uk (See disclaimer below). * * * This report works only with the LifeLines Genealogy program * * Note: * * o Change the "compiler" data below to reflect yourself. * o In order to take advantage of the "residence" slots on the chart, * use either ADDR (address) or ADDL (address living) tags in your * database, e.g.: * * 1 ADDL * 2 DATE 20 Jun 1992 * 2 PLAC 619 W Remington Drive, Sunnyvale, CA 94087 * * Put the full address on one line, separated by commas (,) and this * program will parse the street address from the city/state/zip for * the report. */ /* * Updated the filename to famtree2 after fixing problems with list vs * table variables. 22 September 2002. Paul Buckley. */ global(chart) global(id) global(savfam) global(addrnode) global(compiler) proc main () { dayformat(2) monthformat(6) dateformat(0) set(addrnode, NULL) /* * Change the compiler name, address, phone, and email to reflect * yourself. */ table(compiler) insert(compiler,"name", getproperty("user.fullname")) insert(compiler,"addr", getproperty("user.address")) insert(compiler,"phone", getproperty("user.phone")) insert(compiler,"email", getproperty("user.email")) getindi(indi) if (eq(indi, NULL)) { print("Individual not found...try again.") print(nl()) } else { table(chart) print("Creating chart...") call buildlist(0, 1, indi) call doheader() call dochart() print("done.") print(nl()) } } /* * Load global array (chart) with all INDI records of all direct ancestors * for individual, (indi + 4 generations), indexed by ah number. */ proc buildlist(in, ah, indi) { if (par, father(indi)) { if (lt(ah, 16)) { call buildlist(add(1,in), mul(2,ah), par) } } /* setel(par, ah, indi)*/ /* setel(chart, ah, indi)*/ insert(chart, d(ah), indi) if (par, mother(indi)) { if (lt(ah, 16)) { call buildlist(add(1,in), add(1,mul(2,ah)), par) } } } /* * Find last residence of PERSON by traversing all ADDR and ADDL nodes; * save result in global addrnode variable. */ proc residence(person) { if (not(person)) { set(addrnode, NULL) } else { traverse(inode(person), node, lev) { if (or(eq(strcmp(tag(node),"ADDR"),0),eq(strcmp(tag(node),"ADDL"),0))) { set(addrnode, node) } } } } /* * Write postscript header to output file. This is database independant * code. The actual genealogical data will be added below. */ proc doheader() { "%! " nl() "% famtree.ps " nl() "% " nl() "% This postscript Ancestry Chart was produced by the LifeLines report " nl() "% program, famtree1, by James P. Jones. The orginal postscript code " nl() "% was written by Phil Lloyd 11th November 1986, the blanks filled in " nl() "% with data extracted from a LifeLines Genealogy database. " nl() "% ------------------------------------------------------------------- " nl() "% " nl() "% This original PostScript program was written by Phil Lloyd. " nl() "% It may be freely copied, distributed and used, provided these comments " nl() "% remain unchanged, and that no fee of any kind is charged for the " nl() "% software. " nl() "% " nl() "% (Except for VERY long names, it should always be possible to condense the " nl() "% text to fit into the boxes, without sacrificing readability [by changing " nl() "% the font/point size].) " nl() "% " nl() "% lloyd@prl.philips.co.uk " nl() " " nl() "% create a standard 1 point Helvetica-Bold font " nl() "/bold /Helvetica-Bold findfont def " nl() " " nl() "% create a standard 1 point Helvetica-Oblique font " nl() "/ital /Helvetica-Oblique findfont def " nl() " " nl() "% box procedure " nl() "% 5 arguments: x and y of middle of left-hand side " nl() "% n: entry number ( 1 - 31 ) " nl() "% style: font (bold or ital) " nl() "% point: point size (vertical) " nl() "% cond: `point size' (horizontal) " nl() "% p: person's name " nl() "/mtrx matrix def " nl() "/box " nl() " { /p exch def " nl() " /cond exch def /point exch def /style exch def " nl() " /n exch def /y exch def /x exch def " nl() " " nl() " /savematrix mtrx currentmatrix def " nl() " " nl() " 0 setlinewidth " nl() " " nl() " /d 16 def /str 2 string def " nl() " /w 170 def /h 14 def /hh h 2 div def /brad 3 def " nl() " x y translate " nl() " " nl() " n 0 ne { " nl() " % black box for number " nl() " newpath " nl() " 0.0 0.0 moveto " nl() " 0.0 hh d hh brad arcto 4 {pop} repeat " nl() " d hh d hh neg brad arcto 4 {pop} repeat " nl() " d hh neg 0.0 hh neg brad arcto 4 {pop} repeat " nl() " 0.0 hh neg 0.0 0.0 brad arcto 4 {pop} repeat " nl() " 0.0 0.0 lineto " nl() " fill " nl() " " nl() " % white number " nl() " /Helvetica findfont 10 scalefont setfont " nl() " 0.0 hh neg moveto " nl() " n str cvs " nl() " dup stringwidth pop " nl() " neg d add 2 div -3.5 moveto " nl() " 1.0 setgray show 0.0 setgray " nl() " } if " nl() " " nl() " % box for name " nl() " newpath " nl() " d 0.0 moveto " nl() " d hh w hh brad arcto 4 {pop} repeat " nl() " w hh w hh neg brad arcto 4 {pop} repeat " nl() " w hh neg d hh neg brad arcto 4 {pop} repeat " nl() " d hh neg d 0.0 brad arcto 4 {pop} repeat " nl() " d 0.0 lineto " nl() " stroke " nl() " " nl() " % name in chosen font " nl() " d 5 add hh neg 3 add moveto " nl() " style [cond 0 0 point 0 0] makefont setfont " nl() " p show " nl() " /Helvetica findfont 10 scalefont setfont " nl() " " nl() " savematrix setmatrix " nl() " } def " nl() " " nl() "% tie procedure " nl() "% 4 arguments: x and y of top right-hand end of tie " nl() "% vh: half vertical span of the tie " nl() "% bmul: multiplier to redirect central tail " nl() "% 1: tail faces left " nl() "% 0: tail faces right " nl() "/mtrx matrix def " nl() "/tie " nl() " { /bmul exch def /vh exch def /y exch def /x exch def " nl() " " nl() " /savematrix mtrx currentmatrix def " nl() " " nl() " 1 setlinewidth " nl() " " nl() " /h 10 def /h2 h 2 mul def /v vh 2 mul def /trad 4 def " nl() " x y translate " nl() " " nl() " newpath " nl() " 0.0 0.0 moveto " nl() " h neg 0.0 h neg vh neg trad arcto 4 {pop} repeat " nl() " h neg vh neg h2 neg bmul mul vh neg trad arcto 4 {pop} repeat " nl() " h2 neg bmul mul vh neg lineto " nl() " 0.0 v neg moveto " nl() " h neg v neg h neg vh neg trad arcto 4 {pop} repeat " nl() " h neg vh neg h2 neg bmul mul vh neg trad arcto 4 {pop} repeat " nl() " stroke " nl() " " nl() " savematrix setmatrix " nl() " } def " nl() " " nl() "% dates1 procedure " nl() "% 34 arguments: x and y start of first line of text " nl() "% sb1, pb1, cb1: font for the following text " nl() "% b1: first line of text for "born" " nl() "% sb2, pb2, cb2: font for following text: " nl() "% b2: second line of text for "born" " nl() "% sm1, pm1, cm1: font for following text: " nl() "% m1: first line of text for "married" " nl() "% sm2, pm2, cm2: font for following text: " nl() "% m2: second line of text for "married" " nl() "% sr1, pr1, cr1: font for following text: " nl() "% r1: first line of text for "resident" " nl() "% sr2, pr2, cr2: font for following text: " nl() "% r2: second line of text for "resident" " nl() "% sd1, pd1, cd1: font for following text: " nl() "% d1: first line of text for "died" " nl() "% sd2, pd2, cd2: font for following text: " nl() "% d2: second line of text for "died" " nl() "/mtrx matrix def " nl() "/dates1 " nl() " { /d2 exch def /cd2 exch def /pd2 exch def /sd2 exch def " nl() " /d1 exch def /cd1 exch def /pd1 exch def /sd1 exch def " nl() " /r2 exch def /cr2 exch def /pr2 exch def /sr2 exch def " nl() " /r1 exch def /cr1 exch def /pr1 exch def /sr1 exch def " nl() " /m2 exch def /cm2 exch def /pm2 exch def /sm2 exch def " nl() " /m1 exch def /cm1 exch def /pm1 exch def /sm1 exch def " nl() " /b2 exch def /cb2 exch def /pb2 exch def /sb2 exch def " nl() " /b1 exch def /cb1 exch def /pb1 exch def /sb1 exch def " nl() " /y exch def /x exch def " nl() " " nl() " /savematrix mtrx currentmatrix def " nl() " /voff 23 neg def /v 19 def /vv 9 def /hoff 45 def " nl() " x y translate " nl() " " nl() " newpath " nl() " 0.0 voff moveto (born) show " nl() " 0.0 voff v sub moveto (married) show " nl() " 0.0 voff v 2 mul sub moveto (resident) show " nl() " 0.0 voff v 3 mul sub moveto (died) show " nl() " sb1 [cb1 0 0 pb1 0 0] makefont setfont " nl() " hoff voff moveto b1 show " nl() " sb2 [cb2 0 0 pb2 0 0] makefont setfont " nl() " hoff voff vv sub moveto b2 show " nl() " sm1 [cm1 0 0 pm1 0 0] makefont setfont " nl() " hoff voff v sub moveto m1 show " nl() " sm2 [cm2 0 0 pm2 0 0] makefont setfont " nl() " hoff voff v sub vv sub moveto m2 show " nl() " sr1 [cr1 0 0 pr1 0 0] makefont setfont " nl() " hoff voff v 2 mul sub moveto r1 show " nl() " sr2 [cr2 0 0 pr2 0 0] makefont setfont " nl() " hoff voff v 2 mul sub vv sub moveto r2 show " nl() " sd1 [cd1 0 0 pd1 0 0] makefont setfont " nl() " hoff voff v 3 mul sub moveto d1 show " nl() " sd2 [cd2 0 0 pd2 0 0] makefont setfont " nl() " hoff voff v 3 mul sub vv sub moveto d2 show " nl() " " nl() " savematrix setmatrix " nl() " } def " nl() " " nl() "% dates2 procedure " nl() "% 10 arguments: x and y start of first line of text " nl() "% sb1, pb1, cb1: font for following text: " nl() "% b1: first line of text for "born" " nl() "% sb2, pb2, cb2: font for following text: " nl() "% b2: second line of text for "born" " nl() "% sd1, pd1, cd1: font for following text: " nl() "% d1: first line of text for "died" " nl() "% sd2, pd2, cd2: font for following text: " nl() "% d2: second line of text for "died" " nl() "/mtrx matrix def " nl() "/dates2 " nl() " { /d2 exch def /cd2 exch def /pd2 exch def /sd2 exch def " nl() " /d1 exch def /cd1 exch def /pd1 exch def /sd1 exch def " nl() " /b2 exch def /cb2 exch def /pb2 exch def /sb2 exch def " nl() " /b1 exch def /cb1 exch def /pb1 exch def /sb1 exch def " nl() " /y exch def /x exch def " nl() " " nl() " /savematrix mtrx currentmatrix def " nl() " /voff 23 neg def /v 19 def /vv 9 def /hoff 30 def " nl() " x y translate " nl() " " nl() " newpath " nl() " 0.0 voff moveto (born) show " nl() " 0.0 voff v sub moveto (died) show " nl() " sb1 [cb1 0 0 pb1 0 0] makefont setfont " nl() " hoff voff moveto b1 show " nl() " sb2 [cb2 0 0 pb2 0 0] makefont setfont " nl() " hoff voff vv sub moveto b2 show " nl() " sd1 [cd1 0 0 pd1 0 0] makefont setfont " nl() " hoff voff v sub moveto d1 show " nl() " sd2 [cd2 0 0 pd2 0 0] makefont setfont " nl() " hoff voff v sub vv sub moveto d2 show " nl() " " nl() " savematrix setmatrix " nl() " } def " nl() " " nl() "% dates3 procedure " nl() "% 10 arguments: x and y start of first line of text " nl() "% sb1, pb1, cb1: font for following text: " nl() "% b1: line of text for "born" " nl() "% sm1, pm1, cm1: font for following text: " nl() "% m1: line of text for "married" " nl() "% sr1, pr1, cr1: font for following text: " nl() "% r1: line of text for "resident" " nl() "% sd1, pd1, cd1: font for following text: " nl() "% d1: line of text for "died" " nl() "/mtrx matrix def " nl() "/dates3 " nl() " { /d1 exch def /cd1 exch def /pd1 exch def /sd1 exch def " nl() " /r1 exch def /cr1 exch def /pr1 exch def /sr1 exch def " nl() " /m1 exch def /cm1 exch def /pm1 exch def /sm1 exch def " nl() " /b1 exch def /cb1 exch def /pb1 exch def /sb1 exch def " nl() " /y exch def /x exch def " nl() " " nl() " /savematrix mtrx currentmatrix def " nl() " /voff 17 neg def /v 11 def /hoff 30 def " nl() " x y translate " nl() " " nl() " newpath " nl() " 0.0 voff moveto (born) show " nl() " 0.0 voff v sub moveto (mrrd) show " nl() " 0.0 voff v 2 mul sub moveto (rsdnt) show " nl() " 0.0 voff v 3 mul sub moveto (died) show " nl() " sb1 [cb1 0 0 pb1 0 0] makefont setfont " nl() " hoff voff moveto b1 show " nl() " sm1 [cm1 0 0 pm1 0 0] makefont setfont " nl() " hoff voff v sub moveto m1 show " nl() " sr1 [cr1 0 0 pr1 0 0] makefont setfont " nl() " hoff voff v 2 mul sub moveto r1 show " nl() " sd1 [cd1 0 0 pd1 0 0] makefont setfont " nl() " hoff voff v 3 mul sub moveto d1 show " nl() " " nl() " savematrix setmatrix " nl() " } def " nl() " " nl() "% dates4 procedure " nl() "% 6 arguments: x and y start of first line of text " nl() "% sb1, pb1, cb1: font for following text: " nl() "% b1: line of text for "born" " nl() "% sd1, pd1, cd1: font for following text: " nl() "% d1: line of text for "died" " nl() "/mtrx matrix def " nl() "/dates4 " nl() " { /d1 exch def /cd1 exch def /pd1 exch def /sd1 exch def " nl() " /b1 exch def /cb1 exch def /pb1 exch def /sb1 exch def " nl() " /y exch def /x exch def " nl() " " nl() " /savematrix mtrx currentmatrix def " nl() " /voff 17 neg def /v 11 def /hoff 30 " nl() " x y translate " nl() " " nl() " newpath " nl() " 0.0 voff moveto (born) show " nl() " 0.0 voff v sub moveto (died) show " nl() " sb1 [cb1 0 0 pb1 0 0] makefont setfont " nl() " hoff voff moveto b1 show " nl() " sd1 [cd1 0 0 pd1 0 0] makefont setfont " nl() " hoff voff v sub moveto d1 show " nl() " " nl() " savematrix setmatrix " nl() " } def " nl() " " nl() "% dates5 procedure " nl() "% 10 arguments: x and y start of first line of text " nl() "% sb1, pb1, cb1: font for following text: " nl() "% b1: text for "born" " nl() "% sm1, pm1, cm1: font for following text: " nl() "% m1: text for "married" " nl() "% sr1, pr1, cr1: font for following text: " nl() "% r1: text for "resident" " nl() "% sd1, pd1, cd1: font for following text: " nl() "% d1: text for "died" " nl() "/mtrx matrix def " nl() "/dates5 " nl() " { /d1 exch def /cd1 exch def /pd1 exch def /sd1 exch def " nl() " /r1 exch def /cr1 exch def /pr1 exch def /sr1 exch def " nl() " /m1 exch def /cm1 exch def /pm1 exch def /sm1 exch def " nl() " /b1 exch def /cb1 exch def /pb1 exch def /sb1 exch def " nl() " /y exch def /x exch def " nl() " " nl() " /savematrix mtrx currentmatrix def " nl() " /voff 15 neg def /v 10 def /wh 85 def /hoff 15 def " nl() " x y translate " nl() " " nl() " newpath " nl() " 0.0 voff moveto (b) show " nl() " 0.0 voff v sub moveto (m) show " nl() " wh voff v sub moveto (r) show " nl() " wh voff moveto (d) show " nl() " sb1 [cb1 0 0 pb1 0 0] makefont setfont " nl() " hoff voff moveto b1 show " nl() " sm1 [cm1 0 0 pm1 0 0] makefont setfont " nl() " hoff voff v sub moveto m1 show " nl() " sr1 [cr1 0 0 pr1 0 0] makefont setfont " nl() " wh hoff add voff v sub moveto r1 show " nl() " sd1 [cd1 0 0 pd1 0 0] makefont setfont " nl() " wh hoff add voff moveto d1 show " nl() " " nl() " savematrix setmatrix " nl() " } def " nl() " " nl() "% dates6 procedure " nl() "% 6 arguments: x and y start of text " nl() "% sb1, pb1, cb1: font for following text: " nl() "% b1: text for "born" " nl() "% sd1, pd1, cd1: font for following text: " nl() "% d1: text for "died" " nl() "/mtrx matrix def " nl() "/dates6 " nl() " { /d1 exch def /cd1 exch def /pd1 exch def /sd1 exch def " nl() " /b1 exch def /cb1 exch def /pb1 exch def /sb1 exch def " nl() " /y exch def /x exch def " nl() " " nl() " /savematrix mtrx currentmatrix def " nl() " /voff 15 neg def /v 10 def /wh 85 def /hoff 15 def " nl() " x y translate " nl() " " nl() " newpath " nl() " 0.0 voff moveto (b) show " nl() " wh voff moveto (d) show " nl() " sb1 [cb1 0 0 pb1 0 0] makefont setfont " nl() " hoff voff moveto b1 show " nl() " sd1 [cd1 0 0 pd1 0 0] makefont setfont " nl() " wh hoff add voff moveto d1 show " nl() " " nl() " savematrix setmatrix " nl() " } def " nl() " " nl() "% coordinate transform to landscape format " nl() "90 rotate 0 -563 translate " nl() " " nl() "% scaling used for pocket version " nl() "% 0.6 0.6 scale " nl() } /* * Write the rest of the postscript code to the output file, with the * blanks filled in with data extracted from the user's LifeLines database. */ proc dochart() { set(id, 1) /* set(person, getel(chart, id))*/ set(person, lookup(chart, d(id))) "/Helvetica-Bold findfont 14 scalefont setfont" nl() "30 500 moveto (Ancestry Chart of: " name(person) ") show" nl() nl() "/Helvetica-Oblique findfont 9 scalefont setfont" nl() "30 485 moveto (Compiled by: " lookup(compiler, "name") ") show" nl() "30 475 moveto (" lookup(compiler, "addr") ") show" nl() "30 465 moveto (" lookup(compiler, "phone") ") show" nl() "30 455 moveto (" lookup(compiler, "email") ") show" nl() nl() "/Helvetica-Oblique findfont 9 scalefont setfont" nl() "30 440 moveto (Chart dated: " stddate(gettoday()) ") show" nl() nl() "/Helvetica findfont 14 scalefont setfont" nl() "20 270 moveto (Ancestors of:) show" nl() nl() /* loop through all spouse, outputing names */ spouses(person, svar, fvar, num) { if (eq(num, 1)) { set(savfam, fvar) "/Helvetica findfont 12 scalefont setfont" nl() "36 156 moveto (spouse: #1) show" nl() "20 145 0 bold 9 9 (" name(svar) ") box" nl() } if (eq(num, 2)) { "/Helvetica findfont 12 scalefont setfont" nl() "36 55 moveto (other spouses:) show" nl() "20 44 0 bold 9 9 (#2: " name(svar) ") box" nl() } if (eq(num, 3)) { "/Helvetica findfont 12 scalefont setfont" nl() "20 28 0 bold 9 9 (#3: " name(svar) ") box" nl() } if (eq(num, 4)) { "/Helvetica findfont 12 scalefont setfont" nl() "20 12 0 bold 9 9 (#4: " name(svar) ") box" nl() } if (eq(num, 5)) { "/Helvetica findfont 12 scalefont setfont" nl() "20 -4 0 bold 9 9 (#5: " name(svar) ") box" nl() } } "/Helvetica findfont 10 scalefont setfont" nl() nl() "% individual" nl() "20 257 1 bold 9 9 (" name(person) ") box" nl() "20 257" nl() call dates1(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "% parents" nl() "20 393 2 bold 9 9 (" name(person) ") box" nl() "20 393" nl() call dates1(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "20 121 3 bold 9 9 (" name(person) ") box" nl() "20 121" nl() call dates2(person) "20 393 136 0 tie" nl() nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "% grandparents" nl() "210 461 4 bold 9 9 (" name(person) ") box" nl() "210 461" nl() call dates1(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "210 325 5 bold 9 9 (" name(person) ") box" nl() "210 325" nl() call dates2(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "210 189 6" nl() "bold 9 9 (" name(person) ") box" nl() "210 189" nl() call dates1(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "210 189 6" nl() "210 53 7 bold 9 9 (" name(person) ") box" nl() "210 53" nl() call dates2(person) "210 461 68 1 tie 210 189 68 1 tie" nl() nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "% great-grandparents" nl() "400 495 8 bold 9 9 (" name(person) ") box" nl() "400 495" nl() monthformat(4) call dates3(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "400 427 9 bold 9 9 (" name(person) ") box" nl() "400 427" nl() call dates4(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "400 359 10 bold 9 9 (" name(person) ") box" nl() "400 359" nl() call dates3(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "400 291 11 bold 9 9 (" name(person) ") box" nl() "400 291" nl() call dates4(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "400 223 12 bold 9 9 (" name(person) ") box" nl() "400 223" nl() call dates3(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "400 155 13 bold 9 9 (" name(person) ") box" nl() "400 155" nl() call dates4(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "400 87 14 bold 9 9 (" name(person) ") box" nl() "400 87" nl() call dates3(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "400 19 15 bold 9 9 (" name(person) ") box" nl() "400 19" nl() call dates4(person) "400 495 34 1 tie 400 359 34 1 tie" nl() "400 223 34 1 tie 400 87 34 1 tie" nl() nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "% great-great-grandparents" nl() "590 512 16 bold 9 9 (" name(person) ") box" nl() "590 512" nl() call dates5(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "590 478 17 bold 9 9 (" name(person) ") box" nl() "590 478" nl() call dates6(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "590 444 18 bold 9 9 (" name(person) ") box" nl() "590 444" nl() call dates5(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "590 410 19 bold 9 9 (" name(person) ") box" nl() "590 410" nl() call dates6(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "590 376 20 bold 9 9 (" name(person) ") box" nl() "590 376" nl() call dates5(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "590 342 21 bold 9 9 (" name(person) ") box" nl() "590 342" nl() call dates6(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "590 308 22 bold 9 9 (" name(person) ") box" nl() "590 308" nl() call dates5(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "590 274 23 bold 9 9 (" name(person) ") box" nl() "590 274" nl() call dates6(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "590 240 24 bold 9 9 (" name(person) ") box" nl() "590 240" nl() call dates5(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "590 206 25 bold 9 9 (" name(person) ") box" nl() "590 206" nl() call dates6(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "590 172 26 bold 9 9 (" name(person) ") box" nl() "590 172" nl() call dates5(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "590 138 27 bold 9 9 (" name(person) ") box" nl() "590 138" nl() call dates6(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "590 104 28 bold 9 9 (" name(person) ") box" nl() "590 104" nl() call dates5(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "590 70 29 bold 9 9 (" name(person) ") box" nl() "590 70" nl() call dates6(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "590 36 30 bold 9 9 (" name(person) ") box" nl() "590 36" nl() call dates5(person) nl() set(id, add(id, 1)) set(person, lookup(chart, d(id))) "590 2 31 bold 9 9 (" name(person) ") box" nl() "590 2" nl() call dates6(person) nl() "590 512 17 1 tie 590 444 17 1 tie" nl() "590 376 17 1 tie 590 308 17 1 tie" nl() "590 240 17 1 tie 590 172 17 1 tie" nl() "590 104 17 1 tie 590 36 17 1 tie" nl() nl() "showpage" nl() nl() } /* Style #1 for dates information... */ proc dates1(person) { list(addrlist) "bold 10 9 (" stddate(birth(person)) ")" nl() "bold 10 9 (" place(birth(person)) ")" nl() set(curfam, 0) if (eq(id, 1)) { set(curfam, savfam) } else { /* if (eq(mod(d(id), 2), 0)) {*/ if (eq(mod(id, 2), 0)) { /* set(curfam, parents(getel(chart, div(id, 2))))*/ set(curfam, parents(lookup(chart, d(div(id, 2))))) } } "bold 10 9 (" stddate(marriage(curfam)) ")" nl() "bold 10 9 (" place(marriage(curfam)) ")" nl() set(addrnode, NULL) call residence(person) if (gt(strlen(place(addrnode)), 25)) { extractplaces(addrnode, addrlist, n) set(line1, NULL) set(line1, dequeue(addrlist)) set(line2, NULL) while (not(empty(addrlist))) { set(line2, concat(line2, dequeue(addrlist))) set(line2, concat(line2, " ")) } "bold 10 9 (" line1 ")" nl() "bold 10 9 (" line2 ")" nl() } else { "bold 10 9 (" place(addrnode) ")" nl() "bold 10 9 (" ")" nl() } "bold 10 9 (" stddate(death(person)) ")" nl() "bold 10 9 (" place(death(person)) ")" nl() "dates1" nl() } /* Style #2 for dates information... */ proc dates2(person) { "bold 10 9 (" stddate(birth(person)) ")" nl() "bold 10 9 (" place(birth(person)) ")" nl() "bold 10 9 (" stddate(death(person)) ")" nl() "bold 10 9 (" place(death(person)) ")" nl() "dates2" nl() } /* Style #3 for dates information... */ proc dates3(person) { list(addrlist) "bold 10 7.6 (" short(birth(person)) ")" nl() set(curfam, 0) /* if (eq(mod(d(id), 2), 0)) {*/ if (eq(mod(id, 2), 0)) { /* set(curfam, parents(getel(chart, div(id, 2))))*/ set(curfam, parents(lookup(chart, d(div(id, 2))))) } "bold 10 7.6 (" short(marriage(curfam)) ")" nl() "bold 10 7.6 " set(addrnode, NULL) call residence(person) if (gt(strlen(place(addrnode)), 25)) { extractplaces(addrnode, addrlist, n) set(line1, NULL) set(line1, dequeue(addrlist)) set(line2, NULL) while (not(empty(addrlist))) { set(line2, concat(line2, dequeue(addrlist))) set(line2, concat(line2, " ")) } " (" line2 ")" nl() } else { " (" place(addrnode) ")" nl() } "bold 10 7.6 (" short(death(person)) ")" nl() "dates3" nl() } /* Style #4 for dates information... */ proc dates4(person) { "bold 10 7.6 (" short(birth(person)) ")" nl() "bold 10 7.6 (" short(death(person)) ")" nl() "dates4" nl() } /* Style #5 for dates information... */ proc dates5(person) { list(addrlist) "bold 10 5 (" short(birth(person)) ")" nl() set(curfam, 0) /* if (eq(mod(d(id), 2), 0)) {*/ if (eq(mod(id, 2), 0)) { /* set(curfam, parents(getel(chart, div(id, 2))))*/ set(curfam, parents(lookup(chart, d(div(id, 2))))) } "bold 10 5 (" short(marriage(curfam)) ")" nl() set(addrnode, NULL) call residence(person) if (gt(strlen(place(addrnode)), 25)) { extractplaces(addrnode, addrlist, n) set(line1, NULL) set(line1, dequeue(addrlist)) set(line2, NULL) while (not(empty(addrlist))) { set(line2, concat(line2, dequeue(addrlist))) set(line2, concat(line2, " ")) } "bold 10 5 (" line2 ")" nl() } else { "bold 10 5 (" place(addrnode) ")" nl() } "bold 10 5 (" short(death(person)) ")" nl() "dates5" nl() } /* Style #6 for dates information... */ proc dates6(person) { "bold 10 5 (" short(birth(person)) ")" nl() "bold 10 5 (" short(death(person)) ")" nl() "dates6" nl() } lifelines-3.0.61/reports/fam_ged.ll0000700002540200244210000000367610076661057017376 0ustar prappDomain Users/* * @progname fam_ged.ll * @version 1.1 of 1994-06-08 * @author Wetmore and Prinke * @category * @output GEDCOM * @description This program extracts a gedcom file of all male line descendants of a specified person, with their spouses and parents (including those of the specified person and of all spouses). Also included are possibly illegitimate children of females - when they have the same surname as the mother but different than the father (also if there is no father recorded). ------------------------------------------------------------------- fam_ged - a LifeLines family gedcom extraction program Version 1, 18 May 1994 by Thomas Wetmore IV, ttw@petrel.att.com modified 8 June 1994 by Rafal T. Prinke, rafalp@plpuam11.bitnet */ proc main () { list(ilist) indiset(idex) getindi(indi) enqueue(ilist, indi) set(out,1) set(in,2) while (indi, dequeue(ilist)) { print("OUT: ", d(out), " ", name(indi), "\n") addtoset(idex, indi, 0) set(out, add(out, 1)) if (male(indi)) { families(indi, fam, spouse, nfam) { children(fam, child, nchl) { print("IN: ", d(in), " ", name(child), "\n") set(in, add(in, 1)) enqueue(ilist, child) } } } if (female(indi)) { families(indi, fam, spouse, nfam) { children(fam, child, nchl) { if (eq(strcmp(surname(indi), surname(child)), 0)) { if (ne(strcmp(surname(indi), surname(spouse)), 0)) { print("INfem: ", d(in), " ", name(child), "\n") set(in, add(in, 1)) enqueue(ilist, child) } } } } } } set(idex, union(idex, spouseset(idex))) set(idex, union(idex, parentset(idex))) gengedcom(idex) } lifelines-3.0.61/reports/fdesc.ll0000700002540200244210000000203510076661057017064 0ustar prappDomain Users/* * @progname fdesc.ll * @version 1.0 * @author Wetmore * @category * @output GEDCOM * @description this funny little program is based on Tom Wetmore's "genancc1" and generates a GEDCOM file with descendants of a chosen individual who have the same surname (usually this means male line descendants plus illegitimate children of daughters) plus their spouses. a truely good program would need to exclude cases of daughters' marriages with guys of the same surname but not related and include male line descendants who changed surnames */ proc main () { indiset(set1) indiset(set2) getindi(indi) addtoset(set2, indi, n) set(set1, descendantset(set2)) set(set1, union(set1, set2)) getindiset(set2) set(set1, intersect(set1, set2)) set(set2, spouseset(set1)) set(set1, union(set1, set2)) gengedcom(set1) } lifelines-3.0.61/reports/fileindex.ll0000700002540200244210000001617310166311056017746 0ustar prappDomain Users/* * @progname fileindex.ll * @version 1999 * @author Dennis Nicklaus * @category * @output HTML * @description I have lines on indi's in my database which look like: 1 NOTE FILE: BIOGRAPHY $FAMHIST/matthews/alkire.bio or maybe OBITUARY, MARRIAGE, WILL, NEWS ... instead of BIOGRAPHY. and the lowercase letters (matthews/alkire.bio in this example) will change to reflect the location of the file in question. The purpose of this report is to make an index for these files. Each entry looks something like: ALKIRE, James Denton : matthews_alkire_bio
      referencing my page for the individual and the file which has the article in it. (I had to change the file naming scheme from my local disk to the place where I have my files served to the WWW (geocities used to not allow subdirectories). The files are grouped by type (e.g. BIO, OBIT, ...) and then are sorted alphabetically by the individual's surname within each grouping. Probably not generally useful to anyone else, but shows one thing that can be done. */ proc main() { indiset(obitset) indiset(marrset) indiset(otherset) indiset(bioset) indiset(willset) table(obittab) table(marrtab) table(othertab) table(biotab) table(willtab) print("patience please, you have a lot of data\n") forindi (person, pnum) { fornotes(inode(person),note){ set (i, index(note,"FILE:",1)) if (gt(i,0)){ /* Get the filename. lifted from html.dn */ set(what,save(substring(note,add(i,6),strlen(note)))) set (i, index(what," ",1)) set(descrip,save(substring(what,1,i))) /* now get and flatten the file name */ set (i, index(what,"FAMHIST/",1)) set (fname,save(substring(what,add(i,strlen("FAMHIST/")),strlen(what))))o set (slash, index(fname,"/",1)) while (gt(slash,0)){ set(fnameb,save(concat(concat(substring(fname,1,sub(slash,1)),"_"), substring(fname,add(slash,1),strlen(fname))))) set(fname,fnameb) set (slash, index(fname,"/",1)) } set (slash, index(fname,".",1)) while (gt(slash,0)){ set(fnameb,save(concat(concat(substring(fname,1,sub(slash,1)),"_"), substring(fname,add(slash,1),strlen(fname))))) set(fname,fnameb) set (slash, index(fname,".",1)) } /* filename is now complete except for adding .txt on the end of it */ /* now figure out which table things go in */ set (i, index(note,"OBITUARY",1)) if (gt(i,0)){ addtoset(obitset,person,0) list(temp) if (lookup(obittab, key(person))){ set(temp,lookup(obittab, key(person))) enqueue(temp,fname) } else { enqueue(temp,fname) } insert(obittab, save(key(person)), temp) } set (j, index(note,"MARRIAGE",1)) if (gt(j,0)){ addtoset(marrset,person,0) list(temp) if (lookup(marrtab, key(person))){ set(temp,lookup(marrtab, key(person))) enqueue(temp,fname) } else { enqueue(temp,fname) } insert(marrtab, save(key(person)), temp) } set (k, add(index(note,"BIOGRAPHY",1),index(note,"HISTORY",1))) if (gt(k,0)){ addtoset(bioset,person,0) list(temp) if (lookup(biotab, key(person))){ set(temp,lookup(biotab, key(person))) enqueue(temp,fname) } else { enqueue(temp,fname) } insert(biotab, save(key(person)), temp) } set (m, index(note,"WILL",1)) if (gt(m,0)){ addtoset(willset,person,0) list(temp) if (lookup(willtab, key(person))){ set(temp,lookup(willtab, key(person))) enqueue(temp,fname) } else { enqueue(temp,fname) } insert(willtab, save(key(person)), temp) } if (eq(add(add(add(i,j),k),m),0)){ addtoset(otherset,person,0) list(temp) if (lookup(othertab, key(person))){ set(temp,lookup(othertab, key(person))) enqueue(temp,fname) } else { enqueue(temp,fname) } insert(othertab, save(key(person)), temp) } } } } /* now sort and print things out */ print("uniquing\n") /* uniqueset(obitset) uniqueset(marrset) uniqueset(otherset) uniqueset(bioset)*/ print("sorting\n") namesort(obitset) namesort(marrset) namesort(otherset) namesort(bioset) namesort(willset) print("printing\n") call intro() "
      Have Obituaries for :

      \n" forindiset(obitset,person,i,j) { call nameout(person) forlist(lookup(obittab, key(person)),newfile,n){ " : " newfile " " } "
      \n" } "
      Have marriage articles for :

      \n" forindiset(marrset,person,i,j) { call nameout(person) forlist(lookup(marrtab, key(person)),newfile,n){ " : " newfile " " } "
      \n" } "
      Have Biographical or historical articles for :

      \n" forindiset(bioset,person,i,j) { call nameout(person) forlist(lookup(biotab, key(person)),newfile,n){ " : " newfile " " } "
      \n" } "
      Have Wills for :

      \n" forindiset(willset,person,i,j) { call nameout(person) forlist(lookup(willtab, key(person)),newfile,n){ " : " newfile " " } "
      \n" } "
      Have Other info for :

      \n" forindiset(otherset,person,i,j) { call nameout(person) forlist(lookup(othertab, key(person)),newfile,n){ " : " newfile " " } "
      \n" } call end() } proc nameout(person) { " " fullname(person,1,0,999) " " } proc intro() { set(db_owner, getproperty("user.fullname")) set(owner_email, concat("mailto:",getproperty("user.email"))) "\n" "" db_owner " Genealogy Article Index\n" "\n" "

      Family Article Index

      \n" "
      " db_owner " " owner_email "
      \n" "

      \n" "This is an index of the various obituaries, biographies, wedding announcements, \n" "wills, etc. that I have, sorted into those categories. Selecting the name\n" "of the person will take you to that person's page. Following the person's\n" "name is a filename or list of filenames which are the articles for that person.\n" "Selecting the article filename will take you directly to it.\n" "

      Some of the persons on this list may not have a personal page if they are \n" "of a generation not included here, or if they are only related to me by marriage.\n" "But the article should still be present.\n" "So if you click on a person and don't go anywhere interesting, it's OK.\n" "But let me know if any of the article links are invalid.\n" "


      " } proc end() { "

      \n" "This page hosted by \"GeoCities\"\n" "Get your own Free Home Page
      \n" "

      \n" } lifelines-3.0.61/reports/find.ll0000700002540200244210000000701310342771772016723 0ustar prappDomain Users/* * @progname find.ll * @version 2.1 * @author Prinke, Perry Rapp * @category * @output GUI * @description Display menu of persons with TAG having matching VALUE This utility finds all persons whose records contain a specified TAG and VALUE and displays the resulting list as a menu. find.ll - Rafal Prinke, rafalp@plpuam11.amu.edu.pl, 7 OCT 1995 The options allow to: - find all occurrences of a given TAG when no VALUE is given - find all occurrences of a given VALUE when no TAG is given - find all occurrences of a given VALUE under a given TAG when both are given (the CONT|CONC|TYPE tags are also searched) The displayed VALUE is a 25 characters long substring of the field value starting from the first occurence of the input value. The results are displayed in a menuchoice list. The first choice is to print the remaining choices to a file. */ option(explicit) proc main() { list(mnu) getstr(tg, "TAG (enter=ANY)") set(tg, upper(tg)) getstr(vl, "VALUE (enter=ANY)") set(vl, upper(vl)) while (1) { getstr(rtype, "Records to search (I, F, S, E, X, or for any)") set(rtype, upper(rtype)) if (or(eq(rtype, ""), index("IFSEX", rtype, 1))) { break() } } set(outputChoice, "Print to output file") enqueue(mnu, outputChoice) /* people */ if (or(eq(rtype, ""), eq(rtype, "I"))) { forindi (rec, n) { call search(rec, tg, vl, mnu) } } /* families */ if (or(eq(rtype, ""), eq(rtype, "F"))) { forfam (rec, n) { call search(rec, tg, vl, mnu) } } /* sources */ if (or(eq(rtype, ""), eq(rtype, "S"))) { forsour (rec, n) { call search(rec, tg, vl, mnu) } } /* events */ if (or(eq(rtype, ""), eq(rtype, "E"))) { foreven (rec, n) { call search(rec, tg, vl, mnu) } } /* others */ if (or(eq(rtype, ""), eq(rtype, "X"))) { forothr (rec, n) { call search(rec, tg, vl, mnu) } } if (eq(length(mnu), 1)) { print("No matches found") } else { set(chc, menuchoose(mnu, "Use record keys as below to browse to desired record")) if (eq(chc, 1)) { "Search for tag <" tg "> and value <" vl ">" if (eq(rtype, "")) { " in all records" } else { " in " rtype " records" } " yielded " d(sub(length(mnu), 1)) " hits:\n" forlist(mnu,s,c) { if (ne(s, outputChoice)) { s nl() } } } } } /* Search rec (an INDI or FAM or ...) for occurrences of tag tg with value vl (Either may be empty as wildcards) */ proc search(rec, tg, vl, mnu) { set(rnod, root(rec)) set(nodtyp, tag(rnod)) traverse (rnod, n, x) { set(xtag, upper(tag(n))) set(xval, upper(value(n))) if (eq(strlen(vl), 0)) { set(ofst, 1) } else { set(ofst, index(xval, vl, 1)) } if (or(or(and(eqstr(tg, xtag), or(index(xval, vl, 1), eq(strlen(vl), 0))), and(eq(strlen(tg), 0), index(xval, vl, 1))), and(index("CONTYPECONC", xtag, 1), index(xval, vl, 1)))) { set(z, substring(value(n), ofst, strlen(xval))) if (gt(strlen(z), 25)) { set(z, substring(z, 1, 25)) } set(result, concat(rjustify(key(rec), 6), " - ")) if (eq(nodtyp, "INDI")) { set(result, concat(result, rjustify(fullname(rec, 1, 1, 18), 18))) } set(result, concat(result, " - ", tag(parent(n)), ":", d(x), "_", tag(n), ":", z)) enqueue(mnu, result) } } /* traverse */ } lifelines-3.0.61/reports/findmissing.ll0000700002540200244210000000101410076661057020306 0ustar prappDomain Users/* * @progname findmissing.ll * @version 1.0 * @author * @category * @output Text * @description * * find persons that are 'isolated' in your database - no parents and not * in any families.. */ proc main () { "THE FOLLOWING PERSONS ARE 'ISOLATED' IN YOUR DATABASE" nl() nl() forindi(indi, num) { if (and(not(parents(indi)), eq(0,nfamilies(indi)))) { name(indi) " (" key(indi) ")" nl() } } } lifelines-3.0.61/reports/fix_nameplac.ll0000700002540200244210000000236610076661057020435 0ustar prappDomain Users/* * @progname fix_nameplac.ll * @version 1 * @author Eggert * @category * @output GEDCOM * @description This is a quicky to show how to fix name and place spacing. fix_nameplac - a LifeLines names and places fixing program by Jim Eggert (eggertj@atc.ll.mit.edu) Version 1, 8 January 1993 */ proc fixit(root) { list(components) traverse(root,node,level) { set(t,save(tag(node))) d(level) " " t " " if (not(strcmp(t,"PLAC"))) { extractplaces(node,components,nplaces) forlist(components,place,plnum) { if (gt(plnum,1)) { ", " } place } } elsif (not(strcmp(t,"NAME"))) { extractnames(node,components,nnames,nsurname) forlist(components,name,nnum) { if (gt(nnum,1)) { " " } if (eq(nnum,nsurname)) { "/" } name if (eq(nnum,nsurname)) { "/" } } } else { value(node) } "\n" } } proc main() { forindi(person,pnum) { call fixit(inode(person)) } forfam(family,fnum) { call fixit(fnode(family)) } "0 TRLR\n" } lifelines-3.0.61/reports/formatted_gedcom.ll0000700002540200244210000000426310076661057021310 0ustar prappDomain Users/* * @progname formatted_gedcom.ll * @version 1 * @author Eggert * @category * @output GEDCOM * @description This program outputs a LifeLines database in modified GEDCOM format. Two additions to GEDCOM are made: an inter-record delimiter and a level indenter. These are set up as global parameters and initialized at the beginning of the main() procedure. formatted_gedcom - a LifeLines formatted GEDCOM listing program by Jim Eggert (eggertj@atc.ll.mit.edu) Version 1, 7 September 1993 The header() procedure writes a GEDCOM header. You will definitely want to edit this part of the program to reflect your name and address. Note that I have included a line specifying Macintosh character encoding, appropriate for my database. You may want to delete or comment out this line. */ global(delimiter) global(indenter) proc header() { delimiter "0 HEAD\n" indenter "1 SOUR LIFELINES 2.3.3\n" indenter "1 DEST ANY\n" indenter "1 DATE " date(gettoday()) "\n" indenter "1 FILE " outfile() "\n" indenter "1 CHAR MACINTOSH\n" indenter "1 COMM Formatted GEDCOM output produced by formatted_gedcom\n" delimiter "0 @S1@ SUBM\n" indenter "1 NAME James Robert Eggert\n" indenter "1 ADDR 12 Bonnievale Drive\n" indenter indenter "2 CONT Bedford Massachusetts 01730\n" indenter indenter "2 CONT USA\n" indenter "1 PHON 617-275-2004\n" } proc main() { set(delimiter, "--------------------------------------------------------------------------\n") set(indenter," ") call header() forindi(person,num) { call formatted_gedcom(inode(person),key(person)) } forfam(family,num) { call formatted_gedcom(fnode(family),key(family)) } delimiter "0 TRLR\n" delimiter } proc formatted_gedcom(node,key) { delimiter traverse(node,subnode,level) { if (level) { set(counter,0) while(lt(counter,level)) { indenter set(counter,add(counter,1)) } d(level) " " tag(subnode) " " value(subnode) "\n" } else { "0 @" key "@ " tag(subnode) "\n" } } } lifelines-3.0.61/reports/gedall.ll0000700002540200244210000001073210314565142017224 0ustar prappDomain Users/* * @progname gedall.ll * @version 2000-02-20 * @author Paul B. McBride (pbmcbride@rcn.com) * @category * @output GEDCOM * @description * * This LifeLines report program produces a GEDCOM file containing * the entire LifeLines database, including header, trailer, and * submitter records. It also gives the option to keep or remove user defined * tags, and to remove any other tags. * * modified Sep 2005 to use getproperties to automatically generate the header * by Stephen Dum dr.doom@verizon.net * * The default action is to remove all user defined tags. These are tags * which begin with an underscore, "_", character. * * When a tag line is removed, lines following it with higher level * numbers are also removed. * * This report program may require LifeLines 3.0.3 or later. * * The gedcom header is generated in main() using property's * obtained from the lifelines config file (~/.linesrc on unix else * lines.cfg - or from properties set in the database) with values from * the user defined properties * user.fullname * user.email * user.address * * This report program was tested on databases created from the Test Book * sample GEDCOM files at http://www.gentech.org * * 20 Feb 2000 Paul B. McBride (pbmcbride@rcn.com) */ global(REMOVEUSERTAGS) global(REMOVELISTEDTAGS) global(REMOVETAG_LIST) global(removed_line_count) global(removed_udt_count) proc main () { list(REMOVETAG_LIST) /* list of tags to be removed */ set(REMOVELISTEDTAGS, 0) /* set to 1 if there are tags to be removed */ set(REMOVEUSERTAGS, askyn("Remove user defined tags (_*)")) set(removed_udt_count, 0) set(removed_line_count, 0) while(1) { getstrmsg(remtag, "Enter any other tag to be removed") if(gt(strlen(remtag),0)) { set(REMOVELISTEDTAGS, 1) enqueue(REMOVETAG_LIST, remtag) } else { break() } } /* header file */ "0 HEAD " nl() "1 SOUR LIFELINES" nl() "2 VERS " version() nl() "2 NAME LifeLines" nl() /* "2 CORP ... " nl() "3 ADDR .... " nl() */ "1 SUBM @SM1@" nl() "1 GEDC " nl() "2 VERS 5.5" nl() "2 FORM Lineage-Linked" nl() "1 CHAR ASCII" nl() "1 DATE " stddate(gettoday()) nl() /* and referenced submitter */ "0 @SM1@ SUBM" nl() "1 NAME " getproperty("user.fullname") nl() "1 ADDR " getproperty("user.address") nl() "2 CONT E-mail: " getproperty("user.email") nl() set(icnt, 0) forindi(p, n) { call ged_write_node(root(p)) set(icnt, add(icnt,1)) } print(d(icnt), " INDI records (I*)...\n") set(fcnt, 0) forfam(f, n) { call ged_write_node(root(f)) set(fcnt, add(fcnt,1)) } print(d(fcnt), " FAM records (F*)...\n") set(ecnt, 0) foreven(e, n) { call ged_write_node(root(e)) set(ecnt, add(ecnt,1)) } print(d(ecnt), " EVEN records (E*)...\n") set(scnt, 0) forsour(s, n) { call ged_write_node(root(s)) set(scnt, add(scnt,1)) } print(d(scnt), " SOUR records (S*)...\n") set(ocnt, 0) forothr(o, n) { call ged_write_node(root(o)) set(ocnt, add(ocnt,1)) } print(d(ocnt), " other level 0 records (X*)\n") if(gt(removed_udt_count, 0)) { print(d(removed_udt_count), " user defined tag structures were removed.\n") } if(gt(removed_line_count, 0)) { print(d(removed_line_count), " lines were removed, as requested.\n") } "0 TRLR" nl() /* trailer */ } proc ged_write_node(n) { set(remlevel, 10000) /* this value is larger than the largest level number */ traverse(n, m, level) { if(le(level, remlevel)) { set(remlevel, 10000) /* end of previous tag removal if any */ if(REMOVEUSERTAGS) { if(t, tag(m)) { if(eqstr(trim(t, 1), "_")) { set(remlevel, level) /* remove line, and subordinate tag lines */ set(removed_udt_count, add(removed_udt_count, 1)) } } } } if(lt(level, remlevel)) { if(REMOVELISTEDTAGS) { if(t, tag(m)) { forlist(REMOVETAG_LIST, rt, n) { if(eqstr(t, rt)) { set(remlevel, level) break() } } } } } if(lt(level, remlevel)) { /* output this line to the GEDCOM file */ d(level) if (xref(m)) { " " xref(m) } " " tag(m) if (v, value(m)) { " " v } "\n" } else { set(removed_line_count, add(removed_line_count, 1)) } } } func askyn(msg) { set(prompt, concat(msg, "? [y/n] ")) getstrmsg(str, prompt) if(and(gt(strlen(str), 0), or(eq(strcmp(str, "n"),0), eq(strcmp(str, "N"),0)))) { return(0) } return(1) } lifelines-3.0.61/reports/gedlist.ll0000700002540200244210000000300610076661057017432 0ustar prappDomain Users/* * @progname gedlist.ll * @version 1.1 * @author Paul B. McBride (pbmcbride@rcn.com) * @category * @output GEDCOM * @description gedlist.ll generates a GEDCOM file for the male line of the input individuals. Algorithm: prompt for people add male line of each person to set add all children to set add all spouses to set add all parents to set generate GEDCOM file Author: Paul B. McBride (pbmcbride@rcn.com) Version: 1.1 January 10, 2001 correct prompt 1.0 September 27, 2000 created from gdc.ll dated February 28, 1996 */ include("ged_write.li") proc main () { indiset(set0) indiset(set1) /*declare an indi set*/ indiset(set2) /*declare another indi set*/ getindiset(set0, "Identify people to include in GEDCOM File") if(eq(lengthset(set0),0)) { return() } /* add everyone in the male line for each person*/ forindiset(set0, indi, ival, icnt) { addtoset(set1, indi, 1) /*add that person to set1*/ set(fath, indi) while(fath, father(fath)) { addtoset(set1, fath, 1) /*add the father to set1*/ } } set(set2, childset(set1)) /* add all the children */ set(set1, union(set1, set2)) /* combine set1 and set2 */ set(set2, spouseset(set1)) /* add all the spouses */ set(set1, union(set1, set2)) /* combine set1 and set2 */ set(set2, parentset(set1)) /* find everyone's parents */ set(set1, union(set1, set2)) /* combine set1 and set2 */ call ged_write(set1) /* write out GEDCOM file */ } /* end of report */ lifelines-3.0.61/reports/gedlod.ll0000700002540200244210000000354410076661057017244 0ustar prappDomain Users/* * @progname gedlod.ll * @version 2000-02-15 * @author Paul B. McBride (pbmcbride@rcn.com) * @category * @output GEDCOM * @description * * Generate a GEDCOM file of a person's descent from an ancestor. * The GEDCOM file will contain the following: * all descendents of the ancestor who are ancestors of descendant, * as well as the ancestor and descendant themselves. * * 15 Feb 2000 Paul B. McBride (pbmcbride@rcn.com) */ include("prompt.li") include("ged_write.li") proc main () { indiset(iset) indiset(dset) indiset(tset) indiset(uset) indiset(aset) indiset(gset) getindimsg(descendant,"Identify the descendant") if(descendant) { set(i, 1) while(1) { getindimsg(ancestor, concat("Identify ", ord(i), " ancestor")) if(ancestor) { set(i, add(i,1)) addtoset(iset, ancestor, 0) } else { break() } } } if(and(gt(lengthset(iset), 0),ne(descendant,0))) { set(addspouses, askyn("Include spouses")) set(addchildren, askyn("Include children")) /* find all the people of interest */ print("Finding Ancestors... ") addtoset(dset, descendant, 0) set(tset, ancestorset(dset)) print(d(lengthset(tset)), nl()) print("Finding Descendants... ") set(uset, descendantset(iset)) print(d(lengthset(uset)), nl()) set(aset, intersect(tset, uset)) set(aset, union(aset, iset)) /* add in ancestors */ addtoset(aset, descendant, 0) /* add in descendant */ if(addspouses) { set(tset, spouseset(aset)) /* add their spouses */ set(aset, union(aset, tset)) } if(addchildren) { set(tset, childset(aset)) /* find everyone's children */ set(aset, union(aset, tset)) } call ged_write(aset) /* write out GEDCOM file */ } } lifelines-3.0.61/reports/gedn.ll0000700002540200244210000000247010314560373016712 0ustar prappDomain Users/* * @progname gedn.ll * @version none * @author anon * @category * @output GEDCOM * @description * * The output of this report is a GEDCOM file of the following: * N generations of ancestors, * all spouses and * all children of these ancestors and * all descendents of a person, * as well as the person him/herself */ include("ged_write.li") proc main () { indiset(set1) /*declare an indi set*/ indiset(set2) /*declare another indi set*/ indiset(set3) /*declare another indi set*/ getindi(ind1) /*ask user to identify person*/ if(ind1) { getintmsg(maxgen, "Number of Generations") print("Finding Ancestors... ") addtoset(set1, ind1, 1) set(set2, ancestorset(set1)) print(d(lengthset(set2)), nl()) print("Triming Ancestors to ", d(maxgen), " generations... ") forindiset(set2, ind1, ival, icnt) { if(le(ival,maxgen)) { addtoset(set3, ind1, ival) } } print(d(lengthset(set3)), nl()) set(set2, spouseset(set3)) /* add their spouses */ set(set1, union(set3, set2)) /* combine set1 and set2 */ set(set2, childset(set1)) /* find everyone's children */ set(set1, union(set1, set2)) /* combine set1 and set2 */ call ged_write(set1) /* write out GEDCOM file */ } } lifelines-3.0.61/reports/gedtags.ll0000700002540200244210000000306110076661057017416 0ustar prappDomain Users/* * @progname gedtags.ll * @version 2001-06-28 * @author Paul B.McBride (pbmcbride@rcn.com) * @category * @output Text * @description produces a unique list of all tags used in the database listed like the following: INDI INDI.BIRT INDI.BIRT.DATE INDI.BIRT.PLAC ... each line of the output will be unique. this can be useful in understanding the structure of the data in a GEDCOM file, or in checking for errors. sort the output file using an external sort program. Warning: for some versions of LifeLines probably prior to 3.0.3 a save() should surround the values to be stored in tables and lists. * Paul B.McBride (pbmcbride@rcn.com) 28 June 2001 */ global(tagnames) global(taglevels) global(content) proc main () { list(tagnames) list(taglevels) table(content) forindi(pers,x) { call out(pers) } forfam(fm,x) { call out(fm) } foreven(evn, n) { call out(evn) } forsour(src, n) { call out(src) } forothr(oth, n) { call out(oth) } /* insert sorting code here if desired */ forlist(tagnames,n,p) { n "\n" } } proc out(item) { traverse(root(item),y,level) { setel(taglevels,add(level,1),tag(y)) set(i,0) set(s,"") while(le(i,level)) { if(gt(i,0)) { set(s,concat(s,".")) } set(s,concat(s, getel(taglevels,add(i,1)))) incr(i) } if(eq(lookup(content, s),0)) { enqueue(tagnames,s) insert(content,s,1) } } } lifelines-3.0.61/reports/ged_write.li0000700002540200244210000001646310076661057017760 0ustar prappDomain Users/* * @progname ged_write.li * @version 3 * @author Paul B. McBride (pbmcbride@rcn.com) * @category * @output GEDCOM * @description LifeLines GEDCOM file generating subroutine library. This file defines a procedure ged_write() which extends the gengedcom() builtin function of LifeLines by adding header and trailer records, and outputting other level 0 record types which are referenced within the individual and family records that would be output by gengedcom(). If these records are not output to the GEDCOM file then LifeLines would report links to undefined records, and not load the file into the database. This is particularly useful for SOURce records but also handles REPO, NOTE, EVENt, SUBMitter, other references to INDIvidual and FAMily records, etc. The gengedcom() function of LifeLines outputs a GEDCOM file for the specified set of INDIviduals. It handles standard links for FAMilies, and from FAMilies back to INDIviduals. It does not generate the "0 HEAD" records, or the "0 TRLR" record. Also if there are other links ("@xx@") to records of other types, or links to INDIviduals in other structure elements, the records they point to are not output. Requirements: LifeLines 3.0.5 or later or 3.0.3-*win32* Notes: To use this with 3.0.2 to 3.0.4: 1) remove lines with "free(...)" 2) add an inlist(...)" function. (see example at end) Files: Two other files are also required, samples of which are at the end of this file: header.ged, submit.ged Bugs: Links to FAMilies with tags other than "FAMC" and "FAMS" may cause duplicate FAMily records in some cases. 08 Sep 1995 v1 add SOUR records to GEDCOM file 08 Feb 1996 v2 add REPO records and other records linked within SOUR records 17 Feb 2000 v3 resolve all other links to records (if possible) */ global(ged_other_list) global(ged_other_set) global(ged_other_setlist) proc ged_write(gset) { copyfile("header.ged") /* header file (references @SM1@) */ "1 DATE " stddate(gettoday()) nl() copyfile("submit.ged") /* submitter file (defines @SM1@) */ /* find other records and people referenced by the set */ set(slen, lengthset(gset)) print("Writing GEDCOM file for ", d(slen), " people...") call ged_other_init() call ged_other_addset(gset) if(ne(lengthset(gset), slen)) { print(" ", d(sub(lengthset(gset),slen)), " added...") } gengedcom(gset) /* output set as GEDCOM file (INDI and FAM records) */ /* add other types of records (including SOURces) */ call ged_other_write() "0 TRLR" nl() /* trailer */ print(nl()) } proc ged_other_init() { /* for earlier versions of LifeLines remove lines with free() */ if(ged_other_list) { free(ged_other_list) } if(ged_other_set) { free(ged_other_set) } if(ged_other_setlist) { free(ged_other_setlist) } /* end of lines to be removed for earlier versions of LifeLines */ list(ged_other_list) indiset(ged_other_set) list(ged_other_setlist) } proc ged_other_addset(s) { /* make a list of each person and family in the set. These * are the INDI and FAM records that gengedcom() will output. */ forindiset (s, i, a, n) { set(v, save(concat("@", key(i), "@"))) enqueue(ged_other_setlist, v) families(i, f, sp, m) { set(v, save(concat("@", key(f), "@"))) enqueue(ged_other_setlist, v) call ged_other_add(root(f)) } } /* process each INDI and FAM record to see if it contains references * to other records. We need to add any other record that is referenced * to the GEDCOM file. */ forindiset (s, i, a, n) { call ged_other_add(root(i)) families(i, f, sp, m) { call ged_other_add(root(f)) } } /* add any new people into the original set */ forindiset (ged_other_set, i, a, n) { addtoset(s, i, 1) } } /* ged_other_add() adds the other records referenced */ proc ged_other_add(n) { traverse(n, m, l) { if(gt(l, 0)) { if(eq(l, 1)) { if (eqstr("FAMC", tag(m))) { continue() } if (eqstr("FAMS", tag(m))) { continue() } if (eqstr("HUSB", tag(m))) { continue() } if (eqstr("CHIL", tag(m))) { continue() } if (eqstr("WIFE", tag(m))) { continue() } } set(v, value(m)) if(reference(v)) { if(eqstr(substring(v,2,2),"I")) { /* process other references to individuals */ if(inlist(ged_other_setlist, v)) { continue() } set(v, save(v)) enqueue(ged_other_setlist, v) addtoset(ged_other_set, indi(v), 1) call ged_other_add(dereference(v)) /* this persons families will also be included */ families(indi(v), f, sp, m) { set(fv, save(concat("@", key(f), "@"))) enqueue(ged_other_setlist, fv) call ged_other_add(root(f)) } continue() } if(eqstr(substring(v,2,2),"F")) { /* process other references to families */ /* force a family to be included by adding in one * of the parents. */ if(inlist(ged_other_setlist, v)) { continue() } set(v, save(v)) enqueue(ged_other_setlist, v) call ged_other_add(dereference(v)) set(spseen, 0) set(fs, 0) fornodes(dereference(v), fn) { if(or(eqstr(tag(fn), "HUSB"),eqstr(tag(fn), "WIFE"))) { set(fv, value(fn)) if(reference(fv)) { set(fs, save(fv)) if(inlist(ged_other_setlist, fs)) { /* this individual is already in the set, so * this family will be output */ set(spseen, 1) break() } } } } if(spseen) { continue() } if(fs) { /* force this family to be included by adding a parent * to the set */ enqueue(ged_other_setlist, fs) addtoset(ged_other_set, indi(fs), 1) call ged_other_add(dereference(fs)) /* this persons families will also be included */ families(indi(fs), f, sp, m) { set(fv, save(concat("@", key(f), "@"))) enqueue(ged_other_setlist, fv) call ged_other_add(root(f)) } continue() } /* family had no parents. add it to the list of others */ } if (inlist(ged_other_list, v)) { continue() } set(v, save(v)) enqueue(ged_other_list, v) } } } } /* ged_other_write() outputs the current list of other records in GEDCOM format */ proc ged_other_write() { forlist(ged_other_list, k, n) { if(reference(k)) { set(r, dereference(k)) traverse(r, s, l) { d(l) if (xref(s)) { " " xref(s) } " " tag(s) if (v, value(s)) { " " v } "\n" } } } } /* sample inlist() function for other versions of LifeLines func inlist(alist, str) { forlist(alist, any, n) { if(eqstr(any, str)) { return(1) } } return(0) } * end of sample inlist() function */ /* sample header.ged 0 HEAD 1 SOUR LIFELINES 2 VERS 3.0.5 2 NAME LifeLines 2 CORP T. T. Wetmore 3 ADDR ttw@shore.net 1 SUBM @SM1@ 1 GEDC 2 VERS 5.5 2 FORM Lineage-Linked 1 CHAR ASCII * end of sample header.ged */ /* sample submit.ged 0 @SM1@ SUBM 1 NAME Your Name Here 1 ADDR Your Street Address 2 CONT Your City, State and Zip Code 2 CONT E-mail: your@email.address * end of sample submit.ged */ lifelines-3.0.61/reports/genancc.ll0000700002540200244210000000352010076647745017406 0ustar prappDomain Users/* * @progname genancc.ll * @version 1997-11 * @author Wetmore, Manis, Kirby * @category * @output Text * @description * * The output of this report is a GEDCOM file of the following: * all ancestors, * all spouses and * all children of all ancestors and * all descendents of a person, * as well as the person him/herself * and his/her spouses. * * This form of the program is probably the most useful for extracting * data when a person requests data about someone from your database. * * modified from genancc1 * by Tom Wetmore, ttw@cbnewsl.att.com * (as sent to Cliff Manis in August 1992) * * This report works only with the LifeLines Genealogy program * * [I have only given it a name and added lots of comments] /cliff * August 1992 * Nov. 1997 I added lines to get all descendants --James Kirby * */ proc main () { indiset(set1) /*declare an indi set*/ indiset(set2) /*declare another indi set*/ indiset(set3) /*declare another indi set*/ getindi(indi) /*ask user to identify person*/ addtoset(set1, indi, n) /*add that person to set1*/ set(set2, ancestorset(set1)) /* for ancestors */ set(set1, union(set1, set2)) /* combine set1 and set2 */ set(set2, spouseset(set1)) set(set1, union(set1, set2)) /* combine set1 and set2 */ set(set2, childset(set1)) set(set1, union(set1, set2)) /* combine set1 and set2 */ set(set3, descendantset(set2)) /* get descendants */ set(set1, union(set1, set3)) /* combine set1 and set2 */ gengedcom(set1) /*write final set as GEDCOM file*/ } /* end of report */ lifelines-3.0.61/reports/genancc1.ll0000700002540200244210000000344610076661643017467 0ustar prappDomain Users/* * @progname genancc1.ll * @version 1.0 * @author Wetmore, Manis * @category * @output GEDCOM * @description * * This program is useful for extracting * data when a person requests data about someone from your database. * The output of this report is a GEDCOM file of the following: * all ancestors, * all spouses and * all children of all ancestors and * all descendents of a person, * as well as the person him/herself * and his/her spouses. * * genancc1 * * by Tom Wetmore, ttw@cbnewsl.att.com * (as sent to Cliff Manis in August 1992) * * This report works only with the LifeLines Genealogy program * * [I have only given it a name and added lots of comments] /cliff * * August 1992 * * For example, the output of this report is a GEDCOM file of the * following: * * all ancestors, * all spouses and * all children of all ancestors and * all descendents of a person, * as well as the person him/herself * and his/her spouses. * * This form of the program is probably the most useful for extracting * data when a person requests data about someone from your database. */ proc main () { indiset(set1) /*declare an indi set*/ indiset(set2) /*declare another indi set*/ getindi(indi) /*ask user to identify person*/ addtoset(set1, indi, n) /*add that person to set1*/ set(set2, ancestorset(set1)) /* for ancestors */ set(set1, union(set1, set2)) /* combine set1 and set2 */ set(set2, spouseset(set1)) set(set1, union(set1, set2)) /* combine set1 and set2 */ set(set2, childset(set1)) set(set1, union(set1, set2)) /* combine set1 and set2 */ gengedcom(set1) /*write final set as GEDCOM file*/ } /* end of report */ lifelines-3.0.61/reports/gender_order.ll0000700002540200244210000001577010076661057020451 0ustar prappDomain Users/* * @progname gender_order.ll * @version 4 * @author Jim Eggert * @category * @output Text * @description This program computes gender order statistics for children in all the families in a database. Genders are considered to be ternary: male (M), female (F), or unknown (U). Children in a family form a pattern of genders by birth order, e.g. MFFM for a family consisting of a boy, two girls, then a boy. The frequency of these patterns is calculated. In addition to the complete gender pattern for a family, initial gender patterns are computed. For the above example, the initial patterns are . (no children), M, MF, MFF, and MFFM. The frequency of these initial patterns can be used to answer questions such as how many families with a boy then two girls go on to have another boy. For example, suppose you want to know what fraction of families with a child gender pattern P (e.g., P=MFFM) have no more children, have a boy next (PM), have a girl next (PF), and have a child of unknown (to the database!) gender next (PU). You can find these fractions as #complete(P)/#initial(P), #initial(PM)/#initial(P), #initial(PF)/#initial(P), and #initial(PU)/#initial(P), respectively. Note that these fractions should add up to 1. Also note that the pattern "." denotes no children at all. As a initial pattern it gives the total number of families in the database, as a complete pattern the number of childless families in the database. You can use either of two compare functions to sort the results differently. Rename the one you want to use as compare, the other one something else (like compare1). gender_order - a LifeLines gender order statistics program by Jim Eggert (EggertJ@crosswinds.net) Version 1, 5 August 1993 listsort code by John Chandler (JCHBN@CUVMB.CC.COLUMBIA.EDU) Version 2, 10 August 1993 added family examples, modified output format slightly Version 3, 26 March 1995 changed listsort to quicksort Version 4, 15 Jan 2000 quicksort bug fix */ /* This compare procedure sorts purely alphabetically */ func compare1(astring,bstring) { return(strcmp(astring,bstring)) } /* This compare procedure sorts by length and alphabetically within groups of equal length */ func compare(astring,bstring) { set(alen,strlen(astring)) set(blen,strlen(bstring)) if (lt(alen,blen)) { return(neg(1)) } if (gt(alen,blen)) { return(1) } return(strcmp(astring,bstring)) } /* quicksort: Sort an input list by generating a permuted index list Input: alist - list to be sorted Output: ilist - list of index pointers into "alist" in sorted order Needed: compare- external function of two arguments to return -1,0,+1 according to relative order of the two arguments */ proc quicksort(alist,ilist) { set(len,length(alist)) set(index,len) while(index) { setel(ilist,index,index) decr(index) } if (ge(len,2)) { call qsort(alist,ilist,1,len) } } /* recursive core of quicksort */ proc qsort(alist,ilist,left,right) { if(pcur,getpivot(alist,ilist,left,right)) { set(pivot,getel(alist,getel(ilist,pcur))) set(mid,partition(alist,ilist,left,right,pivot)) call qsort(alist,ilist,left,sub(mid,1)) call qsort(alist,ilist,mid,right) } } /* partition around pivot */ func partition(alist,ilist,left,right,pivot) { while(1) { set(tmp,getel(ilist,left)) setel(ilist,left,getel(ilist,right)) setel(ilist,right,tmp) while(lt(compare(getel(alist,getel(ilist,left)),pivot),0)) { incr(left) } while(ge(compare(getel(alist,getel(ilist,right)),pivot),0)) { decr(right) } if(gt(left,right)) { break() } } return(left) } /* choose pivot */ func getpivot(alist,ilist,left,right) { set(pivot,getel(alist,getel(ilist,left))) set(left0,left) incr(left) while(le(left,right)) { set(rel,compare(getel(alist,getel(ilist,left)),pivot)) if (gt(rel,0)) { return(left) } if (lt(rel,0)) { return(left0) } incr(left) } return(0) } proc main() { list(patterns) list(initial_counts) list(complete_counts) table(indices) list(sorted_indices) list(complete_examples) /* accumulate gender order statistics, even unknown genders */ enqueue(initial_counts,0) enqueue(complete_counts,0) enqueue(patterns,".") enqueue(complete_examples,"no example") insert(indices,".",1) set(max_index,1) set(max_nc,0) set(nextfam,0) print("Processing families ") forfam(family,fnum) { setel(initial_counts,1,fnum) set(pattern,"") set(index,1) if (nc,nchildren(family)) { if (gt(nc,max_nc)) { set(max_nc,nc) } children(family,child,cnum) { if (not(strcmp(sex(child),"F"))) { set(pattern,save(concat(pattern,"F"))) } elsif (not(strcmp(sex(child),"M"))) { set(pattern,save(concat(pattern,"M"))) } else { set(pattern,save(concat(pattern,"U"))) } set(index,lookup(indices,pattern)) if (index) { setel(initial_counts,index, add(getel(initial_counts,index),1)) } else { set(max_index,add(max_index,1)) set(index,max_index) insert(indices,pattern,index) enqueue(patterns,save(pattern)) enqueue(initial_counts,1) enqueue(complete_counts,0) } } } else { if(not(strcmp(getel(complete_examples,1),"no example"))) { setel(complete_examples,1,save(key(family))) } } if (not(getel(complete_examples,index))) { setel(complete_examples,index,save(key(family))) } setel(complete_counts,index,add(getel(complete_counts,index),1)) if (ge(fnum,nextfam)) { print(d(fnum)) print(" ") set(nextfam,add(nextfam,100)) } } print("\nSorting results...") call quicksort(patterns,sorted_indices) /* print out gender order statistics sorted alphabetically */ print("done\nPrinting results...") set(initialcol,add(max_nc,16)) set(completecol,add(initialcol,12)) set(examplecol,add(completecol,12)) "Gender pattern" col(sub(initialcol,7)) "initial" col(sub(completecol,8)) "complete" col(examplecol) "example\n" forlist(sorted_indices,index,inum) { getel(patterns,index) set(initial,getel(initial_counts,index)) col(sub(initialcol,strlen(d(initial)))) d(initial) set(complete,getel(complete_counts,index)) col(sub(completecol,strlen(d(complete)))) d(complete) col(examplecol) getel(complete_examples,index) "\n" } print("done") } lifelines-3.0.61/reports/gendex.ll0000700002540200244210000000254010076661057017253 0ustar prappDomain Users/* * @progname gendex.ll * @version 1.2 * @author Scott McGee (smcgee@microware.com) * @category * @output HTML * @description This report program converts a LifeLines database into html gendex document. You will need to change the contents of proc html_address() and to set the value of HREF appropriately to your server. @(#)gendex.ll 1.2 10/14/95 */ global(INDEX) global(HREF) proc main() { indiset(INDEX) set(HREF, "/INDEX=") print("processing database\n") set(count, 0) set(name_count, 0) forindi(me,num) { if(eq(count, 100)){ set(count, 0) print(".") }else{ incr(count) incr(name_count) } addtoset(INDEX,me,1) } print("\nwriting file\n") call create_gendex_file() print("\n", d(name_count), " individuals\n") } proc create_gendex_file() { set(fn, save("GENDEX.txt")) newfile(fn, 0) forindiset(INDEX, me, v, n) { set(path, concat(HREF, save(key(me)), "/?LookupInternal")) path "|" surname(me) "|" givens(me) " /" surname(me) "/" "|" if (evt, birth(me)) { date(evt) } "|" if (evt, birth(me)) { place(evt) } "|" if (evt, death(me)) { date(evt) } "|" if (evt, death(me)) { place(evt) } "|\n" } } lifelines-3.0.61/reports/genetics.ll0000700002540200244210000002532010076661057017603 0ustar prappDomain Users/* * @progname genetics.ll * @version 2.0.1 * @author Eggert * @category * @output Text * @description This LifeLines report program computes the degree of blood relatedness between any two people in a database. It does this by finding all the common ancestors, known or implied, and their ancestral distance along any known path to the two people. genetics - a LifeLines report program to calculate degree of relatedness by Jim Eggert (eggertj@atc.ll.mit.edu) Version 1 (15 Sept 1995) Version 2 (19 Sept 1995) added multiple identical birth capability Version 2.0.1 (1 Jul 2002) Fix to run with newer LifeLines (Perry Rapp) This LifeLines report program computes the degree of blood relatedness between any two people in a database. It does this by finding all the common ancestors, known or implied, and their ancestral distance along any known path to the two people. Ancestors are assumed to exist even when they are not explicitly in the database if their existence can be deduced from the family structure. This most commonly occurs when the mother of a family is unknown, but can be assumed to be identical when two children are in the database as siblings. Likewise, when both the mother and the father are missing, this program will assume them to be identical for siblings in a family. If any of the ancestors are twins or other multiple identical births, the program will determine this as a possibility based on equality of birthyears and will ask the user to verify the identical nature of the twins. Because the program is pretty picky, it will only report half-siblings and half-cousins. You are forced to add up the halves to get the full picture. But it will find all known genetic relationships between the two individuals and calculate a genetic overlap fraction. This number ranges between 0 (not related) to 1 (same person). The program cannot handle nontraditional families (when more than one husband and/or wife exists in the family). And it doesn't check for adoptions, it assumes that all children are the genetic children of their parents. This code uses the unusual construct of a table of lists of lists. */ global(twin_table) proc main() { table(twin_table) /* Get the first individual and find ancestors and multiplicities */ getindimsg(p1,"Enter first person.") table(anc1_table) set(kp1,save(key(p1))) call recur_anc(kp1,0,anc1_table,0) /* Get the second individual and find ancestors and relatedness only up to common ancestors. */ getindimsg(p2,"Enter second person.") list(lca_list) table(lca_table) set(kp2,save(key(p2))) call recur_anc(kp2,lca_list,lca_table,anc1_table) /* Now calculate relations */ if (length(lca_list)) { print(kp1," ",name(indi(kp1))," is\n",kp2," ",name(indi(kp2)),"'s\n") list(gsums) set(gmax,0) forlist(lca_list,lca,ilca) { set(ll,lookup(anc1_table,lca)) set(gl1,getel(ll,1)) set(kl1,getel(ll,2)) set(ll,lookup(lca_table,lca)) set(gl2,getel(ll,1)) set(kl2,getel(ll,2)) forlist(gl1,g1,il1) { set(k1,getel(kl1,il1)) forlist(gl2,g2,il2) { set(k2,getel(kl2,il2)) call print_rel(kp1,k1,k2,g1,g2) set(gsum,add(g1,g2)) enqueue(gsums,gsum) if (gt(gsum,gmax)) { set(gmax,gsum) } } } } } else { print(kp1," ",name(indi(kp1))," and ",kp2," ",name(indi(kp2)), " are not related by blood.\n") return() } /* Add up path weights */ set(gsum,0) forlist(gsums,g,gnum) { set(gpow,1) while(lt(g,gmax)) { set(gpow,add(gpow,gpow)) incr(g) } set(gsum,add(gsum,gpow)) } /* Cancel common factors of 2 */ if (gsum) { while (not(mod(gsum,2))) { set(gsum,div(gsum,2)) decr(gmax) } } /* Figure common denominator */ set(gpow,1) while(gmax) { set(gpow,add(gpow,gpow)) decr(gmax) } /* Print out final answer */ print("Expected degree of genetic overlap: ",d(gsum),"/",d(gpow),"\n") } /* This is the magic routine that does the real work. If there is no input stop_table, calculate all the ancestors along all paths of the input person, and return the ancestors and their multiplicities. If there is an input stop_table, calculate the ancestors up to the ones contained in the stop table, and return only the ones in the stop table and their multiplicities. Notes: If there were a fortable() iterator, then the anc_list would be unnecessary. The fake keys are used to simulate ancestors who aren't explicitly in the database. The table entries are lists of two elements. The first element is a list of generation counts for a path to that ancestor or his or her twin, the second element is a list of actual keys of the ancestor. These actual keys differ only if the ancestor is a twin. If the ancestor is a twin, the key to the table entry is the key of the "oldest" twin. */ proc recur_anc(kp,anc_list,anc_table,stop_table) { list(keys) list(gens) enqueue(keys,kp) enqueue(gens,0) while (ka,dequeue(keys)) { set(g,dequeue(gens)) set(k,first_twin(ka)) if (stop_table) { set(stop,lookup(stop_table,k)) } if (or(not(stop_table),stop)) { if (ll,lookup(anc_table,k)) { set(l,getel(ll,1)) set(kl,getel(ll,2)) } else { list(ll) list(l) list(kl) enqueue(ll,l) enqueue(ll,kl) insert(anc_table,k,ll) if (anc_list) { enqueue(anc_list,k) } } enqueue(l,g) enqueue(kl,ka) } if (not(stop)) { if (a,indi(k)) { incr(g) if (par,parents(a)) { if (aa,father(a)) { enqueue(keys,save(key(aa))) } else { enqueue(keys,save(concat("H0",key(par)))) /* fake */ } if (aa,mother(a)) { enqueue(keys,save(key(aa))) } else { enqueue(keys,save(concat("W0",key(par)))) /* fake */ } enqueue(gens,g) enqueue(gens,g) } } } } } proc print_rel(kp1,k1,k2,g1,g2) { set(p1,indi(kp1)) if (lt(g1,g2)) { set(deg,g1) set(rem,sub(g2,g1)) } else { set(deg,g2) set(rem,sub(g1,g2)) } if (strcmp(k1,k2)) { incr(deg) /* twin ancestors */ set(halftwin,"twin-") } else { set(halftwin,"half-") } if (eq(deg,0)) { if (eq(rem,0)) { print("self") } else { while (gt(rem,2)) { print("g") decr(rem) } if (gt(rem,1)) { print("grand") } if (gt(g1,g2)) { /* print("half-") */ if (male(p1)) { print("son") } elsif (female(p1)) { print("daughter") } else { print("child") } } else { if (male(p1)) { print("father") } elsif (female(p1)) { print("mother") } else { print("parent") } } } } elsif (eq(deg,1)) { if (eq(rem,0)) { print(halftwin) if (male(p1)) { print("brother") } elsif (female(p1)) { print("sister") } else { print("sibling") } } else { while (gt(rem,2)) { print("g") decr(rem) } if (gt(rem,1)) { print("grand") } if (gt(g1,g2)) { print(halftwin) if (male(p1)) { print("nephew") } elsif (female(p1)) { print("niece") } else { print("niece/nephew") } } else { if (male(p1)) { print("uncle") } elsif (female(p1)) { print("aunt") } else { print("aunt/uncle") } } } } else { print(ord(sub(deg,1))," ",halftwin,"cousin") if (eq(rem,1)) { print(" once") } elsif (eq(rem,2)) { print(" twice") } elsif (eq(rem,3)) { print(" thrice") } elsif (gt(rem,3)) { print(" ",card(rem)," times") } if (rem) { print(" removed") } } print("\n via their ancestor ",k1," ") if (p1,indi(k1)) { print(name(p1)) } else { print("Unknown ") if (strcmp(substring(k1,1,1),"H")) { print("wife") } else { print("husband") } print(" in family ",substring(k1,3,strlen(k1))) } if (strcmp(k1,k2)) { print("\n and twin ",k2," ",name(indi(k2))) } print("\n") } func first_twin(pkey) { if (tkey,lookup(twin_table,pkey)) { return(tkey) } set(ft,0) if (p,indi(pkey)) { if (parents(p)) { if (b,birbapyear(p)) { set(loop,1) while(loop) { set(loop,0) if (q,prevsib(p)) { if (not(strcmp(sex(p),sex(q)))) { if (eq(b,birbapyear(q))) { print(key(p)," ",name(p), birbapdate(p)," and\n") print(key(q)," ",name(q), birbapdate(q)) getint(rt, "Are these individuals identical twins? (0=no, 1=yes)") if (rt) { set(p,q) set(loop,1) set(ft,p) print(" are twins\n\n") } else { print(" are not twins\n\n") } } } } } } } } if (ft) { set(tkey,save(key(ft))) } else { set(tkey,pkey) } insert(twin_table,pkey,tkey) return(tkey) } func birbapyear(person) { if (b,birth(person)) { if (byear,atoi(year(b))) { return(byear) } } if (b,baptism(person)) { if (byear,atoi(year(b))) { return(byear) } } return(0) } func birbapdate(person) { if (b,birth(person)) { if (byear,atoi(year(b))) { return(concat(" born ",date(b))) } } if (b,baptism(person)) { if (byear,atoi(year(b))) { return(concat(" bapt ",date(b))) } } return("") } lifelines-3.0.61/reports/genetics2.ll0000700002540200244210000000562210076661057017670 0ustar prappDomain Users/* * @progname genetics2.ll * @version 1 of 1995-10-05 * @author Alexander Ottl (ottl@informatik.uni-muenchen.de) * @category * @output Text * @description This LifeLines report program computes the degree of blood relatedness between any two people in a database. Genetic distance d(A,B) is defined recursively by: d(A,A) = 1 d(A,B) = d(B,A) d(A,B) = d(F(A),B) / 2 + d(M(A),B) / 2 with F(A) and M(A) being the father and mother of A. The recursive procedure computedist() follows that definition. That's the beauty of recursion. by Alexander Ottl (ottl@informatik.uni-muenchen.de) Version 1 (5 Oct 1995) */ global(R0) global(R1) proc main() { getindimsg(A, "First person:") getindimsg(B, "Second person:") call computedist(A, B) print("\nExpected degree of genetic overlap: ", d(R0), "/", d(R1), "\n") } /* BOOL ancestor( INDI, INDI ) */ func ancestor(A, B) { if(not(strcmp(key(A),key(B)))) { return(1) } families(A, Fam, Spo, Num1) { children(Fam, Chl, Num2) { if(ancestor(Chl, B)) { return(1) } } } return(0) } /* Actually this should be a function returning a rational number. I might use a list, but I chose to use two global variables R0 and R1 for the numerator and denominator */ /* VOID computedist( INDI, INDI ) */ proc computedist(A, B) { /* Recursion must terminate some time. One's distance to himself is 1/1 */ if(not(strcmp(key(A),key(B)))) { set(R0,1) set(R1,1) } /* If there is a direct line from A down to B, we must work our way upwards from B. There must of course then be no line from B down to A, but no one is his own ancestor, right? */ elsif(ancestor(A, B)) { /* print("Common ancestor: ", name(A), "\n") */ call computedist(B, A) } /* Now we try to work our way upwards through the parents */ else { set(R0,0) set(R1,1) if(F,father(A)) { call computedist(F, B) /* Result by half */ set(R1, mul(2, R1)) } if(M,mother(A)) { /* Save previous result */ set(Res0, R0) set(Res1, R1) call computedist(M, B) /* Result by half */ set(R1, mul(2, R1)) /* Adding up with previous result */ set(common, mul(R1, Res1)) set(R0, add(mul(R0, Res1), mul(R1, Res0))) set(R1, common) call normalize() } } } /* This is not an all-purpose normalizing function. We expect the denominator R1 to be a power of 2 and to be greater than the numerator R0. */ /* VOID normalize(VOID) */ proc normalize() { if(R0) { while(not(mod(R0,2))) { set(R0, div(R0,2)) set(R1, div(R1,2)) } } else { set(R1,1) } } lifelines-3.0.61/reports/gen_index0000700002540200244210000001124010320266233017315 0ustar prappDomain Users#! /usr/bin/perl -w # Parse lifeline reports programs and generate a index # Written by Stephen Dum stephen.dum@verizon.net # January 2003 use strict; my $debug = 0; #non-zero to enable debug output my $viewoutput = 0; #non-zero to enable printing output information sub usage { print "usage: $0 ...\n"; print(" generate index.html file from all programs listed\n"); exit(0); } # parse arguments while (defined($_=$ARGV[0]) && /^-/) { shift; /-d/ && ($debug++,next); /-o/ && ($viewoutput++,next); /-h/ && usage(); } open OUT,">temp.html" or die "Unable to open temp.html for output"; print_header(); read_files(); print_trailer(); rename("temp.html","index.html"); sub print_header { print OUT < Report programs for use with Lifelines genealogy Software
      LifeLines stork logo

      LifeLines, second generation genealogy software
      Report Programs

      This is an overview of the report programs distributed with Lifelines. If you want more information about a program, often there are comments at the beginning of the program that talk about functionality and algorithms, that have sample output and examples of post processing commands required to properly view the results. Some programs require customization before use, for example, they might have text identifying the person who generated the report.

      EOF } sub print_trailer { my $today = `date "+%d %b %Y"`; print OUT <
      This overview was generated $today
      EOF } sub read_files { my $file; my $prog; my $progname; my $version; my $author; my $category; my $output; my $description; my $char_encoding; while ($file = shift @ARGV ) { print $file . "\n" if $debug; next if $file =~ /\.li$/; if ($file eq "least_related.ll") { print "Skipping $file\n"; next; } $prog = $file; $prog =~ s/.ll$//; #strip off .ll $prog =~ s/.*\/reports\///; #strip off any path prefix on filename # that includes '/reports/' open(FIN,$file) or die "Unable to open $file for input"; $progname=""; $version=""; $author=""; $category=""; $output=""; $description=""; $char_encoding=""; while () { if (/^.*\@progname\s*(.*)\s*$/) { print " progname: $1\n" if $debug; $progname=$1; } elsif (/^.*\@version\s*(.*)\s*$/) { print " version: $1\n" if $debug; $version=$1; } elsif (/^.*\@author\s*(.*)\s*$/) { print " author: $1\n" if $debug; $author=$1; } elsif (/^.*\@category\s*(.*)\s*$/) { print " category: $1\n" if $debug; $category=$1; } elsif (/^.*\@output\s*(.*)\s*$/) { print " output: $1\n" if $debug || $viewoutput; print "$file output: $1\n" if $viewoutput == 2; $output=$1; } elsif (/^.*\@description\s*(.*)\s*$/) { print " description: $1\n" if $debug; #$description=$1; if (length($description) == 0) { while() { # skip blank lines last unless /^\s*\**\s*$/; } s/^\s*\**\s*//; $description=$_; while() { # collect descriptin until we get a blank line # or end of the comment last if /^\s*\**\s*$/ || /\*\//; s/^\s*\**\s*//; $description .= $_; } } } elsif (/\*\//) { print "End of program meta tags at line $. for file $file\n" if $debug; last; } } while() { next unless /\s*char_encoding\("(.*)"\)/; $char_encoding = $1; last; } close(FIN); #print OUT "
      $prog\n
      "; print OUT "
      $prog\n
      "; print OUT "Version $version; " if length($version) != 0; print OUT "by $author" if length($author) != 0; print OUT "; output format $output" if length($output) != 0; print OUT "; char encoding $char_encoding" if length($char_encoding) != 0; $description =~ s/\\n$description"; } } lifelines-3.0.61/reports/getbaptism.li0000700002540200244210000000120410076661057020131 0ustar prappDomain Users/* * @progname getbaptism.li * @version none * @author anon * @category * @output gedcom node function value * @description * * getbaptism(ind) -> NODE * The built-in baptism() function is limited to "CHR" records. * Many programs use the "BAPM" and LDS uses "BAPL" so this version * looks for all three in the order "CHR", "BAPM", "BAPL". * */ func getbaptism(ind) { if (e, baptism(ind)) { return (e) } fornodes(root(ind), node) { set(t, tag(node)) if (eqstr(t, "BAPM")) { return (node) } if (eqstr(t, "BAPL")) { return (node) } } return (0) } lifelines-3.0.61/reports/givens_gender.ll0000700002540200244210000000443010076661057020620 0ustar prappDomain Users/* * @progname givens_gender.ll * @version 1 * @author Jim Eggert (eggertj@ll.mit.edu) * @category * @output Text * @description Given name gender report program. This program prints a list of all given names of people, tagged by one of the following: M Only males F Only females B Males and females M? Males and persons of unknown gender F? Females and persons of unknown gender B? Males, females, and persons of unknown gender Very few names should be marked as B. Check them carefully and you may find some database gender errors. You may be able to help resolve unknown genders for those names tagged M? and F?. If you want to sort the report by name only, do sort +1b -2b report > report.sort If you want to sort the report by gender and name, do sort report > report.sort If you want to find a person with a specific given name and gender, use givens_gender_finder. by Jim Eggert (eggertj@ll.mit.edu) Version 1 (19 April 1995) requires LifeLines 3.0.1 or later. */ proc main() { table(namestable) list(nameslist) list(codelist) list(names) print("Collecting names...") set(namescount,0) forindi(person,pnum) { /* if (gt(pnum,300)) { break() } */ if (male(person)) { set(a,15) set(m,2) } elsif (female(person)) { set(a,10) set(m,3) } else { set(a,6) set(m,5) } extractnames(inode(person),names,nnames,isurname) forlist(names,name,iname) { if (ne(iname,isurname)) { if (l,lookup(namestable,name)) { if (not(mod(l,m))) { insert(namestable,save(name),add(l,a)) } } else { set(sname,save(name)) insert(namestable,sname,a) enqueue(nameslist,sname) incr(namescount) } } } } setel(codelist, 6,"? ") setel(codelist,10,"F ") setel(codelist,15,"M ") setel(codelist,16,"F? ") setel(codelist,21,"M? ") setel(codelist,25,"B ") setel(codelist,31,"B? ") print("done\nPrinting ", d(namescount)," names...") while(name,dequeue(nameslist)) { getel(codelist,lookup(namestable,name)) name "\n" } } lifelines-3.0.61/reports/givens_gender_finder.ll0000700002540200244210000000205510076661057022150 0ustar prappDomain Users/* * @progname givens_gender_finder.ll * @version 1 * @author Eggert * @category * @output Text * @description This program finds all persons with a particular given name and gender. It is really meant to be a companion to the givens_gender program. givens_gender_finder - a LifeLines database given name & gender finder program by Jim Eggert (eggertj@ll.mit.edu) Version 1 (19 April 1995) requires LifeLines 3.0.1 or later. */ proc main() { list(names) getstrmsg(nseek,"Enter name to be found") set(nseek,save(nseek)) getstrmsg(gseek,"Enter gender to be found") set(gseek,save(gseek)) forindi(person,pnum) { if (not(strcmp(gseek,sex(person)))) { extractnames(inode(person),names,nnames,isurname) forlist(names,name,iname) { if (ne(iname,isurname)) { if (not(strcmp(name,nseek))) { print(key(person)," ",name(person),"\n") } } } } } } lifelines-3.0.61/reports/grand.ll0000700002540200244210000002757010631305407017075 0ustar prappDomain Users/* * @progname grand * @version 1.1 * @author Stephen Dum * @category * @output text * @description For a selected individual this program outputs a list of children, grand children, great grand children and great great grand children. Output format is simple text, roughly 80 columns. Each list is sorted by date person 'entered' the family either by birth date or adoption. Note - if multiple children have the same birth date, they are all given the same rank. Thus numbering can appear to repeat. I.E. you might see 1., 2., 2., 4. ... if the second and third child were born on the same date. grand - a LifeLines database program by Stephen Dum stephen.dum@verizon.net Version 1, 15 December 2002 Version 1.1, 3 June 2007 - minor update */ global(gkdates) /* list of numeric versions of dates for sorting */ global(refind) /* list used to hold indexes of dates sorted*/ global(adopt_event) proc main() { dayformat(0) /* leave spaces in single digit days */ monthformat(4) /* print month as Jan... */ dateformat(0) /* use 'da mon year' order */ list(gkdates) list(refind) /* for finding children */ list(par) /* list of selected individual */ list(kids) /* children of selected individual */ list(kids_par) /* and their parent -- unused and all same but needed for compatibility with later calls */ list(kids_adop) /* list of adoption flag */ /* for finding grand children. at a given index is person in gkids * and at the same index in gkids_par is the parent */ list(gkids) /* list of grand children */ list(gkids_par) /* index into kids array to parent */ list(gkids_adop) /* adoption flag */ /* for finding great grand children */ list(ggkids) /* list of great grand children */ list(ggkids_par) /* index into gkids array to the parent */ list(ggkids_adop) /* adoption flag */ /* for finding great great grand children */ list(gggkids) /* list of great great grand children */ list(gggkids_par) /* index into ggkids array so we can get parent */ list(gggkids_adop) /* adoption flag */ /* for finding great great great grand children */ list(ggggkids) /* list of great great great grand children */ list(ggggkids_par) /* index into gggkids array so we can get parent */ list(ggggkids_adop) /* adoption flag */ /* select individual for report */ set(indi0, NULL) set(count,5) while (not(indi0)) { getindi(indi0,"Enter person to find grand children for:") if (not(indi0)) { print("Individual not found in database.",nl()) decr(count) if (not(count)) { print("aborting", nl()) return(0) } } } enqueue(par,indi0) /* put out header */ call print_header(indi0) /* compute children of selected individual */ call compute_child(par,kids,kids_par,kids_adop) /* and print children */ if (not(length(kids))) { print("No children!",nl()) return(0) } /* for children only 1st 3 params and last are used */ call print_kids(kids, kids_par, kids_adop, kids, kids_par, kids, kids_par, kids, 0) /* compute grand children */ call compute_child(kids,gkids,gkids_par,gkids_adop) if(length(gkids)) { call print_kids(gkids, gkids_par, gkids_adop, kids, kids_par, kids, kids_par, kids, 1) /* compute great grand children */ call compute_child(gkids,ggkids,ggkids_par,ggkids_adop) if(length(ggkids)) { /* print grand children */ call print_kids(ggkids, ggkids_par, ggkids_adop, gkids, gkids_par, kids, kids_par, kids, 2) /* compute great great grand children */ call compute_child(ggkids,gggkids,gggkids_par,gggkids_adop) if (length(gggkids)) { call print_kids(gggkids, gggkids_par, gggkids_adop, ggkids, ggkids_par, gkids, gkids_par, kids, 3) /* compute great great great grand children */ call compute_child(gggkids,ggggkids,ggggkids_par,ggggkids_adop) if (length(ggggkids)) { call print_kids(ggggkids, ggggkids_par, ggggkids_adop, gggkids, gggkids_par, ggkids, ggkids_par, gkids, 4) } } } } } /* compute children from list of parents * p - list of parents * c - children being computed * c_p - indexes into p corresponding to each child * a - list of adoption dates (or null) for each child * * p is passed in, c,c_p and a are outputs and assumed to be zero lenght * at call * gkdates - dates to sort by */ proc compute_child(p,c,c_p,a) { /* clear out the gkdates list - easy it's global*/ list(gkdates) forlist(p, e, i) { families(e, f, indi, j) { children(f, nextchild, k) { /* if child is already in the list, we want the * one with the earliest date only * This is rare, we could set adopt to -1 and use * as a flag to print twice, but not count twice */ if (birth(nextchild)) { set(sortdate,get_date(birth(nextchild))) } else { set(sortdate,0) } if (x,isadopted(nextchild,f,e)) { /* * if adopted, put adopt_date into gkdates * This makes listing * include adopted as date joined family */ if (date(adopt_event)) { set(sortdate, get_date(adopt_event)) } } if (dupind,finddup(c,nextchild)) { /* found duplicate * if new sortdate is smaller than previous, use it */ if (lt(sortdate,getel(gkdates,dupind))) { setel(c_p,dupind,i) setel(a,dupind,x) setel(gkdates,dupind,sortdate) } } else { enqueue(gkdates, sortdate) enqueue(c, nextchild) enqueue(c_p,i) enqueue(a,x) } } } } } /* finddup(clist,ind_child) * see if ind_child is already in the list, if so, return * the index for the child - we could use inlist() but * it doesn't give us the index of the match */ func finddup(clist,ind_child) { forlist(clist,e, i) { if (eq(e,ind_child)) { return(i) } } return(0) } /* print_kids - for lower levels not all arrays are used * k1 - list of children being printed * g1 - index into k2 for parents of children * a - list of adopted flags * k2 - list of parents of children * g2 - index into k3 for grand parents * k3 - list of grandparents * g3 - index into k4 for great grandparents * k4 - list of great grandparents * index - how many levels to print */ proc print_kids(k1, g1, a, k2, g2, k3, g3, k4, level) { list(refind) set(adopted, 0) /* count number of adopted children */ /* refind is used to get to names corresponding to elements of * the gkdates list after sorting */ set(len,length(gkdates)) set(index,len) while(index) { setel(refind,index,index) decr(index) } sort(refind,gkdates) set(dups,0) /* print out the title for the section */ set(title,start_section(level)) /* Iterate over values in refind and print out the data * lasti - last printed rank for individual * lastd - birth date of previous entry for same date check * count - child rank * * index - child rank to print for this individual */ set(lasti,1) set(lastd,getel(gkdates,1)) set(count,0) forlist(refind, ind, i) { set(cur_per, getel(k1, ind)) set(cur_per_par_ind, getel(g1, ind)) /* list all children with same birth date as same number * also, second marriages and adoptions may cause child to be * listed twice, it's easiest to remove here, since data is sorted * by birthdate. */ incr(count) if (ne(lastd,getel(gkdates,i))) { /* dates are different */ set(index,count) set(lasti,count) set(lastd,getel(gkdates,i)) } else { /* date same, keep using same index value */ set(index,lasti) } set(adopt,getel(a,ind)) /* uncomment next 3 lines if you want adopted children to listed, * but not counted if (adopt) { "--" decr(count) } */ d(index) /* print first line */ "." col(5) name(cur_per,false) col(36) date(birth(cur_per)) if (eq(level, 0)) { if(adopt) { incr(adopted) col(49) "Adopt:" adopt } nl() } else { col(49) name(getel(k2,cur_per_par_ind),false) nl() if(adopt) { incr(adopted) col(5) "Adopt:" adopt } nl() } if (ne(date(death(cur_per)), 0)) { col(5) "died: " date(death(cur_per)) if (lt(level,2)) { nl() } } if (gt(level, 1)) { set(gpar,getel(g2,cur_per_par_ind)) col(23) name(getel(k3,gpar),false) } if (gt(level,2)) { col(49) name(getel(k4,getel(g3,gpar)),false) } if (gt(level,1)) { nl() } } /* print section summary */ set(count,sub(length(k1),dups)) nl() d(count) " " title if (adopted) { " (" d(adopted) " adopted)" } nl() print(d(count), " ", title) if (adopted) { print(" (",d(adopted)," adopted)") } print(nl()) } proc print_header(parent) { col(30) "Children of" nl() col(30) name(parent,false) nl() families(parent, f, ind, i) { col(30) "Spouse: " name(ind, false) nl() } } func start_section(level) { nl() if (eq(level,0)) { set(title,"Children") print_ref(title) nl() col(5) "Name" col(36) "Birth" nl() } elsif (eq(level,1)) { set(title,"Grand Children") print_ref(title) nl() col(5) "Name" col(36) "Birth" col(49) "Parent" nl() } elsif (eq(level,2)) { set(title,"Great Grand Children") print_ref(title) nl() col(5) "Name" col(36) "Birth" col(49) "Parent" nl() col(23) "Grand Parent" nl() } elsif (eq(level,3)) { set(title,"Great Great Grand Children") print_ref(title) nl() col(5) "Name" col(36) "Birth" col(49) "Parent" nl() col(23) "Grand Parent" col(49) "Great Grand Parent" nl() } else { set(title,"Great Great Great Grand Children") print_ref(title) nl() col(5) "Name" col(36) "Birth" col(49) "Parent" nl() col(23) "Grand Parent" col(49) "Great Grand Parent" nl() } return(title) } func print_ref(title) { set(l,div(sub(80,strlen(title)),2)) col(l) title nl() set(name, concat(" (Compiled by ",getproperty("user.fullname")," ", stddate(gettoday()),")",nl())) set(l, add(26,strlen(name))) set(l,div(sub(80,strlen(name)),2)) col(l) name } /* check to see if person in family fam is adopted by par */ /* returns 0 if not adopted */ func isadopted(per,fam, par) { /* * in gedcom 5.5 the structure is * 1 INDI * 2 ADOP * 3 FAMC * 4 ADOP (BOTH|HUSB|WIFE) */ set(x,xref(fnode(fam))) fornodes(inode(per),e) { if(eqstr(tag(e),"ADOP")) { /* print("adopt record for ",name(per),nl()) */ fornodes(e,fam) { /* check for 'FAMC' with value x */ if(and(eqstr(tag(fam),"FAMC"),eqstr(value(fam),x))) { /* now see if famc has a adop record */ /* print("... match FAMC ",x,nl()) */ fornodes(fam,a) { if(eqstr(tag(a),"ADOP")) { /* print("... ADOP ",value(a)," par=",name(par)) if (male(par)) { print(" m") } if (female(par)) { print (" f") } print(nl()) */ set(adopt_event,e) if(eqstr(value(a),"HUSB")) { if(male(par)) { if(da,date(e)) { return(da) } return("-") } } elsif(eqstr(value(a),"WIFE")) { if(female(par)) { if(da,date(e)) { return(da) } return("-") } } else { /* if(eqstr(value(a),"BOTH")) { .... } must be "BOTH" (note this has side effect that "" is treated as both */ if(da,date(e)) { return(da) } else { return("-")} } } } } } } } return(0) } /* hack together a integer that can be sorted to represent the date */ func get_date(datenode) { extractdate(datenode,day,month,year) return(add(mul(add(mul(year,100), month),100),day)) } lifelines-3.0.61/reports/hasnotes1.ll0000700002540200244210000000230010076661057017700 0ustar prappDomain Users/* * @progname hasnotes1.ll * @version 1.1 * @author Wetmore, Manis * @category * @output Text * @description * * It will produce a report of all the numbers and names (INDI's) * in the database which have a "NOTE" line at level 1 in the record. * It is designed for 10 or 12 pitch, HP laserjet III, or any * other printer (ASCII output). * hasnotes1 * * Code by Tom Wetmore, ttw@cbnewsl.att.com * Modifications by Cliff Manis * * This report works only with the LifeLines Genealogy program * * version one of this report was written by Tom Wetmore, in Sep 1992, * */ proc main () { "PERSONS IN THE DATABASE WITH NOTES" nl() nl() forindi (i, n) { set(r, inode(i)) set(notfound, 1) fornodes (r, n) { if (and(notfound, eq(0, strcmp("NOTE", tag(n))))) { set(notfound, 0) key(i) col(8) name(i) nl() } } } } /* Sample output of report. PERSONS IN THE DATABASE WITH NOTES I1 Alda Clifford MANIS I2 Fuller Ruben MANES I3 Edith Alberta MANIS I4 William Bowers MANES I5 Cordelia "Corda" F. CANTER I6 William Loyd MANIS (all these INDI's did have a NOTE line) */ /* End of Report */ lifelines-3.0.61/reports/hp-anc.ll0000700002540200244210000013645310076661057017162 0ustar prappDomain Users/* * @progname hp-anc.ll * @version 1 of 1995-12-01 * @author Dennis Nicklaus (nicklaus@wishep.physics.wisc.edu) * @category * @output HPGL * @description * * This LifeLines report program generates autoscaling HPGL ancestral and * descendant charts. The ancestral charts can include the siblings * of all direct ancestors (aunts, uncles, great-aunts, great-uncles, etc.) * The chart format is based on the program GedChart, by Tom Blumer. * ** hp-anc was developed by modifying the output portion (print_person ** function) of ps-anc3 (from ps-anc2). Thus most features of ps-anc3 are ** still supported, except for the multi-page output option. ** ** CAVEATS/FEATURES: ** 1. You might find it useful to be familiar with ps-anc3 first. ** 2. The HPGL text scaling here is very inadequate. ** I just picked a couple of scale factors which work for the ** paper size (usu 24x36 inches (E)) and chart depths (15-18 gen) ** which I needed it for and typically use. The scale factors I ** picked make the text still readable (if you use a 0.25 plotter pen) ** but let you stuff a lot of information onto one chart. ** Gedchart does a better job, but I don't know how. ** And sometimes Gedchart scales the text down too far so it is ** too small to read. These fixed scales avoid that, ** but there is no guarantee that text lines won't run together ** vertically or exceed it's "generation width". ** ** 3. All the scaling & placement is done exactly as in ps-anc3, as ** if we were generating postscript output. Then at the end, ** that scale is just adjusted to an HPGL autoscale. This may ** give you less than perfect results. I certainly haven't ** tried all cases. ** ** 4. Like Gedchart does, hp-anc includes a line of text on the ** chart if you have a note which begins with the keyword tag GEDCHART. ** For instance: ** GEDCHART Fought in the Rev. War ** will result in a line of text "Fought in the Rev. War" ** on the chart for that person. ** ** 5. ps-anc3 didn't have that note capability, and so the extra ** line of text that requires is NOT built into the placement ** algorithm for ancestor charts (but it does work for desc. charts). ** Thus, you might end up with a note line which ** comes out overwriting the next person down on the chart. ** This will generally only be a problem with tightly packed siblings ** or with people with no ancestors in an ancestor plot. ** ** 6. I recommend you use a previewer for the output before ** you waste a nice sheet of vellum and 30 min. on the plotter. ** I run my HPGL output through hpgl2ps-v2 by Dan McCormick, ** then view the postscript using pageview (Sun postscript ** previewer) or ghostscript. hpgl2ps does not do the text scaling ** conversion perfectly. So even though it looks like a line of text ** is too long under the postscript viewer, it may be fine ** when plotted out. You'll have to use some trial and error. ** ** 7. A have added a couple extra date/place style options beyond ** what ps-anc2 had. My favorite is the date+2places(#5) ** which will turn Madison,DaneCo,WI into Madison,WI ** or "Sitter,bei Ankum,Lower Saxony,Germany" into "Sitter,Germany" ** You still may want to look at and edit the HPGL output before ** you print it out to make sure everything is what you want. ** ** 8. Has some rudimentary "print birth & death on same line" option. ** ** 9. Jumped through a lot of hoops to save a little space when ** moving from one generation to the next in do_des. ** ** WISH LIST ** 1. Use multiple colors? (but it already takes a long time to plot. ** it'd be even longer if it has to switch pens) ** 2. Take note line into account for placement of anc. charts. ** 3. Better text scaling ** 4. Figure out how to make characters like a-umlaut, o-umlaut,... in HPGL ** (I currently do these with e" but it isn't great. ** 5. Change dates like "Aft 1990" to "Aft 1990" (remove extra spaces). ** (I currently do this by hand with a text editor) ** ** After you use this program a few times, you might wish to edit the ** function interrogate_user(). This is the first function after ** these comments and the global variable declarations. This ** function is set up to make it easy for you to configure what ** questions this program should ask you each time and what default ** values it should use for questions not asked. ** ** Please contact me if you like this program, find any bugs, have ** any bug fixes, or want to suggest improvements. I am also always ** on the lookout for better ancestral/descendant chart generating ** programs. If you know of a program that generates charts which ** you like better than those generated by this program, please drop ** me a line. ** ** This report program works with the LifeLines Genealogical database ** program only. (see ftp://ftp.cac.psu.edu/pub/genealogy/lines/*) ** ** hp-anc, 1 December 1995, by Dennis Nicklaus (nicklaus@wishep.physics.wisc.edu) ** heavily based on ps-anc3, which is a derivative of : ** ps-anc2, 16 August 1994, by Fred Wheeler (wheeler@ipl.rpi.edu) ** ** CHANGE LOG ** ** This is version 1 ** ** CREDITS ** Many thanks to Fred Wheeler developer of ps-anc2 ** ** ABOUT GEDCHART (a different program) ** ** I got some of the HPGL plotter setup commands from HPGL output ** of the GEDCHART program written by Tom Blumner ** (blumer@ptltd.com). It is used here without his permission. ** The report is very much like that generated by GedChart using the ** -Sa or -Sd option. GEDCHART has some features this program does not. ** ** GedChart is DOS program that generates ancestral and descendant ** charts like this report program, and also fan charts. GedChart ** works directly from a GEDCOM file and is completely independent of ** LifeLines. It is currently up to version 1.6, which is a beta ** version that may lead to a commercial product. You can find ** GedChart at ftp:oak.oakland.edu/pub/msdos/genealgy/gedcht16.zip ** */ global (high_pos_gen) /* array, highest so far in each generation */ global (high_pos_all) /* highest position so far for any generation */ global (last_child_pos) /* place where last child was enqueued on desc. chart */ global (name_height) /* height of name text on chart */ global (generation_height) /* space from parent to child on desc. chart */ global (date_height) /* height of birth/death/marriage date text */ global (no_parent_extra) /* constant, extra vert. line when no parent */ /* variables prompted from or configured by the user */ global (chart_type) /* int, 0: ancestral, 1: descendant */ global (all_same_line) /* int, 0: separate name, b,d lines, 1: name,b.d. all same line,name 2: name sep.,b.d. on same line is NOT supported in HP format */ global (root_person) /* indi, person for whom to generate the chart */ global (font_name) /* string, name of font */ global (max_depth) /* int, maximum number of generations */ global (chart_label) /* string, label for corner of chart */ global (color_chart) /* boolean, is chart in color */ global (multi_page) /* boolean, is chart many page poster type */ global (x_pages) /* int, number of horizontal pages */ global (y_pages) /* int, number of vertical pages */ global (name_letters) /* int, maximum number of letters in a name */ global (title_method) /* int, code for how to insert titles */ global (depth_siblings) /* int, number of generations to show siblings */ global (dateplace_birth) /* int, date style for birth/death/marriage */ global (dateplace_death) global (dateplace_marriage) global (dennis) /* variables to return values from procedures to make them functions */ global (do_anc_stack) /* stack, function do_anc is recursive */ global (person_height_return) global (is_prefix_title_return) global (dateplace_return) /* these three constants define how close branches of the tree can get */ global (branch_dist_prev) /* minimum distance from previous generation */ global (branch_dist_same) /* minimum distance from same generation */ global (branch_dist_next) /* minimum distance from next generation */ /* stacks for storing the information for each person on the chart */ /* see proc's enqueue_person and dequeue_all_persons */ global (plist_person) /* the person (to extract name, birth, death) */ global (plist_depth) /* generation depth */ global (plist_pos) /* vertical position */ global (plist_line) /* 0,1 boolean, is direct ancestor? */ global (plist_mdate) /* marriage date */ global (plist_note) /* marriage date */ /* stacks for storing the information for each vertical line on the chart */ /* see proc's enqueue_vertical and dequeue_all_verticals */ global (llist_depth) /* generation depth */ global (llist_low) /* starting point */ global (llist_high) /* finishing point */ global (shortname_scale) global (longname_scale) global (shortdate_scale) global (longdate_scale) global (longname_cutoff) global (longdate_cutoff) /* ** procedure: interrogate_user ** ** This procedure is designed to be modified by the user. It asks ** many questions about how to configure the charts. If your answer ** to one of the questions is always the same, you can easily ** hardwire your answer here so that you are never asked again. ** ** An 'if' statement is wrapped around each question. The 'if (1)' ** can be changed to an 'if (0)' to make the program use the default ** value defined in the 'else' clause instead of asking every time. ** */ proc interrogate_user () { /* ** QUESTION: What type of chart? ** ** This should always be asked, unless you never use one of the two ** types of charts. ** */ if (1) { getintmsg (chart_type, "Enter 0 for ancestral, 1 for descendant chart") } else { set (chart_type, 1) } /* ** QUESTION: Who is the root person? ** ** This question should always be asked, unless you always use the same ** person, which is not likely. If you do set a default, it is a string ** representation of that persons number. ** */ if (1) { set (root_person, 0) while ( not (root_person) ) { getindimsg (root_person, "Identify root person for chart") } } else { set (root_person, indi ("1")) } /* ** QUESTION: How many generations should be shown? ** ** This should always be explicitly asked. ** */ if (1) { getintmsg (max_depth, "Maximum number of generations") } else { set (max_depth, 6) } if (gt (max_depth,15)) { set (shortname_scale,";SR0.166,0.266;") set (longname_scale,";SR0.136,0.216;") set (shortdate_scale,";SR0.136,0.216;LB") } else { set (shortname_scale,";SR0.201,0.322;") set (longname_scale,";SR0.166,0.266;") set (shortdate_scale,";SR0.151,0.241;LB") } set (longdate_scale,";SR0.100,0.161;LB") if (lt (max_depth,8)) { set (longname_cutoff,40) set (longdate_cutoff,60) } else { set (longname_cutoff,20) set (longdate_cutoff,36) } /* ** QUESTION: How many lines per person. */ if (1) { getintmsg (all_same_line, "birth & death lines: 0=Sep.;1= with name.") } else { set (all_same_line, 0) } /* ** QUESTION: How many generations should show siblings? ** ** If you want to show siblings in all generations, set this default to 999. ** This question is only asked for ancestral charts. ** */ if (eq (chart_type, 0)) { if (1) { getintmsg (depth_siblings, "How many generations to show siblings") } else { set (depth_siblings, 1) } } /* ** QUESTION: What message should be shown in the corner of the chart? ** ** I suggest not asking this question, and setting a default credit with ** your name. The advantage of this is that you can have the date ** automatically inserted. ** */ if (1) { getstrmsg (chart_label, "Label for corner of chart (your name, date)") set (chart_label, save (chart_label)) } else { dayformat (2) monthformat (6) dateformat (0) set (chart_label, concat ("by Dennis J. Nicklaus, ", save (stddate (gettoday ())))) } /* ** QUESTION: What font should be used? ** ** Because it is such a pain to enter a font name, and a spelling mistake ** will get you an ugly default font, this should be set to a default. I ** suggest one of: Times-Roman, NewCenturySchlbk-Roman, or ZapfChancery. ** Search the Postscript code at bottom of this file for a longer list. ** */ if (0) { getstrmsg (font_name, "Font (Times-Roman, NewCenturySchlbk-Roman, ZapfChancery, etc.") set (font_name, save (font_name)) } else { set (font_name, "Times-Roman") } /* ** QUESTION: Should color be used? ** ** If you don't have access to a color printer, you should probably turn ** off this question. ** */ if (0) { getintmsg (color_chart, "Enter 0 for black/white, 1 for color") } else { set (color_chart, 0) } /* ** QUESTION: Do you want multi-page poster output? ** ** So that I am not hassled with this question everytime I run this ** program, I turn this question off, but change the default on the ** special occasion that I want a poster chart. ** */ if (0) { getintmsg (multi_page, "Enter 0 for single page, 1 for multipage") } else { set (multi_page, 0) } /* ** QUESTION: How many pages make up the poster? ** ** You will probably want to always ask this question. This question is ** asked if a poster chart is requested. ** */ if (multi_page) { if (1) { getintmsg (x_pages, "Number of horizontal pages") getintmsg (y_pages, "Number of vertical pages") } else { set (x_pages, 3) set (y_pages, 3) } } else { set (x_pages, 1) set (y_pages, 1) } /* ** QUESTION: How should titles be used? ** ** I would leave this default set to 'guess' (3), or 'none' (0), if you ** don't want the titles. If find a title that is guessed incorrectly, ** please send an e-mail to wheeler@ipl.rpi.edu. ** */ if (0) { getintmsg (title_method, "Title method (0:none,1:prefix,2:suffix,3:guess)") } else { set (title_method, 3) } /* ** QUESTION: What is the maximum length for names? ** ** It is best to just set a default maximum name length. If you want ** to always show the complete name, just set the default to 999. ** */ if (0) { getintmsg (name_letters, "Maximum name length") } else { set (name_letters, 40) } /* ** QUESTION: How should dates/places of birth/death/marriage be shown? ** ** This is actually three questions, or the same question for birth ** death and marriage dates. The codes cause the dates to be printed ** as follows. ** ** 0: do not show date ** 1: full date only ** [ LifeLines date() function ] ** 2: date and place, just year and State/Country ** [ LifeLines short() function ] ** 3: full date and full place, can get very long and thus smushed ** [ LifeLines long() function ] ** 4: full date and 1st place field ** 5: full date and 1st and last place fields (useful for picking ** up the city, country or city,state without the county). ** */ if (1) { set (dateplace_birth, 99) while (or (lt (dateplace_birth, 0), ge (dateplace_birth, 6))) { getintmsg (dateplace_birth, "Birth date style (0:no,1:date,2:short,3:long,4:date+1st place,5:+2pl)") } set (dateplace_death, 99) while (or (lt (dateplace_death, 0), ge (dateplace_death, 6))) { getintmsg (dateplace_death, "Death date style (0:no,1:date,2:short,3:long,4:date+1st place,5:+2pl)") } set (dateplace_marriage, 99) while (or (lt (dateplace_marriage, 0), ge (dateplace_marriage, 6))) { getintmsg (dateplace_marriage, "Marriage date style (0:no,1:date,2:short,3:long,4:date+1st place,5:+2pl)") } } else { set (dateplace_birth, 5) set (dateplace_death, 5) set (dateplace_marriage, 5) } /* ** END OF QUESTIONS ** */ } /* ** procedure: main ** ** The main procedure. ** */ proc main () { /* set constants */ set (name_height, 1300) /* height to allow for name text */ set (date_height, 750) /* height to allow for date text */ set (generation_height, 1300) /* space from parent to child in des. chart */ set (branch_dist_prev, 1200) /* previous generation */ set (branch_dist_same, 1500) /* same generation */ set (branch_dist_next, 1200) /* next generation */ set (no_parent_extra, 600) /* a little extra line when no parent */ /* initialize other global variables and declare global stacks */ set (high_pos_all, 0) list (high_pos_gen) list (do_anc_stack) list (plist_person) list (plist_depth) list (plist_pos) list (plist_line) list (plist_mdate) list (plist_note) list (llist_depth) list (llist_low) list (llist_high) call interrogate_user () /* covert the numerical response for color to "true" or "false" */ if (eq (color_chart, 0)) { set (color_true_false, "false") } else { set (color_true_false, "true") } /* start iteration that creates the chart */ if (eq (chart_type, 0)) { call do_anc (root_person, 1, 0, 0) } else { call do_des (root_person, 1) } /* put the pieces together to make the output file */ set (xi, 1) while ( le (xi, x_pages)) { set (yi, 1) while ( le (yi, y_pages)) { call print_header (font_name, max_depth, high_pos_all, color_true_false, chart_label, xi, x_pages, yi, y_pages) call dequeue_all_persons () call dequeue_all_verticals () call print_tailer() set (yi, add (yi, 1)) } set (xi, add (xi, 1)) } } /* ** procedure: do_anc ** ** A recursive function to position persons on an ancestral chart. ** First, a recursive call is made to put the father on the chart. ** Where he is put on the chart determines the minimum position for ** the mother. Once the father and mother are put on the chart, the ** siblings are put on the chart. ** ** The position of the person is returned via the global stack ** do_anc_stack. A stack is necessary since this procedure is ** reentrant. ** */ proc do_anc (person, depth, min_pos_arg, marriage_date) { /* don't want to modify procedure argument variable, so copy it */ set (min_pos, min_pos_arg) /* figure out number of siblings and total sibling height */ /* done differently, depending on whether the parents family exists */ set (fam, parents (person)) if ( and ( fam, le (depth, depth_siblings) ) ) { set (sibling_height, 0) children (fam, child, unused_number) { call person_height (child) set (sibling_height, add (sibling_height, person_height_return)) } set (num_siblings, nchildren (fam)) } else { call person_height (child) set (sibling_height, person_height_return) set (num_siblings, 1) } /* add extra width for marriage date of male ancestor, if it is known */ if (marriage_date) { set (sibling_height, add (sibling_height, date_height)) } /* make sure minimum position is greater than zero */ if (lt (min_pos, 0)) { set (min_pos, 0) } /* do not overlap another branch at the younger generation */ if (gt (depth, 1)) { if (high, getel (high_pos_gen, sub (depth, 1))) { if (lt (min_pos, add (high, branch_dist_prev))) { set (min_pos, add (high, branch_dist_prev)) } } } /* do not overlap another branch at the same generation */ if (high, getel (high_pos_gen, depth)) { if (lt (min_pos, add (high, branch_dist_same))) { set (min_pos, add (high, branch_dist_same)) } } /* do not overlap another branch at the older generation */ if (lt (depth, max_depth)) { if (high, getel (high_pos_gen, add (depth, 1))) { if (lt (min_pos, add (high, branch_dist_next))) { set (min_pos, add (high, branch_dist_next)) } } } /* do father if he exists and is not too deep */ set (dad_min_pos, sub (min_pos, name_height)) set (dad_pos, dad_min_pos) set (did_dad, 0) /* boolean, is dad on the chart */ if (lt (depth, max_depth)) { if (par, father (person)) { call dateplace (marriage (parents (person)), dateplace_marriage) if (dateplace_return) { call do_anc (par, add (depth, 1), dad_min_pos, dateplace_return) } else { call do_anc (par, add (depth, 1), dad_min_pos, 0) } set (dad_pos, pop (do_anc_stack)) set (did_dad, 1) } } if (lt (min_pos, add (dad_pos, name_height))) { set (min_pos, add (dad_pos, name_height)) } /* do mother if she exists and is not too deep */ set (mom_min_pos, add (add (dad_pos, name_height), sibling_height)) set (mom_pos, mom_min_pos) set (did_mom, 0) /* boolean, is mom on the chart */ if (lt (depth, max_depth)) { if (par, mother (person)) { call do_anc (par, add (depth, 1), mom_min_pos, 0) set (mom_pos, pop (do_anc_stack)) set (did_mom, 1) } } /* find the spacer needed to line up siblings between parents */ set (delta, sub (mom_pos, add (dad_pos, name_height))) set (extra, sub (delta, sibling_height)) set (spacer, div (extra, add (num_siblings, 1))) set (pos, add (dad_pos, name_height)) set (pos, add (pos, spacer)) /* position siblings, differently depending on whether parents exist */ if (fam, parents (person)) { if ( le (depth, depth_siblings)) { children (fam, child, number) { /* if this is the ancestor, return the position and use marriage */ if (eq (child, person)) { call enqueue_person (child, depth, pos, 1, marriage_date) push (do_anc_stack, pos) } else { call enqueue_person (child, depth, pos, 0, 0) } /* store the positions of the first and last children */ if (eq (number, 1)) { set (first_pos, pos) } if (eq (number, nchildren (fam))) { set (last_pos, pos) } /* increment position by height of person plus the spacer */ call person_height (child) set (pos, add (pos, person_height_return)) if (and (eq (child, person), marriage_date)) { set (pos, add (pos, date_height)) } set (pos, add (pos, spacer)) } } else { call enqueue_person (person, depth, pos, 1, marriage_date) push (do_anc_stack, pos) /* this may cause a line of zero length to be drawn */ set (first_pos, pos) set (last_pos, pos) /* increment position by height of person plus the spacer */ call person_height (person) set (pos, add (pos, person_height_return)) if (marriage_date) { set (pos, add (pos, date_height)) } set (pos, add (pos, spacer)) } /* if father is on the chart, he determines the vertical line start */ /* otherwise, the oldest sibling does */ if (eq (did_dad, 1)) { set (line_start, dad_pos) } else { set (line_start, sub (first_pos, no_parent_extra)) } /* note: line_start may be < 0, that is OK */ /* if mother is on the chart, she determines the vertical line end */ /* otherwise, the youngest sibling does */ if (eq (did_mom, 1)) { set (line_end, mom_pos) } else { set (line_end, add (last_pos, no_parent_extra)) } /* print vert. line if parent or any siblings are on the chart */ if (or (or (did_mom, did_dad), gt (nchildren (fam), 1))) { call enqueue_vertical (depth, line_start, line_end) /* update highest overall position */ if (lt (high_pos_all, add (line_end, name_height))) { set (high_pos_all, add (line_end, name_height)) } } } else { /* else, if the person has no visible siblings */ call enqueue_person (person, depth, pos, 1, marriage_date) push (do_anc_stack, pos) /* increment position by height of person plus the spacer */ call person_height (person) set (pos, add (pos, person_height_return)) if (marriage_date) { set (pos, add (pos, date_height)) } set (pos, add (pos, spacer)) } /* update the highest position array, or set it for the first time */ if (high, getel (high_pos_gen, depth)) { if (lt (high, pos)) { setel (high_pos_gen, depth, pos) } } else { setel (high_pos_gen, depth, pos) } /* update the overall highest position */ if (lt (high_pos_all, pos)) { set (high_pos_all, pos) } } /* ** procedure: do_des ** ** A recursive function to position persons on a descendant chart. ** */ proc do_des (person, depth) { /* don't want to modify procedure argument variable, so copy it */ set (min_pos, min_pos_arg) set (make_line, 0) set (this_persons_fams,nfamilies(person)) set (spouse_number,0) if (female (person)) { families (person, fam, spouse, num) { set (make_line, 1) if (eq (num, 1)) { set (line_top, high_pos_all) } call dateplace (marriage (fam), dateplace_marriage) set (mdate, dateplace_return) if (spouse) { set (spouse_number,add(1,spouse_number)) call enqueue_person (spouse, depth, high_pos_all, 0, mdate) call person_height (spouse) set (high_pos_all, add (high_pos_all, generation_height)) set (saw_female_family,0) set (extra_height, sub (person_height_return,generation_height)) if (mdate) { set (extra_height, add (extra_height, date_height)) } } else { set (high_pos_all, add (high_pos_all, generation_height)) } if (lt (depth, max_depth)) { children (fam, child, cn) { set (saw_female_family,1) call do_des (child, add (depth, 1)) } } /* if it is not the last spouse, then if there were no kids, make sure we leave sufficient space below him */ if (ne(spouse_number,this_persons_fams)){ if (eq(0,saw_female_family)){ set (high_pos_all, add (high_pos_all, extra_height)) set(extra_height,0) } } }/* end families loop */ if (eq(0,saw_female_family)){ set (high_pos_all, add (high_pos_all, extra_height)) set(saw_female_family,2) } if (eq(1,saw_female_family)){ set(high_pos_all,add(last_child_pos,generation_height)) } set(last_child_pos,high_pos_all) call enqueue_person (person, depth, high_pos_all, 1, 0) set (line_bot, high_pos_all) call person_height (person) set (high_pos_all, add (high_pos_all, person_height_return)) } else { set(last_child_pos,high_pos_all) call enqueue_person (person, depth, high_pos_all, 1, 0) set (line_top, high_pos_all) call person_height (person) set (high_pos_all, add (high_pos_all, generation_height)) set (extra_height, sub (person_height_return,generation_height)) families (person, fam, spouse, num) { set (saw_male_family,0) set (make_line, 1) if (lt (depth, max_depth)) { children (fam, child, cn) { set(saw_male_family,1) call do_des (child, add (depth, 1)) } } if (eq(0,saw_male_family)){ set (high_pos_all, add (high_pos_all, extra_height)) set(saw_male_family,2) } call dateplace (marriage (fam), dateplace_marriage) set (mdate, dateplace_return) set (line_bot, high_pos_all) if (spouse) { if (eq(1,saw_male_family)){ set(high_pos_all,add(last_child_pos,generation_height)) set (line_bot, high_pos_all) set(extra_height,0) } set(last_child_pos,high_pos_all) call enqueue_person (spouse, depth, high_pos_all, 0, mdate) call person_height (spouse) set (high_pos_all, add (high_pos_all, person_height_return)) if (mdate) { set (high_pos_all, add (high_pos_all, date_height)) } } else { set (high_pos_all, add (high_pos_all, name_height)) } } /* add in the rest of this male's height if he has no family (no kids) */ if (eq(0,saw_male_family)){ set (high_pos_all, add (high_pos_all, extra_height)) set(saw_male_family,1) } } if (make_line) { call enqueue_vertical (depth, line_top, line_bot) } } /* ** procedure: do_des_oldone ** ** older version of do_des ** */ proc do_des_oldone (person, depth) { /* don't want to modify procedure argument variable, so copy it */ set (min_pos, min_pos_arg) set (make_line, 0) if (female (person)) { families (person, fam, spouse, num) { set (make_line, 1) if (eq (num, 1)) { set (line_top, high_pos_all) } call dateplace (marriage (fam), dateplace_marriage) set (mdate, dateplace_return) if (spouse) { call enqueue_person (spouse, depth, high_pos_all, 0, mdate) call person_height (spouse) set (high_pos_all, add (high_pos_all, person_height_return)) if (mdate) { set (high_pos_all, add (high_pos_all, date_height)) } } else { set (high_pos_all, add (high_pos_all, name_height)) } if (lt (depth, max_depth)) { children (fam, child, cn) { call do_des (child, add (depth, 1)) } } } call enqueue_person (person, depth, high_pos_all, 1, 0) set (line_bot, high_pos_all) call person_height (person) set (high_pos_all, add (high_pos_all, person_height_return)) } else { call enqueue_person (person, depth, high_pos_all, 1, 0) set (line_top, high_pos_all) call person_height (person) set (high_pos_all, add (high_pos_all, person_height_return)) families (person, fam, spouse, num) { set (make_line, 1) if (lt (depth, max_depth)) { children (fam, child, cn) { call do_des (child, add (depth, 1)) } } call dateplace (marriage (fam), dateplace_marriage) set (mdate, dateplace_return) set (line_bot, high_pos_all) if (spouse) { call enqueue_person (spouse, depth, high_pos_all, 0, mdate) call person_height (spouse) set (high_pos_all, add (high_pos_all, person_height_return)) if (mdate) { set (high_pos_all, add (high_pos_all, date_height)) } } else { set (high_pos_all, add (high_pos_all, name_height)) } } } if (make_line) { call enqueue_vertical (depth, line_top, line_bot) } } /* ** procedure: dateplace ** ** Get the date of an event in the appropriate style (which may include ** the place. Return via global variable. ** */ proc dateplace (ev, style) { list(placeList) if (eq (style, 0)) { set (dateplace_return, 0) } if (eq (style, 1)) { set (dateplace_return, save (date (ev))) } if (eq (style, 2)) { set (dateplace_return, save (short (ev))) } if (eq( style, 3)) { set (dateplace_return, save (long (ev))) } if (eq (style, 4)) { /* date + first place field */ extractplaces(ev,placeList,nPlaces) /* we want to find the first non-empty place. We have to use this placeEq thing here to let us skip past leading commas, effectively. We look at the first place field initially, but if it is blank, then we incr placeEq so that we check the next place field for a value */ set (placeEq,1) forlist (placeList, theplace, placeN) { if (eq(strlen(theplace),0)){ incr(placeEq) } if (eq(placeN,placeEq)){ set (dennis,save(theplace)) } } /* if there was no place info, just return the date. But if there was some place info, concatenate it onto the date, with a space in between. */ if (eq (nPlaces,0)){ set (dateplace_return, save (date (ev))) } else { set (dateplace_return, save (concat (date (ev),concat(" ",dennis)))) } } if (eq (style, 5)) { /* date + first + last place fields */ extractplaces(ev,placeList,nPlaces) /* we want to find the first non-empty place. We have to use this placeEq thing here to let us skip past leading commas, effectively. We look at the first place field initially, but if it is blank, then we incr placeEq so that we check the next place field for a value */ set (placeincr_once_already,0) set (dennislast,"") set (placeEq,1) forlist (placeList, theplace, placeN) { if (eq(strlen(theplace),0)){ incr(placeEq) } else{ if (eq(placeN,placeEq)){ if (eq(placeincr_once_already,0)){ set (dennis,save(theplace)) set (placeincr_once_already,1) } else { set (dennislast,save(theplace)) } incr(placeEq) } /* end if eq */ } /* end else non-null */ } /* end forlist */ if (ge (strlen(dennislast),0)){ set (dennisfirst,save(dennis)) set (dennis,save(concat(concat(dennisfirst,","),dennislast))) } /* if there was no place info, just return the date. But if there was some place info, concatenate it onto the date, with a space in between. */ if (eq (nPlaces,0)){ set (dateplace_return, save (date (ev))) } else { set (dateplace_return, save (concat (date (ev),concat(" ",dennis)))) } } if (ge (style, 6)) { print ("error: invalid date style code") } } /* ** procedure: person_height ** ** Return the height of a single persons entry. Only the name, and ** birth and death dates are considered. The name is assumed to be in ** the database, the dates are checked for. The marriage date is not ** checked for here. It is more tricky since it is only put below the ** father's name and you have to make sure you have the date from the ** right marriage. ** ** The height of the person is returned via the global variable ** person_height_return. This global variable is used since LifeLines ** does not yet provide user-defined functions. ** */ proc person_height (person) { set (person_height_return, name_height) call dateplace (birth (person), dateplace_birth) if (eq(0,all_same_line)){ /* count b. & d. both */ if (dateplace_return) { set (person_height_return, add (person_height_return, date_height)) } call dateplace (death (person), dateplace_death) if (dateplace_return) { set (person_height_return, add (person_height_return, date_height)) } } if (eq(2,all_same_line)){ /* only count b. or death, not both */ if (dateplace_return) { set (person_height_return, add (person_height_return, date_height)) } else{ call dateplace (death (person), dateplace_death) if (dateplace_return) { set (person_height_return, add (person_height_return, date_height)) } } } /* The gedchart note location doesn't work for anc. chart. I don't know why. I guess it runs out of space or something? I guess it is OK since they don't usually matter for space in anc. charts (unless siblings are included or at end generations)*/ if (eq(chart_type,1)){ set(hadgednote,0) fornotes(inode(person),note){ set (i, index(note,"GEDCHART",1)) if (gt(i,0)){ set(hadgednote,1) } } if (eq(hadgednote,1)){ set (person_height_return, add (person_height_return, date_height)) } } } /* ** procedure: is_prefix_title ** ** Decide if the given title is a prefix type title. Returns boolean ** response in global variable is_prefix_title_return. ** */ proc is_prefix_title (t) { set (is_prefix_title_return, 0) if (index (t, "Mr", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Mrs", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Ms", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Miss", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Dr", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Prof", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Hon", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Judge", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Brot", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Sis", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Deacon", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Fr", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Father", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Rev", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Mons", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Msgr", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Arch", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Bish", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Card", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Pope", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Lord", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Baron", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Duke", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Princ", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Lady", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Queen", 1)) { set (is_prefix_title_return, 1) } if (index (t, "King", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Pres", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Sen", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Cong", 1)) { set (is_prefix_title_return, 1) } if (index (t, "Rep", 1)) { set (is_prefix_title_return, 1) } } /* ** procedure: enqueue_person ** ** Store the data for a person in the global lists. It will be ** printed later. ** */ global(chartnote) proc enqueue_person (person, depth, pos, line, mdate) { enqueue (plist_person, person) enqueue (plist_depth, depth) enqueue (plist_pos, pos) enqueue (plist_line, line) enqueue (plist_mdate, mdate) /* Inserted by D. Nicklaus. Find the GEDCHART NOTE and enqueue it, too */ set(chartnote,"") fornotes(inode(person),note){ set (i, index(note,"GEDCHART",1)) if (gt(i,0)){ set(chartnote,save(substring(note,add(9,i),strlen(note)))) } } enqueue (plist_note, chartnote) } /* ** procedure: dequeue_all_persons ** ** Dequeue and print all persons stored in the global lists. The ** lines are stored in a second queue as they are printed and then ** placed back in the original, global, queue. ** */ proc dequeue_all_persons () { list (tlist_person) list (tlist_depth) list (tlist_pos) list (tlist_line) list (tlist_mdate) list (tlist_note) while (person, dequeue (plist_person)) { set (depth, dequeue (plist_depth)) set (pos, dequeue (plist_pos)) set (line, dequeue (plist_line)) set (mdate, dequeue (plist_mdate)) set (noteprint, dequeue (plist_note)) call print_person (person, depth, pos, line, mdate,noteprint) enqueue (tlist_person, person) enqueue (tlist_depth, depth) enqueue (tlist_pos, pos) enqueue (tlist_line, line) enqueue (tlist_mdate, mdate) enqueue (tlist_note, noteprint) } while (person, dequeue (tlist_person)) { set (depth, dequeue (tlist_depth)) set (pos, dequeue (tlist_pos)) set (line, dequeue (tlist_line)) set (mdate, dequeue (tlist_mdate)) set (noteprint, dequeue (tlist_note)) enqueue (plist_person, person) enqueue (plist_depth, depth) enqueue (plist_pos, pos) enqueue (plist_line, line) enqueue (plist_mdate, mdate) enqueue (plist_note, noteprint) } } /* ** procedure: print_person ** ** Print a line of data for a person in postscript format. Each line ** printed is essentially a call to a postscript function defined in the ** header. ** */ proc print_person (person, depth, pos, line, mdate,noteprint) { /* since there is no floating point, multiply everything by another 1000/1000 to not lose too much precision*/ set(normpos,div(mul(high_pos_all,1000),9950)) /* I really want to divide by 10020 there, but I need extra room for the birth and death lines of the lowest person */ set(pos, sub(high_pos_all,pos)) set(pos, div(mul(pos,1000),normpos)) /* extra offset for b. & d. lines of lowest person */ set(pos, add(pos,70)) if (eq (title_method, 0)) { set (prefix_title, 0) set (suffix_title, 0) } if (eq (title_method, 1)) { set (prefix_title, title (person)) set (suffix_title, 0) } if (eq (title_method, 2)) { set (prefix_title, 0) set (suffix_title, title (person)) } if (eq (title_method, 3)) { set (prefix_title, 0) set (suffix_title, 0) if (t, title (person)) { call is_prefix_title (t) if (is_prefix_title_return) { set (prefix_title, t) } else { set (suffix_title, t) } } } set (xposdennis,add(64,mul(div (8000,max_depth),sub(depth,1)))) /* First draw the horiz. line */ /* 1=direct ancestor, 0=sibling, the "line" variable controls this */ /* chart_type "0 for ancestral, 1 for descendant chart" */ set (xposdennis_siboff,0) /* initial setting */ /* if (eq(chart_type,0)){*/ if (eq(line,0)){ set (xposdennis_siboff,25) }/*}*/ "PA" d (add(xposdennis,xposdennis_siboff)) "," d (pos) ";PD;PA" d (add(xposdennis,div (8000,max_depth))) "," d (pos) ";PU;" /* now draw the text */ set(pos, add(pos,9)) set (xposdennis,add(12,xposdennis)) "PA" d (add(xposdennis,xposdennis_siboff)) "," d (pos) if (gt(strlen(name (person)),longname_cutoff)){ longname_scale } else{ shortname_scale } "LB" set (nlet, name_letters) if (prefix_title) { set (nlet, sub (nlet, strlen (prefix_title))) } if (suffix_title) { set (nlet, sub (nlet, strlen (suffix_title))) } /* print name and title, if it exists */ if (prefix_title) { prefix_title " " } fullname (person, 0, 1, nlet) if (suffix_title) { " " suffix_title } if(eq(all_same_line,1)){ /* print birth date, if it exists */ call dateplace (birth (person), dateplace_birth) if (dateplace_return) { " b. " dateplace_return } call dateplace (death (person), dateplace_death) if (dateplace_return) { " d. " dateplace_return } } "PU;" set (mypos,sub(pos,40)) if(ne(all_same_line,1)){ /* print birth date, if it exists */ call dateplace (birth (person), dateplace_birth) if (dateplace_return) { "PA" d (add(xposdennis,xposdennis_siboff)) "," d (mypos) if (gt(strlen(dateplace_return),longdate_cutoff)){ longdate_scale } else{ shortdate_scale } "b. " dateplace_return "PU;" set (mypos,sub(mypos,35)) } } /* print marriage date, if it exists */ if (mdate) { "PA" d (add(xposdennis,xposdennis_siboff)) "," d (mypos) if (gt(strlen(mdate),longdate_cutoff)){ longdate_scale } else{ shortdate_scale } "m. " mdate "PU;" set (mypos,sub(mypos,35)) } if(ne(all_same_line,1)){ /* print death date, if it exists */ call dateplace (death (person), dateplace_death) if (dateplace_return) { "PA" d (add(xposdennis,xposdennis_siboff)) "," d (mypos) if (gt(strlen(dateplace_return),longdate_cutoff)){ longdate_scale } else{ shortdate_scale } "d. " dateplace_return "PU;" set (mypos,sub(mypos,35)) } } /* optional special tagged note */ if (noteprint) { /* make sure it exists */ if (gt(strlen(noteprint),0)){ /* make sure it is non-null */ "PA" d (add(xposdennis,xposdennis_siboff)) "," d (mypos) if (gt(strlen(noteprint),longdate_cutoff)){ longdate_scale } else{ shortdate_scale } noteprint "PU;" set (mypos,sub(mypos,35)) }} nl() } /* ** procedure: enqueue_vertical ** ** Enqueue the data for a single vertical line onto the global lists. ** */ proc enqueue_vertical (depth, low, high) { enqueue (llist_depth, depth) enqueue (llist_low, low) enqueue (llist_high, high) } /* ** procedure: dequeue_all_verticals ** ** Dequeue and print all vertical lines. The lines are stored in a ** second queue as they are printed and then placed back in the ** original, global, queue. ** */ proc dequeue_all_verticals () { list (tlist_depth) list (tlist_low) list (tlist_high) while (depth, dequeue (llist_depth)) { set (low, dequeue (llist_low)) set (high, dequeue (llist_high)) call print_vertical (depth, low, high) enqueue (tlist_depth, depth) enqueue (tlist_low, low) enqueue (tlist_high, high) } while (depth, dequeue (tlist_depth)) { set (low, dequeue (tlist_low)) set (high, dequeue (tlist_high)) enqueue (llist_depth, depth) enqueue (llist_low, low) enqueue (llist_high, high) } } /* ** procedure: print_vertical ** ** Print a single vertical line to link a married couple or siblings. ** */ proc print_vertical (depth, low, high) { /* do same normalizations as in print_person */ /* since there is no floating point, multiply everything by another 1000/1000 to not lose too much precision*/ set(normpos,div(mul(high_pos_all,1000),9950)) set(low, sub(high_pos_all,low)) set(low, div(mul(low,1000),normpos)) set(high, sub(high_pos_all,high)) set(high, div(mul(high,1000),normpos)) /* extra offset for b. & d. lines of lowest person */ set(low, add(low,70)) set(high, add(high,70)) set (xposdennis,add(64,mul(div (8000,max_depth),depth))) "PA" d (xposdennis) "," d(low) ";PD;PA" d (xposdennis) "," d(high) ";PU;" } /* ** procedure: print_thousandths ** ** Since LifeLines does not offer a floating point type, decimal ** computation is done using integers that represent thousands. This ** procedure converts a number in thousandths to decimal notation and ** prints it. The length of the decimal part is checked to make sure ** it is padded with zeros correctly. ** */ proc print_thousandths (n_arg) { /* don't want to modify proc argument, so copy it */ set (n, n_arg) if (lt (n, 0)) { "-" set (n, neg (n)) } d (n) } /* ** procedure: print_header ** ** Arguments: ** fn: font name ** md: maximum level, integer ** mp: maximum position, integer in thousandths ** ctf: color true/false, string "true" or "false" ** cl: chart label, string ** xi: which horizontal page ** xn: number of horizontal pages ** yi: which vertical page ** yn: number of vertical pages ** ** Print the initial postscript code. This code will likely be the ** bulk of the output file. It prints the border, defines postscript ** functions for printing peoples names, dates and the lines on the ** chart, and more. It will be followed by the data. ** ** This postscript code was written by Thomas P. Blumer (blumer@ptltd.com). ** The only modification is where data from the arguments is inserted. ** */ proc print_header (fn, ml, mp, ctf, cl, xi, xn, yi, yn) { "IN;SP1;RO90;TD1;IP;SC0,8128,0,10160;PW0.88;PU;PA17,17;PD;PA8111,17;PA8111,10143;PA17,10143;PA17,17;PW;PW0.25;PU;PA60,60;PD;PA8068,60;PA8068,10100;PA60,10100;PA60,60;PW;WU1;PW0.0255;PU;" } /* ** procedure: print_tailer ** ** Print the terminating code HPGL. This code will likely be the ** bulk of the output file. It prints the border, defines postscript ** functions for printing peoples names, dates and the lines on the ** chart, and more. It will be followed by the data. ** ** ** This HPGL code was written by Thomas P. Blumer (blumer@ptltd.com). ** The only modification is where data from the arguments is inserted. */ proc print_tailer () { "PU;PA0,0;SP;EC1;PG1;EC1" } lifelines-3.0.61/reports/html.dn.ll0000700002540200244210000005500310166311056017336 0ustar prappDomain Users/* * @progname html.dn.ll * @version 3.0 * @author Dennis Nicklaus nicklaus@fnal.gov * @category * @output HTML * @description * * Selects a person and writes html pages for that person * and all their descendents through a specified number of generations. * Actually, you get to specify a set of individuals. It probably * works nicest if you select people of the same generation, e.g. * all your ggg-grandparents. * (I also recommend that you start with the "top of the line" ancestor * or else you'll have unresolved links in the pedigree chart.) * * Output is a set of ASCII HTML files, one for each person in the set. * In addition, it writes a surname index file named index.html, * and one named -gendex, which is a GENDEX format index text file. * is the database name. * * Note that I APPEND to the index files! This is necessary if you're building * up a set of pages by multiple runs of html.dn. But you want to remove * the old ones, or go to a different directory, if you're starting a whole * new set of pages. * * Why would you want to run it multiple times? Suppose I wanted all my * relatives through my generation. On my dad's side I know all my great-grandparents * but on mom's side, only my grandparents. To create my set of pages, * I'd first run this program, specifying all of my g-gparents (on dad's side) * and number of generations =4. Then run it a second time, specifying * only my 2 grandparents on mom's side and # generations=3. * The individual's HTML files are named I.html where * is replaced with the individual's key ID number. * Since it can re-write the same individual html files multiple times, * I usually sort the two index files with something like this (suppose db=dad): * sort -u -t \> -k 2 dadindex.html > dadindex.sort; mv dadindex.sort dadindex.html * (the individual html files expect the index to be named dadindex.html.) * For the GENDEX index: * sort -t \| -k 2 -u dad-gendex >gendex.txt * (note that I use the -u flag to take out duplicate entries) * * Actually, before sorting, I usually run the indexes and (all the indi html files) * through some big "sed" scripts to take things from the LaTex notation * I use to either HTML notation or plain text. * e.g. for the gendex file, which doesn't want html special chars: * (and you may have to use csh for this quoting convention here to work.) * sed -e 's/\\"u/ue/g' gendex.out * * For the html files, it looks like * sed -e 's/\\"u/\ü/g' output * I also use -e 's/\\begin{enumerate}/\/g' -e 's/\\end{enumerate}/\<\/OL\>/g' * and similar things to go from LaTex to HTML. * * The bibliography: The html generator looks for SOUR xrefs used on each indi * and prints a list of them at the bottom of each HTML file, and references a file * bib.html which is the expected bibliography. * But this program doesn't generate the bibliography. * I personally use book-latex to generate the bibliography then munge * it around into a nicer HTML format. (I have a C program for this.) * You can use whatever you want. * * SHORTCOMINGS: * 1. Takes time to do two pretty much identical pages for direct ancestors * (or anyone else who is descended from more than one of the same starting people. * (That's OK, the most recent one written will just overwrite the first.) * * A previous verion had lots of wasted white space. * I don't like the way pagemode works at all. * I had to fill in lots of extra whitespace, e.g. at the top of the pedigree * chart to make it not overwrite some of the text which was already output. * It may still fail somewhere along the way. * I completely changed around the way the pedigree chart is drawn to get * rid of this problem. The result is a more compact html page, but with * a few less details on the pedigree chart. * I left all the old code in there (commented out), so it is confusing to read. * * If you look closely, you will notice a few things like: concat(dbname,"") * These are in there so I can fill in a numeral or something between the * empty quote marks so that I can have a dad2index.html, e.g. * * DETAILS: * 1. I have a special "1 NOTE FILE:" construct that I use to refer to external files. * 2. I also use the "1 OBJE" to link to external images (e.g. .GIF) * relevant to the person. * 3. change the info in init() before you use this!! * * EXAMPLE: * See http://www.geocities.com/dnicklaus/dadindex.html * and just pick a name from that index to see what it looks like. * dadI3.html might be a good one to start at. * * Version 3.0 July 1998 * What's different from Version 2? * Don't make a page and a link for the child if we know nothing * about the child except his name and one simple fact. * Version 2.0 July 1998 (Version 1.0 was Feb. 1998) * What's different from Version 1? Simpler, more compact pedigree chart. * * This report works only with the LifeLines Genealogy program * */ global(dbname) global(extension) global(email) global(personalname) global(homepage) global (gotValue) global (gottenNode) global (gottenValue) global (global_gp_var) proc init () { set(dbname,save(database())) set(extension,".html") set(personalname,getproperty("user.fullname")) set(email,getproperty("user.email")) set(homepage,"http://www.yourplace.here") /*e.g.: set(homepage,"http://www.geocities.com/dnicklaus/index.html")*/ } proc main () { call init() getindimsg(person,"Enter person to output HTML for Descendents") indiset(thisgen) indiset(allgen) indiset(newgen) while (person){ addtoset(thisgen, person, 0) addtoset(allgen, person, 0) set(person,0) getindimsg(person,"Enter next person to output HTML for Descendents") } getintmsg (ngen, "Enter number of generations for complete info") /* collect descendents */ set(gen,2) /* this code has to do at least 2 generations */ while(lt(gen,ngen)){ set(thisgen,childset(thisgen)) set(allgen,union(allgen,thisgen)) set(gen,add(gen,1)) } set(newgen,childset(thisgen)) /* print out individual html files */ forindiset(allgen,person,val,thisgensize) { if (gt(worth_doing(person),1)) { newfile(save(concat (concat(dbname,key(person)),extension)),0) call do_it_all(person,1 ) } } /* list last newgen will not have any hyperlinks from the children in this set */ forindiset(newgen,person,val,thisgensize) { if (gt(worth_doing(person),1)) { newfile(save(concat (concat(dbname,key(person)),extension)),0) call do_it_all(person,0) } } /* write out a GENDEX format index */ newfile(save(concat(concat(dbname,""),"-gendex")),1) forindiset(allgen,person,val,thisgensize) { if (gt(worth_doing(person),1)) { call write_gendex_line(person) } } forindiset(newgen,person,val,thisgensize) { if (gt(worth_doing(person),1)) { call write_gendex_line(person) } } /* write out a normal index for HTML use */ newfile(save(concat(concat(dbname,""),"index.html")),1) forindiset(allgen,person,val,thisgensize) { if (gt(worth_doing(person),1)) { call write_regular_index_line(person) } } forindiset(newgen,person,val,thisgensize) { if (gt(worth_doing(person),1)) { call write_regular_index_line(person) } } } proc do_it_all(indi,linkit) { print(key(indi)) print(" ") call do_chart_head(indi) "

      " name(indi,0) "

      \n" "
      \n" call getGif(inode(indi)) "
      \n" "
      \n" if (e,birth(indi)) { "
      born: " long(e) call doAddr(e) "\n" } if (e,baptism(indi)) { "
      bapt: " long(e) call doAddr(e) "\n" } if (e,death(indi)) { "
      died: " long(e) call doAddr(e) "\n" } if (e,burial(indi)) { "
      bur.: " long(e) call doAddr(e) "\n" } call getValueCont(inode(indi),"OCCU") if (gotValue){ "
      occu: " gottenValue "\n"} call getValueCont(inode(indi),"WILL") if (gotValue){ "
      Will: " long(gottenNode) call doAddr(gottenNode)"\n"} call getValueCont(inode(indi),"PROB") if (gotValue){ "
      Probated: " long(gottenNode) call doAddr(gottenNode)"\n"} families(indi,fam,sp,spi) { if(sp){ "
      spouse: " name(sp) "\n" if (e,marriage(fam)){ "
      marr: " long(e) call doAddr(e) "\n" } if (e,birth(sp)) { "
      born: " long(e) call doAddr(e) "\n" } if (e,baptism(sp)) { "
      bapt: " long(e) call doAddr(e) "\n" } if (e,death(sp)) { "
      died: " long(e) call doAddr(e) "\n" } if (e,burial(sp)) { "
      bur.: " long(e) call doAddr(e) "\n" } call getValueCont(inode(sp),"OCCU") if (gotValue){ "
      occu: " gottenValue "\n"} } if (gt(nchildren(fam),0)){ "
      Children:\n"} children (fam,ch,famchi) { " " if (linkit){ if (gt(worth_doing(ch),1)) { "
      " name(ch) "\n" } else { /* here worth_doing must = exactly 0 or 1 print out the name and the one thing we know, but no link */ "
      " name(ch,0) if (e,birth(ch)) { " -- born: " long(e) call doAddr(e) "." } if (e,baptism(ch)) { " -- bapt: " long(e) call doAddr(e) "." } if (e,death(ch)) { " -- died: " long(e) call doAddr(e) "." } if (e,burial(ch)) { " -- bur.: " long(e) call doAddr(e) "." } "\n" } } else { "
      " name(ch,0) "
      \n" } } } "
      \n" if (parents(indi)){ call has_grandparents(indi) if (eq(0,global_gp_var)){ set(fath,father(indi)) if (fath){ "Father: " "" name(fath) "" " (" if (e,birth(fath)) { year(e)} "-" if (e,death(fath)) { year(e)} ")" "
      \n" } set(moth,mother(indi)) if (moth){ "Mother: " "" name(moth) "" " (" if (e,birth(moth)) { year(e)} "-" if (e,death(moth)) { year(e)} ")" "
      \n" } } else{ "

      Pedigree Chart

      " /* " " " \n" " " " \n" " " " \n" " " " \n" " " " \n" " " " \n" " " " \n" " " " \n" " " " \n" */ /* all this extra crappy space is apparently necessary because of the way the pagemode feature gobbles up the output buffer for lines which haven't been written out yet. It gets gobbled as whitespace*/ /* pagemode(64,120) pos(1,1)*/ "
      "
      /*	call pedout(indi,1,4,1,64)
      	print(nl())
      	pos(64,1)
      	pageout()
      	linemode()
      */
      	call pedout2(indi)
      	"
      \n" } } "
      \n" call getText(inode(indi),1) "
      \n" call getCensus(inode(indi)) "
      \n" call do_file_notes(indi) "

      \nSources for this individual: " call sour_addind(indi) "
      \n" "


      \n" "
      \n" " Homepage | \n" " Genealogy Home | \n" " Index | \n" " Explanations
      \n" "
      \n" "" personalname " " email "
      " } proc pedout (indi, gen, max, top, bot) { if (and(indi,le(gen,max))) { set(gen,add(1,gen)) set(fath,father(indi)) set(moth,mother(indi)) set(height,add(1,sub(bot,top))) set(offset,div(sub(height,8),2)) call block(indi,add(top,offset),mul(10,sub(gen,2))) set(half,div(height,2)) call pedout(fath,gen,max,top,sub(add(top,half),1)) call pedout(moth,gen,max,add(top,half),bot) } } proc do_chart_head(indi){ "" "" name(indi,0) " Family" "" "\n" } proc block (indi, row, col) { print(".") set(row,add(3,row)) set(col,add(3,col)) pos(row,col) "" name(indi) "" set(row,add(row,1)) pos(row,col) set (e,birth(indi)) if (e){ " b. " long(e)} set(row,add(row,1)) pos(row,col) set (e,death(indi)) if (e){ " d. " long(e)} set(row,add(row,1)) pos(row,col) } proc doname (indi) { if(indi){ "" name(indi) " (" set (e,birth(indi)) if (e){short(e)} " - " set (e,death(indi)) if (e){short(e)} ")" } } proc getText (root, paragraph) { if (root) { fornodes (root, node) { if (not (strcmp ("TEXT", tag (node)))) { if (paragraph) { "\n\n" set (paragraph, 0) } call values (node) "\n\n

      " } } } } proc getGif (root) { if (root) { fornodes (root, node) { if (not (strcmp ("OBJE", tag (node)))) { "

      \n" call getValueCont (node,"TITL") if (gotValue){ set (title,save(gottenValue)) } call getValueCont (node,"FILE") if (gotValue){ set (file,save(gottenValue)) } "\""
      " title "
      " "
      \n" } } } } proc getCensus (root) { if (root) { fornodes (root, node) { if (not (strcmp ("CENS", tag (node)))) { "Census: " long(node) "
      \n" } } } } proc values (root) { if (root) { if (strlen (value (root))) { "\n" value (root) } fornodes (root, node) { if (not (strcmp ("CONT", tag (node)))) { if (strlen (value (node))) { "\n" value (node) } } } } } proc doAddr(event) { fornodes(event, subnode) { if (eq(0,strcmp("PLAC", tag(subnode)))) { fornodes(subnode, subnode2) { if (eq(0,strcmp("ADDR", tag(subnode2)))) { ", at " value(subnode2) }}}} } proc getValueCont (root, t) { set (gotValue, 0) if (root) { fornodes (root, node) { if (and (not (gotValue), not (strcmp (tag (node), t)))) { set (gotValue, 1) set (gottenNode, node) set (gottenValue, save (value (node))) fornodes (node, subnode) { if (not (strcmp ("CONT", tag (subnode)))) { if (strlen (value (subnode))) { set (gottenValue, save (concat (gottenValue, concat ("\n", value (subnode))))) } } } } } } } /* sour_addind() adds the sources referenced for this individual */ proc sour_addind(i) { table(sour_table) list(sour_list) /* first get all the sources in the INDI record */ traverse(root(i), m, l) { if (nestr("SOUR", tag(m))) { continue() } set(v, value(m)) if (eqstr("", v)) { continue() } if(reference(v)) { if (ne(0, lookup(sour_table, v))) { continue() } set(v, save(v)) insert(sour_table, v, 1) v " " } } /* now get all the sources in the FAM records where this person is a spouse */ families(i,fam,sp,spi) { traverse(root(fam), m, l) { if (nestr("SOUR", tag(m))) { continue() } set(v, value(m)) if (eqstr("", v)) { continue() } if(reference(v)) { if (ne(0, lookup(sour_table, v))) { continue() } set(v, save(v)) insert(sour_table, v, 1) v " " } } } } proc write_gendex_line(person) { set(separator,"|") dbname key(person) extension separator surname(person) separator givens(person) " /" surname(person) "/" /* fullname(person,0,1,110)*/ separator if (e,birth(person)) { date(e)} separator if (e,birth(person)) { place(e)} separator if (e,death(person)) { date(e)} separator if (e,death(person)) { place(e)} separator "\n" } proc write_regular_index_line(person) { "" fullname(person,0,0,110) "" " (" if (e,birth(person)) { year(e)} "-" if (e,death(person)) { year(e)} ")" "
      \n" } proc has_grandparents(indi) { set(global_gp_var,0) set(fath,father(indi)) if (parents(fath)){ set(global_gp_var,1) } set(moth,mother(indi)) if (parents(moth)){ set(global_gp_var,1) } } proc do_file_notes(person) { set (done_once,0) fornotes(inode(person),note){ set (i, index(note,"FILE:",1)) if (gt(i,0)){ set(what,save(substring(note,add(i,6),strlen(note)))) set (i, index(what," ",1)) set(descrip,save(substring(what,1,i))) /* now get and flatten the file name */ set (i, index(what,"FAMHIST/",1)) set (fname,save(substring(what,add(i,strlen("FAMHIST/")),strlen(what))))o set (slash, index(fname,"/",1)) while (gt(slash,0)){ set(fnameb,save(concat(concat(substring(fname,1,sub(slash,1)),"_"), substring(fname,add(slash,1),strlen(fname))))) set(fname,fnameb) set (slash, index(fname,"/",1)) } set (slash, index(fname,".",1)) while (gt(slash,0)){ set(fnameb,save(concat(concat(substring(fname,1,sub(slash,1)),"_"), substring(fname,add(slash,1),strlen(fname))))) set(fname,fnameb) set (slash, index(fname,".",1)) } if (done_once) { /* this isn't the first time */ " | " /* simple separator */ } else { "More information: " set(done_once,1)} "" descrip "\n" } } } /* this function helps us to not print out a whole www page for someone that I don't know anything about except for maybe the name. return a 1 if I know one simple fact, and a 0 if I don't know anything, and a bigger number if I know something more complicated about them.*/ func worth_doing(child) { set (worth, 0) if (birth(child)) { set (worth,add(worth,1)) } if (baptism(child)) { set (worth,add(worth,1)) } if (death(child)) { set (worth,add(worth,1)) } if (burial(child)) {set (worth,add(worth,1)) } if (gt(nfamilies(child),0)) { return(10) } call getValueCont(inode(child),"OCCU") if (gotValue){ return(10) } call getValueCont(inode(child),"TEXT") if (gotValue){ return(10) } call getValueCont(inode(child),"WILL") if (gotValue){ return(10) } call getValueCont(inode(child),"PROB") if (gotValue){ return(10) } call getValueCont(inode(child),"OBJE") if (gotValue){ return(10) } call getValueCont(inode(child),"FILE") if (gotValue){ return(10) } call getValueCont(inode(child),"CENS") if (gotValue){ return(10) } return(worth) } proc pedout2 (indi) { /* I actually collect enough names here to do a 5generation pedigree chart, but I only print out 4 generations. */ set(fath,father(indi)) set(moth,mother(indi)) if (fath) { set(ffath,father(fath)) set(mfath,mother(fath)) if (ffath) { set(fffath,father(ffath)) set(mffath,mother(ffath)) if (fffath) { set(ffffath,father(fffath)) set(mfffath,mother(fffath)) } if (mffath) { set(fmffath,father(mffath)) set(mmffath,mother(mffath)) } } if (mfath) { set(fmfath,father(mfath)) set(mmfath,mother(mfath)) if (fmfath) { set(ffmfath,father(fmfath)) set(mfmfath,mother(fmfath)) } if (mmfath) { set(fmmfath,father(mmfath)) set(mmmfath,mother(mmfath)) } } } if (moth) { set(fmoth,father(moth)) set(mmoth,mother(moth)) if (fmoth) { set(ffmoth,father(fmoth)) set(mfmoth,mother(fmoth)) if (ffmoth) { set(fffmoth,father(ffmoth)) set(mffmoth,mother(ffmoth)) } if (mfmoth) { set(fmfmoth,father(mfmoth)) set(mmfmoth,mother(mfmoth)) } } if (mmoth) { set(fmmoth,father(mmoth)) set(mmmoth,mother(mmoth)) if (fmmoth) { set(ffmmoth,father(fmmoth)) set(mfmmoth,mother(fmmoth)) } if (mmmoth) { set(fmmmoth,father(mmmoth)) set(mmmmoth,mother(mmmoth)) } } } " |--------" call doname(fffath) "\n" " |\n" " |---------" call doname(ffath) "\n" " | |\n" " | |--------" call doname(mffath) "\n" " |\n" " |------" call doname(fath) "\n" " | |\n" " | | |--------" call doname(fmfath) "\n" " | | |\n" " | |---------" call doname(mfath) "\n" " | |\n" " | |--------" call doname(mmfath) "\n" " |\n" call doname(indi) "\n" " |\n" " | |--------" call doname(ffmoth) "\n" " | |\n" " | |---------" call doname(fmoth) "\n" " | | |\n" " | | |--------" call doname(mfmoth) "\n" " | |\n" " |------" call doname(moth) "\n" " |\n" " | |--------" call doname(fmmoth) "\n" " | |\n" " |---------" call doname(mmoth) "\n" " |\n" " |--------" call doname(mmmoth) "\n" } /* |--------bill | |---------joe | | | |--------mary | |------sam | | | | |--------fred | | | | |---------sue | | | |--------sally bill | |--------john | | | |---------jack | | | | | |--------mary | | |------jane | | |--------fred | | |---------sue | |--------sally */ /* End of Report */ lifelines-3.0.61/reports/html.ll0000700002540200244210000001374210333255456016751 0ustar prappDomain Users/* * @progname html.ll * @version 1.0 * @author Dave Close, * @category * @output HTML * @description * * Produces a set of interlinked HTML files, one for each * person in the data base, and a master name index file. Here is a report program I've been using to generate HTML to allow browsing of my data base. It produces one HTML file for each person in the data base, and a master index file with links to each of the other files. Each person's file is hyperlinked to all his direct relatives. I believe the output is standard HTML and does not use any peculiar extensions, so it should be viewable with nearly any browser. Permission is granted to anyone to use this code for any purpose. It does call the divorce() function which I added to my copy of Lifelines and posted to this list 2002 November 12. See: http://listserv.nodak.edu/cgi-bin/wa.exe?A2=ind0211b&L=lines-l&T=0&F=&S=&P=356 */ global ( page_width ) global ( left_margin ) proc main () { set ( page_width, 500 ) set ( left_margin, 0 ) indiset ( iset ) forindi ( indi, ni ) { addtoset ( iset, indi, 1 ) newfile ( concat ( key ( indi ), ".html" ), 0 ) "" nl () "" nl () "" name ( indi ) "" nl () "" nl () "" nl () "

      " name ( indi ) "

      " nl () /* person */ if ( male ( indi ) ) { "Male
      " nl () } else { "Female
      " nl () } dayformat ( 1 ) monthformat ( 1 ) dateformat ( 11 ) set ( dat, atoi ( stddate ( birth ( indi ) ) ) ) if ( ne ( dat, 0 ) ) { dayformat ( 2 ) monthformat ( 4 ) dateformat ( 8 ) "Born: " stddate ( birth ( indi ) ) ", " place ( birth ( indi ) ) "
      " nl () } else { " Birth information missing
      " nl () } dayformat ( 1 ) monthformat ( 1 ) dateformat ( 11 ) set ( dat, atoi ( stddate ( death ( indi ) ) ) ) if ( ne ( dat, 0 ) ) { dayformat ( 2 ) monthformat ( 4 ) dateformat ( 8 ) "Died: " stddate ( death ( indi ) ) ", " place ( death ( indi ) ) "
      " nl () } "
      " nl () /* parents */ set ( pa, father ( indi ) ) set ( ma, mother ( indi ) ) if ( eqstr ( key ( pa ), "" ) ) { " Father unknown
      " nl () } else { "Father: " name ( pa ) "
      " nl () } if ( eqstr ( key ( ma ), "" ) ) { " Mother unknown
      " nl () } else { "Mother: " name ( ma ) "
      " nl () } "
      " nl () /* families */ if ( gt ( nfamilies ( indi ), 0 ) ) { if ( eq ( nfamilies ( indi ), 1 ) ) { "Family:" } else { "Families:" } "" nl () families ( indi, fam, sp, num ) { "" nl () } "
      Spouse: " name ( sp ) "
      " nl () if ( marriage ( fam ) ) { "Married: " dayformat ( 1 ) monthformat ( 1 ) dateformat ( 11 ) set ( dat, atoi ( stddate ( marriage ( fam ) ) ) ) if ( ne ( dat, 0 ) ) { dayformat ( 2 ) monthformat ( 4 ) dateformat ( 8 ) stddate ( marriage ( fam ) ) ", " } else { "Date unknown, " } if ( eqstr ( place ( marriage ( fam ) ), "" ) ) { "Place unknown
      " nl () } else { place ( marriage ( fam ) ) "
      " nl () } } if ( divorce ( fam ) ) { "Divorced: " dayformat ( 1 ) monthformat ( 1 ) dateformat ( 11 ) set ( dat, atoi ( stddate ( divorce ( fam ) ) ) ) if ( ne ( dat, 0 ) ) { dayformat ( 2 ) monthformat ( 4 ) dateformat ( 8 ) stddate ( divorce ( fam ) ) ", " } else { "Date unknown, " } if ( eqstr ( place ( divorce ( fam ) ), "" ) ) { "Place unknown
      " nl () } else { place ( divorce ( fam ) ) "
      " nl () } } dayformat ( 1 ) monthformat ( 1 ) dateformat ( 11 ) set ( dsp, atoi ( stddate ( death ( sp ) ) ) ) set ( din, atoi ( stddate ( death ( indi ) ) ) ) set ( ddv, atoi ( stddate ( divorce ( fam ) ) ) ) if ( ne ( dsp, 0 ) ) { if ( lt ( dsp, din ) ) { dayformat ( 2 ) monthformat ( 4 ) dateformat ( 8 ) "Widowed: " stddate ( death ( sp ) ) "
      " nl () } } "
      " if ( eq ( nchildren ( fam ), 0 ) ) { "No children" nl () } else { "Children:
      " nl () children ( fam, child, no ) { "" name ( child ) "
      " nl () } } "
      " nl () } else { "No family information known
      " nl () } "
      Return to complete list of persons " nl () "" nl () "" nl () } newfile ( "tree.html", 0 ) "" nl () "" nl () " Persons " nl () "" nl () "" nl () "

      The following persons are recorded in this data base." nl () "After selecting any one of them, you may proceed directly to their" nl () "direct relatives through additional links, or return to this page.

      " nl () "
      " nl () namesort ( iset ) set ( n1, lengthset ( iset ) ) incr ( n1 ) incr ( n1 ) set ( n2, div ( n1, 3 ) ) forindiset ( iset, indi, a, b ) { "" surname ( indi ) ", " givens ( indi ) "
      " nl () if ( eq ( mod ( b, n2 ), 0 ) ) { "
      " nl () } } "
      " nl () } lifelines-3.0.61/reports/htmlahnen.ll0000700002540200244210000001020110352661023017736 0ustar prappDomain Users/* * @progname htmlahnen.ll * @version 2 * @author Tom Wetmore * @category * @output HTML * @description * * Generate an ahnentafel chart in HTML format */ /* Version 2, 12/31/95 */ proc main () { getindi(per, "Whose Ahnentafel do you want?") if (not(per)) { return() } set(title, concat("Ahnentafel of ", name(per, 0))) call htmlhead(title) call htmlheading(3, title) print("Ahnentafel of ", name(per), "\n") list(ilist) /* list of persons waiting to be output */ list(alist) /* ahnen numbers of those persons */ list(glist) /* generations of those persons */ table(ktab) /* table of all persons who have been output */ table(ctab) /* table of child links */ enqueue(ilist, per) /* initialize all structures */ enqueue(alist, 1) enqueue(glist, 1) set(cgen, 0) call addchild(ctab, 0, per) while(per, dequeue(ilist)) { set(ahnen, dequeue(alist)) set (tgen, dequeue(glist)) if (ne(cgen, tgen)) { "

      " call htmlstrong("Generation ") call htmlstrong(d(tgen)) "\n" set(cgen, tgen) } "

      " set(old, lookup(ktab, key(per))) if (old) { call htmlstrong(d(ahnen)) " Same as " call htmlstrong(d(old)) call htmllink(concat("#", key(per)), " link") } else { call htmlname(key(per)) print(".") insert(ktab, save(key(per)), ahnen) call htmlstrong(d(ahnen)) " " call htmlstrong(name(per, 0)) "\n" set(lst, lookup(ctab, key(per))) set(comma, 0) forlist (lst, key, n) { if (comma) { ", " } else { set(comma, 1) } call htmllink(concat("#", key), "chld") } if (par,father(per)) { enqueue(ilist, par) call addchild(ctab, per, par) enqueue(alist, mul(2, ahnen)) enqueue(glist, add(cgen, 1)) if (comma) { ", " } else { set(comma, 1) } call htmllink(concat("#", key(par)), "fath") } if (par,mother(per)) { enqueue(ilist, par) call addchild(ctab, per, par) enqueue(alist, add(1, mul(2, ahnen))) enqueue(glist, add(cgen, 1)) if (comma) { ", " } else { set(comma, 1) } call htmllink(concat("#", key(par)), "moth") } if (e, birth(per)) { "
      b. " long(e) "\n" } if (e, death(per)) { "
      d. " long(e) "\n" } } "\n" } call htmltail() } proc addchild (ctab, per, par) { set(lst, lookup (ctab, key(par))) if (not(lst)) { list(lst) if (per) { setel(lst, 1, save(key(per))) } insert(ctab, save(key(par)), lst) } else { setel(lst, add(1, length(lst)), save(key(per))) } } proc htmlhead (title) { "" title "\n\n" } proc htmltail () { "\n\n" } proc htmlstrong (str) { "" str "" } proc htmllink (href, link) { "" link "" } proc htmlname (name) { "" } proc htmlheading (lev, head) { "" head "\n" } lifelines-3.0.61/reports/htmlfam.ll0000700002540200244210000001024310076661057017430 0ustar prappDomain Users/* * @progname htmlfam.ll * @version 3 * @author Tom Wetmore (ttw@shore.net) * @category * @output HTML * @description * * output family group summaries in HTML format */ /* third draft -- 12/27/95 -- Tom Wetmore -- ttw@shore.net */ global(pert) /* person table */ global(showf) /* families that have been shown */ proc main () { getindi(per0, "Who do you want to start with?") set(fam0, parents(per0)) list(perq) list(famq) table(pert) list(lst) insert(pert, save(key(per0)), lst) table(showf) enqueue(perq, per0) while (per, dequeue(perq)) { if (fam, parents(per)) { if (per, husband(fam)) { call makelink(per, fam) enqueue(perq, per) } if (per, wife(fam)) { call makelink(per, fam) enqueue(perq, per) } } } call showhead() call showper(per0) enqueue(famq, fam0) while (fam, dequeue(famq)) { if (not(lookup(showf, key(fam)))) { call showfam(fam) insert(showf, save(key(fam)), 1) } set(husb, husband(fam)) set(wife, wife(fam)) if (fam, parents(husb)) { enqueue(famq, fam) } if (fam, parents(wife)) { enqueue(famq, fam) } } call showtail() } proc makelink (per, fam) { if (lst, lookup(pert, key(per))) { call enqueueifnew(lst, key(fam)) } else { list(lst) enqueue(lst, save(key(fam))) insert(pert, save(key(per)), lst) } } proc enqueueifnew (lst, key) { forlist (lst, el, num) { if (eqstr(key, el)) { return() } } enqueue(lst, save(key)) } proc showper (per) { call showone(per) families(per, fam, sp, num) { call showone(sp) call showmarr(fam) call showchildren(fam) } "


      \n" } proc showfam (fam) { "\n" call showone(husband(fam)) call showone(wife(fam)) call showmarr(fam) call showchildren(fam) "
      \n" } proc showone (per) { if (not(per)) { return() } "

      "name(per, 0)"\n" if (evt, birth(per)) { "
      born "long(evt)"\n" } if (evt, death(per)) { "
      died "long(evt)"\n" } set(fam, parents(per)) if (par, father(per)) { "
      father " call showlink(par, key(fam)) "\n" } if (par, mother(per)) { "
      mother " call showlink(par, key(fam)) "\n" } } proc showmarr (fam) { if (evt, marriage(fam)) { "
      married "long(evt)"\n" } } proc showchildren (fam) { if (eq(0, nchildren(fam))) { return() } "

      Children\n" children (fam, per, num) { "
      " d(num) " " call showchild(per) "\n" } } proc showlink (per, key) { set(lst, lookup(pert, key(per))) if (lst) { "" } name(per, 0) if (lst) { "" } call showevents(per) } proc showchild (per) { if (lst, lookup(pert, key(per))) { call showlinks(per, lst) } else { name(per, 0) call showevents(per) } } proc showlinks (per, lst) /* LOOSEEND -- THIS ROUTINE NEEDS MORE */ { if (eq(0, length(lst))) { call showlink(per, "start") } else { call showlink(per, getel(lst, 1)) } } proc showevents (per) { set(evt, birth(per)) if (and(evt, year(evt))) { ", b " year(evt) } set(evt, death(per)) if (and(evt, year(evt))) { ", d " year(evt) } } proc showhead () { "Genealogy Page\n\n" "\n" } proc showtail () { "\n" } lifelines-3.0.61/reports/igi-filter.ll0000700002540200244210000001033410076661057020034 0ustar prappDomain Users/* * @progname igi-filter.ll * @version 1 of 1993-02-15 * @author Jim Eggert (eggertj@atc.ll.mit.edu) * @category * @output GedCom * @description * * Write GedCom of families/events containing given TAG/VALUE * This program is meant to help you filter out useful data from a big IGI download. You specify what GEDCOM tag you want to look at, and what value you want to accept. Then it writes a GEDCOM file that contains only those IGI entries that have what you want. So for example, suppose you have downloaded all the Hammer families from the IGI, but are really interested only in those from Harthausen. In this case, you specify PLAC as the GEDCOM tag, and Harthausen as the value, and you get a GEDCOM file with only the Harthausen Hammer families. The program will look at every GEDCOM level to find the sought tag, in both individual and family records. For NAME and PLAC entries, all name or components are searched for a match. A match is defined as string equality for all provided or available characters, ignoring case. Thus entering Harth as a desired value will match Harthausen, Harthofen, and Hart as well. Once a matching value is found, the program will include in its output the whole matching "family" from the IGI data. (An IGI "family" is really just an event.) This program will run on non-IGI data also. For non-IGI data, it will generally include somewhat more people in its output file that you might expect. No big deal. igi-filter - a LifeLines program to filter IGI data by Jim Eggert (eggertj@atc.ll.mit.edu) Version 1, 15 February 1993 */ global(this_one) global(the_tag) global(the_value) global(the_length) global(name_tag) global(plac_tag) proc check_value(a_string) { set(a_length,strlen(a_string)) if (gt(a_length,the_length)) { if (not(strcmp(upper(trim(a_string,the_length)),the_value))) { set(this_one,1) } } else { if (not(strcmp(trim(the_value,a_length),upper(a_string)))) { set(this_one,1) } } } proc check_values(root) { list(nlist) traverse(root,node,level) { if (and(not(this_one),not(strcmp(tag(node),the_tag)))) { if (name_tag) { extractnames(node,nlist,n,ns) forlist(nlist,n0,nnum) { call check_value(n0) } } elsif (plac_tag) { extractplaces(node,nlist,n) forlist(nlist,n0,nnum) { call check_value(n0) } } else { call check_value(value(node)) } } } } proc main() { indiset(accept) getstrmsg(the_tag,"Enter tag for filtering:") set(the_tag,save(upper(the_tag))) if (not(strcmp(the_tag,"NAME"))) { set(name_tag,1) } else { set(name_tag,0) } if (not(strcmp(the_tag,"PLAC"))) { set(plac_tag,1) } else { set(plac_tag,0) } getstrmsg(the_value,"Enter value to be accepted:") set(the_value,save(upper(the_value))) set(the_length,strlen(the_value)) set(accepted,0) forindi(person,pnum) { set(this_one,0) call check_values(inode(person)) if (this_one) { addtoset(accept,person,0) set(accepted,add(accepted,1)) } } print("Passed ") print(d(accepted)) print(" of ") print(d(pnum)) print(" individuals.\n") set(accepted,0) forfam(family,fnum) { set(this_one,0) call check_values(fnode(family)) if (this_one) { set(accepted,add(accepted,1)) if (person,husband(family)) { addtoset(accept,person,1) } elsif (person,wife(family)) { addtoset(accept,person,1) } else { children(family,person,pnum) { if (eq(pnum,1)) { addtoset(accept,person,2) } } } } } print("Passed ") print(d(accepted)) print(" of ") print(d(fnum)) print(" families.\nWriting GEDCOM file...") set(accept,union(accept,spouseset(accept))) set(accept,union(accept,parentset(accept))) set(accept,union(accept,childset(accept))) gengedcom(accept) "0 TRLR\n" print("done") } lifelines-3.0.61/reports/igi-import.ll0000700002540200244210000002471110076661057020065 0ustar prappDomain Users/* * @progname igi-import.ll * @version 1.0 * @author baud@research.att.com * @category * @output GedCom * @description * * Convert igi gedcom to lifelines-standard gedcom * * Igi gedcom contains a single NOTE record for each source, either * on the INDI for a BIRT/CHR or on one of the spouses for a MARR. * This report rearranges the source information into a SOUR record * with the associated NOTE text attached to the appropriate source. * * Convert UPPERCASE surnames to upper- and lowercase. Try to * figure out von's and such, but otherwise simply capitalize the * first letters. Remove periods used for abbreviations. * * Dates of the form have the angle brackets stripped. * * Note that this report converts INDI/FAM records to INDI/FAM * records, providing *conclusions* for your database. It would * be quite easy, but not of interest to me, to produce a similar * report that produces EVEN records, providing *evidence* for your * database. * * -> Use this report on igi gedcom data *before* igi-merge. <- * * 12 NOV 1994 (3.0.1) baud@research.att.com */ proc main () { getstrmsg (msg, "IGI Version [default 3.02/1994]?") if (streq (msg, "")) { set (igiversion, "3.02") set (igidate, "1994") } else { if (i, index (msg, "/", 1)) { set (igiversion, save (trim (msg, sub (i, 1)))) set (igidate, save (cut (msg, add(i, 1)))) } else { set (igiversion, save (msg)) set (igidate, "") } } "0 HEAD \n" "1 SOUR LIFELINES\n" "2 VER 3.0.1\n" "2 NAME IGI-IMPORT REPORT\n" "1 DEST LIFELINES\n" "2 VER 3.0.1\n" "1 DATE " date (gettoday ()) "\n" "1 COPR Copyright " date (gettoday ()) ". Permission is granted to repro" "duce any subset\n2 CONT of the data contained herein under the condit" "ion that this copyright\n2 CONT notice is preserved, that the origina" "l source citations referenced\n2 CONT in the subset are included, and" " that the submitter of this file is\n2 CONT credited with original au" "thorship as appropriate.\n" "1 CHAR ASCII\n" "0 @S1@ SOUR\n" "1 NAME International Genealogical Index\n" "1 PUBR The Church of Jesus Christ of Latter-day Saints\n" if (strlen (igiversion)) { "1 VER " igiversion "\n" } if (strlen (igidate)) { "1 DATE " igidate "\n" } print ("Processing nodes ...\n") forfam (fam, fn) { print ("f") igiimport (fam) } "0 TRLR \n" } func igiimport (fam) { if (marriage (fam)) { if (note, subnode (inode (husband (fam)), "NOTE")) { deletenode (note) } elsif (note, subnode (inode (wife (fam)), "NOTE")) { deletenode (note) } set (parentsourcetext, "See marriage record.") catnode (marriage (fam), sourcifyNote (note)) } else { children (fam, indi, nc) { if (note, subnode (inode (indi), "NOTE")) { deletenode (note) } set (childsourcetext, 0) if (birth (indi)) { set (childsourcetext, "See birth record.") catnode (birth (indi), sourcifyNote (note)) } if (baptism (indi)) { set (childsourcetext, "See christening record.") catnode (baptism (indi), sourcifyNote (note)) } reformatnames (inode (indi), childsourcetext) reformatdates (inode (indi)) gedcomnode (inode (indi)) set (parentsourcetext, save (concat ("See ", concat (cond (female (indi), "daughter", "son"), concat (cond (strlen (givens (indi)), " ", ""), concat (givens (indi), concat ("'s ", cond (birth (indi), "birth record.", "christening record.")))))))) } } if (indi, husband (fam)) { reformatnames (inode (indi), parentsourcetext) reformatdates (inode (indi)) gedcomnode (inode (indi)) } if (indi, wife (fam)) { reformatnames (inode (indi), parentsourcetext) reformatdates (inode (indi)) gedcomnode (inode (indi)) } reformatdates (fnode (fam)) gedcomnode (fnode (fam)) return (0) } func sourcifyNote (node) { if (node) { set (text, values (node)) while (i, index (text, "#:", 1)) { set (text, save (concat3 (trim (text, sub (i, 1)), "Number", cut (text, add (i, 2))))) } if (streq (substring (text, sub (strlen (text), 5), strlen (text)), "Number")) { set (text, save (concat (text, " unknown"))) } set (text, save (concat3 ("International Genealogical Index, ", text, "."))) set (node, createnodes ("SOUR", text)) catnode (node, createnode ("SOUR", "@S1@")) } else { set (node, createnode ("SOUR", "@S1@")) } return (node) } /* common import/export functions */ func cond (x, a, b) { if (x) { return (a) } else { return (b) } } func gedcomnode (root) { traverse (root, node, level) { d (level) if (x, xref (node)) { " " x } if (x, tag (node)) { " " x } if (x, value (node)) { " " x } "\n" } return (0) } func denull (alist) { list (blist) forlist (alist, a, an) { if (a) { enqueue (blist, a) } } return (blist) } func reformatdates (root) { traverse (root, node, level) { if (streq (tag (node), "DATE")) { if (v, value (node)) { if (and (eq (index (v, "<", 1), 1), eq (index (v, ">", 1), strlen (v)))) { replacenode (createnode ("DATE", save (substring (v, 2, sub (strlen (v), 1)))), subnode (node, "DATE")) } } } } return (0) } func reformatnames (root, sourcetext) { list (namelist) list (surnamelist) list (choppedsurnamelist) list (newchoppedsurnamelist) if (namenode, subnode (root, "NAME")) { extractnames (namenode, namelist, nameN, surnameN) set (lastnamenode, namenode) forlist (namelist, s, sn) { set (s, strremove (s, ".")) set (s, strremove (s, "_")) setel (namelist, sn, s) } enqueue (surnamelist, getel (namelist, surnameN)) while (surname, dequeue (surnamelist)) { set (choppedsurnamelist, strchop (surname, " ")) forlist (choppedsurnamelist, s, sn) { if (streq ("VON", s)) { enqueue (newchoppedsurnamelist, s) } elsif (streq ("DER", s)) { enqueue (newchoppedsurnamelist, s) } elsif (and (eq (index (s, "(", 1), 1), eq (index (s, ")", 1), strlen (s)))) { enqueue (surnamelist, save (substring (s, 2, sub (strlen (s), 1)))) } else { enqueue (newchoppedsurnamelist, save (capitalize (lower (s)))) } } set (newsurname, strjoin (newchoppedsurnamelist, " ")) if (strlen (newsurname)) { if (i, index (newsurname, "Mc ", 1)) { set (newsurname, save (concat (trim (newsurname, add (i, 1)), cut (newsurname, add (i, 3))))) } set (newsurname, save (concat3 ("/", newsurname, "/"))) } setel (namelist, surnameN, newsurname) set (newnamenode, createnode ("NAME", strjoin (namelist, " "))) addnode (newnamenode, parent (lastnamenode), lastnamenode) if (sourcetext) { catnode (newnamenode, createnode ("SOUR", sourcetext)) } set (lastnamenode, newnamenode) } deletenode (namenode) } return (0) } func streq (x, y) { return (not (strcmp (x, y))) } func createnodes (tag, text) { set (text, trimspaces (text)) if (le (strlen (text), 72)) { return (createnode (tag, text)) } else { list (textlist) while (gt (strlen (text), 72)) { set (n, 1) if (i, index (text, " ", n)) { set (j, i) } else { set (j, add (strlen (text), 1)) } while (and (i, lt (i, 73))) { incr (n) set (j, i) set (i, index (text, " ", n)) } enqueue (textlist, save (trim (text, sub (j, 1)))) set (text, save (cut (text, add (j, 1)))) } if (gt (strlen (text), 0)) { enqueue (textlist, text) } set (root, createnode (tag, dequeue (textlist))) set (lastnode, 0) forlist (textlist, text, tn) { set (node, createnode ("CONT", text)) addnode (node, root, lastnode) set (lastnode, node) } return (root) } } func trimspaces (text) { set (ss, 0) set (s0, 1) set (sn, strlen (text)) while (and (le (s0, sn), streq (substring (text, s0, s0), " "))) { set (ss, 1) incr (s0) } while (and (le (s0, sn), streq (substring (text, sn, sn), " "))) { set (ss, 1) decr (sn) } if (ss) { return (save (substring (text, s0, sn))) } else { return (text) } } func catnode (root, newnode) { if (root) { set (lastnode, 0) fornodes (root, node) { set (lastnode, node) } addnode (newnode, root, lastnode) } return (0) } func strchop (s, d) { list (slist) set (dn, strlen (d)) if (strlen (s)) { set (n, 1) set (s0, 1) while (sn, index (s, d, n)) { enqueue (slist, save (substring (s, s0, sub (sn, 1)))) set (s0, add (sn, dn)) incr (n) } enqueue (slist, save (cut (s, s0))) } return (slist) } func strjoin (slist, d) { forlist (slist, s, sn) { if (not (strlen (str))) { set (str, s) } elsif (strlen (s)) { set (str, save (concat3 (str, d, s))) } } return (str) } func subnode (root, tag) { if (root) { fornodes (root, node) { if (streq (tag (node), tag)) { return (node) } } } return (0) } func subnodes (root, tag) { list (nodelist) if (root) { fornodes (root, node) { if (streq (tag (node), tag)) { enqueue (nodelist, node) } } } return (nodelist) } func replacenode (newnode, oldnode) { if (newnode) { if (root, parent (oldnode)) { addnode (newnode, root, oldnode) deletenode (oldnode) } } return (0) } func concat3 (x, y, z) { return (concat (x, concat (y, z))) } func cut (s, n) { return (substring (s, n, strlen (s))) } func values (root) { if (root) { set (str, value (root)) fornodes (root, node) { if (not (str)) { set (str, value (node)) } elsif (strlen (value (node))) { set (str, save (concat3 (str, " ", value (node)))) } } return (str) } else { return (0) } } func strremove (s, d) { if (strlen (s)) { while (i, index (s, d, 1)) { set (s, save (concat (trim (s, sub (i, 1)), cut (s, add (i, 1))))) } } return (s) } lifelines-3.0.61/reports/igi-merge.ll0000700002540200244210000004675110076661057017662 0ustar prappDomain Users/* * @progname igi-merge.ll * @version 4.0 * @author Eggert * @category * @output GEDCOM * @description This program helps you merge IGI data. IGI data consists of "families" which are actually events. A real family may be documented by several events in the IGI database, and thus be represented by several "families". This program will help you to locate and merge those "families" back into real families again. igi-merge - a LifeLines IGI database merging program by Jim Eggert (eggertj@atc.ll.mit.edu) Version 1, 2 February 1993 Requires LifeLines 2.3.3 or later. Version 2, 17 February 1993 bug fix, better suggestions Version 3, 15 March 1993 more tunable suggestions, added windup and restart Version 4, 9 November 1994 Requires LifeLines 3.0.1 or later. Minor windup bug fix. The program locates candidate "families" to be merged by comparing the soundex, double initials of husband to husband and wife to wife, and event years. (Double initials are like "JO" for John. Any double initials are allowed to match. Hence George Michael will match Mike, and Betty Lou will match Lois Amelia.) If the comparison indicates a possible match, the program prompts you for approval to merge. If you answer with y or Yes or yazbotchit, the program will merge those two families, otherwise it will not. The two husbands will be merged together, as will the two wives. The comparison is made following a strictness code entered at the beginning of the program execution. The user is prompted for the strictness level, which means more precisely: 1 soundexes and double initials must match 2 soundexes must match 3 soundexes and double initials must match, but empty soundexes match anything 4 soundexes must match, but empty soundexes match anything 5 double intitials must match 6 nothing needs match I usually use the strictness in a multiple-pass method: First I run igi-merge with strictness 1. I import the resulting GEDCOM file into an empty LL database, and run igi-merge with strictness 2 or 3. And so on until I am satisfied. In any case, the event years are always used for declaring matches. Two families match only if their event years are within forty years of each other. If the events are marriage events, however, they must be within five years of each other. If a family has more than one event associated with it (for partially merged IGI data, for example), any marriage event has precedence. After families are merged, the program puts the children in birth order, and attempts to locate children who are really the same. It prompts you for approval to merge any two children born or christened in the same year. Any merged individuals will retain one copy of each name variant and of each variant sex. (There shouldn't be any of the latter!) Other data, such as birth and marriage events etc, are simply copied; duplicate information may therefore be retained after the merge. You are urged to edit the resulting file to look for and possibly delete such duplication. The resulting data is written to a GEDCOM file. You may read this back into a LifeLines database if you wish. If you run out of time (because, for example, you are merging ten thousand families), you can invoke windup. If you answer the family merge question with w (or windup, or Whatever), the program will act as if you answered all the remaining queries negatively. If you want to be really fancy, before you issue the w command, write down the families that you are being queried about. Then later you can read the resulting GEDCOM file into a new LifeLines database, and start up igi-merge again. When asked what comparison strictness to use, answer with zero. You will be prompted for the two families to restart the program at. Make sure that you enter the top family first, otherwise it won't work. The program will then resume your previous igi-merge session where you had left off. With windup and restart, you don't really have to have a single block of time to be able to merge a large dataset. The program does some rudimentary checking to see if the source data really is IGI-like. If not, it complains, but keeps on running anyway. Because it only writes a GEDCOM file, this program can't corrupt your database, so don't worry. The user interface depends on the size of the LifeLines screen, I have marked the sensitive lines with a commented # */ global(famged) global(gedsex) global(names) global(ptable) global(event_year) global(event_string) global(event_type) /* 1=birth, 2=baptism, 3=marriage, and in the future 4=death, 5=burial */ global(compare_level) global(windup) func get_yesno(prompt) { set(yes,0) set(windup,0) getstrmsg(yesno,prompt) if (gt(strlen(yesno),0)) { if (not(strcmp(upper(trim(yesno,1)),"Y"))) { set(yes,1) } if (not(strcmp(upper(trim(yesno,1)),"W"))) { set(windup,1) } } return(yes) } /* Note that marriage events have priority! */ proc get_event(family) { set(event_year,0) if (e,marriage(family)) { extractdate(e,day,month,event_year) set(event_string,"m. ") set(event_type,3) } else { children(family,child,cnum) { if (eq(cnum,1)) { if (e,birth(child)) { set(event_string,concat(name(child)," b. ")) extractdate(e,day,month,event_year) set(event_type,1) } elsif (e,baptism(child)) { set(event_string,concat(name(child)," c. ")) extractdate(e,day,month,event_year) set(event_type,2) } } } } if (not(event_year)) { /* print("Event year not found.\n") */ set(event_string,concat(event_string,"date unknown")) } else { set(event_string,concat(event_string,d(event_year))) } if (p,place(e)) { set(event_string,concat(event_string," ")) set(event_string,concat(event_string,p)) } set(event_string,save(trim(event_string,73))) /*#*/ } proc write_ged_indi(person,newperson,ftag,famkey) { if (not(person)) { break() } if (lookup(ptable,key(person))) { print("Database doesn't look like IGI data.\n") print(" - ", key(person), " ", name(person), "\n") } insert(ptable,save(key(person)),famkey) set(n,inode(person)) if (newperson) { while (dequeue(names)) { "" } set(gedsex,"X") } traverse(n,node,level) { if (level) { set(t,tag(node)) if (and(strcmp(t,"FAMS"),strcmp(t,"FAMC"))) { set(write_line,1) if (not(strcmp(t,"NAME"))) { if (newperson) { enqueue(names,save(value(node))) } else { set(thisname,save(value(node))) forlist(names,prevname,pnum) { if (not(strcmp(thisname,prevname))) { set(write_line,0) } } if (write_line) { enqueue(names,thisname) } } } if (not(strcmp(t,"SEX"))) { if (newperson) { set(gedsex,save(value(node))) } elsif (not(strcmp(gedsex,value(node)))) { set(write_line,0) } else { set(gedsex,save(value(node))) } } if (write_line) { d(level) " " t " " value(node) "\n" } } elsif (newperson) { d(level) " " t " @" famkey "@\n" } } elsif (newperson) { "0 " xref(node) " INDI\n" } } if (newperson) { enqueue(famged,ftag) enqueue(famged,save(key(person))) enqueue(famged,"@\n") } } proc write_ged_fam(fam) { if (not(fam)) { break() } set(n,fnode(fam)) traverse(n,node,level) { if (not(level)) { continue() } if (eq(level,1)) { set(levelonetag,save(tag(node))) } if (and(and(strcmp(levelonetag,"HUSB"), strcmp(levelonetag,"WIFE")), strcmp(levelonetag,"CHIL"))) { enqueue(famged,save(d(level))) enqueue(famged," ") enqueue(famged,save(tag(node))) enqueue(famged," ") enqueue(famged,save(value(node))) enqueue(famged,"\n") } } } func compare(aint,bint) { if (lt(aint,bint)) { return(neg(1)) } elsif (gt(aint,bint)) { return(1) } else { return(0) } } proc bubblesort(alist,ilist) { /* print("bubblesorting list of length ") print(d(length(alist))) */ /* print(" entries.\n") */ while (dequeue(ilist)) { "" } forlist(alist,ael,index) { enqueue(ilist,index) } while (gt(index,0)) { set(bubblepos,index) set(bubbleindex,getel(ilist,bubblepos)) set(abubble,getel(alist,bubbleindex)) set(movedup,0) set(comparison,neg(1)) while (and(gt(bubblepos,1),lt(comparison,0))) { set(bubbleupindex,getel(ilist,sub(bubblepos,1))) set(bubbleup,getel(alist,bubbleupindex)) set(comparison,compare(abubble,bubbleup)) if (lt(comparison,0)) { setel(ilist,bubblepos,bubbleupindex) decr(bubblepos) set(movedup,1) } } if (eq(movedup,0)) { set(comparison,1) while(and(lt(bubblepos,length(alist)),gt(comparison,0))) { set(bubbledownindex,getel(ilist,add(bubblepos,1))) set(bubbledown,getel(alist,bubbledownindex)) set(comparison,compare(abubble,bubbledown)) if (gt(comparison,0)) { setel(ilist,bubblepos,bubbledownindex) incr(bubblepos) } } } setel(ilist,bubblepos,bubbleindex) if (eq(movedup,0)) { decr(index) } } } func sound_compare(asound,bsound) { if (and(strlen(asound),strlen(bsound))) { return(strcmp(asound,bsound)) } elsif (ge(compare_level,3)) { return(0) } else { return(1) } } func initial_compare(namelist1,namelist2,len2) { forlist(namelist2,this2,n) { if (ge(n,len2)) { break() } set(init2,save(upper(trim(this2,2)))) forlist(namelist1,init1,m) { if (not(strcmp(init1,init2))) { return(0) } } } return(1) } global(hsound) global(wsound) global(hnamelist) global(wnamelist) global(hexists) global(wexists) func names_compare(fam2) { list(namelist) set(hsound2,"") if (and(hexists,husband(fam2))) { if (lt(compare_level,5)) { set(hsound2,save(soundex(husband(fam2)))) if (not(strcmp(hsound2,"Z999"))) { set(hsound2,"") } if (s,sound_compare(hsound,hsound2)) { return(s) } } if (mod(compare_level,2)) { extractnames(inode(husband(fam2)),namelist,n1,n2) if (s,initial_compare(hnamelist,namelist,n2)) { return(s) } } } elsif (le(compare_level,2)) { return(1) } if (and(wexists,wife(fam2))) { if (lt(compare_level,5)) { set(wsound2,save(soundex(wife(fam2)))) if (not(and(strcmp(wsound2,"Z999"), strcmp(wsound2,hsound2)))) { set(wsound2,"") } if (s,sound_compare(wsound,wsound2)) { return(s) } } if (mod(compare_level,2)) { extractnames(inode(wife(fam2)),namelist,n1,n2) if (n,initial_compare(wnamelist,namelist,n2)) { return(n) } } } elsif (le(compare_level,2)) { return(1) } return(0) } proc main() { list(husbands) list(wives) list(childlist) list(childyear) list(childindex) list(childevent) list(names) list(hnamelist) list(wnamelist) table(ftable) table(ptable) list(famged) set(compare_level,neg(1)) while(or(lt(compare_level,0),gt(compare_level,6))) { getintmsg(compare_level, "Enter comparison strictness (0=restart,1=very...6=not at all)") if (eq(compare_level,0)) { set(restart,1) print("Select first family to restart from") getfam(rfam) set(rfkey,key(rfam)) print("Select second family to restart from") getfam(rfam) set(rfkey2,key(rfam)) getintmsg(compare_level, "Enter real comparison strictness (1=very...6=not at all)") } } set(num_merged,0) forfam(fam,fnum) { "" } print("Trying to merge ", d(fnum), " families.\n") set(next_fnum,0) set(windup,0) forfam(fam,fnum) { if (ge(fnum,next_fnum)) { print(d(fnum), " ") incr(next_fnum) } set(famkey,save(key(fam))) if (lookup(ftable,famkey)) { continue() } insert(ftable,famkey,1) enqueue(famged,"0 @") enqueue(famged,famkey) enqueue(famged,"@ FAM\n") if (h,husband(fam)) { enqueue(husbands,save(key(h))) set(hexists,1) } else { set(hexists,0) } if (w,wife(fam)) { enqueue(wives,save(key(w))) set(wexists,1) } else { set(wexists,0) } children(fam,child,cnum) { enqueue(childlist,save(key(child))) } call write_ged_fam(fam) if (and(not(windup), or(and(restart,not(strcmp(key(fam),rfkey))), and(not(restart),or(h,w))))) { set(hname,save(name(h))) set(wname,save(name(w))) set(hsound,save(soundex(h))) if (not(strcmp(hsound,"Z999"))) { set(hsound,"") } set(wsound,save(soundex(w))) if (not(and(strcmp(hsound,wsound), strcmp(wsound,"Z999")))) { set(wsound,"") } if (mod(compare_level,2)) { if (h) { extractnames(inode(h),hnamelist,n1,n2) forlist(hnamelist,this,n) { setel(hnamelist,n,save(upper(trim(this,2)))) } while (le(n2,n1)) { set(junk,pop(hnamelist)) incr(n2) } } if (w) { extractnames(inode(w),wnamelist,n1,n2) forlist(wnamelist,this,n) { setel(wnamelist,n,save(upper(trim(this,2)))) } while (le(n2,n1)) { set(junk,pop(wnamelist)) incr(n2) } } } call get_event(fam) set(year,event_year) set(fevent_type,event_type) set(fevent,event_string) forfam(fam2,fnum2) { if (or(windup, and(or(not(restart),strcmp(key(fam2),rfkey2)), or(restart,le(fnum2,fnum))))) { continue() } set(restart,0) set(famkey2,save(key(fam2))) if (not(lookup(ftable,famkey2))) { if (not(names_compare(fam2))) { call get_event(fam2) set(ydiff,sub(event_year,year)) if (lt(ydiff,0)) { set(ydiff,neg(ydiff)) } /* if soundexes are identical, and event years are close, ask user */ set(askit,0) if (and(eq(event_type,3),eq(event_type,3))) { if (lt(ydiff,5)) { set(askit,1) } } elsif (lt(ydiff,40)) { set(askit,1) } if (askit) { print("\n\n\n\n", hname, "\n", wname, "\n") /*#*/ print(fevent, "\n\n\n\n\n\n\n\n\n") /*#*/ print(name(husband(fam2)), "\n") print(name(wife(fam2)), "\n") print(event_string) set(yes,get_yesno("Merge these families? (y/n/w)")) print("\n") if (yes) { incr(num_merged) insert(ftable,famkey2,2) children(fam2,child,cnum) { enqueue(childlist,save(key(child))) } call write_ged_fam(fam2) enqueue(husbands,save(key(husband(fam2)))) enqueue(wives,save(key(wife(fam2)))) } elsif (windup) { print("Winding up...") } } } } } } /* write out the parents */ if (hkey,dequeue(husbands)) { set(h,indi(hkey)) call write_ged_indi(h,1,"1 HUSB @",famkey) while (hkey,dequeue(husbands)) { set(h,indi(hkey)) call write_ged_indi(h,0,"",famkey) } } if (wkey,dequeue(wives)) { set(w,indi(wkey)) call write_ged_indi(w,1,"1 WIFE @",famkey) while (wkey,dequeue(wives)) { set(w,indi(wkey)) call write_ged_indi(w,0,"",famkey) } } /* collect children birthyears */ forlist(childlist,childkey,cnum) { set(child,indi(childkey)) if (e,birth(child)) { extractdate(e,day,month,year) enqueue(childevent," b. ") } elsif (e,baptism(child)) { extractdate(e,day,month,year) enqueue(childevent," c. ") } enqueue(childyear,year) } /* sort by birthyear */ call bubblesort(childyear,childindex) set(prev_year,neg(1)) /* merge and write children */ forlist(childindex,index,inum) { set(child,indi(getel(childlist,index))) set(merge_child,0) if (and(not(windup), eq(getel(childyear,index),prev_year))) { set(merge_child,1) print("\n\n\n\n\n") /*#*/ print(prev_name, prev_event, d(prev_year)) print("\n\n\n\n\n\n\n\n\n\n\n") /*#*/ } set(prev_name,save(name(child))) set(prev_event,getel(childevent,index)) set(prev_year,getel(childyear,index)) if (merge_child) { print(prev_name, prev_event, d(prev_year)) set(yes,get_yesno("Merge these children? (y/n)")) print("\n") if (yes) { set(merge_child,2) } } if (eq(merge_child,2)) { call write_ged_indi(child,0,"",famkey) } else { call write_ged_indi(child,1,"1 CHIL @",famkey) } } /* empty out children data */ while (not(empty(childlist))) { set(e,dequeue(childlist)) set(e,dequeue(childevent)) set(e,dequeue(childyear)) set(e,dequeue(childindex)) } /* write out the family part of the GEDCOM file */ while(not(empty(famged))) { dequeue(famged) } } "0 TRLR\n" print("\nMerged ", d(num_merged), " of ", d(fnum), " families.\n") } lifelines-3.0.61/reports/igi-search.ll0000700002540200244210000001005410076661057020013 0ustar prappDomain Users/* * @progname igi-search.ll * @version 1.1 * @author Vincent Broman * @category * @output Text * @description * * prints out a list of people to look up in the IGI, * those who are closely enough related, who fall in a time range, * and whose temple work is not done. */ include( "ldsgedcom.li") /* TODO: needs a sort and handling "OF" places */ /* * indvordsdone and marrordsdone test whether all the individual (Bap/End/Sch) * or marriage (Ssp) ordinances are recorded for this individual * in the database. */ func indvordsdone( indi) { return( and( ldsbaptism( indi), ldsendowment( indi), or( ldschildsealing( indi), not( father( indi))))) } func marrordsdone( indi) { families( indi, f, sp, ctm) { if( not( ldsspousesealing( f))) { return( 0) } } return( 1) } /* return as a string the birth/christening year if known, else 0 */ func knownbirthyear( indi) { set( b, birth( indi)) if( not( b)) { set( b, baptism( indi)) } if( b) { return( save( year( b))) } return( 0) } global( thisyear) /* isdead tests whether this individual is known to be dead * or can be assumed dead by the rules for LDS temple work submission. */ func isdead( indi) { if( death( indi)) { return( 1) } if( burial( indi)) { return( 1) } if( by, knownbirthyear( indi)) { return( le( strtoint( by), sub( thisyear, 110))) } families( indi, f, sp, ctd) { if( m, marriage( f)) { if( md, year( m)) { if( le( strtoint( md), sub( thisyear, 95))) { return( 1) } } } } return( 0) } /* return the set of people who are wide-sense ancestors * of the given individual, plus the children of these wide-sense ancestors, * where a wide-sense ancestor is either the given individual himself/herself * a parent or step-parent of a wide-sense ancestor. */ func interestingforebearsof( indi) { indiset( res) addtoset( res, indi, key( indi)) set( pf, parents( indi)) if( not( pf)) { return( res) } if( h, husband( pf)) { set( res, union( res, interestingforebearsof( h))) families( h, f, sp, ctf) { if( sp) { set( res, union( res, interestingforebearsof( sp))) } children( f, ch, ctc) { addtoset( res, ch, key( ch)) } } set( hk, key( h)) } else { set( hk, "") } if( w, wife( pf)) { families( w, f, sp, cth) { /* add only husbands not the father */ if( and( sp, nestr( hk, key( sp)))) { set( res, union( res, interestingforebearsof( sp))) } else { children( f, ch, ctcc) { addtoset( res, ch, key( ch)) } } } } return( res) } proc igiord( e) { if( e) { if( v, value( e)) { v } else { if( ed, date( e)) { ed } else { " " } " " if( et, ldstemple( e)) { et } else { " " } } } } proc printigientry( indi) { if( n, name( indi)) { n " " } else { " " } "(" if( fa, father( indi)) { if( fn, name( fa)) { fn } } "/" if( mo, mother( indi)) { if( mn, name( mo)) { mn } } ") " nl() if( b, birth( indi)) { sex( indi) "B " long( b) if( c, baptism( indi)) { " and " sex( indi) "C " long( c) } } elsif( c, baptism( indi)) { sex( indi) "C " long( c) } else { sex( indi) " no B/C event " } nl() set( ba, ldsbaptism( indi)) set( en, ldsendowment( indi)) set( cs, ldschildsealing( indi)) if( or( ba, en, cs)) { call igiord( ba) "/" call igiord( en) "/" call igiord( cs) nl() } nl() } proc main() { set( thisyear, strtoint( year( gettoday()))) getindi( i, "Who's ancestors should be checked for IGI entries?") getint( fby, "First birth year of interest?") getint( lby, "Last birth year of interest?") forindiset( interestingforebearsof( i), ai, k, ctb) { if( by, knownbirthyear( ai)) { set( iby, strtoint( by)) if( and( isdead( ai), not( indvordsdone( ai)), le( fby, iby), le( iby, lby))) { by nl() call printigientry( ai) } } } } lifelines-3.0.61/reports/index.html0000700002540200244210000014575410656417424017465 0ustar prappDomain Users Report programs for use with Lifelines genealogy Software
      LifeLines stork logo

      LifeLines, second generation genealogy software
      Report Programs

      This is an overview of the report programs distributed with Lifelines. If you want more information about a program, often there are comments at the beginning of the program that talk about functionality and algorithms, that have sample output and examples of post processing commands required to properly view the results. Some programs require customization before use, for example, they might have text identifying the person who generated the report.

      2ppage
      Version 1.0; by Wetmore, Manis; output format Text, 80 cols.
      It will produce a report of all INDI's in the database, with two records printed per page. Record 1 and 2 will be on the first page.
      4gen1
      Version 1.0; by Wetmore, Manis; output format Text, 80 cols.
      select and produce a ancestor report for the person selected. Output is an ASCII file, and will probably need to be printed using 10 or 12 pitch.
      6gen1
      Version 1.0; by Wetmore, Manis; output format Text, 80 cols.
      select and produce a 6 generation ancestor report for the person selected. Output is an ASCII file, and will probably need to be printed using 10 or 12 pitch.
      8gen1
      Version 1.0; by Wetmore, Manis; output format Text, 132 cols.
      Produce an 8 generation descendant report for the person selected. Output is an ASCII file, and will probably need to be printed using 132 column format.
      addsour
      Version 1.0; by Stephen Dum; output format Modifies Database.
      This script prompts for a message and adds the message along with todays date as a Source record on each individual and Family in the database. It checks to see if the source already exists, and allows you to skip or replace an existing source record. Warning, this script modifies your database, making a backup of your data before running this script is advised.
      af-import
      Version 4.12; by baud@research.att.com; output format GedCom.
      convert ancestral-file gedcom to lifelines-standard gedcom
      afn_match
      Version 1.0 of 1995-08-25; by Scott McGee; output format Text.
      Find individuals with matching Ancestral File numbers, report matches.
      ahnenliste
      Version 6; by Jim Eggert; output format Text.
      Generate an Ahnenliste, an ancestral report for an individual
      ahnentafel
      Version 1; by Wetmore; output format Text.
      Generate an ahnentafel chart for the selected person.
      alive
      Version 6; by Jim Eggert; output format Text.
      This report program is for finding people living in a given year. This finds who in the database, or among ancestors or descendants of an individual, was likely alive in a certain year. Good for looking at population snapshots like censuses, tax rolls, etc.
      all_anc_lines
      Version 2; by Tom Wetmore; output format Text.
      report all ancestral lines in a Register-like format
      allfam10c
      Version 1.1; by Cliff Manis, Jim Eggert; output format Text.
      Display all families in the DB, 1 per page.
      alllines
      Version 1.1; by Wetmore, Nozell; output format SGML, NROFF.
      This program shows all ancestral lines of a specified person using a pseudo-Register format.
      altern
      Version 2.0; by Rafal T. Prinke; output format Text.
      find the longest line of alternating male/female links
      anc2_ged
      Version 1.0; by Dennis Nicklaus; output format GedCom.
      make a gedcom file of the ancestors of a set of individuals
      ancestors2
      Version 2.0; by Wetmore, Cliff Manis; output format Text.
      It will produce a report of all ancestors of a person, with sorted names as output, birth and death dates.
      anniver
      Version 4.0; by Stephen Dum; output format HTML; char encoding ASCII.
      Generate calendar of birth, death, marriage events arranged by the month and day that they occurred. Generates a top level index calendar, with actual events stored in a separate html file for each month. Some properties must be set in your lifelines configuration file for this report to run, see comments at beginning of the report for details.
      bday_cover
      Version 1 of 1994-11-02; by Andrew Deacon; output format Text.
      A novelty report that lists on which days of the year people were born and how many people share the same birthday. All valid birthdays are considered. A valid birthday is one where the extracted birthday, performed using extractdate(), has a month in the range 1-12 and a day within that month.
      bias
      Version 1.4; by Chandler; output format Text.
      Ever notice that certain families seem to have all boys or all girls? Sometimes five or six in a row of all the same sex? Is this a mere statistical fluctuation, or is something special happening? This program gives statistics for male vs female births.
      bkdes16-1
      Version 1.0; by Wetmore, Manis; output format Text.
      It will produce a report of all descendents of a person, and is presently designed for 16 pitch, HP laserjet III. This report produces an ASCII file, in output format.
      book-latex
      Version 3.1; by Nicklaus; output format LaTeX.
      Generates really spiffy register reports for formatting with LaTex. Reports read like a book. Includes source citation, footnotes, etc. Register reports are either descendant or ancestor/ahnentafel style.
      browser
      Version 1.0; by Prinke; output format onscreen.
      browsing via all kinds of links, especially in non-standard or experimental GEDCOM structures
      burial_index
      Version 1.0; by Nicklaus; output format Text.
      Write an (unsorted) list of every person in the database whose burial place contains a requested string (which is the "town" that this report asks for). It matches for the town anywhere in the place field. so town can also be a state or county. Personally, many of my relatives are from Iowa, so I like to make a file of everyone buried in Iowa by entering Iowa to the prompt.
      BW_descendants
      Version 1.00; by Birger Wathne; output format Text.
      List successors with notes
      cid
      Version 1.0; by Wetmore, Chandler; output format Text.
      Generates Pete Cook's CID (Chronological Identifier) for a person in a LifeLines database.
      connect2
      Version 2.1; by Simms; output format Text.
      Describes the family line connecting an ancestor/descendant
      common
      Version 0 of 1996-06-11; by H. Väisänen; output format Text.
      Show common ancestors of a person.
      cons
      Version 1.0; by Teschler; output format Text.
      Calculates coefficient of inbreeding F(A,B) for the offspring of two individuals A and B.
      cont
      Version 1.0; by Väisänen; output format Text.
      This program iterates over all persons and families in a database and reports all records that have erroneous CONT lines.
      count_dup
      Version 1.0; by anon; output format Text.
      Count dups among ancestors?
      count_anc
      Version 2.0; by Eggert; output format Text.
      This program counts ancestors of a person by generation. Only unique individuals in each generation are counted. A person counts in all the generations he/she is in, but only counts once in the grand total.
      count_desc
      Version 2.0; by Eggert; output format Text.
      This program counts descendants of a person by generation. Only unique individuals in each generation are counted. A person counts in all the generations he/she is in, but only counts once in the grand total.
      count_paternal_desc
      Version 2.0; by Eggert; output format Text.
      This program counts paternal descendants of a person by generation. Only unique individuals in each generation are counted. A person counts in all the generations he/she is in, but only counts once in the grand total. Male paternal descendants are also counted separately.
      cousins
      Version 6.0; by Wetmore; output format Text.
      Finds the relationship between two persons in a LifeLines database. If there is no common ancestor, the program will attempt to find a sequence of genetic relations that link the two persons.
      coverage
      Version 4; by Wetmore, Woodbridge, Eggert; output format Text.
      Display percentage of ancestors of each generation discovered
      cron
      Version 4.0; by Stephen Dum; output format HTML; char encoding ASCII.
      Generate calendar of birth, death, marriage events arranged by the year, month and day that they occurred. Generates a top level index by year, with actual events stored in a separate html file for each decade. Some properties must be set in your lifelines configuration file for this report to run, see comments at beginning of the report for details.
      dates
      Version 4; by Eggert; output format Text.
      Prints out the value of all the lines in your database with the DATE tag, along with enough information so you can find the line easily. The purpose of this report is so you can sort all the dates in the database, so you can look for illegal dates, make birthday lists, etc. The dates are printed in the order that they appear in the database, Output can then be sorted if this is more useful than the native form.
      db_summary
      Version 1; by Eggert; output format Text.
      This program gives you summary statistics on your database. It calculates the number of birth, baptism, marriage, death, and burial events, and gives the distribution over centuries of birth/baptisms, death/burials, and marriages. It tells you how many different names (given names and surnames separately) there are in the database, and how many persons have no surname in the database.
      desc-henry
      Version 8; by Eggert; output format Text.
      This program prints out a descendants report, assigning a d'Aboville, Henry, modified Henry, or modern Henry code to the individuals. The chosen ancestor, and all of his/her spouses, descendants, and descendants' spouses are included in the report.
      desc_ged
      Version 1; by Nicklaus; output format Text.
      Generate gedcom of descendents. For specified set of individuals for specified # of generations down from the top individuals. (e.g. name all your great-grandparents for all of your close cousins in one gedcom file)
      descged
      Version 2000-07; by Tom Wetmore, Cliff Manis, and Chris Eagle; output format Text.
      The output of this report is a GEDCOM file of the following: all descendents of a named individual all spouses of the named indivdual spouses of all descendents of the named individual (i.e. this program looks only down the tree, never up)
      desc_html
      Version 1.4; by Dick Knowles, Scott McGee, anon; output format HTML.
      This program is designed to be used in a cgi based genweb site to produce a descendant chart for a specified individual. It is based on the desc-tree program by Dick Knowles as modified by Scott McGee. A line is printed for every spouse and child including name, database key number, birth, marriage, and death information.
      desc-tree
      Version 8; by Dick Knowles, knowles@inmet.camb.inmet.com; output format Text.
      This report prints a descendant tree for an individual. A line is printed for every spouse and child including name, database key number, birth, marriage, and death information. The user can set the number of generations or they can all be done (up to a maximum of 20). The user can also, optionally, include step children and family database numbers. There are two slightly different output styles, tree and numbered. Here are examples of each:
      drep2
      Version 2.1; by Robert Simms; output format Text.
      Produces an indented report on an individual's families and all descendant families. Details on individuals include NOTE lines, once. Line wrapping is done with indention maintained.
      d-rtf
      Version 1.1 of 2000-06-11; by Paul Buckley; output format RTF.
      This report will produce a document in Rich Text Format modeled after some typewritten and typeset Henry format genealogies I've seen. All descendants of a selected person, their spouses and their spouses parents, event dates, and NOTEs are included. I generally reserve TEXT items for comments I would prefer not to export.
      dump-ances
      Version 1992-11; by Stephen Woodbridge; output format Text, 80 cols.
      Program walks thru one's ancestors and dumps information about each family. It prunes the tree so an individual is only output once. It is a simple program that is easy to make changes to, if you want more or less info printed. I have included three date routines get_dates(), get_sdates(), and get_ldates for variations in the amount of event info that gets output to the file. The program lists all children of the families as it walks the tree. The ">>>>" marker on a child signifies the line of descent.
      dump_html
      Version 1.3; by Scott McGee; output format HTML.
      dump_html.ll is designed to dump an entire database to static HTML files.
      dump_html_sd
      Version 1.0; by Scott McGee, Steve Dum; output format HTML.
      dump_html_sd.ll dumps an entire database to static HTML files.
      eol
      Version 4 of 1995-01; by Tom Wetmore and John Chandler; output format Text, 80 cols.
      Say you want to know who all of your end-of-line ancestors are, that is, your direct ancestors whose parents you have not yet discovered; these are the people most of us spend most of our time on researching. Here is a program that will produce the list. Any ancestor will be listed at most once, even in cases where lines cross. Each person is shown with date and place of birth and death -- a "guess" is made for the year of birth if it is not known.
      est_life_span
      Version none; by Rafal Prinke; output format Text.
      The program below finds the widest possible span of life, estimating the uncertain and some unknown dates on the basis of user defined values in the table for various combinations of date modifiers etc. Then it compares the midpoints of this with midpoints of others' life spans and if they fall within a user defined range, the two are considered "possibly identical". This is actually just one procedure of several that should be in a program like that - but perhaps the most important one as people may change names, occupations, etc. but they cannot change the time period. I added two arbitrary tags: FAPP and LAPP for "first/last appearance" in sources.
      extract_gedcom
      Version 1.2 of 1995-08-27; by Scott McGee (smcgee@microware.com); output format GEDCOM.
      This program allows the user to select a group of individuals from a database and generate a GEDCOM file for them. It allows selection of multiple people by following family links, and then allows addition of all ancestors of the selected set or of the first individual, and then all descendants of the selected set or of the orignal individual. It also allows addition of all persons with a specified number of relations to any individual in any of the groups added above.
      extract_html
      Version 1.4; by Scott McGee (smcgee@microware.com); output format HTML.
      This program allows the user to select a group of individuals from a database and generate a set of HTML files for them. It allows writing multiple people per HTML file, and will create an index file and a GENWEB.txt file for genweb indexing of the resulting data.
      fam10c
      Version 1.0; by Manis; output format Text.
      Generates a Family Report for one family.
      fam16rn1
      Version 1.0; by Wetmore, Manis; output format Text.
      This program produces a family report of the person (husband), wife, their children, and some data about the children's marriages. It is presently designed for 16 pitch, HP laserjet III, printing a single page of information about that family.
      fam_ged
      Version 1.1 of 1994-06-08; by Wetmore and Prinke; output format GEDCOM.
      This program extracts a gedcom file of all male line descendants of a specified person, with their spouses and parents (including those of the specified person and of all spouses). Also included are possibly illegitimate children of females - when they have the same surname as the mother but different than the father (also if there is no father recorded).
      famgroup
      Version 1.1; by Kris Stanton ; output format TeX.
      Family Group Sheet for LifeLines
      fami-grps
      Version 1993-01-12; by Stephen Woodbridge (woodbri@swoodbridge.com); output format Text, 80 cols.
      Program walks thru one's families and dumps information about each family. It prunes the tree so an individual is only output once. The program lists all children of the families as it walks the tree. The "*" marker on a child signifies the line of descent/ascent.
      familycheck
      Version 2000-03-02; by Dennis Nicklaus nicklaus@fnal.gov; output format Text, 80 cols.
      Consistency checks between indi records and family records (making sure links between kids and spouses go both ways.) make sure each family that a person says he is a spouse of has him as a spouse, and, vice-versa, make sure each person that a family says is a spouse thinks he is a spouse of that family It also checks when a person says he is a child in a family that the family has that person as a child. And vice-versa, that every child in a family thinks he is a child of that family.
      familyisfm1
      Version 1.0; by Wetmore, Manis; output format Text, 132 cols.
      It will produce a report of all the INDI's in the database, in the format as seen at end of report. May be sorted easily to see the Father or Mother column sorted report. The report name come from: isfm (Indi Spouse Father Mother) It is designed for 16 pitch, HP laserjet III, 132 column (ASCII output).
      famrep
      Version 6.3; by James P. Jones (jjones@nas.nasa.gov); output format nroff.
      This report program produces a Family Group Sheet for the selected individual, with options for generating sheets for married children of the individual, and their children, etc.
      famtree1
      Version 2; by James P. Jones, jjones@nas.nasa.gov; output format PostScript.
      This report builds a postscript ancestry chart, a "tree", containing data on five generations. It prompts for the individual to begin with and draws the tree including this person. The further from this person the less data is printed. Maximum data include: o date and place of birth o date and place of marriage o date and place of death o last place of residence o spouses of person #1 (up to five) as well as: o name, address, phone number and e-mail address of compiler o date of chart
      fileindex
      Version 1999; by Dennis Nicklaus; output format HTML.
      I have lines on indi's in my database which look like: 1 NOTE FILE: BIOGRAPHY $FAMHIST/matthews/alkire.bio or maybe OBITUARY, MARRIAGE, WILL, NEWS ... instead of BIOGRAPHY. and the lowercase letters (matthews/alkire.bio in this example) will change to reflect the location of the file in question.
      fdesc
      Version 1.0; by Wetmore; output format GEDCOM.
      this funny little program is based on Tom Wetmore's "genancc1" and generates a GEDCOM file with descendants of a chosen individual who have the same surname (usually this means male line descendants plus illegitimate children of daughters) plus their spouses.
      find
      Version 2.1; by Prinke, Perry Rapp; output format GUI.
      This utility finds all persons whose records contain a specified TAG and VALUE and displays the resulting list as a menu.
      findmissing
      Version 1.0; ; output format Text.
      find persons that are 'isolated' in your database - no parents and not in any families..
      fix_nameplac
      Version 1; by Eggert; output format GEDCOM.
      This is a quicky to show how to fix name and place spacing.
      formatted_gedcom
      Version 1; by Eggert; output format GEDCOM.
      This program outputs a LifeLines database in modified GEDCOM format. Two additions to GEDCOM are made: an inter-record delimiter and a level indenter. These are set up as global parameters and initialized at the beginning of the main() procedure.
      gedall
      Version 2000-02-20; by Paul B. McBride (pbmcbride@rcn.com); output format GEDCOM.
      This LifeLines report program produces a GEDCOM file containing the entire LifeLines database, including header, trailer, and submitter records. It also gives the option to keep or remove user defined tags, and to remove any other tags.
      gedlist
      Version 1.1; by Paul B. McBride (pbmcbride@rcn.com); output format GEDCOM.
      gedlist.ll generates a GEDCOM file for the male line of the input individuals.
      gedlod
      Version 2000-02-15; by Paul B. McBride (pbmcbride@rcn.com); output format GEDCOM.
      Generate a GEDCOM file of a person's descent from an ancestor. The GEDCOM file will contain the following: all descendents of the ancestor who are ancestors of descendant, as well as the ancestor and descendant themselves.
      gedn
      Version none; by anon; output format GEDCOM.
      The output of this report is a GEDCOM file of the following: N generations of ancestors, all spouses and all children of these ancestors and all descendents of a person, as well as the person him/herself
      gedtags
      Version 2001-06-28; by Paul B.McBride (pbmcbride@rcn.com); output format Text.
      produces a unique list of all tags used in the database listed like the following: INDI INDI.BIRT INDI.BIRT.DATE INDI.BIRT.PLAC ...
      genancc
      Version 1997-11; by Wetmore, Manis, Kirby; output format Text.
      The output of this report is a GEDCOM file of the following: all ancestors, all spouses and all children of all ancestors and all descendents of a person, as well as the person him/herself and his/her spouses.
      genancc1
      Version 1.0; by Wetmore, Manis; output format GEDCOM.
      This program is useful for extracting data when a person requests data about someone from your database. The output of this report is a GEDCOM file of the following: all ancestors, all spouses and all children of all ancestors and all descendents of a person, as well as the person him/herself and his/her spouses.
      gender_order
      Version 4; by Jim Eggert; output format Text.
      This program computes gender order statistics for children in all the families in a database. Genders are considered to be ternary: male (M), female (F), or unknown (U). Children in a family form a pattern of genders by birth order, e.g. MFFM for a family consisting of a boy, two girls, then a boy. The frequency of these patterns is calculated. In addition to the complete gender pattern for a family, initial gender patterns are computed. For the above example, the initial patterns are . (no children), M, MF, MFF, and MFFM. The frequency of these initial patterns can be used to answer questions such as how many families with a boy then two girls go on to have another boy.
      gendex
      Version 1.2; by Scott McGee (smcgee@microware.com); output format HTML.
      This report program converts a LifeLines database into html gendex document. You will need to change the contents of proc html_address() and to set the value of HREF appropriately to your server.
      genetics
      Version 2.0.1; by Eggert; output format Text.
      This LifeLines report program computes the degree of blood relatedness between any two people in a database. It does this by finding all the common ancestors, known or implied, and their ancestral distance along any known path to the two people.
      genetics2
      Version 1 of 1995-10-05; by Alexander Ottl (ottl@informatik.uni-muenchen.de); output format Text.
      This LifeLines report program computes the degree of blood relatedness between any two people in a database.
      givens_gender
      Version 1; by Jim Eggert (eggertj@ll.mit.edu); output format Text.
      Given name gender report program. This program prints a list of all given names of people, tagged by one of the following: M Only males F Only females B Males and females M? Males and persons of unknown gender F? Females and persons of unknown gender B? Males, females, and persons of unknown gender
      givens_gender_finder
      Version 1; by Eggert; output format Text.
      This program finds all persons with a particular given name and gender. It is really meant to be a companion to the givens_gender program.
      grand
      Version 1.1; by Stephen Dum; output format text.
      For a selected individual this program outputs a list of children, grand children, great grand children and great great grand children.
      hasnotes1
      Version 1.1; by Wetmore, Manis; output format Text.
      It will produce a report of all the numbers and names (INDI's) in the database which have a "NOTE" line at level 1 in the record. It is designed for 10 or 12 pitch, HP laserjet III, or any other printer (ASCII output).
      hp-anc
      Version 1 of 1995-12-01; by Dennis Nicklaus (nicklaus@wishep.physics.wisc.edu); output format HPGL.
      This LifeLines report program generates autoscaling HPGL ancestral and descendant charts. The ancestral charts can include the siblings of all direct ancestors (aunts, uncles, great-aunts, great-uncles, etc.) The chart format is based on the program GedChart, by Tom Blumer.
      htmlahnen
      Version 2; by Tom Wetmore; output format HTML.
      Generate an ahnentafel chart in HTML format
      html.dn
      Version 3.0; by Dennis Nicklaus nicklaus@fnal.gov; output format HTML.
      Selects a person and writes html pages for that person and all their descendents through a specified number of generations. Actually, you get to specify a set of individuals. It probably works nicest if you select people of the same generation, e.g. all your ggg-grandparents. (I also recommend that you start with the "top of the line" ancestor or else you'll have unresolved links in the pedigree chart.)
      htmlfam
      Version 3; by Tom Wetmore (ttw@shore.net); output format HTML.
      output family group summaries in HTML format
      html
      Version 1.0; by Dave Close, ; output format HTML.
      Produces a set of interlinked HTML files, one for each person in the data base, and a master name index file.
      igi-filter
      Version 1 of 1993-02-15; by Jim Eggert (eggertj@atc.ll.mit.edu); output format GedCom.
      Write GedCom of families/events containing given TAG/VALUE
      igi-import
      Version 1.0; by baud@research.att.com; output format GedCom.
      Convert igi gedcom to lifelines-standard gedcom
      igi-merge
      Version 4.0; by Eggert; output format GEDCOM.
      This program helps you merge IGI data. IGI data consists of "families" which are actually events. A real family may be documented by several events in the IGI database, and thus be represented by several "families". This program will help you to locate and merge those "families" back into real families again.
      igi-search
      Version 1.1; by Vincent Broman; output format Text.
      prints out a list of people to look up in the IGI, those who are closely enough related, who fall in a time range, and whose temple work is not done.
      index1
      Version 1.0; by Wetmore, Manis; output format Text.
      This program produces a report of all INDI's in the database, with sorted names as output. It is presently designed for 12 pitch, HP laserjet III, for printing a index of person in the database (ASCII output).
      index_html
      Version 1.3; by Scott McGee (smcgee@microware.com); output format HTML.
      This report program converts a LifeLines database into html index document. You will need to change the contents of proc html_address() and to set the value of HREF appropriately to your server. You need to set the value of PATH to point to the directory to put the file into. You also need to set the value of HOST to be the http server and path where you will server these files from.
      index_mm
      Version 4.0; by Eggert; output format Text.
      This program lists everyone in a database, with women listed by both maiden name and married name. It assumes that all women take the surname of their husbands, which is not always correct.
      indiv
      Version 3.2; by Simms; output format Text.
      Report on individual with all his families
      infant_mortality
      Version 1; by Eggert; output format Text.
      This program finds families that have lost multiple children. You give it the threshold for the number of young deaths, and the threshold for the age at death, and it finds all the appropriate families.
      line
      Version 1; by J.F. Chandler; output format Text.
      displays the descendancy line(s) from one person to another. This program assumes no individual has more than one set of parents.
      listsour
      Version 2; by Hannu Väisänen; output format Text.
      List source records.
      ll2html
      Version 2005-11-19; by JRE Jim Eggert; output format HTML.
      This report program converts a LifeLines database into html documents. Family group records are created for each selected individual in the database. These records are written in files containing clumps of individuals of a user-selected size. Index files are generated for an index document. Or, optionally, all output is sent to one file.
      ll2visio
      Version 1 of 1999-04-02; by Rafal T. Prinke (rafalp@amu.edu.pl); output format VISIO 5 diagram.
      This program generates a text file with male line descendants which can be imported by VISIO 5 and converted to a diagram.
      lldb
      Version 1.02; by Marc Nozell ; output format pdb import files.
      This program produces a report of all INDI's in the database, with sorted names as output for inport into Tom Dyas' Open Source DB PalmOS app.
      longlines
      Version 2.0; by Chandler; output format Text.
      Find the maximal-length male and female lineages in the database. Optionally, find the maximal-length lineage through a specified ancestor.
      maritalinfo
      Version 1.0 (2002-11-13); by Perry Rapp; output format screen.
      Simple example of looping through marital (& divorce) info
      marriages
      Version 1.0; by Perry Rapp; output format Text, 80 cols.
      select and produce an a output report of all marriages in the database, with date of marriage if known. Sort by either spouse, or by date, or by place.
      marriages1
      Version 1.0; by Wetmore, Manis; output format Text, 80 cols.
      select and produce an a output report of all marriages in the database, with date of marriage if known.
      menu
      Version 1.0; by ?; output format GUI.
      Menu driven shell for LifeLines report programs
      name2html
      Version 1.5; by Scott McGee; output format HTML.
      Converts the selected indi record to an HTML file.
      namefreq
      Version 3.0; by Chandler; output format Text.
      This report counts occurrences of all first (given) names in the database. Individuals with only surnames are not counted. If the surname is listed first, the next word is taken as the given name.
      names_freq
      Version 3.0; by Eggert; output format Text.
      Tabulate frequency of names in database. Like namefreq (by John Chandler), but it computes frequencies for the first five given names, the surname, and the first two post-surnames.
      namesformat1
      Version 1.0; by Manis; output format Text.
      This program produces a report of how the names format may be printed using the LifeLines Report Generator.
      net-ped
      Version 2.1; by Rafal T. Prinke; output format Netscape HTML.
      This program generates a set of files covering all known ancestors with hypertextual links from the top and bottom persons for easy on-line browsing using Netscape.
      novel/novel
      Version none; by Wetmore, Manis, Stringer; output format nroff.
      It will produce a report of all descendents and ancestors of a person in book form. It understands a wide variety of gedcom records and tries hard to produce a readable, personalised document.
      nonpatronymics
      Version 1.0; by Eggert; output format Text.
      Find all cases of nonpatronymic inheritances in the database. If the child's surname is not identical to the father's surname, print both out. If the two surnames have different soundex codes, undent the printout. Print statistics at the end.
      paf-export
      Version 1994-11-12; by Kurt Baudendistel (baud@research.att.com); output format GEDCOM.
      Convert lifelines-standard gedcom to paf gedcom. This report generates paf-compatible gedcom from a lines-compatible database, including the conversion of SOUR entries into the bang- tagged NOTEs used by paf for documentation (see 5). This produces paf 2.2 output -- you can convert to 2.1 by loading and unloading it using paf 2.2.
      pafcompat
      Version 2.0; by Eggert; output format Text.
      This LifeLines report program checks a LifeLines database for compatibility with PAF. I used the Mac PAF manual for field length specification, and Mac PAF v2.11 for a little testing.
      partition
      Version 11; by Eggert; output format GEDCOM.
      This program partitions individuals in a database into disjoint partitions. A partition is composed of people related by one or more multiples of the following relations: parent, sibling, child, spouse. There is no known relationship between people in different partitions.
      pdesc
      Version 4.3; by Wetmore, Manis, Jones, Eggert, Simms; output format Text.
      Produces indented descendant list with line wrapping at 78 columns (user-specifiable) while maintaining the indentation level. Enhancement from version 2 is the addition of user-specified maximum number of generations. Version 4 makes the page_width (not 1 less) the limit on character a shift inplacement. Also eliminated an extra space at the beginning of each line that was not controlled by a left_margin parameter.
      paf-import
      Version 1994-11-12; by Kurt Baudendistel (baud@research.att.com); output format GEDCOM.
      Convert paf gedcom to lifelines-standard gedcom, transforming name formats and notes.
      ped
      Version 1996-08-09; by Bill.Alford@anu.edu.au; output format HTML.
      html pedigree/ancestral chart part of an individuals report. This coding can be generalised to print many generations back but for html purposes we only need go back 2 generations because the width of the page becomes far too big otherwise. In this case I've hard coded out what the generalised coding would look like. I've used ideas from the output of the gedcom2html program.
      pedigreel
      Version 1.0; by Wetmore, Manis; output format Text, 132 cols.
      select and produce a ancestor report for the person selected. Ancestors report format, which print the event in long format. Output is an ASCII file, and will probably need to be printed using 132 column format.
      pedigree_html
      Version 1.3; by Scott McGee (smcgee@microware.com); output format HTML.
      Select and produce an ancestor report for the person selected.
      pedigreelhs
      Version none; by Wetmore, Manis, Hume Smith; output format Text.
      Select and produce an ancestor report for the person selected.
      pedigree
      Version none; by Wetmore, Manis, Hume Smith; output format Text.
      Select and produce an ancestor report for the person selected.
      pedtex/pedtex
      Version 1.0; by Eric Majani; output format TeX.
      generates TeX files for pedigree charts
      places
      Version 5.0; by Olsen, Eggert; output format Text.
      Prints out the value of all the lines in your database with the PLAC tag, along with enough information so you can find the line easily. The purpose of this report is so you can find all the places that seem wrong (misspelled, ambiguous, incomplete [left out the county name], etc), and double-check them or correct them.
      pointers
      Version 1.0; by Chandler; output format Text.
      Test a database for reciprocity of pointers between persons and families.
      ps-anc
      Version 8.86, 4 Jul 2004; by Robert Simms; output format PostScript; char encoding ISO-8859-1.
      a LifeLines genealogy report program that produces ancestry charts in PostScript
      ps-circle
      Version 2.6.2 of 2003-12-10; by Jim Eggert (eggertj@ll.mit.edu), Henry Sikkema (hasikkema@yahoo.ca); output format PostScript.
      Print a five to ten-generation ancestry circle chart in PostScript.
      ps-fan/ps-fan
      Version 1993-08-16; by Andrew Deacon (deacon@inf.ethz.ch); output format PostScript.
      Write a PostScript fan chart.
      ps-pedigree
      Version 1.1.0; by Stephen Woodbridge, woodbri@swoodbridge.com; output format PostScript.
      This report generates Multiple linked Pedigree Charts Each chart is 7 or 8 generations and as a line moves off a chart the new chart number is referenced. The output of this report is a POSTSCRIPT file. The text size is very small but readable (it seams less readable as I age!) on 8.5x11 paper with 8 generations and larger but somewhat compressed at 7 generations per chart. And an index of all persons on the charts is also created.
      refn
      Version 1.0; by Larry Hamilton; output format Text.
      Prints out the value of all the lines in your database with the REFN tag, along with enough information so you can find the line easily. The purpose of this report is so you can find all the REFNs, and double-check them for duplicates.
      reg_html
      Version none; by Wetmore, Prinke; output format HTML.
      The output produces a HTML-marked file (without header) with one family group per line so that it is displayed on WWW when found with grep and properly formatted. Continental European genealogical symbols are used: * = born + = died x = married
      register-rtf
      Version 1.6; by Doug McCallum; output format RTF.
      RTF based Register Report Generator. This program has many options but basically takes a person and generates an RTF document that can be read by a number of word processors. The document can optionally be cross-indexed and footnoted. The format is close to the NEHGS Register Form.
      register-tex
      Version 2.1 of 2004-06-18; by Wetmore, David Olsen (dko@cs.wisc.edu), Simms; output format LaTeX.
      This report prints, in book format, information about all descendants of a person and all of their spouses. It tries to understand as many different GEDCOM tags as possible. All source iformation (SOUR lines) is in the footnotes. The output is in LaTeX format.
      register1
      Version 1.0; by Wetmore; output format nroff.
      It will produce a report of all descendents of a person, and is presently designed for 12 pitch, HP laserjet III. All NOTE and CONT lines from data will be printed in the this report. This report will produce a paginated output. It is similiar to the report 'regvital1'.
      register1-dot
      Version 1.0 (14-May-2004); by Marc Nozell (marc@nozell.com); output format dot format.
      directed graphs of descendants.
      regvital
      Version 3.0; by Wetmore, Manis, Chandler; output format nroff.
      This program produces a report of all descendents of a given person, and is presently designed for 12 pitch, HP laserjet III, for printing a book about that person. All NOTE and CONT lines are included in the report, along with the vital statistics, occupations, immigrations, attributes, and wills. At the end of the report is a sorted listing of names of everyone mentioned, with reference numbers giving the first occurrences of all the names.
      relate
      Version 1.0; by Wetmore; output format Text.
      Finds a shortest path between two persons in a LifeLines database. Inspiration from Jim Eggert's relation program.
      related_spouses
      Version 2.0; by Eggert; output format Text.
      This program identifies spouses with known common ancestors. For each marriage of related spouses, the spouses' names are printed, along with the first common ancestor in each branch of the ancestry tree, and the number of intervening generations for the husband and wife, respectively.
      relation
      Version 5.0; by Eggert; output format Text.
      This program calculates the relationship between individuals in a database. It does so in three modes. Mode 1 just does one pair of individuals and then exits. Mode 2 does any number of pairs with a common "from" person. Mode 3 does all pairs with a common "from" person. In general, mode 1 is fastest for simple relationships, but if you want one complicated relationship, you may as well do them all.
      relink
      Version 1995-06; by J.F. Chandler; output format GEDCOM.
      LifeLines program to reconstruct pointers from persons to families when these pointers are missing, but can be deduced from the corresponding pointers from families to persons. Do this only for persons with no pointers to families at all. Similarly, reconstruct pointers from families to persons where necessary.
      rfc
      Version 1995-09-08; by Paul B. McBride (pbm%cybvax0@uunet.uu.net); output format Text.
      Royalty For Commoners format report
      rllgen
      Version 1.0; by Eggert; output format RLL format.
      A LifeLines report program to aid in the generation of Roots Location List (RLL) submissions. Given a person, this generates a RLL-like submission for that person and his/her ancestors. The output will likely need considerable hand editing, but that is how it is. If you need to know what the RLL is, I have enclosed a description at the end of this file.
      rootset
      Version 0.5; by Robert Simms; output format Text.
      Given a list of surnames, finds the set of all people with those surnames, then reports on the heads of each line within that set.
      rslgen
      Version 1.1; by Eggert; output format RSL format.
      rslgen - a LifeLines report program to aid in the generation of Roots Surname List (RSL) submissions.
      sealing_line
      Version none; by Tom Wetmore; output format function, and driver writing Text.
      function sealing_line(). You pass it a person, and it returns the person's sealing line (if there is one) or nothing (if there isn't). The main program is only used here to test it. You would call "sealing_line" in the place you need it in your own program. Yes, it is a little complicated, but that's why we have modules. Write it, stick it in some library somewhere, and just call it when you need the info.
      search_source
      Version 1.0; by Stephen Dum; output format text.
      Search source records for a particular string. Program prompts for the type of sub record to search and then for string to search for. If no sub record type is entered, all records are searched. Case is ignored in searches.
      select
      Version 3; by Wetmore, Groleau, McGee; output format Custom.
      Customizable report stub to do the following: o Select a person with all ancestors and all descendents. o Add to selection all other persons within a user-specified number of links from any person in the first selection. o Turn the selected set of persons into a list o Call a report subprogram to process the list.
      sgsgen
      Version 1; by Jim Eggert (eggertj@ll.mit.edu); output format Text.
      A LifeLines report program to aid in the generation of soc.genealogy.surnames (sgs) submissions.
      showlines1
      Version 1.0; by Wetmore; output format Text.
      This program will produce a report of all ancestors of a person, and is presently designed for 10 or 12 pitch, HP laserjet III.
      simpleged
      Version 1.0; by Wetmore; output format GEDCOM.
      This program generates a simple GEDCOM file from a database. It can be modified to convert your own LifeLines database formats to other GEDCOM formats.
      soundex1
      Version 1.0; by Jones; output format Text.
      Produces a chart of all surnames in database with corresponding SOUNDEX codes. It is designed for 10 or 12 pitch, HP laserjet III, or any other printer.
      soundex-isfm
      Version 1.0; by Wetmore, Manis, Eggert; output format Text, 132 cols.
      This program will produce a report of all the INDI's in the database, in the format as seen at end of report. May be sorted easily to see the Father or Mother column sorted report.
      sources
      Version 1.0; ; output format Text.
      Print the sources associated with an individual.
      sources_bib
      Version 1999-02; by Dennis Nicklaus (nicklaus@fnal.gov); output format LaTeX.
      Lifelines report program. Write out a LaTex bibliography entry line for each source referenced by an indi or family record in the whole database. This is pretty slow. The bibliography printed out is useful for the html.dn programs (if you first run it through my bib2html.c program) or for a Latex document.
      span
      Version 1.1; by Stephen Dum; output format text.
      Scan the database and report on the range of ages between birth to marriage, birth of parent to birth of child, and age at death. Generates a histogram of the results and reports minimum, maximum and average values. Designed to be run with llexec, with a command like 'llexec database -x span'.
      src
      Version 2.0; by McBride; output format text.
      Here is a report program to list SOURces. The REFN and TITL values are shown. Other tags can be added by duplicating the lines that containing "myrefn" or "REFN" and replacing them with the tag you want.
      src-rtf
      Version none; by Paul Buckely ; output format RTF.
      List sources in RTF, a modification of src.ll .
      ssdi_aid
      Version 3; by Jim Eggert (eggertj@ll.mit.edu); output format Text.
      This LifeLines report program generates a text file that lists people who are likely to be in the Social Security Death Index. The SSDI starts in 1962 and is periodically updated to include more recent years. This program guesses birth and death years to make its determinations. If it finds a person likely to be in the SSDI, it searches for the string SSDI in their notes to indicate that an SSDI entry has already been found. If not, it outputs a line about that person.
      ssdi-import
      Version 1994-11-12; by Kurt Baudendistel (baud@research.att.com); output format GEDCOM.
      Convert ssdi gedcom to lifelines-standard gedcom
      ssdi-search-list
      Version 1.0; by Larry Soule (lsoule@ikos.com); output format Text.
      This LifeLines report program searches for individuals in the database that are missing some birth or death information that may be in the social security death index (SSDI). Right now this searches for: 1. Deaths after 1960 that do not have locations 2. Births after 1880 with no death event
      stats
      Version 10.0; by Jim Eggert; output format Text.
      This LifeLines report program computes mean statistics of various quantities binned over other quantities. The quantities it knows about are ages at and dates of birth, christening, first and last marriage, first and last child's birth, death, burial, and today; the number of children, siblings, and marriages; and sex, surname, first name, soundex, and any simple GEDCOM tag. These can be combined nearly arbitrarily and evaluated over the whole database, or restricted to ancestors or descendants of a chosen individual or to members of a predetermined set. Further restrictions on the individuals included in the statistics can be based on any quantity that the program knows about. The program will optionally print out the names of all the individuals included in the statistics.
      st/st_all
      Version 1.14 (2005-02-01); by Perry Rapp; output format mixed; char encoding ASCII.
      calls all self-test modules, Validates report language functions, and optionally dumps various data to a file (to exercise db functions).
      surname1
      Version 1.0; by Manis, Wetmore; output format Text, 132 cols.
      LifeLines Report for quickly getting output of all individuals with a a particular surname.
      tinytafel1
      Version 3.1; by Wetmore, Eggert, Chandler; output format TinyTafel.
      This report will produce a tinytafel report on a person.
      tree_density
      Version 1; by Jim Eggert (eggertj@atc.ll.mit.edu); output format Text.
      This program calculates the weight of each node in an ancestral tree. The weight of a node is given by the number of people in the database that are most closely related to that node. The degree of relation is measured in hops, where a hop is a step to a parent, spouse, sibling, or child. Thus this program allows you to get an idea of where most of the research has been done, where large numbers of cousins hook in to the database, and where more work may be needed.
      ttable
      Version none; by anon; output format Text.
      Compute Pete Cook's C-Table comparison vector, as modified by Tom.
      verify
      Version 12.0; by Eggert; output format Text.
      This LifeLines report program generates a text file which lists exceptions to assertions or checks about the database. There are two forms of the output report, terse or verbose, selectable at runtime. See text at beginning of report for more details.
      wife
      Version 1995-02-10; by Kurt Baudendistel ; output format Text.
      A report to find wives.
      xml-dtd
      Version 1.0; by Rafal T. Prinke; output format XML DTD.
      This report produces an XML DTD (Document Type Definition) from a LifeLines database. It is intended for comparing tag usage and checking for structural inconsistencies in a GEDCOM file - especially when sharing the same file with others in a research project.
      xmlize
      Version 2.2; by Rafal T. Prinke; output format XML.
      This report converts all LifeLines records to XML tagged file, with <LLGEDCOM> as the root element. It is now more consistent with Mike Kay's GedML. References are all empty tags with IDREF attribute. The NAME element contains one S element - for surname (ie. it is a reserved tag and cannot be used elsewhere).
      zombies
      Version 1995-06; by H. Visnen; output format Text.
      zombies - a list of people who should be dead but who are not. This program lists all persons who have been born over 100 years and who have a birth event but not a dead event.
      This overview was generated 08 Aug 2007
      lifelines-3.0.61/reports/index1.ll0000700002540200244210000000272610076661057017177 0ustar prappDomain Users/* * @progname index1.ll * @version 1.0 * @author Wetmore, Manis * @category * @output Text * @description * * This program produces a report of all INDI's in the database, with * sorted names as output. * It is presently designed for 12 pitch, HP laserjet III, * for printing a index of person in the database (ASCII output). * * index1 * * Code by Tom Wetmore, ttw@cbnewsl.att.com * Modifications by Cliff Manis * * This report works only with the LifeLines Genealogy program * * version one of this report was written by Tom Wetmore, in 1990, * and it has been modified many times since. * */ proc main () { indiset(idx) monthformat(4) forindi(indi,n) { addtoset(idx,indi,n) print(".") } print(nl()) print("indexed ") print(d(n)) print(" persons.") print(nl()) print(nl()) print("begin sorting") print(nl()) namesort(idx) print("done sorting") print(nl()) col(1) "======================================================================" nl() col(16) "INDEX OF ALL PERSONS IN DATABASE" nl() col(1) " " nl() col(1) " " nl() col(1) "LAST, First Index # Birthdate Deathdate" nl() col(1) "-------------------------------- -------- ------------ ------------" nl() forindiset(idx,indi,v,n) { col(1) fullname(indi,1,0,30) col(35) key(indi) col(44) stddate(birth(indi)) col(60) stddate(death(indi)) print(".") } nl() print(nl()) } /* End of Report */ lifelines-3.0.61/reports/index_html.ll0000700002540200244210000001032210166311056020120 0ustar prappDomain Users/* * @progname index_html.ll * @version 1.3 * @author Scott McGee (smcgee@microware.com) * @category * @output HTML * @description This report program converts a LifeLines database into html index document. You will need to change the contents of proc html_address() and to set the value of HREF appropriately to your server. You need to set the value of PATH to point to the directory to put the file into. You also need to set the value of HOST to be the http server and path where you will server these files from. @(#)index_html.ll 1.3 10/14/95 by Scott McGee (smcgee@microware.com) */ global(INDEX) global(HREF) global(PATH) global(RVAL) global(FB) global(nl) global(last_surname) global(name_count) global(surname_count) global(owner_email) global(db_owner) proc main() { set(db_owner, getproperty("user.fullname")) set(owner_email, getproperty("user.email")) set(FB, 0) set(nl, nl()) set(last_surname, "ZZ") list(RVAL) indiset(INDEX) set(PATH, "/users/smcgee/www/") set(HOST, "http://www.emcee.com") set(HREF, concat( "http://www.emcee.com/~smcgee/cgi-bin/genweb_cgi/DB=", database(), "/INDEX=")) print("processing database\n") set(count, 0) forindi(me,num) { if(eq(count, 100)){ set(count, 0) print(".") }else{ incr(count) } addtoset(INDEX,me,1) } print("\nwriting file\n") set(name_count, 0) set(surname_count, 0) call create_index_file() print("\n", d(name_count), " individuals, ", d(surname_count), " surnames\n") } proc create_index_file() { namesort(INDEX) set(fn, save(concat(PATH, concat("genweb/", database(), "_idx.html")))) newfile(fn, FB) call html_header(0) "" nl "\"\"

      \n" "

      INDEX

      " nl "
        " nl forindiset(INDEX, me, v, n) { call href(me) nl } "
      " nl call html_address() "" nl "" nl } proc href(me) { if(me) { call print_name(me, 1) incr(name_count) if(ne(strcmp(surname(me), last_surname), 0)){ incr(surname_count) print(surname(me)) print("\n") set(last_surname, save(surname(me))) "\n" } "
    • \n" pop(RVAL) " -" if (evt, birth(me)) { " born " short(evt) } else { if (evt, baptism(me)) { " baptised " short(evt) } else { if (evt, bapt(me)) { " baptised " short(evt) } } } if (evt, death(me)) { " died " short(evt) } } } proc html_header(isindex) { "" nl "" nl "" if(isindex) { "" nl } "Index of database - " database() "" nl "" nl } proc html_address() { "
      " nl "
      Last update : " date(gettoday()) "
      " db_owner " // " owner_email "
      " nl } proc print_name (me, last) { call get_title(me) set(junk, pop(RVAL)) push(RVAL, save(concat(fullname(me, 0, not(last), 45), junk))) } proc get_title (me) { fornodes(inode(me), node) { if (not(strcmp("TITL", tag(node)))) { set(n, node) } } if (n) { push(RVAL, save(concat(" ", value(n)))) } else { push(RVAL, "") } } proc rjt(n, w) { if (lt(n, 10)) { set(d, 1) } elsif (lt(n, 100)) { set(d, 2) } elsif (lt(n, 1000)) { set(d, 3) } elsif (lt(n, 10000)) { set(d, 4) } else { set(d, 5) } if (lt(d, w)) { set(pad, save( trim(" ", sub(w, d)))) } else { set(pad, "") } push(RVAL, save( concat(pad, save(d(n))))) } func bapt (indi) { fornodes(inode(indi), node) { if (eq(0, strcmp(tag(node), "BAPL"))) { return(node) } if (eq(0, strcmp(tag(node), "BAPM"))) { return(node) } } return(0) } lifelines-3.0.61/reports/index_mm.ll0000700002540200244210000000463510076661057017610 0ustar prappDomain Users/* * @progname index_mm.ll * @version 4.0 * @author Eggert * @category * @output Text * @description This program lists everyone in a database, with women listed by both maiden name and married name. It assumes that all women take the surname of their husbands, which is not always correct. index_mm - a LifeLines database listing program by Jim Eggert (eggertj@atc.ll.mit.edu) Version 1, 25 November 1992 Version 2, 29 November 1992 (gave up on bubblesort) Version 3, 11 January 1993 (added deathdate and marriage) Version 4, 18 April 1993 (bug fix, made namewidth variable) To sort the resulting report by name, enter the Unix command sort -b +1 report > sorted.report */ proc main () { list(names) list(keys) list(indices) set(namewidth,40) /* change this value as needed */ ". ." col(8) "LAST, First Middle [MAIDEN]" set(bcol,add(8,namewidth)) col(bcol) "Birthdate" set(dcol,add(22,namewidth)) col(dcol) "Deathdate" set(mcol,add(36,namewidth)) col(mcol) "Marriage" set(marriednum,0) print("Writing names...") set(nextrep,0) forindi(person,num) { if (ge(num,nextrep)) { print(d(num)) print(" ") set(nextrep,add(nextrep,100)) } if (b,birth(person)) { set(bdate,date(b)) } else { set(bdate,date(baptism(person))) } if (d,death(person)) { set(ddate,date(d)) } else { set(ddate,date(burial(person))) } key(person) col(8) fullname(person,1,0,namewidth) col(bcol) bdate col(dcol) ddate families(person,fam,spouse,fnum) { if (eq(fnum,1)) { col(mcol) date(marriage(fam)) } } nl() if (female(person)) { set(maidenname,save(concat(", ",fullname(person,1,1,100)))) spouses(person,spouse,fam,fnum) { if (spousesurname,surname(spouse)) { set(mdate,date(marriage(fam))) key(person) col(8) trim(concat(upper(spousesurname),maidenname),namewidth) col(bcol) bdate col(dcol) ddate col(mcol) mdate nl() set(marriednum,add(marriednum,1)) } } } } print("\nWrote ") print(d(num)) print(" database names and ") print(d(marriednum)) print(" married names.\n") } lifelines-3.0.61/reports/indiv.ll0000700002540200244210000001426110076661057017115 0ustar prappDomain Users/* * @progname indiv.ll * @version 3.2 * @author Simms * @category * @output Text * @description * * Report on individual with all his families Written by: Robert Simms, 27 Mar 1996 rsimms@math.clemson.edu, http://www.math.clemson.edu/~rsimms Produces an indented report on an individual and all families associated with that individual. Details on individuals include NOTE lines. Linewrapping is done with indenting maintained. At the beginning of main() is provided the means to easily change page width, tab size, left margin, and whether or not to include notes in output. ______________ Version 2: 5 April 96 -- Unknown spouses can be returned by the family function, so a check had to be added to make sure that individuals exist before trying to print information on them. Now it's fixed to return _____ _____ as the name of an unknown person. -- Robert Simms Version 3: 16 Feb 2000 -- Two spaces at the end of a sentence could result in a leading space after line-wrap. Added a loop to eliminate leading spaces after line-wrap. Care had to be taken to use the strsave() function to get it working correctly. Also fixed it so that page_width really is the maximum line length, not one less. -- Robert Simms Version 3.1: 30 May 2001, fixed the concatenation of multiple notes so that two spaces are inserted before every note after the first. Thanks to M.W. Poirier for pointing this out. To-do: Option to maintain blank lines (paragraphing) in notes. Once that is done, it will be possible to separate multiple notes with a blank line, easily. */ global(page_width) global(tab_size) global(left_margin) global(note_flag) proc main() { set(page_width, 80) set(tab_size, 3) set(left_margin, 1) set(note_flag, 1) /*set equal to 1 to include notes, 0 not to include notes*/ getindi(indi) set(x, 0) set(skip, left_margin) set(x, outfam(indi, skip, x)) nl() " -------------------------------------" nl() } func outfam(indi, skip, x) { set(x, outpers(indi, skip, x)) if(gt(nfamilies(indi), 0)) { set(skip, add(skip, tab_size)) families(indi, fam, sp, num) { set(x, 0) set(x, outline(concat("Family #", d(num)), skip, x)) if(date(marriage(fam))) { set(x, outline(concat(", ", date(marriage(fam))), skip, x)) } set(x, 0) set(skip, add(skip, tab_size)) /* if multiple spouses in a marriage, this will only pick up the first one */ set(x, outpers(sp, skip, x)) if(gt(nchildren(fam), 0)) { set(x, outline("Children", skip, x)) set(x, 0) set(skip, add(skip, tab_size)) children(fam, child, no) { set(x, outpers(child, skip, x)) } set(skip, sub(skip, tab_size)) } set(skip, sub(skip, tab_size)) } } return(x) } func outpers(indi, skip, x) { if(indi) { print(name(indi), nl()) set(x, 0) set(x, outline(name(indi), skip, x)) set(skip, add(skip, tab_size)) set(s, "") if(birth(indi)) { set(s, concat(", b. ", long(birth(indi)))) } if(death(indi)) { set(s, concat(s, ", d. ", long(death(indi)))) } if(burial(indi)) { set(s, concat(s, ", buried at ", place(burial(indi)))) } set(s, concat(s, ". ")) set(x, outline(s, skip, x)) if(note_flag) { set(s, "") set(note_separator, "") fornotes(inode(indi), note) { set(s, concat(s, note_separator, note)) set(note_separator, " ") } set(x, outtxt(s, skip, x)) set(skip, sub(skip, tab_size)) } } else { print("_____ _____", nl()) set(x, 0) set(x, outline("_____ _____", skip, x)) } set(x, 0) return(x) } /* outtxt -- removes new line chars from text and sends it to output via the outline function */ func outtxt(txt, skip, x) { set(cr, index(txt, nl(), 1)) while(ne(cr, 0)) { set(txt, save(txt)) set(txt2, concat(substring(txt, 1, sub(cr, 1)), " ")) set(x, outline(txt2, skip, x)) set(txt, substring(txt, add(cr, 1), strlen(txt))) set(cr, index(txt, nl(), 1)) } if(gt(strlen(txt), 0)) { set(x, outline(txt, skip, x)) } return(x) } /* outline -- buffered text output with linewrapping and and indentation preservation the vars: x -- the column up to which text has been written on the current line skip -- current indentation, added to x at the start of a new line */ func outline(text, skip, x) { if(eq(x, 0)) { col(add(skip, 1)) set(x, skip) } set(max, sub(page_width, x)) if(gt(strlen(text), max)) { set(space, breakpoint(text, max)) if(eq(space, 0)) { if(eq(x, skip)) { set(text, strsave(text)) substring(text, 1, sub(max, 1)) "-" set(x, 0) set(text, substring(text, max, strlen(text))) set(x, outline(text, skip, x)) } else { set(x, 0) set(x, outline(text, skip, x)) } } else { /* space gt 0 -- good break point found*/ set(text, strsave(text)) substring(text, 1, sub(space, 1)) set(x, 0) set(text, strsave(substring(text, add(space, 1), strlen(text)))) while(eqstr(" ", substring(text, 1, 1))) { /* strip leading spaces */ set(text, strsave(substring(text, 2, strlen(text)))) } set(x, outline(text, skip, x)) } } else { text set(x, add(x, strlen(text))) } return(x) } func breakpoint(text, max) { set(space, 0) set(occ, 1) set(next, index(text, " ", occ)) incr(occ) while ( and(le(next, add(max, 1)), ne (next, 0))) { set(space, next) set(next, index(text, " ", occ)) incr(occ) } return(space) } lifelines-3.0.61/reports/infant_mortality.ll0000700002540200244210000000465110076661057021371 0ustar prappDomain Users/* * @progname infant_mortality.ll * @version 1 * @author Eggert * @category * @output Text * @description This program finds families that have lost multiple children. You give it the threshold for the number of young deaths, and the threshold for the age at death, and it finds all the appropriate families. infant_mortality - a LifeLines program by Jim Eggert (eggertj@atc.ll.mit.edu) Version 1, 19 September 1994 */ global(yob) global(yod) proc main() { getintmsg(numthresh,"Enter threshold for number of young deaths") getintmsg(agethresh,"Enter threshold for age at death") forfam(family,fnum) { if (ge(nchildren(family),numthresh)) { set(countdeaths,0) set(maxageatdeath,0) children(family,child,cnum) { call get_dyear(child) if (yod) { call get_byear(child) if (yob) { set(ageatdeath,sub(yod,yob)) if (le(ageatdeath,agethresh)) { set(countdeaths,add(countdeaths,1)) if (gt(ageatdeath,maxageatdeath)) { set(maxageatdeath,ageatdeath) } } } } } if (ge(countdeaths,numthresh)) { key(family) " " name(husband(family)) " and " name(wife(family)) "\nlost " d(countdeaths) " children by the age of " d(maxageatdeath) ".\n" children(family,child,cnum) { call get_byear(child) call get_dyear(child) name(child) " (" if (yob) { d(yob) } "-" if (yod) { d(yod) } ") " if (and(yob,yod)) { d(sub(yod,yob)) } "\n" } "\n" } } } } proc get_dyear(person) { set(yod,0) if (d,death(person)) { extractdate(d,dod,mod,yod) } if (not(yod)) { if (d,burial(person)) { extractdate(d,dod,mod,yod) } } } proc get_byear(person) { set(yob,0) if (b,birth(person)) { extractdate(b,dob,mob,yob) } if (not(yob)) { if (b,baptism(person)) { extractdate(b,dob,mob,yob) } } } lifelines-3.0.61/reports/interestset.li0000700002540200244210000000237210076661057020352 0ustar prappDomain Users/* * @progname interestset.li * @version 1.0 * @author Vincent Broman * @category * @output indiset function value * @description Extracts subset of the database which are close to direct ancestors */ /* * Return the set of people who are wide-sense ancestors * of the given individual, plus the children of these wide-sense ancestors, * where a wide-sense ancestor is either the given individual himself/herself, * or a parent or step-parent of a wide-sense ancestor. */ func interestingforebearsof( indi) { indiset( res) addtoset( res, indi, key( indi)) set( pf, parents( indi)) if( not( pf)) { return( res) } if( h, husband( pf)) { set( res, union( res, interestingforebearsof( h))) families( h, f, sp, ctf) { if( sp) { set( res, union( res, interestingforebearsof( sp))) } children( f, ch, ctc) { addtoset( res, ch, key( ch)) } } set( hk, key( h)) } else { set( hk, "") } if( w, wife( pf)) { families( w, f, sp, cth) { /* add only husbands not the father */ if( and( sp, nestr( hk, key( sp)))) { set( res, union( res, interestingforebearsof( sp))) } else { children( f, ch, ctcc) { addtoset( res, ch, key( ch)) } } } } return( res) } lifelines-3.0.61/reports/ldsgedcom.li0000700002540200244210000000520210076661057017735 0ustar prappDomain Users/* * @progname ldsgedcom.li * @version 1.2 of 2004-07-03 * @author Vincent Broman (vpbroman@mstar2.net) * @category * @output gedcom event and string function values * @description * * Utility functions supporting LDS aspects of GeDCom data * ldstemple( event) -> string, * ldsspousesealing( fam) -> event, * ldsbaptism( indi) -> event, * ldsendowment( indi) -> event, * ldschildsealing( indi) -> event * * I put equivalent functions in my C source, but this can be used everywhere. */ func ldstemple( ev) { fornodes( ev, childnode) { if( eqstr( tag( childnode), "TEMP")) { return( save( value( childnode))) } } return( 0) } func ldsspousesealing( fam) { fornodes( root( fam), childnode) { if( eqstr( tag( childnode), "SLGS")) { return( childnode) } } return( 0) } func ldsbaptism( indi) { fornodes( root( indi), childnode) { if( eqstr( tag( childnode), "BAPL")) { return( childnode) } } return( 0) } func ldsendowment( indi) { fornodes( root( indi), childnode) { if( eqstr( tag( childnode), "ENDL")) { return( childnode) } } return( 0) } /* * ldschildsealing(i) returns a SLGC sealing of child EVENT for the INDI indi * or if no such event is found zero is returned. * if the person is a child sealed in more than one family, * only the first find is returned. * This searches first the INDI-SLGC or INDI-FAMC-SLGC syntax, then the old FAM-CHIL-SLGC one. */ func ldschildsealing( indi) { fornodes( root( indi), childnode) { if( eqstr( tag( childnode), "FAMC")) { fornodes( childnode, sealnode) { if( eqstr( tag( sealnode), "SLGC")) { return( sealnode) } } } else if( eqstr( tag( childnode), "SLGC")) { return( childnode) } } set( k, save( concat( "@", key( indi), "@"))) if( p, parents( indi)) { /* children( p, ch, i) */ fornodes( root( p), childnode) { if( and( eqstr( tag( childnode), "CHIL"), eqstr( value( childnode), k))) { fornodes( childnode, sealnode) { if( eqstr( tag( sealnode), "SLGC")) { return( sealnode) } } } } } return( 0) } /* for testing proc printordinance( ord) { if( ord) { tag( ord) ": " if( val, value( ord)) { val } else { set( ordd, save( date( ord))) ordd if( ordt, ldstemple( ord)) { if( ordd) { ", " } ordt } } nl() } } proc main() { "All individual ordinances" nl() nl() forindi( i, c) { "#" d( c) ": " name( i) if( b, birth( i)) { " b. " long( b) } nl() call printordinance( ldsbaptism( i)) call printordinance( ldsendowment( i)) call printordinance( ldschildsealing( i)) } } */ lifelines-3.0.61/reports/line.ll0000700002540200244210000000733610076661057016740 0ustar prappDomain Users/* * @progname line.ll * @version 1 * @author J.F. Chandler * @category * @output Text * @description * displays the descendancy line(s) from one person to another. This program assumes no individual has more than one set of parents. Algorithm partly borrowed from TTW's cousins program. Version 1 - 1998 Apr 22 - J.F. Chandler This program requires version 3 of LifeLines. */ global(link1) /* table of links back one person */ global(link2) /* table of alternate links */ global(elist) /* list of chain ends */ global(dots) /* person counter */ proc main () { getindimsg(from,"Which ancestor?") set(to,0) if(from) { getindimsg(to,"Which descendant?") } if(not(and(from,to))) { print("Not found\n") return() } set(fkey,save(key(from))) set(tkey,save(key(to))) "Descendancy line from " name(indi(fkey)) "\nto " name(indi(tkey)) ":\n" print("Searching for the line(s) from:\n",name(from)," to ",name(to)) print(".\n\nThis may take a while -- ") print("each dot is 25 persons considered.\n") table(link1) table(link2) list(elist) set(dots,0) set(found,0) set(gen,0) set(maxgen,0) /* Link the ancestor to self (unique marker), and add as the first entry in the list of chain ends. A "zero" person in the list marks the end of a generation. */ insert(link1,fkey,fkey) enqueue(elist,fkey) enqueue(elist,0) /* Iterate through the list of chain ends, removing them one by one; link their children back to them; add the children to the chain end list; check each iteration to see if the target person has been found through both parents; if so quit the iteration; also quit three generations after finding through either parent. */ while(gt(length(elist),1)) { set(key,dequeue(elist)) if(not(key)) { set(gen,add(1,gen)) if(eq(gen,maxgen)) { break() } enqueue(elist,0) continue() } set(indi,indi(key)) families(indi,fam,sp,n1) { children(fam,child,n2) { call include(key,child) } } if(not(found)) { if(lookup(link1,tkey)) { set(found,1) set(maxgen,add(3,gen)) } } elsif(lookup(link2,tkey)) { break() } } /* Quit if the "from" is not an ancestor of the "to" person. */ if(not(found)) { print("\nThere is no such line.") "There is no such line.\n" return() } set(gen,1) "\nWorking back:\n\n1. " call do_person(indi(tkey)) call printrest(tkey,gen) } /* Recursively print the rest of the line back to the source. If the current person is linked through both parents, also print the alternate line starting from here. */ proc printrest(key,gen) { set(gen,add(1,gen)) set(new,lookup(link1,key)) if(eq(0,strcmp(key,new))) { return() } d(gen) ". " call do_person(father(indi(key))) " & " call do_person(mother(indi(key))) if(alt,save(lookup(link2,key))) { "* " } /* mark a branch point */ call printrest(new,gen) if(alt) { nl() call printrest(alt,gen) }} /* Link a new child (indi) back to a parent (key). If the new child has already been linked once, use alternate table. A truly new child is added to the list of chain ends */ proc include(key,indi) { set(dots,add(dots,1)) if(eq(25,dots)) { set(dots,0) print(".") } set(new,save(key(indi))) if(lookup(link1,key(indi))) { insert(link2,new,key) } else { insert(link1,new,key) enqueue(elist,new) }} /* Print name and dates for a given person */ proc do_person(p) { name(p) " (" set(e,birth(p)) if(not(e)) {set(e,baptism(p))} if(e) {date(e)} " - " set(e,death(p)) if(not(e)) {set(e,burial(p))} if(e) {date(e)} ")\n" } lifelines-3.0.61/reports/listsour.ll0000700002540200244210000000146410076661057017671 0ustar prappDomain Users/* * @progname listsour.ll * @version 2 * @author Hannu Väisänen * @category * @output Text * @description List source records. Written by Hannu Väisänen, 1 May 1997. */ global(sour) proc main() { table(sour) forindi (person, m) { print ("i") call print (person) } forfam (family, m) { print ("f") call print (family) } } proc print (p) { traverse (root(p), node, i) { if (eqstr(tag(node), "SOUR")) { if (reference(value(node))) { if (not(lookup(sour, value(node)))) { insert (sour, save(value(node)), 1) set (n, dereference(value(node))) value(node) "\n" fornodes (n, m) { tag(m) " " value(m) "\n" } "\n" } } } } } lifelines-3.0.61/reports/ll.png0000700002540200244210000002574407612400727016575 0ustar prappDomain Users‰PNG  IHDRHTo90tEXtCreation TimeÐ10_ªùtIMEÐ2 Axón pHYs.#.#x¥?v+bIDATxÚí} ˜Õ•ð­ª×+ 4ÐH³t£lÅ÷u2IÄ%óGtÂ(ŒÍ$N·ˆ“ÑßÄD¸ÆD“‰I4‹NˆŽŽ£I&*š0.QŒ+íÊ.K ÒÝt¿÷ªæÜ{î=ukyUõ¶~ÝøŽÏ潪ºÛÙï¹çÞ2vwý‘U¡ UØ»À¬tªP…*”R•îÀPÇqrÝ2 £Ò½«Bâ¡d‚! åŠØv6ê«'´V¨Il(y©†?ô­B^P¬`ë4N Úò‰â Ÿ°]]s5Jà¿Þš=bŒ¿´zœ’Œ¥˜áSœW¡ÜP”`#ýtyˆvbá¦ÁA>V0Õ¶K-2Åm¾}õPU9}¦ üSäX ;v{8â¼ ƒ… 6QÚqA\g~zƒ,ð¿ÑXþ[Õ¶+uPƒB誇~±€Qž²:^‡išºØ ëcgŒéÝ>ŒÄ^ÙÏ"q^•íÁ‡ÛGiÛ–_á èrÓС¨vmѪíØ.Ÿy=@ÓÍ:ðE¿ì1>¢ëÁ¯Lg\o…r¢^j(¬Yï²CPºl]%ÅáœÆ‘¯¤%¤µŽ"“·É_U¶+ÅXl—Òð_6k3¤º×—%ò`0KJ™²$yÜ'Õ6þµ5^Ó¼MaR9—YH m›BçeJ_øFAA€†¿ü¦%9WØÃÁ`_ÎÕØÃeÌ4e.g~ ”ŠÖÔ®NhÇtPñUe»RPˆ`ë~ QÚÎÂ߬²®Ppã&l†eqyà—„<ˆ'ò¦µËa(ÕYÑ´MvWq6ç.nW-Ë-2]¶ƒ‡oY¬JH É6µKÔ þÂpx祈—ÝhksWª³¼øáÅ9bÕKYÌ´ùêÓZs7G´K8'Å$æ—rªA´Á‡‚]qþ—( –ÉŠ+á`r^'3Áa–m‚8Ô`yË•‡>#ˎφ-צé‡âéL+†Èo±Ñ\C0§1YÃ6mµƒi µd8Àæž0tUá\ŠÓL¶)œ µ>Çm'”W£˜àzþÎ]%N„GFᤣkDëª7>x·`{ã±Ð Gñ¶½Š\Ș´•\$øwƒüõ˜Ly†¶´!š@2å8¶È¸"mbJ{†fXyòY’êt:#.„Ó2Å]ƒ†Àddxðø•”šÐkY%`bB¡õYHµ4àWI‰Y´VíJ_)ëz76#ÄôÂPð©¶€ª<>y¦"Xh@²™lÖ/ØŽ%f\Ù,Ÿf+‘.D<Á,Çå3[lŒ!Á=S„Í Û¡,_%ª¬TId÷4fåin­G—U„TÞi6)5Ï BáœK7žbžk§l3*ž¯¤é£v5‹ç §:¨øláÎ0/Ú«Ò=˜PXðLþÕ×Z(H2ÆT î†e™Ôâ’‹”ТzÈÎ |ë oÒv8¼KÌq½JMª3¯XãQ ³@†©ô¹4Éç.ºµD¸œ¹™ˆsz’¨UŒýÔm8ÓšÐa–J )JSoî&*Ø\ñŸRê1eÒ„:¶»¸+ ZÜ‘ŽY¢¬òÈÑR–¤OØϪr޵rê/™kÝVÛŽgÒèm…âmvë§'Il‚c Z_T¦eq´õ9Gï9†£ÅuS÷ž|Åóâ}¤®Vó`ÉCŽÜ’tCA®'Éò—DÎKK¦RµHíÓh‘)¥î—Ï43.Â6t%¯“–ÄPÝbA+Kœ$~J‹¤²2¤E%.Ôƒ@îB‘ûËÑÌž[V,›ñ¸W¼4á§\ÂÌsf ?uLªpšŽsCFõæ‰@W¢bí ÓtÔL>èËä»Lâ¡`NûÓà}=/o¡„(™B[Œn.´ÝÂ-Áî®P%äÃ]®ñæ’Ýf‹åq Ì. ÚtM«©ÉýR¤=Z¦Ë†ŽMéåÒœ‚OŠÅ/|UÇ”VJ§óú«$WA´©±¸k~”e±½DŸië¨ÖdXükxä?¥bñLšB¿(ð*¯ÚdRãYRÝ1‹•U­¹Á†âPwËœÄùðzOÊJ¦$-êÍééZÍþ1&l”™Rªÿt×]dy9=$—jB«¥p6m&–j12gëÖ@šTÓPfUbi/EÚ¶Sl±l¥Ó»§éÅ7lŒŒí:ì@^ª±¾¯c_âÌ~“ØØÑ¼9¯®w?H¶ˆÌslŒæ,Z–µ·;1†ŽØÂ °üd8ÿ ×ü D‚Ãós 'sY_(Aùѧ*>üh« žú1ÏÜ7dŠ}†ú¥ˆ7L|râòáuUXr2…Lú¼"í¤˜Oç@¸‘³Ñ$*¬Á®»åWµ7ý2ɓ˟úqõ炆3.·V¼ý̶Kþ~ÛùsM•ÎIot—œpëµw[¾ý“º•¹êi~î5ýg¦¥ùƒÿÿÍç7|a3å!+ù =OK1í_lA'œõì_ϸ, –^û·oìêØ·T8¯½9žÖ}ÇÎZw×U†AS¿Ö#èÉí:B<Øð Ô¸é&·7Ðó$Þ¡¬>‘.™|’Ú"íkˆhQo¿“ „øú|'Â4î'¨8ZKNÕ7°í#¿óÓ‘¿øm^öOo÷üØ"⹤üݽÒÏ'¦œB€3âÙ-SitL÷/c.r-ÿ‡(åÎÌ=X•k{¡"‡r%’ œàŽ€à̉„—ƒL¾FõÝFܵÿœ-2O’фқ|iÿ¹d{olÍùV"ûJàSÞmúáùJ5@Ï‘35Õ«(ÆÎäüSçZ}ýÉWˆ*ÔMô/0YKx³Cçºù3𺚈Ñchn¿ÎʪNQÊñH‚žšê2É—?j9bŠfÐέ{´ø_V2¹“>5d·EÛæP˜6<®h4‹ÛDª®Èúñ3T¶‡`µZ(€Îd²#21†XÿݰuÔm÷ÐzÿĨ–¡¡°¹‰àËáÌÖü†)w"ãÒÍÑ·»…qŒ¡keL´¶m®ÓI8Ä6à%ÉšÎÕ&P§Ü{cg¶J:Ϊ<9ÂŒk µÁ:Úzžo× ‰®Sˆ|‘ýd¹Û(ý‰²GßðSr2Ñþ|9ïµÊ¬zÙ¢MñZ}ªÛ(Œ1Ë·Z˜|ãC² 6ÃF°êBC ä äH óÃû «¶gz»­%ºaV)°­ÔÐzî]ÖÖWÅ™ãáHè$”[e, ˆÇ}KÛL¥DºÐÌIvK¨L9Ú³Y¦¥”Ú"‰OzUì”,¤¾§@J¼š§’x3¿î1§®clšP_§HYâŽUMËmžQèûád2’7y¡$d¢ýùºAu–q3 8Ÿ„„ާEÚ¿-·¥0sÓ³Á†åØI5œ; —Á3€>ľ3b[DXkøã‹…5Ý7y|J( `W5Wr¸-8%}ìnɰC´r.PõêΩbY!7ùdèb@NtÕžôŒÕDÅ]‰À yJ?†Ì™õ…oÇ“„ãá{²ŸØ]O‰Ù¨¾“/¸¯´d‚‚ äÊY@Ž`jž”êt:‹‰ý*oÂñÉp©t¼}ʆÄÅ¥ØlCä:aéºÃI°“€t·8ð1ã57!àÆl겺ºÖÓ}Ì!ð·vÇ®ÆÎ5{:¦:2åƒ,6÷3Iäb8±¬Üa{r]˜wÕ„ùNeR7Ïn—Ž%MAS‚€•FkˆåFid¼sVfèÛ¹Õ$3›õìúÔT(‘ä;Zò¬Ÿtâ…ãžÜbsÁã!5ý)GCRNgJM&®‚Q0€Íðd[n‹©Æ¦m•ÕÏh8¦A.Œ^!ÂÞ&ØŽlD®!ð" `mÜš¤†mŸ:âíÿ» 3²‘]FÞå02i9ü©~Á´e=Ô7ì—»ìŽ}ižl5N÷÷§àr®p?¶ãNî˜ÆV_l=Lí;Ú³ŸA†i< –"$$‰§Kµo—Y¦j‰\KJ¡`j-|7øWò® «À|VÈæXEpî´µf¦LÑ&±k½Ð> qžU~¤üJÝê8Ò¤¸?=07ÆçN&fÂ2浟Êh{ìÄ¿2+^ø ¦ôó…^å¾¾¾J= K5mã+!™ô3 ‰‹8:J•ðî1-6F+gúT[ŸÈ0oz >àñÛ•:ðI÷pì¶ ± ŒÖS}j/I…é±£´"õ˜ ‰ Nn ³bÕæR2± )fåÉC—²¢¯rÚœWÛ¦b¹Ð4ÂwDVá$œ¬Çyl¯÷ˆ}é Uƒ0­Ü)°™käQÚ?ËÆP[ÙlUqLCý˜_$¼´d{ø‚(Eõ…Êc&$]æcH\Ð5ѯ1üFÛP‰ÒãVâ…á*Ø~ W4¤„d5E™kD¡J~V{»4GÑ–ç~¹RÝ´juCçj«o`ôËo1õÆC,ÐwÔLøw`æ'ú÷Ÿœ™0ŽOÇhÜvHS0Á¿èÖòˆ”i[ÂI©à;Õë Ë¡uêò ¸oü°kÜòWê>ìªÝ°…žÙ}ÄA»;¦î8ô4œŒy4mé±=é,Ò‹¦ã}èTŠr çöbºfŠXáÿÔlÙQÿÁ†ÆU«¡Ø¨—Þ¢nS»}‡Lc uNCýžƒöëuÆ*˜fŸÉÀ *K£¥·`8 vÙ—§ârÅ×~í¬uó>C?>âܼšh~îµOúGýʦ‹æoûâçR)ÜÚe™ÊŒÐLþi~òùÑO½Ð¹–6âO¯Ò÷L{ëG§ßý7'ôNÞ'0}â€eø’m`dÕ²ìJ‰u’}ÝÇòÆ ‹TÿÝž¶œwMý³‰.øÚu_£Ÿ“~·¬õþ'êÖm>Ù$°—niÞ2ÿ”uw’ždêh[Ù¤‚ôó…[…ë„KÌÉô¨'Ÿ/™¸ÊçðrçA-ݧ6uZòxÓ/¯ Qpt²Ñ–æžO¹cÞgú˜Ê¼…Ú¡B>‘0œ»"À#"^{-o&j|þµ ×ý¬.Žr>H­Ý4殇àÓ7»cíÕ_ÎLl1´½iŽÚ·¬¢!⊗Ÿ›¶ÍøöO;×D?\ÓÕ=ùÎûÇ,}nÕ ‹úÆŒr}rm¿”.áj­Ën|îµ}ÊI&-—FÌ»wºåÞ¦–€TW÷èÿX Ÿîy'm½èììè‘ Qâ/ó˜ñ?t˜ä"WÄ6cá{öV÷GS¾ðÿÚ¿z}¾ì¢CÃÊÎŽÏ_ÑúëÇ|×å,Nù½”W¼W˜Wß9äâ›c¥šž<ä«××ìîU¸ro9ñ6w|4éÜ«ÛÊI&Ô¿Öû&Ì[\˜TëÐüà“m_¹ÎرS?)@êAŠ ÁÊ\K›õÐEêýõϺ²!÷®Ï¼`Ò÷ïÿ¯?g®ßE+ÊîÄíÇŽŠN©Ÿ¬˜ÚJ-/¾9óÒ[k'!Àó^ãÙºÀ68dÒ[·6mk]xµµvSIZ¬ï\3õÂŒî]”ŽJÁZ=#5T|* ؾnh“¥(( ¡„Ѳ$õhBÍRv?çªT‰ˆ‡0î¿—O¿ñ—L?ÅM‹‹”DÝÅǧõK‰ó¼ aÖOÜò«ÂÊŽ|¥säê½ô¬¥™nÝçÜ«“L­—ß–<»1 €l·Üó(Æü2î«ÜÅ3'‡ÞTÁ&vñÎ…( ÅÁ•22úþ.á;>sÁµ¥%0MëÒçÑ3ÀMü&I+É…4Õí´„8/+ÖÁ=Î×VëÐúûe¹nYÝ»÷ùÊuƒL¦¦^¯Kàô·Møè˜Cà“niNÒb˽¿¯é\#;ãæ±eåb‰­ia]FðLOE Ùˆ!R¸qÁ@7­¥2³%W#ñ~°$µjul ^×ÉÇî<ú`(×°uÇÈ—W{è©ØRSîzhב3‘ÞîéN9Ö3bA[­©Ú"ÇØûlµ‰XicŸyÙXtvè­Ñ?úš“öÒ’iÌODÜÓ1õƒ[/ëoi¦T¶ï¯ßïú»ëãºÚv˽?úgK½síäf¾Ëб,ÿV² ¶îbn-f›|Iº&¶Ùñµ7ñF/>tXŽïþݰ¥áçÆ>¹õ´ã?øÇy™‘¸q·wæ'º?sÔ–/¾ßå·E“Ì×”{¿öë õ„ Ýå+{® W gh,kËWaæÆ¹Žö¡þt5|ØÕ7±Åw=µyÛÈ_ÆŸ¥Qr2Õ½½6ºÅ w\im‰ ­Û3½½óûWt\|sD‹ A2õµÎžL]­£%Õ˜j«™xw•ÿ´AZî"“-Ò9ø”U¬,2|Óm(×ú‘c1ÙîcgY8I÷lýæØ¨ ±gZ›¡%d&ïCwGÜþëØ·úÈNArÓMGå3Æ®þñ¿Lû»+S‘þ!XŒ­çÏMï3³X婸‚™Õ^œ;2=Ž+x#‹7 •PŽsíƒ&Ö`‚ãYÂì=úà5GÍÔ×Ìä&0ùÖZù˜-rkÅ‘†L[òž¡{ãež9^Wczø*<üðMéÌÀ@ZÿàöºtZîe»ã³•u ëž~)ö°|g˜ÒBŠê†Êr1wŸþÉØJF=ýž ‚¹n)okb´Ó1l6íTQhÏFâÑŽ'daëÉæ¿ýô†³æ0MÑd÷Ÿ¼ëª «­éù×bŸ)9™øÇ²²í­1}ûݲö3.›rùmãñhÓëï6nØbY²lJ€¥Î®ÇÎPxEß÷ªD‰ògÝu%½­A žÉ,?þ^>°Õ|Û[ÖгكE”wϬ«ì¹~|íúµ±íœÝáæå{è3äfã‰-™öÖhŸ­áO¯Ò>“Rÿó´Ø´‡Ž@p8ÚÍɇs Ìî!G}Ý‚Sƒûæþuó¥·P[í{ëcŸ)™úÕç[]Ý0Ñ€Ï8u%ÛÒ<0½==eBzòøžÃfôOØßÔˆ·q^¦òy™¾»ÉÑÒc yÅe¹]q¦6Ĉ£Ä$Aœ†å¾'4>F'D«#¦ø¦²‡Õ¼òvì3#>ØØöàSŒÑæm!™†X›ÞÚÕ3ûOvרò±Ø¤¿qçójĹ«Iàœó·UvO¼·cjÿ¸Ñ¡¯8îÐÚÈTóPhxõØgÊC&ÖwîgLÖ|¢Þñ¥½¿cêŽ3>µýÄÙÙæ‘êm!iÑ08ÛÁÀùo|Žg©ínÏi±åk–ÍüÞæWª@º«ÔÅ¿©·ã—OöùÏ?–¦é»gRÁRåѧŒË¶£f´×8Úé°K¬®äk±ó2ì ì¯ÈWzÀÏ0j8V%$“mO’{‚˜‘>xZÿIG×=ù|‘ÕÖu®i½ñðéúügÖ?·¿©A¸`*¡¥Fm†“= ¼òuü[5Í–ÇÅÓ”ß8¯ÿô]¤·aæ{š?_ d"?¦Êí êÞxOnÓÏÉkŽ:š›Žò¢:ô£N/Ê&W¦FbC§Ãîû© ¤—^œ X,öImБÿïºù’Ø™vrhy詃ϻ¦aãV-CʳY.²€J-¯`ëmi²-ß'“gluʧÿ“¥#ïP$nÔÐX^Üf„ÕVV…w£obÌ÷v»dÃw¿ëyAùà\žûpx‘*†^Ìo¸ˆLL©6g쨿¸63cßR5QÓÕ}ÐE75~Ø…Ã¤Ó hK¶þÖIsåì€bñž§N;‹2ÝÍwÚySñ-2Ÿb£n$ì³8¸ØÓ礫TØÓp˜¸”íá<ïtqiôoÞÊE¯Ä( )>È ™ÿÈLkëþÍw{¿ø¹RÕ²=cñ÷ëv÷i/<4å.bÓÌÅålý}—Þ—T扬€òMH3Ã}‡®Ç{ɣφ¡ëBªÈN–Ù[*Pa33ßÐkF}8g=ëùÞn¾¢#M™¢èU0¹³•#“ún8ãFï¾öÂM¾oÇUôžtTñ­Ô­Û<á+HªqILì$6èÀcŸN,oð ÚÎŽx|1&å4ÃGÒá«•0º‹aà$:Ìtõ·²LfwÏ;©_$9Zª¶Þq}º=T®FhÙž# îOˆsŽ0´'©À#ZôÖ…ü‘–¼Ãô*¬øÀôö† ‘Ép&‚]ãš{¾xúÎ…“Ng¬÷×7>ûjí{ë_{'63<Æ=ò?ÛÎû?rÝ[,}»‡$…%p•W°åÛOò  þ£3æ’”ÅSʰTJ;¥,¹`ð—Ú+Åe64}v{+‹[}IOoßqöÉYý¼¼Þ,™õqJù]Fâ±#X¢†ÂÐîâ\æ$Å›Ž4ÚQ$½é”@ñlÛö§˜R%'“šõJ­èÈÃM|%“²2ûOÙÑ>QMíÔ®ÝT»e{ãªÕM/¾1ò¹øŒ&ŒvÃö]öÄžŸ‡É,çê5iþ)LÞ‚—“6åþ'ò êRý½³;zfMW‰¸I7Bp¶®Ié¥P¥f¢â†(n0÷î27æNÇΪûÍãÑÅÞ[WScaŠ?¾¢Éñf†¶ˆ&ÒÓgÎ1‚Ë-—x 8þñ?N°–ŠóôÄ–î9G:Γב–JIVOÒt.z%4ÙÁâécaq)¥e nð2ÝŒLq†©çµ<Ù[¤f9Ùý&õî;±çȃ¶.ü,ÜóÔ‹o½7çhÔoÝ‘™:Ñ"WÜRþM˜,¯Åžðƒ%—íºxÁÀa3ô÷&ò¥ V[“2d¢µòV§Zƒ¥«IY.g“x›FúÓGÆoüã‹ __80ª‰Ÿ\/^¸…ïv µ ú¼×Ýýgj"éŒüòÎÆ>ødÁ8ï9vVÏg7´¼ $-‡"-±Å£—i\¼ÿ“‡W’L*ÉÏÚ¶³æí5|³Ç+o;½}ÖºÍÖú-[¯ÿZÿø±¾×wñE²“Iï7iÿù߈î6GrJê‘ Tû„{èf˜2ÍúúZÚy“Ð@©ºº*¥c!¡ññ5Šz£pü˜ô‚Sk–<Q&ác¿ó³í·ÝŸ¿›„i'X3sÇ®É_þv]çšþŽ©öØÑpeϬéNC´5pð46¢žŸ¬9­ æfÊÉÈË--Šaøü‹z t™yi E3½Ž:¤øø1ýóO‰ö­JN¦š[kXj­à35«sµ‘ÃöŽþí²Î ¾ñ›gûÎüD<žÛZk@‹ÉíßžŒì ®†®`C¿a.Aš2ឬ­©a*³ŸáÌpc`1Ź^L¹1$Ó#`_ü\´`Ôÿö™±†±óWXôÒ6Gž¿Õrñ͸û¿N…O´sg z¿¾°ïÒs°ÏÚôi0pf×7|«¤%i1‚^8ïs±“¦Ò’Éik­½ç#ΗuÛ}ýŸ=æÛúËCñïˆß=]6ÛÞj´·ê›CôHgðù!,Ø8sÓv&$,e ·1zg|~Qe_£º€9‡ÍÈ,85+Û>]ûJçž³æ 3‹ïN]¿¹þ÷ËffgìÛÙBK_IÜ¥Y>Ó63& ž…!-‘&-Ž^¡ÅíÙ±¾+5™²sމe €qó¿±ûê/ï9óSJª™±}gïÿ0êÖû¢ œ}²yèkÆŒåŽy ]Á¦è.½Š1ið,P*¹€*’R\”øÖW¬¥ÏÅêfsí¦Æ[îmÌsÈvKsï}×ù(ÇòL°)‚ÃOb:s!-I‹ô*¦xÿ5ÿ\2õ_ñ…$‚ ³€Q—ÜŸôq‡òoß™ä¤-hÜËußb¤š ‘ã‡Ã{f4½•I6•R~t¢FÈâÜhkÞóÈ÷Ê4便œ::• ¢Hç~QHKP6‚^Åg-Í}ÿu[™°J&ÖÞ:°ø¼ä•Ô<ûø$‘j€+¾`ŒƒíyÀL™_<2íÁtÇSX©<øÌUœðhwLí¿û›¥¬ÓÒ¼çgר³gTJ¤C‡Ÿ¼ã¼HzEwÀ[\2¥Ÿ—™BC¾u¦¿4×ÇŠ±”º‚ͤgÅò•L_©¼\;#YqÀuߊŸ;%Ê^tÚ[Á¼@ù:¢%ßð“ g(Ò’6Z½¢‹>™@•”V¶Á URf†¸`{Ãå,•oq°Û}+îÉ„þ‘¤/8£oéÀ¼TPž‹Ç^18/+½ŸL Ûýw^Y¼6±›Z ¼€Â03tƒgC`¾ÝÇbЩ5wÿWêѧ|^:aÏØ¸-3ÿd¨¤ÒãØËaðÉ”™JvÎÑÖÒçS®=»£˜Q»»JsšDŒu›ÍÎÕæË«ŒÞ=fààÈÙm؈ ˜‘ªnðð£](Õ@ ã$â‹ zô?ÙŠß?lä)'Õï.vç3˹Á1Â:óôrErûKb¡w©fPu§ÌKŽ4y×`Aÿ=¾t»ïòÀù‰µ‚¯]×ϼ~{®!Äv#IYhèßûzÎü PzÜÐÓ“õëo­ê¡ÑAµ¼‡-5W]ɵ¾Þ"T =Y³–Ÿtû·sÇ“ËJ~l{[]c£B+ú> z„™-2¯ ÝX¶b'6¤Ó=IC¹Ê9*ˆÒ\ýô7b€7ì!ÒŽ(å»’œÉCU'Ùá³GþÕ |%ÌGDxÙ€ ×}èëX.¡'¡Tc£ ü£ŽÅ6‚¹káo=¬ŒÊéŠ=>mî_ÞZÕ«ßýÞMÓþáüIˆôàÝ{ï>ð̹ãñûÝ=mî«è]ÃOjýˆÃFþϳ™PŸŸÿ:•ßRƒZ3Ô‡â0zðØÒíôpô¢»‘°,<Ã|zéìµk÷Pg|£¾á¦5ðѯCá¯Ï5…n\vå»äûéäªãÃPÛòÝô ´ £ö5êë<Ô½ÕòuzhÉÁÀd± E” å(  jN2Þè!Ì<ìdô?¯8jÖ?h6ï©sÆ>¸ä`6¢™<£IF;HÄ…ç¿ ý!|ãe~>)Ô†xýµû_üOS| ¢N—‹¦–g°o]]i¨ðöâŠ#–-ïŽÀ6ÇEõ°RTÐů\0 °væéãeÐED+ô †Ï01ãã¦ßξdÑèbUé…‹:Y¾»X–ø†¼PxË^¶ø]¼íÂG§z€-èa’j‚è!Dw#aYxÊÂ3ð† ü~õµ°díB HQ(¨cÜDôBOôÇ€d`²¥ÿêe50³Øyx :¿ª³G¿ CÀ®â]ôtàù/x(´¡è² ”‘£ð. ¾Ãˆn¿s]¾ãš2€û–ð<0hø%Ä×J“'dÔ8EŒj5AìÜMÂ!0jÀ tLÈe*¢)ÅrÏz{³=± F¾9 8`Žô‹Ú˜p®úæûðå§÷l¿x*ÝEûvâ Íà“ƒ»^”ÅáÑÝgŒøê¢N,{ønêÜußÚ(tä F¢ˆ‡Î ê%ݰ(ö¡G!ºÉË®,~r¢>z(2Ô_n¿s=’œ eQßÃwüINq?´Êž†=þÐc0Ø—A~MOoÈ»{b»>4(‚øG€!PCh„ÁãL&i(ºì€˜¼€Çx pM‘Ö¬ív2z¼ÑCùDd‚[ 6A1KÎ䌊dõ‘,xÌ>NI†ÑÇ^.t7^!DsˆwÝÙšë‹:#°­m`ƒúÉÝ…N]OäC3&Ô-ºO@$œEˆFàðûÉõ'~¥»hî‚Æë-ãjíx…Ú¥N×\‚Mú0u2tÑÝH^–L¸¡Á„9 U@¾@5“kMáþÐ`G4&:r‡Fø÷5ìglCÑeA`€¿_^ùØÛXª%oèÛ RA¢ày0(-¡“ù$L˨õC)èÈp—03Ð œƒÒAiGu“œCH=Ec;§`Üvã4p °H ø\ý­÷A â lî½ç N #]Ûð †@OOm«'äÒÝžÞ,~Ñ––¥/Aho«S­÷`—tƒCU…!a7bËßµ>9g%S и'?'WÉC袱ë8OSÛë–­à_Àx‚°QÈÇ×Ì}ós`SŠKEw2´,ÍKÁ ¿í¦i½=Ùà”2áx£‡À¸7Û†¦æGè¸aø#±L^£êŠm)ºúJ´ ê)è*ˇCˆÇ¢±­ÿôtL+á«‹Þ†&Á¯¸î›ûéÅP{ §¢|éâwÀv]ãà0@4Þj€z^ð&|Ÿ Ä›Êâ]ðå‰Xmp ä(‹ó( î||á+@cáÄ : (ƒn%¢‡Û|Ë>®&W Ú ,E ‚ p¼NÈtÁ€:;Ô–o:±8TrÚÜW/õv†Ây H \Pø«ò¢Ë’;z˜àÂn^“¤ªÐñFi„ÔGwJƒˆ,“À¨:Ï<½… Va88iì¹ ø+8iR‰äKÎ!PÊ#Ø`ñ@r/ ZšZž!åú 1yøÕÝ¢ŒNAbé--58?OïF 1¼ ª´—ï.•…^RÌ#h2퉗 `"„´$ÂôÞ· =„hÈ·,¹O0m„ù¼Gý¨Pw.9HHh @Ó}x(æ`q$|Oß©¡ÇÅž1‚ Á K4D—+„!Ýc«ŠoôtÒ„h&Ï—QC‰æTu• © ¦Åùb9$_lëà_îÂcR´‡Ïn ’ïw/­ÜÍ„Wà°^6x,¸=· h@ •&`˜£çû‰ —uÉESÀ×Å•d=¡ô1Pæ¸H«P´61„Øn$/‹A…ÿôî=½6¢ñ-˜û‰\p\PxªŒkâÍL¦4ÉšÞÀˆ8¹:õ䱸<δµ}|Ø÷Ó‡\MEÌ wLù‚Î<üÈV ‰étOÒP®²Läá ѱó¸ ΄¾­*b¼±C`j‰àÍ•GÙ# “G0*e1üÕ Í¤Ð}DÄz‚ORŠGr¡µ4_N[¶s öp¢ë÷Åíõ.êD(‚Ì ¹.¸0ß»iú]wo|XåðüøŽ¢6ô‘!`€æ} y™–}ð±…½M°/»ò]$­ Òn»qZ¥»VIð%9#€ÏùôÒÙÃEßEá‹:ioË‘¥ó±‚½M°™×QW \µ$3ù½ôy³ßйÌP†ˆ!€O{û|í üa˜-Ì¥ší•‚]…*T¡º»« UØ ¡*ØU¨Â^ÿ WÒo±În)IEND®B`‚lifelines-3.0.61/reports/ll2html.ll0000700002540200244210000012727210522302260017351 0ustar prappDomain Users/* * @progname ll2html.ll * @version 2005-11-19 * @author JRE Jim Eggert * @category * @output HTML * @description * * This report program converts a LifeLines database into html documents. * Family group records are created for each selected individual in * the database. These records are written in files containing clumps * of individuals of a user-selected size. Index files are generated * for an index document. Or, optionally, all output is sent to * one file. * * You will need to change the contents of proc html_address() and to * set the value of HREF appropriately to your server. * You need to set the value of PATH to point to the directory to put * the files into. If you have 1000 individuals in your database this * program will create up to 1027 files, one for each individual and * up to 27 index files, if you set the clump size to one. * * This program will also generate three pedigree charts for the root * individual and descendants charts for selected individuals. * * You also need to set the value of HOST to be the http server and * path where you will server these files from. * * History * 01-07-94 sew; Created. * 11-18-94 jre; Added clump capability. * 02-16-95 jre; Added privacy option. * 03-06-95 jre; Added pedigree table, better sorting. * 05-10-95 jre; Added descendants charts. * 05-02-97 jre; Added ISO8859 encoding in GENDEX.txt file. * 07-09-99 jre; Added background decorations, improved HTML. * 01-15-00 jre; Fixed quicksort bug * 11-19-05 jre; Updated released version to rev 12. Many changes. * */ global(INDEX) global(INDEXTABLE) global(HREF) global(PATH) global(PEDIGREE_NAME) global(INDEX_NAME) global(TITLE) global(ADDRESS) global(FB) global(nl) global(qt) global(CURRENTCLUMPFILE) global(root_person) global(root_key) global(separate_clumps) global(PRIVTABLE) global(privacytern) global(sort_xlat) global(html_xlat) global(ISO8859_xlat) /* These globals are for descendant reports */ global(grouped_henry) global(comma_separation) global(first_comma) global(generations) /* This is for descendant and ancestor reports */ global(written_people) global(tree) global(ancestors) global(qt) global(deltax) global(deltay) global(html_xlat) /* These constants are for estimating birth years */ global(years_between_kids) global(mother_age) global(father_age) /* These globals are for time limits on privacy */ global(hundred_years_ago) global(eighty_years_ago) /* Decoration globals */ global(male_gif) global(female_gif) global(unknown_gif) global(logo_gif) global(background_gif) proc main() { /* Change these to suit your needs */ set(TITLE,"Eggert Family Genealogy") /* Title of main genealogy page */ set(PEDIGREE_NAME,"Eggert Family Ancestry") /* Pedigree chart title */ set(INDEX_NAME,"Eggert Family Genealogy Home ") /* Index title */ set(DESC_NAME,"Eggert Family Descendant List") /* Descendant list title */ set(PATH, "") /* path for file references */ set(HREF, "") /* host and path */ set(qt, qt()) set(male_gif,concat(qt,"7m.gif",qt," HEIGHT=68 WIDTH=68")) set(female_gif,concat(qt,"7f.gif",qt," HEIGHT=80 WIDTH=50")) set(unknown_gif,concat(qt,"5U.GIF",qt)) set(logo_gif,concat(",qt,")) set(background_gif,concat(qt,"oldyellow.gif",qt)) set(FB, 0) set(nl, nl()) list(INDEX) table(INDEXTABLE) table(PRIVTABLE) table(sort_xlat) table(html_xlat) table(ISO8859_xlat) call init_xlat() call init_years() indiset(people) getindimsg(root_person,"Enter root individual:") set(root_key,key(root_person)) set(clumpsize,0) while (le(clumpsize,0)) { getintmsg(clumpsize,"Enter number of individuals per file:") } /* getintmsg(separate_clumps, * "Do you want clumps in separate files (0=no,1=yes)?") */ set(separate_clumps,1) list(choices) enqueue(choices,"all") enqueue(choices,"deceased individuals only") enqueue(choices,"none") set(privacytern,sub(menuchoose(choices,"Include notes and dates for:"),1)) list(nonprivates) if (privacytern) { set(person,1) while(person) { set(person,0) getindimsg(person,"Enter non-private person:") if (person) { enqueue(nonprivates,key(person)) } } } list(desc_roots) set(person,1) while(person) { set(person,0) getindimsg(person,"Enter root for descendant list:") if (person) { enqueue(desc_roots,key(person)) } } print("Finding ancestry... ") addtoset(people, root_person, 0) set(people,union(ancestorset(people),descendantset(people))) addtoset(people, root_person, 0) set(people,union(people,spouseset(people))) /* set(people,union(people,childset(people))) */ set(indicount,0) set(clumpcount,1) print("done\nCollating index... 1") forindiset(people,me,val,num) { /* print(".") */ incr(indicount) if (ge(indicount,clumpsize)) { incr(clumpcount) set(indicount,0) print(" ", d(clumpcount)) } set(k,key(me)) enqueue(INDEX,k) insert(INDEXTABLE,k,clumpcount) if (eq(privacytern,1)) { insert(PRIVTABLE,k,privacy(me)) } elsif (eq(privacytern,0)) { insert(PRIVTABLE,k,0) } else { insert(PRIVTABLE,k,1) } } if (privacytern) { while (pkey,dequeue(nonprivates)) { insert(PRIVTABLE,pkey,0) } } print(" done\nWriting index(slow)...") /* */ call create_index_file(desc_roots) /* */ print(" done\nWriting name files...") call start_clumpfile(1) forindiset(people, me, val, num) { call write_indi(me) } call end_clumpfile() /* */ /* */ print(" done\nWriting pedigree chart...") call pedigree_chart(indi(root_key)) /* */ /* Disable privacy checks for protected access reports */ set(privacyternsave,privacytern) set(privacytern,0) print(" done\nWriting descendant lists...") call descendant_lists(desc_roots) print("done\n") set(privacytern,privacyternsave) } proc descendant_lists(desc_roots) { set(grouped_henry,0) set(comma_separation,3) set(first_comma,0) set(generations,0) while (desc_key,dequeue(desc_roots)) { print(desc_key," ") set(desc_root,indi(desc_key)) list(henry_list) table(written_people) push(henry_list,substring(mysurname(desc_root),1,1)) set(fn, concat(PATH, "onlyfamilydesc",desc_key,".html")) if (separate_clumps) { newfile(fn, FB) } call html_header(DESC_NAME, 0) "
      \n"
      	call do_header(desc_root)
      	call desc_sub(desc_root,henry_list)
      	call do_trailer(desc_root)
      	"
      " call html_trailer("","Genealogy%20descendant%20lists") } } proc pedigree_chart(person) { set(fn, concat(PATH, "pedigree.html")) if (separate_clumps) { newfile(fn, FB) } call html_header(PEDIGREE_NAME, 0) "Go to graphic version or sort by generation or " "name.

      \n

      \n"
          table(written_people)
          call pedigree(0, 1, person)
          "
      \n" call html_trailer("","Pedigree%20list") set(fn, concat(PATH, "pedigreen.html")) if (separate_clumps) { newfile(fn, FB) } call html_header(PEDIGREE_NAME, 0) "Go to graphic version or sort by lineage or " "name.

      \n" call ahnen(person) "\n" call html_trailer("","Ahnentafel%20list") set(fn, concat(PATH, "pedigreea.html")) if (separate_clumps) { newfile(fn, FB) } call html_header(PEDIGREE_NAME, 0) "Go to graphic version or sort by lineage or " "generation.

      \n

      \n"
          call ahnensort(person)
          "
      \n" call html_trailer("","Ancestor%20list") set(fn, concat(PATH, "pedigreeg.html")) if (separate_clumps) { newfile(fn, FB) } call html_header_graphic(PEDIGREE_NAME, 0) "Go to text version or sort by generation or name." call tableau(person) call html_trailer_graphic("","Pedigree%20graph") } proc pedigree(in, ah, indi) { if (didah,lookup(written_people,key(indi))) { rjustify(d(ah),add(1,mul(in,2))) " " call href(indi,neg(1)) " (see " d(didah) ")" nl } else { if (par, father(indi)) { call pedigree(add(1,in), mul(2,ah), par) } rjustify(d(ah),add(1,mul(in,2))) " " call href(indi,neg(1)) nl insert(written_people,key(indi),ah) if (par, mother(indi)) { call pedigree(add(1,in), add(1,mul(2,ah)), par) } } } proc ahnen(person) { table(written_people) list(plist) list(nlist) enqueue(plist,person) enqueue(nlist,1) set(twotothen,1) set(greatcount,neg(2)) while(p,dequeue(plist)) { set(n,dequeue(nlist)) while (ge(n,twotothen)) { if (eq(twotothen,1)) { set(label,"Self") } elsif (eq(twotothen,2)) { set(label,"Parents") } elsif (eq(twotothen,4)) { set(label,"Grandparents") } elsif (eq(twotothen,8)) { set(label,"Great-Grandparents") } else { set(label,concat("Great(x",d(greatcount),")-Grandparents")) } "

      " label "

      \n" set(twotothen,add(twotothen,twotothen)) incr(greatcount) } d(n) " " call href(p,neg(1)) if (other,lookup(written_people,key(p))) { " (see " d(other) " above)" } else { insert(written_people,key(p),n) if (f,father(p)) { enqueue(plist,f) enqueue(nlist,mul(2,n)) } if (m,mother(p)) { enqueue(plist,m) enqueue(nlist,add(1,mul(2,n))) } } "
      \n" } } proc ahnensort(person) { list(plist) list(nlist) list(klist) list(nklist) table(written_people) enqueue(plist,person) enqueue(klist,key(person)) enqueue(nlist,1) enqueue(nklist,1) while(p,dequeue(plist)) { set(n,dequeue(nlist)) if (f,father(p)) { if (didit,lookup(written_people,key(f))) { "" } else { insert(written_people,key(f),n) enqueue(plist,f) enqueue(klist,key(f)) set(nf,add(n,n)) if (gt(nf,nmax)) { set(nmax,nf) } enqueue(nlist,nf) enqueue(nklist,nf) } } if (m,mother(p)) { if (didit,lookup(written_people,key(m))) { "" } else { insert(written_people,key(m),n) enqueue(plist,m) enqueue(klist,key(m)) set(nm,add(n,n,1)) if (gt(nm,nmax)) { set(nmax,nm) } enqueue(nlist,nm) enqueue(nklist,nm) } } } list(sortindex) list(transindex) call translate(klist,transindex) call quicksort(transindex,sortindex) set(maxspacecount,strlen(d(nmax))) forlist(sortindex,sindex,counter) { set(p,indi(getel(klist,sindex))) set(n,getel(nklist,sindex)) set(spacecount,sub(maxspacecount,strlen(d(n)))) while(spacecount) { " " decr(spacecount) } d(n) " " call href(p,neg(1)) nl } } proc do_header(indi_root) { "desc-henry: Descendant report for " fullname(indi_root,0,1,80) "\nGenerated by the LifeLines Genealogical System on " stddate(gettoday()) ".\n\n" } proc do_trailer(indi_root) { "\nEnd of Report\n" } proc tableau(indi_root) { set(deltax,80) set(deltay,16) list(tree) /* this will be a list of generations, most recent first */ /* each generation will be a list of ancestors, most paternal first */ /* each ancestor will be a list containing their data: key (can be duplicate), generation, ahnentafel, y position, father ancestor, mother ancestor, duplicate boolean */ table(ancestors) /* keys are ancestors, entries are lowest ahnentafel numbers */ list(plist) list(ancestor) enqueue(ancestor,key(indi_root)) enqueue(ancestor,1) enqueue(ancestor,1) enqueue(plist,ancestor) /* Generate basic pedigree tree */ while (ancestor,dequeue(plist)) { set(key,getel(ancestor,1)) /* get basic information */ set(gen,getel(ancestor,2)) set(ahn,getel(ancestor,3)) set(person,indi(key)) if (lt(length(tree),gen)) { /* make another generation if we need it */ list(generation) enqueue(tree,generation) /* Note: can't skip a generation! */ } set(generation,getel(tree,gen)) /* get the generation */ enqueue(generation,ancestor) /* put this ancestor on it */ if (oldahn,lookup(ancestors,key)) { /* if we have already done this ancestor ... */ setel(ancestor,7,oldahn) /* mark it as a duplicate */ } else { setel(ancestor,7,0) /* mark it as a non-duplicate */ insert(ancestors,key,ahn) /* put it in the table of ancestors */ if (par,father(person)) { /* and look for a father to enqueue */ list(father) enqueue(father,key(par)) enqueue(father,add(gen,1)) enqueue(father,add(ahn,ahn)) enqueue(plist,father) setel(ancestor,5,father) } if (par,mother(person)) { /* and look for a mother to enqueue */ list(mother) enqueue(mother,key(par)) enqueue(mother,add(gen,1)) enqueue(mother,add(ahn,ahn,1)) enqueue(plist,mother) setel(ancestor,6,mother) } } } /* Make the geometry of the tree */ call make_geometry() /* Write the output */ call write_tree() } proc make_geometry() { /* figure out y positions of all the ancestors */ list(tofix) set(gennum,length(tree)) while (gennum) { /* for each generation, oldest generation first */ set(generation,getel(tree,gennum)) set(lasty,0) forlist(generation,ancestor,ancnum) { /* for each ancestor within the generation, patrilineal first */ if(and(getel(ancestor,5),getel(ancestor,6))) { /* has father and mother */ set(thisy,div(add(getel(getel(ancestor,5),4),getel(getel(ancestor,6),4)),2)) } elsif (getel(ancestor,5)) { /* has father */ set(thisy,getel(getel(ancestor,5),4)) } elsif (getel(ancestor,6)) { /* has mother */ set(thisy,getel(getel(ancestor,6),4)) } else { set(thisy,add(lasty,deltay)) } setel(ancestor,4,thisy) set(fix,add(lasty,deltay,neg(thisy))) if (gt(fix,0)) { /* too close to previous ancestor within the generation, fix this person */ /* and all his/her ancestors */ enqueue(tofix,ancestor) /* plus all parents of those persons below this one and their ancestors */ set(found,0) forlist(generation,ancestor2,ancnum2) { if (found) { if (getel(ancestor2,5)) { enqueue(tofix,getel(ancestor2,5)) } if (getel(ancestor2,6)) { enqueue(tofix,getel(ancestor2,6)) } } elsif (eq(ancestor,ancestor2)) { set(found,1) } } while(fixee,dequeue(tofix)) { setel(fixee,4,add(fix,getel(fixee,4))) if (getel(fixee,5)) { enqueue(tofix,getel(fixee,5)) } if (getel(fixee,6)) { enqueue(tofix,getel(fixee,6)) } } } set(lasty,getel(ancestor,4)) } decr(gennum) } } proc write_tree() { /* this procedure destroys (recycles?) the tree and all its generations */ set(x,8) set(maxx,add(x,mul(deltax,length(tree)))) set(maxy,0) forlist(tree,generation,gennum) { set(thismaxy,getel(getel(generation,length(generation)),4)) if (gt(thismaxy,maxy)) { set(maxy,thismaxy) } } set(maxy,add(maxy,deltay)) "
      \n" while(generation,dequeue(tree)) { while(ancestor,dequeue(generation)) { set(person,indi(getel(ancestor,1))) /* first write the person in a box */ "

      " strxlat(html_xlat,surname(person)) "

      \n" /* then draw any connectors to his/her parents */ set(top,add(getel(ancestor,4),5)) set(left,add(x,deltax,neg(18))) if(getel(ancestor,7)) { /* duplicate */ if(or(father(person),mother(person))) { /* draw a short line */ "
      \n" } } elsif(and(getel(ancestor,5),getel(ancestor,6))) { /* has father and mother */ "
      \n" set(topdad,add(getel(getel(ancestor,5),4),5)) set(topmom,add(getel(getel(ancestor,6),4),5)) "
      \n" } elsif (or(getel(ancestor,5),getel(ancestor,6))) { /* has one parent */ "
      \n" } } set(x,add(x,deltax)) } "
      \n" } proc do_name(person,henry_list,marr) { set(h,"") if (grouped_henry) { set(c,sub(first_comma,1)) /* one for the root symbol */ forlist(henry_list,l,li) { if (not(strcmp(trim(l,1),"s"))) { set(h,concat(h,".",l)) } else { if (ge(c,comma_separation)) { set(h,concat(h,",")) set(c,mod(c,comma_separation)) } if (and(gt(strlen(l),1),gt(li,1))) { set(h,concat(h,"(",l,")")) } else { set(h,concat(h,l)) } } incr(c) } } else { forlist(henry_list,l,li) { set(h,concat(h,l,".")) } } h " " if (person) { call href(person,neg(1)) } else { "" } if (l,lookup(written_people,key(person))) { " appears above as " l "\n" } else { if (person) { insert(written_people,key(person),h) } "\n" } } proc desc_sub(person,henry_list) { call do_name(person,henry_list,0) set(nfam,nfamilies(person)) set(chi,0) families(person,fam,sp,spi) { if (gt(nfam,1)) { push(henry_list,concat("s",d(spi))) } else { push(henry_list,"s") } call do_name(sp,henry_list,marriage(fam)) set(junk,pop(henry_list)) if (or(eq(generations,0), lt(length(henry_list),generations))) { children (fam,ch,famchi) { set(chi,add(1,chi)) push(henry_list,d(chi)) call desc_sub(ch,henry_list) set(junk,pop(henry_list)) } } } } func privacy(person) { if (living(person)) { return(1) } set(sib,person) while (sib,nextsib(sib)) { if (living(sib)) { return(1) } } set(sib,person) while (sib,prevsib(sib)) { if (living(sib)) { return(1) } } if (f,father(person)) { if (living(f)) { return(1) } } if (m,mother(person)) { if (living(m)) { return(1) } } return(0) } func living(person) { if (death(person)) { return(0) } if (burial(person)) { return(0) } if (b,birth(person)) { extractdate(b, da, mo, yr) if (gt(yr,hundred_years_ago)) { return(1) } } if (b,baptism(person)) { extractdate(b, da, mo, yr) if (gt(yr,hundred_years_ago)) { return(1) } } families(person,fam,spouse,nfam) { if (m,marriage(fam)) { extractdate(m, day, mo, yr) if (gt(yr,eighty_years_ago)) { return(1) } } } return(0) } proc create_index_file(desc_roots) { list(initials) list(initialcounters) list(sortindex) getintmsg(sortit,"Sort the indexes? (0=no, 1=yes)") if (sortit) { print("sorting...") list(transindex) call translate(INDEX,transindex) call quicksort(transindex,sortindex) print("writing letter indices...") set(initial,"no-initial") set(counter,1) forlist(sortindex,sindex,counter) { set(me,indi(getel(INDEX,sindex))) set(myinitial,trim(strxlat(sort_xlat,trim(mysurname(me),1)),1)) if (strcmp(myinitial,initial)) { if (strcmp(initial,"no-initial")) { "
    \n" call html_trailer("",concat("Name%20list%20",initial)) enqueue(initials, initial) enqueue(initialcounters, initialcounter) set(initial, myinitial) } else { set(initial, myinitial) } set(initialcounter,0) print("-", initial, "-") set(fn, concat(PATH, "index", initial, ".html")) if (separate_clumps) { newfile(fn, FB) } call html_header( concat(INDEX_NAME,initial) , 0) "
      \n" } "
    • " call href(me,neg(1)) nl incr(initialcounter) } "
    \n" call html_trailer("",concat("Name%20list%20",initial)) enqueue(initials, initial) enqueue(initialcounters, initialcounter) print("writing master_index...") set(fn, concat(PATH, "master_index", ".html")) if (separate_clumps) { newfile(fn, FB) } forlist(sortindex,sindex,counter) { set(me,indi(getel(INDEX,sindex))) "
  • " call href(me,neg(1)) nl } print("writing main index...") set(fn, concat(PATH, "index.html")) if (separate_clumps) { newfile(fn, FB) } call html_header(INDEX_NAME, 0) "

     qt \n" "This database contains the families of the ancestors of my children.\n" "Most of them are German, German-American,\n" "Syrian, and Syrian-American.\n" "This list contains about a twelfth of\n" "my entire genealogical database. If you would like to see more,\n" "please send e-mail." "

    For more information about German genealogy in general, try the\n" "German genealogy website, where I manage\n" "the soc.genealogy.german FAQ\n" "and the\n" "Schaumburg-Lippe pages.\n" "


    \n

    Start with me Eggert, James Robert (1957-?)\n" "

    Look at my ancestry chart.\n" if (length(desc_roots)) { "

    Here are some descendant reports:\n

    \n" } "

    Examine my RootsWeb Surname List (RSL) entries and my RootsWeb WorldConnect database.\n" "

    Here is my list of sources.\n" "

    There is also a PDF file (~400KB, 162 pages) of the entire ancestry.\n" "

    Here are some of my special projects.\n" indiset(baseset) addtoset(baseset,indi(root_key),1) indiset(addset) addtoset(addset,indi(root_key),1) set(generations,4) while(gt(generations,0)) { set(addset,parentset(addset)) forindiset(addset,addperson,pval,pnum) { if (female(addperson)) { addtoset(baseset,addperson,1) } } decr(generations) } namesort(baseset) forindiset(baseset,person,pval,pnum) { if (eq(pnum,1)) { "

    These are the base surnames in this ancestry:
    \n" } "" mysurname(person) "" if (eq(pnum,sub(lengthset(baseset),1))) { ", and\n" } elsif (eq(pnum,lengthset(baseset))) { ".\n" } else { ",\n" } } "

    You can also find surnames alphabetically by their first letter:
    \n" set(first_dash,1) while (initial,dequeue(initials)) { set(count,dequeue(initialcounters)) if (first_dash) { set(first_dash,0) } else { " - " } "" initial "" } "\n" "

    There are " d(length(INDEX)) " main entries in this website, from " set(pcount,0) forindi(person,pnum) { set(pcount,pnum) } d(pcount) " in my database, last updated " dayformat(2) monthformat(6) dateformat(0) stddate(gettoday()) ".\n" "


    \n" "

    " "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "
    Search this site   Point your feedreader to my
    \n" "
    powered by FreeFind
    RSS
    \n" call html_trailer("
    \neggertjkey\n","Genealogy%20query") /* make GENDEX index file */ /* */ print("writing GENDEX...") set(fn, concat(PATH, "GENDEX.txt")) if (separate_clumps) { newfile(fn, FB) } forlist(sortindex,sindex,counter) { set(mykey,getel(INDEX,sindex)) set(me,indi(mykey)) set(private,lookup(PRIVTABLE,mykey)) "clump" d(lookup(INDEXTABLE,mykey)) ".html#" mykey "|" strxlat(ISO8859_xlat,mysurname(me)) "|" strxlat(ISO8859_xlat,mygivens(me)) " /" strxlat(ISO8859_xlat,mysurname(me)) "/" "|" if (evt, birth(me)) { if (not(private)) { date(evt) } "|" strxlat(ISO8859_xlat,place(evt)) } else { "|" } "|" if (evt, death(me)) { if (not(private)) { date(evt) } "|" strxlat(ISO8859_xlat,place(evt)) } else { "|" } "|\n" } /* */ } else { print("writing master_index...") set(fn, concat(PATH, "master_index", ".html")) if (separate_clumps) { newfile(fn, FB) } forlist(INDEX,mykey,counter) { "

  • " call href(indi(mykey),neg(1)) nl } /* */ print("writing GENDEX...") set(fn, concat(PATH, "GENDEX.txt")) if (separate_clumps) { newfile(fn, FB) } forlist(INDEX,mykey,counter) { set(me,indi(mykey)) set(private,lookup(PRIVTABLE,mykey)) "clump" d(lookup(INDEXTABLE,mykey)) ".html#" mykey "|" strxlat(ISO8859_xlat,mysurname(me)) "|" strxlat(ISO8859_xlat,mygivens(me)) " /" strxlat(ISO8859_xlat,mysurname(me)) "/" "|" if (evt, birth(me)) { if (not(private)) { date(evt) } "|" strxlat(ISO8859_xlat,place(evt)) } else { "|" } "|" if (evt, death(me)) { if (not(private)) { date(evt) } "|" strxlat(ISO8859_xlat,place(evt)) } else { "|" } "|\n" } /* */ } print("done\n") } proc start_clumpfile(clumpnum) { print(" ", d(clumpnum)) set(CURRENTCLUMPFILE, clumpnum) set(fn, concat(PATH, "clump", d(CURRENTCLUMPFILE), ".html")) if (separate_clumps) { newfile(fn, FB) } call html_header(TITLE, 0) "
    \n" } proc end_clumpfile() { " [Home] " call html_trailer("",concat("Genealogy%20query%20",d(CURRENTCLUMPFILE))) } proc write_indi(me) { set(private,lookup(PRIVTABLE,key(me))) set(myclump,lookup(INDEXTABLE,key(me))) if (ne(myclump,CURRENTCLUMPFILE)) { call end_clumpfile() call start_clumpfile(myclump) } "

     qt \n" "    " call print_name(me, 1) "

    \n" "
    "
        nl
        if(e, birth(me))   { "Birth:     " privlong(e,private) nl }
        if(e, baptism(me)) { "Baptism:   " privlong(e,private) nl }
        if(e, death(me))   { "Death:     " privlong(e,private) nl }
        if(e, burial(me))  { "Burial:    " privlong(e,private) nl }
        nl
        if (f,father(me)) { "Father:    " call href(f,myclump) nl }
        if (m,mother(me)) { "Mother:    " call href(m,myclump) nl }
        set(nfam,nfamilies(me))
        families(me, fam, sp, nsp)
        {
    	nl
    	"Married"
    	if (gt(nfam,1)) { "(" d(nsp) ") " } else { "    " }
    	call href(sp,myclump)
    	if(e, marriage(fam)) { "\n           " privlong(e,private) }
    	fornodes(fnode(fam),thisnode) {
    	    if (not(strcmp(tag(thisnode),"DIV")))
    	    {
    		if (not(private)) { ", Divorced" }
    	    }
    	}
    	nl
    	if(nchildren(fam))
    	{
    	    "Children:\n"
    	    children(fam, ch, nch)
    	    {
    		rjt(nch, 5) ". "
    		call href(ch,myclump) nl
    	    }
    	}
        }
        nl
        if (not(private)) { call print_notes(me) }
        "

    \n" } func privlong(event,private) { if (private) { strxlat(html_xlat,place(event)) } else { strxlat(html_xlat,long(event)) } /* if (private) { place(event) } else { long(event) } */ } proc print_notes(me) { set(first, 1) fornodes( inode(me), node) { if (not(strcmp("NOTE", tag(node)))) { if(first) { "Notes: " nl nl set(first, 0) } strxlat(html_xlat,value(node)) nl /* value(node) nl */ fornodes(node, next) { strxlat(html_xlat,value(next)) nl /* value(next) nl */ } nl } } fornodes( inode(me), node) { if (not(strcmp("REFN", tag(node)))) { if(first) { "Notes: " nl nl set(first, 0) } "SOURCE: " strxlat(html_xlat,value(node)) nl /* "SOURCE: " value(node) nl */ nl } } } proc href(me,fromclump) { if(me) { set(private,0) set(myclump,lookup(INDEXTABLE,key(me))) if (myclump) { if (eq(fromclump,myclump)) { "" } else { "" } if (privacytern) { set(private,lookup(PRIVTABLE,key(me))) } } elsif (privacytern) { set(private,privacy(me)) } call print_name(me, 1) if (myclump) { "" } " (" if (print_year_place(birth(me),baptism(me),"*",private)) { set(j,print_year_place(death(me),burial(me)," +",private)) } else { set(j,print_year_place(death(me),burial(me),"+",private)) } ")" } /* else { "_____" } */ } func print_year_place(event,secondevent,symbol,private) { set(noyear,1) set(noplace,1) if (not(private)) { if (event) { set(d, date(event)) set(y, year(event)) if (strlen(y)) { symbol call print_fix_year(d,y) set(noyear,0) } } if (noyear) { if (secondevent) { set(d, date(secondevent)) set(y, year(secondevent)) if (strlen(y)) { symbol call print_fix_year(d,y) set(noyear,0) } } } } if (noyear) { set(space,symbol) } else { set(space," ") } if (event) { set(p, place(event)) if (strlen(p)) { space strxlat(html_xlat,p) set(noplace,0) } /* if (strlen(p)) { space p set(noplace,0) } */ } if (noplace) { if (secondevent) { set(p, place(secondevent)) if (strlen(p)) { space strxlat(html_xlat,p) set(noplace,0) } /* if (strlen(p)) { space p set(noplace,0) } */ } } return(not(and(noyear,noplace))) } proc print_fix_year(d,y) { if (index(d,"BEF",1)) { "<" } if (index(d,"AFT",1)) { ">" } if (index(d,"ABT",1)) { "c" } y /* Handle PAF slash years */ set(yp,index(d,y,1)) set(d2,substring(d,add(yp,4),strlen(d))) if (d2) { if (eq(index(d2,"/",1),1)) { substring(d2,1,5) } } } proc html_header(str, isindex) { "\n" "\n" "\n" "\n" if(isindex) { "" nl } " " str " \n" "\n" "\n" "\n" "\n" "\n" "

    " logo_gif "  " str "

    \n" } proc html_header_graphic(str, isindex) { "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" " " str " \n" "\n" "\n" "\n" "\n" "

    " logo_gif "  Eggert Family Ancestry

    \n" "

    male

    \n" "

    female

    \n" "
    \n" " \n" "Hover over a name to see the full name. Click on a name for more information.\n" "
    \n" "
    \n" "
    \n" } proc html_trailer(tag,subject) { "
    \n" "=Jim Eggert
    \n" "Email:  
    qt
    \n" "Home Page:  http://mysite.verizon.net/eggertj/
    \n" "Copyright © " year(gettoday()) " by James R. Eggert, All Rights Reserved.\n" tag "\n" "\n" } proc html_trailer_graphic(tag,subject) { "\n" "\n" } proc print_name (me, last) { strxlat(html_xlat,fullname(me, 0, not(last), 45)) /* if (last) { mysurname(me) ", " mygivens(me) } else { mygivens(me) " " mysurname(me) } */ /* fullname(me, 0, not(last), 45) */ fornodes(inode(me), node) { if (not(strcmp("TITL", tag(node)))) { set(n, node) } } if (n) { " " strxlat(html_xlat,value(n)) } /* if (n) { " " value(n) } */ } func rjt(n, w) { set(d, strlen(d(n))) if (lt(d, w)) { set(pad, trim(" ", sub(w, d))) } else { set(pad, "") } return(concat(pad, d(n))) } /* quicksort: Sort an input list by generating a permuted index list Input: alist - list to be sorted Output: ilist - list of index pointers into "alist" in sorted order Needed: compare- external function of two arguments to return -1,0,+1 according to relative order of the two arguments */ proc quicksort(alist,ilist) { set(len,length(alist)) set(index,len) while(index) { setel(ilist,index,index) decr(index) } if (ge(len,2)) { call qsort(alist,ilist,1,len) } } /* recursive core of quicksort */ proc qsort(alist,ilist,left,right) { print(".") if(pcur,getpivot(alist,ilist,left,right)) { set(pivot,getel(alist,getel(ilist,pcur))) set(mid,partition(alist,ilist,left,right,pivot)) call qsort(alist,ilist,left,sub(mid,1)) call qsort(alist,ilist,mid,right) } } /* partition around pivot */ func partition(alist,ilist,left,right,pivot) { while(1) { set(tmp,getel(ilist,left)) setel(ilist,left,getel(ilist,right)) setel(ilist,right,tmp) while(lt(compare(getel(alist,getel(ilist,left)),pivot),0)) { incr(left) } while(ge(compare(getel(alist,getel(ilist,right)),pivot),0)) { decr(right) } if(gt(left,right)) { break() } } return(left) } /* choose pivot */ func getpivot(alist,ilist,left,right) { set(pivot,getel(alist,getel(ilist,left))) set(left0,left) incr(left) while(le(left,right)) { set(rel,compare(getel(alist,getel(ilist,left)),pivot)) if (gt(rel,0)) { return(left) } if (lt(rel,0)) { return(left0) } incr(left) } return(0) } /* translate a whole key list via sort_xlat to a sortable list */ proc translate(listin,listout) { forlist(listin,pkey,i) { set (p,indi(pkey)) enqueue(listout, concat(strxlat(sort_xlat,mysurname(p))," ", strxlat(sort_xlat,mygivens(p)), " ", d(estimate_byear(p)))) } } /* compare indis referred to by strings constructed as in translate() */ func compare(str1,str2) { return(strcmp(str1,str2)) } /* compare indis referred to by keys */ func keycompare(pkey1,pkey2) { if(not(strcmp(pkey1,pkey2))) { return(0) } if (s,strcmp(strxlat(sort_xlat,mysurname(indi(pkey1))), strxlat(sort_xlat,mysurname(indi(pkey2))))) { return(s) } if (s,strcmp(strxlat(sort_xlat,mygivens(indi(pkey1))), strxlat(sort_xlat,mygivens(indi(pkey2))))) { return(s) } return(intcompare(estimate_byear(indi(pkey1)),estimate_byear(indi(pkey2)))) } func intcompare(i1,i2) { if(lt(i1,i2)) { return(neg(1)) } if(eq(i1,i2)) { return(0) } return(1) } /* translate string according to xlat table */ func strxlat(xlat,string) { set(fixstring,"") set(pos,strlen(string)) while(pos) { set(char,substring(string,pos,pos)) if (special,lookup(xlat,char)) { set(fixstring,concat(special,fixstring)) } else { set(fixstring,concat(char,fixstring)) } decr(pos) } return(fixstring) } proc init_xlat() { /* This initializes the various translation tables. Note that these use the Macintosh encoding scheme! */ /* Translation table for sorting purposes. Note that this is mostly to handle German characters. */ insert(sort_xlat,"š","oe") insert(sort_xlat,"Ÿ","ue") insert(sort_xlat,"Š","ae") insert(sort_xlat,"§","ss") insert(sort_xlat,"€","Ae") insert(sort_xlat,"…","Oe") insert(sort_xlat,"†","Ue") insert(sort_xlat,"‘","e") insert(sort_xlat,"Ø","y") insert(sort_xlat,"Ž","e") insert(sort_xlat,"–","n~") insert(sort_xlat,"Ï","oe") insert(sort_xlat,"<","") insert(sort_xlat,">","") /* For the full list of HTML encodings for special characters, see http://info.cern.ch/hypertext/WWW/MarkUp/ISOlat1.html */ insert(html_xlat,"š","ö") insert(html_xlat,"Ÿ","ü") insert(html_xlat,"Š","ä") insert(html_xlat,"§","ß") insert(html_xlat,"€","Ä") insert(html_xlat,"…","Ö") insert(html_xlat,"†","Ü") insert(html_xlat,"‘","ë") insert(html_xlat,"Ø","ÿ") insert(html_xlat,"Ž","é") insert(html_xlat,"","ì") insert(html_xlat,"«","`") insert(html_xlat,"&","&") insert(html_xlat,"–","ñ") insert(html_xlat,"Ï","œ") insert(html_xlat,"<","<") insert(html_xlat,">",">") /* ISO 8859 translation for the GENDEX.txt file */ insert(ISO8859_xlat,"š","ö") insert(ISO8859_xlat,"Ÿ","ü") insert(ISO8859_xlat,"Š","ä") insert(ISO8859_xlat,"§","ß") insert(ISO8859_xlat,"€","Ä") insert(ISO8859_xlat,"…","Ö") insert(ISO8859_xlat,"†","Ü") insert(ISO8859_xlat,"‘","ë") insert(ISO8859_xlat,"Ø","ÿ") insert(ISO8859_xlat,"Ž","é") insert(ISO8859_xlat,"","š") insert(ISO8859_xlat,"«","'") insert(ISO8859_xlat,"–","ñ") insert(ISO8859_xlat,"Ï","œ") } proc init_years() { set(years_between_kids,2) set(mother_age,23) set(father_age,25) set(hundred_years_ago,sub(atoi(year(gettoday())),100)) set(eighty_years_ago, sub(atoi(year(gettoday())),80)) } func estimate_byear(person) { set(byear_est,0) if(byear,get_byear(person)) { return(byear) } set(older,person) set(younger,person) set(yeardiff,0) set(border,0) while (or(older,younger)) { set(older,prevsib(older)) set(younger,nextsib(younger)) set(yeardiff,add(yeardiff,years_between_kids)) if (older) { incr(border) if (byear,get_byear(older)) { return(add(byear,yeardiff)) } } if (younger) { if(byear,get_byear(younger)) { return(sub(byear,yeardiff)) } } } /* estimate from parents' marriage */ set(my,0) if (m,marriage(parents(person))) { extractdate(m,bd,bm,my) } if (my) { return(add(add(my,mul(years_between_kids,border)),1)) } /* estimate from first marriage */ families(person,fam,spouse,fnum) { if (gt(fnum,1)) { break() } if (m,marriage(fam)) { extractdate(m,bd,bm,my) } if (my) { if (female(person)) { return(sub(my,mother_age)) } else { return(sub(my,father_age)) } } children(fam,child,cnum) { if (byear,get_byear(child)) { if (female(person)) { return(sub(sub(byear, mul(sub(cnum,1),years_between_kids)), mother_age)) } else { return(sub(sub(byear, mul(sub(cnum,1),years_between_kids)), father_age)) } } } } /* estimate from parents' birthyear */ set(older,person) set(byear_addend,0) while(older,prevsib(older)) { set(byear_addend,add(byear_addend,years_between_kids)) } if (byear,get_byear(mother(person))) { return(add(byear,mother_age,byear_addend)) } if (byear,get_byear(father(person))) { return(add(byear,father_age,byear_addend)) } return(0) } func get_byear(person) { set(byear,0) if (person) { if (b,birth(person)) { extractdate(b,day,month,byear) } if (byear) { return(byear) } if (b,baptism(person)) { extractdate(b,day,month,byear) } } return(byear) } func mysurname(person) { set(s,surname(person)) if (not(strlen(s))) { set(s,"____") } if (not(strcmp(s,""))) { set(s,"____") } return(s) } func mygivens(person) { set(s,givens(person)) if (not(strlen(s))) { set(s,"____") } return(s) } lifelines-3.0.61/reports/ll2visio.ll0000700002540200244210000002062510076661057017550 0ustar prappDomain Users/* * @progname ll2visio.ll * @version 1 of 1999-04-02 * @author Rafal T. Prinke (rafalp@amu.edu.pl) * @category * @output VISIO 5 diagram * @description * * This program generates a text file with male line descendants * which can be imported by VISIO 5 and converted to a diagram. * * The main procedure is based on Tom Wetmore's _pdesc2_ report. * The procedures "longvitals" and "spousevitals" were originally * based on the same in Tom Wetmore's _register1_ report but * have been changed beyond recognition. * * The included procedures "upl2.ll" were written by Paul McBride. * * The text file describing a diagram to be constructed in VISIO 5 * consists of records (lines) and data fields separated with a comma (.csv) * or a tab (.txt). It can also use an arbitrary delimiter but this report * uses a comma so the output file should be given a .CSV extension. * The CR (hard return) character is not treated as end of record if * enclosed in quotation marks. Comment lines are escaped with a semicolon. * All measurements are in inches. * * Here is a quick reference to record types. For one field records * I have added possible values [with explanations in brackets]. * * * * Master,MasterID,StencilName * * PlacementStyle,Style (0|1|2) [Radial|TopToBottom|LeftToRight] * RoutingStyle,Style (1|2|3|4|5|) [RightAngle||||Flowchart] * * NodeToLineClearance,Horizontal,Vertical * LineToLineClearance,Horizontal,Vertical * * Gridding,UseGrid (0|1) [no|yes] * BlockSize,Width,Length * AvenueSize,Width,Height * * Template,FileName * Property,Master,RowName,Label,Prompt,Type,Format,Value,Hidden,Ask * * Shape,ID,Master,Text,X,Y,Width,Height,Property * Link,ID,Master,Text,From,To * */ include("upl2.ll") global(persons) global(mens) global(ind1) global(first) global(maxgen) global(upl_tag_list) global(upl_before_list) global(upl_after_list) global(upl_level_list) global(upl_process_list) global(upl_out_type) /* 0 = both, 1 = screen, 2 = file */ proc main () { list(persons) table(mens) call upl_build() set(upl_out_type, 2) /* output to file */ while(not(indi)) { getindi(indi) } getintmsg(maxgen,"How many generations? ") call head(indi) call mensae(indi) call pout(0, indi) set(first,key(indi)) while(not(empty(persons))) { set(p,pop(persons)) call longvitals(p) } } /* This procedure produces a list of individuals which is then * popped for final output. The reason is that VISIO 5 seems to * lay out the shapes from top to bottom and from right to left, * so the older children would be on the right and younger on the left, * while in traditional genealogical tables the older children are * on the left. */ proc pout(gen, indi) { push(persons, indi) set(next, add(1, gen)) families(indi,fam,sp,num) { if (lt(next,maxgen)) { /* remove the condition below to include all descendants (this may not work well yet - father/mother functions need modification) */ if(eqstr(sex(indi),"M")) { children(fam, child, no) { call pout(next, child) } } } } } /* * The following is the procedure outputting the header of the .csv * file for import to VISIO 5. The records field and allowed values * can be altered to give intended results. */ proc head(u) { "Master,AUTO,Auto-height Box,Basic Flowchart Shapes.VSS\n" "Master,CON,Bottom to top variable,Connectors and Callouts.VSS\n" "PlacementStyle,1\n" "RoutingStyle,1\n" ";RoutingStyle,7\n" "AvenueSize,0.15,0.15\n" "LineToLineClearance,0.1,0.1\n" "NodeToLineClearance,0.1,0.1\n" "BlockSize,0.2,0.2\n" "Gridding,0\n" ";Property,AUTO,,,,\n" ";Template,\n" "\n" } /* * The remaining procedures define what information goes into * one person box. This is rather specific to my files and uses * Polish terms so should be adapted to one's needs. */ proc longvitals(i) { set(ikey,key(i)) set(ind1,i) /* * The following line is the beginning of an individual shape (or box) * definition, and then the text inside it is constructed. * NOTE: if there are quotation marks in the data, there may be problems. */ "Shape," ikey ",AUTO," "\"" /* The following fragment is intended to overcome the "unknown mother" * problem when numbering marriages. It is assumed that a dummy FAM record * (a) has no WIFE, (b) has the word "ANY" as the wife's name, or (c) has two * or more numbers separated with the bar character as her name (e.g. "2|3") * when only some wives are possible mothers. */ if(nestr(ikey,first)) { if (ne(nfamilies(father(i)),1)) { if (eqstr(name(mother),"ANY")) { "(n) " } elsif (index(name(mother(i)),"|",1)) { "(" name(mother) ") " } else { set(wnm,0) families(father(i),a,b,c) { if (wife(parents(i))) { set(wnm,add(wnm,1)) } if (eqstr(key(a),key(parents(i)))) { if (wife(parents(i))) { "(" d(wnm) ") " } else { "(n) " } } } } } } /* biographical data report on person is called */ call upl_report(i) if (eq(1,nspouses(i))) { spouses(i,s,f,n) { "; x " call spousevitals(s,f) } } else { spouses(i,s,f,n) { "; x (" d(n) ") " call spousevitals(s,f) } } "\"\n" /* * The following line is the definition of a link between two boxes. * The condition excludes up-link from the first person. */ if(nestr(ikey,first)) { "Link,,CON,," key(father(i)) "," key(i) "\n" } } proc spousevitals (spouse,fam) { set(e,marriage(fam)) if (and(e,long(e))) { mylong(e) ", " } roz(fam) /* biographical data report on spouse is called */ call upl_report(spouse) set(dad,father(spouse)) set(mom,mother(spouse)) if (or(dad,mom)) { ", " if (male(spouse)) { "s. " } elsif (female(spouse)) { "dau. " } else { "ch. " } } if (dad) { givens(dad) /* "==a" */ fornodes(inode(dad), ok) { if (eqstr(tag(ok),"OCCU")) { ", " value(ok) } } } /* Other marriages of the spouse. */ set(srd,0) if (gt(nspouses(spouse),1)) { " [" spouses(spouse,ind2,fm,nsp) { if (ne(ind2,ind1)) { if (srd) { "; " } " x (" d(nsp) ") " set (es,marriage(fm)) if (and(es,long(es))) { mylong(es) " " } roz(fm) name(ind2,0) set(srd,1) } } "]" } } func mylong(ev) { list(datum) extracttokens(date(ev),datum,n," ") forlist(datum,q,n) { if (lookup(mens,q)) { lookup(mens,q) } else { q } } if(place(ev)) { " (" place(ev) ")" } } func roz(fx) { fornodes(root(fx), ok) { if (eqstr(tag(ok),"DIV")) { ", div." fornodes(ok, dt) { if (eqstr(tag(dt),"DATE")) { " " mylong(dt) } } } } } /* Table of date tokens follows. */ proc mensae(w) { insert(mens,"JAN",".I.") insert(mens,"FEB",".II.") insert(mens,"MAR",".III.") insert(mens,"APR",".IV.") insert(mens,"MAY",".V.") insert(mens,"JUN",".VI.") insert(mens,"JUL",".VII.") insert(mens,"AUG",".VIII.") insert(mens,"SEP",".IX.") insert(mens,"OCT",".X.") insert(mens,"NOV",".XI.") insert(mens,"DEC",".XII.") insert(mens,"BEF","a") insert(mens,"AFT","p") insert(mens,"ABT","c") insert(mens,"CIR","c") insert(mens,"BET","") insert(mens,"AND","/") } lifelines-3.0.61/reports/lldb.ll0000700002540200244210000001201210076661057016711 0ustar prappDomain Users/* * @progname lldb.ll * @version 1.02 * @author Marc Nozell * @category palmpilot * @output pdb import files * @description * * This program produces a report of all INDI's in the database, with * sorted names as output for inport into Tom Dyas' Open Source DB * PalmOS app. * * lldb.ll V1.02 * * Marc Nozell * * This report generator works only with the LifeLines Genealogy program * * It will produce a report of all INDI's in the database, with * sorted names as output for inport into Tom Dyas' Open Source DB * PalmOS app. * * 0) Obtain Tom Wetmore's LifeLines genealogy program for Unix. * See http://lifelines.sourceforge.net/ * * 1) Obtain Kenneth Albanowski's pilot-link * package. The Microsoft Windows-based Palm desktop should also * work. Most Linux distributions include pilot-link (check * http://rpmfind.net) and should build on most UNIXes. * * 2) Obtain Tom Dyas' "DB: Open Source * Database Program for PalmOS" and supporting tools from * http://pilot-db.sourceforge.net/ * * 3) Run this lifelines report. It will generate two files, lldb.info * and lldb.csv. * * 5) Run the CSV to PDB conversion tool like this: * csv2pdb --info=lldb.info lldb.csv lldb.pdb * * 5) Install the converted info to the Palm device like this: * pilot-link -i ll.pdb * * * V1.00 11-Sep-1999 * Initial Version * * V1.01 26-Oct-1999 * * Cleaned up output files * Updated to new version Dyas' conversion tool * (pre-palm-db-tools-0.2.0.tar.gz) * * V1.02 10-Nov-2000 * Updated URLs * * $Log: lldb.ll,v $ * Revision 1.7 2004/07/19 05:54:55 dr_doom * Merge Vincent Broman Changes to reports * * Revision 1.6 2003/01/19 02:50:23 dr_doom * move 1 paragraph description to immediately before @description for index.html * * Revision 1.5 2000/11/28 21:39:45 nozell * Add keyword tags to all reports * Extend the report script menu to display script output format * * Revision 1.4 2000/11/27 20:48:15 nozell * Header is to verbose, use just Log * * Revision 1.3 2000/11/27 20:46:26 nozell * Typo in CVS header * * Revision 1.2 2000/11/27 20:45:43 nozell * Add CVS keywords * * */ proc main () { /* newfile (concat (database (), ".info"), 0) */ newfile (concat ("lldb.info"), 0) "title \"Genealogy\"\n" "backup off\n" "find on\n" "extended off\n" "field \"ID\" string 25\n" "field \"Name\" string 80\n" "field \"Birth\" string 80\n" "field \"Death\" string 80\n" "field \"SpouseID\" string 80\n" "field \"ChildrenID\" string 80\n" "field \"FatherID\" string 80\n" "field \"MotherID\" string 80\n" /* newfile (concat (database (), ".csv"), 0) */ newfile (concat ("lldb.csv"), 0) indiset(idx) /* monthformat(4) */ /* Grab them all */ print("Please wait...") forindi(indi,n) { addtoset(idx,indi,n) } print(nl()) print("Found ") print(d(n)) print(" people.") print(nl()) print("begin sorting") print(nl()) namesort(idx) print("done sorting") print(nl()) /* col(1) "ID,Name,Birth,Death,SpouseID,ChildrenID,FatherID,MotherID" nl() */ forindiset(idx,indi,v,n) { col(1) "\"" key(indi) "\"" "," "\""fullname(indi,1,0,30) "\"" "," call showvitals(indi) call showspouse(indi) call showkids(indi) call showparents(indi) print("+") } nl() print(nl()) } /************************************************************************/ proc showvitals (i) { set(b, birth(i)) set(d, death(i)) if (and(b, short(b))) { "\"" long(b) "\"" } else { "\" \"" } "," if (and(d, short(d))) { "\"" long(d) "\"" } else { "\" \"" } } proc showparents (i) { ",\"" if(fath,father(i)) { /* "(" key(fath) ") " */ key(fath) } else { "-unknown-" } "\"" ",\"" if(moth,mother(i)) { /* "(" key(moth) ") " */ key(moth) } else { "-unknown-" } "\"" } /************************************************************************/ proc showspouse (i) { ",\"" if (eq(1, nspouses(i))) { spouses(i, s, f, n) { name(s) "(" key(s) ") " } } else { spouses(i, s, f, n) { ord(n) /* First, Second ... */ " " name(s) "(" key(s) ") " } } "\"" } /************************************************************************/ proc showkids (i) { ",\"" set(j, 0) families(i, f, s, n) { set(j, add(j, nchildren(f))) } if (eq(0, j)) { " " } else { if (eq(1, j)) { "Child: " } else { d(j) " Children:" } set(j, 1) families(i, f, s, n) { children(f, c, m) { " (" key(c) ")" set(j, add(j,1)) } } } "\"" } lifelines-3.0.61/reports/longlines.ll0000700002540200244210000000576210076661057020004 0ustar prappDomain Users/* * @progname longlines.ll * @version 2.0 * @author Chandler * @category * @output Text * @description Find the maximal-length male and female lineages in the database. Optionally, find the maximal-length lineage through a specified ancestor. longlines Version 1 - 1994 May 19 - John F. Chandler Version 2 - 2000 May 4 - John F. Chandler This program works only with LifeLines. */ global(len) /* current lineage length */ global(lenmax) /* longest lineage found */ global(ends) /* keys of last persons */ global(linsex) /* sex of lineage desired */ proc main(){ getindi(indi,"Enter specific ancestor, if any, whose longest line you want:") if(indi) { "Longest descent from " name(indi) " (" key(indi) ")\n\n" set(linsex,sex(indi)) set(len,1) call getline(indi) call dumplines() } else { "Longest lineages in database\n\n Male" call getall("M") call dumplines() "\n Female" call getall("F") call dumplines() } } /* scan all offspring matching the sex of the input person, and return the longest lineage(s) from those -- if no matching offspring, just return the input person as a lineage */ proc getline(indi) { incr(len) families(indi,fam,spou,num) { children(fam,child,numc) { if(eq(0,strcmp(linsex,sex(child)))) { set(found,1) call getline(child) } } } decr(len) if(and(not(found),ge(len,lenmax))) { if(gt(len,lenmax)) {list(ends)} enqueue(ends,save(key(indi))) set(lenmax,len) }} proc getall(this_sex) { set(linsex,this_sex) set(lenmax,0) print("Starting ", linsex, " ...\n") /* find all eligible starting points */ /* assume that a nameless person doesn't count */ forindi (indi, num) { set(skip,"") if(eq(0,strcmp(linsex,"M"))) {set(par,father(indi))} else {set(par,mother(indi))} if(par) {set(skip,name(par))} if(and(eq(0,strcmp(linsex,sex(indi))),eq(0,strcmp("",skip)))) { set(len,1) call getline(indi) } }} proc dumplines() { /* report results */ "\n Maximal length " d(lenmax) "\n" /* dump each lineage, starting with most recent person */ while(end, dequeue(ends)) { "\n" set(count, lenmax) set(line,indi(end)) while(line) { if(eq(count,0)) {" (extension of the requested line...)\n"} decr(count) if(eq(0,strcmp(name(line),""))) {"_____"} name(line) " (" key(line) ")" if(x, birth(line)) {" b. " year(x)} if(y, death(line)) { if(x) {","} " d. " year(y) } "\n" if(eq(0,strcmp(linsex,"M"))) {set(line,father(line))} else {set(line,mother(line))} } if(lt(count,0)) {" (length " d(sub(lenmax,count)) " with extension)\n"} }} lifelines-3.0.61/reports/Makefile.am0000700002540200244210000001102010621745557017501 0ustar prappDomain Users# This makefile is for the lifelines reports AUTOMAKE_OPTIONS = no-dependencies SUBDIRS = st # LL_REPORTS is to hold the actual report files # (included files go in a different target below) LL_REPORTS = \ 2ppage.ll 4gen1.ll 6gen1.ll 8gen1.ll \ addsour.ll af-import.ll afn_match.ll ahnenliste.ll ahnentafel.ll\ alive.ll all_anc_lines.ll allfam10c.ll alllines.ll \ altern.ll anc2_ged.ll ancestors2.ll anniver.ll \ bday_cover.ll bias.ll bkdes16-1.ll book-latex.ll \ browser.ll burial_index.ll BW_descendants.ll cid.ll connect2.ll \ cgi_html.li common.ll cons.ll cont.ll count_dup.ll \ count_anc.ll count_desc.ll count_paternal_desc.ll cousins.ll \ coverage.ll cron.ll dates.ll db_summary.ll desc-henry.ll \ desc_ged.ll descged.ll desc_html.ll desc-tree.ll divorce.li \ drep2.ll d-rtf.ll dump-ances.ll dump_html.ll dump_html_sd.ll \ eol.ll est_life_span.ll extract_gedcom.ll extract_html.ll \ extract_set.li fam10c.ll fam16rn1.ll fam_ged.ll famgroup.ll \ fami-grps.ll \ familycheck.ll familyisfm1.ll famrep.ll famtree1.ll \ fileindex.ll \ fdesc.ll find.ll findmissing.ll fix_nameplac.ll \ formatted_gedcom.ll gedall.ll gedlist.ll gedlod.ll gedn.ll \ gedtags.ll ged_write.li genancc.ll \ genancc1.ll gender_order.ll gendex.ll \ genetics.ll genetics2.ll getbaptism.li givens_gender.ll \ givens_gender_finder.ll grand.ll \ hasnotes1.ll hp-anc.ll htmlahnen.ll \ html.dn.ll htmlfam.ll html.ll igi-filter.ll igi-import.ll \ igi-merge.ll igi-search.ll index1.ll index_html.ll index_mm.ll \ interestset.li indiv.ll infant_mortality.ll ldsgedcom.li \ line.ll listsour.ll ll2html.ll ll2visio.ll lldb.ll \ longlines.ll maritalinfo.ll marriages.ll marriages1.ll menu.ll \ name2html.ll \ namefreq.ll names_freq.ll namesformat1.ll net-ped.ll \ novel/novel.ll nonpatronymics.ll outsources.li paf-export.ll \ pafcompat.ll partition.ll pdesc.ll paf-import.ll ped.ll \ pedigreel.ll pedigree_html.ll pedigreelhs.ll pedigree.ll \ pedtex/pedtex.ll places.ll pointers.ll prompt.li ps-anc.ll \ ps-circle.ll ps-fan/ps-fan.ll ps-pedigree.ll refn.ll reg_html.ll \ register-rtf.ll register-tex.ll register1.ll register1-dot.ll \ regvital.ll relate.ll related_spouses.ll relation.ll relink.ll \ rfc.ll rllgen.ll rootset.ll rslgen.ll rtflib.li sealing_line.ll \ search_source.ll \ select.ll sgsgen.ll shorten.li showlines1.ll simpleged.ll \ soundex1.ll soundex-isfm.ll sour.li \ sour2.li sources.ll sources_bib.ll \ sour.li span.ll src.ll src-rtf.ll ssdi_aid.ll ssdi-import.ll \ ssdi-search-list.ll stats.ll st/st_all.ll surname1.ll \ tinytafel1.ll tools.li \ tree_density.ll ttable.ll upl2.li verify.ll wife.ll \ xml-dtd.ll xmlize.ll zombies.ll # OTHER_REPORTS is to hold included files besides actual report files # (eg, supporting files, graphics, included files) OTHER_REPORTS = boc.gif ll.png gen_index bib2html.c bury.c \ desc-tex2/drtree.tex desc-tex2/extree2.tex \ desc-tex2/poster2.tex \ desc-tex2/pstricks.con desc-tex2/README \ desc-tex2/ex1.tex desc-tex2/mysetup.tex desc-tex2/poster.doc \ desc-tex2/pstricks.pro desc-tex2/setup.tex \ desc-tex2/drsetup.tex desc-tex2/extree1.tex \ desc-tex2/poster1.tex \ desc-tex2/poster.tex desc-tex2/pstricks.tex desc-tex2/tree.tex \ gen_index \ novel/novel.intro novel/novel.README \ pedtex/pedtex.readme pedtex/setup.tex pedtex/tree.tex \ ps-fan/ps-fan.ps \ ps-pedigree.ps tree.tex pkg_REPORTS = $(LL_REPORTS) $(OTHER_REPORTS) pkg_REPORTS_MISC = index.html CREDIT README tree.tex EXTRA_DIST = $(pkg_REPORTS) \ $(pkg_REPORTS_MISC) dist_pkgdata_DATA = $(EXTRA_DIST) CLEANFILES = index.html PERL = perl index.html: $(LL_REPORTS) -$(PERL) $(top_srcdir)/reports/gen_index $^ lifelines-3.0.61/reports/Makefile.in0000700002540200244210000005113210656416635017522 0ustar prappDomain Users# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This makefile is for the lifelines reports srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ LIBOBJDIR = subdir = reports DIST_COMMON = README $(dist_pkgdata_DATA) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/gettext/codeset.m4 \ $(top_srcdir)/build/gettext/gettext.m4 \ $(top_srcdir)/build/gettext/glibc21.m4 \ $(top_srcdir)/build/gettext/iconv.m4 \ $(top_srcdir)/build/gettext/intdiv0.m4 \ $(top_srcdir)/build/gettext/inttypes-pri.m4 \ $(top_srcdir)/build/gettext/inttypes.m4 \ $(top_srcdir)/build/gettext/inttypes_h.m4 \ $(top_srcdir)/build/gettext/isc-posix.m4 \ $(top_srcdir)/build/gettext/lcmessage.m4 \ $(top_srcdir)/build/gettext/lib-ld.m4 \ $(top_srcdir)/build/gettext/lib-link.m4 \ $(top_srcdir)/build/gettext/lib-prefix.m4 \ $(top_srcdir)/build/gettext/progtest.m4 \ $(top_srcdir)/build/gettext/stdint_h.m4 \ $(top_srcdir)/build/gettext/uintmax_t.m4 \ $(top_srcdir)/build/gettext/ulonglong.m4 \ $(top_srcdir)/build/autotools/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/build/autotools/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = depcomp = am__depfiles_maybe = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ install-recursive installcheck-recursive installdirs-recursive \ pdf-recursive ps-recursive uninstall-info-recursive \ uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(pkgdatadir)" dist_pkgdataDATA_INSTALL = $(INSTALL_DATA) DATA = $(dist_pkgdata_DATA) ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOCS_TARGET = @DOCS_TARGET@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POSUB = @POSUB@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SGMLTOOLS = @SGMLTOOLS@ SHELL = @SHELL@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ YACC = @YACC@ YFLAGS = @YFLAGS@ ac_ct_CC = @ac_ct_CC@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = no-dependencies SUBDIRS = st # LL_REPORTS is to hold the actual report files # (included files go in a different target below) LL_REPORTS = \ 2ppage.ll 4gen1.ll 6gen1.ll 8gen1.ll \ addsour.ll af-import.ll afn_match.ll ahnenliste.ll ahnentafel.ll\ alive.ll all_anc_lines.ll allfam10c.ll alllines.ll \ altern.ll anc2_ged.ll ancestors2.ll anniver.ll \ bday_cover.ll bias.ll bkdes16-1.ll book-latex.ll \ browser.ll burial_index.ll BW_descendants.ll cid.ll connect2.ll \ cgi_html.li common.ll cons.ll cont.ll count_dup.ll \ count_anc.ll count_desc.ll count_paternal_desc.ll cousins.ll \ coverage.ll cron.ll dates.ll db_summary.ll desc-henry.ll \ desc_ged.ll descged.ll desc_html.ll desc-tree.ll divorce.li \ drep2.ll d-rtf.ll dump-ances.ll dump_html.ll dump_html_sd.ll \ eol.ll est_life_span.ll extract_gedcom.ll extract_html.ll \ extract_set.li fam10c.ll fam16rn1.ll fam_ged.ll famgroup.ll \ fami-grps.ll \ familycheck.ll familyisfm1.ll famrep.ll famtree1.ll \ fileindex.ll \ fdesc.ll find.ll findmissing.ll fix_nameplac.ll \ formatted_gedcom.ll gedall.ll gedlist.ll gedlod.ll gedn.ll \ gedtags.ll ged_write.li genancc.ll \ genancc1.ll gender_order.ll gendex.ll \ genetics.ll genetics2.ll getbaptism.li givens_gender.ll \ givens_gender_finder.ll grand.ll \ hasnotes1.ll hp-anc.ll htmlahnen.ll \ html.dn.ll htmlfam.ll html.ll igi-filter.ll igi-import.ll \ igi-merge.ll igi-search.ll index1.ll index_html.ll index_mm.ll \ interestset.li indiv.ll infant_mortality.ll ldsgedcom.li \ line.ll listsour.ll ll2html.ll ll2visio.ll lldb.ll \ longlines.ll maritalinfo.ll marriages.ll marriages1.ll menu.ll \ name2html.ll \ namefreq.ll names_freq.ll namesformat1.ll net-ped.ll \ novel/novel.ll nonpatronymics.ll outsources.li paf-export.ll \ pafcompat.ll partition.ll pdesc.ll paf-import.ll ped.ll \ pedigreel.ll pedigree_html.ll pedigreelhs.ll pedigree.ll \ pedtex/pedtex.ll places.ll pointers.ll prompt.li ps-anc.ll \ ps-circle.ll ps-fan/ps-fan.ll ps-pedigree.ll refn.ll reg_html.ll \ register-rtf.ll register-tex.ll register1.ll register1-dot.ll \ regvital.ll relate.ll related_spouses.ll relation.ll relink.ll \ rfc.ll rllgen.ll rootset.ll rslgen.ll rtflib.li sealing_line.ll \ search_source.ll \ select.ll sgsgen.ll shorten.li showlines1.ll simpleged.ll \ soundex1.ll soundex-isfm.ll sour.li \ sour2.li sources.ll sources_bib.ll \ sour.li span.ll src.ll src-rtf.ll ssdi_aid.ll ssdi-import.ll \ ssdi-search-list.ll stats.ll st/st_all.ll surname1.ll \ tinytafel1.ll tools.li \ tree_density.ll ttable.ll upl2.li verify.ll wife.ll \ xml-dtd.ll xmlize.ll zombies.ll # OTHER_REPORTS is to hold included files besides actual report files # (eg, supporting files, graphics, included files) OTHER_REPORTS = boc.gif ll.png gen_index bib2html.c bury.c \ desc-tex2/drtree.tex desc-tex2/extree2.tex \ desc-tex2/poster2.tex \ desc-tex2/pstricks.con desc-tex2/README \ desc-tex2/ex1.tex desc-tex2/mysetup.tex desc-tex2/poster.doc \ desc-tex2/pstricks.pro desc-tex2/setup.tex \ desc-tex2/drsetup.tex desc-tex2/extree1.tex \ desc-tex2/poster1.tex \ desc-tex2/poster.tex desc-tex2/pstricks.tex desc-tex2/tree.tex \ gen_index \ novel/novel.intro novel/novel.README \ pedtex/pedtex.readme pedtex/setup.tex pedtex/tree.tex \ ps-fan/ps-fan.ps \ ps-pedigree.ps tree.tex pkg_REPORTS = $(LL_REPORTS) $(OTHER_REPORTS) pkg_REPORTS_MISC = index.html CREDIT README tree.tex EXTRA_DIST = $(pkg_REPORTS) \ $(pkg_REPORTS_MISC) dist_pkgdata_DATA = $(EXTRA_DIST) CLEANFILES = index.html PERL = perl all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu reports/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu reports/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh uninstall-info-am: install-dist_pkgdataDATA: $(dist_pkgdata_DATA) @$(NORMAL_INSTALL) test -z "$(pkgdatadir)" || $(mkdir_p) "$(DESTDIR)$(pkgdatadir)" @list='$(dist_pkgdata_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(dist_pkgdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgdatadir)/$$f'"; \ $(dist_pkgdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgdatadir)/$$f"; \ done uninstall-dist_pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_pkgdata_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pkgdatadir)/$$f'"; \ rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \ done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(mkdir_p) $(distdir)/desc-tex2 $(distdir)/novel $(distdir)/pedtex $(distdir)/ps-fan $(distdir)/st @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(mkdir_p) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-dist_pkgdataDATA install-exec-am: install-info: install-info-recursive install-man: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-dist_pkgdataDATA uninstall-info-am uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ clean clean-generic clean-recursive ctags ctags-recursive \ distclean distclean-generic distclean-recursive distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am \ install-dist_pkgdataDATA install-exec install-exec-am \ install-info install-info-am install-man install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic \ maintainer-clean-recursive mostlyclean mostlyclean-generic \ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-dist_pkgdataDATA \ uninstall-info-am index.html: $(LL_REPORTS) -$(PERL) $(top_srcdir)/reports/gen_index $^ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lifelines-3.0.61/reports/maritalinfo.ll0000700002540200244210000000356710076661057020320 0ustar prappDomain Users/* * @progname maritalinfo.ll * @version 1.0 (2002-11-13) * @author Perry Rapp * @category sample * @output screen * @description * * Simple example of looping through marital (& divorce) info */ /* get marital & divorce lists, and then display them */ proc main() { getfam(family) list(marriages) getmarriages(family, marriages) if (not(empty(marriages))) { print("Marital events:", nl()) forlist (marriages, node, offset) { if (eq(tag(node), "ENGA")) { call event_out("Engagement: ", node) } if (eq(tag(node), "MARR")) { call event_out("Marriage: ", node) } } } list(divorces) getdivorces(family, divorces) if (not(empty(divorces))) { print("Divorce events:", nl()) forlist (divorces, node, offset) { if (eq(tag(node), "ANUL")) { call event_out("Annulment: ", node) } if (eq(tag(node), "DIV")) { call event_out("Divorce: ", node) } if (eq(tag(node), "DIVF")) { call event_out("DivorceFiling: ", node) } } } } /* send out event info with header, to screen right now */ proc event_out(hdr, event) { print(event_string(hdr, event), nl()) } /* make a display string out of an event and a header */ func event_string(hdr, event) { set(outstr, concat(hdr, short(event))) return(outstr) } /* get list of all marital events in family */ func getmarriages(family, evlist) { fornodes (root(family), node) { if (eq(tag(node), "MARR")) { push(evlist, node) } if (eq(tag(node), "ENGA")) { push(evlist, node) } } } /* get list of all divorce-style events in family */ func getdivorces(family, evlist) { fornodes (root(family), node) { if (eq(tag(node), "ANUL")) { push(evlist, node) } if (eq(tag(node), "DIV")) { push(evlist, node) } if (eq(tag(node), "DIVF")) { push(evlist, node) } } } lifelines-3.0.61/reports/marriages.ll0000700002540200244210000001043610341474171017750 0ustar prappDomain Users/* * @progname marriages * @version 1.0 * @author Perry Rapp * @category * @output Text, 80 cols * @description * * select and produce an a output report of all marriages in * the database, with date of marriage if known. Sort by either * spouse, or by date, or by place. * * Output is an ASCII file, and may be printed using 80 column format. * * Based on previous work by Tom Wetmore and Cliff Manis * * This report works only with the LifeLines Genealogy program * * An example of the output may be seen at end of this report. */ proc main () { list(mnu) enqueue(mnu, "List marriages by husband") enqueue(mnu, "List marriages by wife") enqueue(mnu, "List marriages by either spouse") enqueue(mnu, "List marriages by year") enqueue(mnu, "List marriages by place") set(chc, menuchoose(mnu)) if (eq(chc, 0)) { return(0) } set(ct, 0) /* count #records processed */ set(ctx, 0) /* count module 100 for status feedback */ set(rptinterval, 100) /* report progress every this many records */ /* for choices 1-3, populate indiset of married individuals */ indiset(results) /* for choices 4-5, populate list of families */ list(marriages) list(infos) if (gt(chc, 3)) { /* Record all marriages (along with date or place) */ forfam(fam, n) { enqueue(marriages, fam) if (eq(chc, 4)) { enqueue(infos, year(date(marriage(fam)))) } else { enqueue(infos, place(marriage(fam))) } /* display feedback on screen */ incr(ct) incr(ctx) if (eq(ctx, rptinterval)) { print(d(ct), "F ") set(ctx, 0) } } } else { /* Record all married persons, of appropriate gender */ forindi(indi, n) { if (gt(nspouses(indi), 0)) { if (or(and(eq(chc, 1), male(indi)), and(eq(chc, 2), female(indi)), eq(chc, 3))) { addtoset(results, indi, 0) } } /* display feedback on screen */ incr(ct) incr(ctx) if (eq(ctx, rptinterval)) { print(d(ct), "I ") set(ctx, 0) } } } print(nl()) set(count, length(results)) if (gt(chc, 3)) { set(count, length(marriages)) } print("Sorting ", d(count), " results") print(nl()) if (gt(chc, 3)) { sort(marriages, infos) } else { namesort(results) } print("ending sort") print(nl()) col(1) "Person" if (eq(chc, 5)) { col(30) "Place" } else { col(30) "Date" } col(50) "Spouse" col(1) "-----------------------------------------" "-------------------------------------" if (eq(chc, 5)) { forlist(marriages, fam, n) { call display(husband(fam), place(marriage(fam)), wife(fam)) } } elsif (eq(chc, 4)) { forlist(marriages, fam, n) { call display(husband(fam), date(marriage(fam)), wife(fam)) } } else { forindiset(results,husb,val,n) { set(first, 1) spouses(husb,wife,famv,m) { if (first) { call display(husb, date(marriage(famv)), wife) set(first, 0) } else { call display(0, date(marriage(famv)), wife) } } /* display feedback on screen */ incr(ct) incr(ctx) if (eq(ctx, rptinterval)) { print(d(ct), "I ") set(ctx, 0) } } } nl() print(nl()) } /* Output one result row */ proc display(husb, info, wife) { if (husb) { col(1) fullname(husb, 1,0,29) } col(30) trim(info, 20) if (wife) { col(50) fullname(wife, 1,0,29) } } /* Sample output of this report. Person Date Spouse ------------------------------------------------------------------------------ BARTH, Johann Ludwig ____, Hanna BIRD, Jacob ____, Mrs. BIRD, John SHRADER, Elizabeth BOWERS, Anderson ABT 1828 COWAN, Lurina Viney "Vina" BOWERS, James ____, Martha BRADSHAW, John F. CLENDENIN, Agnes "Annie" CANTER, Henry B. ____, Polina CANTER, James H. 20 APR 1867 WHITEHORN, Martha Marie CASON, David ca 1790 ____, Mary */ /* End of Report */ lifelines-3.0.61/reports/marriages1.ll0000700002540200244210000000433210076661057020035 0ustar prappDomain Users/* * @progname marriages1.ll * @version 1.0 * @author Wetmore, Manis * @category * @output Text, 80 cols * @description * * select and produce an a output report of all marriages in * the database, with date of marriage if known. * * marriages1 * * Code by Tom Wetmore, ttw@cbnewsl.att.com * With modifications by: Cliff Manis * * This report works only with the LifeLines Genealogy program * * version one of this report was written by Tom Wetmore, in 1990, * * select and produce an a output report of all marriages in * the database, with date of marriage if known. * * Output is an ASCII file, and may be printed using 80 column format. * * An example of the output may be seen at end of this report. */ proc main () { indiset(idx) forindi(indi, n) { if (and(male(indi),gt(nspouses(indi),0))) { addtoset(idx,indi,0) print("y") } else { print("n") } } print(nl()) print("beginning sort") print(nl()) namesort(idx) print("ending sort") print(nl()) col(1) "Male Person" col(30) "Date" col(50) "Female Person" col(1) "-----------------------------------------" "-------------------------------------" forindiset(idx,husb,val,n) { col(1) fullname(husb, 1,0,29) spouses(husb,wife,famv,m) { col(30) trim(date(marriage(famv)), 20) col(50) fullname(wife, 1,0,29) } print(".") } nl() print(nl()) } /* Sample output of this report. Male Person Date Female Person ------------------------------------------------------------------------------ BARTH, Johann Ludwig ____, Hanna BIRD, Jacob ____, Mrs. BIRD, John SHRADER, Elizabeth BOWERS, Anderson ABT 1828 COWAN, Lurina Viney "Vina" BOWERS, James ____, Martha BRADSHAW, John F. CLENDENIN, Agnes "Annie" CANTER, Henry B. ____, Polina CANTER, James H. 20 APR 1867 WHITEHORN, Martha Marie CASON, David ca 1790 ____, Mary */ /* End of Report */ lifelines-3.0.61/reports/menu.ll0000700002540200244210000000227210076661057016747 0ustar prappDomain Users/* * @progname menu.ll * @version 1.0 * @author ? * @category * @output GUI * @description Menu driven shell for LifeLines report programs menu.ll - Menu driven shell for LifeLines report programs To use this shell, rename "proc main()" in a report to "proc ()", then add the file/description/call names in three places here. The menu loops until the first item is selected so pressing "q" from LifeLines user interface does not result in quitting. */ include("eol.li") include("longline.li") include("stat9.li") /* more file inclusions go here */ proc main() { list(mnu) enqueue(mnu, " >> EXIT to LifeLines MAIN MENU << ") enqueue(mnu, "eol2.ll - End of Line Ancestors - Tom Wetmore, John Chandler") enqueue(mnu, "longline.ll - Longest Lines - John Chandler") enqueue(mnu, "stat9.ll - Statistics - Jim Eggert") /* more report descriptions go here */ set(xitem, 0) while (ne(1, xitem)) { set(xitem, menuchoose(mnu, "Choose the program to run")) if (eq(xitem, 2)) { call eol() } elsif (eq(xitem, 3)) { call longline() } elsif (eq(xitem, 4)) { call stat9() } /* more procedure calls go here */ } } lifelines-3.0.61/reports/name2html.ll0000700002540200244210000001776010076661057017702 0ustar prappDomain Users/* * @progname name2html.ll * @version 1.5 * @author Scott McGee * @category * @output HTML * @description Converts the selected indi record to an HTML file. This program is based primarily on my version of indi2html with additions (based on suggestions by Tom Westmore) to handle name lookup and possible multiple matches. @(#)name2html.ll 1.5 10/6/95 */ include("cgi_html.li") include("tools.li") global(found) /* external file to inline found */ global(path) /* path to external file to inline */ global(LDS) /* report LDS ordinaces (1=yes 0=no) */ proc main (){ call set_cgi_html_globals() set(is_indi_html, 1) set(LDS, 1) getindiset(iset, "What name to you want an HTML file for?") if (eq(1, lengthset(iset))) { forindiset(iset, i, v, n) { set(indi, i) } call genhtml(indi) } elsif (ne(0, lengthset(iset))) { call list_to_html(iset) } else { "\n" "No Match\n" "\n" if(use_image){ "\"\"

    \n" } "

    No Match

    \n" "Sorry, no match was found for the requested name!\n" "\n" } } proc genhtml (i){ html_head(i) call afn(i) if (e, birth(i)) { "Born : " long(e) "
    \n" } if (e, baptism(i)) { "Baptised : " long(e) "
    \n" } elsif (e, bapt(i)) { "Baptised : " long(e) "
    \n" } if (e, death(i)) { "Died : " long(e) "
    \n" } if (e, burial(i)) { "Buried : " long(e) "
    \n" } if(LDS) { /* LDS ordinances */ set(started, 0) fornodes(inode(i), node) { if (eq(0, strcmp(tag(node), "BAPL"))) { if(not(started)) { set(started, 1) "
    LDS Ordinances: B " } } /* determine if endowed */ if (eq(0, strcmp(tag(node), "ENDL"))) { if(not(started)) { set(started, 1) "
    LDS Ordinances: " } "E " } } /* determine if sealed to parents */ set(fam, parents(i)) if(fam){ set(val, concat("@", key(i), "@")) fornodes(fnode(fam), node) { if (eq(0, strcmp(tag(node), "CHIL"))) { if (eq(0, strcmp(value(node), val))) { fornodes(node, next) { if (eq(0, strcmp(tag(next), "SLGC"))) { if(not(started)) { set(started, 1) "
    LDS Ordinances: " } "SC " } } } } } } if(started){ "
    \n" } } call othernames(i) call print_html(i) set(hasChildren, 0) if(nfamilies(i)){ families(i, f, s, n){ if(nchildren(f)){ set(hasChildren, 1) } } } "
    \n" if (p, father(i)) { "" "Father : \n" href(p, "Lookup") do_info(p) "
    \n" } if (p, mother(i)) { "" "Mother : " href(p, "Lookup") do_info(p) "
    \n" } families(i, f, s, n) { "

    " "Spouse" if (gt(nfamilies(i), 1)){ " " d(n) } " : \n" if (s) { /* family has a spouse */ href(s, "Lookup") do_info(s) "
    \n" }else{ "(unknown)
    " } if (e, marriage(f)) {"Married " long(e) "
    \n"} if (e, divorced(f)) {"Divorced " long(e) "
    \n"} if(LDS) { /* determine if sealed to parents */ fornodes(fnode(f), node) { if (eq(0, strcmp(tag(node), "SLGS"))) { "LDS Ordinances: SS
    " } } } if(nchildren(f)){ "Children :

      \n" children(f, c, nn) { "
    1. " href(c, "Lookup") do_info(c) } "
    \n" }else{ "(no children)
    \n" } } call print_notes(i) "
    \n" if(parents(i)){ "[" "Pedigree Chart]
    \n" } if(hasChildren){ "[" "Descendant Chart]
    \n" } call do_tail(i) } proc print_notes(indi){ set(first, 1) traverse(inode(indi), node, l) { if (not(strcmp("NOTE", tag(node)))) { if(first) { "Notes :
    \n" set(first, 0) } "

    " call show_path(node) value(node) "\n" fornodes(node, next) { value(next) "\n" } "

    \n" } } } proc show_path (node){ list(path) while (node) { push(path, tag(node)) set(node, parent(node)) } "(" while (s, pop(path)) { if(not(strcmp(lower(s), "indi"))){ "Individual " }elsif(not(strcmp(lower(s), "fam"))){ "Family " }elsif(not(strcmp(lower(s), "famc"))){ "family " }elsif(not(strcmp(lower(s), "fams"))){ "family " }elsif(not(strcmp(lower(s), "note"))){ "note" }elsif(not(strcmp(lower(s), "birt"))){ "birth " }elsif(not(strcmp(lower(s), "deat"))){ "death " }elsif(not(strcmp(lower(s), "buri"))){ "burial " }elsif(not(strcmp(lower(s), "plac"))){ "place " }else{ lower(s) " " } } ") " } proc list_to_html (iset) { "\n" "Multiple Matches\n" "\n" "

    Multiple Matches

    \n" "More than one person in the database matched the name search. They are:\n" "

    \n" forindiset(iset, i, v, n) { href(i, "Lookup") do_info(i) "
    \n" } call do_tail(0) } func do_info(me){ if(not(me)){ return("") }else{ set(out, " -") if (evt, birth(me)) { set(out, concat(out, " born ", short(evt))) } else { if (evt, baptism(me)) { set(out, concat(out, " baptised ", short(evt))) } else { if (evt, bapt(me)) { set(out, concat(out, " baptised ", short(evt))) } } } if (evt, death(me)) { set(out, concat(out, " died ", short(evt))) } return(out) } } proc othernames(indi){ if(indi){ set(count, 0) fornodes(inode(indi), subnode){ if(eqstr(tag(subnode), "NAME")){ incr(count) if(eq(count, 2)){ "
    Other Names: \n
      " "
    • " call nameval(subnode) "
    • " }elsif(gt(count, 2)){ "
    • " call nameval(subnode) "
    • \n" } } } if(gt(count, 1)){ "
    \n" } } } proc nameval(namenode){ list(np) extractnames(namenode, np, nc, sc) forlist(np, v, i){ v " " } } proc afn(indi){ if(indi){ fornodes(inode(indi), subnode){ if(eqstr(tag(subnode), "AFN")){ "AFN " value(subnode) "

    \n" } } } } func divorced(fam) { fornodes(fnode(fam), node) { if (eq(0, strcmp(tag(node), "DIV"))) { return(node) } } return(0) } proc print_html(indi){ fornodes(inode(indi), node) { if (not(strcmp("REPORT", tag(node)))) { set(m, child(node)) if (not(strcmp("TYPE", tag(m)))) { if (or(not(strcmp("HTML", value(m))), not(strcmp("HTML-CGI", value(m))))) { "
    \n" fornodes(m, o) { if (not(strcmp("DATA", tag(o)))) { value(o) "\n" } } } } } } } func html_head(i){ "\n" "" key(i) ": " name(i,0) "\n\n" "\n" if(use_image){ "\"\"

    \n" } "

    " set(vn,givens(i)) set(vn1,save(vn)) givens(i) " " set(nn,surname(i)) set(nn1,save(nn)) nn1 "

    \n" set(path, get_picture(i)) if (found) { "\"\"

    \n" } } lifelines-3.0.61/reports/namefreq.ll0000700002540200244210000000673610076617113017604 0ustar prappDomain Users/* * @progname namefreq.ll * @version 3.0 * @author Chandler * @category * @output Text * @description This report counts occurrences of all first (given) names in the database. Individuals with only surnames are not counted. If the surname is listed first, the next word is taken as the given name. namefreq Tabulate frequency of first names in database. Version 1 - 1993 Jun 16 - John F. Chandler Version 2 - 1993 Jun 18 (sort output by frequency) Version 3 - 1995 Mar 8 (requires LL 3.0 or higher) (Uses Jim Eggert's Quicksort routine) The output file is normally sorted in order of decreasing frequency, but the sort order can be altered by changing func "compare", e.g., comment out the existing "set" and uncomment the one for alphabetical order. This program works only with LifeLines. */ global(name_counts) /* used by comparison in sorting by frequency */ /* Comparison function for sorting. Same convention as strcmp. */ func compare(astring,bstring) { /* alphabetical: return(strcmp(astring,bstring)) */ /* decreasing frequency: */ if(ret,sub(lookup(name_counts,bstring),lookup(name_counts,astring))){ return(ret) } return(strcmp(astring,bstring)) } /* quicksort: Sort an input list by generating a permuted index list Input: alist - list to be sorted Output: ilist - list of index pointers into "alist" in sorted order Needed: compare- external function of two arguments to return -1,0,+1 according to relative order of the two arguments */ proc quicksort(alist,ilist) { set(len,length(alist)) set(index,len) while(index) { setel(ilist,index,index) decr(index) } call qsort(alist,ilist,1,len) } /* recursive core of quicksort */ proc qsort(alist,ilist,left,right) { if(pcur,getpivot(alist,ilist,left,right)) { set(pivot,getel(alist,getel(ilist,pcur))) set(mid,partition(alist,ilist,left,right,pivot)) call qsort(alist,ilist,left,sub(mid,1)) call qsort(alist,ilist,mid,right) } } /* partition around pivot */ func partition(alist,ilist,left,right,pivot) { while(1) { set(tmp,getel(ilist,left)) setel(ilist,left,getel(ilist,right)) setel(ilist,right,tmp) while(lt(compare(getel(alist,getel(ilist,left)),pivot),0)) { incr(left) } while(ge(compare(getel(alist,getel(ilist,right)),pivot),0)) { decr(right) } if(gt(left,right)) { break() } } return(left) } /* choose pivot */ func getpivot(alist,ilist,left,right) { set(pivot,getel(alist,getel(ilist,left))) set(left0,left) incr(left) while(le(left,right)) { set(rel,compare(getel(alist,getel(ilist,left)),pivot)) if (gt(rel,0)) { return(left) } if (lt(rel,0)) { return(left0) } incr(left) } return(0) } proc main () { list(namelist) table(name_counts) list(names) list(ilist) forindi (indi, num) { if(not(mod(num,20))) {print(".")} extractnames(inode(indi), namelist, ncomp, sindx) set(gindx,1) if(eq(sindx,1)) { set(gindx,2) } set(fname, save(getel(namelist, gindx))) if( or( gt(sindx,1), gt(ncomp,sindx))) { if(nmatch, lookup(name_counts, fname)) { set(nmatch, add(nmatch, 1)) } else { enqueue(names, fname) set(nmatch, 1) } insert(name_counts, fname, nmatch) } } "Frequency of given names (first only) in the database\n\n" "Name Occurrences\n\n" call quicksort(names,ilist) forlist(ilist, index, num) { set(fname,getel(names,index)) fname set(nmatch, lookup(name_counts, fname)) col(sub(25, strlen(d(nmatch)))) d(nmatch) "\n" } } lifelines-3.0.61/reports/namesformat1.ll0000700002540200244210000000233210076661057020375 0ustar prappDomain Users/* * @progname namesformat1.ll * @version 1.0 * @author Manis * @category * @output Text * @description * * This program produces a report of how the names format may be printed * using the LifeLines Report Generator. * * namesformat1 * * Code by Cliff Manis, cmanis@csoftec.csf.com * * This report works only with the LifeLines Genealogy program * * version one of this report was written by Cliff Manis in 1991 * * It will produce a report of how the names format may be printed * using the LifeLines Report Generator. * * It is designed for 10 or 12 pitch, HP laserjet III, or any * other printer. * * Output is an ASCII file. * * An example of the output may be seen at end of this report. * */ proc main () { set (nl,nl()) getindi(indi) fullname(indi,0,0,30) nl fullname(indi,1,0,30) nl fullname(indi,0,1,30) nl fullname(indi,1,1,30) nl fullname(indi,0,0,12) nl fullname(indi,1,0,12) nl fullname(indi,0,1,12) nl fullname(indi,1,1,12) nl } /* Sample of report output Manis, Alda Clifford MANIS, Alda Clifford Alda Clifford Manis Alda Clifford MANIS Manis, A C MANIS, A C Alda C Manis Alda C MANIS * / /* End of Report */ lifelines-3.0.61/reports/names_freq.ll0000700002540200244210000001427310076661057020127 0ustar prappDomain Users/* * @progname names_freq.ll * @version 3.0 * @author Eggert * @category * @output Text * @description Tabulate frequency of names in database. Like namefreq (by John Chandler), but it computes frequencies for the first five given names, the surname, and the first two post-surnames. The output can be sorted by frequency or by alphabet, or not at all. names_freq - a LifeLines names frequency calculation program by Jim Eggert (EggertJ@crosswinds.net) Version 1, 8 November 1993 (initial release) listsort code by John Chandler (JCHBN@CUVMB.CC.COLUMBIA.EDU) Version 2, 10 April 1995 changed listsort to quicksort Version 3, 15 January 2000 quicksort bug fix */ global(indices) /* table for indexing into the various lists */ global(top_index) /* number of elements in table and lists */ global(sort_type) /* 0=none, 1=frequency, 2=alphabet */ global(names) /* list of all names */ global(givens1) /* list of counts of names in each position */ global(givens2) global(givens3) global(givens4) global(givens5) global(surs) global(posts1) global(posts2) global(totals) func compare(a,b) { if (eq(sort_type,1)) { /* decreasing frequency: */ if (lt(a,b)) { return(1) } if (eq(a,b)) { return(0) } return(neg(1)) } else { return(strcmp(a,b)) } } /* quicksort: Sort an input list by generating a permuted index list Input: alist - list to be sorted Output: ilist - list of index pointers into "alist" in sorted order Needed: compare- external function of two arguments to return -1,0,+1 according to relative order of the two arguments */ proc quicksort(alist,ilist) { set(index,1) set(len,length(alist)) while(le(index,len)) { setel(ilist,index,index) incr(index) } if (ge(len,2)) { call qsort(alist,ilist,1,len) } } /* recursive core of quicksort */ proc qsort(alist,ilist,left,right) { if(pcur,getpivot(alist,ilist,left,right)) { set(pivot,getel(alist,getel(ilist,pcur))) set(mid,partition(alist,ilist,left,right,pivot)) call qsort(alist,ilist,left,sub(mid,1)) call qsort(alist,ilist,mid,right) } } /* partition around pivot */ func partition(alist,ilist,left,right,pivot) { while(1) { set(tmp,getel(ilist,left)) setel(ilist,left,getel(ilist,right)) setel(ilist,right,tmp) while(lt(compare(getel(alist,getel(ilist,left)),pivot),0)) { incr(left) } while(ge(compare(getel(alist,getel(ilist,right)),pivot),0)) { decr(right) } if(gt(left,right)) { break() } } return(left) } /* choose pivot */ func getpivot(alist,ilist,left,right) { set(pivot,getel(alist,getel(ilist,left))) set(left0,left) incr(left) while(le(left,right)) { set(next,getel(alist,getel(ilist,left))) set(rel,compare(next,pivot)) if (gt(rel,0)) { return(left) } if (lt(rel,0)) { return(left0) } incr(left) } return(0) } proc count_name(name,thiscount) { if(index, lookup(indices, name)) { setel(thiscount,index,add(getel(thiscount,index),1)) } else { /* print("(") print(name) print(")") */ incr(top_index) set(sname,save(name)) enqueue(names,sname) insert(indices,sname,top_index) enqueue(givens1,0) enqueue(givens2,0) enqueue(givens3,0) enqueue(givens4,0) enqueue(givens5,0) enqueue(surs,0) enqueue(posts1,0) enqueue(posts2,0) enqueue(totals,0) setel(thiscount,top_index,add(getel(thiscount,top_index),1)) } } proc main () { table(indices) list(namelist) list(names) list(givens1) list(givens2) list(givens3) list(givens4) list(givens5) list(surs) list(posts1) list(posts2) list(totals) list(ilist) set(top_index,0) set(next_num,0) print("Counting names...") forindi (indi, num) { extractnames(inode(indi), namelist, ncomp, sindx) forlist(namelist,name,ni) { call count_name(name,totals) } if (and(ge(ncomp,1),or(eq(sindx,0),gt(sindx,1)))) { call count_name(getel(namelist,1),givens1) } if (and(ge(ncomp,2),or(eq(sindx,0),gt(sindx,2)))) { call count_name(getel(namelist,2),givens2) } if (and(ge(ncomp,3),or(eq(sindx,0),gt(sindx,3)))) { call count_name(getel(namelist,3),givens3) } if (and(ge(ncomp,4),or(eq(sindx,0),gt(sindx,4)))) { call count_name(getel(namelist,4),givens4) } if (and(ge(ncomp,5),or(eq(sindx,0),gt(sindx,5)))) { call count_name(getel(namelist,5),givens5) } if (sindx) { call count_name(getel(namelist,sindx),surs) } if (gt(ncomp,sindx)) { call count_name(getel(namelist,add(sindx,1)),posts1) } if (gt(ncomp,add(sindx,1))) { call count_name(getel(namelist,add(sindx,2)),posts2) } if (ge(num,next_num)) { print(d(num)) print(" ") set(next_num,add(next_num,100)) } } print(d(num)) getintmsg(sort_type,"Sort method (0=no sort, 1=frequency, 2=alphabet)") if (sort_type) { print("\nSorting ") print(d(top_index)) print(" names...") } if (eq(sort_type,1)) { call quicksort(totals,ilist) } elsif (eq(sort_type,2)) { call quicksort(names,ilist) } else { forlist(names,name,index) { enqueue(ilist,index) } } print("\nWriting results...") "______Frequency of names in the database______\n\n" "Name 1st 2nd 3rd 4th 5th sur post1 post2 total" "\n\n" forlist(ilist, index, num) { getel(names,index) set(nmatch, getel(givens1,index)) col(sub(30, strlen(d(nmatch)))) d(nmatch) set(nmatch, getel(givens2,index)) col(sub(36, strlen(d(nmatch)))) d(nmatch) set(nmatch, getel(givens3,index)) col(sub(42, strlen(d(nmatch)))) d(nmatch) set(nmatch, getel(givens4,index)) col(sub(48, strlen(d(nmatch)))) d(nmatch) set(nmatch, getel(givens5,index)) col(sub(54, strlen(d(nmatch)))) d(nmatch) set(nmatch, getel(surs,index)) col(sub(60, strlen(d(nmatch)))) d(nmatch) set(nmatch, getel(posts1,index)) col(sub(66, strlen(d(nmatch)))) d(nmatch) set(nmatch, getel(posts2,index)) col(sub(72, strlen(d(nmatch)))) d(nmatch) set(nmatch, getel(totals,index)) col(sub(78, strlen(d(nmatch)))) d(nmatch) "\n" } } lifelines-3.0.61/reports/net-ped.ll0000700002540200244210000001607510337707211017336 0ustar prappDomain Users/* * @progname net-ped.ll * @version 2.1 * @author Rafal T. Prinke * @category * @output Netscape HTML * @description This program generates a set of files covering all known ancestors with hypertextual links from the top and bottom persons for easy on-line browsing using Netscape. The amount and format of data can be edited in the "vitals" procedure and "mylong" function. Net-Ped -- Pedigree in Netscape HTML table -- bottom to top Rafal T. Prinke v.1 -- 25 JUN 1996 - one file/tafel v.2 -- 25 JUN 1996 (later at night than v.1) - multiple files/tafels for all ancestors v.2.1 -- 28 JUN 1996 - changed table holding last filename to list - no files for top persons without a parent - cross-links for related ancestors - nicer layout v.2.2 - misc cleanup - tighten checking for non-existent persons - make html slightly more readable -- by Stephen Dum. "proc vitals" code stolen from Tom Wetmore's "ahnentafel" 1995 output uses some Polish specific abbreviations */ global(mindi) global(toplist) global(fillist) global(t) global(a) global(lastfile) global(onelist) global(all) global(mdupli) global(fdupli) proc main() { list(toplist) list(fillist) list(onelist) table(all) table(mdupli) table(fdupli) getindimsg(mindi, "Whose Ahnentafel do you want?") enqueue(toplist, mindi) set(t,1) set(t2,concat("t",d(t),".html")) enqueue(fillist, t2) set(t,add(t,1)) while(indi, dequeue(toplist)) { set(nf,dequeue(fillist)) print("file: ") print(nf) print("\n") newfile(nf,0) call tafel(indi) } } proc tafel(indi) { table(quart) insert(quart,"1",indi) set(a,1) while(lt(a,16)) { if(person,lookup(quart,d(a))) { if (par,father(person)) { set(before, lookup(all, key(par))) if (before) { insert(fdupli, key(person),1) } else { insert(all, key(par), outfile()) insert(quart,d(mul(a,2)),par) } } if (par,mother(person)) { set(before, lookup(all, key(par))) if (before) { insert(mdupli, key(person),1) } else { insert(all, key(par), outfile()) insert(quart,d(add(1,mul(a,2))),par) } } } set(a,add(a,1)) } "\n\n\n" set(a,16) "" while(lt(a,32)) { if (lookup(quart,d(a))) { if (or( father(lookup(quart,d(a))), mother(lookup(quart,d(a))) )) { set(t2,concat("t",d(t),".html")) "\n" enqueue(toplist,lookup(quart,d(a))) enqueue(onelist,outfile()) set(t,add(t,1)) enqueue(fillist, t2) } else { "\n" } } else { "\n" } set(a,add(a,1)) } "\n" set(a,8) "" while(lt(a,16)) { "\n" set(a,add(a,1)) } "\n" set(a,4) "" while(lt(a,8)) { "\n" set(a,add(a,1)) } "\n" set(a,2) "" while(lt(a,4)) { "\n" set(a,add(a,1)) } "\n" if(nestr(key(lookup(quart,d(1))),key(mindi))) { "\n\n" } else { "\n\n" } "
    " "" d(a) ".

    " "" call vitals(lookup(quart,d(a))) nl() "

    " "" d(a) ".

    " call vitals(lookup(quart,d(a))) nl() "

    " d(a) ".
    " "" d(a) ".

    " call dup(lookup(quart,d(a))) call vitals(lookup(quart,d(a))) nl() "

    " "" d(a) ".

    " call dup(lookup(quart,d(a))) call vitals(lookup(quart,d(a))) nl() "

    " "" d(a) ".

    " call dup(lookup(quart,d(a))) call vitals(lookup(quart,d(a))) nl() "

    " "" d(1) ".

    " call dup(lookup(quart,d(1))) call vitals(lookup(quart,d(1))) nl() "


    BACK
    " "" d(1) ".

    " call vitals(lookup(quart,d(1))) nl() "

    \n\n\n" } proc vitals(persn) { set(e,marriage(fam)) if (and(e,long(e))) { mylong(e) } "" name(persn,0) "
    \n" set(e,birth(persn)) if(and(e,long(e))) { "* " mylong(e) "
    \n" } set(e,death(persn)) if(and(e,long(e))) { "+ " mylong(e) "

    \n" } "" set(srd,0) if (gt(nspouses(persn),1)) { spouses(persn,ind2,fm,nsp) { set(dad,father(ind2)) set(mom,mother(ind2)) if (srd) { "; " } " x (" d(nsp) ") " set (es,marriage(fm)) if (and(es,long(es))) { mylong(es) " " } name(ind2,0) if (or(dad,mom)) { ", " if (male(ind2)) { "s. " } elsif (female(ind2)) { "c. " } else { "dz. " } } if (dad) { name(dad,0) fornodes(inode(dad), ok) { if (eqstr(tag(ok),"OCCU")) { ", " value(ok) } } } else { name(mom,0) } set(srd,1) } } if (eq(nspouses(persn),1)) { if (male(persn)) { spouses(persn,ind2,fm,nsp) { set (es,marriage(fm)) if (and(es,long(es))) { "x " mylong(es) } } } } "" } proc dup(persn) { if (persn) { if(lookup(fdupli,key(persn))) { set(yest,lookup(all,key(father(persn)))) "FATHER: " name(father(persn)) "
    \n" } if(lookup(mdupli,key(persn))) { set (yest,lookup(all,key(mother(persn)))) "MOTHER: " name(mother(persn)) "
    \n" } } } func mylong(ev) { set(nic,0) if (ne(index(date(ev),"/",1),0)) { date(ev) set(nic,1) } if (ne(index(date(ev),"BEF",1),0)) { "p. " substring(date(ev),5,strlen(date(ev))) set(nic,1) } if (ne(index(date(ev),"AFT",1),0)) { "po " substring(date(ev),5,strlen(date(ev))) set(nic,1) } if (ne(index(date(ev),"ABT",1),0)) { "ok. " substring(date(ev),5,strlen(date(ev))) set(nic,1) } if (eq(nic,0)) { date(ev) } if (place(ev)) { ", " place(ev) } } lifelines-3.0.61/reports/nonpatronymics.ll0000700002540200244210000000246110076661057021066 0ustar prappDomain Users/* * @progname nonpatronymics.ll * @version 1.0 * @author Eggert * @category * @output Text * @description * * Find all cases of nonpatronymic inheritances in the database. * If the child's surname is not identical to the father's surname, * print both out. If the two surnames have different soundex * codes, undent the printout. Print statistics at the end. * * nonpatronymics * * Code by Jim Eggert, eggertj@ll.mit.edu * * This report works only with the LifeLines Genealogy program * * version one of this report was written by Jim Eggert, in 1992. * * Output is an ASCII file. */ proc main () { set(n,0) set(ns,0) set(header,0) forindi(indi,num1) { if (fath,father(indi)) { if (ne(0,strcmp(surname(indi),surname(fath)))) { if (eq(header,0)) { "Dissimilar surnames" nl() " Similar surnames" nl() set(header,1) } if (eq(strcmp(save(soundex(indi)), save(soundex(fath))),0)) { " " set(ns,add(ns,1)) } d(num1) " " name(indi) " <> " name(fath) nl() set(n,add(n,1)) } } } nl() d(num1) " individuals scanned." nl() d(n) " nonpatronymic inheritances found" if (eq(n,0)) { "." nl() } else { "," nl() d(sub(n,ns)) " of which were soundex-dissimilar." nl() } } lifelines-3.0.61/reports/novel/0000700002540200244210000000000010657071735016572 5ustar prappDomain Userslifelines-3.0.61/reports/novel/novel.intro0000700002540200244210000000712110345202300020750 0ustar prappDomain Users.HU "Introduction" I have now come to the stage in my life where I want to know about my ancestors. It must mean that I'm starting to feel my age! I started collecting basic information about my relations, such as who they were, when they were born and when they died. As I have spent my working life with computers I have looked for a way of storing this information on a computer so that I can then easily print out new copies of it as I learn more. .P I have found that there are many ways of doing this, with means of storing all sorts of information. As a result, my plans have now changed as I thought it would be a good idea to hold a sort of mini-biography about each person, so that in the future there is a much more interesting record about the person. .P The information I want to record starts with the basic details, such as birth marriage and death etc. this is then filled out with information about details of the school they attended, where they worked and where they lived. On the more personal side of things information about their hobbies and interests and the important events in their life. As far as families and relationships are concerned I think it would be most interesting to know how people first met. .P I therefore hope to build up a picture of what people were like and what their lifestyle was and at the same time recording information that could be used by people in future trying to do further research. An example of this is recording where people lived at various times in their lives so that when the census information for that period becomes available the place to look is available. (Census information is kept secret for 100 years, the latest avaailable at the moment is the 1891 census). .P What you are reading is one of the many types of reports that I can produce from my computer database. This one shows a particular person and his/her descendants and ancestors. Please remember when you read it that it is only as accurate as the data thats present. E.g. if its says that a couple had no children, then that does not categorically mean it, they may have had children that I didn't know about. .P Now go ahead and find out about The Stringers and his/her family. If any details are wrong then please let me know, and if you have any more information I would also be most grateful to receive it. If you want information about anybody that I have a record of I can provide it in a variety of forms, just let me know what you want. .P If you would like to add information about your relations so they appear in the reports as well, I would be happy to do so. However if you don't have the information, then I will tell you where to go and find it, but I won't be doing the research myself. The only lines that I will be doing further research on are my personal ancestors. .P One development I am planning is to add pictures to this report as I have access to a digital scanner which converts photographs to a digital form. This should help with future problems in identifying people from old photographs! If uou are in the report, a picture will eventually appear, and if it isn't your best likeness you may wish to provide a better one! .P Finally I am VERY interested in getting hold of copies of any birth, marriage, and death certificates of anybody in the family tree, as they verify the information here. Any such certifacates lent to me would be photocopied and returned to the owner as soon as possible. .P If you get a copy of this report, and want to get in touch with me, but haven't got my address, it's: .DS Phil Stringer, 40 Broomfields, Denton, Manchester M34 3TH Tel: 0161 320 6530 .DE .P .SK lifelines-3.0.61/reports/novel/novel.ll0000700002540200244210000004436710345202300020241 0ustar prappDomain Users/* * @progname novel.ll * @version none * @author Wetmore, Manis, Stringer * @category * @output nroff * @description * * It will produce a report of all descendents and ancestors of a person * in book form. It understands a wide variety of gedcom records and * tries hard to produce a readable, personalised document. * * It prints a sorts listing of names, at the end of the report * of everyone in the report. All NOTE and CONT lines will * be printed in the this report. This report will produced * a paginated output. * * This report produces a nroff output, and to produce the * output, use: nroff -mm filename > filename.out * groff -mgm -Tascii filename >filename.out * groff -mgm filename >filename.ps [PostScript output] * * The report uses one additional file as input. * novel.intro is included at the beginning of the report and is where * you can put a general intoductory text. If you don't * provide this, it is skipped. A prototype is provided * along with this report. * * Original code by Tom Wetmore, ttw@cbnewsl.att.com * with modifications by Cliff Manis * Extensively re-written by Phil Stringer P.Stringer@mcc.ac.uk * Modified by Stephen Dum to remove external file dependencies and * to fix a y2k bug. * * This report works only with the LifeLines Genealogy program * */ global(idex) global(curgen) global(glist) global(ilist) global(in) global(out) global(ftab) global(sid) global(lvd) global(enqc) global(enqp) global(stack) global(fac) /* First item after children */ global(itab) proc main () { getindi(indi) dayformat(2) monthformat(6) output_head() list(ilist) list(glist) list(stack) /* To hold function return values */ table(ftab) indiset(idex) table(sid) table(lvd) table(itab) enqueue(ilist,indi) enqueue(glist,0) set(curgen,0) set(out,1) set(in,2) ".ds iN " name(indi) nl() ".PH " qt() "''\\s+3\\fB" name(indi) sp() call fromto(indi) "\\s-3\\fR" qt() nl() if (test("f","novel.intro")) { copyfile("novel.intro") } print ("Descendants") print(nl()) ".HU " qt() name(indi) " and " pn(indi,3) " descendants" qt() nl() set(enqc,1) set(enqp,0) call scan() print ("Ancestors") print(nl()) ".HU " qt() "The ancestors of " name(indi) qt() nl() set(curgen,0) set(enqc,0) set(enqp,1) call enqpar(indi) call scan() call prindex() } proc enqpar(indi) { set(dad,father(indi)) if (dad) { set(g,sub(curgen,1)) enqueue(ilist,dad) enqueue(glist,g) insert(sid,key(dad),in) set(in,add(in,1)) } set(mom,mother(indi)) if (mom) { set(g,sub(curgen,1)) enqueue(ilist,mom) enqueue(glist,g) insert(sid,key(mom),in) set(in,add(in,1)) } } proc scan () { while (indi,dequeue(ilist)) { print(name(indi)) print(nl()) set(thisgen,dequeue(glist)) if (ne(curgen,thisgen)) { ".GN " d(thisgen) nl() set(curgen,thisgen) } if (enqp) { call enqpar(indi) } ".IN" nl() d(out) ". " call longvitals(indi,1,1) set(out,add(out,1)) } } proc longvitals(i,showc,showp) { if ( and(i,lookup(lvd,key(i))) ) { /* call shortvitals(i)*/ call nicename(i) "." nl() } else { set (fac,1) "\\fB" call nicename(i) "\\fR." nl() insert(sid,key(i),out) insert(lvd,key(i),out) call add_to_ix(i) call dobirth(i,showp) call doeduc(i) call domarr(i,showc) call dooccu(i) call doresi(i) call donotes(inode(i),1) call dotext(inode(i),1) call othernodes(inode(i)) call doreti(i) call dodeath(i) } } proc shortvitals(indi) { call nicename(indi) set(b,birth(indi)) set(d,death(indi)) if (and(b,short(b))) { ", b. " short(b) } if (and(d,short(d))) { ", d. " short(d) } "." nl() } proc famvitals (indi,fam,spouse,nfam,showc) { if (eq(0,nchildren(fam))) { call firstname(indi) if (spouse) { " and " call firstname(spouse) } " had no children" if (not(spouse)) { " from this marriage" } "." nl() } elsif (and(fam,lookup(ftab,key(fam)))) { set(par,indi(lookup(ftab,key(fam)))) "Children of " call firstname(indi) " and " call firstname(spouse) " are shown " "under " call nicename(par) "." nl() } elsif (showc) { "Children of " call firstname(indi) if (spouse) { " and " call firstname(spouse) } ":" nl() ".VL 0.4i" nl() insert(ftab,save(key(fam)),key(indi)) children(fam,child,nchl) { ".LI " roman(nchl) nl() set(childhaschild,0) families(child,cfam,cspou,ncf) { if(ne(0,nchildren(cfam))) { set(childhaschild,1) } } ".CH " nl() if (and(enqc,childhaschild)) { call enqch(child) call shortvitals(child) } else { call longvitals(child,0,0) } set(fac,1) } ".LE" nl() ".IN" nl() } else { call firstname(indi) if (spouse) { " and " call firstname(spouse) } " had " card(nchildren(fam)) if(eq(1,nchildren(fam))) { " child," set(andn,0) } else { " children," set(andn,sub(nchildren(fam),1)) } children(fam,child,nchl) { " " call firstname(child) call doadopts(child) call add_to_ix(child) if(ne(nchl,nchildren(fam))) { if(eq(nchl,andn)) { " and" } else { "," } } } "." nl() } } proc enqch (child) { enqueue(ilist,child) enqueue(glist,add(1,curgen)) insert(sid,key(child),in) set (in, add (in, 1)) } proc spousevitals (sp,fam) { if(e,marriage(fam)) { if (place(e)) { call wherewhen(e) "," } } " " call add_to_ix(sp) if (and(sp,lookup(sid,key(sp)))) { /*call shortvitals(sp)*/ call nicename(sp) "." nl() } else { call nicename(sp) set(e,birth(sp)) if(and(e,long(e))) { "," nl() "born" call wherewhen(e) } set(e,death(sp)) if(and(e,long(e))) { "," nl() pn(sp,1) " died" call wherewhen(e) } "." nl() call showparents(sp) } } proc showparents(sp) { set(dad,father(sp)) set(mom,mother(sp)) if (or(dad,mom)) { pn(sp,0) " " if (death(sp)) { "was the " } else { "is the " } if (male(sp)) { "son of " } elsif (female(sp)) { "daughter of " } else { "child of " } if (dad) { call nicename(dad) } if (and(dad,mom)) { nl() "and " } if (mom) { call nicename(mom) } if (dad) { call add_to_ix(dad) } if (mom) { call add_to_ix(mom) } set(nch,nchildren(parents(sp))) decr(nch) if (gt(nch,0)) { " who had " card(nch) " other " if (eq(1,nch)) { "child," set(andn,0) } else { "children," set(andn,sub(nch,1)) } set(cp,0) children(parents(sp),child,nchl) { if (ne(key(child),key(sp))) { " " call firstname(child) call doadopts(child) call add_to_ix(child) set(cp,add(cp,1)) if(ne(nch,cp)) { if(eq(cp,andn)) { " and" } else { "," } } } } ". " nl() } "." nl() } } proc dobirth(i,showp) { set(e,birth(i)) if(and(e,long(e))) { ".P" nl() call firstname(i) set(fac,0) " was born" call wherewhen(e) "." nl() } if(showp) { call showparents(i) } set(e,get_baptism(i)) if(and(e,long(e))) { if(not(birth(i))) {".P" nl()} call fn0(i) if (eqstr(tag(e),"BAPM")) { " was baptized" } elsif (eqstr(tag(e),"BAPL")) { " was baptized" } elsif (eqstr(tag(e),"CHR")) { " was christened" } elsif (eqstr(tag(e),"CHRA")) { " was christened" } call wherewhen(e) "." nl() } } proc domarr(i,showc) { set(j,1) families(i,f,s,n) { ".P" nl() call fn0(i) if (or(not(s),marriage(f))) { " married" } else { " lived with" } if (ne(1,nfamilies(i))) { " " ord(j) ", " } set(j,add(j,1)) if (s) { call spousevitals(s,f) } else { if (male(i)) { " but his wife's name is not known. " } else { " but her husband's name is not known. " } nl() } call dowitness(fnode(f)) call donotes(fnode(f),1) call othernodes(fnode(f)) call famvitals(i,f,s,n,showc) set(fac,1) } } proc dodeath(i) { set(e,death(i)) if(and(e,long(e))) { ".P" nl() call fn0(i) " died" call wherewhen(e) "." nl() call addtostack(e,"CAUS") if(not(empty(stack))) { "The cause of death was " dequeue(stack) "." nl() } call donotes(e,0) } set(e,burial(i)) if(and(e,long(e))) { if(not(long(death(i)))) {".P" nl()} call fn0(i) if (p,place(e)) { if( ne(0,index(upper(p),"CREMAT",1)) ) { " was laid to rest" } else { " was buried" } } else { " was buried" } call wherewhen(e) "." nl() call donotes(e,0) call dotext(e,1) } } proc donotes(in,subpara) { fornodes(in, node) { if (eq(0,strcmp("NOTE", tag(node)))) { if (subpara) { ".P" nl() } value(node) nl() call addtostack(node,"CONT") while(it,dequeue(stack)) { it nl() } } } } proc dotext(in,subpara) { fornodes(in, node) { if (eq(0,strcmp("TEXT", tag(node)))) { if (subpara) { ".P" nl() } call addtostack(node,"SOUR") if(not(empty(stack))) { "The following information was found in " while(it,dequeue(stack)) { it nl() } ".I :" nl() ".P" nl() } value(node) nl() call addtostack(node,"CONT") while(it,dequeue(stack)) { it nl() } ".R" nl() } } } proc dowitness(snode) { set(mult,0) call addtostack(snode,"WITN") if (not(empty(stack))) { "Witnessed by " while(it,dequeue(stack)) { if (mult) { " and " } else { set(mult,1) } it } "." nl() } } proc dooccu(in) { set(first,1) fornodes(inode(in), node) { if (eq(0,strcmp("OCCU", tag(node)))) { if(first) { ".P" nl() call fn2(in) " occupation was " set(first,0) } else { "Then " } value(node) call wherewhen(node) "." nl() } } } proc doresi(in) { set(first,1) fornodes(inode(in), node) { if (eq(0,strcmp("RESI", tag(node)))) { if(first) { ".P" nl() call fn0(in) " lived" set(first,0) } else { "Subsequently" } call wherewhen(node) "." nl() } } } proc doeduc(in) { set(first,1) fornodes(inode(in), node) { if (eq(0,strcmp("EDUC", tag(node)))) { if(first) { ".P" nl() call fn0(in) " was educated" set(first,0) } else { "Also" } call wherewhen(node) "." nl() } } } proc doreti(in) { fornodes(inode(in), node) { if (eq(0,strcmp("RETI", tag(node)))) { ".P" nl() call fn0(in) " retired" call wherewhen(node) "." nl() } } } /* Short version of adoption */ proc doadopts(in) { fornodes(inode(in), node) { if (eq(0,strcmp("ADOP", tag(node)))) { " (adopted)" } } } proc addtostack(stnode,ntype) { fornodes(stnode, subnode) { if (eq(0,strcmp(ntype, tag(subnode)))) { enqueue(stack,value(subnode)) } } } proc addtostackc(stnode,ntype) { fornodes(stnode, subnode) { if (eq(0,strcmp(ntype, tag(subnode)))) { enqueue(stack,value(subnode)) call addtostack(subnode,"CONT") } } } proc stackaddr(e) { call addtostackc(e,"ADDR") } proc stackplace(stnode) { fornodes(stnode, subnode) { if (eq(0,strcmp("PLAC", tag(subnode)))) { call stackaddr(subnode) enqueue(stack,value(subnode)) } } } proc fromto(indi) { set(e,birth(indi)) set(f,death(indi)) if (or(year(e),year(f))) { "(" if (year(e)) {year(e)} else { "?" } "-" year(f) ")" } } proc when(e) { if(d,stddate(e)) { set(i,index(d," ",1)) if(eq(0,i)) { " in " } elsif(eq(i,1)) { " in" } elsif(lt(i,4)) { " on " } else { " in " } d } call doperi(e) call addtostack(e,"AGE") if (not(empty(stack))) { ", at the age of " dequeue(stack) } } proc where(e) { call addtostack(e,"CORP") call addtostack(e,"SITE") call stackaddr(e) call stackplace(e) if (not(empty(stack))) { " at " dequeue(stack) while (elem,dequeue(stack)) { ", " elem /* if (not(empty(stack))) { ", " }*/ } } } proc wherewhen(e) { call where(e) call when(e) } proc whenwhere(e) { call when(e) call where(e) } proc doperi(node) { call addtostack(node,"PERI") if(not(empty(stack))) { " from " set(notfirst,0) /* if(not(getel(stack,2))) { dequeue(stack) } else {*/ while(it,dequeue(stack)) { if(getel(stack,1)) { it ", " } else { if(notfirst) {"and " set(notfirst,1)} it } } /* }*/ } } proc nicename(i) { if(eq(0,strlen(givens(i)))) { "____" } else { givens(i) } sp() if(surname(i)) {upper(surname(i))} else { "____" } if(sect,lookup(sid,key(i))) { if(ne(sect,out)) {" [" d(sect) "]"} } } /* Print the firstname or He/She depending whether the fac flag is set */ proc fn0(i) { if (fac) { call firstname(i) set(fac,0) } else { pn(i,0) } } /* Print the firstname or His/Her depending whether the fac flag is set */ proc fn2(i) { if (fac) { call firstname(i) "'s" set(fac,0) } else { pn(i,2) } } proc firstname(i) { if (i) { call addtostack(inode(i),"CNAM") if (not(empty(stack))) { dequeue(stack) } else { list(parts) extractnames(inode(i),parts,elems,sn) if(eq(1,elems)) { "____ " pop(parts) } else { set(nf,1) forlist(parts,it,n) { if(ne(sn,n)) { if(nf) { set(ans,it) set(nf,0) } /* if( ne(0,index(it,qt(),1)) ) { set(ans,substring(it,2,sub(strlen(it),1))) }*/ } } ans } } } } proc othernodes(i) { fornodes(i, node) { if (index(" BAPM BAPL BIRT BURI CHIL CHR CHRA CNAM CONF DEAT DIVI EDUC FAMC FAMS HUSB MARR NAME NOTE RESI RETI OBJE OCCU SEX TEXT WIFE WITN ", concat(" ",upper(tag(node))," "),1)) { set(null,0) /* lifelines noop */ } elsif (eq(0,strcmp("FILE", tag(node)))) { copyfile(value(node)) } elsif (eq(0,strcmp("DIVI", tag(node)))) { "The marriage ended in divorce." nl() } else { ".P" nl() tag(node) sp() value(node) call wherewhen(node) nl() call subnode(node) } } } proc subnode(i) { fornodes(i, subn) { if (index(" ADDR AGE CORP DATE PERI PLAC SITE ", concat(" ",upper(tag(subn))," "),1)) { set(null,0) } else { ".br" nl() tag(subn) sp() value(subn) nl() call subnode(subn) } } } proc prindex () { print("Index") print(nl()) namesort(idex) monthformat(4) ".IX" nl() forindiset(idex,indi,v,n) { ".br" nl() fullname(indi,1,0,24) " " call fromto(indi) " " lookup(itab,key(indi)) nl() set(tp,n) } print(d(tp)) print(" individuals were mentioned in this report") print(nl()) ".P" nl() "There are " d(tp) " individuals mentioned in this report." nl() } proc add_to_ix(i) { /* print("IX ") print(name(i)) print(" ") print(d(out)) print(nl())*/ addtoset(idex,i,d(out)) if (l,lookup(itab,key(i))) { /* print(" - already got ") print(l) print(nl())*/ insert(itab,key(i),save(concat(concat(l,","),d(out)))) } else { insert(itab,key(i),save(d(out))) } } func get_baptism(indi) { list(ev) fornodes(indi,node) { if (index(" BAPM BAPL CHR CHRA ",concat(" ",upper(tag(node))," "),1)) { return(node) } } return(0) } func get_tags(indi,str) { list(ev) fornodes(indi,node) { if (index(str,concat(" ",upper(tag(node))," "),1)) { push(ev,node) } } return(ev) } func output_head() { /* this is really ugly. back slash is already overused in *roff code * but to include this here we have to escape the backslashs (that were * already escaped in the *roff code. However, it is better here, * than the hassels of a separate file for the header info. */ ".if t .pl 10.9i \\\" Page length" nl() ".if n .pl 10.7i" nl() ".if t .ll 6.75i \\\" Line length" nl() ".if n .ll 7.25i" nl() ".\\\".if t .lt 6.75i \\\" Title length" nl() ".\\\".if n .lt 7.25i" nl() ".if t .lt 7.75i \\\" Title length" nl() ".if n .lt 9.25i" nl() ".po 0.5i \\\" Left margin" nl() ".ls 1 \\\" Line spacing" nl() ".\\\".nr Ej 1 \\\" New page before chapter headings" nl() ".nr Hb 1 \\\" Line break after all headings" nl() ".nr Hs 6 \\\" Blank line after all headings" nl() ".\\\".nr Hc 1 \\\" Centre chapter headings" nl() ".nr Hu 1 \\\" Un-numbered headings are at level 1" nl() ".nr Hi 1 \\\" Indent after head same as paras" nl() ".nr Pt 0 \\\" Don't indent paras" nl() ".nr Cl 6 \\\" Heads in table of contents up to level 6" nl() ".nr Yr \\n(yr+1900 \\\" the year for we are printing this" nl() ".if t .ds HF 3 3 3 3 3 3 2 \\\" Heading fonts" nl() ".ds HP +6 +6 +2 +2 +2 +2 +1 \\\" Heading point sizes" nl() ".ds pB " getproperty("user.fullname") nl() ".rm )k \\\" Remove cut marks at top of page" nl() ".if \"\\nd\"0\" .nr m \\n(mo-1" nl() ".if \"\\nm\"0\" .ds mO January" nl() ".if \"\\nm\"1\" .ds mO February" nl() ".if \"\\nm\"2\" .ds mO March" nl() ".if \"\\nm\"3\" .ds mO April" nl() ".if \"\\nm\"4\" .ds mO May" nl() ".if \"\\nm\"5\" .ds mO June" nl() ".if \"\\nm\"6\" .ds mO July" nl() ".if \"\\nm\"7\" .ds mO August" nl() ".if \"\\nm\"8\" .ds mO September" nl() ".if \"\\nm\"9\" .ds mO October" nl() ".if \"\\nm\"10\" .ds mO November" nl() ".if \"\\nm\"11\" .ds mO December" nl() ".PF \"'\\fIProduced by \\*(pB\\fR'- \\\\\\\\nP -'\\fI\\n(dy \\*(mO \\n(Yr \\fR'\"" nl() ".PH" nl() ".de GN" nl() ".br" nl() ".ne 2i" nl() ".sp 2" nl() ".in 0" nl() ".ce" nl() ".if t \\s+3\\fHGENERATION \\\\$1\\fH\\s-3" nl() ".if n GENERATION \\\\$1" nl() ".." nl() ".de CH" nl() ".." nl() ".de IN" nl() ".sp" nl() ".in 0" nl() ".." nl() ".de IX" nl() ".SK" nl() ".HU Index" nl() "All the people mentioned in this report are given below. Please note that" nl() "the numbers printed after the name are not page numbers. They are the section" nl() "number(s) in which that person is mentioned. " nl() ".if t .2C" nl() ".." nl() ".de .I" nl() ".if t \\fI\\\\$1" nl() ".if n \\\\$1" nl() ".." nl() ".de .R" nl() ".if t \\fR" nl() ".." nl() } lifelines-3.0.61/reports/novel/novel.README0000700002540200244210000000640510077366775020613 0ustar prappDomain UsersThe "novel" report program is designed to produce a book about an individual from a LifeLines database. Its called "novel" because it produces a book, but there is already a report program called "book". Purists would argue that "novel" is a totally inappropriate name, because there should be absolutely no fiction in a Lifelines database! The idea of the program is to select a person from the database and format the Gedcom into a readable form that can be understood by anybody, giving all the information about the person and his/her ancestors and descendants. There is also an introductory section put on the front of the report in which you can describe what it contains, and also add things like requests for information. The idea is to produce a personalised report you can send off to a relation, telling them lots of information with the hope that they will come back with a lot more and let you know about any errors. It is structured to handle all the common Gedcom tags and print them as an intelligible sentence, hopefully not sounding too like junk mail from companies like "Registers Digest". If it finds a Gedcom tag that isn't programmed in, it still prints the information, but you will need to add a small routine to make it read sensibly. There are lots of examples there to use as model. Add the call to the routine for a new gedcom node type to longvitals(i), and then modify othernodes(i)/subnode to prevent it being printed with unknown types. I use a node of CNAM for a person's common name/alias e.g. 1 NAME Margaret Winifred Thorpe 2 CNAM Peggy Thus in a paragraph about the person she would be first referenced as "Peggy" and subsequently as "she" or "her". Without the CNAM record we would use "Margaret" instead of "Peggy". Sometimes references are made to other folks and if this happens then the next "she" or "her" would be replaced by "Peggy". The order of the text in the descriptions does not entirely rely on the Gedcom being in chronological order, but it does help. It assumes birth, then "EDUC" nodes detailing schooling, marriage, "OCCU" for occupation, "RESI" for where they lived, "RETI" for retirement, then any unknown nodes, then death. NOTE and TEXT records can be shown from any level. The output from the program is used as input to nroff/troff/groff using the mm set of macros. See the examples at the start of the program. This enables you to have a document which fits your printer as closely as possible to give the recipient a good impression. E.g. nroff -mm filename > filename.out groff -mgm -Tascii filename >filename.out groff -mgm filename >filename.ps [PostScript output/Linux] The files required are: novel.ll The report program itself. novel.intro A file containing the introductory text. Use the one supplied as a model. novel.head Nroff macros definitions etc. You can modify this if you know what you are doing, to vary the output style. novel.README This file. This program is not being actively worked upon, it only gets changed as needed and when I have time available. Maintaining the UK+Ireland WWW server takes all my time. At some stage in the future I intend to include support for the psfig troff extensions, so that scanned images can also be included. Phil Stringer - 10 July 1995 - email: P.Stringer@mcc.ac.uk lifelines-3.0.61/reports/outsources.li0000700002540200244210000000230010076661057020203 0ustar prappDomain Users/* * @progname outsources.li * @version 1.3 * @author Scott McGee (smcgee@microware.com) * @category * @output GEDCOM * @description This is a library of functions and proc to output GEDCOM. It is most useful to output source records and potentially some info from custom tags. The proc outsources() will take an indi set and output all the source structures that are referenced. @(#)gedcom.li 1.3 10/13/95 */ proc outsources (s){ table(t) list(q) forindiset (s, i, a, n) { traverse(root(i), m, l) { if (nestr("SOUR", tag(m))) { continue() } if (not(reference(value(m)))) { continue() } if (eq(1, lookup(t, value(m)))) { continue() } set(v, save(value(m))) insert(t, v, 1) enqueue(q, v) } } if(q){ forlist(q, k, n) { set(r, dereference(k)) call outrecord(r) } } } proc outrecord(r){ /* good general purpose procedure that outputs any LifeLines record in its pure GEDCOM form */ traverse(r, s, l) { d(l) if (xref(s)) { " " xref(s) } " " tag(s) if (value(s)) { " " value(s) } "\n" } } lifelines-3.0.61/reports/paf-export.ll0000700002540200244210000004345110076661057020074 0ustar prappDomain Users/* * @progname paf-export.ll * @version 1994-11-12 * @author Kurt Baudendistel (baud@research.att.com) * @category * @output GEDCOM * @description * * Convert lifelines-standard gedcom to paf gedcom. * This report generates paf-compatible gedcom from a lines-compatible * database, including the conversion of SOUR entries into the bang- * tagged NOTEs used by paf for documentation (see 5). This produces * paf 2.2 output -- you can convert to 2.1 by loading and unloading * it using paf 2.2. * * First, some silly truncation and format conformance stuff: * * 1. NAMEs are truncated to four fields (3 given and 1 surname) of * 16 characters each. The 3rd given name field is filled with * multiple names concatenated by underscores, up to the 16 character * limit. Characters trailing the surname are inserted as a TITL * entry, taking precendence over or being subverted by another TITL * entry (according to the order of the two -- the first takes * precedence). * 2. PLACes are truncated to four fields of 16 characters each. * Leading commas are inserted to fill to four fields. * 3. SEX is set to M, F, or blank. * 4. DATEs are truncated to 23 characters. Date format checking is * not (yet) performed. If you've done this elsewhere, please let * me know and I'll stick it in. * 5. No effort is made to conform to the 80 character per line limit. * * Let's define "contify" to mean read a line, check its length, and * line break it using CONTs at a space so that the maximum line length * is approached but not violated. Contification is best handled in * a post-processing phase that simply reads in the file, contify's it, * and outputs it again. This could be done, but is not. * * Should this simply check line lengths and contify those over 80 * characters, or should the system concatenate and then contify all * lines? The latter is much more elegant and suitable for systems * that assume post-processing, as with LaTeX, but the former is * required to maintain "formatting" in ascii text while providing * the automatic capability for producing paf-compatible files. I * would argue that if the former is the case, that no contification * should take place at all -- if the user wants some control over * the formatting, then s/he should take full responsibility to * maintain the formatting completely. And that's where we leave * it, no contification is done. * * Next, only a restricted subset of the entries are output: * * 6. Only the following entries are output: * - Level 1 records, only the first of multiple is output: * NAME, TITL, SEX, BIRT, CHR, DEAT, BURI * - Level 2 records, only the first of multiple is output: * DATE, PLAC * - Level 1 records, multiple outputs allowed: * NOTE, FAMS, FAMC, AFN, REFN, HUSB, WIFE, CHIL, MARR, * BAPL, ENDL, TEMP, SLGC, SLGS * - Level 1 DIV, DIVF, and ANUL records are translated into DIV Y * along with bang-tagged NOTEs (notes are not yet supported), * multiple outputs are allowed. * - Level 1 OCCU are converted to NOTEs. * - Level 2 SOUR records are translated into bang-tagged NOTEs * attached to the individual or to the head of the family, * husband or wife if there is no husband, for marriage/divorce * sources, multiple outputs are allowed. * * The format of the NOTEs is as described in the 1993 Edition of * of the PAF Documentation Guidelines produced by the Silicon * Valley Users Group, where the text of each gedcom record is * inserted as shown: * * m SOUR text -> !event: text * m @xx@ SOUR -> !event: AUTHor or NAME, TITLe; PERIod; * PUBRisher and publication information, * ADDR, DATE; PAGEs; REPOsitory; NOTEs * m SOUR @xx@ -> !event: See xx. * * Generally, source references must be converted to definitions * before they can be used to produce legal NOTEs according to the * PAF DC (I use an awk script for this in lieu of real lifelines * support for sources in 2.3.6). * * TITL is replaced by "TITL," PUBL when the PUBL record exists -- * this structure is used to give the TITLe of an article in a * PUBLication. * * Actually, this is not quite correct: * . The PDG does not require the bang, but rather uses it to signal * ``public'' notes -- we assume that all notes are public, though, * and so require it. * . The PDG requires ;;;;; before text in a plain note, but this * seems like overkill. * * No other entries are output! * * 8. CONTs are only handled correctly for NOTEs and SOURs. * * Finally, some output formatting is available: * * 9. Submitter information can be optionally included. If used, this * should be a file of the form * * 0 @xx@ SUBM * 1 NAME Kurt Baudendistel * 1 ADDR 420 River Rd, Apt D7 * 2 CONT Chatham, NJ 07928 * 2 CONT baud@research.att.com * 1 PHON (908) 582-2168 * * Note that errors in this file format will not be checked -- it * is simply inserted in the gedcom output. * * Possible future upgrades: * * A. When multiple records, such as BIRT are found, output the later * ones as NOTEs. * B. Contify. * C. Convert date formats to legal ones, including bumping non-date * information, such as "See Notes" into NOTEs. * D. Output submitter information that is stored in the database. * * This capability is easy to use inside any other program that * generates a restricted set of families/individuals. Simply include * the pafX functions given below main and use pafindi/paffam instead * of the standard outindi/outfam given in simpleged. * * From: simpleged ttw@beltway.att.com * pafcompat eggertj@ll.mit.edu * * 12 NOV 1994 (2.3.6) baud@research.att.com */ /* main function */ proc main () { "0 HEAD \n" "1 SOUR LIFELINES\n" "2 VER 2.3.6\n" "2 NAME PAF-EXPORT REPORT\n" "1 DEST PAF\n" "2 VER 2.2\n" "1 DATE " date (gettoday ()) "\n" getstrmsg (submitterFile, "What is the name of the submitter information file (null okay)?") if (strcmp ("", submitterFile)) { "1 COPR Copyright " date (gettoday ()) ". Permission is granted to repro" "duce any subset\n2 CONT of the data contained herein under the condit" "ion that this copyright\n2 CONT notice is preserved, that the origina" "l source citations referenced\n2 CONT in the subset are included, and" " that the submitter of this file is\n2 CONT credited with original au" "thorship as appropriate.\n" copyfile (submitterFile) } "1 CHAR ASCII\n" print ("Processing nodes (x10) ...\n") forindi (indi, num) { if (eq (mod (num, 10), 0)) { print ("i") } call pafindi (indi) } forfam (fam, num) { if (eq (mod (num, 10), 0)) { print ("f") } call paffam (fam) } "0 TRLR \n" } /* pafX functions */ global (paftitl) proc pafindi (indi) { set (root, inode (indi)) set (noname, 1) set (notitl, 1) set (nosex, 1) set (nobirt, 1) set (nobapt, 1) set (nodeat, 1) set (noburi, 1) if (eq (nfamilies (indi), 1)) { set (fams_counter, 0) } else { set (fams_counter, 1) } "0 " xref (root) " " tag (root) "\n" fornodes (root, node) { if (and (noname, not (strcmp ("NAME", tag (node))))) { "1 NAME" call pafname (value (node)) "\n" if (and (notitl, strlen (paftitl))) { "1 TITL" paftitl "\n" set (notitl, 0) } set (noname, 0) } elsif (and (notitl, not (strcmp ("TITL", tag (node))))) { "1 TITL " value (node) "\n" set (notitl, 0) } elsif (and (nosex, not (strcmp ("SEX", tag (node))))) { "1 SEX " call pafsex (value (node)) "\n" set (nosex, 0) } elsif (and (nobirt, not (strcmp ("BIRT", tag (node))))) { call pafevent (node, 1, 1, 0, 0) set (nobirt, 0) } elsif (and (nobapt, not (strcmp ("CHR", tag (node))))) { call pafevent (node, 1, 1, 0, 0) set (nobapt, 0) } elsif (and (nodeat, not (strcmp ("DEAT", tag (node))))) { call pafevent (node, 1, 1, 0, 0) set (nodeat, 0) } elsif (and (noburi, not (strcmp ("BURI", tag (node))))) { call pafevent (node, 1, 1, 0, 0) set (noburi, 0) } elsif (not (strcmp ("BAPL", tag (node)))) { "1 BAPL" call pafevent (node, 1, 1, 0, 0)"\n" } elsif (not (strcmp ("ENDL", tag (node)))) { "1 ENDL" call pafevent (node, 1, 1, 0, 0)"\n" } elsif (not (strcmp ("TEMP", tag (node)))) { "1 TEMP" call pafevent (node, 1, 1, 0, 0)"\n" } elsif (not (strcmp ("SLGC", tag (node)))) { "1 SLGC" call pafevent (node, 1, 1, 0, 0)"\n" } elsif (not (strcmp ("SLGS", tag (node)))) { "1 SLGS" call pafevent (node, 1, 1, 0, 0)"\n" } elsif (not (strcmp ("FAMC", tag (node)))) { "1 FAMC " value (node) "\n" } elsif (not (strcmp ("FAMS", tag (node)))) { "1 FAMS " value (node) "\n" set (f, fam (value (node))) if (or (not (husband (f)), eq (husband (f), indi))) { call pafevent (marriage (f), 0, 1, 0, fams_counter) fornodes (fnode (f), subnode) { if (or (or (not (strcmp ("DIV", tag (subnode))), not (strcmp ("DIVF", tag (subnode)))), not (strcmp ("ANUL", tag (subnode))))) { call pafevent (subnode, 0, 1, 1, fams_counter) } } } incr (fams_counter) } elsif (not (strcmp ("OCCU", tag (node)))) { "1 NOTE OCCUPATION: " call values (node) "\n" } elsif (not (strcmp ("NOTE", tag (node)))) { "1 NOTE " call values (node) "\n" } elsif (not (strcmp ("AFN", tag (node)))) { "1 AFN" value (node) "\n" } elsif (not (strcmp ("REFN", tag (node)))) { "1 REFN" value (node) "\n" } } } proc paffam (fam) { set (root, fnode (fam)) "0 " xref (root) " " tag (root) "\n" fornodes (root, node) { if (not (strcmp ("HUSB", tag (node)))) { "1 HUSB " value (node) "\n" } elsif (not (strcmp ("WIFE", tag (node)))) { "1 WIFE " value (node) "\n" } elsif (not (strcmp ("CHIL", tag (node)))) { "1 CHIL " value (node) "\n" } elsif (not (strcmp ("MARR", tag (node)))) { call pafevent (node, 1, 0, 0, 0) } elsif (not (strcmp ("DIV", tag (node)))) { "1 DIV Y\n" } elsif (not (strcmp ("DIVF", tag (node)))) { "1 DIV Y\n" } elsif (not (strcmp ("ANUL", tag (node)))) { "1 DIV Y\n" } } } proc pafevent (event, eventflag, sourceflag, noteflag, count) { table (tagnotes) insert (tagnotes,"BIRT","BIRTH") insert (tagnotes,"CHR", "CHRISTENING") insert (tagnotes,"DEAT","DEATH") insert (tagnotes,"BURI","BURIAL") insert (tagnotes,"MARR","MARRIAGE") insert (tagnotes,"DIV", "DIVORCE") insert (tagnotes,"DIVF", "DIVORCEFINAL") insert (tagnotes,"ANUL", "ANNULMENT") if (event) { set (tagname, lookup (tagnotes, tag (event))) if (not (strcmp ("", tagname))) { set (tagname, tag (event)) } if (eventflag) { "1 " tag (event) "\n" set (datecount, 1) set (placecount, 1) fornodes (event, evt) { if (not (strcmp ("DATE", tag (evt)))) { if (eq (datecount, 1)) { "2 DATE " call pafdate (value (evt)) "\n" } incr (datecount) } elsif (not (strcmp ("PLAC", tag (evt)))) { if (eq (placecount, 1)) { "2 PLAC " call pafplac (value (evt)) "\n" } incr (placecount) } } } if (noteflag) { set (countlimit, 0) } else { set (countlimit, 1) } if (sourceflag) { set (datecount, 1) set (placecount, 1) fornodes (event, evt) { if (not (strcmp ("DATE", tag (evt)))) { if (gt (datecount, countlimit)) { "1 NOTE " tagname "DATE" if (count) { "(" d (count) ")" } ": " call pafdate (value (evt)) "\n" } incr (datecount) } elsif (not (strcmp ("PLAC", tag (evt)))) { if (gt (placecount, countlimit)) { "1 NOTE " tagname "PLACE" if (count) { "(" d (count) ")" } ": " call pafplac (value (evt)) "\n" } if (or (not (strcmp ("SITE", tag (child (evt)))), not (strcmp ("CEME", tag (child (evt)))))) { "1 NOTE " if (not (strcmp (tagname, "BURIAL"))) { "CEMETERY" } else { tagname "SITE" } if (count) { "(" d (count) ")" } ": " call values (child (evt)) "\n" } incr (placecount) } elsif (not (strcmp ("CAUS", tag (evt)))) { "1 NOTE " tagname "CAUSE: " call values (evt) "\n" } elsif (not (strcmp ("AGE", tag (evt)))) { "1 NOTE " tagname "AGE: " call values (evt) "\n" } elsif (not (strcmp ("SOUR", tag (evt)))) { "1 NOTE !" tagname if (count) { "(" d (count) ")" } ": " call pafsour (evt) "\n" } elsif (not (strcmp ("NOTE", tag (evt)))) { "1 NOTE " tagname if (count) { "(" d (count) ")" } "NOTE:\n2 CONT " call values (evt) "\n" } } } } } proc pafname (name) { set (c, 1) set (i, 1) set (k1, index (name,"/", 1)) set (k2, index (name,"/", 2)) set (n, 16) set (m, 0) while (lt (i, k1)) { set (j, index (name," ", c)) if (or (eq (j, 0), gt (j, k1))) { set (j, k1) } if (lt (c, 4)) { " " } else { "_" set (n, sub (sub (n, m), 1)) if (lt (n, 0)) { set (n, 0) } } trim (substring (name, i, sub (j, 1)), n) set (m, sub (j, i)) set (i, add (j, 1)) set (c, add (c, 1)) } " " substring (name, k1, k2) set (paftitl, substring (name, add (k2, 1), strlen (name))) } proc pafsex (name) { if (or (not (strcmp ("M", name)), not (strcmp ("F", name)))) { name } else { " " } } proc pafdate (name) { trim (name, 23) } proc pafplac (name) { set (c, 1) set (i, 1) set (I, add (strlen (name), 1)) set (plac,"") while (and (lt (i,I), lt (c, 5))) { set (j, index (name,",", c)) if (eq (j, 0)) { set (j,I) } set (plac, concat (plac, trim (substring (name, i, sub (j, 1)), 16))) set (plac, concat (plac,",")) set (i, add (j, 1)) set (c, add (c, 1)) } while (lt (c, 5)) { set (plac, concat (",", plac)) set (c, add (c, 1)) } substring (plac, 1, sub (strlen (plac), 1)) } proc pafsour (root) { fornodes (root, n) { if (not (strcmp ("NAME", tag (n)))) { set (auth, n) } elsif (not (strcmp ("AUTH", tag (n)))) { set (auth, n) } elsif (not (strcmp ("TITL", tag (n)))) { set (titl, n) } elsif (not (strcmp ("PUBL", tag (n)))) { set (publ, n) } elsif (not (strcmp ("PERI", tag (n)))) { set (peri, n) } elsif (not (strcmp ("PUBR", tag (n)))) { set (pubr, n) } elsif (not (strcmp ("ADDR", tag (n)))) { set (addr, n) } elsif (not (strcmp ("PHON", tag (n)))) { set (phon, n) } elsif (not (strcmp ("DATE", tag (n)))) { set (date, n) } elsif (not (strcmp ("VOLU", tag (n)))) { set (vol, n) } elsif (not (strcmp ("VOL", tag (n)))) { set (vol, n) } elsif (not (strcmp ("NUM", tag (n)))) { set (num, n) } elsif (not (strcmp ("PAGE", tag (n)))) { set (page, n) } elsif (not (strcmp ("REPO", tag (n)))) { set (repo, n) } elsif (not (strcmp ("SOUR", tag (n)))) { set (sour, n) } elsif (not (strcmp ("FILM", tag (n)))) { set (film, n) } elsif (not (strcmp ("NOTE", tag (n)))) { set (note, n) } } set (any, or (auth, or (titl, or (publ, or (peri, or (pubr, or (addr, or (phon, or (date, or (vol, or (num, or (page, or (repo, note))))))))))))) if (any) { if (auth) { call values (auth) } if (publ) { if (auth) { "," } if (titl) { "\n2 CONT \"" call values (titl) ",\"" } "\n2 CONT " call values (publ) } elsif (titl) { if (auth) { "," } "\n2 CONT " call values (titl) } ";" if (peri) { "\n2 CONT " call values (peri) } ";" if (pubr) { "\n2 CONT " call values (pubr) } if (addr) { if (pubr) { "," } "\n2 CONT " call values (addr) } if (phon) { if (or (pubr, addr)) { "," } "\n2 CONT " call values (phon) } if (date) { if (or (pubr, or (addr, phon))) { "," } "\n2 CONT " call values (date) } ";" if (film) { "\n2 CONT " "Film Number " call values (film) } if (vol) { "\n2 CONT " "Volume " call values (vol) } if (num) { "\n2 CONT " "Number " call values (num) } if (page) { "\n2 CONT " "Page(s) " call values (page) } ";" if (repo) { "\n2 CONT " call values (repo) } if (and (film, not (repo))) { "\n2 CONT Church of Jesus Christ of Latter Day Saints, " "Salt Lake City, UT" } ";" if (note) { "\n2 CONT " call values (note) } } if (v, value (root)) { if (and (eq (index (v, "@", 1), 1), eq (index (v, "@", 2), strlen (v)))) { if (not (any)) { "See " substring (v, 2, sub (strlen (v), 1)) "." } } else { "\n2 CONT " call values (root) } } if (sour) { "\n2 CONT " call pafsour (sour) } } proc values (node) { value (node) fornodes (node, n) { if (not (strcmp ("CONT", tag (n)))) { "\n2 CONT " value (n) } } } lifelines-3.0.61/reports/paf-import.ll0000700002540200244210000003412610076661057020064 0ustar prappDomain Users/* * @progname paf-import.ll * @version 1994-11-12 * @author Kurt Baudendistel (baud@research.att.com) * @category * @output GEDCOM * @description * * Convert paf gedcom to lifelines-standard gedcom, * transforming name formats and notes. * * First, some silly formating: * * 1. _'s in NAMEs are converted to spaces. * 2. Leading commas are stripped from PLACes * 3. Recognizable posttitles are moved from TITL entries to NAME * entries. * * Then, the meat of the problem * * 4. Bang-tagged NOTEs of the form * * 1 NOTE !BIRTH-CHRISTENING: ... * 2 CONT ... * * are converted to SOURs in the appropriate event, and the * original NOTE is deleted. The following NOTEs are recognized and * translated into the corresponding event (an event is created * if it does not exist): * * NAME -> NAME * BIRTH -> BIRT * PARENTS -> BIRT * FATHER -> BIRT * MOTHER -> BIRT * ADOPTION -> ADOP * CHRISTENING -> CHR * DEATH -> DEAT * BURIAL -> BURI * MARRIAGE -> MARR (in first associated family) * MARRIAGE(N) -> MARR (in numbered associated family) * MARRIAGES -> MARR (in all associated families) * DIVORCE -> DIV (in first associated family) * DIVORCE(N) -> DIV (in numbered associated family) * DIVORCES -> DIV (in all associated families) * DIVORCEFINAL -> DIVF (in first associated family) * DIVORCEFINAL(N) -> DIVF (in numbered associated family) * DIVORCEFINALS -> DIVF (in all associated families) * ANNULMENT -> ANUL (in first associated family) * ANNULMENT(N) -> ANUL (in numbered associated family) * ANNULMENTS -> ANUL (in all associated families) * * The NOTE is not deleted if any of the components are not * recognized. Plain bang-tagged NOTEs are converted to TEXT. * * Multiple NOTEs produce multiple SOURs, just as you would expect. * * 5. Non-bang-tagged NOTEs of the form * * 1 NOTE BIRTH: ... * 2 CONT ... * * are converted to NOTEs in the appropriate event for those * events listed above, and the original NOTE is deleted. Note * multiple NOTE targets (as in BIRTH-CHRISTENING) are not allowed * for non-bang-tagged NOTEs, and that containing nodes (like * PLAC) are not created if they do not exist -- the NOTE is simply * lost. * * For the following NOTEs, a record is created of the * indicated type (death here can be replaced by any event): * * DEATHSITE -> DEAT - PLAC - SITE * DEATHAGE -> DEAT - AGE * DEATHCAUSE -> DEAT - CAUS * CEMETERY -> (same as BURIALSITE) * EDITOR -> SOUR (at level 1) * RESEARCHER -> SOUR (at level 1) * OCCUPATION -> OCCU * * Of course, the original note is deleted. * * From: paf baud@research.att.com * * 12 NOV 1994 (2.3.6) baud@research.att.com */ global (tTagTranslation) global (tTitleTransformation) global (sourceListTable) global (siteListTable) global (ageListTable) global (causeListTable) global (noteListTable) global (tIndiEvents) global (tFamEvents) global (tNotesToDelete) proc main () { "0 HEAD \n" "1 SOUR LIFELINES\n" "2 VER 2.3.6\n" "2 NAME PAF-IMPORT REPORT\n" "1 DEST LIFELINES\n" "1 DATE " date (gettoday ()) "\n" "1 CHAR ASCII\n" table (tTagTranslation) insert (tTagTranslation, "NAME", "NAME") insert (tTagTranslation, "BIRTH", "BIRT") insert (tTagTranslation, "PARENTS", "BIRT") insert (tTagTranslation, "FATHER", "BIRT") insert (tTagTranslation, "MOTHER", "BIRT") insert (tTagTranslation, "ADOPTION", "ADOP") insert (tTagTranslation, "CHRISTENING", "CHR") insert (tTagTranslation, "DEATH", "DEAT") insert (tTagTranslation, "BURIAL", "BURI") insert (tTagTranslation, "MARRIAGE", "MARR") insert (tTagTranslation, "DIVORCE", "DIV") insert (tTagTranslation, "DIVORCEFINAL", "DIVF") insert (tTagTranslation, "ANNULMENT", "ANUL") insert (tTagTranslation, "EDITOR", "SOUR") insert (tTagTranslation, "RESEARCHER", "SOUR") insert (tTagTranslation, "OCCUPATION", "OCCU") table (tTitleTransformation) insert (tTitleTransformation, "Jr", "") insert (tTitleTransformation, "Sr", "") insert (tTitleTransformation, "I", "") insert (tTitleTransformation, "II", "") insert (tTitleTransformation, "III", "") insert (tTitleTransformation, "IV", "") insert (tTitleTransformation, "V", "") insert (tTitleTransformation, "MD", "Dr") insert (tTitleTransformation, "DDS", "Dr") insert (tTitleTransformation, "PhD", "Dr") insert (tTitleTransformation, "SJ", "Father") insert (tTitleTransformation, "SM", "Brother") table (sourceListTable) table (siteListTable) table (ageListTable) table (causeListTable) table (noteListTable) table (tIndiEvents) insert (tIndiEvents, "NAME", 1) insert (tIndiEvents, "BIRT", 1) insert (tIndiEvents, "ADOP", 1) insert (tIndiEvents, "CHR", 1) insert (tIndiEvents, "DEAT", 1) insert (tIndiEvents, "BURI", 1) insert (tIndiEvents, "SOUR", 1) insert (tIndiEvents, "OCCU", 1) table (tFamEvents) insert (tFamEvents, "MARR", 1) insert (tFamEvents, "DIV", 1) insert (tFamEvents, "DIVF", 1) insert (tFamEvents, "ANUL", 1) table (tNotesToDelete) print ("Scanning for sources and event notes (x10) ...\n") forindi (indi, num) { if (eq (mod(num,10),0)) { print ("i") } call unpafSources (indi) call unpafOthers (indi, "SITE", siteListTable) call unpafOthers (indi, "AGE", ageListTable) call unpafOthers (indi, "CAUSE", causeListTable) call unpafOthers (indi, "", noteListTable) } print ("\n\nProcessing nodes (x10) ...\n") forindi (indi, num) { if (eq (mod(num,10),0)) { print ("i") } call unpafNode (key (indi), inode (indi)) } forfam (fam, num) { if (eq (mod(num,10),0)) { print ("f") } call unpafNode (key (fam), fnode (fam)) } "0 TRLR \n" } proc unpafSources (indi) { fornodes (inode (indi), node) { if (not (strcmp (tag (node), "NOTE"))) { set (note, value (node)) if (eq (index (note, "!", 1), 1)) { if (colon, index (note, ":", 1)) { set (nTag, save (concat (substring (note, 2, sub (colon, 1)), "-"))) set (deleteFlag, 1) while (strcmp (nTag, "")) { set (mark, index (nTag, "-", 1)) set (bTag, save (substring (nTag, 1, sub (mark, 1)))) set (nTag, save (substring (nTag, add (mark, 1), strlen (nTag)))) set (openLoc, add (index (bTag, "("/*)*/, 1), 1)) set (closLoc, sub (index (bTag, /*(*/")", 1), 1)) if (le (openLoc, closLoc)) { if (bNum, atoi (substring (bTag, openLoc, closLoc))) { set (bTag, save (trim (bTag, sub (openLoc, 2)))) } else { set (bNum, 1) } } else { set (bNum, 1) } if (evt, lookup (tTagTranslation, bTag)) { set (sourceKey, "") if (lookup (tIndiEvents, evt)) { if (eq (bNum, 1)) { set (sourceKey, save (concat (key (indi), evt))) } } elsif (lookup (tFamEvents, evt)) { set (foundFlag, 0) families (indi, fvar, svar, num) { if (eq (bNum, num)) { set (sourceKey, save (concat (key (fvar), evt))) set (foundFlag, 1) } } if (not (foundFlag)) { set (deleteFlag, 0) } } if (strcmp (sourceKey, "")) { call insertListTable (sourceListTable, sourceKey, node) } } else { set (deleteFlag, 0) } } if (deleteFlag) { insert (tNotesToDelete, save (value (node)), 1) } } } } } } proc unpafOthers (indi, kind, otherListTable) { set (tail, save (concat (kind, ":"))) fornodes (inode (indi), node) { if (not (strcmp (tag (node), "NOTE"))) { set (note, value (node)) if (eq (index (note, "CEMETERY:", 1), 1)) { set (note, save (concat ("BURIALSITE", substring (note, 9, strlen (note))))) } set (tailIndex, index (note, tail, 1)) set (spaceIndex, index (note, " ", 1)) if (or (lt (tailIndex, spaceIndex), and (eq (spaceIndex, 0), gt (tailIndex, 0)))) { set (bEnd, sub (tailIndex, 1)) set (bTag, save (trim (note, bEnd))) set (bNum, atoi (substring (bTag, bEnd, bEnd))) if (ne (bNum, 0)) { decr (bEnd) set (bTag, save (trim (bTag, bEnd))) } incr (bNum) if (evt, lookup (tTagTranslation, bTag)) { set (otherKey, "") if (lookup (tIndiEvents, evt)) { if (eq (bNum, 1)) { set (otherKey, save (concat (key (indi), evt))) } } elsif (lookup (tFamEvents, evt)) { families (indi, fvar, svar, num) { if (eq (bNum, num)) { set (otherKey, save (concat (key (fvar), evt))) } } } if (strcmp (otherKey, "")) { call insertListTable (otherListTable, otherKey, node) insert (tNotesToDelete, save (value (node)), 1) } } } } } } proc insertListTable (listTable, tableKey, node) { list (evtList) set (note, value (node)) set (first, save (substring (note, add (index (note, ":", 1), 1), strlen (note)))) if (not (strcmp (trim (first, 1), " "))) { set (first, save (substring (first, 2, strlen (first)))) } if (strlen (first)) { enqueue (evtList, first) } fornodes (node, n) { if (not (strcmp ("CONT", tag (n)))) { enqueue (evtList, save (value (n))) } } set (entryList, lookup (listTable, tableKey)) if (not (entryList)) { list (entryList) } enqueue (entryList, evtList) insert (listTable, tableKey, entryList) } proc unpafNode (rootKey, root) { set (sourceList, 0) set (noteList, 0) set (sawBIRT, 0) traverse (root, node, level) { set (sawBIRT, or (sawBIRT, not (strcmp (tag (node), "BIRT")))) if (eq (level, 0)) { set (deletingFlag, 0) set (listTableKey, save (concat (rootKey, tag (node)))) set (sourceList, lookup (sourceListTable, listTableKey)) if (unbangedSourceList, lookup (noteListTable, listTableKey)) { while (evt, dequeue (unbangedSourceList)) { enqueue (sourceList, evt) } } } elsif (eq (level, 1)) { if (sourceList) { while (evt, dequeue (sourceList)) { call reTagNote (add (level, 1), "SOUR", evt) } set (sourceList, 0) } if (noteList) { while (evt, dequeue (noteList)) { call reTagNote (add (level, 1), "TEXT", evt) } set (noteList, 0) } set (listTableKey, save (concat (rootKey, tag (node)))) set (sourceList, lookup (sourceListTable, listTableKey)) set (noteList, lookup (noteListTable, listTableKey)) set (deletingFlag, and (not (strcmp (tag (node), "NOTE")), lookup (tNotesToDelete, value (node)))) } if (not (deletingFlag)) { d (level) " " if (xref (node)) { xref (node) " " } set (text, value (node)) if (not (strcmp (tag (node), "NAME"))) { while (ind, index (text, "_", 1)) { set (text, save (concat (concat (substring (text, 1, sub (ind,1)), " "), substring (text, add (ind, 1), strlen (text))))) } "NAME " text "\n" } elsif (not (strcmp (tag (node), "TITL"))) { if (titl, lookup (tTitleTransformation, text)) { "NAME // " text "\n" if (strlen (titl)) { d (level) " TITL " titl "\n" } } else { "TITL " text "\n" } } elsif (not (strcmp (tag (node), "PLAC"))) { while (not (strcmp (trim (text, 1), ","))) { set (text, save (substring (text, 2, strlen (text)))) } "PLAC " text "\n" if (siteList, lookup (siteListTable, listTableKey)) { while (evt, dequeue (siteList)) { call reTagNote (add (level, 1), "SITE", evt) } } } elsif (not (strcmp (tag (node), "NOTE"))) { if (not (strcmp (trim (text, 1), "!"))) { "TEXT " } else { "NOTE " } text "\n" } else { tag (node) " " text "\n" if (ageList, lookup (ageListTable, listTableKey)) { while (evt, dequeue (ageList)) { call reTagNote (add (level, 1), "AGE", evt) } } if (causeList, lookup (causeListTable, listTableKey)) { while (evt, dequeue (causeList)) { call reTagNote (add (level, 1), "CAUS", evt) } } } } } set (listTableKey, save (concat (rootKey, BIRT))) set (sourceList, lookup (sourceListTable, listTableKey)) set (noteList, lookup (noteListTable, listTableKey)) if (and (or (sourceList, noteList), not (sawBIRT))) { "1 BIRT\n" if (sourceList) { while (evt, dequeue (sourceList)) { call reTagNote (2, "SOUR", evt) } } if (noteList) { while (evt, dequeue (noteList)) { call reTagNote (2, "TEXT", evt) } } } } proc reTagNote (relevel, retag, revalueList) { set (contLevel, add (relevel, 1)) forlist (revalueList, revalue, rv) { d (relevel) " " retag " " revalue "\n" set (relevel, contLevel) set (retag, "CONT") } } lifelines-3.0.61/reports/pafcompat.ll0000700002540200244210000003431610076661057017761 0ustar prappDomain Users/* * @progname pafcompat.ll * @version 2.0 * @author Eggert * @category * @output Text * @description This LifeLines report program checks a LifeLines database for compatibility with PAF. I used the Mac PAF manual for field length specification, and Mac PAF v2.11 for a little testing. pafcompat - a LifeLines PAF compatibility checker by Jim Eggert (eggertj@ll.mit.edu) Version 1, 2 January 1993 Version 2, 7 January 1993 added 80 character max for all values This program checks: 1. Number (<=3) and length (<=16) of given names. 2. Length of surname. (<=16) 3. Whether something is after the surname. 4. Length of title (<=16) and reference number (<=10). 5. Whether sex is "M" or "F" or " " or not. 6. Number (<=4) and length (<=16) of place fields. 7. Length of date. (<=23) 8. Legal tags at each level, including legal heirarchical structure. 9. No more than one of each tag at each heirarchical level. 10. Values must be less than 80 characters. Allowed tags are: NAME, TITL, SEX, BIRT, CHR, DEAT, BURI, NOTE, FAMS, FAMC, REFN, BAPL, ENDL, CONT, DATE, PLAC, TEMP, SLGC, HUSB, WIFE, CHIL, MARR, DIV, SLGS This version doesn't parse dates per se, it only checks the length of the date string. Thus it doesn't know what PAF can understand in a date string. It also doesn't check for valid content of any of the LDS entries. */ global(n_place_tokens) global(longest_token_length) global(n_givens) global(post_surname_token) proc parse_place(eplace) { set(n_place_tokens,0) set(longest_token_length,0) set(len,1) set(last_len,0) while (lt(len,strlen(eplace))) { set(head,save(trim(eplace,len))) set(len,add(len,1)) if (not(strcmp(concat(head,","),trim(eplace,len)))) { set(n_place_tokens,add(n_place_tokens,1)) set(this_token_length,sub(len,add(last_len,1))) set(last_len,len) if (gt(this_token_length,longest_token_length)) { set(longest_token_length,this_token_length) } } } } proc parse_names(pname) { set(longest_token_length,0) set(post_surname_token,0) set(n_givens,0) set(len,1) set(last_len,1) set(sep_level,0) set(last_name,0) set(gsep," ") set(lsep,"/") while (lt(len,strlen(pname))) { set(head,save(trim(pname,len))) set(len,add(len,1)) if (not(strcmp(concat(head,gsep),trim(pname,len)))) { if (eq(last_name,0)) { set(this_token_length,sub(len,add(last_len,1))) set(last_len,len) if (gt(this_token_length,longest_token_length)) { set(longest_token_length,this_token_length) } if (or(gt(this_token_length,0),lt(n_givens,3))) { set(n_givens,add(n_givens,1)) } } } elsif (ge(last_name,2)) { set(post_surname_token,1) } elsif (not(strcmp(concat(head,lsep),trim(pname,len)))) { set(this_token_length,sub(len,add(last_len,1))) set(last_len,len) if (gt(this_token_length,longest_token_length)) { set(longest_token_length,this_token_length) } if (and(eq(last_name,0),gt(this_token_length,0))) { set(n_givens,add(n_givens,1)) } set(last_name,add(last_name,1)) } } } proc report_indi(person) { " " key(person) " " name(person) "\n" } proc report_fam(family) { t " family " key(husband(family)) " " name(husband(family)) " & " key(wife(family)) " " name(wife(family)) "\n" } proc main() { list(indi_tags) list(indi_tag_counts) list(indi_tag_value) list(indi_tag_subtags) list(fam_tags) list(fam_tag_counts) list(fam_tag_value) list(fam_tag_subtags) list(event_subtags) list(note_subtags) list(lds_subtags) list(slgc_subtag) list(empty) list(subtags) list(subtag_counts) /* as long as the longest subtag list */ list(subsubtag_counts) /* only for SLGC under family */ enqueue(note_subtags,"CONT") enqueue(event_subtags,"DATE") enqueue(event_subtags,"PLAC") enqueue(lds_subtags,"DATE") enqueue(lds_subtags,"TEMP") enqueue(slgc_subtag,"SLGC") /* this one has no value! */ enqueue(subtag_counts,0) enqueue(subtag_counts,0) enqueue(subsubtag_counts,0) enqueue(subsubtag_counts,0) enqueue(indi_tags,"NAME") /* 1 */ enqueue(indi_tag_subtags,empty) enqueue(indi_tag_counts,0) enqueue(indi_tag_value,neg(2)) enqueue(indi_tags,"TITL") /* 2 */ enqueue(indi_tag_subtags,empty) enqueue(indi_tag_counts,0) enqueue(indi_tag_value,16) enqueue(indi_tags,"SEX") /* 3 */ enqueue(indi_tag_subtags,empty) enqueue(indi_tag_counts,0) enqueue(indi_tag_value,1) enqueue(indi_tags,"BIRT") /* 4 */ enqueue(indi_tag_subtags,event_subtags) enqueue(indi_tag_counts,0) enqueue(indi_tag_value,0) enqueue(indi_tags,"CHR") /* 5 */ enqueue(indi_tag_subtags,event_subtags) enqueue(indi_tag_counts,0) enqueue(indi_tag_value,0) enqueue(indi_tags,"DEAT") /* 6 */ enqueue(indi_tag_subtags,event_subtags) enqueue(indi_tag_counts,0) enqueue(indi_tag_value,0) enqueue(indi_tags,"BURI") /* 7 */ enqueue(indi_tag_subtags,event_subtags) enqueue(indi_tag_counts,0) enqueue(indi_tag_value,0) enqueue(indi_tags,"NOTE") /* 8 */ enqueue(indi_tag_subtags,note_subtags) enqueue(indi_tag_counts,0) enqueue(indi_tag_value,neg(1)) enqueue(indi_tags,"FAMC") /* 9 */ enqueue(indi_tag_subtags,empty) enqueue(indi_tag_counts,0) enqueue(indi_tag_value,neg(2)) enqueue(indi_tags,"FAMS") /* 10 */ enqueue(indi_tag_subtags,empty) enqueue(indi_tag_counts,0) enqueue(indi_tag_value,neg(2)) enqueue(indi_tags,"REFN") /* 11 */ enqueue(indi_tag_subtags,empty) enqueue(indi_tag_counts,0) enqueue(indi_tag_value,10) enqueue(indi_tags,"BAPL") /* 12 */ enqueue(indi_tag_subtags,lds_subtags) enqueue(indi_tag_counts,0) enqueue(indi_tag_value,0) enqueue(indi_tags,"ENDL") /* 13 */ enqueue(indi_tag_subtags,lds_subtags) enqueue(indi_tag_counts,0) enqueue(indi_tag_value,0) enqueue(indi_tags,"SLGC") /* 14 */ enqueue(indi_tag_subtags,lds_subtags) enqueue(indi_tag_counts,0) enqueue(indi_tag_value,0) enqueue(fam_tags,"HUSB") /* 1 */ enqueue(fam_tag_subtags,empty) enqueue(fam_tag_counts,0) enqueue(fam_tag_value,neg(2)) enqueue(fam_tags,"WIFE") /* 2 */ enqueue(fam_tag_subtags,empty) enqueue(fam_tag_counts,0) enqueue(fam_tag_value,neg(2)) enqueue(fam_tags,"CHIL") /* 3 */ enqueue(fam_tag_subtags,slgc_subtag) enqueue(fam_tag_counts,0) enqueue(fam_tag_value,neg(2)) enqueue(fam_tags,"MARR") /* 4 */ enqueue(fam_tag_subtags,event_subtags) enqueue(fam_tag_counts,0) enqueue(fam_tag_value,0) enqueue(fam_tags,"DIV") /* 5 */ enqueue(fam_tag_subtags,empty) enqueue(fam_tag_counts,0) enqueue(fam_tag_value,1) enqueue(fam_tags,"SLGS") /* 6 */ enqueue(fam_tag_subtags,lds_subtags) enqueue(fam_tag_counts,0) enqueue(fam_tag_value,0) print("Checking individuals ") set(next_print,0) forindi(person,pnum) { if (ge(pnum,next_print)) { print(d(pnum)) print(" ") set(next_print,add(next_print,100)) } forlist(indi_tag_counts,count,cnum) { setel(indi_tag_counts,cnum,0) } fornodes(inode(person),node) { set(tag_ok,0) set(node_tag,save(tag(node))) forlist(indi_tags,vtag,vnum) { if (not(strcmp(node_tag,vtag))) { set(tag_ok,vnum) set(subtags,getel(indi_tag_subtags,vnum)) set(tag_count,add(getel(indi_tag_counts,vnum),1)) setel(indi_tag_counts,vnum,tag_count) set(tag_value,getel(indi_tag_value,vnum)) } } if (not(tag_ok)) { "Illegal tag " node_tag call report_indi(person) } else { if (and(gt(tag_count,1), and(strcmp(node_tag,"NOTE"), strcmp(node_tag,"FAMS")))) { "Duplicate " node_tag call report_indi(person) } if (not(tag_value)) { if (strcmp(value(node),"")) { "Illegal " node_tag " value " value(node) call report_indi(person) } } elsif (gt(tag_value,0)) { if (gt(strlen(value(node)),tag_value)) { node_tag " too long " value(node) call report_indi(person) } } elsif (eq(tag_value,neg(2))) { if (not(strcmp(value(node),""))) { "Empty " node_tag call report_indi(person) } } if (lt(tag_value,0)) { if (gt(strlen(value(node)),80)) { node_tag " >80 characters " value(node) call report_indi(person) } } if (eq(tag_ok,3)) { /* "SEX" */ if (and(and(strcmp(value(node),"M"), strcmp(value(node),"F")), strcmp(value(node)," "))) { "Illegal sex " value(node) call report_indi(person) } } elsif (eq(tag_ok,1)) { /* "NAME" */ call parse_names(value(node)) if (gt(n_givens,3)) { "Too many given names" call report_indi(person) } if (gt(longest_token_length,16)) { "Name too long" call report_indi(person) } elsif (eq(longest_token_length,0)) { "No name" call report_indi(person) } if (post_surname_token) { "Stuff after surname" call report_indi(person) } } forlist(subtags,vstag,vsnum) { setel(subtag_counts,vsnum,0) } fornodes(node,subnode) { set(subnode_tag,save(tag(subnode))) set(subtag_count,0) forlist(subtags,vstag,vsnum) { if (not(strcmp(subnode_tag,vstag))) { set(subtag_count,add(getel(subtag_counts,vsnum),1)) setel(subtag_counts,vsnum,subtag_count) } } if (not(subtag_count)) { "Illegal subtag " node_tag " " subnode_tag call report_indi(person) } else { if (and(gt(subtag_count,1), strcmp(subnode_tag,"CONT"))) { "Duplicate subtag " subnode_tag " " node_tag call report_indi(person) } if (not(strcmp(subnode_tag,"DATE"))) { if (gt(strlen(value(subnode)),40)) { "Date too long " node_tag " " value(subnode) call report_indi(person) } } elsif (not(strcmp(subnode_tag,"PLAC"))) { call parse_place(value(subnode)) if (gt(n_place_tokens,4)) { "Too many place levels " node_tag " " value(subnode) call report_indi(person) } if (gt(longest_token_length,16)) { "Place too long " node_tag " " value(subnode) call report_indi(person) } } elsif (gt(strlen(value(subnode)),80)) { subnode_tag " >80 characters " value(subnode) call report_indi(person) } } fornodes(subnode,subsubnode) { "Illegal node depth " node_tag " " subnode_tag " " tag(subsubnode) call report_indi(person) } } } } if (not(getel(indi_tag_counts,1))) { "No name" call report_indi(person) } } print("\nChecking families ") set(next_print,0) forfam(family,fnum) { if (ge(fnum,next_print)) { print(d(fnum)) print(" ") set(next_print,add(next_print,100)) } forlist(fam_tag_counts,count,cnum) { setel(fam_tag_counts,cnum,0) } fornodes(fnode(family),node) { set(tag_ok,0) set(node_tag,save(tag(node))) forlist(fam_tags,vtag,vnum) { if (not(strcmp(node_tag,vtag))) { set(tag_ok,vnum) set(subtags,getel(fam_tag_subtags,vnum)) set(tag_count,add(getel(fam_tag_counts,vnum),1)) setel(fam_tag_counts,vnum,tag_count) set(tag_value,getel(fam_tag_value,vnum)) } } if (not(tag_ok)) { "Illegal tag " node_tag call report_fam(family) } else { if (and(gt(tag_count,1), strcmp(node_tag,"CHIL"))) { "Duplicate " node_tag call report_fam(family) } if (not(tag_value)) { if (strcmp(value(node),"")) { "Illegal " node_tag " value " value(node) call report_fam(family) } } elsif (gt(tag_value,0)) { if (gt(strlen(value(node)),tag_value)) { node_tag " too long " value(node) call report_fam(family) } } elsif (eq(tag_value,neg(2))) { if (not(strcmp(value(node),""))) { "Empty " node_tag call report_fam(family) } } if (lt(tag_value,0)) { if (gt(strlen(value(node)),80)) { node_tag " >80 characters " value(node) call report_fam(family) } } if (eq(tag_ok,5)) { /* "DIV" */ if (strcmp(value(node),"Y")) { "Illegal divorce value " value(node) call report_fam(family) } } forlist(subtags,vstag,vsnum) { setel(subtag_counts,vsnum,0) } fornodes(node,subnode) { set(subnode_tag,save(tag(subnode))) set(subtag_count,0) forlist(subtags,vstag,vsnum) { if (not(strcmp(subnode_tag,vstag))) { set(subtag_count,add(getel(subtag_counts,vsnum),1)) setel(subtag_counts,vsnum,subtag_count) } } if (not(subtag_count)) { "Illegal subtag " node_tag " " subnode_tag call report_fam(family) } else { if (gt(subtag_count,1)) { "Duplicate subtag " node_tag " " subnode_tag call report_fam(family) } if (not(strcmp(subnode_tag,"DATE"))) { if (gt(strlen(value(subnode)),40)) { "Date too long " node_tag " " value(subnode) call report_fam(family) } } elsif (not(strcmp(subnode_tag,"PLAC"))) { call parse_place(value(subnode)) if (gt(n_place_tokens,4)) { "Too many place levels " node_tag " " value(subnode) call report_fam(family) } if (gt(longest_token_length,16)) { "Place too long " node_tag " " value(subnode) call report_fam(family) } } } if (not(strcmp(subnode_tag,"SLGC"))) { forlist(subsubtag_counts,count,cnum) { setel(subsubtag_counts,cnum,0) } fornodes(subnode,subsubnode) { set(subsubtag_count,0) set(subsubnode_tag,save(tag(subsubnode))) forlist(lds_subtags,vstag,vsnum) { if (not(strcmp(subsubnode_tag,vstag))) { set(subsubtag_count, add(getel(subsubtag_counts,vsnum),1)) setel(subsubtag_counts,vsnum, subsubtag_count) } } if (not(subsubtag_count)) { "Illegal subsubtag " node_tag " " subnode_tag " " tag(subsubnode) call report_fam(family) } if (gt(subsubtag_count,1)) { "Duplicate subsubtag " node_tag " " subnode_tag " " tag(subsubnode) call report_fam(family) } } } else { fornodes(subnode,subsubnode) { "Illegal node depth " node_tag " " subnode_tag " " tag(subsubnode) call report_fam(family) } } } } } } } lifelines-3.0.61/reports/partition.ll0000700002540200244210000001625010333725750020012 0ustar prappDomain Users/* * @progname partition.ll * @version 11 * @author Eggert * @category * @output GEDCOM * @description This program partitions individuals in a database into disjoint partitions. A partition is composed of people related by one or more multiples of the following relations: parent, sibling, child, spouse. There is no known relationship between people in different partitions. partition - a LifeLines database partitioning program by Jim Eggert (eggertj@atc.ll.mit.edu) Version 1, 19 November 1992 (unreleased) Version 2, 20 November 1992 (completely revamped using queues) Version 3, 23 November 1992 (added GEDCOM TRLR line, changed to key-based queues) Version 4, 1 December 1992 (slight code updates) Version 5, 9 January 1993 (added birth and death dates to full) Version 6, 30 January 1993 (now writes multiple GEDCOM output files) This version requires LifeLines v2.3.3 or later. Version 7, 21 September1994 (can partition about selected person) Version 8, 31 March 1995 (allow non-traditional families) Version 9, 23 February 1999 (changed to depth-first algorithm) Version 10, 24 September 2001(use cumcount, not forindi loop variable) Version 11, 7 November 2005 (add header, switch to use gengedcomstrong change output gedcom files to end in .ged changes by Stephen A. Dum) This program partitions individuals in a database into disjoint partitions. A partition is composed of people related by one or more multiples of the following relations: parent, sibling, child, spouse. There is no known relationship between people in different partitions. You may select a particular person about whom to construct the largest partition, or you may do the whole database. The partitions are written to the report in overview form or full form with the partitions delimited by a ------------------------------------------------------------ long line, or in GEDCOM form to separate partition files. The overview form merely lists the number of people in each partition by the number of hops from the first person found in the partition. (They are found in order of the forindi iterator.) The full form lists each person in each partition, giving the number of hops, key, name, and birth and death dates (if known). The GEDCOM form writes the partitions in GEDCOM format. You will be prompted for a root filename for the GEDCOM files; individual GEDCOM filenames will be of the form root_filename.p, where p is the partition number. Each allowed relationship (parent, sibling, child, spouse) is called a hop, and the degree of relationship is called the hop count. While the program is processing, it displays to the screen the number of the partition it is working on followed by a colon, then the cumulative number of individuals in that partition for each hop increment. */ global(include_new) global(plist) global(hlist) global(mark) global(pset) global(pcount) global(hopcount) global(prev_hopcount) global(prev_pcount) global(setcount) global(cumcount) proc include(person,hops,setcount,report_type) { if (person) { set(pkey,key(person)) if (lookup(mark,pkey)) { set(include_new,0) } else { set(pkey2,save(pkey)) enqueue(plist,pkey2) enqueue(hlist,hops) insert(mark,pkey2,setcount) addtoset(pset,person,hops) incr(pcount) if (not(mod(pcount,100))) { print(d(pcount),"/",d(length(plist))," ") } set(include_new,1) if (eq(report_type,1)) { d(setcount) col(6) d(hops) col(11) pkey col(18) name(person) col(48) stddate(birth(person)) col(62) stddate(death(person)) "\n" } } } } proc main () { table(mark) list(plist) list(hlist) indiset(pset) dayformat(0) monthformat(4) dateformat(0) getindimsg(person_root, "Enter a person for just one partition, nothing for all partitions:") getintmsg(report_type, "Enter 0 for overview, 1 for full, 2 for GEDCOM report:") if (eq(report_type,2)) { if (person_root) { set(prompt,"Enter filename for GEDCOM partition:") } else { set(prompt,"Enter root filename for GEDCOM partitions:") } getstrmsg(gedcom_root,prompt) set(gedcom_root,save(concat(gedcom_root,"_"))) } else { set(gedcom_root,0) } set(setcount,1) set(pcount,0) set(hopcount,1) set(prev_hopcount,neg(1)) set(prev_pcount,0) set(cumcount,0) if (eq(report_type,1)) { "Ptn Hops Key Person" col(48) "Birthdate" col(62) "Deathdate\n" } if (person_root) { call do_one_partition(person_root,report_type,gedcom_root) } else { forindi(person,num) { call do_one_partition(person,report_type,gedcom_root) } if (le(report_type,1)) { "Entire database contains " d(cumcount) " individual" if (gt(cumcount,1)) { "s" } " in " d(sub(setcount,1)) " partition" if (gt(setcount,2)) { "s" } ".\n" } } } proc do_one_partition(person,report_type,gedcom_root) { list(hopcountlist) call include(person,hopcount,setcount,report_type) if (include_new) { if (eq(report_type,0)) { "Ptn Hops Individuals\n" } print("\n",d(setcount),": ") while (pkey,pop(plist)) { set(person,indi(pkey)) set(hopcount,pop(hlist)) /* print(pkey,d(hopcount)) */ setel(hopcountlist,hopcount,add(1,getel(hopcountlist,hopcount))) incr(hopcount) /* Look for family links and follow them to the families, then look for links to other individuals in those families. Nonstandard linking tags may be added here. */ fornodes(inode(person),node) { set(t,tag(node)) if (or(not(strcmp(t,"FAMS")), not(strcmp(t,"FAMC")))) { set(family,fam(value(node))) fornodes(fnode(family),node2) { set(t,tag(node2)) if (or(not(strcmp(t,"HUSB")), not(strcmp(t,"WIFE")), not(strcmp(t,"CHIL")))) { call include(indi(value(node2)), hopcount,setcount,report_type) } } } } } if (eq(report_type,0)) { forlist(hopcountlist,counter,hops) { print(d(setcount),d(counter), " ") } } if (le(report_type,1)) { "Partition " d(setcount) " contains " d(pcount) " individual" if (gt(pcount,1)) { "s" } ".\n" "------------------------------------------------------------\n" } if (eq(report_type,2)) { newfile(concat(gedcom_root,d(setcount),".ged"),0) /* output a gedcom header */ "0 HEAD\n" "1 SOUR Lifelines\n" "2 VERS " version() "\n" "1 DEST ANY\n" "1 DATE " date(gettoday()) "\n" "1 SUBM\n" "1 GEDC\n" "2 VERS 5.5\n" "2 FORM LINEAGE-LINKED\n" "1 CHAR ASCII\n" gengedcomstrong(pset) "0 TRLR\n" } set(cumcount,add(cumcount,pcount)) indiset(pset) set(pcount,0) set(hopcount,0) set(prev_hopcount,neg(1)) set(prev_pcount,pcount) incr(setcount) } } lifelines-3.0.61/reports/pdesc.ll0000700002540200244210000000746110133405374017076 0ustar prappDomain Users/* * @progname pdesc.ll * @version 4.3 * @author Wetmore, Manis, Jones, Eggert, Simms * @category * @output Text * @description * * Produces indented descendant list with line wrapping at 78 columns * (user-specifiable) while maintaining the indentation level. Enhancement * from version 2 is the addition of user-specified maximum number of * generations. Version 4 makes the page_width (not 1 less) the limit on * character a shift inplacement. Also eliminated an extra space at the * beginning of each line that was not controlled by a left_margin parameter. * * Code by Tom Wetmore, ttw@cbnewsl.att.com * With modifications by: Cliff Manis * With modifications by: James P. Jones * With modifications by: Jim Eggert (unknown spouse bugfix) * With modifications by: Robert Simms (indented line wrap) Mar '96 * (max number of generations) Jun '97 * (line wrap cleaned up) 16 Feb 2000 * With modifications by: Vincent Broman (header cleanup) 2003-02 * * This report works only with the LifeLines Genealogy program * * version one of this report was written by Tom Wetmore, in 1990. * * It will select and produce a descendant report for the person * selected. Children of each spouse are printed below that spouse. * * Descendants report format, which print the date in long format. * * Output is an ASCII file. */ global(page_size) global(tab_size) global(max_depth) global(left_margin) proc main () { set(page_size, 78) set(tab_size, 3) /* extra indentation upon line-wrap */ set(left_margin, 0) getindi(indi) getintmsg (max_depth, "Maximum number of generations") set(skip, left_margin) call pout(0, indi) "===============================================" nl() } proc pout(gen, indi) { set(skip, mul(4,gen)) col(add(skip, 1)) set(x, skip) set(s, concat(d(add(gen, 1)), "--")) s set(x, add(x, tab_size)) set(skip, x) call outp(indi, skip, x) set(next, add(1, gen)) families(indi,fam,sp,num) { set(skip, add(2,mul(4,gen))) col(add(skip, 1)) set(x, skip) "sp-" /* Don't try to show a spouse name if none known */ if (sp) { set(x, add(x, 4)) set(skip, x) call outp(sp, skip, x) } else { "Unknown" nl() } if (lt(next,max_depth)) { children(fam, child, no) { call pout(next, child) } } } } proc outp(indi, skip, x) { set(s, concat(fullname(indi, 1, 1, 40), " (", long(birth(indi)), " - ", long(death(indi)), ")")) set(x, outline(s, add(tab_size, skip), x)) "\n" } func outline(text, skip, x) { if (eq(x, 0)) { col(add(skip, 1)) set(x, skip) } set(max, sub(page_size, x)) if (gt(strlen(text), max)) { set(space, breakit(text, max)) if (eq(space, 0)) { if (eq(x, skip)) { set(text, strsave(text)) substring(text, 1, sub(max, 1)) "-" set(x, 0) set(text, substring(text, max, strlen(text))) set(x, outline(text, skip, x)) } else { set(x, 0) set(x, outline(text, skip, x)) } } else { /* space gt 0 */ set(text, strsave(text)) substring(text, 1, sub(space, 1)) set(x, 0) set(text, strsave(substring(text, add(space, 1), strlen(text)))) while(eqstr(" ", substring(text, 1, 1))) { /* strip leading spaces */ set(text, strsave(substring(text, 2, strlen(text)))) } set(x, outline(text, skip, x)) } } else { text set(x, add(x, strlen(text))) } return(x) } func breakit(text, max) { set(space, 0) set(occ, 1) set(next, index(text, " ", occ)) incr(occ) while ( and(le(next, add(max, 1)), ne (next, 0))) { set(space, next) set(next, index(text, " ", occ)) incr(occ) } return(space) } lifelines-3.0.61/reports/ped.ll0000700002540200244210000001045310076661057016553 0ustar prappDomain Users/* * @progname ped.ll * @version 1996-08-09 * @author Bill.Alford@anu.edu.au * @category * @output HTML * @description html pedigree/ancestral chart part of an individuals report. This coding can be generalised to print many generations back but for html purposes we only need go back 2 generations because the width of the page becomes far too big otherwise. In this case I've hard coded out what the generalised coding would look like. I've used ideas from the output of the gedcom2html program. Typical output from this reports looks like:
                         _William Alford___
     _William Alford____|
    |                   |_Elizabeth Shore__
    |
    |--William Alford
    |
    |                    _Robert Goldsbrough__
    |_Jane Goldsbrough__|
                        |_Hannah Browne_______
    


    Bill.Alford@anu.edu.au 9 Aug 1996 */ global(line1) /* position on line 1 */ global(line2) /* position on line 2 */ global(line3) /* position on line 3 */ global(line5) /* position on line 5 */ global(line6) /* position on line 6 */ global(line7) /* position on line 7 */ global(nstrngff) /* father's fathers name string */ global(nstrngf) /* father's name string */ global(nstrngfm) /* father's mothers name string */ global(nstrngi) /* individual's name string */ global(nstrngmf) /* mother's father name string */ global(nstrngm) /* mother's name string */ global(nstrngmm) /* mother's mother name string */ proc ped(indi, href_table) { set(nstrngff,save(name(father(father(indi)),0))) set(nstrngf,save(name(father(indi),0))) set(nstrngfm,save(name(mother(father(indi)),0))) set(nstrngi,save(name(indi,0))) set(nstrngmf,save(name(father(mother(indi)),0))) set(nstrngm,save(name(mother(indi),0))) set(nstrngmm,save(name(mother(mother(indi)),0))) set(line1,strlen(nstrngff)) set(line2,strlen(nstrngf)) set(line3,strlen(nstrngfm)) set(line5,strlen(nstrngmf)) set(line6,strlen(nstrngm)) set(line7,strlen(nstrngmm)) set(dif1,0) set(dif2,0) set(dif3,0) set(dif5,0) set(dif6,0) set(dif7,0) if (ne(line2,line6)) { if (gt(line2,line6)) { set(dif6,sub(line2,line6)) } else { set(dif2,sub(line6,line2)) } } if (ne(line1,line3)) { if (gt(line1,line3)) { set(dif3,sub(line1,line3)) } else { set(dif1,sub(line3,line1)) } } if (ne(line5,line7)) { if (gt(line5,line7)) { set(dif7,sub(line5,line7)) } else { set(dif5,sub(line7,line5)) } } set(diff1,dif1) set(diff2,dif2) set(diff3,dif3) set(diff5,dif5) set(diff6,dif6) set(diff7,dif7) /* Output the html */ "
    \n"
            col(add(line2,6,dif2)) call ped_ahref(father(father(indi)),href_table)
            "_" nstrngff "__"
            while (gt(diff1,0)) { "_" decr(diff1) }
            "" nl()
            " " call ped_ahref(father(indi),href_table) "_" nstrngf "__"
            while (gt(diff2,0)) { "_" decr(diff2) }
            "|" nl()
            "|" col(add(line2,5,dif2)) "|"
            call ped_ahref(mother(father(indi)),href_table) "_" nstrngfm "__"
            while (gt(diff3,0)) { "_" decr(diff3) }
            "" nl()
            "|" nl()
            "|--" call ped_ahref(indi,href_table) nstrngi "" nl()
            "|" nl()
            "|" col(add(line6,6,dif6))
            call ped_ahref(father(mother(indi)),href_table) "_" nstrngmf "__"
            while (gt(diff5,0)) { "_" decr(diff5) }
            "" nl()
            "|" call ped_ahref(mother(indi),href_table) "_" nstrngm "__"
            while (gt(diff6,0)) { "_" decr(diff6) }
            "|" nl()
            col(add(line6,5,dif6)) "|"
            call ped_ahref(mother(mother(indi)),href_table) "_" nstrngmm "__"
            while (gt(diff7,0)) { "_" decr(diff7) }
            "" nl()
            "
    \n" "


    \n" } proc ped_ahref(indi,href_table) { "" } lifelines-3.0.61/reports/pedigree.ll0000700002540200244210000000423710076661057017572 0ustar prappDomain Users/* * @progname pedigree.ll * @version none * @author Wetmore, Manis, Hume Smith * @category * @output Text * @description * * Select and produce an ancestor report for the person selected. * * Code by Tom Wetmore, ttw@cbnewsl.att.com * With modifications by: Cliff Manis * more by Hume Smith (who refuses to learn YACL and so may do odd things): * - optional depth limit * - draws helpful lines * * This report works only with the LifeLines Genealogy program * * version one of this report was written by Tom Wetmore, in 1990, * name is from pedigreel (long format) * * Output is an ASCII file, and will probably need to be printed * using 132 column format. Sample (depth 2): +! +-Ivan Cottnam "Cott" SMITH (10 Jan 1932- ) #2 | +! +-Hume Cottnam Llewellyn SMITH (18 Dec 1966- ) #1 | +! +-Gail Ida HUME (26 Mar 1943- ) #3 +! * ! indicates more is known beyond that depth. */ proc main () { getindi(indi) getintmsg(depth,"How many generations (-1 for all)?") dayformat(0) monthformat(4) dateformat(0) call pedigree(1, depth, indi, "", " ", " ") } proc pedigree (ah, depth, indi, indent, above, below) { if (eq(depth,0)) { indent "+!" nl() } else { if (par, father(indi)) { call pedigree(mul(2,ah), sub(depth,1), par, concat(indent, above), " ", "| ") } indent "+-" fullname(indi,1,1,50) set(flag,0) set(birth," ") set(death," ") if (evt, birth(indi)) { set(flag,1) set(birth, stddate(evt)) } if (evt, death(indi)) { set(flag,1) set(death, stddate(evt)) } if (flag) { " (" birth "-" death ")" } " #" d(ah) nl() if (par, mother(indi)) { call pedigree(add(1,mul(2,ah)), sub(depth,1), par, concat(indent, below), "| ", " ") } } } /* eof */ lifelines-3.0.61/reports/pedigreel.ll0000700002540200244210000000610510076661057017742 0ustar prappDomain Users/* * @progname pedigreel.ll * @version 1.0 * @author Wetmore, Manis * @category * @output Text, 132 cols * @description * * select and produce a ancestor report for the person selected. * Ancestors report format, which print the event in long format. * Output is an ASCII file, and will probably need to be printed * using 132 column format. * * pedigreel * * Code by Tom Wetmore, ttw@cbnewsl.att.com * With modifications by: Cliff Manis * * This report works only with the LifeLines Genealogy program * * version one of this report was written by Tom Wetmore, in 1990, * name is from pedigreel (long format) * * An example of the output may be seen at end of this report. */ proc main () { set (nl,nl()) getindi(indi) call pedigree(0, 1, indi) nl() } proc pedigree (in, ah, indi) { if (par, father(indi)) { call pedigree(add(1,in), mul(2,ah), par) } print(name(indi)) print(nl()) col(mul(8,in)) fullname(indi,1,1,50) if (evt, birth(indi)) { ", b. " long(evt) } " (" d(ah) ")" nl() if (par, mother(indi)) { call pedigree(add(1,in), add(1,mul(2,ah)), par) } } /* Sample output of this report. 132 Column Format. This report was requested for "Fuller Ruben Manes". John MANESS, b. ca 1770-1780 (16) Samuel P. MANES, b. ca 1780-90 (8) William Thomas MANES, b. 26 Nov 1828, Hamblen, Tennessee (4) Fanny (MANES), b. ca 1790-1800 (9) William Bowers MANES, b. 6 Jan 1868, Hamblen Co, TN ? (2) James BOWERS (20) Anderson BOWERS, b. ca 1803, TN (10) Martha (21) Martha A. BOWERS, b. 14 APR 1829, TN (5) William COWAN (88) Samuel COWAN (44) Mrs. (COWAN) (89) Christopher Columbus COWAN, b. About 1765 (22) Mrs (COWAN) (45) Lurina Viney "Vina" COWAN, b. 1808, TN (11) Mary BOYD, b. 1772, Boyd's Creek, Sevier Co, TN (23) Fuller Ruben MANES, b. 19 Nov 1902, Union Valley, Sevier Co, TN (1) Henry B. CANTER, b. ca 1820, VA (12) James H. CANTER, b. ca 1847, Claiborne Co, TN (6) Polina (CANTER), b. ca 1822 (13) Cordelia "Corda" F. CANTER, b. 7 Dec 1869, Jonesboro, Washington Co, TN (3) James WHITEHORN, b. VA (14) Martha Marie WHITEHORN, b. 22 DEC 1846, Washington Co, TN ? (7) Thomas FOSTER (60) Kennedy "Kan" Powell FOSTER, b. 1814 (30) Martha "Patsy" FOSTER, b. Tennessee (15) David CASON (62) Rebecca KERSAWN, b. 1818, NC (31) Mary (63) */ /* End of Report */ lifelines-3.0.61/reports/pedigreelhs.ll0000700002540200244210000000422710076661057020300 0ustar prappDomain Users/* * @progname pedigreelhs.ll * @version none * @author Wetmore, Manis, Hume Smith * @category * @output Text * @description * * Select and produce an ancestor report for the person selected. * * Code by Tom Wetmore, ttw@cbnewsl.att.com * With modifications by: Cliff Manis * more by Hume Smith (who refuses to learn YACL and so may do odd things): * - optional depth limit * - draws helpful lines * * This report works only with the LifeLines Genealogy program * * version one of this report was written by Tom Wetmore, in 1990, * name is from pedigreel (long format) * * Output is an ASCII file, and will probably need to be printed * using 132 column format. Sample (depth 2): +! +-Ivan Cottnam "Cott" SMITH (10 Jan 1932- ) #2 | +! +-Hume Cottnam Llewellyn SMITH (18 Dec 1966- ) #1 | +! +-Gail Ida HUME (26 Mar 1943- ) #3 +! * ! indicates more is known beyond that depth. */ proc main () { getindi(indi) getintmsg(depth,"How many generations (-1 for all)?") dayformat(0) monthformat(4) dateformat(0) call pedigree(1, depth, indi, "", " ", " ") } proc pedigree (ah, depth, indi, indent, above, below) { if (eq(depth,0)) { indent "+!" nl() } else { if (par, father(indi)) { call pedigree(mul(2,ah), sub(depth,1), par, concat(indent, above), " ", "| ") } indent "+-" fullname(indi,1,1,50) set(flag,0) set(birth," ") set(death," ") if (evt, birth(indi)) { set(flag,1) set(birth, stddate(evt)) } if (evt, death(indi)) { set(flag,1) set(death, stddate(evt)) } if (flag) { " (" birth "-" death ")" } " #" d(ah) nl() if (par, mother(indi)) { call pedigree(add(1,mul(2,ah)), sub(depth,1), par, concat(indent, below), "| ", " ") } } } lifelines-3.0.61/reports/pedigree_html.ll0000700002540200244210000000227410076661057020615 0ustar prappDomain Users/* * @progname pedigree_html.ll * @version 1.3 * @author Scott McGee (smcgee@microware.com) * @category * @output HTML * @description * * Select and produce an ancestor report for the person selected. * * @(#)pedigree_html.ll 1.3 10/4/95 * * By Scott McGee (smcgee@microware.com) * Based on pedigreel by Tom Wetmore, ttw@cbnewsl.att.com * And Cliff Manis */ include("cgi_html.li") proc main () { call set_cgi_html_globals() set (nl,nl()) getindi(indi) call do_chart_head(indi, "Pedigree") "
    \n"
      call pedigree(0, indi)
      "
    \n" call do_tail(indi) } proc pedigree (level, indi) { set(has_parent, or(father(indi), mother(indi))) if(and(lt(level, 4), has_parent)) { set(par, father(indi)) call pedigree(add(1,level), par) } if(indi) { col(mul(4,level)) href(indi, "Pedigree") if (evt, birth(indi)) { ", b. " if(gt(level, 3)) { short(evt) } else { long(evt) } } nl() } else { col(mul(4,level)) "(Spouse not known)" nl() } if(and(lt(level, 4), has_parent)) { set(par, mother(indi)) call pedigree(add(1,level), par) } } lifelines-3.0.61/reports/pedtex/0000700002540200244210000000000010657071735016740 5ustar prappDomain Userslifelines-3.0.61/reports/pedtex/pedtex.ll0000700002540200244210000000254510077366775020602 0ustar prappDomain Users/* * @progname pedtex.ll * @version 1.0 * @author Eric Majani * @category * @output TeX * @description * * generates TeX files for pedigree charts */ global(depth) global(level) proc main () { getindi(indi) set(prompt,"Enter number of generations desired") getintmsg(depth,prompt) "\\input setup" nl() "\\tree " nl() set(level,1) call pedout(indi) "\\endtree " nl() "\\end " nl() } proc printindi(indi) { "{\\bf " name(indi) "}" nl() if (e, birth(indi)) { " b. " short(e) nl() } if(male(indi)) { spouses(indi,sp,fam,num) { if(e,marriage(fam)) { " m. " short(e) nl() } } } if (e, death(indi)) { " d. " short(e) nl() } } proc pedout(indi) { call printindi(indi) set(level,add(level,1)) if(le(level,depth)) { if (par,father(indi)) { set(fath,father(indi)) "\\subtree " nl() call pedout(fath) "\\endsubtree " nl() } if (par,mother(indi)) { set(moth,mother(indi)) "\\subtree " nl() call pedout(moth) "\\endsubtree " nl() } } set(level,sub(level,1)) } lifelines-3.0.61/reports/pedtex/pedtex.readme0000700002540200244210000000424410077366775021426 0ustar prappDomain UsersFrom: "(Eric Majani)" Subject: pedtex: generating TeX files for pedigree charts Introducing PEDTEX: a program which generates a TeX file that can then be used to produce a Pedigree Chart in PostScript format. All you need is to have TeX installed on your machine, and three files included here: pedtex, tree.tex, and setup.tex. Good luck! Feel free to ask me questions about pedtex and the \tree, \endtree, \subtree, \endsubtree TeX macros, but please, no questions about TeX. Ask your local TeX wizard for Tex-specific questions. Thanks. ----------------------- Remarks on the use of pedtex ------------------------- 1. You can change the prinindi procedure to anything you like. The example given here is just that, an example. 2. Beware of the use of TeX special characters, and their interpretation by Lifelines (i.e. \' will be changed to /'): however I already found out that \& is not modified by LifeLines. 3. pedtex creates a basic TeX file which can always be modified to suit your tastes, additions of special TeX characters. The nice thing about pedtex is that it puts all the genealogy information from the database. You can therefore include the pedigree chart in a TeX document (if you're writing a book on your family for example). 4. The steps to produce a Postscript file (or a .dvi file for visualization by xdvi for example): 4.1 Make sure the files setup.tex and tree.tex (and pedtex) are in the current directory 4.2 Run lines 4.3 Use the report generation menu and run the pedtex program. Make sure that your output file is of the type: filename.tex The integer to enter is the number of generations desired. 4.4 Quit lines 4.5 Run tex on filename.tex: tex filename 4.6 Run dvips (or xdvi for visualization) on filename.dvi: dvips filename 4.7 Print or visualize the PostScript file filename.ps 5. Do not modify the tree.tex file, unless you are a TeX programming expert 6. The setup.tex file however should be modified to your taste. You should however have no problem with the one I provide (no guarantees though). 7. The files that follow are: tree.tex, setup.tex lifelines-3.0.61/reports/pedtex/setup.tex0000700002540200244210000000014410077366775020633 0ustar prappDomain Users\hsize=10in \vsize=7.5in \parindent=20pt \hoffset=-0.8in \voffset=-0.8in \nopagenumbers \input tree lifelines-3.0.61/reports/pedtex/tree.tex0000700002540200244210000002242110077366775020434 0ustar prappDomain Users% Tree -- a macro to make aligned (horizontal) trees in TeX % % Input is of the form % \tree % item % \subtree % \leaf{item} % . % . % . % \endsubtree % \subtree % . % . % . % \endsubtree % \endsubtree % \endtree % % Nesting is to any level. \leaf is defined as a subtree of one item: % \def\leaf#1{\subtree#1\endsubtree}. % % A structure: % \subtree % item_part1 % item_part2 % . % . % . % % will print item_part2 directly below item_part1 as a single item % as if they were in a \box. % % The macro is a 3-pass macro. On the first pass it sets up a data % structure from the \subtree ... \endsubtree definitions. On the second pass % it recursively calculates the width of each level of the tree. On the third % pass it sets up the boxes, glue and rules. % % By David Eppstein, TUGboat, vol. 6 (1985), no. 1, pp. 31--35. % Transcribed by Margaret Kromer (peg), Feb., 1986. % % Permission to add to Source Forge repository granted by David Eppstein % (eppstein@ics.uci.edu) on 14 Nov 2000. In his email, he said: % % Sure. The original TeX source for the article is online, at % http://www.ics.uci.edu/~eppstein/pubs/p-ttree.tex.Z, if that helps. % % % Pass 1 % At the end of pass 1, the tree is coded as a nested collection of \hboxes % and \vboxes. \newbox\treebox\newcount\treeboxcnt \def\tree{\message{Begin tree}\treeboxcnt=1\global\setbox\treebox=\boxtree} \def\subtree{\ettext \advance\treeboxcnt by 1 \boxtree} \def\leaf#1{\subtree#1\endsubtree} \def\endsubtree{\ettext \egroup \advance\treeboxcnt-1{}% \ifnum\treeboxcnt=-1 \treeerrora\fi} \def\endtree{\endsubtree \ifnum\treeboxcnt>0 \treeerrorb\fi% \settreesizes \typesettree \message{-- end tree}} % Error messages for unbalanced tree \def\treeerrora{\errhelp=\treeerrorahelp% \errmessage{Unbalanced tree -- too many endsubtrees}} \newhelp\treeerrorahelp{There are more subtrees closed than opened} \def\treeerrorb{\errhelp=\treeerrorbhelp% \errmessage{Unbalanced tree -- not enough endsubtrees}} \newhelp\treeerrorbhelp{Not all the subtrees of the tree are closed. If you continue, you'll get some mysterious secondary errors.} % Set up \vbox containing root of tree \newif\iftreetext\treetextfalse % Whether still aligning text \def\boxtree{\hbox\bgroup % Start outer box of tree or subtree \baselineskip 2.5ex % Narrow line spacing slightly \tabskip 0pt % No spurious glue in alignment \vbox\bgroup % Start inner text \vbox \treetexttrue % Remember for \ettext \let\par\crcr \obeylines % New line breaks without explicit \cr \halign\bgroup##\hfil\cr} % Start alignment with simple template \def\ettext{\iftreetext % Are we still in inner text \vbox? \crcr\egroup \egroup \fi} % Yes, end alignment and box % Pass 2 % Recursively calculate widths of tree with \setsizes; keep results in % \treesizes; \treewidth contains total width calculated so far. \treeworkbox % is workspace containing subtree being sized. \newbox\treeworkbox \def\cons#1#2{\edef#2{\xmark #1#2}} % Add something to start of list \def\car#1{\expandafter\docar#1\docar} % Take first element of list \def\docar\xmark#1\xmark#2\docar{#1} % ..by ignoring rest in expansion \def\cdr#1{\expandafter\docdr#1\docdr#1}% Similarly, drop first element \def\docdr\xmark#1\xmark#2\docdr#3{\def#3{\xmark #2}} \def\xmark{\noexpand\xmark} % List separator expands to self \def\nil{\xmark} % Empty list is just separator \def\settreesizes{\setbox\treeworkbox=\copy\treebox% \global\let\treesizes\nil \setsizes} \newdimen\treewidth % Width of this part of the tree \def\setsizes{\setbox\treeworkbox=\hbox\bgroup% Get a horiz list as a workspace \unhbox\treeworkbox\unskip % Take tree, unpack it into horiz list \inittreewidth % Get old width at this level \sizesubtrees % Recurse through all subtrees \sizelevel % Now set width from remaining \vbox \egroup} % All done, finish our \hbox \def\inittreewidth{\ifx\treesizes\nil % If this is the first at this level \treewidth=0pt % ..then we have no previous max width \else \treewidth=\car\treesizes % Otherwise take old max level width \global\cdr\treesizes % ..and advance level width storage \fi} % ..in preparation for next level. \def\sizesubtrees{\loop % For each box in horiz list (subtree) \setbox\treeworkbox=\lastbox \unskip % ..pull it off list and flush glue \ifhbox\treeworkbox \setsizes % If hbox, it's a subtree - recurse \repeat} % ..and loop; end loop on tree text \def\sizelevel{% \ifdim\treewidth<\wd\treeworkbox % If greater than previous maximum \treewidth=\wd\treeworkbox \fi % Then set max to new high \global\cons{\the\treewidth}\treesizes}% In either case, put back on list % Pass 3 % Recursively typeset tree with \maketree by adding an \hbox containing % a subtree (in \treebox) to the horizontal list. \newdimen\treeheight % Height of this part of the tree \newif\ifleaf % Tree has no subtrees (is a leaf) \newif\ifbotsub % Bottom subtree of parent \newif\iftopsub % Top subtree of parent \def\typesettree{\medskip\maketree\medskip} % Make whole tree \def\maketree{\hbox{\treewidth=\car\treesizes % Get width at this level \cdr\treesizes % Set up width list for recursion \makesubtreebox\unskip % Set \treebox to text, make subtrees \ifleaf \makeleaf % No subtrees, add glue \else \makeparent \fi}} % Have subtrees, stick them at right {\catcode`@=11 % Be able to use \voidb@x \gdef\makesubtreebox{\unhbox\treebox % Open up tree or subtree \unskip\global\setbox\treebox\lastbox % Pick up very last box \ifvbox\treebox % If we're already at the \vbox \global\leaftrue \let\next\relax % ..then this is a leaf \else \botsubtrue % Otherwise, we have subtrees \setbox\treeworkbox\box\voidb@x % Init stack of processed subs \botsubtrue \let\next\makesubtree % ..and call \maketree on them \fi \next}} % Finish up for whichever it was \def\makesubtree{\setbox1\maketree % Call \maketree on this subtree \unskip\global\setbox\treebox\lastbox % Pick up box before it \treeheight=\ht1 % Get height of subtree we made \advance\treeheight 2ex % Add some room around the edges \ifhbox\treebox \topsubfalse % If picked up box is a \vbox, \else \topsubtrue \fi % ..this is the top, otherwise not \addsubtreebox % Stack subtree with the rest \iftopsub \global\leaffalse % If top, remember not a leaf \let\next\relax \else % ..(after recursion), set return \botsubfalse \let\next\makesubtree % Otherwise, we have more subtrees \fi \next} % Do tail recursion or return \def\addsubtreebox{\setbox\treeworkbox=\vbox{\subtreebox\unvbox\treeworkbox}} \def\subtreebox{\hbox\bgroup % Start \hbox of tree and lines \vbox to \treeheight\bgroup % Start \vbox for vertical rules \ifbotsub \iftopsub \vfil % If both bottom and top subtree \hrule width 0.4pt % ..vertical rule is just a dot \else \treehalfrule \fi \vfil % Bottom gets half-height rule \else \iftopsub \vfil \treehalfrule % Top gets half-height the other way \else \hrule width 0.4pt height \treeheight \fi\fi % Middle, full height \egroup % Finish vertical rule \vbox \treectrbox{\hrule width 1em}\hskip 0.2em\treectrbox{\box1}\egroup} \def\treectrbox#1{\vbox to \treeheight{\vfil #1\vfil}} \def\treehalfrule{\dimen\treeworkbox=\treeheight % Get total height \divide\dimen\treeworkbox 2% \advance\dimen\treeworkbox 0.2pt % Divide by two, add half horiz height \hrule width 0.4pt height \dimen\treeworkbox}% Make a vertical rule that high \def\makeleaf{\box\treebox} % Add leaf box to horiz list \def\makeparent{\ifdim\ht\treebox>% \ht\treeworkbox % If text is higher than subtrees \treeheight=\ht\treebox % ..use that height \else \treeheight=\ht\treeworkbox \fi % Otherwise use height of subtrees \advance\treewidth-\wd\treebox % Take remainder of level width \advance\treewidth 1em % ..after accounting for text and glue \treectrbox{\box\treebox}\hskip 0.2em % Add text, space before connection \treectrbox{\hrule width \treewidth}% \treectrbox{\box\treeworkbox}} % Add \hrule, subs % No idea what \spouse is supposed to do... wasn't included \def\spouse{\bf} lifelines-3.0.61/reports/places.ll0000700002540200244210000001304710076661057017254 0ustar prappDomain Users/* * @progname places.ll * @version 5.0 * @author Olsen, Eggert * @category * @output Text * @description * * Prints out the value of all the lines in your database with the PLAC tag, * along with enough information so you can find the line easily. The purpose * of this report is so you can find all the places that seem wrong * (misspelled, ambiguous, incomplete [left out the county name], etc), and * double-check them or correct them. places Version 1, 25 Nov 1992 by David Olsen (dko@cs.wisc.edu) Version 2, 3 Dec 1992 by Jim Eggert (eggertj@atc.ll.mit.edu) (Changed numbers to real key values.) Version 3, 5 Feb 1993 by David Olsen (dko@cs.wisc.edu) (Prints place names in reverse order. Runs faster.) Version 4, 13 Feb 1993 by Jim Eggert (eggertj@atc.ll.mit.edu) (Prints place names in regular or reverse order.) Version 5, 1 Sep 1993 by Jim Eggert (eggertj@atc.ll.mit.edu) (Fixes a bug involving families with no parents) Report program for LifeLines v. 2.3.3. Prints out the value of all the lines in your database with the PLAC tag, along with enough information so you can find the line easily. The places are printed either exactly as they appear in the database (e.g. Madison, Dane, Wisconsin) or in reverse order (e.g. Wisconsin, Dane, Madison). The purpose of this report is so you can find all the places that seem wrong (mispelled, ambiguous, incomplete, etc.), and double-check them or correct them. The places are printed out in the order that they appear in the database, so the report is not very useful in its native form. To make it more useful, run the output file through the program 'sort', making it much easier to spot incorrect names. For example, if you have 100 entries within Middlesex County, Massachusetts, but in one of them you mispelled Middlesex as Middlesx, it will be very easy to spot this in the sorted output. If the place name is part of an individual record, it is followed by the key and name of the individual and by the hierarchy of tags between the INDI tag and the PLAC tag (usually just a single tag, such as BIRT or DEAT). If the place name is part of a family record, it is followed by the family key, the key and name of the husband (or wife if there is no husband, or first child if there is no parent), the relationship in the family of that person, and the hierarchy of tags between the FAM tag and the PLAC tag (usually just the single tag MARR). Some sample output (in reverse order) that has already been sorted: California, Los Angeles, Long Beach | I130 Newel Knight YOUNG | DEAT California, Los Angeles, Los Angeles | I6811 Gunella CHRISTIANSEN | DEAT California, Los Angeles, Newhall | I836 Cena Elizabeth HAWKINS | DEAT California, Los Angeles, San Fernando | I836 Cena Elizabeth HAWKINS | BURI California, Napa, Napa | I1439 Cora Anna BEAL | DEAT California, Riverside, Riverside | F328 (I1370 Benjamin BERRY, husb) | MARR California, San Bernadino, | I6843 Emily LUDVIGSEN | BURI California, San Bernadino, San Bernadino | I1364 Francis LYTLE | DEAT California, San Bernadino, San Bernadino | I1365 Sophronia Jane MILLETT | DEAT California, San Bernadino, San Bernadino | I1367 Nancy Ellen LYTLE | BIRT California, San Bernadino, San Bernadino | I1369 Hulda Lorene LYTLE | BIRT California, San Bernadino, San Bernadino | I694 Mary Ann HENRY | BIRT California, Shasta, Redding | I1378 Eliza Lemira MILLETT | DEAT California, Whittier, Rose Hills | I2318 Zetta Fern MORTENSEN | BURI Canada, Nova Scotia, Cape Breton | F184 (I749 Ezra KING, husb) | MARR Canada, Nova Scotia, Cape Breton | I749 Ezra KING | DEAT */ proc main() { list(tag_stack) list(place_names) set(reverse,0) getstrmsg(yesno,"Reverse place name components? (y/n)") if (strlen(yesno)) { if (not(strcmp(upper(trim(yesno,1)),"Y"))) { set(reverse,1) } } print("Printing all places.\n") print("Be patient. This may take a while.\n") forindi (person, id) { traverse (inode(person), node, level) { setel(tag_stack, add(level, 1), tag(node)) if (eq(strcmp(tag(node), "PLAC"), 0)) { extractplaces(node, place_names, num_places) if (reverse) { pop(place_names) while (p, pop(place_names)) { ", " p } } else { dequeue(place_names) while (p, dequeue(place_names)) { ", " p } } " | " key(person) " " name(person) " |" forlist (tag_stack, tag, tag_number) { if (and(gt(tag_number, 1), le(tag_number, level))) { " " tag } } "\n" } } } forfam (fam, fnum) { traverse (fnode(fam), node, level) { setel(tag_stack, add(level, 1), tag(node)) if (eq(strcmp(tag(node), "PLAC"), 0)) { extractplaces(node, place_names, num_places) if (reverse) { pop(place_names) while (p, pop(place_names)) { ", " p } } else { dequeue(place_names) while (p, dequeue(place_names)) { ", " p } } " | " key(fam) " (" if (person,husband(fam)) { set(relation,", husb") } elsif (person,wife(fam)) { set(relation,", wife") } else { children(fam,child,cnum) { if (eq(cnum,1)) { set(person,child) set(relation,", chil") } } } if (person) { key(person) " " name(person) relation } ") |" forlist (tag_stack, tag, tag_number) { if (and(gt(tag_number, 1), le(tag_number, level))) { " " tag } } "\n" } } } } lifelines-3.0.61/reports/pointers.ll0000700002540200244210000000641110362317137017640 0ustar prappDomain Users/* * @progname pointers * @version 1.0 * @author Chandler * @category * @output Text * @description Test a database for reciprocity of pointers between persons and families. Report any failures, primarily the following: Person Inn is a spouse/child in Fnn, but Fnn has no corresponding pointer. Family Fnn has HUSB/WIFE/CHIL Inn, but Inn has no corresponding pointer. Some failures are supposed to be impossible, but are covered here nonetheless: Family Fnn has HUSB/WIFE/CHIL Inn, but Inn does not exist. Family Fnn has a null HUSB/WIFE/CHIL line. Person Inn is a spouse/child in Fnn, but Fnn does not exist. Person Inn has a null FAMS/FAMC line. Version 1.0 - 2003 Jul 2 - John F. Chandler This program works only with LifeLines. */ global(pointers) proc main() { table(spou) /* each entry is the list of spouses in the keyed family */ table(chil) /* each entry is the list of children in the keyed family */ "Testing database " qt() database() qt() " for pointer reciprocity\n" set(pointers,0) /* loop through persons and note all the families they belong to */ forindi(i,n) { set(k,save(key(i))) fornodes(root(i),node) { set(type,tag(node)) if(eqstr(type,"FAMC")) { call tally(type,"child",chil,node,k) } elsif(eqstr(type,"FAMS")) { call tally(type,"spouse",spou,node,k) } } } /* loop through families and compare the members against the list compiled by scanning persons -- flag any mismatches */ forfam(f,n) { set(id,save(key(f))) set(cl,lookup(chil,id)) set(sl,lookup(spou,id)) fornodes(root(f),node) { set(type,tag(node)) if(eqstr(type,"CHIL")) { call checkoff(type,cl,id,node) } elsif(or(eqstr(type,"HUSB"),eqstr(type,"WIFE"))) { call checkoff(type,sl,id,node) } } /* any remaining list elements are errors */ if(sl) { while(k,dequeue(sl)) { "\nPerson " k " is a spouse in " id ", but " id " has no corresponding pointer." } } if(cl) { while(k,dequeue(cl)) { "\nPerson " k " is a child in " id ", but " id " has no corresponding pointer." } } } "\n\nFinished after checking " d(pointers) " pointers.\n" } /* check a family member against the expected list. anyone not on the list is an error. remove each person from the list when found here. */ proc checkoff(type,list,id,node) { incr(pointers) if(eq(mod(pointers,500),0)) { print(".") } if(k,value(node)) { set(key,substring(k,2,sub(strlen(k),1))) if(list) { set(count,length(list)) while(gt(count,0)) { decr(count) set(c,dequeue(list)) if(eqstr(c,key)) { set(count,-1) } else { enqueue(list,c) } } } if(eq(count,0)) { "\nFamily " id " has " type " " key ", but " key if(reference(k)) { " has no corresponding pointer." } else { " does not exist." } } } else { "\nFamily " id " has a null " type " line." } } /* build a list of persons who belong to families */ proc tally(type,member,table,node,k) { incr(pointers) if(eq(mod(pointers,500),0)) { print(".") } set(id,value(node)) if(reference(id)) { set(id,save(substring(id,2,sub(strlen(id),1)))) if(l,lookup(table,id)) { enqueue(l,k) } else { list(l) enqueue(l,k) insert(table,id,l) } } elsif(id) { "\nPerson " k " is a " member " in " id ", but " id " does not exist." } else { "\nPerson " k " has a null " type " line." } } lifelines-3.0.61/reports/prompt.li0000700002540200244210000000154310076661057017321 0ustar prappDomain Users/* * @progname prompt.li * @version None * @author anon * @category * @output booleans and ints function values * @description miscellaneous prompt functions and procedures */ func askny(msg) { set(prompt, concat(msg, "? [n/y] ")) getstrmsg(str, prompt) if(and(gt(strlen(str), 0), or(eq(strcmp(str, "y"),0), eq(strcmp(str, "Y"),0)))) { return(1) } return(0) } func askyn(msg) { set(prompt, concat(msg, "? [y/n] ")) getstrmsg(str, prompt) if(and(gt(strlen(str), 0), or(eq(strcmp(str, "n"),0), eq(strcmp(str, "N"),0)))) { return(0) } return(1) } func getintdef(msg, def) { set(prompt, concat(msg, "? [", d(def), "]")) getstrmsg(str, prompt) if(and(gt(strlen(str), 0), gt(index("0123456789",trim(str,1),1),0))) { return(atoi(str)) } return(def) } lifelines-3.0.61/reports/ps-anc.ll0000700002540200244210000057431010076613216017165 0ustar prappDomain Users/* @prognam ps-anc @version 8.86, 4 Jul 2004 @author Robert Simms @output PostScript @category chart making @description PS Charts a LifeLines genealogy report program that produces ancestry charts in PostScript This is an interim version on the way to a release of ps-anc9. For a log of changes, visit the web page http://www.math.clemson.edu/~rsimms/genealogy/ll/ps-anc/log.html */ /* ** ps-anc, 9 Sep 1994, by Fred Wheeler (wheeler@ipl.rpi.edu) ** ps-anc2, 16 August 1994, by Fred Wheeler (wheeler@ipl.rpi.edu) ** ps-anc5, 19 Feb 1996, enhanced by Phil Stringer (P.Stringer@mcc.ac.uk) ** - all comments/bugs should now go to Phil Stringer ** ps-anc6, 30 Jan 1997, enhanced by Phil Stringer (P.Stringer@mcc.ac.uk) ** ps-anc7, 1 Feb 1997, enhanced by Phil Stringer (P.Stringer@mcc.ac.uk) ** ps-anc8, 18 Mar 1998, enhanced by Robert Simms and Allan Yates, ** rsimms@math.clemson.edu and ayates@nortel.ca ** ** GETTING THIS FILE ** ** The ps-anc final release versions are available via the Internet: ** (1) http://lifelines.sourceforge.net/ ** (1) ftp://ftp.cac.psu.edu/pub/genealogy/lines/reports/ ** (2) http://www.math.clemson.edu/~rsimms/genealogy/ll/ ** ** BRIEF DESCRIPTION ** ** This LifeLines report program generates Postscript ancestral and ** descendant charts. The ancestral charts can include the siblings ** of all direct ancestors (aunts, uncles, great-aunts, great-uncles, ** etc.). A multi-page poster chart can also be generated. The ** chart format is based on the program GedChart, by Tom Blumer. ** ** The Postscript file created can be sent to any size printer; it ** will automatically adapt the size of the chart. I send the same ** file to A-size (8.5 by 11) and B-size (11 by 17) printers. ** ** After you use this program a few times, you should edit the ** function interrogate_user(). This is the first function after ** these comments and the global variable declarations. This ** function is set up to make it easy for you to configure what ** questions this program should ask you each time and what default ** values it should use for questions not asked. ** ** Please contact me if you like this program, find any bugs, have ** any bug fixes, or want to suggest improvements. I am also always ** on the lookout for better ancestral/descendant chart generating ** programs. If you know of a program that generates charts which ** you like better than those generated by this program, please drop ** me a line. ** ** This report program works with the LifeLines Genealogical database ** program only. (see ftp://ftp.cac.psu.edu/pub/genealogy/lines/*) ** ** CHANGE LOG ** ** CHANGES since version 1: ** Completely new descendant chart in addition to ancestral chart ** Multi-page poster option ** Multi-page charts scaled correctly (thanks to broman@Np.nosc.mil) ** Maximum name length configurable by user (fixes long squashed names) ** Option to suppress siblings of later generations in ancestral charts ** Checks that user selects a valid person (bug fix) ** Can make a guess at whether a title is a prefix or suffix type ** Use of titles is configurable (prefix, suffix, guess, none) ** Birth/death/marriage date styles are configurable (may include place) ** Corner message is slightly smaller, and chart will not overlap it ** Marriage date is printed before death date ** ** CREDITS ** ** Code improvements received from: ** Vincent Broman (broman@Np.nosc.mil) ** ** Helpful comments received from: ** Vincent Broman (broman@Np.nosc.mil) ** Frank H. Flaesland (phranx@imr.no) ** Linda Wilson (lwilson@mcc.com) ** Stacy Johnson (sjohnson@oucsace.cs.ohiou.edu) ** John F. Chandler (jchbn@cuvmb.cc.columbia.edu) ** Susan Radel ** ** CHANGES in version 3: ** Birth/death/marriage date style addition (full date with short place). ** Examples for including other fonts. ** Option for bold lines/text for direct line of ascent. ** Option to start on right or left of page. ** Option for landscape or portrait format. ** Small additional space between border and text to improve appearance. ** Now fills the page if max generations > actual generations. ** With multi-page output generations are multiple of x-pages to prevent ** text split over sheets. ** Option to show aunts/uncles from parents multiple marriages. ** ** CHANGES in version 4: ** Border enhanced at the corners. ** Chart title font changed. ** Lines now used to join families rather than being used as a framework. ** Names now adjacent to line or halfway between if in 2 families. ** Descendant chart has reduced lines and is more tree like ** ** CHANGES in version 5: ** Enhanced descendant chart ** Automatic choice of chart type if no children or no ancestors ** Multi-page landscape bug fixed ** Enhancements to user option specification ** Character set enhanced to iso-8859-1 ** Additional personal titles ** ** CHANGES in version 6: ** Corrected multi-page landscape printing ** Descriptive title at bottom of chart ** Smaller and faster PostScript code on multi-page output ** (previously n-pages had n * single page size of file) ** Automatic choice of ancestor/descendant chart if no descendants/ancestors ** Fixed bug on descendant charts of overprinting if it branched up, and ** there was a spouse with birth and death details, and no children in ** that family. ** Character set inadvertently lost iso-8859-1 support. ** ** CHANGES in version 7: ** Fixed bug on descendant charts of overlapping vertical lines if it ** branched up, and there was a spouse and no children in that family. ** iso-8859-1 support reinstated. ** More efficient print_all_persons code from Fred Wheeler ** ** CREDITS ** ** Code improvements received from: ** Phil Stringer (p.stringer@mcc.ac.uk) ** ** CHANGES in version 8 by Robert Simms and (+) Allan Yates: ** ** >procedure do_anc: ** Closed up extra space between branches of the chart by changing ** min_pos to person_minpos, to be used to keep person from being drawn ** too high on chart, but not to keep all ancestors of a person from being ** drawn above this point. Introduced abs_min_pos as the absolutely ** highest position for any older siblings or half siblings of a person. ** Fixed the printing of half siblings to be subject to the sibling depth ** limit obtained from the interrogate function. ** Fixed a mis-alignment in half sib. branch vertical line. ** >procedure do_des: ** Fixed conditions for drawing vertical line to exclude case where there ** are children but no spouse and depth = max_depth. In this case the ** children heights are never computed so a vertical line can't be drawn. ** >general: ** +Added option for displaying surnames in upper case. ** +Added date option to display the first two items in a place list ** +Added option for not displaying large descriptive title, print small ** one instead with title text added ** +Do not print preceding comma if place exists and date does not exist ** Fixed positioning of names that caused some names to be too close ** to vertical lines, eliminating horizontal lines in come cases. ** Added support in PostScript file for increasing the page margins together ** with a new question in the interrogate function. (This required ** calculation of a clip rectangle since the device clip rectangle would ** allow redundant display of parts of the chart at adjoining edges in ** multi-page charts.) This is useful for imposing a margin when a ** PostScript file is converted to another format, such as Adobe PDF. ** This was to prevent the converted file from having a zero margin ** which doesn't print well on most printers. ** Centered chart label and coordinated its placement with that of the title ** to avoid having the two overlap. This fix became more necessary with ** the addition of the ability to increase the margins. ** Added option for centering or left justifying chart label. ** Replaced tabs in LifeLines code with spaces to avoid irregular ** indentation. ** Experimented with putting page drawing code into a procedure to reduce ** the size of multi-page files. Determined that doing so would ** require changing the MaxOpStack limit in PostScript to handle the ** potentially large number of items that would go into the procedure. ** This could potentially place a limit on how many individuals ** could be shown in a chart for some devices. So, the idea was dropped. ** ** CREDITS: ** Phil Stringer, for initiating the min_pos fix in procedure do_anc. ******************************************************************************* ** ** ABOUT GEDCHART (a different program) ** ** This program includes PostScript code written by Tom Blumer ** (blumer@ptltd.com). It is used here with his permission. This ** PostScript code is from Tom Blumer's GedChart package. The report ** is very much like that generated by GedChart using the -Sa or -Sd ** option. ** ** GedChart is DOS program that generates ancestral and descendant ** charts like this report program, and also fan charts. GedChart ** works directly from a GEDCOM file and is completely independent of ** LifeLines. It is currently up to version 1.6, which is a beta ** version that may lead to a commercial product. You can find ** GedChart at ftp:oak.oakland.edu/pub/msdos/genealgy/gedcht16.zip ** */ option("explicitvars") /* to catch misspellings or uninit'ed use of variables*/ /* If translation tables are in effect, and UTF-8 or 8-bit characters are used in a custom title, for instance, then it might be necessary to specify what codeset the report is using (say ISO-8859-1, ISO-8859-2, UTF-8, etc.) to ensure that those 8-bit characters arrive safely in the output This is done with the char_encoding() statement... */ /*char_encoding("ISO-8859-1")*/ global(version) /* version string */ global(TRUE) /* int, set to 1 for use as boolean value */ global(FALSE) /* int, set to 0 for use as boolean value */ global(UP) /* int, constant, set to -1 for desc. branches */ global(NEUTRAL) /* int, constant, set to 0 for desc. branches */ global(DOWN) /* int, constant, set to 1 for desc. branches */ global(max_dateplace) /* int, number of date-place styles */ global(place_modify) /* boolean, use (included) abbreviation routine */ global(updown_override) /* int, to force desc. to be all up or all down */ global(high_pos_gen) /* array, highest so far in each generation */ global(high_pos_gen_offset) /* used to allow non-positive array indexing */ global(high_depth) /* int, highest depth so far */ global(low_depth) /* int, lowest depth so far */ global(name_height) /* height of name text on chart */ global(date_height) /* height of birth/death/marriage date text */ global(corner_height) /* space between parent and extreme child * -- name_height was formerly used for this */ global(min_sibling_spacer) /* constant, min. vert. space between siblings */ global(cloaked_depth) /* used for hidding a gen. from get_clearance */ global(tighten) /* boolean, descendant branches to be closer */ global(debug) global(debug2) global(debug_postscript) /* variables prompted from or configured by the user */ global(chart_type) /* int, 0: ancestral, 1: descendant */ global(root_person) /* indi, person for whom to generate the chart */ global(root_fam) /* fam, family for combination chart */ global(font_name) /* string, name of font for individual names*/ global(ifont_name) /* string, name of font for person info */ global(enc_choice) /* int, specifies character encoding to use */ global(max_depth) /* int, maximum number of gen. up from root */ global(min_depth) /* int, minimum number of gen. down from root */ global(start_depth) /* int, depth of root, used by reserve() also */ global(chart_label) /* string, label for corner of chart */ global(chart_label_centered) /* boolean, center chart_label on first page */ global(color_chart) /* boolean, is chart in color */ global(multi_page) /* boolean, is chart many page poster type */ global(x_pages) /* int, number of horizontal pages */ global(y_pages) /* int, number of vertical pages */ global(name_letters) /* int, maximum number of letters in a name */ global(title_method) /* int, code for how to insert titles */ global(depth_siblings) /* int, number of generations to show siblings */ global(dateplace_birth) /* int, date style for birth/death/marriage */ global(dateplace_death) global(dateplace_marriage) global(dateplace_burial) global(show_altname) /* boolean, whether or not to show 2nd names */ global(show_address) /* boolean, whether or not to show addresses */ global(no_resides_at) /* boolean, show all or just current addresses */ global(surname_upper) /* boolean, display surnames in upper case? */ global(display_title) /* boolean, display descriptive title? */ global(chart_title_override) /* string, user-specified title */ global(display_label) /* boolean, display identifying label? */ global(label_outside) /* boolean, place label outside border? */ global(display_border) /* boolean, display a fancy border? */ global(bold_chart) /* bool, direct line in bold 0: no, 1: yes */ global(bold_factor) /* int, how much larger bold lines should be */ global(mirror_chart) /* bool, root person on right 0: no, 1: yes */ global(mom_first) /* bool, mothers at branch tops: no(0), yes(1) */ global(halfsib) /* bool, show half siblings 0: no, 1: yes */ global(halfsib_anc) /* bool, show half sibling ancestors 0: no,1:yes*/ global(depth_halfsib_anc) /* int, smallest generation in which half siblings will have ancestors plotted */ global(desc_gender) /* int, gender restriction on descendants */ global(opt_rel_famc) /* bool, non-birth branches use thin blue line*/ global(duplic_handling) /* int, 0 do nothing, 1 dashed line, 2 anc once */ global(portrait) /* int, 0: landscape, 1: portrait */ global(paper_width) /* int, width in points of target paper */ global(paper_height) /* int, height in points of target paper */ global(paper_name) /* string, name of paper for PostScript device */ global(margin_top) /* int, minimum top margin, in points*/ global(margin_bottom) /* int, minimum bottom margin, in points*/ global(margin_left) /* int, minimum left margin, in points*/ global(margin_right) /* int, minimum rightmargin, in points*/ global(manual_feed_opt) /* int, 0 don't specify, 1 on, 2 off */ global(postscript_level) /* int, 1 or 2 for PostScript level 1 or greater */ global(pacificpage) /* int, 0/1 have pacific page cartridge on Laser */ /* variables to return additional values from functions */ global(min_gap_return) global(branch_up_min_pos) global(dup_line_return) /* these three constants define how close branches of the tree can get */ global(branch_dist_prev) /* minimum distance from previous generation */ global(branch_dist_same) /* minimum distance from same generation */ global(branch_dist_next) /* minimum distance from next generation */ /* stacks for storing the information for each person on the chart */ /* see proc's enqueue_person and print_all_persons */ global(plist_person) /* the person (to extract name, birth, death) */ global(plist_depth) /* generation depth */ global(plist_pos) /* vertical position */ global(plist_line) /* 0,1 boolean, is direct ancestor? */ global(plist_mdate) /* marriage date */ global(plist_up) /* 0,1 boolean, person connects to next up level*/ global(plist_down) /* 0,1 boolean, person connects to next down level */ global(plist_duplic) /* 0,1 boolean, the person is a duplicate appearance */ global(plist_height) /* to store person height for ease of branch adjustment */ /* set for enabling originality of chart appearances by individuals */ global(original_person) global(original_depth) global(duplicate_anc_return) global(duplicate_return) /* stacks for storing the information for each vertical line on the chart */ /* see proc's enqueue_vertical and print_all_verticals */ global(llist_depth) /* generation depth */ global(llist_low) /* starting point */ global(llist_high) /* finishing point */ global(llist_color) /* line color */ global(llist_duplic) /* dashed lines for duplicates */ /* stacks for marking the beginning of a branch in the person and line lists */ global(branch_start_person) global(branch_start_line) global(ps_xlat) /* for a table to hold character translations */ global(opt_xlat) /* boolean, to control character translation */ global(opt_deparen) /* boolean, control removal of parenthesized name text */ /* keyword: SHORTEN uncomment the following 'include' command and verify that the included file contains subroutines for place name shortening */ /* include("shorten.lllib") */ /* ** function: interrogate_user ** ** This function is designed to be modified by the user. It asks ** many questions about how to configure the charts. If your answer ** to one of the questions is always the same, you can easily ** hardwire your answer here so that you are never asked again. ** ** An 'if' statement is wrapped around each question. The 'if(TRUE)' ** can be changed to an 'if(FALSE)' to make the program use the default ** value defined in the 'else' clause instead of asking every time. ** ** The questions are grouped in the following way: ** o CHART CONTENT -- root person, chart type, # gen, # gen sib, ** show half siblings, show half sibling ancestors, ** # gen half sibling ancestors, matrilinear/patrilinear drop line ** o LAYOUT -- multi-page and orientation, # pages for multi-page, ** root person on left or right, mothers or fathers at tops of branches ** o ADD-ONS -- border, title, label, label text, center label, ** label in/outside border ** o STYLE -- font, character encoding, color, desc. branch directions, ** bold lines of descent, bold line width factor, duplicate handling, ** display of non-birth relations ** o FORMAT OF INFORMATION -- date/place format, show 2nd names, ** address specifics, title before/after name, ** lower/upper-case surnames,max. length for names, ** removing parenthesized text from names ** o OUTPUT OPTIONS -- paper size/type, minimum margins, manual feed request ** PacificPage margin modification, filter some PostScript strings ** */ func interrogate_user() { /* CHART CONTENT */ /* ** QUESTION: Who is the root person? ** ** This question should always be asked, unless you always use the same ** person, which is not likely. If you do set a default, it is a string ** representation of that persons number. ** */ if(TRUE) { set(root_person, 0) getindimsg(root_person, "Identify root person for chart (blank to cancel)") if(not(root_person)) { return(0) /* signals abnormal termination of interrogate_user() */ } } else { set(root_person, indi("1")) } /* ** QUESTION: What type of chart? ** ** This should always be asked, unless you never use two of the three ** types of charts. ** */ if(TRUE) { list(options) setel(options, 1, "Ancestors") setel(options, 2, "Descendants and Spouses") setel(options, 3, "Direct Descendants (Drop line)") setel(options, 4, "Ancestors and Descendants of a Family (Combo.)") setel(options, 5, "Ancestors and Descendants of an Extended Family (Cousins)") setel(options, 6, "Multiple Charts (program editing required)") set(chart_type, menuchoose(options, "Select chart type:")) if(or(le(chart_type, 0), ge(chart_type, 7))) { return(0) /* signals abnormal termination of interrogate_user() */ } /* indiset(pset) addtoset(pset, root_person, 1) if(eq(lengthset(childset(pset)), 0) ) { print(" Printing ancestor chart as ", name(root_person), nl()) print(" has no known children.", nl()) set(chart_type, 1) } elsif(eq(lengthset(parentset(pset)), 0) ) { print(" Choose a chart with descendants as ", name(root_person), " has no known ancestors.", nl()) getintmsg(chart_type, "Specify chart type: 2/descendant, 3/drop line, 4/combo.") } else { getintmsg(chart_type, "Enter chart type: 1/anc., 2/des., 3/drop line, 4/combo., 5/cousins") } */ } else { set(chart_type, 1) } /* The following is code that pertains to the combination and cousin charts. No user-modification is needed between here and the next question. */ if(or( eq(chart_type, 4), eq(chart_type, 5) )) { print(" Choose a family via spouse...") set(root_fam, choosefam(root_person)) if(eq(root_fam, 0)) { return(0) /* signals abnormal termination of interrogate_user() */ } print(" done.", nl()) if(not(and(husband(root_fam), wife(root_fam)))) { print(" That family only has one parent.", nl()) print(" This chart-type requires a family with two parents.", nl()) return(0) } } /* ** QUESTION: How many generations should be shown? ** ** If there are less than this, then the page is filled anyway, ** so you only need to ask if you want a restricted number. ** */ if(TRUE) { set(min_depth, 1) set(max_depth, 1) if(ge(chart_type, 2)) { /* chart has descendants: gen #s go negative */ getintmsg(min_depth, "Maximum number of generations of descendants, including root") if(le(min_depth, 0)) { set(min_depth, 1) } } if(and( ne(chart_type, 2), ne(chart_type, 3) )) { /* chart has ancestors: gen #s go positive */ getintmsg(max_depth, "Maximum number of generations of ancestors, including root") if(le(max_depth, 0)) { set(max_depth, 1) } } } else { set(min_depth, 1) set(max_depth, 1) if(ne(chart_type, 1)) { set(min_depth, 4) } if(or( eq(chart_type, 1), eq(chart_type, 4), eq(chart_type, 5) )) { set(max_depth, 4) } } /* ** QUESTION: How many ancestral generations should show siblings? ** ** If you want to show siblings in all generations, set this default to 999. ** This question is only asked for ancestral charts. ** */ if(and( ne(chart_type, 2), ne(chart_type, 3) )) { if(FALSE) { getintmsg(depth_siblings, "How many ancestral generations to show siblings") } else { set(depth_siblings, 999) } } /* ** QUESTION: Should half siblings be shown? ** ** In the ancestral report, if a parent has had multiple marriages ** this determines whether the children of these marriages are shown ** in the aunts/uncles. They are placed above the father or below the ** mother with a thin vertical line in the aunt/uncle colour. ** */ if( and( ne(chart_type, 2), ne(chart_type, 3), gt(depth_siblings, 0))) { if(FALSE) { getintmsg(halfsib, "Enter 1 to show half-brothers/sisters, 0 to omit them") } else { set(halfsib, 1) } } /* ** QUESTION: Should ancestors of half siblings be shown? ** In the ancestral report, if a parent has had multiple marriages ** this determines whether the ancestors of these spouses are shown. */ if( and(ne(chart_type, 2), ne(chart_type, 3))) { if(FALSE) { if(halfsib) { getintmsg(halfsib_anc, "Enter 1 to show ancestors of half siblings, 0 to omit them") } } else { set(halfsib_anc, 1) } } /* QUESTION: In how many generations do you want to show ancestors ** of half siblings? ** ** This is the last generation in which, if there are half siblings shown, ** their ancestors will be shown, subject to the maximum depth limit. */ if( and(ne(chart_type, 2), ne(chart_type, 3))) { if(FALSE) { if(halfsib_anc) { getintmsg(depth_halfsib_anc, "Number of generations from which to show ancestors of half siblings") if(ge(depth_halfsib_anc, max_depth)) { set(depth_halfsib_anc, sub(max_depth, 1)) } } } else { set(depth_halfsib_anc, sub(max_depth, 1)) } } /* ** QUESTION: Do you want descendant lines be matrilinear/patrilinear? ** ** Currently only for dropline charts, this option allows the restriction ** of descendant lines followed to a particular gender. ** For branches that are cut off, a short horizontal line is drawn from a ** person towards the younger generation to indicate that the person has ** descendants. This is the same thing that is done when a person has ** descendants in that go off-chart. */ if(TRUE) { if(eq(chart_type, 3)) { getintmsg(desc_gender, "Enter 2 for patrilinear, 1 for matrilinear, 0 for all descendants") } else { set(desc_gender, 0) /* won't be used */ } } else { set(desc_gender, 0) } /* LAYOUT */ /* ** QUESTION: Do you want multi-page poster output, and select orientation. ** ** This controls whether (PostScript) output spans multiple pages. ** In PostScript, this is achieved by enlarging the chart and moving ** the plot origin to cause the desired portion of the chart to land in ** a clipped region of a given page. ** */ if(TRUE) { list(options) setel(options, 1, "Single page, in portrait") setel(options, 2, "Single page, in landscape") setel(options, 3, "Multi page, using portrait sheets of paper") setel(options, 4, "Multi page, using landscape sheets of paper") set(mc, menuchoose(options, "Select page type:")) if( eq(0, mc)) { return(0) } elsif( eq(1, mc)) { set(multi_page, 0) set(portrait, 1) } elsif( eq(2, mc)) { set(multi_page, 0) set(portrait, 0) } elsif( eq(3, mc)) { set(multi_page, 1) set(portrait, 1) } else { set(multi_page, 1) set(portrait, 0) } /* purge options list for later use */ list(options) /* new - RES */ /*while(length(options)) {set(mc, pop(options))}*/ } else { set(multi_page, 0) set(portrait, 1) } /* ** QUESTION: How many pages make up the poster? ** ** You will probably want to always ask this question. This question is ** asked if a poster chart is requested. ** */ if(multi_page) { if(TRUE) { getintmsg( x_pages, "Number of horizontal pages on finished chart") getintmsg( y_pages, "Number of vertical pages on finished chart") } else { set(x_pages, 1) set(y_pages, 2) } } else { set(x_pages, 1) set(y_pages, 1) } /* ** QUESTION: Should the younger generations be on the left or right? ** */ if(FALSE) { getintmsg( mirror_chart, "Enter younger generations on the left (0), or the right (1)") } else { set( mirror_chart, 1) } /* ** QUESTION: Should mothers appear at the tops of ancestral branches? */ if( and(ne(chart_type, 2), ne(chart_type, 3))) { if(TRUE) { getintmsg(mom_first, "Enter 1 to put mothers at top of anc. branches, 0 for fathers") } else { set(mom_first, 0) } } /* ADD-ONS */ /* ** QUESTION: Should a decorative border be shown? */ if(FALSE) { getintmsg(display_border, "Enter 1 to print a decorative border, 0 to print no border") } else { set(display_border, 1) } /* ** QUESTION: Should descriptive title be displayed? */ if(TRUE) { getintmsg(display_title, "Enter 1 to display descriptive title , 0 for no title") } else { set(display_title, 1) } /* ** QUESTION: Use an automaticly generated title, or a user-specified one? */ if(and(FALSE, display_title)) { getstrmsg(chart_title_override, "Enter chart title, or none to have one created automatically.") } else { set(chart_title_override, "") } /* ** QUESTION: Should a chart label be shown? ** ** The chart label identifies the preparer, and optionally, ** what would have been in the chart title, should one be omitted. */ if(FALSE) { getintmsg(display_label, "Enter 1 to display identifying label , 0 for no label") } else { set(display_label, 0) } /* ** QUESTION: What message (label) should be shown at the bottom of the chart? ** ** I suggest not asking this question, and setting a default credit with ** your name. The advantage of this is that you can have the date ** automatically inserted. ** */ set(label_set, 0) if(FALSE) { if(display_label) { getstrmsg(chart_label, "Label for corner of chart (your name, date)") set(chart_label, save(chart_label)) set(label_set, 1) } } if(not(label_set)) { /* want to make sure there is a label written to the PostScript file, */ /* in case user sets 'display_label' to true in PostScript output later */ dayformat(2) monthformat(4) dateformat(0) /* format for date, if used in 'rpt_name' or 'chart_label' */ set(rpt_name, "produced by Your Name, your web, e-mail, or mail address, for instance" ) if(display_title) { /* don't need to repeat information given in title */ set( chart_label, concat( save( stddate( gettoday() )), " ", rpt_name)) } else { set(chart_label, concat(save(stddate(gettoday())), " ", chart_title(), " ", rpt_name)) } } /* ** QUESTION: Should the chart_label be centered? ** ** Concerns the position on the first page (lower left) for the chart label. ** The choices are to center the label, or to put it near the left edge. ** */ if(display_label) { if(FALSE) { getintmsg(chart_label_centered, "Enter 1 to center chart label, 0 for left") } else { set(chart_label_centered, 0) } } /* ** QUESTION: Print label inside or outside the border? ** If both a border and the label are to be on a chart, it is possible ** to specify whether the label should go inside or outside the border. */ if( and(display_border, display_label)) { if(FALSE) { getintmsg(label_outside, "Enter 1 to place label outside border, 0 for inside") } else { set(label_outside, 1) } } else { set(label_outside, 1) } /* STYLE */ /* ** QUESTION: What font should be used for names? ** ** Because it is such a pain to enter a font name, and a spelling mistake ** will get you an ugly default font, this should be set to a default. I ** suggest one of: Times-Roman, NewCenturySchlbk-Roman, or ZapfChancery. ** Choosing the font via lists is provided primarily for when one is ** curious as to what the others look like on a chart. ** ** Search the Postscript code at bottom of this file for ideas (and spellings). ** Look for "bolddict" where font names and their bold equivalents are defined. ** When adding a new font choice, you should add the bold name (if one exists) ** in the PS code yourself, using the existing code as a guide. If your font ** doesn't have a bold version, then the font itself will be used when a bold ** font is called for. ** ** For fonts with characters that are to be placed right-to-left it may be ** necessary to add the font's name and an association with the 'rlshow' ** procedure within the PostScript code. This is done in the setup of a ** PostScript dictionary. Look for "fshowdict begin" below and follow ** existing code as an example. If that font also has a bold version, then ** do the same for it, or the font will be shown r-to-l but the bold version ** will go l-to-r. ** ** If a font encoding array (like ISOLatin1, provided by PostScript Level 2) ** is used with a font that uses non-standard character names, then many ** or all characters may not show (they get replaced with .notdef). ** In that case, in order to use the font, font reencoding should not be used. ** ** Some fonts don't specify a FontBBox -- the dimensions of a rectangle that ** will enclose any letter form, or glyph, from the font. In this case, ** the PostScript code produced may rely on estimating character dimensions ** by testing a few letters. Hershey-Gothic-English is such a font. */ if(TRUE) { set(font_name, choose_font("individual names")) if(not(font_name)) { return(0) } } else { /*set( font_name, "Times-Roman")*/ set( font_name, "ZapfChancery-MediumItalic") /*copyfile("/usr/local/lib/ghostscript/zcr.gsf")*/ /*copyfile("/usr/local/lib/ghostscript/zcb.gsf")*/ } /* ** QUESTION: Which font should be used for individual info (dates/places)? */ if(TRUE) { set(ifont_name, choose_font("individual info")) if(not(ifont_name)) { return(0) } } else { set(ifont_name, "Times-Roman") } /* ** QUESTION: Which, if any, character encoding to enforce? ** ** In some PostScript fonts, there are more characters available than ** the 256 integers (ASCII) used to represent different text characters. ** An encoding vector is used to assign a subset of the available glyphs or ** letterforms to the 256 character codes (0 through 255). ** This allows PostScript output to match the characters available to ** genealogy software on many platforms. ** ** However, if accented characters are not needed, or the encodings in ** the fonts are sufficient, then simply using ** an encoding built into a font file (no change) results in a smaller ** PostScript file. ** ** Printers may be incapable of composing accents with plain letters when ** an accented character is not directly available in a font. ** To get around this, printing the output through Ghostscript or converting ** the PostScript output to PDF with Ghostscript or other conversion utility ** should work. ** ** ISO-Latin 1, or ISO 8859-1, is a world-wide standard for most languages ** of Latin origin: Albanian, Basque, Breton, Catalan, Cornish, Danish, Dutch ** English, Faroese, Finish (exc. S,s,Z,z with caron), ** French (except OE, oe, and Y-with-dieresis), Frisian, Galician, German, ** Greenlandic, Icelandic, Irish Gaelic (new orthography), Italian, Latin, ** Luxemburgish, Norwegian, Portuguese, Rhaeto-Romanic, Scottish Gaelic, ** Spanish, Swedish. ** ** ISO Latin 2, or ISO 8859-2, covers these languages: Albanian, Croatian, ** Czech, English, German, Hungarian, Latin, Polish, Romanian (cedilla below ** S,s,T,t instead of comma), Slovak, Sloverian, Sorbian. */ if(TRUE) { list(options) setel(options, 1, "ISO Latin 1") setel(options, 2, "ISO Latin 2") setel(options, 3, "MS-DOS Codepage 437 (extended ASCII) international chars.") setel(options, 4, "let the font decide for me (use encoding specified in PS font)") set(enc_choice, menuchoose(options, "Select font reencoding, or (q) to use font's built-in encoding")) if(eq(enc_choice, 4)) { set(enc_choice, 0) } } else { set(enc_choice, 1) } /* ** QUESTION: Should color be used? ** ** If you don't have access to a color printer, you should probably turn ** off this question. ** */ if(FALSE) { getintmsg( color_chart, "Enter 0 for black/white, 1 for color") } else { set(color_chart, 1) } /* ** QUESTION: Which way should descendant branches go? ** ** The charting procedures can make decisions about branch directions, ** roughtly, choosing up for the first half and down for the second half ** of a person's descendant branches. ** This may be overriden by forcing all branches to go up or all to go down. */ if(FALSE) { if(and( ne(chart_type, 1) , ne(chart_type, 3))) { getintmsg( updown_override, "Desc. branch direction: -2: all up, 0: mix, 2: all down") } else { set(updown_override, 0) } } else { set(updown_override, 0) } /* ** QUESTION: Should the direct line of descent be put in bold? ** ** Puts the text and lines for the direct line in bold. ** */ if(FALSE) { getintmsg(bold_chart, "Enter 1 for bold direct line, 0 for all the same") } else { set(bold_chart, 1) } /* ** QUESTION: What scale factor should be used to make bold lines? ** ** The default value should be 2 or 3. ** A value of 1 will make bold lines look the same as non-bolded ones. */ if(and( FALSE, bold_chart)) { getintmsg(bold_factor, "Enter the bold factor for direct relation lines") } else { set(bold_factor, 3) } /* ** QUESTION: How should duplicate individuals be handled? ** ** When someone appears on a chart twice it can be helpful ** to mark the duplicate entries so they aren't thought to ** be different ancestors/descendants at first glance. ** ** The options are to print a duplicate's horizontal lines in ** a dashed style or to do that plus truncate a duplicate's ancestors ** (since they would possibly already appear on the chart). */ /* RES!? -has truncation of descendants been enabled yet? */ if(FALSE) { getintmsg(duplic_handling, "For duplicate individuals, make: 0 no change, 1 dashed, 2 truncated") } else { set(duplic_handling, 2) } /* ** QUESTION: Do you want to show non-birth or legal relatives ** (by adoption, fostering, or sealing relationsships) with ** thin light blue lines, same as for other non-blood relatives? ** Non-birth child-to-family (FAMC) connections are indicated ** (according to GEDCOM 5.5) with a PEDI subnode of the FAMC node. ** The recognized values for the PEDI subnode are ** Birth, Adopted, Foster, Sealed. */ if(TRUE) { getintmsg(opt_rel_famc, "Enter 1/0 for Adopted, Foster, and Sealing connections to be non-blood") } else { set(opt_rel_famc, 1) } /* FORMAT OF INFORMATION */ /* ** QUESTION: How should dates/places of birth/death/marriage be shown? ** ** This is actually three questions, or the same question for birth ** death and marriage dates. The codes cause the dates to be printed ** as follows. ** ** 0: do not show date ** 1: full date only ** [ LifeLines date() function ] ** 2: date and place, just year and State/Country ** [ LifeLines short() function ] ** 3: full date and full place, can get very long and thus smushed ** [ LifeLines long() function ] ** 4: full date and first item on PLAC line ** 5: full date and first two items on PLAC line ** 6: full date and first three items on PLAC line ** 7: year and up to two sufficient components from the PLAC line ** ** For more specific comments and the code that corresponds to these styles, ** search for "func dateplace(". ** To enable place modification or shortening, a date-place style that calls ** on the modify function must be used. Currently: 4, 5, 6, 7. ** keyword: SHORTEN */ if(FALSE) { set(dateplace_birth, 99) while( or( lt(dateplace_birth, 0), gt(dateplace_birth, max_dateplace))) { getintmsg(dateplace_birth, "Birth date style (0:no,1:date,2:short,3:long,4:d+1p,5:d+2p,6:d+3p,7:y+2p)") } set(dateplace_death, 99) while( or( lt(dateplace_death, 0), gt(dateplace_death, max_dateplace))) { getintmsg(dateplace_death, "Death date style (0:no,1:date,2:short,3:long,4:d+1p,5:d+2p,6:d+3p,7:y+2p)") } set(dateplace_marriage, 99) while( or( lt(dateplace_marriage, 0), gt(dateplace_marriage, max_dateplace))) { getintmsg(dateplace_marriage, "Marriage date style (0:no,1:date,2:short,3:long,4:d+1p,5:d+2p,6:d+3p,6:y+2p)") } set(dateplace_burial, 99) while( or( lt(dateplace_burial, 0), gt(dateplace_burial, max_dateplace))) { getintmsg(dateplace_burial, "Burial date style (0:no,1:date,2:short,3:long,4:d+1p,5:d+2p,6:d+3p,7:y+2p*)") } } else { set(dateplace_birth, 6) set(dateplace_death, 6) set(dateplace_marriage, 6) set(dateplace_burial, 6) } /* ** QUESTION: Is it ok to abbreviate (some) place components? ** ** Should a function made available in an external file via an include ** statement prior to this function (interrogate_user) be used to ** abbreviate some place components, such as country, state, or province ** names? */ if(FALSE) { getintmsg( place_modify, "Enter a 1 to allow place abbreviating, 0 to dissallow") } else { set(place_modify, 0) /* keyword: SHORTEN */ } /* ** QUESTION: Should second names be shown with person info? ** ** Should there be a second name for a person, is it to be shown ** with the other person info (in the same font size as the other info lines)? */ if(FALSE) { getintmsg( show_altname, "Enter 1 to show 2nd name as information, 0 to suppress") } else { set(show_altname, 1) } /* ** QUESTION: Should addresses be shown? ** ** Should a person's last address node be used to obtain a street address, ** phone number, and e-mail address? */ if(FALSE) { getintmsg( show_address, "Enter 1 to show address information, 0 to suppress") } else { set(show_address, 0) } /* ** QUESTION: Should any address node (ADDR, RESI) be used or ** just active ones (ADDR)? ** ** Notes: ADDR is a GEDCOM 5.5 standard. ** RESI is a GEDCOM 5.5 standard for a former, "resided at" ** address. This allows the ADDR node type to be used strictly ** for current addresses. */ if(show_address) { if(FALSE) { getintmsg(no_resides_at, "Enter 1 to show only current addresses, 0 for any address type") } else { set(no_resides_at, 0) } } /* ** QUESTION: How should an individual's title be used? ** ** I would leave this default set to 'guess' (3), or 'none' (0), if you ** don't want the titles. If you find a title that is guessed incorrectly, ** please send an e-mail to the maintainer. ** */ if(FALSE) { getintmsg(title_method, "Title method (0:none,1:prefix,2:suffix,3:guess)") } else { set(title_method, 3) } /* ** QUESTION: Should surnames be in upper case? ** */ if(FALSE) { getintmsg(surname_upper, "Enter 1 for surnames in upper case, 0 for as is") } else { set(surname_upper, 0) } /* ** QUESTION: What is the maximum length for names? ** ** It is best to just set a default maximum name length. If you want ** to always show the complete name, just set the default to 999. */ if(FALSE) { getintmsg(name_letters, "Maximum name length") } else { set(name_letters, 40) } /* ** QUESTION: Should parenthesized text be omitted from names in charts. ** ** This is to improve the chances that all important parts of a name ** are shown. Before names are cut to their length limit ** (name_letters, above) text within a full name that is parenthesized may ** be removed. The routine used will catch any logical pairings of ** '(' and ')' and can even handle nesting of parentheses. */ if(FALSE) { getintmsg(opt_deparen, "Enter 1 to remove parenthesized text from names, 0 otherwise.") } else { set(opt_deparen, 1) } /* OUTPUT OPTIONS */ /* ** QUESTION: What paper size is expected? ** ** This presents a list of paper sizes to choose from, or the option ** of a custom size. The custom size feature would be appropriate to ** make a chart that can be included as an EPS file in another document. ** ** The variables paper_height and paper_width are set to integer values ** corresponding to the page dimensions, in points (72 points = 1 inch)* ** Here are sizes and names taken from the PostScript news group's FAQ: Paper Size Dimension (in points) ------------------------------ --------------------- Comm #10 Envelope 297 x 684 C5 Envelope 461 x 648 DL Envelope 312 x 624 Folio 595 x 935 Executive 522 x 756 Letter 612 x 792 Legal 612 x 1008 Ledger 1224 x 792 Tabloid 792 x 1224 ** A0 2384 x 3370 A1 1684 x 2384 A2 1191 x 1684 A3 842 x 1191 A4 595 x 842 A5 420 x 595 A6 297 x 420 A7 210 x 297 A8 148 x 210 A9 105 x 148 B0 2920 x 4127 B1 2064 x 2920 B2 1460 x 2064 B3 1032 x 1460 B4 729 x 1032 B5 516 x 729 B6 363 x 516 B7 258 x 363 B8 181 x 258 B9 127 x 181 B10 91 x 127 * In PostScript and desktop publishing in general, points 1/72 inch, or .3527777778 mm. 1 pica = 12 points. In traditional typography, points are 1/72.27 inch, or .3514598035 mm. Metric resolutions are common with phototypesetters and supported by HTML, while laser and inkjet printers primarily use points or inches. **ISO 216 paper size system is based on the principle of doubling and halving to produce larger or smaller sizes, which are proportional to the original when rotated one quarter turn. The side length ratio which accomplishes this is 1 : 'square root of 2'. Size A0 has an area of one square meter. The fixed aspect ratio of the different size papers makes photocopier enlarging/reducing a breeze. Only the U.S. and Canada persist in their government and business use of non-ISO paper sizes, among industrialized nations. */ if(TRUE) { list(options) setel(options, 1, "Adaptive, maximum area available") setel(options, 2, "EPSF, custom size (single page)") setel(options, 3, "Letter, 8 1/2\" x 11\" or 612 x 792 points") setel(options, 4, "Legal, 8 1/2\" x 14\" or 612 x 1008 points") setel(options, 5, "Ledger (Tabloid), 11\" x 17\" or 792 x 1224 points") setel(options, 6, "A4, 595 x 842 points") setel(options, 7, "A3, 842 x 1191 points") setel(options, 8, "B5, 516 x 729 points") setel(options, 9, "B4, 729 x 1032 points") set(mc, menuchoose(options, "Select page size:")) if( eq(mc, 1)) { set(paper_name, "NONE") /* other paper_names are suitable for ps2pdf */ } elsif( eq(mc, 2)) { getintmsg(paper_width, "Enter image width, in points") getintmsg(paper_height, "Enter image height, in points") set(paper_name, "EPSF") set( multi_page, 0) set( x_pages, 1) set( y_pages, 1) } elsif( eq(mc, 3)) { /* Letter */ set(paper_width, 612) set(paper_height, 792) set(paper_name, "letter") } elsif( eq(mc, 4)) { /* Legal */ set(paper_width, 612) set(paper_height, 1008) set(paper_name, "legal") } elsif( eq(mc, 5)) { /* Ledger */ set(paper_width, 792) set(paper_height, 1223) set(paper_name, "ledger") } elsif( eq(mc, 6)) { /* A4 */ set(paper_width, 595) set(paper_height, 842) set(paper_name, "a4") } elsif( eq(mc, 7)) { /* A3 */ set(paper_width, 842) set(paper_height, 1191) set(paper_name, "a3") } elsif( eq(mc, 8)) { /* B5 */ set(paper_width, 516) set(paper_height, 729) set(paper_name, "b5") } elsif( eq(mc, 9)) { /* B4 */ set(paper_width, 729) set(paper_height, 1032) set(paper_name, "b4") } else { /* user must have chosen 'q'uit */ return(0) } } else { /* DEFAULT paper size, if the question is not to be asked */ /* copy from above, capitalization and spelling of name are important */ set(paper_name, "NONE") } /* ** QUESTION: Specify minimum margins for each side of the paper. ** ** The resulting PostScript file asks the printer how close to ** the edge of the paper it can print. ** If the maximum size chart is desired, set the margins to zero. ** ** For all but the Adaptive page size, if a margin is required, specify it ** here to ensure a margin at least that wide. ** Margins on printed pages may be wider if the printing device requires ** more distance from the edges of the paper. ** ** For the Adaptive page size, margins are subtracted from what the printing ** device gives as it's printing area. In this case, margins specified here ** are added onto the devices margins. ** Be aware that when converting to a PDF file, margins become fixed. ** This can result in edges of the intended output getting cropped by printing ** from a PDF viewer. If necessary, a shrink-to-fit option may be used ** with such viewers -or- the margins specified here may be made large ** enough to accomodate most printers self-imposed margins. 30 points may do. ** ** The answers to these questions should be to the nearest integer point value, ** 18 points = 1/4 inch, 36 points = 1/2 inch, 72 points = 1 inch. ** */ if(FALSE) { getintmsg(margin_top, "Minimum width of TOP margin") getintmsg(margin_bottom, "Minimum width of BOTTOM margin") getintmsg(margin_left, "Minimum width of LEFT margin") getintmsg(margin_right, "Minimum width of RIGHT margin") } else { set(margin_top, 30) set(margin_bottom, 30) set(margin_left, 30) set(margin_right, 30) } /* ** QUESTION: Do you want to try to tell the printer to request a manual feed? ** */ if( and( nestr(paper_name, "EPSF"), nestr(paper_name, "NONE"))) { if(TRUE) { getintmsg(manual_feed_opt, "Manual feed request: 0 don't specify, 1 on, 2 off") } else { set( manual_feed_opt, 0) } } else { set( manual_feed_opt, 0) } /* ** QUESTION: Use PostScript Level 1 or Level 2 paper size request? ** */ if( eq(manual_feed_opt, 1)) { if(TRUE) { set(postscript_level, 0) while( and( ne(postscript_level, 1), ne(postscript_level, 2))) { getintmsg(postscript_level, "Specify PostScript Level of printer: 1 or 2 (for 2 or higher)") } } else { set(postscript_level, 1) } } /* ** QUESTION: Use modification for PacificPage cartridge? ** ** Adds to the PostScript output a margin modification specific to this ** device. This PostScript modification should be left out for ** PostScript Level 1 compatibility. */ if(FALSE) { getintmsg(pacificpage, "Enter 1 for PacificPage modification, 0 to leave it out") } else { set(pacificpage, 0) } /* ** QUESTION: Do you want to filter some PostScript strings to protect ** PostScript files from errors. ** ** Unbalanced parentheses or lone backslash characters can cause problems in ** strings stored in PostScript files. This option enables their being ** made safer. */ if(FALSE) { getintmsg(opt_xlat, "Enter 1 to protect PostScript from dangerous characters, 0 otherwise") } else { set(opt_xlat, 1) } /* ** END OF QUESTIONS ** */ return(1) /* signals that all necessary questions were answered */ } /* ** function: choose_font ** ** Assists the user in selecting a font name. ** */ func choose_font(purpose) { list(options) setel(options, 1, "Roman") setel(options, 2, "Italic (default)") setel(options, 3, "Arabic") setel(options, 4, "Hebrew") set(ff, menuchoose(options, concat("Select font face for ", purpose, ": "))) if(eq(ff, 1)) { list(options) setel(options, 1, "Times Roman (default)") setel(options, 2, "New Century Schoolbook") setel(options, 3, "Garamond") setel( options, 4, "Hershey Plain") set(mc, menuchoose(options, "Select font family: ")) if( eq(2, mc)) { set(font_choice, "NewCenturySchlbk-Roman") } elsif( eq(3, mc)) { set(font_choice, "AGaramond-Regular") } elsif( eq(4, mc)) { set(font_choice, "Hershey-Plain") } else { set(font_choice, "Times-Roman") } } elsif(eq(ff, 2)) { list(options) setel(options, 1, "Times Italic (default)") setel(options, 2, "New Century Schoolbook Italic") setel(options, 3, "Garamond Italic") setel(options, 4, "ZapfChancery") set(mc, menuchoose(options, "Select font: ")) if(eq(1, mc)) { set(font_choice, "Times-Italic") } elsif(eq(2, mc)) { set(font_choice, "NewCenturySchlbk-Italic") } elsif(eq(3, mc)) { set(font_choice, "AGaramond-Italic") } elsif(eq(4, mc)) { set(font_choice, "ZapfChancery-MediumItalic") /*copyfile("/usr/local/lib/ghostscript/fonts/zcr.gsf")*/ /*copyfile("/usr/local/lib/ghostscript/fonts/zcb.gsf")*/ } else { set(font_choice, "Times-Italic") } } elsif(eq(ff, 3)) { list(options) setel(options, 1, "OmegaRsimms") setel(options, 2, "Baghdad") set(mc, menuchoose(options, "Select font: ")) if(eq(1, mc)) { set(font_choice, "OmArabicRsimms (default)") } elsif(eq(2, mc)) { set(font_choice, "Baghdad") } else { set(font_choice, "OmArabicRsimms") } } elsif(eq(ff, 4)) { list(options) setel(options, 1, "Jerusalem") set(mc, menuchoose(options, "Select font: ")) if(eq(1, mc)) { set(font_choice, "Jerusalem (default)") } else { set(font_choice, "Jerusalem") } } else { set(font_choice, 0) /* user must want to quit */ } return(font_choice) } /* ** procedure: main ** ** The main procedure. ** */ proc main() { /* set constants */ set(version, "ps-anc8.86, 4 Jul 2004") set(TRUE, 1) /* to make code in interrogate_user() */ set(FALSE, 0) /* more user friendly */ set(UP, neg(1)) /* constant, branch direction indicator */ set(NEUTRAL, 0) /* constant, branch direction indicator */ set(DOWN, 1) /* constant, branch direction indicator */ set(name_height, 1000) /* height to allow for name text */ set(date_height, 600) /* height to allow for date text */ set(branch_dist_prev, 1000) /* previous generation */ set(branch_dist_same, 1250) /* same generation */ set(branch_dist_next, 1000) /* next generation */ set(tighten, TRUE) /* ok for desc branches to be side-by-side */ set(corner_height, 1000) /* space between parent and extreme child -- name_height was formerly used for this*/ set(min_sibling_spacer, 500) /* force this much space between siblings */ set(max_dateplace, 6) /* number of date-place styles */ /* initialize other global variables and declare global stacks */ set(debug, FALSE) /* debugging output should depend on these */ set(debug2, FALSE) set(debug_postscript, TRUE) /* adds features to PostScript file: */ /* in PS file, set show_positions to 'true' */ print(nl()) /* trying to make screen output not get clobbered by LL menu */ if(interrogate_user()) { /* set options, some specified by user */ set(start_depth, 0) /* any posInteger or neg(posInteger) is ok */ /* make depths rel. to start_depth, and figure depth offset for array */ /*if(or( eq(chart_type, 1), eq(chart_type, 4), eq(chart_type, 5) )) {*/ if( and(ne(chart_type, 2), ne(chart_type, 3))) { set(depth_siblings, add(start_depth, sub(depth_siblings, 1))) set(depth_halfsib_anc, add(start_depth, sub(depth_halfsib_anc, 1))) } set( max_depth, add(start_depth, sub(max_depth, 1))) set( min_depth, sub(start_depth, sub(min_depth, 1))) set( high_pos_gen_offset, sub( 1, min_depth)) call initialize_data() /* declares and clears contents of lists */ if(place_modify) { /* keyword: SHORTEN these commands prepare for place abbreviation supported by an included program */ table(abbvtab) call setupabbvtab() } if(opt_xlat) { /* Initialize PostScript translation table to escape characters */ table(ps_xlat) insert(ps_xlat,"(","\\(") insert(ps_xlat,")","\\)") insert(ps_xlat,"\\","\\\\") } /* generate chart data */ if( eq(chart_type, 1)) { set(not_used, do_anc( root_person, start_depth, 0, 0, 0, 2, 0) ) } elsif( eq(chart_type, 2)) { set(not_used, do_des2(root_person, start_depth, 0, NEUTRAL, 2, 0, 0, 0)) } elsif( eq(chart_type, 4)) { call combo2() /* all the information it needs is global */ } elsif( eq(chart_type, 5)) { call do_cousins() /* all the information it needs is global */ } elsif( eq(chart_type, 3)) { set(not_used, dropline(root_person, start_depth, 0, FALSE, 2, 0)) } elsif( eq(chart_type, 6)) { /* With a few rules, you can put multiple charts in the same layout The first chart may be of any type, but for now, additional charts within the same layout must be among anc, des, and drop line. */ /* The combo and cousins charts insist on their central generation being at 'start_depth'. However, anc, des, and drop line charts may be started from any generation, specified in their 'depth' argument. */ /* Run the program, choose a person who has descendants (to avoid the automatic choice of ancestor chart) Give '5' for the chart type. If duplicate appearances happen accross different charts, then the lists original_person and original_depth must be init'ed between chart calls to keep them from being treated as duplicates, if desired. */ set(display_label, 1) set(chart_label_centered, 0) set(chart_label, "© Rugrats created by Arlene Klasky, Gabor Csupo and Paul Germain.") set(display_title, 1) set(chart_title_override, "The Rugrats") set(child_depth, sub(start_depth, 1)) set(root_person, indi("17")) /* Tommy Pickles */ set(root_fam, parents(root_person)) /* Stu & Didi */ call do_cousins() print("Done Stu & Didi.", nl()) set(root_person, indi("7")) /* Phil */ set(root_fam, parents(root_person)) call combo2() print("Done Phil & Lil", nl()) set(root_fam, fam("F1")) call combo2() /*set(root_person, indi("1"))*/ /* Chuckie Finster */ /*set(not_used, do_anc(root_person, child_depth, 0, 0, 0, 2, 0))*/ print("Done Chuckie.", nl()) set(root_person, indi("26")) /* Susie Carmichael */ set(root_fam, parents(root_person)) call combo2() print("Done Susie.", nl()) } print(" ", d(length(plist_person)), " individuals shown on the chart.",nl()) /* use chart data to create a PostScript file as output */ call write_ps(font_name, ifont_name, x_pages, y_pages, high_depth, low_depth) /* apply external file conversion/viewing command */ newfile(outfile(), TRUE) /* thump output buffer */ list(actions) list(choices) print("Output file full-name: ", outfile(), nl()) enqueue(choices, "Convert with 'ps2pdf'") if(eqstr(paper_name, "NONE")) { enqueue(actions, concat("ps2pdf -dPDFSETTINGS=/printer ", outfile(), " `echo ", outfile(), "|sed 's:\.ps:\.pdf:'` && rm -i ", outfile() )) } else { enqueue(actions, concat("ps2pdf -dPDFSETTINGS=/printer ", "-sPAPERSIZE=", paper_name, " ", outfile(), " `echo ", outfile(), "|sed 's:\.ps:\.pdf:'` && rm -i ", outfile() )) } /*enqueue(actions, concat("ps2pdf ", outfile())*/ enqueue(choices, "View with 'MacGhostViewX'") enqueue(actions, concat("open -a ", "/Applications/MacGhostViewX/MacGhostViewX.app ", outfile())) enqueue(choices, "Convert with 'PStill'") enqueue(actions, concat("open -a ", "/Applications/Stone\\ Studio/PStill.app ", outfile())) set(mc, menuchoose(choices, "Choose an action or (q)uit to leave as is")) if(mc) { print("performing: ", getel(actions, mc), nl()) system(getel(actions, mc)) } } } /* ** function: do_anc ** ** A recursive function to position persons on an ancestral chart. ** First, a recursive call is made to put the father on the chart. ** Where he is put on the chart determines the minimum position for ** the mother. Once the father and mother are put on the chart, the ** siblings are put on the chart. ** */ func do_anc(person, depth, person_minpos, marriage_date, has_des, rel, duplicate) { if( or( gt(depth, add(high_depth, 1)), eq(length(plist_person), 0)) ) { set(ceiling, FALSE) } else { set(ceiling, TRUE) } set(min_gap_set, FALSE) if(and(tighten, lt(depth, max_depth))) { call cloak(add(depth, 1)) } set(abs_min_pos, get_clearance(depth, 0)) if(gt(depth, max_depth)) { set(duplicate_anc_return, 0) set(min_gap_return, -1) return(max(person_minpos, abs_min_pos)) } set(fam, choosefamc(person)) set(rel_next, rel_famc(person, fam, rel)) if(fam) { /* make a var suitable for passing as a parameter */ set(has_anc, 1) } else { set(has_anc, 0) } if(mom_first) { set(par1, mother(person)) set(par2, father(person)) } else { set(par1, father(person)) set(par2, mother(person)) } set(notcutoff, not( and( eq(duplic_handling, 2), or(duplicate, blocked(person, depth)) ) )) /* Figure out number of siblings and total sibling height. */ /* Father is allowed to be older_sib_height above person_minpos. */ /* sibling_height will be min distance between the first and last */ /* sibling horizontal */ set(sibling_height, 0) set(older_sib_height, 0) set(num_not_younger, 1) /* count of prior sibling buffers space */ if(and( fam, le(depth, depth_siblings), notcutoff )) { set(num_siblings, nchildren(fam)) children(fam, child, cn) { if(eq(person, child)) { set(older_sib_height, sibling_height) if(gt(num_siblings, 1)) { set(older_sib_height, add(older_sib_height, corner_height)) } set(num_not_younger, cn) } if(ne(cn, num_siblings)) { set(sibling_height, add(sibling_height, person_height2(child, eq(child, person), marriage_date), min_sibling_spacer)) } call reserve(child, depth) } call reserve(fam, depth) } else { set(num_siblings, 1) call reserve(person, depth) } /* See if father had any other children by a different mother * and add up the space to show them. */ set(branch_top, max(sub(person_minpos, older_sib_height), abs_min_pos)) /* space for adjustment for cases except half-sibs with their ancestors */ if(ceiling) { set(min_gap, sub(branch_top, abs_min_pos)) } set(hsibling_height, 0) set(do_hs, 0) set(hs_line_start, 0) /* remember the people of this branch in case they have to be moved */ call remember_branch_start() /* for branch adjustment */ if(and( gt(nfamilies(par1), 1), le(depth, depth_siblings), halfsib, notcutoff )) { set(dup_line, 1) families(par1, fv, sv, nf) { /* if(ne(fam, fv)) {*/ /* RES: stopgap */ if(nestr(key(fam), key(fv))) { set(dup_line, and( dup_line, blocked(fv, depth))) if(and( halfsib_anc, le(depth, depth_halfsib_anc), notcutoff )) { call reserve(fv, depth) /* reserve since parents will show */ set(mdate, dateplace(marriage(fv), dateplace_marriage)) set(pos, do_anc(sv, add(depth, 1), add(branch_top, hsibling_height), mdate, 1, 0, duplicate) ) if(not(do_hs)){ set(hs_line_start, pos) /* top end of half sib. vertical */ set(branch_top, pos) /* this min_gap will be less than or equal to the previous one */ if(and(ceiling, ne(min_gap_return, -1))) { set(min_gap, min(min_gap_return, min_gap)) set(min_gap_set, TRUE) } set(do_hs, 1) } else { set(hs_bottom, pos) /* show children by previous spouse */ set(pos, distribute_children(fv_prev, branch_top, hs_bottom, hsibling_height, depth, rel_next) ) set(branch_top, hs_bottom) } set(fv_prev, fv) /* figure height of siblings by current spouse */ set(hsibling_height, corner_height) children(fv, child, cn) { set(hsibling_height, add(hsibling_height, person_height2(child, FALSE, 0), min_sibling_spacer)) call reserve(child, depth) } } else { children(fv, child, cn) { set(hsibling_height, add(hsibling_height, person_height2(child, FALSE, 0), min_sibling_spacer)) call reserve(child, depth) if(not(do_hs)) { set(do_hs, 1) } } } } } /* end families loop for stepfamilies via parent #1 */ } /* do father if he exists and is not too deep */ set(dad_min_pos, add(branch_top, hsibling_height) ) if(and( fam, lt(depth, max_depth), notcutoff )) { /* don't want to stretch the siblings, so constrain dad * * to be older_sib_height distance from person_minpos; * * it will get added back before placement of person */ set(dad_pos, do_anc(par1, add(depth, 1), dad_min_pos, dateplace(marriage(fam), dateplace_marriage), 1, rel_next, or(duplicate, blocked(person, depth))) ) set(first_sib_pos, add(dad_pos, corner_height)) set(dup_dad, duplicate_anc_return) if( and( ceiling, ne(min_gap_return, -1), not(min_gap_set) ) ) { set(min_gap, min(min_gap_return, min_gap)) set(min_gap_set, TRUE) } } else { /* didn't do dad */ set(dad_pos, dad_min_pos) if(gt(num_siblings, 1)) { /* if there are siblings then allow for just corner_height vert. * * line above first sibling when siblings aren't shown */ set(first_sib_pos, add(dad_pos, corner_height)) } else { set(first_sib_pos, dad_min_pos) } set(dup_dad, 0) } /* Do mother if she exists and is not too deep. */ /* Her branch, will be at least branch_dist_same from dad's branch. */ set(last_sib_pos, add(first_sib_pos, sibling_height)) set(mom_min_pos, last_sib_pos) if(and( fam, lt(depth, max_depth), notcutoff )) { set(mom_min_pos, add(mom_min_pos, corner_height)) set(mom_pos, do_anc(par2, add(depth, 1), mom_min_pos, 0, 1, rel_next, or(duplicate, blocked(person, depth))) ) set(last_sib_pos, sub(mom_pos, corner_height)) set(dup_mom, duplicate_anc_return) set(do_vertical_line, TRUE) } else { /* didn't do mom */ if(gt(num_siblings, 1)) { /* if more than one sibling then corner_height * * is added to siblings vertical line */ set(mom_pos, add(mom_min_pos, corner_height)) set(do_vertical_line, TRUE) } else { /* no vertical line */ set(mom_pos, mom_min_pos) set(do_vertical_line, FALSE) } set(dup_mom, 0) } /* find the spacer needed to line up siblings between mother and father */ set(extra, sub(sub(last_sib_pos, first_sib_pos), sibling_height)) set(spacer, div(extra, add(num_siblings, 1))) if(and( debug, lt(spacer, 0) )) { print(" Spacer<0 for ", name(person), "(", key(person), ")", nl()) print(" Dad_min_pos, dad_pos: ", d(dad_min_pos), ", ", d(dad_pos), nl()) print(" sibling_height: ", d(sibling_height), nl()) print(" Mom_min_pos, mom_pos: ", d(mom_min_pos), ", ", d(mom_pos), nl(), nl()) } /* Shift the parents' branches back up the page if possible. */ /* min_gap = space availble for upward shift */ /* compared with diff between anticipated person_pos and minimum person_pos */ /* - includes stretching of older siblings */ set(person_pos, add(dad_pos, older_sib_height, mul(num_not_younger, spacer))) set(gapshrink, sub(person_minpos, person_pos)) if(ceiling) { set(gapshrink, max(neg(min_gap), gapshrink)) } /* call branch_adjust to pop the branch_start* stacks, even if shift=0 */ call branch_adjust(gapshrink) if(ne(gapshrink, 0)) { /* adjust local position variables affected by branch shift */ set(dad_pos, add(dad_pos, gapshrink)) set(mom_pos, add(mom_pos, gapshrink)) set(first_sib_pos, add(first_sib_pos, gapshrink)) /*set(last_sib_pos, add(last_sib_pos, gapshrink))*/ /*RES-not used again */ if(do_hs) { set(branch_top, add(branch_top, gapshrink)) set(hs_line_start, add(hs_line_start, gapshrink)) } if(ceiling) { set(min_gap, min(0, add(min_gap, gapshrink))) } if(debug) { print(" ", make_thousandths(neg(gapshrink))) print(" units of space recovered for the branch of ", name(person), nl()) } } /* position siblings differently depending on whether there's more than 1 */ set(pos, first_sib_pos) if(and( le(depth, depth_siblings), gt(num_siblings, 1), notcutoff )) { children(fam, child, cn) { set(pos, add(pos, spacer)) /* if this is the ancestor, return the position and use marriage */ /* if(eq(child, person)) {*/ /*RES: stopgap measure for INDI equality problem in LL from CVS March 2004 */ if(eqstr(key(child), key(person))) { call enqueue_person(child, depth, pos, rel, marriage_date, 1, has_des, fam) set(do_anc_return, pos) set(duplicate_anc_return, duplicate_return) } else { call enqueue_person(child, depth, pos, half(rel_next), 0, 1, 0, fam) } /* increment position by height of person, used for high_pos */ set(pos, add(pos, person_height2(child, eq(child, person), marriage_date))) if(ne(cn, num_siblings)) { set(pos, add(pos, min_sibling_spacer)) } } /* end of children loop */ } else { /* depth > depth_siblings or person has no siblings */ if(do_vertical_line) { /* center person on vertical line of parent(s) */ set(pos, add(pos, spacer)) } call enqueue_person(person, depth, pos, rel, marriage_date, has_anc, has_des, fam) set(do_anc_return, pos) set(duplicate_anc_return, duplicate_return) /* increment position by height of person, used for */ /* high_pos and maternal half siblings line start */ set(pos, add(pos, person_height2(person, TRUE, marriage_date))) } if(do_vertical_line) { call enqueue_vertical(depth, dad_pos, mom_pos, rel_next, blocked(fam, depth)) /* pos is used in setting high_pos later */ set(pos, max(mom_pos, pos)) /* only if parents have been shown should a family be considered as shown */ if(and( lt(depth, max_depth), has_anc, not(blocked(fam, depth)) )) { call reserve(fam, start_depth) } } /* If father had any other kids by a different mother print them */ /* use hpos instead of pos to avoid messing up pos for high_pos setting */ if(do_hs) { if(and( halfsib_anc, le(depth, depth_halfsib_anc), notcutoff )) { set(hs_bottom, dad_pos) set(hpos, distribute_children(fv_prev, branch_top, hs_bottom, hsibling_height, depth, rel_next)) } else { set(hpos, branch_top) /*sub(dad_pos, hsibling_height)) */ set(hs_line_start, hpos) families(par1, fv, sv, nf) { /* if(ne(fam, fv)) {*/ /* RES: stopgap */ if(nestr(key(fam), key(fv))) { children(fv, child, un) { call enqueue_person(child, depth, hpos, half(rel_next), 0, 1, 0, fv) /* increment position by height of person */ set(hpos, add( hpos, person_height2(child, FALSE, 0), min_sibling_spacer)) } } } } call enqueue_vertical(depth, hs_line_start, dad_pos, half(rel_next), dup_line) } /* See if mother had any other children by a different father */ set(do_hs, 0) if(and( halfsib, le(depth, depth_siblings), gt(nfamilies(par2), 1), notcutoff )) { set(hs_line_start, mom_pos) /* pos here is from end of vertical line of parents */ set(branch_top, add(max(pos, add(mom_pos, corner_height)), min_sibling_spacer)) set(dup_line, 1) set(pos, branch_top) families(par2, fv, sv, nf) { /* if(ne(fam, fv)) {*/ /* RES: more stopgap measure */ if(nestr(key(fam), key(fv))) { set(dup_line, and(dup_line, blocked(fv, depth))) if(and( lt( depth, max_depth), halfsib_anc )) { set(do_hs, 1) call reserve(fv, depth) /* reserve since parents will show */ /* get height of stepfather's children */ set(hsibling_height, corner_height) children(fv, child, un) { set(hsibling_height, add(hsibling_height, person_height2(child, FALSE, 0), min_sibling_spacer)) call reserve(child, depth) } /* print ancestors of stepfather, including marriage date */ set(mdate, dateplace(marriage(fv), dateplace_marriage)) set(hs_bottom, do_anc(sv, add(depth, 1), add(branch_top, hsibling_height), mdate, 1, 0, duplicate) ) /* show this stepfather's children */ set(pos, distribute_children(fv, branch_top, hs_bottom, hsibling_height, depth, rel_next) ) set(branch_top, hs_bottom) } else { set(hs_bottom, pos) children(fv, child, un) { if(not(do_hs)) { /* first maternal half siblings group */ set(do_hs, 1) } call enqueue_person(child, depth, pos, half(rel_next), 0, 1, 0, fv) set(hs_bottom, pos) set(pos, add(pos, person_height2(child, FALSE, 0), min_sibling_spacer)) } } } } /* If there were any maternal half siblings draw the vertical line */ if(do_hs) { call enqueue_vertical(depth, hs_line_start, hs_bottom, half(rel_next), dup_line) } } if(ceiling) { set(min_gap_return, min_gap) } else { set(min_gap_return, -1) } call max_with_high_pos_gen(depth, pos) return(do_anc_return) } /* ** function: do_des2 ** ** Produces descendant branches which recursively do as follows: ** For the specified person, show all spouses and, if not at the generation ** limit, show in the next generation a descendant branch for each child ** by those spouses. ** ** Branches may be directed up or down, under the influence of the user ** option 'updown_override'. However, a person's marriages are always ** in database order from top to bottom. ** ** If the user option 'duplic_handling' specifies that truncation of ** a duplicate person's branch is prefered, this is done only if ** all of a person's marriages have been shown. */ func do_des2(person, depth, min_pos, updown, rel, has_anc, duplicate, famc) { set(rel, rel_famc(person, famc, rel)) set(nfam, nfamilies(person)) set(child_depth, sub(depth, 1)) if(eq(updown, NEUTRAL)) { if(or( and(mom_first, eqstr(sex(person), "F")), and(not(mom_first), eqstr(sex(person), "M")) )) { set(updown, direction(DOWN)) } else { set(updown, direction(UP)) } } set(notcutoff, not(and( eq(duplic_handling, 2), or(duplicate, blocked(person, depth)) ))) if(not(notcutoff)) { /* if we're about to cut off a branch... */ families(person, fv, sp, nf) { /* cut off only if all marriages are shown */ set(notcutoff, or(notcutoff, not(blocked(fv, depth)))) } } if(tighten) { call cloak(add(depth, 1)) call cloak(child_depth) } if(and( eq(updown, UP), notcutoff )) { if(or( lt(depth, sub(low_depth, 1)), and(lt(depth, low_depth), cloak_check(low_depth)) )) { set(ceiling, FALSE) } else { set(ceiling, TRUE) } call remember_branch_start() if(nfam) { set(line_top, branch_up(person, 0, depth, 1, rel)) set(person_pos, branch_up_min_pos) } else { set(person_pos, get_clearance(depth, min_pos)) } call enqueue_person(person, depth, person_pos, rel, 0, has_anc, nfam, famc) set(shift, sub(min_pos, person_pos)) if(ceiling) { set(shift, max(0, shift)) } call branch_adjust(shift) set(person_pos, add(person_pos, shift)) if(nfam) { set(line_top, add(line_top, shift)) call enqueue_vertical(child_depth, line_top, person_pos, rel, dup_line_return) } call max_with_high_pos_gen(depth, add(person_pos, person_height2(person, 0, 0))) } elsif(and( eq(updown, DOWN), notcutoff )) { set(person_pos, get_clearance(depth, min_pos)) set(person_extent, add(person_pos, person_height2(person, 0, 0))) if(nfam) { set(person_pos, branch_down(person, person_pos, person_extent, TRUE, 0, depth, 1, rel)) } else { call max_with_high_pos_gen(depth, person_extent) } call enqueue_person(person, depth, person_pos, rel, 0, has_anc, nfam, famc) } else { /* cut off this person's branch */ set(person_pos, get_clearance(depth, min_pos)) call enqueue_person(person, depth, person_pos, rel, 0, has_anc, 0, famc) set(person_extent, add(person_pos, person_height2(person, 0, 0))) call max_with_high_pos_gen(depth, person_extent) } return(person_pos) } /* ** procedure: distribute_children ** ** Given a family key, evenly space ** the children of the family in a vertical range determined ** by top and bottom positions of the range. ** ** sibling_height should include an extra corner_height to allow for ** vertical skip that balances with the mandatory corner_height skip that ** follows the last sibling's placement. ** */ /* RES - would be nice to either eliminate this pocedure or make it general enough to take on more tasks from do_anc */ func distribute_children(fam, top, bottom, sibling_height, depth, rel) { set(extra, sub(bottom, add(top, sibling_height))) set(spacer, div(extra, add(nchildren(fam), 1))) if(and(debug, lt(spacer, 0))) { print(" distribute_children: spacer < 0 !!\n") print(" top: ", d(top), " bottom: ", d(bottom), nl()) } set(pos, add(top, corner_height, spacer)) children(fam, child, num) { call enqueue_person(child, depth, pos, half(rel), 0, 1, 0, fam) set(pos, add( pos, person_height2(child, FALSE, 0), min_sibling_spacer, spacer)) } return(pos) } /* ** function: branch_up ** ** For a specific person, charts his/her spouses and the children/descendants ** by them. ** ** Shouldn't be called if nfamilies(person) is 0, or 1 when exclude_fam=0. ** To notify us of a problem, this function is designed to intentionally ** force an error message if there are no families to work with. That is ** because there is no good value to return in that case. */ /* RES -- add descriptions of the various return values to the above comment */ func branch_up(person, exclude_fam, depth, show_des, rel) { set(child_depth, sub(depth, 1)) set(nfam, nfamilies(person)) if(exclude_fam) { decr(nfam) } set(switch_fam, half(add(nfam, 1))) /* last family to branch up */ set(dup_line, 1) set(dir, UP) set(fnn, 0) if(tighten) { call cloak(add(depth, 1)) call cloak(child_depth) } set(spouse_minpos, get_clearance(depth, 0)) families(person, fv, sv, fn) { if(ne(fv, exclude_fam)) { incr(fnn) set(dup_line, and(dup_line, blocked(fv, depth))) call reserve(sv, depth) call reserve(fv, depth) if(tighten) { call cloak(sub(child_depth, 1)) } set(child_minpos, add(spouse_minpos, corner_height)) set(child_minpos, get_clearance(child_depth, child_minpos)) set(child_extent, 0) set(first_child_pos, child_minpos) if(gt(depth, min_depth)) { set(num_children, nchildren(fv)) set(switch_child, half(add(nchildren(fv), 1))) children(fv, child, cn) { if(show_des) { set(child_pos, do_des2(child, child_depth, child_minpos, dir, rel, 1, 0, fv)) } else { set(child_pos, child_minpos) call enqueue_person(child, child_depth, child_pos, rel, 0, 1, 0, fv) set(child_extent, add(child_pos, person_height2(child, 0, 0))) set(child_minpos, add(child_extent, min_sibling_spacer)) } if(eq(cn, 1)) { set(first_child_pos, child_pos) } if(eq(cn, num_children)) { set(spouse_minpos, add(child_pos, corner_height)) } if(and(eq(nfam, 1), eq(cn, switch_child))) { set(dir, DOWN) } } if(num_children) { call max_with_high_pos_gen(child_depth, child_extent) } } set(spouse_pos, sub(first_child_pos, corner_height)) if(eq(fnn, 1)) { set(branch_top, spouse_pos) } /* print("sp: ", d(spouse_pos), " bt: ", d(branch_top), " fnn: ", d(fnn), " fv: ", key(fv), nl()) */ if(le(depth, max_depth)) { set(mdate, dateplace(marriage(fv), dateplace_marriage)) call enqueue_person(sv, depth, spouse_pos, 0, mdate, 0, 1, 0) set(spouse_extent, add(person_height2(sv, TRUE, mdate), spouse_pos)) call max_with_high_pos_gen(depth, spouse_extent) if(not(blocked(fv, depth))) { call reserve(fv, start_depth) } set(spouse_minpos, max(add(get_high_pos_gen(depth), branch_dist_same), spouse_minpos)) } if(eq(fnn, switch_fam)) { set(dir, DOWN) } } } set(branch_up_min_pos, spouse_minpos) set(dup_line_return, dup_line) return(branch_top) } /* ** procedure: branch_down ** ** person_extent should be either the bottom of the info on the person, */ /* RES -- add descriptions of the various return values to the above comment also need to just fix the above comment */ func branch_down(person, prev_spouse_pos, prev_spouse_extent, adjustable, exclude_fam, depth, show_des, rel) { set(person_pos, prev_spouse_pos) set(child_depth, sub(depth, 1)) set(nfam, nfamilies(person)) if(exclude_fam) { decr(nfam) } set(switch_fam, half(nfam)) /* last family to branch up */ set(dup_line, 1) if(tighten) { call cloak(sub(child_depth, 1)) } set(child_minpos, add(prev_spouse_pos, corner_height)) set(child_minpos, get_clearance(child_depth, child_minpos)) set(dir, direction(UP)) set(fnn, 0) families(person, fv, sv, fn) { if(ne(fv, exclude_fam)) { incr(fnn) set(dup_line, and(dup_line, blocked(fv, depth))) call reserve(sv, depth) call reserve(fv, depth) if(tighten) { call cloak(sub(child_depth, 1)) } set(child_minpos, add(prev_spouse_pos, corner_height)) set(child_minpos, get_clearance(child_depth, child_minpos)) set(child_extent, 0) set(first_child_pos, child_minpos) set(last_child_pos, child_minpos) call remember_branch_start() if(gt(depth, min_depth)) { set(num_children, nchildren(fv)) set(switch_child, half(num_children)) /* favors DOWN when odd num_ch. */ if(and(eq(nfam, 1), eq(switch_child, 0))) { set(dir, direction(DOWN)) } children(fv, child, cn) { if(show_des) { set(child_pos, do_des2(child, child_depth, child_minpos, dir, rel, 1, 0, fv)) } else { set(child_pos, child_minpos) call enqueue_person(child, child_depth, child_pos, rel, 0, 1, 0, fv) set(child_extent, add(child_pos, person_height2(child, 0, 0))) set(child_minpos, add(child_extent, min_sibling_spacer)) } if(eq(cn, 1)) { set(first_child_pos, child_pos) } if(eq(cn, num_children)) { set(last_child_pos, child_pos) } if(and(eq(nfam, 1), eq(cn, switch_child))) { set(dir, direction(DOWN)) } } if(num_children) { call max_with_high_pos_gen(child_depth, child_extent) } } set(spouse_pos, add(last_child_pos, corner_height)) /* adjust children + spouse to keep spouse clear of prev parent info */ set(shift, max( 0, sub(add(prev_spouse_extent, branch_dist_same), spouse_pos) )) call branch_adjust(shift) set(first_child_pos, add(first_child_pos, shift)) set(spouse_pos, add(spouse_pos, shift)) if(and(eq(fnn, 1), adjustable)) { set(person_pos, add(prev_spouse_pos, min( sub(sub(first_child_pos, corner_height), prev_spouse_pos), max(0, sub(spouse_pos, add(prev_spouse_extent, branch_dist_same))) ))) } if(le(depth, max_depth)) { set(mdate, dateplace(marriage(fv), dateplace_marriage)) call enqueue_person(sv, depth, spouse_pos, 0, mdate, 0, 1, 0) set(spouse_extent, add(person_height2(sv, TRUE, mdate), spouse_pos)) } else { set(spouse_extent, name_height) } set(prev_spouse_pos, spouse_pos) set(prev_spouse_extent, spouse_extent) /* set next fam's child_minpos before this spouse can interfere */ set(child_minpos, add(prev_spouse_pos, corner_height)) set(child_minpos, get_clearance(child_depth, child_minpos)) if(le(depth, max_depth)) { call max_with_high_pos_gen(depth, spouse_extent) if(not(blocked(fv, depth))) { call reserve(fv, start_depth) } } if(eq(fnn, switch_fam)) { set(dir, direction(DOWN)) } } } if(gt(fnn, 0)) { call enqueue_vertical(child_depth, person_pos, spouse_pos, rel, dup_line) } return(person_pos) } /* ** function: dropline ** ** Generates a drop line chart of descendants of a person. ** The return value is the vertical position of the person's horizontal line. ** */ func dropline(person, depth, has_anc, duplicate, rel, famc) { set(rel, rel_famc(person, famc, rel)) set(abs_min_pos, get_clearance(depth, 0)) set(child_depth, sub(depth, 1)) set(low_depth, min(depth, low_depth)) set(high_depth, max(depth, high_depth)) set(notcutoff, not(and( eq(duplic_handling, 2), or(duplicate, blocked(person, depth)) ))) if(and(desc_gender, ne(depth, start_depth))) { set(notcutoff, and(notcutoff, or( and(eq(desc_gender, 1), eqstr(sex(person), "F")), and(eq(desc_gender, 2), eqstr(sex(person), "M")) ))) } call reserve(person, depth) set(line_to_kids, FALSE) set(vertical_line, FALSE) set(dup_line, TRUE) set(first_pos, abs_min_pos) set(last_pos, first_pos) set(child_pos, first_pos) call remember_branch_start() families(person, fam, spouse, fn) { set(dup_line, and(dup_line, blocked(fam, depth))) call reserve(fam, depth) children(fam, child, cn) { if(and(ge(child_depth, min_depth), notcutoff)) { set(child_pos, dropline(child, child_depth, TRUE, or(duplicate, blocked(person, depth)), rel, fam)) if(not(line_to_kids)) { set(first_pos, child_pos) } else { set(vertical_line, TRUE) } } set(line_to_kids, TRUE) } if(and( ge(child_depth, min_depth), not(blocked(fam, depth)), notcutoff)) { /* marriage, indicated by vert. line, is original on the chart */ call reserve(fam, start_depth) } } set(last_pos, child_pos) if(vertical_line) { call enqueue_vertical(child_depth, first_pos, last_pos, 2, dup_line) } set(this_pos, half(add(first_pos, last_pos))) set(shift, max(0, sub(abs_min_pos, this_pos))) call branch_adjust(shift) set(this_pos, add(this_pos, shift)) call enqueue_person(person, depth, this_pos, rel, 0, has_anc, line_to_kids, famc) /* RES - this could be made obsolete if done by enqueue_person */ /* maybe enqueue_person could return the person's extent */ set(this_extent, add(this_pos, person_height2(person, FALSE, 0))) call max_with_high_pos_gen(depth, this_extent) return(this_pos) } /* ** procedure: combo2 ** ** Show ancestors and descendants of a couple. */ proc combo2() { set(child_depth, sub(start_depth, 1)) if(mom_first) { set(par1, wife(root_fam)) set(par2, husband(root_fam)) } else { set(par1, husband(root_fam)) set(par2, wife(root_fam)) } set(mdate, dateplace(marriage(root_fam), dateplace_marriage)) set(num_siblings, nchildren(root_fam)) call reserve(root_fam, start_depth) call reserve(par1, start_depth) call reserve(par2, start_depth) if(gt(nfamilies(par1), 1)) { set(hline_top, branch_up(par1, root_fam, start_depth, 1, 1)) } call remember_branch_start() set(dad_pos, do_anc(par1, start_depth, 0, 0, 1, 2, 0) ) if(and( ge(num_siblings, 1), gt(start_depth, min_depth) )) { set(first_sib_pos, add(dad_pos, corner_height)) set(child_minpos, first_sib_pos) set(prev_pos, child_minpos) set(last_sib_pos, first_sib_pos) set(dir, direction(UP)) set(switch_child, half(add(nchildren(root_fam), 1))) children(root_fam, child, cn) { call cloak(start_depth) call remember_branch_start() set(this_pos, do_des2(child, child_depth, child_minpos, dir, 2, 1, 0, root_fam) ) set(prev_pos, this_pos) if(eq(cn, 1)) { set(first_sib_pos, this_pos) } if(eq(cn, num_siblings)) { set(last_sib_pos, this_pos) } if(eq(cn, switch_child)) { set(dir, direction(DOWN)) } } set(dad_minpos, sub(first_sib_pos, corner_height)) set(sibling_span, add( sub(last_sib_pos, first_sib_pos), mul(2, corner_height) )) } else { set(sibling_span, 0) set(dad_minpos, dad_pos) } set(shift, sub(dad_minpos, dad_pos)) call branch_adjust_first(shift) /* need to shift dad's ancestor branch */ set(dad_pos, dad_minpos) set(mom_minpos, add(dad_pos, sibling_span)) call remember_branch_start() call cloak(child_depth) set(mom_pos, do_anc(par2, start_depth, mom_minpos, mdate, 1, 2, 0) ) set(mom_shift, max(0, sub(mom_pos, mom_minpos))) call multi_branch_adjust(mom_shift, nchildren(root_fam)) /* dad's marriage line for other spouses do this now to avoid the vert line being shifted by multi_branch_adjust */ if(gt(nfamilies(par1), 1)) { call enqueue_vertical(child_depth, hline_top, dad_pos, 1, dup_line_return) } call enqueue_vertical(child_depth, dad_pos, mom_pos, 2, 0) set(not_used, branch_down(par2, mom_pos, 0, FALSE, root_fam, start_depth, 1, 1)) } /* ** procedure: do_cousins ** show a couple as married along with their ancestors, descendants, and ** the descendants of their siblings */ proc do_cousins() { set(child_depth, sub(start_depth, 1)) set(grand_depth, add(start_depth, 1)) set(num_sib, nchildren(root_fam)) set(mdate_root_fam, dateplace(marriage(root_fam), dateplace_marriage)) if(mom_first) { set(par1, wife(root_fam)) set(par2, husband(root_fam)) } else { set(par1, husband(root_fam)) set(par2, wife(root_fam)) } set(dfam, choosefamc(par1)) set(drel, rel_famc(par1, dfam, 2)) if(dfam) { set(num_dsib, nchildren(dfam)) set(mdate_dfam, dateplace(marriage(dfam), dateplace_marriage)) if(mom_first) { set(dpar1, wife(dfam)) set(dpar2, husband(dfam)) } else { set(dpar1, husband(dfam)) set(dpar2, wife(dfam)) } } else { set(dpar1, 0) set(dpar2, 0) set(num_dsib, 1) set(mdate_dfam, 0) } set(mfam, choosefamc(par2)) set(mrel, rel_famc(par2, mfam, 2)) if(mfam) { set(num_msib, nchildren(mfam)) set(mdate_mfam, dateplace(marriage(mfam), dateplace_marriage)) if(mom_first) { set(mpar1, wife(mfam)) set(mpar2, husband(mfam)) } else { set(mpar1, husband(mfam)) set(mpar2, wife(mfam)) } } else { set(mpar1, 0) set(mpar2, 0) set(num_msib, 1) set(mdate_mfam, 0) } call reserve(par1, start_depth) call reserve(par2, start_depth) call reserve(root_fam, start_depth) if(dfam) { /* this is enough to catch extra appearances in anc branches */ call reserve(dpar1, grand_depth) call reserve(dpar2, grand_depth) call reserve(dfam, grand_depth) families(dpar1, fv, sv, fn) { /* claim originality for start_depth people */ children(fv, cv, cn) { call reserve(cv, start_depth) families(cv, cfv, csv, cfn) { call reserve(cfv, start_depth) } } } families(dpar2, fv, sv, fn) { if(ne(sv, dpar1)) { children(fv, cv, cn) { call reserve(cv, start_depth) families(cv, cfv, csv, cfn) { call reserve(cfv, start_depth) } } } } } if(mfam) { call reserve(mpar1, grand_depth) call reserve(mpar2, grand_depth) call reserve(mfam, grand_depth) families(mpar1, fv, sv, fn) { /* claim originality for start_depth people */ children(fv, cv, cn) { call reserve(cv, start_depth) families(cv, cfv, csv, cfn) { call reserve(cfv, start_depth) } } } families(mpar2, fv, sv, fn) { if(ne(sv, mpar1)) { children(fv, cv, cn) { call reserve(cv, start_depth) families(cv, cfv, csv, cfn) { call reserve(cfv, start_depth) } } } } } print(" Determining relative spacing of 1st parent's ancestors...\n") if(gt(nfamilies(dpar1), 1)) { set(hline_top, branch_up(dpar1, dfam, grand_depth, FALSE, half(drel))) call cloak(start_depth) } set(ddad_pos, do_anc(dpar1, grand_depth, 0, mdate_dfam, 1, drel, 0) ) set(ddad_minpos, ddad_pos) set(dmom_pos, do_anc(dpar2, grand_depth, ddad_minpos, 0, 1, drel, 0) ) set(dmom_relpos, sub(dmom_pos, ddad_pos)) if(not(blocked(dfam, grand_depth))) { call reserve(dfam, start_depth) } /* RES interferes with relative position figuring of the grandparents */ /* RES need to just replace this with a reserving of the spouses and children */ /* set(not_used, branch_down(dpar2, dmom_pos, 0, FALSE, dfam, grand_depth, FALSE, half(drel))) */ print(" Determining relative spacing of 1st parent's siblings...\n") set(child_minpos, add(ddad_minpos, corner_height)) set(prevpos, child_minpos) if(gt(num_dsib, 1)) { list(dsib_relpos) set(dir, direction(UP)) /* all of 1st parent's siblings can branch up */ set(cnn, 0) children(dfam, child, cn) { if(ne(child, par1)) { set(cnn, add(cnn, 1)) call cloak(grand_depth) set(thispos, do_des2(child, start_depth, child_minpos, dir, half(drel), 1, 0, dfam)) setel(dsib_relpos, cn, sub(thispos, prevpos)) set(prevpos, thispos) if(eq(cnn, 1)) { set(first_dsib_pos, thispos) setel(dsib_relpos, cn, 0) } if(eq(cnn, sub(num_dsib, 1))) { set(last_dsib_pos, thispos) set(dad_minpos, add(thispos, person_height2(child, FALSE, 0), branch_dist_same)) } } } /* ddad_minpos might be affected by up-branching of descendants */ set(ddad_minpos, sub(first_dsib_pos, corner_height)) } else { set(first_dsib_pos, child_minpos) set(last_dsib_pos, first_dsib_pos) set(dad_minpos, add(ddad_minpos, corner_height)) } print(" Determining relative spacing of the family's descendants...\n") if(gt(nfamilies(par1), 1)) { call cloak(grand_depth) set(line_top, branch_up(par1, root_fam, start_depth, TRUE, 1)) set(dad_minpos, max( dad_minpos, add(get_high_pos_gen(start_depth), branch_dist_same) )) } set(dad_relpos, sub(dad_minpos, last_dsib_pos)) set(older_dsib_height, sub(dad_minpos, ddad_minpos)) set(prevpos, add(dad_minpos, corner_height)) set(child_minpos, prevpos) if( and(gt(num_sib, 0), ge(child_depth, min_depth)) ) { list(sib_relpos) set(dir, direction(UP)) set(switch_child, half(add(nchildren(root_fam), 1))) children(root_fam, child, cn) { call cloak(start_depth) set(thispos, do_des2(child, child_depth, child_minpos, dir, 2, 1, 0, root_fam) ) setel(sib_relpos, cn, sub(thispos, prevpos)) set(prevpos, thispos) if(eq(cn, 1)) { set(first_sib_pos, thispos) setel(sib_relpos, cn, 0) } if(eq(cn, num_sib)) { set(last_sib_pos, thispos) } if(eq(cn, switch_child)) { set(dir, direction(DOWN)) } } } else { set(first_sib_pos, child_minpos) set(last_sib_pos, first_sib_pos) } set(sib_span, add(sub(last_sib_pos, first_sib_pos), mul(2, corner_height))) /* place dad corner_height before his first child */ set(dad_pos, max( dad_minpos, sub(first_sib_pos, corner_height) )) if(gt(num_dsib, 1)) { /* commented out because it can cause first parent to push away from siblings*/ /* set(dad_relpos, sub(dad_pos, last_dsib_pos))*/ set(older_dsib_height, sub(dad_pos, ddad_minpos)) } set(dsib_span, add(older_dsib_height, corner_height)) set(spacer1, div( max(0, sub(dmom_relpos, dsib_span)), add(num_dsib, 1) )) set(ddad_minpos, max( ddad_minpos, sub(sub(dad_pos, older_dsib_height), mul(num_dsib, spacer1)) )) call enqueue_person(par1, start_depth, dad_pos, 2, mdate_root_fam, 1, 1, 0) set(par1_extent, add(dad_pos, person_height2(par1, TRUE, mdate_root_fam))) call max_with_high_pos_gen(start_depth, par1_extent) print(" Determining relative spacing of the 2nd parent's ancestors...\n") /* RES - up-branch above mother would have parent(s) that block mdad from determining how close he can go to dmom's branch if(gt(nfamilies(mpar1), 1)) { call cloak(child_depth) set(hline_top, branch_up(mpar1, mfam, grand_depth, FALSE, half(mrel))) } */ call cloak(start_depth) /* RES - necessary due to par1 info lines ? */ set(mdad_pos, do_anc(mpar1, grand_depth, 0, mdate_mfam, 1, mrel, 0)) set(mdad_relpos, sub(mdad_pos, dmom_pos)) call cloak(start_depth) set(mmom_pos, do_anc(mpar2, grand_depth, mdad_pos, 0, 1, mrel, 0) ) set(mmom_relpos, sub(mmom_pos, mdad_pos)) if(not(blocked(mfam, grand_depth))) { call reserve(mfam, start_depth) } set(not_used, branch_down(mpar2, mmom_pos, 0, FALSE, mfam, grand_depth, FALSE, half(mrel))) set(mom_pos, max( add(last_sib_pos, corner_height), add(get_high_pos_gen(start_depth), branch_dist_same) )) call enqueue_person(par2, start_depth, mom_pos, 2, 0, 1, 1, 0) set(par2_extent, add(mom_pos, person_height2(par2, FALSE, 0))) call max_with_high_pos_gen(start_depth, par2_extent) set(not_used, branch_down(par2, mom_pos, 0, FALSE, root_fam, start_depth, TRUE, 1)) print(" Determining relative spacing of 2nd parent's siblings...\n") set(prevpos, mom_pos) set(child_minpos, add(mom_pos, person_height2(par2, FALSE, 0), branch_dist_same)) if(gt(num_msib, 1)) { list(msib_relpos) set(dir, direction(DOWN)) /* all of 2nd parent's siblings branch down */ set(cnn, 0) children(mfam, child, cn) { if(ne(child, par2)) { incr(cnn) call cloak(grand_depth) call cloak(child_depth) /* RES experimental */ set(thispos, do_des2(child, start_depth, child_minpos, dir, half(mrel), 1, 0, mfam)) setel(msib_relpos, cn, sub(thispos, prevpos)) set(prevpos, thispos) if(eq(cnn, sub(num_msib, 1))) { set(last_msib_pos, thispos) } } } } else { set(last_msib_pos, prevpos) } set(msib_span, sub(add(last_msib_pos, corner_height), sub(mom_pos, corner_height)) ) set(spacer2, div( max(0, sub(mmom_relpos, msib_span)), add(num_msib, 1) )) call initialize_data() /*------------------------cousin middle-------------------------------------*/ print(" Determining final positions on the chart...\n") call reserve(root_fam, start_depth) call reserve(par1, start_depth) call reserve(par2, start_depth) if(dfam) { /* this is enough to catch extra appearances in anc branches */ call reserve(dpar1, grand_depth) call reserve(dpar2, grand_depth) call reserve(dfam, grand_depth) families(dpar1, fv, sv, fn) { /* claim originality for start_depth people */ children(fv, cv, cn) { call reserve(cv, start_depth) families(cv, cfv, csv, cfn) { call reserve(cfv, start_depth) } } } families(dpar2, fv, sv, fn) { if(ne(sv, dpar1)) { children(fv, cv, cn) { call reserve(cv, start_depth) families(cv, cfv, csv, cfn) { call reserve(cfv, start_depth) } } } } } if(mfam) { call reserve(mpar1, grand_depth) call reserve(mpar2, grand_depth) call reserve(mfam, grand_depth) families(mpar1, fv, sv, fn) { /* claim originality for start_depth people */ children(fv, cv, cn) { call reserve(cv, start_depth) families(cv, cfv, csv, cfn) { call reserve(cfv, start_depth) } } } families(mpar2, fv, sv, fn) { if(ne(sv, mpar1)) { children(fv, cv, cn) { call reserve(cv, start_depth) families(cv, cfv, csv, cfn) { call reserve(cfv, start_depth) } } } } } if(gt(nfamilies(dpar1), 1)) { set(hline_top, branch_up(dpar1, dfam, grand_depth, FALSE, half(drel))) call cloak(start_depth) } set(ddad_pos, do_anc(dpar1, grand_depth, ddad_minpos, mdate_dfam, 1, drel, 0)) if(gt(nfamilies(dpar1), 1)) { call enqueue_vertical(start_depth, hline_top, ddad_pos, half(drel), dup_line_return) } if(debug2) { if(ne(ddad_minpos, ddad_pos)) { print(" ddad appears to be slipping...", nl()) print(" ", d(ddad_minpos), " -> ", d(ddad_pos), nl()) } } set(prevpos, add(ddad_pos, corner_height)) set(dir, direction(UP)) children(dfam, child, cn) { if(ne(child, par1)) { set(child_minpos, add(prevpos, getel(dsib_relpos, cn), spacer1)) call cloak(grand_depth) set(prevpos, do_des2(child, start_depth, child_minpos, dir, half(drel), 1, 0, dfam)) if(and(debug, ne(prevpos, child_minpos))) { print(name(child), " child_minpos != actual\n") } } else { if(ne(cn, num_dsib)) { print("The first parent has been moved to last in his/her sibling order.", nl()) } } } call remember_branch_start() set(dad_minpos, add(prevpos, dad_relpos)) if(gt(nfamilies(par1), 1)) { call cloak(grand_depth) set(hline_top, branch_up(par1, root_fam, start_depth, TRUE, 1)) set(dad_pos, max(branch_up_min_pos, add(get_high_pos_gen(start_depth), branch_dist_same)) ) } /* HERE */ call enqueue_person(par1, start_depth, dad_pos, 2, mdate_root_fam, 1, 1, 0) set(par1_extent, add(dad_pos, person_height2(par1, TRUE, mdate_root_fam))) call max_with_high_pos_gen(start_depth, par1_extent) set(dad_minpos, add(prevpos, dad_relpos, spacer1)) call branch_adjust(max(0, sub(dad_minpos, dad_pos))) set(dad_pos, max(dad_minpos, dad_pos)) if(gt(nfamilies(par1), 1)) { call enqueue_vertical(child_depth, hline_top, dad_pos, 1, dup_line_return) } set(dmom_minpos, add(dad_pos, corner_height, spacer1)) call cloak(start_depth) /* to ignore dsibs */ set(dmom_pos, do_anc(dpar2, grand_depth, dmom_minpos, 0, 1, drel, 0)) if(debug2) { if(ne(dmom_minpos, dmom_pos)) { print(" dmom appears to be slipping...", nl()) print(d(dmom_minpos), " -> ", d(dmom_pos), nl()) } } call enqueue_vertical(start_depth, ddad_pos, dmom_pos, drel, blocked(dfam, grand_depth)) if(not(blocked(dfam, grand_depth))) { call reserve(dfam, start_depth) } set(not_used, branch_down(dpar2, dmom_pos, 0, FALSE, dfam, grand_depth, FALSE, half(drel))) /* RES - new25jun 1 line*/ set(mdad_minpos, max(add(dmom_pos, mdad_relpos), get_high_pos_gen(start_depth))) if(gt(nfamilies(mpar1), 1)) { call remember_branch_start() set(hline_top, branch_up(mpar1, mfam, grand_depth, FALSE, half(mrel))) /* RES - new22jun */ set(shift, max(0, sub(mdad_minpos, branch_up_min_pos))) call branch_adjust(shift) set(hline_top, add(hline_top, shift)) call cloak(start_depth) } /* RES - max with mdad_minpos + c.h. + sp2 is a safeguard */ set(mom_pos, max( add(dad_pos, sib_span), add(mdad_minpos, corner_height, spacer2))) set(mdad_minpos, max(mdad_minpos, sub(sub(mom_pos, corner_height), spacer2))) call cloak(start_depth) set(mdad_pos, do_anc(mpar1, grand_depth, mdad_minpos, mdate_mfam, 1, mrel, 0)) if(gt(nfamilies(mpar1), 1)) { call enqueue_vertical(start_depth, hline_top, mdad_pos, half(mrel), dup_line_return) } set(mmom_minpos, add(mdad_pos, max(mmom_relpos, msib_span)) ) set(spacer, div( max(0, sub(sub(mom_pos, dad_pos), sib_span)), add(num_sib, 1) )) set(prevpos, add(dad_pos, corner_height)) if(ge(child_depth, min_depth)) { set(dir, direction(UP)) set(switch_child, half(add(nchildren(root_fam), 1))) children(root_fam, child, cn) { set(child_minpos, add(prevpos, getel(sib_relpos, cn), spacer)) call cloak(start_depth) set(prevpos, do_des2(child, child_depth, child_minpos, dir, 2, 1, 0, root_fam)) if(debug) { if(ne(child_minpos, prevpos)) { print(" ! Descendant branch slipping down page ! (", name(child), ")\n") print(" As a result, there will be extra space above the branch.\n") } } if(eq(cn, switch_child)) { set(dir, direction(DOWN)) } } } if(gt(add(prevpos, spacer, corner_height), mom_pos)) { print(" 2nd parent will be moved to compensate for descendant slippage\n") set(mom_pos, max(mom_pos, add(prevpos, spacer, corner_height))) } /* RES - fix unknown reason why mom has no corner between her and mpar1 */ set(mom_pos, max(mom_pos, add(mdad_pos, corner_height, spacer2))) call enqueue_person(par2, start_depth, mom_pos, 2, 0, 1, 1, 0) set(par2_extent, add(mom_pos, person_height2(par2, FALSE, 0))) call max_with_high_pos_gen(start_depth, par2_extent) call enqueue_vertical(child_depth, dad_pos, mom_pos, 2, 0) set(not_used, branch_down(par2, mom_pos, 0, FALSE, root_fam, start_depth, TRUE, 1)) set(prevpos, mom_pos) set(dir, direction(DOWN)) children(mfam, child, cn) { if(ne(child, par2)) { set(child_minpos, add(prevpos, getel(msib_relpos, cn), spacer2)) call cloak(grand_depth) call cloak(child_depth) set(prevpos, do_des2(child, start_depth, child_minpos, dir, half(mrel), 1, 0, mfam)) } else { if(ne(cn, num_msib)) { print("The second parent has been moved to first in his/her sibling order.", nl()) } } } set(mmom_minpos, max(mmom_minpos, add(prevpos, corner_height, spacer2))) call cloak(start_depth) /* to ignore msibs */ set(mmom_pos, do_anc(mpar2, grand_depth, mmom_minpos, 0, 1, 2, 0) ) if(and(debug, ne(mmom_pos, mmom_minpos))) { print(" mmom appears to be slipping...", nl()) print(" ", d(mmom_minpos), " -> ", d(mmom_pos), nl()) } call enqueue_vertical(start_depth, mdad_pos, mmom_pos, mrel, blocked(mfam, grand_depth)) if(not(blocked(mfam, grand_depth))) { call reserve(mfam, start_depth) } set(not_used, branch_down(mpar2, mmom_pos, 0, FALSE, mfam, grand_depth, FALSE, half(mrel))) } /*========================== end of charting functions ======================*/ /* ** function: rel_famc ** ** Checks for a pedigree tag on a FAMC link to determine if the relationsship ** is not by birth. Returns 0 if not birth or echoes the relationship passed ** in otherwise. */ func rel_famc(ind, fam, rel) { if(or(not(opt_rel_famc), not(fam))) { return(rel) } set(ped_label, pedigree(ind, fam)) if(eq(1, index(lower(ped_label), "birth", 1))) { return(rel) } else { return(0) } } /* ** function: pedigree ** ** Returns a string identifying the nature of a child-to-family (FAMC) link. ** Different relationships are indicated by a subnode tag of PEDI which may ** have the following values: Birth, Adopted, Foster, Sealed */ func pedigree(ind, fam_match) { if(or(not(ind), not(fam_match))) { return(0) } set(pedi_label, "") fornodes(inode(ind), node) { if(eqstr(tag(node), "FAMC")) { set(fam_this, fam(value(node))) if(eq(fam_this, fam_match)) { set(birth_famc, 1) set(pedi_label, "Birth (assumed)") fornodes(node, subnode) { if(eqstr(tag(subnode), "PEDI")) { set(birth_famc, 0) set(pedi_label, value(subnode)) if( or( eqstr(pedi_label, "Birth"), eqstr(pedi_label, "birth")) ) { set(birth_famc, 1) } elsif(eqstr(pedi_label, "")) { print("! ", name(indi), " has a FAMC.PEDI node with no value.", nl()) } } } } } } return(pedi_label) } /* ** function: choosefamc ** ** Offers the choice of parent families of a child when there are several, ** as with adoption, fostering, or sealing (LDS). ** A child-to-family link is indicated by a FAMC tag with a family ** cross-reference in an individual's GEDCOM record. ** */ func choosefamc(ind) { if(not(ind)) { return(0) } list(choices) table(fams) fornodes(inode(ind), node) { if(eqstr(tag(node), "FAMC")) { set(choice, "") set(choice, concat("FAMC ", value(node))) set(fam_this, fam(value(node))) set(birth_famc, 1) set(pedi_label, "Birth (assumed)") fornodes(node, subnode) { if(eqstr(tag(subnode), "PEDI")) { set(birth_famc, 0) set(pedi_label, value(subnode)) if( or( eqstr(pedi_label, "Birth"), eqstr(pedi_label, "birth")) ) { set(birth_famc, 1) } elsif(eqstr(pedi_label, "")) { print(" ", name(indi), " has a FAMC.PEDI node with no value.", nl()) } break() } } set(choice, concat(choice, " ", pedi_label)) enqueue(choices, choice) insert(fams, d(length(choices)), fam_this) } } if(empty(choices)) { return(0) } if(eq(length(choices), 1)) { set(mc, 1) } else { set(mc, menuchoose(choices, concat("Choose a parent family of ", name(ind)))) if(eq(mc, 0)) { return(0) } } return(lookup(fams, d(mc))) } /* ** procedure: reserve ** ** */ proc reserve(person, depth) { if(and(person, duplic_handling)) { /* better code for LL 3.0.5 users -tentative*/ /* problem seems to be that inlist only returns T/F, not position */ /* set(n, inlist(original_person, person)) if(ne(n, 0)) { set(level, getel(original_depth, n)) if(le( abs(sub(depth, start_depth)), abs(sub(level, start_depth)) )) { setel(original_depth, n, depth) } } else { enqueue(original_person, key(person)) enqueue(original_depth, depth) } */ set(on_list, 0) forlist(original_person, i, n) { if(eqstr(key(person), i)) { set(on_list, 1) set(level, getel(original_depth, n)) if(le( abs(sub(depth, start_depth)), abs(sub(level, start_depth)) )) { setel(original_depth, n, depth) } break() } } if(not(on_list)) { enqueue(original_person, key(person)) enqueue(original_depth, depth) } } } /* ** function: blocked ** ** Return 1 if individual is blocked by a reservation at an earlier depth, ** 0 otherwise */ func blocked(person, depth) { set(ans, 0) if(not(person)) { return(ans) } if(duplic_handling) { /* better code for LL 3.0.5 users -tentative*/ /* set(n, inlist(original_person, person)) if(ne(n, 0)) { if(gt( abs(sub(depth, start_depth)), abs( sub(level, start_depth)) )) { set(ans, 1) break() } } */ forlist(original_person, i, n) { if(eqstr(key(person), i)) { set(level, getel(original_depth, n)) /* only block appearances farther away from root than original person */ if(gt( abs(sub(depth, start_depth)), abs(sub(level, start_depth)) )) { set(ans, 1) break() } } } } return(ans) } /* ** procedure: remember_branch_start ** ** pushes lengths of person and line lists onto special stacks ** */ proc remember_branch_start() { push(branch_start_person, add(length(plist_pos), 1)) push(branch_start_line, add(length(llist_low), 1)) set(bsp, length(branch_start_person)) set(bsl, length(branch_start_line)) if(ne(bsp, bsl)) { print("! for some reason, a fragment of a branch mark was left behind\n") print(" length(branch_start_person): ", d(bsp), nl()) print(" length(branch_start_line): ", d(bsl), nl()) } } /* ** procedure: branch_adjust ** ** 'shift' is the signed distance of the adjustment, ** positive for down the chart. ** ** Originally written to recover space when younger siblings get spread ** apart and their first parent branch has room to move back up the page. ** Now this task has been made general enough to be able to shift any branch ** in either direction, vertically. -- by Robert Simms */ proc branch_adjust(shift) { set(start_plist, pop(branch_start_person)) set(start_llist, pop(branch_start_line)) if(and(ne(shift, 0), ge(length(plist_depth), start_plist))) { /* initialize low_depth_this_branch and high_depth_this_branch */ set(low_depth_this_branch, getel(plist_depth, start_plist)) set(high_depth_this_branch, low_depth_this_branch) forlist(plist_depth, stored_depth, pc) { if(ge(pc, start_plist)) { /* find the depth range from plist_depth */ set(low_depth_this_branch, min(low_depth_this_branch, stored_depth)) set(high_depth_this_branch, max(high_depth_this_branch, stored_depth)) } } /* make adjustment in global lists */ forlist(plist_pos, stored_pos, pc) { if(ge(pc, start_plist)) { setel(plist_pos, pc, add(stored_pos, shift)) } } forlist(llist_low, stored_pos, pc) { if(ge(pc, start_llist)) { setel(llist_low, pc, add(stored_pos, shift)) } } forlist(llist_high, stored_pos, pc) { if(ge(pc, start_llist)) { setel(llist_high, pc, add(stored_pos, shift)) } } set(depth_val, low_depth_this_branch) while(le(depth_val, high_depth_this_branch)) { set(stored_pos, get_high_pos_gen(depth_val)) /* don't need to do this for current depth of caller because * high_pos_gen has likely already been read and will be set by caller * after use of this procedure. Leave it just in case -- it's easier. */ call set_high_pos_gen(depth_val, add(stored_pos, shift)) incr(depth_val) } } } /* ** procedure: branch_adjust_first ** ** 'shift' is the signed distance of the adjustment, ** positive for down the chart. ** ** this procedure will adjust the first branch delimited by 'markers' ** (markers are indices stored in branch_start_person and branch_start_line ** that refer to the various plist_ and llist_ lists that store person and line ** vertical coordinates. */ proc branch_adjust_first(shift) { set(start_plist, dequeue(branch_start_person)) set(start_llist, dequeue(branch_start_line)) if(gt(length(branch_start_person), 0)) { set(stop_plist, getel(branch_start_person, 1)) } else { set(stop_plist, add(length(plist_person), 1)) } if(gt(length(branch_start_line), 0)) { set(stop_llist, getel(branch_start_line, 1)) } else { set(stop_llist, add(length(llist_low), 1)) } if(and(ne(shift, 0), ge(length(plist_depth), start_plist))) { /* initialize low_depth_this_branch and high_depth_this_branch */ set(low_depth_this_branch, getel(plist_depth, start_plist)) set(high_depth_this_branch, low_depth_this_branch) forlist(plist_depth, stored_depth, pc) { if(and(ge(pc, start_plist), lt(pc, stop_plist))) { /* find the depth range from plist_depth */ set(low_depth_this_branch, min(low_depth_this_branch, stored_depth)) set(high_depth_this_branch, max(high_depth_this_branch, stored_depth)) } } /* make adjustment in global lists */ forlist(plist_pos, stored_pos, pc) { if(and(ge(pc, start_plist), lt(pc, stop_plist))) { setel(plist_pos, pc, add(stored_pos, shift)) } } forlist(llist_low, stored_pos, pc) { if(and(ge(pc, start_llist), lt(pc, stop_llist))) { setel(llist_low, pc, add(stored_pos, shift)) } } forlist(llist_high, stored_pos, pc) { if(and(ge(pc, start_llist), lt(pc, stop_llist))) { setel(llist_high, pc, add(stored_pos, shift)) } } set(depth_val, low_depth_this_branch) while(le(depth_val, high_depth_this_branch)) { set(stored_pos, get_high_pos_gen(depth_val)) /* don't need to do this for current depth of caller because * high_pos_gen has likely already been read and will be set by caller * after use of this procedure. Leave it just in case -- it's easier. */ /* doing this under the assumption that nothing has been placed beneath this branch on the chart*/ call set_high_pos_gen(depth_val, add(stored_pos, shift)) incr(depth_val) } } } /* ** procedure: multi_branch_adjust ** ** 'shift' is the signed distance of the adjustment, ** positive for down the chart. ** ** Originally written to recover space when younger siblings get spread ** apart and their first parent branch has room to move back up the page. ** Now this task has been made general enough to be able to shift any branch ** in either direction, vertically. -- by Robert Simms */ proc multi_branch_adjust(total_shift, nbranches) { set(i, 1) set(stop_plist, dequeue(branch_start_person)) set(stop_llist, dequeue(branch_start_line)) while(le(i, nbranches)) { set(start_plist, stop_plist) set(start_llist, stop_llist) set(stop_plist, dequeue(branch_start_person)) set(stop_llist, dequeue(branch_start_line)) set(shift, div(mul(i, total_shift), add(nbranches, 1))) if(and(ne(shift, 0), ge(length(plist_depth), start_plist))) { /* initialize low_depth_this_branch and high_depth_this_branch */ set(low_depth_this_branch, getel(plist_depth, start_plist)) set(high_depth_this_branch, low_depth_this_branch) forlist(plist_depth, stored_depth, pc) { if(and(ge(pc, start_plist), lt(pc, stop_plist))) { /* find the depth range from plist_depth */ set(low_depth_this_branch, min(low_depth_this_branch, stored_depth)) set(high_depth_this_branch, max(high_depth_this_branch, stored_depth)) } } /* make adjustment in global lists */ forlist(plist_pos, stored_pos, pc) { if(and(ge(pc, start_plist), lt(pc, stop_plist))) { setel(plist_pos, pc, add(stored_pos, shift)) /* RES - won't be necessary when highest person in each gen is tracked */ call max_with_high_pos_gen(getel(plist_depth, pc), add(stored_pos, shift, getel(plist_height, pc))) } } forlist(llist_low, stored_pos, pc) { if(and(ge(pc, start_llist), lt(pc, stop_llist))) { setel(llist_low, pc, add(stored_pos, shift)) } } forlist(llist_high, stored_pos, pc) { if(and(ge(pc, start_llist), lt(pc, stop_llist))) { setel(llist_high, pc, add(stored_pos, shift)) } } } incr(i) } /* MUST reassess high_pos_gen for each gen in [low, high] this branch */ /* set(depth_val, low_depth_this_branch) while(le(depth_val, high_depth_this_branch)) { set(stored_pos, get_high_pos_gen(depth_val)) call set_high_pos_gen(depth_val, add(stored_pos, div(mul(sub(nbranches, 1), shift), nbranches))) incr(depth_val) } */ } /* ** procedure: max_with_high_pos_gen ** ** handles the updating of the highest position (down) on the page ** in a particular generation and over all generations */ proc max_with_high_pos_gen(depth, pos) { /* update the highest position array, or set it for the first time */ set(prev_high, get_high_pos_gen(depth)) call set_high_pos_gen(depth, max(pos, prev_high)) } /* ** functions: calc_high_pos_text & calc_high_pos_line ** ** Determines maximum of all entries in ** high_pos_gen array and llist_high list, respectively. ** */ /* RES!!! Really need to search over plist_pos -- but we need pos+extent which means plist_extent will need to be created (that will help with accurate knowledge of highest element anyway) */ func calc_high_pos_text() { set(high_pos_text, get_high_pos_gen(low_depth)) set(depth_val, low_depth) while(le(depth_val, high_depth)) { set(high_pos_text, max(high_pos_text, get_high_pos_gen(depth_val))) incr(depth_val) } return(high_pos_text) } func calc_high_pos_line() { set(high_pos_line, getel(llist_high, 1)) forlist(llist_high, x, pc) { set(high_pos_line, max(high_pos_line, x)) } return(high_pos_line) } /* ** functions: calc_low_pos_text & calc_low_pos_line ** ** Determines minimum of all entries in ** plist_pos array and llist_low list, respectively. ** */ func calc_low_pos_text() { set(low_pos_text, get_high_pos_gen(low_depth)) forlist(plist_pos, x, pc) { set(low_pos_text, min(low_pos_text, x)) } return(low_pos_text) } func calc_low_pos_line() { set(low_pos_line, getel(llist_low, 1)) forlist(llist_low, x, pc) { set(low_pos_line, min(low_pos_line, x)) } return(low_pos_line) } /* ** function: get_clearance ** ** handles the determination of a minimum position down the chart ** necessary for a person to stay clear of others already on the chart ** */ func get_clearance(depth, min_pos) { set(next_depth, sub(depth, 1)) set(prev_depth, add(depth, 1)) set(new_min_pos, min_pos) if(high, get_high_pos_gen(prev_depth)) { if(not(cloak_check(prev_depth))) { set(new_min_pos, max(add(high, branch_dist_prev), new_min_pos)) } } if(high, get_high_pos_gen(depth)) { set(new_min_pos, max(add(high, branch_dist_same), new_min_pos)) } if(high, get_high_pos_gen(next_depth)) { if(not(cloak_check(next_depth))) { set(new_min_pos, max(add(high, branch_dist_next), new_min_pos)) } } list(cloaked_depth) return(new_min_pos) } /* ** procedure cloak ** ** To be called just before a main charting procedure. ** Enables temporary hidding of a generation from get_clearance() ** so that generations closer to the root don't interfere with placement of ** branches in adjacent generations, such as with placement of maternal ** ancestor branches. */ proc cloak(depth) { push(cloaked_depth, depth) } /* ** function not_cloaked ** ** Checks whether a generation has been hidden from get_clearance... ** if not then TRUE is returned, ** if yes then FALSE is returned and the hidden status is cleared. */ func not_cloaked(depth) { if(inlist(cloaked_depth, depth)) { list(cloaked_depth) return(FALSE) } else { return(TRUE) } } /* ** function cloak_check ** ** Returns true or false depending on whether a depth is the cloaked_depth. */ func cloak_check(depth) { return(inlist(cloaked_depth, depth)) } /* ** procedure: set_high_pos_gen ** & ** function: get_high_pos_gen ** ** They simplify access to the high_pos_gen list. ** LifeLines lists are indexed from 1. In order to allow generation ** (depth) numbers to span an arbitrary range of integers, it is necessary ** to translate the depth range to one that has a minimum value of 1. ** The global variable high_pos_gen_offset is the amount necessary ** to translate the depths. ** */ proc set_high_pos_gen(depth, pos) { if(and(ge(depth, min_depth), le(depth, max_depth))) { set(low_depth, min(low_depth, depth)) set(high_depth, max(high_depth, depth)) /* not using max(pos, get_high_pos_gen(depth)) because * * branch_adjust() might need to decrease these numbers */ setel(high_pos_gen, add(depth, high_pos_gen_offset), pos) } else { print(" ! Attempt to access array out of bounds: set_high_pos_gen()\n") print(" position: ", d(pos), " depth: ", d(depth), nl()) } } func get_high_pos_gen(depth) { if(and(ge(depth, low_depth), le(depth, high_depth))) { set(ans, getel(high_pos_gen, add(depth, high_pos_gen_offset))) } else { set(ans, 0) } return(ans) } /* ** function: person_height2 ** ** Return the height of a single person's information. ** All lines of information on a person that print_person() may issue ** should be accounted for here. ** The name is assumed to be in the database. So this height will always ** be at least name_height. The dates are checked for in the person's record. ** ** A TRUE (non-zero) value for the second parameter along with a non-zero ** marriage date (third parameter) will result in ** an extra date_height being added to the person's height corresponding ** to the assumed intention of including the marriage date when the ** associated enqueue_person() call is made. ** It is thus the responsibility of the calling code to determine when to ** use a marriage date. */ func person_height2(person, use_mdate, mdate) { /* determine height of person and put in global var person_height_return */ set(num_info_lines, 0) set(person_height_return, name_height) if(show_altname) { if(altname, name2(person)) { incr(num_info_lines) } } if(dateplace(birth(person), dateplace_birth)) { incr(num_info_lines) } if(and(use_mdate, mdate)) { incr(num_info_lines) } if(dateplace(death(person), dateplace_death)) { incr(num_info_lines) } if(dateplace(burial(person), dateplace_burial)) { incr(num_info_lines) } set(num_info_lines, add(num_info_lines, address_ps(person, FALSE)) ) set(person_height_return, add(person_height_return, mul(num_info_lines, date_height)) ) return(person_height_return) } /* ** function: dateplace ** ** Get the date of an event in the appropriate style (which may include ** the place). Comments below describe the date styles. ** */ func dateplace(ev, style) { if(or( eq(ev, 0), eq(style, 0) )) { set(dateplace_return, 0) } /* 1 - use only the date value */ if(eq(style, 1)) { set(dateplace_return, save(date(ev))) } /* 2 - use only the year and/or LAST place component (no modification) */ if(eq(style, 2)) { set(dateplace_return, save(short(ev))) } /* 3 - use VERBATIM values from date and place (no modification) */ if(eq(style, 3)) { set(dateplace_return, save(long(ev))) } /* 4 - date value and the FIRST component of the place */ if(eq(style, 4)) { if(long(ev)) { if(place(ev)) { list(pl) extractplaces(ev, pl, np) set(where, modify(dequeue(pl))) if(eqstr(date(ev), "")) { set(dateplace_return, save(where)) } else { set(dateplace_return, save(concat(date(ev), ", ", where))) } } else { set(dateplace_return, save(date(ev))) } } else { set(dateplace_return, 0) } } /* 5 - date value and the FIRST TWO components of the place */ if(eq(style, 5)) { if(long(ev)) { if(place(ev)) { list(pl) extractplaces(ev, pl, np) if(eq(1, np)) { set(where, modify(dequeue(pl))) } else { set(where, concat(modify(dequeue(pl)), ", ", modify(dequeue(pl)))) } if(eqstr(date(ev), "")) { set(dateplace_return, save(where)) } else { set(dateplace_return, save(concat(date(ev), ", ", where))) } } else { set(dateplace_return, save(date(ev))) } } else { set(dateplace_return, 0) } } /* 6 - date value and the first THREE components of the place */ if(eq(style, 6)) { if(long(ev)) { if(place(ev)) { list(pl) extractplaces(ev, pl, np) if(eq(1, np)) { set(where, modify(dequeue(pl))) } elsif(eq(2, np)) { set(where, concat(modify(dequeue(pl)), ", ", modify(dequeue(pl)))) } else { set(where, concat( modify(dequeue(pl)), ", ", modify(dequeue(pl)), ", ", modify(dequeue(pl)) )) } if(eqstr(date(ev), "")) { set(dateplace_return, save(where)) } else { set(dateplace_return, save(concat(date(ev), ", ", where))) } } else { set(dateplace_return, save(date(ev))) } } else { set(dateplace_return, 0) } } /* 7 - For US places, in the format "city, county, state, country" where any one component implies that all less specific ones are present, this style will choose, when available, the country, state, county and state, or city and state If enabled, place modification (abbreviation) is applied to the country (when the only place item) or the state (when NOT the only place item). */ if(eq(style, 7)) { if(long(ev)) { if(place(ev)) { list(pl) extractplaces(ev, pl, np) if(eq(1, np)) { set(where, modify(getel(pl,1))) } elsif(eq(np, 2)) { set(where, getel(pl, 1)) } elsif(eq(np, 3)) { set(where,concat(getel(pl, 1), ", ", modify(getel(pl, 2)))) } elsif(ge(np, 4)) { set(where, concat(getel(pl, sub(np, 3)), ", " , modify(getel(pl, sub(np, 1))))) } if(eqstr(date(ev), "")) { set(dateplace_return, save(where)) } else { set(dateplace_return, save(concat(year(ev), ", ", where))) } } else { set(dateplace_return, save(year(ev))) } } else { set(dateplace_return, 0) } } if(ge(style, 7)) { set(dateplace_return, 0) print(" error: invalid date style code", nl()) } return(dateplace_return) } /* ** function: address_ps ** ** Prints address info as PostScript strings, if the print_flag is non-zero. ** Returns a count of the number of info lines whether or not info is printed. ** ** Finds last address or residence of PERSON by traversing ** all ADDR (GEDCOM 5.5), ** and RESI (GEDCOM 5.5) ** nodes. ** Here are some examples: ** 1 ADDR 122 Oak Street ** 2 CONT Somewhere, MO 55555 ** 1 PHON 501-555-1212 ** 1 EMAI itsme@sofa.net ** or ** 1 RESI ** 2 ADDR 122 Oak Street ** 3 CONT Somewhere, MO 55555 ** 2 DATE from 23 Dec 1996 ** ** Phone and e-mail information is printed as well. ** */ func address_ps(person, print_flag) { set(lines_return, 0) if(not(and(person, show_address))) { return(lines_return) } list(addrlist) set(addrnode, FALSE) set(found_addr, FALSE) traverse(inode(person), node, lev) { if(eq(lev, 1)) { if(eqstr(tag(node),"ADDR")) { set(addrnode, node) set(found_addr, TRUE) } elsif(and( eqstr(tag(node),"RESI"), not(no_resides_at), not(found_addr) )) { set(addrnode, node) } } } if(addrnode) { if(eqstr(tag(addrnode), "RESI")) { set(addrflag, "* ") set(newnode, 0) traverse(addrnode, node, lev) { if(and( eq(parent(node), addrnode), or(eqstr(tag(node), "ADDR"), eqstr(tag(node), "PLAC") ))) { set(newnode, node) } } if(newnode) { set(addrnode, newnode) } else { print("RESI node with no ADDR subnode, for ", name(person), nl()) } } else { set(addrflag, "! ") } if(gt(strlen(place(addrnode)), 23)) { if(debug) { print(" caught a long place node, for ", name(person), nl()) } extractplaces(addrnode, addrlist, np) /* RES - might be better to do this with a stack, to handle more than 2 */ set(line1, 0) set(line1, modify(dequeue(addrlist))) set(line2, 0) if(not(empty(addrlist))) { set(line2, concat(line2, modify(dequeue(addrlist)))) } while(not(empty(addrlist))) { set(line2, concat(line2, " ", modify(dequeue(addrlist)))) } if(print_flag) { "(" addrflag strxlat(ps_xlat, line1) ")" "(" addrflag strxlat(ps_xlat, line2) ")" } set(lines_return, 2) } elsif(gt(strlen(place(addrnode)), 0)) { print(" caught an empty place/addr node, for ", name(person), nl()) if(print_flag) { "(" addrflag strxlat(ps_xlat, place(addrnode)) ")" } set(lines_return, 1) } else { set(line1, 0) set(line1, modify(value(addrnode))) if(not(line1)) { print("ADDR node with no address info with tag, for ", name(person), nl()) set(lines_return, 0) } else { if(print_flag) { "(" addrflag strxlat(ps_xlat, line1) ")" } set(lines_return, 1) traverse(addrnode, subnode, lev) { if(and(eq(parent(subnode), addrnode), eqstr(tag(subnode), "CONT") )) { set(line2, modify(value(subnode))) if(print_flag) { "(" addrflag strxlat(ps_xlat, line2) ")" } incr(lines_return) } } } } } traverse(inode(person), subnode, lev) { if(or( eqstr(tag(subnode), "EMAI"), eqstr(tag(subnode), "PHON") )) { incr(lines_return) if(print_flag) { "(" "! " strxlat(ps_xlat, value(subnode)) ")" } } if(eqstr(tag(subnode), "PLACE")) { print("5-letter subnode tag: PLACE, for ", name(person), nl()) } if(eqstr(tag(subnode), "EMAIL")) { print("5-letter subnode tag: EMAIL, for ", name(person), nl()) } } return(lines_return) } /* ** function: name2 ** ** Returns the name from the second NAME node, or a 0 (FALSE) if none. ** This function attempts to format the name as is done to other names ** elsewhere in the program. The difficulty lies in LifeLines having ** name formatting commands that only that work only with the first NAME ** node of a person, and not on NAME nodes or strings. */ func name2(ind) { if(not(ind)) { return(0) } set(altnamenode, 0) set(found_one, FALSE) traverse(inode(ind), node, lev) { if(eq(lev, 1)) { if(eqstr(tag(node), "NAME")) { if(not(found_one)) { set(found_one, TRUE) } else { set(altnamenode, node) break() } } } } if(altnamenode) { list(parts) extractnames(altnamenode, parts, np, sni) set(altname, "") forlist(parts, nstr, si) { if(and(ge(si, sni), surname_upper)) { set(altname, concat(altname, upper(nstr), " ")) } else { set(altname, concat(altname, nstr, " ")) } } set(altname, trim(altname, sub(strlen(altname), 1))) } else { set(altname, 0) } return(altname) } /* ** function: modify ** ** Use a function (shorten), possibly accessed via an "include" statement ** prior to the main() procedure code block. ** The purpose of which is to modify place strings. ** If the global variable 'place_modify' is set to FALSE, then place strings ** will be returned unaltered. keyword: SHORTEN ** */ func modify(old) { if(and(strlen(old), place_modify)) { if(index(old, ",", 1)) { /* is this a string with commas? */ list(pl) extracttokens(old, pl, np, ",") set(new, "") if(gt(length(pl), 0)) { set(new, shorten(dequeue(pl))) while(gt(length(pl), 0)) { set(new, concat(new, ", ", shorten(dequeue(pl)))) } } } else { set(new, shorten(old)) } } else { set(new, old) } if(debug) { print("modify: ", old, " -> ", new, nl())} return(new) } /* ** function: strxlat ** ** If there is a chance that text containing unbalanced parentheses may ** be written to a PostScript file as a string (which is delimited with ** parentheses) then at least the lone parentheses must be escaped, meaning ** preceeded by a '\' character. The appearance of '\' characters in such ** strings must also be escaped. ** This function returns a string with all parentheses and ** backslash characters escaped. ** This idea was copied and/or adapted from Jim Eggert's modification ** to the ps-circ(le) program for LifeLines. ** A typical call would look like: ** set(str, strxlat(ps_xlat, name(person))) ** which would translate characters in person's name according to the ** table called ps_xlat. The output is assigned to str. ** The output of strxlat() can also be sent directly to output. */ func strxlat(xlat, string) { if(opt_xlat) { set(fixstring, "") set(pos, 1) while(le(pos, strlen(string))) { set(char, substring(string, pos, pos)) if (special, lookup(xlat, char)) { set(fixstring, concat(fixstring, special)) } else { set(fixstring, concat(fixstring, char)) } incr(pos) } } else { set(fixstring, string) } return(save(fixstring)) /* save() is used for compatibilty with older LL */ } /* ** function: deparen ** ** Removes parenthesized text from a string and returns the result. ** This routine can handle nesting of parentheses and multiple occurences ** of parenthesized text in the same string. */ func deparen(str) { if(and(opt_deparen, index(str, ")", 1), nestr(str, ""))) { list(maybe) set(level, 0) while(len, strlen(str)) { set(s, substring(str, 1, 1)) set(str, substring(str, 2, len)) if(eqstr(s, ")")) { if(gt(level, 0)) { set(d, pop(maybe)) while(nestr(d, "(")) { set(d, pop(maybe)) } if(d, pop(maybe)) { if(nestr(d, " ")) { push(maybe, d) } } elsif(eqstr(" ", substring(str, 1, 1))) { set(str, substring(str, 2, len)) } decr(level) } else { push(maybe, s) } } elsif(eqstr(s, "(")) { push(maybe, s) incr(level) } else { push(maybe, s) } } while(s, dequeue(maybe)) { set(str, concat(str, s)) } } return(str) } /* ** procedures: enqueue_person ** ** Store the data for a person in the global lists. It will be ** printed later. ** ** Some variable meanings: ** line 2 = bold line, for direct anc/des ** 1 = thin line, for non-direct, blood relatives ** (aunts and uncles, cousins) ** 0 = thin line in second color, for non-blood relatives ** rel_up = 1 if person is connected to the next level up, 0 otherwise ** rel_down = 1 if person is connected to the next level down, 0 otherwise ** fam = parents, if chart flow is down through this person ** 0, otherwise ** The purpose is to check the type of connection to parents ** and set line style accordingly. */ proc enqueue_person(person, depth, pos, rel, mdate, rel_up, rel_down, fam) { set(line, rel_famc(person, fam, rel)) set(duplicate, blocked(person, depth)) if(not(duplicate)) { call reserve(person, start_depth) } set(height, person_height2(person, mdate, mdate)) enqueue(plist_person, person) enqueue(plist_depth, depth) enqueue(plist_pos, pos) enqueue(plist_line, line) enqueue(plist_mdate, mdate) enqueue(plist_up, rel_up) enqueue(plist_down, rel_down) enqueue(plist_duplic, duplicate) enqueue(plist_height, height) set(duplicate_return, duplicate) } /* ** procedure: initialize_data ** ** Empty the lists that hold chart data. ** This clears the way for a second pass for the more complex charts. ** */ proc initialize_data() { list(branch_start_person) list(branch_start_line) list(original_person) list(original_depth) list(high_pos_gen) list(plist_person) list(plist_depth) list(plist_pos) list(plist_line) list(plist_mdate) list(plist_up) list(plist_down) list(plist_duplic) list(plist_height) list(llist_depth) list(llist_low) list(llist_high) list(cloaked_depth) list(llist_color) list(llist_duplic) set(low_depth, start_depth) set(high_depth, start_depth) } /* ** procedure: print_all_persons ** ** Print all persons stored in the global lists. */ proc print_all_persons() { while(length(plist_person)) { set(person, dequeue(plist_person)) set(depth, dequeue(plist_depth)) set(pos, dequeue(plist_pos)) set(line, dequeue(plist_line)) set(mdate, dequeue(plist_mdate)) set(rel_up, dequeue(plist_up)) set(rel_down, dequeue(plist_down)) set(duplic, dequeue(plist_duplic)) call print_person(person, depth, pos, line, mdate, rel_up, rel_down, duplic) } } /* ** procedure: print_person ** ** Print a line of data for a person in PostScript format. Each line ** printed is essentially a call to a PostScript function defined in the ** header. ** */ proc print_person(person, depth, pos, rel, mdate, rel_up, rel_down, duplicate) { /* specify an index for storage in PostScript array*/ d(length(plist_person)) " {" /* print generation */ d(depth) " " /* print vertical position */ make_thousandths(pos) " " /* 2=direct ancestor, 1=blood relative, 0=non-blood relative */ d(rel) " " if(or(lt(rel, 0), lt(2, rel))) { print(" >> print_person() caught invalid relationship code for ", name(person), nl()) } /* duplicate individual */ if(duplicate) { "1 " } else { "0 " } /* person has ancestors (descendants, if mirror_chart)*/ if(rel_up) { "1 " } else { "0 " } /* person has descendants (ancestors, if mirror_chart)*/ if(rel_down) { "1 " } else { "0 " } set(t, title(person)) if(eqstr(t, "")) { set(t, 0) } if(person) { if(or(t, eq(title_method, 0))) { set(prefix_title, 0) set(suffix_title, 0) } if(eq(title_method, 1)) { set(prefix_title, t) set(suffix_title, 0) } if(eq(title_method, 2)) { set(prefix_title, 0) set(suffix_title, t) } if(eq(title_method, 3)) { set(prefix_title, 0) set(suffix_title, 0) if(is_prefix_title(t)) { set(prefix_title, t) } else { set(suffix_title, t) } } set(nlet, name_letters) if(prefix_title) { set(nlet, sub(nlet, add(strlen(prefix_title), 1))) } if(suffix_title) { set(nlet, sub(nlet, add(strlen(suffix_title), 1))) } } /* print name and title */ "(" if(not(person)) { " " } else { if(prefix_title) { prefix_title " " } strxlat(ps_xlat, deparen(fullname(person, surname_upper, 1, nlet))) if(suffix_title) { " " suffix_title } } ")" /* print info: birth, death, etc. */ " [" if(person) { if(show_altname) { if(altname, name2(person)) { "(" strxlat(ps_xlat, altname) ")" } } if(date_birth, dateplace(birth(person), dateplace_birth)) { "(b. " strxlat(ps_xlat, date_birth) ")" } /* print marriage date, if it exists */ if(mdate) { "(m. " strxlat(ps_xlat, mdate) ")" } /* print death date, if it exists */ if(date_death, dateplace(death(person), dateplace_death)) { "(d. " strxlat(ps_xlat, date_death) ")" } /* print burial date/place, if it exists */ if(date_burial, dateplace(burial(person), dateplace_burial)) { "(bur. " strxlat(ps_xlat, date_burial) ")" } /* print last known address or living address */ set(dummy, address_ps(person, TRUE)) } "]" /* end of info array */ " (" /* drop in a complimentary indi. key -- to aid in debugging */ if(person) { key(person, 1) } else { "-" } ")" /* call PostScript function to process and print this data */ "} Q" nl() } /* ** function: is_prefix_title ** ** Decide if the given title is a prefix type title. ** */ func is_prefix_title(t) { set(is_prefix_title_return, 0) if( index(t, "Arch", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Baron", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Bish", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Brot", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Card", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Colonel", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Canon", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Cong", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Deacon", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Dr", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Duke", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Father", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Fr", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Hon", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Judge", 1)) { set( is_prefix_title_return, 1) } if( index(t, "King", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Lady", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Lord", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Miss", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Mons", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Mr", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Mrs", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Ms", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Msgr", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Pope", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Pres", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Princ", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Prof", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Queen", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Rabbi", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Rav", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Rep", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Sen", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Sir", 1)) { set( is_prefix_title_return, 1) } if( index(t, "Sis", 1)) { set( is_prefix_title_return, 1) } return(is_prefix_title_return) } /* ** procedures: enqueue_vertical ** ** Enqueue the data for a single vertical line onto the global lists. ** */ proc enqueue_vertical(depth, low, high, color, duplicate) { enqueue(llist_depth, depth) enqueue(llist_low, low) enqueue(llist_high, high) enqueue(llist_color, color) enqueue(llist_duplic, duplicate) } /* ** procedure: print_all_verticals ** ** Dequeue and print all vertical lines. The lines are stored in a ** second queue as they are printed and then placed back in the ** original, global, queue. ** */ proc print_all_verticals() { while(length(llist_depth)) { set(depth, dequeue(llist_depth)) set(low, dequeue(llist_low)) set(high, dequeue(llist_high)) set(color, dequeue(llist_color)) set(duplic, dequeue(llist_duplic)) d(length(llist_depth)) " {" d(depth) " " make_thousandths(low) " " make_thousandths(high) " " d(color) " " d(duplic) "} P" nl() } } /* ** function: make_thousandths ** ** Since LifeLines does not have a floating point type, decimal ** computation is done using integers that represent thousands. This ** procedure converts a number in thousandths to decimal notation as a string. ** The result always has three decimal places. */ func make_thousandths(n) { set(s, "") if(lt(n, 0)) { set(s, "-") set(n, neg(n)) } set(s, concat(s, d(div(n, 1000)), ".")) set(t, d(mod(n, 1000))) if(eq(strlen(t), 1)) { set(s, concat(s, "00", t)) } if(eq(strlen(t), 2)) { set(s, concat(s, "0", t)) } if(eq(strlen(t), 3)) { set(s, concat(s, t)) } return(s) } /* ** function: direction ** ** applies global option: updown_override to direction (UP or DOWN) ** and returns a direction. This allows for statements like ** set(dir, direction(UP)) that are simpler than the actual formula used. */ func direction(updown) { return(mod(add(updown, updown_override), 2)) } /* ** functions: min and max; half ** ** min() and max() return the minimum and maximum of a pair of integers ** ** half() returns the integer part of dividing its argument by 2. */ func min(x, y) { if(le(x, y)) { set(ans, x) } else { set(ans, y) } return(ans) } func max(x, y) { if(ge(x, y)) { set(ans, x) } else { set(ans, y) } return(ans) } func half(x) { return(div(x, 2)) } /* ** function: abs ** ** Return the absolute value of an integer */ func abs(x) { if(lt(x, 0)) { set(ans, neg(x)) } else { set(ans, x) } return(ans) } /* ** function: chart_title ** ** Return a string containing a standard chart title based ** on chart type and possibly generation restrictions. */ func chart_title() { set(title_return, "") if(nestr(chart_title_override, "")) { set(title_return, chart_title_override) } else { if(eq(chart_type, 1)) { set(title_return, concat("The ancestors of ", name(root_person, surname_upper), fromto(root_person) )) } elsif(or( eq(chart_type, 2), eq(chart_type, 3) )) { set(title_return, concat("The descendants of ", name(root_person, surname_upper), fromto(root_person) )) } elsif(eq(chart_type, 4)) { if(eq(low_depth, start_depth)) { set(title_return, "The ancestors of the ") } else { set(title_return, "The ancestors and descendants of the ") } set(title_return, concat(title_return, name(husband(root_fam), surname_upper), " and ", name(wife(root_fam), surname_upper), " family" )) } elsif(eq(chart_type, 5)) { if(eq(low_depth, start_depth)) { set(title_return, "The ancestors of the extended family of " ) } else { set(title_return, "The ancestors and descendants of the extended family of " ) } set(title_return, concat(title_return, name(husband(root_fam), surname_upper), " and ", name(wife(root_fam), surname_upper) )) } else { set(title_return, concat("<>" )) } } return(title_return) } /* ** function: fromto ** ** Return a string reprsenting the time when a person lived. */ func fromto(indi) { set(e, birth(indi)) set(f, death(indi)) set(s, "") if(or(year(e), year(f))) { /* balanced parenthesis are OK unescaped in PostScript strings */ set(s, concat(s, " (")) if(e) { if(year(e)) { set(s, concat(s, year(e))) } else { set(s, concat(s, "?")) } } set(s, concat(s, "-")) if(f) { if(year(f)) { set(s, concat(s, year(f))) } else { set(s, concat(s, "?")) } } set(s, concat(s, ")")) } return(save(s)) } /* ** procedure: write_ps ** ** Generate the PostScript code. Defines PostScript ** functions for printing peoples names, dates and the lines on the ** chart, and more. Then the actual names and lines with their positions ** and other data are inserted as array definitions in the PostScript code. ** Maybe some day, other output procedures will be written, like write_pdf? ** ** Arguments: ** cl: chart label, string ** fn: font name for an individual's name ** fi: font name for an individual's info (birth, death, marriage, etc.) ** xn: number of horizontal pages ** yn: number of vertical pages ** ml: maximum level, integer ** nl: minimum level, integer ** ** Not all arguments are passed, because there are so many. ** ** The original PostScript code was written by Thomas P. Blumer ** (blumer@ptltd.com). ** */ proc write_ps(fn, fi, xn, yn, ml, nl) { "%!PS-Adobe-3.0" if(eqstr(paper_name, "EPSF")) {" EPSF-3.0"} nl() "%%Title: " chart_title() nl() "%%CreationDate: " stddate(gettoday()) nl() "%%Creator: " version ", a report program for LifeLines" nl() "%%Pages: " d(mul(xn, yn)) nl() "%%PageOrder: Ascend" nl() if(nestr(paper_name, "NONE")) { "%%BoundingBox: 0 0 " d(paper_width) " " d(paper_height) nl() } "%%Orientation: " if(portrait) { "Portrait" } else { "Landscape" } nl() "%%EndComments" nl() "%%BeginDefaults" nl() "%%ViewingOrientation: " if(portrait) {"1 0 0 1"} else {"0 -1 1 0"} nl() "%%EndDefaults" nl() "%%BeginProlog" nl() "% --- Define constants ---" nl() "% ** This first section of constants are " "user-modifiable here in the PS file **" nl() "/fontname /" fn " def" nl() "/ifontname /" fi " def" nl() "/titlefontname fontname def" nl() "/labelfontname /Helvetica def" nl() "/chart_title (" strxlat(ps_xlat, chart_title()) ") def" nl() "/display_title " if(display_title) {"true"} else {"false"} " def" nl() "/chart_label (" strxlat(ps_xlat, chart_label) ") def" nl() "/display_label " if(display_label) {"true"} else {"false"} " def" nl() "/chart_label_centered " if(chart_label_centered) {"true"} else {"false"} " def" nl() "/label_outside_border " if(label_outside) {"true"} else {"false"} " def" nl() "/show_border " if(display_border) {"true"} else {"false"} " def" nl() "/mirror " if(mirror_chart) { "true" } else { "false" } " def" nl() "/portrait " if(portrait) { "true" } else { "false" } " def" nl() "/margin_top " d(margin_top) " def" nl() "/margin_bottom " d(margin_bottom) " def" nl() "/margin_left " d(margin_left) " def" nl() "/margin_right " d(margin_right) " def" nl() "% indent is the fraction of generation width to allow for horizontal lines" nl() "/indent .05 def" nl() "/use_color " if(color_chart) { "true" } else { "false" } " def" nl() "/use_bold " if(bold_chart) { "true" } else { "false" } " def" nl() "/bold_factor " make_thousandths(mul(bold_factor, 1000)) " def" nl() "/tweak 0 def % points to shift chart vertically within border" nl() "% Red,Green,Blue intensities for lines and text (regular and bold)" nl() "% Values may have decimals and must be between 0 and 1." nl() "/lr 0 def /lg 1 def /lb 1 def" nl() "/Lr 0 def /Lg 0 def /Lb 1 def" nl() "/tr 0 def /tg 0 def /tb 0 def" nl() "/Tr 0 def /Tg 0 def /Tb 0 def" nl() if(debug_postscript) { "/show_positions false def % make true to show person positions" nl() } "/show_keys false def % set to true to turn on display of keys" nl() "% ** End of user-modifiable constants **" nl() if(nestr(paper_name, "NONE")) { "/paper_height " d(paper_height) " def" nl() "/paper_width " d(paper_width) " def" nl() } "/name_height " make_thousandths(name_height) " def" nl() "/date_height " make_thousandths(date_height) " def" nl() "/xpages " d(xn) " def" nl() "/ypages " d(yn) " def" nl() "/minpos_text " make_thousandths(calc_low_pos_text()) " def" nl() "/minpos_line " make_thousandths(calc_low_pos_line()) " def" nl() "/maxpos_text " make_thousandths(calc_high_pos_text()) " def" nl() "/maxpos_line " make_thousandths(calc_high_pos_line()) " def" nl() "/maxlevel " d(ml) " def" nl() "/minlevel " d(nl) " def" nl() "% --- Start Subroutines ---" nl() "% emulations of Level 2 operators" nl() "%" nl() "/*SF { % Complete selectfont emulation" nl() " exch findfont exch" nl() " dup type /arraytype eq {makefont}{scalefont} ifelse setfont" nl() "} bind def" nl() nl() "/BuildRectPath {" nl() " dup type dup /integertype eq exch /realtype eq or {" nl() " 4 -2 roll moveto" nl() " dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath" nl() " }{" nl() " dup length 4 sub 0 exch 4 exch" nl() " {" nl() " 1 index exch 4 getinterval aload pop" nl() " BuildRectPath" nl() " } for" nl() " pop" nl() " } ifelse" nl() "} bind def" nl() nl() "/*RC {" nl() " gsave newpath BuildRectPath clip grestore" nl() "} bind def" nl() nl() "% install Level 2 emulations, or substitute built-in Level 2 operators" nl() "/languagelevel where" nl() " {pop languagelevel}{1} ifelse" nl() "2 lt {" nl() " /RC /*RC load def" nl() " /SF /*SF load def" nl() "}{" nl() " /RC /rectclip load def % use RC instead of rectclip" nl() " /SF /selectfont load def % use SF instead of selectfont" nl() "} ifelse" nl() "/SF2 {SF" nl() " /fshow fshowdict currentfont /FontName get get load def" nl() "} bind def" nl() nl() "% Handy little functions: min, max" nl() "/min {" nl() " 2 copy gt { exch } if pop" nl() "} bind def" nl() "/max {" nl() " 2 copy lt { exch } if pop" nl() "} bind def" nl() nl() "% Line and Person array filling procedures" nl() "/P {Alin 3 1 roll put} def" nl() "/Q {Aind 3 1 roll put} def" nl() nl() "/black-and-white-device % true for black & white, false otherwise" nl() "{ statusdict begin" nl() " /processcolors where" nl() " { pop processcolors } { 1 } ifelse" nl() " end" nl() " 1 eq" nl() "} def" nl() nl() "% wshow* usage: string num wshow* --" nl() "% scale to fit string in specified width at current point" nl() "/wshow* {" nl() " /s exch def" nl() " /len exch def" nl() " s stringwidth pop line_gap add dup len lt {" nl() " pop s fshow" nl() " }{" nl() " gsave" nl() " % scale for exact fit (current point is not affected)" nl() " len exch div dup scale" nl() " s fshow" nl() " grestore" nl() " } ifelse" nl() "} bind def" nl() nl() "% wlen usage: string num1 num2 wlen num3 num4" nl() "% The string is to be rendered no longer than specified length (num1)," nl() "% starting with initial font size (num2)." nl() "% Determines scale (num3) necessary to render string with length (num4)" nl() "% Assumes 'direct' variable is currently set to indicate use of bold font." nl() "/wlen {" nl() " /s exch def" nl() " /len exch def" nl() " /fntsiz exch def" nl() " /bfn exch def" nl() " /fn exch def" nl() " use_bold direct and {" nl() " bfn fntsiz SF2" nl() " } {" nl() " fn fntsiz SF2" nl() " } ifelse" nl() " s stringwidth pop line_gap add dup len lt {" nl() " % text already fits so return scale of 1 and text length" nl() " 1 exch" nl() " } {" nl() " % scale, len for text length since scale makes fit exact" nl() " len exch div len" nl() " } ifelse" nl() "} bind def" nl() nl() "%" nl() "% Show text from right to left, with left end at current point" nl() "%" nl() "/rlshow {" nl() " dup stringwidth rmoveto" nl() " { (_) dup 0 4 -1 roll put" nl() " dup stringwidth pop neg 0 rmoveto" nl() " currentpoint 3 -1 roll show" nl() " moveto" nl() " } forall" nl() "} bind def" nl() nl() "%" nl() "% Print a title across the bottom of the page" nl() "%" nl() "/print_title {" nl() " /fsize th1 18 div def" nl() " /len tw1 .9 mul def" nl() " titlefontname fsize SF2" nl() " chart_title stringwidth pop dup len lt {" nl() " pop" nl() " } {" nl() " % compute new font size for exact fit lengthwise" nl() " len exch div fsize mul /fsize exch def" nl() " titlefontname fsize SF2" nl() " } ifelse" nl() " titlefontname findfont /FontBBox get dup" nl() " 3 get /sy2 exch fsize mul 1000 div def" nl() " 1 get /sy1 exch fsize mul 1000 div def" nl() " sy2 0 eq {" nl() " newpath 0 0 moveto" nl() " (A) false charpath flattenpath pathbbox newpath" nl() " sy2 max /sy2 exch def pop sy1 min /sy1 exch def pop" nl() " newpath 0 0 moveto" nl() " (p) false charpath flattenpath pathbbox newpath" nl() " sy2 max /sy2 exch def pop sy1 min /sy1 exch def pop" nl() " } if" nl() " /title_length chart_title stringwidth pop def" nl() " /title_height sy2 sy1 sub def" nl() " /title_allowance title_height 1.1 mul def" nl() " /startx tw1 title_length sub 2 div def" nl() " /starty sy1 neg title_height .05 mul add def" nl() " startx starty chart_title stringwidth pop" nl() " startx starty moveto" nl() " textcolr0" nl() " chart_title fshow" nl() " 0 title_allowance translate % set origin above title" nl() " /th1 th1 title_allowance sub def % shorten chart space accordingly" nl() "} bind def" nl() nl() "/print_label {" nl() " /labelfs 6 def" nl() " /len wp1 def" nl() " labelfontname labelfs SF2" nl() " chart_label stringwidth pop dup len lt {pop} {" nl() " len exch div labelfs mul /labelfs exch def" nl() " labelfontname labelfs SF2" nl() " } ifelse" nl() " labelfontname findfont /FontBBox get dup" nl() " 3 get /sy2 exch labelfs mul 1000 div def" nl() " 1 get /sy1 exch labelfs mul 1000 div def" nl() " sy2 0 eq {" nl() " newpath 0 0 moveto" nl() " (A) false charpath flattenpath pathbbox newpath" nl() " sy2 max /sy2 exch def pop sy1 min /sy1 exch def pop" nl() " newpath 0 0 moveto" nl() " (p) false charpath flattenpath pathbbox newpath" nl() " sy2 max /sy2 exch def pop sy1 min /sy1 exch def pop " nl() " } if" nl() " chart_label_centered" nl() " {len chart_label stringwidth pop sub 2 div}" nl() " {0} ifelse" nl() " 0 sy1 neg moveto" nl() " chart_label fshow" nl() " sy2 sy1 sub 1.2 mul dup" nl() " 0 exch translate" nl() " th1 exch sub /th1 exch def" nl() "} bind def" nl() nl() /* To write an alternative PostScript border procedure, here are the current guidelines for compatibility: - external PostScript variables used in the original border procedure: lincolr0 -- a procedure that sets the drawing color to the one used for blood relatives tw1 -- the width, in points, available th1 -- the height, in points, available wp1 -- the width, in points, available on the lower left page - what the border procedure must do when finished: 1. translate to just inside the lower left corner of the border 2. subtract border thickness from /tw1, /th1, and /wp1 3. set /bgap to the empty space at the bottom on the inside of the border -- some of which is used as extra space for a title or inside label */ "% Print a decorative border" nl() "%" nl() "/print_border {" nl() " /bwid1 2.5 def" nl() " /gapwid 1.5 def" nl() " /bwid2 0.7 def" nl() " /bgap 10 def" nl() " /tbwid bwid1 gapwid bwid2 bgap add add add def" nl() " /tw 7.2 def" nl() " /rect {" nl() " /rh exch def" nl() " /rw exch def" nl() " moveto" nl() " rw 0 rlineto" nl() " 0 rh rlineto" nl() " rw neg 0 rlineto" nl() " closepath stroke" nl() " } def" nl() " /rectt {" nl() " /rh exch def" nl() " /rw exch def" nl() " /rhs rh tw sub tw sub def" nl() " /rws rw tw sub tw sub def" nl() " moveto" nl() " 0 tw rmoveto" nl() " tw 0 rlineto" nl() " 0 tw neg rlineto" nl() " rws 0 rlineto" nl() " 0 tw rlineto" nl() " tw 0 rlineto" nl() " 0 rhs rlineto" nl() " tw neg 0 rlineto" nl() " 0 tw rlineto" nl() " rws neg 0 rlineto" nl() " 0 tw neg rlineto" nl() " tw neg 0 rlineto" nl() " closepath stroke" nl() " } def" nl() nl() /* assuming that 2*(border thickness) < (chart width) */ " 2 setlinecap" nl() " 0 setlinejoin" nl() " bwid1 setlinewidth" nl() " lincolr0" nl() " bwid1 2 div dup tw1 bwid1 sub th1 bwid1 sub rectt" nl() " bwid2 setlinewidth" nl() " bwid1 gapwid bwid2 2 div add add dup" nl() " tw1 bwid1 2 mul sub gapwid 2 mul sub bwid2 sub " nl() " th1 bwid1 2 mul sub gapwid 2 mul sub bwid2 sub rect" nl() " % move the chart origin inside the border zone" nl() " tbwid tbwid translate" nl() " % take border thickness away from chart area" nl() " /th1 th1 tbwid 2 mul sub def" nl() " /tw1 tw1 tbwid 2 mul sub def" nl() " /wp1 wp1 tbwid xpages 1 eq {2 mul} if sub def" nl() "} bind def" nl() nl() "% calculate max. font sizes and scale factor for placement of chart elements" nl() "% depends on: th1, tw1" nl() "% determines: posunit, minpos, rl, fntsize, fntsize2, linwid, dashwid," nl() "% char2line, line2char, line_gap, name_adjust, name_extra, len1" nl() "/calcScale {" nl() " % for now, overestimate the upwards name_adjust with name_height" nl() " /minpos minpos_text name_height sub minpos_line min def" nl() " /maxpos maxpos_text maxpos_line max def" nl() " /posunit th1 maxpos minpos sub div def" nl() nl() " % Now we have the remaining height and width, compute" nl() " % the column width, font size etc." nl() " %" nl() " /rl tw1 maxlevel minlevel sub 1 add div def" nl() nl() " % calculate base font size from segment length" nl() " /fntsize rl 9.0 div def" nl() nl() /* RES: make so two solid marks of dashed line appear on indent length */ " /dashwid rl indent mul 3 div def" nl() nl() " % size of name text, layout relies on a restricted font size" nl() " fntsize name_height posunit mul gt {" nl() " /fntsize name_height posunit mul def" nl() " } if" nl() nl() " % find out how low below baseline any of the letters can reach" nl() " fontname findfont /FontBBox get dup" nl() " 3 get /sy2 exch fntsize mul 1000 div def" nl() " 1 get /sy1 exch fntsize mul 1000 div def" nl() " sy2 0 eq {" nl() " newpath 0 0 moveto" nl() " (A) false charpath flattenpath pathbbox newpath" nl() " sy2 max /sy2 exch def pop sy1 min /sy1 exch def pop" nl() " newpath 0 0 moveto" nl() " (p) false charpath flattenpath pathbbox newpath" nl() " sy2 max /sy2 exch def pop sy1 min /sy1 exch def pop " nl() " } if" nl() " /name_desc sy1 neg def" nl() nl() " % font for birth/death dates" nl() " /fntsize2 fntsize date_height mul def" nl() nl() " % find out how low below baseline any of the letters can reach" nl() " ifontname findfont /FontBBox get dup" nl() " 3 get /sy2 exch fntsize2 mul 1000 div def" nl() " 1 get /sy1 exch fntsize2 mul 1000 div def" nl() " sy2 0 eq {" nl() " newpath 0 0 moveto" nl() " (A) false charpath flattenpath pathbbox newpath" nl() " sy2 max /sy2 exch def pop sy1 min /sy1 exch def pop" nl() " newpath 0 0 moveto" nl() " (p) false charpath flattenpath pathbbox newpath" nl() " sy2 max /sy2 exch def pop sy1 min /sy1 exch def pop " nl() " } if" nl() " /info_desc sy1 neg def" nl() " /info_asc sy2 def" nl() nl() " % calc line width from font size" nl() " /linwid fntsize .06 mul def" nl() nl() " % name_adjust -- adjustment to 'center' names on horiz. lines." nl() " % it's the distance from baseline to middle of '-'." nl() " % char2line & line2char -- indicate offsets to horiz. line ends" nl() " % relative to char origins matching behavior of minus char. as a line" nl() " boldfontname fntsize SF2" nl() " newpath 0 0 moveto" nl() " (-) false charpath flattenpath pathbbox newpath" nl() " exch /minus_end exch def add 2 div /name_adjust exch def" nl() " /char2line exch def" nl() " (-) stringwidth pop minus_end sub /line2char exch def" nl() " /line_gap char2line line2char add def" nl() nl() " % this is the highest a name can extend above its horiz. line (pos)" nl() " /name_extra sy2 name_adjust sub def" nl() nl() " % name string length for all generations" nl() " /len1 rl 1 indent 2 mul sub mul def" nl() "} def" nl() nl() "% Draw a vertical line" nl() "%" nl() "/l {" nl() " /duplic exch 1 eq def" nl() " dup /direct exch 2 eq def" nl() " /blood exch 1 ge def" nl() " /parent exch def" nl() " /pos exch def" nl() " /level exch def" nl() nl() " mirror {" nl() " /x maxlevel level sub rl mul def" nl() " } {" nl() " /x level minlevel sub 1 add rl mul def" nl() " } ifelse" nl() " /y1 top pos minpos sub posunit mul sub def" nl() " /y2 top parent minpos sub posunit mul sub def" nl() " blood {lincolr0}{lincolr1} ifelse" nl() " duplic {[dashwid] 0 setdash}{[] 0 setdash} ifelse" nl() " use_bold direct and {" nl() " linwid bold_factor mul setlinewidth" nl() " } {" nl() " linwid setlinewidth" nl() " } ifelse" nl() " 0 setlinecap" nl() " % 2 setlinecap affects dashes, so have to extend line ends manually" nl() " x y1 currentlinewidth 2 div add moveto" nl() " x y2 currentlinewidth 2 div sub lineto stroke" nl() "} bind def" nl() nl() "%" nl() "% Print a person" nl() "% called once for each individual on chart" nl() "%" nl() "/i {" nl() " /key exch def % database key, make show_keys true to show" nl() " /info exch def % array of info strings: birth, death, etc." nl() " /name exch def" nl() " /rel_down exch 1 eq def % true if person connects to next level down" nl() " /rel_up exch 1 eq def % true if person connects to next level up" nl() " /duplic exch 1 eq def % true for duplicate individual" nl() " dup % copy line-type for two uses" nl() " /direct exch 2 eq def % true for direct ancestor, false for indirect" nl() " /blood exch 1 ge def % true for blood relatives" nl() " /pos exch def % vertical position" nl() " /level exch def % generation level, 0 = youngest" nl() nl() " mirror { % smallest gen. # on the right" nl() " /rel_left rel_up def" nl() " /rel_right rel_down def" nl() " /x1 maxlevel level sub rl mul def" nl() " } { % smallest gen. # on the left" nl() " /rel_left rel_down def" nl() " /rel_right rel_up def" nl() " /x1 level minlevel sub rl mul def" nl() " } ifelse" nl() " /x2 x1 rl add def" nl() nl() " % x1=left edge, x=start of text, x2=right edge" nl() nl() " /ylin top pos minpos sub posunit mul sub def" nl() nl() " % Calculate the printed length of the name" nl() " fontname boldfontname fntsize len1 name wlen" nl() " /lname exch def /scalefactor exch def" nl() nl() " % use relative change in fontsize determined by wlen to scale name_adjust" nl() " % then determine the baseline position relative to the horizontal line" nl() " /y ylin name_adjust scalefactor mul sub def" nl() nl() " % Find the size of the longest text string" nl() " /ls lname def" nl() " /infoscale 1 def" nl() " info {" nl() " dup length 0 gt" nl() " {ifontname boldifontname fntsize2 len1 5 4 roll wlen" nl() " dup ls gt {/ls exch def}{pop}ifelse" nl() " dup infoscale lt {/infoscale exch def}{pop}ifelse" nl() " }{pop" nl() " }ifelse" nl() " }forall" nl() nl() " direct rel_left rel_right and or {" nl() " % center record within generation" nl() " /x x1 rl ls line_gap scalefactor mul add sub 2 div add def" nl() " }{" nl() " rel_right {/x x2 rl indent mul sub ls sub def} if" nl() " rel_left {/x x1 rl indent mul add def} if" nl() " } ifelse" nl() " /xlin x def" nl() " /x xlin line2char scalefactor mul add def" nl() nl() " use_bold direct and {" nl() " boldfontname fntsize SF2" nl() " linwid bold_factor mul setlinewidth" nl() " } {" nl() " fontname fntsize SF2" nl() " linwid setlinewidth" nl() " } ifelse" nl() nl() " blood {lincolr0}{lincolr1} ifelse" nl() " duplic {[dashwid] 0 setdash}{[] 0 setdash} ifelse" nl() " 0 setlinecap % don't cap lines -- stay clear of name characters" nl() nl() " rel_left {" nl() " x1 ylin moveto xlin ylin lineto stroke" nl() " } if" nl() " rel_right {" nl() " x lname add char2line scalefactor mul add ylin moveto" nl() " x2 ylin lineto stroke" nl() " } if" nl() nl() " % print name" nl() " direct use_bold and {textcolr0}{textcolr1} ifelse" nl() " x y moveto" nl() " len1 name wshow*" nl() " % drop down by height of name font descenders" nl() " /y y name_desc sub def" nl() " % drop down by height of small text above its baseline + small font gap" nl() " /y y info_asc infoscale mul sub def" nl() nl() " use_bold direct and {" nl() /* RES - alternative is to pass infoscale to wshow* */ /* that would avoid danger of generating too many fonts in PS engine */ " boldifontname fntsize2 infoscale mul SF2" nl() " }{" nl() " ifontname fntsize2 infoscale mul SF2" nl() " } ifelse" nl() nl() " % print info: birth, death, etc." nl() " info" nl() " { dup length 0 gt" nl() " { x y moveto" nl() " len1 exch wshow*" nl() " /y y fntsize2 sub def" nl() " }{pop" nl() " }ifelse" nl() " }forall" nl() if(debug_postscript) { nl() " show_positions { % not for use with show_keys simultaneously" nl() " pos abs floor 1 ge {" nl() " pos abs log cvi" nl() " }{1}ifelse" nl() " pos 0 lt {1 add} if" nl() " 5 add string /tmp exch def" nl() " pos tmp cvs" nl() " x y moveto" nl() " len1 tmp wshow*" nl() " }if" nl() } " show_keys {" nl() " x y moveto" nl() " len1 key wshow*" nl() " }if" nl() "} bind def" nl() nl() "% If colour is required, set the appropriate fields" nl() "% and define colour setting procedures accordingly." nl() "% Note: setcmykcolor is a PostScript Level 2 operator." nl() "%" nl() "use_color black-and-white-device not and {" nl() " /setcmykcolor where { pop" nl() " Tr Tg Tb add add 0 eq {" nl() " /Tk 1 def" nl() " } {" nl() " /Tk 0 def" nl() " /Tr 1 Tr sub def /Tg 1 Tg sub def /Tb 1 Tb sub def" nl() " } ifelse" nl() nl() " tr tg tb add add 0 eq {" nl() " /tk 1 def" nl() " } {" nl() " /tk 0 def" nl() " /tr 1 tr sub def /tg 1 tg sub def /tb 1 tb sub def" nl() " } ifelse" nl() nl() " Lr Lg Lb add add 0 eq {" nl() " /Lk 1 def" nl() " } {" nl() " /Lk 0 def" nl() " /Lr 1 Lr sub def /Lg 1 Lg sub def /Lb 1 Lb sub def" nl() " } ifelse" nl() nl() " lr lg lb add add 0 eq {" nl() " /lk 1 def" nl() " } {" nl() " /lk 0 def" nl() " /lr 1 lr sub def /lg 1 lg sub def /lb 1 lb sub def" nl() " } ifelse" nl() nl() " /textcolr0 {Tr Tg Tb Tk setcmykcolor} bind def % direct names" nl() " /textcolr1 {tr tg tb tk setcmykcolor} bind def % indirect names" nl() " /lincolr0 {Lr Lg Lb Lk setcmykcolor} bind def % direct lines" nl() " /lincolr1 {lr lg lb lk setcmykcolor} bind def % indirect lines" nl() " } {" nl() " /textcolr0 {Tr Tg Tb setrgbcolor} bind def % direct names" nl() " /textcolr1 {tr tg tb setrgbcolor} bind def % indirect names" nl() " /lincolr0 {Lr Lg Lb setrgbcolor} bind def % direct lines" nl() " /lincolr1 {lr lg lb setrgbcolor} bind def % indirect lines" nl() " } ifelse" nl() "} {" nl() " /textcolr0 {} bind def" nl() " /textcolr1 {} bind def" nl() " /lincolr0 {} bind def" nl() " /lincolr1 {} bind def" nl() "} ifelse" nl() nl() "% page printing procedure" nl() "/print-a-page {" nl() " /ypage exch def" nl() " /xpage exch def" nl() " /th1 th0 def" nl() " /tw1 tw0 def" nl() " /wp1 wp def" nl() " % adjust for portrait or landscape" nl() " % move origin so that desired page lands on the clip rectangle" nl() " gsave % so we can undo portrait/landscape adjustments" nl() nl() " portrait {" nl() " % portrait mode" nl() " llx lly translate" nl() " }{" nl() " llx ury translate -90 rotate" nl() " } ifelse" nl() nl() " % specify (rectangular) clipping path to keep the margins clean" nl() " 0 0 wp hp RC" nl() nl() " % move origin so that desired portion of chart lands within clipping path" nl() " xpage wp mul neg ypage hp mul neg translate" nl() nl() " label_outside_border {" nl() " display_label {print_label} if" nl() " show_border {print_border} if" nl() " display_title {" nl() " show_border {" nl() " % let the title or inside label get in closer to the border" nl() " 0 bgap .9 mul neg translate /th1 th1 bgap .9 mul add def" nl() " } if" nl() " print_title" nl() " } if" nl() " }{" nl() " show_border {print_border} if" nl() " display_label display_title or {" nl() " % let the title or inside label get in closer to the border" nl() " 0 bgap .9 mul neg translate /th1 th1 bgap .9 mul add def" nl() " display_label {print_label} if" nl() " display_title {print_title} if" nl() " } if" nl() " } ifelse" nl() nl() " calcScale % figure font size and scale factor to make chart fit" nl() nl() " % chart starts this high on the page from chart origin. Allow for" nl() " % the first name to extend above the 0 position." nl() " /top th1 tweak add def" nl() nl() " % print all lines and person info" nl() " Aind {exec i} forall" nl() " Alin {exec l} forall" nl() nl() " grestore" nl() nl() "} def % print-a-page procedure" nl() "% --- End of Subroutines ---" nl() "%%EndProlog" nl() "%%BeginSetUp" nl() if(and( nestr(paper_name, "NONE"), nestr(paper_name, "EPSF") )) { if(manual_feed_opt) { "%%BeginFeature: *ManualFeed " if(eq(manual_feed_opt, 1)) {"True"} else {"False"} nl() "/languagelevel where {pop languagelevel 2 ge}{false} ifelse" nl() " {1 dict dup /ManualFeed " if(eq(manual_feed_opt, 1)) {"true"} else {"false"} " put setpagedevice" nl() " }{statusdict /manualfeed " if(eq(manual_feed_opt, 1)) {"true"} else {"false"} " put}" nl() "ifelse" nl() "%%EndFeature" nl() } "%%BeginFeature: " if(eq(manual_feed_opt, 1)) {"*PageRegion "} else {"*PageSize "} if(eq(postscript_level, 1)) { lower(paper_name) } else { paper_name } nl() "/languagelevel where {pop languagelevel 2 ge}{false} ifelse" nl() " {1 dict" nl() " dup /Policies 2 dict dup /PageSize 2 put dup /MediaType 0 put put" nl() " setpagedevice" nl() " 2 dict" nl() " dup /PageSize [" d(paper_width) " " d(paper_height) "] put" nl() " dup /ImagingBBox null put" nl() " setpagedevice" nl() " }{ " lower(paper_name) nl() " } ifelse" nl() "%%EndFeature" nl() } nl() if(ne(enc_choice, 0)) { "/encvecmod* { % on stack should be /Encoding and an encoding array" nl() " % make an array copy so we don't try to modify the original via pointer" nl() " dup length array copy" nl() " encvecmod aload length dup 2 idiv exch 2 add -1 roll exch" nl() " {dup 4 2 roll put}" nl() " repeat" nl() "} def" nl() "/reenc {" nl() " findfont" nl() " dup length dict begin" nl() " {1 index /FID eq {pop pop} {" nl() " 1 index /Encoding eq {" nl() " encvecmod* def" nl() " }{def} ifelse" nl() " } ifelse" nl() " } forall" nl() " currentdict" nl() " end" nl() " definefont pop" nl() "} def" nl() } if(eq(enc_choice, 1)) { "% Adjust the font so that it is iso-8859-1 compatible" nl() "/languagelevel where" nl() " {pop languagelevel}{1} ifelse" nl() "2 ge {" nl() " % Use built-in ISOLatin1Encoding if PS interpreter is Level 2" nl() " /encvecmod* {pop ISOLatin1Encoding} def" nl() "}{" nl() /* This array indicates changes to go from the Standard Encoding Vector to the ISOLatin1 Encoding Vector for ISO-8859-1 compatibility, according to the PostScript Language Reference Manual, 2nd ed. The characters from A0 to FF are essential for 8859-1 conformance. */ " /encvecmod [" nl() "16#90 /dotlessi 16#91 /grave 16#92 /acute 16#93 /circumflex" nl() "16#94 /tilde 16#95 /macron 16#96 /breve 16#97 /dotaccent" nl() "16#98 /dieresis 16#99 /.notdef 16#9a /ring 16#9b /cedilla" nl() "16#9c /.notdef 16#9d /hungarumlaut 16#9e /ogonek 16#9f /caron" nl() "16#a0 /space 16#a1 /exclamdown 16#a2 /cent 16#a3 /sterling" nl() "16#a4 /currency 16#a5 /yen 16#a6 /brokenbar 16#a7 /section" nl() "16#a8 /dieresis 16#a9 /copyright 16#aa /ordfeminine 16#ab /guillemotleft" nl() "16#ac /logicalnot 16#ad /hyphen 16#ae /registered 16#af /macron" nl() "16#b0 /degree 16#b1 /plusminus 16#b2 /twosuperior 16#b3 /threesuperior" nl() "16#b4 /acute 16#b5 /mu 16#b6 /paragraph 16#b7 /periodcentered" nl() "16#b8 /cedilla 16#b9 /onesuperior 16#ba /ordmasculine 16#bb /guillemotright" nl() "16#bc /onequarter 16#bd /onehalf 16#be /threequarters 16#bf /questiondown" nl() "16#c0 /Agrave 16#c1 /Aacute 16#c2 /Acircumflex 16#c3 /Atilde" nl() "16#c4 /Adieresis 16#c5 /Aring 16#c6 /AE 16#c7 /Ccedilla" nl() "16#c8 /Egrave 16#c9 /Eacute 16#ca /Ecircumflex 16#cb /Edieresis" nl() "16#cc /Igrave 16#cd /Iacute 16#ce /Icircumflex 16#cf /Idieresis" nl() "16#d0 /Eth 16#d1 /Ntilde 16#d2 /Ograve 16#d3 /Oacute" nl() "16#d4 /Ocircumflex 16#d5 /Otilde 16#d6 /Odieresis 16#d7 /multiply" nl() "16#d8 /Oslash 16#d9 /Ugrave 16#da /Uacute 16#db /Ucircumflex" nl() "16#dc /Udieresis 16#dd /Yacute 16#de /Thorn 16#df /germandbls" nl() "16#e0 /agrave 16#e1 /aacute 16#e2 /acircumflex 16#e3 /atilde" nl() "16#e4 /adieresis 16#e5 /aring 16#e6 /ae 16#e7 /ccedilla" nl() "16#e8 /egrave 16#e9 /eacute 16#ea /ecircumflex 16#eb /edieresis" nl() "16#ec /igrave 16#ed /iacute 16#ee /icircumflex 16#ef /idieresis" nl() "16#f0 /eth 16#f1 /ntilde 16#f2 /ograve 16#f3 /oacute" nl() "16#f4 /ocircumflex 16#f5 /otilde 16#f6 /odieresis 16#f7 /divide" nl() "16#f8 /oslash 16#f9 /ugrave 16#fa /uacute 16#fb /ucircumflex" nl() "16#fc /udieresis 16#fd /yacute 16#fe /thorn 16#ff /ydieresis" nl() " ] def" nl() "} ifelse" nl() nl() } elsif(eq(enc_choice, 2)) { /* The following array specifies changes to make to a font encoding to make characters A0 through FF match the ISO Latin alphabet no. 2 This will work as long as there are instructions in the font for drawing the glyphs named here. Missing glyphs would be substituted with /.notdef from the font by the PostScript interpreter. */ "/encvecmod [" nl() "16#a0 /space 16#a1 /Aogonek 16#a2 /breve 16#a3 /Lslash" nl() "16#a4 /currency 16#a5 /Lcaron 16#a6 /Sacute 16#a7 /section" nl() "16#a8 /dieresis 16#a9 /Scaron 16#aa /Scedilla 16#ab /Tcaron" nl() "16#ac /Zacute 16#ad /hyphen 16#ae /Zcaron 16#af /Zdotaccent" nl() "16#b0 /degree 16#b1 /aogonek 16#b2 /ogonek 16#b3 /lslash" nl() "16#b4 /acute 16#b5 /lcaron 16#b6 /sacute 16#b7 /caron" nl() "16#b8 /cedilla 16#b9 /scaron 16#ba /scedilla 16#bb /tcaron" nl() "16#bc /zacute 16#bd /hungarumlaut 16#be /zcaron 16#bf /zdotaccent" nl() "16#c0 /Racute 16#c1 /Aacute 16#c2 /Acircumflex 16#c3 /Abreve" nl() "16#c4 /Adieresis 16#c5 /Lacute 16#c6 /Cacute 16#c7 /Ccedilla" nl() "16#c8 /Ccaron 16#c9 /Eacute 16#ca /Eogonek 16#cb /Edieresis" nl() "16#cc /Ecaron 16#cd /Iacute 16#ce /Icircumflex 16#cf /Dcaron" nl() "16#d0 /Dcroat 16#d1 /Nacute 16#d2 /Ncaron 16#d3 /Oacute" nl() "16#d4 /Ocircumflex 16#d5 /Ohungarumlaut 16#d6 /Odieresis 16#d7 /multiply" nl() "16#d8 /Rcaron 16#d9 /Uring 16#da /Uacute 16#db /Uhungarumlaut" nl() "16#dc /Udieresis 16#dd /Yacute 16#de /Tcommaaccent 16#df /germandbls" nl() "16#e0 /racute 16#e1 /aacute 16#e2 /acircumflex 16#e3 /abreve" nl() "16#e4 /adieresis 16#e5 /lacute 16#e6 /cacute 16#e7 /ccedilla" nl() "16#e8 /ccaron 16#e9 /eacute 16#ea /eogonek 16#eb /edieresis" nl() "16#ec /ecaron 16#ed /iacute 16#ee /icircumflex 16#ef /dcaron" nl() "16#f0 /dcroat 16#f1 /nacute 16#f2 /ncaron 16#f3 /oacute" nl() "16#f4 /ocircumflex 16#f5 /ohungarumlaut 16#f6 /odieresis 16#f7 /divide" nl() "16#f8 /rcaron 16#f9 /uring 16#fa /uacute 16#fb /uhungarumlaut" nl() "16#fc /udieresis 16#fd /yacute 16#fe /tcommaaccent 16#ff /dotaccent" nl() " ] def" nl() nl() } elsif(eq(enc_choice, 3)) { /* This array indicates changes necessary to go from the Standard Encoding Vector to one matching the int'l characters and some others in the IBM Extended Character Set (extended ASCII). */ "/encvecmod [" nl() "16#80 /Ccedilla 16#81 /udieresis 16#82 /eacute 16#83 /acircumflex" nl() "16#84 /adieresis 16#85 /agrave 16#86 /aring 16#87 /ccedilla" nl() "16#88 /ecircumflex 16#89 /edieresis 16#8a /egrave 16#8b /idieresis" nl() "16#8c /icircumflex 16#8d /igrave 16#8e /Adieresis 16#8f /Aring" nl() "16#90 /Eacute 16#91 /ae 16#92 /AE 16#93 /ocircumflex" nl() "16#94 /odieresis 16#95 /ograve 16#96 /ucircumflex 16#97 /ugrave" nl() "16#98 /ydieresis 16#99 /Odieresis 16#9a /Udieresis 16#9b /cent" nl() "16#9c /sterling 16#9d /yen 16#9e /.notdef 16#9f /florin" nl() "16#a0 /aacute 16#a1 /iacute 16#a2 /oacute 16#a3 /uacute" nl() "16#a4 /ntilde 16#a5 /Ntilde 16#a6 /ordfeminine 16#a7 /ordmasculine" nl() "16#a8 /questiondown 16#a9 /.notdef 16#aa /.notdef 16#ab /onehalf" nl() "16#ac /onequarter 16#ad /exclamdown 16#ae /guillemotleft " "16#af /guillemotright" nl() "16#e1 /germandbls 16#ed /oslash 16#f1 /plusminus 16#f6 /divide" nl() "16#f8 /degree 16#f9 /bullet" nl() " ] def" nl() nl() } "% Copyright (c) 1991-1993 Thomas P. Blumer. All Rights Reserved." nl() "% Permission granted to use in LifeLines report generation." nl() "% table of how to get bold fonts" nl() "/bolddict 40 dict def" nl() /* dictionary size might need boosting */ "bolddict begin" nl() " % default table entry is that boldfontname = fontname" nl() " fontname fontname def" nl() " ifontname ifontname def" nl() " labelfontname labelfontname def" nl() /* ADD new bold font associations below here */ " /AvantGarde-Book /AvantGarde-Demi def" nl() " /AvantGarde-BookOblique /AvantGarde-DemiOblique def" nl() " /Bookman-Light /Bookman-Demi def" nl() " /Bookman-LightItalic /Bookman-DemiItalic def" nl() " /Courier /Courier-Bold def" nl() " /Courier-Oblique /Courier-BoldOblique def" nl() " /Times-Roman /Times-Bold def" nl() " /Times-Italic /Times-BoldItalic def" nl() " /Helvetica /Helvetica-Bold def" nl() " /Helvetica-Condensed /Helvetica-Condensed-Bold def" nl() " /Helvetica-Condensed-Oblique /Helvetica-Condensed-BoldObl def" nl() " /Helvetica-Narrow /Helvetica-Narrow-Bold def" nl() " /Helvetica-Narrow-Oblique /Helvetica-Narrow-BoldOblique def" nl() " /Helvetica-Oblique /Helvetica-BoldOblique def" nl() " /Hershey-Plain /Hershey-Plain-Bold def" nl() " /NewCenturySchlbk-Roman /NewCenturySchlbk-Bold def" nl() " /NewCenturySchlbk-Italic /NewCenturySchlbk-BoldItalic def" nl() " /Palatino-Roman /Palatino-Bold def" nl() " /Palatino-Italic /Palatino-BoldItalic def" nl() " /ZapfChancery /ZapfChancery-Bold def" nl() " /ZapfChancery-MediumItalic /ZapfChancery-Bold def" nl() " /OmArabicRsimms /OmArabicRsimms-Bold def" nl() "end" nl() nl() "/boldfontname bolddict fontname get def" nl() "/boldifontname bolddict ifontname get def" nl() nl() "% The fshowdict is used to declare which PostScript proc to use" nl() "% to show strings. For some Arabic and Hebrew fonts at least, the" nl() "% characters have positive widths, which makes the 'show' command" nl() "% place a character to the right of the prior one." nl() "% A special 'show' variant, 'rlshow,' compensates for this." nl() "% Record font names, both internal and those used to refer to a font." nl() "% A font's real FontName should be here when there's the possibility" nl() "% of using aliases for that font -- like using ZapfChancery instead of" nl() "% ZapfChancery-MediumItalic. The font still thinks its name is the" nl() "% latter." nl() "/fshowdict 25 dict def" nl() "fshowdict begin" nl() " fontname /show def" nl() " ifontname /show def" nl() " boldfontname /show def" nl() " boldifontname /show def" nl() " labelfontname /show def" nl() /* these two are typical substitution fonts */ " /Courier /show def" nl() " /Helvetica-Bold /show def" nl() /* real font names, for which aliases may be used*/ " /ZapfChancery-MediumItalic /show def" nl() /* ADD NEW rlshow associations below here */ " /Baghdad /rlshow def" nl() " /Jerusalem /rlshow def" nl() " /Jslm /rlshow def" nl() " /OmArabicRsimms /rlshow def" nl() " /OmArabicRsimms-Bold /rlshow def" nl() " /OmegaSerifArabicOne /rlshow def" nl() "end" nl() nl() if(ne(enc_choice, 0)) { "/NewFont fontname reenc" nl() "/fontname /NewFont def" nl() nl() "/NewBoldFont boldfontname reenc" nl() "/boldfontname /NewBoldFont def" nl() nl() "/NewLabelFont labelfontname reenc" nl() "/labelfontname /NewLabelFont def" nl() nl() "/NewTitleFont titlefontname reenc" nl() "/titlefontname /NewTitleFont def" nl() nl() "/NewIFont ifontname reenc" nl() "/ifontname /NewIFont def" nl() nl() "/NewBoldIFont boldifontname reenc" "/boldifontname /NewBoldIFont def" "% end font reencoding" nl() nl() } "% Find printable dimension for chart with a sequence of steps" nl() nl() "% get printable area for each page" nl() "clippath pathbbox newpath" nl() "/ury exch def /urx exch def" nl() "/lly exch def /llx exch def" nl() nl() if(pacificpage) { "% adjust for PacificPage cartridge" nl() "statusdict /product known {" nl() " statusdict begin product end (PacificPage) eq" nl() " version (4.06) eq and {" nl() " /lly lly 5 add def" nl() " /ury ury 10 sub def" nl() " } if" nl() "} if" nl() nl() } if(nestr(paper_name, "NONE")) { "% ensure minimum margins and that chart fits in defined paper size" nl() "llx margin_left lt {/llx margin_left def} if" nl() "lly margin_bottom lt {/lly margin_bottom def} if" nl() "paper_height margin_top sub dup ury lt {/ury exch def}{pop} ifelse" nl() "paper_width margin_right sub dup urx lt {/urx exch def}{pop} ifelse" nl() nl() } else { /* paper dimensions not specified, so take margins from print area */ "/llx llx margin_left add def /lly lly margin_bottom add def" nl() "/urx urx margin_right sub def /ury ury margin_top sub def" nl() nl() } "% get available width and height for printing on a sheet of paper" nl() "/wp urx llx sub def" nl() "/hp ury lly sub def" nl() nl() "% adjust for portrait or landscape" nl() "portrait not {" nl() " /tmp hp def" nl() " /hp wp def" nl() " /wp tmp def" nl() "} if" nl() nl() "% get width and height of the multi-page printable area" nl() "/tw0 wp xpages mul def" nl() "/th0 hp ypages mul def" nl() nl() "% store vertical lines and individual records in arrays" nl() "/Alin " d(length(llist_depth)) " array def" nl() "/Aind " d(length(plist_person)) " array def" nl() nl() call print_all_verticals() nl() call print_all_persons() "%%EndSetUp" nl() set(yi, sub(yn, 1)) while(ge(yi, 0)) { set(yi_ord, sub(sub(yn, 1), yi)) set(xi, 0) while(lt(xi, xn)) { set(page_num, add(mul(yi_ord, xn), xi, 1)) "%%Page: " d(page_num) " " d(page_num) nl() if(nestr(paper_name, "NONE")) { "%%PageBoundingBox: 0 0 " d(paper_width) " " d(paper_height) nl() } d(xi) " " d(yi) " print-a-page" nl() "showpage" nl() set(xi, add(xi, 1)) } set(yi, sub(yi, 1)) } "%%EOF" nl() } lifelines-3.0.61/reports/ps-circle.ll0000700002540200244210000013466710076661057017702 0ustar prappDomain Users/* * @progname ps-circle.ll * @version 2.6.2 of 2003-12-10 * @author Jim Eggert (eggertj@ll.mit.edu), Henry Sikkema (hasikkema@yahoo.ca) * @category * @output PostScript * @description Print a five to ten-generation ancestry circle chart in PostScript. Version 2.5, December 2002 by Henry Sikkema (hasikkema@yahoo.ca) Version 1.1, September 2002 Version 1, 15 September 1993 by Jim Eggert (eggertj@ll.mit.edu) This program generates a basic five to ten-generation ancestry circle chart. Its output is a Postscript file specifying the chart. This program uses a modified version of the CIRC.PS program written by David Campbell and John Dunn. You must choose the number of generations to print (5 - 10 generations). For a larger number of generations the print may get VERY small but may be enlarged using a program such as Corel Draw or other programs and printed onto a larger paper or printed in parts. You have the option of creating a colour gradient background or an alternating colour scheme for males and females. The gradient does take a while to process since all I do is to draw and fill circles with decreasing radius. Please email (see above) me if you know how to make a better gradient. To change the colours you need to modify the resulting Postscript file. The colours are given in RGB format. The default colors are RED for female text and BLUE for male text, the backgrounds are opposite: light blue to female box fillin and light red for male box fill in. The default colour gradient is a light brown on the inside to a darker brown on the outside for an attempted antique look. http://sikkema.netfirms.com/family/tree/ps-circle/ps-circle.html The data currently printed depends on the level number and on the length of the names. When there are more than one given name (i.e. second and third names), if they are too long they are eliminated. The full birth date is printed if there is no known death date. In this case, the date is preceeded by 'b:' to indicate that the date is a birth, for example (b: 12 Sep 1901); the only exception is on level one where the 'b:' is dropped for the sake of space. When only a death date is known, it will be preceeded by a dash, for example (-1978). In every other case, only the birth and death years are printed, for example (1901-1978). The case (capitalization) of the names are not changed at all from the GEDCOM file. This data is currently printed: First line Second Line Third line ----------------------------------------------------------------- Level 1: Given Names Surname Dates Level 2: Full Name Dates --- Level 3: Full Name Dates --- Level 4: First Name Surname Dates Level 5: First Name Surname Dates Level 6: First Name Surname Dates Level 7: Full Name Dates --- Level 8: Full Name Dates --- Level 9: Full Name, Dates --- --- Level 10: Full Name, Dates --- --- Future: - color coding based on country of origin. (Robert Simms) - marriage date estimate - proper zooming in Ghostview - eliminate blank pages with small radius */ global(indicentre) global(marrest) global(version) global(printmarr) global(gradient) global(maxlevel) global(printdate) global(numindilines) global(nummarr) global(enc_choice) /* int, specifies character encoding to use */ global(x_pages) global(y_pages) global(radius) global(font_name) proc removeparentheses(n){ set(b,index(n,"(",1)) if(gt(b,0)){/*remove ( if it exists*/ set(cb,index(n,")",1)) if(gt(cb,b)){ /*remove upto the ) */ set(startpt,add(cb,1)) }else{ set(startpt,add(b,1)) } set(endpt,strlen(n)) if(gt(endpt,startpt)){ set(n,concat(trim(n,sub(b,1)),substring(n,startpt,endpt))) }else{ set(n,trim(n,sub(b,1))) } } set(b,index(n,")",1)) if(gt(b,0)){/*remove ) if it exists*/ set(startpt,add(b,1))set(endpt,strlen(n)) if(gt(endpt,startpt)){ set(n,concat(trim(n,sub(b,1)),substring(n,startpt,endpt))) }else{ set(n,trim(n,sub(b,1))) } } set(b,substring(n,strlen(n),strlen(n))) if(eq(b," ")){ /*remove final space if it exists*/ set(n,trim(n,sub(strlen(n),1))) } set(b,index(n," ",1)) if(gt(b,0)){/*remove double space if it exists*/ set(startpt,add(b,1))set(endpt,strlen(n)) if(gt(endpt,startpt)){ set(n,concat(trim(n,sub(b,1)),substring(n,startpt,endpt))) }else{ set(n,trim(n,sub(b,1))) } } n } proc put_given_name(person,length){ if (ne(trimname(person,add(length,strlen(surname(person)),1)),"")){set(l,trimname(person,add(length,strlen(surname(person)),1)))}else{set(l,givens(person))} if(ne(trim(l,sub(index(l,surname(person),1),2)),"")){set(n,trim(l,sub(index(l,surname(person),1),2)))} call removeparentheses(n) } proc put_full_name(person,sur_upper,n_order,length){ set(n,fullname(person,sur_upper,n_order,length)) call removeparentheses(n) } proc endline(ahnen,offset,info,max){") " d(ahnen) " " d(offset) " " d(info) " " d(max) "} addind\n"} proc putperson(family, person, level, ahnen, info,dateformat) { list(levellength) setel(levellength,1,25) setel(levellength,2,26) setel(levellength,3,23) setel(levellength,4,16) setel(levellength,5,15) setel(levellength,6,15) setel(levellength,7,21) setel(levellength,8,21) setel(levellength,9,21) setel(levellength,10,21) setel(levellength,11,21) set(max,0) set(offset,0) if(eq(dateformat,1)){ if (eq(level,1)) { if (givens(person)){set(max,add(max,1))} if (surname(person)){set(max,add(max,1))} if (or(year(death(person)),year(birth(person)))){set(max,add(max,1))} if (givens(person)){set(numindilines,add(numindilines,1))d(numindilines)" {"set(offset,add(offset,1)) "(" call put_given_name(person,getel(levellength,level)) call endline(ahnen,offset,info,max)} if (surname(person)){set(numindilines,add(numindilines,1))d(numindilines)" {"set(offset,add(offset,1)) "(" surname(person) call endline(ahnen,offset,info,max)} if (or(year(death(person)),year(birth(person)))){set(numindilines,add(numindilines,1))d(numindilines)" {"set(offset,add(offset,1)) "(" if (year(death(person))){year(birth(person))"-" year(death(person))}else{if(eq(indicentre,0)){"b:"}date(birth(person))}call endline(ahnen,offset,info,max)} }elsif(and(ge(level,2),le(level,6))){ if (givens(person)){set(max,add(max,1))} if (surname(person)){set(max,add(max,1))} if (or(year(death(person)),year(birth(person)))){set(max,add(max,1))} if (givens(person)){set(numindilines,add(numindilines,1))d(numindilines)" {"set(offset,add(offset,1)) "(" call put_given_name(person,getel(levellength,level)) call endline(ahnen,offset,info,max)} if (surname(person)){set(numindilines,add(numindilines,1))d(numindilines)" {"set(offset,add(offset,1)) "(" surname(person) call endline(ahnen,offset,info,max)} if (or(year(death(person)),year(birth(person)))){set(numindilines,add(numindilines,1))d(numindilines)" {"set(offset,add(offset,1)) "(" if (year(death(person))){"("year(birth(person))"-" year(death(person))")"}else{if (year(birth(person))){"b:"date(birth(person))}}call endline(ahnen,offset,info,max)} }elsif(or(eq(level,7),eq(level,8))){ if (or(givens(person),surname(person))){set(max,add(max,1))} if (or(year(death(person)),year(birth(person)))){set(max,add(max,1))} if (or(givens(person),surname(person))){set(numindilines,add(numindilines,1))d(numindilines)" {"set(offset,add(offset,1)) "(" call put_full_name(person,0,1,getel(levellength,level)) call endline(ahnen,offset,info,max)} if (or(year(death(person)),year(birth(person)))){set(numindilines,add(numindilines,1))d(numindilines)" {"set(offset,add(offset,1)) "(" if (year(death(person))){"("year(birth(person))"-" year(death(person))")"}else{if (year(birth(person))){"b:"date(birth(person))}}call endline(ahnen,offset,info,max)} }elsif(ge(level,9)){set(offset,add(offset,1))set(max,add(max,1)) set(numindilines,add(numindilines,1))d(numindilines)" {""(" call put_full_name(person,0,1,getel(levellength,level)) " " if (year(death(person))){"("year(birth(person))"-" year(death(person))")"}else{if (year(birth(person))){"b:"date(birth(person))}} call endline(ahnen,offset,info,max) } }elsif(ge(dateformat,2)){ /* (yyyy-yyyy) date format ------------------------------------- */ if (eq(level,1)) { if (givens(person)){set(max,add(max,1))} if (surname(person)){set(max,add(max,1))} if (or(eq(dateformat,3),or(year(death(person)),year(birth(person))))){set(max,add(max,1))} if (givens(person)){set(numindilines,add(numindilines,1))d(numindilines)" {"set(offset,add(offset,1)) "(" call put_given_name(person,getel(levellength,level)) call endline(ahnen,offset,info,max)} if (surname(person)){set(numindilines,add(numindilines,1))d(numindilines)" {"set(offset,add(offset,1)) "(" surname(person) call endline(ahnen,offset,info,max)} if (or(eq(dateformat,3),or(year(death(person)),year(birth(person))))){set(numindilines,add(numindilines,1))d(numindilines)" {"set(offset,add(offset,1)) "(" if (year(birth(person))){year(birth(person))}else{if(eq(dateformat,3)){" "}} "-" if (year(death(person))){year(death(person))}else{if(eq(dateformat,3)){" "}}call endline(ahnen,offset,info,max)} }elsif(and(ge(level,2),le(level,6))){ if (givens(person)){set(max,add(max,1))} if (surname(person)){set(max,add(max,1))} if (or(eq(dateformat,3),or(year(death(person)),year(birth(person))))){set(max,add(max,1))} if (givens(person)){set(numindilines,add(numindilines,1))d(numindilines)" {"set(offset,add(offset,1)) "(" call put_given_name(person,getel(levellength,level)) call endline(ahnen,offset,info,max)} if (surname(person)){set(numindilines,add(numindilines,1))d(numindilines)" {"set(offset,add(offset,1)) "(" surname(person) call endline(ahnen,offset,info,max)} if (or(eq(dateformat,3),or(year(death(person)),year(birth(person))))){set(numindilines,add(numindilines,1))d(numindilines)" {"set(offset,add(offset,1)) "((" if (year(birth(person))){year(birth(person))}else{if(eq(dateformat,3)){" "}} "-" if (year(death(person))){year(death(person))}else{if(eq(dateformat,3)){" "}} ")"call endline(ahnen,offset,info,max)} }elsif(or(eq(level,7),eq(level,8))){ if (or(givens(person),surname(person))){set(max,add(max,1))} if (or(eq(dateformat,3),or(year(death(person)),year(birth(person))))){set(max,add(max,1))} if (or(givens(person),surname(person))){set(numindilines,add(numindilines,1))d(numindilines)" {"set(offset,add(offset,1)) "(" call put_full_name(person,0,1,getel(levellength,level)) call endline(ahnen,offset,info,max)} if (or(eq(dateformat,3),or(year(death(person)),year(birth(person))))){set(numindilines,add(numindilines,1))d(numindilines)" {"set(offset,add(offset,1)) "((" if (year(birth(person))){year(birth(person))}else{if(eq(dateformat,3)){" "}} "-" if (year(death(person))){year(death(person))}else{if(eq(dateformat,3)){" "}} ")"call endline(ahnen,offset,info,max)} }elsif(ge(level,9)){set(offset,add(offset,1))set(max,add(max,1)) set(numindilines,add(numindilines,1))d(numindilines)" {""(" call put_full_name(person,0,1,getel(levellength,level)) if (or(eq(dateformat,3),or(year(death(person)),year(birth(person))))){" (" if (year(birth(person))){year(birth(person))}else{if(eq(dateformat,3)){" "}} "-" if (year(death(person))){year(death(person))}else{if(eq(dateformat,3)){" "}}")"} call endline(ahnen,offset,info,max) } } if (eq(printmarr,1)){ if (eq(marrest,1)){ /*marriage date estimation does not yet work!*/ if (ne(date(marriage(family)),"")){if (eq("M",sex(person))){set(nummarr,add(nummarr,1))d(nummarr)" {(" stddate(marriage(family)) ") " d(ahnen) " " d(info)"} addmarr\n"}} }else{ if (ne(date(marriage(family)),"")){if (eq("M",sex(person))){set(nummarr,add(nummarr,1))d(nummarr)" {(" stddate(marriage(family)) ") " d(ahnen) " " d(info)"} addmarr\n"}} } } } proc semicirc(family, person, level, ahnen, info, maxlevel,dateformat) { if (and(person,le(level,maxlevel))) { call putperson(family,person,level,ahnen,info,dateformat) set(nextlevel, add(level,1)) set(nextahnen, mul(ahnen,2)) call semicirc(parents(person), father(person), nextlevel, nextahnen, info,maxlevel,dateformat) call semicirc(parents(person), mother(person), nextlevel, add(nextahnen,1), info,maxlevel,dateformat) } } proc putpageprintouts(xn,yn){ set(page_num, 0) set(yi, sub(yn, 1)) while(ge(yi, 0)) { set(yi_ord, sub(sub(yn, 1), yi)) set(xi, sub(xn, 1)) while(ge(xi, 0)) { set(page_num, add(page_num, 1)) "%%Page: " d(page_num) " " d(page_num) "\n" "cleartomark mark\n" d(xi) " " d(yi) " print-a-page\n" "showpage\n" set(xi, sub(xi, 1)) } set(yi, sub(yi, 1)) } } proc printfile(){ "%!PS-Adobe-3.0\n" "%%Title: (PS-CIRCLE.PS - Circular Genealogical Pedigree Chart in Postscript format)\n" "%%Creator: " version " - a Lifelines circle ancestry chart report generator\n" "%%CreationDate: " stddate(gettoday()) "\n" "%%Pages: "d(mul(x_pages,y_pages))"\n" "%%PageOrder: Ascend\n" "%%Orientation: Portrait\n" "%%EndComments\n\n" "%%BeginDefaults\n" "%%ViewingOrientation: 1 0 0 1\n" "%%EndDefaults\n\n" "%%BeginProlog\n\n" "% much of the code involved with font encoding and with multipaging\n" "% is borrowed from Robert Simms \n\n" "%page margins\n" "/margin_top 20 def\n" "/margin_bottom 20 def\n" "/margin_left 20 def\n" "/margin_right 20 def\n\n" "%number of pages in each direction\n" "/xpages "d(x_pages)" def\n" "/ypages "d(y_pages)" def\n\n" "/fontname /"font_name" def\n\n" "/portrait true def\n\n" "/inch {72 mul} def\n\n" "/*SF { % Complete selectfont emulation\n" /**/ " exch findfont exch\n" " dup type /arraytype eq {makefont}{scalefont} ifelse setfont\n" "} bind def\n\n" "/BuildRectPath{\n" " dup type dup /integertype eq exch /realtype eq or{\n" " 4 -2 roll moveto %Operands are: x y width height\n" " dup 0 exch rlineto\n" " exch 0 rlineto\n" " neg 0 exch rlineto\n" " closepath\n" " }{\n" " dup length 4 sub 0 exch 4 exch{\n" " 1 index exch 4 getinterval aload pop\n" " BuildRectPath\n" " }for\n" " pop\n" " }ifelse\n" "} bind def\n\n" "/*RC { gsave newpath BuildRectPath fill grestore } bind def\n\n" /**/ "% install Level 2 emulations, or substitute built-in Level 2 operators\n" "/languagelevel where\n" " {pop languagelevel}{1} ifelse\n" "2 lt {\n" " /RC /*RC load def\n" /**/ " /SF /*SF load def\n" /**/ "}{\n" " /RC /rectclip load def % use RC instead of rectclip\n" " /SF /selectfont load def % use SF instead of selectfont\n" "} ifelse\n\n" "%Coordinate conversion utilities\n" "/polar { %(ang rad) -> (x y)\n" " /rad exch def /ang exch def\n" " /x rad ang cos mul def /y rad ang sin mul def\n" " x y\n" "} def\n\n" "/midang {\n" " /inf exch def\n" " inf 1 eq {360 2 maxlevel exp div mul -90.0 add} %for first level male, go counter clockwise from bottom\n" " {360 2 maxlevel exp div mul 90.0 add} ifelse %for first level female, go clockwise from bottom\n" "} def\n\n" "%Shortcut macros\n" "/m {moveto} def /l {lineto} def\n\n" "%Constants\n" "/pi 3.14159265358979 def\n" "/ptsize 10 def\n" "/offset ptsize 1.25 mul neg def\n\n" "/radius {4.0 7.0 div exch indicentre add mul inch} def\n" "%begin font encoding borrowed from Robert Simms\n" if(ne(enc_choice, 0)) { "/encvecmod* { % on stack should be /Encoding and an encoding array\n" " % make an array copy so we don't try to modify the original via pointer\n" " dup length array copy\n" " encvecmod aload length dup 2 idiv exch 2 add -1 roll exch\n" " {dup 4 2 roll put}\n" " repeat\n" "} def\n" "/reenc {\n" " findfont\n" " dup length dict begin\n" " {1 index /FID eq {pop pop} {\n" " 1 index /Encoding eq {\n" " encvecmod* def\n" " }{def} ifelse\n" " } ifelse\n" " } forall\n" " currentdict\n" " end\n" " definefont pop\n" "} def\n" } if(eq(enc_choice, 1)) { "% Adjust the font so that it is iso-8859-1 compatible\n" "/languagelevel where {pop languagelevel}{1} ifelse 2 ge {\n" " /encvecmod* {pop ISOLatin1Encoding} def % Use built-in ISOLatin1Encoding if PS interpreter is Level 2\n" "}{\n" /* This array indicates changes to go from the Standard Encoding Vector to the ISOLatin1 Encoding Vector for ISO-8859-1 compatibility, according to the PostScript Language Reference Manual, 2nd ed. The characters from A0 to FF are essential for 8859-1 conformance. */ " /encvecmod [\n" " 16#90 /dotlessi 16#91 /grave 16#92 /acute 16#93 /circumflex\n" " 16#94 /tilde 16#95 /macron 16#96 /breve 16#97 /dotaccent\n" " 16#98 /dieresis 16#99 /.notdef 16#9a /ring 16#9b /cedilla\n" " 16#9c /.notdef 16#9d /hungarumlaut 16#9e /ogonek 16#9f /caron\n" " 16#a0 /space 16#a1 /exclamdown 16#a2 /cent 16#a3 /sterling\n" " 16#a4 /currency 16#a5 /yen 16#a6 /brokenbar 16#a7 /section\n" " 16#a8 /dieresis 16#a9 /copyright 16#aa /ordfeminine 16#ab /guillemotleft\n" " 16#ac /logicalnot 16#ad /hyphen 16#ae /registered 16#af /macron\n" " 16#b0 /degree 16#b1 /plusminus 16#b2 /twosuperior 16#b3 /threesuperior\n" " 16#b4 /acute 16#b5 /mu 16#b6 /paragraph 16#b7 /periodcentered\n" " 16#b8 /cedilla 16#b9 /onesuperior 16#ba /ordmasculine 16#bb /guillemotright\n" " 16#bc /onequarter 16#bd /onehalf 16#be /threequarters 16#bf /questiondown\n" " 16#c0 /Agrave 16#c1 /Aacute 16#c2 /Acircumflex 16#c3 /Atilde\n" " 16#c4 /Adieresis 16#c5 /Aring 16#c6 /AE 16#c7 /Ccedilla\n" " 16#c8 /Egrave 16#c9 /Eacute 16#ca /Ecircumflex 16#cb /Edieresis\n" " 16#cc /Igrave 16#cd /Iacute 16#ce /Icircumflex 16#cf /Idieresis\n" " 16#d0 /Eth 16#d1 /Ntilde 16#d2 /Ograve 16#d3 /Oacute\n" " 16#d4 /Ocircumflex 16#d5 /Otilde 16#d6 /Odieresis 16#d7 /multiply\n" " 16#d8 /Oslash 16#d9 /Ugrave 16#da /Uacute 16#db /Ucircumflex\n" " 16#dc /Udieresis 16#dd /Yacute 16#de /Thorn 16#df /germandbls\n" " 16#e0 /agrave 16#e1 /aacute 16#e2 /acircumflex 16#e3 /atilde\n" " 16#e4 /adieresis 16#e5 /aring 16#e6 /ae 16#e7 /ccedilla\n" " 16#e8 /egrave 16#e9 /eacute 16#ea /ecircumflex 16#eb /edieresis\n" " 16#ec /igrave 16#ed /iacute 16#ee /icircumflex 16#ef /idieresis\n" " 16#f0 /eth 16#f1 /ntilde 16#f2 /ograve 16#f3 /oacute\n" " 16#f4 /ocircumflex 16#f5 /otilde 16#f6 /odieresis 16#f7 /divide\n" " 16#f8 /oslash 16#f9 /ugrave 16#fa /uacute 16#fb /ucircumflex\n" " 16#fc /udieresis 16#fd /yacute 16#fe /thorn 16#ff /ydieresis\n" " ] def\n" "} ifelse\n\n" } elsif(eq(enc_choice, 2)) { /* The following array specifies changes to make to a font encoding to make characters A0 through FF match the ISO Latin alphabet no. 2 This will work as long as there are instructions in the font for drawing the glyphs named here. Missing glyphs would be substituted with /.notdef from the font by the PostScript interpreter. */ "/encvecmod [\n" " 16#a0 /space 16#a1 /Aogonek 16#a2 /breve 16#a3 /Lslash\n" " 16#a4 /currency 16#a5 /Lcaron 16#a6 /Sacute 16#a7 /section\n" " 16#a8 /dieresis 16#a9 /Scaron 16#aa /Scedilla 16#ab /Tcaron\n" " 16#ac /Zacute 16#ad /hyphen 16#ae /Zcaron 16#af /Zdotaccent\n" " 16#b0 /degree 16#b1 /aogonek 16#b2 /ogonek 16#b3 /lslash\n" " 16#b4 /acute 16#b5 /lcaron 16#b6 /sacute 16#b7 /caron\n" " 16#b8 /cedilla 16#b9 /scaron 16#ba /scedilla 16#bb /tcaron\n" " 16#bc /zacute 16#bd /hungarumlaut 16#be /zcaron 16#bf /zdotaccent\n" " 16#c0 /Racute 16#c1 /Aacute 16#c2 /Acircumflex 16#c3 /Abreve\n" " 16#c4 /Adieresis 16#c5 /Lacute 16#c6 /Cacute 16#c7 /Ccedilla\n" " 16#c8 /Ccaron 16#c9 /Eacute 16#ca /Eogonek 16#cb /Edieresis\n" " 16#cc /Ecaron 16#cd /Iacute 16#ce /Icircumflex 16#cf /Dcaron\n" " 16#d0 /Dcroat 16#d1 /Nacute 16#d2 /Ncaron 16#d3 /Oacute\n" " 16#d4 /Ocircumflex 16#d5 /Ohungarumlaut 16#d6 /Odieresis 16#d7 /multiply\n" " 16#d8 /Rcaron 16#d9 /Uring 16#da /Uacute 16#db /Uhungarumlaut\n" " 16#dc /Udieresis 16#dd /Yacute 16#de /Tcommaaccent 16#df /germandbls\n" " 16#e0 /racute 16#e1 /aacute 16#e2 /acircumflex 16#e3 /abreve\n" " 16#e4 /adieresis 16#e5 /lacute 16#e6 /cacute 16#e7 /ccedilla\n" " 16#e8 /ccaron 16#e9 /eacute 16#ea /eogonek 16#eb /edieresis\n" " 16#ec /ecaron 16#ed /iacute 16#ee /icircumflex 16#ef /dcaron\n" " 16#f0 /dcroat 16#f1 /nacute 16#f2 /ncaron 16#f3 /oacute\n" " 16#f4 /ocircumflex 16#f5 /ohungarumlaut 16#f6 /odieresis 16#f7 /divide\n" " 16#f8 /rcaron 16#f9 /uring 16#fa /uacute 16#fb /uhungarumlaut\n" " 16#fc /udieresis 16#fd /yacute 16#fe /tcommaaccent 16#ff /dotaccent\n" "] def\n\n" } elsif(eq(enc_choice, 3)) { /* This array indicates changes necessary to go from the Standard Encoding Vector to one matching the int'l characters and some others in the IBM Extended Character Set */ "/encvecmod [\n" " 16#80 /Ccedilla 16#81 /udieresis 16#82 /eacute 16#83 /acircumflex\n" " 16#84 /adieresis 16#85 /agrave 16#86 /aring 16#87 /ccedilla\n" " 16#88 /ecircumflex 16#89 /edieresis 16#8a /egrave 16#8b /idieresis\n" " 16#8c /icircumflex 16#8d /igrave 16#8e /Adieresis 16#8f /Aring\n" " 16#90 /Eacute 16#91 /ae 16#92 /AE 16#93 /ocircumflex\n" " 16#94 /odieresis 16#95 /ograve 16#96 /ucircumflex 16#97 /ugrave\n" " 16#98 /ydieresis 16#99 /Odieresis 16#9a /Udieresis 16#9b /cent\n" " 16#9c /sterling 16#9d /yen 16#9e /.notdef 16#9f /florin\n" " 16#a0 /aacute 16#a1 /iacute 16#a2 /oacute 16#a3 /uacute\n" " 16#a4 /ntilde 16#a5 /Ntilde 16#a6 /ordfeminine 16#a7 /ordmasculine\n" " 16#a8 /questiondown 16#a9 /.notdef 16#aa /.notdef 16#ab /onehalf\n" " 16#ac /onequarter 16#ad /exclamdown 16#ae /guillemotleft 16#af /guillemotright\n" " 16#e1 /germandbls 16#ed /oslash 16#f1 /plusminus 16#f6 /divide\n" " 16#f8 /degree 16#f9 /bullet\n" "] def\n\n" } if(ne(enc_choice, 0)) { "/gedfont fontname reenc\n" "/fontname /gedfont def\n\n" } "%end font encoding end of section borrowed from Robert Simms\n" if (eq(gradient,1)){ "/gradient{ %draw and fill 256 circles with a decreasing radius and slightly diffent colour\n" " /blue2 exch def /green2 exch def /red2 exch def\n" " /blue1 exch def /green1 exch def /red1 exch def\n\n" " /maxrad maxlevel radius def\n" " /delta_r maxrad neg 256 div def %find radius step to use\n\n" " gsave\n" " maxrad delta_r 0.0 { %step through the circles from large to small\n" " /r exch def\n" " /ratio r maxrad div def\n" " /red red1 red2 sub ratio mul red2 add def % work out the new colour\n" " /blue blue1 blue2 sub ratio mul blue2 add def\n" " /green green1 green2 sub ratio mul green2 add def\n\n" " red green blue setrgbcolor\n" " newpath 0.0 0.0 r 0 360 arc fill %draw and fill circles\n" " } for\n" " grestore\n" "} def\n\n" } "/fan{ %Fan Template\n" " gsave\n" if(or(ne(printmarr,1),ne(transparent,1))){ " %begin gender specific shading of boxes\n" " /c 1 def %flag for the alternating colours\n" " 1 indicentre sub 1 maxlevel {%shade the boxes if necessary\n" " /i exch def\n" " /delta_ang 360.0 2 i exp div def %set the angle stepsize\n" " /r1 i radius def /r2 i 1 sub radius def %find the inner and outer radius for the box\n" if (ge(maxlevel,8)){ " i 8 ge {0}{0.7 radfactor div} ifelse" }else{ " .7 radfactor div" } " setlinewidth %if level is beyond 7 make lines thinnest possible\n\n" " 90.0 delta_ang 449.99 { %step through all angles from 90› to 90›+360› (450›)\n" " /ang1 exch def /ang2 ang1 delta_ang add def %find the beginning and ending angle for each box\n" " newpath\n" " i 0 gt{%draw the box\n" " ang1 r1 polar m 0 0 r1 ang1 ang2 arc ang2 r2 polar l 0 0 r2 ang2 ang1 arcn\n" " }{\n" " 0 0 1 radius 0 0 1 radius 0 360 arc\n" " }ifelse\n" " closepath\n" if(eq(transparent,0)){ " i 0 gt { %fill in box if necessary\n" " c 1 eq {/c1 0 def rf gf bf setrgbcolor} {/c1 1 def rm gm bm setrgbcolor} ifelse\n" " }{\n" " centrepersonsex 0 eq {rm gm bm setrgbcolor} {rf gf bf setrgbcolor} ifelse\n" " }ifelse\n" " gsave fill grestore\n" " i 0 gt{/c c1 def}if %exchange color for next box\n" " rl gl bl setrgbcolor\n\n" } if(eq(printmarr,0)){ if(eq(transparent,0)){ " i 9 le {stroke} if %draw outline of box if level is less than 10\n" }else{ " stroke\n" } } " }for\n" " }for %end gender specific shading of boxes\n" } if (eq(printmarr,1)){ " %begin draw boxes around husband and wife\n" " rl gl bl setrgbcolor\n" " 2 indicentre sub 1 maxlevel { %step through the levels\n" " /i exch def\n" if (ge(maxlevel,8)){ " i 8 ge {0}{0.7 radfactor div} ifelse" }else{ " .7 radfactor div" } " setlinewidth\n\n" " /delta_ang 360.0 2 i 1 sub exp div def %set the angle stepsize\n" " 90.0 delta_ang 449.99 {\n" " /ang1 exch def /ang2 ang1 delta_ang add def\n" " /r1 i radius def /r2 i 1 sub radius def\n\n" " %draw tic marks around marriage date\n" " /delta_r r1 r2 sub 15 div def\n" " /angave ang1 delta_ang 2 div add def\n" " /r_inner r2 delta_r add def\n" " /r_outer r1 delta_r sub def\n\n" " newpath angave r_outer polar m angave r1 polar l stroke\n" " r2 0 gt{\n" " newpath angave r2 polar m angave r_inner polar l stroke\n" " }if\n\n" if(eq(transparent,0)){ " rm gm bm setrgbcolor %erase small gap between male and female\n" " .5 setlinewidth\n" " newpath angave r_outer polar m angave r_inner polar l stroke\n" " rl gl bl setrgbcolor\n" if (ge(maxlevel,8)){ " i 8 ge {0}{0.7 radfactor div} ifelse" }else{ " .7 radfactor div" } " setlinewidth\n" } " %finish tic marks\n\n" " newpath %draw box around parents\n" " ang1 r1 polar m 0 0 r1 ang1 ang2 arc\n" " ang2 r2 polar l 0 0 r2 ang2 ang1 arcn closepath\n" " stroke\n" " }for\n" " }for %end draw boxes around husband and wife\n\n" } if (eq(printdate,1)){ " 0 0 0 setrgbcolor\n" " fontname 5 SF\n" " /radiusprint maxlevel radius 1.01 mul def\n" " datetoday radiusprint 300 circtext\n" } " grestore\n" "} def\n\n" "/angtext{ %Angled Line Printing Procedure for outer lines than do not curve\n" " /inf exch def /offst exch def /ang exch def /levelnum exch def /str exch def\n\n" " gsave\n" " ang rotate %rotate coordinate system for printing\n\n" " /r1 levelnum 1 sub radius def /r2 levelnum radius def\n" if(eq(printmarr,1)){ " levelnum 1 eq indicentre 0 eq and{/r1 0 def /r2 0 def}if\n\n" } " /y r1 r2 add 2 div def\n\n" " inf 0 eq{0 offst -10 mul 15 add translate}{y 0.0 translate}ifelse\n\n" " str stringwidth pop 2 div neg offst moveto\n" " str show\n" " grestore\n" "} def\n\n" "/circtext{ %Circular Line Printing Procedure for inner lines than do curve\n\n" " /angle exch def /textradius exch def /str exch def\n\n" " /xradius textradius ptsize 4 div add def\n" " gsave\n" " angle str findhalfangle add rotate\n" " str {/charcode exch def ( ) dup 0 charcode put circchar} forall\n" " grestore\n" "} def\n\n" "/findhalfangle {stringwidth pop 2 div 2 xradius mul pi mul div 360 mul} def\n\n" "/circchar{ %print each character at a different angle around the circle\n" " /char exch def\n\n" " /halfangle char findhalfangle def\n" " gsave\n" " halfangle neg rotate\n" " textradius 0 translate\n" " -90 rotate\n" " char stringwidth pop 2 div neg 0 moveto\n" " char show\n" " grestore\n" " halfangle 2 mul neg rotate\n" "} def\n\n" "/setprintcolor{\n" " /ahnen exch def /inf exch def\n" " ahnen 2 div dup cvi eq {redmale greenmale bluemale setrgbcolor}{redfemale greenfemale bluefemale setrgbcolor} ifelse\n" " ahnen inf mul 1 eq {redmale greenmale bluemale setrgbcolor} if\n" "} def\n\n" "/position{ %compute position from ahnentafel number\n" " /ahnenn exch def\n" " ahnenn 2 maxlevel -1 add exp lt {\n" " /a 2 ahnenn log 1.9999 log div floor exp def\n" " /numerator 2 a mul -1 add -2 ahnenn a neg add mul add def\n" " /fact 2 maxlevel -2 add exp def\n" " numerator a div fact mul\n" " }{2 maxlevel exp ahnenn neg add} ifelse\n" "} def\n\n" "/level {1 add log 2 log div ceiling cvi} def %compute generation level from ahnentafel number\n\n" "/info{\n" " /max exch def /inf exch def /noffset exch def /ahnen exch def\n" " /fntfactor {[0 0.85 0.85 0.8 0.7 0.5 0.4 0.3 0.3 0.25 0.25 0.25 0.25] exch get} def %set different font sizes for each level\n\n" " ahnen 2 maxlevel exp lt {\n" " /place ahnen position def\n" " /levelnum ahnen level def %get the level number of the current person\n" " /radtab levelnum radius def %get the radius of the current level\n" " /ftsize ptsize levelnum fntfactor mul def %find the new fontsize depending on the current level number\n" " /offset ftsize 1.25 mul neg def %find the distance that the text should be printed from the ring\n" " inf ahnen setprintcolor %print the names and information in alternating colors as defined below in line #350\n" " fontname ftsize SF %set the font to use\n\n" " levelnum 5 lt {levelnum radtab place noffset inf max inner} % the inner four rings\n" " {levelnum place noffset inf 0 max outer} ifelse % all outer rings\n" " } if\n" "} def\n\n" if(eq(indicentre,1)){ "/indiinfo{\n" " /inf exch def /noffset exch def /ahnen exch def\n" " /ftsize ptsize 0.9 mul def %find the new fontsize depending on the current level number\n" " /offset ftsize 1.25 mul neg def %find the distance that the text should be printed from the ring\n" " inf ahnen setprintcolor %print the names and information in alternating colors as defined below in line #350\n" " fontname ftsize SF %set the font to use\n\n" " 0 0 noffset 0 angtext\n" "} def\n\n" } "/nstr 7 string def\n" "/prtn {-0.5 inch 5.5 inch m nstr cvs show} def\n" "/prt {-0.5 inch 5.5 inch m show} def\n\n" if (eq(printmarr,1)){ "/minfo{\n" " /inf exch def /ahnen exch def\n" " /fntfactor {[0 0.7 0.7 0.6 0.6 0.5 0.4 0.3 0.3 0.25 0.25 0.25 0.25] exch get} def %set different font sizes for each level\n\n" " ahnen 2 maxlevel exp lt {\n" " /place ahnen 1 eq {0}{ahnen 2 div position}ifelse def %get the position of the text counting on the outer ring from bottom upwards\n" " /levelnum ahnen level def %get the level number of the current person\n" " /ftsize ptsize levelnum fntfactor mul 0.80 mul def %find the new fontsize depending on the current level number\n" " /offset ftsize 0.35 mul neg def %find the distance that the text should be printed from the ring\n" " rl gl bl setrgbcolor\n" " dup\n" " /namelength exch length def\n" " /f namelength 11 lt {1}{11 namelength div}ifelse def\n" " fontname ftsize f mul SF %set the font to use\n\n" " levelnum place 0 inf 1 1 outer\n" " } if\n" "} def\n\n" } "/inner{\n" " /max exch def /inf exch def /noffset exch def /place exch def /radtab exch def /levelnum exch def\n" " % slight modifications for each level for line spacing\n" if(eq(indicentre,0)){ " max 3 eq {/factor {[0.0 0.98 0.97 0.97 0.975] exch get} def}if\n" " max 2 eq {/factor {[0.0 0.80 0.885 0.935 0.94] exch get} def}if\n" " max 1 eq {/factor {[0.0 0.70 0.835 0.905 0.91] exch get} def}if\n\n" } if(eq(indicentre,1)){ " max 3 eq {/factor {[0.0 0.96 0.98 0.98 0.975] exch get} def}if\n" " max 2 eq {/factor {[0.0 0.96 0.935 0.945 0.94] exch get} def}if\n" " max 1 eq {/factor {[0.0 0.96 0.905 0.915 0.91] exch get} def}if\n\n" } " levelnum 1 eq indicentre 0 eq and{/offset offset 0.75 mul def} if %max the offset a bit smaller for the first level\n" " radtab levelnum factor mul noffset offset mul add place inf midang circtext\n" "} def\n\n" "/outer{\n" " /max exch def /marr exch def /inf exch def /noffset exch def /place exch def /levelnum exch def\n\n" " % in the following:\n" " % f1 spreads the text out apart from eachother when more positive (larger)\n" " % f2 shifts the set of text counter clockwise when more positive (larger)\n" if(eq(maxlevel,5)){ " max 3 eq {levelnum 5 eq {/f1 -2.5 def /f2 1.35 def} if}if\n" " max 2 eq {levelnum 5 eq {/f1 -2.5 def /f2 0.25 def} if}if\n\n" } if(eq(maxlevel,6)){ " max 3 eq {levelnum 5 eq {/f1 -2.5 def /f2 6.50 def} if\n" " levelnum 6 eq {/f1 -1.7 def /f2 1.50 def} if}if\n" " max 2 eq {\n" " levelnum 5 eq {/f1 -2.5 def /f2 4.85 def} if\n" " levelnum 6 eq {/f1 -1.7 def /f2 1.50 def} if}if\n\n" } if(eq(maxlevel,7)){ " max 3 eq {levelnum 5 eq {/f1 -2.5 def /f2 6.50 def} if\n" " levelnum 6 eq {/f1 -1.6 def /f2 4.30 def} if}if\n" " max 2 eq {\n" " levelnum 5 eq {/f1 -2.5 def /f2 4.85 def} if\n" " levelnum 6 eq {/f1 -1.6 def /f2 3.30 def} if\n" " levelnum 7 eq {/f1 -1.0 def /f2 0.70 def} if}if\n" " max 1 eq {\n" " levelnum 5 eq {/f1 -2.5 def /f2 4.85 def} if\n" " levelnum 6 eq {/f1 -1.6 def /f2 4.30 def} if\n" " levelnum 7 eq {/f1 -2.0 def /f2 1.20 def} if}if\n\n" } if(eq(maxlevel,8)){ " max 3 eq {levelnum 5 eq {/f1 -2.5 def /f2 6.50 def} if\n" " levelnum 6 eq {/f1 -1.6 def /f2 4.30 def} if}if\n" " max 2 eq {\n" " levelnum 5 eq {/f1 -2.5 def /f2 4.85 def} if\n" " levelnum 6 eq {/f1 -1.6 def /f2 3.30 def} if\n" " levelnum 7 eq {/f1 -1.0 def /f2 2.20 def} if\n" " levelnum 8 eq {/f1 -0.7 def /f2 0.80 def} if}if\n" " max 1 eq {\n" " levelnum 5 eq {/f1 -2.5 def /f2 4.85 def} if\n" " levelnum 6 eq {/f1 -1.6 def /f2 3.30 def} if\n" " levelnum 7 eq {/f1 -1.0 def /f2 1.50 def} if\n" " levelnum 8 eq {/f1 -0.7 def /f2 0.50 def} if}if\n\n" } if(eq(maxlevel,9)){ " max 3 eq {levelnum 5 eq {/f1 -2.5 def /f2 6.50 def} if\n" " levelnum 6 eq {/f1 -1.6 def /f2 4.30 def} if}if\n" " max 2 eq {\n" " levelnum 5 eq {/f1 -2.5 def /f2 4.85 def} if\n" " levelnum 6 eq {/f1 -1.6 def /f2 4.00 def} if\n" " levelnum 7 eq {/f1 -1.0 def /f2 2.00 def} if\n" " levelnum 8 eq {/f1 -0.6 def /f2 1.40 def} if}if\n" " max 1 eq {\n" " levelnum 5 eq {/f1 -2.5 def /f2 4.85 def} if\n" " levelnum 6 eq {/f1 -1.6 def /f2 4.00 def} if\n" " levelnum 7 eq {/f1 -1.0 def /f2 2.00 def} if\n" " levelnum 8 eq {/f1 -0.6 def /f2 1.40 def} if\n" " levelnum 9 eq {/f1 0.0 def /f2 0.00 def} if}if\n\n" } if(eq(maxlevel,10)){ " max 3 eq {levelnum 5 eq {/f1 -2.5 def /f2 6.50 def} if\n" " levelnum 6 eq {/f1 -1.6 def /f2 4.30 def} if}if\n" " max 2 eq {\n" " levelnum 5 eq {/f1 -2.5 def /f2 4.85 def} if\n" " levelnum 6 eq {/f1 -1.6 def /f2 4.00 def} if\n" " levelnum 7 eq {/f1 -1.0 def /f2 2.00 def} if\n" " levelnum 8 eq {/f1 -0.6 def /f2 1.40 def} if}if\n" " max 1 eq {\n" " levelnum 5 eq {/f1 -2.5 def /f2 4.85 def} if\n" " levelnum 6 eq {/f1 -1.6 def /f2 4.00 def} if\n" " levelnum 7 eq {/f1 -1.0 def /f2 1.70 def} if\n" " levelnum 8 eq {/f1 -0.6 def /f2 1.20 def} if\n" " levelnum 9 eq {/f1 0.0 def /f2 0.40 def} if\n" " levelnum 10 ge{/f1 0.0 def /f2 0.225 def}if}if\n\n" } " marr 1 eq {/f1 0.0 def /f2 0.0 def} if\n\n" " /ang place inf midang f1 noffset mul f2 add add def\n" " levelnum ang offset inf angtext\n" "} def\n\n" "% borrowed from Robert Simms\n" if(eq(indicentre,1)){ "/addcenterindi {centerperson_array 3 1 roll put} def\n" } if(eq(printmarr,1)){ "/addmarr {marriage_array 3 1 roll put} def\n" } "/addind {person_array 3 1 roll put} def\n\n" } proc main() { monthformat(4) stddate(0) dayformat(2) set(version, "ps-circle.ll version 2.6.2, 10 December 2003 - code by Henry Sikkema") set(numindilines,-1) set(nummarr,-1) set(mc, -1) while (lt(mc,0)){ list(options) setel(options,1,"Family in centre (husband/wife).") setel(options,2,"Individual in centre") set(mc,menuchoose(options, "Select the number of generations you want printed:")) if(eq(mc,0)){break()} if(eq(mc,1)){set(indicentre,0) getfam(fam)} if(eq(mc,2)){set(indicentre,1) getindi(person)} } list(options) setel(options,1,"5 generations.") setel(options,2,"6 generations.") setel(options,3,"7 generations.") setel(options,4,"8 generations.") setel(options,5,"9 generations.") setel(options,6,"10 generations.") set(maxlevel,menuchoose(options, "Select the numbers of generation you want printed:")) if(eq(maxlevel,0)){break()} set(maxlevel,add(maxlevel,4)) list(options) setel(options,1,"Full birth date info if no date is given: ex b:11 Oct 1758") setel(options,2,"Year only format: example (1758-1823)") setel(options,3,"Year only format (spaces for unknown date) ex: ( -1823)") set(mc, menuchoose(options, "Select date format:")) if(eq(mc,0)){break()} if(eq(mc,1)){set(dateformat,1)} if(eq(mc,2)){set(dateformat,2)} if(eq(mc,3)){set(dateformat,3)} list(options) setel(options,1,"Yes, print marriage dates only if exact date is known.") setel(options,2,"Yes, print marriage date even when estimate is found in file") setel(options,3,"No, do not print marriage dates.") set(mc, menuchoose(options, "Print marriage dates?")) if(eq(mc,0)){break()} if(eq(mc,1)){set(printmarr,1)set(marrest,0)} if(eq(mc,3)){set(printmarr,0)} if(eq(mc,2)){set(printmarr,1)set(marrest,1)} list(options) setel(options,1,"Colour text (default: blue for males, red for females)") setel(options,2,"Black Text (best for printing on non-colour printers)") set(mc, menuchoose(options, "Select text colour option:")) if(eq(mc,0)){break()} if(eq(mc,1)){set(colourtext,1)} if(eq(mc,2)){set(colourtext,0)} list(options) setel(options,1,"Gender Specific Colour scheme (default: pink for males, light blue for females)") setel(options,2,"Transparent Background (best for printing on non-colour printers)") setel(options,3,"Gradient Colour scheme") set(mc,menuchoose(options, "Select text colour option:")) if (eq(mc,0)){break()} if (eq(mc,1)){set(alternating,1)set(gradient,0)} if (eq(mc,2)){set(alternating,0)set(gradient,0)} if (eq(mc,3)){set(alternating,0)set(gradient,1)} list(options) setel(options,1,"Yes, put on today's date.") setel(options,2,"No, do not put on today's date.") set(mc,menuchoose(options, "Do you want today's date printed on the circle?")) if (eq(mc,0)){break()} if (eq(mc,1)){set(printdate,1)} if (eq(mc,2)){set(printdate,0)} list(options) setel(options,1,"Helvetica/Arial") setel(options,2,"Times-Roman") setel(options,3,"Courier") setel(options,4,"AvantGarde-Book") setel(options,5,"Times-Roman") setel(options,6,"ZapfChancery") set(mc,menuchoose(options, "Choose a font to use:")) if (eq(mc,0)){break()} if (eq(mc,1)){set(font_name,"Helvetica")} if (eq(mc,2)){set(font_name,"Times-Roman")} if (eq(mc,3)){set(font_name,"Courier")} if (eq(mc,4)){set(font_name,"AvantGarde-Book")} if (eq(mc,5)){set(font_name,"Palatino-Roman")} if (eq(mc,6)){set(font_name,"ZapfChancery")} list(options) setel(options,1,"Single page (maximum circle size on a single page)") setel(options,2,"Multipage according to number of pages selected") setel(options,3,"Multipage according to radius of chart") set(mc,menuchoose(options, "Select page type: ")) if (eq(mc,0)){break()} if (eq(mc,1)){ set(x_pages,1)set(y_pages,1)set(radius,0) } if(gt(mc,1)){ print( "Radius (inches) # of pages Radius (inches) # of pages" ,nl()," 0-8 1x1=1 32-33 4x4=16" ,nl()," 8-10 2x1=2 33-42 5x4=20" ,nl()," 10-16 2x2=4 42-43 6x4=24" ,nl()," 16-21 3x2=6 43-50 6x5=30" ,nl()," 21-25 3x3=9 50-54 7x5=35" ,nl()," 25-32 4x3=12 54-59 7x6=42",nl() ) } if (eq(mc,2)){ getint( x_pages, "Number of horizontal portrait pages on chart") getint( y_pages, "Number of vertical portrait pages on chart") set(radius,0) } if (eq(mc,3)){ getint(radius, "Enter desired radius in inches:") if (le(radius,8)){set(x_pages,1)set(y_pages,1)} if (and(ge(radius,8),lt(radius,10))){set(x_pages,2)set(y_pages,1)} if (and(ge(radius,10),lt(radius,16))){set(x_pages,2)set(y_pages,2)} if (and(ge(radius,16),lt(radius,21))){set(x_pages,3)set(y_pages,2)} if (and(ge(radius,21),lt(radius,25))){set(x_pages,3)set(y_pages,3)} if (and(ge(radius,25),lt(radius,32))){set(x_pages,4)set(y_pages,3)} if (and(ge(radius,32),lt(radius,33))){set(x_pages,4)set(y_pages,4)} if (and(ge(radius,33),lt(radius,42))){set(x_pages,5)set(y_pages,4)} if (and(ge(radius,42),lt(radius,43))){set(x_pages,6)set(y_pages,4)} if (and(ge(radius,43),lt(radius,50))){set(x_pages,6)set(y_pages,5)} if (and(ge(radius,50),lt(radius,54))){set(x_pages,7)set(y_pages,5)} if (and(ge(radius,54),lt(radius,59))){set(x_pages,7)set(y_pages,6)} } print(nl()) /* ** ISO-Latin 1, or ISO 8859-1, is a world-wide standard for most languages ** of Latin origin: Albanian, Basque, Breton, Catalan, Cornish, Danish, Dutch ** English, Faroese, Finish (exc. S,s,Z,z with caron), ** French (exc. OE, oe, Y with dieresis), Frisian, Galician, German, ** Greenlandic, Icelandic, Irish Gaelic (new orthography), Italian, Latin, ** Luxemburgish, Norwegian, Portuguese, Rhaeto-Romanic, Scottish Gaelic, ** Spanish, Swedish. ** ** ISO Latin 2, or ISO 8859-2, covers these languages: Albanian, Croatian, ** Czech, English, German, Hungarian, Latin, Polish, Romanian (cedilla below ** S,s,T,t instead of comma), Slovak, Sloverian, Sorbian. */ list(options) setel(options, 1, "ISO Latin 1 most West European languages") setel(options, 2, "ISO Latin 2 Central and East European languages") setel(options, 3, "IBM PC (covers at least the international chars)") set(enc_choice, menuchoose(options, "Select font reencoding, or (q) to use what's in the fonts")) if (eq(enc_choice,0)){break()} call printfile() if (eq(printdate,1)){ monthformat(6) /*capitalized full word (eg, January, February) */ "/datetoday (Date: " stddate(gettoday()) ") def\n\n" monthformat(4) /*capitalized abbreviation (eg, Jan, Feb) */ } "/indicentre "d(indicentre)" def %1=put individual in centre,0=family at centre\n" if(eq(indicentre,1)){if(eq(sex(person),"M")){set(psex,0)}else{set(psex,1)} "/centrepersonsex "d(psex)" def %0=male; 1=female\n\n"}else{"\n"} "/maxlevel " d(maxlevel) " def\n" "% color of the text in RGB format\n" if(eq(colourtext,1)){ "/redmale 0.0 def /greenmale 0.0 def /bluemale 1.0 def\n" "/redfemale 1.0 def /greenfemale 0.0 def /bluefemale 0.0 def\n\n" }else{ "/redmale 0.0 def /greenmale 0.0 def /bluemale 0.0 def\n" "/redfemale 0.0 def /greenfemale 0.0 def /bluefemale 0.0 def\n\n" } if (eq(gradient,1)){ "0.6431 0.3255 0.0228 % inside centre color in RGB format\n" "0.9922 0.7686 0.5490 % outside rim color in RGB format to form a radial gradient\n" "gradient\n\n" "/transparent 1 def % 1=transparent, 0=color shading\n\n" "/rf 0.0 def /gf 0.0 def /bf 0.0 def %rgb female box fill\n" "/rm 0.0 def /gm 0.0 def /bm 0.0 def %rgb male box fill\n\n" }else{ if (eq(alternating,0)){ "/transparent 1 def % 1=transparent, 0=color shading\n\n" "/rf 1.0 def /gf 1.0 def /bf 1.0 def %rgb female box fill\n" "/rm 1.0 def /gm 1.0 def /bm 1.0 def %rgb male box fill\n\n" }else{ "/transparent 0 def % 1=transparent, 0=color shading\n\n" "/rf 0.8 def /gf 0.8 def /bf 1.0 def %rgb female box fill\n" "/rm 1.0 def /gm 0.8 def /bm 0.8 def %rgb male box fill\n\n" } } /* "/printmarr "d(printmarr)" def\n"*/ "/rl 0.0 def /gl 0.0 def /bl 0.0 def % rgb for lines\n" "% partially borrowed from Robert Simms\n" "% Find printable dimension for chart with a sequence of steps\n\n" "% get printable area for each page\n" "clippath pathbbox newpath\n" "/ury exch def /urx exch def\n" "/lly exch def /llx exch def\n\n" "/llx llx margin_left add def /lly lly margin_bottom add def\n" "/urx urx margin_right sub def /ury ury margin_top sub def\n\n" "% get available width and height for printing on a sheet of paper\n" "/wp urx llx sub def\n" "/hp ury lly sub def\n\n" "% get width and height of the multi-page printable area\n" "/tw0 wp xpages mul def\n" "/th0 hp ypages mul def\n\n" "tw0 th0 gt {\n" if(eq(radius,0)) {" /mindim th0 def\n"} " th0 wp div ceiling cvi xpages lt {/xpages th0 wp div ceiling cvi def /tw0 wp xpages mul def /ypages ypages def}{/xpages xpages def /ypages ypages def}ifelse\n" "}{\n" if(eq(radius,0)) {" /mindim tw0 def\n"} " tw0 hp div ceiling cvi ypages lt {/ypages tw0 hp div ceiling cvi def /th0 hp ypages mul def /xpages xpages def}{/xpages xpages def /ypages ypages def}ifelse\n" "}ifelse\n\n" if(gt(radius,0)) { "/radfactor " d(radius) " inch 8 inch div def\n" }else{ "/radfactor mindim 8 inch div def\n" } "/scalefactor 7.0 maxlevel indicentre add div radfactor mul def\n\n" "/print-a-page { % page printing procedure\n" " /ypage exch ypages 2 div 1 sub sub def %y-correction to center chart\n" " /xpage exch xpages 2 div 1 sub sub def %x-correction to center chart\n" " ypage ypages lt xpage xpages lt and { %only print if page is in correct range\n" " gsave\n" " llx lly translate\n" " 0 0 wp hp RC % specify (rectangular) clipping path to keep the margins clean\n" " xpage wp mul ypage hp mul translate % move origin so that desired portion of chart lands within clipping path\n" " scalefactor dup scale %enlarge scale to fit page\n" " fan %draw circle template\n" if(eq(indicentre,1)){" centerperson_array {exec indiinfo} forall %put in center person\n"} " person_array {exec info} forall %put in all people with dates\n" if(eq(printmarr,1)) {" marriage_array {exec minfo} forall %put in marriage dates\n"} " 1 dup scale %reset scale to normal\n" " grestore\n" " } if\n" "} def % print-a-page procedure\n\n" "%%EndProlog\n" "%%BeginSetUp\n\n" "/fillarray{% store vertical lines and individual records in arrays\n" if(eq(indicentre,1)){ "0 {(" call put_given_name(person,20) ") " d(psex) " 1 0} addcenterindi\n" "1 {(" surname(person) ") " d(psex) " 2 0} addcenterindi\n" "2 {(" if (or(eq(dateformat,0),year(death(person)))){year(birth(person))"-" year(death(person))}else{date(birth(person))}") " d(psex) " 3 0} addcenterindi\n" call semicirc(parents(person),father(person),1,1,1,maxlevel,dateformat) call semicirc(parents(person),mother(person),1,1,2,maxlevel,dateformat) }else{ call semicirc(fam,husband(fam),1,1,1,maxlevel,dateformat) call semicirc(fam,wife(fam),1,1,2,maxlevel,dateformat) } "} def\n\n" if(eq(indicentre,1)){"/centerperson_array 3 array def\n"} if(eq(printmarr,1)){"/marriage_array "d(add(nummarr,1))" array def\n"} "/person_array "d(add(numindilines,1))" array def\n" "fillarray\n\n" "mark\n\n" "%%EndSetUp\n" call putpageprintouts(x_pages,y_pages) "%%EOF\n" print("Output file full-name: ", outfile(), nl()) } lifelines-3.0.61/reports/ps-fan/0000700002540200244210000000000010657071735016633 5ustar prappDomain Userslifelines-3.0.61/reports/ps-fan/ps-fan.ll0000700002540200244210000000304510077360647020354 0ustar prappDomain Users/* * @progname ps-fan1.ll * @version 1993-08-16 * @author Andrew Deacon (deacon@inf.ethz.ch) * @category * @output PostScript * @description * * Write a PostScript fan chart. * * Code (by Tom re-arranged) by Andrew Deacon, deacon@inf.ethz.ch * * This report works only with the LifeLines Genealogy program * * This report was adapted from a file made by Cliff Manis using the * GEDCHART software written by Tom Blumer. * * Output is a PostScript file. The file "ps-fan.ps" is included * when the report is generated. This file consists of the PostScript * commands used by the GEDCHART software written by Tom Blumer. * */ global(PS_HDR_FILE) proc main () { set (nl,nl()) getindi(indi) set(PS_HDR_FILE, "ps-fan.ps") /* PostScript Header file name */ copyfile(PS_HDR_FILE) call pedigree(0, 1, 1, indi) "showpage" nl() /* PostScript Tail command */ } proc pedigree (in, lev, ah, indi) { "(" fullname(indi,1,1,50) ")" " (" if (evt, birth(indi)) { "b. " date(birth(indi)) } ")" " (" if (evt, death(indi)) { "d. " date(death(indi)) } ")" " " d(in) " " d(sub(ah, lev)) " i" nl() if (lt(in,4)) { if (par, father(indi)) { call pedigree(add(1,in), mul(2,lev), mul(2,ah), par) } if (par, mother(indi)) { call pedigree(add(1,in), mul(2,lev), add(1,mul(2,ah)), par) } } } lifelines-3.0.61/reports/ps-fan/ps-fan.ps0000700002540200244210000002066610077366776020410 0ustar prappDomain Users%!PS-Adobe-2.0 EPSF-1.2 %%BoundingBox:0 0 1100 790 /maxlevel 5 def /color false def /lr 0 def /lg 1 def /lb 1 def /Lr 0 def /Lg 0 def /Lb 1 def /tr 0 def /tg 1 def /tb 1 def /Tr 0 def /Tg 0 def /Tb 1 def /fontname /Helvetica def /encvec [ 16#80 /Ccedilla 16#81 /udieresis 16#82 /eacute 16#83 /acircumflex 16#84 /adieresis 16#85 /agrave 16#86 /aring 16#87 /ccedilla 16#88 /ecircumflex 16#89 /edieresis 16#8a /egrave 16#8b /idieresis 16#8c /icircumflex 16#8d /igrave 16#8e /Adieresis 16#8f /Aring 16#90 /Eacute 16#91 /ae 16#92 /AE 16#93 /ocircumflex 16#94 /odieresis 16#95 /ograve 16#96 /ucircumflex 16#97 /ugrave 16#98 /ydieresis 16#99 /Odieresis 16#9a /Udieresis 16#9b /cent 16#9c /sterling 16#9d /yen 16#9f /florin 16#a0 /aacute 16#a1 /iacute 16#a2 /oacute 16#a3 /uacute 16#a4 /ntilde 16#a5 /Ntilde 16#a6 /ordfeminine 16#a7 /ordmasculine 16#a8 /questiondown 16#aa /logicalnot 16#ab /onehalf 16#ac /onequarter 16#ad /exclamdown 16#ae /guillemotleft 16#af /guillemotright ] def % Copyright (c) 1991-1993 Thomas P. Blumer. All Rights Reserved. /border true def color { /setcmykcolor where { pop Tr Tg Tb add add 0 eq { /Tk 1 def } { /Tk 0 def /Tr 1 Tr sub def /Tg 1 Tg sub def /Tb 1 Tb sub def } ifelse Lr Lg Lb add add 0 eq { /Lk 1 def } { /Lk 0 def /Lr 1 Lr sub def /Lg 1 Lg sub def /Lb 1 Lb sub def } ifelse /textcolr0 {Tr Tg Tb Tk setcmykcolor} bind def % direct ancestor name /lincolr0 {Lr Lg Lb Lk setcmykcolor} bind def % direct ancestor lines } { /textcolr0 {Tr Tg Tb setrgbcolor} bind def % direct ancestor name /lincolr0 {Lr Lg Lb setrgbcolor} bind def % direct ancestor lines } ifelse } { /textcolr0 {} bind def /lincolr0 {} bind def } ifelse % get printable area clippath pathbbox newpath /ury exch def /urx exch def /lly exch def /llx exch def /lly lly 5 add def /ury ury 10 sub def % set landscape mode, get width and height /w ury lly sub def /h urx llx sub def w h lt { % stay in portrait mode llx lly translate /tmp h def /h w def /w tmp def } { % set landscape mode urx lly translate 90 rotate } ifelse % decorative border border { /bwid1 2.5 def /gapwid 1.5 def /bwid2 0.7 def /rect { /rh exch def /rw exch def moveto rw 0 rlineto 0 rh rlineto rw neg 0 rlineto closepath stroke } def bwid1 setlinewidth lincolr0 bwid1 2 div dup w bwid1 sub h bwid1 sub rect bwid2 setlinewidth bwid1 gapwid bwid2 2 div add add dup w bwid1 2 mul sub gapwid 2 mul sub bwid2 sub h bwid1 2 mul sub gapwid 2 mul sub bwid2 sub rect % cut the border out of the imageable area /tmp bwid1 gapwid bwid2 gapwid add add add def tmp tmp translate /w w tmp 2 mul sub def /h h tmp 2 mul sub def } if % Reencode the font so that we can use the IBMPC set of international chars /encdict 12 dict def /reenc { encdict begin /newenc exch def /nfont exch def /ofont exch def /ofontdict ofont findfont def /newfont ofontdict maxlength 1 add dict def ofontdict { exch dup /FID ne { dup /Encoding eq {exch dup length array copy newfont 3 1 roll put} {exch newfont 3 1 roll put} ifelse } {pop pop} ifelse } forall newfont /Fontname nfont put newenc aload pop newenc length 2 idiv { newfont /Encoding get 3 1 roll put} repeat nfont newfont definefont pop end } def fontname /gedfont encvec reenc /fontname /gedfont def % end font reencoding % clear path newpath % get radius of circular chart /r w 2 div def /dy h r sub def /dx r r mul dy dy mul sub sqrt def /a dy dx atan def % get center of circle, make it origin /cx r def /cy dy def cx cy translate % ang1 = end angle for chart % ang2 = begin angle for chart /ang1 a 180 add def /ang2 a neg def /ang ang1 ang2 sub def % draw outline of chart %0 0 moveto 0 0 r ang2 ang1 arc closepath stroke % 1-icf = fraction of radius segment for inner circle /icf .67 def % length of one radius segment /rl r maxlevel icf sub div def % calculate base font size from segment length /fntsize rl 9.0 div def fontname findfont fntsize scalefont setfont /space ( ) stringwidth pop def % calc line width from segment length - .24 pts = 1 pixel /linwid fntsize .1 mul def linwid setlinewidth /namey linwid 2 mul def 2 setlinecap % name string length for 0 generation /len0 rl def % name string length for other generations /len1 rl space 2 mul sub def % show string given as argument % select font size so that string fits in available length /wshow { /s exch def /len exch def fontname findfont fntsize scalefont setfont s stringwidth pop dup len lt { pop } { % compute new font size for exact fit len exch div fntsize mul /fsize exch def fontname findfont fsize scalefont setfont } ifelse textcolr0 s show } bind def % starting y for root children /siby fntsize -2 mul def % called once for each individual on chart /i { /leaf exch def /level exch def /death exch def /birth exch def /name exch def level maxlevel lt { level 0 eq { % print name, birth date, death date gsave len0 -2 div siby translate /x 0 def x namey moveto len0 name wshow /siby siby fntsize 2 mul sub def fontname findfont fntsize scalefont setfont birth length 0 gt { x fntsize neg moveto len0 birth wshow /siby siby fntsize sub def } if death length 0 gt { x fntsize neg 2 mul moveto len0 death wshow /siby siby fntsize sub def } if grestore } { % x1 = inner radius, x2 = outer radius /x1 level icf sub rl mul def /x2 x1 rl add def % aw = angle of wedge for one individual in this generation /aw ang 2 level bitshift div def % a = angular position of this individual /a aw leaf 2 mul 1 add mul def /a ang1 a sub def % rotate coord system so this individual is on x axis % display name and other info gsave a 90 lt { a rotate lincolr0 x1 0 moveto x2 0 lineto stroke /x x1 space add def } { a 180 sub rotate lincolr0 x2 neg 0 moveto x1 neg 0 lineto stroke /x x2 neg space add def } ifelse % print name, birth date, death date x namey moveto len1 name wshow fontname findfont fntsize scalefont setfont birth length 0 gt { x fntsize neg moveto len1 birth wshow } if death length 0 gt { x fntsize neg 2 mul moveto len1 death wshow } if grestore % draw arc connecting this individual to his/her child level 0 gt { leaf 1 and 0 eq { % father lincolr0 0 0 x1 a aw sub a arc stroke } { % mother lincolr0 0 0 x1 a a aw add arc stroke } ifelse } if } ifelse } if } bind def lifelines-3.0.61/reports/ps-pedigree.ll0000700002540200244210000004624410076661057020216 0ustar prappDomain Users/* * @progname ps-pedigree.ll * @version 1.1.0 * @author Stephen Woodbridge, woodbri@swoodbridge.com * @category * @output PostScript * @description * * This report generates Multiple linked Pedigree Charts * Each chart is 7 or 8 generations and as a line moves off * a chart the new chart number is referenced. The output * of this report is a POSTSCRIPT file. The text size is very * small but readable (it seams less readable as I age!) on * 8.5x11 paper with 8 generations and larger but somewhat * compressed at 7 generations per chart. And an index of all * persons on the charts is also created. * * Code by Stephen Woodbridge, woodbri@swoodbridge.com * Copyright 1992 by Stephen Woodbridge * * Version one of this report was written in XLISP and this is a * direct translation of that Lisp code. * * --- Version control info --- * * 10/22/92 - First Release 1.0.0 * 10/28/92 - changed box width to expand the text font * added CENTER_LAST global to center names in last boxes * 11/05/92 - Release 1.1.0 Added name sorted index and misc. other * features and enhancements. * 11/03/03 - Included into LifeLines standard distribution. * ps-pedi.ps renamed to ps-pedigree.ps * * --- Comments about the program --- * * There are lots of global flags that control whether or not aspects * of the output are generated. These are set in "init_globals" and * the comments there will explain them. The title string for the * index is also set here. The program will also generate an index of * just the people in the pedigree OR all people in the database. This * is controlled by the flag INDEX_ALL. * * All global are in capitals. Global constants are set in * init_globals and are not changed as the program runs. The global * variables are used throughout the execution. * There is a global TRACE which will print most proc names as they * are executed. This is helpful in tracking down SEGV crashes. There * is a global LIST which will print the name of each person or a "." * as it is processed. The enqueueing of people to be processed is * done in plot_me. * * You can adjust the margins on the paper. This has the effect of * pushing the plot off the top/bottom/left/right. See M_TOP/M_BOT/ * M_LEFT/M_RIGHT in init_globals. The current setting leaves a * margin at the top for three-hole punching or binding. * * --- Comments about the PostScript output --- * * You can change the paper size without regenerating the output. * The plot will scale to fit the paper. A ledger size paper makes * the plots much easier to read. This can be done by editing line * 66 in the output file. Just above this line are definitions for * "a-size","a4-size" and "b4-size" paper. You can add your own paper * sizes and reference them on line 66. * * Changing the small text font size will not nessasarily change the * output on the paper because I compute an x and y scale factor the * forces the chart into the bounds of the paper. Feel free to * experiment and let me know if you get a good combination. * */ /* global variables */ global(RVAL) /* stack used to return values from procs */ global(ILIST) /* indi's to be done in next depth of charts */ global(NLIST) /* chart num of indi's above */ global(WHICH_CHART) /* table xrefs of indi to chart number */ global(FROM_CHART) global(INDXSET) global(CHART_NO) global(CURRENT_CHART_NO) global(PAGE) /* postscript page number being outputed */ global(PAGE_INDX) /* global constants */ global(M_BOT) global(M_LEFT) global(M_RIGHT) global(M_TOP) global(LF_HGT) global(LF_WDT) global(SF_HGT) global(SF_WDT) global(BOX_H) global(BOX_DH) global(BOX_NC_1) global(BOX_NC_2) global(BOX_W) global(BOX_WW) global(BOX_SP) global(BOX_DW) global(CHART_PREFIX) global(LEN_CHART_PREFIX) global(TEXT_HGT) global(TEXT_WDT) global(INDEX_SIZE) global(INDEX_LPP) global(HEADER_SIZE) global(LINE_COUNT) global(PLOT_INUMS) global(PLOT_DATE) global(CENTER_LAST) global(INDEX_ALL) global(TITLE) global(TRACE) global(LIST) global(PS_HDR_FILE) /* *--------------------------------------------------------* */ proc main () { set(TRACE, 0) /* trace proc calling sequence to trace down SEGV: signal 11 crashes */ set(LIST, 0) /* list names as they are processed */ call init_globals() list(RVAL) list(ILIST) list(NLIST) table(WHICH_CHART) table(FROM_CHART) indiset(INDXSET) getindi(me) /* * The program can make 3 thru n generation charts * but only the 7 and 8 have good aspect ratios that * make them usable. */ getintmsg(max, "Enter max generations per chart [7 or 8]") if (or( eq(max, 7), eq(max, 8))) { getintmsg(dmax, "Enter max depth of charts:") enqueue(ILIST, me) enqueue(NLIST, 1) call plot_init(max, TITLE) set(i, 1) while(le(i, dmax)) { set (jlist, ILIST) set (mlist, NLIST) list(ILIST) list(NLIST) while (me, dequeue (jlist)) { set(cno, dequeue(mlist)) set(CURRENT_CHART_NO, cno) call new_plot_page(cno) call do_ancestors(me, 1, 0, max) call title_chart(cno, me, max) } set(i, add(i, 1)) } call plot_fini() call do_index() call index_fini() } } proc init_globals() { /* initialize global constants */ /* Paper margins for output in points */ set(M_TOP, 27) /* 0.375in*72points/in */ set(M_BOT, 0) set(M_LEFT, 0) set(M_RIGHT, 0) /* Large and small font sizes in points */ set(LF_HGT, 18) set(LF_WDT, 12) set(SF_HGT, 5) set(SF_WDT, 4) /* Size of text in boxes */ set(TEXT_HGT, SF_HGT) set(TEXT_WDT, SF_WDT) /* height of box and vertical spacing */ set(BOX_H, add(1, TEXT_HGT)) set(BOX_DH, add(1, BOX_H)) /* width of boxes in number of characters */ set(BOX_NC_1, 42) set(BOX_NC_2, 30) /* width of boxes and horizontal spacing */ set(BOX_W, mul(BOX_NC_2, TEXT_WDT)) set(BOX_WW, mul(BOX_NC_1, TEXT_WDT)) set(BOX_SP, div( mul(BOX_W, 3), 20)) /* BOX_W*0.15 */ set(BOX_DW, add(BOX_W, BOX_SP)) /* controls for the index */ set(INDEX_SIZE, 8) set(INDEX_LPP, 80) set(HEADER_SIZE, 10) /* controls for what and how the charts appear */ set(CHART_PREFIX, "") /* if CHART_PREFIX=0 then don't number charts */ set(LEN_CHART_PREFIX, 0) set(PLOT_INUMS, 1) /* bool 0=don't plot inums, 1=plot inums */ set(PLOT_DATE, 1) /* bool 0=don't date charts, 1=date charts */ set(CENTER_LAST, 1) /* bool 0=don't center names in last column, 1=center names */ set(INDEX_ALL, 0) /* bool 0=only index names on charts, 1=index all names in database */ /* global variables used to keep track of which chart */ set(CHART_NO, 1) set(CURRENT_CHART_NO, 0) set(PAGE, 0) set(PAGE_INDX, 1) set(PS_HDR_FILE, "ps-pedigree.ps") /* PostScript Header file name */ set(TITLE, "Pedigree Index") /* Title string for Index pages */ dayformat(0) monthformat(3) dateformat(0) } proc do_ancestors (me, depth, width, max) { if (TRACE) { print("do_ancestors ") } if (me) { if (LIST) { print(fullname(me,1,0,40)) print(" -") print(key(me)) print(sp()) print(d(depth)) print(sp()) print(d(width)) print(nl()) } else { print(".") } set(my_tag, lookup(WHICH_CHART, key(me))) call plot_me(me, depth, width, max) if ( and( or( eq(1, depth), not(my_tag)), lt(depth, max))) { if (dad, father(me)) { call get_width(1, width) set(nwid, pop(RVAL)) call do_ancestors(dad, add(1, depth), nwid, max) call connect_boxes( me, depth, width, nwid, max) } if (mom, mother(me)) { call get_width(neg(1), width) set(nwid, pop(RVAL)) call do_ancestors(mom, add(1, depth), nwid, max) call connect_boxes( me, depth, width, nwid, max) } } else { call box_org(depth, width, max) call draw_ext(me, pop(RVAL), pop(RVAL), my_tag, eq(depth, max)) } } } proc plot_me (me, depth, width, max) { if (TRACE) { print("plot_me ") } set(last, eq(max, depth)) set(first, eq(1, depth)) set(style, ge(add(1, depth), max)) call box_org(depth, width, max) set(my_x, pop(RVAL)) set(my_y, pop(RVAL)) /* * This if controls whether or not siblings are plotted */ if (first) { call do_sibs(me, my_x, my_y, last) } else { call box_me(me, my_x, my_y, last) } if (not(lookup(WHICH_CHART, key(me)))) { set(ntag, CURRENT_CHART_NO) if (and( last, parents(me))) { set(CHART_NO, add(1, CHART_NO)) set(ntag, CHART_NO) call draw_ext(me, my_x, my_y, ntag, last) enqueue(ILIST, me) enqueue(NLIST, ntag) insert(FROM_CHART, save(d(CHART_NO)), CURRENT_CHART_NO) } insert(WHICH_CHART, save(key(me)), ntag) addtoset(INDXSET, me, ntag) } } proc box_me (me, x, y, last) { if (TRACE) { print("box_me ") } call get_dates(me) call print_name(me, 0) if (PLOT_INUMS) { set(num, save(concat("-", key(me)))) } else { set(num, "") } call draw_box_text(x, y, pop(RVAL), pop(RVAL), num, last) } proc do_sibs (me, x, y, last) { if (TRACE) { print("do_sibs ") } set(nkids, nchildren(parents(me))) set(bdh, mul(2, BOX_DH)) set(sy, div(mul(sub(nkids, 1), bdh), 2)) children( parents(me), child, nchild) { set(yy, add(y, sy)) call box_me(child, x, yy, last) set(sy, sub(sy, bdh)) } } proc do_index() { if (TRACE) { print("do_index ") } print(nl()) print("Collecting Index ...") if (INDEX_ALL) { forindi(me, num) { if (not(lookup(WHICH_CHART, key(me)))) { addtoset(INDXSET, me, 0) } } } print(nl()) print("Sorting Index ...") namesort(INDXSET) print(nl()) print("Outputing Index ") forindiset(INDXSET, me, chart, num) { call index_out(me, chart) print(".") } } /* * -------- Postscript output routines --------- */ proc plot_init (max, title) { if (TRACE) { print("plot_init ") } set(PAGE, 0) copyfile(PS_HDR_FILE) call expt(2, sub(max, 2)) set(h, mul( add( pop(RVAL), 1), mul(2, BOX_DH))) set(w, div( mul( add(max, 1), BOX_W), 2)) set(w, add(w, add( mul(max, BOX_SP), BOX_WW))) if (CHART_PREFIX) { set(w, add(w, mul( add(LEN_CHART_PREFIX, 3), TEXT_WDT))) } "%%BeginSetup" nl() "/pointsize " d(INDEX_SIZE) " def" nl() "/headerpointsize "d(HEADER_SIZE) " def" nl() "/filename (" title ") def" nl() "/noheader false def" nl() "/date (" date(gettoday()) ") def" nl() "/nc-1 " d(BOX_NC_1) " def" nl() "/nc-2 " d(BOX_NC_2) " def" nl() "/margin-l " d(M_LEFT) " def" nl() "/margin-r " d(M_RIGHT) " def" nl() "/margin-t " d(M_TOP) " def" nl() "/margin-b " d(M_BOT) " def" nl() "/width-needed " d(w) " def" nl() "/height-needed " d(h) " def" nl() "/text-wdt " d(TEXT_WDT) " def" nl() "/text-hgt " d(TEXT_HGT) " def" nl() "setup" nl() "/newpagesetup save def" nl() "mark" nl() "%%EndSetup" nl() set(LINE_COUNT, 0) } proc new_plot_page (page_no) { if (TRACE) { print("new_plot_page ") } set(PAGE, add(1, PAGE)) "%%Page: " d(page_no) " " d(PAGE) nl() "mark plotpagesetup" nl() } proc plot_fini () { set(PAGE, add(1, PAGE)) } proc draw_box_text (x, y, name, date, num, last) { if (TRACE) { print("draw_box_text ") } if (last) { "(" name " " date " " num ") " if(CENTER_LAST) { set(t, " ct1") } else { set(t, " t1")} } else { "(" name " " num ") (" date ") " set(t, " t2") } d(x) " " d(y) t nl() } proc draw_ext (me, x, y, chartno, last) { if (TRACE) { print("draw_ext ") } if (parents(me)) { if (last) { set(bw, div(BOX_WW, 2)) } else { set(bw, div(BOX_W, 2)) } "np " d(add(x, bw)) " " d(y) " mto " d(div(BOX_SP, 3)) " 0 rlto drw" nl() if (and( chartno, CHART_PREFIX)) { d( add(x, add(bw, add(TEXT_WDT, div(BOX_SP, 3))))) " " d( sub(y, div(TEXT_HGT, 2))) " mto (" CHART_PREFIX d(chartno) ") show" nl() } } } proc connect_boxes (me, depth, width1, width2, max) { if (TRACE) { print("connect_boxes ") } call box_org(depth, width1, max) set(x1, pop(RVAL)) set(y1, pop(RVAL)) call box_org(add(1, depth), width2, max) set(x2, pop(RVAL)) set(y2, pop(RVAL)) set(dx, div( add(x1, x2), 2)) set(w2, div(BOX_W, 2)) set(w3, div(BOX_WW, 2)) set(dh, 0) set(dw, w2) set(rad, BOX_H) set(style, 0) if (eq(depth, 1)) { set(nkids, nchildren(parents(me))) set(sy, div( mul( sub(nkids, 1), mul(2, BOX_DH)), 2)) if (gt(width2, 0)) { set(y1, add(y1, sy)) } else { set(y1, sub(y1, sy)) } } if (lt(y1, y2)) { set(dh, BOX_H) } else { set(dh, neg(BOX_H)) } if (eq( sub(max, depth), 1)) { set(dw, w3) set(style, 1) set(rad, div(rad, 2)) set(dx, div( sub( add(x1, add(w2, x2)), w3), 2)) } elsif( eq( sub(max, depth), 2)) { set(dw, w2) set(style, 1) } if (style) { d(div(rad, 2)) " gr np " d(add(x1, w2)) " " d(y1) " mto " d(dx) " " d(y1) " " d(dx) " " d(y2) " pto " d(sub(x2, dw)) " " d(y2) " pto lto drw" nl() } else { d(rad) " gr np " d(x1) " " d(add(y1, dh)) " mto " d(x1) " " d(y2) " " d(sub(x2, w2)) " " d(y2) " pto lto drw" nl() } } proc title_chart (chart_no, me, max) { if (TRACE) { print("title_chart ") } if (gt( sub(max, 2), 0)) { set(x, 0) call expt(2, sub(max, 2)) set(y, mul( add( pop(RVAL), 1), mul(2, BOX_DH))) set(w, div( mul( add(max, 1), BOX_W), 2)) set(w, add(w, add( mul(max, BOX_SP), BOX_WW))) if (CHART_PREFIX) { set(w, add(w, mul( add(4, LEN_CHART_PREFIX), TEXT_WDT))) } d(y) " " d(w) " " d(x) " 0 mbox 18 1 rbox" nl() if (PLOT_DATE) { d(add(x, LF_WDT)) " 1.2 mul " d(div(SF_HGT,2)) " mto (" date(gettoday()) ") show" nl() } d(LF_WDT) " " d(LF_HGT) " mfont" nl() call get_dates(me) call print_name(me, 1) d(add(x, mul(2, LF_WDT))) " " d(sub(y, add(LF_HGT, div(LF_HGT, 2)))) " mto (" pop(RVAL) ") show" nl() d(add(x, mul(2, LF_WDT))) " " d(sub(y, add( mul(LF_HGT, 2), div(LF_HGT,2)))) " mto (" pop(RVAL) ") show" nl() if (CHART_PREFIX) { d(add(x, LF_WDT)) " " d(div(LF_HGT,2)) " mto (Chart: " CHART_PREFIX d(chart_no) if (e, lookup(FROM_CHART, d(chart_no))) { " From: " d(e) } ") show" nl() } "cleartomark showpage" nl() "%%EndPage: " d(PAGE) " " d(PAGE) nl() } } /* * -------- Postscript output routines for index --------- */ proc index_fini() { if (TRACE) { print("index_fini ") } "cleartomark showpage" nl() "%%EndPage: " d(PAGE) " " d(PAGE) nl() "%%Trailer" nl() "%%Pages: " d(PAGE) nl() } proc index_out (me, chart) { if (TRACE) { print("index_out ") } set(blanks, " ") if (not(mod(LINE_COUNT, INDEX_LPP))) { "%%Page: " d(PAGE) " " d(PAGE) nl() "mark indexpagesetup " d(PAGE_INDX) " pagesetup" nl() } "(" if (chart) { call rjt(chart, 5) pop(RVAL) } else { " " } " " trim( save( concat( key(me)," ")), 6) call get_dates(me) call print_name(me, 1) " " trim( save( concat(pop(RVAL),blanks)), 50) " " sex(me) " " pop(RVAL) ")l" nl() set(LINE_COUNT, add(LINE_COUNT,1)) if (not(mod(LINE_COUNT, INDEX_LPP))) { "cleartomark showpage" nl() "%%EndPage: " d(PAGE) " " d(PAGE) nl() set(PAGE, add(PAGE, 1)) set(PAGE_INDX, add(PAGE_INDX, 1)) set(LINE_COUNT, 0) } } /* * -------- Utility routines --------- */ proc print_name (me, last) { if (TRACE) { print("print_name ") } call get_title(me) push(RVAL, save(concat(fullname(me, 1, not(last), 45), pop(RVAL)))) } proc get_title (me) { if (TRACE) { print("get_title ") } fornodes(inode(me), node) { if (not(strcmp("TITL", tag(node)))) { set(n, node) } } if (n) { push(RVAL, save(concat(" ", value(n)))) } else { push(RVAL, "") } } proc get_dates (me) { if (TRACE) { print("get_dates ") } if (e, birth(me)) { set(b, save(concat("( ", date(e)))) } else { set(b, "( ") } if (e, death(me)) { set(d, save(concat(" - " , date(e)))) } else { set(d, " - ") } push(RVAL, save(concat(b, concat(d, " )")))) } proc box_org (depth, width, max) { if (TRACE) { print("box_org ") } set(xx, div( mul(BOX_W, 9), 16)) call expt(2, sub(max, 2)) set(yy, mul( add( pop(RVAL), 1), BOX_DH)) if ( eq(depth, 1)) { push(RVAL, yy) push(RVAL, xx) } else { call expt(2, sub(max, depth)) set(dy, mul( pop(RVAL), BOX_DH)) call abs(width) set(y, sub( mul(pop(RVAL), dy), div(dy, 2))) set(dx, add(BOX_SP, div(BOX_W, 2))) set(dd, sub( sub(max, 2), depth)) set(x, 0) if ( eq(dd, neg(1))) { set(dxx, div(BOX_W, 2)) } elsif (eq(dd, neg(2))) { set(dxx, add( div(BOX_W, 2), div(BOX_WW, 2))) } else { set(dxx, 0) } set(x, add(dxx, add(xx, mul(dx, sub(depth, 1))))) if ( lt(width, 0)) { set(y, neg(y)) } push(RVAL, add(yy, y)) push(RVAL, x) } } proc get_width (sign, width) { if (TRACE) { print("get_width ") } if (eq(width, 0)) { push(RVAL, sign) } else { call abs(width) set(awidth, pop(RVAL)) set(s2, div(width, awidth)) if (eq(s2, sign)) { push(RVAL, mul(width, 2)) } else { push(RVAL, mul( sub( mul(awidth, 2), 1), s2)) } } } proc abs (int) { if (TRACE) { print("abs ") } if (lt(int, 0)) { push(RVAL, neg(int)) } else { push(RVAL, int) } } proc rjt(n, w) { if (lt(n, 10)) { set(d, 1) } elsif (lt(n, 100)) { set(d, 2) } elsif (lt(n, 1000)) { set(d, 3) } elsif (lt(n, 10000)) { set(d, 4) } else { set(d, 5) } if (lt(d, w)) { set(pad, save( trim(" ", sub(w, d)))) } else { set(pad, "") } push(RVAL, save( concat(pad, save(d(n))))) } proc expt(x, y) { if (TRACE) { print("expt ") } if (le(y, 0)) { set(result, 1) } else { set(result, x) while (y, sub(y,1)) { set(result, mul(result, x)) } } push(RVAL, result) } lifelines-3.0.61/reports/ps-pedigree.ps0000700002540200244210000002155607751545254020236 0ustar prappDomain Users%!PS-Adobe-1.0 %%Creater: ps-pedigree %%Title: Ancestry Charts %%Pages: (atend) %%DocumentFonts: Helvetica Courier Courier-Bold %%EndComments /#findfont /findfont load def /findfont { dup #findfont dup /Encoding get 8#340 get /.notdef eq { 12 dict begin /newcodesandnames [ 8#200 /aacute 8#335 /acircumflex 8#336 /adieresis 8#337 /agrave 8#202 /atilde 8#201 /aring 8#340 /ccedilla 8#342 /eacute 8#344 /ecircumflex 8#345 /edieresis 8#346 /egrave 8#203 /iacute 8#347 /icircumflex 8#354 /idieresis 8#204 /igrave 8#205 /ntilde 8#206 /oacute 8#355 /ocircumflex 8#356 /odieresis 8#207 /ograve 8#210 /otilde 8#211 /scaron 8#212 /uacute 8#357 /ucircumflex 8#360 /udieresis 8#362 /ugrave 8#213 /ydieresis 8#214 /zcaron 8#215 /Aacute 8#300 /Acircumflex 8#311 /Adieresis 8#314 /Agrave 8#217 /Atilde 8#216 /Aring 8#321 /Ccedilla 8#322 /Eacute 8#323 /Ecircumflex 8#324 /Edieresis 8#325 /Egrave 8#220 /Iacute 8#326 /Icircumflex 8#327 /Idieresis 8#221 /Igrave 8#222 /Ntilde 8#223 /Oacute 8#330 /Ocircumflex 8#331 /Odieresis 8#224 /Ograve 8#225 /Otilde 8#226 /Scaron 8#227 /Uacute 8#332 /Ucircumflex 8#333 /Udieresis 8#334 /Ugrave 8#230 /Ydieresis 8#231 /Zcaron ] def /basefontdict exch def /newfontname exch def /newfont basefontdict maxlength dict def basefontdict { exch dup /FID ne { dup /Encoding eq { exch 256 array copy } { exch } ifelse newfont 3 1 roll put } { pop pop } ifelse } forall newfont /FontName newfontname put newcodesandnames aload pop newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat newfontname newfont definefont end } { exch pop } ifelse } def /headerpointsize 10 def /font /Courier def /pointsize 10 def /Linespace {/Linespace pointsize 1.1 mul neg dup 3 1 roll def } def /margin 10 def /xoffset .35 def /yoffset -0.30 def /def_yoffset yoffset def /def_xoffset xoffset def /def_pointsize pointsize def /roundpage true def /useclippath true def /pagebbox [0 0 612 792] def /inch {72 mul} bind def /mm {2.8453 mul} bind def /point {72 div} bind def /min {2 copy gt {exch} if pop} bind def /max {2 copy lt {exch} if pop} bind def /rectpath {4 2 roll moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath } def /a-size {8.5 inch 11 inch} bind def /a4-size {210 mm 297 mm} bind def /b4-size {10.125 inch 14.2 inch} bind def /paper {/paper-x exch def /paper-y exch def} bind def a-size paper /mfont % w h mfont {/fh exch def /fw exch def /Helvetica findfont [fw 0 0 fh 0 0] makefont setfont c-bs-1 c-bs-2 } def /c-bs-1 % calculate box size from current fh fw {[fh 1 add fw nc-1 mul] cvx /box-size-1 exch def} def /c-bs-2 % calculate box size from current fh fw {[fh 2 mul 1 add fw nc-2 mul] cvx /box-size-2 exch def} def /box-it % x y h w box-it {2 copy 6 2 roll box-org box} def /center-up % x y string center-up { dup stringwidth pop % x y string w 3 -1 roll 1 add % x string w y exch 2 div % x string y (w/2) 4 -1 roll exch sub % string y (x-w/2) exch moveto show } def /center-dn % x y string center-dn { dup stringwidth pop % x y string w 3 -1 roll fh sub % x string w (y-fsize) 1 add exch 2 div % x string (y-fsize) (w/2) 4 -1 roll exch sub % string (y-fsize) (x-w/2) exch moveto show } def /bbox % h w x y box % where x y is lower left corner {newpath moveto % h w dup 0 rlineto % h w exch 0 exch rlineto % w neg 0 rlineto closepath 0.3 setlinewidth stroke} def /box % h w x y box % where x y is lower left corner {newpath moveto % h w dup 0 rlineto % h w exch 0 exch rlineto % w neg 0 rlineto closepath 0.1 setlinewidth stroke} def /rbox % [x1 y1 x2 y2 x3 y3 x4 y4] r w rbox {/w exch def /r exch def /a exch def a 0 2 da1 r add newpath moveto a 2 4 da a 4 4 da a 6 2 da1 a 0 2 da a 0 4 da closepath w setlinewidth stroke} def /mbox % h w x y mbox => [x1 y1 x2 y2 x3 y3 x4 y4] {2 copy % h w x y x y 5 index add 2 copy % h w x1 y1 x2 y2 x2 y2 exch 6 index add exch % h w x1 y1 x2 y2 x3 y3 2 copy 9 index sub % h w x1 y1 x2 y2 x3 y3 x4 y4 8 array astore 3 1 roll pop pop} def /box-org % x y h w box-org {2 div % x y h (w/2) exch 2 div exch % x y (h/2) (w/2) 4 -1 roll exch sub % y (h/2) (x-w/2) 3 1 roll sub % (x-w/2) (y-h/2) } def /t2 % text1 text2 x y { 2 copy % text1 text2 x y x y box-size-2 box-it % text1 text2 x y 2 copy 6 -1 roll % text2 x y x y text1 center-up % text2 x y 3 -1 roll % x y text2 center-dn } def /t1 % text x y { 2 copy % text x y x y box-size-1 box-it % text x y box-size-1 box-org exch fw add exch 1 add % text (xorg+fw) yorg moveto show } def /ct1 % text x y { 2 copy box-size-1 box-it % text x y 3 -1 roll % x y text dup stringwidth pop % x y text w 2 div % x y text (w/2) 4 -1 roll exch sub % y text (x-w/2) 3 -1 roll fh 1 sub 2 div sub % text (x-w/2) (y-(fh+1)/2) moveto show } def /da2 { r arcto 4 {pop} repeat} def /da1 {getinterval aload pop} def /da {da1 da2} def /gr {/r exch def} def /pto {2 copy 6 2 roll da2} def /np {newpath} def /mto {moveto} def /rmto {rmoveto} def /lto {lineto} def /rlto {rlineto} def /drw {0.1 setlinewidth stroke} def /plotpagesetup { newpagesetup restore /newpagesetup save def 90 rotate 12 12 translate margin-l paper-y neg margin-b add translate paper-x margin-l margin-r 36 add add sub width-needed div paper-y margin-t margin-b 18 add add sub height-needed div scale text-wdt text-hgt mfont } def /setup { /linespace pointsize pointsize .10 mul add neg def /headerspace headerpointsize headerpointsize .10 mul add 2 linespace mul sub neg def font findfont pointsize scalefont setfont pagedimensions /standard_height 80 def_pointsize def_pointsize .10 mul add mul yoffset inch sub margin 2 div add def /rel_height height def /rel_width 7.5 inch def rel_height standard_height lt { /yoffset yoffset def_yoffset sub margin point 2 div add def }if width rel_width lt { /xoffset xoffset def_xoffset sub margin point 2 div sub def }if } def /indexpagesetup { newpagesetup restore /newpagesetup save def xcenter ycenter translate width 2 div neg height 2 div translate xoffset inch yoffset inch translate margin 2 div dup neg translate 0 headerspace translate } def /pagedimensions { useclippath userdict /gotpagebbox known not and { /pagebbox [clippath pathbbox newpath] def roundpage currentdict /roundpagebbox known and {roundpagebbox} if } if pagebbox aload pop .5 sub 4 -1 roll exch 4 1 roll 4 copy sub /width exch def sub /height exch def add 2 div /xcenter exch def add 2 div /ycenter exch def userdict /gotpagebbox true put } def /page_num_len { % count number of digits of the current page number /digits 1 def /tens 10 def { page tens lt { exit } { /digits digits 1 add def /tens tens 10 mul def } ifelse } loop } def /page_num { % convert page to a string page_num_len page digits string cvs } def /printpage { % stk:int (right justified from this "int" value) page_num stringwidth pop % get length of string sub % calculate white space 0 rmoveto page_num % move over to the right that much 0 setgray show } def /show_simpleheader { currentdict /headerfont known {headerfont findfont headerpointsize scalefont setfont} {/Courier-Bold findfont headerpointsize scalefont setfont} ifelse currentdict /date known { 0 0 moveto date 0 setgray show } if currentdict /filename known { 0 0 moveto filename stringwidth pop 2 div width xoffset inch .5 inch add sub 2 div exch sub 0 rmoveto filename 0 setgray show } if 0 0 moveto width xoffset inch .75 inch add sub printpage } def /pagesetup { /page exch def gsave 0 headerpointsize .10 mul 2 linespace mul sub translate show_simpleheader grestore 0 0 moveto 0 } bind def /l {show Linespace add dup 0 exch moveto} bind def %%EndProlog lifelines-3.0.61/reports/README0000700002540200244210000000027410077366774016343 0ustar prappDomain UsersThis Directory contains sample report programs submitted by lifelines users from all over the globe. View the file index.html with a browser for quick summaries of what the programs do. lifelines-3.0.61/reports/refn.ll0000700002540200244210000000432110340217253016717 0ustar prappDomain Users/* * @progname refn.ll * @version 1.0 * @author Larry Hamilton * @category * @output Text * @description Report of all User Reference Numbers (REFN). Prints out the value of all the lines in your database with the REFN tag, along with enough information so you can find the line easily. The purpose of this report is so you can find all the REFNs, and double-check them for duplicates. * Modified from Olsen, Eggert - places.ll * * by Larry Hamilton (lmh@hamiltongensociety.org) * Version 1.0, November 10, 2005 * * The REFNs are printed out in the order that they appear in the database. * * To sort the output: * on Unix\Linux: sort -f originalfilename -o sortedfilename * on Windows: sort originalfilename /O sortedfilename * */ proc main() { list(tag_stack) print("Printing all REFNs.\n") print("Be patient. This may take a while.\n\n") print("If there are no REFNs in the database,\nthere will not be a prompt for an output file name.\n") forindi (person, id) { traverse (inode(person), node, level) { setel(tag_stack, add(level, 1), tag(node)) if (eq(strcmp(tag(node), "REFN"), 0)) { tag(node) " " value(node) " | " key(person) " " name(person) forlist (tag_stack, tag, tag_number) { if (and(gt(tag_number, 1), le(tag_number, level))) { " " tag } } "\n" } } } forfam (fam, fnum) { traverse (fnode(fam), node, level) { setel(tag_stack, add(level, 1), tag(node)) if (eq(strcmp(tag(node), "REFN"), 0)) { tag(node) " " value(node) " | " key(fam) " (" if (person,husband(fam)) { set(relation,", husb") } elsif (person,wife(fam)) { set(relation,", wife") } else { children(fam,child,cnum) { if (eq(cnum,1)) { set(person,child) set(relation,", chil") } } } if (person) { key(person) " " name(person) relation } ") |" forlist (tag_stack, tag, tag_number) { if (and(gt(tag_number, 1), le(tag_number, level))) { " " tag } } "\n" } } } } lifelines-3.0.61/reports/register-rtf.ll0000700002540200244210000012602410076661057020422 0ustar prappDomain Users/* * @progname register-rtf.ll * @version 1.6 * @author Doug McCallum * @category * @output RTF * @description * * RTF based Register Report Generator. * This program has many options but basically takes a person * and generates an RTF document that can be read by a number * of word processors. The document can optionally be cross-indexed * and footnoted. The format is close to the NEHGS Register Form. * * Options are set by setting variables at the beginning of main * The options are: * option values * ------------- ---------------------------------------------------- * doindex 0 == no index, 1 == create index * prefix a string. This is prefixed to the standard * numbers for people * donotes 0 == don't output notes, 1 == output notes in-line * 2 == output notes at end with a reference in text * author a string used in the author info field * strictness 0 == all descendents, 1 == modified form, 2 = strict * childby 0 == list children together, 1 == indicate parent by * titlepage 0 == no title page, 1 == generate title page * dosources 0 == don't output sources, 1 == output sources * occupation 0 == don't output occupation, 1 == output occupation * * Not implemented yet: * showrefn 0 == don't show user refn tags, 1 == show tags * * * Notes: * when an index is created, it must be turned on in the word processor * since only the indexing is actually done. Each time a name is seen * it is indexed. If the name is a reference to the person as child of, * then it is indexed in plain form numbers. If the person is a spouse * the page number is italic and if the person is the first entry in * the family info, then the page number is bold. * * The "prefix" is intended for use when doing multifamily reports. * Further work needs to be done, but it can get you quite a ways * toward that end. A future version of this program may handle * the multi-family case directly. * * If notes are done in-line, each NOTE is a new paragraph and blank * lines mark paragraphs. If done as endnotes, the NOTES are indicated * with ids in the form [id1, id2] and then a Notes page created to * print all the notes. * * All main lines and the Generation lines are treated as headings and * can be put into a table of contents. This is always done but the * table is not inserted into the document. * * If a marriage would occur multiple times, it is only referred * to and not duplicated after the first time. This is complicated * by an indi having multiple marriages and the duplicated spouse * also having multiple marriages with only one marriage in the duplicate * tree. These are called out as well. * * I don't plan to implement the generation tags (superscript generation * numbers) on individuals at this point. They are easy enough to do * since the current generation is always known but I find them not * particularly useful in the text. * * The program can take a long time since it manipulates a lot of data. * Future versions may improve performance as better algorithms are * found. * * An individual's occupation(s) should be output into the report * but isn't currently done. This probably should be an option along * with the specific format to use. * * A future version should replace all occurrences of English * text with variable references to make translation easier. Mostly * this is the label stuff (b., d., bur., children, etc.). There should * also be an option to expand the abbreviations to the full word. * * At some point, information such as the various baptism, christening, * and other event information will be included as well. This will * most likely be done as hidden text of some form or perhaps as * annotations. This will make the text available but it would have * to be turned on in the document. * * Sources should eventually be turned into endnotes so Word can do * any special processing. */ include("rtflib") global(childby) global(curr_index) global(doindex) global(donotes) global(dosources) global(endtags) global(generation) global(inum_set) global(nextgen) global(prev_fam_list) global(strictness) global(taglist) global(titlepage) global(all_sources) global(occupation) proc main() { /* program options */ set(doindex, 1) /* set to zero if you don't want an index */ set(prefix, "") /* string to prefix indi number with */ set(donotes, 1) /* 0 = no notes, 1 = inline, 2 = end */ set(dosources, 1) /* 0 = no sources, 1 = sources */ set(childby, 1) /* 0 = all children, 1 = children by spouse */ set(strictness, 0) /* all descendents, including female lines */ set(occupation, 1) set(author, "Author/Compiler Name") /* default author name */ set(titlepage, 1) /* want a title page */ set(now, gettoday()) dayformat(1) monthformat(1) dateformat(8) set(created, stddate(now)) /* program proper */ /* initialize the variables used */ indiset(inum_set) /* this set keeps the family numbers */ list(prev_fam_list) /* keeps track of marriages to avoid dups */ list(generation) /* current generation being processed */ list(nextgen) /* next generation to process */ table(endtags) /* if notes at end, keep track of tags */ list(taglist) /* the tags in order created */ set(curr_index, 0) /* current index for indi/family */ set(curr_gen, 0) /* current generation counter */ set(indi,0) list(all_sources) /* contains list of all sources referenced */ getindi(indi) if (not(indi)) { /* if no one selected, exit */ return (0) } /* * initialize the RTF file for standard paper (default) */ call rtf_open(0) set(title, concat("Descendents of ", fullname(indi, 0, 1, 128))) call rtf_set_info(title, name(indi), author, author, created) /* * define default table size of 6in with 4 columns of * .125in, .375in, .375in, 5.125in */ call rtf_set_row_width(4, 8640) /* 6in * 1440 */ call rtf_set_col_width(540) /* .45in * 1440 */ call rtf_set_col_width(720) /* .500in * 1440 */ call rtf_set_col_width(540) /* .45in * 1440 */ /* want a footer with page number centered */ call rtf_footer(0, 2) if (dosources) { /* if doing sources, what footnote type */ call rtf_ftn_type(1, 0) /* everything at end */ } /* add the first person to the list of people to process */ /* this primes the pump, so to speak */ call next_indi(indi) enqueue(nextgen, indi) if (titlepage) { call dotitle(author, title) } /* * all is setup to go down the descendency list. * continue until all are individuals are processed. * note that nextgen is the next generation to process * and generation is the current one. * both are queues so we keep order. Basically, all * children of the person being processed are appended * to the end of the nextgen list. */ while (or(length(generation), length(nextgen))) { /* * if no current generation but a nextgen exists, * start a new paragraph with header for the Generation * and make the nextgen the current generation */ if (empty(generation)) { call rtf_para_indent(0, 0) call rtf_pstart(1) call rtf_para_keepnext() call rtf_hstart() set(curr_gen, add(curr_gen, 1)) capitalize(ord(curr_gen)) " Generation\n" call rtf_hend() call rtf_pend() set(generation, nextgen) list(nextgen) } /* * the real work is done in out_register * get the next person to process and then * let out_register do the work. */ set(indi, dequeue(generation)) call out_register(indi) } if (dosources) { call dump_sources() } if (eq(donotes, 2)) { /* end notes need to be dumped if they exist */ call endnotes() } call rtf_close() } /* * out_register( indi ) * outputs the standard register format for the * individual. Any children get added to nextgen * if they have families. Global variables are used * to modify the exact output. */ proc out_register(indi) { /* * We always start a new paragraph with hanging indent for the number. * It is then tagged to be kept intact to avoid splitting across pages. * The indivual's number if found and printed and then the name * is output followed by marriage(s), birth, death, etc. */ call rtf_pstart(3) call rtf_para_indent(neg(540), 540) call rtf_para_keepintact() d(inum(indi)) "." call rtf_tab(0) call rtf_bold(1) fullname(indi, 0, 1, 128) /* the individual's name is entered as a level 2 TOC header */ call rtf_toc_entry(2, fullname(indi, 0, 1, 128)) call rtf_bold(0) if (doindex) { /* * optional indexing, main entry is bold * It would be nice to have index same text * as the output name but the format is different. * Need to find a better way to tie together so edit * will do the right thing. */ rtf_index(surname(indi), givens(indi), 1) } /* * it is important to not print duplicate marriages since in some * families this can lead to excessive information. In my own, * there were 5 children of one ancestor married 5 children of * another ancestor. Over seven generations there have been * additional crossings of the lines and a non-pruned tree is HUGE * * There are two types of pruning of this type that need to be * considered. The first is the simple case of a single marriage * that is duplicated. It can be handled with a simple reference * to the first occurrence. The second type is more complex where * there are multiple marriages. Some of the marriages may be * duplicates and need to be pruned, but some may be ones that * haven't been seen yet. This occurs when person A marries person B. * The implication that B is married to A. If B is also married to C * the multiple case occurs. In this case if B is seen as a child * and the family info is about to be output, the marriage to A is * a duplicate but the one to C is not. */ if (check_marriages(indi)) { /* * duplicate marriages (common ancestors) * are not duplicated but referred to the only * instance. If there were multiple marriages, * then the duplicates can be referred to but the * non-duplicate ones need expansion. */ call rtf_italic(1) set(prev, prevmarr(indi)) "(See marriage to " set(f, getel(prev_fam_list, prev)) if (male(indi)) { set(s, wife(f)) } else { set(s, husband(f)) } fullname(s, 0, 1, 128) if (and(doindex, surname(s))) { rtf_index(surname(s), givens(s), 2) } ", number " prefix d(inum(s)) ")" call rtf_italic(0) call rtf_para_space(0, 120) call rtf_pend() } else { /* not a complete duplicate so generate lots of text */ call rtf_para_keepnext() if(e, birth(indi)) { " b. " long(e) if (dosources) { call do_sources(e) } } /* * this is an attempt to track duplicate marriages. * It needs to be looked at more carefully. */ set(nmarr, nfamilies(indi)) /* * run through all of this person's families */ families (indi, famvar, spvar, cnt) { if (spvar) { set(prev, check_prev(famvar)) if (not(prev)) { /* save for future reference */ enqueue(prev_fam_list, famvar) } /* * basic format of marriage is * m. [date][[,] place] [(mnum)] spouse * [b. [date][, place]] * ([daughter|son] of spouse's parents) * [d. [date][, place]] [bur. [date][, place]]. */ /* If first spouse, use a ';' but ',' for rest */ if (eq(1, cnt)) { "; m." } elsif (ne(0, cnt)) { ", m." } if (not(prev)) { if (e, marriage(famvar)) { " " long(e) if (dosources) { call do_sources(e) } "," } } if (gt(nmarr, 1)) { " (" d(cnt) ")" } if (not(prev)) { " " fullname(spvar, 0, 1, 128) if (and(doindex, surname(spvar))) { rtf_index(surname(spvar), givens(spvar), 2) } set(items, 0) if (e, birth(spvar)) { " b. " long(e) if (dosources) { call do_sources(e) } set(items, 1) } /* * we know parents so give a referral. * in a future version, this should be updated * to determine if spouses had common ancestor * and give the family number cross-reference. * This would apply to my own genealogy. */ if (f, parents(spvar)) { call rtf_italic(1) if (male(spvar)) { " (son of " } else { " (daughter of " } set(j, "") if (f, father(spvar)) { set(j, " and ") fullname(f, 0, 1, 128) } if (f, mother(spvar)) { j fullname(f, 0, 1, 128) } ")" call rtf_italic(0) /* spouse's death info */ if (e, death(spvar)) { if (eq(items, 1)) { ", d. " } else { " d. " } long(e) if (dosources) { call do_sources(e) } set(items, 1) } /* spouse's burial info */ if (e, burial(spvar)) { if (eq(1, items)) { ", bur. " } else { " bur. " } long(e) if (dosources) { call do_sources(e) } set(items, 1) } } } else { fullname(spvar, 0, 1, 128) call rtf_italic(1) " (see marriage to number " d(inum(spvar)) ")" call rtf_italic(0) } } } if (gt(cnt,0)) { ".\n" } /* indi's remaining information */ if (e, death(indi)) { " " givens(indi) " died " long(e) if (dosources) { call do_sources(e) } if (e, burial(indi)) { " and was buried " long(e) if (dosources) { call do_sources(e) } } ".\n" } elsif (e, burial(indi)) { " " givens(indi) " was buried " long(e) if (dosources) { call do_sources(e) } ".\n" } /* * all occupations are given if any are found. */ if (occupation) { call do_occupation(indi) } /* if doing notes, make sure we get them now */ if (donotes) { call do_notes(indi, donotes, 0) families(indi, famvar, spvar, cnt) { if (spvar) { call do_notes(spvar, donotes, 0) } } } /* * now the children * starting a table is a new paragraph. Keep it all together * and put in a label cell in first row. Then dump * each child into a row. */ call rtf_tstart(4) call rtf_para_keepnext() if (or(eq(nmarr, 1), not(childby))) { call rtf_cstart() call rtf_cstart() call rtf_cstart() call rtf_cstart() " Children:" call rtf_cend() } set(numchildren, 1) set(tsize, totalchildren(indi)) set(fcnt, 0) families(indi, famvar, spvar, cnt) { /* * if childby is set, then put spouse info * out to identify which family children * came from. Skip families with no children */ if (and(childby, gt(nmarr, 1))) { if (not(nchildren(famvar))) { continue() } incr(fcnt) if (gt(fcnt, 1)) { call rtf_endrow() call rtf_endrow() } call rtf_cstart() call rtf_cstart() call rtf_cstart() call rtf_cstart() " Children with " fullname(spvar, 0, 1, 128) ":" call rtf_cend() } children (famvar, ch, num) { /* want to know if this is someone to expand */ set(ival, determine(ch, indi)) call rtf_endrow() if (lt(numchildren, tsize)) { call rtf_para_keepnext() } /* note that nothing goes in cell 1 */ call rtf_cstart() /* start the cell where we do a number */ call rtf_cstart() call rtf_para_rightjust() /* if the indi is non-zero, then tag it */ if (ne(ival, 0)) { person_prefix d(ival) "." } /* the roman numeral/child order cell */ call rtf_cstart() call rtf_para_rightjust() roman(numchildren) "." /* the name and info cell */ call rtf_cstart() call rtf_para_leftjust() fullname(ch, 0, 1, 128) if (doindex) { rtf_index(surname(ch), givens(ch), 0) } /* we always give birth info */ if (b, birth(ch)) { if (gt(ival, 0)) { if (strlen(date(b))) { " b. " date(b) } } else { " b. " long(b) if (dosources) { call do_sources(e) } } } /* * if a non-expanded indi, give more info * such as death, marriages, etc. If * expanded, don't since the full record * will contain it. */ if (eq(ival, 0)) { if (e, death(ch)) { if (b) { "," } " d. " long(e) if (dosources) { call do_sources(e) } } set(nsp, nfamilies(ch)) /* all known spouses */ spouses(ch, sp, fm, cnt) { "; m. " if (gt(nsp, 1)) { "(" d(cnt) ") " } if (e, marriage(fm)) { long(e) if (dosources) { call do_sources(e) } ", " } fullname(sp, 0, 1, 128) if (doindex) { rtf_index(surname(sp), givens(sp), 2) } } ". " if (donotes) { call do_notes(ch, donotes, 1) } } else { "." } call rtf_cend() incr(numchildren) } } call rtf_tend() call rtf_pend() } call rtf_para_space(0, 0) } /* * next_indi(indi) * find the next unique number for this individual * the global curr_index keeps the current value * the inum_set keeps track of the indi/number pairs */ proc next_indi(indi) { set(curr_index, add(curr_index, 1)) addtoset(inum_set, indi, curr_index) } /* * inum(indi) * find the unique number for this indi * if there is one it is in inum_set * zero is returned if there isn't a mapping */ func inum(indi) { forindiset(inum_set, indvar, inumval, cnt) { if (eq(indvar, indi)) { return (inumval) } } return (0) } /* * find_fam(indi, spouse) * find the family (fam) indi and spouse create */ func find_fam(indi, sps) { spouses (indi, s, f, c) { if (eq(sps, s)) { return (f) } } } /* * check_marriages(indi) * check to see if an individual has any marriages and return * the inum of the first spouse that has one */ func check_marriages(indi) { set(res, 0) set(notyet, 0) families (indi, f, s, c) { if (x, check_prev(f)) { incr(res) } else { incr(notyet) } } if (and(res, not(notyet))) { return (1) } else { return (0) } } /* * check_prev(fam) * check to see if a previous marriage and return non-zero * if there was one and zero if none. */ func check_prev(fam) { forlist(prev_fam_list, f, cnt) { if (eq(fam, f)) { return (cnt) } } return (0) } /* * determine(indi, par) * determine if the indi is one to expand. * The par is the parent descended from so that * female lines can be skipped if strictness is * set. */ func determine(indi, par) { if (and(eq(strictness, 2), female(indi))) { /* strictest form doesn't follow female lines */ return (0) } if (and(eq(strictness, 1), female(par))) { /* modified form gives one generation from a female line */ return (0) } set(nchil, 0) families (indi, fm, sp, cnt) { set(nchil, add(nchil, nchildren(fm))) } if (gt(nchil, 0)) { enqueue(nextgen, indi) call next_indi(indi) return (inum(indi)) } return (0) } /* * do_notes(indi, where, type) * where is inline vs. end * type is in or out of table */ proc do_notes(indi, where, type) { /* where == 1 is inline */ if (eq(where, 1)) { set(didpara, 0) set(innote, 0) set(root, inode(indi)) traverse(root, node, level) { if (and(innote, le(level, innote))) { set(innote, 0) } if (eqstr(tag(node), "NOTE")) { if (not(type)) { call rtf_pstart(3) } else { call rtf_cpar() } set(innote, level) call fixstring(value(node)) set(didpara, 1) } elsif (eqstr(tag(node), "CONT")) { if (innote) { if (eq(0, strlen(value(node)))) { if (not(type)) { call rtf_pstart(3) } else { call rtf_cpar() } } else { " \n" call fixstring(value(node)) } } } } } elsif (eq(where, 2)) { /* where == 2 is at end */ set(found, 0) set(tagprefix, 0) set(root, inode(indi)) traverse(root, node, level) { if (eqstr(tag(node), "NOTE")) { if (not(found)) { " [" } else { ", " } incr(found) if (not(tagprefix)) { set(tagprefix, tagname(indi)) } tagprefix d(found) } } if (found) { "]" } } } /* * fixstring(str) * fix the string to not break RTF output * Any {, }, or \ characters must be escaped. * Then output the string */ proc fixstring(str) { if (i, index(str, "{", 1)) { call fixstring(substring(str, 1, i)) "\\{" incr(i) call fixstring(substring(str, i, sub(strlen(str), i))) } elsif (i, index(str, "}", 1)) { call fixstring(substring(str, 1, i)) "\\}" incr(i) call fixstring(substring(str, i, sub(strlen(str), i))) } elsif (i, index(str, "\\", 1)) { call fixstring(substring(str, 1, i)) "\\\\" incr(i) call fixstring(substring(str, i, sub(strlen(str), i))) } else { str } } /* * prevmarr(indi) * determine if an indi had a previously output marriage. */ func prevmarr(indi) { spouses (indi, s, f, c) { forlist (prev_fam_list, fm, cnt) { if (eq(f, fm)) { return (cnt) } } } return (0) } /* * dotitle(author, title) */ proc dotitle(author, title) { "\\titlepg" "\\pvmrg\\posy2880\\qc\\fs48 " title "\\line\\line " "\\fs32 by\\line " author "\\par\\sect\\pgnrestart\n" } /* * tagname(indi) * from an indi, create a unique tag to use for notes references * for endnote form. */ func tagname(indi) { list(parts) /* * the algorithm is: * first 3 letters of surname * first letter of first and any middle name * if conflict, try adding "a", "b", etc. until unique. */ extractnames(inode(indi), parts, nparts, surpart) set(surnm, substring(getel(parts, surpart), 1, 3)) set(firstp, substring(getel(parts, 1), 1, 1)) if (gt(nparts, 2)) { set(midp, substring(getel(parts, 2), 1, 1)) if (not(strcmp(midp, "\""))) { set(midp, substring(midp, 2, 2)) } } else { set(midp, "") } set(tagvar, concat(surnm, firstp, midp)) set(suffix, "") set(v, 0) while (lookup(endtags, concat(tagvar, suffix))) { incr(v) set(suffix, substring("abcdefghijklmnopqrstuvwxyz", v, v)) } insert(endtags, tagvar, indi) call sorttag(tagvar) set(tagvar, concat(tagvar, suffix)) return (tagvar) } /* * sorttag(str) * do an insertion sort of str into the taglist list of notes */ proc sorttag(str) { list(tmp) set(done, 0) set(any, 0) while (l, dequeue(taglist)) { set(any, 1) if (not(done)) { set(r, strcmp(str, l)) if (le(r, 0)) { set(done, 1) enqueue(tmp, str) } if (ne(r, 0)) { enqueue(tmp, l) } } else { enqueue(tmp, l) } } if (or(not(any), not(done))) { enqueue(tmp, str) set(any, 1) } /* set to null so we can copy the new list */ list(taglist) if (any) { while (l, dequeue(tmp)) { enqueue(taglist, l) } } } /* * endnotes() * at end, dump the endnotes in a reasonable format */ proc endnotes() { call rtf_newpage() call rtf_para_indent(0, 0) call rtf_pstart(1) call rtf_hstart() "Notes" call rtf_hend() call rtf_pend() while (l, dequeue(taglist)) { set(indi, lookup(endtags, l)) if (indi) { call dumpnote(indi, l) } } } /* * dumpnote(indi, tagstr) * dump the notes for this indi, using tagstr as the prefix */ proc dumpnote(indi, tagstr) { set(didpara, 0) set(innote, 0) set(root, inode(indi)) set(which, 0) traverse(root, node, level) { if (and(innote, le(level, innote))) { set(innote, 0) } if (nestr(tag(node), "NOTE")) { call rtf_pstart(3) call rtf_para_indent(neg(1440), 1440) incr(which) set(innote, level) tagstr d(which) rtf_tab(0) value(node) set(didpara, 1) } elsif (nestr(tag(node), "CONT")) { if (innote) { if (eq(0, strlen(value(node)))) { call rtf_pstart(3) } else { " \n" value(node) } } } } } /* * totalchildren(indi) * count all the children this indi had */ func totalchildren(indi) { set(total, 0) families (indi, fam, sp, cnt) { set(total, add(total, nchildren(fam))) } return (total) } /* * do_sources(e) * find all the sources associated with the event * and create the footnote reference. If dosources is * greater than 1, just gather the footnotes to stick at * the end of family rather than in-line for each event * {mode 2 not implemented yet} */ proc do_sources(e) { set(evlist, sources(e)) list(taglist) while (s, dequeue(evlist)) { set(srcvar, fmt_source(s)) set(taglist, source_process(srcvar)) } if (not(empty(taglist))) { call rtf_super(1) set(pre, "") forlist(taglist, var, cnt) { pre d(var) set(pre, ", ") } call rtf_super(0) } } /* * fmt_source(s) * for a source node, traverse it and put into a normalized * reference/footnote format. New forms should be added as * necessary since there are lots of possibilities. */ func fmt_source(s) { set(prefix, "") set(cont, "") set(result, "") set(title,0) set(sour, 0) set(dt, 0) set(text, 0) set(publ, 0) set(page, 0) traverse (s, node, l) { if (gt(l, 2)) { continue() } if (reference(value(node))) { set(indresult, fmt_source(dereference(value(node)))) } else { if (eq(l, 0)) { continue() } elsif (eqstr(tag(node), "SOUR")) { set(sour, text_node(node)) } elsif (eqstr(tag(node), "TEXT")) { set(text, text_node(node)) } elsif (eqstr(tag(node), "DATE")) { set(dt, date(node)) } elsif (eqstr(tag(node), "TITL")) { set(title, text_node(node)) } elsif (eqstr(tag(node), "PAGE")) { set(page, concat("page ", value(node))) } } } set(result, "") if (indresult) { set(result, indresult) set(prefix, ", ") } if (title) { set(result, concat(result, prefix, title)) set(prefix, ", ") } if (sour) { set(result, concat(result, prefix, sour)) set(prefix, ", ") } if (dt) { set(result, concat(result, prefix, dt)) set(prefix, ", ") } if (text) { set(result, concat(result, prefix, text)) set(prefix, ", ") } if (publ) { set(result, concat(result, prefix, publ)) set(prefix, ", ") } if (page) { set(result, concat(result, prefix, page)) set(prefix, ", ") } return (result) } /* * sources(e) * for an event, look for all source nodes and make a list * to return. */ func sources(ev) { list(evs) if (not(ev)) { return (evs) } set(cnt, 0) traverse(ev, node, lev) { if (eqstr(tag(node), "SOUR")) { enqueue(evs, node) incr(cnt) } } return (evs) } /* * source_process(src) * look for the string src in the list of known sources * if it exists, use that index. If it doesn't add to list * and use the new index. Then remove duplicate entries * and ultimately return the list of uniqe references. */ func source_process(src) { list(taglist) set(found,0) forlist(all_sources, str, cnt) { if (eqstr(str, src)) { set(found, cnt) break() } } if (not(found)) { enqueue(all_sources, src) incr(cnt) set(taglist, addtolist(taglist, cnt)) } else { set(taglist, addtolist(taglist, found)) } return (taglist) } /* * addtolist(lst, num) * add the value "num" to the list "lst" if * it isn't already there. */ func addtolist(lst, num) { set(found, 0) list(newlist) forlist(lst, val, cnt) { if (not(found)) { if (eq(val, num)) { return (lst) /* no change - a dup */ } elsif (gt(val, num)) { set(found, 1) enqueue(newlist, num) enqueue(newlist, val) } } else { enqueue(newlist, val) } } if (not(found)) { enqueue(newlist, num) } return (newlist) } /* * dump_sources() * dump the entire list of reference sources with proper tags. */ proc dump_sources() { if (not(empty(all_sources))) { call rtf_pend() call rtf_newpage() call rtf_para_indent(0, 0) call rtf_pstart(1) call rtf_hstart() "References" call rtf_hend() call rtf_pend() forlist(all_sources, src, num) { call rtf_pstart(3) call rtf_para_indent(neg(540), 540) d(num) call rtf_tab(0) src call rtf_pend() } } } /* * text_node(node) * convert a text type node (TEXT or SOUR) into a long * string with CONT entries separated by space. */ func text_node(node) { set(result, "") set(prefix, "") traverse(node, n, l) { set(result, concat(result, prefix, value(n))) set(prefix, " ") } return (result) } /* * do_occupation(ind) * print out occupation(s) of the individual in * a meaningful form. */ proc do_occupation(indi) { list(occu) set(count, 0) traverse (inode(indi), node, lev) { if (eqstr(tag(node), "OCCU")) { /* have an occupation */ enqueue(occu, value(node)) incr(count) } } if (not(empty(occu))) { " " pn(indi, 0) " was a " set(sep, "") forlist(occu, item, cnt) { item sep if (eq(count, add(cnt, 1))) { set(sep, ", and ") } else { set(sep, ", ") } } ". " } } lifelines-3.0.61/reports/register-tex.ll0000700002540200244210000005166110337534166020433 0ustar prappDomain Users/* * @progname register-tex.ll * @version 2.1 of 2004-06-18 * @author Wetmore, David Olsen (dko@cs.wisc.edu), Simms * @category * @output LaTeX * @description * * This report prints, in book format, information about all descendants of a * person and all of their spouses. It tries to understand as many different * GEDCOM tags as possible. All source iformation (SOUR lines) is in the * footnotes. * The output is in LaTeX format. * ** ** Version 2.1 18 Jun 2004 (Robert Simms) ** Version 2 24 Feb 1993 ** Version 1 Nov 1992 ** ** Requires LifeLines version 2.3.3 or later ** ** ** Robert Simms (rsimms@ces.clemson.edu) ** Render characters meaningful to the LaTeX system as if they were ordinary characters. ** ** David Olsen (dko@cs.wisc.edu) ** based on work originally done by Tom Wetmore (ttw@cbnews1.att.com). ** ** This report prints, in book format, information about all descendants of a ** person and all of their spouses. It tries to understand as many different ** GEDCOM tags as possible. All source iformation (SOUR lines) is in the ** footnotes. ** ** The output is in LaTeX format. Therefore, the name of the output file ** should end in ".tex". To print (assuming the name of the output file is ** "out.tex"): ** latex out < ignore lots of warnings about underfull \hboxes > ** dvips out ** lpr out.ps ** ** Indexing commands are placed within the LaTeX output. To include an index ** in the document do the following: ** latex out ** makeindex out < not all systems have makeindex available> ** < edit out.tex, uncomment (remove leading '%') from ** the line \input{out.ind} just before \end{document} > ** latex out ** dvips out ** lpr out.ps ** < the last three commands here may be replaced by > ** pdflatex out -- if you have 'pdflatex' and a PDF is ** the desired final product > ** ** I admit that this is lot of post-processing, but the results are worth it. ** ** NOTE ON PAPER SIZES: ** Paper sizes (A4 or letter) can be specified within the LaTeX output, ** but this requires editing by folks who don't like the default. ** ** Since dvips (a neccessary processing step) can take a paper-size ** argument on the command line, it's much simpler to let the user ** specify the desired page size when running dvips (outlined above) ** instead of editing the report/LaTeX output. ** ** Example: ** dvips -t letter out [ for US Letter-sized paper, 8.5x11" ] ** dvips -t a4 out [ for ISO/European A4-sized paper, 8.3x11.7" ] ** */ global(opt_xlat) global(tex_xlat) proc main () { getindi(indi) /* Get the individual to start with */ /* Print preamble. Feel free to change this to suit your tastes. */ "\\documentstyle[twocolumn]{article}\n" "\\usepackage{isolatin1}\n\n" "\\pagestyle{myheadings}\n\n" "% Shrink the margins to use more of the page.\n" "% This is taken from fullpage.sty, which is on some systems.\n" "\\topmargin 0pt\n" "\\advance \\topmargin by -\\headheight\n" "\\advance \\topmargin by -\\headsep\n" "\\textheight 8.9in\n" "\\oddsidemargin 0pt\n" "\\evensidemargin \\oddsidemargin\n" "\\textwidth 6.5in\n\n" "\\newcounter{childnumber}\n\n" "% The \\noname command is needed because TeX doesnt like underscores.\n" "\\newcommand{\\noname}{\\underline{\\ \\ \\ \\ \\ }}\n\n" "% Environment for printing the list of children.\n" "\\newenvironment{childrenlist}" "{\\begin{small}\\begin{list}{\\sc\\roman{childnumber}.}" "{\\usecounter{childnumber}\\setlength{\\leftmargin}{0.5in}" "\\setlength{\\labelsep}{0.07in}\\setlength{\\labelwidth}{0.43in}}}" "{\\end{list}\\end{small}}\n\n" "% The following commands are used to create the index.\n" "\\newcommand{\\bold}[1]{{\\bf #1}}\n" "\\newcommand{\\bfit}[1]{{\\bf\\it #1}}\n" "\\newcommand{\\see}[2]{{\\it see #1}}\n\n" "% Command to use at the beginning of each new generation.\n" "\\newcommand{\\generation}[1]" "{\\newpage\\begin{center}{\\huge\\bf Generation #1}\\end{center}" "\\vspace{3ex}\\setcounter{footnote}{0}" "\\markright{Descendants of " strxlat(tex_xlat, fullname(indi,0,1,40)) "\\hfill Generation #1\\hfill\\ }}\n\n" "\\makeindex\n\n" "\\begin{document}\n\n" "\\title{Descendants of " strxlat(tex_xlat, fullname(indi, 0, 1, 40)) "}\n" getstrmsg(author, "Enter the author(s) of this document:") "\\author{" strxlat(tex_xlat, author) "}\n" "\\date{\\today}\n" "\\maketitle\n" getstrmsg(intro, "File that contains introduction (if any):") if (ne(strcmp(intro, ""), 0)) { "\\input{" intro "}\n" } list(ilist) /* List of individuals */ list(glist) /* List of generation for each individual */ table(stab) /* Table of numbers for each individual */ indiset(idex) /* LaTeX interprets $, &, %, #, _, {, }, ~, ^, and \ as special characters. A table is loaded here with the alternatives to make those special characters appear in the final product. Any text from the database sent to the LaTeX file to appear as text should be passed through the function strxlat(). */ set(opt_xlat, 1) table(tex_xlat) insert(tex_xlat, "$", "\\$") insert(tex_xlat, "&", "\\&") insert(tex_xlat, "%", "\\%") insert(tex_xlat, "#", "\\#") insert(tex_xlat, "_", "\\_") insert(tex_xlat, "{", "\\{") insert(tex_xlat, "}", "\\}") insert(tex_xlat, "~", "\\verb|~|") insert(tex_xlat, "^", "\\verb|^|") insert(tex_xlat, "\\", "\\verb|\\|") enqueue(ilist, indi) enqueue(glist, 1) set(curgen, 0) set(out, 1) set(in, 2) while (indi, dequeue(ilist)) { set(thisgen, dequeue(glist)) if (ne(curgen, thisgen)) { print("Generation ") print(d(thisgen)) print("\n") "\n\n\\generation{" d(thisgen) "}\n" set(curgen, thisgen) } print(d(out)) print(" ") print(name(indi)) print("\n") "\n\\vspace{3ex}\\ \\\\\\begin{center}{\\large\\bf " d(out) ".\\ " name(indi) "}\\end{center}\n" insert(stab, save(key(indi)), out) call longvitals(indi, 1, 2) addtoset(idex, indi, 0) set(out, add(out, 1)) families(indi, fam, spouse, nfam) { "\n\n" if (eq(0, nchildren(fam))) { call texname(inode(indi), 0) "\\ and " if (spouse) { call texname(inode(spouse), 0) } else { "\\noname" } "\\ had no children.\n" } elsif (and(spouse, lookup(stab, key(spouse)))) { "Children of " call texname(inode(indi), 0) "\\ and " call texname(inode(spouse), 0) "\\ are shown under " call texname(inode(spouse), 0) "\\ (" d(lookup(stab, key(spouse))) ").\n" } else { "Children of " call texname(inode(indi), 0) "\\ and " if (spouse) { call texname(inode(spouse), 0) } else { "\\noname" } ":\n\\begin{childrenlist}\n" children(fam, child, nchl) { set(haschild, 0) families(child, cfam, cspou, ncf) { if (ne(0, nchildren(cfam))) { set(haschild, 1) } } if (haschild) { enqueue(ilist, child) enqueue(glist, add(1, curgen)) "\n\\item[{\\bf " d(in) "}\\ \\hfill" "\\addtocounter{childnumber}{1}" "{\\sc\\roman{childnumber}}.]" set (in, add (in, 1)) call shortvitals(child) } else { "\n\\item " call longvitals(child, 0, 1) addtoset(idex, child, 0) } } "\\end{childrenlist}\n" } } } set(basename, save(substring(outfile(), 1, sub(index(outfile(), ".tex", 1), 1)))) "\n% remove percent-sign at the beginning of the line\n" "% with the input command if you create the index file\n" "% using 'makeindex'\n" "% \\input{" basename ".ind}" "\n\n\\end{document}\n" } /* shortvitals(indi): Displays the short form of the vital statistics (birth and death only) of an individual. */ proc shortvitals(indi) { call texname(inode(indi), 1) set(b, birth(indi)) set(d, death(indi)) if (and(b, long(b))) { ", b.\\ " strxlat(tex_xlat, long(b)) } if (and(d, long(d))) { ", d.\\ " strxlat(tex_xlat, long(d)) } "\n" } /* longvitals(i, name_parents, name_type) Prints out the complete vital statistics of the individual (i). If name_parents is not 0, then the names of the parents of the individual will be printed. The parameter name_type is passed to texname. The GEDCOM tags are divided into ones that would likely occur before getting married and ones that would likely occur after getting married. Within the two sets they are printed in the order in which they appear in the database. I haven't yet figured out a convenient way of indicating the sex. */ proc longvitals(i, name_parents, name_type) { call texname(inode(i), name_type) "." call print_sources(inode(i)) "\n" set(dad, father(i)) set(mom, mother(i)) if (and(name_parents, or(dad, mom))) { if ( male(i)) { "Son of " } elsif (female(i)) { "Daughter of " } else { "Child of " } if (dad) { call texname(inode(dad), 0) } if (and(dad, mom)) { "\nand " } if (mom) { call texname(inode(mom), 0) } ".\n" } set(name_found, 0) fornodes (inode(i), n) { if (eq(strcmp(tag(n), "ADOP"), 0)) { call process_event(n, "Adopted") } if (eq(strcmp(tag(n), "BAPL"), 0)) { call process_event(n, "Baptized") } if (eq(strcmp(tag(n), "BAPM"), 0)) { call process_event(n, "Baptized") } if (eq(strcmp(tag(n), "BARM"), 0)) { call process_event(n, "Bar mitzvah") } if (eq(strcmp(tag(n), "BASM"), 0)) { call process_event(n, "Bat mitzvah") } if (eq(strcmp(tag(n), "BIRT"), 0)) { call process_event(n, "Born") } if (eq(strcmp(tag(n), "BLES"), 0)) { call process_event(n, "Blessed") } if (eq(strcmp(tag(n), "CAST"), 0)) { "Caste: " call valuec(n) "." call print_sources(n) "\n" } if (eq(strcmp(tag(n), "CHR"), 0)) { call process_event(n, "Christened") } if (eq(strcmp(tag(n), "CONF"), 0)) { call process_event(n, "Confirmed") } if (eq(strcmp(tag(n), "CONL"), 0)) { call process_event(n, "Confirmed") } if (eq(strcmp(tag(n), "GRAD"), 0)) { call process_event(n, "Graduated") } if (eq(strcmp(tag(n), "NAME"), 0)) { if (eq(name_found, 0)) { set(name_found, 1) } else { "Also known as " call texname(n, 3) "." call print_sources(n) "\n" } } if (eq(strcmp(tag(n), "NAMR"), 0)) { "Religious name: " call valuec(n) "." call print_sources(n) "\n" } if (eq(strcmp(tag(n), "NATI"), 0)) { "Nationality: " call valuec(n) "." call print_sources(n) "\n" } if (eq(strcmp(tag(n), "ORDN"), 0)) { call process_event(n, "Ordained") } if (eq(strcmp(tag(n), "RELI"), 0)) { "Religious affiliation: " call valuec(n) "." call print_sources(n) "\n" } if (eq(strcmp(tag(n), "TITL"), 0)) { "Title: " value(n) "." call print_sources(n) "\n" } } if (eq(1, nfamilies(i))) { families(i, f, s, n) { "Married" call print_sources(fnode(f)) call spousevitals(s, f) } } else { families(i, f, s, n) { "Married " ord(n) "," call print_sources(fnode(f)) call spousevitals(s, f) } } fornodes (inode(i), n) { if (eq(strcmp(tag(n), "BURI"), 0)) { call process_event(n, "Buried") } if (eq(strcmp(tag(n), "CENS"), 0)) { call process_event(n, "Listed in census") } if (eq(strcmp(tag(n), "CHRA"), 0)) { call process_event(n, "Christened (as an adult)") } if (eq(strcmp(tag(n), "DEAT"), 0)) { call process_event(n, "Died") } /* One part of the GEDCOM standard says the tag should be DSCR, another part says DESR. */ if (eq(strcmp(tag(n), "DESR"), 0)) { "Description: " call valuec(n) call print_sources(n) "\n" } if (eq(strcmp(tag(n), "EVEN"), 0)) { call process_event(n, value(n)) } if (eq(strcmp(tag(n), "NATU"), 0)) { call process_event(n, "Naturalized") } if (eq(strcmp(tag(n), "OCCU"), 0)) { "Occupation: " call valuec(n) "." call print_sources(n) "\n" } if (eq(strcmp(tag(n), "PROB"), 0)) { call process_event(n, "Will probated") } if (eq(strcmp(tag(n), "PROP"), 0)) { "Possessions: " call valuec(n) "." call print_sources(n) "\n" } if (eq(strcmp(tag(n), "RETI"), 0)) { call process_event(n, "Retired") } if (eq(strcmp(tag(n), "WILL"), 0)) { call process_event(n, "Will dated") } } call print_notes(inode(i), "\n\n") } /* spousevitals (spouse, fam) Prints out information about a marriage (fam) and about a spouse in the marriage (spouse). */ proc spousevitals (spouse, fam) { if (e, marriage(fam)) { call print_event(e) "," call print_sources(e) " " } "\n" if (spouse) { call texname(inode(spouse), 3) call print_sources(inode(spouse)) set(bir, birth(spouse)) set(chr, baptism(spouse)) set(dea, death(spouse)) set(bur, burial(spouse)) set(dad, father(spouse)) set(mom, mother(spouse)) if (or(bir, chr, dea, bur, mom, dad)) { "\n(" if (bir) { "born" call print_event(bir) if (or(dea, bur, mom, dad)) { "," } call print_sources(bir) if (or(dea, bur, mom, dad)) { "\n" } } if (and(chr, not(bir))) { "christened" call print_event(chr) if (or(dea, bur, mom, dad)) { "," } call print_sources(chr) if (or(dea, bur, mom, dad)) { "\n" } } if (dea) { "died" call print_event(dea) if (or(mom, dad)) { "," } call print_sources(dea) if (or(mom, dad)) { "\n" } } if (and(bur, not(dea))) { "buried" call print_event(bur) if (or(mom, dad)) { "," } call print_sources(bur) if (or(mom, dad)) { "\n" } } if (or(mom, dad)) { if ( male(spouse)) { "son of " } elsif (female(spouse)) { "daughter of " } else { "child of " } if (dad) { call texname(inode(dad), 3) } if (and(mom, dad)) { " and " } if (mom) { call texname(inode(mom), 3) } } ")" } } else { "\\noname" } ".\n" } /* texname (i, type) Prints an individual's name in LaTeX format, with the surname in small caps. For example, "David Kenneth /Olsen/ Jr." would be printed as "David Kenneth {\sc Olsen} Jr.". The type argument determines how the name will appear in the index. type = 0: no index type = 1: page number appears in bold type = 2: page number appears in bold-italics type = 3: page number appears in normal text The parameter i can be either an INDI node (NOT an individial) or a NAME node. */ proc texname (i, type) { list(name_list) set(sname, "") extractnames(i, name_list, num_names, surname_no) forlist (name_list, nm, num) { if (eq(num, surname_no)) { if (eq(strcmp(nm, ""), 0)) { " \\noname" set(sname, "\\noname") } else { " {\\sc " strxlat(tex_xlat, save(nm)) "}" set(sname, nm) } } else { " " strxlat(tex_xlat, nm) } } if (gt(type, 0)) { "\\index{" strxlat(tex_xlat, sname) if (gt(num_names, 1)) { "," } forlist (name_list, nm, num) { if (ne(num, surname_no)) { " " strxlat(tex_xlat, nm) } } if (eq(type, 1)) { "|bold"} elsif (eq(type, 2)) { "|bfit"} "}" } } /* process_event (event_node, event_name) Prints information about a particular event (event_node, which is a GEDCOM node). event_name is verb form of the text describing the event (such as "Born", "Died", etc.). */ proc process_event (event_node, event_name) { event_name call print_event(event_node) "." call print_sources(event_node) call print_notes(event_node, " ") "\n" } /* print_event (event_node): Prints the date and place of an event. */ proc print_event (event_node) { if (date(event_node)) { " " strxlat(tex_xlat, date(event_node)) } if (place(event_node)) { " at " strxlat(tex_xlat, place(event_node)) } } /* print_notes (root, sep): Prints all the notes (NOTE nodes) associated with the GEDCOM line root, separated by the given separator. */ proc print_notes (root, sep) { fornotes (root, note) { sep strxlat(tex_xlat, note) " " } } /* print_sources (root) Prints all sources (SOUR lines) associated with the given GEDCOM line. The sources are formated as LaTeX footnotes. This routine prints each SOUR line as a separate footnote, which is not correct. This should be corrected so that all sources are combined into a single footnote. */ proc print_sources (root) { fornodes (root, n) { if (eq(strcmp(tag(n), "SOUR"), 0)) { "\\footnote{" call valuec(n) "}" } } } /* valuec(n): Prints the value of a GEDCOM node and the values of any CONT lines associated with it. */ proc valuec(n) { value(n) fornodes (n, n1) { if (eq(strcmp(tag(n1), "CONT"), 0)) { "\n" strxlat(tex_xlat, value(n1)) } } } /* ** function: strxlat ** ** This idea was copied and/or adapted from Jim Eggert's modification ** to the ps-circ(le) program for LifeLines. ** A typical call would look like: ** set(str, strxlat(tex_xlat, name(person))) ** which would translate characters in person's name according to the ** table called tex_xlat -- which escapes the special characters being ** displayed as text via LaTeX. The output is assigned to str. ** The output of strxlat() can also be sent directly to output. ** */ func strxlat(xlat, string) { if(opt_xlat) { set(fixstring, "") set(pos, 1) while(le(pos, strlen(string))) { set(char, substring(string, pos, pos)) if(special, lookup(xlat, char)) { set(fixstring, concat(fixstring, special)) } else { set(fixstring, concat(fixstring, char)) } incr(pos) } } else { set(fixstring, string) } return(save(fixstring)) /* save() is for compatibilty with older LL */ } lifelines-3.0.61/reports/register1-dot.ll0000700002540200244210000000574410362317137020476 0ustar prappDomain Users/* * @progname register1-dot * @version 1.0 (14-May-2004) * @author Marc Nozell (marc@nozell.com) * @category * @output dot format * @description Use graphviz's dot to product multipage * directed graphs of descendants. * * (dot is available from www.graphviz.com) * $ dot -Tps -ofamily.ps family.dot */ proc main () { getindi(indi) list(ilist) list(glist) table(stab) indiset(idex) enqueue(ilist,indi) enqueue(glist,1) set(curgen,0) set(out,1) set(in,2) "digraph \"nozell family\" {" nl() "ranksep=.75; "nl() "page = \"8,5\";"nl() /* "size = \"10.5,8\";"nl() */ /* If you want landscape mode. "rotate = 90;"nl() */ "\"" key(indi) "\" [label=\"" name(indi) "\"];" nl() while (indi,dequeue(ilist)) { print("OUT: ") print(d(out)) print("# ") print(name(indi)) print(nl()) set(thisgen,dequeue(glist)) insert(stab,save(key(indi)),out) addtoset(idex,indi,0) set(out,add(out,1)) families(indi,fam,spouse,nfam) { if (spouse) { set(sname, save(name(spouse))) set (spousekey, save(key(spouse))) } else { set(sname, "_____") set (spousekey, "IUNKNOWN") } if (eq(0,nchildren(fam))) { nl() } elsif (and(spouse,lookup(stab,key(spouse)))) { nl() } else { "#Children of " name(indi) " and " sname":" nl() if (male(spouse)) { set(spousesexstyle, " ,shape=box,color=slateblue1 ") } elsif (female(spouse)) { set(spousesexstyle, " ,shape=diamond,color=pink ")} else { set(spousesexstyle, " ,shape=hexagon,color=yellow ") } /* define the spouse... */ "\"" spousekey "\" [label=\"" sname "\"" spousesexstyle "];" nl() /* Show the marriage by a different arrow type, a higher weight and set them at the same level */ "\"" key(indi) "\" -> \"" spousekey "\" [weight=10, arrowhead=dot, arrowtail=dot];" nl() "\"" spousekey "\" -> \"" key(indi) "\" [weight=10, arrowhead=dot, arrowtail=dot];" nl() "{ rank = same; " key(indi) "; " spousekey "; }" nl() children(fam,child,nchl) { set(haschild,0) families(child,cfam,cspou,ncf) { if (ne(0,nchildren(cfam))) { set(haschild,1) } } if (male(child)) { set(sexstyle, " ,shape=box,color=slateblue1 ") } elsif (female(child)) { set(sexstyle, " ,shape=diamond,color=pink ")} else { set(sexstyle, " ,shape=hexagon,color=yellow ") } /* define the child and their relationship to the parents */ "# KEYDEF \"" key(child) "\" [label=\"" name(child) "\"" sexstyle "];" nl() "\"" key(child) "\" [label=\"" name(child) "\" sexstyle];" nl() "\"" key(indi) "\"" " -> " "\"" key(child) "\";" nl() "\"" spousekey "\"" " -> " "\"" key(child) "\";" nl() if (haschild) { print("IN: ") print(d(in)) print(" ") print(name(child)) print(nl()) enqueue(ilist,child) enqueue(glist,add(1,curgen)) } else { addtoset(idex,child,0) } } } } } "}" } lifelines-3.0.61/reports/register1.ll0000700002540200244210000001623310076661057017712 0ustar prappDomain Users/* * @progname register1.ll * @version 1.0 * @author Wetmore * @category * @output nroff * @description * * It will produce a report of all descendents of a person, * and is presently designed for 12 pitch, HP laserjet III. * All NOTE and CONT lines from data will be printed in the this report. * This report will produce a paginated output. It is similiar * to the report 'regvital1'. * * register1 * * This report does NOT have a footer and header * * Code by Tom Wetmore, ttw@cbnewsl.att.com * * This report works only with the LifeLines Genealogy program * * version one of this report was written by Tom Wetmore, in 1990, * and it has been modified many times since. * * This report produces a nroff output, and to produce the * output, use: nroff filename > filename.out * */ proc main () { getindi(indi) ".de hd" nl() "'sp .8i" nl() ".." nl() ".de fo" nl() "'bp" nl() ".." nl() ".wh 0 hd" nl() ".wh -.8i fo" nl() ".de CH" nl() ".sp" nl() ".in 16n" nl() ".ti 0" nl() "\h'5n'\h'-\w'\\$1'u'\\$1\h'8n'\h'-\w'\\$2'u'\\$2\h'2n'" nl() ".." nl() ".de IN" nl() ".sp" nl() ".in 0" nl() ".." nl() ".de GN" nl() ".br" nl() ".ne 2i" nl() ".sp 2" nl() ".in 0" nl() ".ce" nl() ".." nl() ".de P" nl() ".sp" nl() ".in 0" nl() ".ti 5" nl() ".." nl() ".po 3" nl() ".ll 7i" nl() ".ls 1" nl() ".na" nl() list(ilist) list(glist) table(stab) indiset(idex) enqueue(ilist,indi) enqueue(glist,1) set(curgen,0) set(out,1) set(in,2) while (indi,dequeue(ilist)) { print("OUT: ") print(d(out)) print(" ") print(name(indi)) print(nl()) set(thisgen,dequeue(glist)) if (ne(curgen,thisgen)) { ".GN" nl() "GENERATION " d(thisgen) nl() nl() set(curgen,thisgen) } ".IN" nl() d(out) ". " insert(stab,save(key(indi)),out) call longvitals(indi) addtoset(idex,indi,0) set(out,add(out,1)) families(indi,fam,spouse,nfam) { ".P" nl() if (spouse) { set(sname, save(name(spouse))) } else { set(sname, "_____") } if (eq(0,nchildren(fam))) { name(indi) " and " sname " had no children." nl() } elsif (and(spouse,lookup(stab,key(spouse)))) { "Children of " name(indi) " and " sname " are shown " "under " sname " (" d(lookup(stab,key(spouse))) ")." nl() } else { "Children of " name(indi) " and " sname":" nl() children(fam,child,nchl) { set(haschild,0) families(child,cfam,cspou,ncf) { if (ne(0,nchildren(cfam))) { set(haschild,1) } } if (haschild) { print("IN: ") print(d(in)) print(" ") print(name(child)) print(nl()) enqueue(ilist,child) enqueue(glist,add(1,curgen)) ".CH " d(in) " " roman(nchl) nl() set (in, add (in, 1)) call shortvitals(child) } else { ".CH " qt() qt() " " roman(nchl) nl() call longvitals(child) addtoset(idex,child,0) } } } } } } proc shortvitals(indi) { name(indi) set(b,birth(indi)) set(d,death(indi)) if (and(b,short(b))) { ", b. " short(b) } if (and(d,short(d))) { ", d. " short(d) } nl() } proc longvitals(i) { name(i) "." nl() set(e,birth(i)) if(and(e,long(e))) { "Born " long(e) "." nl() } if (eq(1,nspouses(i))) { spouses(i,s,f,n) { "Married" set(nocomma,1) call spousevitals(s,f) } } else { spouses(i,s,f,n) { "Married " ord(n) "," call spousevitals(s,f) } } set(e,death(i)) if(and(e,long(e))) { "Died " long(e) "." nl() } fornotes(inode(i), note) { note nl() } } proc spousevitals (spouse,fam) { set(e,marriage(fam)) if (and(e,long(e))) { nl() long(e) "," } nl() name(spouse) set(e,birth(spouse)) if(and(e,long(e))) { "," nl() "born " long(e) } set(e,death(spouse)) if(and(e,long(e))) { "," nl() "died " long(e) } set(dad,father(spouse)) set(mom,mother(spouse)) if (or(dad,mom)) { "," nl() if (male(spouse)) { "son of " } elsif (female(spouse)) { "daughter of " } else { "child of " } } if (dad) { name(dad) } if (and(dad,mom)) { nl() "and " } if (mom) { name(mom) } "." nl() } /* Sample output of this report, it is paginated but I have not shown that in this example. GENERATION 1 1. Fuller Ruben MANES. Born 19 Nov 1902, Union Valley, Sevier Co, TN. Married 17 OCT 1936, Knoxville, TN, Edith Alberta MANIS, born 8 APR 1914, Dandridge, Jefferson Co, TN, died 18 JUN 1992, Knoxville, Knox Co, TN, daughter of William Loyd MANIS and Lillie Caroline "Carolyn" NEWMAN. Died 20 Jun 1980, Knoxville, Knox Co, TN. Fuller's first fifteen years were growing up on a farm. By the time he was 10 years old, he had 9 other brothers and sisters to help feed and care for, play with, and the many facets of work which had to be done each day. "Clifford" and "Snowball" were some of his nicknames. Pictures show him (many times) in a three-piece suit and a man of many places. As most men, during his youth, he was photographed in the presence with several different females. He attended school at Harrison Chilhowee Baptist Academy, which a walk of about 5 or 6 miles each way from his home. He boarded at the school dormitory for an unknown period of time. Children of Fuller Ruben MANES and Edith Alberta MANIS: i Ellsworth Howard MANIS. Born 11 MAR 1939, Knoxville, Knox Co, TN. Died 13 MAR 1939, Knoxville, TN,. Was the first born of twins, birth two-forty PM, at Harrison-Henderson Hospital. Ellsworth died at age 44 hours, was a twin to Alda Clifford MANIS. Buried 13 Mar 1939 at Seven Islands Cem, NE Knox County, TN (near Jefferson and Sevier County line). 2 ii Alda Clifford MANIS, b. 1939, TN GENERATION 2 2. Alda Clifford MANIS. Born 11 MAR 1939, Knoxville, Knox Co, TN. Married first, 8 SEP 1962, Knoxville, Knox Co, TN, Joyce Fern OWENS, born 1 APR 1942, Knoxville, Knox Co, TN, daughter of Guy Hixon OWENS and Bertha Mae TURNER. Married second, 13 FEB 1984, San Antonio, Texas, Marianne Florence KRAMER, born 19 MAY 1943, Los Angeles, CA, daughter of Anthony Leo KRAMER and Florence Rita BOSSO. Born at two-forty five PM, Harrison- Henderson Hospital. Twin of Elsworth Howard MANIS. Clifford was born second. Children of Alda Clifford MANIS and Joyce Fern OWENS: 3 i Gregory Scott MANIS, b. 1963, VA ii Sheila Ann MANIS. Born 7 APR 1968, Mexico City, Mexico DF. Alda Clifford MANIS and Marianne Florence KRAMER had no children. */ /* end of report */ lifelines-3.0.61/reports/regvital.ll0000700002540200244210000003355510077402654017625 0ustar prappDomain Users/* * @progname regvital.ll * @version 3.0 * @author Wetmore, Manis, Chandler * @category * @output nroff * @description This program produces a report of all descendents of a given person, and is presently designed for 12 pitch, HP laserjet III, for printing a book about that person. All NOTE and CONT lines are included in the report, along with the vital statistics, occupations, immigrations, attributes, and wills. At the end of the report is a sorted listing of names of everyone mentioned, with reference numbers giving the first occurrences of all the names. regvital version 1 by Tom Wetmore version 2 by Cliff Manis version 3 by John Chandler, 1994 This program has paginated output with a footer and header. This report produces a nroff output, and to produce the output, use: nroff filename > filename.out or: troff -t filename | lpr -t */ global(bold) global(idex) global(srcs) global(curref) global(months) global(dtform) global(footn) global(begnote) global(endnote) proc main () { /* Customize the following: */ set(head,"Family History") /* set(foot,"your name and address or whatever") */ set(foot,concat("Created ",stddate(gettoday())," by ", getproperty("user.fullname"), " ",getproperty("user.email"))) set(ll,"8.5i") /* line length for headers */ set(dtform,0) /* date format: 0=dmy, 8=ymd, etc. */ set(footn,1) /* if 1, then do footnote-style sources */ set(fancy,0) /* if 1, then do superscript note refs */ set(bold,0) /* if 1, use boldface for names */ list(months) enqueue(months,"Jan") enqueue(months,"Feb") enqueue(months,"Mar") enqueue(months,"Apr") enqueue(months,"May") enqueue(months,"Jun") enqueue(months,"Jul") enqueue(months,"Aug") enqueue(months,"Sep") enqueue(months,"Oct") enqueue(months,"Nov") enqueue(months,"Dec") if(fancy){ set(begnote,"\\u\\s-2") /* or use left-bracket for ASCII version */ set(endnote,"\\s0\\d") /* or use right-bracket */ } else { set(begnote,"[") set(endnote,"]") } dateformat(dtform) if(or(eq(dtform,0),eq(dtform,8))){dayformat(0) monthformat(4)} elsif(eq(dtform,1)){dayformat(2) monthformat(4)} else{dayformat(1) monthformat(1)} getindi(indi) getintmsg(maxgen,"Enter max generations to include (0 if no limit)") set(maxgen,sub(maxgen,1)) set(tday, gettoday()) ".de hd\n" /* header */ ".ev 1\n" ".sp 2\n" ".tl '" head "''%'\n" ".tl ''" stddate(tday) "''\n" "\n" "'sp 3\n" ".ev\n" "..\n" ".de fo\n" /* footer */ ".ev 1\n" ".sp\n" ".tl '" foot "'''\n" ".sp\n" ".ev\n" "'bp\n" "..\n" ".wh 0 hd\n" ".wh -.8i fo\n" ".de CH\n" /* CHild number macro */ ".sp\n" ".in 14n\n" ".ti 0\n" "\\h'5n'\\h'-\\w'\\\\$1'u'\\\\$1\\h'6n'\\h'-\\w'\\\\$2'u'\\\\$2\\h'2n'\n" "..\n" ".de II\n" /* Index Item macro */ ".br\n" "\\\\$1\\h'-\\w'\\\\$1'u'\\h'35n'" "\\\\$2\\h'-\\w'\\\\$2'u'\\h'13n'" "\\\\$3\\h'-\\w'\\\\$3'u'\\h'13n'" "\\\\$4\n" "..\n" ".de IN\n" /* Individual Number macro */ ".sp\n" ".in 0\n" "..\n" ".de GN\n" /* Generation Number macro */ ".br\n" ".ne 2i\n" ".sp 2\n" ".in 0\n" ".ce\n" "..\n" ".de P\n" /* Paragraph macro */ ".sp\n" ".in 0\n" ".ti 5n\n" /* indent 1st line */ "..\n" ".ev 1\n" ".ll " ll nl() /* line length */ ".ev\n" ".po 9\n" /* left margin */ ".ls 1\n" ".na\n" list(ilist) list(glist) table(stab) indiset(idex) enqueue(ilist,indi) enqueue(glist,1) set(curgen,0) set(out,1) set(in,2) if(footn) {list(srcs)} while (indi,dequeue(ilist)) { print("OUT: ") print(d(out)) print(" ") print(name(indi)) print(nl()) set(thisgen,dequeue(glist)) if (ne(curgen,thisgen)) { if(or(lt(maxgen,0),gt(maxgen,1))){".GN\nGENERATION " d(thisgen) "\n\n"} set(curgen,thisgen) } ".IN\n" d(out) ". " insert(stab,save(key(indi)),out) set(curref,out) call longvitals(indi,curgen) addtoset(idex,indi,curref) set(out,add(out,1)) families(indi,fam,spouse,nfam) { ".P\n" if (spouse) { set(sname, save(name(spouse))) } else { set(sname, "_____") } if(eq(0,strcmp("",sname))) { set(sname, "_____") } if (eq(0,nchildren(fam))) { name(indi) " and " sname " had no children.\n" } elsif (and(spouse,lookup(stab,key(spouse)))) { "Children of " name(indi) " and " sname " are shown " "under " sname " (" d(lookup(stab,key(spouse))) ").\n" } else { "Children of " name(indi) " and " sname ":\n" children(fam,child,nchl) { set(haschild,0) families(child,cfam,cspou,ncf) { if (ne(0,nchildren(cfam))) { set(haschild,1) } } if(and(haschild,or(gt(maxgen,curgen),lt(maxgen,0)))) { print("IN: ") print(d(in)) print(" ") print(name(child)) print(nl()) enqueue(ilist,child) enqueue(glist,add(1,curgen)) ".CH " d(in) " " roman(nchl) nl() set (in, add (in, 1)) call shortvitals(child) } else { ".CH " qt() qt() " " roman(nchl) nl() call longvitals(child,0) addtoset(idex,child,curref) } } } } } if(and(footn,length(srcs))){ "\n.in 0\n.sp 2\n---------------\n.sp\nSources of information:\n" forlist(srcs,s,n){ if(gt(n,1)){";\n"} "[" d(n) "] " s } ".\n" } if(or(lt(maxgen,0),gt(maxgen,1))){ print("begin sorting\n") namesort(idex) print("done sorting\n") ".bp\n" ".in 0\n" "Index of Persons in this Report (first occurrence)\n\n" ".II Name Birth Death #\n\n" forindiset(idex,indi,v,n) { ".II " qt()fullname(indi,1,0,30)qt() " " qt()stddate(birth(indi))qt() " " qt()stddate(death(indi))qt() " " d(v) nl() print(".") } nl() print(nl()) }} proc shortvitals(indi){ name(indi) set(b,birth(indi)) set(d,death(indi)) if (and(b,short(b))) { ", b. " short(b) } if (and(d,short(d))) { ", d. " short(d) } nl() } proc longvitals(i,flag){ /* all data and notes for individual */ if(not(footn)) {list(srcs)} if (bold) { "\\f3" } name(i) if (bold) { "\\f1" } set(e,birth(i)) if(and(e,long(e))) { ",\nborn " call displong(e) } if(not(and(e,place(e)))) { set(e,baptism(i)) if(and(e,long(e))) { ",\nbaptized " call displong(e) } } if(eq(flag,1)) { call printparents(i) } ".\n" set(e,death(i)) if(and(e,long(e))) { "Died " call displong(e) ".\n" } if(not(and(e,place(e)))) { set(e,burial(i)) if(and(e,long(e))) {"Buried " call displong(e) ".\n"} } if (eq(1,nspouses(i))) { spouses(i,s,f,n) { if(e,marriage(f)) { "Married" } else { /* "Lived with " */ "Married" } set(nocomma,1) call spousevitals(s,f) } } else { set(j,1) spouses(i,s,f,n) { if(e,marriage(f)) { "Married " ord(j) "," set(j,add(j,1)) } else { "Married" } call spousevitals(s,f) } } fornodes(inode(i), node) { set(ntag, save(tag(node))) if (eq(0,strcmp("FILE", ntag))) { copyfile(value(node)) } elsif (eq(0,strcmp("NOTE", ntag))) { value(node) fornodes(node, subnode) { if (eq(0,strcmp("CONT", tag(subnode)))) { nl() value(subnode) } } call setsrc(node) nl() } elsif (eq(0,strcmp("OCCU", ntag))) { "Occupation: " value(node) call setsrc(node) ".\n" } elsif (eq(0,strcmp("ATTR", ntag))) { "Attributes: " value(node) call setsrc(node) ".\n" } elsif (eq(0,strcmp("IMMI", ntag))) { if(long(node)) { "Immigrated " call displong(node) fornodes(node, subnode) { if(eq(0,strcmp("NOTE",tag(subnode)))) { ",\n" value(subnode) } } ".\n" } } elsif (eq(0,strcmp("WILL", ntag))) { if(long(node)) { "Made a will " call displong(node) ".\n" } } elsif (eq(0,strcmp("PROB", ntag))) { if(long(node)) { "Will proved " call displong(node) ".\n" } } } if(and(not(footn),length(srcs))){ "\nSources of information:\n" forlist(srcs,s,n){ if(gt(n,1)){";\n"} s } ".\n" }} proc displong(e) { /* display full date, place, and age for an event */ /* long(e) */ extractdate(e,da,mo,yr) if(mod,date(e)){ if(or(da,or(mo,yr))){ set(mod,trim(mod,3)) if(eq(0,strcmp(mod,"ABT"))) {"about "} elsif(eq(0,strcmp(mod,"abo"))) {"about "} elsif(eq(0,strcmp(mod,"AFT"))) {"after "} elsif(eq(0,strcmp(mod,"aft"))) {"after "} elsif(eq(0,strcmp(mod,"BEF"))) {"before "} elsif(eq(0,strcmp(mod,"bef"))) {"before "} elsif(eq(0,strcmp(mod,"BET"))) {"beginning "} if(or(eq(1,dtform),le(8,dtform))){ if(yr){ d(yr) if(mo){" "}} if(mo){ getel(months,mo) if(da){" "d(da)}} } else{ if(da){ d(da) if(mo){" "}} if(mo){ getel(months,mo) if(yr){" "}} if(yr){d(yr)} } } else { mod } if(place(e)){ ", "} } if(mod,place(e)) { mod } fornodes(e,subnode) { if(eq(0,strcmp("AGE",tag(subnode)))) { ",\naged " value(subnode) } } call setsrc(e) } proc setsrc(node) { /* collect source reference, if any */ fornodes(node,subnode){ if(eq(0,strcmp("SOUR",tag(subnode)))){ if(n,length(srcs)){ set(i,0) while(lt(i,n)){ set(i,add(i,1)) if(eq(0,strcmp(getel(srcs,i),value(subnode)))){ set(n,i) set(skip,1) } } } if(not(skip)){ enqueue(srcs,save(value(subnode))) set(i,add(n,1)) } if(footn){ if(not(started)){begnote set(started,1)} else{","} d(i)} } } if(started){endnote} } proc spousevitals (sp,fam) { list(names) addtoset(idex,sp,curref) set(e,marriage(fam)) if (and(e,long(e))) { nl() call displong(e) "," } "\n" if (bold) { "\\f3" } if(strcmp("",name(sp))) {name(sp)} else {"_____"} if (bold) { "\\f1" } if(e){ fornodes(e,subnode) { if(eq(0,strcmp("NAME",tag(subnode)))){ extractnames(subnode,names,n,s) if(s) {"\n(under the name " getel(names,s) ")"} } } } set(e,birth(sp)) if(and(e,long(e))) { ",\nborn " call displong(e) } set(e,death(sp)) if(and(e,long(e))) { ",\ndied " call displong(e) } call printparents(sp) } proc printparents(ind) { /* print only if non-blank */ if(dad,father(ind)) {if(ndad,name(dad)) {set(nbld,strcmp("",ndad))}} if(mom,mother(ind)) {if(nmom,name(mom)) {set(nblm,strcmp("",nmom))}} if (or(nbld,nblm)) { ",\n" if (male(ind)) { "son of " } elsif (female(ind)) { "daughter of " } else { "child of " } } if (nbld) { name(dad) } if (and(nbld,nblm)) { "\nand " } if (nblm) { name(mom) } ".\n" if (nbld) { addtoset(idex,dad,curref) } if (nblm) { addtoset(idex,mom,curref) } } /* Sample printout of the report, plus also prints a names index. Manes - Manis - Maness Family History 14 Jan 1993 GENERATION 1 1. William Bowers MANES, born 6 Jan 1868, Hamblen Co, TN ?, died 5 May 1933, Sevier Co, TN. Married 13 Apr 1892, White Pine, TN, Cordelia "Corda" F. CANTER, born 7 Dec 1869, Jonesboro, Washington Co, TN, died 18 Apr 1960, Knoxville, Knox Co, TN, daughter of James H. CANTER and Martha Marie WHITEHORN. He died of pneumonia at his homeplace in Union Valley, Sevier Co, TN He was buried at the Knob Creek Baptist Church cemetery in Sevier County, TN. Children of William Bowers MANES and Cordelia "Corda" F. CANTER: 2 i Nellie V. MANES, b. 1893, TN, d. 1984, TN ii Emery H. MANES, born 24 Oct 1894, White Pine, Jefferson Co, TN, died 26 Jul 1926, Knob Creek, Sevier Co., TN. Died in auto accident, when he and a brother were going in his truck with a load of vegetables, and going to market in Knoxville. He is buried at Knob Creek Cem. Sevier Co, TN. 3 iii Walter C. MANES, b. 1896, TN, d. 1989, TN 4 iv William Lee MANES, b. 1897, TN, d. 1969, TN v George MANES, born 29 Oct 1898, Union Valley, Sevier Co, TN, died 17 Jun 1899, Knob Creek, Sevier Co, TN. Single, died as a infant, and is buried at Knob Creek Cem, Sevier Co, TN. 5 vi Fuller Ruben MANES, b. 1902, TN, d. 1980, TN 6 vii Mabel E. MANES, b. 1905, TN 7 viii Lena G. MANES, b. 1906, TN, d. 1987, TN 8 ix Wade Preston MANES, b. 1910, TN 9 x Newman Clarence MANES, b. 1912, TN //end of sample// */ lifelines-3.0.61/reports/reg_html.ll0000700002540200244210000000741310362317137017601 0ustar prappDomain Users/* * @progname reg_html.ll * @version none * @author Wetmore, Prinke * @category * @output HTML * @description * * The output produces a HTML-marked file (without header) with * one family group per line so that it is displayed on WWW when * found with grep and properly formatted. * Continental European genealogical symbols are used: * * = born + = died x = married * * Original code by Tom Wetmore, ttw@cbnewsl.att.com, 1990 * Modified for HTML/WWW by Rafal Prinke, rafalp@plpuam11.bitnet, 1995 * * This program is based on regvital by Tom Wetmore. I deleted * all nroff output code and indexing code, and made some other * modifications. * * * The CGI script I wrote for searching the file and then navigating * through it using the personal key numbers in angle brackets: * * #!/bin/sh * echo Content-type: text/html * echo * if [ $# = 0 ] * then * echo "" * echo "Surname search" * echo "" * echo "" * echo "" * echo "

    Give the surname of the family

    " * echo "Regular expressions allowed

    " * echo "" * else * echo "" * echo "Search results" * echo "" * echo "" * echo "" * echo "

    Now you can jump to any person displayed

    " * echo "type the person's number in angle brackets (lesser/greater)

    " * grep -i "$*" <> * echo "" * fi * * * */ proc main () { monthformat(2) dateformat(5) forindi(indi,n) { print(" ") print(name(indi)) print(nl()) call longvitals(indi) set(j,1) families(indi,fam,spouse,nfam) { if (eq(1,nspouses(indi))) { "

    x " } else { "

    x " d(j) ") " set(j,add(j,1)) } if (eq(0,nchildren(fam))) { call spousevitals(spouse,fam) ", children not recorded [" key(spouse,1) "]" } else { call spousevitals(spouse,fam) " [" key(spouse,1) "]" children(fam,child,nchl) { "
    " d(nchl) ". " name(child) " [" key(child,1) "]" } } "
    " } } } proc longvitals(i) { set(father,father(i)) set(mother,mother(i)) nl() "-------------------------

    " if (or(father,mother)) { "Parents: " if (father) { name(father) } if (and(father,mother)) { " & " } if (mother) { name(mother) } } "

    <" key(i,1) ">" givens(i) " " surname(i) "

    " set(e,birth(i)) if(or(date(e),place(e))) { " * " } if(date(e)) { stddate(e) ", " } if(place(e)) { place(e) ", " } set(e,death(i)) if(or(date(e),place(e))) { " + " } if(date(e)) { stddate(e) ", " } if(place(e)) { place(e) ", " } fornodes(inode(i), node) { if (eq(0,strcmp("OCCU", tag(node)))) { value(node) ", " } } fornodes(inode(i), node) { if (eq(0,strcmp("NOTE", tag(node)))) { value(node) fornodes(node, subnode) { if (or(eqstr("CONT",tag(subnode)), eqstr("CONC",tag(subnode)))) { " " value(subnode) } } } } } proc spousevitals (sp,fam) { set(e,marriage(fam)) if(date(e)) { stddate(e) ", " } if(place(e)) { place(e) ", " } name(sp) } lifelines-3.0.61/reports/relate.ll0000700002540200244210000000640410076661057017260 0ustar prappDomain Users/* * @progname relate.ll * @version 1.0 * @author Wetmore * @category * @output Text * @description * * Finds a shortest path between two persons in a LifeLines database. * Inspiration from Jim Eggert's relation program. relate - Finds a shortest path between two persons in a LifeLines database. by Tom Wetmore (ttw@petrel.att.com) Inspiration from Jim Eggert's relation program Version 1, 07 September 1993 */ proc main () { getindimsg(from, "Please identify starting person.") getindimsg(to, "Please identify ending person.") if (and(from, to)) { print("Computing relationship between:\n ") print(name(from)) print(" and ") print(name(to)) print(".\n\nThis may take awhile -- ") print("each dot is a person.\n") set(fkey, save(key(from))) set(tkey, save(key(to))) call relate(tkey, fkey) } else { print("We're ready when you are.") } } global(links) global(rels) global(klist) proc relate (fkey, tkey) { table(links) /* table of links back one person */ table(rels) /* table of relationships back one person */ list(klist) /* list of persons not linked back to */ insert(links, fkey, fkey) insert(rels, fkey, ".") enqueue(klist, fkey) set(again, 1) while (and(again, not(empty(klist)))) { set(key, dequeue(klist)) set(indi, indi(key)) call include(key, father(indi), ", father of") call include(key, mother(indi), ", mother of") families(indi, fam, spouse, num1) { children(fam, child, num2) { call include(key, child, ", child of") } if (spouse) { call include(key, spouse, ", spouse of") } } if (fam, parents(indi)) { children(fam, child, num2) { call include(key, child, ", sibling of") } } if (key, lookup(links, tkey)) { call foundpath(tkey) set(again, 0) } } if (again) { print("They are not related to one another.") } } proc include (key, indi, tag) { if (and(indi, not(lookup(links, key(indi))))) { print(".") set(new, save(key(indi))) insert(links, new, key) insert(rels, new, tag) enqueue(klist, new) } } proc foundpath (key) { print("\n\nA relationship between them was found:\n\n") set(again, 1) while (again) { print(" ") print(name(indi(key))) print(lookup(rels, key)) print("\n") set(new, lookup(links, key)) if (eq(0, strcmp(key, new))) { set(again, 0) } else { set(key, new) } } } lifelines-3.0.61/reports/related_spouses.ll0000700002540200244210000000430210076661057021200 0ustar prappDomain Users/* * @progname related_spouses.ll * @version 2.0 * @author Eggert * @category * @output Text * @description This program identifies spouses with known common ancestors. For each marriage of related spouses, the spouses' names are printed, along with the first common ancestor in each branch of the ancestry tree, and the number of intervening generations for the husband and wife, respectively. related_spouses - a LifeLines program to identify related spouses by Jim Eggert (eggertj@atc.ll.mit.edu) Version 1, 31 March 1993 (first release) Version 2, 15 March 1995 (use new set functions, generation numbers) */ proc main() { indiset(husb_ancestors) indiset(wife_ancestors) indiset(common_ancestors) forfam(family,fnum) { if (hubby,husband(family)) { if (wifey,wife(family)) { /* find common ancestors */ indiset(oneset) addtoset(oneset,hubby,0) set(husb_ancestors,ancestorset(oneset)) addtoset(husb_ancestors,hubby,0) indiset(oneset) addtoset(oneset,wifey,0) set(wife_ancestors,ancestorset(oneset)) addtoset(wife_ancestors,wifey,0) set(common_ancestors,intersect(husb_ancestors,wife_ancestors)) set(cnum,lengthset(common_ancestors)) /* find lowest common ancestors (common_ancestors - too_common_ancestors) */ if (cnum) { /* Make wife ancestor generation table wcat */ indiset(wca) set(wca,intersect(wife_ancestors,husb_ancestors)) table(wcat) forindiset(wca,person,wgen,wnum) { insert(wcat,key(person),wgen) } indiset(lowest_common_ancestors) set(lowest_common_ancestors, difference(common_ancestors, ancestorset(common_ancestors))) set(lca_length,lengthset(lowest_common_ancestors)) /* print out lowest common ancestors */ key(family) " " key(husband(family)) " " name(husband(family)) " and " key(wife(family)) " " name(wife(family)) "\n have " d(lca_length) " lowest common ancestor" if (gt(lca_length,1)) { "s" } col(60) "hgen" col(70) "wgen\n" forindiset(lowest_common_ancestors,lca,hgen,lnum) { " " key(lca) " " name(lca) col(60) d(hgen) col(70) d(lookup(wcat,key(lca))) "\n" } } } } } } lifelines-3.0.61/reports/relation.ll0000700002540200244210000002055310077647670017630 0ustar prappDomain Users/* * @progname relation.ll * @version 5.0 * @author Eggert * @category * @output Text * @description This program calculates the relationship between individuals in a database. It does so in three modes. Mode 1 just does one pair of individuals and then exits. Mode 2 does any number of pairs with a common "from" person. Mode 3 does all pairs with a common "from" person. In general, mode 1 is fastest for simple relationships, but if you want one complicated relationship, you may as well do them all. relation - a LifeLines relation computing program by Jim Eggert (eggertj@atc.ll.mit.edu) Version 1, 21 November 1992 Version 2, 23 November 1992 (completely revamped) Version 3, (changed format slightly, modified code somewhat) Version 4, 6 July 1993 (added English language) Version 5, 6 September 1993 (generified language) Each computed relation is composed of the minimal combination of parent (fm), sibling (bsS), child (zdC), and spouse (hw) giving the relational path from the "from" person to the "to" person. Each incremental relationship (or hop) is coded as follows, with the capital letters denoting a person of unknown gender: father f mother m parent P (not used) brother b sister s sibling S son z (sorry) daughtr d child C husband h wife w spouse O (sorry again, but usually not possible) The report gives the steps required to go from the first person to the second person. Thus the printout I93 John JONES fmshwz I95 Fred SMITH means that John Jones' father's mother's sister's husband's wife's son is Fred Smith. Notice in this case, the sister's husband's wife is not the same as the sister, and the husband's wife's son is not the same as the husband's son. Thus in more understandable English, John Jones' paternal grandmother's sister's husband's wife's son from another marriage is Fred Smith. The program will do a trivial parsing of the path string. You can change the language_table to have it print in different languages, as long as the word order is unchanged. If there is no relation, the program says so. That at least should be easy to explain. Mode 3 only prints out those individuals who are related to the "from" individual. */ global(plist) global(hlist) global(mark) global(keys) global(found) global(do_names) global(language) global(language_table) global(token) global(untoken) proc include(person,hops,keypath,path,pathend) { if (and(person,eq(found,0))) { set(pkey,key(person)) if (entry,lookup(mark,pkey)) { if (eq(strcmp(entry,"is not related to"),0)) { set(found,1) list(plist) list(hlist) insert(mark,pkey,concat(path,pathend)) insert(keys,pkey,concat(concat(keypath,"@"),pkey)) } } else { enqueue(plist,pkey) enqueue(hlist,hops) insert(mark,pkey,concat(path,pathend)) insert(keys,pkey,concat(concat(keypath,"@"),pkey)) } } } proc get_token(input) { /* Parse a token from the input string. Tokens are separated by one or more "@"s. Set global parameter token to the first token string. Set global parameter untoken to the rest of the string after first token. */ /* strip leading @s */ set(untoken,input) set(first_delim,index(untoken,"@",1)) while (eq(first_delim,1)) { set(untoken,substring(untoken,2,strlen(untoken))) set(first_delim,index(untoken,"@",1)) } /* get token and untoken */ if (not(first_delim)) { set(token,untoken) set(untoken,"") } else { set(token,substring(untoken,1,sub(first_delim,1))) set(untoken, substring(untoken,add(first_delim,1),strlen(untoken))) } } proc parse_relation(relation,keypath) { if (not(language)) { " " relation if (do_names) { set(untoken,keypath) call get_token(untoken) while(strlen(untoken)) { call get_token(untoken) " " token " " name(indi(token)) } } " " } else { set(charcounter,1) set(untoken,keypath) call get_token(untoken) while (le(charcounter,strlen(relation))) { lookup(language_table,substring(relation,charcounter,charcounter)) if (do_names) { call get_token(untoken) " " token " " name(indi(token)) } set(charcounter,add(charcounter,1)) } " is " } } proc main () { table(mark) table(keys) list(plist) list(hlist) table(language_table) insert(language_table,"f","'s father") insert(language_table,"m","'s mother") insert(language_table,"P","'s parent") insert(language_table,"b","'s brother") insert(language_table,"s","'s sister") insert(language_table,"S","'s sibling") insert(language_table,"z","'s son") insert(language_table,"d","'s daughter") insert(language_table,"C","'s child") insert(language_table,"h","'s husband") insert(language_table,"w","'s wife") insert(language_table,"O","'s spouse") getindimsg(from_person, "Enter person to compute relation from:") set(from_key,key(from_person)) set(hopcount,0) set(prev_hopcount,neg(1)) set(found,0) call include(from_person,hopcount,"","","") getintmsg(mode,"Enter 1 for a single relation, 2 for several, 3 for all:") getintmsg(language, "Enter 0 for brief, 1 for English-language relationships:") getintmsg(do_names, "Enter 0 to omit, 1 to output names of all intervening relatives:") if (eq(mode,1)) { getindimsg(to_person, "Enter one person to compute relation to:") set(to_key,key(to_person)) if (strcmp(from_key,to_key)) { insert(mark,to_key,"is not related to") } else { list(plist) list(hlist) } } while (pkey,dequeue(plist)) { set(person,indi(pkey)) set(hopcount,dequeue(hlist)) set(path,lookup(mark,pkey)) set(keypath,lookup(keys,pkey)) if (ne(hopcount,prev_hopcount)) { print(".") set(prev_hopcount,hopcount) } set(hopcount,add(hopcount,1)) call include(father(person),hopcount,keypath,path,"f") call include(mother(person),hopcount,keypath,path,"m") children(parents(person),child,cnum) { if (male(child)) { set(pathend,"b") } elsif (female(child)) { set(pathend,"s") } else { set(pathend,"S") } call include(child,hopcount,keypath,path,pathend) } families(person,fam,spouse,pnum) { if (male(spouse)) { set(pathend,"h") } elsif (female(spouse)) { set(pathend,"w") } else { set(pathend,"O") } call include(spouse,hopcount,keypath,path,pathend) children(fam,child,cnum) { if (male(child)) { set(pathend,"z") } elsif (female(child)) { set(pathend,"d") } else { set(pathend,"C") } call include(child,hopcount,keypath,path,pathend) } } } if (eq(mode,1)) { from_key " " name(indi(from_key)) call parse_relation(lookup(mark,to_key),lookup(keys,to_key)) to_key " " name(indi(to_key)) "\n" } if (eq(mode,2)) { set(want_another,1) while (want_another) { getindimsg(to_person,"Enter person to compute relation to:") set(to_key,key(to_person)) from_key " " name(indi(from_key)) if (path,lookup(mark,to_key)) { call parse_relation(path,lookup(keys,to_key)) } else { " is not related to " } to_key " " name(to_person) "\n" getintmsg(want_another, "Enter 0 if done, 1 if you want another to person:") } } if (eq(mode,3)) { from_key " " name(indi(from_key)) " --->\n" forindi(to_person,num) { set(to_key,key(to_person)) if (path,lookup(mark,to_key)) { call parse_relation(path,lookup(keys,to_key)) to_key " " name(to_person) "\n" } } } } lifelines-3.0.61/reports/relink.ll0000700002540200244210000000517410076661057017273 0ustar prappDomain Users/* * @progname relink.ll * @version 1995-06 * @author J.F. Chandler * @category * @output GEDCOM * @description LifeLines program to reconstruct pointers from persons to families when these pointers are missing, but can be deduced from the corresponding pointers from families to persons. Do this only for persons with no pointers to families at all. Similarly, reconstruct pointers from families to persons where necessary. The output is a GEDCOM file which includes only the individual and family records from the database. Other record types must be recovered separately because there is no iterator in the language for those record types. relink - J.F. Chandler - 1995 Jun */ proc main() { "0 HEAD\n1 SOUR RELINK\n1 DEST ANY\n" forindi(i,n) { traverse(inode(i),node,level) { d(level) " " if(eq(level,0)) { "@" key(i) "@ " } tag(node) if(v,value(node)) { " " v } nl() } if(not(or(nfamilies(i),parents(i)))) { set(indk,save(key(i))) forfam(f,k) { if(or(eq(0,strcmp(indk,key(wife(f)))), eq(0,strcmp(indk,key(husband(f)))))) { "1 FAMS @" key(f) "@\n" } elsif(nchildren(f)) { children(f,child,l) { if(eq(0,strcmp(indk,key(child)))) { "1 FAMC @" key(f) "@\n" break() } } } } } } forfam(f,k) { traverse(fnode(f),node,level) { d(level) " " if(eq(level,0)) { "@" key(f) "@ " } tag(node) if(v,value(node)) { " " v } nl() } if(not(or(husband(f),wife(f),nchildren(f)))) { set(famk,save(key(f))) forindi(i,n) { families(i,fam,spo,l) { if(eq(0,strcmp(famk,key(fam)))) { if(male(i)) {"1 HUSB @" key(i) "@\n"} else {"1 WIFE @" key(i) "@\n"} break() } } if(eq(0,strcmp(famk,key(parents(i))))) { "1 CHIL @" key(i) "@\n" } } } } "0 TRLR\n" } lifelines-3.0.61/reports/rfc.ll0000700002540200244210000006261010076661057016557 0ustar prappDomain Users/* * @progname rfc.ll * @version 1995-09-08 * @author Paul B. McBride (pbm%cybvax0@uunet.uu.net) * @category * @output Text * @description Royalty For Commoners format report Requirements: LifeLines 3.0.2 or later (I hope) sour.li - SOUR processing subroutine library Background: This report program generates a report in a format similar to that used in the book "Royalty for Commoners", Stuart, 1992, which attempts to list all of the "known" ancestors of John of Gaunt. In this book the furtherest back generation has the highest number, and there is an attempt to keep generation numbers relatively consistant in different lines. The format is similar to that used in "Ancestral Roots of Certain American colonists who came to America before 1700", Weis, 1992, except that here the earliest generation in a line is generation number 1. I also use this report program to generate a report for a range of people between an ancestor and a descendant when exchanging info with other people. Prompts: Identify the ancestor (Optional) If you want a complete report of all of the ancestors of a person, or if you don't want a complete report, but the earliest ancestor has the same surname as the descendant, then just press return Identify the descendant If you didn't enter the ancestor, then you must enter the descendant to get a report. All ancestors (1 = yes, 0 = no) If you haven't entered the ancestor, then you will be asked this question. If you answer 0 (no), then the program will use the earliest ancestor in the paternal line. Number of Generations If you haven't entered the descendant, then the program will look for a descendant this many generations below. First Generation Number (default is 1) If you want generations to count upward as in "Anceatral Roots..." then enter 1. If you want generations to count downward as in "Royalty for Commoners", an educated guess is necessary here, or you may end up with negative generation numbers. An ancestorset() will be generated. This will contain minimum generation numbers. The generation number in the ancestor set will be used to adjust the generation number upward if you enter a number which is too small, but this may not be sufficient. For my database, I needed to increase that number by 10. Generations count downward (1) or upward (0) You are only asked this question if the first generation number is greater than 1. Tags processed by the report tag prefix TITL NOTE BIRT b. CHR bp. DEAT d. BUR bur. LIVE lv. RESI r. SOUR record processing Source references are accumulated for each line and the REFN's are reported at the end of the line. At the end of the report all of the REFN's are listed along with the source details. See my SOUR routine library (sour.li) for more info. Future Development: - rather than specifying a single descendant, allow entry of a group of descendants. - allow optional reporting of more SOUR detail associated with tags. - sort aliases - sort reference keys Edit History: 08-sep-95 Paul B. McBride (pbm%cybvax0@uunet.uu.net) */ include("sour.li") global(atable) global(xtable) global(aset) global(xlen) global(nalist) global(nilist) global(aliascnt) global(indicnt) global(allsour_table) global(allsour_list) global(allanc) global(part) global(gnum) global(tset) proc main () { table(allsour_table) list(allsour_list) indiset(iset) indiset(tset) indiset(uset) indiset(aset) table(atable) table(xtable) list(nalist) list(nilist) set(xlen, 0) set(aliascnt, 0) set(indicnt, 0) getindimsg(ancestor, "Identify the ancestor (Optional)") if(ancestor) { getindimsg(descendant,"Identify the descendant (Optional)") } else { getindimsg(descendant,"Identify the descendant (Required)") } set(allanc, 0) if(and(ne(descendant,0),eq(ancestor,0))) { getintmsg(allanc, "All Ancestors? (1 = yes, 0 = no)") set(ancestor, descendant) while(fath, father(ancestor)) { set(ancestor, fath) } } if(and(eq(descendant,0),ne(ancestor,0))) { getintmsg(gcount, "Number of Generations") set(descendant, ancestor) while(gcount, sub(gcount,1)) { set(cindi, 0) set(dindi, 0) families(descendant, fam, sps, fnum) { if(gt(nchildren(fam),0)) { children(fam, child, cnum) { if(eq(cindi, 0)) { set(cindi, child) } families(child, chfam, chsps, chfnum) { if(gt(nchildren(chfam),0)) { set(dindi, child) break() } } if(ne(dindi, 0)) { break() } } } if(ne(dindi, 0)) { break() } } if(dindi) { set(descendant, dindi) } elsif (cindi) { set(descendant, cindi) break() } else { break() } } } if(and(ne(ancestor, 0),ne(descendant,0))) { getintmsg(gnum, "First Generation Number (default is 1)") if(le(gnum,0)) { set(gnum,1) } set(down, 0) if(gt(gnum,1)) { getintmsg(down, "Generations count downward (1) or upward (0)") } set(firstgen, gnum) if(descendant) { /* output a line so that output file prompt will appear before the ancestor set is generated because it can take a long time. */ if(allanc) { print("All Ancestors of ", name(descendant), nl()) "All Ancestors of " name(descendant) nl() } else { print("Descendants of ", name(ancestor), " who are ancestors of ", name(descendant), nl()) "Descendants of " call titledname(ancestor) nl() " who are ancestors of " call titledname(descendant) nl() } /* find all the people of interest */ print("Finding Ancestors... ") addtoset(iset, descendant, 0) set(tset, ancestorset(iset)) deletefromset(iset, descendant, 1) print(d(lengthset(tset)), nl()) if(allanc) { set(uset, tset) } else { print("Finding Descendants... ") addtoset(iset, ancestor, 0) set(uset, descendantset(iset)) deletefromset(iset, ancestor, 1) print(d(lengthset(uset)), nl()) } set(aset, intersect(tset, uset)) addtoset(aset, ancestor, 0) addtoset(aset, descendant, 0) print("Generating Report for ", d(lengthset(aset)), " people") list(ilist) list(alist) list(plist) list(glist) set(part, 0) set(acount, 0) while(1) { if(allanc) { set(maxgen, 0) set(ancestor, 0) forindiset(tset, indi, ival, icnt) { if(or(eq(maxgen, 0),gt(ival,maxgen))) { set(maxgen, ival) set(ancestor, indi) } } if(eq(ancestor, 0)) { break() } if(and(ne(down,0), le(firstgen, maxgen))) { set(firstgen, add(maxgen, 1)) } set(gnum, findgen(ancestor, down, firstgen, eq(acount,0))) print(nl(), name(ancestor), " ", d(add(part,1)),"-",d(gnum),". ", d(lengthset(tset)), " remaining") } enqueue(alist, ancestor) enqueue(plist, 0) enqueue(glist, gnum) set(acount, add(acount, 1)) while(aindi, dequeue(alist)) { print(".") nl() call sour_init() set(pnum, dequeue(plist)) set(part, add(part, 1)) set(gnum, dequeue(glist)) "Line " d(part) if(pnum) { " from Line " d(pnum) " above." } /* if we are doing all of the ancestors, then start each line as far back as possible.. */ if(allanc) { set(changed, 0) while(1) { if(fath, father(aindi)) { if(lookup(atable, key(fath))) { break() } if(moth, mother(aindi)) { if(eq(lookup(atable, key(moth)),0)) { if(and(eq(father(fath),0),eq(mother(fath),0))) { if(or(ne(father(moth),0),ne(mother(moth),0))) { set(fath, moth) } } } } set(tindi, aindi) set(aindi, fath) } elsif(moth, mother(aindi)) { if(lookup(atable, key(moth))) { break() } set(tindi, aindi) set(aindi, moth) } else { break() } print("+") if(eq(changed, 0)) { set(changed, 1) " [" name(tindi) " " d(pnum) "-" d(gnum) "]" } if(down) { set(gnum, add(gnum,1)) } else { set(gnum, sub(gnum,1)) } } } nl() nl() enqueue(ilist, aindi) while(indi, dequeue(ilist)) { /* upper(roman(gnum)) */ call addtoindex(indi, part, gnum) if(allanc) { deletefromset(tset, indi, 1) } d(gnum) ". " call titledname(indi) nl() set(tnum, lookup(atable, key(indi))) if(ne(tnum,0)) { " [See Line " d(div(tnum,1000)) " Generation " d(mod(tnum,1000)) " above]" nl() continue() } insert(atable, save(key(indi)), add(mul(part,1000), gnum)) call sour_addind(indi) call allnotes(indi, 8) call allplaces(indi, 5) /* set(bdate, "") * set(ddate, "") * if (eb, birth(indi)) { set(bdate,save(long(eb))) } * if (ed, death(indi)) { set(ddate,save(long(ed))) } * set(prefix, " ") * if (strlen(bdate)) { prefix "b. " bdate nl() } * if (strlen(ddate)) { prefix "d. " ddate nl() } */ set(desc, 0) set(nfam, nfamilies(indi)) families(indi, fam, sps, fnum) { if(sps) { call sour_addind(sps) call addtoindex(sps, part, gnum) if(allanc) { deletefromset(tset, sps, 1) } if(eq(nfam,1)) { " m. " } else { " m(" d(fnum) ") " } call titledname(sps) if (e, marriage(fam)) { " " long(e) } nl() set(bdate, "") set(ddate, "") if (eb, birth(sps)) { set(bdate,save(long(eb))) } if (ed, death(sps)) { set(ddate,save(long(ed))) } set(prefix, " ") if (strlen(bdate)) { prefix "b. " bdate nl() } if (strlen(ddate)) { prefix "d. " ddate nl() } set(findi, father(sps)) set(mindi, mother(sps)) if(or(findi, mindi)) { " " if(male(sps)) { "son of " } else { "daughter of " } if(findi) { call addtoindex(findi, part, gnum) if(allanc) { deletefromset(tset, findi, 1) } call titledname(findi) call simplefam(findi, ne(mindi,0)) if(mindi) { " and " } } if(mindi) { call addtoindex(mindi, part, gnum) if(allanc) { deletefromset(tset, mindi, 1) } call titledname(mindi) call simplefam(mindi, 0) } nl() } } if(gt(nchildren(fam),0)) { if(eq(nfam,1)) { " ch: " } else { " ch(" d(fnum) ") " } set(needindent, 0) children(fam, child, cnum) { set(altdesc,0) set(mcnum,mod(sub(cnum,1),4)) if(gt(cnum,1)) { if(eq(mcnum,0)) { set(needindent,1) } } if(needindent) { "," nl() " " set(needindent,0) } else { if(gt(mcnum,0)) { ", "} } /* mark each child which is an ancestor with a "*", but only use the first at the next generation. */ set(seeabove, 0) if(eq(child,descendant)) { "*" set(seeabove, lookup(atable, key(child))) if(eq(seeabove, 0)) { if(eq(desc,0)) { enqueue(ilist, child) set(desc,1) } } } else { addtoset(iset, child, 0) set(jset, intersect(aset, iset)) if(ne(lengthset(jset),0)) { "*" set(seeabove, lookup(atable, key(child))) if(eq(seeabove,0)) { if(eq(desc,0)) { enqueue(ilist, child) set(desc,1) } else { set(altdesc,1) } } deletefromset(jset, child, 1) } deletefromset(iset, child, 1) /* forindiset(aset, ancestor, junkval, junknum) { if(eq(child, ancestor)) { "*" if(eq(desc,0)) { enqueue(ilist, child) set(desc,1) } else { set(altdesc,1) } break() } } */ } if(ne(strcmp(surname(child), surname(father(child))),0)) { name(child) } else { givens(child) } if(seeabove) { call addtoindex(child, part, gnum) " [See Line " d(div(seeabove,1000)) " Generation " d(mod(seeabove,1000)) " above]" set(needindent, 1) } if(eq(altdesc,1)) { if(down) { set(tnum, sub(gnum, 1)) } else { set(tnum, add(gnum, 1)) } enqueue(alist, child) enqueue(plist, part) enqueue(glist, tnum) set(acount, add(acount,1)) " [See Line " d(acount) " Generation " d(tnum) " below]" set(needindent, 1) } } nl() } } if(down) { set(gnum, sub(gnum, 1)) } else { set(gnum, add(gnum, 1)) } } if(sour_exists()) { nl() "References: " call sour_see(",", 70, 13) call sour_save(allsour_table, allsour_list) nl() } } if(eq(allanc,0)) { break() } } } /* list all references */ call sour_restore(allsour_table, allsour_list) if(sour_exists()) { nl() "Key to References:" nl() nl() call sour_ref(10) } /* generate an index */ call reportindex() call reportalias() } } /* report the index */ proc reportindex() { print(nl(), "Index: ", d(lengthset(aset)), " people, ") print(d(xlen), " entries...") nl() "Index" nl() nl() namesort(aset) forindiset(aset, indi, ival, inum) { if(xref, lookup(xtable, key(indi))) { surname(indi) ", " givens(indi) col(30) key(indi) col(40) xref nl() } } } /* add to the index */ proc addtoindex(indi, part, gnum) { if(xref, lookup(xtable, key(indi))) { set(xref, save(concat(xref, ",", save(d(part)), "-", save(d(gnum))))) } else { set(xref, save(d(part))) set(xref, save(concat(xref, "-", save(d(gnum))))) set(xlen, add(xlen, 1)) } insert(xtable, save(key(indi)), xref) } /* report all of a person's titles */ proc titles(i) { fornodes (inode(i), n) { if (eqstr(tag(n), "TITL")) { value(n) " " } } } proc titledname(i) { fornodes (inode(i), n) { if (eqstr(tag(n), "TITL")) { if(or(eqstr(value(n), "Sir"), eqstr(value(n),"Rev."))) { value(n) " " } } } name(i) fornodes (inode(i), n) { if (eqstr(tag(n), "TITL")) { if(not(or(eqstr(value(n), "Sir"), eqstr(value(n),"Rev.")))) { " " value(n) } } } } /* report all places */ proc allplaces(person, colnum) { traverse(inode(person), node, lev) { set(prefix, "") if (eqstr(tag(node),"RESI")) { set(prefix, "r. ") } elsif (eqstr(tag(node),"LIVE")) { set(prefix, "lv. ") } elsif (eqstr(tag(node),"BIRT")) { set(prefix, "b. ") } elsif (eqstr(tag(node),"CHR")) { set(prefix, "bp. ") } elsif (eqstr(tag(node),"DEAT")) { set(prefix, "d. ") } elsif (eqstr(tag(node),"BURI")) { set(prefix, "bur. ") } if(gt(strlen(prefix), 0)) { set(edate,save(long(node))) if (strlen(edate)) { if(gt(colnum, 0)) { col(colnum) } prefix edate nl() } } } } /* report all notes */ proc allnotes(person, colnum) { fornodes(inode(person), node) { if (eq(0,strcmp("NOTE", tag(node)))) { if(gt(colnum, 0)) { col(colnum) } value(node) nl() fornodes(node, subnode) { if (eq(0,strcmp("CONT", tag(subnode)))) { if(gt(colnum, 0)) { col(colnum) } value(subnode) nl() } } } } } /* report aliases */ proc reportalias() { print(nl(), "Aliases...") nl() "Alias" col(30) "Key" col(40) "Name" nl() nl() /* assume that the set is already sorted. see reportindex() */ forindiset(aset, indi, ival, inum) { set(count, 0) fornodes(inode(indi), subnode){ if(eqstr(tag(subnode), "NAME")){ incr(count) if(ge(count, 2)){ list(np) extractnames(subnode, np, nc, sc) /* process the surname first */ if(sc) { set(sn, getel(np, sc)) if(eq(strlen(sn), 0)) { "____," } else { sn "," } } else { "____," } /* process the rest of the name */ forlist(np, v, i) { if(ne(i, sc)) { " " v } } col(30) key(indi) col(40) surname(indi) ", " givens(indi) nl() } } } } } /* output the parents of a person if it is a simple family where the father and mother have only one family and this is their only child, and their parents are not known. */ proc simplefam(indi, indent) { set(findi, father(indi)) set(mindi, mother(indi)) set(simple, or(ne(findi,0), ne(mindi,0))) if(simple) { if(findi) { if(or(father(findi), mother(findi))) { set(simple,0) } elsif(ne(nfamilies(findi),1)) { set(simple,0) } else { families(findi, fam, sps, fnum) { if(ne(nchildren(fam),1)) { set(simple, 0) } } } } } if(simple) { if(mindi) { if(or(father(mindi), mother(mindi))) { set(simple,0) } elsif(ne(nfamilies(mindi),1)) { set(simple,0) } else { families(mindi, fam, sps, fnum) { if(ne(nchildren(fam),1)) { set(simple, 0) } } } } } if(simple) { nl() " [" if(male(indi)) { "son of " } else { "daughter of " } if(findi) { call addtoindex(findi, part, gnum) if(allanc) { deletefromset(tset, findi, 1) } call titledname(findi) if(mindi) { nl() " and " } } if(mindi) { call addtoindex(mindi, part, gnum) if(allanc) { deletefromset(tset, mindi, 1) } call titledname(mindi) } "]" if(indent) { nl() " " } } } /* find the generation number for an individual */ func findgen(aindi, down, maxgen, first) { list(tilist) indiset(tiset) indiset(tjset) enqueue(tilist, aindi) set(gnum, 0) set(tnum, 0) if(eq(first,0)) { while(indi, dequeue(tilist)) { set(tnum, lookup(atable, key(indi))) if(ne(tnum,0)) { call dumpindi("person", indi, tnum, gnum) set(tnum, mod(tnum,1000)) break() } set(desc, 0) families(indi, fam, sps, fnum) { if(sps) { set(tnum, lookup(atable, key(sps))) if(ne(tnum,0)) { call dumpindi("spouse", sps, tnum, gnum) set(tnum, mod(tnum,1000)) break() } } if(gt(nchildren(fam),0)) { children(fam, child, cnum) { set(tnum, lookup(atable, key(child))) if(ne(tnum,0)) { set(gnum, add(gnum, 1)) call dumpindi("child", child, tnum, gnum) set(tnum, mod(tnum,1000)) break() } if(eq(desc,0)) { addtoset(tiset, child, 0) set(tjset, intersect(aset, tiset)) deletefromset(tiset, child, 1) if(ne(lengthset(tjset),0)) { deletefromset(tjset, child, 1) set(desc, 1) enqueue(tilist, child) } } } } if(tnum) { break() } } if (tnum) { break() } set(gnum, add(gnum, 1)) } } set(ngen, 0) if(tnum) { if(down) { set(ngen, add(tnum, gnum)) } else { set(ngen, sub(tnum, gnum)) } } if(down) { set(ogen, maxgen) } else { set(ogen, 1) } if(eq(ngen, 0)) { set(ngen, ogen) } return(ngen) } /* dump a previously referenced individual to show basis of generation number of new line */ proc dumpindi(type, indi, tnum, gnum) { nl() "...The generation numbers of the next line are based on " type nl() " " name(indi) " " d(div(tnum,1000)) "-" d(mod(tnum,1000)) " " d(gnum) " generations below" nl() } lifelines-3.0.61/reports/rllgen.ll0000700002540200244210000001506210076661057017267 0ustar prappDomain Users/* * @progname rllgen.ll * @version 1.0 * @author Eggert * @category * @output RLL format * @description A LifeLines report program to aid in the generation of Roots Location List (RLL) submissions. Given a person, this generates a RLL-like submission for that person and his/her ancestors. The output will likely need considerable hand editing, but that is how it is. If you need to know what the RLL is, I have enclosed a description at the end of this file. Version 1, 18 November 1994, by Jim Eggert, eggertj@ll.mit.edu Requires LifeLines 3.0.1 or higher This program will work better if you follow strict placename conventions. You should probably run the places report program first to see if your placenames are in good shape. Here's what you will need to do by hand (you can consider this a list of desired features for future versions of this report program): BEFORE YOU RUN THE PROGRAM: Change the routine write_rll_header() to use your submitter tag, name, and address. You may also want to change the personset calculation in the beginning of the main routine. AFTER YOU RUN THE PROGRAM: Sort the location portion of the output file. Eliminate empty or useless location lines. Use RLL-standard abbreviations for placenames. - get FAMILY ABBREV as per instructions at end of this file. Combine duplicate location lines where appropriate. Check check check. Send the final product to the RLL maintainer. - see the end of this file. */ global(placefirst) global(placelast) global(placelist) global(submitter_tag) /* write_rll_header sets the submitter tag and writes a little header for the RLL list maintainer */ proc write_rll_header() { set(submitter_tag,"jqpublic") "Roots Location List (RLL) submission of " date(gettoday()) " by John Q. Public\n\n" submitter_tag col(12) "John Q. Public, jqpublic@my.node.address\n" col(12) "1234 North Maple, Homesville, OX 12345-6789, USA\n\n" } proc addplace(node) { set(placename,save(value(node))) set(pyear,atoi(year(parent(node)))) if (not(pyear)) { set(pyear,neg(1)) } set(firstyear,lookup(placefirst,placename)) if (and(gt(firstyear,0),gt(pyear,0))) { set(lastyear,lookup(placelast,placename)) if (lt(pyear,firstyear)) { insert(placefirst,placename,pyear) } elsif (gt(pyear,lastyear)) { insert(placelast,placename,pyear) } } if (and(lt(firstyear,0),gt(pyear,0))) { insert(placefirst,placename,pyear) insert(placelast,placename,pyear) } if (eq(firstyear,0)) { insert(placefirst,placename,pyear) insert(placelast,placename,pyear) enqueue(placelist,placename) } } /* write_rll_entry writes one line in the rll submission */ proc write_rll_entry(placename) { list(tokenlist) set(firstyear,lookup(placefirst,placename)) set(lastyear,lookup(placelast,placename)) extracttokens(placename,tokenlist,ntokens,",") set(comma,0) while(token,pop(tokenlist)) { if(comma) { "," } token set(comma,1) } " " if (gt(firstyear,0)) { d(firstyear) if (gt(lastyear,firstyear)) { "-" d(lastyear) } " " } submitter_tag "\n" } proc main() { table(placefirst) table(placelast) indiset(personset) list(placelist) getindi(person) print("Forming set...") addtoset(personset,person,0) set(personset,ancestorset(personset)) addtoset(personset,person,0) print("done\nComputing places...") set(nextpnum,0) forindiset (personset, person, pval, pnum) { if (ge(pnum,nextpnum)) { print(" ",d(pnum)) set(nextpnum,add(nextpnum,100)) } traverse (inode(person), node, level) { if (eq(strcmp(tag(node), "PLAC"), 0)) { call addplace(node) } } families (person, fam, sp, fnum) { if (or(not(husband(fam)), eq(person, husband(fam)))) { traverse (fnode(fam), node, level) { if (eq(strcmp(tag(node), "PLAC"), 0)) { call addplace(node) } } } } } print(" done\nWriting places...") call write_rll_header() set(nextpnum,0) forlist(placelist,placename,pnum) { if (ge(pnum,nextpnum)) { print(" ",d(pnum)) set(nextpnum,add(nextpnum,100)) } call write_rll_entry(placename) } } /* To: ROOTS-L Genealogy List Subject: ROOTS LOCATION LIST, September, 1994 Next location list on 3rd Sunday in November. (Deadlines for submissions are generally the preceding Friday.) ## WHAT IS THE ROOTS LOCATION LIST?## - The Roots Location List is compiled from locations e-mailed to me by network people doing genealogical research in a particular location and who are willing to exchange information. The idea is that, if you had ancestors living in the same place in the same period, it might be beneficial to compare notes -- maybe you and the submitter are kinfolk or maybe you can help each other track down unique sources dealing with the area. -This list should not be confused with the ROOTS SURNAME LIST that is maintained by Karen Isaacson in other files. If you are confused, send a message to: listserv@vm1.nodak.edu In the body of your message put: GET FAMILY INDEX. This will show you all of the files in this part of the genealogy files. ## HOW CAN I PARTICIPATE IN THE ROOTS LOCATION LIST? ## - Send additions or corrections to me at AHCSBB@ukcc.uky.edu. Write to me if you have general questions about the list. I will acknowledge (or attempt to acknowledge) all submissions. Entries are formatted as follows: Location/Date1-Date2/nametag Date1 is the earliest date for which the submitter has information. Date2 is the most recent date. ## HOW DO I CONTACT SOMEONE ON THE LIST? ## - Write directly to the submitter if you would like to exchange information. -To contact the submitter of the information, use the nametag to find the address of the submitter in the address list - FAMILY LOCADDR. The addresses of the submitters are in a separate file on the listserver. To obtain them, send a one line message: GET FAMILY LOCADDR A list of the abbreviations used is available directly from the listserver: send e-mail to LISTSERV@vm1.nodak.edu or LISTSERV@NDSUVM1, with a one-line message that states: GET FAMILY ABBREV Include no other text, and leave the subject line blank. The listserver will return by e-mail the list of abbreviations. Or you can use anonymous FTP to vm1.nodak.edu */ lifelines-3.0.61/reports/rootset.ll0000700002540200244210000000200610076661057017475 0ustar prappDomain Users/* * @progname rootset.ll * @version 0.5 * @author Robert Simms * @category * @output Text * @description Given a list of surnames, finds the set of all people with those surnames, then reports on the heads of each line within that set. */ proc main() { indiset(rootset) indiset(tempset) getstr(surname, "Specify a surname") while(nestr(surname, "")) { genindiset(concat("*/", surname), tempset) set(rootset, tempset) getstr(surname, "Specify another surname [return if done]") } set( tempset, childset(rootset)) set( rootset, difference(rootset, tempset)) call lprintset(rootset) call printset(rootset) } proc printset(x) { forindiset(x, x_ind, y, x_n) { key(x_ind) " - " name(x_ind) nl() } } proc lprintset(x) { forindiset(x, x_ind, y, x_n) { print(key(x_ind), " - ", name(x_ind), nl()) } } lifelines-3.0.61/reports/rslgen.ll0000700002540200244210000003306310076661057017277 0ustar prappDomain Users/* * @progname rslgen.ll * @version 1.1 * @author Eggert * @category * @output RSL format * @description Generate a Roots Surname List (RSL) submission rslgen - a LifeLines report program to aid in the generation of Roots Surname List (RSL) submissions. Given a person, this generates a RSL-like submission for that person and his/her ancestors. The output will likely need considerable hand editing, but that is how it is. If you need to know what the RSL is, I have enclosed a description at the end of this file. Here's what you will need to do by hand (you can consider this a list of desired features for future versions of this report program): BEFORE YOU RUN THE PROGRAM: Change the routine write_rsl_header() to use your submitter tag, name, and address. AFTER YOU RUN THE PROGRAM: Sort the surname portion of the output file. Eliminate empty or useless surname lines. Use RSL-standard abbreviations for placenames. - get FAMILY ABBREV as per instructions at end of this file. Combine duplicate surname lines where appropriate. Check check check. Send the final product to the RSL maintainer. - see the end of this file. Version 1, 14 July 1994, by Jim Eggert, eggertj@ll.mit.edu */ global(year_min) global(year_max) global(submitter_tag) global(location) global(last_location) global(location_list) global(location_table) global(see_surname_table) global(rsl_entry_count) /* write_rsl_header sets the submitter tag and writes a little header for the RSL list maintainer */ proc write_rsl_header(person) { set(submitter_tag,"dummy_tag") "Roots Surname List (RSL) submission of " date(gettoday()) " submitted by John Q. Public\n\n" submitter_tag col(12) "John Q. Public noname@nowhere.nohow\n" col(12) "1234 56th Street, Anytown AM 54321\n\n" } proc main() { list(ilist) table(see_surname_table) getindi(person) call write_rsl_header(person) set(rsl_entry_count,0) enqueue(ilist,person) while (person,dequeue(ilist)) { table(location_table) list(location_list) set(year_min,9999) set(year_max,0) call locations_and_years(person) set(final_key,save(key(person))) set(final_surname,save(surname(person))) if (m,mother(person)) { enqueue(ilist,m) } while (person,father(person)) { if (m,mother(person)) { enqueue(ilist,m) } call locations_and_years(person) set(this_surname,surname(person)) if (strcmp(this_surname,final_surname)) { set(see_name,0) if (other_surname,lookup(see_surname_table,this_surname)) { if (strcmp(final_surname,other_surname)) { set(see_name,1) } } else { set(see_name,1) set(other_surname,final_surname) } if (see_name) { this_surname " - see " final_surname " (" submitter_tag ")\n" insert(see_surname_table, save(this_surname),save(other_surname)) } } } call write_rsl_entry(final_key) } if (gt(rsl_entry_count,100)) { print("Warning: Number of lines produced (") print(d(rsl_entry_count)) print(")\nexceeds recommended submission limit (100)\n") } } /* write_rsl_entry writes one line in the rsl submission */ proc write_rsl_entry(key_entry) { if (key_entry) { set(surname_entry,save(surname(indi(key_entry)))) if (strlen(surname_entry)) { if (strcmp(trim(surname_entry,1),"_")) { set(rsl_entry_count,add(rsl_entry_count,1)) set(not_first,0) surname_entry col(14) d(year_min) col(20) d(year_max) " " while (loc,dequeue(location_list)) { if (not_first) { ">" } else { set(not_first,1) } loc } " " submitter_tag " " key_entry "\n" } } } } /* locations_and_years figures out unique locations and min/max years for a person with respect to other persons already figured. Note that the events are processed in reverse chronological order, because the ancestry is traced bottom up. Oh well... */ proc locations_and_years(person) { list(marriage_list) call one_location_and_year(burial(person)) call one_location_and_year(death(person)) families(person,family,spouse,fnum) { push(marriage_list,marriage(family)) } while (event,pop(marriage_list)) { call one_location_and_year(event) } call one_location_and_year(baptism(person)) call one_location_and_year(birth(person)) } /* one_location_and_year appends the event location to the global location list if it is new, and figures the event year into the global min and max values. */ proc one_location_and_year(event) { if (event) { set(loc,place(event)) if (strlen(loc)) { if (not(lookup(location_table,loc))) { requeue(location_list,save(loc)) insert(location_table,save(loc),1) } } if (yr,atoi(year(event))) { if (lt(yr,year_min)) { set(year_min,yr) } if (gt(yr,year_max)) { set(year_max,yr) } } } } /* ### WHAT IS IT? ### The Roots Surname List (RSL) helps genealogical researchers share and compare data. Genealogists with Internet access are welcome to submit surnames that they are researching for inclusion in the Roots Surname List if they are willing to share their data with others who may be doing parallel research. Enough information should be provided so that others can decide whether a link with their own lines is possible or probable. The assumption is that you have SOME data to share. You needn't be on the verge of writing the definitive genealogy for the family in question. If you see a surname listed that interests you, contact the person who submitted the surname. To do that, just look up their nametag (listed at the end of each surname entry) in the list of submitters. The FAMILY INDEX, described below, has instructions on how to obtain the list of submitters. Unless the submitter happened to be me, I won't be of much help. The =update= to the RSL is posted to ROOTS-L (the Internet genealogy mailing list) and to soc.roots (the USENET genealogy newsgroup) on the first Sunday of the month. At the same time, the entire new RSL is stored on the listserver. See below for instructions on obtaining a copy from the listserver or via mail if you don't have access to the listserver. The update and sometimes the full RSL also propagates after that to the genealogy libraries on CompuServe, GEnie, and Delphi. Included in the posted update is contact information for the submitters of the new and updated info. ### OBTAINING THE ENTIRE LIST ### To obtain a copy of the full Roots Surname List (RSL) from the listserver, the first step is to send e-mail to LISTSERV@vm1.nodak.edu or LISTSERV@NDSUVM1, with the one-line message (not in the subject line): GET FAMILY INDEX You will receive by e-mail a list of the names of the various files comprising the current RSL. The files named in FAMILY INDEX may change each month, so be sure to use a current one! The files listed there may be obtained in the same manner as you obtained FAMILY INDEX. (That is, by sending e-mail to the LISTSERV address with the GET message.) If you have access to FTP, you can instead use anonymous FTP to vm1.nodak.edu (134.129.111.1) and do "cd ROOTS-L" then "get FAMILY.INDEX" to retrieve the file. Don't FTP it in binary mode, but instead in text mode. If you are unable to retrieve the RSL via e-mail or via FTP, you can receive a copy by sending $5 to: Brian Leverich 27991 Caraway Lane Saugus, CA 91350 Requests MUST include a description of the computer you use (DOS or Mac) and the highest capacity diskette you can read (360kb, 720kb, 1.2mb, 1.44mb, etc.). If you need something other than DOS or Mac, inquire first: if Brian can't handle your particular format, maybe someone else here can. ### SUBMITTING NEW ENTRIES ### Please READ THIS SECTION ***CAREFULLY*** BEFORE SUBMITTING. I receive submissions and handle correspondence about the RSL over long distance telephone lines, and I cannot afford the time and money wasted by improperly formatted or otherwise inappropriate submissions. ** BASIC GUIDELINES ** Send new entries to me at one of the addresses listed at the end of this note. Entries received will be included in the next list. See below for format information. PLEASE follow these guidelines: o Send ordinary text files. Please do not compress, zip, uuencode, or MIME encode your file. o Be sure to submit "how to reach you" information as well as surnames. o Do not submit more than 100 surnames. o Do =not= put your surnames in CAPS. o Follow the formatting rules below with religious fervor. o AND NO TINY TAFELS. They don't conform to the RSL format, and they don't contain the sort of information needed for the RSL. If you have a Tiny Tafel and want to put it to good use, I believe Brian Mavrogeorge, will enter it in the Fidonet TMS (Tafel Matching System) database if you post it to soc.roots or Roots-L. (If you don't know what a Tiny Tafel is, you're probably in no danger of sending me one accidentally.) ** FORMATTING YOUR "HOW TO REACH YOU" INFORMATION ** For each submitter, I must receive one or two lines of address information which tell readers how they can reach the person who submitted the entry. The format is fairly flexible, but must include a short nametag (less than eight characters, all lower case) and should typically include all your e-mail and postal addresses. (If you're nervous about broadcasting your postal address to the universe, though, feel free to leave it off.) If the nametag you select has already been taken, I'll conjure up a new one for you. Or feel free to suggest alternates at the time of your submission. The lines for karen (me) are: karen Karen Isaacson, karen@rand.org, Prodigy: XRBV26B, GEnie: KRENA 27991 Caraway Lane, Saugus, CA 91350 Delphi: KRENA ** FORMATTING YOUR SURNAME INFORMATION ** What should the surname entries look like? Don't worry too much about format -- I end up reformatting them anyhow for my sort routine. But please do conform to the general guidelines below. Also, despite all genealogical advice to the contrary, DO NOT put the surnames all in capital letters. The RSL does not use surnames in all CAPs. (Don't put them all in lower case, either, though, just do them like in the example below.) Each entry should be on one line, and consists of five parts: 1. The name of the family. 2. The earliest date for which you have information about the family. (For instance, the birthdate of the founder of the family, or the year he or she first showed up in the records.) 3. The latest date for which you have information about the family. (When the last person with that surname died or skipped town, for instance. Or "now" if you know people of this surname that are still around -- yourself, for example. It's up to you whether a woman is considered under her maiden surname, married surname, or both.) 4. The migration of the family. For instance, if my ancestors started out in Virginia, moved to Kentucky, then on to Missouri, this would be VA>KY>MO,USA. If the surname was common, and I still had room (remember, all four fields should fit on one line), then I might add some county information to further distinguish them: OrangeCo,VA>KY>GentryCo,MO,USA. There is a list of most of the abbreviations that are in use. It is in a file called FAMILY ABBREV, and can be obtained in the same manner as FAMILY INDEX, discussed above. Or just spell out the location, and I'll put in the proper abbreviation, if any. 5. The nametag of the submitter. This is so you can be found in the address list. See discussion above for how to select one. The Roots Surname Index is rather oddly computerized. There aren't any firm restrictions on the presentation of the data, but do try to use something like the format suggested above and illustrated below. Here are a few (genuine!) sample entries (my own, funny thing): Bell 1780 1940 OrangeCo,VA>KY>GentryCo,MO,USA karen Carr - see Kerr (karen) Keithley c1750 1923 DEU>PA?>RowanCo,NC>BathCo,KY>FloydCo,IN,USA karen Keithley c1750 1923 DEU>PA?>RowanCo,NC>KY>StCharlesCo,MO,USA karen Kerr 1760 now HuntingdonCo,PA>VenangoCo,PA>IA,USA karen Kicheli - see Keithley (karen) ** WHEN TO SUBMIT ** Try to get your additions or modifications in to me by the Thursday before the first Sunday of each month, when the monthly update is published. If you miss a deadline, not to worry: your surnames will have arrived in time for the next deadline and will be included in the next month's list. ** WHERE TO SUBMIT ** How can I be reached? At one of the following addresses: Internet: karen@rand.org <- preferred krena@genie.geis.com xrbv26b@prodigy.com bi254@cleveland.freenet.edu kisaacson@mcimail.com GEnie or Delphi: KRENA Prodigy: XRBV26B Postal: Karen Isaacson 27991 Caraway Lane Saugus, CA 91350 */ lifelines-3.0.61/reports/rtflib.li0000700002540200244210000003575710076661057017300 0ustar prappDomain Users/* * @progname rtflib.li * @version 1.1 * @author Doug McCallum * @category * @output RTF * @description * * RTF functions for implementing RTF output * this allows generating Word or other * documents directly. * */ global(rtf_termstring) global(rtf_tcols) global(rtf_row_width) global(rtf_row_left) global(rtf_set_cols) global(rtf_col_sizes) global(rtf_pointsize) global(rtf_pstate) global(rtf_curr_indent) global(rtf_tstate) global(rtf_cstate) global(rtf_ccol) global(twips) /* 20 points per inch */ global(rtf_bspace) global(rtf_aspace) global(rtf_ftn_last_tag) /* last footnote tag */ global(rtf_ftn_state) /* * Initialize the RTF state machine and variables */ /* * rtf_init(font) * initialize the RTF state. * set font as the default font to use (not working yet) */ proc rtf_init(font) { set(twips, 1440) list(rtf_pointsize) setel(rtf_pointsize, 1, 24) /* style 1 at 12pt */ setel(rtf_pointsize, 2, 18) /* style 2 at 9pt */ setel(rtf_pointsize, 3, 20) /* style 3 at 10pt */ set(rtf_curr_indent, 0) /* no paragraph indent */ /* some table state */ set(rtf_ccol, 0) set(rtf_pstate, 0) set(rtf_cstate, 0) list(rtf_col_sizes) set(rtf_set_cols, 0) /* all RTF files need this */ "{\\rtf1\\ansi\\deff2{\\fonttbl{\\f10\\fnil " font ";}}\n" "{\\stylesheet{\\fs20\\basedon222\\snext0\\f10 Normal;}\n" "{\\s1\\fs24\\basedon0\\snext3\\f10\\b\\sb240\\sa60 Heading;}\n" "{\\s2\\basedon1\\fs20\\f10\\up Footnote;}\n" "{\\s3\\basedon222\\snext3\\f10\\fs20\\sb120\\sa10 Text;}\n" /* you can add new styles here */ "}\n" set(rtf_termstring, "\n\\par}\n") monthformat(4) dayformat(0) dateformat(5) /* nn-MON-yyyy */ } /* * rtf_open(file) * just do some setup. If "file" defined, open it. */ proc rtf_open(file) { if (file) { newfile(file, 0) } call rtf_init("Palatino") } /* * rtf_close() * closes open tables and paragraphs then * adds the closing bracket for the document */ proc rtf_close() { call rtf_tend() call rtf_pend() rtf_termstring } /* * rtf_set_page_size(height, width, left, right, top, bot) * set the page size if non-standard size is desired. * height and width are paper size * left, right, top and bot are the margin sizes * sizes in twips (20pts/inch :: 1440 == 1inch) */ proc rtf_set_page_size(height, width, left, right, top, bot) { "\\paperw" d(width) "\\paperh" d(height) "\\margl" d(left) "\\margr" d(right) "\\margt" d(top) "\\margb" d(bottom) nl() } /* * rtf_newpage() * insert a forced pagebreak at this point */ proc rtf_newpage() { "\\page " } /* * paragraph functions * there are a number of options here */ /* * rtf_pstart(type) * start a new paragraph with the style selected */ proc rtf_pstart(type) { /* if in a paragraph, end it */ if (eq(rtf_pstate, 1)) { call rtf_pend() } set(rtf_pstate, 1) "\\pard {\\s" d(type) if (ps, getel(rtf_pointsize, type)) { "\\fs" d(ps) " " } call rtf_para_space(rtf_bspace, rtf_aspace) if (gt(rtf_curr_indent, 0)) { /* "next" paragraph */ call rtf_para_indent(0, rtf_curr_indent) } } /* * rtf_pend() * end the current paragraph * this is for completeness but a new pstart will do it * so it is optional */ proc rtf_pend() { if (eq(1, rtf_pstate)) { "\\par}\n" set(rtf_pstate, 0) } } /* * rtf_para_indent(first, all) * tagged/indented paragraphs * should be called right after a rtf_pstart() * to select the indent of the first and remaining lines * Note that the first line is also indented the same as * all but can have more or less indent applied * typical is to have first be the neg of the all * a tab will make a hanging indent in that case */ proc rtf_para_indent(first, all) { if (or(gt(first, 0), gt(all, 0))) { "\\li" d(all) "\\fi" d(first) "\\tx" d(all) " " } set(rtf_curr_indent, all) } /* * rtf_para_space(before, after) * amount of white space before and after a paragraph */ proc rtf_para_space(before, after) { if (rtf_pstate) { if (ne(before, 0)) { "\\sb" d(before) } else { "\\sb" d(mul(getel(rtf_pointsize, 3), 5)) } if (ne(after, 0)) { "\\sa" d(after) } } set(rtf_bspace, before) set(rtf_aspace, after) } /* * rtf_para_keepnext() * causes current paragraph to be kept on same page as * the next paragraph */ proc rtf_para_keepnext() { "\\keepn " } /* * rtf_para_centered() * make the current paragraph text be centered */ proc rtf_para_centered() { "\\qc " } /* * rtf_para_leftjust() * make the current paragraph text left justified */ proc rtf_para_leftjust() { "\\ql " } /* * rtf_para_rightjust() * make the current paragraph text right justified */ proc rtf_para_rightjust() { "\\qr " } /* * rtf_para_keepintact() * don't try to break this paragraph across pages */ proc rtf_para_keepintact() { "\\keep " } /* * rtf_set_info(title, subject, author, operator, created) * set the file's info section to have the values specified */ proc rtf_set_info(title, subject, author, operator, created) { "{\\info\n" if (title) { "{\\title " title "}\n" } if (subject) { "{\\subject " subject " }\n" } if (author) { "{\\author " author "}\n" } if (operator) { "{\\operator " operator "}\n" } if (created) { set(yr, save(substring(created, 1, 4))) set(mo, save(substring(created, 6, 7))) set(dy, save(substring(created, 9, 10))) "{\\creatim\\yr" yr "\\mo" mo "\\dy" dy "}\n" } "{\\doccomm Document generated from LifeLines " version() " database " database() "by register-rtf 1.1.}\n" "}\n" } /* * table functions * there are a number related to rows and cells */ /* * rtf_set_row_width(cols, wid) * set the table row width and number of columns to expect */ proc rtf_set_row_width(cols, wid) { set(rtf_tcols, cols) set(rtf_row_width, sub(wid, mul(sub(rtf_tcols, 1), 108))) set(rtf_row_left, rtf_row_width) } /* * rtf_set_col_width(wid) * set the current column width * called once for each column defined */ proc rtf_set_col_width(wid) { if (lt(rtf_set_cols, rtf_tcols)) { setel(rtf_col_sizes, one(rtf_set_cols), wid) incr(rtf_set_cols) set(rtf_row_left, sub(rtf_row_left, wid)) set(i, rtf_set_cols) while (lt(i, rtf_tcols)) { setel(rtf_col_sizes, one(i), div(rtf_row_left, sub(rtf_tcols, rtf_set_cols))) incr(i) } } } /* * rtf_tstart(cells) * start table with cells per row */ proc rtf_tstart(cells) { if (eq(rtf_tstate, 1)) { call rtf_tend() } call rtf_pend() "\\trowd " set(rtf_tstate, 1) "\\trgaph" d(108) "\\trleft" d(neg(108)) set(i, 0) set(cumwid, 0) while (lt(i, cells)) { if (gt(i, 0)) { set(gap, 108) } else { set(gap, 0) } set(gap, add(gap, getel(rtf_col_sizes, one(i)))) set(cumwid, add(cumwid, gap)) "\\cellx" d(cumwid) "\n" set(i, add(i, 1)) } set(rtf_tcols, cells) "\\pard\\plain\\s3\\intbl " } /* * rtf_tend() * end table */ proc rtf_tend() { if (rtf_tstate) { while (lt(rtf_ccol, rtf_tcols)) { rtf_cend() } "\\intbl\\row\\pard\\s3 " set(rtf_tstate, 0) } } /* * rtf_cstart() * start a cell in a table */ proc rtf_cstart() { if (rtf_cstate) { call rtf_cend() } call rtf_pend() "\\fs" d(getel(rtf_pointsize, 3)) set(rtf_cstate, 1) } /* * rtf_cend() * end a cell */ proc rtf_cend() { if (or(rtf_cstate, rtf_tstate)) { set(rtf_cstate, 0) "\n\\cell " set(rtf_ccol, add(rtf_ccol, 1)) } } /* * rtf_cpar() * insert a paragraph break inside a cell */ proc rtf_cpar() { "\\par " } /* * rtf_endrow() * end a table row and get ready for next one */ proc rtf_endrow() { if (rtf_tstate) { while (lt(rtf_ccol, rtf_tcols)) { call rtf_cend() } "\\pard\\s3\\inttbl\\row " set(rtf_tstate, 0) call rtf_tstart(rtf_tcols) set(rtf_ccol, 0) } } /* heading handling */ /* * rtf_hstart() * start a heading */ proc rtf_hstart() { "\\sb" d(mul(getel(rtf_pointsize, 1), 12)) "\\sa" d(mul(getel(rtf_pointsize, 1), 6)) " " "{\\tc\\s1\\b " } /* * rtf_hend() * end a heading */ proc rtf_hend() { "\\b0}\n" } /* * rtf_index(key, subkey, type) * create an index entry * if subkey is defined, a two level index is * created. e.g. * McCallum * Charles 1 * the type is plain = 0, bold = 1 and italic = 2 */ func rtf_index(key, subkey, type) { if (eq(type, 0)) { set(var, "}}\n") } elsif (eq(type, 1)) { set(var, "\\bxe}}\n") } elsif (eq(type, 2)) { set(var, "\\ixe}}\n") } set(ind, concat("{\\xe{\\v ", key)) if (subkey) { set(inds, concat("\\:", subkey)) } else { set(inds, "") } set(indy, concat(ind, inds, var)) return (indy) } /* * rtf_header(type, page) * create a header entry (as in header/footer) * type is all pages = 0, left = 1 and right = 2 * page is where to place the page number * no page number = 0, left side = 1, center = 2 and right = 3 */ proc rtf_header(type, page) { if (eq(page, 0)) { set(pstr, "") set(pastr, "") } elsif (eq(page, 1)) { set(pastr, "\\ql") set(pstr, "\\chpgn") } elsif (eq(page, 2)) { set(pastr, "\\qc") set(pstr, "\\chpgn") } elsif (eq(page, 3)) { set(pastr, "\\qr") set(pstr, "\\chpgn") } if (eq(type, 0)) { set(hstr, "\\header") } elsif (eq(type, 1)) { set(hstr, "\\headerl") } elsif (eq(type, 2)) { set(hstr, "\\headerr") } "{" hstr "\\pard\\plain\\s3" pastr "{\\plain " pstr "}\\par}\n" } /* * rtf_footer(type, page) * creates a footer. * see rtf_header for details */ proc rtf_footer(type, page) { if (eq(page, 0)) { set(pstr, "") set(pastr, "") } elsif (eq(page, 1)) { set(pastr, "\\ql") set(pstr, "\\chpgn") } elsif (eq(page, 2)) { set(pastr, "\\qc") set(pstr, "\\chpgn") } elsif (eq(page, 3)) { set(pastr, "\\qr") set(pstr, "\\chpgn") } if (eq(type, 0)) { set(hstr, "\\footer") } elsif (eq(type, 1)) { set(hstr, "\\footerl") } elsif (eq(type, 2)) { set(hstr, "\\footerr") } "{" hstr "\\pard\\plain\\s3" pastr "{\\plain " pstr "}\\par}\n" } /* * rtf_ftn_type(type, postype) * define the type(s) of footnotes/endnotes to use */ proc rtf_ftn_type(type, postype) { "\\fet" d(type) if (eq(type, 1)) { if (eq(postype, 0)) { "\\enddoc\\aenddoc" } elsif (eq(postype, 1)) { "\\endnotes\\aendnotes" } } elsif (eq(type, 2)) { if (eq(postype, 0)) { "\\aenddoc" } elsif (eq(postype, 1)) { "\\aendnotes" } } "\n" } /* * rtf_ftn_tag(tag) * if tag is not null, it is a user defined tag * if null, do an automatic generation of the tag * In all cases, output it superscripted */ proc rtf_ftn_tag(tag) { if (tag) { set(rtf_ftn_last_tag, tag) } else { set(rtf_ftn_last_tag, "\\chftn") } "{\\up6 " rtf_ftn_last_tag "}" } /* * rtf_ftn_start(tag) * start a possibly tagged footnote * must be closed with rtf_ftn_end() */ proc rtf_ftn_start(tag) { if (rtf_ftn_state) { call rtf_ftn_end() } call rtf_ftn_tag(tag) "{\*\footnote\\pard\\plain\\s3\\fs" d(getel(rtf_pointsize, 3)) "\\li-540\\fi540\\tx540 " rtf_ftn_last_tag "\tab " set(rtf_ftn_state, 1) } /* * rtf_ftn_end() * close an open footnote. */ proc rtf_ftn_end() { if (rtf_ftn_state) { "}\n" set(rtf_ftn_state, 0) } } /* * rtf_tab(type) * issue a tab of appropriate type */ proc rtf_tab(type) { if (eq(type, 0)) { "\\tab " } elsif (eq(type, 1)) { "\\tqr " } elsif (eq(type, 2)) { "\\tqc " } } /* * rtf_bold(on) * turn bold on/off */ proc rtf_bold(on) { if (on) { "\\b " } else { "\\b0 " } } /* * rtf_italic(on) * turn italic on/off */ proc rtf_italic(on) { if (on) { "\\i " } else { "\\i0 " } } /* * rtf_underline(type) * turn underline on/off * if type == 0 off * 1 == continuous, 2 == double, 3 == word, 4 == dotted */ proc rtf_underline(type) { if (type) { if (eq(type, 1)) { "\\ul " } elsif (eq(type, 2)) { "\\uldb " } elsif (eq(type, 3)) { "\\ulw " } elsif (eq(type, 4)) { "\\uld " } } else { "\\ul0 " } } /* * rtf_super(on) * turn superscript on/off */ proc rtf_super(on) { if (on) { "{\\up6" if (ps, getel(rtf_pointsize, 3)) { set(ps, sub(ps, 3)) "\\fs" d(ps) } " " } else { "}" } } /* * rtf_toc_entry(level, text) * enter text as a Table of Contents entry at level */ proc rtf_toc_entry(level, text) { "{\\tc\\tcl" d(level) "{\\v " text "}}" } /* * one(val) * similar to incr() but returns the new value */ func one(val) { return (add(val, 1)) } lifelines-3.0.61/reports/sealing_line.ll0000700002540200244210000000244010076661057020431 0ustar prappDomain Users/* * @progname sealing_line.ll * @version none * @author Tom Wetmore * @category * @output function, and driver writing Text * @description function sealing_line(). You pass it a person, and it returns the person's sealing line (if there is one) or nothing (if there isn't). The main program is only used here to test it. You would call "sealing_line" in the place you need it in your own program. Yes, it is a little complicated, but that's why we have modules. Write it, stick it in some library somewhere, and just call it when you need the info. Tom Wetmore */ proc main () { getindi(i) if (not(i)) { return() } if (l, sealing_line(i)) { print("yes\n") print(tag(l), " ", value(l), "\n") } else { print("no") } } func sealing_line (i) { set(f, parents(i)) if (not(f)) { return(0) } set(ir, inode(i)) set(fr, fnode(f)) fornodes(fr, s) { if(and(eqstr("CHIL", tag(s)), eqstr(xref(ir), value(s)))) { fornodes(s, ss) { if(eqstr("SLGC", tag(ss))) { return(ss) } } return(0) } } return (0) } lifelines-3.0.61/reports/search_source.ll0000700002540200244210000000273510454225114020622 0ustar prappDomain Users/* * @progname search_source.ll * @version 1.0 * @author Stephen Dum * @category * @output text * @description Search source records for a particular string. Program prompts for the type of sub record to search and then for string to search for. If no sub record type is entered, all records are searched. Case is ignored in searches. by Stephen Dum (stephen.dum@verizon.net) Version 1 July 2006 */ option("explicitvars") proc main() { getstr(search,"Enter type of SOUR sub records searched(e.g. TITL, AUTH) for all") set(search,upper(search)) getstr(match,"Enter string to search for") set(match,lower(match)) forsour(n,i){ if (strlen(search)) { /* only search children of this source where tag is search */ fornodes(n,ch) { if (eqstr(tag(ch),search)) { set(v,value(ch)) if (i,index(lower(v),match,1)) { /* print ("Found in ",xref(n)," ",v,"\n") */ print ("Found in ",xref(n),": ") print (d(level(ch))," ") if (strlen(xref(ch))) { print (xref(ch)," ") } print(tag(ch)," ",lower(v),"\n") } } } } else { traverse(n,ch,i) { set(v,value(ch)) if (i,index(lower(v),match,1)) { /* print ("Found in ",xref(n)," ",v,"\n") */ print ("Found in ",xref(n),": ") print (d(level(ch))," ") if (strlen(xref(ch))) { print (xref(ch)," ") } print(tag(ch)," ",lower(v),"\n") } } } } } lifelines-3.0.61/reports/select.ll0000700002540200244210000000357210076620114017253 0ustar prappDomain Users/* * @progname select.ll * @version 3 * @author Wetmore, Groleau, McGee * @category * @output Custom * @description Customizable report stub to do the following: o Select a person with all ancestors and all descendents. o Add to selection all other persons within a user-specified number of links from any person in the first selection. o Turn the selected set of persons into a list o Call a report subprogram to process the list. WRITTEN BY TOM WETMORE, 21 Jul 1995 minor mods by Wes Groleau, 25 Aug 1995 Scott McGee fixed Wes's bug, 26 Aug 1995 :-) */ list(o) /* output list */ /* have user provide start person and link distance */ getindi(i, "Please identify start person.") if (not(i)) { return() } getint(n, "Please enter link distance.") /* create set with all ancestors and descendents */ indiset(s) addtoset(s, i, 1) indiset(a) set(a, ancestorset(s)) /* could be made optional */ indiset(d) set(d, descendentset(s)) /* could be made optional */ set(s, union(s, union(a, d))) /* create set of additional, linked-to persons */ indiset(t) set(t, spouseset(s)) set(n, sub(n, 1)) while (gt(n, 0)) { set(a, parentset(t)) set(d, childset(t)) set(b, siblingset(t)) set(c, spouseset(t)) set(t, union(t, union(a, union(d, union(b, c))))) set(n, sub(n, 1)) } /* create final set of all selected persons and generate the report */ set(s, union(s, t)) if(s){ forindiset(s, j, n, m) { enqueue(o, j) } } call do_list(o) /* your routine here */ } proc do_list (o) { /* your routine here */ } lifelines-3.0.61/reports/sgsgen.ll0000700002540200244210000003113710076661057017273 0ustar prappDomain Users/* * @progname sgsgen.ll * @version 1 * @author Jim Eggert (eggertj@ll.mit.edu) * @category * @output Text * @description A LifeLines report program to aid in the generation of soc.genealogy.surnames (sgs) submissions. Given a person, this generates a sgs-like submission for that person and his/her ancestors. The output will likely need considerable hand editing, but that is how it is. If you need to know what sgs is, I have enclosed a description at the end of this file. Here's what you will need to do by hand (you can consider this a list of desired features for future versions of this report program): BEFORE YOU RUN THE PROGRAM: Change the routines write_sgs_entry() and write_sgs_body() to customize your address and standard message. AFTER YOU RUN THE PROGRAM: Eliminate or fix empty or useless surname lines. Use sgs-standard abbreviations for placenames. Get FAMILY ABBREV as per instructions at end of this file. Combine duplicate surname lines where appropriate. Check check check. Note I've put a checklist at the head of the report. Until you edit the report by hand, it cannot be used for autosubmission via the telnet command as below. Send the final product to the sgs maintainer. To autosubmit, telnet your.news.host 119 < checked.sgs.report Version 1, 13 January 1997, by Jim Eggert, eggertj@ll.mit.edu */ global(year_min) global(year_max) global(submitter_tag) global(location) global(last_location) global(location_list) global(location_table) global(see_surname_table) global(sgs_entry_count) proc main() { list(ilist) table(see_surname_table) getindi(person) set(sgs_entry_count,0) enqueue(ilist,person) dayformat(1) monthformat(4) dateformat(5) "QUIT\n" "------------ edit checklist\n" "change placenames to rsl-type places in the subject lines\n" "ensure countries exist in migration components in the subject lines\n" "eliminate / in places in the subject lines\n" "fix special characters as needed\n" "look for repeated submissions\n" "delete sensitive info if desired\n" "delete this checklist, including the top QUIT command\n" "------------ end of edit checklist\n" while (person,dequeue(ilist)) { table(location_table) list(location_list) set(year_min,9999) set(year_max,0) call locations_and_years(person) set(final_key,save(key(person))) set(final_surname,save(surname(person))) if (m,mother(person)) { enqueue(ilist,m) } while (person,father(person)) { if (m,mother(person)) { enqueue(ilist,m) } call locations_and_years(person) set(this_surname,surname(person)) if (strcmp(this_surname,final_surname)) { set(see_name,0) if (other_surname,lookup(see_surname_table,this_surname)) { if (strcmp(final_surname,other_surname)) { set(see_name,1) } } else { set(see_name,1) set(other_surname,final_surname) } if (see_name) { insert(see_surname_table, save(this_surname),save(other_surname)) } } } call write_sgs_entry(final_key) } if (gt(sgs_entry_count,100)) { print("Warning: Number of lines produced (") print(d(sgs_entry_count)) print(")\nexceeds recommended submission limit (100)\n") } "QUIT\n" } /* write_sgs_entry writes one submission to soc.genealogy.surnames*/ proc write_sgs_entry(key_entry) { if (key_entry) { set(surname_entry,save(surname(indi(key_entry)))) if (strlen(surname_entry)) { if (strcmp(trim(surname_entry,1),"_")) { if (father(indi(key_entry))) { incr(sgs_entry_count) set(not_first,0) "POST\n" /*---*/ "From: your@email.address\n" "Newsgroups: soc.genealogy.surnames\n" "Subject: " upper(surname_entry) "; " while (loc,dequeue(location_list)) { if (not_first) { ">" } else { set(not_first,1) } loc } "; " d(year_min) "-" d(year_max) "\n" "Message-ID: \n" "\n" "Organization: none\n" call write_sgs_body(key_entry) ".\n" } } } } } /* write_sgs_body writes the body of a message */ proc write_sgs_body(key_entry) { /*---*/ "I am offering information on the following paternal ancestral line,\n" "and am soliciting the sharing of genealogical data with any interested\n" "party. The numbers preceeding the person's name are the generation\n" "number, counting from the most recent person. Further information\n" "can be found in my web pages at\n" " \n" "Please direct any communications to your@email.address\n" /*---*/ set(person, indi(key_entry)) set(number,1) while (person) { call ahnenreport(person,number) incr(number) set(person,father(person)) } } proc ahnenreport(person,number) { "\n" d(number) ". " fullname(person,0,1,80) "\n" if (e, birth(person)) { " born: " long(e) "\n" } if (e, baptism(person)) { "baptized: " long(e) "\n" } set(nfam,nfamilies(person)) families(person, fam, spouse, fnum) { set(e, marriage(fam)) if (or(e,spouse)) { if (gt(nfam,1)) { "married" d(fnum) ": " } else { " married: " } } if (e) { long(e) "\n" } if (spouse) { " to " fullname(spouse,0,1,80) "\n" } } if (e, death(person)) { " died: " long(e) "\n" } if (e, burial(person)) { " buried: " long(e) "\n" } /* fornotes(inode(person), note) { note "\n" } fornodes(inode(person),node) { if (not(strcmp(tag(node),"REFN"))) { "SOURCE: " value(node) "\n" } } */ } /* locations_and_years figures out unique locations and min/max years for a person with respect to other persons already figured. Note that the events are processed in reverse chronological order, because the ancestry is traced bottom up. Oh well... */ proc locations_and_years(person) { list(marriage_list) call one_location_and_year(burial(person)) call one_location_and_year(death(person)) families(person,family,spouse,fnum) { push(marriage_list,marriage(family)) } while (event,pop(marriage_list)) { call one_location_and_year(event) } call one_location_and_year(baptism(person)) call one_location_and_year(birth(person)) } /* one_location_and_year appends the event location to the global location list if it is new, and figures the event year into the global min and max values. */ proc one_location_and_year(event) { if (event) { set(loc,place(event)) if (strlen(loc)) { if (not(lookup(location_table,loc))) { requeue(location_list,save(loc)) insert(location_table,save(loc),1) } } if (yr,atoi(year(event))) { if (lt(yr,year_min)) { set(year_min,yr) } if (gt(yr,year_max)) { set(year_max,yr) } } } } /* soc.genealogy.surnames This FAQ is presently in draft form. It may change without notice. Last modification: 25 Aug 1995. Other surname-related FAQs available here: Commonly Used Abbreviations Commonly Used German Abbreviations Examples of Queries: Good and Bad WWW Surname Archive Welcome to soc.genealogy.surnames. The intent of this newsgroup is to help genealogists researching related families to contact each other. All surname queries are welcome here. A surname query is in many ways like a classified ad in a newspaper. You want to attract people who might be interested in sharing information about your family to read and respond to your post. To help readers in finding articles of interest, writers are requested to follow some simple guidelines in the subject lines of their articles. Articles in soc.genealogy.surnames fall into a few basic categories: 1.general surname queries 2.tiny tafels 3.address changes 4.follow-up articles 5.Roots Surname List (RSL) articles 6.moderators' announcements 1. General surname queries (Style suggestions can be found in a companion FAQ, Surname Queries: Good and Bad. This document discusses only what is absolutely necessary for a post to soc.genealogy.surnames.) General surname queries can be written in plain language, freely formatted. The body of the article can include any information about a family that you wish. We recommend including given names, spouses, children, birth, death, and marriage dates and places, if you know them. This will make your article more useful to people who might want to contact you, as well as making it valuable to people who may find your article in searching the surname archives later. Indicating what additional information you are seeking is a good idea. Also include how to contact you: e-mail address, snail-mail address, and phone number, if you like. Each surname query should have a subject line that gives one or more surnames (in all capital letters), at least one place (using an abbreviation from the RSL list of abbreviations), and an indication of the time frame of interest. Examples: Subject: MILLS; NY,USA; 1800-1915 Subject: MILLS Samuel D.; Williamsburg,Kings Co,NY,USA; 1796-1863 Subject: ZAHM/PICARD/STEIS; LOT,FRA; 1680-1840 Subject: ZAHM / PICARD / STEIS; LOT,FRA; 1680-1840 Subject: ZAHM; LOT,FRA>IN,USA>IL,USA>KS,USA; 1650- Subject: ZAHM; LOT,FRA > IN,USA > KS,USA; 1650- Subject: CLOVER John; Lincoln,LIN,ENG>IL,USA; -1860 Subject: LEGGETT; anywhere; anytime The "anywhere anytime" indication should only be used by genealogists who are making a comprehensive one-name study of everyone in the world who bore that name in all of recorded history. If you are just starting out in researching your family, do not use this form; please read the first paragraph of this section on surname queries again, and use one of the other examples. If you are making a comprehensive world-wide collection, please tell us about the extent of your database as a way to encourage people to share their research with you. If you find you want to include queries about more names than will fit in the subject line, you may wish to post several queries. Some of the abbreviations may seem unfamiliar at first. The advantage of using standard abbreviations for place names is that it makes searching the surname archives easier and more reliable. As an example, consider searching the archives for Coles families in New York. With standard abbreviations, you can look for subjects that contain both "COLES" and "NY,USA" and be sure that you are finding all the relevant archived queries. Without standardization, you'd have to search for "NY" and "New York", and might miss articles that said "Albany" or "Buffalo" but left out the state. Abbreviations also make subject lines shorter, for writers whose software limits subject length. The place abbreviations are the same as used for the Roots Surname List (RSL). They include United States and Canadian two-letter postal codes, Chapman codes, three-letter ISO codes for nations, some other standard codes, and a few codes invented for the RSL. The list was compiled by Karen Isaacson with help from Christian Carey. You may find more information on abbreviations that may be used in soc.genealogy.surnames in the Commonly Used Abbreviations FAQ for soc.genealogy.surnames. The complete list of codes is archived on mail.eworld.com. To retrieve the file, send e-mail to listserv@mail.eworld.com containing only the line: GET FAMILY ABBREV The computer will then e-mail you the list of abbreviations (unless you are using a system that blocks e-mail to and from listservs). You can also retrieve the file by anonymous ftp to vm1.nodak.edu, in the ROOTS-L directory; the file is named family.abbrev. The dates should indicate when you are interested in the family in the area listed in the subject line. The dates could be the earliest birth and latest death dates for known ancestors, or periods for which you have information, or the time for which you want more information. The date range is approximate; no need to add "circa" or "?" if you are not sure of dates. */ lifelines-3.0.61/reports/shorten.li0000700002540200244210000005562210076661057017471 0ustar prappDomain Users/* * @progname shorten.li * @version 2001-05-25 * @author Paul Buckley * @category * @output string function values and table updates * @description * * This is a library file which allows ps-anc to * accommodate my habit of using long place names * (such as "Ridgewood, Bergen, New Jersey, United States"). * To use this code add include("shorten.li") to the defines, * put the following 2 lines in main() * table(abbvtab) * call setupabbvtab() * and call the function with a string using * STRING shorten(STRING) * * Paul Buckley, May 25, 2001 * */ global (abbvtab) /*hold a table of abbreviations defined in proc setupabbvtab*/ func shorten (string) { set(input,string) set(output,"") set(success,lookup(abbvtab,input)) if(success) { set(output,success) } else { set(output,input) } return(output) } proc setupabbvtab () { /* USA State Codes */ /* See http://helpdesk.rootsweb.com/codes/ for other county codes */ insert(abbvtab, "Alabama", "AL") insert(abbvtab, "Alaska", "AK") insert(abbvtab, "American Samoa", "AS") insert(abbvtab, "Arizona", "AZ") insert(abbvtab, "Arkansas", "AR") insert(abbvtab, "California", "CA") insert(abbvtab, "Colorado", "CO") insert(abbvtab, "Connecticut", "CT") insert(abbvtab, "Delaware", "DE") insert(abbvtab, "District of Columbia", "DC") insert(abbvtab, "Federated States of Micronesia", "FM") insert(abbvtab, "Florida", "FL") insert(abbvtab, "Georgia", "GA") insert(abbvtab, "Guam", "GU") insert(abbvtab, "Hawaii", "HI") insert(abbvtab, "Idaho", "ID") insert(abbvtab, "Illinois", "IL") insert(abbvtab, "Indiana", "IN") insert(abbvtab, "Iowa", "IA") insert(abbvtab, "Kansas", "KS") insert(abbvtab, "Kentucky", "KY") insert(abbvtab, "Louisiana", "LA") insert(abbvtab, "Maine", "ME") insert(abbvtab, "Marshall Islands", "MH") insert(abbvtab, "Maryland", "MD") insert(abbvtab, "Massachusetts", "MA") insert(abbvtab, "Michigan", "MI") insert(abbvtab, "Minnesota", "MN") insert(abbvtab, "Mississippi", "MS") insert(abbvtab, "Missouri", "MO") insert(abbvtab, "Montana", "MT") insert(abbvtab, "Nebraska", "NE") insert(abbvtab, "Nevada", "NV") insert(abbvtab, "New Hampshire", "NH") insert(abbvtab, "New Jersey", "NJ") insert(abbvtab, "New Mexico", "NM") insert(abbvtab, "New York", "NY") insert(abbvtab, "North Carolina", "NC") insert(abbvtab, "North Dakota", "ND") insert(abbvtab, "Northern Mariana Islands", "MP") insert(abbvtab, "Ohio", "OH") insert(abbvtab, "Oklahoma", "OK") insert(abbvtab, "Oregon", "OR") insert(abbvtab, "Palau", "PW") insert(abbvtab, "Pennsylvania", "PA") insert(abbvtab, "Puerto Rico", "PR") insert(abbvtab, "Rhode Island", "RI") insert(abbvtab, "South Carolina", "SC") insert(abbvtab, "South Dakota", "SD") insert(abbvtab, "Tennessee", "TN") insert(abbvtab, "Texas", "TX") insert(abbvtab, "Utah", "UT") insert(abbvtab, "Vermont", "VT") insert(abbvtab, "Virgin Islands", "VI") insert(abbvtab, "Virginia", "VA") insert(abbvtab, "Washington", "WA") insert(abbvtab, "West Virginia", "WV") insert(abbvtab, "Wisconsin", "WI") insert(abbvtab, "Wyoming", "WY") /* Nation codes from http://userpage.chemie.fu-berlin.de/diverse/doc/ISO_3166.html */ /* Three letter Country Codes (see below for two letter codes) */ insert(abbvtab, "Afghanistan", "AFG") insert(abbvtab, "Albania", "ALB") insert(abbvtab, "Algeria", "DZA") insert(abbvtab, "American Samoa", "ASM") insert(abbvtab, "Andorra", "AND") insert(abbvtab, "Angola", "AGO") insert(abbvtab, "Anguilla", "AIA") insert(abbvtab, "Antarctica", "ATA") insert(abbvtab, "Antigua And Barbuda", "ATG") insert(abbvtab, "Argentina", "ARG") insert(abbvtab, "Armenia", "ARM") insert(abbvtab, "Aruba", "ABW") insert(abbvtab, "Australia", "AUS") insert(abbvtab, "Austria", "AUT") insert(abbvtab, "Azerbaijan", "AZE") insert(abbvtab, "Bahamas", "BHS") insert(abbvtab, "Bahrain", "BHR") insert(abbvtab, "Bangladesh", "BGD") insert(abbvtab, "Barbados", "BRB") insert(abbvtab, "Belarus", "BLR") insert(abbvtab, "Belgium", "BEL") insert(abbvtab, "Belize", "BLZ") insert(abbvtab, "Benin", "BEN") insert(abbvtab, "Bermuda", "BMU") insert(abbvtab, "Bhutan", "BTN") insert(abbvtab, "Bolivia", "BOL") insert(abbvtab, "Bosnia And Herzegowina", "BIH") insert(abbvtab, "Botswana", "BWA") insert(abbvtab, "Bouvet Island", "BVT") insert(abbvtab, "Brazil", "BRA") insert(abbvtab, "British Indian Ocean Territory", "IOT") insert(abbvtab, "Brunei Darussalam", "BRN") insert(abbvtab, "Bulgaria", "BGR") insert(abbvtab, "Burkina Faso", "BFA") insert(abbvtab, "Burundi", "BDI") insert(abbvtab, "Cambodia", "KHM") insert(abbvtab, "Cameroon", "CMR") insert(abbvtab, "Canada", "CAN") insert(abbvtab, "Cape Verde", "CPV") insert(abbvtab, "Cayman Islands", "CYM") insert(abbvtab, "Central African Republic", "CAF") insert(abbvtab, "Chad", "TCD") insert(abbvtab, "Chile", "CHL") insert(abbvtab, "China", "CHN") insert(abbvtab, "Christmas Island", "CXR") insert(abbvtab, "Cocos (Keeling) Islands", "CCK") insert(abbvtab, "Colombia", "COL") insert(abbvtab, "Comoros", "COM") insert(abbvtab, "Congo", "COG") insert(abbvtab, "Cook Islands", "COK") insert(abbvtab, "Costa Rica", "CRI") insert(abbvtab, "Cote D'ivoire", "CIV") insert(abbvtab, "Croatia (Local Name: Hrvatska)", "HRV") insert(abbvtab, "Cuba", "CUB") insert(abbvtab, "Cyprus", "CYP") insert(abbvtab, "Czech Republic", "CZE") insert(abbvtab, "Denmark", "DNK") insert(abbvtab, "Djibouti", "DJI") insert(abbvtab, "Dominica", "DMA") insert(abbvtab, "Dominican Republic", "DOM") insert(abbvtab, "East Timor", "TMP") insert(abbvtab, "Ecuador", "ECU") insert(abbvtab, "Egypt", "EGY") insert(abbvtab, "El Salvador", "SLV") insert(abbvtab, "Equatorial Guinea", "GNQ") insert(abbvtab, "Eritrea", "ERI") insert(abbvtab, "Estonia", "EST") insert(abbvtab, "Ethiopia", "ETH") insert(abbvtab, "Falkland Islands (Malvinas)", "FLK") insert(abbvtab, "Faroe Islands", "FRO") insert(abbvtab, "Fiji", "FJI") insert(abbvtab, "Finland", "FIN") insert(abbvtab, "France", "FRA") insert(abbvtab, "France, Metropolitan", "FXX") insert(abbvtab, "French Guiana", "GUF") insert(abbvtab, "French Polynesia", "PYF") insert(abbvtab, "French Southern Territories", "ATF") insert(abbvtab, "Gabon", "GAB") insert(abbvtab, "Gambia", "GMB") insert(abbvtab, "Georgia", "GEO") insert(abbvtab, "Germany", "DEU") insert(abbvtab, "Ghana", "GHA") insert(abbvtab, "Gibraltar", "GIB") insert(abbvtab, "Greece", "GRC") insert(abbvtab, "Greenland", "GRL") insert(abbvtab, "Grenada", "GRD") insert(abbvtab, "Guadeloupe", "GLP") insert(abbvtab, "Guam", "GUM") insert(abbvtab, "Guatemala", "GTM") insert(abbvtab, "Guinea", "GIN") insert(abbvtab, "Guinea-Bissau", "GNB") insert(abbvtab, "Guyana", "GUY") insert(abbvtab, "Haiti", "HTI") insert(abbvtab, "Heard And Mc Donald Islands", "HMD") insert(abbvtab, "Honduras", "HND") insert(abbvtab, "Hong Kong", "HKG") insert(abbvtab, "Hungary", "HUN") insert(abbvtab, "Iceland", "ISL") insert(abbvtab, "India", "IND") insert(abbvtab, "Indonesia", "IDN") insert(abbvtab, "Iran (Islamic Republic Of)", "IRN") insert(abbvtab, "Iraq", "IRQ") insert(abbvtab, "Ireland", "IRL") insert(abbvtab, "Israel", "ISR") insert(abbvtab, "Italy", "ITA") insert(abbvtab, "Jamaica", "JAM") insert(abbvtab, "Japan", "JPN") insert(abbvtab, "Jordan", "JOR") insert(abbvtab, "Kazakhstan", "KAZ") insert(abbvtab, "Kenya", "KEN") insert(abbvtab, "Kiribati", "KIR") insert(abbvtab, "Korea, Democratic People's Republic Of", "PRK") insert(abbvtab, "Korea, Republic Of", "KOR") insert(abbvtab, "Kuwait", "KWT") insert(abbvtab, "Kyrgyzstan", "KGZ") insert(abbvtab, "Lao People's Democratic Republic", "LAO") insert(abbvtab, "Latvia", "LVA") insert(abbvtab, "Lebanon", "LBN") insert(abbvtab, "Lesotho", "LSO") insert(abbvtab, "Liberia", "LBR") insert(abbvtab, "Libyan Arab Jamahiriya", "LBY") insert(abbvtab, "Liechtenstein", "LIE") insert(abbvtab, "Lithuania", "LTU") insert(abbvtab, "Luxembourg", "LUX") insert(abbvtab, "Macau", "MAC") insert(abbvtab, "Macedonia, The Former Yugoslav Republic Of", "MKD") insert(abbvtab, "Madagascar", "MDG") insert(abbvtab, "Malawi", "MWI") insert(abbvtab, "Malaysia", "MYS") insert(abbvtab, "Maldives", "MDV") insert(abbvtab, "Mali", "MLI") insert(abbvtab, "Malta", "MLT") insert(abbvtab, "Marshall Islands", "MHL") insert(abbvtab, "Martinique", "MTQ") insert(abbvtab, "Mauritania", "MRT") insert(abbvtab, "Mauritius", "MUS") insert(abbvtab, "Mayotte", "MYT") insert(abbvtab, "Mexico", "MEX") insert(abbvtab, "Micronesia, Federated States Of", "FSM") insert(abbvtab, "Moldova, Republic Of", "MDA") insert(abbvtab, "Monaco", "MCO") insert(abbvtab, "Mongolia", "MNG") insert(abbvtab, "Montserrat", "MSR") insert(abbvtab, "Morocco", "MAR") insert(abbvtab, "Mozambique", "MOZ") insert(abbvtab, "Myanmar", "MMR") insert(abbvtab, "Namibia", "NAM") insert(abbvtab, "Nauru", "NRU") insert(abbvtab, "Nepal", "NPL") insert(abbvtab, "Netherlands", "NLD") insert(abbvtab, "Netherlands Antilles", "ANT") insert(abbvtab, "New Caledonia", "NCL") insert(abbvtab, "New Zealand", "NZL") insert(abbvtab, "Nicaragua", "NIC") insert(abbvtab, "Niger", "NER") insert(abbvtab, "Nigeria", "NGA") insert(abbvtab, "Niue", "NIU") insert(abbvtab, "Norfolk Island", "NFK") insert(abbvtab, "Northern Mariana Islands", "MNP") insert(abbvtab, "Norway", "NOR") insert(abbvtab, "Oman", "OMN") insert(abbvtab, "Pakistan", "PAK") insert(abbvtab, "Palau", "PLW") insert(abbvtab, "Panama", "PAN") insert(abbvtab, "Papua New Guinea", "PNG") insert(abbvtab, "Paraguay", "PRY") insert(abbvtab, "Peru", "PER") insert(abbvtab, "Philippines", "PHL") insert(abbvtab, "Pitcairn", "PCN") insert(abbvtab, "Poland", "POL") insert(abbvtab, "Portugal", "PRT") insert(abbvtab, "Puerto Rico", "PRI") insert(abbvtab, "Qatar", "QAT") insert(abbvtab, "Reunion", "REU") insert(abbvtab, "Romania", "ROM") insert(abbvtab, "Russian Federation", "RUS") insert(abbvtab, "Rwanda", "RWA") insert(abbvtab, "Saint Kitts And Nevis", "KNA") insert(abbvtab, "Saint Lucia", "LCA") insert(abbvtab, "Saint Vincent And The Grenadines", "VCT") insert(abbvtab, "Samoa", "WSM") insert(abbvtab, "San Marino", "SMR") insert(abbvtab, "Sao Tome And Principe", "STP") insert(abbvtab, "Saudi Arabia", "SAU") insert(abbvtab, "Senegal", "SEN") insert(abbvtab, "Seychelles", "SYC") insert(abbvtab, "Sierra Leone", "SLE") insert(abbvtab, "Singapore", "SGP") insert(abbvtab, "Slovakia (Slovak Republic)", "SVK") insert(abbvtab, "Slovenia", "SVN") insert(abbvtab, "Solomon Islands", "SLB") insert(abbvtab, "Somalia", "SOM") insert(abbvtab, "South Africa", "ZAF") insert(abbvtab, "South Georgia And The South Sandwich Islands", "SGS") insert(abbvtab, "Spain", "ESP") insert(abbvtab, "Sri Lanka", "LKA") insert(abbvtab, "St. Helena", "SHN") insert(abbvtab, "St. Pierre And Miquelon", "SPM") insert(abbvtab, "Sudan", "SDN") insert(abbvtab, "Suriname", "SUR") insert(abbvtab, "Svalbard And Jan Mayen Islands", "SJM") insert(abbvtab, "Swaziland", "SWZ") insert(abbvtab, "Sweden", "SWE") insert(abbvtab, "Switzerland", "CHE") insert(abbvtab, "Syrian Arab Republic", "SYR") insert(abbvtab, "Taiwan", "TWN") insert(abbvtab, "Tajikistan", "TJK") insert(abbvtab, "Tanzania, United Republic Of", "TZA") insert(abbvtab, "Thailand", "THA") insert(abbvtab, "Togo", "TGO") insert(abbvtab, "Tokelau", "TKL") insert(abbvtab, "Tonga", "TON") insert(abbvtab, "Trinidad And Tobago", "TTO") insert(abbvtab, "Tunisia", "TUN") insert(abbvtab, "Turkey", "TUR") insert(abbvtab, "Turkmenistan", "TKM") insert(abbvtab, "Turks And Caicos Islands", "TCA") insert(abbvtab, "Tuvalu", "TUV") insert(abbvtab, "Uganda", "UGA") insert(abbvtab, "Ukraine", "UKR") insert(abbvtab, "United Arab Emirates", "ARE") insert(abbvtab, "United Kingdom", "GBR") insert(abbvtab, "United States", "USA") insert(abbvtab, "United States Minor Outlying Islands", "UMI") insert(abbvtab, "Uruguay", "URY") insert(abbvtab, "Uzbekistan", "UZB") insert(abbvtab, "Vanuatu", "VUT") insert(abbvtab, "Vatican City State (Holy See)", "VAT") insert(abbvtab, "Venezuela", "VEN") insert(abbvtab, "Viet Nam", "VNM") insert(abbvtab, "Virgin Islands (British)", "VGB") insert(abbvtab, "Virgin Islands (U.S.)", "VIR") insert(abbvtab, "Wallis And Futuna Islands", "WLF") insert(abbvtab, "Western Sahara", "ESH") insert(abbvtab, "Yemen", "YEM") insert(abbvtab, "Yugoslavia", "YUG") insert(abbvtab, "Zaire", "ZAR") insert(abbvtab, "Zambia", "ZMB") insert(abbvtab, "Zimbabwe", "ZWE") /* Two Letter Country Codes (use one set or the other)*/ /* insert(abbvtab, "Afghanistan", "AF") insert(abbvtab, "Albania", "AL") insert(abbvtab, "Algeria", "DZ") insert(abbvtab, "American Samoa", "AS") insert(abbvtab, "Andorra", "AD") insert(abbvtab, "Angola", "AO") insert(abbvtab, "Anguilla", "AI") insert(abbvtab, "Antarctica", "AQ") insert(abbvtab, "Antigua And Barbuda", "AG") insert(abbvtab, "Argentina", "AR") insert(abbvtab, "Armenia", "AM") insert(abbvtab, "Aruba", "AW") insert(abbvtab, "Australia", "AU") insert(abbvtab, "Austria", "AT") insert(abbvtab, "Azerbaijan", "AZ") insert(abbvtab, "Bahamas", "BS") insert(abbvtab, "Bahrain", "BH") insert(abbvtab, "Bangladesh", "BD") insert(abbvtab, "Barbados", "BB") insert(abbvtab, "Belarus", "BY") insert(abbvtab, "Belgium", "BE") insert(abbvtab, "Belize", "BZ") insert(abbvtab, "Benin", "BJ") insert(abbvtab, "Bermuda", "BM") insert(abbvtab, "Bhutan", "BT") insert(abbvtab, "Bolivia", "BO") insert(abbvtab, "Bosnia And Herzegowina", "BA") insert(abbvtab, "Botswana", "BW") insert(abbvtab, "Bouvet Island", "BV") insert(abbvtab, "Brazil", "BR") insert(abbvtab, "British Indian Ocean Territory", "IO") insert(abbvtab, "Brunei Darussalam", "BN") insert(abbvtab, "Bulgaria", "BG") insert(abbvtab, "Burkina Faso", "BF") insert(abbvtab, "Burundi", "BI") insert(abbvtab, "Cambodia", "KH") insert(abbvtab, "Cameroon", "CM") insert(abbvtab, "Canada", "CA") insert(abbvtab, "Cape Verde", "CV") insert(abbvtab, "Cayman Islands", "KY") insert(abbvtab, "Central African Republic", "CF") insert(abbvtab, "Chad", "TD") insert(abbvtab, "Chile", "CL") insert(abbvtab, "China", "CN") insert(abbvtab, "Christmas Island", "CX") insert(abbvtab, "Cocos (Keeling) Islands", "CC") insert(abbvtab, "Colombia", "CO") insert(abbvtab, "Comoros", "KM") insert(abbvtab, "Congo", "CG") insert(abbvtab, "Cook Islands", "CK") insert(abbvtab, "Costa Rica", "CR") insert(abbvtab, "Cote D'ivoire", "CI") insert(abbvtab, "Croatia (Local Name: Hrvatska)", "HR") insert(abbvtab, "Cuba", "CU") insert(abbvtab, "Cyprus", "CY") insert(abbvtab, "Czech Republic", "CZ") insert(abbvtab, "Denmark", "DK") insert(abbvtab, "Djibouti", "DJ") insert(abbvtab, "Dominica", "DM") insert(abbvtab, "Dominican Republic", "DO") insert(abbvtab, "East Timor", "TP") insert(abbvtab, "Ecuador", "EC") insert(abbvtab, "Egypt", "EG") insert(abbvtab, "El Salvador", "SV") insert(abbvtab, "Equatorial Guinea", "GQ") insert(abbvtab, "Eritrea", "ER") insert(abbvtab, "Estonia", "EE") insert(abbvtab, "Ethiopia", "ET") insert(abbvtab, "Falkland Islands (Malvinas)", "FK") insert(abbvtab, "Faroe Islands", "FO") insert(abbvtab, "Fiji", "FJ") insert(abbvtab, "Finland", "FI") insert(abbvtab, "France", "FR") insert(abbvtab, "France, Metropolitan", "FX") insert(abbvtab, "French Guiana", "GF") insert(abbvtab, "French Polynesia", "PF") insert(abbvtab, "French Southern Territories", "TF") insert(abbvtab, "Gabon", "GA") insert(abbvtab, "Gambia", "GM") insert(abbvtab, "Georgia", "GE") insert(abbvtab, "Germany", "DE") insert(abbvtab, "Ghana", "GH") insert(abbvtab, "Gibraltar", "GI") insert(abbvtab, "Greece", "GR") insert(abbvtab, "Greenland", "GL") insert(abbvtab, "Grenada", "GD") insert(abbvtab, "Guadeloupe", "GP") insert(abbvtab, "Guam", "GU") insert(abbvtab, "Guatemala", "GT") insert(abbvtab, "Guinea", "GN") insert(abbvtab, "Guinea-Bissau", "GW") insert(abbvtab, "Guyana", "GY") insert(abbvtab, "Haiti", "HT") insert(abbvtab, "Heard And Mc Donald Islands", "HM") insert(abbvtab, "Honduras", "HN") insert(abbvtab, "Hong Kong", "HK") insert(abbvtab, "Hungary", "HU") insert(abbvtab, "Iceland", "IS") insert(abbvtab, "India", "IN") insert(abbvtab, "Indonesia", "ID") insert(abbvtab, "Iran (Islamic Republic Of)", "IR") insert(abbvtab, "Iraq", "IQ") insert(abbvtab, "Ireland", "IE") insert(abbvtab, "Israel", "IL") insert(abbvtab, "Italy", "IT") insert(abbvtab, "Jamaica", "JM") insert(abbvtab, "Japan", "JP") insert(abbvtab, "Jordan", "JO") insert(abbvtab, "Kazakhstan", "KZ") insert(abbvtab, "Kenya", "KE") insert(abbvtab, "Kiribati", "KI") insert(abbvtab, "Korea, Democratic People's Republic Of", "KP") insert(abbvtab, "Korea, Republic Of", "KR") insert(abbvtab, "Kuwait", "KW") insert(abbvtab, "Kyrgyzstan", "KG") insert(abbvtab, "Lao People's Democratic Republic", "LA") insert(abbvtab, "Latvia", "LV") insert(abbvtab, "Lebanon", "LB") insert(abbvtab, "Lesotho", "LS") insert(abbvtab, "Liberia", "LR") insert(abbvtab, "Libyan Arab Jamahiriya", "LY") insert(abbvtab, "Liechtenstein", "LI") insert(abbvtab, "Lithuania", "LT") insert(abbvtab, "Luxembourg", "LU") insert(abbvtab, "Macau", "MO") insert(abbvtab, "Macedonia, The Former Yugoslav Republic Of", "MK") insert(abbvtab, "Madagascar", "MG") insert(abbvtab, "Malawi", "MW") insert(abbvtab, "Malaysia", "MY") insert(abbvtab, "Maldives", "MV") insert(abbvtab, "Mali", "ML") insert(abbvtab, "Malta", "MT") insert(abbvtab, "Marshall Islands", "MH") insert(abbvtab, "Martinique", "MQ") insert(abbvtab, "Mauritania", "MR") insert(abbvtab, "Mauritius", "MU") insert(abbvtab, "Mayotte", "YT") insert(abbvtab, "Mexico", "MX") insert(abbvtab, "Micronesia, Federated States Of", "FM") insert(abbvtab, "Moldova, Republic Of", "MD") insert(abbvtab, "Monaco", "MC") insert(abbvtab, "Mongolia", "MN") insert(abbvtab, "Montserrat", "MS") insert(abbvtab, "Morocco", "MA") insert(abbvtab, "Mozambique", "MZ") insert(abbvtab, "Myanmar", "MM") insert(abbvtab, "Namibia", "NA") insert(abbvtab, "Nauru", "NR") insert(abbvtab, "Nepal", "NP") insert(abbvtab, "Netherlands", "NL") insert(abbvtab, "Netherlands Antilles", "AN") insert(abbvtab, "New Caledonia", "NC") insert(abbvtab, "New Zealand", "NZ") insert(abbvtab, "Nicaragua", "NI") insert(abbvtab, "Niger", "NE") insert(abbvtab, "Nigeria", "NG") insert(abbvtab, "Niue", "NU") insert(abbvtab, "Norfolk Island", "NF") insert(abbvtab, "Northern Mariana Islands", "MP") insert(abbvtab, "Norway", "NO") insert(abbvtab, "Oman", "OM") insert(abbvtab, "Pakistan", "PK") insert(abbvtab, "Palau", "PW") insert(abbvtab, "Panama", "PA") insert(abbvtab, "Papua New Guinea", "PG") insert(abbvtab, "Paraguay", "PY") insert(abbvtab, "Peru", "PE") insert(abbvtab, "Philippines", "PH") insert(abbvtab, "Pitcairn", "PN") insert(abbvtab, "Poland", "PL") insert(abbvtab, "Portugal", "PT") insert(abbvtab, "Puerto Rico", "PR") insert(abbvtab, "Qatar", "QA") insert(abbvtab, "Reunion", "RE") insert(abbvtab, "Romania", "RO") insert(abbvtab, "Russian Federation", "RU") insert(abbvtab, "Rwanda", "RW") insert(abbvtab, "Saint Kitts And Nevis", "KN") insert(abbvtab, "Saint Lucia", "LC") insert(abbvtab, "Saint Vincent And The Grenadines", "VC") insert(abbvtab, "Samoa", "WS") insert(abbvtab, "San Marino", "SM") insert(abbvtab, "Sao Tome And Principe", "ST") insert(abbvtab, "Saudi Arabia", "SA") insert(abbvtab, "Senegal", "SN") insert(abbvtab, "Seychelles", "SC") insert(abbvtab, "Sierra Leone", "SL") insert(abbvtab, "Singapore", "SG") insert(abbvtab, "Slovakia (Slovak Republic)", "SK") insert(abbvtab, "Slovenia", "SI") insert(abbvtab, "Solomon Islands", "SB") insert(abbvtab, "Somalia", "SO") insert(abbvtab, "South Africa", "ZA") insert(abbvtab, "South Georgia And The South Sandwich Islands", "GS") insert(abbvtab, "Spain", "ES") insert(abbvtab, "Sri Lanka", "LK") insert(abbvtab, "St. Helena", "SH") insert(abbvtab, "St. Pierre And Miquelon", "PM") insert(abbvtab, "Sudan", "SD") insert(abbvtab, "Suriname", "SR") insert(abbvtab, "Svalbard And Jan Mayen Islands", "SJ") insert(abbvtab, "Swaziland", "SZ") insert(abbvtab, "Sweden", "SE") insert(abbvtab, "Switzerland", "CH") insert(abbvtab, "Syrian Arab Republic", "SY") insert(abbvtab, "Taiwan", "TW") insert(abbvtab, "Tajikistan", "TJ") insert(abbvtab, "Tanzania, United Republic Of", "TZ") insert(abbvtab, "Thailand", "TH") insert(abbvtab, "Togo", "TG") insert(abbvtab, "Tokelau", "TK") insert(abbvtab, "Tonga", "TO") insert(abbvtab, "Trinidad And Tobago", "TT") insert(abbvtab, "Tunisia", "TN") insert(abbvtab, "Turkey", "TR") insert(abbvtab, "Turkmenistan", "TM") insert(abbvtab, "Turks And Caicos Islands", "TC") insert(abbvtab, "Tuvalu", "TV") insert(abbvtab, "Uganda", "UG") insert(abbvtab, "Ukraine", "UA") insert(abbvtab, "United Arab Emirates", "AE") insert(abbvtab, "United Kingdom", "GB") insert(abbvtab, "United States", "US") insert(abbvtab, "United States Minor Outlying Islands", "UM") insert(abbvtab, "Uruguay", "UY") insert(abbvtab, "Uzbekistan", "UZ") insert(abbvtab, "Vanuatu", "VU") insert(abbvtab, "Vatican City State (Holy See)", "VA") insert(abbvtab, "Venezuela", "VE") insert(abbvtab, "Viet Nam", "VN") insert(abbvtab, "Virgin Islands (British)", "VG") insert(abbvtab, "Virgin Islands (U.S.)", "VI") insert(abbvtab, "Wallis And Futuna Islands", "WF") insert(abbvtab, "Western Sahara", "EH") insert(abbvtab, "Yemen", "YE") insert(abbvtab, "Yugoslavia", "YU") insert(abbvtab, "Zaire", "ZR") insert(abbvtab, "Zambia", "ZM") insert(abbvtab, "Zimbabwe", "ZW") */ } lifelines-3.0.61/reports/showlines1.ll0000700002540200244210000000225210076661057020075 0ustar prappDomain Users/* * @progname showlines1.ll * @version 1.0 * @author Wetmore * @category * @output Text * @description * This program will produce a report of all ancestors of a person, * and is presently designed for 10 or 12 pitch, HP laserjet III. * showlines1 * * Code by Tom Wetmore, ttw@cbnewsl.att.com * * This report works only with the LifeLines Genealogy program * * version one of this report was written by Tom Wetmore, in 1991. * * * Output is an ASCII file * */ /* showlines */ proc main () { list(plist) getindi(indi) monthformat(4) print("Each dot is an ancestor.") print(nl()) "------------------------------------------------------------" nl() "ANCESTRAL LINES OF -- " name(indi) nl() enqueue(plist, indi) while (indi, dequeue(plist)) { call show_line(indi, plist) } print(nl()) } proc show_line (indi, plist) { "------------------------------------------------------------" nl() while (indi) { name(indi) col(32) stddate(birth(indi)) col(45) stddate(death(indi)) nl() print(".") if (moth, mother(indi)) { enqueue(plist, moth) } set(indi, father(indi)) } } /* End of Report */ lifelines-3.0.61/reports/simpleged.ll0000700002540200244210000000700510076661057017753 0ustar prappDomain Users/* * @progname simpleged.ll * @version 1.0 * @author Wetmore * @category * @output GEDCOM * @description This program generates a simple GEDCOM file from a database. It can be modified to convert your own LifeLines database formats to other GEDCOM formats. simpleged Written by Tom Wetmore, July 1993. */ proc main () { "0 HEAD \n" "1 SOUR LIFELINES\n" forindi(indi, num) { print("i") call outindi(indi) } forfam(fam, num) { print("f") call outfam(fam) } "0 TRLR \n" } proc outindi (indi) { set(root, inode(indi)) set(noname, 1) set(nosex, 1) set(nobirt, 1) set(nobapt, 1) set(nodeat, 1) set(noburi, 1) "0 " xref(root) " " tag(root) nl() set(node, child(root)) while (node) { if (and(noname, not(strcmp("NAME", tag(node))))) { "1 NAME " value(node) nl() set(noname, 0) } elsif (and(nosex, not(strcmp("SEX", tag(node))))) { "1 SEX " value(node) nl() set(nosex, 0) } elsif (and(nobirt, not(strcmp("BIRT", tag(node))))) { call outevent(node) set(nobirt, 0) } elsif (and(nobapt, not(strcmp("CHR", tag(node))))) { call outevent(node) set(nobapt, 0) } elsif (and(nodeat, not(strcmp("DEAT", tag(node))))) { call outevent(node) set(nodeat, 0) } elsif (and(noburi, not(strcmp("BURI", tag(node))))) { call outevent(node) set(noburi, 0) } elsif (not(strcmp("FAMC", tag(node)))) { "1 FAMC " value(node) nl() } elsif (not(strcmp("FAMS", tag(node)))) { "1 FAMS " value(node) nl() } set(node, sibling(node)) } } proc outfam (fam) { set(nomarr, 1) set(root, fnode(fam)) "0 " xref(root) " " tag(root) nl() set(node, child(root)) while (node) { if (not(strcmp("HUSB", tag(node)))) { "1 HUSB " value(node) nl() } elsif (not(strcmp("WIFE", tag(node)))) { "1 WIFE " value(node) nl() } elsif (not(strcmp("CHIL", tag(node)))) { "1 CHIL " value(node) nl() } elsif (and(nomarr, not(strcmp("MARR", tag(node))))) { call outevent(node) set(nomarr, 0) } set(node, sibling(node)) } } proc outevent (evt) { set(nodate, 1) set(noplac, 1) set(nosour, 1) "1 " tag(evt) "\n" set(evt, child(evt)) while (evt) { if (and(nodate, not(strcmp("DATE", tag(evt))))) { "2 DATE " value(evt) nl() set(nodate, 0) } elsif (and(noplac, not(strcmp("PLAC", tag(evt))))) { "2 PLAC " value(evt) nl() set(noplac, 0) } elsif (and(nosour, not(strcmp("SOUR", tag(evt))))) { "2 SOUR " value(evt) nl() set(nosour, 0) } set(evt, sibling(evt)) } } lifelines-3.0.61/reports/soundex-isfm.ll0000700002540200244210000001232610076661060020417 0ustar prappDomain Users/* * @progname soundex-isfm.ll * @version 1.0 * @author Wetmore, Manis, Eggert * @category * @output Text, 132 cols * @description * * This program will produce a report of all the INDI's in the database, * in the format as seen at end of report. May be sorted easily * to see the Father or Mother column sorted report. * * soundex-isfm * * Code by Tom Wetmore, ttw@cbnewsl.att.com, 1991 * Modifications by Cliff Manis, cmanis@csoftec.csf.com, 1992 * Modifications by Jim Eggert, atc.ll.mit.edu!eggertj Fri Feb 26 1993 * * This report works only with the LifeLines Genealogy program * * This report can be used to output everyone in the database, * or selected by a single soundex code. The soundex code * can be entered either by knowing the code, or by selecting * an individual and using his/her code. * * The report name come from: isfm (Indi Spouse Father Mother) * It is designed for 16 pitch, HP laserjet III, 132 column, and * also those who have X-Windows, 132 columns video. * * This report produces an ASCII output file. */ proc main () { indiset(idx) getintmsg(smethod, "0=all persons, 1=given Soundex, 2=Soundex of a given person") if (eq(smethod,1)) { getstrmsg(scode, "Enter desired Soundex code (return=any, Z999=unknown)") if (scode) { set(scode,save(upper(scode))) } } elsif (eq(smethod,2)) { getindimsg(person,"Enter name of person with desired Soundex") if (person) { set(scode,save(soundex(person)) ) } } if (scode) { print("Using Soundex code ") print(scode) print("\n") } else { print("Using all persons in database\n") } set(count,0) forindi(indi,n) { set(getit,1) if (scode) { if (strcmp(scode,soundex(indi))) { set(getit,0) } } if (getit) { addtoset(idx,indi,n) if (scode) { set(count,add(count,1)) print(d(count)) print("/") } print(d(n)) print(" ") } } print("\nbegin sorting\n") namesort(idx) print("done sorting\n") col(1) "INDEX OF ALL PERSONS IN DATABASE" if (scode) { " WITH SOUNDEX CODE: " scode } col(1) "Individual" col(34) "Brth" col(39) "Deat" col(44) "First Spouse" col(75) "Father" col(106) "Mother" col(1) "----------------------------------------" "----------------------------------------" "----------------------------------------" forindiset(idx,indi,v,n) { col(1) fullname(indi,1,0,29) col(34) year(birth(indi)) col(39) year(death(indi)) if(gt(nspouses(indi), 0)) { spouses(indi, spou, fam, n) { if (eq(1,n)) { col(44) fullname(spou,1,0,29) } } } if(fath,father(indi)) { col(75) fullname(fath,1,0,29) } if(moth,mother(indi)) { col(106) fullname(moth,1,0,29) } } nl() print(nl()) } /* Sample output of report (132 columns) INDEX OF ALL PERSONS IN DATABASE WITH SOUNDEX CODE: D340 Individual Brth Deat First Spouse Father Mother ------------------------------------------------------------------------------------------------------------------------ DUDLEY, Alexander 1645 DUDLEY, Richard SEAWELL, Mary DUDLEY, Ambrose 1665 DUDLEY, Wife_of Ambrose DUDLEY, Ambrose DUDLEY, Wife_of Col_Ambrose DUDLEY, Ambrose 1649 DUDLEY, Wife_of Col_Ambrose DUDLEY, Richard SEAWELL, Mary DUDLEY, Christopher 1715 1781 DUDLEY, Robert CURTIS, Elizabeth DUDLEY, Dorcas 1704 1765 ROUNTREE, William DUDLEY, Ambrose DUDLEY, Wife_of Ambrose DUDLEY, Edward 1605 1655 PRITCHARD, Elizabeth DUDLEY, James 1645 1741 WELCH, Mary DUDLEY, Richard SEAWELL, Mary DUDLEY, Richard 1623 1687 SEAWELL, Mary DUDLEY, Edward PRITCHARD, Elizabeth DUDLEY, Robert 1647 1701 RANSOM, Elizabeth DUDLEY, Richard SEAWELL, Mary DUDLEY, Robert 1691 1745 CURTIS, Elizabeth DUDLEY, Robert RANSOM, Elizabeth DUDLEY, Wife_of Ambrose 1640 DUDLEY, Ambrose DUDLEY, Wife_of Col_Ambrose 1645 DUDLEY, Ambrose DUDLEY, William 1621 1672 CARY, Elizabeth DUDLEY, Edward PRITCHARD, Elizabeth -- end of sample */ lifelines-3.0.61/reports/soundex1.ll0000700002540200244210000000376310076661060017551 0ustar prappDomain Users/* * @progname soundex1.ll * @version 1.0 * @author Jones * @category * @output Text * @description * * Produces a chart of all surnames in database with corresponding * SOUNDEX codes. * It is designed for 10 or 12 pitch, HP laserjet III, or any * other printer. * * soundex1 * * Code by James P. Jones, jjones@nas.nasa.gov * * This report works only with the LifeLines Genealogy program * * version one of this report was written by James P. Jones, 28 Sep 1992 * * * Output is an ASCII file. * * An example of the output may be seen at end of this report. * */ proc main () { indiset(idx) forindi(indi,n) { addtoset(idx,indi,n) print(".") } print(nl()) print("indexed ") print(d(n)) print(" persons.") print(nl()) print(nl()) print("begin sorting") print(nl()) namesort(idx) print("done sorting") print(nl()) col(11) "SOUNDEX CODES OF ALL SURNAMES IN DATABASE" nl() col(1) " " nl() col(1) " " nl() col(16) " Surname Soundex Code" nl() col(16) " ------------- ------------" nl() set(last, " ") forindiset(idx,indi,v,n) { if(strcmp(surname(indi), last)) { col(20) upper(surname(indi)) col(36) soundex(indi) } set(last,surname(indi)) print(".") } nl() print(nl()) } /* Sample output of this report: SOUNDEX CODES OF ALL SURNAMES IN DATABASE Surname Soundex Code ------------- ------------ ABERNATHY A165 AHMADVAND-S A531 ANDERSON A536 ANDREWS A536 BAILEY B400 BARBIE B610 BENNET B530 */ /* End of Report */ lifelines-3.0.61/reports/sour.li0000700002540200244210000001654110076661060016766 0ustar prappDomain Users/* * @progname sour.li * @version 1995-09-08 * @author Paul B. McBride (pbm%cybvax0@uunet.uu.net) * @category * @output Text * @description functions for handling SOURces. Requirements: LifeLines 3.0.2 or later (I hope) See Examples of using the library routines below. Tags within SOUR definitions which are processed by sour_ref(): REFN see below TITL title AUTH author DATE publication date EDIT which edition, revision, etc VOLU number of volumnes (e.g. 3 vols) PAGE page numbers PUBL publisher PLAC place of publication LOCA where did you saw this source The following describes how I use the REFN tag. This is not particularly relevant, but here goes. There are some standard abbreviations that are often used: MD Mayflower Descendant NEHGR New England Historic Genealogical Society Register TAG The Americant Genealogist RFC Royalty for Commoners AR7 Ancestral Roots... 7th edition I use other REFN's which are a combination of the subject, or author and a suffix: WentworthG Wentworth Genealogy HayesFH a Hayes family history ScituateVR Scituate, MA Vital Records HamptonTH Hampton, NH Town History When I am entering a source field I would then enter it as: 2 SOUR and it will get converted to 2 @Sxxx@ SOUR Examples: 1) Report references used in a set of individuals include("sour.ll") ... sour_init() / * initialize the current source list and table * / ... / * create a set of individuals * / sour_addset(a_set) / * add all sources referenced by set * / "References: " sour_ref(13) / * output sources in GEDCOM format * / 2) List references for groups of individuals, and then a master list of all sources referenced: include("sour.ll") ... table(my_table) list(my_list) ...for each group of individuals { sour_init() / * initialize the current source list and table * / ...for each individual... { sour_addind(an_indi) if(sour_exists()) { "References: " sour_see(",", 70, 10) / * report REFN of each source * / sour_save(my_table, my_list) / * add to master list * / } } } sour_restore(my_table, my_list) / * make master list the current one * / if(sour_exists()) { "Key to References:" nl() nl() sour_ref(10) / * report details for all sources * / } 3) Output all sources for a set of individuals in GEDCOM format: include("sour.ll") ... sour_init() / * initialize the current source list and table * / ... / * create a set of individuals * / sour_addset(a_set) / * add all sources referenced by set * / sour_ged() / * output sources in GEDCOM format * / 08-sep-95 Paul B. McBride (pbm%cybvax0@uunet.uu.net) */ global(sour_list) global(sour_table) proc sour_init() { table(sour_table) list(sour_list) } proc sour_save(t, l) { forlist(sour_list, v, n) { if (eq(0, lookup(t, v))) { insert(t, v, 1) enqueue(l, v) } } } proc sour_restore(t, l) { set(sour_table, t) set(sour_list, l) } /* sour_add() adds the sources referenced for this individual */ proc sour_addind(i) { traverse(root(i), m, l) { if (nestr("SOUR", tag(m))) { continue() } set(v, value(m)) if(reference(v)) { if (ne(0, lookup(sour_table, v))) { continue() } set(v, save(v)) insert(sour_table, v, 1) enqueue(sour_list, v) } } } proc sour_addset(s) { forindiset (s, i, a, n) { call sour_addind(i) } } proc sour_see(sep, maxlen, indent) { set(first, 1) set(curlen, indent) set(seplen, strlen(sep)) forlist(sour_list, k, n) { if(first) { set(first, 0) } else { sep set(curlen, add(curlen, seplen)) } set(myrefn, sour_getfield(dereference(k), "REFN")) set(mylen, add(add(strlen(myrefn), seplen),2)) if(and(gt(maxlen, 0), gt(add(curlen, mylen), maxlen))) { col(indent) set(curlen, indent) } "<" myrefn ">" set(curlen, add(curlen, mylen)) } } proc sour_ref(colnum) { forlist(sour_list, k, n) { set(n, dereference(k)) "<" sour_getfield(n, "REFN") ">" col(colnum) qt() sour_repfield(n, "TITL", colnum) qt() if(sour_getfield(n, "AUTH")) { "," nl() col(colnum) sour_repfield(n, "AUTH", colnum) } set(d, sour_getfield(n, "DATE")) if(d) { ", " d } set(d, sour_getfield(n, "EDIT")) if(d) { ", " d } set(d, sour_getfield(n, "VOLU")) if(d) { ", " d } set(d, sour_getfield(n, "PAGE")) if(d) { ", " d } set(d, sour_getfield(n, "PUBL")) if(d) { ", " nl() d } set(d, sour_getfield(n, "PLAC")) if(d) { ", " d } "." nl() if(sour_getfield(n, "NOTE")) { col(colnum) sour_repfield(n, "NOTE", colnum) nl() } } } func sour_exists() { return(ne(length(sour_list), 0)) } func sour_getfield(r, t) { traverse(r, s, l) { if (eq(0, strcmp(t, tag(s)))) { return(value(s)) } } return(0) } func sour_repfield(r, t, colnum) { set(found, 0) fornodes(r, node) { if (eq(0,strcmp(t, tag(node)))) { set(found, 1) value(node) fornodes(node, subnode) { if (eq(0,strcmp("CONT", tag(subnode)))) { nl() if(gt(colnum, 0)) { col(colnum) } value(subnode) } } break() } } return(found) } /* sour_ged() outputs the current source list in GEDCOM format */ proc sour_ged() { forlist(sour_list, k, n) { set(r, dereference(k)) traverse(r, s, l) { d(l) if (xref(s)) { " " xref(s) } " " tag(s) if (value(s)) { " " value(s) } "\n" } } } lifelines-3.0.61/reports/sour2.li0000700002540200244210000002754410076661060017055 0ustar prappDomain Users/* * @progname sour2.li * @version 4.1 * @author Paul B. McBride (pbm%cybvax0@uunet.uu.net) * @category * @output Text * @description report program subroutine library for handling SOURces. add the following lines to your source program to use this library of routines: include("quicksort.ll") include("compare.ll") [define your own compare if necessary] include("sour.li") include("html.ll") 27-feb-96 v4.1 - Indent PUBL info properly. Set source to LDS-AF if AFN seen. 14-feb-96 v4 - Use quicksort() to sort sources by REFN value 08-feb-96 v3 - Support REPO records 24-jan-96 v1.2 - GEDCOM 5.5 support and compatibility notes Correct processing of Sources without REFN tags 03-oct-95 v1.1 - sour_addset() now adds sources for families of individuals Requirements: LifeLines 3.0.2 or later (I hope) Future modifications: - Add routines to report sources as references to footnotes, and list sources in foot notes. Also report source citation detail (PAGE, NOTE). - Add support for repository records (REPO) to replace non standard location (LOCA) records. See Examples of using the library routines below. Tags within SOUR definitions which are processed by sour_ref(): GEDCOM Non Standard 5.5 REFN see below TITL title AUTH author PUBL publisher information DATE publication date EDIT which edition, revision, etc VOLU number of volumnes (e.g. 3 vols) PAGE page numbers PLAC place of publication REPO LOCA where you saw this source (repository) NOTE notes TEXT text quoted from document The GEDCOM 5.5 standard combines all of the publication related info into the PUBL tag line with continuations (CONT). It introduces a repository structure which includes the NAME and address (ADDR structure) of the location where the source can be viewed. The following describes how I use the REFN tag. This is not particularly relevant, but here goes. There are some standard abbreviations that are often used: MD Mayflower Descendant NEHGR New England Historic Genealogical Society Register TAG The Americant Genealogist RFC Royalty for Commoners AR7 Ancestral Roots... 7th edition I use other REFN's which are a combination of the subject, or author and a suffix: WentworthG Wentworth Genealogy HayesFH a Hayes family history ScituateVR Scituate, MA Vital Records HamptonTH Hampton, NH Town History When I am entering a source field I would then enter it as: 2 SOUR and it will get converted to 2 @Sxxx@ SOUR Examples: 1) Report references used in a set of individuals include("sour.li") ... call sour_init() / * initialize the current source list and table * / ... / * create a set of individuals * / call sour_addset(a_set) / * add all sources referenced by set * / "References: " nl() nl() call sour_ref(10) / * report details of all sources * / 2) List references for groups of individuals, and then a master list of all sources referenced: include("sour.li") ... table(my_table) list(my_list) ...for each group of individuals { call sour_init() / * initialize the current source list and table * / ...for each individual... { call sour_addind(an_indi) if(sour_exists()) { "References: " call sour_see(",", 70, 10) / * report REFN of each source * / call sour_save(my_table, my_list) / * add to master list * / } } } / * make master list the current list of sources * / call sour_restore(my_table, my_list) if(sour_exists()) { "Key to References:" nl() nl() call sour_ref(10) / * report details for all sources * / } 3) Output all sources for a set of individuals in GEDCOM format: include("sour.li") ... call sour_init() / * initialize the current source list and table * / ... / * create a set of individuals * / call sour_addset(a_set) / * add all sources referenced by set * / call sour_ged() / * output sources in GEDCOM format * / 08-sep-95 Paul B. McBride (pbm%cybvax0@uunet.uu.net) */ global(sour_list) global(sour_table) proc sour_init() { table(sour_table) list(sour_list) } proc sour_save(t, l) { forlist(sour_list, v, n) { if (eq(0, lookup(t, v))) { insert(t, v, 1) enqueue(l, v) } } } proc sour_restore(t, l) { set(sour_table, t) set(sour_list, l) } /* sour_add() adds the sources referenced for this individual. This will also work for families */ proc sour_addind(i) { traverse(root(i), m, l) { set(v, 0) if (eqstr("AFN", tag(m))) { set(v, "LDS-AF") } elsif (eqstr("SOUR", tag(m))) { set(v, value(m)) if(not(reference(v))) { set(v, 0) } } if(v) { if (ne(0, lookup(sour_table, v))) { continue() } set(v, save(v)) insert(sour_table, v, 1) enqueue(sour_list, v) } } } proc sour_addset(s) { forindiset (s, i, a, n) { call sour_addind(i) families(i, f, sp, m) { call sour_addind(f) } } } proc sour_see(sep, maxlen, indent) { set(first, 1) set(curlen, indent) set(seplen, strlen(sep)) forlist(sour_list, k, n) { if(first) { set(first, 0) } else { sep set(curlen, add(curlen, seplen)) } if(eqstr(k, "LDS-AF")) { set(myrefn, k) } else { set(myrefn, sour_getfield(dereference(k), "REFN")) if(eq(myrefn, 0)) { set(myrefn, k) } } set(mylen, add(add(strlen(myrefn), seplen),2)) if(and(gt(maxlen, 0), gt(add(curlen, mylen), maxlen))) { col(indent) set(curlen, indent) } call html_lt() /* < */ if(eq(html_ext, 0)) { set(html_ext, ".html") } call html_ahref("ref", html_ext, myrefn) myrefn call html_tag("/A", 0) call html_gt() /* > */ set(curlen, add(curlen, mylen)) } if(and(HTML, eq(first,0))) { call html_tag("P", 1) } } proc sour_ref(colnum) { list(alist) list(ilist) /* build list of reference keys */ forlist(sour_list, k, n) { if(eqstr(k, "LDS-AF")) { set(refn, k) } else { set(anode, dereference(k)) set(refn, sour_getfield(anode, "REFN")) if(eq(refn, 0)) { set(refn, k) } } enqueue(alist, save(refn)) } /* sort the list */ call quicksort(alist, ilist) /* report */ call html_tag("UL", 0) while(n, dequeue(ilist)) { set(ldsaf, 0) set(k, getel(sour_list, n)) call html_tag("LI", 0) call html_tag("PRE", 1) if(eqstr(k, "LDS-AF")) { set(refn, k) set(ldsaf, 1) } else { set(anode, dereference(k)) set(refn, sour_getfield(anode, "REFN")) if(eq(refn, 0)) { set(refn, k) } } call html_lt() /* < */ refn call html_gt() /* > */ col(colnum) qt() if(ldsaf) { "LDS Ancestral File" } else {sour_repfield(anode, "TITL", colnum) } qt() if(HTML) { call html_aname(refn) } if(ldsaf) { "." nl() } else { if(sour_getfield(anode, "AUTH")) { "," nl() col(colnum) sour_repfield(anode, "AUTH", colnum) } set(d, sour_getfield(anode, "DATE")) if(d) { ", " d } set(d, sour_getfield(anode, "EDIT")) if(d) { ", " d } set(d, sour_getfield(anode, "VOLU")) if(d) { ", " d } set(d, sour_getfield(anode, "PAGE")) if(d) { ", " d } set(d, sour_getfield(anode, "PUBL")) if(d) { ", " nl() col(colnum) d } set(d, sour_getfield(anode, "PLAC")) if(d) { ", " d } "." nl() if(html_urls(anode, colnum)) { nl() } if(sour_getfield(anode, "NOTE")) { col(colnum) sour_repfield(anode, "NOTE", colnum) nl() } if(sour_getfield(anode, "TEXT")) { col(colnum) sour_repfield(anode, "TEXT", colnum) nl() } } call html_tag("/PRE", 0) call html_tag("/LI", 0) } call html_tag("/UL", 0) } func sour_exists() { return(ne(length(sour_list), 0)) } func sour_getfield(r, t) { traverse(r, s, l) { if (eq(0, strcmp(t, tag(s)))) { return(value(s)) } } return(0) } func sour_repfield(r, t, colnum) { set(found, 0) fornodes(r, node) { if (eq(0,strcmp(t, tag(node)))) { set(found, 1) value(node) fornodes(node, subnode) { if (eq(0,strcmp("CONT", tag(subnode)))) { nl() if(gt(colnum, 0)) { col(colnum) } value(subnode) } } break() } } return(found) } /* sour_ged() outputs the current source list in GEDCOM format */ proc sour_ged() { table(other_table) list(other_list) forlist(sour_list, k, n) { if(reference(k)) { set(r, dereference(k)) traverse(r, s, l) { d(l) if (xref(s)) { " " xref(s) } " " tag(s) if (v, value(s)) { " " v if(reference(v)) { if (ne(0, lookup(other_table, v))) { continue() } set(v, save(v)) insert(other_table, v, 1) enqueue(other_list, v) } } "\n" } } } forlist(other_list, k, n) { set(r, dereference(k)) traverse(r, s, l) { d(l) if (xref(s)) { " " xref(s) } " " tag(s) if (v, value(s)) { " " v } "\n" } } } lifelines-3.0.61/reports/sources.ll0000700002540200244210000000406010076661060017455 0ustar prappDomain Users/* * @progname sources.ll * @version 1.0 * @author * @category * @output Text * @description * * Print the sources associated with an individual. */ global(refn) /* root node of references record */ global(reftab) /* table of reference keys reported on */ global(ref1) proc main () { getindi(refn, "Enter name of record that hold the references") if (eq(refn, 0)) { print("The references could not be found; program not run\n") } else { set(refn, inode(refn)) call foundrefs() } } proc foundrefs () { table(refs) set(ref1, 0) getindi(indi, "Enter a person to show sources for.") while (indi) { call showperson(indi) "\n" getindi(indi, "Enter another person to show sources for.") } print("Program over!\n") } proc showperson (indi) { call showvitals(indi) call showsources(indi) } proc showvitals (i) { name(i) ".\n" set(e,birth(i)) if(and(e,long(e))) { "Born " long(e) ".\n" } set(e,death(i)) if(and(e,long(e))) { "Died " long(e) ".\n" } } proc showsources (i) /* finds all SOUR lines in a record */ { table(reftab) set(ref1, 0) traverse (inode(i), s, n) { if (eq(0, strcmp("SOUR", tag(s)))) { call showsource(value(s)) } } } proc showsource (v) /* process each SOUR line in a record */ { set(ref, 0) fornodes (refn, s) { /* look at each REFN line in references */ if (eq(0, strcmp(v, value(s)))) { /* found one with matching code! */ set(ref, s) /* so set ref to this REFN node */ } } if (ref) { /* non-null if matching code were found */ if (not(lookup(reftab, v))) { /* and we hadn't seen it yet */ if (not(ref1)) { /* Print "References:" before first one */ "References:\n" set(ref1, 1) } "\t" value(child(ref)) "\n" /* This could be much better! */ insert(reftab, v, 1) /* So we won't show it again! */ } } } lifelines-3.0.61/reports/sources_bib.ll0000700002540200244210000002604110076661060020274 0ustar prappDomain Users/* * @progname sources_bib.ll * @version 1999-02 * @author Dennis Nicklaus (nicklaus@fnal.gov) * @category * @output LaTeX * @description Lifelines report program. Write out a LaTex bibliography entry line for each source referenced by an indi or family record in the whole database. This is pretty slow. The bibliography printed out is useful for the html.dn programs (if you first run it through my bib2html.c program) or for a Latex document. The bibliography is pretty much the same as that generated as part of the book-latex code. (But book-latex generates its own bibliography, so you don't need this for that.) Most of the code for this report program was copied directly from book-latex. Deficiency?: May not generate an entry for a source which is only referenced from within another source. I don't know. */ global (bibList) global (bibTable) global (sourceList) global (gotValue) global (gottenNode) global (gottenValue) global(sour_list) global(sour_table) proc main () { list (bibList) table (bibTable) list (sourceList) table(sour_table) list(sour_list) call sour_addset() call sour_ged() while (b, dequeue (bibList)) { b } } proc sour_addset() { forindi(person, number) { print(".") traverse(root(person),m,l) { call print_sources(m) } families(person, f, sp, m) { traverse(root(f),m,l) { call print_sources(m) } } } } /* sour_ged() outputs the current source list in GEDCOM format */ proc sour_ged() { table(other_table) list(other_list) forlist(sour_list, k, n) { set(r, dereference(k)) traverse(r, s, l) { d(l) if (xref(s)) { " " xref(s) } " " tag(s) if (v, value(s)) { " " v if(reference(v)) { if (ne(0, lookup(other_table, v))) { continue() } if (ne(0, lookup(sour_table, v))) { continue() } set(v, save(v)) insert(other_table, v, 1) enqueue(other_list, v) } } "\n" } } forlist(other_list, k, n) { set(r, dereference(k)) traverse(r, s, l) { d(l) if (xref(s)) { " " xref(s) } " " tag(s) if (v, value(s)) { " " v } "\n" } } } /* print_sources (root) Prints all sources (SOUR lines) associated with the given GEDCOM line. The sources are formated as LaTeX footnotes. This routine prints each SOUR line as a separate footnote, which is not correct. This should be corrected so that all sources are combined into a single footnote. */ proc print_sources (root) { enqueue(sourceList,root) call sourceIt(sourceList) } proc getValue (root, t) { set (gotValue, 0) if (root) { fornodes (root, node) { if (and (not (gotValue), not (strcmp (tag (node), t)))) { set (gotValue, 1) set (gottenNode, node) set (gottenValue, save (value (node))) } } } } proc getValueCont (root, t) { set (gotValue, 0) if (root) { fornodes (root, node) { if (and (not (gotValue), not (strcmp (tag (node), t)))) { set (gotValue, 1) set (gottenNode, node) set (gottenValue, save (value (node))) fornodes (node, subnode) { if (not (strcmp ("CONT", tag (subnode)))) { if (strlen (value (subnode))) { set (gottenValue, save (concat (gottenValue, concat ("\n", value (subnode))))) } } elsif (not (strcmp ("CONC", tag (subnode)))) { if (strlen (value (subnode))) { set (gottenValue, save (concat (gottenValue, value (subnode)))) } } } } } } } proc getValueCommaCont (root, t) { set (gotValue, 0) if (root) { fornodes (root, node) { if (and (not (gotValue), not (strcmp (tag (node), t)))) { set (gotValue, 1) set (gottenNode, node) set (gottenValue, save (value (node))) fornodes (node, subnode) { if (not (strcmp ("CONT", tag (subnode)))) { if (strlen (value (subnode))) { set (gottenValue, save (concat (gottenValue, concat (",\n", value (subnode))))) } } elsif (not (strcmp ("CONC", tag (subnode)))) { if (strlen (value (subnode))) { set (gottenValue, save (concat (gottenValue, value (subnode)))) } } } } } } } proc sourceIt (sourceList) { list (cList) list (fList) while (root, dequeue (sourceList)) { fornodes (root, node) { if (not (strcmp (tag (node), "SOUR"))) { set (footnote, 1) set (val, value (node)) if (val) { if (reference(val)){ call bibliographize (dereference(val)) } } if (xref (node)) { call bibliographize (node) set (val, xref (node)) } if (val) { set (a1, index (val, "@", 1)) set (a2, index (val, "@", 2)) if (and (eq (a1, 1), eq (a2, strlen (val)))) { set (c, save (substring (val, 2, sub (strlen (val), 1)))) enqueue (cList, c) incr (cn) set (footnote, 0) } } else { set (subnodecount, 0) fornodes (node, subnode) { if (strcmp (tag (subnode), "SOUR")) { incr (subnodecount) } } if (eq (subnodecount, 0)) { fornodes (node, subnode) { set (val, value (subnode)) /* With loadsources, this is needed here. It is technically illegal gedcom. */ if (xref (subnode)) { call bibliographize (subnode) set (val, xref (subnode)) } if (val) { set (a1, index (val, "@", 1)) set (a2, index (val, "@", 2)) if (and (eq (a1, 1), eq (a2, strlen (val)))) { set (c, save (substring (val, 2, sub (strlen (val), 1)))) enqueue (cList, c) incr (cn) } } } set (footnote, 0) } } if (footnote) { enqueue (fList, node) } } } } while (cn) { forlist (cList, c, n) { if (and (ne (n, cn), not (strcmp (c, getel(cList, cn))))) { setel (cList, cn, "") } } decr (cn) } } proc bibliographize (root) { set (val, xref (root)) set (c, save (substring (val, 2, sub (strlen (val), 1)))) if (not (lookup (bibTable, c))) { insert (bibTable, c, 1) /* call getValueCont (root, "TEXT") if (figureFlag, gotValue) { enqueue (figureCiteList, c) enqueue (figureNodeList, gottenNode) }*/ set (cref, save (concat ("\\protect\\ref{", concat (c, "}")))) set (pref, save (concat ("\\protect\\pageref{", concat (c, "}")))) set (b, "\\bibitem") if (figureFlag) { set (b, save (concat (b, concat ("[", concat (cref, "]"))))) } set (b, save (concat (b, concat ("{", concat (c, "} "))))) call getValueCont (root, "TITL") if (gotValue) { set (b, save (concat (b, concat ("{\\em ", concat (gottenValue, "}, "))))) } call getValueCont (root, "AUTH") if (gotValue) { set (b, save (concat (b, concat (" ", concat (gottenValue, ", "))))) } call getValueCont (root, "PUBL") if (gotValue) { set(pubnode,gottenNode) call getValueCont (pubnode, "NAME") if (gotValue) { set (b, save (concat (b, concat ("in {\\em ", concat (gottenValue, "}, "))))) } call getValueCommaCont (pubnode, "ADDR") if (gotValue) { set (b, save (concat (b, concat (gottenValue, ": ")))) } call getValueCont (pubnode, "PUBR") if (gotValue) { set (b, save (concat (b, concat (gottenValue, ", ")))) } call getValueCont (pubnode, "PHON") if (gotValue) { set (b, save (concat (b, concat (gottenValue, ", ")))) } call getValueCont (pubnode, "DATE") if (gotValue) { set (b, save (concat (b, concat (gottenValue, ", ")))) } call getValueCont (pubnode, "VOLU") if (gotValue) { set (word, "Volume ") if (or (index (gottenValue, "-", 1), or (index (gottenValue, ",", 1), index (gottenValue, "and ", 1)))) { set (word, "Volumes ") } set (b, save (concat (b, concat (word, concat (gottenValue, ", "))))) } call getValueCont (pubnode, "NUM") if (gotValue) { set (word, "Number ") if (or (index (gottenValue, "-", 1), or (index (gottenValue, ",", 1), index (gottenValue, "and ", 1)))) { set (word, "Numbers ") } set (b, save (concat (b, concat (word, concat (gottenValue, ", "))))) } call getValueCont (root, "LCCN") if (gotValue) { set (b, save (concat (b, concat ("Call Number ", concat (gottenValue, ", "))))) } } call getValueCont (root, "PAGE") if (gotValue) { set (word, "page ") if (or (index (gottenValue, "-", 1), or (index (gottenValue, ",", 1), index (gottenValue, "and ", 1)))) { set (word, "pages ") } set (b, save (concat (b, concat (word, concat (gottenValue, ", "))))) } call getValueCont (root, "FILM") if (gotValue) { set (b, save (concat (b, concat ("Filmed by the Church of Jesus Christ of Latter Day Saints, Microfilm Number ", concat (gottenValue, ", "))))) } call getValueCont (root, "FICH") if (gotValue) { set (b, save (concat (b, concat ("Filmed by the Church of Jesus Christ of Latter Day Saints, Microfiche Number ", concat (gottenValue, ", "))))) } call getValueCont (root, "REPO") if (gotValue) { set (b, save (concat (b, concat ("at ", concat (gottenValue, ", "))))) } if (index (b, ", ", 1)) { set (b, save (concat (save (substring (b, 1, sub (strlen (b), 2))), "."))) } call getValueCont (root, "NOTE") if (gotValue) { set (b, save (concat (b, concat (" ", gottenValue)))) } call getValueCont (root, "TEXT") if (gotValue) { set (b, save (concat (b, concat (" ", gottenValue)))) } call getValueCont (root, "SOUR") if (gotValue) { set (bb, "?") if (gottenValue) { set (a1, index (gottenValue, "@", 1)) set (a2, index (gottenValue, "@", 2)) if (and (eq (a1, 1), eq (a2, strlen (gottenValue)))) { set (bb, save (substring (gottenValue, 2, sub (strlen (gottenValue), 1)))) } } set (b, save (concat (b, concat ("\\cite{", concat (bb, "}"))))) } if (figureFlag) { set (b, save (concat (b, concat (" See figure on page~", concat (pref, "."))))) } while (i, index (b, "\n", 1)) { set (b, save (concat (substring (b, 1, sub (i, 1)), concat (" ", substring (b, add (i, 1), strlen (b)))))) } enqueue (bibList, save (concat (b, "\n"))) } } lifelines-3.0.61/reports/span.ll0000700002540200244210000002221010331277305016727 0ustar prappDomain Users/* * @progname span * @version 1.1 * @author Stephen Dum * @category * @output text * @description Scan the database and report on the range of ages between birth to marriage, birth of parent to birth of child, and age at death. Generates a histogram of the results and reports minimum, maximum and average values. Designed to be run with llexec, with a command like 'llexec database -x span'. Note, the resultant histogram will normally fit nicely in a 80 column window, (except death range, which could take more like 132 columns) if it doesn't it's usually because of some bogus dates (like seeing a mothers age as -8 or 70 at the birth of a child.) This script contains added complexity to identify the min and max cases, however, the script verify.ll will report all the outlying cases in one pass. The average value is indicated on the histogram by using asterisks (*). Also, you can disable the scripts using of dates that are estimates. However, this is done by modifing the script rather than having the script prompt for an answer, as this is expected to be a less likely case. Stephen Dum (stephen.dum@verizon.net) Version 1, 2 November 2005 */ global(dohist) global(estdate) proc main() { set(dohist,1) /* generate histograms */ set(estdate,0) /* skip estimated dates */ /* we accumulate 4 statistics from the database and store them in * the following lists */ list(hus_mar) /* marriage age of husband */ list(wif_mar) /* marriage age of wife */ list(hus_child) /* husbands age at birth of child */ list(wif_child) /* wifes age at birth of child */ list(death_ages) /* age at death */ /* to assist in identifing the unusual extreme situations, * (like where it reports a husband was married at 192 years old * or at -46 years old * we keep some auxilary data for these lists */ list(hus_mar_id) /* Family and husband keys */ list(wif_mar_id) /* Family and wife keys */ list(hus_child_id) /* Family, husband and child key */ list(wif_child_id) /* Family, wife and child key */ list(death_ages_id) /* Family, husband and child key */ forfam(fam, cnt) { list(hus_dates) /* husband birth dates */ list(wif_dates) /* wife birth dates */ list(child_dates) /* child birth dates */ list(hus_id) /* husband id */ list(wif_id) /* wife id */ list(child_id) /* child id */ /* first process the family and get birth dates for husband, wife and * children */ set(marr_date,get_marriage_date(fam)) fornodes(fam,node) { if (eqstr(tag(node),"HUSB")) { if (val, get_birth_date(indi(value(node)))) { push(hus_dates,val) push(hus_id,key(indi(value(node)))) } } elsif (eqstr(tag(node),"WIFE")) { if (val, get_birth_date(indi(value(node)))) { push(wif_dates,val) push(wif_id,key(indi(value(node)))) } } elsif (eqstr(tag(node),"CHIL")) { if (val, get_birth_date(indi(value(node)))) { push(child_dates,val) push(child_id,key(indi(value(node)))) } } } /* print ("Length of hus_dates ",d(length(hus_dates)),nl()) print ("Length of wif_dates ",d(length(wif_dates)),nl()) print ("Length of child_dates ",d(length(child_dates)),nl()) */ /* we now have parents and children dates if any, see if * we know enough to process them * * First - look at marriage date vs parents */ if (marr_date) { forlist(hus_dates,val,cnt) { push(hus_mar,sub(marr_date,val)) push(hus_mar_id,concat(key(fam)," ",getel(hus_id,cnt))) } forlist(wif_dates,val,cnt) { push(wif_mar,sub(marr_date,val)) push(wif_mar_id,concat(key(fam)," ",getel(wif_id,cnt))) } } /* Second for each parent - child pair */ forlist(hus_dates,val,cnt) { forlist(child_dates,val1,cnt1) { push(hus_child,sub(val1,val)) push(hus_child_id, concat(key(fam)," ",getel(hus_id,cnt)," ",getel(child_id,cnt1)) ) } } forlist(wif_dates,val,cnt) { forlist(child_dates,val1,cnt1) { push(wif_child,sub(val1,val)) push(wif_child_id, concat(key(fam)," ",getel(wif_id,cnt)," ",getel(child_id,cnt1)) ) } } } forindi(indi,cnt) { if (val, get_birth_date(indi)) { if (val2,get_death_date(indi)) { push(death_ages,sub(val2,val)) push(death_ages_id,key(indi)) } } } print(nl()) if (not(dohist)) { print(" min ave max pairs keys of match",nl()) } call output(hus_mar,hus_mar_id, "Male Marriage Age ") call output(wif_mar,wif_mar_id, "Female Marriage Age") call output(hus_child,hus_child_id, "Husband-Child Age ") call output(wif_child,wif_child_id, "Wife-Child Age ") call output(death_ages,death_ages_id,"Death Age ") } proc output(alist,idlist,title) { list(hist) if (length(alist)) { set(min,getel(alist,1)) set(max,min) set(min_id,getel(idlist,1)) set(max_id,min_id) set(sum,0) forlist(alist,val,cnt) { /* compute histogram data */ set(x,div(val,365)) setel(hist,x,add(getel(hist,x),1)) if (gt(min,val)) { set(min,val) set(min_id,getel(idlist,cnt)) } if (lt(max,val)) { set(max,val) set(max_id,getel(idlist,cnt)) } incr(sum,val) } set(sum,div(sum,mul(365.0,length(alist)))) set(min,div(min,365.0)) set(max,div(max,365.0)) if (dohist) { /* generate histogram */ set(min,int(min)) set(hmax,0) forlist(hist,val,cnt) { if (gt(val,hmax)) { set(hmax,val) } } set(hincr,div(add(hmax,9),10)) set(cnt,10) while(cnt) { set(htar,add(mul(sub(cnt,1),hincr),1)) if (or(eq(cnt,10),eq(cnt,7),eq(cnt,4),eq(cnt,1))) { print(fl(d(htar),5),"+") } else { print(" |") } forlist(hist,val,cnt1) { if (ge(cnt1,min)) { if (ge(val,htar)) { if (eq(cnt1,int(sum))) { print("*") } else { print("x") } } else { print(" ") } } } print (nl()) decr(cnt) } set(cnt1,min) print( " ") while(lt(cnt1,max)) { incr(cnt1,5) print("+----") } print(nl()) print( " ") set(cnt1,sub(min,1)) while(lt(cnt1,max)) { print(fr(d(cnt1),4)) incr(cnt1,5) } print(" min ave max pairs keys of match",nl()) } print(title," ",fl(f(min),7),fl(f(sum),7),fl(f(max),8)) print(fl(d(length(alist)),6)," ",min_id," :: ",max_id,nl()) } else { if (dohist) { print(" min ave max pairs keys of match",nl()) } print(title," ",fl("-",7),fl("-",7),fl("-",8),nl()) } print(nl()) } /* fl(str,len) * insert spaces to right of str, to make it's length is at least len */ func fr(str,len) { if (lt(strlen(str),len)) { set(fil,sub(len,strlen(str))) incr(fil) } else { set(fil,1) } return(concat(str,substring(" ",1,fil))) } /* fl(str,len) * insert spaces to left of str, to make it's length at least len */ func fl(str,len) { if (lt(strlen(str),len)) { set(fil,sub(len,strlen(str))) } else { set(fil,0) } return(concat(substring(" ",1,fil),str)) } func get_marriage_date(fam) { if (m,marriage(fam)) { if (strlen(date(m))) { if (estdate) { if (index(date(m),"EST",1)) { return(0) } } extractdate(m,day,month,year) if (year) { return(julian(day,month,year)) } } } return(0) } func get_birth_date(indi) { if (b,birth(indi)) { if (strlen(date(b))) { if (estdate) { if (index(date(b),"EST",1)) { return(0) } } extractdate(b,day,month,year) if (year) { return(julian(day,month,year)) } } } return(0) } func get_death_date(indi) { if (b,death(indi)) { if (strlen(date(b))) { if (estdate) { if (index(date(b),"EST",1)) { return(0) } } extractdate(b,day,month,year) if (year) { return(julian(day,month,year)) } } } return(0) } /* * The first day that the Gregorian calendar was used in the British Empire * was Sep 14, 1752. The previous day was Sep 2, 1752 * by the Julian Calendar. The year began at March 25th before this date. * Computations not corrected for dates before Sep 14, 1752 nor necessarily * for other countries. */ func julian(day,mon,year) { if (gt(mon,2)) { set(mon,sub(mon,3)) } else { set(mon,add(mon,9)) decr(year) } set(c,div(year,100)) set(ya, sub(year,mul(100,c))) set(jd, add( div(mul(146097,c),4), add(div(mul(1461,ya),4), add(div(add(mul(153,mon),2),5), add(day, 1721119))))) /* for our usage this probably doesn't matter if (lt(jd,2361222)) { print("Warning, Attempt to compute date prior to Brittish use of Gregorian calendar\n") } */ return(jd) } lifelines-3.0.61/reports/src-rtf.ll0000700002540200244210000000324010076661060017351 0ustar prappDomain Users/* * @progname src-rtf.ll * @version none * @author Paul Buckely * @category * @output RTF * @description * * List sources in RTF, a modification of src.ll . * */ /*include ("util.ll") for using nodetag(), which is much slower*/ proc main () { set(i, 1) set(errcnt, 1) newfile(strconcat(database(),".src.rtf"),0) dayformat(0) monthformat(4) dateformat(8) /* this is used so I can sort by numeric date*/ "{\\rtf1\\ansicpg1000{\\fonttbl\\f0\\fnil Times-Roman;}\n" "\\margl720\\margr720\\margt720\\margb720\\viewkind1\n" "\\pard\\tx560\\tx2700\\tx4140\\tx5020\\f0\\b0\\i0\\fs20\\fi-5020\\li5020\\fc0\\cf0\ " "\\ul Ref#\\ulnone \t\n" "\\ul Key\\ulnone \t\n" "\\ul Entered\\ulnone \t\n" "\\ul Order\\ulnone \t\n" "\\ul Title\\ulnone \\\n" while(le(errcnt,100)) { set(skey, concat("@S",d(i),"@")) if(snode, dereference(skey)) { set(mytitle, "") set(myrefn, "") set(mydate, "") set(order, "") fornodes(snode, anode) { if(eqstr(tag(anode),"TITL")) { set(mytitle, save(value(anode))) } elsif(eqstr(tag(anode),"REFN")) { set(myrefn, save(value(anode))) } /*set(myrefn, nodetag(snode, "REFN")) this works but it's much slower*/ set(mydate, stddate(snode)) extractdate(snode, dy, mo, yr) set(order, add(mul(100,mo),add(dy,mul(2,yr)))) } d(i) "\t" myrefn "\t" mydate "\t" d(order) "\t" mytitle"\\\n" } else { set(errcnt, add(errcnt,1)) } set(i, add(i,1)) } "\\\n\\\n" "References generated " date(gettoday()) " from " concat(database(),".gedcom") " using LifeLines genealogy software.\\\n" nl() "}" } lifelines-3.0.61/reports/src.ll0000700002540200244210000000150210076661060016557 0ustar prappDomain Users/* * @progname src.ll * @version 2.0 * @author McBride * @category sample * @output text * @description Here is a report program to list SOURces. The REFN and TITL values are shown. Other tags can be added by duplicating the lines that containing "myrefn" or "REFN" and replacing them with the tag you want. To process tags that have CONTinuation lines, or tags with no values you need something more complicated. "P. McBride" */ proc main () { forsour(snode, i) { set(mytitle, "") set(myrefn, "") fornodes(root(snode), anode) { if(eqstr(tag(anode),"TITL")) { set(mytitle, save(value(anode))) } elsif(eqstr(tag(anode),"REFN")) { set(myrefn, save(value(anode))) } } myrefn "\t" key(snode) "\t" mytitle nl() } } lifelines-3.0.61/reports/ssdi-import.ll0000700002540200244210000002401310076661060020244 0ustar prappDomain Users/* * @progname ssdi-import.ll * @version 1994-11-12 * @author Kurt Baudendistel (baud@research.att.com) * @category * @output GEDCOM * @description * * Convert ssdi gedcom to lifelines-standard gedcom * * 12 NOV 1994 (3.0.1) baud@research.att.com * Derived from import-igi. */ proc main () { getstrmsg (msg, "SSDI Version [default X/1992]?") if (streq (msg, "")) { set (ssdiversion, "X") set (ssdidate, "1992") } else { if (i, index (msg, "/", 1)) { set (ssdiversion, save (trim (msg, sub (i, 1)))) set (ssdidate, save (cut (msg, add(i, 1)))) } else { set (ssdiversion, save (msg)) set (ssdidate, "") } } "0 HEAD \n" "1 SOUR LIFELINES\n" "2 VER 3.0.1\n" "2 NAME SSDI-IMPORT REPORT\n" "1 DEST LIFELINES\n" "2 VER 3.0.1\n" "1 DATE " date (gettoday ()) "\n" "1 COPR Copyright " date (gettoday ()) ". Permission is granted to repro" "duce any subset\n2 CONT of the data contained herein under the condit" "ion that this copyright\n2 CONT notice is preserved, that the origina" "l source citations referenced\n2 CONT in the subset are included, and" " that the submitter of this file is\n2 CONT credited with original au" "thorship as appropriate.\n" "1 CHAR ASCII\n" "0 @S1@ SOUR\n" "1 NAME Social Security Death Index\n" if (strlen (ssdiversion)) { "1 VER " ssdiversion "\n" } if (strlen (ssdidate)) { "1 DATE " ssdidate "\n" } print ("Processing nodes ...\n") forindi (indi, in) { print ("i") ssdiimport (indi) } "0 TRLR \n" } func ssdiimport (indi) { set (number, 0) set (residences, 0) set (root, inode (indi)) forlist (subnodes (root, "NOTE"), note, nn) { if (streq (trim (value (note), 24), "Social Security Number: ")) { set (number, save (cut (value (note), 25))) } elsif (streq (value (note), "Death Residence Localities")) { set (residences, localities (note)) } deletenode (note) } reformatnames (root, "@S1@") if (number) { set (ssn, createnode ("SSN", number)) if (birthplace, subnode (birth (indi), "PLAC")) { if (streq (value (birthplace), "Not Identified")) { set (ssnsour, createnodes ("SOUR", concat ("Issued to ", concat (fullname (indi, 0, 1, 999), ", but no location of issuance was identified.")))) } else { set (ssnsour, createnodes ("SOUR", concat ("Issued in ", concat (value (birthplace), concat (" to ", concat (fullname (indi, 0, 1, 999), ".")))))) } catnode (ssnsour, createnode ("SOUR", "@S1@")) catnode (ssn, ssnsour) } else { catnode (ssn, createnode ("SOUR", "@S1@")) } addnode (ssn, root, subnode (root, "NAME")) } if (birth (indi)) { if (birthplace, subnode (birth (indi), "PLAC")) { deletenode (birthplace) } catnode (birth (indi), createnode ("SOUR", "@S1@")) } if (death (indi)) { set (deathplace, subnode (death (indi), "PLAC")) set (zip, "an unknown") if (code, dequeue (residences)) { if (streq (trim (code, 10), "Zip Code: ")) { set (zip, save (concat ("the ", cut (code, 11)))) } else { requeue (residences, zip) } } if (rn, residences) { forlist (residences, res, rn) { catnode (death (indi), createnode ("PLAC", res)) if (and (deathplace, index (res, value (deathplace), 1))) { deletenode (deathplace) set (deathplace, 0) } } } if (and (deathplace, not (value (deathplace)))) { deletenode (deathplace) } if (rn) { if (eq (rn, 1)) { set (trailer, " zip code.") } else { set (trailer, " zip code, which encompasses the named localities.") } set (sour, createnodes ("SOUR", concat3 ("The residence at the time of death was in ", zip, trailer))) catnode (sour, createnode ("SOUR", "@S1@")) catnode (death (indi), sour) } else { catnode (death (indi), createnode ("SOUR", "@S1@")) } } gedcomnode (root) return (0) } func localities (root) { list (residences) if (root) { fornodes (root, node) { enqueue (residences, value (node)) } } return (residences) } /* common import/export functions */ func cond (x, a, b) { if (x) { return (a) } else { return (b) } } func gedcomnode (root) { traverse (root, node, level) { d (level) if (x, xref (node)) { " " x } if (x, tag (node)) { " " x } if (x, value (node)) { " " x } "\n" } return (0) } func denull (alist) { list (blist) forlist (alist, a, an) { if (a) { enqueue (blist, a) } } return (blist) } func reformatdates (root) { traverse (root, node, level) { if (streq (tag (node), "DATE")) { if (v, value (node)) { if (and (eq (index (v, "<", 1), 1), eq (index (v, ">", 1), strlen (v)))) { replacenode (createnode ("DATE", save (substring (v, 2, sub (strlen (v), 1)))), subnode (node, "DATE")) } } } } return (0) } func reformatnames (root, sourcetext) { list (namelist) list (surnamelist) list (choppedsurnamelist) list (newchoppedsurnamelist) if (namenode, subnode (root, "NAME")) { extractnames (namenode, namelist, nameN, surnameN) set (lastnamenode, namenode) forlist (namelist, s, sn) { set (s, strremove (s, ".")) set (s, strremove (s, "_")) setel (namelist, sn, s) } enqueue (surnamelist, getel (namelist, surnameN)) while (surname, dequeue (surnamelist)) { set (choppedsurnamelist, strchop (surname, " ")) forlist (choppedsurnamelist, s, sn) { if (streq ("VON", s)) { enqueue (newchoppedsurnamelist, s) } elsif (streq ("DER", s)) { enqueue (newchoppedsurnamelist, s) } elsif (and (eq (index (s, "(", 1), 1), eq (index (s, ")", 1), strlen (s)))) { enqueue (surnamelist, save (substring (s, 2, sub (strlen (s), 1)))) } else { enqueue (newchoppedsurnamelist, save (capitalize (lower (s)))) } } set (newsurname, strjoin (newchoppedsurnamelist, " ")) if (strlen (newsurname)) { if (i, index (newsurname, "Mc ", 1)) { set (newsurname, save (concat (trim (newsurname, add (i, 1)), cut (newsurname, add (i, 3))))) } set (newsurname, save (concat3 ("/", newsurname, "/"))) } setel (namelist, surnameN, newsurname) set (newnamenode, createnode ("NAME", strjoin (namelist, " "))) addnode (newnamenode, parent (lastnamenode), lastnamenode) if (sourcetext) { catnode (newnamenode, createnode ("SOUR", sourcetext)) } set (lastnamenode, newnamenode) } deletenode (namenode) } return (0) } func streq (x, y) { return (not (strcmp (x, y))) } func createnodes (tag, text) { set (text, trimspaces (text)) if (le (strlen (text), 72)) { return (createnode (tag, text)) } else { list (textlist) while (gt (strlen (text), 72)) { set (n, 1) if (i, index (text, " ", n)) { set (j, i) } else { set (j, add (strlen (text), 1)) } while (and (i, lt (i, 73))) { incr (n) set (j, i) set (i, index (text, " ", n)) } enqueue (textlist, save (trim (text, sub (j, 1)))) set (text, save (cut (text, add (j, 1)))) } if (gt (strlen (text), 0)) { enqueue (textlist, text) } set (root, createnode (tag, dequeue (textlist))) set (lastnode, 0) forlist (textlist, text, tn) { set (node, createnode ("CONT", text)) addnode (node, root, lastnode) set (lastnode, node) } return (root) } } func trimspaces (text) { set (ss, 0) set (s0, 1) set (sn, strlen (text)) while (and (le (s0, sn), streq (substring (text, s0, s0), " "))) { set (ss, 1) incr (s0) } while (and (le (s0, sn), streq (substring (text, sn, sn), " "))) { set (ss, 1) decr (sn) } if (ss) { return (save (substring (text, s0, sn))) } else { return (text) } } func catnode (root, newnode) { if (root) { set (lastnode, 0) fornodes (root, node) { set (lastnode, node) } addnode (newnode, root, lastnode) } return (0) } func strchop (s, d) { list (slist) set (dn, strlen (d)) if (strlen (s)) { set (n, 1) set (s0, 1) while (sn, index (s, d, n)) { enqueue (slist, save (substring (s, s0, sub (sn, 1)))) set (s0, add (sn, dn)) incr (n) } enqueue (slist, save (cut (s, s0))) } return (slist) } func strjoin (slist, d) { forlist (slist, s, sn) { if (not (strlen (str))) { set (str, s) } elsif (strlen (s)) { set (str, save (concat3 (str, d, s))) } } return (str) } func subnode (root, tag) { if (root) { fornodes (root, node) { if (streq (tag (node), tag)) { return (node) } } } return (0) } func subnodes (root, tag) { list (nodelist) if (root) { fornodes (root, node) { if (streq (tag (node), tag)) { enqueue (nodelist, node) } } } return (nodelist) } func replacenode (newnode, oldnode) { if (newnode) { if (root, parent (oldnode)) { addnode (newnode, root, oldnode) deletenode (oldnode) } } return (0) } func concat3 (x, y, z) { return (concat (x, concat (y, z))) } func cut (s, n) { return (substring (s, n, strlen (s))) } func values (root) { if (root) { set (str, value (root)) fornodes (root, node) { if (not (str)) { set (str, value (node)) } elsif (strlen (value (node))) { set (str, save (concat3 (str, " ", value (node)))) } } return (str) } else { return (0) } } func strremove (s, d) { if (strlen (s)) { while (i, index (s, d, 1)) { set (s, save (concat (trim (s, sub (i, 1)), cut (s, add (i, 1))))) } } return (s) } lifelines-3.0.61/reports/ssdi-search-list.ll0000700002540200244210000001043110076661060021147 0ustar prappDomain Users/* * @progname ssdi-search-list.ll * @version 1.0 * @author Larry Soule (lsoule@ikos.com) * @category * @output Text * @description * * This LifeLines report program searches for individuals in the database * that are missing some birth or death information that may be in the * social security death index (SSDI). Right now this searches for: * 1. Deaths after 1960 that do not have locations * 2. Births after 1880 with no death event * * These two sets of people are sorted by name and printed out in the * report in ASCII. * * The first set of people, those with deaths after 1960 that do not * have locations, is the most promising to search for. The second set * right now contains many living people but also other possible * entries in the SSDI. * * The social security death index is available at your local Family History * Library or on-line at http://www.ancestry.com/ssdi/ * * Version 1.0 - November 1996, Larry Soule (lsoule@ikos.com) * * Sample report output (note: all spouses are listed for female individuals * since they may be listed under their maiden name, or any other married name) * 2207 individuals in the database. 52 have known death dates but not locations. 331 have known birth dates but no death dates or locations. **** List of individuals with death dates but not locations Charles Edwin ALBRIDGE b. 27 NOV 1915 Pennsylvania d. 03 DEC 1981 Evelyn Carter ALBRIDGE b. 26 MAR 1905 Pennsylvania d. 06 OCT 1982 Married to Chester Goy RAVER ... **** List of individuals with birth dates but not death dates or location Alice Alamanda ALBRIDGE b. 04 FEB 1902 Easton, Northampton Co., PA d. ... */ /* These two sets are built up */ global(missingDeathPlaceSet) global(missingDeathEventSet) proc main() { /* Generate the two sets of people */ call generateSetToSearch() /* Now print the two sets */ "**** List of individuals with death dates but not locations" nl() call printSet(missingDeathPlaceSet) nl() nl() "**** List of individuals with birth dates but not death dates or location" nl() call printSet(missingDeathEventSet) } /* * Generate the two sets of individuals */ proc generateSetToSearch() { indiset(missingDeathPlaceSet) indiset(missingDeathEventSet) forindi(indi_v, count_v) { set(deathEv, death(indi_v)) set(birthEv, birth(indi_v)) if (deathEV, death(indi_v)) { /* * A death record exists - see if the location is empty and * the date is after 1960 */ if (and(eq(0, strlen(place(deathEv))), gt(atoi(year(deathEv)), 1960))) { addtoset(missingDeathPlaceSet, indi_v, 0) } } else { /* * No death record exists - see if the birth year * is after 1880 */ if (birthEV, birth(indi_v)){ if (gt(atoi(year(birthEv)), 1880)) { addtoset(missingDeathEventSet, indi_v, 0) } } } } /* Output some statistics */ d(count_v) " individuals in the database." nl() d(lengthset(missingDeathPlaceSet)) " have known death dates but not locations." nl() d(lengthset(missingDeathEventSet)) " have known birth dates but no death dates or locations." nl() nl() /* Sort the two sets by name */ namesort(missingDeathPlaceSet) namesort(missingDeathEventSet) } /* * Print the set of individuals passed in the argument printSet. * This uses a simple name, birth, death format, followed by a list * of spouses for females */ proc printSet(printSet) { forindiset(printSet, personIndi, personValue, iteration) { set(birthEv, birth(personIndi)) set(deathEv, death(personIndi)) fullname(personIndi, 1, 1, 30) col(30) " b. " date(birthEv) col(50) place(birthEv) nl() col(30) " d. " date(deathEv) col(50) place(deathEv) nl() if (female(personIndi)) { if (gt(nspouses(personIndi), 0)) { spouses(personIndi, spouse_v, fam_v, count) { " Married to " name(spouse_v) nl() } } } nl() } } lifelines-3.0.61/reports/ssdi_aid.ll0000700002540200244210000002452710565726616017577 0ustar prappDomain Users/* * @progname ssdi_aid.ll * @version 3 * @author Jim Eggert (eggertj@ll.mit.edu) * @category * @output Text * @description This LifeLines report program generates a text file that lists people who are likely to be in the Social Security Death Index. The SSDI starts in 1962 and is periodically updated to include more recent years. This program guesses birth and death years to make its determinations. If it finds a person likely to be in the SSDI, it searches for the string SSDI in their notes to indicate that an SSDI entry has already been found. If not, it outputs a line about that person. The output persons are in database order. Women are output in with their last married name. To alphabetize the names in the text report, you can use Unix sort: sort -b +1 ss.out > ss.sort The program optionally generates HTML output with buttons to search the Rootsweb online SSDI database. ssdi_aid - a LifeLines program to aid in the use of the U.S. Social Security Death Index by Jim Eggert (eggertj@ll.mit.edu) Version 1, 28 June 1995 Version 2, 22 November 1996 Version 3, 11 January 2005 (changed to Rootsweb site) */ global(byear_delta) global(byear_est) global(byear_est_delta) global(mother_age) global(father_age) global(years_between_kids) global(oldage) proc main() { indiset(pset) set(mother_age,23) /* assumed age of first motherhood */ set(father_age,25) /* assumed age of first fatherhood */ set(years_between_kids,2) /* assumed years between children */ set(oldage,90) /* normal maximum death age */ set(byearstart,1850) /* no one born before then can be in the SSDI */ set(unknownname,"<") /* for women, any spouse whose surname contains this is considered to have an unknown surname */ getindi(person) while(person) { addtoset(pset,person,1) getindi(person) } getintmsg(minage,"Enter minimum age for listing:") getintmsg(html,"Enter 0 for text, 1 for html output:") if (html) { getintmsg(includebyears,"Enter 1 to include birth years in database query") "\n" "\n" " SSDI Aid Report \n" "\n" "\n" "Press a button to query Rootsweb's online SSDI database for that individual." "
    \n" } set(namewidth,50) /* change this value as needed */ "key" col(8) "@LAST, First Middle [MAIDEN]" set(bcol,add(8,namewidth)) col(bcol) "Birthdate" set(dcol,add(25,namewidth)) col(dcol) "Death\n" print("Finding descendants") set(pset,union(pset,spouseset(pset))) set(pset,union(pset,descendantset(pset))) print("' spouses") set(pset,union(pset,spouseset(pset))) print("' descendants") set(pset,union(pset,descendantset(pset))) print("... done.\n") set(thisyear,atoi(year(gettoday()))) set(byearend,sub(thisyear,minage)) print("Traversing individuals...") forindiset(pset,person,pval,pnum) { set(star,1) fornotes(inode(person),note) { if (index(note,"SSDI:",1)) { set(star,0) } } if (star) { set(byear,0) set(bdate,"") if (b,birth(person)) { extractdate(b,bday,bmonth,byear) set(bdate,date(b)) } if (not(byear)) { if (b,baptism(person)) { set(bdate,date(b)) } } call estimate_byear(person) /* set(byear,sub(byear_est,byear_est_delta)) */ if(and(byear_est,not(strlen(bdate)))) { set(bdate,save(concat("c ",d(byear_est)))) } set(dyear,0) if (d,death(person)) { extractdate(d,dday,dmonth,dyear) } if (not(dyear)) { if(d,burial(person)) { extractdate(d,dday,dmonth,dyear) } } if (dyear) { if (or(index(date(d),"ABT",1),eq(dmonth,0))) { set(dyear,add(dyear,5)) } if (index(date(d),"AFT",1)) { set(oldyear,add(byear,oldage)) if (gt(oldyear,dyear)) { set(dyear,oldyear) } } } if (or(ge(dyear,1940), and(not(dyear),le(byear,byearend),ge(byear,byearstart)))) { set(nfam,nfamilies(person)) set(myname,fullname(person,1,0,namewidth)) set(mysurname,surname(person)) if (and(female(person),ne(nfam,0))) { set(maidenname,save(concat(", ",fullname(person,1,1,100)))) families(person,fam,spouse,famnum) { if (spousesurname,surname(spouse)) { if (strlen(spousesurname)) { if (not(index(spousesurname,unknownname,1))) { set(mysurname,spousesurname) set(myname, trim(concat(upper(spousesurname),maidenname),namewidth)) if (ne(famnum,nfam)) { set(myname, trim(concat("+",myname),namewidth)) } } } } } } if (html) { "
    " if (includebyears) { if (lt(byear_est_delta,2)) { "" } } "" } else { key(person) col(8) } myname if (html) { " " bdate " " long(d) "
    " } else { col(bcol) bdate col(dcol) long(d) } nl() } } } if (html) { "\n" "\n" } } proc estimate_byear(person) { set(byear_est,0) set(byear_est_delta,neg(1)) if (byear,get_byear(person)) { set(byear_est,byear) set(byear_est_delta,byear_delta) } else { /* estimate from siblings */ set(older,person) set(younger,person) set(yeardiff,0) set(border,0) set(this_uncertainty,1) while (and(not(byear_est),or(older,younger))) { set(older,prevsib(older)) set(younger,nextsib(younger)) set(yeardiff,add(yeardiff,years_between_kids)) set(this_uncertainty,add(this_uncertainty,1)) if (older) { set(border,add(border,1)) if (byear,get_byear(older)) { set(byear_est,add(byear,yeardiff)) set(byear_est_delta,this_uncertainty) } } if (and(not(byear_est),younger)) { if (byear,get_byear(younger)) { set(byear_est,sub(byear,yeardiff)) set(byear_est_delta,this_uncertainty) } } } } if (not(byear_est)) { /* estimate from parents' marriage */ if (m,marriage(parents(person))) { extractdate(m,bd,bm,my) } if (my) { set(byear_est,add(add(my,mul(years_between_kids,border)),1)) set(byear_est_delta,add(border,1)) } } if (not(byear_est)) { /* estimate from first marriage */ families(person,fam,spouse,fnum) { if (eq(fnum,1)) { if (b,birth(spouse)) { extractdate(b,bd,bm,by) } if (m,marriage(fam)) { extractdate(m,bd,bm,my) } if (by) { if (female(person)) { set(byear_est,add(by,sub(father_age,mother_age))) } else { set(byear_est,sub(by,sub(father_age,mother_age))) } set(byear_est_delta,5) } elsif (my) { if (female(person)) { set(byear_est,sub(my,mother_age)) } else { set(byear_est,sub(my,father_age)) } set(byear_est_delta,5) } else { children(fam,child,cnum) { if (not(byear_est)) { if (byear,get_byear(child)) { if (female(person)) { set(byear_est,sub(sub(byear, mul(sub(cnum,1),years_between_kids)), mother_age)) } else { set(byear_est,sub(sub(byear, mul(sub(cnum,1),years_between_kids)), father_age)) } set(byear_est_delta,add(5,cnum)) } } } } } } } if (not(byear_est)) { /* estimate from parents' birthyear */ if (byear,get_byear(mother(person))) { set(byear_est,add(byear,mother_age)) } else { if (byear,get_byear(father(person))) { set(byear_est,add(byear,father_age)) } } if (byear) { set(byear_est_delta,5) set(older,person) while(older,prevsib(older)) { set(byear_est,add(byear_est,years_between_kids)) set(byear_est_delta,add(byear_est_delta,1)) } } } } func get_byear(person) { set(byear,0) if (person) { if (b,birth(person)) { extractdate(b,day,month,byear) } if (byear) { set(byear_delta,0) set(dstring,trim(date(b),3)) if (not(strcmp(dstring,"BEF"))) { set(byear_delta,3) } elsif (not(strcmp(dstring,"AFT"))) { set(byear_delta,3) } elsif (not(strcmp(dstring,"ABT"))) { set(byear_delta,2) } } else { if (b,baptism(person)) { extractdate(b,day,month,byear) } if (byear) { set(byear_delta,1) set(dstring,trim(date(b),3)) if (not(strcmp(dstring,"BEF"))) { set(byear_delta,3) } elsif (not(strcmp(dstring,"AFT"))) { set(byear_delta,3) } elsif (not(strcmp(dstring,"ABT"))) { set(byear_delta,2) } } } } return(byear) } lifelines-3.0.61/reports/st/0000700002540200244210000000000010657071735016075 5ustar prappDomain Userslifelines-3.0.61/reports/st/Makefile.am0000700002540200244210000000566210355541372020137 0ustar prappDomain Users# This makefile is for the lifelines reports AUTOMAKE_OPTIONS = no-dependencies # SELFTEST_REPORTS is to hold all parts of the self-test scripts SELFTEST_REPORTS = st_all.ll \ st_aux.li \ st_collate.li \ st_collate_8859-1.li \ st_collate_UTF-8.li \ st_convert.li \ st_date.li \ st_db.li \ st_list.li \ st_name.li \ st_number.li \ st_string.li \ st_string_UTF-8.li \ st_table.li \ trigtest.ll SELFTEST_REFERENCE = st_all.ref st_all_stdout.ref TEST_ITER_REPORTS = test_forindi.ll test_forfam.ll test_indi_it.ll \ test_fam_it.ll test_othr_it.ll trigtest.ll TEST_ITER_REFERENCE = test_forindi.ref test_forfam.ref test_indi_it.ref \ test_fam_it.ref test_othr_it.ref trigtest.ref TEST_ITER_DB = ti.ged TEST_OUTPUTS =test_forindi.out test_forfam.out test_indi_it.out \ test_fam_it.out test_othr_it.out st_all.out \ st_all.stdout TESTS = selftest pkg_REPORTS = $(SELFTEST_REPORTS) \ $(TEST_ITER_REPORTS) EXTRA_DIST = $(SELFTEST_REPORTS) $(SELFTEST_REFERENCE) \ $(TEST_ITER_REPORTS) $(TEST_ITER_REFERENCE) $(TEST_ITER_DB) CLEANFILES = $(TEST_OUTPUTS) errs.log llines.leak_log selftest LLEXEC = ../../src/liflines/llexec LLINES = ../../src/liflines/llines .PHONY: local test_iter st_all selftest selftest: ti test_iter st_all local: $(TEST_ITER_DB) $(TEST_ITER_REPORTS) $(SELFTEST_REPORTS) ln -fs /bin/true selftest for i in $? ; do \ dest=`basename $$i` ;\ if [ $$dest != $$i ] ; then \ cp $$i $$dest ; \ fi ;\ done ti: local ti.ged $(LLINES) rm -rf ti (echo yurti ; echo yyq) | $(LLINES) ./ti > /dev/null test_iter: $(TEST_ITER_REPORTS) $(TEST_ITER_REFERENCE) $(TEST_ITER_DB) $(LLEXEC) @for i in $(TEST_ITER_REPORTS) ; do \ this=`basename $$i .ll` ;\ echo "$(LLEXEC) ./ti -x ./$$this.ll > $$this.out" ;\ $(LLEXEC) ./ti -x ./$$this.ll > $$this.out;\ if diff $$this.out $(srcdir)/$$this.ref >/dev/null ; then\ : echo "ok" ; \ else \ echo "test $$i failed - to see failure execute" ; \ echo "diff $$this.out $(srcdir)/$$this.ref" ; \ ln -fs /bin/false selftest ;\ fi \ done st_all: $(SELFTEST_REPORTS) $(LLEXEC) (echo 1; echo 1 ;echo 0 ; echo st_all.out) | \ $(LLEXEC) ./ti -x ./st_all.ll > st_all.stdout @if diff st_all.out $(srcdir)/st_all.ref >/dev/null ; then\ : echo "test st_all output ok" ; \ else \ echo "test st_all output failed - to see failure execute" ; \ echo "diff st_all.out $(srcdir)/st_all.ref" ; \ ln -fs /bin/false selftest ;\ fi @if diff st_all.stdout $(srcdir)/st_all_stdout.ref >/dev/null ; then\ : echo "test st_all stdout ok" ; \ else \ echo "test st_all failed - to see failure execute" ; \ echo "diff st_all.stdout $(srcdir)/st_all_stdout.ref" ; \ ln -fs /bin/false selftest ;\ fi lifelines-3.0.61/reports/st/Makefile.in0000700002540200244210000003505710656416635020160 0ustar prappDomain Users# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This makefile is for the lifelines reports srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ LIBOBJDIR = subdir = reports/st DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/gettext/codeset.m4 \ $(top_srcdir)/build/gettext/gettext.m4 \ $(top_srcdir)/build/gettext/glibc21.m4 \ $(top_srcdir)/build/gettext/iconv.m4 \ $(top_srcdir)/build/gettext/intdiv0.m4 \ $(top_srcdir)/build/gettext/inttypes-pri.m4 \ $(top_srcdir)/build/gettext/inttypes.m4 \ $(top_srcdir)/build/gettext/inttypes_h.m4 \ $(top_srcdir)/build/gettext/isc-posix.m4 \ $(top_srcdir)/build/gettext/lcmessage.m4 \ $(top_srcdir)/build/gettext/lib-ld.m4 \ $(top_srcdir)/build/gettext/lib-link.m4 \ $(top_srcdir)/build/gettext/lib-prefix.m4 \ $(top_srcdir)/build/gettext/progtest.m4 \ $(top_srcdir)/build/gettext/stdint_h.m4 \ $(top_srcdir)/build/gettext/uintmax_t.m4 \ $(top_srcdir)/build/gettext/ulonglong.m4 \ $(top_srcdir)/build/autotools/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/build/autotools/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = depcomp = am__depfiles_maybe = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOCS_TARGET = @DOCS_TARGET@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POSUB = @POSUB@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SGMLTOOLS = @SGMLTOOLS@ SHELL = @SHELL@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ YACC = @YACC@ YFLAGS = @YFLAGS@ ac_ct_CC = @ac_ct_CC@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = no-dependencies # SELFTEST_REPORTS is to hold all parts of the self-test scripts SELFTEST_REPORTS = st_all.ll \ st_aux.li \ st_collate.li \ st_collate_8859-1.li \ st_collate_UTF-8.li \ st_convert.li \ st_date.li \ st_db.li \ st_list.li \ st_name.li \ st_number.li \ st_string.li \ st_string_UTF-8.li \ st_table.li \ trigtest.ll SELFTEST_REFERENCE = st_all.ref st_all_stdout.ref TEST_ITER_REPORTS = test_forindi.ll test_forfam.ll test_indi_it.ll \ test_fam_it.ll test_othr_it.ll trigtest.ll TEST_ITER_REFERENCE = test_forindi.ref test_forfam.ref test_indi_it.ref \ test_fam_it.ref test_othr_it.ref trigtest.ref TEST_ITER_DB = ti.ged TEST_OUTPUTS = test_forindi.out test_forfam.out test_indi_it.out \ test_fam_it.out test_othr_it.out st_all.out \ st_all.stdout TESTS = selftest pkg_REPORTS = $(SELFTEST_REPORTS) \ $(TEST_ITER_REPORTS) EXTRA_DIST = $(SELFTEST_REPORTS) $(SELFTEST_REFERENCE) \ $(TEST_ITER_REPORTS) $(TEST_ITER_REFERENCE) $(TEST_ITER_DB) CLEANFILES = $(TEST_OUTPUTS) errs.log llines.leak_log selftest LLEXEC = ../../src/liflines/llexec LLINES = ../../src/liflines/llines all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu reports/st/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu reports/st/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh uninstall-info-am: tags: TAGS TAGS: ctags: CTAGS CTAGS: check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list='$(TESTS)'; \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *" $$tst "*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ echo "XPASS: $$tst"; \ ;; \ *) \ echo "PASS: $$tst"; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *" $$tst "*) \ xfail=`expr $$xfail + 1`; \ echo "XFAIL: $$tst"; \ ;; \ *) \ failed=`expr $$failed + 1`; \ echo "FAIL: $$tst"; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ echo "SKIP: $$tst"; \ fi; \ done; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="All $$all tests passed"; \ else \ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all tests failed"; \ else \ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ skipped="($$skip tests were not run)"; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ echo "$$dashes"; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: all all-am check check-TESTS check-am clean clean-generic \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-data install-data-am \ install-exec install-exec-am install-info install-info-am \ install-man install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-info-am .PHONY: local test_iter st_all selftest selftest: ti test_iter st_all local: $(TEST_ITER_DB) $(TEST_ITER_REPORTS) $(SELFTEST_REPORTS) ln -fs /bin/true selftest for i in $? ; do \ dest=`basename $$i` ;\ if [ $$dest != $$i ] ; then \ cp $$i $$dest ; \ fi ;\ done ti: local ti.ged $(LLINES) rm -rf ti (echo yurti ; echo yyq) | $(LLINES) ./ti > /dev/null test_iter: $(TEST_ITER_REPORTS) $(TEST_ITER_REFERENCE) $(TEST_ITER_DB) $(LLEXEC) @for i in $(TEST_ITER_REPORTS) ; do \ this=`basename $$i .ll` ;\ echo "$(LLEXEC) ./ti -x ./$$this.ll > $$this.out" ;\ $(LLEXEC) ./ti -x ./$$this.ll > $$this.out;\ if diff $$this.out $(srcdir)/$$this.ref >/dev/null ; then\ : echo "ok" ; \ else \ echo "test $$i failed - to see failure execute" ; \ echo "diff $$this.out $(srcdir)/$$this.ref" ; \ ln -fs /bin/false selftest ;\ fi \ done st_all: $(SELFTEST_REPORTS) $(LLEXEC) (echo 1; echo 1 ;echo 0 ; echo st_all.out) | \ $(LLEXEC) ./ti -x ./st_all.ll > st_all.stdout @if diff st_all.out $(srcdir)/st_all.ref >/dev/null ; then\ : echo "test st_all output ok" ; \ else \ echo "test st_all output failed - to see failure execute" ; \ echo "diff st_all.out $(srcdir)/st_all.ref" ; \ ln -fs /bin/false selftest ;\ fi @if diff st_all.stdout $(srcdir)/st_all_stdout.ref >/dev/null ; then\ : echo "test st_all stdout ok" ; \ else \ echo "test st_all failed - to see failure execute" ; \ echo "diff st_all.stdout $(srcdir)/st_all_stdout.ref" ; \ ln -fs /bin/false selftest ;\ fi # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lifelines-3.0.61/reports/st/st_all.ll0000700002540200244210000000361510177562121017703 0ustar prappDomain Users/* * @progname st_all.ll * @version 1.14 (2005-02-01) * @author Perry Rapp * @category self-test * @output mixed * @description calls all self-test modules, Validates report language functions, and optionally dumps various data to a file (to exercise db functions). Perry is using this for a a regression test. TODO: more conversion tests TODO: logic TODO: non-ASCII dates TODO: Flag date tests for gedcom legal vs illegal */ char_encoding("ASCII") require("lifelines-reports.version:1.3") option("explicitvars") /* Disallow use of undefined variables */ include("st_string.li") include("st_string_UTF-8.li") include("st_collate.li") include("st_date.li") include("st_name.li") include("st_number.li") include("st_convert.li") include("st_list.li") include("st_table.li") include("st_db.li") global(true) global(dbuse) proc main() { set(true,1) getint(alltests, "Run all tests ? (1=yes, 0=prompt)") getint(dbuse, "Exercise db functions ? (0=no)") getint(logout, "Output errors to file (0=no)") if (dostep(alltests, "Test collation ? (0=no)")) { call testCollate() } if (dostep(alltests, "Test strings ? (0=no)")) { call testStrings() } if (dostep(alltests, "Test lists ? (0=no)")) { call testLists() } if (dostep(alltests, "Test tables ? (0=no)")) { call testTables() } if (dostep(alltests, "Test UTF-8strings ? (0=no)")) { call testStrings_UTF_8() } if (dostep(alltests, "Test numbers ? (0=no)")) { call testNums() } if (dostep(alltests, "Test names ? (0=no)")) { call testNames() } if (dostep(alltests, "Test dates ? (0=no)")) { call testDates() } if (dostep(alltests, "Test codeset conversion ? (0=no)")) { call testConvert() } if (dbuse) { call exerciseDb() } } /* should we perform this step ? prompt if not doing all */ func dostep(alltests, prompt) { if (alltests) { return(true) } getint(doit, prompt) return(doit) } lifelines-3.0.61/reports/st/st_all.ref0000700002540200244210000000715710341516554020057 0ustar prappDomain Usersdatabase: ti version: 3.0.49 *** PERSONS *** Henrich SCHMIDT 1 Johan Joseph SCHMIDT 2 name: Johan Joseph SCHMIDT title: key: I1 fullname(12): J J SCHMIDT surname: Schmidt givens: Johan Joseph trimname(8): J Schmidt birth: BIRT DATE 11 Oct 18600 @I1@ INDI 1 NAME Johan Joseph /Schmidt/ 1 SEX M 1 BIRT 2 DATE 11 Oct 1860 1 FAMC @F1@ 0 @I2@ INDI 1 NAME Johan /Schmidt/ 1 SEX M 1 BIRT 2 DATE EST 1829 2 PLAC 1 DEAT 2 DATE 4 Sep 1885 2 PLAC 1 FAMC @F7@ 1 FAMS @F1@ 0 @I3@ INDI 1 NAME Maria Joseph /Saurborn/ 1 SEX F 1 BIRT 2 DATE 1 Aug 1826 2 PLAC 1 DEAT 2 DATE 2 PLAC 1 FAMS @F1@ 0 @I4@ INDI 1 NAME Henrich Schmidt 1 FAMC @F1@ 0 @I6@ INDI 1 NAME Belmont Smith 1 FAMS @F2@ 0 @I7@ INDI 1 NAME Charlene Wilson 1 FAMS @F2@ 0 @I9@ INDI 1 NAME Abraham Belmont 1 FAMS @F2@ Live INDI: 7 Dead INDI: 3 *** FAMILIES *** 0 @F1@ FAM 1 HUSB @I2@ 1 WIFE @I3@ 1 CHIL @I1@ 1 CHIL @I4@ 0 @F2@ FAM 1 HUSB @I6@ 1 WIFE @I7@ 1 HUSB @I9@ 1 CHIL @I11@ 0 @F5@ FAM 1 HUSB @I10@ 1 WIFE @I11@ 0 @F7@ FAM 1 WIFE @I12@ 1 WIFE @I11@ 1 CHIL @I2@ Live FAM: 4 Dead FAM: 0 *** SOURCES *** 0 @S1@ SOUR 0 @S3@ SOUR *** EVENTS *** 0 @E1@ EVEN 1 INDI 2 ROLE event 0 @E3@ EVEN 1 INDI 2 ROLE event2 *** OTHERS *** 0 @X1@ NOTE 0 @X3@ NOTE *** GENGEDCOM *** 0 @I1@ INDI 1 NAME Johan Joseph /Schmidt/ 1 SEX M 1 BIRT 2 DATE 11 Oct 1860 1 FAMC @F1@ 0 @I2@ INDI 1 NAME Johan /Schmidt/ 1 SEX M 1 BIRT 2 DATE EST 1829 2 PLAC 1 DEAT 2 DATE 4 Sep 1885 2 PLAC 1 SOUR 1 FAMS @F1@ 0 @I3@ INDI 1 NAME Maria Joseph /Saurborn/ 1 SEX F 1 BIRT 2 DATE 1 Aug 1826 2 PLAC 1 DEAT 2 DATE 2 PLAC 1 SOUR 1 FAMS @F1@ 0 @I4@ INDI 1 NAME Henrich /Schmidt/ 1 SEX M 1 BIRT 2 DATE CAL 1900 1 FAMC @F1@ 0 @I6@ INDI 1 NAME Belmont /Smith/ 1 SEX M 1 FAMS @F2@ 0 @I7@ INDI 1 NAME Charlene /Wilson/ 1 SEX F 1 FAMS @F2@ 0 @I9@ INDI 1 NAME Abraham /Belmont/ 1 SEX M 1 SOUR @S1@ 1 FAMS @F2@ 0 @F1@ FAM 1 HUSB @I2@ 1 WIFE @I3@ 1 MARR 2 DATE 15 Feb 1859 2 PLAC 2 SOUR 1 CHIL @I1@ 1 CHIL @I4@ 0 @F2@ FAM 1 HUSB @I6@ 1 WIFE @I7@ 1 HUSB @I9@ 1 MARR 2 DATE 2 PLAC 2 SOUR 1 CHIL @I11@ *** GENGEDCOMWEAK *** 0 @I1@ INDI 1 NAME Johan Joseph /Schmidt/ 1 SEX M 1 BIRT 2 DATE 11 Oct 1860 1 FAMC @F1@ 0 @I2@ INDI 1 NAME Johan /Schmidt/ 1 SEX M 1 BIRT 2 DATE EST 1829 2 PLAC 1 DEAT 2 DATE 4 Sep 1885 2 PLAC 1 SOUR 1 FAMS @F1@ 0 @I3@ INDI 1 NAME Maria Joseph /Saurborn/ 1 SEX F 1 BIRT 2 DATE 1 Aug 1826 2 PLAC 1 DEAT 2 DATE 2 PLAC 1 SOUR 1 FAMS @F1@ 0 @I4@ INDI 1 NAME Henrich /Schmidt/ 1 SEX M 1 BIRT 2 DATE CAL 1900 1 FAMC @F1@ 0 @I6@ INDI 1 NAME Belmont /Smith/ 1 SEX M 1 FAMS @F2@ 0 @I7@ INDI 1 NAME Charlene /Wilson/ 1 SEX F 1 FAMS @F2@ 0 @I9@ INDI 1 NAME Abraham /Belmont/ 1 SEX M 1 FAMS @F2@ 0 @F1@ FAM 1 HUSB @I2@ 1 WIFE @I3@ 1 MARR 2 DATE 15 Feb 1859 2 PLAC 2 SOUR 1 CHIL @I1@ 1 CHIL @I4@ 0 @F2@ FAM 1 HUSB @I6@ 1 WIFE @I7@ 1 HUSB @I9@ 1 MARR 2 DATE 2 PLAC 2 SOUR *** GENGEDCOMSTRONG *** 0 @I1@ INDI 1 NAME Johan Joseph /Schmidt/ 1 SEX M 1 BIRT 2 DATE 11 Oct 1860 1 FAMC @F1@ 0 @I2@ INDI 1 NAME Johan /Schmidt/ 1 SEX M 1 BIRT 2 DATE EST 1829 2 PLAC 1 DEAT 2 DATE 4 Sep 1885 2 PLAC 1 SOUR 1 FAMS @F1@ 0 @I3@ INDI 1 NAME Maria Joseph /Saurborn/ 1 SEX F 1 BIRT 2 DATE 1 Aug 1826 2 PLAC 1 DEAT 2 DATE 2 PLAC 1 SOUR 1 FAMS @F1@ 0 @I4@ INDI 1 NAME Henrich /Schmidt/ 1 SEX M 1 BIRT 2 DATE CAL 1900 1 FAMC @F1@ 0 @I6@ INDI 1 NAME Belmont /Smith/ 1 SEX M 1 FAMS @F2@ 0 @I7@ INDI 1 NAME Charlene /Wilson/ 1 SEX F 1 FAMS @F2@ 0 @I9@ INDI 1 NAME Abraham /Belmont/ 1 SEX M 1 SOUR @S1@ 1 FAMS @F2@ 0 @F1@ FAM 1 HUSB @I2@ 1 WIFE @I3@ 1 MARR 2 DATE 15 Feb 1859 2 PLAC 2 SOUR 1 CHIL @I1@ 1 CHIL @I4@ 0 @F2@ FAM 1 HUSB @I6@ 1 WIFE @I7@ 1 HUSB @I9@ 1 MARR 2 DATE 2 PLAC 2 SOUR 0 @S1@ SOUR 1 NOTE a source lifelines-3.0.61/reports/st/st_all_stdout.ref0000700002540200244210000000264210341652771021455 0ustar prappDomain UsersProgram is running...Run all tests ? (1=yes, 0=prompt) enter integer:Exercise db functions ? (0=no) enter integer:Output errors to file (0=no) enter integer:finnish_UTF-8 strcmp([ydia],z) FAILED strcmp([udia],z) FAILED strcmp([eth],e) FAILED polish_UTF-8 strcmp(L,[Lstroke]) FAILED spanish_UTF-8 strcmp([Ntilde],O) FAILED finnish_8859-1 strcmp([ydia],z) FAILED strcmp([udia],z) FAILED strcmp([eth],e) FAILED spanish_8859-1 strcmp([Ntilde],O) FAILED Passed 31/40 collate tests ord(5) FAILED Passed 38/39 string tests Passed 28/28 list tests Passed 9/9 table tests upper(oe) FAILED lower(oe) FAILED Passed 20/22 string UTF-8 tests Passed 27/27 number tests Passed 10/10 name tests Passed 598/598 date tests convertcode(bytecode($C5$81,raw),UTF-8,ANSEL) <> bytecode($A1,raw) FAILURE convertcode(bytecode($A1,raw),ANSEL,UTF-8) <> bytecode($C5$81,raw) FAILURE convertcode(bytecode($C3$A6,raw),UTF-8,ANSEL) <> bytecode($B5,raw) FAILURE convertcode(bytecode($B5,raw),ANSEL,UTF-8) <> bytecode($C3$A6,raw) FAILURE convertcode(bytecode($C3$9E,raw),UTF-8,ISO-8859-1) <> bytecode($DE,raw) FAILURE convertcode(bytecode($DE,raw),ISO-8859-1,UTF-8) <> bytecode($C3$9E,raw) FAILURE convertcode(bytecode($C3$9E,raw),UTF-8,ANSEL) <> bytecode($A4,raw) FAILURE convertcode(bytecode($A4,raw),ANSEL,UTF-8) <> bytecode($C3$9E,raw) FAILURE Passed 28/36 convert tests What is the name of the output file? Default path: . enter file name: Program was run successfully. lifelines-3.0.61/reports/st/st_aux.li0000700002540200244210000000263310076661061017725 0ustar prappDomain Users/* * @progname st_aux.li * @version 1.0 * @author Perry Rapp * @category self-test * @output none * @description * * auxiliary functions for all self-test modules * */ /* This file is all ASCII, so we don't need to choose a codeset */ char_encoding("ASCII") require("lifelines-reports.version:1.3") option("explicitvars") /* Disallow use of undefined variables */ global(testok) global(testfail) global(testskip) global(logout) global(section) /* report failure to screen, & to file if logging */ proc reportfail(str) { if (gt(strlen(section),0)) { print(concat(section, nl())) } print(str) print(nl()) if (logout) { if (gt(strlen(section),0)) { section nl() } str nl() } set(section,"") incr(testfail) } /* clear counters at start of subsection */ proc initSubsection() { set(testok, 0) set(testfail, 0) set(testskip, 0) } /* report results of just completed subsectioin (testok...) */ proc reportSubsection(title) { set(res, concat("Passed ", d(testok), "/", d(add(testok,testfail)), " ")) if (gt(testskip, 0)) { set(res, concat(res, "(skipped ", d(testskip), ") ")) } set(res, concat(res, title, "\n")) print(res) set(testok, 0) set(testfail, 0) } func set_and_check_locale(locstr, locname) { set(res, setlocale(locstr)) if (nestr(res, "C")) { return(1) } call reportfail(concat("Locale missing: ", locstr, " (", locname, ")")) return (0) } lifelines-3.0.61/reports/st/st_collate.li0000700002540200244210000000260310076661061020550 0ustar prappDomain Users/* * @progname st_collate.li * @version 1.0 * @author Perry Rapp * @category self-test * @output none * @description * * validate collation * */ char_encoding("ASCII") require("lifelines-reports.version:1.3") option("explicitvars") /* Disallow use of undefined variables */ include("st_aux") include("st_collate_UTF-8") include("st_collate_8859-1") /* entry point in case not invoked via st_all.ll */ proc main() { call testCollate() } proc testCollate() { call initSubsection() call testCollate_UTF_8() call testCollate_8859_1() call reportSubsection("collate tests") } proc check_collate2(str1, str2) { if (ge(strcmp(str1,str2),0)) { /* str1 might be of the form string:[name] */ set(str1nam, str1) set(i1, index(str1, ":", 1)) if (gt(i1,0)) { set(str1nam, substring(str1, add(i1,1), strlen(str1))) set(str1, substring(str1, 1, sub(i1,1))) } /* str2 might be of the form string:[name] */ set(str2nam, str2) set(i2, index(str2, ":", 1)) if (gt(i2,0)) { set(str2nam, substring(str2, add(i2,1), strlen(str2))) set(str2, substring(str2, 1, sub(i2,1))) } set(fstr, concat("strcmp(", str1nam,",",str2nam,") FAILED")) call reportfail(fstr) } else { incr(testok) } } proc check_collate3(str1, str2, str3) { call check_collate2(str1, str2) call check_collate2(str2, str3) } proc set_section(name) { set(section, name) } lifelines-3.0.61/reports/st/st_collate_8859-1.li0000700002540200244210000000227610341652771021414 0ustar prappDomain Users/* * @progname st_collate_8859-1.li * @version 1.0 * @author Perry Rapp * @category test * @output mixed * @description * * some collation tests written in ISO-8859-1 (Latin-1) * */ char_encoding("ISO-8859-1") require("lifelines-reports.version:1.3") option("explicitvars") /* Disallow use of undefined variables */ proc finnish_8859_1() { if (not(set_and_check_locale("fi_FI", "Finnish"))) { return() } call set_section("finnish_8859-1") /* sanity check */ call check_collate3("A", "L", "Z") /* Adia sorts between Z and Odia */ call check_collate3("Z", "Ä:[Adia]", "Ö:[Odia]") /* ydia & udia sort as y */ call check_collate3("x", "y", "z") call check_collate3("x", "ÿ:[ydia]", "z") call check_collate3("x", "ü:[udia]", "z") /* eth (lower=u00F0) sorts as d */ call check_collate3("c", "d", "e") call check_collate3("c", "ð:[eth]", "e") } proc spanish_8859_1() { if (not(set_and_check_locale("es_ES", "Spanish"))) { return() } call set_section("spanish_8859-1") call check_collate3("A", "N", "Z") call check_collate3("N", "Ñ:[Ntilde]", "O") } proc testCollate_8859_1() { call finnish_8859_1() call spanish_8859_1() call set_section("") } lifelines-3.0.61/reports/st/st_collate_UTF-8.li0000700002540200244210000000277510341652771021450 0ustar prappDomain Users/* * @progname st_collate_UTF-8.li * @version 1.0 * @author Perry Rapp * @category self-test * @output none * @description * * some collation tests written in UTF-8 * */ char_encoding("UTF-8") require("lifelines-reports.version:1.3") option("explicitvars") /* Disallow use of undefined variables */ proc finnish_UTF_8() { if (not(set_and_check_locale("fi_FI", "Finnish"))) { return() } call set_section("finnish_UTF-8") /* sanity check */ call check_collate3("A", "L", "Z") /* Adia sorts between Z and Odia */ call check_collate3("Z", "Ä:[Adia]", "Ö:[Odia]") /* ydia & udia sort as y */ call check_collate3("x", "y", "z") call check_collate3("x", "ÿ:[ydia]", "z") call check_collate3("x", "ü:[udia]", "z") /* eth (lower=u00F0) sorts as d */ call check_collate3("c", "d", "e") call check_collate3("c", "ð:[eth]", "e") } proc polish_UTF_8() { if (not(set_and_check_locale("pl_PL", "Polish"))) { return() } call set_section("polish_UTF-8") /* sanity check */ call check_collate3("A", "L", "Z") /* Lstroke is between L and M */ call check_collate3("L", "Å:[Lstroke]", "M") } proc spanish_UTF_8() { if (not(set_and_check_locale("es_ES", "Spanish"))) { return() } call set_section("spanish_UTF-8") /* sanity check */ call check_collate3("A", "N", "Z") /* ennay is between N and O */ call check_collate3("N", "Ñ:[Ntilde]", "O") } proc testCollate_UTF_8() { call finnish_UTF_8() call polish_UTF_8() call spanish_UTF_8() call set_section("") } lifelines-3.0.61/reports/st/st_convert.li0000700002540200244210000000515510076661061020612 0ustar prappDomain Users/* * @progname st_convert.li * @version 1.01 (2002-12-14) * @author Perry Rapp * @category self-test * @output none * @description * * validate codeset conversion * */ char_encoding("ASCII") require("lifelines-reports.version:1.3") option("explicitvars") /* Disallow use of undefined variables */ include("st_aux") /* entry point in case not invoked via st_all.ll */ proc main() { call testConvert() } proc testConvert() { call initSubsection() call convert_tests() call reportSubsection("convert tests") } proc convert_tests() { /* we have to use bytecodes, b/c any non-ascii will be first converted by the report parser to internal codeset, which depends on the current database :( */ /* trivial test */ call checkconv("silver fox", "UTF-8", "silver fox", "ISO-8859-1") call checkconv("silver fox", "UTF-8", "silver fox", "ISO-8859-2") /* LATIN SMALL LETTER N WITH TILDE u000F1 */ call checkconv("$C3$B1", "UTF-8", "$F1", "ISO-8859-1") /* LATIN SMALL LETTER A WITH ACUTE u000E1 */ call checkconv("$C3$A1", "UTF-8", "$E1", "ISO-8859-1") call checkconv("$C3$A1", "UTF-8", "$E1", "ISO-8859-2") call checkconv("$C3$A1", "UTF-8", "$E1", "ISO-8859-3") call checkconv("$C3$A1", "UTF-8", "$E1", "ISO-8859-4") call checkconv("$C3$A1", "UTF-8", "$E1", "ISO-8859-15") /* LATIN CAPITAL LETTER L WITH STROKE u00141 */ call checkconv("$C5$81", "UTF-8", "$A3", "ISO-8859-2") call checkconv("$C5$81", "UTF-8", "$A1", "ANSEL") /* LATIN SMALL LETTER S WITH CEDILLA u0015F */ call checkconv("$C5$9F", "UTF-8", "$BA", "ISO-8859-2") call checkconv("$C5$9F", "UTF-8", "$BA", "ISO-8859-3") /* LATIN SMALL LETTER G WITH CEDILLA u00123 */ call checkconv("$C4$A3", "UTF-8", "$BB", "ISO-8859-4") /* LATIN SMALL LETTER AE u000E6 */ call checkconv("$C3$A6", "UTF-8", "$E6", "ISO-8859-1") call checkconv("$C3$A6", "UTF-8", "$B5", "ANSEL") /* LATIN CAPITAL LETTER N WITH CARON */ call checkconv("$C5$87", "UTF-8", "$D2", "ISO-8859-2") /* LATIN CAPITAL LETTER THORN u000DE */ call checkconv("$C3$9E", "UTF-8", "$DE", "ISO-8859-1") call checkconv("$C3$9E", "UTF-8", "$A4", "ANSEL") } /* test a conversion and its reverse */ proc checkconv(bc1, cs1, bc2, cs2) { call checkconv_1way(bc1, cs1, bc2, cs2) call checkconv_1way(bc2, cs2, bc1, cs1) } /* test a single conversion */ proc checkconv_1way(bc1, cs1, bc2, cs2) { set(str1, bytecode(bc1, "raw")) set(str2, bytecode(bc2, "raw")) if (ne(convertcode(str1, cs1, cs2), str2)) { set(fstr, concat("convertcode(bytecode(", bc1 , ",raw),", cs1, ",", cs2 , ") <> bytecode(", bc2, ",raw) FAILURE")) call reportfail(fstr) } else { incr(testok) } } lifelines-3.0.61/reports/st/st_date.li0000700002540200244210000006064410466445061020056 0ustar prappDomain Users/* * @progname st_date.li * @version 1.4 (2006-07-30) * @author Perry Rapp * @category self-test * @output none * @description * * validate date functions * */ char_encoding("ASCII") require("lifelines-reports.version:1.3") option("explicitvars") /* Disallow use of undefined variables */ include("st_aux") /* entry point in case not invoked via st_all.ll */ proc main() { call testDates() } /* test some date functions with various GEDCOM dates */ proc testDates() { call initSubsection() set_and_check_locale("en_US", "English") /* Test day of week function */ call dodowtests() /* Test julian date functions */ call dojdtests() /* Test parsing only */ call tdparse("2 JAN 1953", 1953, 1, 2) call tdparse("14 FEB 857", 857, 2, 14) call tdparse("8/14/33", 33, 8, 14) call tdparse("9/22/1", 1, 9, 22) call tdparse("14 OCT 3 B.C.", 3, 10, 14) call tdparse("14 OCT 3 BC", 3, 10, 14) call tdparse("OCT 3 BC", 3, 10, 0) call tdparse("3 BC", 3, 0, 0) call tdparse("9/22/1", 1, 9, 22) call tdparse("AFT 3 SEP 1630", 1630, 9, 3) call tdparse("FROM 30 SEP 1630 TO 1700", 1630, 9, 30) call tdparse("@#DJULIAN@ 5 MAY 1204", 1204, 5, 5) call tdparse("@#DHEBREW@ 1 ADR 3011", 3011, 6, 1) call tdparse("@#DFRENCH R@ 1 VEND 11", 11, 1, 1) call tdparse("junk", 0, 0, 0) call tdparse("15 ___ 1945", 1945, 0, 15) call tdparse("__ ___ 1945", 1945, 0, 0) call tdparse("_ ___ 1950", 1950, 0, 0) call tdparse("_ ___ 90", 90, 0, 0) call tdparse("2/3 JAN 1953", 1953, 1, 2) call tdparse("2/3 JAN 1953/4", 1953, 1, 2) call tdparse("2/3 JAN 1953/54", 1953, 1, 2) call tdparse("2/3 JAN 1953/954", 1953, 1, 2) call tdparse("FROM 2/3 JAN 1953/954 TO 2004", 1953, 1, 2) call tdparse("2 JAN 1950s", 1950, 1, 2) call tdparse("2-5 JAN 1950-1970", 1950, 1, 2) call tdparse("2-13 OCT 1880-87", 1880, 10, 2) call tdparse("1930-11-24", 1930, 11, 24) /* NB: We do not test all possible format combinations, as there are quite a lot (3 day formats, 11 month formats, 3 year formats, 14 combining formats, 9 era formats -- multiply out to over thousands of combinations for stddate and times 6 cmplx formats for each complex date) */ datepic(0) /* test simple 4 digit year dates */ /* test different day formats */ call tdfb("2 JAN 1953", 0, 0, 0, 0, 0, 1, " 2 1 1953", "*") call tdfb("2 JAN 1953", 1, 0, 0, 0, 0, 1, "02 1 1953", "*") call tdfb("2 JAN 1953", 2, 0, 0, 0, 0, 1, "2 1 1953", "*") /* test different month formats */ call tdfb("2 JAN 1953", 2, 1, 0, 0, 0, 1, "2 01 1953", "*") call tdfb("2 JAN 1953", 2, 2, 0, 0, 0, 1, "2 1 1953", "*") call tdfb("2 JAN 1953", 2, 3, 0, 0, 0, 1, "2 JAN 1953", "*") call tdfb("2 JAN 1953", 2, 4, 0, 0, 0, 1, "2 Jan 1953", "*") call tdfb("2 JAN 1953", 2, 5, 0, 0, 0, 1, "2 JANUARY 1953", "*") call tdfb("2 JAN 1953", 2, 6, 0, 0, 0, 1, "2 January 1953", "*") call tdfb("2 JAN 1953", 2, 7, 0, 0, 0, 1, "2 jan 1953", "*") call tdfb("2 JAN 1953", 2, 8, 0, 0, 0, 1, "2 january 1953", "*") call tdfb("2 JAN 1953", 2, 9, 0, 0, 0, 1, "2 JAN 1953", "*") call tdfb("2 JAN 1953", 2,10, 0, 0, 0, 1, "2 i 1953", "*") call tdfb("2 JAN 1953", 2,11, 0, 0, 0, 1, "2 I 1953", "*") /* test different era formats */ call tdfb("2 JAN 1953", 2, 2, 0, 0, 2, 1, "2 1 1953 A.D.", "*") call tdfb("2 JAN 1953", 2, 2, 0, 0, 12, 1, "2 1 1953 AD", "*") call tdfb("2 JAN 1953", 2, 2, 0, 0, 22, 1, "2 1 1953 C.E.", "*") call tdfb("2 JAN 1953", 2, 2, 0, 0, 32, 1, "2 1 1953 CE", "*") /* test different date (ymd) formats */ call tdfb("2 JAN 1953", 2, 2, 0, 1, 32, 1, "1 2, 1953 CE", "*") call tdfb("2 JAN 1953", 2, 2, 0, 2, 32, 1, "1/2/1953 CE", "*") call tdfb("2 JAN 1953", 2, 2, 0, 3, 32, 1, "2/1/1953 CE", "*") call tdfb("2 JAN 1953", 2, 2, 0, 4, 32, 1, "1-2-1953 CE", "*") call tdfb("2 JAN 1953", 2, 2, 0, 5, 32, 1, "2-1-1953 CE", "*") call tdfb("2 JAN 1953", 2, 2, 0, 6, 32, 1, "121953 CE", "*") call tdfb("2 JAN 1953", 2, 2, 0, 7, 32, 1, "211953 CE", "*") call tdfb("2 JAN 1953", 2, 2, 0, 8, 32, 1, "1953 1 2 CE", "*") call tdfb("2 JAN 1953", 2, 2, 0, 9, 32, 1, "1953/1/2 CE", "*") call tdfb("2 JAN 1953", 2, 2, 0, 10, 32, 1, "1953-1-2 CE", "*") call tdfb("2 JAN 1953", 2, 2, 0, 11, 32, 1, "195312 CE", "*") call tdfb("2 JAN 1953", 2, 2, 0, 12, 32, 1, "1953", "*") call tdfb("2 JAN 1953", 2, 2, 0, 13, 32, 1, "2/1 1953 CE", "*") call tdfb("2 JAN 1953", 2, 2, 0, 14, 32, 1, "2 JAN 1953", "*") /* test custom date pic */ datepic("%d.%m.%y") call tdfb("2 JAN 1953", 2, 2, 0, 10, 32, 1, "2.1.1953 CE", "*") datepic("%d of %m, %y") call tdfb("2 JAN 1953", 2, 4, 0, 10, 1, 1, "2 of Jan, 1953", "*") datepic("%y.%m.%d") call tdfb("2 JAN 1953", 2, 10, 2, 10, 1, 1, "1953.i.2", "*") datepic(0) /* test missing day or month (legal in GEDCOM) */ call tdfb("2 JAN 1953", 1, 1, 1, 2, 2, 1, "01/02/1953 A.D.", "*") call tdfb("JAN 1953", 1, 1, 1, 2, 2, 1, "01/ /1953 A.D.", "*") call tdfb("1953", 1, 1, 1, 2, 2, 1, " / /1953 A.D.", "*") /* test Italian months */ if (not(set_and_check_locale("it_IT", "Italian"))) { set(testskip, add(testskip, 6)) } else { call tdfb("2 JAN 1953", 2, 3, 0, 0, 0, 1, "2 GEN 1953", "*") call tdfb("2 JAN 1953", 2, 4, 0, 0, 0, 1, "2 Gen 1953", "*") call tdfb("2 JAN 1953", 2, 5, 0, 0, 0, 1, "2 GENNAIO 1953", "*") call tdfb("2 JAN 1953", 2, 6, 0, 0, 0, 1, "2 Gennaio 1953", "*") call tdfb("2 JAN 1953", 2, 7, 0, 0, 0, 1, "2 gen 1953", "*") call tdfb("2 JAN 1953", 2, 8, 0, 0, 0, 1, "2 gennaio 1953", "*") set_and_check_locale("en_US", "English") } /* test Swedish months */ if (not(set_and_check_locale("sv_SE", "Swedish"))) { set(testskip, add(testskip, 6)) } else { call tdfb("2 OCT 1953", 2, 3, 0, 0, 0, 1, "2 OKT 1953", "*") call tdfb("2 OCT 1953", 2, 4, 0, 0, 0, 1, "2 Okt 1953", "*") call tdfb("2 OCT 1953", 2, 5, 0, 0, 0, 1, "2 OKTOBER 1953", "*") call tdfb("2 OCT 1953", 2, 6, 0, 0, 0, 1, "2 Oktober 1953", "*") call tdfb("2 OCT 1953", 2, 7, 0, 0, 0, 1, "2 okt 1953", "*") call tdfb("2 OCT 1953", 2, 8, 0, 0, 0, 1, "2 oktober 1953", "*") set_and_check_locale("en_US", "English") } /* test roman numeral months */ call tdfb("2 JAN 1953", 2,10, 0, 0, 0, 1, "2 i 1953", "*") call tdfb("2 JAN 1953", 2,11, 0, 0, 0, 1, "2 I 1953", "*") call tdfb("2 FEB 1953", 2,10, 0, 0, 0, 1, "2 ii 1953", "*") call tdfb("2 FEB 1953", 2,11, 0, 0, 0, 1, "2 II 1953", "*") call tdfb("2 MAR 1953", 2,10, 0, 0, 0, 1, "2 iii 1953", "*") call tdfb("2 MAR 1953", 2,11, 0, 0, 0, 1, "2 III 1953", "*") call tdfb("2 APR 1953", 2,10, 0, 0, 0, 1, "2 iv 1953", "*") call tdfb("2 APR 1953", 2,11, 0, 0, 0, 1, "2 IV 1953", "*") call tdfb("2 MAY 1953", 2,10, 0, 0, 0, 1, "2 v 1953", "*") call tdfb("2 MAY 1953", 2,11, 0, 0, 0, 1, "2 V 1953", "*") call tdfb("2 JUN 1953", 2,10, 0, 0, 0, 1, "2 vi 1953", "*") call tdfb("2 JUN 1953", 2,11, 0, 0, 0, 1, "2 VI 1953", "*") call tdfb("2 JUL 1953", 2,10, 0, 0, 0, 1, "2 vii 1953", "*") call tdfb("2 JUL 1953", 2,11, 0, 0, 0, 1, "2 VII 1953", "*") call tdfb("2 AUG 1953", 2,10, 0, 0, 0, 1, "2 viii 1953", "*") call tdfb("2 AUG 1953", 2,11, 0, 0, 0, 1, "2 VIII 1953", "*") call tdfb("2 SEP 1953", 2,10, 0, 0, 0, 1, "2 ix 1953", "*") call tdfb("2 SEP 1953", 2,11, 0, 0, 0, 1, "2 IX 1953", "*") call tdfb("2 OCT 1953", 2,10, 0, 0, 0, 1, "2 x 1953", "*") call tdfb("2 OCT 1953", 2,11, 0, 0, 0, 1, "2 X 1953", "*") call tdfb("2 NOV 1953", 2,10, 0, 0, 0, 1, "2 xi 1953", "*") call tdfb("2 NOV 1953", 2,11, 0, 0, 0, 1, "2 XI 1953", "*") call tdfb("2 DEC 1953", 2,10, 0, 0, 0, 1, "2 xii 1953", "*") call tdfb("2 DEC 1953", 2,11, 0, 0, 0, 1, "2 XII 1953", "*") call tdfb("@#DHEBREW@ 2 ELL 1953", 2,10, 0, 0, 0, 1, "2 xiii 1953 HEB", "*") call tdfb("@#DHEBREW@ 2 ELL 1953", 2,11, 0, 0, 0, 1, "2 XIII 1953 HEB", "*") /* test simple 3 digit year dates */ call tdfb("11 MAY 812", 0, 0, 0, 0, 0, 1, "11 5 812", "*") call tdfb("11 MAY 812", 0, 1, 0, 0, 0, 1, "11 05 812", "*") call tdfb("11 MAY 812", 0, 2, 0, 0, 0, 1, "11 5 812", "*") call tdfb("11 MAY 812", 0, 3, 0, 0, 0, 1, "11 MAY 812", "*") call tdfb("11 MAY 812", 0, 4, 0, 0, 0, 1, "11 May 812", "*") call tdfb("11 MAY 812", 0, 5, 0, 0, 0, 1, "11 MAY 812", "*" ) call tdfb("11 MAY 812", 0, 6, 0, 0, 0, 1, "11 May 812", "*") call tdfb("11 MAY 812", 1, 6, 0, 0, 0, 1, "11 May 812", "*") call tdfb("11 MAY 812", 2, 6, 0, 0, 0, 1, "11 May 812", "*") /* test missing day or month (legal in GEDCOM) */ call tdfb("11 MAY 812", 1, 1, 1, 2, 2, 1, "05/11/0812 A.D.", "*") call tdfb("MAY 812", 1, 1, 1, 2, 2, 1, "05/ /0812 A.D.", "*") call tdfb("812", 1, 1, 1, 2, 2, 1, " / /0812 A.D.", "*") /* test simple 2 digit year dates */ call tdfb("2 JAN 53", 0, 0, 0, 0, 0, 1, " 2 1 53", "*") call tdfb("2 JAN 53", 1, 0, 0, 0, 0, 1, "02 1 53", "*") call tdfb("2 JAN 53", 2, 0, 0, 0, 0, 1, "2 1 53", "*") call tdfb("2 JAN 53", 2, 1, 0, 0, 0, 1, "2 01 53", "*") call tdfb("2 JAN 53", 2, 1, 1, 0, 0, 1, "2 01 0053", "*") call tdfb("2 JAN 53", 2, 1, 2, 0, 0, 1, "2 01 53", "*") /* test missing day or month (legal in GEDCOM) */ call tdfb("2 JAN 53", 1, 1, 1, 2, 2, 1, "01/02/0053 A.D.", "*") call tdfb("JAN 53", 1, 1, 1, 2, 2, 1, "01/ /0053 A.D.", "*") call tdfb("53", 1, 1, 1, 2, 2, 1, " / /0053 A.D.", "*") /* test simple 1 digit year dates */ call tdfb("2 JAN 3", 0, 0, 0, 0, 0, 1, " 2 1 3", "*") call tdfb("2 JAN 3", 1, 0, 0, 0, 0, 1, "02 1 3", "*") call tdfb("2 JAN 3", 2, 0, 0, 0, 0, 1, "2 1 3", "*") call tdfb("2 JAN 3", 2, 1, 0, 0, 0, 1, "2 01 3", "*") call tdfb("2 JAN 3", 2, 1, 1, 0, 0, 1, "2 01 0003", "*") call tdfb("2 JAN 3", 2, 1, 2, 0, 0, 1, "2 01 3", "*") /* test missing day or month (legal in GEDCOM) */ call tdfb("2 JAN 3", 1, 1, 1, 2, 2, 1, "01/02/0003 A.D.", "*") call tdfb("JAN 3", 1, 1, 1, 2, 2, 1, "01/ /0003 A.D.", "*") call tdfb("3", 1, 1, 1, 2, 2, 1, " / /0003 A.D.", "*") /* test slash years */ call tdfb("24 FEB 1956/7", 2, 2, 0, 10, 0, 0, "1956-2-24", "*") call tdfb("24 FEB 1956/57", 2, 2, 0, 10, 0, 0, "1956-2-24", "*") call tdfb("24 FEB 1956/957", 2, 2, 0, 10, 0, 0, "1956-2-24", "*") call tdfb("24 FEB 1956/1957", 2, 2, 0, 10, 0, 0, "1956-2-24", "*") /* test simple BC dates */ call tdfb("15 MAR 30 B.C.", 0, 0, 0, 0, 0, 1, "15 3 30", "*") call tdfb("15 MAR 30 B.C.", 0, 0, 0, 0, 1, 1, "15 3 30 B.C.", "*") call tdfb("15 MAR 30 B.C.", 0, 0, 1, 0, 1, 1, "15 3 0030 B.C.", "*") call tdfb("15 MAR 30 B.C.", 0, 0, 2, 0, 1, 1, "15 3 30 B.C.", "*") call tdfb("15 MAR 30 B.C.", 0, 0, 2, 0, 2, 1, "15 3 30 B.C.", "*") call tdfb("15 MAR 30 B.C.", 0, 0, 2, 0, 11, 1, "15 3 30 BC", "*") call tdfb("15 MAR 30 B.C.", 0, 0, 2, 0, 21, 1, "15 3 30 B.C.E.", "*") call tdfb("15 MAR 30 B.C.", 0, 0, 2, 0, 31, 1, "15 3 30 BCE", "*") call tdfb("15 MAR 30 (B.C.)", 0, 0, 0, 0, 0, 1, "15 3 30", "*") call tdfb("15 MAR 30 (B.C.)", 0, 0, 0, 0, 1, 1, "15 3 30 B.C.", "*") call tdfb("15 MAR 30 (B.C.)", 0, 0, 1, 0, 1, 1, "15 3 0030 B.C.", "*") call tdfb("15 MAR 30 (B.C.)", 0, 0, 2, 0, 1, 1, "15 3 30 B.C.", "*") call tdfb("15 MAR 30 (B.C.)", 0, 0, 2, 0, 2, 1, "15 3 30 B.C.", "*") call tdfb("15 MAR 30 (B.C.)", 0, 0, 2, 0, 11, 1, "15 3 30 BC", "*") call tdfb("15 MAR 30 (B.C.)", 0, 0, 2, 0, 21, 1, "15 3 30 B.C.E.", "*") call tdfb("15 MAR 30 (B.C.)", 0, 0, 2, 0, 31, 1, "15 3 30 BCE", "*") /* test simple dates in non-GEDCOM format */ /* It tries to handle 3 numbers, *if* it can find unambiguous interpretation */ call tdfb("1930/11/24", 0, 0, 0, 0, 0, 1, "24 11 1930", "*") call tdfb("1930 11 24", 0, 0, 0, 0, 0, 1, "24 11 1930", "*") call tdfb("1930.11.24", 0, 0, 0, 0, 0, 1, "24 11 1930", "*") call tdfb("1930-11-24", 0, 0, 0, 0, 0, 1, "24 11 1930", "*") call tdfb("11/24/1930", 0, 0, 0, 0, 0, 1, "24 11 1930", "*") call tdfb("24/11/1930", 0, 0, 0, 0, 0, 1, "24 11 1930", "*") call tdfb("1956/7 FEB 24", 2, 2, 0, 10, 0, 0, "1956-2-24", "*") call tdfb("1956/57 FEB 24", 2, 2, 0, 10, 0, 0, "1956-2-24", "*") call tdfb("1956/957 FEB 24", 2, 2, 0, 10, 0, 0, "1956-2-24", "*") call tdfb("1956/1957 FEB 24", 2, 2, 0, 10, 0, 0, "1956-2-24", "*") call tdfb("1956/7 24 2", 2, 2, 0, 10, 0, 0, "1956-2-24", "*") call tdfb("1956/57 24 2", 2, 2, 0, 10, 0, 0, "1956-2-24", "*") call tdfb("1956/957 24 2", 2, 2, 0, 10, 0, 0, "1956-2-24", "*") call tdfb("1956/1957 24 2", 2, 2, 0, 10, 0, 0, "1956-2-24", "*") call tdfb("1956/7 24 2", 2, 2, 0, 10, 0, 0, "1956-2-24", "*") call tdfb("1956/57 24 2", 2, 2, 0, 10, 0, 0, "1956-2-24", "*") call tdfb("1956/957 24 2", 2, 2, 0, 10, 0, 0, "1956-2-24", "*") call tdfb("1956/1957 24 2", 2, 2, 0, 10, 0, 0, "1956-2-24", "*") /* Complex tests */ complexpic(4, 0) call tdfb("AFT 3 SEP 1630", 0, 0, 0, 0, 0, 1, " 3 9 1630", "after 3 9 1630") call tdfb("AFT 3 SEP 1630", 0, 0, 0, 0, 0, 3, " 3 9 1630", "AFT 3 9 1630") call tdfb("AFT 3 SEP 1630", 0, 0, 0, 0, 0, 4, " 3 9 1630", "Aft 3 9 1630") call tdfb("AFT 3 SEP 1630", 0, 0, 0, 0, 0, 5, " 3 9 1630", "AFTER 3 9 1630") call tdfb("AFT 3 SEP 1630", 0, 0, 0, 0, 0, 6, " 3 9 1630", "After 3 9 1630") call tdfb("AFT 3 SEP 1630", 0, 0, 0, 0, 0, 7, " 3 9 1630", "aft 3 9 1630") call tdfb("AFT 3 SEP 1630", 0, 0, 0, 0, 0, 8, " 3 9 1630", "after 3 9 1630") complexpic(4, ">%1") call tdfb("AFT 3 SEP 1630", 0, 0, 0, 0, 0, 8, " 3 9 1630", "> 3 9 1630") complexpic(4, 0) complexpic(3, 0) call tdfb("BEF 3 SEP 1630", 0, 0, 0, 0, 0, 1, " 3 9 1630", "before 3 9 1630") call tdfb("BEF 3 SEP 1630", 0, 0, 0, 0, 0, 3, " 3 9 1630", "BEF 3 9 1630") call tdfb("BEF 3 SEP 1630", 0, 0, 0, 0, 0, 4, " 3 9 1630", "Bef 3 9 1630") call tdfb("BEF 3 SEP 1630", 0, 0, 0, 0, 0, 5, " 3 9 1630", "BEFORE 3 9 1630") call tdfb("BEF 3 SEP 1630", 0, 0, 0, 0, 0, 6, " 3 9 1630", "Before 3 9 1630") call tdfb("BEF 3 SEP 1630", 0, 0, 0, 0, 0, 7, " 3 9 1630", "bef 3 9 1630") call tdfb("BEF 3 SEP 1630", 0, 0, 0, 0, 0, 8, " 3 9 1630", "before 3 9 1630") complexpic(3, "<%1") call tdfb("BEF 3 SEP 1630", 0, 0, 0, 0, 0, 8, " 3 9 1630", "< 3 9 1630") complexpic(3, 0) complexpic(5, 0) call tdfb("BET 3 SEP 1630 AND OCT 1900", 0, 0, 0, 0, 0, 1, " 3 9 1630", "between 3 9 1630 and 10 1900") complexpic(5, "%1/%2") call tdfb("BET 3 SEP 1630 AND OCT 1900", 2, 2, 0, 5, 0, 1, "3-9-1630", "3-9-1630/-10-1900") complexpic(5, 0) complexpic(6, 0) call tdfb("FROM 3 SEP 1630", 0, 0, 0, 0, 0, 1, " 3 9 1630", "from 3 9 1630") complexpic(7, 0) call tdfb("TO 3 SEP 1630", 0, 0, 0, 0, 0, 1, " 3 9 1630", "to 3 9 1630") complexpic(8, 0) call tdfb("FROM 3 SEP 1630 TO 1700", 0, 0, 0, 0, 0, 1, " 3 9 1630", "from 3 9 1630 to 1700") call tdfb("FROM 3 SEP 1630 TO 1700", 0, 0, 0, 0, 0, 3, " 3 9 1630", "FR 3 9 1630 TO 1700") call tdfb("FROM 3 SEP 1630 TO 1700", 0, 0, 0, 0, 0, 4, " 3 9 1630", "Fr 3 9 1630 To 1700") call tdfb("FROM 3 SEP 1630 TO 1700", 0, 0, 0, 0, 0, 5, " 3 9 1630", "FROM 3 9 1630 TO 1700") call tdfb("FROM 3 SEP 1630 TO 1700", 0, 0, 0, 0, 0, 6, " 3 9 1630", "From 3 9 1630 To 1700") call tdfb("FROM 3 SEP 1630 TO 1700", 0, 0, 0, 0, 0, 7, " 3 9 1630", "fr 3 9 1630 to 1700") call tdfb("FROM 3 SEP 1630 TO 1700", 0, 0, 0, 0, 0, 8, " 3 9 1630", "from 3 9 1630 to 1700") complexpic(8, "%1=>%2") call tdfb("FROM 3 SEP 1630 TO 1700", 2, 2, 0, 9, 0, 8, "1630/9/3", "1630/9/3=>1700//") complexpic(8, 0) complexpic(1, 0) call tdfb("ABT 3 SEP 890", 0, 0, 0, 0, 0, 1, " 3 9 890", "about 3 9 890") call tdfb("EST 3 SEP 890", 0, 0, 0, 0, 0, 1, " 3 9 890", "estimated 3 9 890") call tdfb("EST 3 SEP 890", 0, 0, 0, 0, 0, 3, " 3 9 890", "EST 3 9 890") call tdfb("EST 3 SEP 890", 0, 0, 0, 0, 0, 4, " 3 9 890", "Est 3 9 890") call tdfb("EST 3 SEP 890", 0, 0, 0, 0, 0, 5, " 3 9 890", "ESTIMATED 3 9 890") call tdfb("EST 3 SEP 890", 0, 0, 0, 0, 0, 6, " 3 9 890", "Estimated 3 9 890") call tdfb("EST 3 SEP 890", 0, 0, 0, 0, 0, 7, " 3 9 890", "est 3 9 890") call tdfb("EST 3 SEP 890", 0, 0, 0, 0, 0, 8, " 3 9 890", "estimated 3 9 890") complexpic(1, "~%1") call tdfb("EST 3 SEP 890", 0, 0, 0, 0, 0, 1, " 3 9 890", "~ 3 9 890") complexpic(1, 0) complexpic(2, 0) call tdfb("CAL 3 SEP 890", 2, 2, 2, 10, 0, 1, "890-9-3", "calculated 890-9-3") call tdfb("CAL 3 SEP 890", 2, 2, 2, 10, 0, 3, "890-9-3", "CAL 890-9-3") call tdfb("CAL 3 SEP 890", 2, 2, 2, 10, 0, 4, "890-9-3", "Cal 890-9-3") call tdfb("CAL 3 SEP 890", 2, 2, 2, 10, 0, 5, "890-9-3", "CALCULATED 890-9-3") call tdfb("CAL 3 SEP 890", 2, 2, 2, 10, 0, 6, "890-9-3", "Calculated 890-9-3") call tdfb("CAL 3 SEP 890", 2, 2, 2, 10, 0, 7, "890-9-3", "cal 890-9-3") call tdfb("CAL 3 SEP 890", 2, 2, 2, 10, 0, 8, "890-9-3", "calculated 890-9-3") complexpic(2, "^%1") call tdfb("CAL 3 SEP 890", 2, 2, 2, 10, 0, 1, "890-9-3", "^890-9-3") complexpic(2, "^") call tdfb("CAL 3 SEP 890", 2, 2, 2, 10, 0, 1, "890-9-3", "^") complexpic(2, "^%1^%1") call tdfb("CAL 3 SEP 890", 2, 2, 2, 10, 0, 1, "890-9-3", "^890-9-3^890-9-3") complexpic(2, 0) /* Complex tests with bad input */ call tdfb("24 SEP 811 TO 29 SEP 811", 0, 0, 0, 0, 0, 1, "24 9 811", "from 24 9 811 to 29 9 811") /* Calendar tests */ call tdfb("@#DGREGORIAN@ 1 JAN 1953", 2, 6, 0, 0, 0, 1, "1 January 1953", "*") call tdfb("@#DJULIAN@ 1 JAN 1953", 2, 6, 0, 0, 0, 1, "1 January 1953J", "*") /* French Republic Calendar tests */ call tdfb("@#DFRENCH R@ 1 VEND 11", 2, 0, 2, 0, 0, 1, "1 1 11 FR", "*") call tdfb("@#DFRENCH R@ 1 VEND 11", 2, 1, 2, 0, 0, 1, "1 01 11 FR", "*") call tdfb("@#DFRENCH R@ 1 VEND 11", 2, 2, 2, 0, 0, 1, "1 1 11 FR", "*") call tdfb("@#DFRENCH R@ 1 VEND 11", 2, 3, 2, 0, 0, 1, "1 VEND 11 FR", "*") call tdfb("@#DFRENCH R@ 1 VEND 11", 2, 4, 2, 0, 0, 1, "1 Vend 11 FR", "*") call tdfb("@#DFRENCH R@ 1 VEND 11", 2, 5, 2, 0, 0, 1, "1 VENDEMIAIRE 11 FR", "*") call tdfb("@#DFRENCH R@ 1 VEND 11", 2, 6, 2, 0, 0, 1, "1 Vendemiaire 11 FR", "*") call tdfb("@#DFRENCH R@ 1 VEND 11", 2, 7, 2, 0, 0, 1, "1 vend 11 FR", "1 vend 11 FR") call tdfb("@#DFRENCH R@ 1 VEND 11", 2, 8, 2, 0, 0, 1, "1 vendemiaire 11 FR", "1 vendemiaire 11 FR") call tdfb("@#DFRENCH R@ 1 BRUM 11", 2, 8, 2, 0, 0, 1, "1 brumaire 11 FR", "1 brumaire 11 FR") call tdfb("@#DFRENCH R@ 1 FRIM 11", 2, 8, 2, 0, 0, 1, "1 frimaire 11 FR", "1 frimaire 11 FR") call tdfb("@#DFRENCH R@ 1 NIVO 11", 2, 8, 2, 0, 0, 1, "1 nivose 11 FR", "1 nivose 11 FR") call tdfb("@#DFRENCH R@ 1 PLUV 11", 2, 8, 2, 0, 0, 1, "1 pluviose 11 FR", "*") call tdfb("@#DFRENCH R@ 1 VENT 11", 2, 8, 2, 0, 0, 1, "1 ventose 11 FR", "*") call tdfb("@#DFRENCH R@ 1 GERM 11", 2, 8, 2, 0, 0, 1, "1 germinal 11 FR", "*") call tdfb("@#DFRENCH R@ 1 FLOR 11", 2, 8, 2, 0, 0, 1, "1 floreal 11 FR", "*") call tdfb("@#DFRENCH R@ 1 PRAI 11", 2, 8, 2, 0, 0, 1, "1 prairial 11 FR", "*") call tdfb("BET @#DFRENCH R@ 1 PRAI 11 AND @#DFRENCH R@ 2 BRUM 12", 2, 8, 2, 0, 0, 1 , "1 prairial 11 FR", "between 1 prairial 11 FR and 2 brumaire 12 FR") call tdfb("BET @#DFRENCH R@ 1 PRAI 11 AND @#DFRENCH R@ 2 BRUM 12", 2, 2, 2, 10, 0, 7 , "11-9-1 FR", "bet 11-9-1 FR and 12-2-2 FR") /* Hebrew Calendar tests */ call tdfb("@#DHEBREW@ 1 TSH 3011", 2, 0, 0, 0, 0, 1, "1 1 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 TSH 3011", 2, 1, 0, 0, 0, 1, "1 01 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 TSH 3011", 2, 2, 0, 0, 0, 1, "1 1 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 TSH 3011", 2, 3, 0, 0, 0, 1, "1 TSH 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 TSH 3011", 2, 4, 0, 0, 0, 1, "1 Tsh 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 TSH 3011", 2, 5, 0, 0, 0, 1, "1 TISHRI 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 TSH 3011", 2, 6, 0, 0, 0, 1, "1 Tishri 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 TSH 3011", 2, 7, 0, 0, 0, 1, "1 tsh 3011 HEB", "1 tsh 3011 HEB") call tdfb("@#DHEBREW@ 1 TSH 3011", 2, 8, 0, 0, 0, 1, "1 tishri 3011 HEB", "1 tishri 3011 HEB") call tdfb("@#DHEBREW@ 1 ADS 3011", 2, 0, 0, 0, 0, 1, "1 7 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 ADS 3011", 2, 1, 0, 0, 0, 1, "1 07 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 ADS 3011", 2, 2, 0, 0, 0, 1, "1 7 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 ADS 3011", 2, 3, 0, 0, 0, 1, "1 ADS 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 ADS 3011", 2, 4, 0, 0, 0, 1, "1 Ads 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 ADS 3011", 2, 5, 0, 0, 0, 1, "1 ADAR SHENI 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 ADS 3011", 2, 6, 0, 0, 0, 1, "1 Adar Sheni 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 ADS 3011", 2, 7, 0, 0, 0, 1, "1 ads 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 ADS 3011", 2, 8, 0, 0, 0, 1, "1 adar sheni 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 CSH 3011", 2, 1, 0, 0, 0, 1, "1 02 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 KSL 3011", 2, 1, 0, 0, 0, 1, "1 03 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 TVT 3011", 2, 1, 0, 0, 0, 1, "1 04 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 SHV 3011", 2, 1, 0, 0, 0, 1, "1 05 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 ADR 3011", 2, 1, 0, 0, 0, 1, "1 06 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 ADS 3011", 2, 1, 0, 0, 0, 1, "1 07 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 NSN 3011", 2, 1, 0, 0, 0, 1, "1 08 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 IYR 3011", 2, 1, 0, 0, 0, 1, "1 09 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 SVN 3011", 2, 1, 0, 0, 0, 1, "1 10 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 TMZ 3011", 2, 1, 0, 0, 0, 1, "1 11 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 AAV 3011", 2, 1, 0, 0, 0, 1, "1 12 3011 HEB", "*") call tdfb("@#DHEBREW@ 1 ELL 3011", 2, 1, 0, 0, 0, 1, "1 13 3011 HEB", "*") /* ROMAN would presumably be in AUC, and days counted before K,N,I */ call reportSubsection("date tests") } /* (Worker routine for testDates) Test parsing & formatting simultaneously Using specified formats, check stddate(src) against dests and complexdate(src) against destc tdfb = test date format both (simple & complex) If destc="*", then we'll test complexdate result against dests */ proc tdfb(src, dayfmt, monfmt, yrfmt, sfmt, ofmt, cfmt, dests, destc) { dayformat(dayfmt) monthformat(monfmt) yearformat(yrfmt) dateformat(sfmt) eraformat(ofmt) set(result, stddate(src)) if (ne(result, dests)) { set(orig, concat(src,", ", d(dayfmt), ", ", d(monfmt))) set(orig, concat(orig, ", ", d(yrfmt), ", ",d(sfmt))) set(orig, concat(orig, ", ", d(ofmt))) call reportfail(concat("stddate failure: '", dests, "'<>'", result, "'", " from ", orig)) } else { incr(testok) } complexformat(cfmt) if (eq(destc,"*")) { set(destc, dests) } set(result, complexdate(src)) if (ne(result, destc)) { set(orig, concat(src,", ", d(dayfmt), ", ", d(monfmt))) set(orig, concat(orig, ", ", d(yrfmt), ", ",d(sfmt))) set(orig, concat(orig, ", ", d(ofmt))) call reportfail(concat("complexdate failure: '", destc, "'<>'", result, "'", " from ", orig)) } else { incr(testok) } } /* Test parsing only, using year(), month(), and day() functions src is the string to parse yr,mo,da is the correct output against which to test */ proc tdparse(src, yr, mo, da) { set(result, strtoint(year(src))) if (ne(result, yr)) { call reportfail(concat("year(", src, ") failure: ", d(yr), "<>", d(result))) } else { incr(testok) } extractdatestr(modvar, dvar, mvar, yvar, ystvar, src) if (ne(yvar, yr)) { call reportfail(concat("extractdatestr(", src, ").yr failure: ", d(yr), "<>", d(yvar))) } else { incr(testok) } if (ne(mvar, mo)) { call reportfail(concat("extractdatestr(", src, ").mo failure: ", d(mo), "<>", d(mvar))) } else { incr(testok) } if (ne(dvar, da)) { call reportfail(concat("extractdatestr(", src, ").da failure: ", d(da), "<>", d(dvar))) } else { incr(testok) } } /* Check dayofweek() with a series of sample tests */ proc dodowtests() { call testdow("2 JAN 1953", "Friday") call testdow("6 JUN 2006", "Tuesday") call testdow("5 MAY 1862", "Monday") } /* Perform one test of function dayofweek() src is the date (as string) to parse adow is the correct answer */ proc testdow(src, adow) { set(result, dayofweek(src)) if (ne(result, adow)) { call reportfail(concat("dayofweek(", src, ") failure: ", adow, "<>", result)) } else { incr(testok) } } /* Check dayofweek() with a series of sample tests */ proc dojdtests() { call testjd("2 JAN 1953", "3 JAN 1953") call testjd("15 MAR 1582", "16 MAR 1582") } /* Using one sample date, test the julian date functions jdstring is the date to test jdnext is the day after (to test adding one to the julian date number) NB: All dates must be passed to stddate before comparison, including jdstring and jdnext, so all are formatted the same. */ proc testjd(jdstring, jdnext) { set(orig, stddate(jdstring)) set(jdnum, date2jd(jdstring)) set(jdeven, jd2date(jdnum)) set(result, stddate(jdeven)) if (ne(orig, result)) { call reportfail(concat("jd2date(date2jd(", jdstring, ")) failure: ", orig, "<>", result)) } else { incr(testok) } set(jdnum1, add(jdnum, 1)) set(result, stddate(jd2date(jdnum1))) set(desired, stddate(jdnext)) if (ne(desired, result)) { call reportfail(concat("stddate(date2jd(", jdstring, ")+1) failure: ", desired, "<>", result)) } else { incr(testok) } } lifelines-3.0.61/reports/st/st_db.li0000700002540200244210000001423410201447730017510 0ustar prappDomain Users/* * @progname st_db.li * @version 1.26 [of 2005-02-01] * @author Perry Rapp * @category self-test * @output none * @description * * Exercise some database functions. * Dumps some of each type of record, followed by all 3 gengedcoms. * */ char_encoding("ASCII") require("lifelines-reports.version:1.3") option("explicitvars") /* Disallow use of undefined variables */ include("st_aux") global(dead) global(cutoff_yr) /* entry point in case not invoked via st_all.ll */ proc main() { call exerciseDb() } proc exerciseDb() { "database: " database() nl() "version: " version() nl() set(cutoff_yr, 1900) /* assume anyone born before this is dead */ set(N, 5) /* output this many of each type of record */ set(living,0) set(dead,0) /* count up # of living & dead indis, and output first N of each */ nl() nl() "*** PERSONS ***" nl() nl() indiset(iset) forindi (person, pnum) { /* exercise indi stuff with the first person */ if (lt(add(living,dead),1)) { call exerciseIndi(person) } /* output the first N living & first N dead people */ if (isLivingPerson(person)) { set(living,add(living,1)) if (lt(living,N)) { call outputLivingIndi(person) addtoset(iset,person,1) } } else { set(dead,add(dead,1)) if (lt(dead,N)) { call outputRec(person) addtoset(iset,person,0) } } } nl() "Live INDI: " d(living) nl() "Dead INDI: " d(dead) nl() set(living,0) set(dead,0) /* count up # of living & dead fams, and output first N of each */ nl() nl() "*** FAMILIES ***" nl() nl() forfam (fam, fnum) { /* output the first N living & first N dead families */ if (isLivingFam(fam)) { set(living,add(living,1)) if (lt(living,N)) { call outputLivingFam(fam) } } else { set(dead,add(dead,1)) if (lt(dead,N)) { call outputRec(fam) } } } nl() "Live FAM: " d(living) nl() "Dead FAM: " d(dead) nl() nl() nl() "*** SOURCES ***" nl() nl() forsour (sour,snum) { if (lt(snum,N)) { call outputRec(sour) } } nl() nl() "*** EVENTS ***" nl() nl() foreven (even,enum) { if (lt(enum,N)) { call outputRec(even) } } nl() nl() "*** OTHERS ***" nl() nl() forothr (othr,onum) { if (lt(onum,N)) { call outputRec(othr) } } nl() nl() "*** GENGEDCOM *** " nl() nl() gengedcom(iset) nl() nl() "*** GENGEDCOMWEAK *** " nl() nl() gengedcomweak(iset) nl() nl() "*** GENGEDCOMSTRONG *** " nl() nl() gengedcomstrong(iset) } /* Output entire record, except filter out SOUR & NOTE sections */ proc outputRec(record) { traverse (root(record), node, level) { if (or(eq(level,0),and(ne(tag(node),"SOUR"),ne(tag(node),"NOTE")))) { d(level) " " xref(node) " " tag(node) " " value(node) nl() } } } proc outputLivingIndi(indi) { "0 @" key(indi) "@ INDI" nl() "1 NAME " fullname(indi,0,1,50) nl() fornodes(inode(indi), node) { if (isFamilyPtr(node)) { "1 " xref(node) " " tag(node) " " value(node) nl() } } } proc outputLivingFam(fam) { "0 @" key(fam) "@ FAM" nl() fornodes(root(fam), node) { if (isMemberPtr(node)) { "1 " xref(node) " " tag(node) " " value(node) nl() } } } func isLivingFam(fam) { fornodes(root(fam), node) { if (isMemberPtr(node)) { if (isLivingPerson(indi(value(node)))) { return (1) } } } return (0) } func isLivingPerson(indi) { if (death(indi)) { return (0) } if (birth(indi)) { list(placelist) extractplaces(birth(indi), placelist, count) extractdate(birth(indi),day,mon,yr) if (and(gt(yr,300),lt(yr,cutoff_yr))) { return (0) } } return (1) } func isFamilyPtr (node) { if (eq(tag(node),"FAMC")) { return (1) } if (eq(tag(node),"FAMS")) { return (1) } return (0) } func isMemberPtr (node) { if (eq(tag(node),"HUSB")) { return (1) } if (eq(tag(node),"WIFE")) { return (1) } if (eq(tag(node),"CHIL")) { return (1) } return (0) } /* Uses a lot of function calls */ proc exerciseIndi(indi) { list(lst) set(em, empty(lst)) enqueue(lst, indi) push(lst, father(indi)) requeue(lst, mother(indi)) set(junk,pop(lst)) setel(lst, 1, nextsib(indi)) forlist(lst, el, count) { name(el) " " d(count) nl() } table(tbl) insert(tbl, "bob", indi) set(thing, lookup(tbl, "bob")) indiset(iset) addtoset(iset,indi,"bob") set(iset,union(iset,parentset(iset))) addtoset(iset,indi,"jerry") addtoset(iset,father(indi), "dad") addtoset(iset,mother(indi), "mom") addtoset(iset,nextsib(indi), "bro") spouses(indi,spouse,fam,num) { addtoset(iset,spouse,fam) "spouse: " fullname(spouse, true, true, 20) nl() } families(indi,fam,spouse,num) { addtoset(iset,spouse,num) "family: " key(fam) nl() children(fam, chil, chilnum) { addtoset(iset, chil, chilnum) "child: " key(chil) nl() } } addtoset(iset,nextindi(indi),"next") addtoset(iset,previndi(indi),"prev") set(ichildren, childset(iset)) set(isiblings, siblingset(iset)) set(ispouses, spouseset(iset)) set(iancestors, ancestorset(iset)) set(idescendants, descendentset(iset)) uniqueset(iancestors) indiset(jset) addtoset(jset, indi, "first") if (inset(jset, indi)) { addtoset(jset, indi, "second") } deletefromset(jset, indi, 0) namesort(iancestors) valuesort(iancestors) keysort(iancestors) set(kset, intersect(iset,iancestors)) set(kset, difference(iset,iancestors)) set(p,99) "name: " name(indi) nl() "title: " title(indi) nl() "key: " key(indi) nl() parents(indi) nl() "fullname(12): " fullname(indi,true,true,12) nl() "surname: " surname(indi) nl() "givens: " givens(indi) nl() "trimname(8): " trimname(indi,8) nl() lock(indi) call dumpnode("birth", birth(indi)) call dumpnodetr("death", death(indi)) unlock(indi) fornotes(inode(indi), notetext) { /* exercise fornotes */ set(currentext, notetext) } } proc dumpnode(desc, node) { if (node) { desc ": " xref(node) " " tag(node) " " value(node) fornodes(node, child) { call dumpnode2(child) } } } proc dumpnode2(node) { xref(node) " " tag(node) " " value(node) fornodes(node, child) { call dumpnode2(child) } } proc dumpnodetr(desc, node) { if (node) { desc ": " xref(node) " " tag(node) " " value(node) nl() traverse(node, child,lvl) { xref(node) " " tag(node) " " value(node) nl() } } } lifelines-3.0.61/reports/st/st_list.li0000700002540200244210000001310110617454470020100 0ustar prappDomain Users/* * @progname st_list.li * @version 1.16 (2007-05-06) * @author Perry Rapp * @category self-test * @output none * @description validate list functions */ char_encoding("ASCII") require("lifelines-reports.version:1.3") option("explicitvars") /* Disallow use of undefined variables */ include("st_aux") /* entry point in case not invoked via st_all.ll */ proc main() { call testLists() } /* test some list functions */ proc testLists() { call initSubsection() list(li) if (not(empty(li))) { call reportfail("empty FAILED") } else { incr(testok) } if (inlist(li,4)) { call reportfail("inlist(empty) FAILED") } else { incr(testok) } enqueue(li, 1) if (empty(li)) { call reportfail("not empty FAILED") } else { incr(testok) } if (not(inlist(li,1))) { call reportfail("inlist(1) in list with 1 FAILED") } else { incr(testok) } if (inlist(li,4)) { call reportfail("inlist(4) in list without 4 FAILED") } else { incr(testok) } set(te, dequeue(li)) if (ne(te, 1)) { call reportfail("dequeue(1) FAILED") } else { incr(testok) } /* enqueue & dequeue */ enqueue(li, 100) enqueue(li, 200) set(te, dequeue(li)) if (ne(te, 100)) { call reportfail("dequeue(100) FAILED") } else { incr(testok) } set(te, dequeue(li)) if (ne(te, 200)) { call reportfail("dequeue(200) FAILED") } else { incr(testok) } if (not(empty(li))) { call reportfail("empty (enqueue & dequeue) FAILED") } else { incr(testok) } /* requeue */ enqueue(li, 10) enqueue(li, 20) set(te, dequeue(li)) if (ne(te, 10)) { call reportfail("dequeue(10) FAILED") } else { incr(testok) } requeue(li, 8) set(te, dequeue(li)) if (ne(te, 8)) { call reportfail("dequeue(8) FAILED") } else { incr(testok) } dequeue(li) if (not(empty(li))) { call reportfail("empty (requeue) FAILED") } else { incr(testok) } /* push & pop */ push(li, 1) push(li, 2) set(te, pop(li)) if (ne(te, 2)) { call reportfail("pop(2) FAILED") } else { incr(testok) } set(te, pop(li)) if (ne(te, 1)) { call reportfail("pop(1) FAILED") } else { incr(testok) } if (not(empty(li))) { call reportfail("empty (push&pop) FAILED") } else { incr(testok) } /* getel & setel */ enqueue(li, 1) enqueue(li, 2) set(te, getel(li, 2)) if (ne(te, 2)) { call reportfail("getel(,2)==2 FAILED") } else { incr(testok) } setel(li, 4, 4) /* put a 4th element (3rd will be zero-filled) */ /* forlist & length */ set(te2,0) set(te3,0) set(te4,0) forlist(li, te, n) { set(te1, te2) set(te2, te3) set(te3, te4) set(te4, te) set(max, n) } if(ne(max,length(li))) {call reportfail("length FAILED")} else {incr(testok)} if(ne(te1,1)) {call reportfail("forlist#1 FAILED")} else {incr(testok)} if(ne(te2,2)) {call reportfail("forlist#2 FAILED")} else {incr(testok)} if(ne(te3,0)) {call reportfail("forlist#3 FAILED")} else {incr(testok)} if(ne(te4,4)) {call reportfail("forlist#4 FAILED")} else {incr(testok)} /* continue getel & setel */ set(te, dequeue(li)) if (ne(te, 1)) { call reportfail("dequeue(1) from setel FAILED") } else { incr(testok) } set(te, dequeue(li)) if (ne(te, 2)) { call reportfail("dequeue(2) from setel FAILED") } else { incr(testok) } set(te, dequeue(li)) if (ne(te, 0)) { /* the 3rd was uninitialized created by setel */ call reportfail("dequeue(3) from setel FAILED") } else { incr(testok) } set(te, dequeue(li)) if (ne(te, 4)) { call reportfail("dequeue(4) from setel FAILED") } else { incr(testok) } if (not(empty(li))) { call reportfail("empty (getel & setel) FAILED") } else { incr(testok) } enqueue(li, "harry") enqueue(li, 3) call testFreeList(li) /* sort & rsort */ list(li) push(li, "aardvark") push(li, "coon") push(li, "bear") push(li, "eel") push(li, "dog") /* sort on li */ /* so we expect words to come out in order */ sort(li) if (or( ne(getel(li, 1), "aardvark") ,ne(getel(li, 2), "bear") ,ne(getel(li, 3), "coon") ,ne(getel(li, 4), "dog") ,ne(getel(li, 5), "eel") )) { call reportfail("sort FAILED") } else { incr(testok) } /* rsort on li */ /* so we expect words to come out in reverse order */ rsort(li) if (or( ne(getel(li, 1), "eel") ,ne(getel(li, 2), "dog") ,ne(getel(li, 3), "coon") ,ne(getel(li, 4), "bear") ,ne(getel(li, 5), "aardvark") )) { call reportfail("rsort FAILED") } else { incr(testok) } /* test sorting on 2nd argument */ list(li) list(li2) push(li, "bush") push(li2, "hsub") push(li, "grass") push(li2, "ssarg") push(li, "shrub") push(li2, "burhs") push(li, "tree") push(li2, "eert") push(li, "marsh") push(li2, "hsram") push(li, "benz") push(li2, "zneb") /* sort on li2, which is words backwards */ /* so we expect words to come out in order of each word backwards */ /* eg, shrub is first because it ends with b */ sort(li,li2) if (or( ne(getel(li, 1), "shrub") ,ne(getel(li, 2), "tree") ,ne(getel(li, 3), "marsh") ,ne(getel(li, 4), "bush") ,ne(getel(li, 5), "grass") ,ne(getel(li, 6), "benz") )) { call reportfail("sort on 2 args FAILED") } else { incr(testok) } /* rsort on li2, which is words backwards */ /* so we expect words to come out in reverse order of each word backwards */ /* eg, benz is first because it ends with z */ rsort(li, li2) if (or( ne(getel(li, 1), "benz") ,ne(getel(li, 2), "grass") ,ne(getel(li, 3), "bush") ,ne(getel(li, 4), "marsh") ,ne(getel(li, 5), "tree") ,ne(getel(li, 6), "shrub") )) { call reportfail("rsort on 2 args FAILED") } else { incr(testok) } call reportSubsection("list tests") } proc testFreeList(li) { free(li) if (ne(li, 0)) { call reportfail("free list FAILED") } else { incr(testok) } } lifelines-3.0.61/reports/st/st_name.li0000700002540200244210000000271110076661061020045 0ustar prappDomain Users/* * @progname st_name.li * @version 1.0 * @author Perry Rapp * @category self-test * @output none * @description validate name functions */ char_encoding("ASCII") require("lifelines-reports.version:1.3") option("explicitvars") /* Disallow use of undefined variables */ include("st_aux") /* entry point in case not invoked via st_all.ll */ proc main() { call testNames() } /* test some name functions */ proc testNames() { set(testok, 0) set(testfail, 0) set(namestr, "Fyodor Nikolaievich Medvedev") call testExtract(namestr, 3, 0) set(namestr, "Jose Antonio Martinez de Garcia") call testExtract(namestr, 5, 0) set(namestr, "Jose Antonio /Martinez/ de Garcia") call testExtract(namestr, 5, 3) set(namestr, "Kara /Hattersley-Smith/") call testExtract(namestr, 2, 2) set(namestr, "L. /Vitellius/ Tancinus Cives Hisp. Caurie[n]sis") call testExtract(namestr, 6, 2) call reportSubsection("name tests") } /* test extractnames on passed string */ proc testExtract(namestr, fragcount, surn) { set(node, createnode("NAME", namestr)) list(namelist) extractnames(node, namelist, count, surna) if (ne(count, fragcount)) { call reportfail(concat("extractnames failed count " , d(count), "<>", d(fragcount), " on ", namestr)) } else { incr(testok) } if (ne(surna, surn)) { call reportfail(concat("extractnames failed surname " , d(surna), "<>", d(surn), " on ", namestr)) } else { incr(testok) } } lifelines-3.0.61/reports/st/st_number.li0000700002540200244210000000612110076661061020414 0ustar prappDomain Users/* * @progname st_number.li * @version 1.0 * @author Perry Rapp * @category self-test * @output none * @description * * validate numeric functions * */ char_encoding("ASCII") require("lifelines-reports.version:1.3") option("explicitvars") /* Disallow use of undefined variables */ include("st_aux") /* entry point in case not invoked via st_all.ll */ proc main() { call testNums() } /* test some numeric functions */ proc testNums() { set(testok, 0) set(testfail, 0) set(one,1) set(two,add(one,one)) if (ne(two,2)) { call reportfail("1+1 FAILED") } else { incr(testok) } if (eq(two,one)) { call reportfail("1==2 FAILED") } else { incr(testok) } if (ne(add(two,two,two,two,two),10)) { call reportfail("2+2+2+2+2 FAILED") } else { incr(testok) } if (ne(sub(two,one),1)) { call reportfail("2-1 FAILED") } else { incr(testok) } if (ne(sub(890,30),860)) { call reportfail("890-30 FAILED") } else { incr(testok) } if (ne(mul(3,4),12)) { call reportfail("3*4 FAILED") } else { incr(testok) } if (ne(mul(3,-4),-12)) { call reportfail("3*(-4) FAILED") } else { incr(testok) } if (ne(mul(-3,-4),12)) { call reportfail("(-3)*(-4) FAILED") } else { incr(testok) } if (ne(mul(.5,.5),.25)) { call reportfail(".5*.5 FAILED") } else { incr(testok) } if (ne(mul(2,.5),1)) { call reportfail("2*.5 FAILED") } else { incr(testok) } if (gt(.5, .7)) { call reportfail(".5>.7 FAILED") } else { incr(testok) } if (lt(-.4,-.5)) { call reportfail("-.4<-.5 FAILED") } else { incr(testok) } if (ge(15,18)) { call reportfail("15>=18 FAILED") } else { incr(testok) } if (le(-.4,-.5)) { call reportfail("-.4<=-.5 FAILED") } else { incr(testok) } if (not(le(-.4,-.4))) { call reportfail("-.4<=-.4 FAILED") } else { incr(testok) } if (not(le(-1,-.4))) { call reportfail("-1<=-.4 FAILED") } else { incr(testok) } if (not(le(-1.1,-1))) { call reportfail("-1.1<=-1 FAILED") } else { incr(testok) } if (ne(div(20, 4), 5)) { call reportfail("20/4==5 FAILED") } else { incr(testok) } if (ne(mod(22, 7), 1)) { call reportfail("22 % 7==1 FAILED") } else { incr(testok) } if (ne(exp(2, 10), 1024)) { call reportfail("2 ^10 ==1024 FAILED") } else { incr(testok) } if (ne(exp(.5, 2), .25)) { call reportfail(".5 ^2 ==.25 FAILED") } else { incr(testok) } set(bubba,34) incr(bubba) if (ne(bubba,35)) { call reportfail("incr(34) == 35 FAILED") } else { incr(testok) } set(bubba,45) decr(bubba) if (ne(bubba,44)) { call reportfail("decr(45) == 44 FAILED") } else { incr(testok) } set(bubba,45.3) decr(bubba) if (ne(bubba,44.3)) { call reportfail("decr(45.3) == 44.3 FAILED") } else { incr(testok) } set(bubba,34.3) incr(bubba) if (ne(bubba,35.3)) { call reportfail("incr(34.3) == 35.3 FAILED") } else { incr(testok) } set(bubba,45.6) decr(bubba) if (ne(bubba,44.6)) { call reportfail("decr(45.6) == 44.6 FAILED") } else { incr(testok) } if (ne(neg(52), -52)) { call reportfail("neg(52) == -52 FAILED") } else { incr(testok) } call reportSubsection("number tests") } lifelines-3.0.61/reports/st/st_string.li0000700002540200244210000001277210171345752020445 0ustar prappDomain Users/* * @progname st_string.li * @version 1.2 of 2005-01-12 * @author Perry Rapp * @category self-test * @output none * @description validate string functions */ char_encoding("ASCII") require("lifelines-reports.version:1.3") option("explicitvars") /* Disallow use of undefined variables */ include("st_aux") global(undef) /* variable with no set value, used in string tests */ /* entry point in case not invoked via st_all.ll */ proc main() { call testStrings() } /* test some string functions against defined & undefined strings */ proc testStrings() { call initSubsection() set(str,"hey") set(str2,upper(str)) if (ne(str2,"HEY")) { call reportfail("upper FAILED") } else { incr(testok) } set(str4,capitalize(str)) if (ne(str4,"Hey")) { call reportfail("capitalize FAILED") } else { incr(testok) } set(str4,titlecase(str)) if (ne(str4,"Hey")) { call reportfail("titlecase FAILED") } else { incr(testok) } set(str6,concat(str2,str4)) if (ne(str6,"HEYHey")) { call reportfail("concat FAILED") } else { incr(testok) } set(str3,upper(undef)) set(str5,capitalize(undef)) set(str5,titlecase(undef)) set(str7,concat(str3,str5)) if (ne(str7,"")) { call reportfail("concat FAILED on undefs") } else { incr(testok) } set(str7,strconcat(str3,str5)) if (ne(str7,"")) { call reportfail("strconcat FAILED on undefs") } else { incr(testok) } set(str8,lower(str4)) if (ne(str8,"hey")) { call reportfail("lower FAILED") } else { incr(testok) } set(str9,lower(undef)) if (ne(str9,undef)) { call reportfail("lower FAILED on undef") } else { incr(testok) } set(str10,alpha(3)) if(ne(str10,"c")) { call reportfail("alpha(3) FAILED") } else { incr(testok) } set(str10,roman(4)) if(ne(str10,"iv")) { call reportfail("roman(4) FAILED") } else { incr(testok) } set(str11,d(43)) if(ne(str11,"43")) { call reportfail("d(43) FAILED") } else { incr(testok) } set(str12,card(4)) if(ne(str12,"four")) { call reportfail("card(4) FAILED") } else { incr(testok) } set(str13,ord(5)) if(ne(str13,"fifth")) { call reportfail("ord(5) FAILED") } else { incr(testok) } /* 2003-08-06 - MTE - modified to ensure that titlecase() */ /* doesn't lowercase strings first */ set(str14,titlecase("big brown 1MEAN horse")) if(ne(str14,"Big Brown 1MEAN Horse")) { call reportfail("titlecase FAILED") } else { incr(testok) } /* 2003-08-06 - MTE - added to ensure that capitalize() */ /* doesn't lowercase strings first */ set(str15,capitalize("lower UPPER lower")) if(ne(str15,"Lower UPPER lower")) { call reportfail("capitalize FAILED") } else { incr(testok) } if (ge(strcmp("alpha","beta"),0)) { call reportfail("strcmp(alpha,beta) FAILED") } else { incr(testok) } if (le(strcmp("gamma","delta"),0)) { call reportfail("strcmp(gamma,delta) FAILED") } else { incr(testok) } if (ne(strcmp("zeta","zeta"),0)) { call reportfail("strcmp(zeta,zeta) FAILED") } else { incr(testok) } if (ne(strcmp(undef,""),0)) { call reportfail("strcmp(undef,) FAILED") } else { incr(testok) } if (ne(substring("considerable",2,4),"ons")) { call reportfail("substring(considerable,2,4) FAILED") } else { incr(testok) } if (ne(substring(undef,2,4),0)) { call reportfail("substring(undef,2,4) FAILED") } else { incr(testok) } if (ne(rjustify("hey",5), " hey")) { call reportfail("rjustify(hey,5) FAILED") } else { incr(testok) } if (ne(rjustify("heymon",5), "heymo")) { call reportfail("rjustify(heymon,5) FAILED") } else { incr(testok) } /* eqstr returns bool, which may be compared to 0 but no other number */ if (ne(eqstr("alpha","beta"),0)) { call reportfail("eqstr(alpha,beta) FAILED") } else { incr(testok) } if (not(eqstr("alpha","alpha"))) { call reportfail("eqstr(alpha,alpha) FAILED") } else { incr(testok) } if (ne(strtoint("4"), 4)) { call reportfail("strtoint(4) FAILED") } else { incr(testok) } if (ne(strsoundex("pat"),strsoundex("pet"))) { call reportfail("soundex(pat) FAILED") } else { incr(testok) } if (ne(strlen("pitch"),5)) { call reportfail("strlen(pitch) FAILED") } else { incr(testok) } set(str14,"the cat in the hat put the sack on the rat and the hat on the bat ") if (ne(index(str14,"at",1),6)) { call reportfail("index(str14,at,1) FAILED") } else { incr(testok) } if (ne(index(str14,"at",2),17)) { call reportfail("index(str14,at,2) FAILED") } else { incr(testok) } if (ne(index(str14,"at",3),41)) { call reportfail("index(str14,at,3) FAILED") } else { incr(testok) } if (ne(index(str14,"at",4),53)) { call reportfail("index(str14,at,4) FAILED") } else { incr(testok) } if (ne(index(str14,"at",5),64)) { call reportfail("index(str14,at,5) FAILED") } else { incr(testok) } if (ne(strlen(str14),66)) { call reportfail("strlen(str14) FAILED") } else { incr(testok) } set(str15,strconcat(str14,str14)) if (ne(strlen(str15),132)) { call reportfail("strlen(str15) FAILED") } else { incr(testok) } if (ne(index(str15,"at",10),130)) { call reportfail("index(str15,at,10) FAILED") } else { incr(testok) } set(str16,strconcat(str15,str15)) if (ne(strlen(str16),264)) { call reportfail("strlen(str16) FAILED") } else { incr(testok) } if (ne(index(str16,"at",20),262)) { call reportfail("index(str16,at,20) FAILED") } else { incr(testok) } if (ne(substring(str16,260,262)," ba")) { call reportfail("substring(str16,260,262) FAILED") } else { incr(testok) } call reportSubsection("string tests") } lifelines-3.0.61/reports/st/st_string_UTF-8.li0000700002540200244210000000360210170364725021320 0ustar prappDomain Users/* * @progname st_string_UTF-8.li * @version 1.1 * @author Perry Rapp * @category self-test * @output none * @description validate string functions on UTF-8 */ char_encoding("UTF-8") require("lifelines-reports.version:1.3") option("explicitvars") /* Disallow use of undefined variables */ include("st_aux") /* entry point in case not invoked via st_all.ll */ proc main() { call testStrings_UTF_8() } /* test some string functions against defined & undefined strings */ proc testStrings_UTF_8() { call initSubsection() call testBothWays_UTF_8("ä", "Ä", "adia") /* u+00E4, u+00C4 */ call testBothWays_UTF_8("ö", "Ö", "odia") /* u+00F6, u+00D6 */ call testBothWays_UTF_8("æ", "Æ", "ae") /* u+00E6, u+00C6 */ call testBothWays_UTF_8("ǽ", "Ǽ", "ae_acute") /* u+01FD, u+01FC */ call testBothWays_UTF_8("ð", "Ã", "eth") /* u+00F0, u+00D0 */ call testBothWays_UTF_8("þ", "Þ", "thorn") /* u+00FE, u+00DE */ call testBothWays_UTF_8("ø", "Ø", "o_stroke") /* u+00F8, u+00D8 */ call testBothWays_UTF_8("Å“", "Å’", "oe") /* u+0153, u+0152 */ call testBothWays_UTF_8("Å‚", "Å", "l_stroke") /* u+0142, u+0141 */ call testBothWays_UTF_8("δ", "Δ", "delta") /* u+03B4, u+0394 */ call testBothWays_UTF_8("ш", "Ш", "Cyrillic_sha") /* u+0448, u+0428 */ /* special cases */ /* Special handling of Greek lower sigma is not implemented Currently lifelines uses Unicode character properties from UnicodeDataExcerpt.txt */ /* call testBothWays_UTF_8("σας", "ΣΑΣ", "Greek sas") */ /* TODO: add German special case when implemented */ call reportSubsection("string UTF-8 tests") } proc testBothWays_UTF_8(slo, shi, sname) { if (ne(upper(slo), shi)) { call reportfail(concat("upper(", sname, ") FAILED")) } else { incr(testok) } if (ne(lower(shi), slo)) { call reportfail(concat("lower(", sname, ") FAILED")) } else { incr(testok) } } lifelines-3.0.61/reports/st/st_table.li0000700002540200244210000000321310177562121020211 0ustar prappDomain Users/* * @progname st_table.li * @version 1.0 (2005-02-01) * @author Perry Rapp * @category self-test * @output none * @description validate table functions */ char_encoding("ASCII") require("lifelines-reports.version:1.3") option("explicitvars") /* Disallow use of undefined variables */ include("st_aux") /* entry point in case not invoked via st_all.ll */ proc main() { call testTables() } /* test some table functions */ proc testTables() { call initSubsection() table(tbl) /* empty table tests */ if (not(empty(tbl))) { call reportfail("empty FAILED") } else { incr(testok) } if (ne(length(tbl), 0)) { call reportfail("length(table)==0 FAILED") } else { incr(testok) } /* single element table tests */ insert(tbl, "alpha", 1) if (empty(tbl)) { call reportfail("not empty FAILED") } else { incr(testok) } set(el, lookup(tbl, "alpha")) if (ne(el, 1)) { call reportfail("lookup(alpha) FAILED") } else { incr(testok) } if (ne(length(tbl), 1)) { call reportfail("length(table)==1 FAILED") } else { incr(testok) } insert(tbl, "alpha", 2) set(el, lookup(tbl, "alpha")) if (ne(el, 2)) { call reportfail("lookup(alpha) FAILED") } else { incr(testok) } if (ne(length(tbl), 1)) { call reportfail("length(table)==1 FAILED") } else { incr(testok) } /* two element table tests */ insert(tbl, "bravo", 2) if (ne(length(tbl), 2)) { call reportfail("length(table)==2 FAILED") } else { incr(testok) } call testFreeTable(tbl) call reportSubsection("table tests") } proc testFreeTable(tbl) { free(tbl) if (ne(tbl, 0)) { call reportfail("free table FAILED") } else { incr(testok) } } lifelines-3.0.61/reports/st/test_fam_it.ll0000700002540200244210000000111210373542171020712 0ustar prappDomain Users/* * @progname test_fam_it * @version 1 * @author Stephen Dum * @category self-test * @output text * @description * * test family iterators: forfam, children and spouses * Iterate over some data, printing results, so we can * compare the output with exected results. */ proc main() { print(nl()) forfam(f,c) { print(d(c),": ",key(f),nl()) print(" children\n") children(f,i,c2) { print(" ",d(c2),": ",key(i),nl()) } print(" spouses\n") spouses(f,s,c2) { print(" ",d(c2),": ",key(s),nl()) } } } lifelines-3.0.61/reports/st/test_fam_it.ref0000700002540200244210000000046710341516554021074 0ustar prappDomain UsersProgram is running... 1: F1 children 1: I1 2: I4 spouses 1: I2 2: I3 2: F2 children 1: I11 spouses 1: I6 2: I7 3: I9 3: F5 children spouses 1: I10 2: I11 4: F7 children 1: I2 spouses 1: I12 2: I11 Program was run successfully. lifelines-3.0.61/reports/st/test_forfam.ll0000700002540200244210000000057210373542171020736 0ustar prappDomain Users/* * @progname test_forfam_it * @version 1 * @author Stephen Dum * @category self-test * @output text * @description * * test family iterator: forfam * Iterate over some data, printing results, so we can * compare the output with exected results. */ proc main() { print(nl()) forfam(f,c) { print(d(c),": ",key(f),nl()) } } lifelines-3.0.61/reports/st/test_forfam.ref0000700002540200244210000000011410341516554021074 0ustar prappDomain UsersProgram is running... 1: F1 2: F2 3: F5 4: F7 Program was run successfully. lifelines-3.0.61/reports/st/test_forindi.ll0000700002540200244210000000057310373542171021117 0ustar prappDomain Users/* * @progname test_forindi_it * @version 1 * @author Stephen Dum * @category self-test * @output text * @description * * test indi iterator: forindi * Iterate over some data, printing results, so we can * compare the output with exected results. */ proc main() { print(nl()) forindi(i,c) { print(d(c),": ",key(i),nl()) } } lifelines-3.0.61/reports/st/test_forindi.ref0000700002540200244210000000016410341516554021261 0ustar prappDomain UsersProgram is running... 1: I1 2: I2 3: I3 4: I4 5: I6 6: I7 7: I9 8: I10 9: I11 10: I12 Program was run successfully. lifelines-3.0.61/reports/st/test_indi_it.ll0000700002540200244210000000163510373542171021104 0ustar prappDomain Users/* * @progname test_indiit * @version 1 * @author Stephen Dum * @category self-test * @output text * @description * * test indi iterators: forindi, Parents, families, spouses, mothers, fathers * Iterate over some data, printing results, so we can * compare the output with exected results. */ proc main() { print(nl()) forindi(i,c) { print(d(c),": ",key(i),nl()) print(" Parents\n") Parents(i,f,c2) { print(" ",d(c2),": ",key(f),nl()) } print(" families\n") families(i,f,s,c2) { print(" ",d(c2),": ",key(f)," ",key(s),nl()) } print(" spouses\n") spouses(i,s,f,c2) { print(" ",d(c2),": ",key(s)," ",key(f),nl()) } print(" mothers\n") mothers(i,m,f,c2) { print(" ",d(c2),": ",key(m)," ",key(f),nl()) } print(" fathers\n") fathers(i,fa,f,c2) { print(" ",d(c2),": ",key(fa)," ",key(f),nl()) } } } lifelines-3.0.61/reports/st/test_indi_it.ref0000700002540200244210000000214210341516554021244 0ustar prappDomain UsersProgram is running... 1: I1 Parents 1: F1 families spouses mothers 1: I3 F1 fathers 1: I2 F1 2: I2 Parents 1: F7 families 1: F1 I3 spouses 1: I3 F1 mothers 1: I12 F7 fathers 3: I3 Parents families 1: F1 I2 spouses 1: I2 F1 mothers fathers 4: I4 Parents 1: F1 families spouses mothers 1: I3 F1 fathers 1: I2 F1 5: I6 Parents families 1: F2 I7 2: F2 I9 spouses 1: I7 F2 2: I9 F2 mothers fathers 6: I7 Parents families 1: F2 I6 2: F2 I9 spouses 1: I6 F2 2: I9 F2 mothers fathers 7: I9 Parents families 1: F2 I6 2: F2 I7 spouses 1: I6 F2 2: I7 F2 mothers fathers 8: I10 Parents families 1: F5 I11 spouses 1: I11 F5 mothers fathers 9: I11 Parents 1: F2 families 1: F5 I10 spouses 1: I10 F5 mothers 1: I7 F2 fathers 1: I6 F2 10: I12 Parents families spouses mothers fathers Program was run successfully. lifelines-3.0.61/reports/st/test_othr_it.ll0000700002540200244210000000112310373542171021125 0ustar prappDomain Users/* * @progname test_othr_it * @version 1 * @author Stephen Dum * @category self-test * @output text * @description * * test iterators: forsour, foreven, forothr * Iterate over some data, printing results, so we can * compare the output with exected results. */ proc main() { print(nl()) print("forsour\n") forsour(s,c) { print(d(c),": ",key(s),nl()) } print("foreven\n") foreven(e,c) { print(d(c),": ",key(e),nl()) } print("forothr\n") forothr(s,c) { print(d(c),": ",key(s),nl()) } } lifelines-3.0.61/reports/st/test_othr_it.ref0000700002540200244210000000016010341516554021273 0ustar prappDomain UsersProgram is running... forsour 1: S1 2: S3 foreven 1: E1 2: E3 forothr 1: X1 2: X3 Program was run successfully. lifelines-3.0.61/reports/st/ti.ged0000700002540200244210000000252610341516554017173 0ustar prappDomain Users0 HEAD 1 SOUR LIFELINES 3.0.49 1 DEST ANY 1 DATE 24 NOV 2005 2 TIME 19:55 1 SUBM 1 GEDC 2 VERS 5.5 2 FORM LINEAGE-LINKED 1 CHAR ASCII 0 @E1@ EVEN 1 INDI 2 ROLE event 0 @E3@ EVEN 1 INDI 2 ROLE event2 0 @F1@ FAM 1 HUSB @I2@ 1 WIFE @I3@ 1 MARR 2 DATE 15 Feb 1859 2 PLAC 2 SOUR 1 CHIL @I1@ 1 CHIL @I4@ 0 @F2@ FAM 1 HUSB @I6@ 1 HUSB @I9@ 1 WIFE @I7@ 1 MARR 2 DATE 2 PLAC 2 SOUR 1 CHIL @I11@ 0 @F5@ FAM 1 HUSB @I10@ 1 WIFE @I11@ 0 @F7@ FAM 1 WIFE @I12@ 1 WIFE @I11@ 1 CHIL @I2@ 0 @I1@ INDI 1 NAME Johan Joseph /Schmidt/ 1 SEX M 1 BIRT 2 DATE 11 Oct 1860 1 FAMC @F1@ 0 @I2@ INDI 1 NAME Johan /Schmidt/ 1 SEX M 1 BIRT 2 DATE EST 1829 2 PLAC 1 DEAT 2 DATE 4 Sep 1885 2 PLAC 1 SOUR 1 FAMC @F7@ 1 FAMS @F1@ 0 @I3@ INDI 1 NAME Maria Joseph /Saurborn/ 1 SEX F 1 BIRT 2 DATE 1 Aug 1826 2 PLAC 1 DEAT 2 DATE 2 PLAC 1 SOUR 1 FAMS @F1@ 0 @I4@ INDI 1 NAME Henrich /Schmidt/ 1 SEX M 1 BIRT 2 DATE CAL 1900 1 FAMC @F1@ 0 @I6@ INDI 1 NAME Belmont /Smith/ 1 SEX M 1 FAMS @F2@ 0 @I7@ INDI 1 NAME Charlene /Wilson/ 1 SEX F 1 FAMS @F2@ 0 @I9@ INDI 1 NAME Abraham /Belmont/ 1 SEX M 1 SOUR @S1@ 1 FAMS @F2@ 0 @S1@ SOUR 1 NOTE a source 0 @S3@ SOUR 1 NOTE another source 0 @X1@ NOTE 1 NOTE a note 0 @X3@ NOTE 1 NOTE another note 0 @I10@ INDI 1 NAME Abraham /Wilson/ 1 SEX M 1 FAMS @F5@ 0 @I11@ INDI 1 NAME Charlene /Smith/ 1 SEX F 1 FAMC @F2@ 1 FAMS @F5@ 0 @I12@ INDI 1 NAME Mary /Jones/ 0 TRLR lifelines-3.0.61/reports/st/trigtest.ll0000700002540200244210000001435610373542171020277 0ustar prappDomain Users/* * @progname trigtest.ll * @version 1.0 * @author Matt Emmerton * @category * @output Text * @description Tests functionality of trig-related functions. * * Test trig and spherical distance calculations * */ options("explicitvars") proc main() { print("Simple Sine/Cosine/Tangent operations (degree->value)", nl()) print(nl()) set(angle1,0) set(angle2,45) set(angle3a,89.99) set(angle3b,90) set(angle3c,90.01) set(angle4,135) set(angle5,180) set(angle6,225) set(angle7a,269.99) set(angle7b,270) set(angle7c,270.01) set(angle8,315) set(angle9,360) print("angle\tsin\tcos\ttan", nl()) print(f(angle1), "\t", f(sin(angle1)), "\t", f(cos(angle1)), "\t", f(tan(angle1)), nl()) print(f(angle2), "\t", f(sin(angle2)), "\t", f(cos(angle2)), "\t", f(tan(angle2)), nl()) print(f(angle3a), "\t", f(sin(angle3a)), "\t", f(cos(angle3a)), "\t", f(tan(angle3a)), nl()) print(f(angle3b), "\t", f(sin(angle3b)), "\t", f(cos(angle3b)), "\t", "N/A", nl()) print(f(angle3c), "\t", f(sin(angle3c)), "\t", f(cos(angle3c)), "\t", f(tan(angle3c)), nl()) print(f(angle4), "\t", f(sin(angle4)), "\t", f(cos(angle4)), "\t", f(tan(angle4)), nl()) print(f(angle5), "\t", f(sin(angle5)), "\t", f(cos(angle5)), "\t", f(tan(angle5)), nl()) print(f(angle6), "\t", f(sin(angle6)), "\t", f(cos(angle6)), "\t", f(tan(angle6)), nl()) print(f(angle7a), "\t", f(sin(angle7a)), "\t", f(cos(angle7a)), "\t", f(tan(angle7a)), nl()) print(f(angle7b), "\t", f(sin(angle7b)), "\t", f(cos(angle7b)), "\t", "N/A", nl()) print(f(angle7c), "\t", f(sin(angle7c)), "\t", f(cos(angle7c)), "\t", f(tan(angle7c)), nl()) print(f(angle8), "\t", f(sin(angle8)), "\t", f(cos(angle8)), "\t", f(tan(angle8)), nl()) print(f(angle9), "\t", f(sin(angle9)), "\t", f(cos(angle9)), "\t", f(tan(angle9)), nl()) print(nl()) print("Simple ArcSine/ArcCosine/ArcTangent operations (value->degree)", nl()) print(nl()) set(value1,-1) set(value2,-0.707) set(value3,-0.3535) set(value4,0.0) set(value5,0.3535) set(value6,0.707) set(value7,1.0) print("value\tarcsin\tarccos\tarctan", nl()) print(f(value1), "\t", f(arcsin(value1)), "\t", f(arccos(value1)), "\t", f(arctan(value1)), nl()) print(f(value2), "\t", f(arcsin(value2)), "\t", f(arccos(value2)), "\t", f(arctan(value2)), nl()) print(f(value3), "\t", f(arcsin(value3)), "\t", f(arccos(value3)), "\t", f(arctan(value3)), nl()) print(f(value4), "\t", f(arcsin(value4)), "\t", f(arccos(value4)), "\t", f(arctan(value4)), nl()) print(f(value5), "\t", f(arcsin(value5)), "\t", f(arccos(value5)), "\t", f(arctan(value5)), nl()) print(f(value6), "\t", f(arcsin(value6)), "\t", f(arccos(value6)), "\t", f(arctan(value6)), nl()) print(f(value7), "\t", f(arcsin(value7)), "\t", f(arccos(value7)), "\t", f(arctan(value7)), nl()) print(nl()) print("Reflexive operations (arcOP(OP(degree)) == degree)", nl()) print("NOTE: Due to the periodic nature of these functions, output degree values may be",nl()) print("different than the input degree values.", nl()) print("NOTE: Due to roundoff, values may be out by a value of one in the least significant place.", nl()) print(nl()) print("angle\t\tarcsin(sin)\tarccos(cos)\tarctan(tan)", nl()) print(f(angle1), "\t\t", f(arcsin(sin(angle1))), "\t\t", f(arccos(cos(angle1))), "\t\t", f(arctan(tan(angle1))), nl()) print(f(angle2), "\t\t", f(arcsin(sin(angle2))), "\t\t", f(arccos(cos(angle2))), "\t\t", f(arctan(tan(angle2))), nl()) print(f(angle3a), "\t\t", f(arcsin(sin(angle3a))), "\t\t", f(arccos(cos(angle3a))), "\t\t", f(arctan(tan(angle3a))), nl()) print(f(angle3c), "\t\t", f(arcsin(sin(angle3c))), "\t\t", f(arccos(cos(angle3c))), "\t\t", f(arctan(tan(angle3c))), nl()) print(f(angle4), "\t\t", f(arcsin(sin(angle4))), "\t\t", f(arccos(cos(angle4))), "\t\t", f(arctan(tan(angle4))), nl()) print(f(angle5), "\t\t", f(arcsin(sin(angle5))), "\t\t", f(arccos(cos(angle5))), "\t\t", f(arctan(tan(angle5))), nl()) print(f(angle6), "\t\t", f(arcsin(sin(angle6))), "\t\t", f(arccos(cos(angle6))), "\t\t", f(arctan(tan(angle6))), nl()) print(f(angle7a), "\t\t", f(arcsin(sin(angle7a))), "\t\t", f(arccos(cos(angle7a))), "\t\t", f(arctan(tan(angle7a))), nl()) print(f(angle7c), "\t\t", f(arcsin(sin(angle7c))), "\t\t", f(arccos(cos(angle7c))), "\t\t", f(arctan(tan(angle7c))), nl()) print(f(angle8), "\t\t", f(arcsin(sin(angle8))), "\t\t", f(arccos(cos(angle8))), "\t\t", f(arctan(tan(angle8))), nl()) print(f(angle9), "\t\t", f(arcsin(sin(angle9))), "\t\t", f(arccos(cos(angle9))), "\t\t", f(arctan(tan(angle9))), nl()) print(nl()) print("Decimal Degrees to DMH Conversions", nl()) print(nl()) set(deg1,44) set(min1,17) set(sec1,29) dms2deg(deg1,min1,sec1,dec1) print(d(deg1), " degrees, ", d(min1), " minutes and ", d(sec1), " seconds = ", f(dec1), " degrees.", nl()) deg2dms(dec1,deg1,min1,sec1) print(f(dec1), " degrees = ", d(deg1), " degrees, ", d(min1), " minutes and ", d(sec1), " seconds.", nl()) print(nl()) print("Spherical Distance Calculations", nl()) print(nl()) /* 43.410815 / 43^24'38" is my house (lat) */ set(deg1,43) set(min1,24) set(sec1,38) dms2deg(deg1,min1,sec1,dec1) /* -80.508982 / -80^30'32" is my house (lon) */ set(deg2,-80) set(min2,30) set(sec2,32) dms2deg(deg2,min2,sec2,dec2) /* 44.101825 / 44^06'06" is my cottage (lat) */ set(deg3,44) set(min3,06) set(sec3,06) dms2deg(deg3,min3,sec3,dec3) /* -81.721931 / -81^43'18" is my cottage (lon) */ set(deg4,-81) set(min4,43) set(sec4,18) dms2deg(deg4,min4,sec4,dec4) print("House Lat: ", d(deg1), " degrees, ", d(min1), " minutes and ", d(sec1), " seconds = ", f(dec1), " degrees.", nl()) print("House Lon: ", d(deg2), " degrees, ", d(min2), " minutes and ", d(sec2), " seconds = ", f(dec2), " degrees.", nl()) print("Cottage Lat: ", d(deg3), " degrees, ", d(min3), " minutes and ", d(sec3), " seconds = ", f(dec3), " degrees.", nl()) print("Cottage Lon: ", d(deg4), " degrees, ", d(min4), " minutes and ", d(sec4), " seconds = ", f(dec4), " degrees.", nl()) print("House to Cottage: ", f(spdist(dec1,dec2,dec3,dec4)), nl()) print("House to Cottage (via roads, suggested by Google Maps: ", f(138.2)) } lifelines-3.0.61/reports/st/trigtest.ref0000700002540200244210000000346410355541372020444 0ustar prappDomain UsersProgram is running...Simple Sine/Cosine/Tangent operations (degree->value) angle sin cos tan 0.00 0.00 1.00 0.00 45.00 0.71 0.71 1.00 89.99 1.00 0.00 5728.35 90.00 1.00 0.00 N/A 90.01 1.00 -0.00 -5728.35 135.00 0.71 -0.71 -1.00 180.00 0.00 -1.00 -0.00 225.00 -0.71 -0.71 1.00 269.99 -1.00 -0.00 5723.99 270.00 -1.00 -0.00 N/A 270.01 -1.00 0.00 -5723.99 315.00 -0.71 0.71 -1.00 360.00 0.00 1.00 0.00 Simple ArcSine/ArcCosine/ArcTangent operations (value->degree) value arcsin arccos arctan -1.00 -90.00 180.00 -45.00 -0.71 -44.99 134.99 -35.26 -0.35 -20.70 110.70 -19.47 0.00 0.00 90.00 0.00 0.35 20.70 69.30 19.47 0.71 44.99 45.01 35.26 1.00 90.00 0.00 45.00 Reflexive operations (arcOP(OP(degree)) == degree) NOTE: Due to the periodic nature of these functions, output degree values may be different than the input degree values. NOTE: Due to roundoff, values may be out by a value of one in the least significant place. angle arcsin(sin) arccos(cos) arctan(tan) 0.00 0.00 0.00 0.00 45.00 45.00 45.00 45.00 89.99 90.00 89.99 89.99 90.01 90.00 90.01 -89.99 135.00 45.00 135.00 -45.00 180.00 0.00 180.00 -0.00 225.00 -45.00 135.00 45.00 269.99 -90.00 90.01 89.99 270.01 -90.00 89.99 -89.99 315.00 -45.00 45.00 -45.00 360.00 0.00 0.00 0.00 Decimal Degrees to DMH Conversions 44 degrees, 17 minutes and 29 seconds = 44.29 degrees. 44.29 degrees = 44 degrees, 17 minutes and 29 seconds. Spherical Distance Calculations House Lat: 43 degrees, 24 minutes and 38 seconds = 43.41 degrees. House Lon: -80 degrees, 30 minutes and 32 seconds = -80.51 degrees. Cottage Lat: 44 degrees, 6 minutes and 6 seconds = 44.10 degrees. Cottage Lon: -81 degrees, 43 minutes and 18 seconds = -81.72 degrees. House to Cottage: 124.24 House to Cottage (via roads, suggested by Google Maps: 138.20Program was run successfully. lifelines-3.0.61/reports/stats.ll0000700002540200244210000005564610076661060017150 0ustar prappDomain Users/* * @progname stats.ll * @version 10.0 * @author Jim Eggert * @category * @output Text * @description Compute statistics on dates, ages, counts in the DB. This LifeLines report program computes mean statistics of various quantities binned over other quantities. The quantities it knows about are ages at and dates of birth, christening, first and last marriage, first and last child's birth, death, burial, and today; the number of children, siblings, and marriages; and sex, surname, first name, soundex, and any simple GEDCOM tag. These can be combined nearly arbitrarily and evaluated over the whole database, or restricted to ancestors or descendants of a chosen individual or to members of a predetermined set. Further restrictions on the individuals included in the statistics can be based on any quantity that the program knows about. The program will optionally print out the names of all the individuals included in the statistics. For example, you can produce statistics of the age at death of as a function of birth year, dage vs byear the number of children of females named Smith as a function of year of first marriage, kids vs myear | sex = F & surname = Smith the number of spouses for male vs female blacksmiths, families vs sex | occu = blacksmith the age at last childbirth as a function of place of marriage. qage vs mplace the names of all Joneses who lived to be greater than 80 unity vs unity | surname = Jones & dage > 80 All this without writing any programs of your own. If a particular statistic for an individual is unavailable, and if the global variable not_strict is nonzero (as it is in the distribution version of this report, then certain guesses are allowed as to the value of that statistic. So far, these guesses are few. Birth year and month are guessed from baptismal date, and death year and month are guessed from burial date. The user is prompted for what quantity to plot vs what to bin over. Each is to be given as a specification string of the form e