D-Text (původně počeštěný Spectral Writer)
Za dávných časů
D-Text je editor s dlouhou historií. Původně byl vydán v roce 1984 jako Spectral Writer a jeho autorem je Gianluca Carri (UK). Ani Spectral Writer nevznikl sám o sobě, ale ovládáním je značně podobný Tasword Two od Tasman Software, vydanému v roce 1983 a kterému předcházela přinejmenším první verze Taswordu už z roku 1982. Tasman si očividně pospíšil a vydal svůj textový editor velmi záhy po uvedení ZX Spectrum 48k na trh. O kvalitách editoru s odstupem času můžeme polemizovat, ale tím, že byl vydán velmi brzy, zavedl určité zvyklosti, které zůstaly zachované nejméně o dalších 10 let později a zjevně byl aktivně používán, protože také existuje jeho lokalizovaná verze do které Busy doplnil psaní diakritiky delším stiskem písmena místo komplikovaného shiftování (Tasword_BCS) i funkce v D-Textu pro konverzi textů z Taswordu. Viz též Dexův článek o seriózním použití ZX Spectra.
Z krátké zkušenosti s Taswordem musím poznamenat, že i Spectral Writer a tedy i D-Text před mými zásahy byl výrazným zlepšením a zrychlením. Není divu, že se ujal.
Ale protože v socialistickém Československu se na autorská práva pohlíželo jinak než na západě a protože mezi uživateli ZX Spectra byl o textový editor zájem ujal se Daniel Jenne konverze Spectral Writeru a jeho počeštění někdy v roce 1986. Tím vznikl D-Text. Napsal k němu i manuál, který byl napsán v samotném D-Textu. A zdaleka nejenom tento manuál, v D-Textu vzniklo několik knih z edice 666 ZO Svazarmu. Další příručku D-Textu napsal Ladislav Zajíček (-elzet-) na jejímž konci D-Text, resp. Spectral Writer srovnává s Tasword Two.
Já jsem se s D-Textem setkal až mnohem později, když se mi možná v roce 1994 do rukou dostala disketa s magazínem Bratislavského Betaklubu, kde byl pro Betadisk upravený D-Text společně s texty článků. Tou dobou už jsem používal Proximácký Desktop (koupený), tak mi D-Text až tak moc neučaroval, ale přesto byl zajímavý a oproti jiným i relativně snadno ovladatelný a rychlý. A to jsem ještě netušil, že se mi ho podaří o 30 let později zrychlit mnohem víc.
Proč?
Protože jsem chtěl jednoduchý textový editor, abych mohl pohodlněji psát a tisknout texty na svém plotru. Vzpoměl jsem si na D-Text, se kterým jsem si hrál například při pokusech s merkurovým plotrem Alfi. Jenomže jsem si neuvědomil, že to dá docela hodně práce program nejenom disassemblovat do kompilovatelné podoby, ale hlavně pochopit. Pochopení a zdokumentování samo o sobě zabralo nejméně 2/3 času, ne-li mnohem víc. Trvalo mi to celý prosinec 2021.
Když jsem začal objevovat mnohé nedokonalosti a nedostatky programu, který pochází až z roku 1984, tak už se mi nechtělo s tím přestat. Investoval jsem do toho tolik úsilí, že se mi nechtělo ustoupit a začít totéž na možná schopnějším D-Writeru (původně The Writer), nebo na ještě lepším Text Machine, který dodnes znám jen z doslechu, protože je určený výhradně pro D40 a jiná verze dosud neexistuje (tedy určitě ne pro TRDOS). Navíc u D-Writeru si nejsem zcela jistý, že by to byl krok k lepšímu. Program umí trochu víc, ale je zároveň hůř ovladatelný, pomalejší a pro text má vyhrazeno méně paměti. A Text Machine by pravděpodobně byl nad mé síly.
Jedním z lákadel, kvůli kterým jsem začal D-Text analyzovat byla domnělá jednoduchost a už hotová podpora Betadisku. Jenomže z jednoduchosti se na mnoha místech stala nedokonalost a podpora Betadisku není natolik provázaná s programem, aby se nedala doplnit i do jiného editoru.
Přesto to byla fascinující zkušenost. Odkrývat způsob práce programátora před 40 lety v kontrastu s pozdějšími znalostmi a v kontrastu s tím, že jsem program v roce 1994/1995 považoval za něco mnohem dokonalejšího, než opravdu je.
Výsledek analýzy
Výsledkem je v tuto chvíli nahrubo okomentovaný a zkompilovatelný zdroják. Komentáře určitě nejsou všude správně. Během přepisování jsem objevil několik míst, která fungují jinak než jsem se domníval. Ale cílem nebylo mít perfektně zdokumentovaný zdroják k původní binárce. Cílem bylo mít kód, který jsem mohl začít upravovat a přepisovat podle mé chuti a potřeb. Instrukce a data ve zdrojáku správně jsou, kompiler z něj vyrobí identickou binárku, jako byla verze D-Textu, který jsem začal analyzovat.
Přesto získaný zdroják původního D-Textu zveřejňuji, berte však komentáře ve zdrojáku s velikou rezervou. Nemám důvod se k tomu vracet a komentáře opravovat.
Zdrojový kód mé verze programu bude komentovaný mnohem přesněji a správněji. Ale protože změny byly opravdu velké, vlastně z původního programu zbyly jen malé části kódu a to ještě na úplně jiných místech v paměti, než byly původně, tak nový zdrojový kód určitě nebude použitelný k pochopení původní verze. Nyní s odstupem a přestávkou pár let mohu bez nadsázky říct, že nový D-Text je úplně jiný program, který pouze vypadá jako D-Text, stále pracuje se stejnými soubory, ale už teď v mnoha ohledech funguje lépe i když stále není dokončený (konec léta 2025).
Download
- 2022-02-20_dtext-disasm.tar.bz2 - disassemblovaný a nahrubo analyzovaný Betadiskový D-Textu z roku 1994
nový D-Text
Megalomanské plány obratem zhatil nedostatek času, ale i lenost a jiné zájmy. Do programování textového editoru mě ve skutečnosti netlačí nic, než jen moje chuť mít něco svého pro své tiskárny a své hardwarové experimenty. V průběhu programování jsem několikrát plány změnil. Některé detaily se ukázaly být řešitelné jednodušeji a elegantněji, mnohé jiné jsem zavrhl jako nerealizovatelné.
Berte na vědomí, že na tom pracuji nárazově, někdy se tím mohu pár večerů po sobě zabývat, jindy to odložím na celé měsíce i roky. Ačkoli bych se tomu věnoval víc rád, někdy holt nemám šanci ani náladu.
Pochopitelně bych to rád stihl za kratší dobu, než Zdeněk Šesták svou skvělou konverzi Dizzyho pro PMD 85.
Jaké jsou cíle?
- zachovat kompatibilitu s existujícími textovými soubory (považuji za velmi důležité)
- jednoduše ovladatelný editor prostého textu
- pokud možno pohodlně ovladatelný editor, jak jen ZX Spectrum se 40 klávesami dovolí
- pokud možno zachovat funkčnost i na standardním neupraveném ZX Spectrum 48k bez Betadisku
- plná podpora Češtiny a pokud možno i Slovenštiny (stejně jako v původním D-Textu Daniela Jenneho)
- stejně jako původní D-Text/Spectral Writer práce s neproporcionálním písmem a pevnou šířkou 64 znaků na řádek
- přizpůsobitelnost pro libovolnou tiskárnu - jedna verze editoru pro mnoho tiskáren
- spolu s podporou tiskáren možnost načítat pluginy stejně jako to umí Desktop - nikoli však stejné pluginy
- pohodlné ukládání a načítání souborů na TRDOSu
- podpora pásky i TRDOSu a teprve později možná i dalších systémů
- zvyklosti a ovládání podobnější Desktopu, kde to dává smysl
- napsat v novém D-Textu manuál k D-Textu a vytisknout nejméně na jedné tiskárně
Výpis textu na obrazovku
Přepracováním kódu pro výpis mikroprintu, to jest znaků v rastru 8x4px na obrazovku a přepsáním dalších podprogramů pro manipulaci s obrazem jako je mazání a scroll jsem dosáhl největšího urychlení za cenu jen o málo delšího kódu. Původní mikroprint měl například uložené znaky jen v jedné půlce bytu a kvůli sudým znakům musel každý byte předlohy o 4 bity rotovat vlevo. Takových nedostatků tam bylo mnoho. Dalších drobných urychlení se dalo dosáhnout ve smyčkách kreslení kurzorů, tabulátorů a vůbec všeho, co se cyklicky opakuje během editace. Někde pomohlo zjednodušení kódu, lepší algoritmus, rozvinutí cyklu... výsledkem jsou mnohem svižnější reakce D-Textu, jak ukazuje toto video. Těžko hádat, která z drobných úprav se projevila citelně spolu s těmi zásadními.
Všechny změny jsou hledáním rovnováhy mezi nedostatkem paměti a výkonu. Když se rozhodnu rozvinout pomalý cyklus, musím na něj najít místo, nebo zkrátit a zefektivnit něco jiného. Případně obětovat nějakou nepotřebnou funkci a získat prostor pro užitečnější.
Podpora souborových úložišť
D-Text a vlastně už i původní Spectral Writer využíval pro práci se soubory příkazy v BASICu a s BASICovým programem byl provázaný mnohem víc, než se mi líbilo. Pro Betadisk upravený D-Text měl navíc vypnutou podporu pásky. Já chtěl obojí tak pohodlné, jak je jen možné, přičemž podpora pásky skrz standardní podprogramy Sinclair ROM je důležitá pro kompatibilitu s emulací pásky na ESXDOSu a BSDOSu. Neočekávám, že by někdo v dnešní době používal k ukládání skutečný magnetofon, ale možné to je. Primárně však počítám s podporou Betadisku, který je mým preferovaným disketovým systémem a i při používání na ESXDOSu nad obrazem diskety přináší dostatečné pohodlí.
BASIC ale nestačí k pohodlné práci se soubory a lákadlo snadné upravitelnosti amatérem nepovažuji za dost silný argument. Zdrojové kódy zveřejním, takže není potřeba program hackovat a přiohýbat různými POKE, bude možné ho přeprogramovat, pokud bude zájem rozšířit podporu i na jiný diskový systém (MDOS, ESXDOS nativně...). Ani v přenositelnosti mezi diskovými systémy by mi BASIC nepomohl. V BASICu nelze dosáhnout stejného pohodlí výběru souboru z diskety a omezovat se na výpis katalogu příkazem CAT a následné opisování názvu určitě nechci. Upřednostním podporu Betadisku pořádně, než podporu všeho polovičatě.
Proto jsem podprogramy pro práci s páskou přepsal společně s hlavním menu do strojáku. Tím se vše stalo menším a mnohem rychlejším. Zbylo mi díky tomu o kousek víc místa na buffer pro celý TRDOSový adresář, díky kterému jsem mohl napsat souborový dialog téměř tak pohodlný, jako na moderních PC. Při načítání stačí soubor jen vybrat bez opisování jména souboru, jako tomu bylo dosud, výběr je rychlý a potenciálně by mělo být možné, vejde-li se, přidat filtr (jen soubory začínající 32768 = pravděpodobně text, 63000 = pravděpodobně plugin), nebo řadit podle abecedy jako to dělá můj booter.
Microdrive, se kterým kdysi Spectral Writer uměl pracovat, podporovat nehodlám. Nemám ho rád, pracoval jsem s ním jen párkrát a nezanechal ve mě dobrý dojem. Navíc je to zařízení poměrně raritní s nepěknou syntaxí příkazů a prakticky překonané úplně čímkoli kromě klasického magnetofonu. A taktéž zcela určitě nebudu podporovat Wafadrive o němž jsem pouze četl a naživo neviděl za téměř 40 let ani jednou. Navzdory tomu, že ho -elzet- ve své příručce ke spectral Writeru na straně 4 zmiňuje a navzdory tomu, že k tomuto zařízení byl Spectral Writer přibalen.
Hlavní menu
Původní hlavní menu D-Textu bylo napsané v BASICu a sloužilo k práci se soubory, ale i nastavení tiskárny, nebo hledání v textu. Na mnoha místech program v BASICu volal podprogramy editoru ve strojovém kódu a naopak, do BASICu se editor různými způsoby vracel. Já určitě nechci přeskakovat mezi strojovým kódem a BASICem. Teoreticky to mohlo mít smysl v době, kdy uživatel byl schopen nanejvýš poupravit pár konstant v proměnných, ale to mě v podstatě nezajímá. Co má být nastaveno, půjde nastavit i bez zásahů do programu a všechny další uživatelské úpravy bude možné provádět přímo v assembleru, protože zdrojové kódy jsou narozdíl od dobových verzí k dispozici.
Primární funkcí hlavního menu tedy zůstává práce se soubory včetně načítání pluginů, ale pohodlněji, dále globální nastavení programu, třeba změna barevného schématu a globální informace o verzi, o načteném pluginu, o volné paměti pro text atd... V BASICu by měl zůstat pouze nejzákladnější zavaděč a RAMTOP dost vysoko, aby se na TRDOSu stále dal použít příkaz LIST.
V původním D-Textu bylo hlavní menu místem i pro tisk a nastavení tiskárny. To přestalo dávat smysl, protože nastavení tiskárny je pro každou tiskárnu jiné a má být výhradně záležitostí ovladače. Hlavní menu proto bude dovolovat pouze načtení ovladače tiskárny, resp. obecně pluginu. Nastavení jsem přesunul pod klávesovou zkratku EXT I v editoru, po vzoru Proximáckého Desktopu, protože je obvykle potřeba před spuštěním tisku pomocí EXT P (opět po vzoru Desktopu).
Ponechal jsem v hlavním menu volbu komprese, to patří k souborům. A ze stejného důvodu jsem přesunul do hlavního menu konverzi češtiny z R-Textu, která byla původně pod klávesovou zkratkou v editoru.
A nakonec ovládací klávesy - pokusil jsem se je přiřadit tak, aby byly intuitivnější než původně. Nyní jsou nadefinované takto:
L - LOAD, načtení souboru z právě zvoleného úložiště
M - MERGE, načtení souboru z právě zvoleného úložiště, který se přidá k textu v editoru
S - SAVE, uložení souboru na právě zvoleného úložiště
C - CAT, katalog, zobrazení obsahu diskety, byl-li detekován Betadisk, příkazem CAT, což je standarní služba TRDOSu
D - DEVICE, volba úložiště, pokud byl detekován Betadisk, bude výchozí a tímto lze přepnout na magnetofon
CS+D - DRIVE, je-li zvolený (a předtím detekovaný) Betadisk, lze tímto způsobem volit disketovou mechaniku dřív, než se pokusíte o práci se soubory, nebo zobrazení obsahu / katalogu
P - PLUGIN, načtení pluginu / ovladače tiskárny TODO - naprogramovat
K - komprese souborů zavedená D-Textem, pokud je zapnutá, provádí se při ukládání a načtení souboru
T - konverze z Taswordu, pokud byl načten soubor s kódováním diakritiky z D-Textu, lze tímto převést text na kódování D-Textu a text by měl být po vstupu do editoru správně
V - přepíná barevné schéma, to jest vzhled, přišlo mi praktičtější nabídnou předvolená barevná schémata než pokaždé naklepávat v nastavení několik čísel, stejně nelze použít každou kombinaci barev a v základu jde o volbu mezi světlým a tmavým pozadím.
E - skok do editoru
B - skok do BASICu
Komprese
V hlavním menu lze zvolit tři možnosti "není", "orig" a "spec". Volba není prostě nekomprimuje, tato volba je nejbezpečnější, výchozí a pokud je úložiště hodně rychlé, typicky v emulátoru, ale nejenom, tak může být i nejrychlejší.
Při ukládání na skutečnou pásku se ovšem komprese může vyplatit. V textu bývají prázdné řádky, což u D-Textu, ale i předchůdců znamená, že jsou vyplněné mezerami. Prázdný řádek není pouze CR LF a každý takový řádek stojí čas při zápisu i čtení.
Komprese je velmi jednoduchá, byl zvolen řídící znak větší než největší možný kód znaku v textu a pokud je kód větší než tato hodnota, tak to znamená počet opakování znaku, který tomuto kódu předcházel. Jak se D-Text vyvíjel, tak byla nejprve zvolena hodnota 164, ale po doplnění o další slovenské znaky a řídící kódy pro tiskárnu byl tento znak zvětšen na 176. První varianta byla pojmenována normální, tedy "norm" a reálně má smysl pouze pro načítání archivních textů. Druhá byla pojmenována special, tedy "spec" a pořád může být užitečná, pokud by někdo chtěl používat skutečnou pásku.
Účinnost komprese se samozřejmě značně liší podle toho, jaký text je takto zabalen, ale když jsem to zkoušel na pokusných textech (reálný článek o něčem), tak úspora bývala okolo 1/4, možná 1/3 velikosti a to při pomalosti pásky má význam i když samotné komprimování trvá i jednu až dvě sekundy.
Ovládání editoru při práci s textem
Pokusil jsem se, aby ovládání bylo maximálně intuitivní, ale intiutivní je třeba brát s rezervou v rámci platformy ZX Spectrum. 40 kláves není mnoho a i když ZX Spectrum 48k+, stejně jako ZX Spectrum 128k+ toastrack i ZX Spectrum +2, +2A, +2B, +3 od Amstradu mají klávesnici rozšířenou o samostatné šipky, EDIT, GRAP a další klávesy, nejde o rozšíření matice kláves, ale pouze o kombinaci alfanumerických kláves s některým shiftem.
Naštěstí tu máme Desktop a mnoho dalších programů, které zavedly určité zvyklosti z nich většina se dobře osvědčila do té míry, že je kopírují i některé emulárory a interface pro připojení PS/2 klávesnic. Bohužel standard neexistuje, je to jen zvyklost, které se snažíme držet, nikoli pevné pravidlo.
Například Caps Shift a klávesa 1 (zkráceně budu psát CS = Caps Shifs a SS = Symbol Shift, CS+1) má v Sinclair BASICu funkci EDIT, která přesune řádek vybraný kurzorem do editační oblasti, ale v Desktopu se používá ve funkci klávesy INSERT pro přepínání režimů INS/OVR a v D-Textu od dob Spectral Writeru přebírala spíš funkci klávesy F1 z PC, kde se často používá F1 pro zobrazení nápovědy. Obojí dává smysl, ale nekonzistence může působit potíže při přecházení mezi textovými editory. Takových odlišností je tam samozřejmě víc.
Režimy klávesnice
CS+2 - zapíná CAPS LOCK režim pro psaní velkých písmen
CS+SS - zapíná / vypíná EXTEND režim. Toto je jakási náhrada klávesy CTRL na ZX Spectrum dovolující schovat pod písmena speciální funkce. Každá z nich bude popsána v odpovídající "kapitole". EXTEND režim fungoval jak v původním Spectral Writeru, tak i D-Textu a v Desktopu. Kromě toho lze další funkce ukrýt pod klávesu kombinovanou se Symbol Shiftem stisknutou v EXTEND režimu, například EXT SS+K otevírá v Desktopu diskové menu a stejně bude fungovat i v D-Textu, kromě toho, že pro stejný účel ponechávám EXT SS+A, což je tak blízko, jak jen lze původnímu SS+A, což v mé verzi D-Textu píše vlnovku. Ta se ve Spectral Writeru psala EXT SS+A... Mě dává větší smysl psát znaky jednodušeji bez EXT režimu, EXT režim by měl vyvolávat komplexnější funkce než jen vložení znaku do textu. Zapnutý EXTEND režim je signalizován červeným okrajem obsazovky
CS+9 - zapíná GRAPH režim pro psaní znaků s diakritikou, podrobněji viz dále, zapnutý GRAPH režim je signalizován žlutým okrajem obsazovky
Režim INS/OVR pro vkládání/přepisování znaků D-Text nemá, protože ze způsobu, jak s textem pracuje by se režim vkládání znaků realizoval obtížněji. Na druhou stranu... realizovat by to do určité míry šlo, ale nejspíš nezbude místo v paměti.
Pohyb v textu
V textu se pohybuje kurzory ukrytými pod čísly 5, 6, 7, 8, klávesou DELETE, ENTER a několika dalšími klávesami v EXT režimu.
CS+5 - šipka vlevo, posune kurzor doleva
CS+6 - šipka nahoru, posune kurzor o řádek níž
CS+7 - šipka nahoru, posune kurzor o řádek výš
CS+8 - šipka vpravo, posune kurzor doprava
CS+0 - delete, chová se jako backspace na PC, smaže znak a posune kurzor vlevo
CS+3 - o stránku dolu, náhrada klávesy Page Down.
CS+4 - o stránku nahoru, náhrada klávesy Page Up.
EXT B - skok na začátek textu (BEGIN)
EXT E - skok na konec textu (END)
EXT Z - skok na začátek řádku, náhrada klávesy Home
EXT X - skok na začátek řádku, náhrada klávesy End
EXT SS+Z - skok na první znak, který není mezera od začátku řádku, skok na začátek textu, pokud není řádek prázdný
EXT SS+X - skok na poslední znak, který není mezera od konce řádku, zkok na konec textu, pokud není řádek prázdný
Původní D-Text taktéž uměl scrollovat o jeden řádek vpřed i vzad kombinací kláves SS+U (příkaz OR) a SS+I (příkaz AT), ale s novým způsobem zpracování kláves se nyní pomocí SS+U píše pravá hranatá závorka a pod SS+I se ukrývá znak copyright. A jiná vhodná klávesová zkratka pouze s jedním shiftem mi volná nezbyla. Tuto funkci jsem zrušil a ušetřené místo použil k něčemu jinému.
Je také možné přeskakovat na následující zarážku pomocí CS+SPACE (BREAK), viz dále v kapitole o práci s tabulátory.
Návrat z editoru do hlavního menu
Původně se z editoru do hlavního menu vracelo pomocí SS+A (jako příkaz STOP), ale nyní se takto píše vlnovka (tilda), protože preferuji psaní znaků jednodušším stiskem shiftu a písmena před psaním znaků EXT režimem. Zároveň jsou někteří z nás zvyklí na Desktop, kde se do disketového menu vstupuje pomocí EXT SS+K, proto jsou nyní k návratu do hlavního menu k dispozici klávesové zkratky obě.
EXT SS+A - návrat do menu, co nejblíže původní klávesové zkratce starého D-Textu.
EXT SS+K - návrat do menu stejnou klávesovou zkratkou jako v Desktopu.
Psaní znaků s diakritikou
Kvůli kompatibilitě s existujícími texty mi nezbývá, než zachovat kódování přesně takové, jako bylo v původním D-Textu (viz tabulka dále). To vyplývalo z velikosti paměti vyhrazené písmu a bylo omezeno kódy "kláves", které vracel v něm použitý podprogram pro zpracování klávesnice i později přidaným kompresním algoritmem. Původní program zpracovávající klávesy ale s lokalizací nepočítal a tak nebylo možné bez problémů přidat úplně všechny znaky s diakritikou, což trochu postihuje slovenštinu a už jen touto lokalizací se rozbila možnost tisknout na ZX Printer, protože došlo k překryvu kódů znaků s diakritikou s kódy kláves pro spuštění tisku.
Použitím podprogramu z Desktopu se část těchto problémů vyřešila, kódy kláves nekolidují, diakritika v GRAPH režimu je lépe rozložená a lze použít víc kombinací kláves v EXT režimu než předtím.
EXT H (háčky) - zapíná psaní znaků s diakritikou delším stiskem písmena. Není to způsob pro každého, je nutno si na to trochu zvyknout, může to psaní zpomalovat, ale dovoluje psát úplně všechny znaky s diakritikou bez neustálého přepínání, rozložení je víceméně odpovídající QWERTY klávesnici až na pár znaků, co jinak zařadit nešly. Např. ě je pod w, ů pod j...
Díky přepracovému zpracování kláves taky lze psát velké znaky s diakritikou pomocí EXT CS+písmeno.
TODO - doplnit tabulku rozložení znaků s diakritikou pod písmeny (+ SVG ke stažení až bude hotové).
CS+9 (GRAPH) - zapíná režim psaní znaků s diakritkou pod čísly, rozložení znaků se podobá rozložení jako na PC s tím rozdílem, že lze použít jen čísla 1 až 8, protože 9 přepíná tam a zpět a CS+0 musí sloužit jako delete (backspace) za všech okolností bez ohledu na režim psaní diakritiky. Nedostatek kláves s čísly se obchází stiskem CS+číslo, díky tomu se vejdou i znaky ň, ť, ď, ó, ú, ů a ž.
Formátování a zarovnání řádků
EXT Q - zarovná řádek k levému okraji.
EXT W - zarovná řádek na střed.
EXT R - zarovná řádek k pravému okraji. Nemohl jsem použít EXT E, protože už je obsazené skokem na konec textu.
EXT J - zarovná řádek k oběma okrajům. Užitečné, pokud děláte úpravy uprostřed odstavce, zkrátíte si řádek odstraněním nadbytečných mezer a po úpravě ho chcete zarovnat zpět k oběma okrajům bez zdlouhavého přerovnání celého odstavce.
EXT SS+R - odstraní nadbytečné mezery mezi slovy.
EXT SS+L - zalomí řádek, část od kurzoru vpravo přesune o řádek níž, pokud lze další řádek přidat. Pokud nelze, operace se neprovede.
TODO - doladit a zdokumentovat
Práce s tabulátory / zarážkami
Zarážky existovaly už ve Spectral Writeru, ale jejich nastavení bylo divné. Mělo by fungovat EXT 2 pro smazání všech zarážek a EXT 1 pro přidání, ale přidávat šly jen vlevo od existujících a nešly smazat jednotlivě. Pokus o smazání vedl ke skrytí přičemž zarážka zůstala funkční, nebo se smazaly předchozí nechtěně. Nyní je práce se zarážkami napsaná znovu, doufám lépe.
EXT T - přidá zarážku do prázdné pozice, nebo odebere zarážku pokud je použito na pozici s už existující zarážkou. Zarážky lze nastavovat v libovolném pořadí a na jakoukoli pozici kromě sloupce 0, tam by neměla smysl. Celkem může být zarážek až 16.
Interně jsou zarážky uložené v tabulce v pořadí od nejmenší po největší, tj. od té vlevo k té nejvíc vpravo. Ale to uživatel řešit nemusí, odebíráním i vkládáním zarážek se tabulka přeorganizuje dle potřeby automaticky. to, že jsou zarážky seřazené jen usnadňuje jejich zobrazování na liště a taky pohyb kurzoru.
EXT SS+T - odstraní všechny zarážky
CS+SPACE (BREAK) - přesune kurzor na nejbližší zarážku vpravo od kurzoru. Tato klávesová zkratka zůstala zachována stejně jako bývala. Pokud žádná zarážka není nastavena, kurzor se nepřesune.
Hledání v textu
I tato část je kompletně přepsaná. V původním D-Textu se dalo vyhledávat pomocí EXT S přičemž D-Text využíval k zadání hledaného řetězce INPUT v BASICu. To znemožňovalo hledat v češtině a zároveň nebylo možné opakovat hledání a najít další výskyt hledaného řetězce bez nutnosti znovu a znovu zadávat řetězec.
Nyní se obě funkce skrývají pod klávesou F a pokud je zapnuté psaní diakritiky delším stiskem, tak lze psát česky i do hledacího dialogu přesně stejně jako v editoru samotném. Možnost zapnout GRAPH v dialogu zatím není.
EXT F - vyvolá dialog dovolující uživateli zadat až 10 znaků dlouhý řetězec. Lze přerušit klávesou BREAK, nebo SS+Q a vrátit se zpět do editoru bez hledání, nebo potvrdit ENTERem a pokud bylo něco zadáno, tak D-Text zkusí vyhledat nejbližší výskyt od kurzoru vpravo a dolů.
Deset znaků se nezdá dost, ale prakticky stačí. Do D-Textu se nevejde tak dlouhý text, aby to bylo potřeba a zároveň není další program běžící na pozadí odkud by se např. dal přenést řetězec přes schránku. Větší prostor by jen zabíral místo v situaci, kdy se snažím ušetřit každý byte.
EXT SS+F - protože si D-Text naposledy hledaný řetězec pamatuje dokud se uživatel nepokusí hledat něco jiného, tak lze hledání libovolně opakovat. A když je dosaženo konce textu, tak skočit EXT B na začátek a hledat znovu od začátku, je-li to potřeba.
Blokové operace
Pod tímto pojmem myslím nikoli ukládání souborů, jak o blokových operacích mluví historické manuály, ale operace nad označenou oblastí / blokem / skupinou řádků.
EXT O - označí oblast (blok). Řádek, na kterém se nachází kurzor se stane okrajem oblasti, druhým okrajem bude těsně předcházející řádek, nejstarší se zapomene. Princip je stejný jako v assembleru Prometheus, nebo editoru Desktop.
EXT SS+O - zapne / vypne zobrazování označené oblasti (bloku). (ještě nezobrazuje)
EXT A (all) - označí vše, oblast bude začínat na řádku 0 a končit na posledním řádku s textem. Pokud za textem následují prázdné (nevyužité) řádky, vynechají se.
EXT C - pokusí se zkopírovat označenou oblast po řádcích na pozici kurzoru. Tj. nejprve vloží prázdný řádek, pak do něj zkopíruje obsah řádku z oblasti a to se opakuje pro celou oblast. Nelze kopírovat dovnitř bloku. V případě, že se řádky nevejdou, varovně pípne (stejný varovný tón, jako v BASICu, jen kratší), v takovém případě zkopíruje jen tolik řádků, kolik se vešlo.
TODO - zobrazení označené oblasti na textových řádcích (1px svislá linka vlevo?)
TODO - rozhodnout jak zpřístupnit formátování zvolených řádků, menu se asi nevejde, nemělo by to být něco, co si uživatel spustí omylem, protože hromadné zarovnání všech řádků může být otravně nepříjemné až destruktivní
Nastavení editoru
EXT S (settings) - vyvolá menu s volbami, které se nehodí řešit jednotlivě a které se zadávají buď jako jedna z možností, nebo číselnou hodnotou v určitém rozmezí.
Nyní jsou v menu tyto volby:
Klávesové echo - určuje délku pípnutí po stisku klávesy. Je to stejná hodnota jako je v systémových proměnných BASICu na adrese 23609. Výchozí hodnota D-Textu je 4, pro původní Sinclair BASIC to bylo 0, pro ISOROM 5, ale třeba Didaktik Gama 89' používá hodnotu 32 a pípnutí je asi nejdelší z továrních počítačů. Na Didaktiku M pípnutí opět o kousek zkrátili na hodnotu 20. Po ukončení D-Textu zůstane tato hodnota nastavená i pro BASIC a zachovává se až do opětovné změny v nastavení, resetu počítače, nebo znovu načtení D-Textu. Dovolené rozmezí je od 0 do 32, protože víc nemá smysl.
Signalizace konce řádku - určuje na jakém sloupci D-Text pípne jinak, čímž upozorňuje na blížící se konec řádku. V podstatě to funguje jako ekvivalent zvonku na psacím stroji, kde tím stroj umožní uživateli rozdělit slovo a ručně ho zalomit na nový řádek. D-Text slova zalamuje automaticky, pokud je zapnuto formátování, ale i tak se upozornění hodí. Nastavením signalizace na sloupec 64 dojde v k vypnutí signalizace, protože sloupce 64 kurzor nemůže dosáhnout. Dovolené rozmezí je od 0 do 64.
Prodleva před psaním diakritiky - dovoluje v rozumných mezích upravit délku čekání než se ze stisku klávesy s písmenem, stane odpovídající písmeno s diakritikou. Příliš krátká prodleva vede k častým chybám a psaní diakritiky i když psána být nemá. Příliš dlouhá prodleva zas nutí pisatele čekat příliš dlouho. 8 je osvědčený kompromis, ale i tak může uživatel chtít hodnotu mírně upravit. Dovolené rozmezí je 4 až 25.
Záhlaví - určitě jestli se záhlaví bude vypisovat a pokud ano, kam se bude zarovnávat. V případě zarovnání na střed se bude vypisovat pouze číslo stránky.
Oddělovací znak - je znak mezi záhlavím a zbytkem stránky, tímto znakem se vyplní celý řádek. Výchozí je mezera, tedy prázdný řádek mezi záhlavím a textem.
Číslo stránky - je prozatím poslední nastavitelná položka v menu. Uvažuje se jako číslo právě tisknuté stránky, pokud byla zahájena, nebo stránky, která se bude tisknout, pokud ho změníte bezprostředně před zahájením první stránky.
Snad nebude vadit, že D-Text omezuje číslo stránky na rozsah bytu, kdyby náhodou někdo v D-Textu tvořil knihu většího rozsahu než pouhých 255 stránek. Pokud by snad taková kniha vznikala, myslím, že společně řešení najdeme.
TODO - formulovat lépe
Poslední červený řádek ukazuje rozsah označené oblasti seřazené od menší k větší hodnotě, nejsou-li stejné (mohou být, je-li označen jen jeden řádek).
Tisk
Tisk je prapůvodní důvod, proč jsem se do přepsání D-Textu pustil. Chtěl jsem textový editor, který pracuje s neproporcionálním prostým textem, ale nechtělo se mi programovat ovladač pro zastaralý program a komplikovaně ho přiohýbat - editor i ovladač, aby to spolu fungovalo. Chtěl jsem editor, do kterého budu moct vytvořit ovladač tiskárny, která není vhodná pro tisk bitmapy (z Desktopu např.), aniž bych musel jakkoli do editoru zasahovat... což vedlo k tomu, že dělám největší možný zásah do editoru. To jsou paradoxy.
nastavení společné pro všechny tiskárny
EXT I - vyvolá nastavovací menu tiskárny. Toto menu by mělo být vždy ve stejném stylu, ale nastavitelné položky se budou lišit podle schopností tiskárny. Velmi jsem se inspiroval ovladači k Desktopu od Proximy z něhož jsem disassembloval a zdokumentoval několik ovladačů. Menu mého pluginu se chová stejně. Uvnitř jsou odlišnosti, přinejmenším kvůli hláškám v češtině, umístění v jiné oblasti RAM, jiným dostupným funkcím editoru a samozřejmě tisk samotný je zcela odlišný. Desktop poskytuje řádek 12px vysoké grafiky, D-Text poskytuje jeden řádek textu dlouhý 64 znaků, které musí ovladač pro tiskárnu připravit.
Každý ovladač by měl v nastavovacím menu přinejmenším zobrazovat své jméno a kolik řádků už bylo na stránku vytištěno, aby uživatel měl přesnou představu kdy dojde k vysunutí papíru. Taktéž by měl vždy umožnit ukončení stránky a zahájení tisku nové, což se v ovladačích pro Desktop ukrývalo pod klávesou O a i v ovladačích pro D-Text tuto zvyklost zachovávám. Jestli bude nabízet víc silně záleží na schopnostech tiskárny.
Pokud plugin není ovladačem tiskárny, tak by se pod EXT I mělo skrývat jeho UI, kdežto pod EXT P by se měl chovat minimalisticky, viz příklad (TODO - příklad vytvořit) a dělat jen nezbytné minimum, aby se editor nepokazil, když uživatel s netisknoucím pluginem tisk spustí. Předběžné hádám, že by mělo stačit, když na dotazy čísla řádku vrátí nulu a při pokusu o tisk se zastaví, jakoby byl tisk přerušen stiskem BREAK.
TODO - screenshoty menu alespoň ze dvou ovladačů
EXT P - spustí tisk od prvního řádku nastavené oblasti a bude tisknout až do posledního řádku oblasti. Původně D-Text vždy tiskl vše od začátku textu (polohy kurzoru?) až do konce textu. Toho lze nyní dosáhnout klávesovou zkratkou EXT A před tiskem, která označí vše, resp. nastaví oblast od řádku 0 do posledního řádku s textem.
Způsob tisku z vybrané oblasti dovoluje tisknout kratší části textu bez nutnosti jeho úpravy, např. vybrat pouze tabulku z jinak dlouhého článku. Nebo tisknutím po částech zkombinovat kratší části z delšího "dokumentu" na jednu stránku.
D-Text se během tisku ptá ovladače kolikátý řádek se tiskne. Pokud je povolené záhlaví a tiskne se řádek 0 (tj. začátek nové stránky), editor předá ovladači sestavené záhlaví v řádkovém bufferu. Pro řádek 1 se předá oddělovací řádek záhlaví, což je obvykle prázdný řádek a teprve potom se bude pokračovat v tisku řádků s textem.
Ošetření správného ukončení stránky i hlídání počtu řádků, které se na stránku vejdou řeší ovladač tiskárny. D-Text rozhoduje pouze o obsahu řádků, které ovladači připravuje a případně ovladači řekne, že má stránku ukončit předčasně, pokud je v textu zalamovací značka (znak libry jako první znak na řádku).
D-Text taktéž nijak neřeší okraje stránky. Původně se při tisku editor staral o posunutí textu vpravo levým okrajem, uživatel si mohl zvolit 0 až 15 mezer před každým řádkem, ale to je nyní taky starost ovladače. Některé tiskárny umí řešit okraje jinak, nemusí se vkládat mezery, jiné tiskárny okraje neumožní (ZX Printer - okraj se nevejde) a toto nastavení ani v ovladači být nemusí.
D-Text nově nijak neřeší kódování češtiny v tiskárně. To je opět výhradní starost ovladače, aby kódovaní editoru správně převedl. Na některé tiskárny se tiskne graficky a překódovávat znaky není potřeba, posílají se tiskárně sestavené z pixelů z písma v ovladači (BT-100...) nebo z vektorového písma z úseček (plotry). Pro jiné tiskárny je konverze nezbytná (Epson...), ale ani u nich by se uživatel neměl starat o víc, než jen o to, že má správný ovladač ke své tiskárně, žádné definování konverzních tabulek v menu... Správná konverze češtiny pro konkrétní tiskárnu je starost programátora ovladače.
Záhlaví stránky
EXT SS+H - vyvolá dialog pro zadání textu záhlaví, který může být až 32 znaků dlouhý, tj. polovinu šířky stránky. Pokud je záhlaví zapnuté, může se sestavovat třemi způsoby, Buď je text vlevo a číslo stránky vpravo, nebo text vpravo a číslo stránky vlevo, nebo se toto střídá na lichých stránkách jedním způsobem a na sudých druhým. Poslední možnost je pouze číslo stránky uprostřed bez textu záhlaví.
K záhlaví ještě lze určit znak, kterým se bude oddělovat od zbytku stránky. Výchozí je mezera, mezi záhlavím a textem stránky tak bude prázdný řádek. Kromě mezery lze v tuto chvíli zvolit ještě pomlčku, rovnítko a podtržítko. Možnost zadat libovolný znak prozatím odkládám, kdyby zbylo místo.
Záhlaví se zapíná v nastavovacím menu editoru. Zarovnání vlevo, vpravo a střídání umístí v dialogu EXT SS+H zadaný text. Zarovnání na střed pouze vloží vycentrované číslo stránky.
Zápatí stránky
To D-Text neumí a pravděpodobně umět nebude, není dost místa v paměti.
Tiskárny, které bych chtěl podporovat
- ZX Printer - protože to je tradiční Sinclair tiskárna a protože je emulovaná ve Fuse emulátoru.
- 9/24 jehličkové tiskárny na LPT, protože to je relativně snadné a pořád jsou mezi Spectristy používané
- tiskárny PCL3 na LPT - protože můj DeskJet a laserovka, kterou mám k dispozici
- RS232 ESCPOS tiskárna BL112 - protože je fajn a velikostí připomíná ZX Printer
- mou RS232 HPGL repliku Alfi - jeden z důvodů celého dobrodružství
- možná plotr Minigraf Aritma a původní Alfi (má malou prioritu)
- pomůžu s ovladačem pro BT-100 pokud se někdo postará o tisk samotný
Primárně bych chtěl mít jeden D-Text s podporou tolika tiskáren, ke kolika se podaří vytvořit ovladač, ne mnoho D-Textů, každý s nějakou velmi obskurní úpravou zamotanou do kódu D-Textu, kam se to zrovna dalo nacpat, jako je třeba původní verze D-Textu pro Alfi, Nebo R-Text odvozený od D-Textu, protože obsahuje ovladač pro upravenou tiskárnu BT-100.
Ideálně by ke každé podporované tiskárně měl existovat perfektně vyladěný ovladač jako plugin do nového D-Textu zcela nezávislý na odlišnostech editoru (dokud zůstane API pro plugin stejné), nezávislý na souborovém úložišti, maximálně přenositelný, jak jen to půjde. Do budoucna uvažujeme i o verzi D-Textu pro eLeMeNt ZX využívající textový režim s vyšším rozlišením a tedy hezčími písmenky. Pokud bude ovladač využívat podprogramy pro výpis znaků skrz callpointy D-Textu měl by i v tomto případě zůstat funkční beze změny.
ovladač tiskárny ZX Printer
Původní Spectral Writer uměl tisknout primárně na ZX Printer s možností tisku na znakové tiskárny s různým nastavením. Propagovali to jakože Spectral Writer a tedy i D-Text umí tisknout na 8 tiskáren. Ale kvůli potřebě rozšířit klávesové kódy pro psaní diakritiky a nedostatečnému zpracování kódů kláves původního podprogramu pro čtení klávesnice byla v D-Textu možnost tisknout na ZX Printer rozbitá a nahrazená podporou znakových tiskáren EPSON. Přinejmenším to tak bylo ve verzi z Bratislavského Betaklubu, ze které jsem vycházel.
Uživatelů ZX Printer určitě není a nebude mnoho, ale je to "tiskárna", která k počítači ZX Spectrum patří a která je podporovaná i v některých emulátorech (např. Fuse emulátor). Proto chci nějakou podporu ZX Printer zachovat. Ale protože zároveň potřebuji prostor v paměti, tak ovladač musí být od editoru oddělen. To sebou nese narozdíl od tiskáren znakových nutnost nějak zajistit přístup k písmu v editoru, nebo písmo přidat do ovladače tiskárny a zajistit pro něj dost prostoru.
Rozhodl jsem se, že ponechám raději víc prostoru pro ovladač. Do budoucna to usnadní podporu dalších čistě grafických tiskáren, které nemají písmo v sobě. I za cenu rizika, že bude písmo v paměti navíc, nebo dokonce dvakrát stejné, je to tak lepší, protože některé tiskárny stejnak budou potřebovat lepší písmo (plotry vektorové), ne miniaturní znaky 8x4px, jako ZX Printer, který umí vytisknout pouze 256px na řádek.
Nyní, s odstupem, když už je ovladač pro ZX Printer v základu dokončen, mohu prohlásit, že ani pro ZX Printer ke zduplikování písma v paměti nedošlo, protože ovladač kopíruje grafiku z náhledu na obrazovce. Možná kdybych se rozhodl rozšířit ovladač o tisk polovin textu širším písmem s tím, že se pak vytištěné pruhy papíru podélně slepí do jedné stránky... četl jsem o tom, že tento způsob uměl snad Tasword v některé z verzí? Ale to už je specialitka s velmi malou prioritou. Praktické využití ZX Printer kromě emulátorů kvůli nesehnatelnému papíru nejspíš nemá.
Ovladač, je vybaven jednoduchým nastavovacím menu ve kterém lze zvolit pouze výšku stránky a případné oddělení stránek prázdným řádkem, nebo pomlčkami. Ve výchozím stavu se stránky neoddělují, protože tiskárna tiskne na roli papíru, kde to nemá velký smysl, ale možnost tam je.
Pokusíte-li se tisknout a tiskárna není detekována. Tak se ovladač nejprve pokusí tiskárnu detekovat znovu a nepodaří-li se, tak zobrazí hlášku a skončí stejně, jako při přerušení tisku stiskem klávesy BREAK. Mimochodem i efekt s proužky v BORDERu pochází z Desktopu, přišlo mi rozumné zachovat jednotu mezi editory.
ovladač RS232
TODO - vytvořit
dummy plugin
Nejmenší možný plugin, který nedělá vůbec nic a existuje jen jako ucpávka, záslepka, náhražka... je veliký 36 bytů a ukazuje nezbytné minimum, co plugin musí obsahovat, aby v D-Textu nepůsobil potíže, nebo dokonce zhroucení editoru, když se ho editor pokusí zavolat.
TODO - vytvořit a zdokumentovat více ovladačů tiskáren
Způsob interakce D-Textu s ovladačem
Aby tisk mohl být přiměřeně univerzální, bude D-Text tiskovému ovladači předávat jeden řádek textu dlouhý 64 znaků, ten si musí ovladač nějak zpracovat. Obsah řádku nemusí být nutně jen tisknutý text, ale může to být i záhlaví stránky, je-li zapnuto.
Zpátky by naopak měl ovladač předávat pouze číslo aktuálního řádku, protože z principu každá tiskárna dovoluje trochu jiný počet řádků, případně může být odlišně nastavená a D-Text potřebuje vědět, kdy se tiskne řádek 0, aby mohl poslat záhlaví, pokud je definováno a povoleno.
Jak bude tiskárna řízena, jak se jí budou předávat data, jestli textově, nebo graficky, jaké řídící kódy a jaké kódování diakritiky u textových tiskáren, to samotný editor nebude a nemá řešit. To je záležitost ovladače tiskárny.
cpu z80undoc org 63000 ; callpointy D-Textu na pevně určených adresách k dispozici ovladači tiskárny CP_READKEY equ 32747 ; čtení klávesnice CP_TEXTOUT equ 32750 ; výpis řetězce na obrazovku, pluginy Desktopu používají RST 16, ale to nezapadá do stylu D-Textu CP_MPRINT equ 32753 ; výpis jednoho znaku na obrazovku CP_NUMOUT8 equ 32756 ; výpis 3 místného čísla na obrazovku CP_NUMOUT16 equ 32759 ; výpis 16bit čísla na obrazovku CP_CLR_SQUARE equ 32762 ; vymaže obdélníkovou oblast určenou adresou v HL a rozměry v BC (potřebuje nastavovací menu) CP_SCROLL_UP equ 32765 ; scroll nahoru od řádku v A do řádku 22 CPLN_BUFFER equ 55363 ; adresa řádkového bufferu přes který se předávají 64 znakové řádky k vytisknutí, sem D-Text ukládá řádek ; k vytisknutí, výjimkou je pouze ZX Printer, který zneužívá toho, že D-Text totéž vypíše i na řádek 21 na ; obrazovku, protože ZX Printer potřebuje pro tisk grafická data široká 256px jp PRINT ; podprogram, který vytiskne jeden řádek textu připravený D-Textem jp INIT ; podprogram, který vykreslí menu a dovolí uživateli měnit parametru pluginu db "jméno pluginu" ; jméno pluginu cca do 20 znaků zakončené 0, zobrazuje se v hlavním menu db 0 ;-------------------------------------------------------------------------------------------------- ; tisk řádku z bufferu ; ; vstupní hodnota v registru A pro alternativní chování tiskového programu ; 0 = tisk (editor předává ovladači řádek k vytištění) ; 1 = vrátí číslo tisknutého řádku od zahájení stránky (nezbytné k tisku záhlaví, je nutné odlišit řádek 0 a 1) ; 2 = vrátí počet zbývajících řádků na tištěnou stránku (může posloužit k tisku zápatí) ; 3 = ukončí stránku (náhrada form feed, umožní editoru stránku ukončit kdykoli, např. značkou v textu) ; ; vrací flagy C pokud byl tisk přerušen stiskem BREAK ; Z pokud byl vytištěn poslední řádek stránky ; NC/NZ v ostatních případech ; ; pokud A <> 0 při volání, tak se flagy neřeší PRINT or a ; 0 = tiskni řádek z bufferu jr z,PRINT_LINE dec a ; 1 = vrať číslo tisknutého řádku (od 0) jr z,REPORT_LINE dec a ; 2 = vrať počet zbývajících řádků (1 = bude se tisknout poslední) jr z,REPORT_LINES xor a ; 3 = ukonči stránku ld (OPT_STATUS),a ; vynuluj stav ovladače (1 = stránka zahájena) jr FORM_FEED ; proveď ekvivalent form feed pro tuto tiskárnu
API ovladače a D-Textu není definitivní. Skoro jistě v něm nastanou změny. Toto je spíš koncept a úvaha nad jednou z možností, jak budu tisk řešit.
Tabulka kódování znaků s diakritikou
Následující tabulka je potřeba pro všechny možné konvertory a převaděče mezi D-Textem a jinými textovými editory.
dec | hex | Sinclair BASIC | D-Text | Tasword nikoli BCS | Tasword BCS | Desktop |
---|---|---|---|---|---|---|
128 | 0x80 | □ | Á | é | □ | |
129 | 0x81 | ▝ | Č | ě | ▝ | |
130 | 0x82 | ▘ | Ď | š | ▘ | |
131 | 0x83 | ▀ | É | č | ▀ | |
132 | 0x84 | ▗ | Ě | ř | ▗ | |
133 | 0x85 | ▐ | Í | ý | ▐ | |
134 | 0x86 | ▚ | Ň | á | ▚ | |
135 | 0x87 | ▜ | Ó | í | ▜ | |
136 | 0x88 | ▖ | Ř | ů | ▖ | |
137 | 0x89 | ▞ | Š | ú | ▞ | |
138 | 0x8A | ▌ | Ť | ó | ▌ | |
139 | 0x8B | ▛ | Ú | ď | ▛ | |
140 | 0x8C | ▄ | Ů | ? | ▄ | |
141 | 0x8D | ▟ | Ý | ň | ▟ | |
142 | 0x8E | ▙ | Ž | ? | ▙ | |
143 | 0x8F | █ | ' | ž | █ | |
144 | 0x90 | UDG "A" | á | |||
145 | 0x91 | UDG "B" | č | |||
146 | 0x92 | UDG "C" | ď | |||
147 | 0x93 | UDG "D" | é | |||
148 | 0x94 | UDG "E" | ě | |||
149 | 0x95 | UDG "F" | í | |||
150 | 0x96 | UDG "G" | ň | |||
151 | 0x97 | UDG "H" | ó | |||
152 | 0x98 | UDG "I" | ř | |||
153 | 0x99 | UDG "J" | š | |||
154 | 0x9A | UDG "K" | ť | |||
155 | 0x9B | UDG "L" | ú | |||
156 | 0x9C | UDG "M" | ů | |||
157 | 0x9D | UDG "N" | ý | |||
158 | 0x9E | UDG "O" | ž | |||
159 | 0x9F | UDG "P" | ˇ | |||
160 | 0xA0 | UDG "Q" | ä | |||
161 | 0xA1 | UDG "R" | ĺ | |||
162 | 0xA2 | UDG "S" | ľ | |||
163 | 0xA3 | UDG "T" | ô | |||
164 | 0xA4 | UDG "U" | ŕ | ľ | ||
165 | 0xA5 | RND | TAB | |||
166 | 0xA6 | INKEY$ | Ä | š | ||
167 | 0xA7 | PI | Ľ | č | ||
168 | 0xA8 | FN | řídící znak 1 | ř | ||
169 | 0xA9 | POINT | řídící znak 2 | ž | ||
170 | 0xAA | SCREENS$ | řídící znak 3 | ý | ||
171 | 0xAB | ATTR | řídící znak 4 | á | ||
172 | 0xAC | AT | řídící znak 5 | í | ||
173 | 0xAD | TAB | řídící znak 6 | é | ||
174 | 0xAE | VAL$ | řídící znak 7 | Ĺ | ||
175 | 0xAF | CODE | řídící znak 8 | Š | ||
176 | 0xB0 | VAL | Č | |||
177 | 0xB1 | LEN | Ř | |||
178 | 0xB2 | SIN | Ž | |||
179 | 0xB3 | COS | Ý | |||
180 | 0xB4 | TAN | Á | |||
181 | 0xB5 | ASN | Í | |||
182 | 0xB6 | ACS | É | |||
183 | 0xB7 | ATN | ä | |||
184 | 0xB8 | LN | ? | |||
185 | 0xB9 | EXP | ď | |||
186 | 0xBA | INT | ĺ | |||
187 | 0xBB | SQR | ó | |||
188 | 0xBC | SGN | ô | |||
189 | 0xBD | ABS | ť | |||
190 | 0xBE | PEEK | ú | |||
191 | 0xBF | IN | ů | |||
192 | 0xC0 | USR | Ä | |||
193 | 0xC1 | STR$ | ? | |||
194 | 0xC2 | CHR$ | Ď | |||
195 | 0xC3 | NOT | Ľ | |||
196 | 0xC4 | BIN | Ó | |||
197 | 0xC5 | OR | Ô | |||
198 | 0xC6 | AND | Ť | |||
199 | 0xC7 | <= | Ú | |||
200 | 0xC8 | >= | Ů | |||
201 | 0xC9 | <> | ň | |||
202 | 0xCA | LINE | ŕ | |||
203 | 0xCB | THEN | ě | |||
204 | 0xCC | TO | Ň | |||
205 | 0xCD | STEP | Ŕ | |||
206 | 0xCE | DEF FN | Ě |
Znak TAB s kódem 165 se v D-Textu nedá vložit do textu, původně to byl řídící znak pro starší způsob komprese bez grafické podoby, později po rozšíření o slovenské znaky se řídícím znakem stal kód 175 a vynechaný znak 165 jsem mohl využít k zobrazování lépe vypadajících zarážek (tabulátorů) a tím ušetřit 8 bytů paměti.
Řídící kódy 1 až 8 (formátovací značky) mohou být vloženy do textu pomocí EXT číslo, kde číslo je 1 až 8 a slouží k nastavení řezů písma na tiskárně. Typicky tiskárny EPSON umí tisknout písmem tlustým (bold), nakloněným (italica), podtrženým (underline), přeškrtnutým (strict)... toto je jediná možnost v D-Textu, pokud chci zachovat kompatibilitu s předchozími verzemi, jak dosáhnout alespoň nějakého formátování textu. V editoru se budou zobrazovat jako horní index, resp. číslo posunuté o 2px výš.
TODO - doplnit do tabulky kódování dalších editorů
TODO - ověřit správnost a kompletnost Tasword BSC kódování
Download
- 2022-02-20_dtext-disasm.tar.bz2 - disassemblovaný a nahrubo analyzovaný Betadiskový D-Text z roku 1994
- D-Text_uzivatelska_prirucka_daniel-jenne_ocr-zxcygnus_font-softhouse.pdf - manuál Daniela Jenneho k jeho D-Textu převedený do PDF jako OCRkovaný text (dříve se internetem potulovalo jen PDF z nascanovaných obrázků)
- dtext-manual-djenne.tar.bz2 - stejný manuál v balíčku i se zdrojovým ODT dokumentem pro LibreOffice
Související odkazy
- různé verze D-Textu na OldComp Wiki - verze nejbližší té, ze které jsem vycházel je asi "D-Text 1994 Betadisk "
- Spectral Writer na Spectrum Computing - editor, ze kterého D-Text vznikl lokalizací a dalšími úpravami Daniela Jenneho
- Spectral Writer na World Of Spectrum - editor, ze kterého D-Text vznikl lokalizací a dalšími úpravami Daniela Jenneho
- diskuze o D-Textu na OldComp.cz
Historie změn článku
- 2022-02-20 - Zveřejněna první část.
- 2023-06-16 - Zveřejněn z papíru do textu převedený manuál.
- 2023-12-23 - Aktualizován manuál - použil jsem Softhousovo správně počeštěné písmo.
- 2025-09-20 - Aktualizace článku, rozšíření texty, screenshoty... mnoho detailů o nově připravované verzi D-Textu
- 2025-09-25 - Další drobné korekce a doplnění.