Files
2019-09-28 10:14:18 -04:00

122 lines
2.6 KiB
Plaintext

/*
* @progname ldsgedcom.li
* @version 1.2 of 2004-07-03
* @author Vincent Broman (vpbroman@mstar2.net)
* @category
* @output gedcom event and string function values
* @description
*
* Utility functions supporting LDS aspects of GeDCom data
* ldstemple( event) -> string,
* ldsspousesealing( fam) -> event,
* ldsbaptism( indi) -> event,
* ldsendowment( indi) -> event,
* ldschildsealing( indi) -> event
*
* I put equivalent functions in my C source, but this can be used everywhere.
*/
func ldstemple( ev) {
fornodes( ev, childnode) {
if( eqstr( tag( childnode), "TEMP")) {
return( save( value( childnode)))
}
}
return( 0)
}
func ldsspousesealing( fam) {
fornodes( root( fam), childnode) {
if( eqstr( tag( childnode), "SLGS")) {
return( childnode)
}
}
return( 0)
}
func ldsbaptism( indi) {
fornodes( root( indi), childnode) {
if( eqstr( tag( childnode), "BAPL")) {
return( childnode)
}
}
return( 0)
}
func ldsendowment( indi) {
fornodes( root( indi), childnode) {
if( eqstr( tag( childnode), "ENDL")) {
return( childnode)
}
}
return( 0)
}
/*
* ldschildsealing(i) returns a SLGC sealing of child EVENT for the INDI indi
* or if no such event is found zero is returned.
* if the person is a child sealed in more than one family,
* only the first find is returned.
* This searches first the INDI-SLGC or INDI-FAMC-SLGC syntax, then the old FAM-CHIL-SLGC one.
*/
func ldschildsealing( indi) {
fornodes( root( indi), childnode) {
if( eqstr( tag( childnode), "FAMC")) {
fornodes( childnode, sealnode) {
if( eqstr( tag( sealnode), "SLGC")) {
return( sealnode)
}
}
} else if( eqstr( tag( childnode), "SLGC")) {
return( childnode)
}
}
set( k, save( concat( "@", key( indi), "@")))
if( p, parents( indi)) {
/* children( p, ch, i) */
fornodes( root( p), childnode) {
if( and( eqstr( tag( childnode), "CHIL"),
eqstr( value( childnode), k))) {
fornodes( childnode, sealnode) {
if( eqstr( tag( sealnode), "SLGC")) {
return( sealnode)
}
}
}
}
}
return( 0)
}
/* for testing
proc printordinance( ord) {
if( ord) {
tag( ord) ": "
if( val, value( ord)) {
val
} else {
set( ordd, save( date( ord)))
ordd
if( ordt, ldstemple( ord)) {
if( ordd) { ", " }
ordt
}
}
nl()
}
}
proc main() {
"All individual ordinances" nl() nl()
forindi( i, c) {
"#" d( c) ": " name( i)
if( b, birth( i)) { " b. " long( b) }
nl()
call printordinance( ldsbaptism( i))
call printordinance( ldsendowment( i))
call printordinance( ldschildsealing( i))
}
}
*/