home *** CD-ROM | disk | FTP | other *** search
- *************************************************************************
- * *
- * Include-tiedostot, joissa on määritelty käyttöjärjestelmärutiineihin *
- * liittyviä struktuureja ja vakioita. Struktuurit ovat tässä tapauk- *
- * sessa vain eri alkioiden offset-arvoja struktuurin alkuun verattuna. *
- * *
- *************************************************************************
-
- include "exec/types.i"
- include "exec/nodes.i"
- include "exec/lists.i"
- include "exec/memory.i"
- include "graphics/gfx.i"
- include "graphics/gfxbase.i"
- include "graphics/text.i"
- include "intuition/intuition.i"
- include "intuition/screens.i"
-
- *************************************************************************
- * *
- * Määritellään kutsuttavat käyttöjärjestelmärutiinit, jolloin BLink *
- * osaa korvata sumboliset nimet oikeilla offset-arvoilla. *
- * BLink saa offset-arvot amiga.lib-tiedostosta. *
- * *
- *************************************************************************
-
- xref _LVOOpenLibrary,_LVOCloseLibrary,_LVOGetMsg,_LVOReplyMsg
- xref _LVOOpenScreen,_LVOCloseScreen,_LVOOpenWindow,_LVOCloseWindow
- xref _LVOLoadRGB4,_LVOMove,_LVOText,_LVOWaitTOF,_LVOScrollRaster
-
- intuibase equ -4 ; tila Intuition-kirjaston osoittimelle
- gfxbase equ -8 ; tila Graphics-kirjaston osoittimelle
- Naytto equ -12 ; tila Screen-osoittimelle
- Ikkuna equ -16 ; tila Window-osoittimelle
- rp equ -20 ; tila RastPort-osoittimelle
-
- *************************************************************************
- * *
- * Itse ohjelma: Aluksi avataan kirjastot ja näyttö. *
- * *
- *************************************************************************
-
- scroll link a4,#-20 ; varataan muuttujatilaa
- lea gfxnimi(pc),a1 ; grafiikkakirjaston nimi
- moveq #0,d0 ; kirjastoversio (mikä tahansa)
- move.l 4,a6 ; exec-kirjaston perusosoite
- jsr _LVOOpenLibrary(a6) ; kutsutaan OpenLibrary()ä
- move.l d0,gfxbase(a4) ; talletetaan gfx:n perusosoite
- beq cleanup ; jos kirjastoa ei ole, pois!
-
- lea intuinimi(pc),a1 ; Intuition-kirjaston nimi
- moveq #0,d0 ; kirjastoversio (mikä tahansa)
- jsr _LVOOpenLibrary(a6) ; kutsutaan OpenLibrary()ä
- move.l d0,intuibase(a4) ; talletetaan I:n perusosoite
- beq cleanup ; jos kirjastoa ei ole, pois!
-
- lea UusiNaytto(pc),a0 ; näytön struktuurin osoite
- move.l intuibase(a4),a6 ; Intuitionin perusosoite
- jsr _LVOOpenScreen(a6) ; kutsutaan OpenScreen()iä
- move.l d0,Naytto(a4) ; talletetaan osoitin
- beq cleanup ; jos ei auennut, pois!
-
- *************************************************************************
- * *
- * Seuraavaksi asetetaan näytön värit (kynät 0, 1, 2 ja 3) käyttäen *
- * LoadRGB4()-rutiinia, jolle annetaan väritaulukko. *
- * *
- *************************************************************************
-
- move.l d0,a0 ; Screen-struktuurin osoite
- lea.l sc_ViewPort(a0),a0 ; ViewPort-struktuurin osoite
- lea.l Varit(pc),a1 ; väritaulukon alkuosoite
- move.l gfxbase(a4),a6 ; grafiikkakirjaston perusosoite
- moveq #4,d0 ; värien määrä
- jsr _LVOLoadRGB4(a6) ; asettaa värit
-
- *************************************************************************
- * *
- * Avataan ikkuna ja otetaan ikkunan RastPort-struktuurin osoite. *
- * *
- *************************************************************************
-
- lea UusiIkkuna(pc),a0 ; NewWindow-struktuurin osoite
- move.l Naytto(a4),nw_Screen(a0); asetetaan näytön osoitin
- move.l intuibase(a4),a6 ; Intuitionin perusosoite
- jsr _LVOOpenWindow(a6) ; kutsutaan OpenWindow()ia
- move.l d0,Ikkuna(a4) ; talletetaan Window:n osoite
- beq.s cleanup ; jos ei auennut, pois!
- move.l d0,a0
- move.l wd_RPort(a0),rp(a4) ; otetaan RastPortin osoite
-
- *************************************************************************
- * *
- * Varsinainen tekstin vieritys tapahtuu tässä. Silmukoita on vain *
- * kaksi, koska teksti on yhtenä nollaan päättyvänä merkkijonona. *
- * Ulompi silmukka käsittelee kaikki tekstin merkit, sisempi merkin *
- * pikselisarakkeet. *
- * *
- *************************************************************************
-
- lea teksti(pc),a2 ; tekstin alkuosoite
- silmu1 moveq #9,d7 ; pikselin numero
-
- silmu2 move.l Ikkuna(a4),a0 ; oman ikkunan osoitin
- move.l wd_UserPort(a0),a0 ; ikkunan viestiportti
- move.l 4,a6 ; Execbase
- jsr _LVOGetMsg(a6) ; tutkitaan, onko tullut viestejä
- tst.l d0
- bne.s nappula ; joku painoi hiiren nappia!
- move.l d7,d0
- add.l #309,d0 ; x-koordinaatti
- moveq #78,d1 ; y-koordinaatti
- move.l rp(a4),a1 ; RastPort-osoitin
- move.l gfxbase(a4),a6
- jsr _LVOMove(a6) ; Move(rp,310+k,78)
- move.l a2,a0 ; tekstin osoitin
- moveq #1,d0 ; tulostettava pituus 1 merkki
- move.l rp(a4),a1 ; RastPort-osoitin
- jsr _LVOText(a6) ; gfxbase on jo a6:ssa
- jsr _LVOWaitTOF(a6) ; odotellaan
- moveq #1,d0 ; dx (scrollausmäärä x-suunn.)
- moveq #0,d1 ; dy (scrollausmäärä y-suunn.)
- moveq #0,d2 ; minx (alueen vasen yläkulma)
- moveq #70,d3 ; miny (alueen vasen yläkulma)
- move.l #319,d4 ; maxx (alueen oikea alakulma)
- moveq #80,d5 ; maxy (alueen oikea alakulma)
- move.l rp(a4),a1
- jsr _LVOScrollRaster(a6) ; gfxbase on jo a6:ssa
- dbf d7,silmu2 ; tulostetaan kaikki pikselit
-
- addq.l #1,a2 ; kasvatetaan tekstiosoitinta
- tst.b (a2) ; tekstin loppu?
- bne.s silmu1 ; ei -> jatketaan
- bra.s cleanup
-
- nappula move.l d0,a1 ; viestin osoitin
- jsr _LVOReplyMsg(a6) ; vastataan kiltisti viestiin
-
- *************************************************************************
- * *
- * cleanup, joka sulkee kirjastot, näytön ja ikkunat. On huomattava, *
- * että kirjaston sulkemisen jälkeen siinä olevia rutiineja ei enää saa *
- * kutsua. Siksi kirjastot suljetaan viimeisenä. *
- * Näytössä olevat ikkunat on suljettava ennen näytön sulkemista. *
- * *
- *************************************************************************
-
- cleanup move.l Ikkuna(a4),d0 ; jos ikkuna auki, suljetaan se
- beq.s clean1
- move.l d0,a0
- move.l intuibase(a4),a6
- jsr _LVOCloseWindow(a6)
-
- clean1 move.l Naytto(a4),d0 ; jos näyttö auki, suljetaan se
- beq.s clean2
- move.l d0,a0
- move.l intuibase(a4),a6
- jsr _LVOCloseScreen(a6)
-
- clean2 move.l gfxbase(a4),d0 ; jos graphics auki, suljetaan
- beq.s clean3
- move.l d0,a1
- move.l 4,a6
- jsr _LVOCloseLibrary(a6)
-
- clean3 move.l intuibase(a4),d0 ; jos intuition auki, suljetaan
- beq.s clean4
- move.l d0,a1
- move.l 4,a6
- jsr _LVOCloseLibrary(a6)
-
- clean4 unlk a4 ; vapautetaan pinoalue
- rts ; jatketaan boottia
-
- *************************************************************************
- * *
- * Struktuurit, joissa määritellään avattavan näytön ja ikkunan ominai- *
- * suudet sekä fontti. *
- * *
- *************************************************************************
-
- UusiNaytto dc.w 0,0 ; näytön koordinaatit
- dc.w 320,256 ; koko (x,y)
- dc.w 2 ; bittitasojen määrä (4 väriä)
- dc.b 0,1 ; kynät, joilla näyttö piirretään
- dc.w 0 ; moodi (HIRES, HAM, DUALPF jne)
- dc.w CUSTOMSCREEN ; näytön tyyppi
- dc.l 0 ; käytettävä oletusfontti
- dc.l 0 ; näytön otsikkopalkin teksti
- dc.l 0 ; gadgetteja ei käytetä
- dc.l 0 ; custom bitmappia ei käytetä
-
- UusiIkkuna dc.w 0,0 ; ikkunan koordinaatit (x,y)
- dc.w 320,256 ; ikkunan koko (x,y)
- dc.b 2,3 ; kynien värit
- dc.l MOUSEBUTTONS ; IDCMP vahtii hiiren nappuloita
- dc.l NOCAREREFRESH!ACTIVATE!BORDERLESS!RMBTRAP ; liput
- dc.l 0 ; ei gadgetteja
- dc.l 0 ; ei omaa checkmarkkia
- dc.l 0 ; ei ikkunan otsikkopalkin tekstiä
- dc.l 0 ; näytön osoitin, asetetaan myöhemmin
- dc.l 0 ; ei BitMap-osoitinta
- dc.w 0,0 ; minimikoko (ei vaikuta tässä)
- dc.w 0,0 ; maksimikoko (ei vaikuta tässä)
- dc.w CUSTOMSCREEN ; näytön tyyppi
-
- Varit dc.w $0000,$000f,$00f0,$0f00
-
- *************************************************************************
- * *
- * ASCII-merkkijonot. Näiden EI tarvitse alkaa parillisista osoitteista *
- * kuten muiden muuttujien, koska nämä ovat tavumuotoista tietoa. *
- * *
- *************************************************************************
-
- dosnimi dc.b "dos.library",0
- gfxnimi dc.b "graphics.library",0
- intuinimi dc.b "intuition.library",0
-
- teksti dc.b "Huomio! Tässä kokeillaan C=Lehden boottiscrollirutiinia. "
- dc.b "Teksti on tallennettu sellaisenaan muistiin. "
- dc.b "Tekstirivejä voi lisätä haluamansa määrän ilman, että "
- dc.b "muuta ohjelmaa tarvitsee muuttaa. Ohjelman on tietysti "
- dc.b "mahduttava boot-blokkiin... Viimeisenä on oltava "
- dc.b "nollatavu, josta ohjelma tietää tekstin päättyvän. "
- dc.b "Greetings to JC and (-: PPP :-) "
- dc.b " ",0 LOPPUMERKKI!
-
- end
-
-