Bakal´aˇrsk´a pr´ace Pˇrekl´adac´ı editor Vypracoval: David Cimb˚ urek Vedouc´ı: RNDr. Aleˇs Zl´amal
Masarykova univerzita, Fakulta informatiky, 2002
Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze tato pr´ace je m´ ym p˚ uvodn´ım autorsk´ ym d´ılem, kter´e jsem vypracoval samostatnˇe. Vˇsechny zdroje, prameny a literaturu, kter´e jsem pˇri vypracov´an´ı pouˇz´ıval nebo z nich ˇcerpal, v pr´aci ˇr´adnˇe cituji s uveden´ım u ´pln´eho odkazu na pˇr´ısluˇsn´ y zdroj.
2
Podˇ ekov´ an´ı Na tomto m´ıstˇe bych r´ad podˇekoval vedouc´ımu sv´e bakal´aˇrsk´e pr´ace, RNDr. Aleˇsi Zl´amalovi, za cenn´e rady a pˇripom´ınky bˇehem vytv´aˇren´ı cel´eho projektu.
3
Shrnut´ı Tento projekt se snaˇz´ı ulehˇcit pr´aci lidem, kteˇr´ı pracuj´ı s obchodn´ı korespondenc´ı a mus´ı ji pˇrekl´adat z ˇceˇstiny do angliˇctiny ˇci z angliˇctiny do ˇceˇstiny. Pracuje na principu hled´an´ı zn´am´ ych slov a fr´az´ı v datab´azi a jejich zobrazov´an´ı na obrazovku, pˇr´ıpadnˇe ukl´ad´an´ı do souboru. Um´ı t´eˇz text zak´odovat do takov´e podoby, ˇze jej pot´e lze zobrazovat v libovoln´em z obou jazyk˚ u. Program umoˇzn ˇuje pˇrid´av´an´ı nov´ ych fr´az´ı do datab´aze. Kaˇzd´ y uˇzivatel jej tedy m˚ uˇze ,,nauˇcit‘‘ sv´emu oboru korespondence.
Kl´ıˇ cov´ a slova Strojov´ y pˇreklad, obchodn´ı korespondence, datab´aze, gdbm, ncurses, pˇrekl´adac´ı editor.
4
Obsah ´ 1 Uvod 1.1 Zad´an´ı projektu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Pl´an vypracov´an´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Struktura dokumentu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7 7 7 7
2 Strojov´ y pˇ reklad obecnˇ e 2.1 Syst´emy pˇr´ım´eho pˇrekladu . . . . . 2.2 Syntaktick´e transformaˇcn´ı syst´emy 2.3 Interlingu´arn´ı syst´emy . . . . . . . 2.4 Statistick´e syst´emy . . . . . . . . . 2.5 Hybridn´ı syst´emy . . . . . . . . . . 2.6 Syst´em pouˇzit´ y v tomto projektu .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
8 8 9 9 9 9 10
3 Pouˇ zit´ e programov´ e vybaven´ı 3.1 Knihovna ncurses . . . . . . . . 3.1.1 pdcurses . . . . . . . . . 3.2 Datab´aze gdbm . . . . . . . . . . 3.2.1 Struktura datab´aze . . . . 3.2.2 Otevˇren´ı datab´aze . . . . 3.2.3 Uzavˇren´ı datab´aze . . . . 3.2.4 Ukl´ad´an´ı dat do datab´aze 3.2.5 Z´ısk´av´an´ı dat z datab´aze 3.2.6 Dalˇs´ı funkce . . . . . . . . 3.2.7 gdbm pro DOS . . . . . . 3.3 V´ yvojov´ y syst´em DJGPP . . . . . 3.4 Electric Fence . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
11 11 11 11 11 12 12 12 12 13 13 13 14
. . . . . . . . . . . .
4 Datab´ aze fr´ az´ı 15 4.1 N´avrh datab´aze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4.2 Realizace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.3 Vytvoˇren´ı datab´aze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 5 Editaˇ cn´ı ˇ c´ ast programu 5.1 Poˇrizov´an´ı textu . . . . . . . . . . . . . . . . 5.2 Operace v hlavn´ım editaˇcn´ım oknˇe . . . . . . 5.2.1 Zmˇena smˇeru pˇrekl´ad´an´ı – Ctrl-W . . 5.2.2 Zmˇena pˇrekl´adac´ıho reˇzimu – Ctrl-P 5.2.3 Konec programu – Ctrl-X . . . . . . . 5.2.4 Naˇcten´ı textu ze souboru – Ctrl-J . . 5.2.5 N´asiln´e ukonˇcen´ı programu – Ctrl-C . 5.2.6 Uloˇzen´ı textu do souboru – Ctrl-O . . 5.2.7 Naˇcten´ı zak´odovan´eho textu – Ctrl-K
5
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
18 18 20 20 20 21 21 21 21 22
6 Pˇ rekladov´ aˇ c´ ast programu 23 6.1 Pasivn´ı pˇrekl´adac´ı reˇzim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 6.2 Aktivn´ı pˇrekl´adac´ı reˇzim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 7 Struˇ cn´ y popis vypracov´ an´ı hlavn´ıho programu 7.1 Vypracov´an´ı editaˇcn´ı ˇc´asti . . . . . . . . . . . . 7.2 Vypracov´an´ı pˇrekladov´e ˇc´asti . . . . . . . . . . 7.3 Dalˇs´ı obecn´e informace . . . . . . . . . . . . . . 7.4 Pˇrekl´ad´an´ı programu . . . . . . . . . . . . . . . 8 Z´ avˇ er
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
26 26 26 26 26 28
Seznam obr´ azk˚ u 1 2 3
Uk´azka pr´ace ve v´ yvojov´em prostˇred´ı rhide ˇs´ıˇren´em s DJGPP . . . . . . . . 13 Uk´azka pr´ace v hlavn´ım editaˇcn´ım oknˇe . . . . . . . . . . . . . . . . . . . . 18 Uk´azka pr´ace v aktivn´ım pˇrekladov´em reˇzimu . . . . . . . . . . . . . . . . . 24
6
1 1.1
´ Uvod Zad´ an´ı projektu
N´ azev: Pˇrekl´adac´ı editor Ofici´ aln´ı zad´ an´ı: Naprogramovat v jazyku C nebo JAVA editor, pracuj´ıc´ı jak pod Linuxem (eventu´alnˇe i jin´ ymi UNIXy), tak i pod DOSem (eventu´alnˇe i pod Windows), kter´ y pro ˇcesk´ y, anglick´ y, pˇr´ıpadnˇe francouzsk´ y, slovensk´ y nebo jin´ y text z mal´e, pˇresnˇe vymezen´e oblasti (napˇr. obchodn´ı korespondence) rozpozn´a zaveden´e obraty a fr´aze, vyj´adˇr´ı je ˇc´ıseln´ ym k´odem a vlastn´ı jm´ena a n´azvy ponech´a v jejich p˚ uvodn´ı podobˇe. Zak´odov´an´ı by mˇelo umoˇznit, aby jak odes´ılatel, tak adres´at pouˇz´ıvali ,,sv˚ uj‘‘ jazyk a o zbytek se postaralo ˇsikovn´e k´odov´an´ı a ,,chytr´ y‘‘ editor.
1.2
Pl´ an vypracov´ an´ı
Nejprve bude nutn´e vytvoˇrit editor, ve kter´em se bude upravovat pˇrekl´adan´ y text. Editor bude celoobrazovkov´ y. Bude moˇzn´e v nˇem cel´ y text napsat, nebo nahr´at text vytvoˇren´ y v nˇejak´em jin´em textov´em editoru (pouze ˇcist´ y ASCII form´at s diakritikou). Po dokonˇcen´ı u ´prav pˇrekl´adan´eho textu se pˇrejde do pˇrekladov´e ˇc´asti. V t´e bude prob´ıhat samotn´ y pˇreklad dan´eho textu. Pˇrekladov´a ˇc´ast bude m´ıt dva reˇzimy – reˇzim pasivn´ı a reˇzim aktivn´ı. Pˇri pasivn´ım reˇzimu se budou nahrazovat zn´am´a slova jejich ekvivalenty pˇr´ısluˇsn´eho jazyka nalezen´ ymi v datab´azi. Nezn´am´a slova budou ponech´ana beze zmˇeny. Pˇri aktivn´ım reˇzimu se zn´am´a slova ˇci fr´aze budou pˇrekl´adat stejnˇe, jako pˇri reˇzimu pasivn´ım. Pokud bude ale v textu obsaˇzeno nˇejak´e nezn´am´e slovo ˇci fr´aze, bude d´ana uˇzivateli moˇznost, aby jej zaˇradil do slovn´ıku a zadal jeho pˇr´ısluˇsn´ y pˇreklad. Po skonˇcen´ı pˇrekladu bude moci uˇzivatel uloˇzit na disk jak pˇreloˇzen´ y textov´ y soubor, tak i soubor ,,zak´odovan´ y‘‘, kter´ y bude obsahovat m´ısto zn´am´ ych fr´az´ı jejich k´ody obsaˇzen´e v datab´azi. Zak´odovan´e soubory bude moˇzno naˇc´ıst v editaˇcn´ı ˇc´asti programu. Bude samozˇrejmˇe moˇzn´e zvolit jazyk, do kter´eho se m´a zak´odovan´ y text pˇrev´est. Cel´ y projekt bude naps´an v jazyce ANSI [2] C. Pˇrekladov´e jazyky budou ˇceˇstina a angliˇctina.
1.3
Struktura dokumentu
V t´eto u ´vodn´ı kapitole je pops´ano zad´an´ı projektu a struˇcn´ y pl´an jeho vypracov´an´ı. V n´asleduj´ıc´ı kapitole rozeb´ır´am obecnˇe z´akladn´ı metody strojov´eho pˇrekladu. Tˇret´ı kapitola obsahuje popis program˚ u a n´astroj˚ u, kter´e jsem pˇri programov´an´ı projektu pouˇz´ıval. V n´asleduj´ıc´ı kapitole rozeb´ır´am strukturu datab´aze, ve kter´e jsou uloˇzeny pˇrekladov´e fr´aze a d˚ uvody, kter´e mˇe vedly pr´avˇe k t´eto struktuˇre. P´at´a kapitola jiˇz popisuje pˇr´ımo ˇ a kapitola se zab´ hlavn´ı program, pˇresnˇe ˇreˇceno jeho editaˇcn´ı ˇc´ast. Sest´ yv´a stˇeˇzejn´ı ˇc´ast´ı programu, tedy ˇc´ast´ı pˇrekladovou. V n´asleduj´ıc´ı kapitole struˇcnˇe popisuji, jak jsem pˇri programov´an´ı jednotliv´ ych ˇc´ast´ı postupoval. Osm´a kapitola obsahuje z´avˇer.
7
2
Strojov´ y pˇ reklad obecnˇ e
Lidsk´e jazyky jsou sloˇzit´e a komplikovan´e. Kaˇzd´a ˇreˇc m´a sv´e zvl´aˇstnosti a anom´alie, kter´ ymi se odliˇsuje od ostatn´ıch. Z tohoto d˚ uvodu se jazyky obt´ıˇznˇe pˇrekl´adaj´ı, at’ uˇz je pˇrekladatel ˇclovˇek nebo poˇc´ıtaˇc. Nˇekdy je pˇreklad urˇcit´ ych slov ˇci fr´az´ı u ´plnˇe nemoˇzn´ y. Napˇr´ıklad kmen Dani na Nov´e Guinei m´a pro vyj´adˇren´ı barev pouze dvˇe slova: mili pro tmavou studenou barvu a mola pro barvu svˇetlou teplou. Vˇeta ,,Chtˇel bych radˇeji b´ılou koˇsili neˇz koˇsili svˇetle ˇzlutou.‘‘ je prostˇe z ˇceˇstiny do daniˇstiny nepˇreloˇziteln´a. Toto byl ovˇsem atypick´ y pˇr´ıklad. Vˇetˇsinou strojov´ y pˇreklad [1] (machine translation) nˇejak´ ym zp˚ usobem provediteln´ y je. Nen´ı to ovˇsem nijak jednoduch´a z´aleˇzitost. Jak se syst´emy strojov´eho pˇrekladu postupnˇe vyv´ıjely, vznikaly st´ale sloˇzitˇejˇs´ı a promyˇslenˇejˇs´ı pˇrekl´adac´ı syst´emy.
2.1
Syst´ emy pˇ r´ım´ eho pˇ rekladu
Nejjednoduˇsˇs´ı zp˚ usob, jak text pomoc´ı poˇc´ıtaˇce pˇreloˇzit, je syst´em pˇr´ım´eho pˇrekladu. Takov´ y syst´em pouze nahrazuje slova zdrojov´eho jazyka slovy c´ılov´eho jazyka. Takov´ y syst´em se uplatˇ nuje hlavnˇe v oblastech, kde se pracuje s texty s omezenou slovn´ı z´asobou a jasnˇe definovan´ ym stylem, napˇr´ıklad obchodn´ı korespondence, technick´a dokumentace, a podobnˇe. Takov´eto syst´emy pˇr´ım´eho pˇrekladu obsahuj´ı korespondenˇcn´ı slovn´ıky, ve kter´ ych maj´ı uloˇzeny seznamy typick´ ych vzorc˚ u slov a fr´az´ı ve zdrojov´em jazyku a jim odpov´ıdaj´ıc´ı pˇreklady v jazyce c´ılov´em. Pˇr´ım´e syst´emy strojov´eho pˇrekladu prov´adˇej´ı substituce z angliˇctiny do nˇemˇciny ˇci ˇceˇstiny relativnˇe dobˇre. V´ ysledn´ y text sice po gramatick´e str´ance rozhodnˇe nen´ı dokonal´ y, ˇ ale napˇr´ıklad Cech nemluv´ıc´ı anglicky se v textu pˇreloˇzen´em do ˇceˇstiny nˇekter´ ym syst´emem pˇr´ım´eho pˇrekladu dok´aˇze celkem bez probl´em˚ u orientovat a upravit ho do gramaticky pˇrijateln´eho tvaru. U jin´ ych jazyk˚ u m˚ uˇze b´ yt situace o pozn´an´ı sloˇzitˇejˇs´ı. Napˇr´ıklad japonˇstina vyˇzaduje pˇripojen´ı ˇc´astic podobn´ ych pˇredloˇzk´am, kter´e indikuj´ı roli kaˇzd´e ˇc´asti vˇety (napˇr´ıklad podmˇet, pˇredmˇet, ˇci pˇr´ısloveˇcn´e urˇcen´ı pˇr´ıˇciny). Australˇst´ı domorodci – aboriginees – zkombinuj´ı vˇsechny ˇc´asti vˇety, vˇcetnˇe oznaˇcen´ı ˇcasu a ˇc´ısla, a utvoˇr´ı jednu dlouhou slovovˇetu. Dalˇs´ım probl´emem pˇr´ım´ ych syst´em˚ u je potˇreba velmi objemn´ ych slovn´ık˚ u slov a slovn´ıch fr´az´ı. Jak se slovn´ık zvˇetˇsuje, st´av´a se pr´ace s n´ım st´ale v´ıce pomalejˇs´ı a tˇeˇzkop´adnˇejˇs´ı. Je zbyteˇcn´e uchov´avat ve slovn´ıku r˚ uzn´e tvary stejn´eho slova (napˇr´ıklad fialov´y, fialov´ a a fialov´e ). Tuto redundanci lze odstranit tak, ˇze do slovn´ıku se uloˇz´ı pouze koˇrenov´a forma dan´eho slova a pravidla variac´ı. Pak se ovˇsem mus´ı vytvoˇrit dalˇs´ı pravidla, aby byl syst´em schopen spr´avn´eho sklnoˇ nov´an´ı a ˇcasov´an´ı. Vˇetˇsina syst´em˚ u pˇr´ım´eho pˇrekladu obsahuje nˇejak´ y analyz´ator formy a struktury slova. Prov´adˇen´ı takov´eto anal´ yzy je prvn´ım krokem smˇerem ke sloˇzitˇejˇs´ım pˇrekladov´ ym technik´am.
8
2.2
Syntaktick´ e transformaˇ cn´ı syst´ emy
Syntaktick´e transformaˇcn´ı syst´emy postupnˇe analyzuj´ı vstupn´ı vˇetu a podle v´ ysledku anal´ yzy aplikuj´ı lingvistick´a a lexik´aln´ı pravidla (kter´a se naz´ yvaj´ı transformaˇcn´ı) k mapov´an´ı gramatick´ ych informac´ı z jednoho jazyka do druh´eho. Nejjednoduˇsˇs´ı transformaˇcn´ı pravidla specifikuj´ı pouze syntaktickou strukturu vˇety, tedy ˇr´ıkaj´ı, jak je vˇeta sestavena z podstatn´ ych jmen, pˇr´ıdavn´ ych jmen, sloves, atd. K identifikaci struktury vstupn´ı vˇety pouˇz´ıvaj´ı transformaˇcn´ı syst´emy vˇetn´e analyz´ atory. Po vytvoˇren´ı syntaktick´e struktury pouˇzije syst´em sv´a pravidla, pomoc´ı nichˇz strukturu pˇrep´ıˇse tak, aby vyhovovala syntaxi c´ılov´eho jazyka. Pot´e vytvoˇr´ı gener´ator vˇet zabudovan´ y v syst´emu pˇr´ısluˇsnou vˇetu v c´ılov´em jazyce. Kontroluje pˇritom, zda jsou slova ve spr´avn´em ˇcase a ˇc´ısle.
2.3
Interlingu´ arn´ı syst´ emy
Interlingu´arn´ı syst´emy pˇrekl´adaj´ı text za pouˇzit´ı centr´aln´ı notace datov´e reprezentace, zvan´e interlingua. Je to vlastnˇe jak´ ysi vnitˇrn´ı jazyk syst´emu, kter´ y obsahuje vˇsechny potˇrebn´e informace pro kaˇzd´ y jazyk, kter´ y do syst´emu patˇr´ı. Vnitˇrn´ı jazyky mus´ı umˇet odhalovat takov´e z´aludnosti, jako jsou napˇr´ıklad metonymie. Napˇr´ıklad ve vˇetˇe ,,Brusel vˇcera ozn´amil, ˇze jedn´an´ı budou pokraˇcovat.‘‘ si kaˇzd´ y uvˇedom´ı, ˇze slovo Brusel zastupuje radu Evropsk´e unie. Po aplikov´an´ı interlingu´arn´ıho jazyka si to ovˇsem mus´ı uvˇedomit i pˇrekl´adac´ı syst´em. Z uveden´eho vypl´ yv´a, ˇze interlingu´arn´ı syst´emy jsou velmi obs´ahl´e a sloˇzit´e.
2.4
Statistick´ e syst´ emy
At’ uˇz je syst´em strojov´eho pˇrekladu transformaˇcn´ı nebo interlingu´arn´ı, mus´ı vˇzdy obsahovat objemn´e slovn´ıky a sady pravidel, kter´e zajist´ı, ˇze syst´em bude pˇri pˇrekladu zvl´adat ˇsirok´e spektrum r˚ uzn´ ych odvˇetv´ı dan´eho jazyka. V pˇr´ım´ ych syst´emech jsou informace uloˇzeny ve slovn´ıc´ıch fr´az´ı a slov, v interlingu´aln´ıch pˇrekladov´ ych syst´emech jsou data uloˇzena v ontologi´ıch reprezentace a slovn´ıc´ıch. Vytvoˇren´ı takov´ ychto objemn´ ych bal´ık˚ u dat ruˇcnˇe vyˇzaduje ohromn´e mnoˇzstv´ı nam´ahav´e mravenˇc´ı pr´ace. A jelikoˇz ˇclovˇek je od pˇr´ırody tvor pohodln´ y, zaˇcaly se vyv´ıjet syst´emy, kter´e by tuto pr´aci umˇely dˇelat automatizovanˇe. K tomu je potˇreba velk´e mnoˇzstv´ı ekvivalentn´ıch text˚ u ve dvou r˚ uzn´ ych jazyc´ıch. Z tˇech ˇ ım v´ıce textu pak statistick´ y syst´em vytv´aˇr´ı potˇrebn´e slovn´ıky a gramatick´a pravidla. C´ dostane syst´em k dispozici, t´ım se pochopitelnˇe jeho pˇrekladov´e schopnosti zlepˇsuj´ı.
2.5
Hybridn´ı syst´ emy
Hybridn´ı syst´emy, jak uˇz n´azev napov´ıd´a, kombinuj´ı nˇekter´e z pˇredchoz´ıch syst´em˚ u dohromady. V´ yhody a nev´ yhody jednotliv´ ych syst´em˚ u strojov´eho pˇrekladu jsou dobˇre zn´amy a v´ yvoj´aˇri se proto snaˇz´ı vytv´aˇret programy, ve kter´ ych by kombinovali jejich dobr´e vlastnosti a potlaˇcovali ty ˇspatn´e.
9
2.6
Syst´ em pouˇ zit´ y v tomto projektu
Vzhledem k zad´an´ı projektu – naprogramovat editor, kter´ y pro text z mal´e, pˇresnˇe vymezen´e oblasti (obchodn´ı korespondence) rozpozn´a zaveden´e obraty a fr´aze – byla volba pomˇernˇe jednoduch´a. Rozhodl jsem se pro jednoduch´ y transformaˇcn´ı syst´em. Jeho slovn´ık bude obsahovat slova a fr´aze z ˇceˇstiny a angliˇctiny a pouze na z´akladˇe obsahu tohoto slovn´ıku se bude vytv´aˇret pˇreklad.
10
3
Pouˇ zit´ e programov´ e vybaven´ı
Program byl vyv´ıjen pod operaˇcn´ım syst´emem Red Hat Linux [3], verze 7.2. Je cel´ y naps´an v jazyce C [4], podle normy ANSI. Pouˇz´ıval jsem GNU kompil´ator gcc [5] verze 2.96.81.
3.1
Knihovna ncurses
Jelikoˇz program obsahuje celoobrazovkov´ y editor, bylo nutn´e nˇejak´ ym zp˚ usobem zajistit vykreslov´an´ı znak˚ u a kurzoru v r´amci cel´eho termin´alu. Samotn´ y jazyk C ovˇsem tyto funkce relizovat neum´ı. Rozhodl jsem se proto pouˇz´ıt knihovnu ncurses [6], kter´a potˇrebn´e operace prov´ad´ı. Um´ı pˇresunovat kurzor na libovoln´e m´ısto na obrazovce, ps´at text kamkoliv na obrazovku a dok´aˇze r˚ uznˇe mˇenit atributy textu. Nem´enˇe uˇziteˇcn´e je tak´e ˇcten´ı kurzorov´ ych a podobn´ ych kl´aves (napˇr´ıklad kombinace stisku kl´avesy Control z´aroveˇ n s nˇejakou jinou kl´avesou). 3.1.1
pdcurses
DOSovsk´ y pˇrekladaˇc DJGPP (viz kapitola 3.3) obsahuje svou vlastn´ı verzi knihovny ncurses, nazvanou pdcurses [7]. Je kompatibiln´ı s ncurses a umoˇzn ˇuje tedy pouˇz´ıvat vˇsechny funkce, kter´e obsahuje knihovna ncurses.
3.2
Datab´ aze gdbm
Pro implementaci pˇrekladov´eho slovn´ıku slov a fr´az´ı bylo nutn´e pouˇz´ıt nˇejak´ y datab´azov´ y syst´em. Poˇzadavky na nˇej nebyly pˇr´ıliˇs n´aroˇcn´e. Staˇcilo, aby umˇel ukl´adat do datab´aze textov´ a data (vˇcetnˇe diakritiky), a n´aslednˇe data podle textov´ ych kl´ıˇc˚ u opˇet vyb´ırat. Prim´arn´ım poˇzadavkem byla existence stejn´eho datab´azov´eho syst´emu jak pod UNIXem, tak i pod DOSem. Jako dalˇs´ı byla br´ana v potaz jednoduchost ovl´ad´an´ı dan´eho syst´emu. Vˇsem v´ yˇse uveden´ ym vlastnostem vyhovuje datab´azov´ y syst´em gdbm [8] (=GNU dbm). gdbm je knihovna datab´azov´ ych funkc´ı. Poskytuje program´atorovi prostˇredky, kter´e mu umoˇzn ˇuj´ı pracovat s hashovanou datab´az´ı. Hlavn´ı u ´kol gdbm je ukl´adat dvojice [kl´ ıˇ c, data] do datov´eho souboru. Kl´ıˇce nejsou uloˇzeny v datab´azi podle nˇejak´eho pˇredem dan´eho poˇrad´ı. 3.2.1
Struktura datab´ aze
Z´akladn´ı datov´a struktura pouˇz´ıvan´a v gdbm je struktura datum: typedef struct { char *dptr; int dsize; } datum;
11
Tato koncepce umoˇzn ˇuje ukl´adat r˚ uznˇe velik´e kl´ıˇce i data. dptr je ukazatel na strukturu, kter´a m´a b´ yt uloˇzena do datab´aze, dsize je jej´ı velikost. Takto je tedy moˇzn´e do datab´aze ukl´adat prakticky cokoliv. Vˇsechna data jsou ukl´ad´ana do datab´azov´eho souboru. Pokud chce aplikace s datab´azov´ ym souborem pracovat, mus´ı ho nejprve otevˇr´ıt. Kaˇzd´a aplikace mus´ı dat´ab´azi otv´ırat bud’ pro ˇcten´ı (reader), nebo pro z´apis (writer). Jeden datab´azov´ y soubor m˚ uˇze otevˇr´ıt soubˇeˇznˇe v´ıce aplikac´ı pro ˇcten´ı, pro z´apis pouze jedna jedin´a. Datab´azov´ y soubor nem˚ uˇze b´ yt otevˇren souˇcasnˇe pro z´apis a pro ˇcten´ı. 3.2.2
Otevˇ ren´ı datab´ aze
Pro otevˇren´ı datab´azov´eho souboru slouˇz´ı funkce gdbm open(): GDMB_FILE dbf; dbf=gdbm_open(name, block_size, flags, mode, fatal_func); kde dbf je pointer, kter´ y funkce vrac´ı a pomoc´ı kter´eho s datab´az´ı pracuj´ı ostatn´ı funkce. Nejd˚ uleˇzitˇejˇs´ı argumenty jsou name – jm´eno otev´ıran´eho datab´azov´eho souboru, a flags – ten urˇcuje, zda se datab´aze otevˇre pro ˇcten´ı ˇci pro z´apis. 3.2.3
Uzavˇ ren´ı datab´ aze
Po ukonˇcen´ı pr´ace s datab´az´ı se mus´ı datab´azov´ y soubor opˇet uzavˇr´ıt. To zajiˇst’uje pˇr´ıkaz gdbm close(dbf), kde dbf je pointer vr´acen´ y funkc´ı gdbm open(). 3.2.4
Ukl´ ad´ an´ı dat do datab´ aze
Data do datab´aze ukl´ad´a funkce gdbm store(): ret=gdbm_store(dbf, key, content, flag); Jej´ı nejd˚ uleˇzitˇejˇs´ı parametry jsou dbf – ukazatel z´ıskan´ y funkc´ı gdbm open(), datum key – data kl´ıˇce a datum content – data, kter´a maj´ı b´ yt s kl´ıˇcem asociov´ana. Funkce vrac´ı ˇc´ıselnou hodnotu, znaˇc´ıc´ı v´ ysledek operace (´ uspˇech ˇci ne´ uspˇech pˇri pokusu o ukl´ad´an´ı dat). 3.2.5
Z´ısk´ av´ an´ı dat z datab´ aze
Z´ısk´av´an´ı dat z datab´aze zajiˇst’uje funkce gdbm fetch(): datum content; content=gdbm_fetch(dbf, key); Parametr dbf je opˇet pointer z´ıskan´ y pˇri otv´ır´an´ı datab´aze funkc´ı gdbm open, a key je kl´ıˇc pro vyhled´av´an´ı v datab´azi. Pokud je po proveden´ı gdbm fetch() v content.dptr NULL, zadan´ y kl´ıˇc v datab´azi nen´ı obsaˇzen. Jinak je v content.dptr ukazatel na z´ıskan´a data podle kl´ıˇce. Po ukonˇcen´ı pr´ace s nimi mus´ı program´ator s´am uvolnit pamˇet’, kterou data zab´ıraj´ı (free(content.dptr)), nebot’ gdbm tuto operaci nezajiˇst’uje. 12
3.2.6
Dalˇ s´ı funkce
gdbm umoˇzn ˇuje s datab´az´ı prov´adˇet mnoho dalˇs´ıch operac´ı, napˇr´ıklad maz´an´ı dat z datab´aze (gdbm delete()), postupn´e proch´azen´ı vˇsech kl´ıˇc˚ u, ˇci pˇreuspoˇr´ad´an´ı datab´aze pro efektivnˇejˇs´ı pr´aci. Pˇri vypracov´an´ı bakal´aˇrsk´e pr´ace jsem ovˇsem tyto operace nepouˇzil. 3.2.7
gdbm pro DOS
Existuje i stejnojmenn´a verze gdbm pro DOSovsk´ y pˇrekladaˇc DJGPP, kter´ y je s UNIXovskou verz´ı t´eto knihovny kompatibiln´ı [9]. Jedin´ y probl´em nast´av´a pˇri pˇrenosu datab´az´ı mezi obˇema platformami, nebot’ UNIX a DOS pouˇz´ıvaj´ı rozd´ıln´a k´odov´an´ı ˇceˇstiny.
3.3
V´ yvojov´ y syst´ em DJGPP
Pro pˇrenesen´ı programu do syst´emu Microsoft DOS (ˇci Microsoft Windows) se jevil jako nejvhodnˇejˇs´ı syst´em DJGPP [10] (DJ’s GNU Programming Platform).
Obr´azek 1: Uk´azka pr´ace ve v´ yvojov´em prostˇred´ı rhide ˇs´ıˇren´em s DJGPP DJGPP je DOSovsk´a verze UNIXovsk´eho GNU C/C++ pˇrekladaˇce. Je moˇzn´e s n´ım pracovat prakticky stejnˇe jako s pˇrekladaˇcem v UNIXu. Pˇreklad se tedy prov´ad´ı standardn´ım pˇr´ıkazem gcc. Je moˇzn´e dokonce pouˇz´ıvat i Makefile pomoc´ı pˇr´ıkazu make. Um´ı pˇrekl´adat podle normy ANSI C. Vytv´aˇr´ı standardn´ı DOSovsk´e spustiteln´e soubory s pˇr´ıponou exe. Um´ı vytv´aˇret i 32-bitov´e aplikace.
13
3.4
Electric Fence
Pˇri vytv´aˇren´ı programu bylo zapotˇreb´ı pracovat s dynamick´ ym alokov´an´ım pamˇeti. Pˇri t´eto ˇcinnosti se snadno udˇel´a chyba, kter´a se pozdˇeji velmi obt´ıˇznˇe hled´a. Program m˚ uˇze desetkr´at probˇehnout bez chyby, pojeden´act´e se zhrout´ı a je obt´ıˇzn´e zjistit d˚ uvod p´adu aplikace. Electric Fence [11] je n´astroj, kter´ y zjednoduˇsuje hled´an´ı takov´ ychto chyb. Pˇredefinuje standardn´ı c´eˇckovsk´e funkce pro dynamickou pr´aci s pamˇet´ı – tedy pˇredevˇs´ım funkce malloc() a free(). Pˇri bˇehu pak kontroluje pˇr´ıstup aplikace k pamˇeti a pokud zjist´ı pˇr´ıstup k pamˇeti, kter´a nebyla pˇredt´ım alokovan´a, vyp´ıˇse chybov´e hl´aˇsen´ı.
14
4
Datab´ aze fr´ az´ı
4.1
N´ avrh datab´ aze
Nejprve bylo nutn´e urˇcit, jak´ ym zp˚ usobem bude implementov´ana datab´aze obsahuj´ıc´ı pˇrekladov´a slova a fr´aze. Bylo nutn´e vz´ıt v u ´vahu n´asleduj´ıc´ı fakta: • Program bude muset umˇet pˇrev´adˇet mezi obˇema zvolen´ ymi jazyky – tedy jak z angliˇctiny do ˇcestiny, tak z ˇceˇstiny do angliˇctiny. • Kaˇzd´e fr´azi bude muset b´ yt pˇriˇrazen jej´ı k´od. Nab´ız´ı se tedy myˇslenka vytvoˇrit datab´azi ze dvou tabulek: ˇ ˇ ıslo fr´ Cesk´ a fr´ aze C´ aze vzali jsme na vˇedom´ı 000001 poˇzadavek z´akazn´ıka 000002 .. .. . .
Anglick´ a fr´ aze we have taken note the customer’s request .. .
ˇ ıslo fr´ C´ aze 000001 000002 .. .
Kl´ıˇce jsou vˇzdy pˇr´ısluˇsn´e fr´aze, data jsou ˇc´ısla fr´az´ı. Toto uspoˇr´ad´an´ı je d˚ uleˇzit´e, protoˇze pˇri vkl´ad´an´ı nov´ ych fr´az´ı je potˇreba zjiˇst’ovat, zda uˇzivatel nezadal jiˇz nˇejakou existuj´ıc´ı fr´azi. A jelikoˇz kaˇzd´ y kl´ıˇc mus´ı b´ yt v datab´azi jedineˇcn´ y, um´ı gdbm jednoduˇse zjistit, zda se jiˇz dan´ y kl´ıˇc v datab´azi nevyskytuje. Ovˇsem pˇri naˇc´ıt´an´ı zak´odovan´eho textu zde nast´av´a probl´em, protoˇze gdbm datab´aze um´ı vyhled´avat data pouze pomoc´ı kl´ıˇc˚ u a jin´ ym jednoduch´ ym zp˚ usobem je nem˚ uˇze z´ıskat (pouze tak, ˇze by postupnˇe proch´azela vˇsechny kl´ıˇce a ˇcetla k nim pˇriˇrazen´a data). V zak´odovan´em textu se vyskytuj´ı ˇc´ısla fr´az´ı, a z pˇrechoz´ıch dvou tabulek nen´ı moˇzn´e podle ˇc´ısla fr´aze pˇr´ısluˇsnou fr´azi naj´ıt. Proto bylo nutn´e vytvoˇrit tˇret´ı tabulku, ve kter´e je kl´ıˇcem pr´avˇe ˇc´ıslo fr´aze. V datov´e ˇc´asti je oboujazyˇcn´ y pˇreklad pˇr´ısluˇsn´ y dan´emu ˇc´ıslu. Obˇe fr´aze jsou uloˇzen´e v jednom textov´em ˇretˇezci, oddˇeleny jsou znakem ’\013’. Tabulka tedy vypad´a n´asledovnˇe: Anglick´ a fr´ aze 000001 000002 .. .
ˇ ıslo fr´ C´ aze vzali jsme na vˇedom´ı’\013’we have taken note poˇzadavek z´akazn´ıka’\013’the customer’s request .. .
S takov´ ymto uspoˇr´ad´an´ım datab´aze je jiˇz moˇzn´e prov´adˇet vˇsechny poˇzadovan´e operace: • vyhled´an´ı ˇcesk´e fr´aze a zjiˇstˇen´ı jej´ıho k´odu; • vyhled´an´ı anglick´e fr´aze a zjiˇstˇen´ı jej´ıho k´odu; • vyhled´an´ı ˇcesk´e fr´aze podle jej´ıho k´odu; • vyhled´an´ı anglick´e fr´aze podle jej´ıho k´odu; • zjiˇstˇen´ı, zda jiˇz fr´aze nen´ı v datab´azi obsaˇzena; • pˇrid´an´ı nov´e fr´aze a jej´ıho pˇrekladu do datab´aze. 15
4.2
Realizace
Datab´aze je uloˇzena ve tˇrech souborech. Soubor cz code.dat obsahuje tabulku ˇcesk´ ych fr´az´ı a jejich k´od˚ u, v souboru en code.dat je tabulka anglick´ ych fr´az´ı a jejich k´od˚ u. A soubor code c e.dat obsahuje tˇret´ı tabulku, kter´a m´a k´ody jako kl´ıˇce a fr´aze v obou jazyc´ıch coby data. K´ody jsou v datab´azi uloˇzeny jako ˇsestim´ıstn´e ˇretˇezce. Fr´aze a slova jsou uloˇzeny jako ˇretˇezce r˚ uzn´e d´elky. Pˇri pˇrekl´ad´an´ı textu do zak´odovan´eho form´atu je v´ ysledn´ y k´odov´ y soubor nerozluˇcnˇe spjat s datab´az´ı, pomoc´ı kter´e byl zak´odov´an. Pokud by byl tento soubor dek´odov´an jinou datab´az´ı, ned´aval by pochopitelnˇe v´ ysledn´ y text smysl. Proto, v pˇr´ıpadˇe, ˇze by chtˇel uˇzivatel ˇc´ıst zak´odovan´ y text na jin´em poˇc´ıtaˇci, neˇz na kter´em byl poˇr´ızen, je u ´ˇceln´e ˇs´ıˇrit ho i s datab´azov´ ymi soubory. Pˇresto by se mohlo st´at, ˇze by chtˇel uˇzivatel dek´odovat text s datab´az´ı, kter´a obsahuje menˇs´ı poˇcet fr´az´ı neˇz ta, pomoc´ı kter´e byl zak´odov´an. Dalˇs´ı chyba by mohla nastat, kdyby chtˇel uˇzivatel pracovat s datab´az´ı, jej´ıˇz soubory nejsou konzistentn´ı (napˇr´ıklad v kaˇzd´em je jin´ y poˇcet uloˇzen´ ych fr´az´ı). Z tˇechto d˚ uvod˚ u jsem do datab´aze zavedl jej´ı ,,verze‘‘. Verze datab´aze je ˇc´ıslo, kter´e ud´av´a poˇcet fr´az´ı v datab´azi uloˇzen´ ych. Kaˇzd´ y ze soubor˚ u patˇr´ıc´ıch do datab´aze m´a svou vlastn´ı verzi. Je uloˇzena v ˇretˇezcov´em tvaru coby data asociovan´a ke kl´ıˇci ˇc´ıslo nula. Tedy koneˇcn´a podoba datab´azov´ ych tabulek uloˇzen´ ych v souborech m˚ uˇze vypadat napˇr´ıklad takto: ˇ ˇ ıslo fr´ Cesk´ a fr´ aze C´ aze 000000 poˇcet fr´az´ı vzali jsme na vˇedom´ı 000001 poˇzadavek z´akazn´ıka 000002 .. .. . . Anglick´ a fr´ aze 000000 000001 000002 .. .
Anglick´ a fr´ aze 000000 we have taken note the customer’s request .. .
ˇ ıslo fr´ C´ aze poˇcet fr´az´ı 000001 000002 .. .
ˇ ıslo fr´ C´ aze poˇcet fr´az´ı vzali jsme na vˇedom´ı’\013’we have taken note poˇzadavek z´akazn´ıka’\013’the customer’s request .. .
Z v´ yˇse uveden´eho tedy vypl´ yv´a, ˇze ˇz´adn´a fr´aze nesm´ı b´ yt totoˇzn´a s ˇretˇezcem ˇsesti nul. Pˇri jak´emkoliv pouˇzit´ı datab´aze se vz´ajemnˇe testuj´ı verze jednotliv´ ych soubor˚ u tvoˇr´ıc´ıch datab´azi a pokud se liˇs´ı, nen´ı moˇzn´e s datab´az´ı prov´adˇet jak´ekoliv operace. Do zak´odovan´eho textu se pˇri k´odov´an´ı vkl´ad´a ˇc´ıslo datab´aze, pomoc´ı kter´e byl k´odov´an. Pˇri pokusu o dek´odov´an´ı se porovn´av´a ˇc´ıslo zapsan´e v zak´odovan´em souboru s ˇc´ıslem verze aktu´aln´ı datab´aze. Pokud je ˇc´ıslo verze datab´aze menˇs´ı, neˇz ˇc´ıslo verze zapsan´e v dokumentu, nen´ı dek´odov´an´ı umoˇznˇeno.
16
4.3
Vytvoˇ ren´ı datab´ aze
Pr´azdn´a datab´aze se vytv´aˇr´ı programem cr dbs (cr dbs.exe v DOSu). Spouˇst´ı se bez parametr˚ u. Vytvoˇr´ı v adres´aˇri, ve kter´em se pr´avˇe nach´az´ı, soubory cz code.dat, en code.dat a code c e.dat. Obsahuj´ı pouze jednu poloˇzku, a to ˇc´ıslo verze datab´aze, kter´e je v tomto okamˇziku nulov´e (ke kl´ıˇci – ˇretˇezec ˇsesti nul – je pˇriˇrazen ˇretˇezec ˇsesti nul znaˇc´ıc´ı pr´azdnou datab´azi). D´ale je tˇreba datab´azi naplnit nˇejak´ ymi daty. Vzhledem k tomu, ˇze UNIX a DOS pouˇz´ıvaj´ı jin´e k´odov´an´ı ˇceˇstiny, rozhodl jsem se pro naplnˇen´ı z textov´eho souboru, ve kter´em je z´akladn´ı sada fr´az´ı uloˇzena. Pro pˇrevod textov´ ych soubor˚ u mezi jednotliv´ ymi k´odov´an´ımi jiˇz existuje mnoho program˚ u a nen´ı probl´em jeden z nich pouˇz´ıt. Soubor obsahuj´ıc´ı z´akladn´ı skupinu fr´az´ı se jmenuje dbs.txt. Datab´aze se j´ım napln´ı spuˇstˇen´ım programu fill dbs (v DOSu program fill dbs.exe). Pokud se spust´ı bez parametr˚ u, pracuje se souborem dbs.txt. Pokud je vol´an s parametry, vezme prvn´ı parametr jako jm´eno textov´eho souboru s fr´azemi. Ostatn´ı parametry ignoruje. Textov´ y soubor s fr´azemi mus´ı m´ıt n´asleduj´ıc´ı form´at: ˇesk´ c a fr´ aze 1:anglick´ a fr´ aze 1 cesk´ ˇ a fr´ aze 2:anglick´ a fr´ aze 2 . . . ˇ a a anglick´a fr´aze jsou oddˇeleny dvojteˇckou bez jak´ Cesk´ ychkoliv okoln´ıch mezer. Po anglick´e fr´azi mus´ı n´asledovat konec ˇr´adku (tedy opˇet bez mezer za fr´az´ı).
17
5
Editaˇ cn´ı ˇ c´ ast programu
Po spuˇstˇen´ı programu (soubor trans v UNIXu, nebo trans.exe v DOSu) se uˇzivatel ocitne v hlavn´ım editaˇcn´ım oknˇe.
Obr´azek 2: Uk´ azka pr´ace v hlavn´ım editaˇcn´ım oknˇe
Zde je moˇzn´e ps´at vstupn´ı text a v˚ ubec prov´adˇet vˇsechny operace, kter´e program umoˇzn ˇuje. Editaˇcn´ı okno se dˇel´ı na dvˇe ˇc´asti: 1. Pracovn´ı – v t´eto ˇc´asti okna se zobrazuje jiˇz napsan´ y text. Je zde t´eˇz kurzor, kter´ y ukazuje na aktu´aln´ı pracovn´ı m´ısto v textu. 2. Informaˇcn´ı – zde jsou vyps´any kombinace kl´aves pro vykon´av´an´ı pˇr´ıkaz˚ u. Zobrazuj´ı se zde rovnˇeˇz r˚ uzn´e chybov´e zpr´avy.
5.1
Poˇ rizov´ an´ı textu
Hlavn´ı u ´loha editaˇcn´ıho okna spoˇc´ıv´a v moˇznosti upravovat ˇci pˇr´ımo poˇrizovat zdrojov´ y text, kter´ y bude pozdˇeji pˇrekl´ ad´an. Pˇri spuˇstˇen´ı programu je editaˇcn´ı okno pr´azdn´e, v lev´em horn´ım rohu je um´ıstˇen kurzor. Pˇri poˇrizov´an´ı textu je moˇzn´e pouˇz´ıvat tyto kl´avesy a znaky: • vˇsechny tisknuteln´e znaky s ASCII hodnotami 32 aˇz 126 vˇcetnˇe; • znaky s ˇceskou diakritikou (’ˇ e’, ’ˇ s’, ’ˇ c’, ’ˇ r’, ’ˇ z’, ’´ y’, ’´ a’, ’´ ı’, ’´ e’, ’´ o’, ’´ u’, ˇ ˇ ˇ ˇ ˇ ´ ´ ´ ´ ´ ´ ˚ ’˚ u’, ’E’, ’S’, ’C’, ’R’, ’Z’, ’Y’, ’A’, ’I’, ’E’, ’O’, ’U’, ’U’); • kl´avesu ENTER 18
• kurzorov´e kl´avesy, tedy kl´avesy ,,ˇsipka nahoru‘‘, ,,ˇsipka dol˚ u‘‘, ,,ˇsipka doleva‘‘, ,,ˇsipka doprava‘‘; • d´ale je moˇzn´e stisknout kl´avesy v kombinaci s kl´avesou Control pro spuˇstˇen´ı dan´e akce (viz kapitola 5.2). Pˇri zad´an´ı nˇejak´eho tisknuteln´eho znaku se dan´ y znak zap´ıˇse na m´ısto oznaˇcen´e kurzorem. Vkl´ad´an´ı znaku prob´ıh´a podle n´asleduj´ıc´ıho sch´ematu: • Pokud je kurzor na konci textu: – Jestliˇze je na ˇr´adku jeˇstˇe dostatek m´ısta, vloˇz´ı se dan´ y znak na m´ısto, kde se nach´az´ı kurzor a kurzor se posune o jednu pozici doprava; – Pokud jiˇz na ˇr´adku pro nov´ y znak m´ısto nen´ı, vytvoˇr´ı se nov´ y ˇr´adek; ∗ Pokud je vkl´adan´ y znak mezera, zap´ıˇse se jeˇstˇe do star´eho ˇr´adku a na zaˇc´atek nov´eho ˇr´adku se um´ıst´ı kurzor; ∗ Pokud je znak jin´ y, neˇz mezera, zjist´ı se, zda se v ˇr´adku v˚ ubec nˇejak´ a mezera nach´az´ı; · Jestliˇze ano, tak se posledn´ı slovo ze star´eho ˇr´adku pˇresune na nov´ y ˇr´adek a na jeho konec se pˇripoj´ı zad´avan´ y znak. Kurzor se pˇresune za toto slovo; · Kdyˇz mezera na ˇr´adku nen´ı, novˇe zad´avan´ y znak se zap´ıˇse na prvn´ı pozici na nov´em r´adku a kurzor se um´ıst´ı za nˇej. • Jestliˇze kurzor nen´ı na konci textu (tj. je nˇekde uprostˇred): – Pokud je na ˇr´adku jeˇstˇe dost m´ısta pro vloˇzen´ı znaku, posunou se vˇsechny znaky od kurzoru (od znaku oznaˇcen´eho kurzorem) aˇz do konce ˇr´adku o jednu pozici doprava. Na uvolnˇen´e m´ısto tˇesnˇe pˇred kurzorem se vloˇz´ı nov´ y znak; – Pokud na ˇr´adku pro nov´ y znak m´ısto nen´ı, vloˇz´ı se znak stejn´ ym zp˚ usobem, jako v pˇredchoz´ım pˇr´ıpadˇe. Pot´e se vˇsak posledn´ı slovo na ˇr´adku, kter´e pˇresahuje, cel´e pˇresune na ˇr´adek n´asleduj´ıc´ı. Pokud pro nˇej ovˇsem na n´asleduj´ım ˇr´adku nen´ı m´ısto, vloˇz´ı se tam pˇresto a z tohoto ˇr´adku se pˇresunou koncov´a slova na n´asleduj´ıc´ı ˇr´adek tak, aby se na ˇr´adek vˇsechna slova veˇsla. Takov´eto ,,setˇr´as´an´ı‘‘ slov prob´ıh´a tak dlouho, dokud je tˇreba (v nejhorˇs´ım pˇr´ıpadˇe aˇz do konce odstavce). Pokud je pˇri editov´an´ı potˇreba vytvoˇrit nov´ y ˇr´adek a pr´avˇe aktu´aln´ı ˇr´adek je jiˇz nejspodnˇejˇs´ım na obrazovce, vˇsechny ˇr´adky se posunou o jednu pozici nahoru a nov´ y ˇr´adek se objev´ı na stejn´em m´ıstˇe, kde byl pˇrechoz´ı posledn´ı ˇr´adek. Pˇri stisku kl´avesy ENTER mohou nastat dvˇe moˇznosti: • Pokud je kurzor na konci nˇekter´eho ˇr´adku, vytvoˇr´ı se za t´ımto nov´ y ˇr´adek a kurzor se na nˇej pˇresune. Takto se vytv´aˇr´ı nov´ y odstavec; 19
• Jestliˇze je ale kurzor uprostˇred nˇejak´eho ˇr´adku, potom se ze znak˚ u poˇc´ınaje znakem oznaˇcen´ ym kurzorem aˇz po konec ˇr´adku vytvoˇr´ı nov´ y ˇr´adek, kter´ y se vytvoˇr´ı za aktu´aln´ım a kurzor se pˇresune na jeho zaˇc´atek. Tyto znaky jsou z pˇredchoz´ıho ˇr´adku odstranˇeny. Takto se p˚ uvodn´ı odstavec rozdˇeluje na dva nov´e odstavce. Rozdˇelov´an´ı textu na odstavce se tedy prov´ad´ı pomoc´ı kl´avesy ENTER. Pro vˇetˇs´ı pˇrehlednost textu je vhodn´e stisknout ENTER dvakr´at za sebou, aby se mezi odstavci vytvoˇril pr´azdn´ y ˇr´adek. Nen´ı to vˇsak nutn´e. ˇ Pro pohyb kurzoru v textu slouˇz´ı kurzorov´e kl´avesy. Sipka doleva posunuje kurzor vˇzdy o jednu pozici doleva, pokud je jiˇz kurzor na zaˇc´atku ˇr´adku, posune se na konec ˇ pˇredch´ azej´ıc´ıho ˇr´adku. Jestliˇze je kurzor na zaˇc´atku textu, neprovede se ˇz´adn´a akce. Sipka doprava analogicky pohybuje kurzorem doprava. Pokud je kurzor na konci ˇr´adku, pˇresune se na zaˇc´atek n´asleduj´ıc´ıho. Pˇri stisku ˇsipky nahoru se kurzor posune na pˇredchoz´ı ˇr´adek na stejnou vertik´aln´ı pozici. Pokud je horn´ı ˇr´adek kratˇs´ı neˇz aktu´aln´ı, pˇresune se kurzor na jeho konec. Kl´avesa BACKSPACE slouˇz´ı k odstraˇ nov´an´ı jiˇz napsan´eho textu. Pokud je pozice kurzoru uprostˇred nebo na konci ˇr´adku, smaˇze se znak pˇred kurzorem. Jestliˇze je ale kurzor na nejlevˇejˇs´ı pozici na ˇr´adku, smaˇze se posledn´ı znak na ˇr´adku pˇredch´azej´ıc´ım. V naprost´e vˇetˇsinˇe pˇr´ıpad˚ u je to mezera nebo ENTER – dojde tedy ke spojen´ı posledn´ıho slova na ˇr´adku pˇredch´azej´ıc´ım s prvn´ım slovem na ˇr´adku aktu´aln´ım. M˚ uˇze se st´at, ˇze tato dvˇe spojen´a slova se na pˇredchoz´ı ˇr´adek nevejdou – v tom pˇr´ıpadˇe jsou pˇresunuta na ˇr´adek dalˇs´ı, stejnˇe jako pˇri vkl´ad´an´ı nov´eho znaku. Pokud se spojen´a slova na ˇr´adek vejdou, nebo se maˇze znak uprostˇred ˇr´adku, dojde k podobn´emu ,,setˇr´as´an´ı‘‘ slov jako pˇri vkl´ad´an´ı nov´eho znaku, pouze opaˇcn´ ym smˇerem. Slova ze spodn´ıch ˇr´adk˚ u se ,,nal´evaj´ı‘‘ do horn´ıch ˇr´adk˚ u, aby je zaplnila.
5.2
Operace v hlavn´ım editaˇ cn´ım oknˇ e
Operace se v hlavn´ım editaˇcn´ım oknˇe vyvol´avaj´ı stiskem dan´e kl´avesy s kl´avesou Control. Jsou to n´asleduj´ıc´ı: 5.2.1
Zmˇ ena smˇ eru pˇ rekl´ ad´ an´ı – Ctrl-W
Znaˇc´ı, zda se po pˇrechodu do pˇrekl´adac´ı f´aze m´a text pˇrekl´adat z angliˇctiny do ˇceˇstiny (n´apis CZ->EN v informaˇcn´ı ˇc´asti okna) nebo z ˇceˇstiny do angliˇctiny (EN->CZ). Defaultn´ı smˇer je z ˇceˇstiny do angliˇctiny. 5.2.2
Zmˇ ena pˇ rekl´ adac´ıho reˇ zimu – Ctrl-P
Tato poloˇzka zobrazuje, jak´ y pˇrekl´adac´ı reˇzim se pouˇzije pˇri vstupu do pˇrekladov´e ˇc´asti. Pokud je P zobrazeno inverznˇe, pouˇzije se pasivn´ı reˇzim. Jestliˇze je P vykresleno norm´alnˇe, bude pouˇzit aktivn´ı reˇzim. Defaultnˇe je nastaven pasivn´ı pˇrekladov´ y reˇzim. Tato funkce bude vysvˇetlena v popisu pˇrekladov´e ˇc´asti programu v kapitole 6.
20
5.2.3
Konec programu – Ctrl-X
Ukonˇc´ı ncurses, uvoln´ı vˇsechny datov´e struktury a ukonˇc´ı program. Pokud byly provedeny v textu v editaˇcn´ım oknˇe nˇejak´e zmˇeny, nab´ıdne program moˇznost jeho uloˇzen´ı na disk. Do informaˇcn´ı ˇc´asti okna se vyp´ıˇse hl´aˇsen´ı ^X Konec bez ukl´ ad´ an´ ı ENTER Uloˇ zit Zadejte jm´ eno ukl´ adan´ eho soboru. a na nejspodnˇejˇs´ım ˇr´adku na nejlevˇejˇs´ı pozici se objev´ı kurzor. Sem m˚ uˇze uˇzivatel napsat jm´eno ukl´adan´eho souboru. Pro z´apis jm´ena m˚ uˇze pouˇz´ıvat stejn´e znaky, jako v editaˇcn´ım oknˇe. Jm´eno m˚ uˇze b´ yt delˇs´ı, neˇz je ˇs´ıˇrka okna, pokud text dos´ahne jeho prav´eho okraje, zaˇcne se postupnˇe rolovat smˇerem doleva. Pro pohyb kurzoru v textu slouˇz´ı kurzorov´e kl´avesy ,,ˇsipka doleva‘‘ a ,,ˇsipka doprava‘‘. Pro maz´an´ı jiˇz napsan´eho textu slouˇz´ı kl´avesa BACKSPACE. Funkce tˇechto kl´aves jsou obdobn´e jejich funkc´ım v editaˇcn´ım oknˇe, pouze s omezen´ım na jeden ˇr´adek. Bˇehem zad´av´an´ı jm´ena je moˇzn´e kdykoliv stisknout Ctrl-X a ukonˇcit program bez ukl´ad´an´ı textu. Text se do souboru se zadan´ ym jm´enem uloˇz´ı stiskem kl´avesy ENTER. V pˇr´ıpadˇe neu ´spˇechu ukl´ad´an´ı se zobraz´ı zpr´ava Chyba pˇ ri ukl´ ad´ an´ ı souboru ... kde ... je zadan´e jm´eno. Pot´e m˚ uˇze uˇzivatel opˇet zadat jm´eno souboru, do nˇehoˇz chce text uloˇzit. Pokud se text do souboru uloˇz´ı u ´spˇeˇsnˇe, vyp´ıˇse se hl´aˇsen´ı Uloˇ zeno do souboru ... kde ... je opˇet zadan´e jm´eno souboru. Pot´e program skonˇc´ı. 5.2.4
Naˇ cten´ı textu ze souboru – Ctrl-J
Naˇcte do editaˇcn´ıho okna obsah textov´eho souboru, jehoˇz jm´eno je zad´av´ano podobnˇe jako v pˇr´ıpadˇe zad´av´an´ı jm´ena ukl´adan´eho souboru. Pokud se v textu vyskytuj´ı nˇejak´e netisknuteln´e znaky, jsou z nˇej vypuˇstˇeny. 5.2.5
N´ asiln´ e ukonˇ cen´ı programu – Ctrl-C
Okamˇzitˇe n´asilnˇe ukonˇc´ı program bez jak´ehokoliv ukl´ad´an´ı dat. 5.2.6
Uloˇ zen´ı textu do souboru – Ctrl-O
Prakticky stejn´a operace, jako ukl´ad´an´ı textu do souboru pˇri ukonˇcov´an´ı programu. Po u ´spˇeˇsn´em uloˇzen´ı textu si program zapamatuje, ˇze text ukl´adal, a pokud bude cht´ıt uˇzivatel ukonˇcit program a text od posledn´ıho ukl´ad´an´ı nezmˇenil, nebude se pˇri ukonˇcov´an´ı programu na ukl´ ad´an´ı pt´at. 21
5.2.7
Naˇ cten´ı zak´ odovan´ eho textu – Ctrl-K
Naˇcte zak´odovan´ y text a dek´oduje ho do zadan´eho jazyka. Pokud je v editaˇcn´ım oknˇe zmˇenˇen´ y text, vyp´ıˇse se do informaˇcn´ı ˇc´asti text Pˇ redchoz´ ı text nen´ ı uloˇ zen. Uloˇ zit (a/n)? Po stisku kl´avesy a m˚ uˇze uˇzivatel uloˇzit text do souboru (viz Ctrl-O). Pokud stiskne n, text se neukl´ad´a. Pot´e je text z informaˇcn´ıho okna smaz´an. Pak je uˇzivatel vyzv´an, aby zadal jm´eno naˇc´ıtan´eho zak´odovan´eho souboru (zad´av´an´ı jm´ena je stejn´e jako v pˇr´ıpadˇe ukl´ad´an´ı souboru). Pokud se soubor zadan´eho jm´ena nepodaˇr´ı otevˇr´ıt, vyp´ıˇse se chybov´e hl´aˇsen´ı Chyba pˇ ri otev´ ır´ an´ ı souboru ... kde ... opˇet znamen´a jm´eno dan´eho souboru. Pokud se soubor podaˇr´ı otevˇr´ıt, zkontroluje se, jakou verz´ı datab´aze byl zak´odov´an. Pokud byl zak´odov´an vyˇsˇs´ı verz´ı, neˇz je aktu´aln´ı, vyp´ıˇse se chybov´e hl´aˇsen´ı Chyba - text byl zak´ odov´ an pomoc´ ı novˇ ejˇ s´ ı verze datab´ aze a naˇc´ıt´an´ı skonˇc´ı. Pokud konflikt verz´ı nenastane, zaˇcne prob´ıhat naˇc´ıt´an´ı a dek´odov´an´ı. C´ılov´ y jazyk se zvol´ı podle vybran´eho smˇeru pˇrekl´ad´an´ı. Pokud je zvolen smˇer CZ->EN, dek´oduje se do angliˇctiny, pˇri smˇeru pˇrekladu EN->CZ do ˇceˇstiny. Pˇreklad prob´ıh´a tak, ˇze se naˇc´ıtan´e znaky zapisuj´ı do editaˇcn´ıho okna. Pokud se pˇri naˇc´ıt´an´ı naraz´ı na znak s k´odem ’\001’, znaˇc´ı to, ˇze n´asleduj´ıc´ıch ˇsest znak˚ u je k´od fr´aze. Pomoc´ı tohoto k´odu se z datab´aze z´ısk´a patˇriˇcn´a fr´aze a zap´ıˇse se do editaˇcn´ıho okna. Po ukonˇcen´ı dek´odov´an´ı je v editaˇcn´ım oknˇe text dek´odovan´ y do dan´eho jazyka a m˚ uˇze se s n´ım pracovat jako s obyˇcejn´ ym textem.
22
6
Pˇ rekladov´ aˇ c´ ast programu
Do pˇrekladov´e ˇc´asti programu se vstupuje z editaˇcn´ı ˇc´asti stiskem kombinace kl´aves Ctrl-T. Editaˇcn´ı okno se horizont´alnˇe rozdˇel´ı na dvˇe poloviny rozdˇelen´e ˇc´arou tvoˇrenou znaky ~ (vlnovky). V horn´ı ˇc´asti se zobrazuje pˇrekl´adan´ y text, ve spodn´ı se postupnˇe zobrazuje jiˇz pˇreloˇzen´ y text. Dalˇs´ı ˇcinnost programu z´avis´ı na zvolen´em pˇrekl´adac´ım reˇzimu a na smˇeru pˇrekl´ad´an´ı.
6.1
Pasivn´ı pˇ rekl´ adac´ı reˇ zim
Pˇri tomto reˇzimu se postupnˇe naˇc´ıtaj´ı slova ze vstupn´ıho textu. Naˇcte se prvn´ı slovo, vˇsechny jeho znaky se pˇrevedou na mal´e (datab´aze gdbm pochopitelnˇe rozliˇsuje mal´a a velk´a p´ısmena a neum´ı vyhled´avat fr´aze ,,non-case-sensitive‘‘ zp˚ usobem), zjist´ı se, zda je obsaˇzeno v datab´azi (z´aleˇz´ı zde samozˇrejmˇe na smˇeru pˇrekl´ad´an´ı). Pokud je v datab´azi obsaˇzeno, program si to poznaˇc´ı. Pot´e se pokus´ı naˇc´ıst dalˇs´ı slovo. Pokud dan´e slovo zaˇc´ın´a nˇekter´ ym z ,,pˇreruˇsovac´ıch‘‘ znak˚ u ;, :, ", ., ,, (, ), { nebo }, tak se jiˇz dalˇs´ı slova do fr´aze nenaˇc´ıtaj´ı. V opaˇcn´em pˇr´ıpadˇe se do fr´aze pˇrid´a dalˇs´ı slovo a znovu se zkontroluje, zda tato dvouslov´a fr´aze nen´ı v datab´azi. Pokud ano, znovu si to program poznaˇc´ı. A tak d´ale, dokud nen´ı v datab´azi pˇet slov, nebo dokud nenaraz´ı na nˇejak´ y pˇreruˇsovac´ı znak. Pokud pot´e nem´a editor poznaˇcenu ˇz´adnou fr´azi, op´ıˇse prvn´ı slovo z naˇcten´e pˇrekl´adan´e fr´aze do v´ ystupn´ıch text˚ u. Existuj´ı dva v´ ystupn´ı soubory – obyˇcejn´ y textov´ y a zak´odovan´ y. Pak se zaˇcne naˇc´ıtat dalˇs´ı slovo. Jestliˇze existuj´ı nˇejak´e poznaˇcen´e fr´aze, vybere se z nich ta nejdelˇs´ı a najde se v datab´azi jej´ı ekvivalent ve druh´em jazyce. Napˇr´ıklad, pokud datab´aze vypad´a n´asledovnˇe (vyps´ana je zde pouze jedna tabulka, ostatn´ı jsou lehce odvoditeln´e): Anglick´ a fr´ aze 000000 000001 000002
ˇ ıslo fr´ C´ aze 000002 drah´ y’\013’dear dear sirs’\013’v´aˇzen´ı p´anov´e
a syst´em pˇrekl´ad´a fr´azi ,,dear sirs‘‘ z angliˇctiny do ˇceˇstiny, nalezne patˇriˇcn´ y pˇreklad jak pro slovo ,,dear‘‘, tak pro celou fr´azi ,,dear sirs‘‘. Vybere tedy delˇs´ı variantu a fr´azi pˇreloˇz´ı jako ,,v´ aˇzen´ı p´anov´e‘‘. Jej´ı k´od v zak´odovan´em souboru bude ’\001’000002. Pokud p˚ uvodn´ı fr´aze zaˇc´ınala velk´ ym p´ısmenem, pˇrevede se na velk´e i prvn´ı p´ısmeno nov´e fr´aze. Fr´aze se vloˇz´ı do v´ ystupn´ıho textu. K´od fr´aze se pak zap´ıˇse do v´ ystupn´ıho k´odu. Pot´e se zapoˇcne s naˇc´ıt´an´ım dalˇs´ı fr´aze. Pˇreloˇzen´ y text se postupnˇe vypisuje do spodn´ı ˇc´asti editaˇcn´ıho okna. Text v horn´ım oknˇe se postupnˇe posunuje, aby bylo st´ale vidˇet aktu´alnˇe pˇrekl´adan´e fr´aze. T´eto vlastnosti se sp´ıˇse vyuˇzije pˇri aktivn´ım pˇrekl´adac´ım reˇzimu.
23
6.2
Aktivn´ı pˇ rekl´ adac´ı reˇ zim
Aktivn´ı reˇzim pracuje stejnˇe, jako pasivn´ı. Pouze, pokud naraz´ı program na nˇejak´e nezn´am´e slovo ˇci fr´azi v pˇrekl´adan´em textu, umoˇzn´ı uˇzivateli pˇridat do datab´aze patˇriˇcn´ y pˇreklad, kter´ y se okamˇzitˇe uplatn´ı. Vyp´ıˇse do informaˇc´ıho okna n´asleduj´ıc´ı: ^X Konec pˇ rekladu fr´ aze ENTER Zad´ an´ ı pˇ rekladu ^P Pasivn´ ı reˇ zim => nezname_slovo
<=
V t´eto ˇc´asti je moˇzn´e pouˇz´ıvat tyto editaˇcn´ı kl´avesy: • Ctrl-X – Ukonˇc´ı zad´av´an´ı pˇrekladu tohoto slova, zap´ıˇse jej nezmˇenˇen´e do v´ ystupn´ıch text˚ u a pˇrejde na pˇreklad dalˇs´ıho slova. • ,,ˇsipka doprava‘‘ – Zvˇetˇs´ı pˇrekl´adanou fr´azi naˇcten´ım dalˇs´ıho slova a zobraz´ı ji do informaˇcn´ıho okna. Slov ve fr´azi m˚ uˇze b´ yt maxim´alnˇe pˇet. K tomuto omezen´ı jsem se rozhodl ze dvou d˚ uvod˚ u. Vˇetˇsina fr´az´ı v´ıce neˇz pˇet slov neobsahuje. A pokud ano, d´ a se rozdˇelit na dvˇe kratˇs´ı fr´aze. • ,,ˇsipka doleva‘‘ – Naopak zmenˇs´ı fr´azi o jedno slovo.
Obr´azek 3: Uk´azka pr´ace v aktivn´ım pˇrekladov´em reˇzimu
• ENTER – umoˇzn´ı uˇzivateli v nejspodnˇejˇs´ım ˇr´adku informaˇcn´ıho okna zadat pˇreklad zvolen´e fr´aze. Zad´avat m˚ uˇze stejn´e znaky, jako pˇri psan´ı v editaˇcn´ım oknˇe. Zp˚ usob
24
zad´av´an´ı je stejn´ y, jako pˇri zad´av´an´ı jm´ena souboru pro uloˇzen´ı textu nebo pˇri nahr´av´an´ı textu. Po potvrzen´ı zadan´e fr´aze ENTERem se ovˇsem ze zadan´e fr´aze odstran´ı ,,pˇreruˇsovac´ı‘‘ znaky, mezery na konci a na zaˇc´atku fr´aze a poˇcet mezer mezi slovy fr´aze je upraven na jednu. Pot´e se zkontroluje, zda nen´ı v zadan´e fr´azi v´ıce, neˇz pˇet slov. Pokud ano, vyp´ıˇse se do informaˇcn´ıho okna hl´aˇsen´ı Chyba -- zadan´ a fr´ aze m´ a v´ ıce neˇ z pˇ et slov Pot´e m˚ uˇze uˇzivatel zadat novou fr´azi. Pokud je zad´avan´a fr´aze v poˇr´adku, uloˇz´ı se do datab´aze a pomoc´ı n´ı se provede pˇreklad aktu´aln´ı fr´aze a pokraˇcuje se pˇrekladem dalˇs´ı fr´aze. • Ctrl-P – umoˇzn´ı kdykoliv v pr˚ ubˇehu zad´av´an´ı nov´e fr´aze pˇrej´ıt do pasivn´ıho pˇrekl´adac´ıho reˇzimu a dopˇreloˇzit v nˇem zbytek textu. K omezen´ı velikosti fr´aze na pˇet slov jsem se rozhodl ze dvou d˚ uvod˚ u: 1. Vˇetˇsina fr´az´ı v´ıce neˇz pˇet slov neobsahuje. A pokud ano, daj´ı se lehce rozdˇelit na dvˇe kratˇs´ı fr´aze. 2. Pˇrekl´ad´an´ı textu s datab´az´ı obsahuj´ıc´ı velmi dlouh´e fr´aze ne´ umˇernˇe zpomaluje ˇcinnost programu (kv˚ uli zp˚ usobu pr´ace programu s datab´az´ı, viz kapitola 6.1).
25
7 7.1
Struˇ cn´ y popis vypracov´ an´ı hlavn´ıho programu Vypracov´ an´ı editaˇ cn´ı ˇ c´ asti
Obsah editaˇcn´ıho okna je cel´ y uloˇzen v bufferu v pamˇeti. Program je urˇcen pro pˇrekl´ad´an´ı obchodn´ı korespondence, tud´ıˇz nepˇredpokl´ad´am, ˇze by bylo potˇreba naˇc´ıtat do nˇej pˇr´ıliˇs dlouh´e texty, kter´e by zab´ıraly pˇr´ıliˇs m´ısta. Pˇri editov´ an´ı ˇr´adku se dan´ y ˇr´adek pˇrenese do menˇs´ıho bufferu urˇcen´eho pr´avˇe pro editov´an´ı jednoho ˇr´adku. Zmˇeny, prov´adˇen´e v ˇr´adku se prov´ad´ı v tomto mal´em bufferu. Pokud se kurzor pˇresune na jin´ y ˇr´adek, aktu´aln´ı buffer ˇr´adku se uloˇz´ı do bufferu souboru a do bufferu ˇr´adku se naˇcte nov´ y ˇr´adek. Tyto buffery jsou v programu obsaˇzeny dvakr´at. Druh´a sada buffer˚ u slouˇz´ı pro pˇreklad textu v pˇrekl´adac´ı ˇc´asti programu. Pˇr´ıstup k tˇemto buffer˚ um a jejich vykreslov´an´ı na obrazovku, se prov´ad´ı stejn´ ymi funkcemi, jejichˇz jeden argument urˇcuje, se kter´ ym bufferem se m´a pracovat. Proto bylo naprogramov´an´ı pˇrekladov´e ˇc´asti a zobrazov´an´ı pˇreloˇzen´eho textu jednoduˇsˇs´ı a kratˇs´ı.
7.2
Vypracov´ an´ı pˇ rekladov´ eˇ c´ asti
Zp˚ usob vypracov´an´ı pˇrekladov´e ˇc´asti je jiˇz prakticky pops´an v kapitol´ach 4 a 6. Byly zde vyuˇz´ıv´any datov´e struktury vytvoˇren´e v editaˇcn´ı ˇc´asti programu a datab´azov´e funkce.
7.3
Dalˇ s´ı obecn´ e informace
Program neum´ı spolupracovat s myˇs´ı a neum´ı se pˇrizp˚ usobovat v pr˚ ubˇehu sv´eho bˇehu zmˇen´am velikosti termin´alu. Zdrojov´ y text hlavn´ıho programu je uloˇzen v nˇekolika souborech. Soubor translat.c obsahuje funkce pouˇz´ıvan´e v pˇrekladov´e ˇc´asti. V souboru base.c jsou funkce, kter´e obstar´avaj´ı potˇrebn´e akce pˇri editov´an´ı textu, jeho zobrazov´an´ı na obrazovku a ukl´ad´an´ı a naˇc´ıt´an´ı textu a k´odu ze souboru. Soubor jm´enem dbs lib.c obsahuje vˇsechny funkce potˇrebn´e pro pr´aci se soubory tvoˇr´ıc´ımi datab´azi. Tyto soubory se jmenuj´ı cz code.dat (obsahuje tabulku [ˇ cesk´ a fr´ aze, k´ od]), en code.dat (tabulka [ˇ cesk´ a fr´ aze, k´ od]) a code c e.dat (tabulka tvaru [k´ od, ˇ cesk´ a fr´ aze’\013’anglick´ a fr´ aze]). Soubor trans.c je hlavn´ı soubor projektu, do nˇej jsou zaˇclenˇeny pomoc´ı direktivy include jayzka C ostatn´ı soubory. Pokud bˇehem pr´ace dojde programu voln´a pamˇet’ (v dneˇsn´ı dobˇe pamˇet´ı s velkou kapacitou nepravdˇepodobn´e, ale ne nemoˇzn´e), vyp´ıˇse se chybov´e hl´aˇsen´ı Pro dalˇ s´ ı bˇ eh programu nen´ ı dostatek voln´ e pamˇ eti a ukonˇc´ı program podobn´ ym zp˚ usobem, jako stisk Ctrl-C.
7.4
Pˇ rekl´ ad´ an´ı programu
Linuxov´a i DOSov´a verze programu se pˇrekl´ad´a pomoc´ı programu make. Ten prov´ad´ı akce zapsan´e v souboru Makefile, kter´ y je ˇs´ıˇren s programem. Po proveden´ı tˇechto pˇr´ıkaz˚ u 26
se v adres´aˇri, ve kter´em se Makefile i vˇsechny ostatn´ı zdrojov´e soubory nach´az´ı, vytvoˇr´ı spustiteln´e soubory trans, cr dbs a fill dbs (v DOSu soubory trans.exe, cr dbs.exe a fill dbs.exe).
27
8
Z´ avˇ er
V pr˚ ubˇehu tvorby programu jsem se snaˇzil o to, aby byl co nejv´ıce intuitivn´ı a uˇzivatelsky pˇr´ıvˇetiv´ y. Douf´am, ˇze uˇzivatel˚ um co nejv´ıce usnadn´ı a zefektivn´ı nelehkou pr´aci pˇri pˇrekl´ad´an´ı obchodn´ı korespondence. Tato pr´ace byla vys´azena typografick´ ym syst´emem LATEX.
28
Reference [1] Hovy, Eduard: Jak MT pracuje. Bajt, 12/1992, s. 101. [2] ANSI, American National Standards Institute homepage. http://www.ansi.org/. [3] RedHat homepage. http://www.redhat.com/. ˇ e Budˇejovice, Kopp 1999. [4] Herout, Pavel: Uˇcebnice jazyka C. Cesk´ [5] GCC home page. http://gcc.gnu.org/. [6] Ncurses 5.2. http://www.gnu.org/software/ncurses/ncurses.html. [7] PdCurses for Windows. http://gnuwin32.sourceforge.net/packages/pdcurses.htm. [8] GDBM. http://www.gnu.org/software/gdbm/gdbm.html. [9] GDBM for DOS. http://www.delorie.com/gnu/docs/gdbm/. [10] DJGPP. http://www.delorie.com/djgpp/. [11] ElectricFence. http://packages.debian.org/unstable/devel/electric-fence.html.
29
Rejstˇ r´ık aktivn´ı reˇzim, 7, 20, 23, 24 ANSI, 7, 11, 13 ASCII, 7, 18
Makefile, 13, 26, 27
C, 7, 11, 13
obchodn´ı korespondence, 7, 8, 10, 26, 28
ncurses, 11, 21
DJGPP, 11, 13 DOS, 7, 11, 13, 17, 18, 26, 27
pasivn´ı reˇzim, 7, 20, 23, 25 pdcurses, 11
Electric Fence, 14
strojov´ y pˇreklad, 7–9
gcc, 11, 13 gdbm, 11–13, 15, 23 GNU, 11, 13
UNIX, 7, 11, 13, 17, 18
Linux, 7, 11, 26
Windows, 7, 13
verze, 11, 13, 16, 17, 26
30