From pa.dec.com!decwrl!uunet!sparky!kent Fri Jul 19 14:08:34 PDT 1991
Article: 2495 of comp.sources.misc
Newsgroups: comp.sources.misc
Path: pa.dec.com!decwrl!uunet!sparky!kent
From: Richard Goerwitz <goer@midway.uchicago.edu>
Subject:  v20i105:  bibleref - Word and passage retrievals from King James Bible, Part07/07
Message-ID: <1991Jul18.030314.29609@sparky.IMD.Sterling.COM>
X-Md4-Signature: 5e06a67dbabdb0ecfad5034a65118219
Sender: kent@sparky.IMD.Sterling.COM (Kent Landfield)
Organization: Sterling Software, IMD
References: <csm-v20i099=bibleref.215242@sparky.imd.sterling.com>
Date: Thu, 18 Jul 1991 03:03:14 GMT
Approved: kent@sparky.imd.sterling.com
Lines: 623

Submitted-by: Richard Goerwitz <goer@midway.uchicago.edu>
Posting-number: Volume 20, Issue 105
Archive-name: bibleref/part07
Environment: ICON, UNIX

---- Cut Here and feed the following to sh ----
#!/bin/sh
# this is bibleref.07 (part 7 of a multipart archive)
# do not concatenate these parts, unpack them in order with /bin/sh
# file README continued
#
if test ! -r _shar_seq_.tmp; then
	echo 'Please unpack part 1 first!'
	exit 1
fi
(read Scheck
 if test "$Scheck" != 7; then
	echo Please unpack part "$Scheck" next!
	exit 1
 else
	exit 0
 fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
	echo 'x - still skipping README'
else
echo 'x - continuing file README'
sed 's/^X//' << 'SHAR_EOF' >> 'README' &&
X	Any IPL material that I've written myself has been packed with
XBibleref, by the way.  I'm constantly tweaking these programs, and I
Xjust want to be sure everyone has the latest version.  IPL programs
Xwritten by other people, though, have not been built into the Bibleref
Xdistribution.  If you don't have the IPL, ftp it from cs.arizona.edu
Xalong with the full Icon distribution, and get the updates as well
X(~ftp/icon/library).  If all else fails, write to me and I'll package
Xup the necessary routines for you.  In general, the best solution is
Xsimply to keep your Icon run-time and support systems in sync with the
Xlatest revisions from the U. of Arizona.
X
X
X--------
X
X
XRunning Bibleref:
X
X	There is precious little in the way of documentation on
Xrunning Bibleref.  This is it.  I wrote the program as a test wrapper
Xto put around some software I'm using for personal research purposes.
XThe package has been tried out here at home by my wife and 5 year-old.
XThe 5 year-old likes to break programs I write.  Thanks to him, the
Xvisual interface has had all of the obvious bugs worked out.  I've
Xchecked Bibleref's retrieval facilities against Young's and Strong's
Xconcordances, and they seem to work fine.  Other functions have been
Xtested using similar heuristics.  I have no fantasies that all the
Xproblems have been worked out.
X	When it is first invoked, Bibleref will print a little message
Xabout initializing one or another of its auxiliary files.  After
Xseveral seconds, this message will disappear - replaced by a prompt
Xwhich asks for a passage reference or "f" (to find a word or
Xword-pattern).
X	If you are interested in looking at a specific passage in the
XBible, type it in.  Just about anything is okay.  Genesis 1:1 can be
Xviewed, for instance, by typing:
X
X	Genesis 1:1
X	Ge 1,1
X	gen 1 1
X	etc.
X
Xlikewise, you can look at the Song of Solomon, by using any one of
Xseveral standard abbreviations or names:
X
X	Solomon 1:1
X	Canticles 1:1
X	cant 1,1
X	etc.
X
XI've tried to make things as flexible as possible, so as to avoid any
Xcumbersome input restrictions which might make using Bibleref more of
Xa chore than a pleasure.
X	If it is a word or word-pattern you want to look for, then
Xtype "f" and press return.  Just about every command in Bibleref is
Xinvoked by typing a single letter + a carriage return.  It's simple
Xand consistent, and lets me keep the terminal in its normal mode.  If
Xat any time you must type in additional input, Bibleref will ask you
Xfor that input.  (The "f" [find] command is one such case.)
X	After you press f+return, Bibleref will ask you to input a
Xword.  This "word" can be a simple string.  It can also be an
Xegrep-style pattern:
X
X	love|charity
X	faith
X	hope
X	kind.*
X	etc.
X
XNote that the pattern you specify must match words in their entirety.
XFor instance
X
X	help
X
Xwill only match "help."  That is, it will cause Bibleref to retrieve
Xonly those passages which contain the word "help."  To catch "helper"
Xtoo, you need to input a regular expression which will match this
Xstring in full as well (e.g. "help.*").
X	When you are done typing in a word or word-pattern, Bibleref
Xwill ask you if you are done.  If you are, then press the appropriate
Xkey, then hit a carriage return.  In a couple of seconds, you should
Xsee a list of passages which contain the word or pattern which you
Xspecified (if in fact any such passages were found).  Along with this
Xlist comes a new set of options, including ! (escape to a shell), a
X(append the current list to a file), b (back up), c (clear and redraw
Xscreen), m (view next screen), and several others.  Try the various
Xoptions out and see what they do.  Two commands not listed in the
Xprompt string (which has to be of finite length!) are "?" and "/."
XWith some differences, these do pretty much what UNIX users expect.
XIf, say, you have a passage list containing 2000 hits, and you want to
Xperuse only New Testament references, type in "/Mat."  Bibleref will
Xmove you up to the first reference from the book of Matthew (if in
Xfact there is one).  You can then look at individual references using
Xthe "v" (view) command.
X	While viewing a passage here, or at the top level, you may
Xmove to the next passage in the text (+) or to the previous one (-).
XYou may also either write (w) or append (a) it to a file.  Again, try
Xout the various options.  When you are done, type "q" and press
Xreturn.  You will be brought back to the previous menu, where you can
X*v*iew another passage, or quit.
X	At the main menu, you can invoke several additional functions
Xbeyond retrieving specific passages or passage lists.  Bibleref keeps
Xa resume of all passage lists you have retrieved, storing this resume
Xin a globally accessible structure.  You can look at this structure by
Xtyping "l" (for "list") at the main menu prompt.  From the resulting
Xdisplay menu, you can then *v*iew any of your previous passage lists
X(i.e. "hit lists" resulting from invocation of the *f*ind function).
XWhen you are done, you can once again press "q"+return, and go back to
Xthe top-level command loop.
X	From most of the display menus you can write or append
Xpassages or passage lists to files.  If at any time you wish to reread
Xsuch files back into Bibleref, type "r" at the main command prompt.
XYou will then be prompted for a filename.  If the file you name has
Xnot been corrupted somehow, Bibleref will read it in and display it
Xjust the way it would the results of a *f*ind operation.
X	A final basic function I'd like to mention here is Bibleref's
Xfacility for manual display of passage lists.  As was mentioned a few
Xparagraphs before, all your passage lists are all kept in memory, and
Xyou can view the list of available ones by typing "l" at the main
Xprompt.  I'd just like to point out that if this seems too cumbersome,
Xyou can simply type "d" and return.  Bibleref will retrieve and
X*d*isplay the last passage list you created.
X	One somewhat under-tested aspect of Bibleref's search facility
Xis its ability to handle ranges and Boolean operators in search
Xspecifications.  You can, for instance, execute a *f*ind, using a word
Xsuch as "Egypt."  When asked if you are finished, you can then
Xrespond, not with the normal "f," but rather with an "a" (for "and").
XThis tells Bibleref that you want to perform an intersection with
Xrespect to another set of passages.  After typing "a" and hitting
Xreturn, Bibleref asks you for a unit (b = book, c = chapter, v =
Xverse).  Normally you would press "v."  You are then asked for a range
X(normally 0).  After entering a unit and range, you would enter a new
Xword or pattern to look for, and then press "f" to tell Bibleref you
Xare finished.  What Bibleref would retrieve in this instance is a list
Xof all Biblical verses which contain both of the words, or
Xword-patterns, that you specified.  Note that if you had entered 1 as
Xyour range, you would have gotten a list of all passages containing
Xwords matching the first pattern and which either contain, *or are
Xadjacent to another passage containing*, a word matching the next
Xpattern you specified.
X	In addition to "a" ("and"), Bibleref also accepts "o" ("or")
Xand "n" (and-not) directives.  Also, words and patterns preceded by an
Xexclamation point ("!") are inverted (a la egrep -v).  I would not
Xrecommend using the "!" much, though.  It is slow, and usually brings
Xabout massive hit lists.  If you want, say, all occurrences of the
Xword "woman" that don't contain the word "child," then formalize your
Xsearch as "woman" and-not "child," rather than as "woman" and "!
Xchild."  The only thing slower than a search for "woman" and "! child"
Xwould be to look for "woman" together with the words "and" & "child."
XThere are about 25000 instances of "and" in the text, and although
XI've used a cute trick to reduce the number that have to be stored,
Xretrieving them all is still a mess.
X
X
X--------
X
X
XAdditional Notes:
X
X	As mentioned above, this package is really just a wrapper
Xaround a more general set of indexing and retrieval utilities I'm
Xusing for personal research.  Despite the way they are used here,
Xthese utilities are *not* geared solely for the KJV.  In fact, they
Xare set up so that they can be used with just about any text broken up
Xinto hierarchically arranged divisions.  If, for instance, you don't
Xlike Renaissance English, and have a more modern Bible translation
Xonline, you can certainly use that instead.  All you'll need to do is
Xcopy the kjv2rtv.icn file to, say, kjv2rsv.icn, edit it to reflect the
Xtext you are using, run it on your text, and then index it as you
Xwould have done for the King James text.  You can tell Bibleref to use
Xthis text instead of the King James text either by modifying
Xbibleref.icn to point to the new file, or by giving it a filename
Xargument, a la "bibleref -f your.indexed.bible.text."
X	If you need help integrating a new biblical text into the
Xretrieve package, drop me a line.  If I'm not busy, and the job looks
Xto be one I can help you out with, I'll be glad to do so.  If nothing
Xelse, I can at least get you started, and offer pointers on how to
Xproceed.
X	I feel I must mention here that there are many features
XBibleref possesses that I haven't fully documented.  Most are ones 1)
Xthat I'm not likely to continue supporting, 2) that haven't been
Xtested, or 3) that are likely to change.  For instance, the "d"
Xcommand can take a number argument, which causes it to display the
Xlist whose position in the global list of lists corresponds to that
Xnumber).  The "!" command can also pass its arguments to the shell
X(/bin/sh, or the value of your SHELL environment variable).  Also, if
Xyou type "f lord god" at the main prompt, and press return, you'll get
Xa list of verses containing the words "lord" and "god" (i.e. Bibleref
Xwill, in other words, perform a verse-based, range 0 "and" on the
Xrespective hit lists for these two words).  While I don't want to hide
Xthe existence of these marginal features, I don't want to encourage
Xanyone to expect their presence in later versions, or to suggest that
Xthey will work properly in the current one.  I'm particularly worried
Xabout the "f lord god" example above, as it might lead people to think
Xthat Bibleref has a concept of word order within verses.  In fact,
Xthis is just an alternate way of performing a set intersection on the
Xhit lists for "lord" and "god."
X
X
X--------
X
X
XProblems:
X
X	Doubtless you will find problems, more options not discussed
Xin the documentation, and just general indications that this program
Xwas written late at night after I was done all my serious work for the
Xday :-).  If - no, when - this happens, I encourage you to drop me a
Xline.  I'd like to know about any flaws you run into, especially
Xmajor, systemic ones.
X	Generally, I really hope that the bugs will not prove too
Xannoying, and that the package will prove generally useful to you the
Xuser, and, if you place it in a public directory, to anyone else who
Xmight happen to try it out.
X
X
X   -Richard L. Goerwitz              goer%sophist@uchicago.bitnet
X   goer@sophist.uchicago.edu         rutgers!oddjob!gide!sophist!goer
SHAR_EOF
echo 'File README is complete' &&
true || echo 'restore of README failed'
rm -f _shar_wnt_.tmp
fi
# ============= README.rtv ==============
if test -f 'README.rtv' -a X"$1" != X"-c"; then
	echo 'x - skipping README.rtv (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting README.rtv (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'README.rtv' &&
X--------
X
X
XName: retrieve
XLanguage: Icon
XContents: tools for word-based, indexed access to text files
XRequires: up-to-date Icon Program Library, up-to-date iconc/icont, UNIX
XFiles: binsrch.icn bmp2text.icn gettokens.icn indexutl.icn initfile.icn
X       makeind.icn retrieve.icn retrops.icn searchb.icn whatnext.icn
X
X
X--------
X
X
XOverview:
X
X	Scholars have traditionally split so-called "Classics," the
XQuran, the Bible, and generally any closely studied literary or
Xreligious text, into hierarchically arranged divisions (in the case of
Xthe Bible, these are books, chapters, and verses).  Such divisions
Xdrastically simplify the process of citation and reference.
XFortunately for those of us who need electronic access to these files,
Xthis hierarchical system of divisions permits easy representation
Xusing bit-fields, i.e. fixed-width series' of binary digits.  Such
Xrepresentations are compact, and allow the programmer to implement
Xhigh-level boolean operations and range-based searches using simple
Xshifts, additions, and subtractions.
X	The package in which this README file comes - "retrieve" -
Xoffers a naive, but generalized and fairly high-level tool for
Xindexing texts which are divided up in the manner just described, and
Xfor performing word-based searches on them.  These word-based searches
Xoffer wildcard-based access to word patterns (e.g. "give me every
Xpassage containing a word with the letters 'NIX'").  The search
Xfacilities also permit boolean and range-based specifications (e.g.
X"give me every instance of word X occurring within eleven sections of
Xthe word Y").  One can also access passages by both absolute (e.g.
X"give me book 1, chapter 3, verse 4"), and relative, location (e.g.
X"give me the passage occurring before/after the one I just looked
Xat").
X	Retrieve does no compression of any kind, and is written
Xentirely in Icon.  As a result it is something of a disk hog, and
Xtakes a long time to index files.  Surprisingly, though, once set up,
Xfiles incorporated into the retrieve package can be accessed quite
Xrapidly.  After a brief initialization process (takes 2-4 seconds on a
XSun4), absolute locations can be retrieved with no perceptible delay.
XThe same is true of relative locations (again, after a lag on first
Xinvocation).  Regular expression based searches appear instantaneous
Xon a fast machine (there is a just perceptible delay on a Sun4 for a
Xfour megabyte indexed file, five to ten seconds on a Xenix/386 box
Xwith a relatively slow disk).  Boolean and range-based searches take
Xthe longest, varying widely according to their complexity and the
Xnumber of "hits."
X
X
X--------
X
X
XInstallation:
X
X	Retrieve is really not a program as such.  It is a set of
Xtools for indexing, and accessing indexed, files.  Installation
Xconsists of four basic steps:
X
X	1) creating an indexable file
X	2) indexing that file
X	3) writing a program using the retrieve interface
X	4) compiling and running what you wrote in (3)
X
XThese steps are discussed in detail in the following sections.
X
X
X--------
X
X
XStep 1:  Creating an Indexable File
X
X	The format for indexable files must conform to a simple, but
Xstrict, set of guidelines.  Basically, they must interleave series' of
Xlocation designators (internally represented by so-called "bitmaps")
Xwith actual text:
X
X	::001:001:001
X	This is text.
X	::001:001:002
X	This is more text.
X
XThe initial :: (double colon) delimits lines containing the location
Xdesignators.  These designators translate into integers divisible
Xinternally into (in this case) three bit-fields of length 10 (enough
Xto handle 999:999:999), which serve as a location markers for the text
Xthat goes with them.  Note that the translation process is invisible.
XAll you need to do is make sure,
X
X	a) that the location designators are correctly paired with
X	   blocks of text, and
X	b) that the fields are numbered consistently, beginning with
X	   the same low value (usually 1 or 0), and continuing in
X	   ascending order until they roll over again to their low
X	   value
X
X	Rather than speak merely in the abstract about the format, let
Xme offer a simple illustration taken from the King James Bible.  The
Xfirst verse in the Bible is Genesis chapter 1 verse 1.  This passage
Xmight be designated 1:1:1.  Verses in Genesis chapter 1 would continue
Xin ascending order to verse 31 (1:1:31), after which chapter 2 would
Xbegin (i.e. 1:2:1).  The resulting text would look like:
X
X	::1:1:1
X	In the beginning God created the heaven and the earth.
X	::1:1:2
X	And the earth was without form, and void; and darkness was
X	upon the face of the deep. And the Spirit of God moved upon
X	the face of the waters.
X	::1:1:3
X	And God said, Let there be light: and there was light.
X	::1:1:4
X	And God saw the light, that it was good: and God divided the
X	light from the darkness.
X	::1:1:5
X	And God called the light Day, and the darkness he called
X	Night. And the evening and the morning were the first day.
X
X	...
X
X	::1:2:1
X	Thus the heavens and the earth were finished, and all the host
X	of them.
X
XAlthough you can use any number of fields you want or need, and can
Xuse any nonnumeric separator (e.g. 01-01-01-05-03), lines containing
Xlocation designators *must* begin with "::," and must be ordered
Xsequentially throughout the input file, paired with the correct text
Xblock in each instance.
X		
X
X--------
X
X
XStep 2:  Indexing the File
X
X	Indexing the file created in step (1) entails compiling and
Xinvoking a program called "makeind."  The compilation end of this
Xprocess would typically be achieved by typing:
X
X	icont -o makeind makeind.icn gettokens.icn indexutl.icn
X
XOne of the files listed just above, gettokens.icn, is of particular
Xinterest.  It contains the tokenizing routine to be used in creating
Xthe main word index.  Should this routine prove unsatisfactory for one
Xreason or another you are free to replace it with something more to
Xyour liking.  Just comment out the old gettokens() routine, and insert
Xthe new one in its place.  Then recompile.
X	Once you have compiled makeind, you must invoke it for the
Xtext file you created in step (1).  Invoking makeind involves
Xspecifying a file to be indexed, the number of fields in location
Xmarkers for that file, and the maximum value for fields.  If you plan
Xon invoking passages by relative location, you must also use the -l
Xoption, which tells makeind to build a .LIM file, which records the
Xhigh values for a specific field throughout the file being indexed.
XLet us say you have examined Genesis 1:31 in the Bible, and want to
Xlook at the next verse.  The only easy way the procedure that handles
Xthis particular chore can know the maximum verse value for Genesis
Xchapter 1 (31) is to store this maximum value in a file.  By supplying
Xmakeind with an -l argument, you are telling it to create a file to
Xstore such values.
X	Just for illustration's sake, let us suppose you want to index
Xthe King James Version (KJV).  How might you invoke makeind to
Xaccomplish this?  First you would need to determine the maximum field
Xvalue for your text.  In the case of the Christian English Bible, this
Xis 176.  The English Bible (including Apocrypha) contains 73 books.
XThe Protestant KJV contains 66.  The maximum number of chapters in any
Xbook is 150 (Psalms).  The maximum number of verses in any one chapter
Xin any one book is 176 (Psalm 119).  176 would therefore be the
Xmaximum value any field would have to contain.  You would pass this
Xinformation to makeind via the -m option.  The total number of fields
Xis three, naturally (book, chapter, and verse).  This value would be
Xpassed using the -n option.  As noted above, in order to use relative
Xlocations you would need to tell makeind what field to record max
Xvalues for.  In our hypothesized scenario, you would want makeind to
Xstore the max value for the verse field for every chapter of every
Xbook in the Bible.  The verse field (field #3), in other words, is
Xyour "rollover" field, and would be passed to makeind using the -l
Xoption.  Assuming "kjv" to be the name of your indexable biblical
Xtext, this set of circumstances would imply the following invocation
Xfor makeind:
X
X	makeind -f kjv -m 176 -n 3 -l 3
X
XIf you were to want a case-sensitive index (not a good idea), you
Xwould add "-s" to the argument list above (the only disadvantage a
Xcase-insensitive index would bring is that it would obscure the
XLord/lord, and other similar, distinctions).
X	Actual English Bible texts usually take up 4-5 megabytes.
XIndexing one would require at over twice that much core memory, and
Xwould take at least an hour on a fast machine.  The end result would
Xbe a set of data files occupying about 2 megabytes plus the 4-5
Xmegabytes of the original file.  The Bible is hardly a small book.
XOnce these data files were created, they could be moved, along with
Xthe original source file, to any platform you desired.
X	Having indexed, and having moved the files to wherever you
Xwanted them, you would then be ready for step 3.
X
X
X--------
X
X
XStep 3:  Writing a Program to Access Indexed Files
X
X	When accessing text files such as the Bible, the most useful
Xunit for searches is normally the word.  Let us suppose you are a
Xzealous lay-speaker preparing a talk on fire imagery and divine wrath
Xin the Bible.  You would probably want to look for every passage in
Xthe text that contained words like
X
X	fire, fiery
X	burn
X	furnace
X	etc.
X
XTo refine the search, let us say that you want every instance of one
Xof these fire words that occurs within one verse of a biblical title
Xfor God:
X
X	God
X	LORD
X	etc.
X
XThe searches for fire, fiery, burn, etc. would be accomplished by
Xcalling a routine called retrieve().  Retrieve takes three arguments:
X
X	retrieve(pattern, filename, invert_search)
X
XThe first argument should be a string containing a regular expression
Xbased pattern, such as
X
X	fir(y|e|iness)|flam(e|ing)|burn.*?
X
XNote that the pattern must match words IN THEIR ENTIRETY.  So, for
Xinstance, "fir[ie]" would not catch "fieriness," but rather only
X"fire."  Likewise, if you want every string beginning with the
Xsequence "burn," the string "burn" will not work.  Use "burn.*"
Xinstead.  The filename argument supplies retrieve() with the name of
Xthe original text file.  The last argument, if nonnull, inverts the
Xsense of the search (a la egrep -v).  In the case of the fire words
Xmentioned above, one would invoke retrieve() as follows:
X
X	hits1 := retrieve("fir(y|e|iness)|flam(e|ing)|burn.*?", "kjv")
X
XFor the divine names, one would do something along these lines:
X
X	hits2 := retrieve("god|lord", "kjv")
X
X	Having finished the basic word searches, one would then
Xperform a set intersection on them.  If we are looking for fire words
Xwhich occur at most one verse away from a divine name, then we would
Xspecify 1 as our range (as opposed to, say, zero), and the verse as
Xour unit.  The utility you would use to carry out the search is
Xr_and().  R_and() would be invoked as follows:
X
X	hits3 := r_and(hits1, hits2, "kjv", 3, 1)
X
XThe last two arguments, 3 and 1, specify field three (the "verse"
Xfield) and field 1 (the range).
X	To display the text for your "hit list" (hits3 above), you
Xwould call bitmap_2_text():
X
X	every write(!bitmap_2_text(hits3, "kjv"))
X
XBitmap_2_text converts the location designators contained in hits3
Xinto actual text.
X	The three basic functions mentioned above - retrieve(),
Xr_and(), and bitmap_2_text() - are contained in the three distinct
Xfiles (retrieve.icn, retrops.icn, and bmp2text.icn, respectively).
XOther useful routines are included in these files, and also in
Xwhatnext.icn.  If you are planning on writing a retrieval engine for
Xserious work of some kind, you would probably want to construct a mini
Xinterpreter, which would convert strings typed in by the user at
Xrun-time into internal search and retrieval operations.
X	Note that I have included no routine to parse or expand
Xhuman-readable input (the nature of which will naturally vary from
Xtext to text).  Again, using the Bible as our hypothetical case, it
Xwould be very useful to be able to ask for every passage in, say,
XGenesis chapters 2 through 4, and to be able to print these to the
Xscreen.  Doing this would require a parsing routine to break down the
Xreferences, and map them to retrieve-internal format.  The routine
Xwould then have to generate all valid locations from the minimum value
Xin chapter 2 above to the max in chapter 4.  See the file whatnext.icn
Xfor some aids in accomplishing this sort of task.
X
X
X--------
X
X
XStep 4:  Compiling and Running Your Program
X
X	Assuming you have written a search/retrieval program using the
Xroutines contained in retrieve.icn, retrops.icn, bmp2text.icn, and
Xwhatnext.icn, you would now be ready to compile it.  In order to
Xfunction properly, these routines would need to be linked with
Xinitfile.icn and indexutl.icn.  Specific dependencies are noted in the
Xindividual files in case there is any confusion.
X	If you have made significant use of this package, you probably
Xshould not worry about the exact dependencies, though.  Just link
Xeverything in together, and worry about what isn't needed after you
Xhave fully tested your program:
X
X	icont -o yourprog yourprog.icn initfile.icn indexutl.icn \
X		retrieve.icn retrops.icn bmp2text.icn binsrch.icn
X
X
X--------
X
X
XProblems, bugs:
X
X	This is really an early beta release of the retrieve package.
XI use it for various things.  For instance, I recently retrieved a
Xtext file containing informal reviews of a number of Science Fiction
Xworks.  My father likes SciFi, and it was close to Fathers' Day, so I
Xindexed the file, and performed cross-referenced searches for words
Xlike "very good," "brilliant," and "excellent," omitting authors my
Xfather has certainly read (e.g. Herbert, Azimov, etc.).  I also had
Xoccasion to write a retrieval engine for the King James Bible (hence
Xthe many examples from this text), and to construct a retrieval
Xpackage for the Hebrew Bible, which I am now using to gather data for
Xvarious chapters of my dissertation.  I'm happy, incidentally, to hand
Xout copies of my KJV retrieval program.  It's a clean little program
Xthat doubtless many would find useful.  The Hebrew Bible retrieval
Xpackage I'll hand out as well, but only to fully competent Icon
Xprogrammers who feel comfortable with Hebrew and Aramaic.  This latter
Xretrieval package a much less finished product, and would almost
Xcertainly need to be hacked to work on platforms other than what I
Xhave here at home (a Xenix/386 setup with a VGA).
X	In general, I hope that someone out there will find these
Xroutines useful, if for no other reason than that it will mean that I
Xget some offsite testing.  Obviously, the whole package could have
Xbeen written/maintained in C or something that might offer much better
Xperformance.  Doing so would, however, have entailed a considerable
Xloss of flexibility, and would have required a lot more time on my
Xpart.  Right now, the retrieve package occupies about 60k of basic
Xsource files, probably half of which consists of comments.  When
Xcompiled together with a moderate-size user interface, the total
Xpackage typically comes to about 150k.  In-core size typically runs
Xabout 350k on my home machine here (a Xenix/386 box), with the basic
Xrun-time interpreter taking up a good chunk of that space all on its
Xown.  It's not a small package, but I've found it a nice base for
Xrapid prototyping and development of small to medium-size search and
Xretrieval engines.
X
X   -Richard L. Goerwitz              goer%sophist@uchicago.bitnet
X   goer@sophist.uchicago.edu         rutgers!oddjob!gide!sophist!goer
SHAR_EOF
true || echo 'restore of README.rtv failed'
rm -f _shar_wnt_.tmp
fi
rm -f _shar_seq_.tmp
echo You have unpacked the last part
exit 0

exit 0 # Just in case...
-- 
Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
Sterling Software, IMD           UUCP:     uunet!sparky!kent
Phone:    (402) 291-8300         FAX:      (402) 291-4362
Please send comp.sources.misc-related mail to kent@uunet.uu.net.


