home *** CD-ROM | disk | FTP | other *** search
/ Rat's Nest 1 / ratsnest1.iso / prgmming / c / cursori.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-27  |  2.4 KB  |  99 lines

  1. ----------CURSORI ON/OFF---------------------------------------------
  2. #include <conio.h> // tarvitaan getch-functiota varten
  3.  
  4. void cursor_off(void);
  5. void cursor_on(void);
  6.  
  7. void main(void)
  8. {
  9.  cursor_off();   // call function
  10.  getch();        // wait until keypressed
  11.  cursor_on();    // call function
  12.  getch();        // now, jump back to dos..
  13. }
  14.  
  15. void cursor_off(void)
  16. {
  17.  asm {
  18.   mov cx,0x2000  // ch=20h, cl=00h
  19.   mov ah,1
  20.   int 0x10       // int 10h
  21.  }
  22. }
  23.  
  24. void cursor_on(void)
  25. {
  26.  asm {
  27.   mov ch,3    // arvo, alku, voit vaihtaa saaden erilaisia kursoreita
  28.   mov cl,6    // arvo, loppu, -- || --
  29.   mov ah,1
  30.   int 0x10    // int 10h
  31.  }
  32. }
  33. --------------------------------------------------------------------
  34. #include <conio.h>
  35. #include <stdio.h>
  36. #include <stdlib.h>
  37. #include <dos.h>
  38.  
  39. void main(void)
  40. {
  41.  int x;int y;
  42.  char oo;
  43.  
  44.  // tekstitilassa segmentti                 = 0xb800
  45.  // offsetti lasketaan seuraavalla kaavalla = y*160+x*2
  46.  
  47.  // muisti on järjestetty segmentteihin!
  48.  x=40; y=12;
  49.  
  50.  pokeb(0xb800,y*160+x*2,'A'); // kirjoitus                        <-
  51.  oo=peek(0xb800,y*160+x*2);   // oo <- arvo 0xb800:y*160+x*2 = 'A' |
  52.                   //     tuo rivi laittaa 'A' siihen ---
  53.  printf("%c",oo);             // tulostetaan se
  54. }
  55. -----------------------------------------------------------------------
  56.  
  57. void pokeb(seg,offsetti,arvo)
  58.  
  59.  ei palauta mitään arvoa
  60.  seg = segmentti, johon halutaan kirjoittaa
  61.        0xb800 = tekstimoodien seku
  62.        0xb000 = mustavalko moodien seku
  63.        0xa000 = yleisimpien grafiikkatilojen
  64.         seku
  65.  
  66.        sitten offsetti on paikka sekussa(segmentissä), johon
  67.        halutaan laittaa. Segmentin koko on 64 kiloa(yleensä),
  68.        joten offsetti voi vaihdella (0-64000), tosin
  69.        esim. tekstitilassa ei näy kuin 4000 merkkiä,
  70.          25*80*2 <-- ensimmäinen tavu = merkki, toinen = väri,yht. 2 merkkiä
  71.          ^  ^
  72.          |  leveys
  73.          |- korkeus
  74.  
  75.       Tekstitilassa pystyy tämän ansiossa olemaan useampia sivuja
  76.  
  77.        esim.
  78.         vga 320x200x256 väriä on näkyvissä melkein koko 64 kiloa,
  79.         mutta halutessa voi ohjelmoida CTRC-prossua, jolloin
  80.         saa käyttöön koko 256 kiloa muistia
  81.  
  82.          320*200*1 = 64000
  83.          ^   ^   ^
  84.          |   |   väri
  85.          |   korkeus
  86.          leveys
  87.  
  88.     ofsetti = offset (0..64 kiloa)
  89.  
  90. int peek(seg,ofs)
  91.  
  92.   palauttaa merkin, koko char(muistaakseni), kohdasta
  93.   seg:ofs
  94.  
  95.   seg = segmentti
  96.   ofs = offsetti
  97.  
  98.   lue ylempi teksti pokesta, niin ymmärrät.
  99.