Welcome to a small overview of the Stone Oakvalley's Text Database Searcher (SOTDS) Suite.

Note: SOTDS logic is based on a static database concept, meaning you can not add items quickly,
or even after it was constructed and compiled. If you have a database already, or want to add
just an single item or change just 1 single character, you have to do so in the original .DAT
file and then re-construct the ENTIRE database again with the Constructor. 

It may seem harsh and useless, but the idea behind SOTDS was to create the fastest possible
search for collections, of any size, that would not change too much. Imagine a written book,
never to be changed by author, can be viewed as a static database. Or, imagine you have
gadzillion of files from an old computer system which you know is 100% complete,
that too can be called a static database.

Now, especially for old computer system and their files, example Commodore Amiga Oriented ones,
finding filenames can be a very tiresome process and the .ADF diskimages and archives contains
paths and filenames, never before been properly indexed perhaps, which ignited my idea for the
SOTDS concept. After many many years of hard coding it emerges itself as The SOTDS Suite!


post@stone-oakvalley-studios.com
www.stone-oakvalley-studios.com


******** SEE BOTTOM OF THIS README FILE FOR REVISION HISTORY **********


You can read more at the following posts:
-----------------------------------------
http://www.stone-oakvalley-studios.com/post.php?id=000402092014002909
http://www.stone-oakvalley-studios.com/post.php?id=000402092014001731
http://www.stone-oakvalley-studios.com/post.php?id=000402092014202159
http://www.stone-oakvalley-studios.com/post.php?id=000420092014230354
http://www.stone-oakvalley-studios.com/post.php?id=000405092014033947

or visit the main page for SOTDS
http://www.stone-oakvalley-studios.com/0004_01_dashboard_index.php


Quick introduction for the SOTDS .DAT format:
(example based on SOS_TEKNO_Filename+Filesize+Path+Location_Database.dat which are included as example in SOTDS Suite installer)

1: ABCD
2: tekno_games_011999_cd2.bin670047168tekno99 
3: / audiow32.dll 112128 
4: games/dos/ 1ral11.zip 6958637 
5: games/ burndemo.zip 7132257 
6: etc.....


1: ABCD refers to internal logic, known as PART A,B,C,D, where by default
   A: Source + Source Size + Source Name
   B: Path or Paths Name
   C: Filename
   D: Filesize   
   
2:  means start of new source (which can have many sub-entries, can be thought of as a "container").
   "tekno_games_011999_cd2.bin" is the actual CD Image file used to index paths, filenames and filesizes.
    means start of Source Size string (filesize of the actual CD image).
    means start of Source Name string (just diskname of CD image). 
   
3: Paths either "/" for root, "dos/" for single path, or "games/dos/" as several paths, always ending with "/". 
   If ABCD was specificed at first line of database, PART B cannot occur in length of 0. You have to add at least / as root)
   
   Then $0 again to split between end of path and beginning of filename
   Lastly $0 to split filename end, and filesize start.
   
4-5: Same thing as in Point 3, but showing several paths.   

6: Step 3 is repeated until end of contents of "container" was reached. Next container starts again from point 2:

   .DAT file does not have to end with any special tag.

It should be noted, that PART A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z has some strict rules of formatting regarding text and numerics only:
A: Source + Source Size + Source Name = TEXT/NUMERIC + NUMERIC ONLY + TEXT/NUMERIC
B: TextField1/    = TEXT/NUMERIC, but must end with / (can later be removed in search engine with INI flag)
C: TextField2     = TEXT/NUMERIC
D: Numeric Field1 = NUMERIC ONLY
E: TextField3     = TEXT/NUMERIC
F: TextField4     = TEXT/NUMERIC
G: TextField5     = TEXT/NUMERIC
H: Numeric Field2 = NUMERIC ONLY
I: TextField6     = TEXT/NUMERIC
J: TextField7     = TEXT/NUMERIC
K: Numeric Field3 = NUMERIC ONLY
L: Numeric Field4 = NUMERIC ONLY
M: Numeric Field5 = NUMERIC ONLY
N: TextField8     = TEXT/NUMERIC
O: TextField9     = TEXT/NUMERIC
P: TextField10     = TEXT/NUMERIC
Q: TextField11     = TEXT/NUMERIC
R: TextField12     = TEXT/NUMERIC
S: TextField13     = TEXT/NUMERIC
T: TextField14     = TEXT/NUMERIC
U: TextField15     = TEXT/NUMERIC
V: TextField16     = TEXT/NUMERIC
W: Numeric Field6 = NUMERIC ONLY
X: Numeric Field7 = NUMERIC ONLY
Y: Numeric Field8 = NUMERIC ONLY
Z: TextField19     = TEXT/NUMERIC


The .DAT file should always indicate how many types of PARTS you are using. Any mix of ABCDEFGHIJKLMNOPQRSTUVWXYZ is allowed, such as:
ABCDEFGHIJK
ABCFGLM
ABHNO
ADO
ACDE
ACE
ADG
ABD
etc...

They should be in alphabetical order, so "DHBA" is not possible, should be "ABDH".

What you put in of text data is up to you, as long as you are aware of the NUMERIC ONLY places,
in which end, if TEXT was detected in NUMERIC ONLY parts, the Constructor might crash, and the
Search Engine give crazy results out, even crashes!

There are currently NO KNOWN limits of data lenghts or amount of any PART A (containers),
PART B, C, D, E, F and H entries, and I have successfully compiled databases with raw data over 1GB,
more or less 180million rows of data without any significant impact on Search Speed or excessive memory use (still below <700mb).

Constructing however, is always slow, even for tiny databases. But even if Constructing seems slow,
imagine it actually pre-calculates every word, and even partial matches in words and the fact that
EVERY available search term that would actually result in at least 1 results is processed during
that time, not to forget the initial SOTDS concept of static database logic and structure,
it doesn't look that bad after all, when search results and search speeds are calculated even before you can blink your eyes.



Sorry for the quick and dirty text manual, revision history and lame SOTDS DAT specification. A better colored PDF in future will
be made available when time permits!








:::: ABOUT SOTDS SEARCHER :::
-----------------------------
The Search Engine Software

The main tool to enable you to search for anything you want!

Make sure you download any of my ready-made databases, or simply use my Tools to start
indexing yourselves (currently only 1 tool is available for release).

Usage: Gui Driven, simply start SOTDS_Searcher.exe and select a database. The rest is pretty obvious, no tricks to learn :-)







::: ABOUT SOTDS CONSTRUCTOR :::
-----------------------------
Compiles, compresses and indexes a SOTDS .DAT file. Note, constructing is slow, could take
many hours to complete. 

About compression (which both impacts on constructing and search speed time, as well as diskspace needed).

0 = BriefLZ gives bigger files and slower search speeds (uncompression based). Compression is faster.
1 = ZIP gives fair filesizes and fast search speed (uncompression based). Compression is fairly fast.
2 = LZMA gives smallest filesizes, but medium search speed (uncompression based). Compression is very slow.

A quick test gives us an slight overview:
zip - 36mb database size: 50 shown / 56101 hits for: the in 0.03s (1.47s)
lzma,7z - 30mb database size: 50 shown / 56101 hits for: the in 0.04s (1.79s)
brieflz - 50mb database size: 50 shown / 56101 hits for: the in 0.08s (1.81s)

Based on my research, ZIP (1) was chosen as default, but you are free to try the other
compression methods naturally.


Instructions as follows:
------------------------
Usage: SOTDS_Constructor.exe <file.DAT> <compression-type*> <-hindex> <-debug> <-partial-off>

Where <path/file.dat> is a SOTDS suitable formatted database
Where <compression-type> is either '0' = BriefLZ, '1' = ZIP, '2' = LZMA (7Z)
* can be omitted, thus ZIP Compression is default
Where <-hindex> will auto generate unique ID for each row for current location processed. Note: <-hindex> will use PART H. If in use already, the request will be ignore.
Where <-debug> will export PARTx.txt in current directory and keep all files created in Generated_Output/
Where <-debug2> will export ONLY attempted memory allocations.
Where <-partial-off> will not create partial hits datafiles.

-h -help or ? displays this help

Example: SOTDS_Constructor.exe test.dat
Example: SOTDS_Constructor.exe c:\testing\test.dat
Example: SOTDS_Constructor.exe test.dat 1
Example: SOTDS_Constructor.exe test.dat 1 -debug
Example: SOTDS_Constructor.exe test.dat 1 -hindex -debug
Example: SOTDS_Constructor.exe test.dat 1 -debug2


 



 
::: ABOUT SOTDS TOOL #1 :::
-----------------------------
Index Disk Structure

Will simply index your selected drives (or a chosen path) and let you store paths, filenames, dates
filesizes, MD5 Checksums, 12byte header (first 12 bytes of any file) and 4bytes Header (bytes at pos 1080-1083)
to produce a .DAT file (human readable with some special chars) for use with the SOTDS Constructor, which
after processing can be used by the SOTDS Searcher software.


Usage: Gui Driven, simply start Tool_01_SOTDS_Generator_Disk_Structure.exe and generate a database
which the SOTDS Constructor can compile, index and compress - ready for use with the SOTDS Searcher.




::: ABOUT SOTDS TOOL #2 :::
-----------------------------
Checksum Creator

In 2017-2018 I created a special updated database for Amiga Files, and this tool will simply be a
tool to generate certain 12byte, 4byte and MD5 checksums aimed to find these within that
collection. 

Usage: Gui Driven, simply start Tool_02_SOTDS_Checksum_Creator.exe and drop a file into the
window. It will generate a 12byte, 4byte headers and the MD5 checksum, ready to be
used with a database that supports searching for them via the SOTDS Searcher.


::: ABOUT SOTDS TOOL #3 :::
-----------------------------
PDF Indexer

Allows for user to create their own SOTDS .DAT datafiles and compile a ready-to-use database for the SOTDS Searcher/Suite.

Usage: See "Tool_03_SOTDS_PDF_Indexer_readme.txt"





::: REVISION HISTORY SOTDS CONSTRUCTOR :::
------------------------------------------
v2.4 - 29 Nov 2023
	01: Compiled with latest PureBasic v6.02LTS compiler, both 32 and 64 bit versions
	
v2.3 - 03 Jan 2022
	01: Tweaked some filesize max behaviour for module01, increased from 400mb to 600mb.
	02: Compiled with latest PureBasic v5.73LTS compiler, both 32 and 64 bit versions

v2.2 - 14 Nov 2020
	01: Fixed some filesize definitions to support QUAD numbers.
	02: Compiled with latest PureBasic v5.72LTS compiler.
	03: Created 64bit versions for entire suite.



::: REVISION HISTORY SOTDS PARTIAL WORD INDEXER :::
---------------------------------------------------
v2.1 - 29 Nov 2023
	01: Compiled with latest PureBasic v6.02LTS compiler, both 32 and 64 bit versions
	
v2.0 - 10-11 Feb 2019

01: Fixed a rare bug that would cause everything to crash down. Discovered with a database that contained high number of similar wildcard combos.
02: Changed into dynamic memory handling for last step
						

v2.0 -  28 May 2018 - 14 Jan 2019
	01: Increased the max size limit of ".SOR" files and the need to create ".SORLIST" from 200mb max to 400mb max. Eats more memory, but will increase
		extreme slow processing speed (taking hours instead of days!) for certain databases that I have created/had experience with.
	02:	Increased some external file creation of 8 chars instead of 4 chars prefixed counter (Generate_Final), to prevent limitations of creating more than 10000 files.
	03:	Some tweaks made to prevent crashes due to potentional huge files read into memory and sorted, largest datfile tested successfully was 2.7GB
	04: Entire SOTDS_Constructor was now split into "SOTDS_Constructor.exe" (as before), but with 5 additional modules that are executed. This was needed to perform
		heavy debugging during crashes of the biggest file attempted (2.7GB). Nothing changes in the command line. Tests revealed slightly decreased
		processing speed (probably due to smaller executables), but will also help me in future developments to isolate code easier.
	05: Compiled with latest PB5.70LTS		
		

v1.96 -  23 Aug 2017
	01: Replaced a couple of wrong peek and poke, (PokeB, PeekB, PokeC, PeekC and replaced with PeekA and PokeA), since SOTDS is non-unicode.
	02: Replaced CHR(value) during Writestring() with WriteAsciiCharacter() instead as this caused bugs in all previous versions since v1.9
	03: Asc() replaced with *ascii=Ascii() to prevent Unicode vs old-school ASCII bullshit problems.
	04: Support for chars 129,141,143,144,157 were removed as these are basically blank chars and has no meaning to display/search for
	05: Added CPUName() to .INI file (comments).


v1.95 - 15 Aug 2017
	01: Fixed a bug when creating INI "Column Name" and "CX=Part C Extension", it was sometimes doubled and also misplaced in INI file (only for databases using lots of parts)
	02: String bug in export code for INI file and CX parameter: "_colde$" should be "_coldef$"
	03: Fixed a sorting bug for INI file where AX and CX parameters are at bottom of INI "Column Name" list, used 254 and 255 chars to make that happen.
	04: IJKLMNOPQSRTUVWXYZBCDEFGHA export into INI file was buggy, skewed by 1 tab. FIXED NOW.

	
v1.9 - 17 Apr 2017
	01: To comply with PB5.60 compiler several internal commands revised with #PB_Ascii, PokeA, PeekA, PokeS, PeekS, Memorystringlength etc.
	02: Nothing functional added, simply a developer release to be future compliant with latest programming language compiler.


v1.8 - 28 Feb 2017
	01: Added support for Part P,Q,R,S,T,U,V,W,X,Y,Z as well. Re-wrote all parts of code with macros for more stable "typical" dupe-code. 

	
v1.7 - 29 Apr 2016
	01: Fixed a stupid bug that detected PART J to be processed partly as PART I, causing a crash/dead-stuck neverending loop (PART J was introduced in v1.5)
    02: Fixed a stupid bug if wildcards were indexed and not 1 entry in the current part contained 3 chars minimum at all, the partial process is ignored now, before it simply crashed Constructor, assuming there was always 3 chars available.
    03: Improved merging of files bug (introduced in v1.6, but didn't work as expected for really large databases), fixed now!
    04: Added a command line flag, "-debug2" if entered, the attempted allocation of memoryblocks above 20mb will be logged. "-debug" function as before, but both of them cannot be used at the same time

                     

v1.6 - 14 Feb 2016  
    01: Added missing parts for -DEBUG command
    02: Changed merging of files code, now slightly faster in some cases.

	
v1.5 - 08 Feb 2016  
    01: Added support for part IJKLMNO, where KLM is strictly numeric, the IJNO = text/numeric 
    02: Compiled with PureBasic V5.41LTS just to make sure. No other changes adjusted. 1 bug fixed.
    03: SOTDS_Searcher has been updated to support the same new parts added, namely IJKLMNO 


v1.4 - 08 Nov 2015
	01: Compiled with PureBasic V5.40LTS just to make sure, several adjustment in code to adjust to the latest PB version.
	02: Changed #PB_PackerPlugin_BriefLZ     1651666042 to 4
	03: Changed #PB_PackerPlugin_Zip         8022384 to 1 
	04: Changed #PB_PackerPlugin_Lzma        1819962721 to 2


v1.3 - 07 Aug 2015 - Phew, that was a marathon of coding!
	01: Transformed PART B into regular PART C logic, since PATHS or SUBPATHS can anyway be searched upon in partial mode. Previous B1 and B2 is now only B2 code.
	02: Added also PART E,F,G,H to allow even more fields.  Part H is also forced to NUMERIC just for convenience, since its fast to search for numbers like PART D was.
	03: All related tools such as Constructor, Partial and Searcher along with some databases was also fixed, converted, as PART B is no longer splitted, but simple stored AS-IS with / intact!
	04: All GUI related code has been removed, as in GUI mode everything runs slower. Command line output is already informing about conversions, as well as log files.
	05: Fixed possible problems related to BAT file mergering and execution, could sometimes fail to create file with no error reported, but final database would be screwed somehow. Fixed Now
	06: Moved processing of Partial Word Generator to appear later in the code, to not interfere or run multiple times during main operation, but rather in sequence as oppose to parallell.
	07: A bunch of other duplicated code was trimmed and improved.
	08: Added extra flag "-HINDEX" which automatically generates an unique ID for each entry that belongs inside the same LOCATION container. This feature will use PART H. It will create an unique id by counting from 1 and up. If PART H is detected already in the database, HINDEX will not create any unique ID. In other terms, you can add your own counting ID for each location, but to save original DAT filesize, you can use this option instead. Once created, this feature can be used to re-create the entire contents of a PDF page, directory structures (that was originall .zip, .adf and so fourth). Further, any PARTIAL word generation of this PART H will be disabled to ensure a stable operation and smaller databases (not needed, as its function is isolated to showing an UNIQUE id group only) and finding partial hits for UNIQUE numbers shouldn't be needed (partial can be used on everything else anyway). This option are most useful if you have a database with directory/file/path/filesize structure. For PDF databases, PARTH should be used as pagenumber reference, and thus -HINDEX should not be used.
    09: Removed the need for generating and loading "CAL" calibration files during initial splitting. Done on-the-fly-to-disk now, with limited buffers exported (as before, only internal change).
	10: Cleaned up Console output and added colors and with minor layout changes.








::: REVISION HISTORY SOTDS SEARCHER :::
---------------------------------------
v3.4 - 29 Nov 2023
	01: Compiled with latest PureBasic v6.02LTS compiler, both 32 and 64 bit versions
	

v3.3 - 03 Jan 2022
	01: Compiled with latest PureBasic v5.73LTS compiler, both 32 and 64 bit versions


v3.2 - 14 Nov 2020
	01: Removed minor code to prevent crashes after exporting out data for 64bit version
	02: Compiled with latest PureBasic V5.72 LTS Compiler (both 32 and 64 bit versions)


v3.1 - 07 Apr 2019
	01: Added support To run "any" file based on a DoubleClick action. Note that "Local Access" must be defined with a root directory to make this work.
        Example in INI file (would run the PDF file as-is with no parameters, but can be any filetype as Windows will load default program based on its extension):
        Local Access = r:\Computer_Magazines_Collection\
        DoubleClick Action = |||#A1[%file]

        Example in INI file (as v3.0 with optional command line parameter for a specific program, like Adobe Reader with page lookup)
        Local Access = r:\Computer_Magazines_Collection\
        DoubleClick Action = C:\Program Files (x86)\Adobe\Acrobat 9.0\Acrobat\Acrobat.exe|/A|page=#H1|#A1[%file]                     


v3.0 - 17 Mar 2019
	01: Added support for new logic in ini file, with "DoubleClick Action" where you can define executable and params to be executed from within SOTDS.
		Check  Tool_03_SOTDS_PDF_Indexer_readme.txt   for usage and examples)
	02: Fixed potentional bug if there wasn't any "PARTIAL" datafile available for the current processed part. Fixed now. 


v2.99 - 10-12 Feb 2019
	01: Added support for new flag "-partial-off" in SOTDS_Constructor in which the Searcher software will disable this if detected.
	    If this was configured in SOTDS_Contructor it will also automcatically ignore/delete any EXTENSION PARTS (AX,CX) as they rely fully on Partial/Wildcard Logic


v2.97 - v2.98 (May 2018 - 14 Jan 2019)
	01: Replaced some internal memory to array code (Global Dim X6_Package.l(0) and ReadArrayFromFileLong(X6_Package.l(),index_size.q,*mem_index_unpacked_#za))
		to use unpacked memory blocks instead. The reason was crashes detected on a 2.3gb SOTDS database. Macro Process_Direct_Hits(za) and Macro Process_Partial_HitPoints(za)
		was tweaked and tested to be working good for 2.3GB database in testing.
	02:	"Thanks" to BILL GATES and his flawed business man logic to predict the future of bits and bytes, keeping a 1.5GB limit (and not fixing it) for 32bit applications. 
	03:	Fixed a potentional bug in gadget gui creation if there was no PART A NAME and SIZE available.
	04:	Added tab style code at the end of CSV file, just like HTML has.
	05: Tweaked some memory handling, as latest PB5.70 at least pointed me in some kind of direction of where the actual error occured (memory overflow) previously, therefore 2.98 was not released just yet
	06:	SOTDS should now be "DPI AWARE" due to new compiler option in the latest PB5.70. Tested and works as intended, super!
	07:	Due to the mentioned BILL GATES incident as discovered last May, I also created handler for catching this and tells you to use the 64bit version instead.
	08: Added 64bit executable to overcome the BILL GATES incident problem
	09:	Added history via button \/ next to search input field. Will store every search with no limits, so you can enter them later. ".history" file is placed inside database directory for the current database openend.
	10: The new history function supports which search style (type of PART/field/tab) and if partial was on or off, additionally it will not store same entry twice, so its intelligent too that way
	11: Compiled with latest PB5.70LTS
	

v2.96 - 24 Aug 2017
	01: Replaced some Asc() with *ascii=AScii() as certain Unicode chars matches 0-255 standard ascii to prevent issues with searching for chars in range 128-160
	02:	Also made sure All characters from 0-255 (including those which clash with UNICODE stupidiy range 128-160 are illustrated as proper characters within the original 0-255 ASCII range)!
	03: Replace some CHR(>127) with ascii proper representation instead of that UNICODE bullshit.
	04: Replaced ReadArrayFromFileByte() with ReadArrayFromFileAsciiCharacter() to allow workaround for bytes over 127 becoming unicode = some wildcard searches failed!



v2.95 - 17 Apr 2017
	01: Compiled with PB5.60, some internal code changes needed to comply with latest PureBasic compiler.
	02: Added missing Export HTML bug if parts P,Q,R,S,T,U,V,W,X,Y,Z was used in database (didn't export)
	03: PeekS(), Readfile(), and MemoryStringLength() with #PB_Ascii flag
	04: ReadArrayFromFileByte() tweaked instead of .c() to .b()
	05: CompareMemory(yt_a,@search$) switched to CompareMemory(yt_a,*mem_search) and memory bank holding the search$ created and freed. since @search$ is not working in unicode
	06: Switched out *this_element and @Wildcard....  with proper working also in unicode/strings mode. Possibly speeding up/fixed a bug from before :-)


v2.9 - 28 Feb 2017
	01: Added support for parts P,Q,R,S,T,U,V,Z (TEXT+NUMERIC support). WXY (NUMERIC ONLY) in constructor and databases
	02: Added neat copy/paste to scrapbook functionality to act as a usefull pastebin/notepad-ish thing to store searches (removed when exists)
	03: "Visit reference website" button replaced with "?" button to allow space for new Scrapbook buttons
	04: Cleaned up Export pulldown menu to allow more space for new Scrapbook buttons
	05: New ini flag added: "Selection Setup" which indicate how a single click selection would combine parts (together with Local Access flag) to re-contruct a local directory structure


v2.8 - 20 Sep 2016 
	01: Added boxes to view clicked on item inside search hits. So it's easy to copy text from each separate parts. Appear below of search hits list and is active on clicked
     	item and its column to isolate only the word.
	02: Compiled with latest PureBasic 5.43LTS just to make sure.
	
	
v2.7 - 22 Jun 2016 
	01: Replaced progress bars with something that do not flicker (seems to be related to latest PureBasic behaviour changes, was not like this before)
	02: Fixed a bug in the "APPLY FILTER" listings, wrong results came out either totally wrong or not at all due to missing +1 counting.
	03: Minor GUI/WINDOWS improvements especially during the APPLY FILTER window (cancel, after found hits and more)


v2.6 - 11 May 2016 
	01: Added option to select a .ZIP downloaded database from my website and add into the SOTDS Suite directory automatically (instead of user having to deal with that)
        Makes it simpler to use my databases. The button is available during the "Choose SOTDS Database" popup before the search engine is initiated. After install, it will be added
        in the listview, ready to be loaded

		
v2.5 - 01/22 Apr 2016 
    01: Fixed an export bug for Extensions style HTML. Showed same entry twice in output.
    02: Removed limitation of one-instance of SOTDS using the same database
	03: Improved Extension search when typing instead of choosing from pulldown
    04: Compiled with PB5.42 LTS

	
v2.4 - 08 Feb 2016 
    01: Added support for part IJKLMNO, where KLM is strictly numeric, the IJNO = text/numeric. It means more fields are supported in entire SOTDS Suite.
    02: Tweaked some macros and added some more internally to make code cleaner and future adjustable.
    03: Reduced memory usage during startup, previously 1 million items in memory for each part were pre-allocated. This was probably overkill, so adjusted down to 10000, with automatic increase of 30000 each time until results neeeded.
    04: Minor GUI fixes and improvements, some bugs probably squeezed since V2.3 due to more macro coding.
    05: It should be noted that databases that uses the entire range of part A1A2A3BCDEFGHIJKLMNO (17 fields) can cause memory requirements increase and disk space needed for final database is increased including slower GUI updates.
    06: "Export CSV (TAB)" "Export HTML table" and "Export All Locations" where all put into a pulldown menu to save some space. Upon selection if works are before.
        Since I grouped the choices above into a pulldown menu, I had space for a filter feature. It will allow you to filter the entire current search hits found to add the logic of "MUST CONTAIN" for each available part.
        The new Filter Mode will remove permantly a complete line of fields in memory, so use with caution. If you need to get everything back, just do a search again and re-do the filtering, no problem.
        The new Filter Mode a little bit slower (just like Sort By Column function is), but has been fairly optimized to be useful at least. A progress bar was added too.
    07: "Export By Location" changed to "Export By (ID)", which makes more sense since its only active for UNIQUE_ID_MODE or SENTENCE_MODE enabled databases 
    08: Compiled with PureBasic V5.41LTS Final Release just to make sure.  


v2.3 - 08 Nov 2015
	01: Compiled with PureBasic V5.40LTS just to make sure, several adjustment in code to adjust to the latest PB version.
	02: Changed #PB_PackerPlugin_BriefLZ     1651666042 to 4
	03: Changed #PB_PackerPlugin_Zip         8022384 to 1 
	04: Changed #PB_PackerPlugin_Lzma        1819962721 to 2


v2.2 - 07 Aug 2015 - Phew, that was a marathon of coding!
	01: Removed PART B split path logic, now PART B acts the same as PART C (filename), ergo, full path is indexed. 
    02: Minimized duplicated codeblocks (added macros), so search speed is increased and more expandable in future for adding more parts and ensures safer more stable code allover.
    03: Maintained some minor bugs and prevents some possible crashes and/or memory leaks.
    04: Added support For PART E,F,G,H, where H is NUMERIC only (like Part D always was)
    05: Fixed minor bugs in export functions and rewrote the entire logic to ensure proper output (CSV/HTML)
    06: Remove support for Path_Char in INI file, not needed now as PART B had changed logic. Constructor and databases updated too.
    07: Removed support for HH:MM:SS conversion in both search engine and INI file, not needed anymore as by adding more parts, it would only slow down search engine (introduced for 3 weeks in v2.1)
    08: Approx 200kb of written code was removed and replaced by macro and other tricks to ensure faster and more stable operation. SourceCode is now approx 526kb as of this release.
    09: Added "Sentence Mode" to INI (values from 2 to max 5 allowed) and updated some databases to support it (RAWTEXT and PDF based ones), which utilize a 2,3,4 or 5 word sentence logic, so its more helpful than before with just a single word given back. No major code added to support this, its a simple organizing of columns locked to PART BCEFG and some header coloring to indicate which position the word was found in. Basically its a "first word", "last word", "middle word", "left middle word", "right middle word" at max. Another neat "side effect" of this search mode is to search for a page number (in PDF databases) which would actually represent the entire page of text orginally extracted from that page.
	10: Added "Export By Location", which is an incredible new feature that allows you to export the entire contents (as found) grouped by location name (which are useally unique). It will therefore create a nice HTML output style (with your selected locations to export), thus enabling to for instance export an entire page of text as found originally in the PDF during constructing. In other solutions, it will export the entire contents of a zip file, or Amiga ADF disk image or similar entry that contained more than just one row of data, simply because it would group by location name and its unique ID. This is a simple, effective but cool feature to know more about the location you found a interresting searched-for-word. It's pretty easy to export, simply do a query in the tab that has " (ID) " (in the databases that support it), choose the locations you want and all things are exported nicely into a block-html style
	11: If databases support the new PARTH (ID) mode, you can click on a selected search hit result with right mouse button, to get a menu with "Inspect ID", which will simply switch to the "Unique (ID)" tab, insert the number as selected  and perform a search. (so you dont have to memorize an Unique ID number for instance). The menu will not be available unless the databases has either Sentence Mode on and/or Unique ID (PartH) configured already.
    12: Various minor gui changes and info added here and there.
    13: Added button to configure/assign an "Local Access" path during the load database selection screen. It means you can assign a prefix path, like "C:\MyTOSEC-Archive\". During searching for filenames, this path will be added to the internal working, which means if you double click on a search hit (path or direct to a filename), it will either use Total Commander (if installed) or file explorer to open up the location of the file and thus you can access it locally and convenient. It should be noted that NONE of my databases support this, as my released databases are either custom-made, or slightly modified directory structure that does not exists anywhere else out there. This option is primarly for those who actually use my SOTDS Constructor tool to index their own harddrives and collections. If you are still old-school, you can modify the .INI entry "Local Access" yourselves too!
    14: Overall performance in search speed has been detected ONCE again :-)


v2.1 - 10 Jul 2015 
	01: Added auto-adjustment to allow all 50 items in list at the same time. In full mode, window requirements are 1280x1024 or more (1280x965), in small mode at least 1280x590
	02: Added "Load New Database" button, which bascially just exists, create a bat file and starts a new popup :-) Simple, and effective. 
	03: New flag feature added in Searcher/INI file to convert numeric values into hh:mm:ss time format. Usefull for song databases. Value is stored as seconds, but converted into appropriate format as specified in INI flag (if exists)
		Note: an example flag reads: "Seconds as = AD|HH:MM:SS", where we tell search engine to convert Part A,D,H to Hour:Minute:Seconds (when found). Does not work for any other PARTS as converting a text word into seconds are pointless :-)
		Possible combinations are any mix of "HH:MM:SS" in any order or style, like "MM" only, or "HH:SS" and so fourth.
		Features above added as result of including SOASC= and SOAMC= MP3 databases for release during early July 2015 (with re-release in August 2015).
	04: Adjusted the search speed timer to show 6 digits instead of 2.
	05: Adjusted and cleanup for the "About SOTDS" HTML (Installed Database output), visual fix only
	06: Added missing EXPORT CSV/HTML for with codestyles that has no A2, A3 in them, like CXD1A1, A1, C1D1A1 etc (produced by Tool_01_Generator_Disk_Structure.exe)

	






	
::: REVISION HISTORY SOTDS Generator Tool #1 (Index Disk Structure) :::
-----------------------------------------------------------------------
v2.0 - 29 Nov 2023
	01: Compiled with latest PureBasic v6.02LTS compiler, both 32 and 64 bit versions
	
	
v1.9 - 03 Jan 2022
	01: Compiled with latest PureBasic v5.73LTS compiler, both 32 and 64 bit versions


v1.8 - 07 Apr 2019
	01: Added MD5 checksum support, along with 12-byte header and 4-byte header to be stored = allow for even more searchability and filtering for SOTDS Searcher/your collection!
		A= FULL/LOCATION/PATH        (like "c:\windows\")
		B= Filedate as DD MMM YYYY   (like "27 jul 2015")
		C= Filename                  (like "booter.dll")
		D= Filesize                  (like "49152")
		E= Filetime as HH:MM         (like "15:34" - 24hour clock
		F= MD5 Checksum              (like "41ef3e09b80aec71a7851c1554229b94")
		G= 12byte header             (like "377abcaf271c00032be317ba")
		I= 4byte header              (like "8383e5ee")
	02: Added support for "DoubleClick Action". Allows you to click on results in SOTDS Searcher and simply "run" the item (to automatically run mp3, pdf, images or any file) by using standard Windows default programs assigned                      		


v1.7 - 15 Jan 2017 
	01: Compiled with latest PB5.70LTS
	02: Nothing functional added.


v1.6 - 17 Apr 2017 
	01: To comply with PB5.60 compiler several internal commands revised with #PB_Ascii, PokeA, PeekA, PokeS, PeekS, Memorystringlength etc.
	02: Nothing functional added, simply a developer release to be future compliant with latest programming language compiler.


v1.5 - 08 Nov 2015
	01: Compiled with PureBasic V5.40LTS just to make sure, several adjustment in code to adjust to the latest PB version.

	
v1.4 - 07 Aug 2015
	01: Reworked code as PART B (paths are no longer appear in split form),added use of other PARTS instead and remove PATH CHAR in INI file export
	02: Instead of PART ABCD beeing used, the new structure is ABCDE
	A = FULL/LOCATION/PATH        (like  c:\windows\)
	B = Filedate as DD MMM YYYY   (like 27 jul 2015)
	C = Filename                  (like booter.dll)
	D = Filesize                  (like 49152)
	E = Filetime as HH:MM         (15:34) - 24hour clock
	Or without Datestamp, only used parts are ACD with no date and filetime naturally.


v1.2 - 10 Jul 2015
	01: Added option to select a directory instead of entire disk. Only one directory can be chosen, but everything within it will be indexed.
		This is just an quick update, maybe in future, a selection for adding other directories on a list might be added as feature.
	02: Fixed a text bug where driveletter appeared in uppercase, now fixed to lowercase (needed by the entire SOTDS Suite)
	03: Added question to construct and index database created during runtime to prepare it for searching for SOTDS Searcher


	
	
	

	
::: REVISION HISTORY SOTDS Generator Tool #3 (PDF Indexer) :::
--------------------------------------------------------------
v1.4 - 29 Nov 2023
	01: Compiled with latest PureBasic v6.02LTS compiler, both 32 and 64 bit versions
	

v1.3 - 03 Jan 2022
	01: Compiled with latest PureBasic v5.73LTS compiler, both 32 and 64 bit versions


v1.2  15 Apr 2020:
	01: Fixed severe bugs with some of the sentence modes (8,9,10,11,12,13,14,15,16 would cut first char of words here and there). Fixed now.


v1.1  17 Mar 2019:
	01: Added support for "DoubleClick Action" flag in ini file. Check readme for usage and examples.


v1.0 - 13 Mar 2019:
	01: Works as intended. All words are lowercased (as per SOTDS standards) and typically non human readable characters fully removed. Supports single word indexing or sentence mode (up to 16 words in a row).


