Would you like to react to this message? Create an account in a few clicks or log in to continue.


Bismil Team Groub
 
AnasayfaAramaLatest imagesKayıt OlGiriş yap

 

 C dersleri 12

Aşağa gitmek 
YazarMesaj
dynamic
Co Admin
Co Admin
dynamic


Mesaj Sayısı : 220
Kayıt tarihi : 25/09/08
Yaş : 34

C dersleri 12 Empty
MesajKonu: C dersleri 12   C dersleri 12 Icon_minitimeSalı Ekim 21, 2008 5:28 am

EKRANSIL.C:
===============================================


#include <dos.h>
void ekransil() /* bu rutin, ekrani siler */
{
union REGS gir;

gir.h.ah = 6; /* ekrani yukari kaydir: servis no su 6
ekrani asagi kaydir: servis no 7 dir. */
gir.h.al = 0; /* kac satir scroll edecegi 'donecegi'
sifir olunca, butun ekrani siler */
gir.h.ch = 0; /* sol ust kosenin satir no su */
gir.h.cl = 0; /* sol ust kosenin kolon no su */
gir.h.dh = 23; /* sag alt kosenin satir no su */
gir.h.dl = 79; /* sag alt kosenin kolon no su */
gir.h.bh = 7; /* yeni yaratilacak satirlar icin renk degeri */

int86(16,&gir,&gir);
}
==============================================

Altinci BIOS servisi sayesinde, ekrani yukari kaydirma metodu ile
silmekteyiz. Ayni servis sayesinde, CX ve DX de gordugunuz degerleri
degistirerek, ekranin sadece bir parcasini 'scroll' etmek yani
kaydirmak mumkundur. Kaydirma yonunu servis numarasini 6 yada 7
yaparak degistirebilirsiniz. Burada gordugunu gir.h.bh deki deger ise,
yeni acilacak satirlarin 'attribute' yani, rengi ve ozellikleri
(parlak, yanip sonen, vs.) dir. Ayrica, yukaridaki ornekte,
gir.h.ch = 0;
gir.h.cl = 0;
yerine, sadece
gir.x.cx = 0;
diyebilirdik.


Baska Interruptlar

Bu orneklerde dikkat etmisinizdir - her int86() yi cagirisimizda, ilk
parametre olarak 16 yi belirttik. Bu istedigimiz interrupt'un
numarasidir. Daha once soyledigim gibi BIOS un ekran fonksiyonlarinin
hepsi interrupt 16 ile cagirilir. Fakat tabi, programlarimiz bununla
sinirli kalmak zorunda degildir, kullanabilecegimiz daha bircok
interrupt vardir. Dilerseniz, su programa bir bakin:

PRINTSCR.C:
================================================
#include <dos.h>
main()
{
union REGS in; /* buna ihtiyacimiz yok, ama tanimlamamiz lazim */
int86(5,&in,&in); /* print-screen yapalim */

}
=================================================

bu program, gorevi ekrani oldugu gibi yaziciya gondermek olan
interrupt 5 i kullanmaktadir. Artik klavyeden PRINTSCREEN tusuna
bastiginiza, sistemin ne yaptigini biliyorsunuz.

DOS ve ANSI.SYS ile Ekran Duzeni

Umarim simdi size tumuyle degisik bir ekrana erisme metodu gosterirsem
bana kizmassiniz. Bu ikinci metodun birincisi ile neredeyse hicbir
alakasi yok. Bu metod sayesinde, programiniz, modem ile bagli uzak bir
terminalden calisabilir, DOS'un yonlendirme metodlarindan
(TYPE A.TXT > PRN gibi) faydalanabilir. ANSI bir terminali olursa,
herhangi bir Unix sisteminde calisabilir. Nasil mi? Cok kolay -
yaptigimiz, DOS ekrana birsey gonderirken, ekran idarecisinin
anlayabilecegi komutlari kullanmak. Yegane sorun, bu idarecinin siz
yukleyinceye kadar calismaz olmasi. Peki, nasil yukleyebiliriz?
Sistemi actiginiz diskte, CONFIG.SYS isimli bir kutuk olmasi lazim.
Yoksa yaratin, ve icine:

DEVICE=ANSI.SYS

satirini koyun. Bundan sonra, DOS disketinde bulunan ANSI.SYS isimli
kutugun, sistemi actiginiz diskte bulunmasini saglayin. Son olarak da,
ANSI.SYS i yuklemek icin, CTRL-ALT-DEL e basin. Alet acildiginda, size
fark ettirmeden bu idareci yuklenecektir. Bundan sonra, dilerseniz
printf icinde, dilerseniz herhangi baska bir DOS u kullanan rutin ile
ANSI yi kullanabilirsiniz. (Anafikir: printf, ekrana yazmak icin,
diger bircok C fonksiyonu gibi, DOS'u kullanir.)

ANSI ile cursorun yerini degistirmek:

Ilk once, butun ANSI komutlari, bir ESC, yani ASCII 27 ile baslarlar.
Ornegin, cursorun yerini degistirmek icin, gereken komut ESC [#;#h
dir. Ilk # isaretinin yerine satir numarasi, ikincinin yerine de kolon
konur. Bu, bir programda soyle gorunebilir:

printf("x1b[%d;%dh",satir,kolon);

(Ondalik 27 = Hex 1B )

satiri dikkatle incelerseniz, ilk once x1b ile ESC karakterini, daha
sonra [, sonra ilk rakami, sonra ; ve ikinci rakami, ve son olarak da
h isaretini gorebilirsiniz. ANSI nin komut yapisi son derece sabit
oldugundan, araya bosluklar katarsaniz, programiniz calismayabilir.

ANSI ile Ekrani Silmek

Ekrani silmek kolay: ESC [2j yi ekrana yollamaniz yeterli:
printf("x1B[2j");
araya bosluk koymamaya dikkat etmelisiniz. Ayrica kucuk ve buyuk
harfler farklidir.

Ekranin Rengini Ayarlamak

Bunun icin ESC [#;#m komutunu vermeniz gerekiyor. Ilk #, ekrandaki
yazilarin rengi, ikincisi ise arka planin rengidir. Bu renk kodlari
sunlardir:

30 siyah yazilar
31 kirmizi yazilar
32 yesil yazilar
33 sari yazilar
34 mavi yazilar
35 magenta yazilar (kirmizimsi)
36 cyan yazilar (mavimsi)
37 Beyaz yazilar

40 siyah arka plan
41 kirmizi arka plan
42 yesil arka plan
43 sari arka plan
44 mavi arka plan
45 magenta arka plan
46 cyan arka plan
47 beyaz arka plan

Diger ozellikler icin, ESC [#m girmeniz gerekli: # yerine,
0 normal
1 parlak
4 alt cizgi (monokrom da)
5 yanip sonen
7 ters renkler
8 gorunmez


DOS mu, BIOS mu kullansak

DOS, ve ekran idarecisi ANSI.SYS, BIOS a nazaran daha yavas calisir,
fakat bircok ortamda kullanilabileceginden, kalici programlar icin
daha uygun bir cozumdur. Ornegin oyunlar gibi yasam sureleri birkac ay
olan urunler ise, BIOS yada hatta direk erisim metodlarini
kullanabilirler. ANSI nin dezavantaji, kullanicinin ANSI.SYS i
yuklemesinin gerektigidir. Bu da, yeni kullanicilari panige kaptiran
bir durumdur.

Diger Interruptlar

Gordugunuz gibi BIOS ile ilgilenirken, sadece 2 interrupt kullandik.
Ekran fonksiyonlarini saglayan 16. interrupt, ve ekranin kopyasini
yaziciya gonderen 5. interrupt. Bunun gibi daha bircok interrupt
vardir, ve bize cok cesitli servisler sunarlar.

Ayrica, dilersek kendi interruptlarimizi da yazabiliriz. Bos olarak
tanimlanmis bir interrupt vektorunu degistirip, kendi rutinimizin
adresini ona verebiliriz. Yada, ornegin sidekick gibi programlarin
yaptigi gibi klavyenin yarattigi interrupt sonucunda cagirilan rutini
degistirebiliriz, ve diledigimiz baska birseyin yapilmasini
saglayabiliriz. Bu tip programlar ilk olarak basilan tusun kendilerini
harekete gecirecek tus olup olmadigini kontrol ederler, sayet degilse
kontrolu eski interrupt rutinine gecirirler.
Sayfa başına dön Aşağa gitmek
 
C dersleri 12
Sayfa başına dön 
1 sayfadaki 1 sayfası
 Similar topics
-
» C dersleri 1
» C dersleri 2
» C dersleri 3
» C dersleri 4
» C dersleri 5

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
 :: BT Bilgisayar ve Teknolojisi :: Programlama :: C / C++-
Buraya geçin: