Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Dirwalker - Simplistic and Ergonomic Directory Browser
#11
It's time for etude extraordinaire - the work of Mr.Krauss - the inventor of FASTEST wildcard matching.

Until last night, was not aware how ahead etudes of wildcard matching have gone, first I found the superb webpage of Dogan Kurt, he in a nutshell did all, acknowledging the previous works, offering a benchmark, and offering the second fastest function.
https://dogankurt.com/wildcard.html

I took his 'wildtest' benchmark and added Jack Handy's, Alessandro Cantatore and Mr.Krauss' functions, and my Tcheburaschka (based on the work of Alessandro).

The test machine's specifications are the following:
OS: Windows 10 64 bit, CPU: AMD Zen2 Ryzen7 4800H.
I compiled them with MinGW gcc version 11.3.0 with -O3 flag, also with CLANG 14.0.1 and Intel's ICL 19.0.0, both with -O3.

We have 87 test patterns and 95 test strings; this combination makes 8265 unique pattern-string pairs.
We repeat calls 1,000,000 times to get a better time resolution, and therefore every function's called 8,265,000,000 times.
You can download the sourcecode and the three binaries (just enter the console prompt and run '3.bat') here:

.zip   WILDTEST_wildcard_benchmark_Dogan_Kurt_modified_by_Kaze.zip (Size: 353.74 KB / Downloads: 269)


.pdf   Tcheburaschka_r3.pdf (Size: 829.64 KB / Downloads: 104)

   

   

It takes a can of beer to contemplate and discern what-is-what, the fluctuations across compilers are scary. Yet, Mr.Krauss kicks asses left and right. My hat is off to him.

Thanks a lot, Mr.Krauss, for inspirational work of yours. It is both superuseful and really eye-opening how unappreciated the SPEED/CRAFTSMANSHIP is.
"He learns not to learn and reverts to what the masses pass by."
Reply
#12
After getting around to running this program, it core-dumped on my machine, Linux/Manjaro KDE, without composition and with as few desktop effects as possible.

It does the auto-resizing bit to start, then stays several seconds on the sign-on screen and finally unexpected exit.

At first I ran the provided ELF. Reluctant to upgrade from v3.4.0 compiled this program, then did upgrade to v3.4.1. Same thing, sorry to say. Maybe it's because my computer is a general-purpose laptop with 4GB RAM. Probably I should have tried to compile this program in debug mode to offer more useful information, but I don't have "gdb" installed.

One thing that annoyed me is that I was unable to provide any proof of it.

[Image: dirwalker-zero-byte-log.png]
Reply
#13
Glad to share revision 6-, the bug causing crashes was fixed. The bug was in readdir() C header, anyway, now the parsing of files is many times faster due to ALL C source, no stupid REDIMs - just reading the whole thing in one go. 98,000+ files in 2 seconds, not bad.

The short video features, few new things:
- '`' - The Animated Search (in files list) accepts two wildcards "*" and "#" - jumps to the next file matching the pattern;
- '/' - The Filtering (in files list) accepts two wildcards "*" and "#" - leaves visible only files matching the pattern;
- Now a screensaver (as a benchmark) can be activated with F12, my laptop i5-7200U gives 88 FPS, this is on Fedora 36 with GCC 12.1 and -O3 optimizations;
- Another simple add-on is 'Dirwalker.ini' - if (this 3 lines long) file is present where the ELF/EXE is located, then it is used to override the input of FONT and the RESIZE of window.

Just use something like:

Code: (Select All)
copy con Dirwalker.ini
v
296
80
Ctrl+Z

This will act as if the 'V' font was selected and 296 columns with 80 rows were resized. For FHD i.e. 1920x1080, I use empty first line (just pressing Enter) and 222 and 60 as second and third line.




And as always, the full sourcecode and Linux/Windows binaries are 100% FREE:

.7z   Dirwalker_r6-.7z (Size: 1.97 MB / Downloads: 86)

Enfun!
"He learns not to learn and reverts to what the masses pass by."
Reply
#14
Love benchmarks, at any moment, especially on new/unknown machines, the question "How fast is that CPU-RAM-OS trio?" arises. So, it is good quickly to know how a QB64 application would behave.

Today, found that OS matters, BIGTIME, Fedora 36 with QB64 v2.0.2 (GCC v12.1 -O3) allows 90 FPS, whereas the Windows 10 QB64 v2.1 (GCC v12.1 -O3) counterpart compile/binary allowed only 39 FPS?!
Who knows why? Anybody!

   

   

Screenwise, another thing that caught my eye, recently, is the availability of 120Hz IPS panels, one such laptop is Ideapad 16 PRO, under 1000$, 120Hz 98%RGB 2560x1600 , 16". Therefore the accent on crisp fonts and high scroll speed is nicely matched by this cheap-and-easy-on-the-eyes screen. My current main laptop is Ideapad with 14" 1920x1080 60Hz, being de facto the standard for today's work, nah, my vision is deteriorating and the need-for-more characters is ever present, having 222 columns in Dirwalker's canvas is not enough, when in fullpath mode, the need is of 300+. So, I target above laptop paired with Dirwalker.

I did two benchmarks, scrollspeedFPS (getting steady 368 LPS/FPS for 395,000+ files) and torusFPS on Zen2 4800H laptop using the binary compiled with latest QB64 2.1 (GCC 12.1 -O3):

   

   

Tragedy, the powerful Zen2 cannot flex its muscles with Windows binary, 70 FPS vs 90 FPS, food for thought.

Another thing that is to be optimized in the future, avoiding arrays of strings as much as possible - they are too slow, will rewrite the parsing by ... ditching it altogether. Will use only _MEM functions fed with data by C functions.
"He learns not to learn and reverts to what the masses pass by."
Reply
#15
Glad to share revision 6, in next weeks will add more functionalities, for now I am pleased with it being the INITIAL revision. Wanna see (in the process of using it) what new ideas will come up.

One thing that I hated for a long time was the scrollbars used in all kind of applications, I see huge gaps in their "design", for example, mindlessly using the hard-to-click-on "arrows", how the hell such tiny areas can be ergonomic, the constant [re]focusing/stressing the eyes in such attempts is so inconvenient, my current answer to this atrocity is my ToolRibbon, shown on the screenshot:

   

It is auto-hiding / auto-showing when hovering outwith/within the last 3 columns. Releasing the Left Mouse Button over the highlighted Pseudo-Button duplicates the keyboard shortcuts (Ctrl+Home/End, PgUp/PgDn, Enter, Up/Dn, F1/F2/F3/F4). For example, positioning the mouse cursor over [UP] still allows scrolling a page down with Double-Click of Right-Button, the idea being - to scroll/sort/enter folders with mouse only.

In next weeks will write down all the keyboard and/or mouse combos, in a README.TXT, with examples.

The nasty delays (varying from 2 sec to 4 min) of using secondary STRING array were fixed by using Indirect Indexes, now wildcard filtering takes less than 2 seconds, tested for 3+ million filenames (quite long in order to stress the wildcard matcher) generated by this short code:

   

Code: (Select All)
'Simulate3Mfiles.bas
Randomize Timer
MkDir "MP3" 'will contain .Mp3 .mp3 .MP3
MkDir "PDF" 'will contain .Pdf .pdf .PDF
MkDir "TXT" 'will contain .Txt .txt .TXT
MkDir "WAV" 'will contain .Wav .wav .WAV
MkDir "PNG" 'will contain .Png .png .PNG
MkDir "HTM" 'will contain .Htm .htm .HTM
Do
    FileLenUpTo210% = Int(Rnd * 60) + 1
    NewFileName$ = ""
    For i = 1 To FileLenUpTo210%
        max% = 57
        min% = 48
        randNum1% = Int(Rnd * (max% - min% + 1)) + min%
        max% = 90
        min% = 65
        randNum2% = Int(Rnd * (max% - min% + 1)) + min%
        max% = 122
        min% = 97
        randNum3% = Int(Rnd * (max% - min% + 1)) + min%
        NewFileName$ = NewFileName$ + Chr$(randNum1%) + Chr$(randNum2%) + Chr$(randNum3%)
        Print "Creating '"; NewFileName$; "' ..."
    Next
    Open "MP3\" + NewFileName$ + ".1.Mp3" For Binary As #1
    Close #1
    Open "MP3\" + NewFileName$ + ".2.mp3" For Binary As #1
    Close #1
    Open "MP3\" + NewFileName$ + ".3.MP3" For Binary As #1
    Close #1
    Open "PDF\" + NewFileName$ + ".1.Pdf" For Binary As #1
    Close #1
    Open "PDF\" + NewFileName$ + ".2.pdf" For Binary As #1
    Close #1
    Open "PDF\" + NewFileName$ + ".3.PDF" For Binary As #1
    Close #1
    Open "TXT\" + NewFileName$ + ".1.Txt" For Binary As #1
    Close #1
    Open "TXT\" + NewFileName$ + ".2.txt" For Binary As #1
    Close #1
    Open "TXT\" + NewFileName$ + ".3.TXT" For Binary As #1
    Close #1
    Open "WAV\" + NewFileName$ + ".1.Wav" For Binary As #1
    Close #1
    Open "WAV\" + NewFileName$ + ".2.wav" For Binary As #1
    Close #1
    Open "WAV\" + NewFileName$ + ".3.WAV" For Binary As #1
    Close #1
    Open "PNG\" + NewFileName$ + ".1.Png" For Binary As #1
    Close #1
    Open "PNG\" + NewFileName$ + ".2.png" For Binary As #1
    Close #1
    Open "PNG\" + NewFileName$ + ".3.PNG" For Binary As #1
    Close #1
    Open "HTM\" + NewFileName$ + ".1.Htm" For Binary As #1
    Close #1
    Open "HTM\" + NewFileName$ + ".2.htm" For Binary As #1
    Close #1
    Open "HTM\" + NewFileName$ + ".3.HTM" For Binary As #1
    Close #1
    Total_Files = Total_Files + 1
Loop While Total_Files < 200000 'x18 = 3M


As a matter of fact, the Fedora 36 file explorer, Caja, turns out to be unusable when dealing with few million files, just getting the properties of such folder takes 20+ minutes?! Unacceptable, therefore it is a good idea, one to rely on one's own tools.

The full sourcecode and Linux/Windows binaries are attached:

.7z   Dirwalker_r6.7z (Size: 3.3 MB / Downloads: 72)
Enfun!
"He learns not to learn and reverts to what the masses pass by."
Reply
#16
(12-15-2022, 05:15 AM)Sanmayce Wrote: As a matter of fact, the Fedora 36 file explorer, Caja, turns out to be unusable when dealing with few million files, just getting the properties of such folder takes 20+ minutes?! Unacceptable, therefore it is a good idea, one to rely on one's own tools.

Sadly there are no better alternatives for any OS. File Explorer on Windows has always been notorious for its performance with thousands of files in a single directory. Just trying to get it to display "C:\Windows" was a headache, like on any Linux getting a file manager to show everything in "/bin" or in "/usr/bin". Then Windows10 with its baggage such as "Libraries", OneDrive just ugh. Asking for an open file requester, with the left-hand-side pane with folders and favorites and "Libraries", on my computer looked like an old man reeling with pain being asked to go to work. Maybe another user of this forum could tell us something about it, how is it like for him/her to look for a file or to open a document somewhere.

The petty scrollbars that seem to be in every "major" application on Linux... I blame GNOME for it, or might be M$'s or ApCo's fault. Whose idea was it to "hide" the vertical scrollbar and force the user to hover the mouse cursor over an edge of the window? I want a beefy scrollbar! Not with what looks shoddy, two arrow buttons right next to each other at the bottom. What is worse than that to me? Single-click to activate stuff if it's not an address link inside a web browser.

The FPS thing might have a bit to do with the recent struggles revolving around NVIDIA, around Intel MESA supported on AMD equipment, and so on, I'm rather ignorant about all of it. For games it has to be faster, faster, faster!
Reply
#17
Did finish the 'Rightside Panel' a.k.a. 'FATTY ToolRibbon' - it simply mirrors the auto-hide ToolRibbon while being ready for finger clicking (fired up with those Touch Displays, looking forward including a third way in addition to keyboard/mouse), so the latest revision 6+ is here.

.7z   Dirwalker_r6+.7z (Size: 4.24 MB / Downloads: 63)

   

The auto-hide bar is still active, the FATTY bar is hide-able and show-able via short horizontal slides (with Right Button held):

   

> Whose idea was it to "hide" the vertical scrollbar and force the user to hover the mouse cursor over an edge of the window? I want a beefy scrollbar!

I guess it is an old idea, hiding the bar is all about keeping the simplest canvas along with saving workspace, my view is that scrollbar should be both "fatty" and "slendery", the question is whether they have to be active or active-on-demand by default. Maybe, in future revisions, will add a "PIN" button. Currently, both ScrollBars/ToolRibbons are hidden/shown via a flag - easy to tweak, that is.

Also, backing-up combos TWICE or THRICE is a must, along with DoubleHit_LeftShift now holding Right Button for 4+ seconds gives an abridged properties/statistics:

   

Never used a sensory display, hope they can be a viable third option, hope fingertips can be used along with the stylus, therefore all buttons are wide enough.

Currently the init/help window shows this:

Code: (Select All)
Print "________   .__                          .__    __                   "
Print "\______ \  |__|_______ __  _  _______   |  |  |  | __  ____ _______ "
Print " |    |  \ |  |\_  __ \\ \/ \/ /\__  \  |  |  |  |/ /_/ __ \\_  __ \"
Print " |    `   \|  | |  | \/ \     /  / __ \_|  |__|    < \  ___/ |  | \/"
Print "/_______  /|__| |__|     \/\_/  (____  /|____/|__|_ \ \___  >|__|   "
Print "        \/                           \/            \/     \/        "
Print "'Dirwalker' - Linux/Windows simplistic directory browser, written by Kaze(sanmayce@sanmayce.com), revision "; revision$; ", "; revDATE$
Print "Mouse:"
Print "       Button 1 - sets the cursor and the inverse line to the chosen position; hold (without moving for 4 seconds) to quit"
Print "       Button 2 - [when held] Draws; hold (without moving for 4 seconds) - toggles Directory/Tree mode; it is as Double-LShift but shows also 'stats' in TREE mode"
Print "       Button 3 - [when released] - enters the DIRECTORY; Wheel Up/Dn - Up/Dn; Button 2 + Wheel Up/Dn - same as PgUp/PgDn"
Print "       Button 2 + dragging (sideways) for at least 3/4 of all columns/cells (within 2 seconds) - same as Alt+X, Alt+Q"
Print "       Button 2 + dragging (from top to bottom) for at least 7 lines/cells (within 2 seconds) - same as PgUp"
Print "       Button 2 + dragging (from bottom to top) for at least 7 lines/cells (within 2 seconds) - same as PgDn"
Print "       Button 2 + dragging (from left to right) for at least 1/4 of all columns/cells (within 2 seconds) - hides RightsidePanel"
Print "       Button 2 + dragging (from right to left) for at least 1/4 of all columns/cells (within 2 seconds) - shows RightsidePanel"
Print "       Button 1 + Button 1 (within 0.33 seconds) - Double-Left-Click - PgUp"
Print "       Button 2 + Button 2 (within 0.33 seconds) - Double-Right-Click - PgDn"
Print "Mouse+Keyboard:"
Print "       LShift + Button 1/2 - Burst Up/Dn; LCtrl + Button 1/2 - Burst PgUp/PgDn"
Print "       LShift + LCtrl + Button 1/2 = LCtrl+Home - going to the top left position / LCtrl+End - going to the bottom left position"
Print "Keyboard:"
Print "       Double-LShift - toggles Directory/Tree mode; Double-LCtrl or Enter(released) - enters the DIRECTORY"
Print "       F1(released), F2(released), F3(released), F4(released) sorts the respective FileType/FileSize/FileModifiedTime/FileName column, F12(released) Torus"
Print "       Ctrl+Home/End - going to the top/bottom left position; Up/Dn/PgUp/PgDn; Ins - toggles low/high cursor"
Print "       Double-LAlt or Alt+Enter - toggles window/fullscreen mode; Alt+X, Ctrl+X, Alt+Q or Ctrl+Q - quit to the system, without demanding keypress"
Print "       LCtrl+RCtrl - Reporting (in status line in red color) the time for PgDn-ing (page-by-page) the entire directory"
Print "       LShift+RShift - Reporting (in status line in red color) the time for Down-ing (line-by-line) the entire directory"
Print "       Esc - Stops the auto-scrolling started with LCtrl+RCtrl or LShift+RShift; `(released) - Wildcard Case-Insensitive Animated Search, under the INVERSE one, downward"
Print "       /(released) - Wildcard Case-Insensitive Filter for currently loaded list"
Print "Notes:"
Print "       During the auto-scroll, you can still press PgUp, PgDn, Ctrl+Home, Ctrl+End, Esc; Move mouse cursor within 3 most right columns to unhide the ScrollBar/ToolRibbon"
Print "       To change font, hit '4' 16x32 Cordata, 'T' 2x(8x16) Toshiba, 'F' 8x16 Fujitsu, 'D' 16x16 Fujitsu, 'S' 8x16 Stingray, 'C' 8x16 CompaqThin, 'V' 6x12 DOS-V, '8' 8x8 Toshiba"
Print "       Writing (in APPEND mode) each visited DIRECTORY to 'Dirwalker.log.txt', located in the invoking (home to the binary) folder"

Enfun!

Add-on:
Really looking for a new toy, this second hand touchscreen is cheap, however with only 1366x768, grmbl, the current revision needs 1600x900 as minimum, yet I like it:
   
"He learns not to learn and reverts to what the masses pass by."
Reply
#18
Here comes the latest Dirwalker:

.zip   Dirwalker_r7+.zip (Size: 5.06 MB / Downloads: 55)

The README.TXT from the above package:
Code: (Select All)
README.TXT

Glad to share the latest 'Dirwalker' - revision 7+, its functionality has been enhanced.

The main goal (the initial one) was to sidekick the browsing of files/folders in Windows/Linux Console (Command Prompt), in unified manner.
This revision serves as BARE MINIMUM, my intent is in next months to refine/enrich it further.

It is written in QB64 and C, hats off to Galeon - the resurrector of QB.
Currently, Dirwalker.bas is 6306 lines, the C sources are several hundred lines long.

I hate these galfonesque 'ls -l' and 'dir', being an excuse of functionality. Not to speak of the need to unify the "look" i.e. to standardize the interface.
For instance, on Fedora, I use only 'D' in MATE Terminal, instead of 'ls -l', to browse current folder/tree (and wildcard searching into files' content), EACH TIME.
Even, if you have some old machine this package covers you, as follows:
[kaze@w8 Dirwalker_r7+]$ sh install_D_1366x768.sh

Or, if you have 1600x900 or 1920x1080 panels, use respectively:
[kaze@w8 Dirwalker_r7+]$ sh install_D_1600x900.sh
[kaze@w8 Dirwalker_r7+]$ sh install_D_1920x1080.sh

These short scripts will "install" (in fact copy) the executable with its entourage in /usr/bin/ by renaming 'Dirwalker_r7+_v2.0.2_GCC_11.2.1_O3_mAVX.elf' to 'D'.

Also, as a secondary objective, the browsing of a file is targeted, for example, by releasing Enter/ThirdButton over the file (only in file mode, for now) shows its content and allows filtering (showing only the lines matching the wildcard pattern).

The package 'Dirwalker_r7+.zip' contains:

"install scripts":
01/10/2023  20:27              523 install_D_1366x768.sh
01/10/2023  20:27              526 install_D_1600x900.sh
01/10/2023  20:27              503 install_D_1920x1080.sh  ! having run it, should be able to use 'D' on Command Prompt, anywhere !
01/10/2023  20:27              551 install_D_1920x1080.bat ! having run it, should be able to use 'D' on Command Prompt, anywhere !
Binary part:
01/10/2023  20:27            1,546 Dirwalker.ini
01/10/2023  20:27            1,707 Dirwalker_1366x768.ini
01/10/2023  20:27            1,623 Dirwalker_1600x900.ini
01/10/2023  20:27        2,853,440 Dirwalker_7+_v2.0.2_GCC_12.1_O3_mAVX.elf
01/10/2023  20:27        6,514,176 Dirwalker_r7+_v2.1_GCC_12.1_O3_mAVX.exe
01/10/2023  20:27            50,660 Mx437_CL_Stingray_8x16.ttf
01/10/2023  20:27            92,056 Mx437_DOS-V_re_JPN24.ttf
01/10/2023  20:27            78,084 Mx437_FMTowns_re_8x16-2x.ttf
01/10/2023  20:27            53,904 Mx437_FMTowns_re_8x16.ttf
01/10/2023  20:27            39,672 Mx437_ToshibaTxL2_8x8.ttf
01/10/2023  20:27          146,744 MxPlus_ToshibaTxL2_8x16.ttf
01/10/2023  20:27            28,600 Px437_CompaqThin_8x16.ttf
01/10/2023  20:27            33,160 Px437_Cordata_PPC-400.ttf
01/10/2023  20:27            25,960 Px437_DOS-V_re_JPN12.ttf
01/10/2023  20:27            23,900 Px437_Portfolio_6x8.ttf
Sources:
01/10/2023  20:27        1,453,926 ColumnChart.ico
01/10/2023  20:27          371,170 Dirwalker.bas
01/10/2023  20:27            4,885 dirfile.h
01/10/2023  20:27            2,225 memKAZE.h
01/10/2023  20:27            5,030 printfNS.h
01/10/2023  20:27            26,041 torus.h
01/10/2023  20:27            22,872 treedump.h
01/10/2023  20:27            21,532 wildcardKaze.h
"Unrelated" stuff:
01/10/2023  20:27            6,881 README.TXT
01/10/2023  20:27        4,445,260 TERAPIG_The_Project_Gutenberg_EBook_of_The_King_James_Bible_kjv10.txt

The latest Linux/Windows binaries (along with sourcecode) can be freely downloaded at its homethread:
https://qb64phoenix.com/forum/showthread.php?tid=1182&pid=11763#pid11763

The start-up panel (this panel allows choosing the needed font and resize the window only when 'Dirwalker.ini' is missing) showing main keyboard/mouse shortcuts/combos contains:

Mouse:
    Button 1 - sets the cursor and the inverse line to the chosen position; hold (without moving for 4 seconds) to quit
    Button 2 - [when held] Draws; hold (without moving for 4 seconds) - toggles Directory/TreeFILE mode; it is as Double-LShift but shows also 'stats' in TREE mode
    Button 3 - [when released] - enters the DIRECTORY; Wheel Up/Dn - Up/Dn; Button 2 + Wheel Up/Dn - same as PgUp/PgDn
    Button 2 + dragging (sideways) for at least 3/4 of all columns/cells (within 2 seconds) - same as Alt+X, Alt+Q
    Button 2 + dragging (from top to bottom) for at least 7 lines/cells (within 2 seconds) - same as PgUp
    Button 2 + dragging (from bottom to top) for at least 7 lines/cells (within 2 seconds) - same as PgDn
    Button 2 + dragging (from left to right) for at least 1/4 of all columns/cells (within 2 seconds) - hides RightsidePanel
    Button 2 + dragging (from right to left) for at least 1/4 of all columns/cells (within 2 seconds) - shows RightsidePanel
    Button 1 + Button 1 (within 0.33 seconds) - Double-Left-Click - PgUp
    Button 2 + Button 2 (within 0.33 seconds) - Double-Right-Click - PgDn
Mouse+Keyboard:
    LShift + Button 1/2 - Burst Up/Dn; LCtrl + Button 1/2 - Burst PgUp/PgDn
    LShift + LCtrl + Button 1/2 = LCtrl+Home - going to the top left position / LCtrl+End - going to the bottom left position
Keyboard:
    Double-LShift - toggles Directory/TreeFILE mode; Double-RShift - toggles Directory/TreeDIRECTORY mode; Double-LCtrl or Enter(released) - enters the DIRECTORY
    F1(released), F2(released), F3(released), F4(released) sorts the respective FileType/FileSize/FileModifiedTime/FileName column, F12(released) Torus
    Ctrl+Home/End - going to the top/bottom left position; Up/Dn/PgUp/PgDn; Ins - toggles low/high cursor
    Double-LAlt or Alt+Enter - toggles window/fullscreen mode; Alt+X, Ctrl+X, Alt+Q or Ctrl+Q - quit to the system, without demanding keypress
    LCtrl+RCtrl - Reporting (in status line in red color) the time for PgDn-ing (page-by-page) the entire directory
    LShift+RShift - Reporting (in status line in red color) the time for Down-ing (line-by-line) the entire directory
    Esc - Stops the auto-scrolling started with LCtrl+RCtrl or LShift+RShift; `(released) - Wildcard Case-Insensitive Animated Search, under the INVERSE one, downward
    /(released) - Wildcard Case-Insensitive Filter for currently loaded list
Notes:
    During the auto-scroll, you can still press PgUp, PgDn, Ctrl+Home, Ctrl+End, Esc; Move mouse cursor within 3 most right columns to unhide the ScrollBar/ToolRibbon
    For font, hit '4' 16x32 Cordata, 'T' 2x(8x16) Toshiba, 'F' 8x16 Fujitsu, 'D' 16x16 Fujitsu, 'S' 8x16 Stingray, 'C' 8x16 CompaqThin, 'V' 6x12 DOS-V, '8' 8x8 Toshiba, 'J' 12x24 DOS-V" ' 'A' 6x8 Atari

Enfun!
Georgi 'Sanmayce', 2023-Jan-09

For suggestions, destructive/creative critique, bug-report, email me at: sanmayce@sanmayce.com
Oh, I have an YouTube channel where from time to time I upload some quick walkthroughs:
https://www.youtube.com/Sanmayce

The new feature is shown in next screenshot - finding ALL "daughters" in King James Bible Gutenberg edition, in wrapped form - without missing matches i.e. finding matches spanning two lines is implemented:

   

Sometimes, one needs to know the HEX form and the offset within the file of certain pattern, in next case the two errorful occurrences of "daughers" - found by the very fast spell-checker which I shared on the old QB64 forum (https://qb64forum.alephc.xyz/index.php?P...#msg139414):

   

The good thing is that this "on the fly" wildcard search is unlimited in regard to filesize, I successfully traversed latest English Wikipedia XML dump (some 92 billion bytes long), the speed was poor only 2,200KB/s on i5-7200U laptop. Guess, should bring the huge caliber guns:

   


https://www.overclock.net/threads/cpu-be...t-28681743

In next revisions, I will add SHELL _HIDE for TetraNyotengu in both forms, ELF/EXE... by putting to good use the fastest Vector searcheress (Kazahana is the fastest Scalar) Dirwalker is gonna traverse files' content in a nifty way...
"He learns not to learn and reverts to what the masses pass by."
Reply
#19
Your "dirwalker" throws up this compilation error:

Code: (Select All)
internal\c\c_compiler\bin\c++.exe  -w -std=gnu++11 -DGLEW_STATIC -DFREEGLUT_STATIC -Iinternal\c\libqb/include -Iinternal\c/parts/core/src/ -Iinternal\c/parts/core/glew/include/ -DDEPENDENCY_NO_SOCKETS -DDEPENDENCY_NO_PRINTER -DDEPENDENCY_ICON -DDEPENDENCY_NO_SCREENIMAGE -DDEPENDENCY_LOADFONT -DDEPENDENCY_AUDIO_MINIAUDIO internal\c/qbx.cpp -c -o internal\c/qbx.o
internal\c\c_compiler\bin\windres.exe -i internal\temp\icon.rc -o internal\temp\icon.o
internal\c\c_compiler\bin\ar.exe rcs internal\c/parts/video/font/ttf/src.a internal\c/parts/video/font/ttf/src/freetypeamalgam.o
In file included from internal\c/../temp/regsf.txt:10,
                from internal\c/qbx.cpp:1164:
C:/qb64pe/Dirwalker_r7+/dirfile.h: In function 'int MINGW_readdir(char*, long long int*, int*, char*, char*, char*)':
C:/qb64pe/Dirwalker_r7+/dirfile.h:42:41: error: cannot convert '__time64_t*' {aka 'long long int*'} to 'const time_t*' {aka 'const long int*'}
  42 |      memcpy(LastFileModification, ctime(&statbuf_64.st_mtime), 24); // BUGFIX since r5++++, in fact this is the CULPRIT.]<--+ !!! However with -O3, QB64 blocks right after invoking this function ???
      |                                        ^~~~~~~~~~~~~~~~~~~~
      |                                        |
      |                                        __time64_t* {aka long long int*}
In file included from internal\c/common.h:69,
                from internal\c/qbx.cpp:1:
C:/qb64pe/internal/c/c_compiler/i686-w64-mingw32/include/time.h:251:53: note:  initializing argument 1 of 'char* ctime(const time_t*)'
  251 | static __inline char *__CRTDECL ctime(const time_t *_Time) { return _ctime32(_Time); }
      |                                      ~~~~~~~~~~~~~~^~~~~
C:/qb64pe/Dirwalker_r7+/dirfile.h: In function 'void MINGW_OpenReadCloseDIR(char*, long long int*, char*, long long int*, long long int*)':
C:/qb64pe/Dirwalker_r7+/dirfile.h:75:28: error: cannot convert '__time64_t*' {aka 'long long int*'} to 'const time_t*' {aka 'const long int*'}
  75 |    memcpy(path+1+8, ctime(&statbuf_64.st_mtime), 24);
      |                            ^~~~~~~~~~~~~~~~~~~~
      |                            |
      |                            __time64_t* {aka long long int*}
C:/qb64pe/internal/c/c_compiler/i686-w64-mingw32/include/time.h:251:53: note:  initializing argument 1 of 'char* ctime(const time_t*)'
  251 | static __inline char *__CRTDECL ctime(const time_t *_Time) { return _ctime32(_Time); }
      |                                      ~~~~~~~~~~~~~~^~~~~
In file included from internal\c/../temp/regsf.txt:30:
C:/qb64pe/Dirwalker_r7+/treedump.h: In function 'void treedumpPOOL(char*, int, int, long long int*, char*, long long int*, long long int*)':
C:/qb64pe/Dirwalker_r7+/treedump.h:422:50: error: cannot convert '__time64_t*' {aka 'long long int*'} to 'const time_t*' {aka 'const long int*'}
  422 |              memcpy(LastFileModification, ctime(&statbuf_64.st_mtime), 24);
      |                                                  ^~~~~~~~~~~~~~~~~~~~
      |                                                  |
      |                                                  __time64_t* {aka long long int*}
C:/qb64pe/internal/c/c_compiler/i686-w64-mingw32/include/time.h:251:53: note:  initializing argument 1 of 'char* ctime(const time_t*)'
  251 | static __inline char *__CRTDECL ctime(const time_t *_Time) { return _ctime32(_Time); }
      |                                      ~~~~~~~~~~~~~~^~~~~
mingw32-make: *** [Makefile:417: internal\c/qbx.o] Error 1

This was taken from:

C:\qb64pe\internal\temp\compilelog.txt
Reply
#20
Thanks for reporting this issue.
Is this 32bit compiler, and what version of QB64 is in use?
"He learns not to learn and reverts to what the masses pass by."
Reply




Users browsing this thread: 2 Guest(s)