Ilkka Lehtoranta | ilkleht@isoveli.org
Pascalia MorphOS:lla

Ohjelmointia harrastaneille Pascal on vanha tuttu juttu. Unkarilaisen Karoly Baloghin ansiosta tämä Niklaus Wirthin kehittämä perinteikäs ohjelmointikieli on saatavilla myös MorphOS:lle.

Free Pascal Compiler, tai lyhyemmin FPC, sai alkunsa kun Borland ilmoitti, ettei se jatka Pascal-kääntäjänsä kehittämistä MS-DOS:lle. Florian Klämpfl sai tästä idean alkaa kehittää omaa 16-bittistä Pascal-kääntäjää, FPK:ta, josta myöhemmin kehittyi suosittu 32/64-bittinen Free Pascal Compiler.

     
"Pascal-ohjelmoinnissa on siis omat merkillisyytensä, joiden tarkoitus ei aukea heti ensimmäisenä."
Tavalliselle C-rajoitteiselle ohjelmoijalle Pascal voi tuntua aluksi oudolta. Pascal ei käytä makefileitä ja C-kieleen verrattuna runsas teksti suorastaan hyppii silmille. FPC ei käytä myöskään esikääntäjää, mutta samantapaiset direktiivit ovat silti käytössä (esimerkiksi #ifdef on $IFDEF). Luonnollisestikaan Pascal-kääntäjä ei voi käyttää MorphOS SDK:n otsikkotiedostoja suoraan, mutta kääntäjän mukana tulee korvaavat unitit. Myös omien unittien teko on mahdollista, ja FPC tukee sekä M68k ABI että SysV ABI -kutsuja. Jälkimmäisen eri variantit eli SysVBase, BaseSysV ja R12Base ovat mahdollisia.

Tyypillinen helloworld tehdään Pascalilla seuraavasti:

program helloworld;

begin
writeln('Hello World!');
end.


Huomaa ettei Pascal tunne C-tyylisiä ohjausmerkkejä, vaan rivinvaihto saadaan käyttämällä writeln() proceduuria. Talleta koodi tiedostoon nimellä helloworld.pas ja käännä se komennolla fpc helloworld.pas jolloin FPC:n pitäisi tehdä helloworld -niminen ohjelma samaan hakemistoon.

Pascalissa ABox-kirjastot ovat omia unittejaan. Esimerkiksi ohjelma joka avaa ikkunan voitaisiin laatia seuraavasti:

01: program omaikkuna;
02:
03: uses exec, intuition;
04:
05: var
06: Ikkuna : PWindow;
07:
08: begin
09: if Not InitIntuitionLibrary then Halt(20);
10:
11: Ikkuna := OpenWindowTags(NIL, [WA_Left,0,WA_Top,0,
12: WA_Width,200,
13: WA_Height,200,
14: WA_Title,DWord(PChar('Pascal ruulz')),
15: WA_IDCMP,IDCMP_CLOSEWINDOW,
16: WA_Flags,(WFLG_CLOSEGADGET or WFLG_DRAGBAR),
17: TAG_DONE]);
18:
19: if Ikkuna=NIL then Halt(20);
20:
21: WaitPort(Ikkuna^.UserPort);
22: GetMsg(Ikkuna^.UserPort);
23: CloseWindow(Ikkuna);
24: end.

(Esimerkin lähdekoodi oikeine muotoiluineen.)

Pascalissa osoittimet ja struktuurit esitellään omalla tavallaan. Esimerkissä Ikkuna:PWindow; vastaa C-kielen struct Window *Ikkuna; esittelyä. Sen sijaan Ikkuna:TWindow esittelisi Window-struktuurin.

Yksi huomionarvoinen seikka on rivillä 14 oleva tyyppimuunnos. Ikkunan otsikko on merkkijono, mutta taglist hyväsyy vain DWordin (Amiga-kielellä ULONG). Merkkijono täytyy muuntaa ensin merkkijono-osoittimeksi PChar()-funktiolla, joka vielä muutetaan DWord-tyyppiseksi.

Pascal-ohjelmoinnissa on siis omat merkillisyytensä, joiden tarkoitus ei aukea heti ensimmäisenä. FPC:n kotisivuilta löytyy dokumentaatio kääntäjän ominaisuuksiin ja Pacalin proceduureihin. MorphOS:ssa ei ole vielä mahdollista käyttää kaikkia järjestelmäkutsuja. Kääntäjän mukana tulee kyllä valmiit unitit tärkeimpiin kirjastoihin, mutta läheskään kaikkia MorphOS:n laajennuksia ei voi käyttää. Jotkut kutsuista ovat myös muuttaneet nimeä. Esimerkiksi FreeMem() on execFreeMem(), koska FPC on varannnut nimen omaan käyttöönsä.

Alla vielä linkit Free Pascalista kiinnostuneille:
> www.freepascal.org
> MorphOS WiKi

Uusimman MorphOS-portin FPC:stä saa osoitteesta http://scenergy.dfmk.hu/amiga/fpc_mos/.

Sivun alkuun