Audio (343) Datatype (51) Demo (203) Development (600) Document (22) Driver (97) Emulation (148) Game (1005) Graphics (499) Library (116) Network (233) Office (66) Utility (928) Video (69)
Total files: 4380
Full index file Recent index file
Amigans.net OpenAmiga Aminet IntuitionBase
|
=== What is WB2Filer for and what it does ====
WB2Filer is a hack which patch Intuition's functions via SetMethod() to
allow transparently
run of the Filer binary pointing to the given partition on Workbench's
Desktop instead of
original Workbench windows.
=== How to use ===
WB2Filer is just a binary which you run from the shell with path to the Filer
binary as argument:
amiga shell:> wb2filer system:utilities/filer/filer
Hitting "ctrl+c", will clean the patches up and exit.
You can run it from User-Startup as well, just by adding something like this:
RUN >NIL >NIL: work:wb2filer/wb2filer system:utilitites/filer/filer
=== How It Works ===
The main patched function where all magic happens is
OpenWindwowTagList(), which is the
function Workbench use for opening its windows.
When WB2Filer is running,every doubleclick on Workbench's desktop icons will
be hijacked and
instead of return to original OpenWindowTagList,a patched function will run
Filer and return
NULL (so to not show up original Workbench window). This action by default
cause "blink" of
the Workbench topbar (if you had relevant setting in the prefs:sound sets),
so we also patch
relevant Intuition's DisplayBeep() to disable blinking of top bar, while
keeps it working as
expected for all other cases as before
Technically speaking, what happens inside of the WB2Filer is:
--- Implemented own _start() to avoid C lib startup codes. So we obtain
IExec manually, etc
--- Hijacked Intuitions's OpenWindowTagList() and DisplayBeep() via
SetMethod.
--- Check: if task's name is "AsyncWB - textinput" one, and if so for the
next Workbench
window we return to original OpenWindowTagList()
--- Check: If Opened window is not Workbench one, we return to original
OpenWindowTagList()
--- Parse "Title" of Window : if it had spaces, % and , then for 99.9%
this is a DISK, so
strip it off, and add ":" at the end
--- Check: If Active window is not Workbench one, we return to original
OpenWindowTagList()
--- Construct a command line to run (path_to_filer/filer "DISK:")
--- disable the Intuitions's DisplayBeep() (to avoid blinking when return
NULL)
--- runs the Filer and return NULL
Also,different cases supported:you still can use WBRUN from the shell,from
AsyncWB's amiga+e
or from Filer's "Open Workbench" to have original Workbench windows opened,
in which you can
navigate the same as before. All what changed from User's POV is just the
clicking on the
partitions on the WB Desktop will run a Filer on given Disks, the same as
"Open Volumes" or
"Open" from the Workbench's Menu.
=== Limitations and Corner Cases ===
To be find
=== TODO ===
-- commoditie
-- tooltype support
-- when open more than one Filers, need to make them to be opened not on
the same position
-- when doubleclick on a partition with already opened filer, instead of
opening Filer again,
we need to make an opened Filer to be active instead
-- some qualifier which, once held down together with click on disk icon,
open an original WB
=== Version History ===
v.01 (24.11.2023)
-- initial release
v.02 (25.11.2023)
-- removed all debug output
-- made size of binary to be as small as possible
-- added readme
-- source included
v.03 (27.11.2023)
-- few logical fixes: replaced three calls of asprintf() by one, ditch
unused vars, shift
parsing of argv (thanks Balaton)
-- now hijack only WBICON volumes, so you still can continue to open pure
WB folders from
Filer or via "wbrun" tool as before
v.04 (30.11.2023)
-- hijack Intuition->DisplayBeep() as well,to disable wb-bar blinks after
Filer's run and
original OpenWindowTagList() returning NULL (thanks msteed for idea)
-- updated readme to be in sync
v.05 (01.12.2023)
-- build with -Wall and -O3, later of which made binary be smaller on 1kb
-- made a changes/fixes following Balaton's coding style suggestions
(kudos for help!)
-- made struct Task to be local to Patched_OpenWindowTagList()
-- cleaned and simplify ctrl+c loop by get rid of unused vars and
shifting printf out of
ctrl+c check-loop
-- minimize multitasking risks of calling DisplayBeep() out of our hack
-- added error checking for Task creation and asnprinf() result
-- using sizeof(..) with WBOBJA_FullPathSize to avoid future's issues
when code grow up.
-- fixed missing return in Patched_DisplayBeep()
v.06 (07.12.2023)
-- get rid of WhichWorkbenchObject() in favor of WorkbenchControl()'s
GetSelectedIconList
(allow more control)
-- handled correctly selecting of more than 1 icon at time. Thanks to
msteed and Javier!
-- added unselecting of icons after Filer is running (to gain
flexibility of different
Open WB windows cases)
-- restructured code: more error checking, more comments,and more
different cases handled
-- added icons from Mason (yeah!)
-- readme rewritten
v.07 (14.12.2023)
-- totaly rewrote logic of patch: now instead of WB's WorkbenchControl()
and manual icon
selection,we simply based on window title names. This simplify patch a
lot and make it
work much better in all situations (thanks Joerg)
-- get rid of WFLG_BACKDROP check as struct *NewWindow never had
WFLG_BACKDROP (joerg)
-- code cleaning by Balaton's suggestions (simplify DISK icon check,
remove some nested
ifs and indentation for readability, vars renaming, simplification of
code, etc.)
-- added check on ActiveWindow to distinguish between main desktop and
other windows more
when want to have original Workbench windows while run wbrun from
shell or from
Filer's "Open Workbench"
-- added check on "Amiga+e" window (AsynWB - texinput process) : so when
we hit "Amiga+e"
we are able to do "wbrun" from it to have Original WB window.
-- rewrote README and made another version in true amiga.guide format
-- cosmetic fixes for the icons (thanks msteed for note)
v.08 (17.12.2023)
-- fixed NULL pointer crash when we deselect WB Backdrop from the
Workbench's menu and
select it back by adding null pointer check on the nw->Title (which
are NULL for pure
NewWindow->Title when we back from)
-- replaced usage of C lib malloc and I/O based functions, incl. functions
like strdup(),
asnprintf(), etc., in the patched functions to AmigaOS4 native ones.
Because patched
functions running in foreign tasks may not have called the required C
library setup to
be able to use such functions in a thread safe way.Thanks to Joerg for
pointing out on
-- get rid of -lauto and open/close all the libraries manually
-- ditched completely newlib's startup code, and going true Amiga
way:_start() instead of
main(),obtaining of exec manually,etc.For such a hack where size and
bloat are matter,
this is the way to go.
-- replaced every C function on the Amiga native ones from dos, utility,
intuition, and
exec libraries.
-- switched to Amiga way of parsing argv/argc via ReadArgs()
-- binary builds now without "ld" , just "gcc -S" to build assembler
output, and then by
"as" to build from assembler a ready binary.
-- all the above points reduced the size of binary even more
v.09 (18.12.2023)
-- code cleaning based on Joergs suggestions, thanks!
-- first os4depot release
v.10 (21.12.2023)
-- better parsing of the titles to handle spaces
-- better parsing of the Filer's path, which also may contain spaces
-- Added "static inline" in front of all functions (except _start and
original functions)
to reduce size of the binary even more.
Thanks joerg for all the points about!
=== Author ===
Roman "kas1e" Kargin
kas1e()yandex.ru
21/12/2023
=== Thanks To ===
Petrol for original idea
Balaton and msteed for code-checking and advices
Joerg for his valuable AmigaOS knowledge
Javier for ideas and code-help
Mason for icons
and all other ppls from amigans.net for their help and support!
|