.chr

A Programozás Wiki wikiből

Bevezető[szerkesztés]

A .chr állományok vonalakból kirajzolható (stroked) karakter-leírásokat tartalmaznak. Turbo Pascalban ismeretes a használatuk. A karaktereket a grafikus rendszer a kurzor mozgatásával és vonalrajzoló utasításokkal jeleníti meg. Az állományban bármelyik karakterhez tartozhat rajzolat (#0..#255), és egy-egy karakter bármennyi mozgásból és vonalhúzásból állhat. A saját kezű fontok (betűk) az InstallUserFont függvény hívása után használható.

Az állomány felépítése[szerkesztés]

Egy .chr állomány az alábbi öt részből épül fel:

  • Font-leíró rész
  • Állomány-leíró rész
  • Karakter leírások címtáblázata
  • Szélességtábla
  • Karakterleírások

Font-leíró rész[szerkesztés]

Ez a terület 128 Byte hosszú, az állományon belül a 00h címen kezdődik. Az első 4 Byte az állomány azonosítására szolgáló kötött tartalmú terület. Ezt követheti egy bármilyen tartalmú, maximálisan 113 karakteres szöveg, melyet $1A karakterrel kell zárni. A további mezők technikai információkat hordoznak.

 DB 'PK', 8, 8        ; Négy byte-os azonosító
 DB szöveg            ; Font teljes neve, copyright információk
 DB 1Ah               ; A szöveg végét jelző  ^Z  karakter
 DW 80h               ; A fontleíró rész hossza
 DB fontnév           ; Négy karakteres név, az állománynak is ezt a nevet kell adni
 DW állományméret     ; Az állomány mérete mínusz 128 ( a fontleíró rész nélküli méret)
 DB FA                ; Verziószám, az F a fő-, az A pedig az al-verziószám
 DB 1, 0              ; Kezdeti verziószám
 DB kitöltő byte-ok   ; Kitöltő byte-ok, hogy a terület mérete 128 byte legyen

Állomány-leíró rész[szerkesztés]

A rész a 128. byte-on kezdődik és 16 byte hosszú. Tartalmazza a rajzolási mód azonosító karaktert, a karakterek számát, az első karakter kódját és leírásának eltolási címét a 80h -hoz képest, a kitöltési módot jelző byte-ot, valamint méret és eltolási információkat.

 DB '+'             ; Rajzolási mód azonosító
 DW karakterszám    ; Az állományban leírt karakterek száma
 DB 0               ; Nem használt
 DB karakterkód     ; Az első leírt karakter kódja
 DW eltolás         ; Eltolás a leírásokhoz,  80h + eltolás = első karakter leírása 
 DB 0               ; Kitöltési mód, mindig nulla
 DB nagybetű        ; A nagybetűk magassága pontokban
 DB alapvonal       ; Az alapvonal eltolása pontokban
 DB lelógás         ; Az alapvonal alá lelógó vonalak mélysége pontokban, ez negatív érték
 DB 0, 0, 0, 0, 0   ; Nem használt

Karakter-leírások címtáblázata[szerkesztés]

A táblázatban minden egyes karakterhez egy szavas eltolási érték tartozik, melyből kiderül, hogy a karakter leírása hol található az állományon belül ( 80h + táblázatbeli érték = karakter-leírásának első byte-ja ). A táblázat első szava az állomány-leíró rész 4. byte-ján (karakterkód) megadott karakter leírására mutat. A címtáblázat karakterszám * 2 byte méretű.

Szélességtábla[szerkesztés]

Minden karakterhez egy 1 byte-os érték tartozik, a karakter szélessége pontokban. A grafikus rendszer ezeket az értékeket használja fel a szöveg szélességének meghatározására. Lásd Graph modul TextWith függvénye. A szélességtábla karakterszám byte méretű.

Karakterleírások[szerkesztés]

Egymás után karakterszám darab leírás, ahol minden leírás elvben korlátlan hosszú lehet. Minden művelethez mint, mozgás, vonalhúzás, vagy leírás vége - egy szó tartozik. A byte-ok legfelső bitjei határozzák meg a műveletet, az alsó 7-7 bit pedig előjelesen a relatív koordinátákat. A karakter 0, 0 pontja a legelső művelet előtti grafikus kurzor pozíció. Minden művelet ehhez képest adja meg a koordinátákat. Ha több karaktert rajzoltunk egymás mellé (például az OutText eljárással), akkor a mindenkori következő karakter 0, 0 pontja oda kerül, ahol az előző befejeződött. Ezért fontos, hogy a "vége-kód" előtt vigyük el a grafikus kurzort a karakter jobb szélére egy MoveTo művelettel, különben nem egymás mellé, hanem kisebb-nagyobb átfedéssel egymásra rajzolódnak.