Calm Commander 0.7p: modulární prohlížeče souborů přes pluginy
Calm Commander 0.7p přináší jednu z větších vnitřních změn tohoto projektu, kterou jsem měl v plánu už pěkně dlouho: prohlížeče souborů už nejsou napevno zabudované v hlavním programu. Místo toho umí Calm Commander načítat externí viewer pluginy podle potřeby. První verze systému začíná dvěma pluginy: textovým viewerem a ZX screen viewerem. Na první pohled je to jen malý začátek, ale důležitá je hlavně architektura za tím. Přidávání podpory dalších formátů by teď mělo být mnohem jednodušší a zároveň šetrnější k paměti.
Možná se ptáte proč jdu cestou pluginů a proč tyto "nové funkcionality" nejsou pevnou součástí Calm Commanderu. Kdyby každý viewer byl trvale součástí hlavní binárky, program by velmi rychle narazil na paměťové limity. Textový viewer, prohlížeč obrázků, hudební přehrávač a další nástroje by v paměti seděly pořád, i když je zrovna nepoužíváme. Plugin systém to řeší tak, že se načítá pouze ten viewer, který je potřeba pro aktuálně vybraný soubor. Calm Commander připraví data, nahraje odpovídající plugin, zavolá ho a po ukončení se vrátí zpět do file manageru.
text.ccp- prohlížeč textových souborůzxscreen.ccp- prohlížeč klasických 6912b ZX Spectrum obrazovek
Jak to vypadá z pohledu uživatele
Viewer se dá otevřít klávesou 3. Calm Commander se také pokusí použít viewer systém ve chvíli, kdy uživatel stiskne ENTER na souboru, který není rozpoznaný jako přímo spustitelný. Pokud je vybraný textový soubor, načte se textový viewer. Pokud má soubor velikost standardní ZX Spectrum obrazovky, může se zobrazit přes ZX screen viewer. Pokud pro soubor neexistuje vhodný plugin, zobrazí se jednoduchá uživatelská hláška, že daný typ souboru není podporován.
Je to pouze první vrstva. Cílem je postupně přidávat další formáty: grafické formáty, hudební formáty a pravděpodobně i různé specializované prohlížeče.
c:/CalmCommander/plugin
Paměťové rozložení
Interně používá Calm Commander při volání pluginu pevné paměťové rozložení. Vybraný plugin se načítá na adresu $C000, zatímco připravená data souboru jsou dostupná od adresy $E000.
Kód pluginu: $C000
Data souboru: $E000
Na ZX Spectrum Next se to řeší přes MMU stránkování. Calm Commander nastránkuje plugin a data souboru, zavolá vstupní bod pluginu a po návratu obnoví původní mapování paměti. Data souboru jsou připravována po 8K blocích. První implementace vieweru už počítá s více datovými stránkami, takže textový viewer není omezený jen na prvních 8 KB souboru. Plugin dostane seznam stránek, které si může mapovat a číst z nich.
Plugin context
Při startu dostane plugin malou kontextovou strukturu. Ta mu říká, jaký soubor se prohlíží, kde jsou data, jaká je velikost souboru a kde najde tabulku služeb poskytovaných Calm Commanderem.
ABI verze
typ vieweru
pointer na jméno souboru
velikost souboru
první datová stránka
adresa dat
délka prvního načteného bloku
počet stránek
seznam datových stránek
pointer na service table
ABI verze je v kontextu proto, aby se rozhraní dalo časem rozšiřovat bez hádání, jaký typ kontextu plugin očekává.
Služby poskytované Calm Commanderem
Plugin by neměl muset znát všechny vnitřnosti Calm Commanderu. Místo toho dostává pointery na vybrané služby. První verze předává základní rutiny pro tisk, kreslení oken, vstup z klávesnice a myši a práci s režimem zobrazení.
Důležitý detail je obsluha vstupu. Viewer pluginy používají neblokující input službu, která zároveň nechává běžet obsluhu myši. Díky tomu může být myš vidět a hýbat se i ve chvíli, kdy je aktivní plugin.
Textový viewer
Textový viewer zobrazuje textové soubory ve vlastní obrazovce. Podporuje posun po řádcích, posun po stranách a ovládání kolečkem myši. Současně ukazuje aktuální řádek a celkový počet řádků, aby bylo vidět, kde se v souboru nacházíme.
ZX screen viewer
ZX screen viewer obsluhuje klasické 6912b obrazovky. Data souboru zkopíruje do standardního rozložení obrazovkové paměti a dočasně přepne zobrazení tak, aby byl obrázek vidět přímo jako Spectrum screen. Při ukončení viewer obnoví stav zobrazení Calm Commanderu a oba file panely. Plugin také čeká, až uživatel pustí původní klávesu, kterou viewer spustil, aby se obrázek ihned nezavřel.
Co bude dál?
Plugin systém je zajímavý hlavně tím, co umožní do budoucna. První dva pluginy jsou jen začátek. Další prohlížeče by měly přibývat poměrně rychle (znáte mě).
- Další grafické formáty
- Hudební přehrávače, například PT3
- Možná prohlížeče archivů nebo datových formátů
- Další malé nástroje, které nemusí být trvale součástí hlavní binárky
Calm Commander se díky tomu může rozšiřovat modulárně. Hlavní program zůstane zaměřený na souborový management a specializované funkce se mohou přesunout do malých externích pluginů.
Calm Commander 0.7p si můžete stáhnout zde: https://shrek128.itch.io/calmcommander.

