/usr/share/lifelines/sgsgen.ll is in lifelines-reports 3.0.61-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 | /*
* @progname sgsgen.ll
* @version 1
* @author Jim Eggert (eggertj@ll.mit.edu)
* @category
* @output Text
* @description
A LifeLines report program to aid in the generation of
soc.genealogy.surnames (sgs) submissions.
Given a person, this generates a sgs-like submission for that person and
his/her ancestors. The output will likely need considerable hand editing,
but that is how it is. If you need to know what sgs is, I have enclosed
a description at the end of this file.
Here's what you will need to do by hand (you can consider this a list
of desired features for future versions of this report program):
BEFORE YOU RUN THE PROGRAM:
Change the routines write_sgs_entry() and write_sgs_body() to
customize your address and standard message.
AFTER YOU RUN THE PROGRAM:
Eliminate or fix empty or useless surname lines.
Use sgs-standard abbreviations for placenames.
Get FAMILY ABBREV as per instructions at end of this file.
Combine duplicate surname lines where appropriate.
Check check check. Note I've put a checklist at the head of the
report. Until you edit the report by hand, it cannot be used for
autosubmission via the telnet command as below.
Send the final product to the sgs maintainer. To autosubmit,
telnet your.news.host 119 < checked.sgs.report
Version 1, 13 January 1997, by Jim Eggert, eggertj@ll.mit.edu
*/
global(year_min)
global(year_max)
global(submitter_tag)
global(location)
global(last_location)
global(location_list)
global(location_table)
global(see_surname_table)
global(sgs_entry_count)
proc main() {
list(ilist)
table(see_surname_table)
getindi(person)
set(sgs_entry_count,0)
enqueue(ilist,person)
dayformat(1) monthformat(4) dateformat(5)
"QUIT\n"
"------------ edit checklist\n"
"change placenames to rsl-type places in the subject lines\n"
"ensure countries exist in migration components in the subject lines\n"
"eliminate / in places in the subject lines\n"
"fix special characters as needed\n"
"look for repeated submissions\n"
"delete sensitive info if desired\n"
"delete this checklist, including the top QUIT command\n"
"------------ end of edit checklist\n"
while (person,dequeue(ilist)) {
table(location_table)
list(location_list)
set(year_min,9999) set(year_max,0)
call locations_and_years(person)
set(final_key,save(key(person)))
set(final_surname,save(surname(person)))
if (m,mother(person)) { enqueue(ilist,m) }
while (person,father(person)) {
if (m,mother(person)) { enqueue(ilist,m) }
call locations_and_years(person)
set(this_surname,surname(person))
if (strcmp(this_surname,final_surname)) {
set(see_name,0)
if (other_surname,lookup(see_surname_table,this_surname)) {
if (strcmp(final_surname,other_surname)) {
set(see_name,1)
}
}
else {
set(see_name,1)
set(other_surname,final_surname)
}
if (see_name) {
insert(see_surname_table,
save(this_surname),save(other_surname))
}
}
}
call write_sgs_entry(final_key)
}
if (gt(sgs_entry_count,100)) {
print("Warning: Number of lines produced (")
print(d(sgs_entry_count))
print(")\nexceeds recommended submission limit (100)\n")
}
"QUIT\n"
}
/* write_sgs_entry writes one submission to soc.genealogy.surnames*/
proc write_sgs_entry(key_entry) {
if (key_entry) {
set(surname_entry,save(surname(indi(key_entry))))
if (strlen(surname_entry)) {
if (strcmp(trim(surname_entry,1),"_")) {
if (father(indi(key_entry))) {
incr(sgs_entry_count)
set(not_first,0)
"POST\n"
/*---*/ "From: your@email.address\n"
"Newsgroups: soc.genealogy.surnames\n"
"Subject: " upper(surname_entry) "; "
while (loc,dequeue(location_list)) {
if (not_first) { ">" } else { set(not_first,1) }
loc
}
"; " d(year_min) "-" d(year_max) "\n"
"Message-ID: <sgs" d(sgs_entry_count)
/*---*/ "@your.host.name>\n"
"\n"
"Organization: none\n"
call write_sgs_body(key_entry)
".\n"
}
}
}
}
}
/* write_sgs_body writes the body of a message */
proc write_sgs_body(key_entry) {
/*---*/
"I am offering information on the following paternal ancestral line,\n"
"and am soliciting the sharing of genealogical data with any interested\n"
"party. The numbers preceeding the person's name are the generation\n"
"number, counting from the most recent person. Further information\n"
"can be found in my web pages at\n"
" <http://your.web.page/>\n"
"Please direct any communications to your@email.address\n"
/*---*/
set(person, indi(key_entry))
set(number,1)
while (person) {
call ahnenreport(person,number)
incr(number)
set(person,father(person))
}
}
proc ahnenreport(person,number) {
"\n" d(number) ". " fullname(person,0,1,80) "\n"
if (e, birth(person)) { " born: " long(e) "\n" }
if (e, baptism(person)) { "baptized: " long(e) "\n" }
set(nfam,nfamilies(person))
families(person, fam, spouse, fnum) {
set(e, marriage(fam))
if (or(e,spouse)) {
if (gt(nfam,1)) {
"married" d(fnum) ": "
}
else { " married: " }
}
if (e) { long(e) "\n" }
if (spouse) { " to " fullname(spouse,0,1,80) "\n" }
}
if (e, death(person)) { " died: " long(e) "\n" }
if (e, burial(person)) { " buried: " long(e) "\n" }
/* fornotes(inode(person), note) {
note "\n"
}
fornodes(inode(person),node) {
if (not(strcmp(tag(node),"REFN"))) {
"SOURCE: " value(node) "\n"
}
}
*/
}
/* locations_and_years figures out unique locations and min/max years
for a person with respect to other persons already figured.
Note that the events are processed in reverse chronological order,
because the ancestry is traced bottom up. Oh well...
*/
proc locations_and_years(person) {
list(marriage_list)
call one_location_and_year(burial(person))
call one_location_and_year(death(person))
families(person,family,spouse,fnum) {
push(marriage_list,marriage(family))
}
while (event,pop(marriage_list)) { call one_location_and_year(event) }
call one_location_and_year(baptism(person))
call one_location_and_year(birth(person))
}
/* one_location_and_year appends the event location to the global
location list if it is new, and figures the event year into the
global min and max values.
*/
proc one_location_and_year(event) {
if (event) {
set(loc,place(event))
if (strlen(loc)) {
if (not(lookup(location_table,loc))) {
requeue(location_list,save(loc))
insert(location_table,save(loc),1)
}
}
if (yr,atoi(year(event))) {
if (lt(yr,year_min)) { set(year_min,yr) }
if (gt(yr,year_max)) { set(year_max,yr) }
}
}
}
/*
soc.genealogy.surnames
This FAQ is presently in draft form. It may change without notice. Last
modification: 25 Aug 1995.
Other surname-related FAQs available here:
Commonly Used Abbreviations
Commonly Used German Abbreviations
Examples of Queries: Good and Bad
WWW Surname Archive
Welcome to soc.genealogy.surnames. The intent of this newsgroup is to
help genealogists researching related families to contact each
other. All surname queries are welcome here.
A surname query is in many ways like a classified ad in a
newspaper. You want to attract people who might be interested in
sharing information about your family to read and respond to your
post. To help readers in finding articles of interest, writers are
requested to follow some simple guidelines in the subject lines of
their articles.
Articles in soc.genealogy.surnames fall into a few basic categories:
1.general surname queries
2.tiny tafels
3.address changes
4.follow-up articles
5.Roots Surname List (RSL) articles
6.moderators' announcements
1. General surname queries
(Style suggestions can be found in a companion FAQ, Surname Queries:
Good and Bad. This document discusses only what is absolutely
necessary for a post to soc.genealogy.surnames.)
General surname queries can be written in plain language, freely
formatted. The body of the article can include any information about a
family that you wish. We recommend including given names, spouses,
children, birth, death, and marriage dates and places, if you know
them. This will make your article more useful to people who might want
to contact you, as well as making it valuable to people who may find
your article in searching the surname archives later. Indicating what
additional information you are seeking is a good idea. Also include
how to contact you: e-mail address, snail-mail address, and phone
number, if you like.
Each surname query should have a subject line that gives one or more
surnames (in all capital letters), at least one place (using an
abbreviation from the RSL list of abbreviations), and an indication of
the time frame of interest. Examples:
Subject: MILLS; NY,USA; 1800-1915
Subject: MILLS Samuel D.; Williamsburg,Kings Co,NY,USA; 1796-1863
Subject: ZAHM/PICARD/STEIS; LOT,FRA; 1680-1840
Subject: ZAHM / PICARD / STEIS; LOT,FRA; 1680-1840
Subject: ZAHM; LOT,FRA>IN,USA>IL,USA>KS,USA; 1650-
Subject: ZAHM; LOT,FRA > IN,USA > KS,USA; 1650-
Subject: CLOVER John; Lincoln,LIN,ENG>IL,USA; -1860
Subject: LEGGETT; anywhere; anytime
The "anywhere anytime" indication should only be used by genealogists
who are making a comprehensive one-name study of everyone in the world
who bore that name in all of recorded history. If you are just
starting out in researching your family, do not use this form; please
read the first paragraph of this section on surname queries again, and
use one of the other examples. If you are making a comprehensive
world-wide collection, please tell us about the extent of your
database as a way to encourage people to share their research with
you.
If you find you want to include queries about more names than will fit
in the subject line, you may wish to post several queries.
Some of the abbreviations may seem unfamiliar at first. The advantage
of using standard abbreviations for place names is that it makes
searching the surname archives easier and more reliable. As an
example, consider searching the archives for Coles families in New
York. With standard abbreviations, you can look for subjects that
contain both "COLES" and "NY,USA" and be sure that you are finding all
the relevant archived queries. Without standardization, you'd have to
search for "NY" and "New York", and might miss articles that said
"Albany" or "Buffalo" but left out the state. Abbreviations also make
subject lines shorter, for writers whose software limits subject
length.
The place abbreviations are the same as used for the Roots Surname
List (RSL). They include United States and Canadian two-letter postal
codes, Chapman codes, three-letter ISO codes for nations, some other
standard codes, and a few codes invented for the RSL. The list was
compiled by Karen Isaacson with help from Christian Carey.
You may find more information on abbreviations that may be used in
soc.genealogy.surnames in the Commonly Used Abbreviations FAQ for
soc.genealogy.surnames. The complete list of codes is archived on
mail.eworld.com. To retrieve the file, send e-mail to
listserv@mail.eworld.com containing only the line:
GET FAMILY ABBREV
The computer will then e-mail you the list of abbreviations (unless
you are using a system that blocks e-mail to and from listservs). You
can also retrieve the file by anonymous ftp to vm1.nodak.edu, in the
ROOTS-L directory; the file is named family.abbrev. The dates should
indicate when you are interested in the family in the area listed in
the subject line. The dates could be the earliest birth and latest
death dates for known ancestors, or periods for which you have
information, or the time for which you want more information. The date
range is approximate; no need to add "circa" or "?" if you are not
sure of dates.
*/
|