mirror of
https://github.com/kennethreitz/context.git
synced 2026-06-05 14:50:19 +00:00
84 lines
2.0 KiB
LLVM
84 lines
2.0 KiB
LLVM
/*
|
|
* @progname sources.ll
|
|
* @version 1.0
|
|
* @author
|
|
* @category
|
|
* @output Text
|
|
* @description
|
|
*
|
|
* Print the sources associated with an individual.
|
|
*/
|
|
global(refn) /* root node of references record */
|
|
global(reftab) /* table of reference keys reported on */
|
|
global(ref1)
|
|
|
|
proc main ()
|
|
{
|
|
getindi(refn, "Enter name of record that hold the references")
|
|
if (eq(refn, 0)) {
|
|
print("The references could not be found; program not run\n")
|
|
} else {
|
|
set(refn, inode(refn))
|
|
call foundrefs()
|
|
}
|
|
}
|
|
|
|
proc foundrefs ()
|
|
{
|
|
table(refs)
|
|
set(ref1, 0)
|
|
getindi(indi, "Enter a person to show sources for.")
|
|
while (indi) {
|
|
call showperson(indi)
|
|
"\n"
|
|
getindi(indi, "Enter another person to show sources for.")
|
|
}
|
|
print("Program over!\n")
|
|
}
|
|
|
|
proc showperson (indi)
|
|
{
|
|
call showvitals(indi)
|
|
call showsources(indi)
|
|
}
|
|
|
|
proc showvitals (i)
|
|
{
|
|
name(i) ".\n"
|
|
set(e,birth(i))
|
|
if(and(e,long(e))) { "Born " long(e) ".\n" }
|
|
set(e,death(i))
|
|
if(and(e,long(e))) { "Died " long(e) ".\n" }
|
|
}
|
|
|
|
proc showsources (i) /* finds all SOUR lines in a record */
|
|
{
|
|
table(reftab)
|
|
set(ref1, 0)
|
|
traverse (inode(i), s, n) {
|
|
if (eq(0, strcmp("SOUR", tag(s)))) {
|
|
call showsource(value(s))
|
|
}
|
|
}
|
|
}
|
|
|
|
proc showsource (v) /* process each SOUR line in a record */
|
|
{
|
|
set(ref, 0)
|
|
fornodes (refn, s) { /* look at each REFN line in references */
|
|
if (eq(0, strcmp(v, value(s)))) { /* found one with matching code! */
|
|
set(ref, s) /* so set ref to this REFN node */
|
|
}
|
|
}
|
|
if (ref) { /* non-null if matching code were found */
|
|
if (not(lookup(reftab, v))) { /* and we hadn't seen it yet */
|
|
if (not(ref1)) { /* Print "References:" before first one */
|
|
"References:\n"
|
|
set(ref1, 1)
|
|
}
|
|
"\t" value(child(ref)) "\n" /* This could be much better! */
|
|
insert(reftab, v, 1) /* So we won't show it again! */
|
|
}
|
|
}
|
|
}
|