mirror of
https://github.com/kennethreitz/context.git
synced 2026-06-05 14:50:19 +00:00
75 lines
2.6 KiB
LLVM
75 lines
2.6 KiB
LLVM
/*
|
|
* @progname relink.ll
|
|
* @version 1995-06
|
|
* @author J.F. Chandler
|
|
* @category
|
|
* @output GEDCOM
|
|
* @description
|
|
|
|
LifeLines program to reconstruct pointers from persons to families when
|
|
these pointers are missing, but can be deduced from the corresponding
|
|
pointers from families to persons. Do this only for persons with no
|
|
pointers to families at all. Similarly, reconstruct pointers from
|
|
families to persons where necessary.
|
|
|
|
The output is a GEDCOM file which includes only the individual and family
|
|
records from the database. Other record types must be recovered separately
|
|
because there is no iterator in the language for those record types.
|
|
|
|
relink - J.F. Chandler - 1995 Jun
|
|
*/
|
|
|
|
proc main() {
|
|
"0 HEAD\n1 SOUR RELINK\n1 DEST ANY\n"
|
|
forindi(i,n) {
|
|
traverse(inode(i),node,level) {
|
|
d(level) " "
|
|
if(eq(level,0)) { "@" key(i) "@ " }
|
|
tag(node)
|
|
if(v,value(node)) { " " v }
|
|
nl()
|
|
}
|
|
if(not(or(nfamilies(i),parents(i)))) {
|
|
set(indk,save(key(i)))
|
|
forfam(f,k) {
|
|
if(or(eq(0,strcmp(indk,key(wife(f)))),
|
|
eq(0,strcmp(indk,key(husband(f)))))) {
|
|
"1 FAMS @" key(f) "@\n"
|
|
} elsif(nchildren(f)) {
|
|
children(f,child,l) {
|
|
if(eq(0,strcmp(indk,key(child)))) {
|
|
"1 FAMC @" key(f) "@\n"
|
|
break()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
forfam(f,k) {
|
|
traverse(fnode(f),node,level) {
|
|
d(level) " "
|
|
if(eq(level,0)) { "@" key(f) "@ " }
|
|
tag(node)
|
|
if(v,value(node)) { " " v }
|
|
nl()
|
|
}
|
|
if(not(or(husband(f),wife(f),nchildren(f)))) {
|
|
set(famk,save(key(f)))
|
|
forindi(i,n) {
|
|
families(i,fam,spo,l) {
|
|
if(eq(0,strcmp(famk,key(fam)))) {
|
|
if(male(i)) {"1 HUSB @" key(i) "@\n"}
|
|
else {"1 WIFE @" key(i) "@\n"}
|
|
break()
|
|
}
|
|
}
|
|
if(eq(0,strcmp(famk,key(parents(i))))) {
|
|
"1 CHIL @" key(i) "@\n"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
"0 TRLR\n"
|
|
}
|