home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / clipart / merge-it.zip / MERGEIT.DOC < prev    next >
Text File  |  1991-06-12  |  28KB  |  516 lines

  1.                                                         20 May '91   dld
  2.     DOCUMENTATION FOR MERGING HAND SCANNER IMAGES WRITTEN TO PCX FILES
  3.  
  4. By making a simple frame + edge guide to scan images with, you can more easily
  5. merge scanned sections of a document which are in the "PCX" image file format.
  6. The program MergeIt (TM) can merge scanned images together either horizontally
  7. or vertically. Automatic merging will a good job of joining scanned image
  8. sections. The resultant merged image is displayed as it is built, enabling
  9. progressive user trimming.
  10. Whole letter or legal sized page images can be built from hand scanned
  11. sections that are very nearly indistinguishable from the whole page
  12. flat-bed scanners.
  13. MergeIt will display the merged image regions on Hercules, EGA, and VGA video
  14. systems. The automatic merge process will be most successful if a mechanical
  15. straight edge is used on the left side to guide the hand scanner. In
  16. particular, any twisting of the scanner will distort the image in ways that no
  17. software can correct. With a modest amount of preparation, MergeIt will make
  18. full page documents that are readily faxable or importable into painting and
  19. drawing programs that use the PCX format.
  20.  
  21. The shareware version of MergeIt is limited to merging 2 image sections
  22. and the merged output image file is named "ImageOut.PCX".
  23. The registered version of MergeIt will merge up to 5 image sections and
  24. does not restrict the output file name. See "Register.Txt".
  25.  
  26. *** See "Frame.Doc" for more information on building a scanning frame. ***
  27.  
  28. For descriptive purposes and orientation, scanned image sections will be
  29. described as being generated by moving from the top to the bottom of a frame
  30. which holds the image being scanned. The image may be in a portrait or
  31. landscape orientation. Reference blocks (see next section) are at the top edge
  32. of the image, the regions to be cut and merged are at the left and right sides
  33. of the scanned image. The top and bottom image edges just need to be cut. The
  34. image is scanned right to left, with the scanned image file numbering
  35. starting on the right. (If the image scanned is an ordinary sheet of text laid
  36. on its side in landscape orientation, the top of the text should be on the
  37. right).
  38.  
  39. Automatic merging of scanned image sections is dependent on the detection and
  40. measurement of black reference blocks on the top edge of the image sections,
  41. within 1.5" of the left and right edges. These black blocks must
  42. exist on a white background to enable clean detection. "Frame.Doc" gives more
  43. information on how to set this up.
  44.  
  45. Using MergeIt comes more naturally with a little practice. Since it is an
  46. unusual mixture of mechanical setup and software, give yourself some time
  47. to become fluent in adjusting and using it. The reward of having full sized,
  48. merged images from almost any printed source for the modest cost of a hand
  49. scanner (and MergeIt!) will make it worthwhile.
  50. Enjoy!
  51.  
  52.                Image Analysis for Locating Reference Blocks
  53.  
  54. The top 1.0" of the scanned image is analyzed for left and right reference
  55. blocks within 1.5" of the left and right edges. The detected reference blocks
  56. must have a minimum height of 0.1" to be valid. For calculations, the bottom
  57. 0.01" of each block is ignored and the next 0.08" of the blocks are used to
  58. calculate critical left and right block edges and block widths. The bottom
  59. 0.01" is skipped to avoid averaging spurious partial block image lines.
  60.  
  61.  Methods of Cutting and Merging the Vertical Left and Right Edges of Images
  62.  
  63. The left edge of a scanned image is always processed the same way. The left
  64. edge of the left top reference block acts as a vertical cutting line; the
  65. image is cut with respect to this. The user may specify an offset from this
  66. line.
  67. The right vertical edge may be cut in one of three ways:
  68. a) The simplest is a simple cut determined by a user-specified width with
  69. respect to the left cut line. This cut is usually done for the right-most
  70. scanned image since its right edge is also the edge of the document. In
  71. this case, the width is specified as the 2nd entry on line 6 in the
  72. initial values file.
  73. b) The most commonly used merge method is probably by reference block merge.
  74. The method takes the width of the left reference index block located in the
  75. image to the right and then utilizes the width of the right block in the
  76. current image to calculate how to cut the right edge so that the width of the
  77. merged block across the seam is equal to the original block width (which is
  78. user specified). For each image section you wish to merge this way, the
  79. reference block width is the 3rd entry on the corresponding line in the
  80. initial values file.
  81. c) The 3rd method is a mirror image of the way the left edge is cut. The
  82. right edge of the right reference block determines a vertical cutting line.
  83. The user may specify an offset from this. This method might be useful if
  84. you have a page of text in narrow columns (such as a magazine). Using a right
  85. white edge while scanning will cause a clean cut and merge of the adjacent
  86. text columns.  For each image section you wish to merge this way, the
  87. offset is the 4th entry on the corresponding line in the initial values file.
  88.  
  89.                   Top and Bottom Cutting of Images
  90.  
  91. The top cutting line of an image is determined from the bottom edge of the
  92. reference blocks.  If one block is lower than the other, it determines the
  93. edge. The height of the cut image is user specified and is calculated
  94. downwards from this top cutting line.
  95.  
  96.                 Command line switches (optional)
  97. 1) File name (with path if necessary) of initial values file. Ex:/image3.ini
  98. 2) Merged image filename to override name in initial values file.
  99.  
  100.       Ex: MergeIt /d:\paint\eschrB.ini /printA.pcx
  101.  Use the initial values file "eschrB.ini" in the directory "d:\paint"
  102.  and call the merged image file "printA.pcx".
  103.  
  104.  
  105.                        Initial Values File
  106.  
  107. MergeIt requires an initial values file, written as a simple ascii text
  108. file, to run.
  109.  
  110. *** Before trying to understand these entries and their meaning, I ***
  111.     suggest you look at "Frame.Doc"  (if you haven't already) for
  112.     a physical orientation.
  113.     In addition, you might want to see the line by line image
  114.     analysis described in the latter part of "Tutor.Doc".
  115.     A sample initial values file to look at and use is "EschrB.Ini"
  116.  
  117.  
  118. Line by line description:
  119.  (line indices are for description only, do NOT include in actual file)
  120.  {Starting on line 5, all floating point numbers are inches,
  121.   + is in the left direction on the scanned image section}
  122.  
  123. 1)Scan#.PCX           {Scanned Image Filename, "#" denotes increment position
  124.                        in name, scanned images move from right=>left}
  125.  
  126. 2)1 3                 {Index to start input files at, number of images to merge
  127.                       i.e. scan1.pcx, scan2.pcx, scan3.pcx }
  128.  
  129. 3)PageOut.PCX         {Merged Image Filename to use}
  130.  
  131. 4)25  12  0           {a) Dark Threshold (maximum % of dots that can be white
  132.                           in the averaging of dot segments, in this case up to
  133.                           3 out of 12 dots could be white),
  134.                        b) # Dots to use in averaged dot segments, a number
  135.                           <2.0 is interpreted as a dimension in inches to
  136.                           average (and the appropriate number of dots are
  137.                           calculated). If an odd number of dots is specified,
  138.                           it is incremented to an even number.
  139.                        c) millisecs to view each line of analysis, called
  140.                           Msec-Debug, see below}
  141.  
  142. 5)0.0  8.4 4.0 3.5    General image cutting values:
  143.                       {a) Top edge offset to trim down from for all image
  144.                           sections,
  145.                        b) height of outputed merged image,
  146.                        c) scanned image width,
  147.                        d) spacing between reference blocks}
  148. 6)0.0  3.5 0.0 0.0  0.0
  149.                      Values for cutting and merging the first scanned image
  150.                      (the rightmost image):
  151.                     {a) Inches to trim left image edge, with reference to
  152.                          straight edge white/black boundary
  153.                      b) Width to cut image at right edge. If this value
  154.                         is 0.0 then the program will cut the right edge
  155.                         by the next method and value ("c")
  156.                      c) Set right edge to merge with adjacent image on
  157.                         the basis of total width of black index block which
  158.                         is read here. The width is determined by the frame
  159.                         setup you use. If this value is 0.0 then the program
  160.                         will cut the right edge by the next method
  161.                         and value ("d")
  162.                      d) Cut right edge on the basis of the black/white
  163.                         boundary. Use this number of inches to shift left/
  164.                         right from boundary. This value may be 0.0
  165.                      e) Top Line Offset for this image only. To be added to
  166.                         global offset above.}
  167.  
  168. 7)0.0  0.0 1.0 0.0   0.0
  169.                      Values for cutting and merging the next scanned image
  170.                      (to the left of the above image):
  171.                     {a) Inches to trim left image edge, with reference to
  172.                         straight edge white/black boundary
  173.                      b) Width to cut image at right edge, if 0.0 then
  174.                         program will read next value..
  175.                      c) Set right edge to merge with adjacent image on
  176.                         the basis of total width of black index block which
  177.                         is read. The total width is determined by the
  178.                         frame setup you use. If 0.0 then program will
  179.                         read next value..
  180.                      d) Cut right edge on the basis of the black/white
  181.                         boundary. Use this number of inches to shift left/
  182.                         right from boundary. This value may be 0.0
  183.                      e) Top Line Offset for this image only. To be added
  184.                         to global offset on line 5.}
  185.  
  186. 8)0.0   0.0 1.0 0.0   0.0
  187.                      Values for cutting and merging the next scanned image
  188.                      (to the left of the above image):
  189.                     {a) Inches to trim left image edge, with reference to
  190.                          straight edge white/black boundary
  191.                      b) Width to cut image at right edge, if 0.0 then
  192.                         move on to..
  193.                      c) Set right edge to merge with adjacent image on
  194.                         the basis of total width of black index block which
  195.                         is read. Set value from frame setup. If 0.0
  196.                         then move on to..
  197.                      d) Cut right edge on the basis of the black/white
  198.                         boundary. Use this number of inches to shift left/
  199.                         right from boundary.
  200.                      e) Top Line Offset for this image only. To be
  201.                         added to global offset on line 5.}
  202.  
  203. Display of image line analysis (Msec-Debug):
  204. The value of Msec-Debug determines how much reference block analysis
  205. is displayed.  If Msec value=1, then a summary of each image's analysis is
  206. displayed after all lines in an image section are analyzed.
  207. If  Msec value is >1, then the individual line analysis
  208. is shown for the # of Millisec specified in addition to the previous
  209. information.
  210. If Msec value=0, then only the actual image segments will be
  211. displayed for user trimming. If Msec value is <0, then image viewing and
  212. user trimming will be bypassed. The image will be simply automatically
  213. merged on the basis of the reference block analysis.
  214.  
  215.  
  216.                Error Messages When Running MergeIt
  217.  
  218. Errors may be divided into 3 groups: system, input and analysis, and cutting.
  219.  
  220. System: the program will halt
  221. If there isn't enough memory to run the program (the program grows somewhat
  222. in size as more images must be merged).
  223. If an initial values file or image file is not found.
  224. If there is no more disk space to store a combined image file.
  225.  
  226. Input and Analysis: the program will halt
  227. If the initial values file has invalid numerical entries.
  228. If the image files do not appear to be PCX files or PCX scanner files.
  229.  
  230. One or both reference blocks may not be detected in the top left and right
  231. regions that the program analyzes. The left block is always required for
  232. determining the left vertical cutting line. The right block is not important
  233. if vertical cutting method 1 is used. Analysis will be finished more quickly
  234. if a right block is detected, however.
  235.  
  236. The bottom edge of one or both reference blocks may never be reached within
  237. the limits of the top region which program analyzes.
  238.  
  239. Cutting
  240. After determining the desired boundaries for the cut image, including any user
  241. offsets, the image available may be smaller than needed. This is most commonly
  242. the case if a user offset extends a cutting edge beyond the image. The program
  243. prompts you to approve cutting adjustments if image available is too small.
  244.  
  245.                  Special Input Image Considerations
  246.  
  247. Most documents to be scanned and merged will be on white/off-white paper and
  248. will be easily distinguished by the program from the reference blocks. This
  249. is necessary to determine the top edge of the cut image. If the document is
  250. too dark, a plain white border of 1/16" or more may tacked to the top of the
  251. document (perhaps by simply attaching a plain piece of paper to the back).
  252. The user may then specify a top edge offset to obtain the desired cut image.
  253.  
  254. If the document to be scanned is a simple page of full width text, then
  255. merging is straightforward.
  256. If the images' edges to be merged just contain adjacent lines of text or text
  257. and picture then you will probably get a very satisfactory merge the 1st time,
  258. automatically, without any user trimming.
  259. If you are attempting to merge a diagram or picture across image sections then
  260. you may sometimes find the automatic merge to be unacceptable. The strength of
  261. MergeIt is its absolute repeatability (if the same images and initial values
  262. file are used) and its predictability if the initial values file is changed
  263. with respect to user offsets. This allows you to make shifts in the merge
  264. process down to the single dot row level. By keeping a record of small trim
  265. adjustments, you can make small corrections to the initial values file to
  266. improve the automatic merge process. MergeIt can NOT automatically compensate
  267. for the following scanned image errors:
  268.  
  269.  a) One image is rotated with respect to the other. This is usually caused
  270.     by twisting the scanner unit while scanning. It can be corrected by using
  271.     a left vertical guide edge and attaching a lower guide bar to the scanner
  272.     handle. No software can correct this well.
  273.  b) One image is shorter than the other. While moving the scanner, the
  274.     tracking roller on the bottom got stuck or skipped. Perhaps there is some
  275.     dirt on it that is changing its diameter (and therefore possibly changing
  276.     the apparent distance being scanned). Perhaps you moved over the image too
  277.     quickly and lost proper registration. Typically hand scanners show a dot
  278.     registration variability as they roll of 1 or 2 dots/inch. The steadier
  279.     and more repeatable the image scanning stroke, the better. MergeIt allows
  280.     you to view the merge process and trim the images to compensate for this.
  281.  
  282. *** I strongly suggest that you introduce yourself to trimming images by ***
  283.          making use of the tutorial. Read "Tutor.Txt".
  284.  
  285.                     Viewing/Trimming Merged Edges
  286. Generally:
  287. Initial feedback of user trim commands is given through beeps. A single, short
  288. medium pitched beep indicates more feedback is necessary to finish the user
  289. trim operation. A double medium-high pitched beep indicates is a completed trim
  290. operation. All image trim commands may be repeated before the modified image
  291. is processed and redisplayed. Entering a simple <cr> terminates the trimming
  292. process and starts redisplay and/or merging. The end of user trimming and the
  293. restarting of image processing is signaled by a triple beep. A longer,
  294. low-pitched single beep indicates an error or trim limit has been reached.
  295. Global shifts of one scanned image with respect to another is accomplished
  296. with the cursor keys. Internal scanned image adjustments (deleted/added lines
  297. and dots) are initiated with the insert/delete keys. Up to 32 insert/delete
  298. trim operations may be performed on the merged image if not rotated. If
  299. rotated, up to 32 operations may be performed on each scanned image section.
  300.  
  301. Rotated Image Trim Process:
  302. The top and bottom margins of each rotated & scanned image will be displayed.
  303. 100 image lines will be displayed for each margin, and a short beep will sound
  304. after each margin is fully displayed. At this time some modifications are
  305. possible.
  306.  
  307. Bottom Edge Trimming:
  308. The user may shorten the image up to 16 lines. The viewed areas of the image
  309. may be shifted left or right. There MAY be a few image lines to add to the
  310. initially viewed image. Essentially, trimming should be done to erase small
  311. sections of text or picture at the bottom edge. It is NOT possible to shift
  312. the bottom edge of the image left or right since the upper edge has already
  313. been merged to the previous scanned image.
  314.  
  315. Top Edge Merging:
  316. The user can shift the top edge of an image left or right up to 16 dots, image
  317. permitting. Note that the width of the image is maintained so that the motion
  318. limits may be less than 16 dots if the scanned image doesn't have this much
  319. extra border width. The image to be merged may also be moved down by as much
  320. as 16 lines (again image border permitting). Moving this image down will cause
  321. more of this image to be included in the composite image. This image may also
  322. be moved up, cutting off more of this image at the merge boundary. There is no
  323. limit to this upward motion.
  324.  
  325. BOTTOM EDGE TRIM COMMANDS:
  326. Cursor Up/Down: Will subtract/add lines to the bottom of the image displayed
  327.                 that will then be merged with the top edge of the next
  328.                 section.
  329. Alt-V: Change a viewed image region. 2 more choices follow:
  330.   Choose: Home/End=>Select which viewed region to shift. Home is on the left,
  331.           End is on the right.
  332.   Choose: Home/End=>Move the selected view region to the adjacent left/right
  333.           section of the image.
  334. <cr>: Ends user input command and executes desired action. If no command is
  335.       entered since last <cr> then the merge process continues.
  336. 'G' : Continue merge process without viewing.
  337. 'V' : Review current image.
  338.  
  339. TOP EDGE TRIM COMMANDS:
  340. Cursor Up/Down: Will subtract/add lines to the top of the current image
  341.                 at the boundary with the previous image section's bottom edge.
  342. Insert/Delete: Insert/delete dots at the marker location for all lines in
  343.                the current displayed image section.
  344.   Command options:
  345.    Home/End: Move marker 1/8 of image width to the left/right.
  346.    SpaceBar: Move marker 1 dot to the right. (Cleared by Home/End);
  347.    Esc: Exit the insert/delete operation.
  348.    <cr>: Perform operation at current marker location, then exit operation.
  349.    '-' : Delete last command.
  350.  
  351. Left/Right cursor: Move the image left/right with respect to the above
  352.                    (previous) image section edge.
  353. Alt-V: Change a viewed image region. 2 more choices follow:
  354.   Choose: Home/End=>Select which viewed region to shift. Home is on the left,
  355.           End is on the right.
  356.   Choose: Home/End=>Move the selected view region to the adjacent left/right
  357.           section of the image.
  358. <cr>: Ends user input command and executes desired action. If no command is
  359.       entered since last <cr> then the merge process continues.
  360. 'G' : Continue merge process without viewing.
  361. 'V' : Review current image.
  362.  
  363. Unrotated Image Trim Process:
  364. Each output image line is made up of image lines from all scanned sections.
  365. Therefore some changes of image merging require that the merging process
  366. restart from the beginning.
  367. Initially, the right most 2 merge regions are shown, with the vertical
  368. boundary between the sections centered. A small marker is shown below the
  369. right region, denoting the image on the right side of this merge region as the
  370. image merge region that may be trimmed. Home/End keys may be used to change
  371. the image section to be trimmed (home is to the left). The cursor keys may be
  372. used to shift the selected region. Note that the up/down keys must shift the
  373. whole scanned region (at both merged edges). The left/right keys only shift
  374. the image at the edge that is selected. The shift limits are determined by the
  375. limits of the scanned images. The viewed merge regions may be shifted
  376. left/right (if there are >2 regions) by use of the Alt-V key followed by home
  377. or end keys. Home will shift the viewed regions 2 regions over to the left (or
  378. 1 if that is the max shift). The end key will do likewise in the right
  379. direction.
  380.  
  381. UNROTATED IMAGE TRIM COMMANDS:
  382. These two commands will force a complete remerge processing of the image:
  383.   Cursor Up/Down:   Will shift the selected image up/down.
  384.   Left/Right cursor:Move the selected image left/right with respect to the
  385.                     selected merge boundary.
  386.  
  387. Home/End: Select which viewed merge regions are modified. Home moves to the
  388.           left, End to the right.
  389.  
  390. <cr>: Ends user input command and executes desired action. If no command is
  391.       entered since last <cr> then the program continues with the merge
  392.       process.
  393.  
  394. Insert/Delete: Will allow user to insert/delete individual lines in an image
  395. region in view. The region to modify is previously selected by home/end keys.
  396.   Command options:
  397.   PgUp/PgDn: Moves a marker up/down 8 lines which marks which line to change.
  398.   SpaceBar : Moves marker down 1 line.
  399.   '+': Performs desired operation at marker location but doesn't exit
  400.        process.
  401.  <cr>: Same as '+' but also ends process.
  402.   '-': Delete last line insert/delete command.
  403. BkSpc: Delete earliest line command (as defined by the lowest line index).
  404.  
  405. Alt-V: Change the merged regions shown. This command is only valid if more
  406.        than 2 merge regions exist.
  407.   Choose: Home/End=>View merge regions to the left/right of the currently
  408.           viewed regions. If possible, two new regions will be shown; other-
  409.           wise, one new region will be shown in the direction of shift
  410.           (Home shifts left, End shifts right).
  411.  
  412. 'V' : Force a redisplay of the current region. This will automatically be
  413.       performed if a line insert/delete command was added to the viewed
  414.       region.
  415.  
  416. Note that redisplay does NOT automatically occur if the insert/delete
  417. operation was performed only at the very bottom of the viewed region. This
  418. command may be used to override a previous "G" command.
  419.  
  420. 'B' : Rebuild the entire merged image without viewing until the current
  421.       view region is reached. Useful if rebuilding is required by previous
  422.       trim commands.
  423.  
  424. 'R':  Restart the merge process with full view, modification capability.
  425.  
  426. 'G':  Continue the merge process without continuing to view or trim.
  427.  
  428.  
  429.                           Memory Issues
  430.  
  431. The program occupies about 150K bytes. A programming criterion was to enable a
  432. rotated merge of scanned image sections that are 4" wide and 9" long at
  433. 300DPI..and do this in the 640K DOS space. This requires 405K bytes to store
  434. the image to be rotated, which requires at least 555K bytes of free
  435. memory, not an impossible goal. If the scanned images do not require rotation
  436. when merging, then memory requirements are much less and won't be a concern.
  437. If there is insufficient memory available for rotation, then you may specify
  438. storage to disk (in the same directory as the other image files). For the
  439. sake of time (and your hard disk!) I recommend you do this on a RAM
  440. disk. First put the scanned images to be merged on the RAM disk before
  441. starting MergeIt.
  442. Normally, when MergeIt does a rotated merge, it stores the complete bottom
  443. lines of each image (sections of which are viewed) so that the user may change
  444. the merged sections being viewed even when the top of the next image is being
  445. processed. If memory is tight, MergeIt may ask you if you want this temporary
  446. storage to be done to disk. If you say "no", you will only be able to change
  447. the merged sections to view when just the bottom edge of a scanned image
  448. section is visible, i.e. once the top of the next image section is visible,
  449. you can't change what regions you see.
  450.  
  451.                      Fatal Program Error Message Codes
  452.   2: File not found
  453.   3: Path invalid
  454.   4: Too many files open. Perhaps the config.sys file doesn't specify enough
  455.      open files. Set to "Files=20".
  456.   5: File could not be opened, perhaps directory is full.
  457. 101: File could not be written to since the disk is full.
  458. 106: Numerical entry in initial values file is incorrect.
  459. 203: Insufficient memory to store image.
  460.  
  461.  -3: Graphics error, driver file not found. Appropriate file (Herc.BGI,
  462. EgaVga.BGI,...) not in directory where executable program is located.
  463.  
  464.     Integrating Scanning Operation and Merging (Registered users only)
  465.  
  466. ScanIt is a small shell program to integrate the scanning and merging process.
  467. It executes the necessary image scanning utility to create the image
  468. section files and then runs "MergeIt" to put the image sections together.
  469. The process may be repeated for up to 100x, generating merged image files
  470. with names such as page1.pcx,page2.pcx,...
  471. While designed around the Logitech ScanMan DOS scanning utility, it was
  472. written to be flexible enough for adaptation. It MUST be started in the
  473. directory where itself and ALL executable files are located. The
  474. initial values file may be in a different directory. The generated
  475. image files may be stored in yet another directory.
  476.  
  477. For full documentation, see "ScanIt.Doc".
  478.  
  479. For the LogiTech Scanner, the DOS scan utility is called Scan.Exe
  480. and is run from the DOS command line with a line such as:
  481.             Scan.Exe scan1.pcx 4IN 9IN
  482. where the scanned image is written to the pcx format file "scan1.pcx"
  483. with a width of 4 in. and a length of 9 in.
  484.  
  485. Typical Input Line for use with this scan utility
  486. (best written in a batch file):
  487.   Scanit.exe Mergeit.exe /image3.ini Scan.exe [filename] [width]IN 9IN
  488.  
  489. The phrase "[filename]" is the location where ScanIt will place the scanned
  490. image filename to be created by scan.exe. when it executes the utility.
  491. The phrase "[width]" is the location where ScanIt will place the desired
  492. width to scan (in inches) when it executes scan.exe.
  493. Both of these entries are generated from the initial values file.
  494.  
  495. Typical Batch File:
  496. cd D:\PAINT
  497. D:
  498. Scanit.exe mergeit.exe /e:\scan\image3.ini Scan.exe [filename] [width]IN 9IN
  499.  
  500.                             Legal Notices
  501.  
  502. MergeIt  COPYR. 1991 Dennis DiBart ALL RIGHTS RESERVED
  503.  
  504. Disclaimer of Warranty:
  505. This software and documentation are sold "as is" and without warranties as to
  506. performance of merchantability or any other warranties whether expressed
  507. or implied. Because of the various hardware and software environments
  508. into which this program may be put, no warranty of fitness for a particular
  509. purpose is offered.
  510.  
  511. Good data processing procedure dictates that any program be thoroughly
  512. tested with non-critical data before relying on it.  The user must assume
  513. the entire risk of using the program.  Any liability of the seller will be
  514. limited exclusively to product replacement or refund of purchase price.
  515.  
  516.