  Ŀ
 Ŀ
 ͻ
 ɼ                                                                    Ȼ
                               Cevapmatik                              
 Ȼ                                                                    ɼ
 ͼٳ
 PS 27  Ekim'95
  


Ŀ
 Mustafa DonbaloluSoru

         u anda yazmakta olduum telefon rehberi programyla ilgili bir
  problemim var. Acaba ekranda kusorun grnmemesini nasl salayabilirim?.
  Aslnda elimde, bu problemime ksmi olarak zm olan bir programck var.

  #include <dos.h>
  void CURSOR_OFF()
  {
   union REGS RP;
   RP.x.ax=512;
   RP.x.bx=0;
   RP.x.dx=6657;
   int86(0x10,&RP,&RP);
  }

  Bu programc ana programdan ararak kursoru yok edebiliyorum, ancak bu
  programc ardm satrn hemen altnda 'printf' ile herhangi bir mesaj
  yazdrmak istediimde program almyor. Acaba bu sorunu tek satrda ve
  hatasz olarak halledeceim bir komut yok mu? Bir ok kitaba baktm ancak
  byle bir komuta rastlayamadm.



Ŀ
 R.Tezkol Cevap


         Cursor'u gizlemek iin kullandnz yordam, cursoru ekrann
  snrlar dna tayarak grnmesini engelleme mantyla dzenlenmi.
  rnekte, cursor 26. satra tanyor. Eer ekrana kt veren fonksiyonlar
  kullanmadan nce 'gotoxy' fonksiyonu ile cursorun konumunu dzenlediiniz
  taktirde bir sorun kalmayacaktr. Bunun dnda cursorun konumunu
  deitirmeden sadece grntlenmesini engelleyen bir yordam yazmakta
  mmkndr.

  #include <dos.h>
  /*durum=1 cursor grnr durum=0 cursor gizli */
  void Cursor(int durum)
  { union REGS r;
    r.x.ax=0x300;
    r.x.bx=0;
    int86(0x10,&r,&r);
    r.x.ax=0x100;
    if(durum) r.h.ch&=0xdf;
          else r.h.ch|=32;
    int86(0x10,&r,&r);
  }

  Verdiimiz Cursor fonksiyonunu arrken parametre olarak 0 verdiimizde
  cursor gizlenecek, 1 verdiimizde cursor tekrar grnr duruma gelecektir.
  Cursor gizlendiinde konumu deimediinden ekrana yaplan ktlar normal
  ekilde olacaktr.




Ŀ
 Alper Baramaz Sorular



     Ben GWBasic ile program yazyorum. Ancak merak ettiim bir ka nokta var.
 1.Motor komutunun GWBasic'teki grevi nedir?
 2.Kursoru ekran silmeden yukar istediim sayda karmamn yolu nedir ?
 3.Deikenlerin diskete kaydedilip,daha sonra okunmas iini nasl yaparm?
 4.Sizce GWBasic ok mu demode ?
 5.GWBasic'in iinde iken DIRECTORY nasl deitirilir ?
 6.Windows normal alrken, bir gn windows'u yklemek istedim. HIMEM.SYS
   dosyasnn kayp olduunu syledi. Baktm, yerinde duruyordu. Daha sonra
   config.sys'e baktm, hata yoktu. F-PROT ve MSAV ile kontrol ettim, hi bir
   ey bulamad. Sizce sorun nedir ?
   Sorularm en ksa zamanda cevaplandrmanz diliyorum.



Ŀ
 Grol Demir Cevaplar


 1. Motor komutu, bir program iinden kaset teybi ap kapamak iin
    kullanlr. Eskiden saklama ortam iin teyp nitesi ve teyp kasetleri
    vard. Gnmzde artk bu komutun fazla bir esprisi kalmamtr.


 2. Cursoru ekrann herhangi bir yerine tamak iin LOCATE komutunu
   kullanabilirsiniz. Locate komutunun szdizimi;
   "LOCATE satr, stun, grlme, byklk bala, byklk son" eklindedir.
   Verilen parametrelerin hepsi seimliktir.
         LOCATE 1,1      'Cursoru sol ust keye gtrr.
         LOCATE ,,0      'Cursoru grnmez yapar
         LOCATE ,,,0,31  'Cursor bykln deitirir

   Cursor'n o anki konumunu bulmak iin CSRLIN ve POS(0) komutlarndan
   yararlanabiliriz. CSRLIN fonksiyonu cursorun bulunduu satr, POS(0) ise
   cursorun bulunduu sutunu verir. Cursoru bulunduu noktadan 3 satr yukar
   karmak iin; "10 LOCATE CSRLIN - 3, POS(0)" gibi basit bir satr yazmak
   yeterlidir.


 3. Deikenleri dosyaya kaydedip, daha sonra bunlar tekrar uygun
    deikenlere yklemek iin sral dosyalama yntemi kullanlabilir.
    Deikenlerinizi dosyaya kaydederken kullandnz deiken sras,
    okuma yaparken de ayn olmaldr. String deikenlerin iinde virgl
    gibi ayra karakterler bulunuyorsa dosyadan okuma yaparken INPUT
    komutu yerine LINE INPUT komutu kullanmak gereklidir.

     10 REM deikenleri dosyaya kaydetmek.
     20 A$="Bu bir string": B=100 : C=10
     30 open "o",#1,"YEDEK.DAT"
     40 PRINT #1, A$,B,C
     50 CLOSE #1

     10 REM dosyadan deikenlere veri okumak.
     20 open "i",#1,"YEDEK.DAT"
     30 input #1, A$,B,C
     40 CLOSE #1

     Yukardaki rnek dnda dosya amada kullanlan bir ok yntem vardr.
  GwBasic'de en gelimi dosya yntemi rastgele okuma yazma yntemi olup bu
  yntem aada rneklenmitir.

     10 OPEN "R",#1,"VERI.DAT", 64         'Dosya alyor
     20 FIELD #1,64 AS VERI$               'Dosya ara bellei saptanyor
     30 DEGISKEN$="Bu bir deikendir"     'Deiken tanmlanyor
     40 LSET VERI$=DEGISKEN$               'Deiken ara bellee yazlyor
     50 PUT #1,1                           'Deiken diskete kaydedildi
     60 DEGISKEN$=""                       'Deiken yok edildi
     70 GET #1,1                           'Disketten veri okundu
     80 DEGISKEN$=VERI$                    'Okunan veri deiene aktarld
     90 PRINT DEGISKEN$                    'Deiken ekrana yazld


 4. Aslnda deil ama ayn trden ve ok daha stn zelikleri olan diller
    var. Ben 6 yl kadar GwBasic'de uratktan sonra QuickBasic'e getim.
    Bence sizde GwBasic'de fazla oyalanmayn.

 5. Dizin deitirmek iin basic'te CHDIR komutu bulunuyor.
    CHDIR "\"
    CHDIR ".."
    CHDIR "DIZINADI"
    CHDIR "DIZINADI\BENIMDIZ"

 6.Config.sys'i kontrol edip, HIMEM.SYS dosyasnn doru yol zerinde
   olduundan emin olunuz ve bilgisayarnz tekrar anz. Al srasnda
   HIMEM.SYS'nin yklendiini grdnzde windows sorunsuz alacaktr.
   Aksi durumda HIMEM.SYS dosyasn yenisiyle deitirmeniz gerekecektir.




Ŀ
 Vural Onur Sorular



         im gerei amatr olarak basit programlar yazmak ve kullanmak
  zorunda kalyorum. MSBASIC deneyimim olmad iin DOS altnda Qbasic ile
  yazmaya altm programlarda aadaki sorunlar zemedim.
  1.mlecin bulunduu noktadan satr sonuna kadar olan ksmn silinmesinin
    program iinden yaptrlmas.
  2.mlecin bulunduu noktadan sayfa sonuna kadar olan ksmn silinmesinin
    program iinden yaptrlmas.
  3.Ekran dikine iki kolona ayrp, her iki kolonada veriler girilmesi
    ileminin program iinden kontrolu
  4.fonksiyon tularndan birisine(rnein F1'e) programla ilgili yardm
    mens yazp arabilmek
  Bu konularda yardmc olabilirmisiniz. Bu tip konular toplu olarak ieren
  'QBASIC REFERANCE MANUAL' gibi bir kitab nerede bulabilirim.

  Vural Onur.


Ŀ
 Grol Demir Cevaplar



 1.mlecin bulunduu noktadan satr sonuna kadar olan ksmn silinmesinin
   program iinden yaptrlmasna iki farkl zm nerebilirim.
   Satr sonunun 80 karakter olduunu varsayarsak;

         Yatay= CSRLIN             'mlecin yatay konumunu ren
         Dikey= POS(0)             'mlecin dikey konumunu ren
         PRINT SPACE$(80-Dikey)    'Satr sonuna kadar boluk yaz
         LOCATE Yatay,Dikey        'mleci eski konumuna gtr
  eklinde bir program kodu iinizi grecektir. Dier yntemde assembly
  alt program kullanyoruz. rnek olarak hazrladmz SIL yordam,
  ekrann istediiz blgesini temizleyecek, hatta istediiniz renk ile
  dolduracaktr. kullanm:
 "SIL solstsutun,solstsatr,saaltsutun,saaltsatr,yazrengi,arkaplanrengi"
  eklindedir. Cursor, ekrann Y=10, X=5 konumunda bulunduunu varsayarsak,
  satr sonuna kadar silme ilemini  CALL SIL(5,10,80,10,7,0) satr ile
  gerekletirebiliriz.

  DECLARE SUB sil (x%, y%, xx%, yy%, onrenk%, fonrenk%)
  CALL sil(1, 1, 80, 25, 7, 0)
  END

  REM ..........................................
  Sildata:
  DATA &h55            : 'PUSH    BP
  DATA &h8B,&hEC       : 'MOV     BP,SP
  DATA &h56            : 'PUSH    SI
  DATA &h51            : 'PUSH    CX
  DATA &h53            : 'PUSH    BX
  DATA &h8B,&h76,&h10  : 'MOV     SI,[BP+10]
  DATA &h8A,&h0C       : 'MOV     CL,[SI]
  DATA &h8B,&h76,&h0E  : 'MOV     SI,[BP+0E]
  DATA &h8A,&h2C       : 'MOV     CH,[SI]
  DATA &h8B,&h76,&h0C  : 'MOV     SI,[BP+0C]
  DATA &h8A,&h14       : 'MOV     DL,[SI]
  DATA &h8B,&h76,&h0A  : 'MOV     SI,[BP+0A]
  DATA &h8A,&h34       : 'MOV     DH,[SI]
  DATA &hFE,&hCE       : 'DEC     DH
  DATA &hFE,&hCA       : 'DEC     DL
  DATA &hFE,&hCD       : 'DEC     CH
  DATA &hFE,&hC9       : 'DEC     CL
  DATA &h8B,&h76,&h08  : 'MOV     SI,[BP+08]
  DATA &h8A,&h3C       : 'MOV     BH,[SI]
  DATA &hB8,&h00,&h06  : 'MOV     AX,600
  DATA &hCD,&h10       : 'INT     10
  DATA &h5B            : 'POP     BX
  DATA &h59            : 'POP     CX
  DATA &h5E            : 'POP     SI
  DATA &h5D            : 'POP     BP
  DATA &hCA,&h0C,&h00  : 'RETF    000C

  SUB sil (x%, y%, xx%, yy%, onrenk%, fonrenk%)
  renk% = fonrenk% * 16 + onrenk%
  RESTORE Sildata
  REDIM Scroll(51)
  DEF SEG = VARSEG(Scroll(0))
  FOR Asm% = 0 TO 50
  READ kod%
  POKE VARPTR(Scroll(0)) + Asm%, kod%
  NEXT
  CALL ABSOLUTE(x%, y%, xx%, yy%, renk%, adet%, VARPTR(Scroll(0)))
  END SUB


2. Bu ilem iin 1. sorunuza verdiim cevaptaki gibi nce satr sonuna kadar
   ekran temizleyip, daha sonra alt satrdan itibaren ekrann geri kalan
   blm silinir.
   CALL SIL(5,10,80,10,7,0) : CALL SIL(1,11,80,25,7,0)

3. LOCATE komutunu daha etkin ve klavyeden veri almay INKEY$ ile yaparak
   (INPUT ile deil) bunu gerekletirebilirsiniz.

4. Basic'te fonksiyon tularna grev vermek iin ON KEY komutu
   kullanlabilir. Komuta, parametre olarak 1-10 aras bir say verilerek
   F1-F10 tularn grevlendirebiliriz. Aada buna bir rnek verilmitir.

    ON KEY(1) GOSUB yardm
    KEY(1) ON
    .......
    .......
    END

    yardim:
       PRINT "Bu bir yardmdr."
       PRINT "Ltfen bir tua basnz.."
       a$=input$(1)
       RETURN

  Dier bir yntem ise verileri INKEY$ ile almanz durumunda etkindir:

                Veri$=""
                KEY 1, CHR$(255)      '255 saysn siz deitirin

                DO
                   DO
                    A$ = INKEY$
                   LOOP UNTIL A$<>""

                   Kod = ASC(A$)
                       SELECT CASE Kod
                          CASE 27
                            'Esc'ye basld
                          CASE 13
                            'Enter'e basld
                          CASE 255
                            'F1 tuuna basld
                          CASE ELSE
                            'Baka bir tua basld
                            'bir anlamda girilen verinin bir parcas
                            Veri$ = Veri$ + A$
                       END SELECT
                  LOOP



Ŀ
 Fahri Kahraman Sorular



      Ben Qbasic diliyle her trl program yazabiliyorum. Ama kullanamadm
 basic komutlar da var. Bunlar;
 1. Varptr, Varseg, Varptr$ komutlar ne i gryor ve nasl kullanlyor?

 2. Programn baz yerlerinde byk harf kullanlmasn istiyorum. Program
    iinden CapsLock tuunun kontrolu yaplabilirmi?

 3. DEF FN komutunu nasl kullanabilirim?

 4. PCOPY komutunun kullanlmasn aklarmsnz?
 Vereceiniz cevaplar iin imdiden teekkr ederim. Yayn hayatnzda
 baarlar dilerim.


Ŀ
 Grol Demir Cevaplar

1. Bu komutlar deikenlerin bellek iersindeki konumlar hakknda bilgi
verirler.

   VARPTR(deiken)        'Deikenin offset adresi
   VARSEG(deiken)        'Deikenin segment adresi

     deiken     dosya numaras olursa  dosya kontrol blokunun balama
                   adresini verir.
  Dnen deerler
     Deiken Tipi   VARSEG dn                 VARPTR dn
           
      Numeric        Deiken segment adresi      Ofset adresi
      String         Deikene ait zel blokun    Ofset adresi
                       segment adresi
      Deiken daha  Msait bellein segment      Ofset adresi
       nce tanmsz   adresi
       ise

     VARPTR$ komutu ise deiken adresinin karakter formuna dner. Daha ok
PLAY ve DRAW komutlar iinde kullanlr.

2. Elbette yaplabilir, aada verdiim satrlar kullanarak capslock
   tuunu aabilirsiniz.

        DEF SEG = 0
        POKE 1047, PEEK (1047) OR 64

3. DEF FNisim [argmanlar] = lem  eklinde kullanlr.
   Esas ama bir ilemler kmesini bir isim altnda toplamak suretiyle
   ayn ilemleri tekrar tekrar yazmaktan kurtulmaktr.

     rnek:
     Bir deeri sk sk u ileme tabi tutuyorsak : Deer*12+Deer-1234

     DEF FNYAP(Tek) = Tek * 12 + Tek - 1234
     INPUT "Deer nedir? ", Deger
     PRINT "Hesaplama sonucu "; FNYAP (Deger)

4. PCOPY komutu bir program harikas olarak kullanlabilir. levi ekran
   sayfalarndan birini dierine kopyalamaktr. Bu komut sayesinde eski ekran
   saklayabilir ve tek bir komutla geri getirebilirsiniz.
   PCOPY  Kaynak Ekran, Hedef Ekran eklinde kullanlr.

      rnek:
          PCOPY 0,3  'ekran 3 nolu sayfaya kopyala
          ...
                     'dier program satrlar
          ...
          PCOPY 3,0  'ekran geri getir.

   Text modda normal olarak 0,1,2,3 olarak isimlendirilen 4 ekran sayfas
   vardr. VGA kartnda ekran sayfa says 8'e karlmtr.
   Yaygn olarak bu yntem arka plann saklanmas ve geri getirilmesinde
   kullanlr. Bu konuda program rnei BASIC blmnde verilmitir.



Ŀ
 Egemen Src Sorular


1) FDISK/MBR komutuyla yada NORTON ile hard diskimin BOOT sektrn yeniden
   oluturmak istediim zaman karma u mesaj geliyor.
                     !!! WARNING !!!
            Disk Boot sector is to be modified
            Type "Y" to accept, any key to abort
                    Avard Software, Inc.

   Bu mesaj neden kyor aklarmsnz ?
   not: Bu mesajn, daha sonra RAM bellekten kaynaklanabileceini dnp
        RAM'lar kartp yeniden taktm bu mesajda yok oldu. Neden sadece
        RAM'larm yoksa baka bir neden daha varm?

2) Hard diskime Trakia 570 virs bulat. Bu virs sadece F-PROT 2.18
   versionu ile bulabildim fakat temizleyemedim. Bu virsten, virsl
   dosyalar silerek kurtulabildim(Ancak bir tane dosyay bir diskete
   kopyaladm, gerekiyorsa gnderebilirim). Bu virsten baka nasl
   kurtulabilirim?


Ŀ
 R. Tezkol Cevaplar


   Karlatnz mesajn Trke karl aa yukar u anlama geliyor.
  Ŀ
                      !!!DKKAT!!!                           
        Diskin boot sektr deitirilmek isteniyor.         
  'Y' tuuna basarak onayla, herhangi bir tu ile iptal et.  
            Avard yazlmclk sevgiler sunar.               
  

  Son yllarda virs saysnn artmas ile BIOS yazlm reten firmalar bu
  konuda nlem almaya zorlad. Yeni BIOS srmlerinde artk bu trden
  korumalar bulunmaktadr. Amac bilinen veya bilinmeyen virs saldrlarn
  daha iin banda iken nlemektir. Bu yararl BIOS programn
  bilgisayarnzn setup'ndan ap kapamak elinizdedir. Ki bir ekilde bu
  virs koruma programn amsnz. Siz FDISK ile blmleme tablosunu
  yeniden oluturmak istediinizde, BIOS  bunun bir virs tarafndan
  yaplabileceini varsayarak size uyarda bulunmu. Daha sonra RAM'leri
  karp, taktnzda bu mesajn bir daha gelmemesi (yaplan ilem bundan
  ibaret ise) biraz garip. Bunun mantkl aklamas unlar olabilir.
  1)BIOS pilini, ksa devre ettiniz veya bir sre iin kardnz.
  2)Bilgisayarn SETUP'na girerek Virs koruma zelliini kapattnz
  (disable).
  Ksacas tela edecek bir sorun ile kar karya deilsiniz.

  kinci probleminize gelince,  Virs, dosyalar silerekte olsa yok
  ettiinize gre bir sorun yok. Bir virs incelemeden, temizleme yntemi
  nermek gerekten ok zor. Eer yedeklediiniz virsn kopyasn
  gnderirseniz antivirs ekibimiz tarafndan incelemeye alnarak, bu virs
  iin bir temizleme program yazlacaktr.



Adres:
     PC World/Trkiye
     PS "Cevapmatik"
     Eski Bykdere cad.
     Sanayi mah. Behet sokak
     No:25/B  Kat:5
     80650 4.Levent / STANBUL

Internet : tezkolr@doruk.com.tr



