home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************************
- * *
- * $VER: Unrelated 1.01 (18 Jul 1995)
- * *
- * Written by Robbie Akins *
- * *
- * Adapted from ARexx scripts by Freddy Ariƫs - Many thanks Freddy :-) *
- * *
- * ARexx script to find "unrelated" people in the database. *
- * That is, it will locate all those people who have no parents and who *
- * have no marriages recorded (and hence cannot have any recorded children) *
- * *
- * This script uses (by default) the rexxreqtools.library (which requires *
- * a version of reqtools larger than 2.0 and rexxsyslib.library) *
- * If you do not have these, change the line 'usereq = 1' to 'usereq = 0' *
- * *
- * *
- ****************************************************************************/
-
- options results
- arg outname outval
-
- versionstr = "1.01"
- usereq = 1; /* change this to 0 if you don't want to use reqtools */
- outp = 1; output = stdout
- NL = '0A'x
-
- signal on IOERR
-
- /* parse command line options, to enable calling the script automatically,
- * eg. from a function key
- */
-
- do while outname = '?'
- writeln(stdout, "OUTFILE/A,QUIET/S,NOREQ/S ")
- pull outname outval
- end
-
- if outname ~= "" then do
- if outname = "QUIET" | outname = "NOREQ" then do
- outval = outname; outname = ""
- end
- end
-
- if outval = "QUIET" then do
- outp = 0; usereq = 0
- end
- else if outval = "NOREQ" then usereq = 0
-
- if usereq & ~show('l','rexxreqtools.library') then do
- if exists('libs:rexxreqtools.library') then
- call addlib('rexxreqtools.library',0,-30,0)
- else do
- usereq = 0; outp = 1
- Tell("Unable to open rexxreqtools.library - using text output")
- end
- end
-
- /* These first few lines were stolen from Peter Billings - thanks Peter ;-) */
- if ~show('P','SCIONGEN') then do
- TermError('I am sorry to say that the SCION Genealogist' || NL ||,
- 'database is not available. Please start the' || NL ||,
- 'SCION program BEFORE using this script!')
- end
-
- myport = "SCIONGEN"
- address value myport
- GETDBNAME
- dbname = upper(RESULT)
-
- CurrIRN = 1
-
- if outp & ~usereq then do
- Tell("Scion Unrelated Person Finder v"||versionstr||" by Robbie Akins")
- Tell("Current Scion database: "||dbname)
- end
-
- GETTOTALIRN
- TotalIRN = RESULT
- if TotalIRN = 0 then EXIT /* No database to work on! */
-
- /* It's a good habit to add an ".UNREL" extension to "unrelated" files */
- dblen = length(dbname)
- if dblen>6 & right(dbname, 6)=".Scion" then dbname=left(dbname, dblen - 6)
-
- if outname = "" then do
- if outp then do
- if usereq then do
- odev = rtezrequest('Current Scion database: '||dbname||,
- NL||'Where should the output be sent to?'||,
- NL,' _File |_Printer|_Screen|_Nowhere','Unrelated People v'||versionstr||' by Robbie Akins','rt_pubscrname = SCIONGEN')
-
- select
- when odev = 1 then do
- /* We need a file requester for further data */
- outname = rtfilerequest(,dbname||'.UNREL','Output filename',,'rtfi_buffer = true rt_pubscrname = SCIONGEN rtfi_initialpath = RAM:',)
- if outname = '' then
- outname = dbname||'.UNREL'
- end
- when odev = 2 then
- outname = 'PRT:'
- when odev = 3 then
- outname = 'STDOUT'
- otherwise
- EXIT
- /* You selected 'Nowhere' */
- end
- end
- else do
- Tell("Enter output file (filename with complete path, or PRT: for printer,")
- TellNN("or STDOUT for screen): ")
- pull outname
- Tell("Destination: "||outname)
- TellNN("Continue (y/n)? ")
- pull conf
- /* Note that left works on empty strings ("") too! */
- if left(conf,1) ~= "Y" then do
- Tell("Goodbye...")
- EXIT
- end
- Tell("")
- end
- end
- else
- outname = "RAM:"dbname".UNREL"
- /* If we're not allowed to use stdout, default to this filename */
- end
-
- if outname ~= "STDOUT" then do
- output = 'OUTPUT'
- if ~open(output, outname, "w") then
- TermError("ERROR: Unable to open output file.")
- end
-
- writeln(output, "List of unrelated people:")
- do while CurrIRN <= TotalIRN
- EXISTPERSON CurrIRN
- if RESULT = 'YES' then do
- GETNUMMARRY CurrIRN
- if RESULT = 0 then do
- /* No marriages. Possible candidate */
- GETPARENTS CurrIRN
- if RESULT = '' then do
- /* This person is unrelated */
- GETLASTNAME CurrIRN
- last = result
- GETFIRSTNAME CurrIRN
- first = result
- str = "IRN" CurrIRN": "Last", "First
- writeln(output, str)
- end
- end
- end
- CurrIRN = CurrIRN + 1 /* Do next possible person */
- end
-
- EXIT
-
- Tell: PROCEDURE EXPOSE outp
- parse arg str
- if outp then writeln(stdout, str)
- return 0
-
- TellNN: PROCEDURE EXPOSE outp
- parse arg str
- if outp then writech(stdout, str)
- return 0
-
- TermError: PROCEDURE EXPOSE outp output usereq
- parse arg str
- /* If you turned off stdout, no error messages will be shown! */
- if usereq then
- rtezrequest(str,'E_xit','Finder Message:','rt_pubscrname = SCIONGEN')
- else do
- Tell(str || '0A'x)
- end
- close(output)
- EXIT
-
- IOERR:
- bline = SIGL
- say "I/O error #"||RC||" detected in line "||bline||":"
- say sourceline(bline)
- EXIT
-