home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 3 / 3586 < prev    next >
Text File  |  1991-07-02  |  20KB  |  466 lines

  1. Newsgroups: alt.sources
  2. From: goer@ellis.uchicago.edu (Richard L. Goerwitz)
  3. Subject: kjv browser, part 10 of 11
  4. Message-ID: <1991Jul3.065317.28468@midway.uchicago.edu>
  5. Date: Wed, 3 Jul 1991 06:53:17 GMT
  6.  
  7. ---- Cut Here and feed the following to sh ----
  8. #!/bin/sh
  9. # this is bibleref.10 (part 10 of a multipart archive)
  10. # do not concatenate these parts, unpack them in order with /bin/sh
  11. # file README continued
  12. #
  13. if test ! -r _shar_seq_.tmp; then
  14.     echo 'Please unpack part 1 first!'
  15.     exit 1
  16. fi
  17. (read Scheck
  18.  if test "$Scheck" != 10; then
  19.     echo Please unpack part "$Scheck" next!
  20.     exit 1
  21.  else
  22.     exit 0
  23.  fi
  24. ) < _shar_seq_.tmp || exit 1
  25. if test ! -f _shar_wnt_.tmp; then
  26.     echo 'x - still skipping README'
  27. else
  28. echo 'x - continuing file README'
  29. sed 's/^X//' << 'SHAR_EOF' >> 'README' &&
  30. X
  31. X
  32. XProgram:   Bibleref
  33. XLanguage:  Icon
  34. XPurpose:   Perform word and passage-based retrievals on the King
  35. X       James Bible
  36. X
  37. X
  38. X--------
  39. X
  40. X
  41. XOverview:
  42. X
  43. X    This package, Bibleref, offers simple tools for word and
  44. Xpassage-based access to the King James Bible on UNIX platforms.
  45. XBibleref is fast, and easy to install (assuming you possess a King
  46. XJames Bible text).  It will also run with stock terminals - even nasty
  47. Xold ones that leave magic cookies on your screen.  Bibleref will,
  48. Xhowever, put a significant dent in your mass storage resources.  Along
  49. Xwith the 4-5 megabytes of King James Bible text, you'll need to house
  50. Xsome 2 megabytes of indices, and also the 150k icode file (more if you
  51. Xcompile, rather than interpret).  In brief:  Bibleref has a large
  52. Xappetite for memory.  Once set up, though, it can operate with fairly
  53. Xminimal impact on the CPU.
  54. X    With Bibleref, you can perform most of the more basic,
  55. Xlow-level functions commercial Bible browsing packages offer (and
  56. Xperhaps a few not found in some of the commercial packages).  You can,
  57. Xfor example,
  58. X
  59. X    -  retrieve any passage in the Bible instantaneously
  60. X    -  move forward or backward relative to the retrieved passage
  61. X    -  search the entire Bible for words and/or word-patterns
  62. X    -  search for word co-occurrences (or the absence thereof)
  63. X    -  save passages and/or passage-lists for use with an editor
  64. X
  65. XAlthough this program is hardly the product of any major research
  66. Xeffort :-), it should prove sophisticated enough for quick lookup of
  67. Xpassages whose precise location you have forgotten, for research on
  68. Xsermons and Bible study classes, and for general topical perusal of
  69. Xthe biblical text.
  70. X
  71. X
  72. X--------
  73. X
  74. X
  75. XInstallation:
  76. X
  77. X    To install Bibleref, you'll need to get a hold of the King
  78. XJames Bible text as packaged in the PC-SIG disk set (19 discs), which
  79. Xis available from wsmr-simtel20.army.mil.  I happen to have gotten my
  80. Xtext (very similar to the PC-SIG version) from helens.stanford.edu
  81. X(36.0.2.99; kjv.tar.Z).  This one works as well.  There are a number
  82. Xof KJV texts floating around which are derivative of the PC-SIG disk
  83. Xset.  Only ones which have not been edited too severely, though, will
  84. Xwork with the bibleref installation programs.
  85. X    Once you've gotten a hold of a King James Bible text, locate
  86. Xthe Makefile.dist file included with this package and read it.  If you
  87. Xfind you must modify any of the user-configurable sections, then copy
  88. Xit to Makefile, and edit it as you see fit.  Pay special attention to
  89. Xthe DESTDIR and LIBDIR targets.  Also, be sure to change USER and
  90. XGROUP targets to an appropriate value for your machine (in most cases
  91. Xroot or bin; if the executables will be private, then use your login
  92. XID and default group ID).  Finally, check to be certain that the
  93. Xcorrect names are used for your raw King James Bible file(s), and that
  94. Xthe target CAT is set to either "cat" or "zcat," depending on whether
  95. Xyou have compressed the raw files or not.
  96. X    Assuming you've modified the Makefile correctly, you can then
  97. Xsimply type "make."  After this, you might as well go off and have
  98. Xdinner or something.  Better yet, go to bed.  The entire reformatting,
  99. Xcollating, and indexing process takes as many as a three or four hours
  100. Xon a medium-range workstation.  Don't even *think* of indexing on a
  101. Xsystem with less than 8 meg of core memory and a lot of swap space.
  102. XThe main setup program may, for a brief while, swallow up as much as
  103. X15 megabytes of your precious RAM.
  104. X    Once you've gotten past the indexing "hump" (which I might
  105. Xsmooth out some time, if I have a few days free), you can now install.
  106. XSu root first, if you plan on making the executables public, then
  107. X"make install."
  108. X    Please note that Bibleref assumes the existence on your
  109. Xsystem, not only of Icon interpreter or compiler, but also of an
  110. Xup-to-date Icon Program Library.  There are several routines included
  111. Xin the IPL which Bibleref uses.  Any IPL material that I've written
  112. Xmyself has been packed with Bibleref, by the way.  I'm constantly
  113. Xtweaking these programs, and I just want to be sure everyone has the
  114. Xlatest version.  Programs written by other people, though, I have not
  115. Xbuilt into the Bibleref distribution.  If you don't have them, ftp
  116. Xthem from cs.arizona.edu along with the full Icon distribution, and
  117. Xget the updates as well (~ftp/icon/library).  If all else fails, write
  118. Xto me and I'll package them up for you.  In general, the best solution
  119. Xis simply to keep your Icon run-time and support systems fully
  120. Xup-to-date.
  121. X
  122. X
  123. X--------
  124. X
  125. X
  126. XRunning Bibleref:
  127. X
  128. X    There is precious little in the way of documentation on
  129. Xrunning Bibleref.  This is it.  I wrote the program as a test wrapper
  130. Xto put around some software I'm using for personal research purposes.
  131. XThe package has been tried out here at home by my wife and 5 year-old.
  132. XThe 5 year-old likes to break programs I write.  He's seen to it that
  133. Xthe visual interface has had most of the bugs worked out :-).  I've
  134. Xchecked its retrieval facilities against Young's and Strong's
  135. Xconcordances, and they seem to work fine.  Other functions have been
  136. Xtested using similar heuristics.  I have no fantasies that all the
  137. Xbugs have been worked out.
  138. X    When it is first invoked, Bibleref will print a little message
  139. Xabout initializing one or another of its auxiliary files.  After a few
  140. Xseconds, this message will disappear - replaced by a prompt which asks
  141. Xfor a passage reference or "f" (to find a word or word-pattern).
  142. X    If you are interested in looking at a specific passage in the
  143. XBible, type it in.  Just about anything is okay.  Genesis 1:1 can be
  144. Xviewed, for instance, by typing:
  145. X
  146. X    Genesis 1:1
  147. X    Ge 1,1
  148. X    gen 1 1
  149. X    etc.
  150. X
  151. Xlikewise, you can look at the Song of Solomon, by using any one of
  152. Xseveral standard abbreviations or names:
  153. X
  154. X    Solomon 1:1
  155. X    Canticles 1:1
  156. X    cant 1,1
  157. X    etc.
  158. X
  159. XI've tried to make things as flexible as possible, so as to avoid any
  160. Xcumbersome input restrictions which make using a browser a chore
  161. Xrather than a pleasure.
  162. X    If it is a word or word-pattern you want to look for, then
  163. Xtype "f" and press return.  Just about every command in Bibleref
  164. Xconsists of a single letter.  It's simple and consistent, and lets me
  165. Xkeep the terminal in its normal mode.  If at any time you must type in
  166. Xadditional input, Bibleref will ask you for that input.  The "f"
  167. X(find) command is just such a case.
  168. X    After you press f+return, Bibleref will ask you to input a
  169. Xword.  This "word" can be a simple string.  It can also be an
  170. Xegrep-style pattern:
  171. X
  172. X    love|charity
  173. X    faith
  174. X    hope
  175. X    kind.*
  176. X    etc.
  177. X
  178. XNote that the pattern you specify must match words in their entirety.
  179. XFor instance
  180. X
  181. X    help
  182. X
  183. Xwill only match "help."  That is, it will cause Bibleref to retrieve
  184. Xonly those passages which contain the word help.  To catch "helper"
  185. Xtoo, you need to input a regular expression which will match this
  186. Xstring in full as well (e.g. "help.*").
  187. X    When you are done typing in a word or word-pattern, Bibleref
  188. Xwill ask you if you are done.  If you are, then press the appropriate
  189. Xkey, then hit a carriage return.  In less than a second, you should
  190. Xsee a list of passages which contain the word or pattern which you
  191. Xspecified (if in fact any such passages were found).  Along with this
  192. Xlist comes a new set of options, including ! (escape to a shell), a
  193. X(append the current list to a file), b (back up), c (clear and redraw
  194. Xscreen), m (view next screen), and several others.  Try the various
  195. Xoptions out and see what they do.  In particular, try out the "v"
  196. Xcommand, which lets you view any of the passages in the list.  After
  197. Xhitting "v" you are prompted for a passage number.  If you enter one,
  198. Xthen hit return, you will see a printout of that passage in full, just
  199. Xas if you had entered its book chapter:verse reference at the main
  200. Xprompt.
  201. X    While viewing a passage here, or from the main prompt, you may
  202. Xmove to the next passage in the text (+) or to the previous one (-).
  203. XYou may also either write (w) or append (a) it to a file.  Again, try
  204. Xout the various options.  When you are done, type "q" and press
  205. Xreturn.  You will be brought back to the previous menu, where you can
  206. X*v*iew another passage, or quit back to the main menu.
  207. X    At the main menu, you can invoke several additional functions
  208. Xbeyond retrieving specific passages or passage lists.  Bibleref keeps
  209. Xa resume of all passage lists you have retrieved, storing this resume
  210. Xin a globally accessible structure.  You can look at this structure by
  211. Xtyping "l" (for "list") at the main menu prompt.  From the resulting
  212. Xdisplay menu, you can then *v*iew any of your previous passage lists
  213. X(i.e. "hit lists" resulting from invocation of the *f*ind function).
  214. XWhen you are done, you can once again press "q"+return, and go back to
  215. Xthe main command loop.
  216. X    The final function which Bibleref offers is geared for manual
  217. Xdisplay of passage lists.  As noted above, all your passage lists are
  218. Xall kept in memory, and you can view the list of available ones by
  219. Xtyping "l" at the main prompt.  If this seems too cumbersome, though,
  220. Xyou can simply type "d" and return.  Bibleref will retrieve and
  221. X*d*isplay the last passage list you created.
  222. X
  223. X
  224. X--------
  225. X
  226. X
  227. XAdditional Notes:
  228. X
  229. X    As noted above, this package is just a wrapper around a more
  230. Xgeneral set of indexing and retrieval utilities I'm using for personal
  231. Xresearch.  These utilities are set up so that they can actually be
  232. Xused with just about any text broken up - like the King James Bible -
  233. Xinto hierarchically arranged divisions.  If, for instance, you don't
  234. Xlike Renaissance English, and have a more modern translation online,
  235. Xyou can certainly use that instead.  All you'll need to do is copy the
  236. Xkjv2rtv.icn file to, say, kjv2rsv.icn, edit it to reflect the text you
  237. Xare using, run it on your text, and then index it as you would have
  238. Xdone for the King James text.  You can tell Bibleref to use this text
  239. Xinstead of the King James text either by modifying bibleref.icn to
  240. Xpoint to the new file, or by giving it a filename argument, a la
  241. X"bibleref -f your.indexed.bible.text."
  242. X    If you need help integrating a new biblical text into the
  243. Xretrieve package, drop me a line.  If I'm not busy, and the job looks
  244. Xto be one I can help you out with, I'll be glad to do so.
  245. X
  246. X
  247. X--------
  248. X
  249. X
  250. XProblems:
  251. X
  252. X    Doubtless you will find problems, options not discussed in the
  253. Xdocumentation, and just general indications that this program was
  254. Xwritten late at night one week after I was done all my serious work
  255. Xfor the day.  If - no, when - this happens, I encourage you to drop me
  256. Xa line.  I'd like to know about any flaws you run into, especially
  257. Xmajor systemic ones.
  258. X    I really hope that the bugs will not prove too annoying, and
  259. Xthat the package will prove generally useful to you the user, and, if
  260. Xyou place it in a public directory, to anyone else who might happen to
  261. Xtry it out.
  262. X
  263. X
  264. X   -Richard L. Goerwitz              goer%sophist@uchicago.bitnet
  265. X   goer@sophist.uchicago.edu         rutgers!oddjob!gide!sophist!goer
  266. SHAR_EOF
  267. echo 'File README is complete' &&
  268. true || echo 'restore of README failed'
  269. rm -f _shar_wnt_.tmp
  270. fi
  271. # ============= README.rtv ==============
  272. if test -f 'README.rtv' -a X"$1" != X"-c"; then
  273.     echo 'x - skipping README.rtv (File already exists)'
  274.     rm -f _shar_wnt_.tmp
  275. else
  276. > _shar_wnt_.tmp
  277. echo 'x - extracting README.rtv (Text)'
  278. sed 's/^X//' << 'SHAR_EOF' > 'README.rtv' &&
  279. X--------
  280. X
  281. X
  282. XName: retrieve
  283. XLanguage: Icon
  284. XContents: tools for word-based, indexed access to text files
  285. XRequires: up-to-date Icon Program Library, up-to-date iconc/icont, UNIX
  286. X
  287. X
  288. X--------
  289. X
  290. X
  291. XOverview:
  292. X
  293. X    Scholars have traditionally split so-called "Classics," the
  294. XQuran, the Bible, and generally any closely studied literary or
  295. Xreligious text, into hierarchically arranged divisions (in the case of
  296. Xthe Bible, these are books, chapters, and verses).  Such divisions
  297. Xdrastically simplify the process of citation and reference.
  298. XFortunately for those of us who need electronic access to these files,
  299. Xthis hierarchical system of divisions permits easy representation
  300. Xusing bit-fields, i.e. fixed-width series' of binary digits.  Such
  301. Xrepresentations are compact, and allow the programmer to implement
  302. Xhigh-level boolean operations and range-based searches using simple
  303. Xshifts, additions, and subtractions.
  304. X    The package in which this README file comes - "retrieve" -
  305. Xoffers a naive, but generalized and fairly high-level tool for
  306. Xindexing texts which are divided up in the manner just described, and
  307. Xfor performing word-based searches on them.  These word-based searches
  308. Xoffer wildcard-based access to word patterns (e.g. "give me every
  309. Xpassage containing a word with the letters 'NIX'").  The search
  310. Xfacilities also permit boolean and range-based specifications (e.g.
  311. X"give me every instance of word X occurring within eleven sections of
  312. Xthe word Y").  One can also access passages by both absolute (e.g.
  313. X"give me book 1, chapter 3, verse 4"), and relative, location (e.g.
  314. X"give me the passage occurring before/after the one I just looked
  315. Xat").
  316. X    Retrieve does no compression of any kind, and is written
  317. Xentirely in Icon.  As a result it is something of a disk hog, and
  318. Xtakes a long time to index files.  Surprisingly, though, once set up,
  319. Xfiles incorporated into the retrieve package can be accessed quite
  320. Xrapidly.  After a brief initialization process (takes 2-4 seconds on a
  321. XSun4), absolute locations can be retrieved with no perceptible delay.
  322. XThe same is true of relative locations (again, after a lag on first
  323. Xinvocation).  Regular expression based searches appear instantaneous
  324. Xon a fast machine (there is a just perceptible delay on a Sun4 for a
  325. Xfour megabyte indexed file, five to ten seconds on a Xenix/386 box
  326. Xwith a relatively slow disk).  Boolean and range-based searches take
  327. Xthe longest, varying widely according to their complexity and the
  328. Xnumber of "hits."
  329. X
  330. X
  331. X--------
  332. X
  333. X
  334. XInstallation:
  335. X
  336. X    Retrieve is really not a program as such.  It is a set of
  337. Xtools for indexing, and accessing indexed, files.  Installation
  338. Xconsists of four basic steps:
  339. X
  340. X    1) creating an indexable file
  341. X    2) indexing that file
  342. X    3) writing a program using the retrieve interface
  343. X    4) compiling and running what you wrote in (3)
  344. X
  345. XThese steps are discussed in detail in the following sections.
  346. X
  347. X
  348. X--------
  349. X
  350. X
  351. XStep 1:  Creating an Indexable File
  352. X
  353. X    The format for indexable files must conform to a simple, but
  354. Xstrict, set of guidelines.  Basically, they must interleave series' of
  355. Xlocation designators (internally represented by so-called "bitmaps")
  356. Xwith actual text:
  357. X
  358. X    ::001:001:001
  359. X    This is text.
  360. X    ::001:001:002
  361. X    This is more text.
  362. X
  363. XThe initial :: (double colon) delimits lines containing the location
  364. Xdesignators.  These designators translate into integers dividable
  365. Xinternally into (in this case) three bit-fields of length 10 (enough
  366. Xto handle 999:999:999), which serve as a location markers for the text
  367. Xthat goes with them.  Note that the translation process is invisible.
  368. XAll you need to do is make sure,
  369. X
  370. X    a) that the location designators are correctly paired with
  371. X       blocks of text, and
  372. X    b) that the fields are numbered consistently, beginning with
  373. X       the same low value (usually 1 or 0), and continuing in
  374. X       ascending order until they roll over again to their low
  375. X       value
  376. X
  377. X    Rather than speak merely in the abstract about the format, let
  378. Xme offer a simple illustration taken from the King James Bible.  The
  379. Xfirst verse in the Bible is Genesis chapter 1 verse 1.  This passage
  380. Xmight be designated 1:1:1.  Verses in Genesis chapter 1 would continue
  381. Xin ascending order to verse 31 (1:1:31), after which chapter 2 would
  382. Xbegin (i.e. 1:2:1).  The resulting text would look like:
  383. X
  384. X    ::1:1:1
  385. X    In the beginning God created the heaven and the earth.
  386. X    ::1:1:2
  387. X    And the earth was without form, and void; and darkness was
  388. X    upon the face of the deep. And the Spirit of God moved upon
  389. X    the face of the waters.
  390. X    ::1:1:3
  391. X    And God said, Let there be light: and there was light.
  392. X    ::1:1:4
  393. X    And God saw the light, that it was good: and God divided the
  394. X    light from the darkness.
  395. X    ::1:1:5
  396. X    And God called the light Day, and the darkness he called
  397. X    Night. And the evening and the morning were the first day.
  398. X
  399. X    ...
  400. X
  401. X    ::1:2:1
  402. X    Thus the heavens and the earth were finished, and all the host
  403. X    of them.
  404. X
  405. XAlthough you can use any number of fields you want or need, and can
  406. Xuse any nonnumeric separator (e.g. 01-01-01-05-03), lines containing
  407. Xlocation designators *must* begin with "::," and must be ordered
  408. Xsequentially throughout the input file, paired with the correct text
  409. Xblock in each instance.
  410. X        
  411. X
  412. X--------
  413. X
  414. X
  415. XStep 2:  Indexing the File
  416. X
  417. X    Indexing the file created in step (1) entails compiling and
  418. Xinvoking a program called "makeind."  The compilation end of this
  419. Xprocess would typically be achieved by typing:
  420. X
  421. X    icont -o makeind makeind.icn gettokens.icn indexutl.icn
  422. X
  423. XOne of the files listed just above, gettokens.icn, is of particular
  424. Xinterest.  It contains the tokenizing routine to be used in creating
  425. Xthe main word index.  Should this routine prove unsatisfactory for one
  426. Xreason or another you are free to replace it with something more to
  427. Xyour liking.  Just comment out the old gettokens() routine, and insert
  428. Xthe new one in its place.  Then recompile.
  429. X    Once you have compiled makeind, you must invoke it for the
  430. Xtext file you created in step (1).  Invoking makeind involves
  431. Xspecifying a file to be indexed, the number of fields in location
  432. Xmarkers for that file, and the maximum value for fields.  If you plan
  433. Xon invoking passages by relative location, you must also use the -l
  434. Xoption, which tells makeind to build a .LIM file, which records the
  435. Xhigh values for a specific field throughout the file being indexed.
  436. XLet us say you have examined Genesis 1:31 in the Bible, and want to
  437. Xlook at the next verse.  The only easy way the procedure that handles
  438. Xthis particular chore can know the maximum verse value for Genesis
  439. Xchapter 1 (31) is to store this maximum value in a file.  By supplying
  440. Xmakeind with an -l argument, you are telling it to create a file to
  441. Xstore such values.
  442. X    Just for illustration's sake, let us suppose you want to index
  443. Xthe King James Version (KJV).  How might you invoke makeind to
  444. Xaccomplish this?  First you would need to determine the maximum field
  445. Xvalue for your text.  In the case of the Christian English Bible, this
  446. Xis 176.  The English Bible (including Apocrypha) contains 73 books.
  447. XThe Protestant KJV contains 66.  The maximum number of chapters in any
  448. Xbook is 150 (Psalms).  The maximum number of verses in any one chapter
  449. Xin any one book is 176 (Psalm 119).  176 would therefore be the
  450. Xmaximum value any field would have to contain.  You would pass this
  451. Xinformation to makeind via the -m option.  The total number of fields
  452. Xis three, naturally (book, chapter, and verse).  This value would be
  453. Xpassed using the -n option.  As noted above, in order to use relative
  454. Xlocations you would need to tell makeind what field to record max
  455. SHAR_EOF
  456. true || echo 'restore of README.rtv failed'
  457. fi
  458. echo 'End of  part 10'
  459. echo 'File README.rtv is continued in part 11'
  460. echo 11 > _shar_seq_.tmp
  461. exit 0
  462. -- 
  463.  
  464.    -Richard L. Goerwitz              goer%sophist@uchicago.bitnet
  465.    goer@sophist.uchicago.edu         rutgers!oddjob!gide!sophist!goer
  466.