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