home *** CD-ROM | disk | FTP | other *** search
- * CSCOLL Scrollyä C:llä, by Markus Kallio / 61500 Isokyrö 01.06.1992
-
- * Paketista pitäisi löytyä tämmöstä:
-
- * CSCROLL.C - Sourcekoodi.
- * CSCROLL.EXE - Scrollyteksti. (käännetty BC 2.0)
- * CSCROLL.DOC - Toimintaselostus (tämä file).
-
- * Esimerkissä käytin CGA ajuria, joten tämän
- * pitäisi toimia sillä, sekä sitä suuremmissa
- * ohjaimissa. Cscroll pyörii parhaiten, 16 - 25 MHz
- * 286 - 386 koneissa, suurenpiin koneisiin mentäessä
- * on käytettävä keskeytyksiä, tai scolly pyörii
- * liian nopeasti. Tämä hoituu siten, että lisäät
- * alkuun rivin: #include <dos.h> ja do - while
- * silmukan sisään rivin: delay(x); ,jossa x =
- * joku luku (millisekunteina), väliltä 1 - 100.
-
- * Sisällytetään graphics.h ja stdlib.h
-
- #include <graphics.h>
- #include <stdlib.h>
-
- * ite ohjelma alkaa
-
- main()
- {
-
- * muuttujat: c laskee uuden merkin tulostusajankohdan
- * l on scrollyn pyörityslaskuri, i laskee pointterille
- * arvoa, mistä kohdasta char riviä merkki otetaan.
-
-
- int c=0,l=0,i=0;
-
- * grpmode on grafiikkamoodi, grpdriver on grafiikka
- * ajuri, *p on pointteri, jolla osoitetaan char:issa
- * olevia merkkejä.
-
- int grpmode,grpdriver,*p;
-
- * Tässä on scrollyteksti, joka voi olla miten pitkä
- * tahansa, kunhan char a[x] (x:n arvo) on yhtä suuri
- * tai suurempi, kuin tekstissä olevien merkkien määrä.
-
- char a[500]={" Minulta on kyselty, miten C:llä saa tehtyä scrollyä"
- ". No tässä olisi eräs tapa. Lyhyt, helppotajuinen ja kohtalaisen "
- "nopea C:llä tehdyksi. Tämän scrollyn pitäisi pyöriä kaikissa PC-"
- "koneissa alkaen 286 / 6 MHz, jatkuen aina kovimpiin tykkeihin "
- "asti. Yksityiskohtaisen selostuksen ohjelman toiminnasta löydät "
- "CSCROLL.DOC tiedostosta. - MAAKE - "
- " "};
-
- * Määritellään scrollyn pyörityksessä käytettävää
- * bufferia.
-
- unsigned size;
- void *buffer;
-
- * Napataan CGA_ajuri ohjelman sisään. HUOM ! Tässä
- * tapauksessa ajuri pitää olla linkattuna tiedostoon
- * GRAPHICS.LIB. ellei ole, niin tämä rivi pitää
- * jättää pois, ja CGA.BGI niminen tiedosto pitää
- * olla samassa hakemistossa kääntämäsi .EXE fileen
- * kanssa. ( Linkkausohjeet tämän .DOC:in lopussa )
-
- if (registerbgidriver(CGA_driver) < 0) exit(1);
-
- * Määritellään tilaksi MCGAC0 (4 väriä), ja
- * ajuriksi MCGA ja avataan grafiikkatila.
-
- grpmode=MCGAC0; grpdriver=MCGA;
- initgraph(&grpdriver,&grpmode,"");
-
- * Pointteri = a, ei pakollinen, tuottaa warningsin mutta
- * estää sotkumerkin ilmestymisen scollyn alkuun.
-
- p=a;
-
- * Scollyä liikutetaan ottamalla pala näytöstä ja
- * laittamalla se takaisin eri kohtaan, ja lisäämällä
- * uusi kirjain loppuun aina kun siirtoja on suoritettu
- * 8, eli kirjaimen koon (tässä tapauksessa 7) verran +
- * yksi tyhjä kohta (7+1=8) , etteivät merkit menisi
- * liian tiheään.
-
- * ensin määritellään imagen koko, antamalla ylänurkan
- * ja alanurkan x ja y koordinaatit, tässä tapuksessa
- * ylänurkan x = 2, y = 182, alanurkan x = 319, y = 192.
-
- size=imagesize(2,182,319,192);
-
- * Scrollyn pyöritys silmukka alkaa, l lisääntyy 1:llä
- * joka kerta.
-
- do {
-
- l=l+1;
-
- * Napataan image ja laitetaan se samantien takaisin,
- * mutta 1:n pykälän (X-koordinaatin) verran vasemmalle.
-
- buffer=malloc (size);
- getimage(2,182,319,192,buffer);
- putimage(1,182,buffer,COPY_PUT);
-
- * Lisätään c laskuria, ja katotaan onko sen arvo 8.
-
- c=c+1;
- if (c==8)
- {
-
- * Arvo on 8, lisätään i:n arvoa yhdellä, asetetaan
- * kursori kohtaan 40,24 ja tulostetaan siihen merkki.
- * Lisätään pointterin arvoa, osoittamaan seuraavaa
- * merkkiä, ja määritellään c laskuri takaisin 0:ksi.
-
- i=i+1; gotoxy(40,24); printf("%c ",*p); p=a+i; c=0;
- }
-
- * Katotaan onko l:n arvo jo 3150, jos ei, jatketaan
- * silmukan suoritusta jos on, mennään eteenpäin.
- * Arvon voi myös laskea, siten että laskee char a[x]
- * scrollytekstissä olevien merkkien määrän (myös
- * tyhjät pitää laskea) ja kertoo sen tulostusajankohta-
- * muuttujan c arvolla (tässä tapauksessa 8), jolloin
- * saatu tulo on while silmukan arvo.
-
- } while (l<3150);
-
- * Luku 3150 on saavutettu, joten vapautetaan bufferi,
- * suljetaan grafiikkatila ja palataan dossiin.
-
- free(buffer);
- closegraph();
- exit(0);
- }
-
- * CGA-ajurin linkkausohjeet:
-
- * Ensin CGA.BGI niminen tiedosto pitää konvertoida .OBJ
- * tiedostoksi, tarvitset tähän BGIOBJ.EXE nimisen
- * ohjelman (tulee BC:n asennuslevykkeillä). Konvertoiminen
- * tapahtuu komennolla: BGIOBJ CGA, jolla saat CGA.OBJ
- * fileen. Sitten tämä pitää lisätä GRAPHICS.LIB tiedostoon
- * komennolla: TLIB GRAPHICS +CGA. Ja sillä siisti, rekis-
- * teröiminen ohjelman sisään tapahtuu sillä ylempänä
- * olevalla if rivillä. Ellet halua cga.objektia graphics-
- * libbiin, niin voit tunkea sen suoraan ohjelmaan
- * komennolla: TCC OHJELMA GRAPHICS.LIB CGA.OBJ
-
- * Laadin tämän .DOC:in tyyliin: 'Selitä Amerikkalaiselle'
- * joten pitäisi olla niin selkeä juttu, että tyhmäkin tän
- * tajuaa.
-