--- /dev/null
+http://listserv.nodak.edu/cgi-bin/wa.exe?A2=ind0211b&L=lines-l&T=0&F=&S=&P=356
+Date: Tue, 12 Nov 2002 21:36:50 -0800
+Reply-To: LifeLines Genealogical System <[log in to unmask]>
+Sender: LifeLines Genealogical System <[log in to unmask]>
+From: Dave Close <[log in to unmask]>
+Subject: Divorce function
+Content-Type: text/plain; charset=us-ascii
+
+The following patch against LifeLines 3.0.21 attempts to add a new
+"divorce" function to the interpreter language. It has the same syntax
+as the current "marriage" function. It works for me, but the
+experience of others might be useful.
+
+[Updated to match version 3.0.62 by W. Trevor King on 16 June 2011]
+
+--- a/src/gedlib/messages.c Tue Nov 12 21:29:51 2002
++++ b/src/gedlib/messages.c Tue Nov 12 20:04:32 2002
+@@ -379,6 +379,7 @@
+ ZST qSdspa_chbr = N_("cb. ");
+ /* &&end display abbreviations, begin long forms */
+ ZST qSdspl_mar = N_("married: ");
++ZST qSdspl_div = N_("divorced: ");
+ ZST qSdspl_bir = N_("born: ");
+ ZST qSdspl_chr = N_("bapt: ");
+ ZST qSdspl_dea = N_("died: ");
+
+--- a/src/gedlib/gstrings.c Tue Nov 12 21:29:51 2002
++++ b/src/gedlib/gstrings.c Tue Nov 12 20:03:19 2002
+@@ -122,6 +122,7 @@
+ /* TODO: Shouldn't we len -= strlen(p) first ? Perry, 2007-09-29 */
+ p += strlen(p);
+ if (fam) evt = fam_to_event(fam, "MARR", _(qSdspa_mar), len, rfmt);
++ if (!evt) evt = fam_to_event(fam, "DIVO", _(qSdspa_mar), len, rfmt);
+ if (!evt) evt = indi_to_event(indi, "BIRT", _(qSdspa_bir), len, rfmt);
+ if (!evt) evt = indi_to_event(indi, "CHR", _(qSdspa_chr), len, rfmt);
+ if (!evt) evt = indi_to_event(indi, "DEAT", _(qSdspa_dea), len, rfmt);
+
+--- a/src/interp/builtin.c Tue Nov 12 21:29:43 2002
++++ b/src/interp/builtin.c Tue Nov 12 19:58:51 2002
+@@ -777,6 +777,24 @@
+ }
+ return create_pvalue_from_indi(fam_to_wife_node(fam));
+ }
++/*=================================+
++ * llrpt_divo -- Find divorce of family
++ * usage: divorce(FAM) -> EVENT
++ *================================*/
++PVALUE
++llrpt_divo (PNODE node, SYMTAB stab, BOOLEAN *eflg)
++{
++ PNODE arg = (PNODE) iargs(node);
++ NODE fam = eval_fam(arg, stab, eflg, NULL);
++ NODE event = NULL;
++ if (*eflg) {
++ prog_var_error(node, stab, arg, NULL, nonfam1, "divorce");
++ return NULL;
++ }
++ if (fam)
++ event = DIVO(fam);
++ return create_pvalue_from_node(event);
++}
+ /*==========================================+
+ * llrpt_firstchild -- Find first child of family
+ * usage: firstchild(FAM) -> INDI
+
+--- a/src/interp/functab.c Tue Nov 12 21:29:43 2002
++++ b/src/interp/functab.c Tue Nov 12 19:56:09 2002
+@@ -100,6 +100,7 @@
+ {"detachnode", 1, 1, llrpt_detachnode},
+ {"difference", 2, 2, llrpt_difference},
+ {"div", 2, 2, llrpt_div},
++ {"divorce", 1, 1, llrpt_divo},
+ {"dms2deg", 4, 4, llrpt_dms2deg},
+ {"dup", 1, 1, llrpt_dup},
+ {"empty", 1, 1, llrpt_empty},
+
+--- a/src/interp/interpi.h Tue Nov 12 21:29:44 2002
++++ b/src/interp/interpi.h Tue Nov 12 20:00:27 2002
+@@ -294,6 +294,7 @@
+ PVALUE llrpt_detachnode(PNODE, SYMTAB, BOOLEAN *);
+ PVALUE llrpt_difference(PNODE, SYMTAB, BOOLEAN *);
+ PVALUE llrpt_div(PNODE, SYMTAB, BOOLEAN *);
++PVALUE llrpt_divo(PNODE, SYMTAB, BOOLEAN *);
+ PVALUE llrpt_dms2deg(PNODE, SYMTAB, BOOLEAN *);
+ PVALUE llrpt_dup(PNODE, SYMTAB, BOOLEAN *);
+ PVALUE llrpt_empty(PNODE, SYMTAB, BOOLEAN *);
+
+--- a/src/hdrs/gedcom_macros.h Tue Nov 12 21:29:15 2002
++++ b/src/hdrs/gedcom_macros.h Tue Nov 12 20:17:14 2002
+@@ -47,6 +47,7 @@
+ #define HUSB(fam) find_tag(nchild(fam),"HUSB")
+ #define WIFE(fam) find_tag(nchild(fam),"WIFE")
+ #define MARR(fam) find_tag(nchild(fam),"MARR")
++#define DIVO(fam) find_tag(nchild(fam),"DIVO")
+ #define CHIL(fam) find_tag(nchild(fam),"CHIL")
+
+ #define DATE(evnt) find_tag(nchild(evnt),"DATE")