home *** CD-ROM | disk | FTP | other *** search
/ Rat's Nest 1 / ratsnest1.iso / prgmming / stuff / cscroll.lzh / CSCROLL.DOC < prev    next >
Encoding:
Text File  |  1992-09-05  |  5.6 KB  |  155 lines

  1. *  CSCOLL  Scrollyä C:llä, by  Markus Kallio / 61500 Isokyrö   01.06.1992
  2.  
  3.          *  Paketista pitäisi löytyä tämmöstä:
  4.  
  5.          *  CSCROLL.C    -  Sourcekoodi.
  6.          *  CSCROLL.EXE  -  Scrollyteksti. (käännetty BC 2.0)
  7.          *  CSCROLL.DOC  -  Toimintaselostus (tämä file).
  8.  
  9.          *  Esimerkissä käytin CGA ajuria, joten tämän
  10.          *  pitäisi toimia sillä, sekä sitä suuremmissa
  11.          *  ohjaimissa. Cscroll pyörii parhaiten, 16 - 25 MHz
  12.          *  286 - 386 koneissa, suurenpiin koneisiin mentäessä
  13.          *  on käytettävä keskeytyksiä, tai scolly pyörii
  14.          *  liian nopeasti. Tämä hoituu siten, että lisäät
  15.          *  alkuun rivin:   #include <dos.h>   ja do - while
  16.          *  silmukan sisään rivin:   delay(x);   ,jossa x =
  17.          *  joku luku (millisekunteina), väliltä 1 - 100.
  18.  
  19.          *  Sisällytetään graphics.h ja stdlib.h
  20.  
  21. #include <graphics.h>
  22. #include <stdlib.h>
  23.  
  24.          *  ite ohjelma alkaa
  25.  
  26. main()
  27. {
  28.  
  29.          *  muuttujat: c laskee uuden merkin tulostusajankohdan
  30.          *  l on scrollyn pyörityslaskuri, i laskee pointterille
  31.          *  arvoa, mistä kohdasta char riviä merkki otetaan.
  32.  
  33.  
  34. int c=0,l=0,i=0;
  35.  
  36.          *  grpmode on grafiikkamoodi, grpdriver on grafiikka
  37.          *  ajuri, *p on pointteri, jolla osoitetaan char:issa
  38.          *  olevia merkkejä.
  39.  
  40. int grpmode,grpdriver,*p;
  41.  
  42.          *  Tässä on scrollyteksti, joka voi olla miten pitkä
  43.          *  tahansa, kunhan char a[x] (x:n arvo) on yhtä suuri
  44.          *  tai suurempi, kuin tekstissä olevien merkkien määrä.
  45.  
  46.   char a[500]={" Minulta on kyselty, miten C:llä saa tehtyä scrollyä"
  47.   ". No tässä olisi eräs tapa. Lyhyt, helppotajuinen ja kohtalaisen "
  48.   "nopea C:llä tehdyksi. Tämän scrollyn pitäisi pyöriä kaikissa PC-"
  49.   "koneissa alkaen 286 / 6 MHz, jatkuen aina kovimpiin tykkeihin "
  50.   "asti. Yksityiskohtaisen selostuksen ohjelman toiminnasta löydät "
  51.   "CSCROLL.DOC tiedostosta.      - MAAKE -                         "
  52.   "                                             "};
  53.  
  54.          *  Määritellään scrollyn pyörityksessä käytettävää
  55.          *  bufferia.
  56.  
  57.   unsigned size;
  58.   void *buffer;
  59.  
  60.          *  Napataan CGA_ajuri ohjelman sisään. HUOM !  Tässä
  61.          *  tapauksessa ajuri pitää olla linkattuna tiedostoon
  62.          *  GRAPHICS.LIB. ellei ole, niin tämä rivi pitää
  63.          *  jättää pois, ja CGA.BGI niminen tiedosto pitää
  64.          *  olla samassa hakemistossa kääntämäsi .EXE fileen
  65.          *  kanssa. ( Linkkausohjeet tämän .DOC:in lopussa )
  66.  
  67.   if (registerbgidriver(CGA_driver) < 0) exit(1);
  68.  
  69.          *  Määritellään tilaksi MCGAC0 (4 väriä), ja
  70.          *  ajuriksi MCGA ja avataan grafiikkatila.
  71.  
  72.   grpmode=MCGAC0; grpdriver=MCGA;
  73.   initgraph(&grpdriver,&grpmode,"");
  74.  
  75.          *  Pointteri = a, ei pakollinen, tuottaa warningsin mutta
  76.          *  estää sotkumerkin ilmestymisen scollyn alkuun.
  77.  
  78.  p=a;
  79.  
  80.          *  Scollyä liikutetaan ottamalla pala näytöstä ja
  81.          *  laittamalla se takaisin eri kohtaan, ja lisäämällä
  82.          *  uusi kirjain loppuun aina kun siirtoja on suoritettu
  83.          *  8, eli kirjaimen koon (tässä tapauksessa 7) verran +
  84.          *  yksi tyhjä kohta (7+1=8) , etteivät merkit menisi
  85.          *  liian tiheään.
  86.  
  87.          *  ensin määritellään imagen koko, antamalla ylänurkan
  88.          *  ja alanurkan x ja y koordinaatit, tässä tapuksessa
  89.          *  ylänurkan x = 2, y = 182, alanurkan x = 319, y = 192.
  90.  
  91.     size=imagesize(2,182,319,192);
  92.  
  93.          *  Scrollyn pyöritys silmukka alkaa, l lisääntyy 1:llä
  94.          *  joka kerta.
  95.  
  96. do {
  97.  
  98.   l=l+1;
  99.  
  100.          *  Napataan image ja laitetaan se samantien takaisin,
  101.          *  mutta 1:n pykälän (X-koordinaatin) verran vasemmalle.
  102.  
  103.      buffer=malloc (size);
  104.      getimage(2,182,319,192,buffer);
  105.      putimage(1,182,buffer,COPY_PUT);
  106.  
  107.          *  Lisätään c laskuria, ja katotaan onko sen arvo 8.
  108.  
  109.   c=c+1;
  110. if (c==8)
  111. {
  112.  
  113.          *  Arvo on 8, lisätään i:n arvoa yhdellä, asetetaan
  114.          *  kursori kohtaan 40,24 ja tulostetaan siihen merkki.
  115.          *  Lisätään pointterin arvoa, osoittamaan seuraavaa
  116.          *  merkkiä, ja määritellään c laskuri takaisin 0:ksi.
  117.  
  118. i=i+1; gotoxy(40,24); printf("%c ",*p); p=a+i; c=0;
  119. }
  120.  
  121.          *  Katotaan onko l:n arvo jo 3150, jos ei, jatketaan
  122.          *  silmukan suoritusta jos on, mennään eteenpäin.
  123.          *  Arvon voi myös laskea, siten että laskee char a[x]
  124.          *  scrollytekstissä olevien merkkien määrän (myös
  125.          *  tyhjät pitää laskea) ja kertoo sen tulostusajankohta-
  126.          *  muuttujan c arvolla (tässä tapauksessa 8), jolloin
  127.          *  saatu tulo on while silmukan arvo.
  128.  
  129. } while (l<3150);
  130.  
  131.          *  Luku 3150 on saavutettu, joten vapautetaan bufferi,
  132.          *  suljetaan grafiikkatila ja palataan dossiin.
  133.  
  134.  free(buffer);
  135.  closegraph();
  136. exit(0);
  137. }
  138.  
  139.          *  CGA-ajurin linkkausohjeet:
  140.  
  141.          *  Ensin CGA.BGI niminen tiedosto pitää konvertoida .OBJ
  142.          *  tiedostoksi, tarvitset tähän BGIOBJ.EXE nimisen
  143.          *  ohjelman (tulee BC:n asennuslevykkeillä). Konvertoiminen
  144.          *  tapahtuu komennolla:  BGIOBJ CGA, jolla saat CGA.OBJ
  145.          *  fileen. Sitten tämä pitää lisätä GRAPHICS.LIB tiedostoon
  146.          *  komennolla:  TLIB GRAPHICS +CGA. Ja sillä siisti, rekis-
  147.          *  teröiminen ohjelman sisään tapahtuu sillä ylempänä
  148.          *  olevalla if rivillä. Ellet halua cga.objektia graphics-
  149.          *  libbiin, niin voit tunkea sen suoraan ohjelmaan
  150.          *  komennolla:  TCC OHJELMA GRAPHICS.LIB CGA.OBJ
  151.  
  152.          *  Laadin tämän .DOC:in tyyliin:  'Selitä Amerikkalaiselle'
  153.          *  joten pitäisi olla niin selkeä juttu, että tyhmäkin tän
  154.          *  tajuaa.
  155.