TomWetmore / DeadEnds

Genealogical Software
2 stars 2 forks source link

DeadEnds

DeadEnds is a C-based genealogical software project.

Introduction

DeadEnds is a collection of static libraries and command line programs that support genealogical operations. It is an eventual goal to provide a genealogical program with a graphical user interface that uses the DeadEnds library.

DeadEnds is based on the UNIX-based LifeLines program, which I wrote in the early 1990s, before there were genealogical programs available for UNIX. Key features of LifeLines include:

As a followon system from LifeLines, DeadEnds has the following goals:

Repository Structure

The home directory of the DeadEnds repository is named, unsurprisingly, DeadEnds. It contains a number of files and sub-directories. The following are most of the important subdirectories.

SubDirectory Description
GedcomLib The DeadEnds Gedcom library. See the next table for its contents.
MenuLib MenuLib is a library that supports simple user interfaces that use stdin and stdout to ask questions and present menus.
RunScript Command line program that reads a Gedcom file into a Database, reads a script file (program file) and runs the program using the data in the Database.
TestProgram Command line program used during development as the primary test tool.
MenuTest Command line program used during development to test the menu library.
PatchSex One off command line program that reads a Gedcom file and rewrites it after adding or modifying 1 SEX lines in 0 INDI records that don't adhere to standards but can be easily put into standard format.
Gedfiles Collection of Gedcom files used to test features during development.
Scripts Collection of DeadEnds scripts (programs) used to test the script subsystem.
Docs Collection of documentation files that are woefully out of date.

The Gedcom library is currently implemented as eight *.a files, one built in each subdirectory. I will eventually build a single *.a file. Here are the eight subdirectories.

Subdirectory Description
Utils Utility functions. Standard stuff.
DataTypes Common data types, e.g. hash tables, lists, sets. Nothing specific to genealogy. Abstract data types useful in any context.
Database In-RAM genealogical database. A database consists of record indexes and a name index. A record index maps record keys to Gedcom record roots. A name index maps name keys to lists of record keys.
Parser The lexer and parser for the report programming language. The lexer is hand-crafted; the parser is yacc generated.
Interp The interpreter for the report programming language. The parser builds abstract syntax trees whose nodes are PNodes (program nodes). The interpreter runs programs by interpreting PNode trees.
Gedcom Gedcom library. Functions that deal with Gedcom and genealogical records constructed from trees of Gedcom nodes.
Validate Functions that validate records in a DeadEnds Database.
Operations Functions that operate on records in a DeadEnds Database.