Desktopologia I.
2016-05-25, tagged as
Volakedy davnejsie som sa dostal k dokumentu od MTS, ktory obsahuje zakladne
informacie pre pripadneho zaujemcu o naprogramovanie utility pre Desktop.
Okrem roznych adries premennych a podprogramov obsahuje aj popis ulozenia
textu v pamati, kodovanie diakritiky a sposob komprimacie textu.
No a tu som dostal napad spravit utilitu pre PC, ktora by zobrala desktopovy subor a vygenerovala by obrazky, ktore by sa potom dali vytlacit na PC tlaciarni, ci uz ako samotne listy, alebo rovno ako knizku.
Samozrejme, idea je pekna, ale najskor treba vediet co taky subor obsahuje a hlavne ako sa k tomu v citatelnej forme dostat.
Prva vec, ktora ma zaujala je, aky je rozdiel medzi suborom ulozenym na kazetu a subromi, ktore uklada disketova verzia. Letmym pohladom do vypisu prikazu hexdump som zistil, ze oba formaty obsahuju rovnake informacie, akurat kazetovy subor je jeden blok s hlavickou, ktory sa "spinavymi" trikmi nahrava na viackrat a disketove subory su 4.
Spinave triky o ktorych pisem su, ze najskor sa nahra (klasickym romkovym loaderom) hlavicka, v ktorej su informacie o dlzkach dalsich troch blokov, potom sa zasa klasickym romkovym loaderom nahra prvy datovy blok, po jeho nahrani sa zmeni adresa a dlzka nahravanych dat a skoci sa dostredu romkoveho loaderu, takze druhy blok neobsahuje ziadny zavadzaci signal a rovnako skokom do stredu loadera sa nahra aj posledna cast na zasa inu adresu v pamati. Pre analyzu jednotlivych blokov budem teda pouzivat disketove subory a na zaver popisem ako jednotlive bloky "vystrihnut" z kazetoveho suboru.
Cast prva: Format textu
Ako som uz spominal, texty su v pamati komprimovane. Je sice pouzita velmi jednoducha komprimacia, ale v istych situaciach moze naozaj podstatne usetrit miesto.
Nema zmysel opisovat cely dokument od MTS, tak len v skratke zhrniem:
- kazdy riadok zacina informacnym byte-om (font, zarovnanie, obrazok)
- po informacnom byte nasleduje adresa obrazka (ak je obrazok pritomny)
- po infobyte a adrese obrazka nasleduje samotny text riadka
- diakriticke znaky maju ascii kody 128-157
- zmena fontu vnutri riadka je zaznamenana znakom s ascii kodom 0-3
- znaky s ascii kodmi 160 a viac definuju kolkokrat sa opakuje predchadzajuci znak
Z uvedeneho vyplyva, ze komprimacia textu nastava, ak sa v texte nachadzaju aspon 3 rovnake znaky za sebou a zaroven tiez, ze komprimacia nemoze sposobit predlzenie textu.
Pouzitim prikazu hexdump sa ukaze, ze aj v subore je text ulozeny rovnakym sposobom, ako v pamati. HURAAA!
A tak nam uz nic nebrani k napisaniu programu na "vycuc" textu do nekomprimovanej podoby. Pre zaciatok diakriticke znaky len nahradime klasickymi ascii znakmi, aby sme text vedeli jednoducho precitat. V pripade, ze by sme chceli do vystupu dat aj diakritiku, uz by sme sa museli zamyslat nad kodovanim, na co este bude casu dost.
A tu je nas program (ako vstupny subor som pouzil ukazkovy text z diskety Desktopu):
--