home *** CD-ROM | disk | FTP | other *** search
Wrap
/* Harold H. Ipolyi ⌐ 11 June 1994 -> 2001 =====README===== Short: WWW browser HTML's from Scion Genealogy dbs's Uploader: ipolyi@ev1.net (Harold H. Ipolyi) Author: Harold H. Ipolyi Type: util/rexx LastRev: 29 Jun 2001 latest: index window is now single column for easier perusing deltas: Added "index" button, changed "╢" and "«" links to buttons since version "15 Dec 1999": FRAMES <PRE> _____________________________________________________________________________ URL: http://ddw-rh.dyndns.org/~ipolyi/scion.html _____________________________________________________________________________ _____________________________________________________________________________ to INSTALL: just drag Scion2html.rexx & its ICON into REXX: _____________________________________________________________________________ to RUN: first: load a Scion data base then: double click Scion2html.rexx icon or: in an AmigaShell: rx REXX:Scion2html.rexx or: Scion "Settings" menu item: "Set Function Keys..." set one of the Function Keys to: rx REXX:Scion2html.rexx or: I use the following AWeb execution commands: <HR> To remake the HTML Genealogy: <A HREF="x-aweb:command/Sys:Scion/Scion Work:Genealogy/FamDB">Load</A> and, <A HREF="x-aweb:command/C:rx REXX:Scion2html.rexx">convert</A> into HTML's; then <A HREF="x-aweb:command/Sys:Miami/Miami">connect</A> and <A HREF="x-aweb:command/Sys:AmFTP/AmFTP">upload</A> to on-line provider. <HR> _____________________________________________________________________________ _____________________________________________________________________________ Scion Genealogist ⌐ Rob Akins (biz/dbase/Scion.lha) is comprehensive, easy to use, and provides Arexx ports for extracting data. _____________________________________________________________________________ Scion2html.rexx can repeatedly and painlessly recreate HTML files from entries in Scion data bases for cross-platform viewing via Mosaic, etc. Scion2html.rexx can also create AmigaGuide style ".guide" hypertexts _____________________________________________________________________________ GfxCon ⌐ Dirk Farin (gfx/conv/gfxcon.lha) is used to make Thumbnails from Scion data base pictures as links to Picture Albums _____________________________________________________________________________ _____________________________________________________________________________ Prerequisites: Scion V 4.07+ ⌐ Rob Akins ARexx (of course :) rexxsupport.library ( WB disk:libs ) rexxarplib.library ( aminet:util/rexx ) HTML/WWW browser (AMosaic, Mosaic, ... ) also: (to incorporate and display in-line pictures) GfxCon V1.7+ ⌐ Dirk Farin ( must be in: Sys:Tools) Amiga OS 3.0+ for displaying picture datatypes _____________________________________________________________________________ NOTE: The directory suffix for the AmigaGuide files has changed from A to AG Internal links prevent simple renaming of [....]A to [....]AG _____________________________________________________________________________ NOTE: To allow HTML customization of ( ╢ ) info files, i.e. P{IRN}.DBNAME and F{IRN}.DBNAME files, Scion2html.rexx will now remove certain HTML tags, <P></P><TT></TT></PRE><PRE>, when writing guide & text files. _____________________________________________________________________________ PN{IRN}.DBNAME files are used to generate the ( ╢ ) info files. PICTURES from [P|F]P{IRN}.DBNAME are links to Picture Albums ( « ) (please see PP & FP Notes later) _____________________________________________________________________________ Tested: |»»»»»»»»»»»»»| on Amiga3000 Kickstart v.37.175 Workbench v.38.35 | assume | & Amiga3000 Kickstart v.40.68 Workbench v.40.42 | TradeMarks | w/ Scion Version 3.06 & Mosaic1.2NoNet | & | w/ Scion Version 3.13 & Mosaic1.3betaAmitcp | CopyRights | w/ Scion Version 4.07 & Mosaic2.0Prerelease | as | w/ Scion Version 5.07 & AWeb Version 3.1 | appropriate | HTML file compatibility tested on: |_____________| HotJava, Netscape (Sun), Netscape (Mac) _________________________ | | | Bugs: (eeeek!) | ________________________|_________________________|_________________________ | | | Scion2html.rexx only recognizes the first Scion ARexx port name: "SCIONGEN"| | If additional copies of Scion are running concurrently, they are ignored. | |____________________________________________________________________________| | | | If a new Thumbnail format is selected, the user must manually edit | | the Picture Album files to reflect the new Thumbnail suffixes. | | _____________________________________________________ | | / The reasoning behind this restriction is: \ | | /»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»\ | | / The Picture Album files may have been User modified \ | | ( and must therefore be protected against auto-regeneration ) | | »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» | |____________________________________________________________________________| =====README===== =====History===== Release History: 11 Jun 1994 ╖ ScionToMosaic.rexx for ScionGenealogist V 3.06 19 Jun 1994 ╖ MakeDir(HTMLdir) fixed; extra comments processed. 25 Jun 1994 ╖ Fixed descenders; Women in List italicised ╖ updated for ScionGenealogist V 3.13 3 Sep 1994 ╖ Replaces occurrences of "<ScionIRN>" by NAMES from DB ╖ e.g. Replaces <101> by Iam Onehundredone, Jr. ╖ Added Family Info file processing; Ancestor trees ╖ Added descendant charts ╖ Women italicised; men boldface everywhere ╖ Added creation of a textual file "GenealogyOf..." 1 Mar 1995 ╖ cleaned up bugs in creation of textual files 6 Jun 1995 ╖ renamed ScionToMosaic to Scion2html ╖ (somehow it kept winding up in "music" on AmiNet) ╖ date format in "ancestors" section normalized ╖ images used as links to picture albums (see ╖ PP & FP Notes) and links to pictures ╖ GfxCon >V1.5 used for picture copying and reducing ╖ recoded for DOS/Windows restricted 8.3 file names 26 Jun 1995 ╖ A little comments cleanup after the last changes ╖ skip remaking of files when unnecessary ╖ another new wrinkle for one of the users: ╖ special file name prefixes ( GenPrefix ) 1 Jul 1995 ╖ added graphics to Ancestors charts ╖ allow family picture album sans family info file ╖ Thumbnail size now user settable ( at line 3 ) 5 Jul 1995 ╖ (more info) ╗ ( ╢á) ╖ (family info) ╗ ( ╢ ) ╖ (Picture Album) ╗ ( « ) ╖ (╢) («) glyphs added to Ancestor, Descendant charts ╖ Thumbnail format {GIF|JPEG} now user settable ╖ ( suffix still .gif in all cases ) 1 Aug 1995 ╖ updated for release with ScionGenealogist V 4.07 ╖ set correct stack size (21000) for GfxCon ╖ JPEG now the default Thumbnail format ╖ (smaller files, no ⌐ problems, looks better) ╖ changing of configuration added ╖ configuration now saved in S:Scion2html.Config 12 Aug 1995 ╖ fix some bugs that creeped in with updated to Scion4.07 ╖ handling of more of the new ScionV4.07 data fields ╖ using CheckForReplacement to create all anchors ╖ changed appearance of family & descendant charts ╖ configuration is displayed at startup 24 Sep 1995 ╖ ".guide" style hypertext generation added ╖ Guide picture VIEWER set to MultiView for OS => 3.0 ╖ person information now in person.[array] ╖ initial settings now in flags.[array] ╖ verbose flag for extra progress reporting details ╖ bold flag for: male ½boldface╗ & female ½italic╗ ╖ removed undocumented buggy feature of replacing ocurrences ╖ of [ScionIRN] (now only replaces ocurrences of <ScionIRN>) ╖ fixed a GenPrefix init bug (couldn't reset back to null) 1 Jan 1996 ╖ changed "&" in front of MARRIAGE DATES to "x" ╖ Scion2html.Config moved from S: to ENVARC: ╖ Scion2html.Config now only stored when changed ╖ directory of ".guide" style files changed to [.....]AG ╖ runtime option - exclude details on living persons ╖ ( please use ? for death date when date not known ) ╖ added textured background ( for IBrowse ) ╖ no longer forcing all ( ╢ ) info files to <PRE><TT> ╖ added code to filter <TT> </TT> <PRE> </PRE> <P> </P> ╖ HTML tags from guide & text info files. ╖ using INDEX for Guide files (instead of "List of People" ) ╖ "?" then "t" creates "genealogytemplate.html" ╖ "?" then "r" view readme information ╖ "?" then "h" review the Release History ╖ "?" then "d" to change settings of default parameters 3 Mar 1996 ╖ fix null IRN bug 14 Aug 1996 ╖ fix libs test 30 Jan 1997 ╖ "List of Persons." changed to "Personae" ╖ default "Personae" in tables; link to "Personae sans tables" ╖ don't want tables? then: ╖ delete file GENEAFIL.htm and then ╖ rename file GENEAFIN.htm to file GENEAFIL.htm 30 Mar 1997 ╖ Logic to prevent output for empty data base nodes 20 Apr 1997 ╖ bug fix: GENEAFIL.htm reference to GENEAFIn.htm was incorrect 1 Jun 1997 ╖ added link to my home page @ http://ipolyi@micron.net/~ipolyi ╖ fixed some html nits ╖ removed the Samms Genealogy - it is now (with others) at: ╖ URL: http://www.micron.net/~ipolyi/fic/FicGenealogies.html ╖ added "hints" section to menu items ╖ removed genealogytemplate - it is now at: ╖ URL: http://www.micron.net/~ipolyi/scion.html 27 Jun 1998 ╖ added an index.html to prevent direct viewing of []G directory ╖ removed non-tables version of Personae page ╖ pictures album extra images now in sub-diretory: img ╖ To satisfy a large demand (me & one other:) I have: ╖ added an INDEX - featuring pulldown firstnames 11 Jul 1998 ╖ began Ver 5+ handling ( guarded by test for Version > 5 ) ╖ added Address & Telephone handling for preparer, pers, & fam ╖ added Attachments handling for pictures and notes ╖ NOTE: Attachments are given priority ╖ robots blocking - should have done this earlier! ╖ went back to preset of ( ╢ ) info files with <PRE><TT> ╖ added sound (╞) files to .guide(s) ╖ added an INDEX for .guide(s) 26 Jul 1998 ╖ bug - moved Scion2html.Config to ENVARC: ( Scion change ) 5 Sep 1998 ╖ added email tag processing for ╖ "Extras" menu item "set address/phone... " ╖ "Settings" menu item "Preparer..." ╖ ( see HELP for "Address Requester" "telephone" ) 17 Oct 1998 ╖ increased apparent loading speed of "INDEX" pages ╖ also cross-listing women in "INDEX" under their married names 1 Nov 1998 ╖ replacing null surnames and given names with "_._" ╖ ( guard against early process termination ) ╖ surnames are now headings for INDEX page pulldown lists ╖ updated the ANCHORs hints 29 Nov 1998 ╖ Picture Album hints redone into a separate page ╖ fixed Family Picture Album link bug ( thanx to Dave Crawford ) ╖ added META tags ( by request ) ╖ back to " ///\" to show mating ( someone had problem with "&" ╖ fixed a picture xfer problem that crept in with Dave C. changes ╖ new: add Pictures to existing Picture Album(s) ╖ aminet structure change 11 Mar 1999 ╖ requested cleanup & Guide changes 31 Oct 1999 ╖ BURIALDATE has not previously been processed - corrected 15 Dec 1999 ╖ frames 9 Jan 2000 ╖ updated adresses to www.webpak.net/~ipolyi ╖ made some "GetLastName: PROCEDURE" changes 27 Jan 2000 ╖ "KEYWORDS" META tag change 22 Aug 2000 ╖ fix of a "add Pictures to existing Picture Album(s)" bug 19 Oct 2000 ╖ index window is now single column for easier perusing ╖ Added "index" button, changed "╢" and "«" links to buttons 2 Jun 2001 ╖ Web address and email changes to: ╖ http://ddw-rh.dyndns.org/~ipolyi/scion.html ╖ ipolyi@ev1.net 29 Jun 2001 ╖ added missing </FORM>'s ╖ removed unneccessary/troublesome <BR>'s ╖ changed www.amiga.de to www.amiga.com ╖ =====History===== =====Future?===== ╖ not sure yet what to do with sounds for HTML ... ╖ ( when an OPEN standard for all platforms comes along? ) ╖ controllabe depth of the ancestor and descendant charts ╖ ( time and storage saving measure ) ╖ ( Ultimates, i.e. top or botton of line are exempt ) ╖ =====Future?===== * 'rx Scion2html.rexx Normal' automagically [re]creates a .htm file for * each person in your ScionGenealogist data base; following the TEMPLATE: * http://ddw-rh.dyndns.org/~ipolyi/scion.html * In an HTML file (maybe HOME PAGE) put an anchor pointing to GenealogyFile: * ( see the hint at the end of a NORMAL run or specify ANCHOR ) _____________________________________________________________________________ * NOTE: Attachments are given priority over P{N|P|S}{IRN}.DBNAME files. * The PN{IRN}.DBNAME files are used to generate the " ╢ " files. * Whenever the PN{IRN}.DBNAME is changed or replaced, the corresponding * " ╢ " file will be updated if 'rx Scion2html.rexx {IRN}' is re-run. * PP & FP Notes: (personal & family pictures; picture albums " « ") * ScionGenealogist names pictures as; * PP{IRN}.DBNAME (personal) and FP{mFGRN}.DBNAME (family) * {P|F}P{IRN|mFGRN}.DBNAME now used as pictures & links. * GfxCon is used to copy/reduce jpegs from {P|F}P{IRN|mFGRN}.DBNAME * reductions are anchors pointing to HTML's for pictures albums * in pictures albums are anchors pointing to pictures * picture albums will not be overwritten; they may be updated with * additional pictures; links to other pictures, etc. * Whenever picture {P|F}P{IRN|mFGRN}.DBNAME is changed or replaced, * the corresponding images will be updated * {P|F}P{IRN|mFGRN}.DBNAME may be any legal GfxCon input picture FORMAT: * (ILBM,RGB8,PCX,BMP,RLE8,TIFF,Targa,LBM,RGBN,IMG,RLE4,GIF,JPEG,RGB-Raw) */ stonegif = "47494638376140004000F70000F3F3F3 EEEEEEE9E9E9E3E3E3DCEDEDDDDDDDDCCBCBD8D8D8D2D2D2CBDCDCCCCCCCCBBA BAC6C6C6C1C1C1BACBCBBBBBBBB6B6B6AABABA52525252525252525252525252 5252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525252525252525252525252525252525252525252 52525252525252525252525252525252525252525252525252525252522C0000 0000400040000008FF00152860201041810308183478F0A00183870F050A6480 40C10383080E14CCC8E080C6040A1C1608595141C285140B1C2C90D0A4C70303 062800A9D1E548060E122268D04081030507180C78E9D1E04804081204553060 A4C98A1E0B34553950A24189211F10B4EAD166839D070E9AECE85001CBB06111 0C2028D5694D841A150E7C88546981AD081CAC44DAB162D2033D332235AB31E9 D90881752654C8B3A144C60C12AC35C97260CBA34D4B1254AB37E448AD7E9F22 F5D8712953820306875D58152AD8A13A59AA64709760D096028F56A45DF96BC6 B8BFC3DE44F8C025CEDF093ADEF5E830F941DB0829060D0BB42452B507042470 8870A743B59433CEFFBCEBA0FBE6AB668186347BD66CC98145254A3DA095BA46 DF0252833799182EDD83090DE5164B3A691414450FDD755D027ED996D07306F5 2457427009C0526A3521A5125F027D85D050FFE5D65D4C1A1190125000228098 54B82D05DC4F2D5DF7D260BFAD651060DD79A45476452DA6505F83CD64517E10 2150DC8D26813491784CF2755086417DD55F61722508128273952495427E21D5 13505B7924C06E41E5A45A77049265526B0EF584104B5A1126104C4FD2E55F01 5F0195134C045194540204CA961554522520800004C4A41E80083D3556471656 B55197B4AD7923546385F46594A73DD6D15C031178DB01C9B917DA427E91F693 824FC2D4957C7E5EFF57D046DD75289D4F8EA607D4504021F4954A2C81949972 1A6586D56914C1775F7561293967450E2C7060466735F5DD4EE5C9FA185C4511 58D0410C9A2AC0440D70FB5058326D85A274A9652953A98DF225175C0C3EC453 5911EDC49697E57A34808707961B9A4E437D57D940007764A7851CF956508F4B E628D00076C92B138DF6F917EF6E1CD9465153938DE614B5570A36E39AC33AF0 556A1D31D8148CBC0909D476EC498791475A95BA5969D7A995D4538561376B57 F676E8927A6C65CA51C48309E527C248C215647BDA56745059CFAEB9E6C7ADA5 955E652DB7F99B5A266ABBE99C9F32D8284B7DBDD493821909ACF07A7BB2BDA1 421B86C650A5FCA1FF4D9D7B78B13D71AA16951859D7147DB955662B9146D0D9 6A4A86D450A432F6C0C60D50DCD0553E7B4BD8AF4526C98063579DA8E157DB1D 2440587D42405B46A9B517D4918D56D7216966252BDFE630797929554C617853 9FA335E8D2573F3D508085091EE4C0C7818D74974B15C16663710DEC69A472B9 FF97394902957757036C1B3419AF85E1E9E67D176118179834256040D3756E6E D6BF2391FF407932355715888291114F6E84A78C008066C9329EB22C3393DD28 88620D10005DD674A0AFF1CA219BC1954DF8941404488B576AA9D77070341DD2 0CE027262C0E9AAA22957671292A493100698A472BD3D4AE3B180193510043A6 50350024BF21DF73FFE612279379473AF9A90B936A23A4C0AC4942D88990812E 8627C254667510C85C8C3664A64F69E84789BB4850002580F5050964FF8AD058 46F31649C58500E342914A9EA71E1CF66C2CB3E999DC0C43232305E937BD2A0E 447C539AE985072865DCCCC9CEB297B95451345F49495EC4139D18916F50634A 511F25752F89FC2432A5C19D607843A072B9C4010620DF6ED2C31C3C31285149 89930AA717A68EE88724505157AD32651615E64E23DE6210B5660281B12D8659 2D79C953C45220FD94267B3B7AE00FB5584781C9CA3F6E54CF2177F21EA9294B 2C1709607C48A63CE5192501F519C0E5A0A4B0B3F84A4358F1081D2D530038FE 884262C9D0D61CB2FF169938C54FFD7C0B284B93ACF59D2B23C9A14D7608D028 817DAB41AFEB16531066234532E52E29720995D83200D71DE02722011B4318F2 9DFBB50658A64CE3E856C3B9BCBCCF6345D90E100350388C2ECF5A035C934A84 B324F554644CA3E34F1C3F331303FC2B5B15F9D2C8AAB3B24C6E653323438004 0D521C053168A755F91003C6F44783FCC88D47B14D7BD6344B060E2C5450F9E8 5328C6CD91C0A43CEB9108EBE27AABD8A488223BAA49B2A4C691E718C84F6101 4D4C02034516F58A5967C989464362A0AC3E559930440001DCF429E324F00010 C851D07AD617A07DE96D84499C785878581DD1C660D4A3E4AE2C929CB8994A89 A2528A6D783537B6FF6CA55CB1A28F6E1C25955CE15327D69C53BB1E34B1A361 C44178292165AA239454AD6E37597CDA86E4A44CCA298C49CBB5AC4ABE949E61 52AA3C5D81094340DAA3A2C0552B3C41EE43CC94A579868A395CAA0C7A74C214 9894344F259128774473A30CC568276ACBC8B8D46A35B1E0C4908D5A1C14BF2A 12DAC23356F5ECD2755ED7960D31D33533A99D60962326D4E50F264C09007DB2 F74CBF48C690C701904269251009F2507EFA0A527227F3CB980C607591D9E1D1 4AA5000824A929A61A1D46464B9F1999D2282A7C935A26B43F1FEF248B0CC98D D63CD6DFF77C8CA134AA8AEE72F33681DAC9475F1140001E50CCFBA5C9327C11 8CA55E5200F9FDC8B3C94AB49D92A813AEA529082101C05366A332BA9D298C36 FA31CA6CC895C0A74897BB280ACDC80063972ABE6A80121451A22F65AF6471E9 62E279DE68165B176B522B2F06D032601AD2366A7545718F9B93D484832774F9 4635E80193CDAA223F076451421E0E96BD30181CEA1C04D335C3D170D6659952 13065DBDBB9F8586D214BDBA298FF1D1F44F6655009581053018140D55144325 504147C92A890912575257D5AC855B01D8999E7AFD90521984260101003B"X /* Hex file above was generated as follows: (1) From CLI, typed "type > RAM:temp Stone.gif opt h" (2) From a text editor (preferably one with "vertical" block marking), removed all the extraneous stuff from resulting "RAM:temp" (3) Using text editor, imported the resulting hex file above (note enclosing quotes and extra "X" at the end). */ /* add libraries */ libs = 'rexxsupport.library rexxarplib.library' DO i = 1 TO Words(libs) lib = Word(libs,i) if ~Show('Lib',lib) then do if EXISTS('LIBS:'lib) then call addlib lib, 0, -30 else do say ' ' say 'ERROR: cannot find' lib 'in LIBS:' say ' ' if lib = 'rexxsupport.library' then do say ' please copy rexxsupport.library from WorkBench disk:libs' end else do say ' please get rexxarplib.library from aminet:util/rexx' end say ' ' AskExit() end end end i /* some Intitializations = default */ flags.Thumbnail = 350 /* Thumbnail maximum dimensions */ flags.Thmbfmt = "JPEG" /* Thumbnail format { GIF | JPEG } */ flags.MakeHTML = 0 /* 0 to make HTML */ flags.MakeText = 0 /* 1 to make printable ASCII text file */ flags.MakeGuide = 0 /* 1 to make ".guide" hypertext files */ flags.verbose = 0 /* 1 for verbose progress reports */ flags.bold = 0 /* 0 male ½boldface╗ & female ½italic╗ */ flags.living = 0 /* > 0 show: .Living... */ flags.GenPrefix = "" /* needs only be set for specific circumstances ( if this makes no sense, you don't need it :) */ sayASCII = ' plain ASCII printable files' sayguide = ' ".guide" hypertext files' sayHTML = ' ".htm" hypertext files for WWW Net surfers' bolditalic = ' using boldface ╗ men and italic ╗ women ' progress = ' progress reports' if EXISTS('rexx:Scion2html.rexx') then rexxdir = "rexx:" else rexxdir = "" OldScion2html = Open('Scion2html','S:Scion2html.Config','r') if OldScion2html then do Close('Scion2html') say '... moving S:Scion2html.Config ---> ENVARC:Scion/Scion2html.Config' address command 'C:copy S:Scion2html.Config ENVARC:Scion/Scion2html.Config' address command 'C:delete S:Scion2html.Config' say ' ' end if EXISTS('ENVARC:Scion/Scion2html.Config') then do say '... moving ENVARC:Scion/Scion2html.Config ---> ENVARC:Scion2html.Config' address command 'C:copy ENVARC:Scion/Scion2html.Config ENVARC:Scion2html.Config' address command 'C:delete ENVARC:Scion/Scion2html.Config' say ' ' end GoodScion2html = Open('Scion2html','ENVARC:Scion2html.Config','r') ChangedScion2html = ~GoodScion2html if GoodScion2html then do Mdir = readln('Scion2html') flags.Thumbnail = readln('Scion2html') flags.Thmbfmt = readln('Scion2html') coumpound = readln('Scion2html') /* say 'coumpound = 'coumpound do bitnum = 0 to 7 by 1 say 'bit 'bitnum' = 'bittst(coumpound,bitnum) end tstbittest = 0 say 'tstbittest = 'tstbittest do bitnum = 0 to 7 by 1 say 'bit 'bitnum' = 'bittst(tstbittest,bitnum) end tstbittest = 7 say 'tstbittest = 'tstbittest do bitnum = 0 to 7 by 1 say 'bit 'bitnum' = 'bittst(tstbittest,bitnum) end */ flags.MakeHTML = bittst(coumpound,3) flags.MakeGuide = bittst(coumpound,2) /* flags.verbose */ flags.bold = bittst(coumpound,1) flags.MakeText = bittst(coumpound,0) flags.GenPrefix = readln('Scion2html') Close('Scion2html') say ' ' say ' Scion2html.Config settings:' say ' output destination: 'Mdir end else do say ' ' say ' default settings:' say ' output destination: (will be set later)' end say ' Thumbnail: 'flags.Thmbfmt' max 'flags.Thumbnail'x'flags.Thumbnail if flags.GenPrefix ~= '' then say ' GeneralPrefix = 'flags.GenPrefix else say ' GeneralPrefix = {default} [special circumstance only]' if flags.MakeGuide then say ' make'sayguide else say ' NOT making'sayguide if flags.MakeText then say ' make'sayASCII else say ' NOT making'sayASCII if ~flags.bold then say ' 'bolditalic else say ' NOT'bolditalic if flags.verbose then say ' verbose'progress else say ' minimal'progress' (during "normal" runs)' say ' ' if flags.GenPrefix = "" then flags.GenPrefix = "GENEAFI" say ' ' say ' Note: Scion2html.rexx cannot run while Scion is in HELP mode. ' SAY ' ' Address "SCIONGEN" /* Point at Scion Genealogist port */ options RESULTS if Show(p,'SCIONGEN') then do 'GETPROGVERSION' flags.VERSION = RESULT 'GETDBNAME' /* Issue GET DB NAME command to Scion Genealogist */ flags.DBNAME = RESULT if flags.VERSION > 5 then do 'GETBRKCHAR' flags.BRKCHAR = RESULT 'GETLASTIRN' end else 'GETTOTALIRN' LASTIRN = RESULT if LASTIRN = 0 then do SAY ' ' SAY ' Scion Genealogist is currently displaying an EMPTY data base! ' SAY ' ' SAY ' ' AskExit() end end else do SAY ' ' SAY ' Scion Genealogist is NOT currently displaying a data base: ' SAY ' ' SAY ' Please start Scion; load desired data base; then try again... ' SAY ' ' SAY ' ' AskExit() end PARSE ARG flags.target flags.target = Upper(strip(flags.target,,'"')) /* just in case, remove errant quotes */ origThumbnail = flags.Thumbnail origThumbformat = flags.Thmbfmt blanks = ' ' flags.DoPictures = CheckGfxCon() DO WHILE flags.target = '' | flags.target = '?' | flags.target = '/' | substr(flags.target,1,1) = 'H' | substr(flags.target,1,1) = 'P' SAY ' ' if flags.target = 'H' | flags.target = 'HINTS' then do SAY ' Some hints:' SAY ' ' SAY ' -----------------------------------------------------------------' SAY ' | if Death Date is unknown, please use ? |' SAY ' | this will allow the runtime option of |' SAY ' | "exclude details on living persons" |' SAY ' | to operate properly. |' SAY ' -----------------------------------------------------------------' SAY ' ' SAY ' -----------------------------------------------------------------' SAY ' | ╖ "Death Place" & "Burial Place" may be used as |' SAY ' | ╖ additional COMMENT fields, IF: |' SAY ' | "Death Date" & "Burial Date" are blank, respectively |' SAY ' -----------------------------------------------------------------' SAY ' ' SAY ' -----------------------------------------------------------------' SAY ' | ╖ Conventions that I followed in my ScionGenealogist data base: |' SAY ' | ╖ surnames kept pure ( no honorifics, Jr''s, III''s ) |' SAY ' | ╖ given names have any and all honorifics AFTER a COMMA |' SAY ' | ╖ for example: surname FirstNames, honorifics |' SAY ' | BAUER-GAUSS Joseph, Dr. |' SAY ' | DAGLEY Richard Kelley, Jr. |' SAY ' | Clayton John, aka TARZAN of the Apes |' SAY ' -----------------------------------------------------------------' SAY ' ' SAY ' -----------------------------------------------------------------' SAY ' | ╖ <#> in comments fields or ( ╢ ) info files are replaced |' SAY ' | by NAMES from the Scion DB ( with appropriate link ) |' SAY ' | for example: <101> is replaced by: |' SAY ' | <A HREF=P101.htm>Iam Onehundredone, Jr.</A> |' SAY ' -----------------------------------------------------------------' SAY ' ' SAY ' -----------------------------------------------------------------' SAY ' | For a name change ( NOT maidenname > marriedname ), try this: |' SAY ' | surname field: New |' SAY ' | given name field: Birth Name > Changed To, Ph. D. |' SAY ' | which lists as: Birth Name > Changed To New, Ph. D. |' SAY ' | |' SAY ' | meaning: "Birth Name" is now known as "Changed To New, Ph. D." |' SAY ' -----------------------------------------------------------------' SAY ' | surname field: TARZAN |' SAY ' | given name field: John Clayton > aka, of the Apes |' SAY ' | which lists as: John Clayton > aka TARZAN, of the Apes |' SAY ' -----------------------------------------------------------------' SAY ' ½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗' SAY ' ╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½' SAY ' ½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗' SAY ' ╗½ ╗½' SAY ' ½╗ GetLastName: PROCEDURE at end of script capitalizes Last Names ╗½' SAY ' ½╗ ------------------------------------------------------------- ½╗' SAY ' ╗½ | it can also be used to handle "non-conforming" Last Names | ╗½' SAY ' ½╗ | e.g. "MAC ISAAC" --> "MacISAAC" | ½╗' SAY ' ╗½ | "VON NUEMANN" --> "VonNuemann" | ╗½' SAY ' ½╗ ------------------------------------------------------------- ½╗' SAY ' ╗½ BUT: you must add the additional tests yourself (it''s easy!) ╗½' SAY ' ½╗ REMEMBER to transfer your additions to future updates ½╗' SAY ' ╗½ ╗½' SAY ' ½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗' SAY ' ╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½' SAY ' ½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗½╗' end flags.IRN = 0 if flags.DoPictures & ( substr(flags.target,1,1) = 'P' ) then do HTMLdir = Mdir||flags.DBNAME'G' say ' ________________________________________________________' do until substr(flags.IRN,1,1) = 'Q' say ' ' say 'enter a Person IRN { 1 .. 'LASTIRN' } or QUIT' say ' ' flags.IRN = flags.IRN + 1 svflags.IRN = flags.IRN if flags.IRN > LASTIRN then flags.IRN = 1 'GETFIRSTNAME' flags.IRN FIRSTNAME = RESULT 'GETLASTNAME' flags.IRN LASTNAME = RESULT call WriteCh(stdout,FIRSTNAME' 'LASTNAME' ['flags.IRN'] ') PULL flags.IRN if flags.IRN = '' then flags.IRN = svflags.IRN if substr(flags.IRN,1,1) = 'Q' then PauseExit() if ( 0 > flags.IRN ) | ( flags.IRN > LASTIRN ) then do say ' ' say ' out of bounds, please remain within given range' say ' ' flags.IRN = 0 end else do 'GETFIRSTNAME' flags.IRN FIRSTNAME = RESULT 'GETLASTNAME' flags.IRN LASTNAME = RESULT say ' ' say 'Processing:' say FIRSTNAME' 'LASTNAME' ['flags.IRN']' flags.album = '?' do until ( upper(substr(flags.album,1,1)) = 'P' ) | ( upper(substr(flags.album,1,1)) = 'F' ) say ' ' call WriteCh(stdout,' Album selection: Person or Family ['flags.album'] ') PULL flags.album /* say 'flags.album ' flags.album */ if upper(substr(flags.album,1,1)) = 'P' then do if Exists(HTMLdir'/P'flags.IRN'A.htm') then addtoAlbum('P',flags.IRN) else say HTMLdir'/P'flags.IRN'A.htm does not yet exist; cannot process.' end else if upper(substr(flags.album,1,1)) = 'F' then do if flags.VERSION < 5 then say 'Please upgrade to Scion V5.x for this function...' else do 'GETNUMMARRY' flags.IRN NUMMARRY = RESULT /* say 'NUMMARRY 'NUMMARRY */ setNUMMARRY = NUMMARRY if NUMMARRY > 1 then do say 'enter a Family # { 1 .. 'NUMMARRY' }' PULL setNUMMARRY end if ( setNUMMARRY > 0 ) & ( setNUMMARRY < NUMMARRY + 1 ) then do /* say 'GETMARRIAGE 'flags.IRN' 'setNU */ 'GETMARRIAGE' flags.IRN setNUMMARRY-1 flags.FIRN = RESULT /* say 'RESULT 'flags.FIRN */ say ' ' if Exists(HTMLdir'/F'flags.FIRN'A.htm') then addtoAlbum('F',flags.FIRN) else say HTMLdir'/F'flags.FIRN'A.htm does not yet exist; cannot process.' end else say 'No Family' end end leave end end end end if flags.target = '?' | flags.target = '/' then do SAY ' please send comments, questions to: ipolyi@ev1.net' SAY ' or:' SAY ' Scion2html.rexx ⌐ Harold H. Ipolyi ' SAY ' Boise, ID 83716-3298' SAY ' ____________________________________________________________' SAY ' / \' SAY ' / to [re]create HTML hypertext from ScionGenealogist data base \' SAY ' \ also, optionally, AmigaGuide style hypertexts or plain ASCII /' SAY ' \____________________________________________________________/' SAY ' ' SAY ' ' SAY ' Sub-MENU: ╗╗╗ pressing RETURN accepts [value ]' SAY ' ' SAY ' defaults change settings of default parameters' SAY ' ' SAY ' readme view Scion2html.rexx readme information' SAY ' ' SAY ' history review the Release History of Scion2html.rexx' SAY ' ' SAY ' future review the Future plans for Scion2html.rexx' SAY ' ' SAY ' cancel ' SAY ' ' call WriteCh(stdout,' [cancel] ') PULL answer if answer = 'DEFAULTS' | answer = 'D' then do SAY ' ' SAY ' defaults: may be changed; RETURN accepts [value ]' SAY ' 'substr(blanks,1,length(flags.DBNAME)+3)' ' svMdir = Mdir call WriteCh(stdout,' HTMLs will be placed in directory 'flags.DBNAME'G within ['Mdir'] ') PULL Mdir if Mdir = '' then Mdir = svMdir ChangedScion2html = ChangedScion2html | ( Mdir ~= svMdir ) SAY ' ' svGeneralPrefix = flags.GenPrefix call WriteCh(stdout,' General Prefix ') if flags.GenPrefix ~= 'GENEAFI' then call WriteCh(stdout,'(. to reset) ') call WriteCh(stdout,' = [') if flags.GenPrefix ~= 'GENEAFI' then call WriteCh(stdout,flags.GenPrefix) call WriteCh(stdout,'] ') PARSE PULL flags.GenPrefix if flags.GenPrefix = '' then flags.GenPrefix = svGeneralPrefix else if flags.GenPrefix = '.' then flags.GenPrefix = 'GENEAFI' ChangedScion2html = ChangedScion2html | ( flags.GenPrefix ~= svGeneralPrefix ) SAY ' ' if ~flags.MakeGuide then WriteCh(stdout,' NOT m') else WriteCh(stdout,' M') WriteCh(stdout,'aking'sayguide'; ') call WriteCh(stdout,' acceptable? [yes] ') PULL answer if answer ~= '' then do if substr(answer,1,1) = 'N' then do flags.MakeGuide = ~flags.MakeGuide ChangedScion2html = 1 end end SAY ' ' if ~flags.MakeText then WriteCh(stdout,' NOT m') else WriteCh(stdout,' M') WriteCh(stdout,'aking'sayASCII'; ') call WriteCh(stdout,' acceptable? [yes] ') PULL answer if answer ~= '' then do if substr(answer,1,1) = 'N' then do flags.MakeText = ~flags.MakeText ChangedScion2html = 1 end end SAY ' ' if flags.bold then WriteCh(stdout,' NOT') WriteCh(stdout,bolditalic'; ') call WriteCh(stdout,' acceptable? [yes] ') PULL answer if answer ~= '' then do if substr(answer,1,1) = 'N' then do flags.bold = ~flags.bold ChangedScion2html = 1 end end SAY ' ' if ~flags.verbose then WriteCh(stdout,' minimal') else WriteCh(stdout,' verbose') WriteCh(stdout,progress'; ') call WriteCh(stdout,' acceptable? [yes] ') PULL answer if answer ~= '' then do if substr(answer,1,1) = 'N' then flags.verbose = ~flags.verbose end if flags.DoPictures then do SAY ' ' SAY '+-----------------------------------------------------------------+' SAY '| NOTE: changing Thumbnail max dim or Thumbnail format will force |' SAY '| regeneration of all Thumbnail pictures. Just so you know! |' SAY '+-----------------------------------------------------------------+' SAY '| If Thumbnail format is changed, Picture Albums must then |' SAY '| be manually edited to reflect the new Thumbnail suffixes. |' SAY '+-----------------------------------------------------------------+' SAY ' ' svThumbnail = flags.Thumbnail call WriteCh(stdout,' Thumbnail max dim = ['flags.Thumbnail'] ') PULL flags.Thumbnail if ~IsNumeric(flags.Thumbnail) then flags.Thumbnail = svThumbnail ChangedScion2html = ChangedScion2html | ( flags.Thumbnail ~= svThumbnail ) if flags.Thumbnail < 50 then flags.Thumbnail = 50 SAY ' ' svThumbformat = flags.Thmbfmt call WriteCh(stdout,' Thumbnail format = ['flags.Thmbfmt'] ') PULL flags.Thmbfmt if flags.Thmbfmt ~= 'GIF' & flags.Thmbfmt ~= 'JPEG' then flags.Thmbfmt = '' if flags.Thmbfmt = '' then flags.Thmbfmt = svThumbformat ChangedScion2html = ChangedScion2html | ( flags.Thmbfmt ~= svThumbformat ) end SAY ' ' end else if answer = 'HISTORY' | answer = 'H' then do if Open('Scion',rexxdir'Scion2html.rexx','r') then do readme = 0 notbreak = 1 readmestring = '=====History=====' say readmestring DO While ~EOF('Scion') & notbreak line = ReadLn('Scion') if readme then do if line = readmestring then notbreak = 0 if notbreak then say line end if line = readmestring then readme = ~readme end say readmestring close('Scion') end end else if answer = 'FUTURE' | answer = 'F' then do if Open('Scion',rexxdir'Scion2html.rexx','r') then do readme = 0 notbreak = 1 readmestring = '=====Future?=====' say readmestring DO While ~EOF('Scion') & notbreak line = ReadLn('Scion') if readme then do if line = readmestring then notbreak = 0 if notbreak then say line end if line = readmestring then readme = ~readme end say readmestring close('Scion') end end else if answer = 'README' | answer = 'R' then do if Open('Scion',rexxdir'Scion2html.rexx','r') then do if Open('Scionreadme','RAM:Scion2html.readme','w') then do readme = 0 notbreak = 1 readmestring = '=====README=====' DO While ~EOF('Scion') & notbreak line = ReadLn('Scion') if readme then do if line = readmestring then do close('Scionreadme') say ' created: RAM:Scion2html.readme' notbreak = 0 end if notbreak then do WriteLn('Scionreadme',line) say line end end if line = readmestring then readme = ~readme end end close('Scion') end end end SAY ' _______________________________________' SAY ' | |' SAY ' MENU | ╗╗╗ pressing RETURN accepts [value ] |' SAY ' |_______________________________________|' SAY ' ' SAY ' ' SAY ' Quit ' SAY ' ' SAY ' ? about Scion2html.rexx ; also can change the settings shown above.' SAY ' 'substr(blanks,1,length(flags.DBNAME)+2)' ' SAY ' Normal [re]make HTMLs for all persons in 'flags.DBNAME' data base {'LASTIRN'}' SAY ' ' SAY ' # [re]make HTMLs for a specific person: { 1 .. 'LASTIRN' }' SAY ' ' SAY ' Anchors URL hints: <A HREF="?">'flags.DBNAME' Genealogy</A> ' SAY ' ' SAY ' Hints useful tips please read ' SAY ' ' SAY ' Picture add extra pictures to existing Picture Album NEW ! ' SAY ' ' SAY ' ' flags.target = 'Normal' call WriteCh(stdout,' ['flags.target'] ') PULL flags.target if length(flags.target) > 1 & substr(flags.target,1,1) = ' ' then flags.target = substr(flags.target,2,length(flags.target)) if length(flags.target) > 7 then flags.target = substr(flags.target,1,7) if flags.target = '' then flags.target = 'Normal' if substr(flags.target,1,1) = '#' then do flags.target = '' SAY ' ' /* :) :) :) :) :) */ SAY ' NOT #! An actual number, like, you know :), from the set { 1 .. 'LASTIRN' }' end if flags.target = 'INFO' | flags.target = 'ABOUT' | flags.target = 'HELP' then flags.target = '?' if IsNumeric(flags.target) then do if flags.target > LASTIRN | flags.target < 1 then do SAY ' ' SAY ' Lousy shooting:' SAY ' 'flags.target' is outside range of { 1 .. 'LASTIRN' } of persons in data base 'flags.DBNAME' ' SAY ' Clean your display, rinse your lenses, and try again!' flags.target = '' end end flags.target = Upper(strip(flags.target,,'"')) /* just in case, remove errant quotes */ end if ~Validtarget(flags.target) then PauseExit() if substr(flags.target,1,1) = 'A' then flags.target = 'ANCHORS' if substr(flags.target,1,1) = 'H' then flags.target = 'HINTS' if substr(flags.target,1,1) = 'N' then flags.target = 'NORMAL' if substr(flags.target,1,1) = 'P' then flags.target = 'PICTURE' if substr(flags.target,1,1) = 'Q' then flags.target = 'QUIT' /* SAY flags.target */ if flags.VERSION < 4.07 then do SAY ' ' say 'ERROR: Requires Scion VERSION = 4.07 (or greater)' AskExit() end else do if exists("sys:utilities/multiview") then flags.VIEWER = "sys:utilities/multiview" /* Guide picture viewer */ else do if flags.VERSION < 4.09 then flags.VIEWER = "display" else do 'GETVIEWER' flags.VIEWER = RESULT end end /* say 'Guide picture viewer = 'flags.VIEWER */ if flags.VERSION > 5 then do 'GETSNDPLAYER' flags.PLAYER = RESULT /* say 'Guide sound player = 'flags.PLAYER */ end end /* Get path to database so can locate any note files in same location */ 'GETDBPATH' /* new in Scion V 4.07 */ DBPATH = RESULT DBPATH = CheckPathName(DBPATH) /* SAY ' ' Say ' Testing: is data base assignment of 'DBPATH||flags.DBNAME' visible?' SAY ' ' */ PRAGMA('w','n') if ~Exists(DBPATH||flags.DBNAME) then do SAY 'ERROR: Scion data base 'flags.DBNAME' not found in: 'DBPATH AskExit() end if ~GoodScion2html then do Mdir = '' /* where to put the directories? */ if Exists(flags.DBNAME'G') then do /* check current path */ Mdir = PRAGMA('d') /* we're already there */ end else do TXTdir = "RAM:" /* RAM: if nothing else */ if Exists('Work:') then TXTdir = "Work:" /* assume Work: */ SAY ' ' /* ask, with default prompted */ if flags.target ~= 'ANCHORS' then call WriteCh(stdout,'Generate ') call WriteCh(stdout,'Directory 'flags.DBNAME'G for HTML pages ') if flags.target = 'ANCHORS' then call WriteCh(stdout,'is ') call WriteCh(stdout,'in: ['TXTdir'] ') PULL Mdir if Mdir = '' then Mdir = TXTdir /* default was accepted */ end end Mdir = CheckPathName(Mdir) PRAGMA('w','w') if ~flags.MakeHTML then HTMLdir = Mdir||flags.DBNAME'G' if EXISTS(HTMLdir'/METATAGS') then do Open('METATAGS',HTMLdir'/METATAGS','r') flags.Meta1 = ReadLn('METATAGS') flags.Meta2 = ReadLn('METATAGS') flags.Meta3 = ReadLn('METATAGS') Close('METATAGS') end else flags.Meta1 = " " TXTdir = '' if flags.MakeText then TXTdir = Mdir||flags.DBNAME'T' if flags.MakeGuide then AGdir = Mdir||flags.DBNAME'AG' flags.RemakeThumb = ( origThumbnail ~= flags.Thumbnail ) | ( origThumbformat ~= flags.Thmbfmt ) /* say 'flags.RemakeThumb ' flags.RemakeThumb */ if ChangedScion2html then do Open('Scion2html','ENVARC:Scion2html.Config','w') call WriteLn('Scion2html',Mdir) call WriteLn('Scion2html',flags.Thumbnail) call WriteLn('Scion2html',flags.Thmbfmt) coumpound = 0 if flags.MakeText then coumpound = bitset(coumpound,0) if flags.bold then coumpound = bitset(coumpound,1) if flags.MakeGuide then coumpound = bitset(coumpound,2) if flags.MakeHTML then coumpound = bitset(coumpound,3) /* say 'coumpound as written = 'coumpound */ call WriteLn('Scion2html',coumpound) /* call WriteLn('Scion2html',flags.MakeText + ( 2 * flags.bold ) + ( 4 * flags.MakeGuide ) + ( 8 * flags.MakeHTML ) ) */ if flags.GenPrefix ~= 'GENEAFI' then call WriteLn('Scion2html',flags.GenPrefix) Close('Scion2html') end if flags.target = 'QUIT' then PauseExit() if ~flags.bold then do flags.htmlb = '<B>' flags.htmlub = '</B>' flags.htmli = '<I>' flags.htmlui = '</I>' end else do flags.htmlb = '' flags.htmlub = '' flags.htmli = '' flags.htmlui = '' end if flags.target ~= "ANCHORS" then do if ~flags.MakeHTML then do if ~Makedir(HTMLdir) then do SAY ' ' SAY 'ERROR: unable to create directory: 'HTMLdir AskExit() end if ~exists(HTMLdir'/st0ne.gif') then do OPEN('giffile',HTMLdir'/st0ne.gif','W') WriteCh('giffile', stonegif) CLOSE('giffile') end if ~exists(HTMLdir'/img') then do if ~Makedir(HTMLdir'/img') then do SAY ' ' SAY 'ERROR: unable to create directory: 'HTMLdir'/img' AskExit() end end end if TXTdir ~= '' then do if ~Makedir(TXTdir) then do SAY ' ' SAY 'ERROR: unable to create directory: 'TXTdir AskExit() end end if flags.MakeGuide then do if ~Makedir(AGdir) then do SAY ' ' SAY 'ERROR: unable to create directory: 'AGdir AskExit() end end end starttime = Time('e') do i = 1 to LASTIRN person.gotten.i = 0 /* no persons have yet been gotten from "flags.DBNAME" */ end if IsNumeric(flags.target) then do GetPerComp(flags.target) /* GetPerComp gets basic info into person. array */ pnumb = flags.target /* call WriteCh(stdout,'HTMLs for: 'person.GETFULLNAME.pnumb'? ['yes'] ') PULL answer if answer = '' then answer = 'YES' if substr(answer,1,1) ~= 'Y' then AskExit() */ call WriteCh(stdout,' HTMLs') if flags.MakeGuide then call WriteCh(stdout,' & guides') if flags.MakeText then call WriteCh(stdout,' & ASCIItextfile') call WriteLn(stdout,' for: 'person.GETFULLNAME.pnumb' {'pnumb'}') starttime = Time('e') if flags.target <= LASTIRN then do if TXTdir ~= '' then Open('GenealogyText',TXTdir'/G'flags.target,'w') flags.living = askliving() flags.depth = askdepth() flags.verbose = 1 'EXISTPERSON' flags.target if RESULT = 'YES' then CALL MakeOne(flags.target) else say '{'flags.target'} is a null IRN.' if TXTdir ~= '' then Close('GenealogyText') end end else do Delete(HTMLdir'/PAlbum.htm') Delete(HTMLdir'/FAlbum.htm') flags.target = Upper(flags.target) if flags.target ~= "ANCHORS" then do flags.target = 'NORMAL' flags.living = askliving() flags.depth = askdepth() Say ' ' call WriteCh(stdout,' HTMLs') if flags.MakeGuide then call WriteCh(stdout,' & guides') if flags.MakeText then call WriteCh(stdout,' & ASCIItextfile') call WriteLn(stdout,' for all ' LASTIRN ' persons in database ' flags.DBNAME) /* GENEAFIL.htm is a Scion data base IRN order list of all persons in HTML format: person * birthdate + deathdate (()) father & mother */ Say ' ' Say 'file name: 'HTMLdir'/'flags.GenPrefix'L.htm for: Personae' Say ' ' Open('indexFile',HTMLdir'/index.html','w') WriteLn('indexFile','<HTML><HEAD>') WriteMeta('indexFile') WriteLn('indexFile','<TITLE>'flags.DBNAME' Genealogy</TITLE></HEAD>') WriteLn('indexFile','<FRAMESET COLS="15%,85%">') WriteLn('indexFile','<FRAME SRC=SN.htm NAME=index>') WriteLn('indexFile','<FRAME SRC=Cred.htm NAME=MAIN>') WriteLn('indexFile','<NOFRAMES>') WriteLn('indexFile','<BODY>') WriteLn('indexFile','Viewing this page requires a browser capable of displaying frames.') WriteLn('indexFile','</BODY>') WriteLn('indexFile','</NOFRAMES>') WriteLn('indexFile','</FRAMESET>') WriteLn('indexFile','</BODY></HTML>') Close('indexFile') Open('creditsFile',HTMLdir'/Cred.htm','w') WriteLn('creditsFile','<HTML><HEAD>') WriteMeta('creditsFile') WriteLn('creditsFile','<TITLE>'flags.DBNAME' Genealogy</TITLE></HEAD>') WriteLn('creditsFile','<BODY BACKGROUND=st0ne.gif><H3>') WriteCh('creditsFile',flags.htmlb''flags.DBNAME''flags.htmlub' Genealogy & ') GetPerComp(1) WriteCh('creditsFile',' ╖ ╖ ╖ <A HREF=P1.htm>') WriteLn('creditsFile',person.GETFULLNAME.1'</A> ╖ ╖ ╖') WriteLn('creditsFile','<HR SIZE=5></H3>') WriteLn('creditsFile','<FORM name=buttons>') WriteCh('creditsFile','<INPUT type=button value="Table of Contents" onClick=') WriteCh('creditsFile',"'") WriteCh('creditsFile','window.open(URL="'flags.GenPrefix'L.htm","_top")') WriteCh('creditsFile',"'") WriteLn('creditsFile','>') WriteLn('creditsFile','<BR>') WriteCh('creditsFile','<INPUT type=button value=Index onClick=') WriteCh('creditsFile',"'") WriteCh('creditsFile','window.open(URL="index.html","_top")') WriteCh('creditsFile',"'") WriteLn('creditsFile','></FORM>') WriteCh('creditsFile','<HR SIZE=5>') WriteCh('creditsFile','<FONT COLOR=darkred>Source:</FONT> Scion Data Base ') WriteLn('creditsFile',flags.htmlb''flags.DBNAME''flags.htmlub) if flags.VERSION > 5 then do LASTSAVEDDATE say 'Database 'flags.DBNAME' was last saved on ' RESULT say ' ' WriteLn('creditsFile',', <FONT COLOR=darkred>last save date:</FONT> ' RESULT) end WriteCh('creditsFile','<BR> <FONT COLOR=darkred>HTML generated:</FONT> ') WriteLn('creditsFile',Date()' - 'Time()) WriteLn('creditsFile','<HR>') if flags.VERSION > 5 then do 'GETPREPARER' if RESULT ~= '' then do PARSE VAR RESULT flags.auth '$' addr1 '$' addr2 '$' addr3 '$' addr4 flags.BRKCHAR if p_name ~= '' then WriteLn('creditsFile','<P><FONT COLOR=darkred>Preparer:</FONT><P><B>'flags.auth) if addr1 ~= '' then WriteLn('creditsFile','<BR>'addr1) if addr2 ~= '' then WriteLn('creditsFile','<BR>'addr2) if addr3 ~= '' then WriteLn('creditsFile','<BR>'addr3) if addr4 ~= '' then WriteLn('creditsFile','<BR>'addr4) end 'GETPREPPHONE' if RESULT ~= '' then do PARSE VAR RESULT tel1 ',' tel2 ',' tel3 ',' tel4 ',' tel5 if tel1 ~= '' then WriteLn('creditsFile','<P>'email(tel1)) if tel2 ~= '' then WriteLn('creditsFile','<P>'email(tel2)) if tel3 ~= '' then WriteLn('creditsFile','<P>'email(tel3)) if tel4 ~= '' then WriteLn('creditsFile','<P>'email(tel4)) if tel5 ~= '' then WriteLn('creditsFile','<P>'email(tel5)) WriteLn('creditsFile','<P></B><HR SIZE=5><P><HR SIZE=5>') end end WriteLn('creditsFile','<FONT COLOR=darkred>Credits:</FONT><HR><H3>') WriteCh('creditsFile','<I><A HREF=http://www.amiga.com/') WriteLn('creditsFile','>AMIGA</A></I>«') WriteLn('creditsFile','<HR>') WriteCh('creditsFile','<A HREF="http://ftp.sunet.se/aminetbin/find?') WriteCh('creditsFile','Scion"><B>Scion</A>') if flags.VERSION > 0 then do WriteCh('creditsFile','V'flags.VERSION) end WriteLn('creditsFile','</B> ⌐ <B>Robbie J Akins</B><HR>') WriteCh('creditsFile','<A HREF="http://ftp.sunet.se/aminetbin/find?') WriteCh('creditsFile','GfxCon"><B>GfxCon</B></A> ⌐ ') WriteCh('creditsFile','<B><A HREF=http://tick.informatik.uni-stuttgart.de/~farindk>') WriteLn('creditsFile','Dirk Farin</A></B><HR>') WriteCh('creditsFile','<A HREF="http://ftp.sunet.se/aminetbin/find?') WriteCh('creditsFile','Scion2html"><B>Scion2html.rexx</B></A> ( 2 Jun 2001 ) ⌐ ') WriteCh('creditsFile','<A HREF=http://ddw-rh.dyndns.org/~ipolyi/scion.html>') WriteLn('creditsFile','<B>Harold Ipolyi</B></A>') WriteLn('creditsFile',' @ <A HREF=mailto:ipolyi@ev1.net>ipolyi@ev1.net</A>') WriteLn('creditsFile','</BODY></HTML>') Close('creditsFile') Open('GenealogyFile',HTMLdir'/'flags.GenPrefix'L.htm','w') WriteLn('GenealogyFile','<HTML><HEAD>') WriteMeta('GenealogyFile') WriteLn('GenealogyFile','<TITLE>Personae list</TITLE>') WriteLn('GenealogyFile','</HEAD><BODY BACKGROUND=st0ne.gif>') WriteLn('GenealogyFile','<TABLE BORDER=5 CELLSPACING=5 CELLPADDING=2><TR>') WriteCh('GenealogyFile','<TH COLSPAN=5 BGCOLOR=00ffff>'flags.htmlb''flags.DBNAME''flags.htmlub) WriteLn('GenealogyFile',' Genealogy Table of Contents</TH>') /* --- <TH COLSPAN=2>') WriteLn('GenealogyFile','<A HREF=SN.htm>INDEX</A></TH>') WriteCh('GenealogyFile','<TH><A HREF=index.html>') WriteCh('GenealogyFile','<BLINK>Credits</BLINK></A>') */ WriteLn('GenealogyFile','</TH></TR><TR><TD COLSPAN=5 BGCOLOR=cceeee> ') WriteCh('GenealogyFile','Definitions: ') if ~flags.bold then do WriteCh('GenealogyFile',flags.htmlb'bold=male[~_~]'flags.htmlub) WriteCh('GenealogyFile',', 'flags.htmli'italic=fem'flags.htmlui) WriteCh('GenealogyFile',flags.htmlb'{^.^}'flags.htmlub',') end WriteCh('GenealogyFile',' <B>*</B> birth, <B>+</B> death, ') WriteLn('GenealogyFile','╢ more info, « picture album') WriteLn('GenealogyFile','</TD></TR><TR>') WriteLn('GenealogyFile','<TH>Personae</TH>') WriteLn('GenealogyFile','<TH>*</TH>') WriteLn('GenealogyFile','<TH>+</TH>') WriteLn('GenealogyFile','<TH> [~_~] </TH>') WriteLn('GenealogyFile','<TH> {^.^} </TH>') WriteLn('GenealogyFile','</TR>') if flags.MakeGuide then do Say 'file name: 'AGdir'/'flags.GenPrefix'L.guide for: Personae' Say ' ' Open('GenealogyGuide',AGdir'/'flags.GenPrefix'L.guide','w') WriteLn('GenealogyGuide','@database "'flags.GenPrefix'L.guide"') WriteLn('GenealogyGuide','@$VER: 'flags.GenPrefix'L.guide 1.0 ('date()')') WriteLn('GenealogyGuide','@author 'p_name ' 'addr3) WriteLn('GenealogyGuide',' ') WriteLn('GenealogyGuide','@NODE Main "'flags.DBNAME' Genealogy"') WriteLn('GenealogyGuide','@INDEX 'AGdir'/SN.guide/Main') WriteLn('GenealogyGuide',' ') WriteLn('GenealogyGuide',' 'flags.DBNAME'. @{b}'Time()' - 'Date()'@{ub}') WriteLn('GenealogyGuide',' ') end if flags.MakeText then do Open('GenealogyText',TXTdir'/GenealogyOf'flags.DBNAME,'w') WriteLn('GenealogyText','Genealogy Data Base "'GetLastName(flags.DBNAME)'"') end TOTALsn = 0 qot = "'" sni.last = 0 DO i = 1 TO LASTIRN 'EXISTPERSON' i if RESULT = 'YES' then do CALL MakeOne(i) /* make surname files */ if ~flags.MakeHTML & ~(( flags.living > 0 ) & ( person.GETDEATHDATE.i = "" )) then do /* --- special processing for married women --- */ if person.GETSEX.i = "F" then do 'GETNUMMARRY' i marriages = RESULT DO im = 0 TO marriages 'GETMARRIAGE' i im marriage = RESULT if marriage ~= "" then do 'GETSPOUSE' marriage SPOUSE = RESULT if SPOUSE = i then DO 'GETPRINCIPAL' marriage SPOUSE = RESULT end 'EXISTPERSON' SPOUSE if RESULT = 'NO' then leave GetPerComp(SPOUSE) jj = TOTALsn if person.GETLASTNAME.SPOUSE = '' then leave DO j = 0 TO TOTALsn /* do we already have this last name? */ /* if so, use its index for AddPtoSN below */ if person.GETLASTNAME.SPOUSE = sn.j then jj = j end /* if not, then start a new FORM file SN# */ if jj = TOTALsn then do sn.TOTALsn = person.GETLASTNAME.SPOUSE Open('SN'TOTALsn,HTMLdir'/SN'TOTALsn,'w') WriteLn('SN'jj,person.GETLASTNAME.SPOUSE) sn.jj = person.GETLASTNAME.SPOUSE /* sort by creating an index to the FORM files */ sni.jj = jj new = sni.jj index = 0 j = sni.index DO WHILE sn.j < sn.new index = index + 1 j = sni.index end if index < jj then do DO k = jj TO index by -1 l = k - 1 sni.k = sni.l end sni.index = TOTALsn end TOTALsn = TOTALsn + 1 end AddNeetoSN(i,jj) end end end /* --- end of special processing for married women --- */ jj = TOTALsn if person.GETLASTNAME.i = '' then leave DO j = 0 TO TOTALsn /* do we already have this last name? */ /* if so, use its index for AddPtoSN below */ if person.GETLASTNAME.i = sn.j then jj = j end /* if not, then start a new FORM file SN# */ if jj = TOTALsn then do sn.TOTALsn = person.GETLASTNAME.i Open('SN'TOTALsn,HTMLdir'/SN'TOTALsn,'w') WriteLn('SN'jj,person.GETLASTNAME.i) sn.jj = person.GETLASTNAME.i /* sort by creating an index to the FORM files */ sni.jj = jj new = sni.jj index = 0 j = sni.index DO WHILE sn.j < sn.new index = index + 1 j = sni.index end if index < jj then do DO k = jj TO index by -1 l = k - 1 sni.k = sni.l end sni.index = TOTALsn end TOTALsn = TOTALsn + 1 end AddPtoSN(i,jj) end end else say '{'i'} is a null IRN' end /* close surname files and create INDEX page */ if ~flags.MakeHTML then do say ' ' say ' Creating INDEX page & METATAGS file.' say ' ' if flags.MakeGuide then do Open('SNG',AGdir'/SN.guide','w') WriteLn('SNG','@database "'AGdir'/SN.guide"') WriteLn('SNG','@NODE Main "'flags.DBNAME' Genealogy"') WriteLn('SNG','@TOC 'AGdir'/GENEAFIL.guide/Main') end /* Say 'Creating <META> tags' */ Meta1n = '<META NAME="DESCRIPTION" CONTENT="'flags.DBNAME' Genealogy">' Meta2n = '<META NAME="KEYWORDS" CONTENT="'flags.DBNAME Meta2n = Meta2n||',family,family tree,genealogy' do j = 0 TO TOTALsn - 1 k = sni.j ValidNameTest = hash(upper(substr(sn.k,1,1))) if ( 64 < ValidNameTest ) & ( ValidNameTest < 91 ) then Meta2n = Meta2n||','sn.k /* else say sn.k */ end Meta2n = Meta2n||'">' Meta3n = '<META NAME="AUTHOR" CONTENT="'flags.auth'">' if ( Meta2n ~= flags.Meta2 ) | ( Meta3n ~= flags.Meta3 ) then do Open('METATAGS',HTMLdir'/METATAGS','w') WriteLn('METATAGS',Meta1n) WriteLn('METATAGS',Meta2n) WriteLn('METATAGS',Meta3n) Close('METATAGS') flags.Meta1 = Meta1n flags.Meta2 = Meta2n flags.Meta3 = Meta3n MetaChanged = 1 end /* end <META> tag creation */ Open('SN',HTMLdir'/SN.htm','w') WriteLn('SN','<HTML><HEAD>') WriteMeta('SN') WriteLn('SN','<TITLE>'flags.DBNAME' INDEX</TITLE>') WriteLn('SN','</HEAD><BODY BACKGROUND=st0ne.gif>') /* WriteLn('SN','<TABLE BORDER=0><TR><TD BGCOLOR=00ffff>') WriteLn('SN','<A HREF='flags.GenPrefix'L.htm TARGET=MAIN><B>Table of Contents</A>') WriteLn('SN','</TD></TR></TABLE><HR>') */ WriteLn('SN','<B><I> INDEX :</I></B>') jj = TOTALsn - 1 flagAleph = ' ' DO j = 0 TO jj Close('SN'sni.j) index = 0 Open('SN'sni.j,HTMLdir'/SN'sni.j,'r') snline = ReadLn('SN'sni.j) if flags.MakeGuide then do PersonPrefix = 'P' WriteLn('SNG','') WriteLn('SNG',' 'snline) end if flagAleph ~= substr(snline,1,1) then WriteCh('SN','<HR>') /* else WriteCh('SN','<BR>') */ WriteLn('SN','<FORM><SELECT NAME="URL"') WriteLn('SN','onChange="if(this.options[this.selectedIndex].value!='qot'$'qot')') WriteLn('SN','{window.open(this.options[this.selectedIndex].value,'qot'MAIN'qot')}">') WriteLn('SN','<OPTION VALUE="$">'snline) snline.index = ReadLn('SN'sni.j) DO While ~EOF('SN'sni.j) pn.index = ReadLn('SN'sni.j) if index > 0 then do DO jndex = 0 TO index - 1 if snline.index < snline.jndex then do svsnline = snline.index svpn = pn.index DO kndex = index - 1 TO jndex by - 1 lndex = kndex + 1 snline.lndex = snline.kndex pn.lndex = pn.kndex end snline.jndex = svsnline pn.jndex = svpn end end end index = index + 1 /* given name sort */ snline.index = ReadLn('SN'sni.j) end DO jndex = 0 TO index - 1 WriteLn('SN','<OPTION VALUE=P'pn.jndex'.htm>'snline.jndex) if flags.MakeGuide then WriteLn('SNG',CheckGuideRepl(' <'pn.jndex'>',1)) end Close('SN'sni.j) Delete(HTMLdir'/SN'sni.j) WriteLn('SN','</SELECT></FORM>') flagAleph = substr(snline,1,1) end /* WriteLn('SN','<HR><TABLE BORDER=0><TR><TD BGCOLOR=ffff00><A HREF=Cred.htm') WriteLn('SN','TARGET=MAIN><B>Credits</A></TD></TR></TABLE>') */ WriteLn('SN','<HR><FORM name=buttons>') WriteCh('SN','<INPUT type=button value="Table of Contents" onClick=') WriteCh('SN',"'") WriteCh('SN','window.open(URL="'flags.GenPrefix'L.htm","_top")') WriteCh('SN',"'") WriteLn('SN','><HR>') WriteCh('SN','<INPUT type=button value=Credits onClick=') WriteCh('SN',"'") WriteCh('SN','window.open(URL="Cred.htm","_top")') WriteCh('SN',"'") WriteLn('SN','>') WriteLn('SN','</FORM>') WriteLn('SN','</BODY></HTML>') Close('SN') if flags.MakeGuide then do WriteLn('SNG','@ENDNODE') Close('SNG') end end /* end of INDEX processing */ if flags.MakeGuide then do WriteLn('GenealogyGuide','_______________________________________________') WriteLn('GenealogyGuide','') WriteCh('GenealogyGuide','Definitions: ') if ~flags.bold then WriteCh('GenealogyGuide','@{b}bold=male@{ub}, @{i}italic=fem@{ui},') WriteLn('GenealogyGuide',' * birth, + death, ╢ more info') WriteLn('GenealogyGuide','_______________________________________________') WriteLn('GenealogyGuide','') WriteCh('GenealogyGuide','@{u}Credits:@{uu} ') WriteCh('GenealogyGuide','(@{i}AMIGA@{ui}) ╖ ') WriteCh('GenealogyGuide','(Scion ⌐ @{b}Robbie J Akins@{ub}) ╖ ') WriteLn('GenealogyGuide','(Scion2html.rexx ⌐ @{b}Harold Ipolyi@{ub})') WriteLn('GenealogyGuide','@ENDNODE') Close('GenealogyGuide') end WriteLn('GenealogyFile','</TR></TABLE>') WriteLn('GenealogyFile','</BODY></HTML>') Close('GenealogyFile') end /* add META? */ if MetaChanged = 1 then do Say 'META has changed; Updating all files...' DO i = 1 TO LASTIRN if Exists(HTMLdir'/P'i'.htm') then do say 'P'i'.htm' Open('PERSONFILE',HTMLdir'/P'i'.htm','r') j = 0 DO While ~EOF('PERSONFILE') j = j + 1 line.j = ReadLn('PERSONFILE') if substr(line.j,1,5) = "<META" then j = j - 1 end Close('PERSONFILE') Open('PERSONFILE',HTMLdir'/P'i'.htm','w') WriteLn('PERSONFILE',line.1) WriteMeta('PERSONFILE') do k = 2 to j WriteLn('PERSONFILE',line.k) end Close('PERSONFILE') end end Open('indexFile',HTMLdir'/index.html','r') say 'index.html' j = 0 DO While ~EOF('indexFile') j = j + 1 line.j = ReadLn('indexFile') if substr(line.j,1,5) = "<META" then j = j - 1 end Close('indexFile') Open('indexFile',HTMLdir'/index.html','w') WriteLn('indexFile',line.1) WriteMeta('indexFile') do k = 2 to j WriteLn('indexFile',line.k) end Close('indexFile') Open('GenealogyFile',HTMLdir'/'flags.GenPrefix'L.htm','r') say flags.GenPrefix'L.htm' j = 0 DO While ~EOF('GenealogyFile') j = j + 1 line.j = ReadLn('GenealogyFile') if substr(line.j,1,5) = "<META" then j = j - 1 end Close('GenealogyFile') Open('GenealogyFile',HTMLdir'/'flags.GenPrefix'L.htm','w') WriteLn('GenealogyFile',line.1) WriteMeta('GenealogyFile') do k = 2 to j WriteLn('GenealogyFile',line.k) end Close('GenealogyFile') end Say ' ' Say ' ' Say ' If you have not already done so, add the following anchor pointing to' Say ' "'GetLastName(flags.DBNAME)' Genealogy" to a HTML file (maybe HOME PAGE): ' Say ' ' Say ' <A HREF=/'HTMLdir'/>'GetLastName(flags.DBNAME)' Genealogy</A>' Say ' ' Say ' and/or:' Say ' ' Say ' <A HREF=/'HTMLdir'/SN.htm>INDEX of 'GetLastName(flags.DBNAME)' surnames</A>' Say ' ' Say ' and/or:' Say ' ' Say ' <A HREF=/'HTMLdir'/'flags.GenPrefix'L.htm>Table of Contents</A>' Say ' ' Say ' and maybe:' Say ' ' GetPerComp(1) if flags.GenPrefix = "GENEAFI" then Say ' <A HREF=/'HTMLdir'/P1.htm>'person.GETFULLNAME.1'</A>' else Say ' <A HREF=/'HTMLdir'/'flags.GenPrefix'P1.htm>'person.GETFULLNAME.1'</A>' Say ' ' end elapsedtime = Time('e') - starttime spacer = substr(blanks,1,Length(elapsedtime)) Say ' ' Say ' 'spacer' ' Say ' Scion2html.rexx completed normally in 'elapsedtime' seconds ' Say ' 'spacer' ' AskExit() EXIT /* redundant */ end /************************************************************************* * * * Makeone procedure extracts data and creates page for a single person * * * *************************************************************************/ MakeOne: PROCEDURE EXPOSE person. flags. DBPATH AGdir HTMLdir TXTdir PARSE ARG ScionIRN EXISTPERSON ScionIRN if RESULT = 'YES' then do if flags.GenPrefix = "GENEAFI" then do PersonPrefix = "P" /* Person file name prefix */ FamilyPrefix = "F" /* Family file name prefix */ end else do PersonPrefix = flags.GenPrefix"P" /* Person file name prefix */ FamilyPrefix = flags.GenPrefix"F" /* Family file name prefix */ end if FamilyPrefix = PersonPrefix then do say ' FamilyPrefix MUST NOT EQUAL PersonPrefix' say ' 'FamilyPrefix' 'PersonPrefix AskExit() EXIT end HasFileFATHER = 0 HasFileMOTHER = 0 HasMOTHER = 0 HasFATHER = 0 HasPARENTS = 0 HasCHILDREN = 0 DoGenText = 0 'GETPARENTS' ScionIRN PARENTS = RESULT tPARENTSt = 't'PARENTS't' /* Say 'PARENTS = 'PARENTS tPARENTSt ??? EXISTPARENTS IRN ??? */ if tPARENTSt ~= 'tt' then HasPARENTS = 1 'GETMARRIAGE' ScionIRN 0 /* ??? GETTOTMARRIAGES IRN ??? */ MARRIAGE = RESULT tMARRIAGESt = 't'MARRIAGE't' /* Say 'MARRIAGES = 'MARRIAGE tMARRIAGESt */ if tMARRIAGESt ~= 'tMARRIAGEt' then do mFGRN = MARRIAGE 'GETNUMCHILD' mFGRN if RESULT > 0 then HasCHILDREN = 1 end /* Say 'PARENTS = 'PARENTS tPARENTSt 'MARRIAGES = 'MARRIAGES tMARRIAGESt 'HasPARENTS = 'HasPARENTS 'HasCHILDREN = 'HasCHILDREN */ if flags.MakeText & ( HasPARENTS + HasCHILDREN ) = 1 then doGenText = 1 GetPerComp(ScionIRN) if person.GETFULLNAME.ScionIRN = "" then return /* nobody home */ if ( flags.living > 0 ) & ( person.GETDEATHDATE.ScionIRN = "" ) then do /* say HTMLdir'/'PersonPrefix''ScionIRN'.htm' */ if Exists(HTMLdir'/'PersonPrefix''ScionIRN'.htm') then do Delete(HTMLdir'/'PersonPrefix''ScionIRN'.htm') end return 0 end 'GETBAPTISMDATE' ScionIRN BAPTISMDATE = RESULT 'GETRELIGION' ScionIRN RELIGION = RESULT 'GETBAPTISMPLACE' ScionIRN BAPTISMPLACE = RESULT 'GETBURIALDATE' ScionIRN BURIALDATE = RESULT 'GETBURIALPLACE' ScionIRN BURIALPLACE = RESULT 'GETDIEDOF' ScionIRN DIEDOF = RESULT 'GETEDUCATION' ScionIRN EDUCATION = RESULT 'GETOCCUPATION' ScionIRN OCCUPATION = RESULT 'GETPERSCOMMENT' ScionIRN PERSCOMMENT = RESULT 'GETPERSREFS' ScionIRN PERSREFS = RESULT /* ValidInfo = 0 if LASTNAME||BIRTHDATE||BIRTHPLACE||DEATHDATE||DEATHPLACE||BURIALPLACE||RELIGION||DIEDOF||EDUCATION||OCCUPATION||PERSCOMMENT||PERSREFS ~= "" THEN ValidInfo = 1 if ~ValidInfo then do Say "Person " ScionIRN"'s lacking information; no new HTML file being created!" return end if flags.MakeText & ( ValidInfo | LASTNAME ~= "" ) then DoGenText = 1 */ if flags.MakeText then DoGenText = 1 PfilN = PersonPrefix || ScionIRN dPfilN = HTMLdir'/'PfilN iPfilN = 'img/'PersonPrefix || ScionIRN gPfilN = AGdir'/'PfilN if flags.verbose then do Say '' Say ' HTML: 'dPfilN'.htm for: 'person.GETFULLNAME.ScionIRN' {'ScionIRN'}' end else Say ' {'ScionIRN'} 'person.GETFULLNAME.ScionIRN Open('PERSONFILE',dPfilN'.htm','w') WriteLn('PERSONFILE','<HTML><HEAD>') WriteMeta('PERSONFILE') WriteLn('PERSONFILE','<TITLE>'person.GETFULLNAME.ScionIRN'</TITLE>') WriteLn('PERSONFILE','</HEAD><BODY BACKGROUND=st0ne.gif>') WriteLn('PERSONFILE','<FORM name=buttons>') WriteCh('PERSONFILE','<INPUT type=button value=Index onClick=') WriteCh('PERSONFILE',"'") WriteCh('PERSONFILE','window.open(URL="index.html","_top")') WriteCh('PERSONFILE',"'") WriteLn('PERSONFILE','>') if flags.MakeGuide then do if flags.verbose then Say 'Guide: 'gPfilN'.guide for: 'person.GETFULLNAME.ScionIRN' {'ScionIRN'}' Open('PERSONGuide',gPfilN'.guide','w') WriteLn('PERSONGuide','@database "'gPfilN'.guide"') WriteLn('PERSONGuide','@NODE Main "'person.GETFULLNAME.ScionIRN' Genealogy"') WriteLn('PERSONGuide','@TOC 'AGdir'/'flags.GenPrefix'L.guide/Main') WriteLn('PERSONGuide','@INDEX 'AGdir'/SN.guide/Main') WriteCh('PERSONGuide',person.GETFULLNAME.ScionIRN) end PPIRN = PERSP(ScionIRN) if Exists(PPIRN) & flags.DoPictures then do if flags.RemakeThumb = 1 then do DELETE(dPfilN'.GIF') DELETE(dPfilN'.JPEG') if Exists(dPfilN'.GIF') | Exists(dPfilN'.JPEG') then say '<=====> IN USE <=====> cannot modify 'dPfilN' thumbnail' end if AgeTest(PPIRN, dPfilN'.jpg') then do Delete(dPfilN'.'flags.Thmbfmt) end WriteCh('PERSONFILE','<center><A HREF='PfilN'A.htm>') WriteLn('PERSONFILE','<IMG SRC='PfilN'.'flags.Thmbfmt'></A></center>') end WriteLn('PERSONFILE','<PRE><TT><P>') WriteCh('PERSONFILE',person.MGETFULLNAME.ScionIRN) PNIRN = PERSN(ScionIRN) if Exists(PNIRN) then do if flags.verbose then Say 'Writing info ╢ file 'dPfilN'I.htm' Open('PNDBNAME',PNIRN,'r') Open('PERSONI',dPfilN'I.htm','w') if flags.MakeGuide then do if flags.verbose then Say 'Writing info ╢ file 'gPfilN'I.guide' Open('PERSONGI',gPfilN'I.guide','w') WriteLn('PERSONGI','@database "'gPfilN'I.guide"') WriteLn('PERSONGI','@NODE Main "'person.GETFULLNAME.ScionIRN' Information."') WriteLn('PERSONGI','@TOC 'AGdir'/'flags.GenPrefix'L.guide/Main') WriteLn('PERSONGI','@INDEX 'AGdir'/SN.guide/Main') end WriteLn('PERSONI','<HTML><HEAD>') WriteLn('PERSONI','<meta name="robots" content="noindex,nofollow">') WriteLn('PERSONI','<TITLE>'person.GETFULLNAME.ScionIRN' Information</TITLE>') WriteLn('PERSONI','</HEAD><BODY BACKGROUND=st0ne.gif>') WriteCh('PERSONI','<H3><A HREF='PfilN'.htm>'person.MGETFULLNAME.ScionIRN) WriteCh('PERSONI','</A> Information.</H3>') /* (<A HREF='flags.GenPrefix'L.htm>') WriteCh('PERSONI',flags.htmlb'Personae list'flags.htmlub'</A>) ('flags.htmlb) WriteLn('PERSONI','<A HREF=SN.htm>INDEX'flags.htmlub'</A>)</H3>') */ WriteLn('PERSONI','<PRE><TT>') if DoGenText then WriteLn('GenealogyText',person.PGETFULLNAME.ScionIRN' Information.') DO While ~EOF('PNDBNAME') line = ReadLn('PNDBNAME') WriteLn('PERSONI',CheckForReplacement(line)) if flags.MakeGuide | DoGenText then line = TagStrip(line) if flags.MakeGuide then WriteLn('PERSONGI',CheckGuideRepl(line)) if DoGenText then WriteLn('GenealogyText',CheckForNAReplacement(line)) end Close('PNDBNAME') if DoGenText then WriteLn('GenealogyText','') WriteLn('PERSONI','</TT></PRE>') WriteLn('PERSONI','</BODY></HTML>') Close('PERSONI') if flags.MakeGuide then do WriteLn('PERSONGI','@ENDNODE') Close('PERSONGI') end /* WriteCh('PERSONFILE',' (<A HREF='PfilN'I.htm> ╢ </A>)') */ WriteCh('PERSONFILE',' <INPUT type=button value=╢ onClick=') WriteCh('PERSONFILE',"'") WriteCh('PERSONFILE','window.open(URL="'PfilN'I.htm","_self")') WriteCh('PERSONFILE',"'") WriteCh('PERSONFILE','>') if flags.MakeGuide then WriteCh('PERSONGuide',' @{" More Info (╢) " LINK 'gPfilN'I.guide/Main}') end if Exists(PPIRN) then do if flags.MakeGuide then do WriteCh('PERSONGuide',' @{" Picture («) " RXS "address command ') WriteCh('PERSONGuide',"'"flags.VIEWER" ") WriteCh('PERSONGuide',PPIRN"'"'"') WriteCh('PERSONGuide','}') end if flags.MakeGuide then do PSIRN = PERSS(ScionIRN) if Exists(PSIRN) then do WriteCh('PERSONGuide',' @{" Audio (╞) " RXS "address command ') WriteCh('PERSONGuide',"'"flags.PLAYER" ") WriteCh('PERSONGuide',PSIRN"'"'"') end WriteLn('PERSONGuide','') end if flags.DoPictures then do if ~Exists(dPfilN'.jpg') then do Say 'Creating picture 'dPfilN'.jpg' /* Say 'Sys:Tools/GfxCon 'PPIRN' TO 'dPfilN'.jpg FORMAT JPEG QUALITY 90' */ OldStackSize = pragma('s',21000) /* Dave C. change */ if upper(right(PPIRN,3))="JPG" then address command 'copy 'PPIRN' to 'dPfilN'.jpg' else address command 'Sys:Tools/GfxCon 'PPIRN' TO 'dPfilN'.jpg FORMAT JPEG QUALITY 90' /* Dave C. change */ call pragma('s',OldStackSize) end if Exists(dPfilN'.'flags.Thmbfmt) then do if flags.verbose then Say ' ~ image 'dPfilN'.'flags.Thmbfmt' ...OK... ' end else do if flags.verbose then Say 'Creating image 'dPfilN'.'flags.Thmbfmt /* Say 'Sys:Tools/GfxCon 'dPfilN'.jpg TO 'dPfilN'.'flags.Thmbfmt' FORMAT 'flags.Thmbfmt' BOXFIT 'flags.Thumbnail' 'flags.Thumbnail */ OldStackSize = pragma('s',21000) address command 'Sys:Tools/GfxCon 'dPfilN'.jpg TO 'dPfilN'.'flags.Thmbfmt' FORMAT 'flags.Thmbfmt' BOXFIT 'flags.Thumbnail' 'flags.Thumbnail call pragma('s',OldStackSize) end /* WriteCh('PERSONFILE',' (<A HREF='PfilN'A.htm>'flags.htmlb' « 'flags.htmlub'</A>)') */ WriteCh('PERSONFILE',' <INPUT type=button value=« onClick=') WriteCh('PERSONFILE',"'") WriteCh('PERSONFILE','window.open(URL="'PfilN'A.htm","_self")') WriteCh('PERSONFILE',"'") WriteCh('PERSONFILE','>') if Exists(dPfilN'A.htm') then do if flags.verbose then Say ' ~ picture album 'dPfilN'A.htm ...OK... ' end else do if flags.verbose then Say 'Creating picture album « 'dPfilN'A.htm' Open('PERSONP',dPfilN'A.htm','w') WriteLn('PERSONP','<HTML><HEAD>') WriteLn('PERSONP','<meta name="robots" content="noindex,nofollow">') WriteLn('PERSONP','<TITLE>'person.GETFULLNAME.ScionIRN) WriteLn('PERSONP',' Picture Album</TITLE><H3>') WriteLn('PERSONP','</HEAD><BODY BACKGROUND=st0ne.gif><center>') WriteLn('PERSONP',' ') WriteLn('PERSONP',' <!-- picture source: 'PPIRN' -->') WriteCh('PERSONP','<IMG SRC='PfilN'.jpg><P>') WriteCh('PERSONP',person.MGETFULLNAME.ScionIRN) WriteCh('PERSONP','<P>Picture Album</center><HR>') WriteLn('PERSONP',' ') WriteLn('PERSONP',' ') WriteLn('PERSONP','<A HREF=PAlbum.htm alt='iPfilN'A1.jpg>') WriteLn('PERSONP','<img alt="Picture Album hints" src='iPfilN'A1.'flags.Thmbfmt'></A>') WriteLn('PERSONP',' ') WriteLn('PERSONP',' ') WriteLn('PERSONP','</BODY></HTML>') Close('PERSONP') end if flags.Pexpln ~= 101 then do flags.Pexpln = 101 Open('PAlbum',HTMLdir'/PAlbum.htm','w') WriteLn('PAlbum','<HTML><HEAD>') WriteLn('PAlbum','<meta name="robots" content="noindex,nofollow">') WriteLn('PAlbum','<TITLE>Picture Album hints</TITLE>') WriteLn('PAlbum','</HEAD><BODY BACKGROUND=st0ne.gif>') WriteLn('PAlbum','<HR><HR><H2><B>Use the PICTURE option in the main menu!</B></H2><HR><HR>') WriteLn('PAlbum','<PRE><TT>') WriteCh('PAlbum','<A HREF=img/PnnA1.jpg><IMG SRC=img/PnnA1.'flags.Thmbfmt'></A>') WriteCh('PAlbum',' - another JPEG picture anchored by ') WriteLn('PAlbum','thumbnail image created by:<P>') WriteLn('PAlbum','Copying source picture to: 'HTMLdir'/img/PnnA1.jpg<P>') WriteCh('PAlbum','GfxCon 'HTMLdir'/img/PnnA1.jpg TO 'HTMLdir'/img/PnnA1.'flags.Thmbfmt' FORMAT ') WriteCh('PAlbum',flags.Thmbfmt' BOXFIT 'flags.Thumbnail' 'flags.Thumbnail) WriteLn('PAlbum','<P></PRE></TT><HR><BR><BR>') WriteLn('PAlbum',flags.htmlb'Edit'flags.htmlub' 'HTMLdir'/img/PnnA.htm 'flags.htmlb'to add more pictures to the Picture Album - A2, A3, etc.<P>') WriteLn('PAlbum','All extra pictures should be in img sub-dir<P>') WriteCh('PAlbum','CAUTION:<P> deleting Directory:'flags.htmlub' 'HTMLdir' 'flags.htmlb'destroys all Picture ') WriteCh('PAlbum',' Album modifications and the img sub-dir<P>') WriteLn('PAlbum',' YOUR WORK WILL BE LOST !'flags.htmlub'') WriteLn('PAlbum','</BODY></HTML>') Close('PAlbum') end end end WriteLn('PERSONFILE','') /* ---- WriteCh('PERSONFILE',' (<A HREF='flags.GenPrefix'L.htm>'flags.htmlb'Personae list'flags.htmlub'</A>) ('flags.htmlb) WriteLn('PERSONFILE','<A HREF=SN.htm>INDEX'flags.htmlub'</A>)') */ if flags.VERSION > 5 then do 'GETPERSADDR' ScionIRN PARSE VAR RESULT addr1 '$' addr2 '$' addr3 '$' addr4 '$' addr5 flags.BRKCHAR 'GETPERSPHONE' ScionIRN PARSE VAR RESULT tel1 ',' tel2 ',' tel3 ',' tel4 ',' tel5 p_name = addr1''addr2''addr3''addr4''addr5''tel1''tel2''tel3''tel4''tel5 if p_name ~= '' then do PersOutputCr(1) WriteCh('PERSONFILE','<ADDRESS>') PersOutputCh(addr1''addr2''addr3''addr4''addr5''email(tel1)''email(tel2)''email(tel3)''email(tel4)''email(tel5),1) WriteLn('PERSONFILE','</ADDRESS>') PersOutputCr(1) end end if DoGenText then do if flags.target ~= "NORMAL" then Say 'ASCII: 'TXTdir'/G'ScionIRN' for 'person.GETFULLNAME.ScionIRN' {'ScionIRN'}' WriteLn('GenealogyText','') WriteLn('GenealogyText','-----------------------------------------------------------') WriteLn('GenealogyText','') WriteLn('GenealogyText',person.PGETFULLNAME.ScionIRN' Data Sheet') end if person.GETBIRTHDATE.ScionIRN || person.GETBIRTHPLACE.ScionIRN ~= "" then do if person.GETBIRTHDATE.ScionIRN ~= "" then PersOutputCh('Born: 'person.GETBIRTHDATE.ScionIRN' * ',0) if person.GETBIRTHPLACE.ScionIRN ~= "" then PersOutputCh(person.GETBIRTHPLACE.ScionIRN,0) PersOutputCr() end if BAPTISMDATE || BAPTISMPLACE || RELIGION ~= "" then do PersOutputCh('Baptised: ') PersOutputCh(BAPTISMDATE' ') if RELIGION ~= "" then PersOutputCh('{'RELIGION'} ',0) if BAPTISMPLACE ~= "" then PersOutputCh(BAPTISMPLACE,0) PersOutputCr() end if person.GETDEATHDATE.ScionIRN ~= "" & person.GETDEATHDATE.ScionIRN ~= "dead" then do PersOutputCh('Died: 'person.GETDEATHDATE.ScionIRN,0) if person.GETDEATHPLACE.ScionIRN ~= "" then PersOutputCh(' + 'person.GETDEATHPLACE.ScionIRN,0) if BURIALPLACE ~= "" | BURIALDATE ~= "" then do PersOutputCh(' . Buried: ') if BURIALPLACE ~= "" then PersOutputCh(BURIALPLACE,0) if BURIALDATE ~= "" then PersOutputCh(' 'BURIALDATE,0) end PersOutputCr() end else do if person.GETDEATHPLACE.ScionIRN ~= "" then PersOutputLn(person.GETDEATHPLACE.ScionIRN,1) if BURIALPLACE ~= "" then PersOutputLn(BURIALPLACE,1) end if DIEDOF ~= "" then PersOutputLn('Cause of Death: 'DIEDOF,1) if EDUCATION ~= "" then PersOutputLn('Education: 'EDUCATION,1) if OCCUPATION ~= "" then PersOutputLn('Occupation: 'OCCUPATION,1) if PERSCOMMENT ~= "" then PersOutputLn('Comments: 'PERSCOMMENT,1) if PERSREFS ~= "" then PersOutputLn('References: 'PERSREFS,1) /* end of personal data; start family tree segment */ PersOutputHL() HeadLine = '' if HasPARENTS then HeadLine = HeadLine' ╖Parents ' 'GETNUMSIB' ScionIRN xtra = '' if RESULT > 1 then xtra = 's' if RESULT > 0 then HeadLine = HeadLine' ╖Sibling'xtra' ' 'GETNUMMARRY' ScionIRN xtra = '' if RESULT > 1 then xtra = 's' if RESULT > 0 then HeadLine = HeadLine' ╖Spouse'xtra' ' 'GETTOTALCHILD' ScionIRN xtra = 'Child' if RESULT > 1 then xtra = xtra'ren' if RESULT > 0 then HeadLine = HeadLine' ╖'xtra PersOutputLn('Immediate Family: 'HeadLine,0) if DoGenText then WriteLn('GenealogyText','') if HasPARENTS then do 'GETPRINCIPAL' PARENTS PRINCIPAL = RESULT 'GETSPOUSE' PARENTS SPOUSE = RESULT 'GETMARRYDATE' PARENTS PARENTSMARRIAGEDATE = RESULT 'GETMARRYPLACE' PARENTS PARENTSmFGRNPLACE = RESULT 'GETSEX' PRINCIPAL if RESULT = 'M' then do FATHERIRN = PRINCIPAL MOTHERIRN = SPOUSE end else do FATHERIRN = SPOUSE MOTHERIRN = PRINCIPAL end GetPerComp(FATHERIRN) if person.GETFIRSTNAME.FATHERIRN||person.GETLASTNAME.FATHERIRN ~= "" then HasFATHER = 1 GetPerComp(MOTHERIRN) if person.GETFIRSTNAME.MOTHERIRN||person.GETLASTNAME.MOTHERIRN ~= "" then HasMOTHER = 1 if FATHERLASTNAME ~= "" then do HasFileFATHER = 1 FATHERFILENAME = PersonPrefix || FATHERIRN end if MOTHERLASTNAME ~= "" then do HasFileMOTHER = 1 MOTHERFILENAME = PersonPrefix || MOTHERIRN end if HasFileFATHER then do PersOutputCh(' <'FATHERIRN'>',1) /* if PARENTSMARRIAGEDATE ~= "" then PersOutputCh(' X ',0) else PersOutputCh(' ///\',0) */ PersOutputCh(' ///\',0) end PersOutputCh('<'MOTHERIRN'>',1) if ( flags.living = 0 ) then do if ( person.GETDEATHDATE.FATHERIRN||person.GETDEATHDATE.MOTHERIRN = "" ) then do if PARENTSMARRIAGEDATE ~= "" then PersOutputCh(' x 'PARENTSMARRIAGEDATE,0) if PARENTSmFGRNPLACE ~= "" then PersOutputCh(' @ 'PARENTSmFGRNPLACE,0) end end PersOutputCr() spcs = ' |' DO i = 0 TO Length(FATHERFULLNAME) /* ################ */ spcs = spcs' ' /* ??? GETFAMLBL1 ??? */ end /* ??? GETFAMLBL2 ??? */ Minfo = Exists(FAMN(PARENTS)) if PARENTSmFGRNCELEBRANT ~= '' | Minfo then do if DoGenText then WriteLn('GenealogyText',' |') 'GETNUMCHILD' PARENTS TOTCHILDREN = RESULT /* say 'TOTCHILDREN = 'TOTCHILDREN */ DO i = 0 TO TOTCHILDREN - 1 'GETCHILD' PARENTS i PARENTSc = RESULT GETPerComp(PARENTSc) if person.GETFIRSTNAME.PARENTSc ~= "" then do if PARENTSc ~= ScionIRN then do LastNameFl = 1 if person.GETLASTNAME.PARENTSc = person.GETLASTNAME.FATHERIRN then do LastNameFl = -1 LastNameVal = person.GETLASTNAME.FATHERIRN end PersOutputCh(' |_',0) PersOutputCh('<'PARENTSc'>',LastNameFl) LastNameFl = 1 BirthDeath(PARENTSc) PersOutputCr() end end end end PersOutputLn(' |',0) END /* end of parents, siblings segment; start marriages segment */ vert.0 = '' vert.1 = '|' 'GETNUMMARRY' ScionIRN TOTMARRIAGES = RESULT /* say 'TOTMARRIAGES = 'TOTMARRIAGES */ DO i = 0 TO TOTMARRIAGES 'GETMARRIAGE' ScionIRN i MARRIAGE = RESULT /* use: 'EXISTFAMILY' */ if MARRIAGE > -1 then do MARRIAGES = i j = i + 1 vert.j = vert.1||vert.i end end tMARRIAGESt = 't'MARRIAGES't' PersOutputCh(' |_',0) if tMARRIAGESt ~= 'tMARRIAGESt' then do DO i = 0 TO MARRIAGES 'GETMARRIAGE' ScionIRN i mFGRN = RESULT if mFGRN ~= "" then do ki = MARRIAGES - i + 1 if ki ~= MARRIAGES + 1 then PersOutputLn(' 'vert.ki,0) j = MARRIAGES + 1 - i 'GETSPOUSE' mFGRN SPOUSE = RESULT GetPerComp(SPOUSE) if SPOUSE = ScionIRN then do 'GETPRINCIPAL' mFGRN SPOUSE = RESULT end 'GETMARRYDATE' mFGRN MARRIAGEDATE = RESULT 'GETMARRYPLACE' mFGRN mFGRNPLACE = RESULT SPOUSEFILENAME = PersonPrefix || SPOUSE if i = 0 then do /* if MARRIAGEDATE ~= "" then PersOutputCh('<'ScionIRN'> X ',1) else PersOutputCh('<'ScionIRN'> ///\',1) */ PersOutputCh('<'ScionIRN'> ///\',1) PersOutputCh('<'SPOUSE'>',1) end else do /* if ( MARRIAGEDATE ~= "" ) then PersOutputCh(' 'vert.j'_X',0) else PersOutputCh(' 'vert.j'_ ///\',0) */ PersOutputCh(' 'vert.j'_ ///\',0) PersOutputCh('<'SPOUSE'>',1) end blockinfo = ( flags.living > 0 ) & ( person.GETDEATHDATE.SPOUSE = "" ) if ~blockinfo then do if MARRIAGEDATE ~= "" then PersOutputCh(' x 'MARRIAGEDATE,0) if mFGRNPLACE ~= "" then PersOutputCh(' @ 'mFGRNPLACE,0) PersOutputCr() jk = MARRIAGES - i spcs = ' 'vert.jk' |' FfilN = HTMLdir'/'FamilyPrefix || mFGRN gFfilN = AGdir'/'FamilyPrefix || mFGRN iFfilN = HTMLdir'/img/'FamilyPrefix || mFGRN Minfo = 0 FAMNIRN = FAMN(mFGRN) if Exists(FAMNIRN) then do Minfo = 1 if flags.MakeGuide then do if flags.verbose then Say 'Writing info ╢ file 'gFfilN'I.guide' Open('FAMILYGI',gFfilN'I.guide','w') WriteLn('FAMILYGI','@database "'gFfilN'I.guide"') WriteCh('FAMILYGI','@NODE Main "'person.MGETFULLNAME.ScionIRN' & ') WriteLn('FAMILYGI',person.MGETFULLNAME.SPOUSE' Family Information."') WriteLn('FAMILYGI','@TOC 'AGdir'/'flags.GenPrefix'L.guide/Main') WriteLn('FAMILYGI','@INDEX 'AGdir'/SN.guide/Main') /* if Exists(FAMP(mFGRN)) then do WriteCh('PERSONGuide',spcs' @{" Picture («) " RXS "address command ') WriteCh('PERSONGuide',"'"flags.VIEWER" ") WriteCh('PERSONGuide',FAMP(mFGRN)"'"'"') WriteLn('PERSONGuide','}') end */ end if flags.verbose then Say 'Writing info ╢ file 'FfilN'I.htm' Open('FNDBNAME',FAMNIRN,'r') Open('FAMILYI',FfilN'I.htm','w') WriteLn('FAMILYI','<HTML><HEAD>') WriteLn('FAMILYI','<meta name="robots" content="noindex,nofollow">') WriteCh('FAMILYI','<TITLE>'person.MGETFULLNAME.ScionIRN' & ') WriteLn('FAMILYI',person.MGETFULLNAME.SPOUSE' Family Information</TITLE>') WriteLn('FAMILYI','</HEAD><BODY BACKGROUND=st0ne.gif>') FAMP = FAMP(mFGRN) if Exists(FAMP) & flags.DoPictures then do WriteCh('FAMILYI','<A HREF='FamilyPrefix || mFGRN'A.htm') WriteCh('FAMILYI','><IMG SRC='FamilyPrefix || mFGRN'.'flags.Thmbfmt'></A>') end if flags.MakeGuide then do FSIRN = FAMS(mFGRN) if Exists(FSIRN) then do WriteCh('FAMILYGI',' @{" Audio (╞) " RXS "address command ') WriteCh('FAMILYGI',"'"flags.PLAYER" ") WriteCh('FAMILYGI',FSIRN"'"'"') end WriteLn('FAMILYGI','') end WriteCh('FAMILYI','<H3>Family of 'person.MGETFULLNAME.ScionIRN' & ') if SPOUSE ~= '' then WriteCh('FAMILYI',person.MGETFULLNAME.SPOUSE) else WriteCh('FAMILYI','______') /* if Exists(FAMP(mFGRN)) & flags.DoPictures then do WriteCh('FAMILYI',' (<A HREF='FamilyPrefix || mFGRN'A.htm') WriteCh('FAMILYI','>'flags.htmlb' « 'flags.htmlub'</A>) ') end */ WriteCh('FAMILYI',' (<A HREF='flags.GenPrefix'L.htm>') WriteLn('FAMILYI',flags.htmlb'Personae list'flags.htmlub'</A>) ('flags.htmlb) WriteLn('FAMILYI','<A HREF=SN.htm>INDEX'flags.htmlub'</A>)</H3>') DO While ~EOF('FNDBNAME') line = ReadLn('FNDBNAME') WriteLn('FAMILYI',CheckForReplacement(line)) if flags.MakeGuide then WriteLn('FAMILYGI',CheckForNAReplacement(line)) /* if DoGenText then WriteLn('GenealogyText',spcs' 'CheckForNAReplacement(line)) */ end Close('FNDBNAME') WriteLn('FAMILYI','</BODY></HTML>') Close('FAMILYI') if flags.MakeGuide then WriteLn('FAMILYGI','@ENDNODE') Close('FAMILYGI') end Palbum = 0 if Exists(FAMP(mFGRN)) & flags.DoPictures then do Palbum = 1 if flags.RemakeThumb = 1 then do DELETE(FfilN'.GIF') DELETE(FfilN'.JPEG') if Exists(FfilN'.GIF') | Exists(FfilN'.JPEG') then say '<=====> IN USE <=====> cannot modify 'FfilN' thumbnail' end if AgeTest(FAMP(mFGRN),FfilN'.jpg') then do Delete(FfilN'.'flags.Thmbfmt) end if flags.DoPictures & ~Exists(FfilN'.jpg') then do Say 'Creating picture 'FfilN'.jpg' /* Say 'Sys:Tools/GfxCon 'FAMP(mFGRN)' TO 'FfilN'.jpg FORMAT JPEG QUALITY 90' */ Say 'Sys:Tools/GfxCon 'FAMP(mFGRN)' TO 'FfilN'.jpg FORMAT JPEG QUALITY 90' OldStackSize = pragma('s',21000) /* Dave C. change */ if upper(right(FAMP(mFGRN),3))="JPG" then address command 'copy 'FAMP(mFGRN)' TO 'FfilN'.jpg' else address command 'Sys:Tools/GfxCon 'FAMP(mFGRN)' TO 'FfilN'.jpg FORMAT JPEG QUALITY 90' /* Dave C. change */ call pragma('s',OldStackSize) end if Exists(FfilN'.'flags.Thmbfmt) then do if flags.verbose then Say ' ~ image 'FfilN'.'flags.Thmbfmt' ...OK... ' end else do if flags.verbose then Say 'Creating image 'FfilN'.'flags.Thmbfmt'' /* Say 'Sys:Tools/GfxCon 'FfilN'.jpg TO 'FfilN'.'flags.Thmbfmt' FORMAT 'flags.Thmbfmt' BOXFIT 'flags.Thumbnail' 'flags.Thumbnail */ OldStackSize = pragma('s',21000) BOXFITmax = 100 if flags.Thumbnail < BOXFITmax then BOXFITmax = flags.Thumbnail /* Dave C. change */ address command 'Sys:Tools/GfxCon 'FfilN'.jpg TO 'FfilN'.'flags.Thmbfmt' FORMAT 'flags.Thmbfmt' BOXFIT' BOXFITmax BOXFITmax /* Dave C. change */ call pragma('s',OldStackSize) end if Exists(FfilN'A.htm') then do if flags.verbose then Say ' ~ picture album 'FfilN'A.htm ...OK... ' end else do if flags.verbose then Say 'Creating picture album « 'FfilN'A.htm' Open('FAMILYP',FfilN'A.htm','w') WriteLn('FAMILYP','<HTML><HEAD>') WriteLn('FAMILYP','<meta name="robots" content="noindex,nofollow">') WriteCh('FAMILYP','<TITLE>'person.MGETFULLNAME.ScionIRN' ///\ ') WriteCh('FAMILYP',person.MGETFULLNAME.SPOUSE) WriteLn('FAMILYP',' Family Picture Album</TITLE><H3>') WriteLn('FAMILYP','</HEAD><BODY BACKGROUND=st0ne.gif><center>') WriteLn('FAMILYP',' ') WriteLn('FAMILYP',' <!-- picture source: 'FAMP(mFGRN)' -->') WriteCh('FAMILYP','<IMG SRC='FamilyPrefix || mFGRN'.jpg><P>') WriteCh('FAMILYP',person.MGETFULLNAME.ScionIRN' & ') if SPOUSE = '' then WriteCh('FAMILYP','<>') else WriteCh('FAMILYP',person.MGETFULLNAME.SPOUSE) WriteLn('FAMILYP','<P>Family Picture Album</center><HR>') WriteLn('FAMILYP',' ') WriteLn('FAMILYP',' ') WriteLn('FAMILYP','<A HREF=FAlbum.htm alt=img/'FamilyPrefix || mFGRN'A1.jpg>') WriteLn('FAMILYP','<img alt="Picture Album hints" src=img/'FamilyPrefix || mFGRN'A1.'flags.Thmbfmt'></A>') WriteLn('FAMILYP',' ') WriteLn('FAMILYP',' ') WriteLn('FAMILYP','</BODY></HTML>') Close('FAMILYP') end if flags.Fexpln ~= 101 then do flags.Fexpln = 101 Open('FAlbum',HTMLdir'/FAlbum.htm','w') WriteLn('FAlbum','<HTML><HEAD>') WriteLn('FAlbum','<meta name="robots" content="noindex,nofollow">') WriteLn('FAlbum','<TITLE>Picture Album hints</TITLE>') WriteLn('FAlbum','</HEAD><BODY BACKGROUND=st0ne.gif>') WriteLn('FAlbum','<HR><HR><H2><B>Use the PICTURE option in the main menu!</B></H2><HR><HR>') WriteLn('FAlbum','<PRE><TT>') WriteCh('FAlbum','<A HREF=img/FnnA1.jpg><IMG SRC=img/FnnA1.'flags.Thmbfmt'></A>') WriteCh('FAlbum',' - another JPEG picture anchored by ') WriteLn('FAlbum','thumbnail image created by:<P>') WriteLn('FAlbum','Copying source picture to: 'HTMLdir'/img/FnnA1.jpg<P>') WriteCh('FAlbum','GfxCon 'HTMLdir'/img/FnnA1.jpg TO 'HTMLdir'/img/FnnA1.'flags.Thmbfmt' FORMAT ') WriteCh('FAlbum',flags.Thmbfmt' BOXFIT 'flags.Thumbnail' 'flags.Thumbnail) WriteLn('FAlbum','<P></PRE></TT><HR><BR><BR>') WriteLn('FAlbum',''flags.htmlb'Edit'flags.htmlub' 'HTMLdir'/img/FnnA.htm 'flags.htmlb'to add more pictures to the Picture Album - A2, A3, etc.<P>') WriteCh('FAlbum','CAUTION:<P> deleting Directory:'flags.htmlub' 'HTMLdir' 'flags.htmlb'destroys all Picture ') WriteCh('FAlbum',' Album modifications and the img sub-dir<P>') WriteLn('FAlbum',' YOUR WORK WILL BE LOST !'flags.htmlub'') WriteLn('FAlbum','</BODY></HTML>') Close('FAlbum') end end if flags.VERSION > 5 then do 'GETFAMADDR' mFGRN PARSE VAR RESULT p_name '$' addr1 '$' addr2 '$' addr3 '$' addr4 '$' addr5 flags.BRKCHAR 'GETFAMPHONE' mFGRN p_name = addr1''addr2''addr3''addr4''addr5''RESULT if p_name ~= '' then do WriteCh('PERSONFILE','<ADDRESS>') PersOutputCh(' 'addr1' 'addr2' 'addr3' 'addr4' 'addr5' 'RESULT,1) WriteLn('PERSONFILE','</ADDRESS>') PersOutputCr(1) end end Minfo2 = 0 Minfo3 = 0 if MARRIAGECELEBRANT ~= '' | Minfo | Palbum then do if Minfo then do /* WriteCh('PERSONFILE',spcs'(<A HREF='FamilyPrefix || mFGRN'I.htm> ╢ </A>) ') */ Minfo3 = 1 WriteCh('PERSONFILE',spcs' <INPUT type=button value=╢ onClick=') WriteCh('PERSONFILE',"'") WriteCh('PERSONFILE','window.open(URL="'FamilyPrefix || mFGRN'I.htm","_self")') WriteCh('PERSONFILE',"'") WriteCh('PERSONFILE','>') if flags.MakeGuide then do WriteCh('PERSONGuide',spcs' @{" More Info (╢) " LINK 'gFfilN'I.guide/Main}') Minfo2 = 1 if Exists(FAMP(mFGRN)) then do WriteCh('PERSONGuide',' @{" Picture («) " RXS "address command ') WriteCh('PERSONGuide',"'"flags.VIEWER" ") WriteCh('PERSONGuide',FAMP(mFGRN)"'"'"}') end if Exists(FAMS(mFGRN)) then do WriteCh('PERSONGuide',' @{" Audio (╞) " RXS "address command ') WriteCh('PERSONGuide',"'"flags.PLAYER" ") WriteCh('PERSONGuide',FAMS(mFGRN)"'"'"}') end WriteLn('PERSONGuide','') end end if Palbum then do if Minfo3 = 0 then WriteCh('PERSONFILE',spcs) /* WriteCh('PERSONFILE',' (<A HREF='FamilyPrefix || mFGRN'A.htm') WriteCh('PERSONFILE','>'flags.htmlb' « 'flags.htmlub'</A>) ') */ WriteCh('PERSONFILE',' <INPUT type=button value=« onClick=') WriteCh('PERSONFILE',"'") WriteCh('PERSONFILE','window.open(URL="'FamilyPrefix || mFGRN'A.htm","_self")') WriteCh('PERSONFILE',"'") WriteCh('PERSONFILE','>') WriteCh('PERSONFILE',' <A HREF='FamilyPrefix || mFGRN'A.htm>') WriteCh('PERSONFILE','<img ALIGN=right src=') WriteLn('PERSONFILE',FamilyPrefix || mFGRN'.'flags.Thmbfmt'></A>') end if ( Exists(FAMP(mFGRN)) & flags.DoPictures ) | Minfo then WriteLn('PERSONFILE',' ') 'GETCELEBRANT' mFGRN if RESULT ~= "" then PersOutputLn(spcs' Celebrant: 'RESULT,1) 'GETWITNESS' mFGRN if RESULT ~= "" then PersOutputLn(spcs' Witness: 'RESULT,1) 'GETFAMCOMMENT' mFGRN if RESULT ~= "" then PersOutputLn(spcs' Comments: 'RESULT,1) 'GETENDDATE' mFGRN ENDDATE = RESULT if flags.VERSION > 5 then do 'GETENDINGSTR' mFGRN ENDING = RESULT if ENDDATE ~= "" | ENDING ~= 'Unknown' then do PersOutputCh(spcs,0) PersOutputCh(' Ended: ',0) if ENDDATE ~= "" then PersOutputCh(ENDDATE,0) PersOutputCh(' ╖ 'ENDING,0) PersOutputCr() end end else do 'GETENDING' mFGRN ENDING = RESULT if ENDDATE ~= "" | ENDING > 0 then do PersOutputCh(spcs,0) PersOutputCh(' Ended: ',0) if ENDDATE ~= "" then PersOutputCh(ENDDATE,0) if ENDING = 1 then PersOutputCh(' ╖ None',0) if ENDING = 2 then PersOutputCh(' ╖ Divorce',0) if ENDING = 3 then PersOutputCh(' ╖ Separation',0) if ENDING = 4 then PersOutputCh(' ╖ Annulment',0) if ENDING = 5 then PersOutputCh(' ╖ Death',0) PersOutputCr() end end 'GETFAMREFS' mFGRN if RESULT ~= "" then PersOutputLn(spcs'References: 'RESULT,1) if DoGenText then WriteLn('GenealogyText',spcs) if Minfo & DoGenText then do /* if Minfo & ( DoGenText | flags.MakeGuide ) then do */ if flags.MakeGuide then WriteLn('PERSONGuide',spcs) Open('FNDBNAME',FAMNIRN,'r') DO While ~EOF('FNDBNAME') line = TagStrip(ReadLn('FNDBNAME')) /* if flags.MakeGuide then WriteLn('PERSONGuide',spcs' 'CheckGuideRepl(line)) */ if DoGenText then WriteLn('GenealogyText',spcs' 'CheckForNAReplacement(line)) end Close('FNDBNAME') end end end else do PersOutputCr() end 'GETNUMCHILD' mFGRN TOTCHILDREN = RESULT /* say 'TOTCHILDREN = 'TOTCHILDREN */ DO k = 0 TO TOTCHILDREN - 1 'GETCHILD' mFGRN k mFGRNc = RESULT GetPerComp(mFGRNc) if person.GETFIRSTNAME.mFGRNc ~= "" then do HasCHILDREN = 1 jk = MARRIAGES - i LastNameFl = 1 if person.GETLASTNAME.mFGRNc = person.GETLASTNAME.ScionIRN then do LastNameFl = -1 LastNameVal = person.GETLASTNAME.ScionIRN end PersOutputCh(' 'vert.jk' |_<'mFGRNc'>',LastNameFl) LastNameFl = 1 BirthDeath(mFGRNc) PersOutputCr() end end end end end else do LastNameFl = 1 if LASTNAME = FATHERLASTNAME then do LastNameFl = -1 LastNameVal = FATHERLASTNAME end PersOutputLn('<'ScionIRN'>',1) LastNameFl = 1 end WriteLn('PERSONFILE','</FORM>') if HasPARENTS then do if flags.verbose then say ' Ancestors...' PersOutputHL() PersOutputLn('Ancestors',0) if DoGenText then WriteLn('GenealogyText','') Paternal(ScionIRN,' ') PersOutputCh('<'ScionIRN'>',1) if person.GETBIRTHDATE.ScionIRN ~= "" then PersOutputCh(' * 'person.GETBIRTHDATE.ScionIRN,0) if person.GETDEATHDATE.ScionIRN ~= "" & person.GETDEATHDATE.ScionIRN ~= "dead" then if person.GETDEATHDATE.ScionIRN ~= "?" then PersOutputCh(' + 'person.GETDEATHDATE.ScionIRN,0) PersOutputCr() Maternal(ScionIRN,' ') end if HasCHILDREN then do if flags.verbose then say ' Descendants...' PersOutputHL() indent = " " PersOutputLn('Descendants',0) if DoGenText then WriteLn('GenealogyText','') PersOutputCh(indent'<'ScionIRN'>',1) if person.GETBIRTHDATE.ScionIRN ~= "" then PersOutputCh(' * 'person.GETBIRTHDATE.ScionIRN,0) if person.GETDEATHDATE.ScionIRN ~= "" & person.GETDEATHDATE.ScionIRN ~= "dead" then if person.GETDEATHDATE.ScionIRN ~= "?" then PersOutputCh(' + 'person.GETDEATHDATE.ScionIRN,0) PersOutputCr() marriagesANDchildren(ScionIRN,indent) end /*⌐*/ WriteLn('PERSONFILE','</TT></PRE>') WriteLn('PERSONFILE','</BODY></HTML>') Close('PERSONFILE') if flags.MakeGuide then do WriteLn('PERSONGuide','@ENDNODE') Close('PERSONGuide') end /*⌐*/ /* if flags.target = "NORMAL" & ValidInfo then do */ if flags.target = "NORMAL" then do if DoGenText then WriteLn('GenealogyText','') WriteLn('GenealogyFile','<TR><TD ALIGN=center>') GeneaOutputCh('<'ScionIRN'>',1) WriteLn('GenealogyFile','</TD>') WriteLn('GenealogyFile','<TD ALIGN=right>') if person.GETBIRTHDATE.ScionIRN ~= "" then GeneaOutputCh(' *',0) GeneaOutputCh(person.GETBIRTHDATE.ScionIRN,0) WriteLn('GenealogyFile','</TD>') WriteLn('GenealogyFile','<TD ALIGN=right>') if person.GETDEATHDATE.ScionIRN ~= "" & person.GETDEATHDATE.ScionIRN ~= "dead" then if person.GETDEATHDATE.ScionIRN ~= "?" then GeneaOutputCh(' +',0) GeneaOutputCh(person.GETDEATHDATE.ScionIRN,0) WriteLn('GenealogyFile','</TD>') if HasFATHER then do WriteLn('GenealogyFile','<TD ALIGN=center>') GeneaOutputCh(' ╖ ',0) GeneaOutputCh('<'FATHERIRN'>',1) WriteLn('GenealogyFile','</TD>') WriteLn('GenealogyFile','<TD ALIGN=center>') if HasMOTHER then do /* GeneaOutputCh(' ///\',0) */ GeneaOutputCh('<'MOTHERIRN'>',1) end end else do WriteLn('GenealogyFile','<TD ALIGN=center>') WriteLn('GenealogyFile','</TD>') WriteLn('GenealogyFile','<TD ALIGN=center>') if HasMOTHER then do GeneaOutputCh(' ╖ ',0) GeneaOutputCh('<'MOTHERIRN'>',1) end end GeneaOutputCr() /* do not close, we have many more to go. */ end return email: PROCEDURE PARSE ARG nm '@' dom if strip(nm) = '' then return '' if strip(dom) = '' then return ' 'strip(nm) else do PARSE VAR nm nm1 ':' nm2 if strip(nm1) = 'email' then nm1 = nm2 return ' <I>@</I> <A HREF=mailto:'strip(nm1)'@'strip(dom)'>'strip(nm1)'@'strip(dom)'</A>' IsNumeric: PROCEDURE PARSE ARG str return DataType(str, 'W') /******************************** Makedir **********************************/ /* Makedir - If a directory under the given name already exists, or can be created, return 1, otherwise return 0. Though this function works correctly under Workbench 1.3, it has the same effect as the existing MAKEDIR; hence it is useful only under 2.0. */ Makedir: procedure ds = statef(arg(1)) if ds='' then result = 'MAKEDIR'(arg(1)) else result = left(ds,3) = 'DIR' return result Paternal: PROCEDURE EXPOSE person. AGdir flags. DoGenText PersonPrefix DBPATH PARSE ARG irn, indent 'GETPARENTS' irn PARENTS = RESULT 'GETPRINCIPAL' PARENTS PRINCIPAL = RESULT 'GETSPOUSE' PARENTS SPOUSE = RESULT /* say 'PRINCIPAL = 'PRINCIPAL' SPOUSE = 'SPOUSE */ 'GETSEX' PRINCIPAL if RESULT = 'M' then do FIRN = PRINCIPAL MIRN = SPOUSE end else do FIRN = SPOUSE MIRN = PRINCIPAL end pirn = FIRN if 't'pirn't' ~= 'tt' then do Paternal(pirn,indent' ') PersOutputCh(indent' ,-',0) if pirnLASTNAME ~= "" then PersOutputCh('<'pirn'>',1) if EXISTS(PERSN(pirn)) then PersOutputCh(' (╢)',0) if EXISTS(PERSP(pirn)) then PersOutputCh(' («)',0) if EXISTS(PERSS(pirn)) then PersOutputCh(' (╞)',0) BirthDeath(pirn) PersOutputCr() Maternal(pirn,indent'| ') end return 0 Maternal: PROCEDURE EXPOSE person. AGdir flags. DoGenText PersonPrefix DBPATH PARSE ARG irn, indent 'GETPARENTS' irn PARENTS = RESULT 'GETPRINCIPAL' PARENTS PRINCIPAL = RESULT 'GETSPOUSE' PARENTS SPOUSE = RESULT 'GETSEX' PRINCIPAL if RESULT = 'M' then do FIRN = PRINCIPAL MIRN = SPOUSE end else do FIRN = SPOUSE MIRN = PRINCIPAL end pirn = MIRN if 't'pirn't' ~= 'tt' then do Paternal(pirn,indent'| ') PersOutputCh(indent' `-',0) if pirnLASTNAME ~= "" then PersOutputCh('<'pirn'>',1) if EXISTS(PERSN(pirn)) then PersOutputCh(' (╢)',0) if EXISTS(PERSP(pirn)) then PersOutputCh(' («)',0) if EXISTS(PERSS(pirn)) then PersOutputCh(' (╞)',0) BirthDeath(pirn) PersOutputCr() Maternal(pirn,indent' ') end return 0 marriagesANDchildren: PROCEDURE EXPOSE person. AGdir flags. DoGenText PersonPrefix DBPATH PARSE ARG ScionIRN,indent 'GETNUMMARRY' ScionIRN TOTMARRIAGES = RESULT /* say 'TOTMARRIAGES = 'TOTMARRIAGES */ if 't'TOTMARRIAGES't' = 'tt' then return 0 DO i = 0 TO TOTMARRIAGES - 1 'GETMARRIAGE' ScionIRN i MARRIAGE = RESULT if MARRIAGE > -1 then do MARRIAGES = i end end tMARRIAGESt = 't'MARRIAGES't' /* Say 'MARRIAGES = 'MARRIAGES tMARRIAGESt */ if tMARRIAGESt ~= 'tMARRIAGESt' then do DO i = 0 TO MARRIAGES 'GETMARRIAGE' ScionIRN i mFGRN = RESULT if mFGRN ~= "" then do 'GETSPOUSE' mFGRN SPOUSE = RESULT if SPOUSE = ScionIRN then DO 'GETPRINCIPAL' mFGRN SPOUSE = RESULT end PersOutputCh(indent' ///\',0) mindent = " " if i <= ( MARRIAGES - 1 ) then mindent = " :" PersOutputCh('<'SPOUSE'>',1) if EXISTS(PERSN(SPOUSE)) then PersOutputCh(' (╢)',0) if EXISTS(PERSP(SPOUSE)) then PersOutputCh(' («)',0) if EXISTS(PERSS(SPOUSE)) then PersOutputCh(' (╞)',0) BirthDeath(SPOUSE) PersOutputCr() 'GETNUMCHILD' mFGRN TOTCHILDREN = RESULT /* say 'TOTCHILDREN = 'TOTCHILDREN 'mFGRN = 'mFGRN */ DO k = 0 TO TOTCHILDREN - 1 'GETCHILD' mFGRN k mFGRNc = RESULT GetPerComp(mFGRNc) if k = ( TOTCHILDREN - 1 ) then do indent2 = indent||mindent" " PersOutputCh(indent||mindent'|_<'mFGRNc'>',1) end else do indent2 = indent||mindent"|" PersOutputCh(indent2'_<'mFGRNc'>',1) end if EXISTS(PERSN(mFGRNc)) then PersOutputCh(' (╢)',0) if EXISTS(PERSP(mFGRNc)) then PersOutputCh(' («)',0) if EXISTS(PERSS(mFGRNc)) then PersOutputCh(' (╞)',0) BirthDeath(mFGRNc) PersOutputCr() marriagesANDchildren(mFGRNc,indent2) end end end end return 0 /* get correct person notes file name */ PERSN: PROCEDURE EXPOSE DBPATH flags. PARSE ARG IRN file = '' if flags.VERSION > 5 then do 'GETPERSNOTE' IRN file = RESULT end if file = '' then file = DBPATH'PN'IRN'.'flags.DBNAME return file /* get correct family notes file name */ FAMN: PROCEDURE EXPOSE DBPATH flags. PARSE ARG IRN file = '' if flags.VERSION > 5 then do 'GETFAMNOTE' IRN file = RESULT end if file = '' then file = DBPATH'FN'IRN'.'flags.DBNAME return file /* get correct person picture file name */ PERSP: PROCEDURE EXPOSE DBPATH flags. PARSE ARG IRN file = '' if flags.VERSION > 5 then do 'GETPERSPIX' IRN file = RESULT end if file = '' then file = DBPATH'PP'IRN'.'flags.DBNAME return file /* get correct family picture file name */ FAMP: PROCEDURE EXPOSE DBPATH flags. PARSE ARG IRN file = '' if flags.VERSION > 5 then do 'GETFAMPIX' IRN file = RESULT end if file = '' then file = DBPATH'FP'IRN'.'flags.DBNAME return file /* get correct person sound file name */ PERSS: PROCEDURE EXPOSE DBPATH flags. PARSE ARG IRN file = '' if flags.VERSION > 5 then do 'GETPERSSND' IRN file = RESULT end if file = '' then file = DBPATH'PS'IRN'.'flags.DBNAME return file /* get correct family sound file name */ FAMS: PROCEDURE EXPOSE DBPATH flags. PARSE ARG IRN file = '' if flags.VERSION > 5 then do 'GETFAMSND' IRN file = RESULT end if file = '' then file = DBPATH'FS'IRN'.'flags.DBNAME return file PersOutputHL: PROCEDURE EXPOSE person. DoGenText flags. WriteLn('PERSONFILE','<HR>') if flags.MakeGuide then WriteLn('PERSONGuide','') if DoGenText then do WriteLn('GenealogyText','') WriteLn('GenealogyText','-----------------------------------------------------------') WriteLn('GenealogyText','') end return 0 BirthDeath: PROCEDURE EXPOSE person. DoGenText flags. irn = arg(1) if ( flags.living > 0 ) & ( person.GETDEATHDATE.irn = "" ) then return 0 /* GetPerComp(irn) */ if person.gotten.irn = PERSON.GOTTEN. then return 0 if person.GETBIRTHDATE.irn ~= "" then PersOutputCh(' * 'person.GETBIRTHDATE.irn,0) if person.GETDEATHDATE.irn ~= "" & person.GETDEATHDATE.irn ~= "?" then PersOutputCh(' + 'person.GETDEATHDATE.irn,0) return 0 PersOutputCr: PROCEDURE EXPOSE person. DoGenText flags. if arg(1) ~= "1" then WriteLn('PERSONFILE','') if flags.MakeGuide then WriteLn('PERSONGuide','') if DoGenText then WriteLn('GenealogyText','') return 0 PersOutputCh: PROCEDURE EXPOSE person. AGdir DoGenText flags. PersonPrefix LastNameFl LastNameVal if arg(1) ~= "" then do if arg(2) = 0 then do if arg(1) ~= " (╞)" then WriteCh('PERSONFILE',arg(1)) if flags.MakeGuide then do if arg(1) = ' ('flags.htmlb'«'flags.htmlub')' then WriteCh('PERSONGuide',' («)') else WriteCh('PERSONGuide',arg(1)) end if DoGenText then WriteCh('GenealogyText',arg(1)) end else do WriteCh('PERSONFILE',CheckForReplacement(arg(1))) if flags.MakeGuide then WriteCh('PERSONGuide',CheckGuideRepl(arg(1))) if DoGenText then WriteCh('GenealogyText',CheckForNAReplacement(arg(1))) end end return 0 PersOutputLn: PROCEDURE EXPOSE person. AGdir DoGenText flags. PersonPrefix LastNameFl LastNameVal if arg(1) ~= "" then do if arg(2) = 0 then do WriteLn('PERSONFILE',arg(1)) if flags.MakeGuide then WriteLn('PERSONGuide',arg(1)) if DoGenText then WriteLn('GenealogyText',arg(1)) end else do WriteLn('PERSONFILE',CheckForReplacement(arg(1))) if flags.MakeGuide then WriteLn('PERSONGuide',CheckGuideRepl(arg(1))) if DoGenText then WriteLn('GenealogyText',CheckForNAReplacement(arg(1))) end end return 0 GeneaOutputCr: PROCEDURE EXPOSE person. flags. if flags.MakeGuide then WriteLn('GenealogyGuide','') return 0 GeneaOutputCh: PROCEDURE EXPOSE person. AGdir DoGenText flags. PersonPrefix LastNameFl LastNameVal if arg(1) ~= "" then do if arg(2) = 0 then do if substr(arg(1),1,2) ~= ' ' then WriteCh('GenealogyFile',arg(1)) if flags.MakeGuide then WriteCh('GenealogyGuide',arg(1)) end else do WriteCh('GenealogyFile',CheckForReplacement(arg(1))) if flags.MakeGuide then WriteCh('GenealogyGuide',' 'CheckGuideRepl(arg(1))) end end return 0 GeneaOutputLn: PROCEDURE EXPOSE person. AGdir DoGenText flags. PersonPrefix LastNameFl LastNameVal if arg(1) ~= "" then do if arg(2) = 0 then do WriteLn('GenealogyFile',arg(1)) WriteLn('GenealogyGuide',arg(1)) end else do WriteLn('GenealogyFile',CheckForReplacement(arg(1))) WriteLn('GenealogyGuide',CheckGuideRepl(arg(1))) end end return 0 addtoAlbum: PROCEDURE EXPOSE HTMLdir LASTIRN flags. say 'adding to Picture Album: 'HTMLdir'/'arg(1)||arg(2)'A.htm' if ~Exists(HTMLdir'/'arg(1)||arg(2)'A.htm') then return 0 /* get file designation of Picture */ do until Exists(sourcedir) say 'enter dir where pictures are to be found: ' PULL sourcedir end address command 'c:dir 'sourcedir'/#?.#?' /* does Picture file Exist? */ do until Exists(sourcedir'/'sourcepic) say 'enter pictures file name:' PULL sourcepic end say ' ' say ' |»»»»»»»»»»»»»»»»»»»»»»|' say ' | Selected Picture: |' say ' |______________________|' say ' ' address command 'c:list 'sourcedir'/'sourcepic /* check for next available Picture Set number */ h = 1 do while Exists(HTMLdir'/img/'arg(1)||arg(2)'A'h'.'flags.Thmbfmt) | Exists(HTMLdir'/img/'arg(1)||arg(2)'A'h'.jpg') h = h + 1 end say ' ' say ' |»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»|' say ' | Picture Album designations will be: |' say ' |________________________________________|' say ' ' say HTMLdir'/img/'arg(1)||arg(2)'A'h'.jpg' say HTMLdir'/img/'arg(1)||arg(2)'A'h'.'flags.Thmbfmt say ' ' say 'Enter a Picture title: ( or EXIT )' pictitle = ReadLn(stdin) if upper(pictitle) = 'EXIT' then return 0 say ' ' /* do Picture conversions */ OldStackSize = pragma('s',21000) if upper(right(sourcedir'/'sourcepic,3))="JPG" then address command 'copy 'sourcedir'/'sourcepic' to 'HTMLdir'/img/'arg(1)||arg(2)'A'h'.jpg' else address command 'Sys:Tools/GfxCon 'sourcedir'/'sourcepic' TO 'HTMLdir'/img/'arg(1)||arg(2)'A'h'.jpg FORMAT JPEG QUALITY 90' /* Thumbnail */ address command 'Sys:Tools/GfxCon 'HTMLdir'/img/'arg(1)||arg(2)'A'h'.jpg TO 'HTMLdir'/img/'arg(1)||arg(2)'A'h'.'flags.Thmbfmt' FORMAT 'flags.Thmbfmt' BOXFIT 'flags.Thumbnail' 'flags.Thumbnail /* update Album */ say 'adding to Picture Album: 'HTMLdir'/'arg(1)||arg(2)'A.htm' Open('PA',HTMLdir'/'arg(1)||arg(2)'A.htm','r') j = 0 DO While ~EOF('PA') j = j + 1 line.j = ReadLn('PA') end Close('PA') Open('PA',HTMLdir'/'arg(1)||arg(2)'A.htm','w') k = 1 do until ( substr(line.k,1,14) = '</BODY></HTML>' ) | ( k > j ) say 'Writing: 'line.k WriteLn('PA',line.k) k = k + 1 end /* add links for Pictures */ WriteLn('PA',' ') WriteLn('PA','<HR>') WriteLn('PA',' <!-- picture source: 'sourcedir'/'sourcepic' -->') /* say 'Writing: <TABLE BORDER=0><TH>' WriteLn('PA','<TABLE BORDER=0><TH>') */ say 'Writing: <A HREF=img/'arg(1)||arg(2)'A'h'.jpg>' WriteCh('PA','<A HREF=img/'arg(1)||arg(2)'A'h'.jpg>') say 'Writing: <IMG SRC=img/'arg(1)||arg(2)'A'h'.'flags.Thmbfmt' ALIGN=left></A>' WriteLn('PA','<IMG SRC=img/'arg(1)||arg(2)'A'h'.'flags.Thmbfmt' ALIGN=left></A>') say 'Writing: 'pictitle WriteLn('PA',' <I>'pictitle'</I><HR>') /* say 'Writing: </TH></TR><TR><TH>'pictitle'</A></TH></TR></TABLE>' WriteLn('PA','</TH></TR><TR><TH>'pictitle'</A></TH></TR></TABLE>') */ say 'Writing: </BODY></HTML>' WriteLn('PA','</BODY></HTML>') Close('PA') say ' ' say ' Do you wish to edit Picture Album: 'HTMLdir'/'arg(1)||arg(2)'A.htm ?' pull ans if substr(ans,1,1) = 'Y' then do 'GETEDITOR' if (RESULT = "") then say "No editor defined" else address command RESULT' 'HTMLdir'/'arg(1)||arg(2)'A.htm' end return 0 WriteMeta: PROCEDURE EXPOSE flags. if flags.Meta1 ~= " " then do WriteLn(arg(1),flags.Meta1) WriteLn(arg(1),flags.Meta2) WriteLn(arg(1),flags.Meta3) end return 0 TagStrip: PROCEDURE PARSE ARG line line = CStrip(line,"<TT>") line = CStrip(line,"</TT>") line = CStrip(line,"<PRE>") line = CStrip(line,"</PRE>") line = CStrip(line,"<P>") line = CStrip(line,"</P>") return line CStrip: PROCEDURE pt = pos(arg(2),arg(1)) if pt ~= 0 then do if pt = 1 then line = substr(arg(1),pt+length(arg(2))) else line = substr(arg(1),1,pt-1)''substr(arg(1),pt+length(arg(2))) return CStrip(line,arg(2)) end return arg(1) end /*************************************************************** * Check for "<IRN>" and replace with Person Name (with anchor) * ***************************************************************/ CheckForReplacement: PROCEDURE EXPOSE person. flags. PersonPrefix LastNameFl LastNameVal PARSE ARG line "<" last if last = "" then return line RIRN = GetRIRN(last".") if RIRN = 0 then return line"<"last last = CheckforReplacement(last) lastend = GetEnd(last".") GetPerComp(RIRN) if ( flags.living > 0 ) & ( person.GETDEATHDATE.RIRN = "" ) then return line'.Living...'lastend RIRNFILENAME = PersonPrefix || RIRN if flags.bold then return line'<A HREF='RIRNFILENAME'.htm>'person.GETFULLNAME.RIRN'</A>'lastend if LastNameFl = -1 & person.GETLASTNAME.RIRN = LastNameVal then do if person.GETSEX.RIRN = "M" then RIRNFULLNAME = ''flags.htmlb''person.GETFIRSTNAME.RIRN''flags.htmlub'' else RIRNFULLNAME = ''flags.htmli''person.GETFIRSTNAME.RIRN''flags.htmlui'' end else do if person.GETSEX.RIRN = "M" then RIRNFULLNAME = ''flags.htmlb''person.GETFULLNAME.RIRN''flags.htmlub'' else RIRNFULLNAME = ''flags.htmli''person.GETFULLNAME.RIRN''flags.htmlui'' end return line'<A HREF='RIRNFILENAME'.htm>'RIRNFULLNAME'</A>'lastend /****************************************************************** * Check for "<IRN>" and replace with Person Name (without anchor) * ******************************************************************/ CheckForNAReplacement: PROCEDURE EXPOSE person. flags. PersonPrefix LastNameFl LastNameVal PARSE ARG line "<" last if last = "" then return line /* if last = "" then return line */ RIRN = GetRIRN(last".") if RIRN = 0 then return line"<"last last = CheckForNAReplacement(last) lastend = GetEnd(last".") GetPerComp(RIRN) if ( flags.living > 0 ) & ( person.GETDEATHDATE.RIRN = "" ) then return line'.Living...'lastend if ~flags.bold then do if LastNameFl = -1 & person.GETLASTNAME.RIRN = LastNameVal then do if person.GETSEX.RIRN = "M" then RIRNFULLNAME = ''person.GETFIRSTNAME.RIRN'' else RIRNFULLNAME = ''person.GETFIRSTNAME.RIRN' ' return line||RIRNFULLNAME lastend end else do if person.GETSEX.RIRN = "M" then RIRNFULLNAME = ''person.GETFULLNAME.RIRN'' else RIRNFULLNAME = ''person.GETFULLNAME.RIRN' ' return line || RIRNFULLNAME lastend end end else do if LastNameFl = -1 & person.GETLASTNAME.RIRN = LastNameVal then RIRNFULLNAME = person.GETFIRSTNAME.RIRN else RIRNFULLNAME = person.GETFULLNAME.RIRN return line||RIRNFULLNAME lastend end /**************************************************************** * Check for "<IRN>" and replace with Person Name (Guide anchor) * ****************************************************************/ CheckGuideRepl: PROCEDURE EXPOSE AGdir person. flags. PersonPrefix LastNameFl LastNameVal PARSE ARG line "<" last if last = "" then return line RIRN = GetRIRN(last".") if RIRN = 0 then return line"<"last last = CheckGuideRepl(last) lastend = GetEnd(last".") GetPerComp(RIRN) if ( flags.living > 0 ) & ( person.GETDEATHDATE.RIRN = "" ) then return line'.Living...'lastend RIRNFILENAME = PersonPrefix || RIRN if LastNameFl = -1 & person.GETLASTNAME.RIRN = LastNameVal then RIRNFULLNAME = person.GETFIRSTNAME.RIRN else RIRNFULLNAME = person.GETFULLNAME.RIRN if flags.bold then return line'@{" 'RIRNFULLNAME' " LINK 'AGdir'/'<RIRNFILENAME'.guide/Main}'lastend thegender = 'i' if person.GETSEX.RIRN = "M" then thegender = 'b' return line'@{" " LINK 'AGdir'/'RIRNFILENAME'.guide/Main}@{'thegender'}'RIRNFULLNAME'@{u'thegender'}'lastend GetRIRN: PROCEDURE PARSE ARG numb ">" last if last = "" then return 0 if IsNumeric(numb) then return numb return 0 GetEnd: PROCEDURE PARSE ARG line ">" last if last = "" then return substr(line,1,length(line)-1) return substr(last,1,length(last)-1) GetLength: PROCEDURE PARSE UPPER ARG names nonletters = length(compress(names, xrange('A','Z'))) return Length(names) - nonletters * 4 / 10 /* create a full name from first, last, and honorifics parts */ GetFullName: PROCEDURE EXPOSE person. thelastname PARSE ARG firstnames "," hon if hon = "" then do if length(firstnames) > 2 then if substr(firstnames,length(firstnames)-1,length(firstnames)) = "V." then firstnames = substr(firstnames,1,length(firstnames)-2)"v." return firstnames thelastname end return firstnames Space(thelastname)","hon MGetFullName: PROCEDURE EXPOSE person. flags. thelastname thegender PARSE ARG firstnames "," hon if flags.bold then return firstnames Space(thelastname) gchar = "B" if thegender = "f" then gchar = "I" if hon = "" then do if length(firstnames) > 2 then if substr(firstnames,length(firstnames)-1,length(firstnames)) = "V." then firstnames = substr(firstnames,1,length(firstnames)-2)"v." return "<"gchar">"firstnames thelastname"</"gchar">" end return "<"gchar">"firstnames Space(thelastname)","hon"</"gchar">" PGetFullName: PROCEDURE EXPOSE person. flags. thelastname thegender PARSE ARG firstnames "," hon if flags.bold then return firstnames Space(thelastname) schar = "1" uchar = "2" if thegender = "f" then do schar = "3" uchar = "3" end if hon = "" then do if length(firstnames) > 2 then if substr(firstnames,length(firstnames)-1,length(firstnames)) = "V." then firstnames = substr(firstnames,1,length(firstnames)-2)"v." return ""schar"m"firstnames thelastname""uchar"m" end return ""schar"m"firstnames Space(thelastname)","hon""uchar"m" AgeTest: PROCEDURE EXPOSE flags. PARSE ARG DBFile, HTMFile if Exists(DBFile) then do if Exists(HTMFile) then do Parse value StateF(DBFile) with type size blk bits DBday DBmin DBtick com Parse value StateF(HTMFile) with type size blk bits HTMday HTMmin HTMtick com /* Say DBFile DBday DBmin DBtick HTMFile HTMday HTMmin HTMtick */ if ( DBday > HTMday ) | ( DBday = HTMday & DBmin > HTMmin ) then do Delete(HTMFile) Say DBFile 'is newer; removing 'HTMFile return 1 end else do if flags.verbose then Say ' ~ 'HTMFile' ...OK... ' return 0 end return 1 end return 1 end CheckPathName: PROCEDURE PARSE ARG str /* Check if path ends with a ":". If not, append a "/" */ lastchar = right(str,1) if right(str,1) ~= ":" & right(str,1) ~= "/" then return str'/' return str AskExit: PROCEDURE SAY ' ' SAY '===> press RETURN to exit...' SAY ' ' PULL target PauseExit() end PauseExit: PROCEDURE SAY ' ' SAY ' \ /' SAY ' \ / ' SAY ' ' SAY ' ' SAY ' Scion2html.rexx ' SAY ' ' SAY ' ⌐ ' SAY ' ' SAY ' Harold Ipolyi ' SAY ' ' SAY ' ' SAY ' / \ ' SAY ' / \' SAY ' ' EXIT end CheckGfxCon: PROCEDURE DoPictures = EXISTS("Sys:Tools/GfxCon") if ~DoPictures then do SAY ' ' say 'GfxCon not found in Sys:Tools - unable to include inline pictures in HTMLs' end return DoPictures Validtarget: PROCEDURE PARSE UPPER ARG str tval = substr(str,1,1) if verify(' BCDEFGIJKLMORSTUVWXYZ.,<>-=\|+_)(*&^%$@!~[]{}`',tval,m) > 1 then return 0 return 1 AddPtoSN: PROCEDURE EXPOSE person. PARSE ARG irn, sn WriteLn('SN'sn,person.GETFIRSTNAME.irn) WriteLn('SN'sn,irn) return 0 AddNeetoSN: PROCEDURE EXPOSE person. PARSE ARG irn, sn WriteLn('SN'sn,person.GETFIRSTNAME.irn' -nΘe 'person.GETLASTNAME.irn) WriteLn('SN'sn,irn) return 0 GetPerComp: PROCEDURE EXPOSE person. flags. PARSE ARG irn if irn = '' then return "" if ~person.gotten.irn then do person.gotten.irn = 1 /* name */ 'GETFIRSTNAME' irn person.GETFIRSTNAME.irn = RESULT if person.GETFIRSTNAME.irn = '' then person.GETFIRSTNAME.irn = "_._" 'GETLASTNAME' irn person.GETLASTNAME.irn = RESULT if person.GETLASTNAME.irn = '' then person.GETLASTNAME.irn = "_._" thelastname = GetLastName(person.GETLASTNAME.irn) /* requires `thelastname' above */ person.GETFULLNAME.irn = GetFullName(person.GETFIRSTNAME.irn) /* gender */ 'GETSEX' irn person.GETSEX.irn = RESULT thegender = GETSEX.irn /* special names; requires `thegender' above */ person.MGETFULLNAME.irn = MGetFullName(person.GETFIRSTNAME.irn) person.PGETFULLNAME.irn = PGetFullName(person.GETFIRSTNAME.irn) /* dates */ 'GETBIRTHDATE' irn person.GETBIRTHDATE.irn = RESULT 'GETDEATHDATE' irn person.GETDEATHDATE.irn = RESULT if ( RESULT = "" ) & ( flags.VERSION > 5.07 ) then do /* Scion v5.08 (due for release early in the New Year) will have a new arexx command - "GETISDEAD irn". If - (1) the person (irn) has a death date, or (2) the person has a burial date, or (3) the person's death date is "dead - no date", then the function will return 1 (TRUE), else 0 (FALSE) */ 'GETISDEAD' irn if RESULT then person.GETDEATHDATE.irn = "?" end /* say 'person.GETDEATHDATE.irn 'person.GETDEATHDATE.irn */ /* places */ 'GETBIRTHPLACE' irn person.GETBIRTHPLACE.irn = RESULT 'GETDEATHPLACE' irn person.GETDEATHPLACE.irn = RESULT end return 0 askliving: PROCEDURE answer = "" say ' ' call WriteCh(stdout,' Exclude information about living persons? [y] ') PULL answer if substr(answer,1,1) = 'N' then return 0 if substr(answer,1,1) = 'Q' then AskExit() return 2 askdepth: PROCEDURE answer = "0" return 0 /* under construction say ' ' say ' The depth of the ancestor and descendant charts may be set to:' say ' ' say ' ' say ' 0 - unlimited ( show all )' say ' ' say ' 2,3,4,5 - number of generations ( does not apply to ultimates )' say ' ( ultimates refers to those persons who: )' say ' ( have no ancestors or have no descendants )' say ' ' say ' ' call WriteCh(stdout,' Depth? ['answer'] ') PULL answer say ' ' say ' Selected Depth = 'answer if answer > 1 and answer < 6 then return answer say ' ' say ' All generations will be shown' return 0 under construction */ /* Capitalize last name; also handle special cases! */ /* End users may wish to customize this code */ GetLastName: PROCEDURE EXPOSE flags. /* to use last names as is in data base, uncomment the following 2 lines: */ /* PARSE ARG str */ /* return str */ /* otherwise, the following rules will be applied */ PARSE upper ARG str /* capitalize ( for html, the practice of all upper case surnames is unsightly */ spart = translate(substr(str,2,length(str)),xrange('a','z'),xrange('A','Z')) spart = translate(substr(str,2,length(str)),xrange('α','²'),xrange('└','▌')) /* special handling for specific DataBases "DBNAME" */ /* my personal DataBase "IPOLYI" */ if flags.DBNAME = "IPOLYI" then do if str = "BAUER-GAUSS" then return "Bauer-Gauss" if ( str = "DE IPOLYI" ) | ( str = "DEIPOLYI" ) then return "deIpolyi" if str = "MC GRADY" then return "McGrady" if str = "MCFEE" then return "McFee" if str = "KIS RED" then return "KisRed" if str = "ROTH-HACKENSCHMIDT" then return "Roth-Hackenschmidt" if str = "SCHⁿCH-GLICKHFELDEN" then return "Schⁿch-Glickhfelden" end /* my fictional DataBase "TARZAN" */ if flags.DBNAME = "TARZAN" then do if str = "VONRUDERFRUD" then return "Von Ruderfrud" if str = "VONHARBEN" then return "Von Harben" end /* my test DataBase "TEST" */ if flags.DBNAME = "TEST" then do if str = "PRETEST" then return "PreTest" end return substr(str,1,1)Space(spart)