PKFILE - Een PK-editor tendienste van CARTO
Inhoud
1. Inleiding
2. Structuur van een PK-file
1. Preamble command
2. Command-bytes en Flag-bytes
3. De Character definition
4. De raster data
5. Postamble command
3. Functies van PKFILE
4. PKFILE en CARTO
Waarschuwing
Terug naar hoofdmenu
1 Inleiding
Het programma PKFILE.EXE, dat geschreven is in C++, is ontworpen als editor van de
pixelpatronen van een TEX PK-file. Het is gebouwd op basis
van de informatie vervat in het artikel: Tomas Rokicki, Packed
(PK) Font File Format, TUGboat, Volume 6 (1985), No.3, pag.
115 - 120 (Bibliotheek W&N, KUN). Dit artikel is hierbij in
fotokopie toegevoegd.
Het programma leest een
klein databestand met instructies, genaamd Invoerpk.txt,
waarin de eerste regel de naam moet bevatten van de te editten
PK-file. De tweede regel geeft de grootte in scherm-pixels
van het vierkantje dat een PK-pixel van het symbool zal aanduiden.
De laatste regel laat kiezen voor de schermkleur.
Bij het
inlezen van een PK-file wordt de informatie over de structuur
van ieder individueel symbool uit die file vastgelegd in een tweetal
bestanden op de harde schijf, te weten vooreerst
pkstrxxx.pks, met informatie over het geheel en als deel
daarvan een getal ter aanduiding van de grootte van het pixelraster,
dat op zijn beurt wordt opgeslagen in karakxxx.ras.
XXX staat voor cijfers lopende van 0 tot 127.
Deze 128 maal 2 bestanden hebben buiten de editor geen functie en
kunnen dus na afloop zonder bezwaar vernietigd worden.
Het programma
houdt in:
- Het inlezen van een PK-file.
- Het wijzigen
van een character-rooster van een symbool uit de file
- Het
saven van een PK-file in twee formaten
Een bijzondere functie daarnaast
is het kopiëren van een symbool naar de plaats van een ander
symbool. Over de details van wijziging van individuele symbolen
wordt beneden gesproken.
Terug naar Inhoud
2. Structuur van een PK-file
Een TEX PK-file heeft op het hoogste niveau de volgende structuur:
- Preamble - command, gevolgd door parameters.
-
Character definitions: een reeks van definities, gescheiden
door een onbepaald aantal commando's (niet zijnde preamble
command of postamble command).
- Postamble
Terug naar Inhoud
1. Het preamble
command
Het preamble-command heeft de volgende structuur:
- [0] een byte met de waarde F7, gevolgd door de
volgende 7 argumenten
- [1] de identification byte HEX 59
= 89.
- [2] een byte die de lengte-x geeft van de volgende
string
- [3] x bytes (de string, bevattende commentaar)
- [4]
ds (designsize): 4 bytes lang; waarde in 1 - 2**16 punten
- [5]
cs (checksum): 4 bytes lang.
- [6] hppp: horizontaal pixels
per point, multiplied by 2**16; 4 bytes.
- [7] vppp: verticaal
pixels per point, multiplied by 2**16; 4 bytes.
Het totaal
aantal bytes van de preamble is 19 plus x (de waarde van byte[2]).
De preamble wordt onder PKFILE nimmer gewijzigd.
De parameters 4 tot en met 7 zijn nooit van belang voor de wijze
waarop TEX werkt met de in deze file gedefinieerde
karakters of symbolen. Wel voor vergroting, verkleining enz.
maar die is rond CARTO nooit aan de orde, omdat er dan een metafont-operatie
zou moeten plaatshebben.
Terug
naar Inhoud
2. Command-bytes en Flagbytes
- Bytes met een numerieke waarde 240 - 255 zijn command-bytes.
Het betreft dus F0 tot FF. Acht hiervan slechts worden gedefinieerd
en gebruikt voor interpretatie, te weten F0 - F7. De overige
worden gereserveerd voor toekomstige uitbreidingen. Voor een
nieuwe editor zouden ze dus gebruikt kunnen worden voor nieuwe
te definiëren functies. De eerste nybble (= halve byte) van
een command-byte heeft altijd de waarde F (15).
- Een Flagbyte
is een byte met een waarde in het domein 0 - 239. Deze introduceert
een character definitie.
- De eerste halve byte van een Flagbyte
definieert de zgn. dyn-f waarde, liggende in het domein 0-14.
Deze waarde speelt een rol voor de interpretatie van de Raster
data, de code waarin het pixelpatroon is vastgelegd op een wijze
die door Rokicki gedetailleerd wordt beschreven, maar die voor
de gebruiker van PKFILE van geen betekenis is.
-
De waarde 14 betekent: er volgt een bitmapped karakterisering.
Een andere waarde betekent dat er een pixelpatroon wordt gedefinieerd
in termen van, laten we zeggen, een dyn-formule, waarvan het
algoritme gegeven is door Rokicki pag. 118.
Terug naar Inhoud
3. De character definition
Een karakter-definitie bestaat uit een character
preamble en de Raster Data, het beeld van het karakter in pixels.
Dit beeld wordt gegeven ofwel in een bitpatroon ofwel in een
formule die een bitpatroon genereert. De character preamble
kent 3 formats
- [A] Short form (11 bytes)
- [B] Extended
Short form (17 bytes)
- [C] Long form (37 bytes)
Terug naar Inhoud
4. De Raster Data
- De lengte van dit deel van de
character definition wordt bepaald door Packet length, gedefinieerd
in de preamble.
- De Raster Data definieren runs
van pixels (zwart of wit) en bevatten zgn. repeat counts voor
herhaling van lopende regels na hun voltooiing.
De in
een TEX -pk-file bevatte raster-data worden onder het hier
besproken pkfile-programma normalerwijze als een visuele
figuur (een pixelpatroon) weergegeven. Het is echter ook mogelijk
de hexadecimale waarde van alle rasterbytes op het scherm te
tonen. Dat gebeurt wanneer men kiest voor Toon/Neem weg de Raster data.
Op details van de
character-definities evenmin als op de wijze waarop PKFILE
daarmee opereert gaan we in. Belangstellenden worden verwezen
naar bovengenoemde uiteenzetting van Rokicki.
Terug naar Inhoud
5. De postamble
De
postamble, die begint met het postamble command, sluit de PK-file
af. De structuur is als volgt - Het postamble command:
F5 met de argumenten:
- een x-aantal no-operation commando's
(F6), zodanig dat de file gebracht wordt op een lengte van
een viervoud aantal bytes.
Terug naar Inhoud
3. De functies van PKFILE
De hoofdfunctie van PKFILE is: een bestaande PK-file
zodanig wijzigen dat er symbolen in worden gedefinieerd welke
geschikt geacht worden voor gebruik op een dialectkaart.
Daarbij zorgt PKFILE ervoor dat er tevens van die symbolen een rasterpatroon in nullen en enen
worden uitgevoerd waaruit later een bruikbare definitie kan worden gegenereerd
voor het systeem CARTO. Dat later te genereren bestand zal zijn delorme.bin.
Het wordt op basis van de uitvoer van PKFILE gegenereerd
door het SPITBOL-programma
PKSYMBOL.EXE .
Bij executie maakt PKFILE gebruik van informatie die is opgenomen in het bestand
invoerpk.txt. Het ziet er bv. als volgt uit:
foneties.pk
7 Pixelgrootte
1 Schermkleur
De eerste regel duidt de PK-file aan die bewerkt gaat worden.
Regel 2 geeft de grootte van het veldje op het scherm waarmee een pixel uit het pixeldiagram van het
onderhavige karakter wordt afgebeeld. (De grootte 7 is zeer geschikt).
De volgende regel gaat over de kleur van het scherm.
Het hoofdmenu van PKFILE ziet er zo uit:
Lees de PK-file in
Copy karakter i naar ander karakter
Edit PK-karakter
Save de PK-file (voor TeX)
Save de l'Orme-file (voor CARTO)
Copy VREEMD karakter i naar ander karakter j
EXIT
Het eerste commando laat de te bewerken PK-file inlezen in het geheugen.
De file waarom het gaat moet zoals gezegd opgegeven worden in gedefinieerd zijn in invoerpk.txt.
Het tweede commando laat de figuur van een bepaald karakter kopiëren over een ander symbool heen.
Dat is zinvol als men dat tweede karaktersymbool kwijt wil en wenst te vervangen door het andere,
eventueel wanneer men de kopie een kleine variatie op het andere wil laten worden.
Het derde commando laat toe een bepaald karaktersymbool op pixelniveau te veranderen.
Wat men wil doen wordt mogelijk na opening van het volgende Menu en de keuze van de
eerste optie.
Start pixels-wijziging
Spiegel het symbool links<->rechts
Spiegel het symbool onder<->boven
Kantel het symbool 90 graden
Toon / Neem weg de Raster data
Save pixels naar Karak[nummer].ras
Save Pixels voor CARTO-symbolen
Kies volgende symbool
Kies voorgaande symbool
Kies een symbool op nummer
EXIT deze routine
De opties voor spiegelen en kantelen
spreken voor zichzelf. De gebruiker houde de balk met informatie
onderaan het scherm terdege in het oog. Ook die voor het kiezen van andere symbolen vergen geen uitleg.
Toelichting is nodig bij de beide save-commando's.
De optie save pixels naar Karakter[nr] zorgt ervoor dat het behandelde karaktersymbool in gewijzigde vorm
voorlopig gesaved wordt, zodat het in de bedoelde vorm in de file wordt opgenomen,
wanneer die later vanuit het hoofdmenu in zijn geheel wordt gesaved.
De optie save pixels voor CARTO-symbolen slaat het resultaat op - in een tussenformaat
voorlopig - in het bestand letters.txt. Zie
PKsymbol voor de omzetting voor later gebruik onder CARTO:
.
Het tonen van de rasterwaarden in hexadecimale vorm is alleen informatief voor de gebruiker.
Thans de voornaamste, eerste optie: start pixelwijziging.
Na het aanklikken van deze optie geeft de gele informatiebalk aan wat
men precies kan doen.
Een pixelfiguur wordt op het scherm getoond en met de muis kunnen
er wijzigingen en uitbreidingen (ook buiten de voor TEX geldende
buitenste grenzen) worden aangebracht: met de rechtermuisknop
wordt een pixel verwijderd (geel wordt groen), met de linker toegevoegd:
(groen wordt geel). Wanneer men het symbool naar links of naar beneden wil vergroten,
moeten de pijlen in de balk ter linkerzijde worden aangeklikt.
Zodra het werk aan een bepaald symbool is voltooid, moet men alvorens aan een volgende
symbool te beginnen deze éne figuur afzonderlijk voorlopig saven.
Dat gebeurt met de beide commando's save pixels. Het heet "voorlopig" omdat het
saven naar disk geschiedt maar nog niet naar de file waarvan het symbool een deel vormt.
Dat betekent
dat de nieuwe figuur van karakter[NN] op schijf wordt geplaatst
in karak[NN].ras. De oude figuur is dan opgeruimd en binnen deze run
van het programma niet meer beschikbaar. (Wanneer straks onder het hoofdmenu de hele
file is gesaved is de oude figuur definitief verdwenen).
Het hoofdmenu wordt weer bereikt nadat het kleine menu verlaten is via
de optie EXIT.
We vervolgen met het HOOFDMENU.
De optie Save de PK-file (voor TeX) legt de in behandeling zijnde PK-file in gewijzigde
vorm vast. Hij bevat gegevens die gebruikt zullen worden wanneer TeX de uitvoer van CARTO
naar de printer stuurt. De geproduceerde file zelf wordt niet door CARTO gebruikt.
De optie Save de l'Orme-file (voor CARTO) brengt de file
in zijn totaliteit naar de uitvoer in het speciale bestand dat later
behandeld zal worden door PKSYMBOL.EXE (te weten
letters.txt). Zie boven voor afzonderlijke karakters in het submenu..
Tenslotte de optie Copy VREEMD karakter i naar ander karakter j.
Deze optie is gebouwd om een karakter uit XXX.PK over te kunnen brengen naar YYY.PK.
Na bewerking van file XXX.PK wijzigt men de naam van karak[i].ras in oud[i].ras,
en de naam van Pkstr[i].pks in oud[i].pks.
Is dat gebeurd, dan kan bij bewerking van een andere PK-file het VREEMDe karakter
oud[i].ras gekopiëerd worden naar het dan bestaande karakter[j].ras
en zo ook de overeenkomstige oud[i].pks naar Pkstr[j].pks.
Na definitief saven van de file yyy staat dan het vreemde symbool i van xxx op de plaats van
het karakter dat men als zijn nieuwe plaats heeft opgegeven.
Terug naar Inhoud
4. PKFILE en CARTO
CARTO maakt
gebruik van pixelpatronen. Deze zijn gedefinieerd in DELORME.BIN
en hebben de vorm van hexadecimale getallen die kunnen worden
herleid tot een patroon van nullen en enen. Deze hexadecimale
getallen worden gegenereerd door het programma
PKSYMBOL.EXE.
De invoer van dit programma is een bestand met in enen en nullen
uitgedrukte pixelpatronen, welke op hun beurt worden gegenereerd
door PKFILE.EXE dat hier beschreven wordt. PKFILE.EXE
maakt dus enerzijds afbeeldingen van symbolen die door vertaling
en hervertaling tenslotte door CARTO kunnen worden gebruikt
op dialectkaarten op het scherm, terwijl het anderzijds een
XXX.PK-file maakt die door TeX kan worden
gebruikt voor het produceren van printer-output. Met het
programma PKSYMBOL.EXE is het mogelijk zulke patronen in enen en nullen
om te werken tot het formaat van DELORME.BIN
Terug naar Inhoud
Waarschuwing
Gebruikers worden erop geattendeerd dat PKFILE.EXE niet is ontworpen
om welke TeX-PK-file dan ook adekwaat te kunnen manipuleren. Bestanden met
grote karakters worden bepaald afgeraden. De maximale maten van een symbool
zijn in pixels 44 breed bij 55 hoog.
Een tweede waarschuwing moet gelden voor bepaalde bugs. Geen gerantie kan worden
gegeven voor foutloze operatie ook op individuele karakters binnen het
gegeven formaat. De bestanden Geo300.pk en Geo3432.pk echter
zijn zonder ondervonden bezwaren uitvoerig bewerkt onder
PKFILE.EXE (en onder TeX's PKEDIT.EXE).
Jan van Bakel
Nijmegen 2004
Terug naar boven