Úvod
Hledat
Ovladače
Hardware
Software
Abíčko
O nás

Návody - Dosemu - II

Dosemu - II

7. 1. 2003 07:00 | Jan Marek

Instalace a konfigurace emulátoru DOSu. Čeština v účetnictví. Tisk.

Ačkoliv jsem nepočítal s tím, že budu psát seriál, byl jsem překvapen reakcemi a nakonec se mi sešlo několik témat, která jsem se rozhodl zpracovat do pokračování. Takže dnes se podíváme jednak na instalaci (x)dosemu a jeho konfigurační soubor a dále na tisk z aplikací provozovaných pod (x)dosemu.

Co je dosemu

Dosemu je program, který v rámci Linuxu připraví prostředí pro běh DOS-ových programů. Dnes dosemu umožňuje mapování klávesnice a různé znakové sady pro zobrazování na konzoli v X Window okně, ale také běh grafických programů (zejména her) jak v X Window, tak na textové konzoli, kterou umí přepnout do grafického režimu. Já sám tuto aplikaci používám pro provoz Abry (potažmo FoxPro prostředí), ale mám zprávy, že pod dosemu v prostředí konzoly jel graficky např. Wolfenstein3D, v dokumentaci se dočtete, že je možný běh Doom-u, takže se zdá, že je toto protředí opravdu univerzální. V dosemu.conf najdete i volby, které by měly zpřístupnit síť Novell. Tuto vlastnost jsem však nezkoušel, proto o ní nepíšu. Než se začnete těšit na běh svého oblíbeného programu pro DOS pod dosemu, prohlédněte si soubor EMUfailure.txt, kde najdete příklady programů s dosemu nespolupracující a také příčiny jejich nespolupráce. Stejně nakonec nezbude, než to prvně zkusit a pak se radovat ;-).

Instalace dosemu

Instalace dosemu se skládá ze dvou částí: jednak z instalace jakéhosi 'runtime', což je samotný balíček dosemu z vaší oblíbené distribuce. Do tohoto prostředí je však nutné doinstalovat ještě DOS. A zde máme na výběr ze tří variant:

  1. MS DOS: budeme k němu (asi) potřebovat licenci, avšak pokud jej vyhrabete někde z hromady starých (a možná i 5 1/4" palcových, ke kterým budete ještě muset sehnat mechaniku ;-) ) disket (samozřejmě vč. licence), tak to bude asi dobrá volba...
  2. DrDOS aka OpenDOS, aka CalderaDOS: licence zní, že pro nekomerční použití je zdarma, pro komerční použití je zdarma 90 dní a pak je nutno zakoupit licenci. Více informací (včetně stahnutelných obrazů disket) najdete na www.drdos.org, www.drdos.com a www.drdos.net
  3. FreeDOS: Tento DOS je zdarma a k nalezení na adrese www.freedos.org

Alternativně lze pro provoz DOS-u pod dosemu použít funkční starý harddisk, na kterém byl DOS nainstalován: pak je třeba akorát tento disk připojit do systému a vědět, na kterém oddílu (partition) je funkční DOS. Pro tento účel lze též použít DOS z (např.) Win95, kdy je ale nutné zaručit, že bude startovat pouze do DOS-u a také bez úvodních grafických obrazovek. To se dá zařídit v souboru msdos.sys, kde do sekce [Options] zapíšeme tyto direktivy:

Logo=0
BootGUI=0

Pokud tato sekce v daném souboru neexistuje, pak ji samozřejmě vytvoříme.

Ještě poznámka k výběru samotného DOS-u: Mám otestované poslední dva systémy, tj. FreeDOS a DrDOS. Zatímco FreeDOS mi občas spadl i s otevřenou Abrou a já jsem musel reindexovat soubory, tak asi před týdnem jsem nainstaloval na radu kamaráda DrDOS ve verzi 7.03, a zatím mi nespadl ani jednou. Zdá se, že má asi korektněji implementované nedokumentované funkce ;-).

Po výběru ze škály různých DOS-ů vyvstává otázka, jak provést jejich instalaci do prostředí dosemu. Zde máme opět na výběr z několika možností:

  1. na samostatný diskový oddíl

    Tato volba bude aktuální, pokud budeme chtít provozovat dual-boot systém, případně máme starší počítač s nainstalovaným *-DOS-em apod. V tomto případě nastavíme v souboru dosemu.conf direktivu $_hdimage např. takto (předpokládejme, že máme nainstalovaný DOS na master disku na druhém kanálu IDE v oblasti 1):

    $_hdimage = "/dev/hdc1"

  2. do adresáře na disku

    Tuto možnost použijeme, pokud pro DOS nechceme vyčlenit samostatnou diskovou oblast, navíc se v podstatě nejjednodušeji připravuje. Do zvoleného adresáře (předpokládejme např. /var/lib/dos) totiž stačí prostě nakopírovat soubory potřebné k běhu DOS-u, upravit autoexec.bat a config.sys tak, ze se adresář bude chovat pro DOS jako disk C:\, dále najdeme adresář se soubory potřebnými pro dosemu (např. tím, že vyhledáme soubor exitemu.com, v Debianu je v adresáři /usr/lib/dosemu/commands), který pak nalinkujeme do našeho pomyslného disku C:\ příkazem

    ln -s /usr/lib/dosemu/commands /var/lib/dos

    a nastavíme proměnnou PATH v souboru autoexec.bat tak, aby tento adresář také obsahovala. Tím je instalace adresáře hotova. Výsledný adresář celý nalinkujeme do adresáře, který nám určuje již zmiňovaná proměnná DOSEMU_LIB_DIR příkazem:

    ln -s /var/lib/dos /var/lib/dosemu

    (Pozor, toto platí pro Debian, který má proměnnou DOSEMU_LIB_DIR nastavenou právě na /var/lib/dosemu!)

    a nakonec nastavíme proměnnou $_hdimage takto:

    $_hdimage = "dos"

    (dos je zde jméno adresáře)

Tím jsme připravili všechny podmínky pro běh DOS-u pod dosemu. Nicméně by bylo ještě vhodné zastavit se alespoň u několika proměnných ze souboru dosemu.conf. Takže jdeme na to...

Vybrané volby z dosemu.conf

  • volba $_debug

    Tato volba nám dává možnost ovlivnit rozsáhlost chybových výpisů. Možné volby můžeme najít v man dosemu.bin pod volbou -D. Do tohoto souboru se však zapisují bez znaku D, takže nastavení $_debug = "-a" je ekvivalentní přepínači -Da na příkazové řádce.

  • volby $_cpu a $_mathco

    Umožňuje nám zvolit typ procesoru, který bude dosemu emulovat pro DOS. Je možno použít hodnoty 80[345]86. Je zvláštní, že pokud jsem nastavil jinou hodnotu, než 80386, odmítal se mi rozjet runtime FoxPro. Čili doporučená hodnota je $_cpu = "80386" a k ní dále $_mathco = (on), která způsobí emulaci matematického koprocesoru.

  • volby $_xms, $_ems, $_ems_frame, $_dpmi, $_dosmem

    Tyto volby se týkají různých paměťových módů, které bude dosemu emulovat pro DOS. Upozorňuji především na volbu $_dpmi: bez ní se nerozjede nejen FoxPro, ale ani žádný jiný program, který pracuje s PharLap extenderem. Napadá mě AutoCAD, ale ten jsem pod dosemu nezkoušel. V EMUfailure však najdete, že verze 12c1 pro DOS nepojede, neb používá starší PharLap extender. Takže spíš novější verze, pokud existuje. Moje funkční sada pro provoz Abry (FoxPro) je tato:

    $_xms = (1024)
    $_ems = (2048)
    $_ems_frame = (0xe000)
    $_dpmi = (8192)
    $_dosmem = (640)

  • volby $_term_char_set a $_layout

    Tady začíná nastavování národního prostředí. Nastavením $_term_char_set = "latin2" říkáme dosemu, že náš terminál ovládá tuto znakovou sadu a dále budeme potřebovat nastavit rozložení klávesnice: to nastavíme např. takto: $_layout = "cz-qwerty", příp. máme ještě na výběr volbu cz-qwertz.

  • volby $_X_keycode a $_X_font

    Tyto volby jsou pokračováním nastavení národního prostředí pro xdosemu, tedy pro X Window System. Zde se mi osvědčilo toto nastavení:

    $_X_keycode = (on)
    $_X_font = "vga"

    První volbou nutíme xdosemu používat klávesnici nadefinovanou volbou $_layout. Je zde trošku problém, protože takto nadefinované klávesnice se nelze zbavit, což dělá problém zejména při psaní backslash-e. Ale dá se to přežít ;-). Význam druhé volby jsme probírali v minulém článku: definuje se jí používaný font pro zobrazování.

  • volba $_X_updfreq

    Touto volbou se definuje rychlost odezvy xdosemu na klávesnici. Doporučuji ji nastavit na menší hodnotu (mám nastavenu hodnotu "1"), protože někdy bylo dosemu poměrně dost v závěsu...

  • volby $_printer a $_printer_timeout

    Těmito volbami nastavujeme chování tisku pod dosemu. První volbou definujeme jednotlivé tiskové fronty tak, jak mají být postupně přiřazeny k LPT1, 2 a 3 a druhou volbou definujeme timeout, po jehož vypršení je úloha předána ke zpracování frontě. Já jsem ponechal defaultní hodnotu 20, je ale možné, že budete tuto hodnotu potřebovat zvýšit.

To by bylo ve zkratce k hodnotám, na které bychom se měli zaměřit ještě před prvním spuštěním dosemu, abychom s jeho chováním byli maximálně spokojeni hned napoprvé. A nyní se již blížíme k tisku... ;-)

Tisk z aplikací pod dosemu

Možná existují aplikace, u kterých není nutné provozovat žádné papírové výstupy, např. hry. Nicméně pokud má dosemu sloužit jako základ pro účetnictví, pak se bez tisků rozhodně neobejdeme. Takže jak na to?

Při prohlížení voleb souboru dosemu.conf jsme si všimli, že dosemu umí emulovat pro samotný DOS hned tři zařízení pro tisk: LPT1-3. K těmto zařízením lze přiřadit jednotlivé fronty nadefinované v LPR(ng).

Pro definici front tak, aby nám vše tisklo opravdu česky, si však musíme uvědomit několik důležitých bodů:

  1. Formát úlohy

    Musíme si ujasnit, v jakém formátu budeme posílat do tiskové fronty úlohy, a podle toho nastavit správně filtr, který je bude zpracovávat do formátu srozumitelného naší tiskárně.

    Je jasné, že můžeme využít též přímý tisk na tiskárnu, pokud dokážeme vysvětlit DOS-ovskému programu, jakou tiskárnu používáme, jaké máme použité kódování češtiny apod., prostě stejně jako v DOS-u. Odměnou nám bude v případě jehličkové tiskárny tisk nejvyšší možnou rychlostí, protože nebude nutné, aby tiskárna jela v grafickém režimu.

    U laserových tiskáren si dovolím tvrdit, že je lhostejné, zda tiskárna tiskne v grafickém režimu, nebo v textovém, a proto bude nejschůdnější cesta přes rozumný, přenositelný formát: v našem případě asi PostScript. Jednak je to dostatečně přenositelný formát a jednak v GhostScriptu s vysokou pravděpodobností najdeme driver i pro naši tiskárnu.

    Zde ovšem narazíme na jedno omezení: zatímco u jehličkové tiskárny v raw režimu můžeme využít i různé formátovací sekvence, takže můžeme donutit tiskárnu k tisku různě širokého písma, zvýraznění apod., v případě, že se rozhodneme využít k tisku PostScript, budeme muset na takové vymoženosti zapomenout. Alespoň já jsem zatím nenašel interpretr, který by dokázal převést formátovací znaky pro byť i jeden typ tiskárny do PostScriptu a to spolu s textem...

  2. Kódování češtiny v tiskové úloze.

    Pokud dokážeme přinutit program, aby posílal stejné kódování, které umí zobrazit naše tiskárna, máme vyhráno a jedeme v raw módu. Pokud to nedokážeme, je třeba vybrat vhodné kódování a tomuto kódování následně přizpůsobit filtr, přes který budou data tisknuta.

Výběr SW pro tisk:

Osobně pro tisk používám LPRng, jako transformační program se mi osvědčil a2ps a pokud budeme potřebovat nějaká překódovávání, pak s úspěchem můžeme využít cstocs. Pro popis systému tisku budu předpokládat tuto softwareovou kombinaci.

Prvně si tedy ukážeme zmiňovanou raw frontu. Zápis v /etc/printcap bude vypadat např. takto:

raw:

:lp=/dev/lp0
:filter=
:sd=/var/spool/lpd/raw
:ah
:další_volby

Komentáře snad netřeba, upozorním však na dvě věci: tisk lze vyzkoušet tak, že místo :lp=/dev/lp0 (nebo jiného zařízení, na kterém máme tiskárnu) můžeme použít řádek :/tmp/vystup (tento soubor musí existovat a lpr musí mít pro něj právo zápisu, vytvoříme ho tedy pomocí příkazu touch a nastavíme mu práva 666). Lpr pak bude tisky místo odesílání na zařízení poslušně zapisovat do souboru, takže můžeme kontrolovat, zda celý systém front běží tak, jak má. V případě, kdy je cílový soubor binární, jako např. u tiskáren s PCL tiskovým jazykem, toho sice moc neuvidíme, ale alespoň odchytneme případné chybové hlášení filtru, které by jinak bylo nevratně vytištěno na papír ;-).

Dále je pro odladění tisku (a neničení našich lesů ;-) výborný uvedený parametr :ah. Tento parametr způsobí to, že tisk je pouze přijat do fronty, avšak je pozastaven do zásahu administrátora (lpc release jméno_fronty číslo_job-u). V adresáři fronty pak můžeme prohlédnout, co se vlastně snaží posílat DOS-ovský program na tiskárnu (tedy pokud je to k prohlížení vhodné ;-) ) Já tento parametr používám i na svém notebooku, vytisknu si úlohy do fronty, pak přijdu k tiskárně, udělám lpc release jméno_fronty all a tisknu.

Pro složitější konfiguraci s PostScriptem budeme potřebovat několik věcí:

  1. musíme nastavit DOS-ovský program, aby tiskl písmem o stejné šířce (resp. všechny řádky měly stejnou šířku), zvláště pokud v tisku používá i rámečky.
  2. musíme tento program nastavit k tisku rozumného kódování, nejjednodušší pro další zpracování programem a2ps je (kupodivu) kódování CP1250 (Windows EE), další vhodné kódování je CP-852, tj. DOS-latin2. Kódování bří Kamenických jsem sice zkoušel, avšak výsledek nebyl v pořádku: rozhodil se mi tisk rámečků... Proč je vhodné právě kódování Windows-1250? a2ps s ním umí pracovat nativně. Pro ostatní kódování musíme předřadit filtr, který provede překódování do znakové sady, kterou a2ps ovládá.
  3. nastavíme frontu pro tisk na tiskárnu. V příkladu budeme předpokládat, že výstupem naší fronty je PostScriptová tiskárna; pokud tomu tak nebude, jistě máme rozchozenou frontu pro tisk PostScript-u na tuto tiskárnu a tuto frontu využijeme.

Předpokládejme, že tisková fronta pro tisk PostScriptu na naší tiskárně má název ps. Pak záznam v /etc/printcap bude vypadat asi takto:

dos1:

:lp=ps@localhost
:sd=/var/spool/lpd/dos1
:filter=( varianty viz dále )
:lpd_bounce
:další parametry

Řádek s filtrem pak bude různý dle kódování, které se nám podaří vyloudit na DOS-ovém programu. Nejjednodušší to bude v případě již zmiňovaného Windows-1250:

:filter= ( /usr/bin/a2ps -X ms-cp1250 --borders no -o - )

V případě, že od DOS aplikace dostaneme kódování CP852, použijeme tento řádek:

:filter= ( cstocs pc2a il2 | /usr/bin/a2ps -X iso02 --borders no -o - )

No a to je snad dostatečný základ k tomu, abychom se vrhli do přemíry kombinací zde nastíněných, a svou vlastní tvořivostí dovedli k úspěšnému tiskovému výstupu téměř jakýkoli program pod dosemu :-) A nakonec:

Nad dopisy čtenářů ;-)

Jak jsem uvedl na začátku, sešlo se mi několik reakcí na můj článek. Část reakcí jsem doufám uspokojil tímto článkem, část bych snad měl ještě okomentovat zde.

Jako první bych se vrátil ke kódování Kamenických. Byl jsem upozorněn, že převodní tabulka je obsažena ve zdrojácích links-u a ty je možno stáhnout např. zde, případně si můžete stáhnout soubor kamen.cp s kódováním. Od téhož autora jsem dostal i zprávu s obrázkem, kde je zachycen funkční a hezky česky píšící program Money6 Free. K tomu však bylo ještě třeba upravit font speciálně pro tento program. Za tyto informace vděčím Jiřímu Dutkovi, kterému tímto děkuji. Pokud provozujete Money6 a chtěli byste mít takhle hezky vypadající obrazovku, tak mu zkuste napsat.

Money6 Free

Svým kolegou od nás z Pedagogické fakulty jsem byl upozorněn, že lze ze souboru ega.cpi vytáhnout hezký font v kódování CP852. Stáhnout si ho můžete zde. Když jsem se ho ptal, jak ten soubor získal, odvětil mi, že prostě nastudoval formát souboru ega.cpi a napsal si prográmek. Já tedy děkuji za poskytnutý soubor, a pokud budete chtít napsat jeho tvůrci, můžete to zkusit na této adrese. Jím poskytnuté zdrojové texty programu pro vytáhnutí fontu z ega.cpi naleznete zde.

Ladislav Michl přidal pod první článek komentář o nesystémovosti přístupu. Má pravdu, v Debianu existují dokonce dva balíčky s fonty pro dosemu: xfonts-dosemu a xfonts-terminus-dos. A dále lze jednotlivé fonty nastavovat per-user v konfiguračním souboru ~/.dosemurc v adresáři každého uživatele, pokud mu to ovšem dovolíme v souboru dosemu.users. Takže tímto mu děkuji a připomínám, že slíbil dodat k sosnutí další hezké fonty ;-)

A ještě poznámka k instalaci Abry pro Tomáše Tatouška: K jeho diskusnímu příspěvku pod prvním článkem jsem se dostal až při psaní tohoto článku, čímž se omlouvám za pozdní reakci... Matně si vzpomínám, že instalace Abry opravdu trpěla tím, že program nedokázal najít PKUNZIP. Pokud se dobře pamatuji, tak jsem nakonec vytvořený adresář smazal, vytvořil znovu prázdný, nakopíroval jsem do něj soubor PKUNZIP a přejmenoval na pkunzip.exe a to tuším instalačnímu programu Abry stačilo... Takže, ještě jednou se omlouvám za opominutí sledování diskusního fóra, a doufám, že tato rada pomůže. Koneckonců se dá do filesystému zasahovat i "zezadu", za běhu instalačního programu... :-) Jsme v Unix-like operačním systému :-).

A to by snad bylo vše, těším se na oslavné ódy ;-))). Na závěr ještě obrazovka z české Abry.

Abra

Související články

České prostředí v okně xdosemu

Odkazy a zdroje

Diskuse k tomuto článku

Datum: 7. 1. 2003 12:27
Od: Primitif
Titulek: xdosemu a xfs

Po instalaci xdosemu do redhatu 6.2 (a 7.1) se mi pokazde zhroutil xfontserver... Co s tim? :)

Datum: 8. 1. 2003 00:49
Od: dobra rada nad zlato;-)
Titulek: xdosemu a xfs

Ze by smazat RH a nainstalovat si Debian?

Datum: 8. 1. 2003 14:07
Od: Jan Marek
Titulek: xdosemu a xfs

Nevim, co vedlo xfs k padu, ale xdosemu hleda standardne font vga (lze upravit v konfiguraku dosemu.conf direktivou $_X_font)

Honza Marek

Datum: 8. 1. 2003 21:43
Od: abiturient@worldonline.cz
Titulek: dosemu a vice disku

Zdravím,

je nějak možné přinutit dosemu, aby "uměl" i disky D:, E:, ..... Nějak jsem to nikde nenašel.

Pokud jsem nekoho uvedl do varu hloupou otazkou, omlouvam se....

Datum: 9. 1. 2003 08:09
Od: Pavel Stržínek
Titulek: dosemu a vice disku

v dosemu.conf nebo v dosemurc volbou $_hdimage - seznam oddělený mezerami.

Např: $_hdimage = "c.img /dev/hda1 /dev/hdd2:ro"

Pajosh

Datum: 9. 1. 2003 11:42
Od: Jan Marek
Titulek: dosemu a vice disku

Je to mozne resit taky primo za behu dosemu, ale pouze, pokud chcete pripojit konkretni adresar v Linuxu (treba taky disketovou mechaniku, kterou mate nekde namountovanou apod.): je na to prikaz lredir.

zkuste: lredir help

Zdravi
Honza Marek

Datum: 12. 1. 2003 16:55
Od: Olda
Titulek: dosemu a vice disku

Vytvoř si pouze odkazy k souborům

Datum: 18. 1. 2003 15:51
Od: Tomáš Tatoušek
Titulek: PKUNZIP ABRA GOLD for DOS

Děkuji za nakopnutí. Drobná poznámka: PKUNZIP.EXE se musí nakopírovat do adresáře /abragold/____.tmp. Tento vlastně vznikne při první násilně přerušené instalaci v důsledku chybějícího 'PKUNZIP'. Při další instalaci se sice objeví hláška znovu, ale po odentrování se instalace rozběhne. V configu musí být nutně DOS=UMB,HIGH, jinak se to nerozjede.

Datum: 9. 2. 2003 08:14
Od: Tomáš Tatoušek
Titulek: Tisk v ABRA for DOS

Poprosil bych o radu. Ve freedos mi tisk například programem edit.exe funguje. Abru ale zaboha nemohu přinutit cokoli tisknout. Chyba bude asi někde v nastaveni abry /tiskové definice/definice tiskáren atd. Nevim jakou tiskarnu ze seznamu vybrat, popřípadě si jí nadefinovat. Díky.


(c) AbcLinuxu s.r.o.   Grafika: megadesign