|
|
QuickBasic'te Bazı İpuçlarıKomut Satırında verilen parametreleri nasıl alabilirim.?Bu iş için COMMAND$ fonksiyonu kullanılır. Bu QB, QB 4.5, PDS, VBDOS ve VB için geçerlidir. Örnek: KomutSatiri$=COMMAND$ Bu şekilde komut satırını aldığınızda göreceğiniz gibi, büyük harfe çevrilmiş şekilde size vermektedir.
QB4.5'un COMMAND$'ı büyük harfe çevirmesini nasıl engellerim.?Komut satırını almanın yolu, PSP (Program Segment Prefix) 'de &H80'den başlayan kısım programa aktarılan parametreleri içerir. ilk karakter kaç byte'lık komut girildiğini belirtir. Bundan sonra komut satırı gelir. &H0D karakteri ile biter. Bu iş için gerekli rutin ileride yayınlanacaktır. Diğer metod ise QB45'in derlenmesinde kullanılan BCOM45.LIB isimli dosyanın düzeltilmesiyle yapılabilir. Basic komut satırını aldıktan sonra büyük harfe çevirir. Bunu engellerseniz büyük harfe çevrilmeden elinize ulaşır. Bunun için aşağıdaki komutları ve programcığı yazıp çalıştırırsanız bu iş yapılmış olur. Aşağıdaki komutları çalıştırırsanız BCOM45.LIB dosyasından OSCMD.OBJ dosyasını ayırabilirsiniz. Bunu düzelttikten sonra yeniden BCOM45.LIB dosyasına eklerseniz sorun çözülmüş olur. Önemli bir not:: Bunu yapmadan evvel kesinlikle BCOM45.LIB dosyasının yedeğini alın. Bir not daha: Bu sadece derlendiği zaman işe yarar. QBasic içerisinde iken bu işe yaramaz. Aşağıdaki komutu aynen çalıştırın. LIB BCOM45 *OSCMDAşağıdaki programı yazıp çalıştırırsanız OSCMD.OBJ dosyasını düzeltecektir. Search$ = ""FOR X% = 1 TO 10 READ Y% Search$ = Search$ + CHR$(Y%) NEXT X% Replace$ = CHR$(235) + CHR$(8) + STRING$(8, 144) PRINT "OSCMD.OBJ "; OPEN "OSCMD.OBJ" FOR BINARY AS 1 X$ = SPACE$(LOF(1)) GET 1, , X$ X% = INSTR(X$, Search$) IF X% = 0 THEN PRINT "Not Modified.": CLOSE : END MID$(X$, X%) = Replace$ PUT 1, 1, X$ CLOSE : PRINT "Modified.": END DATA 60,97,114,6,60,122,119,2,52,32 Bu programı çalıştırdıktan sonra aşağıdaki komutu girin. LIB BCOM45 -OSCMD +OSCMD,,BCOM45 Şu anda elinizde düzeltilmiş BCOM45.LIB dosyası var.
QuickBasic'ten ErrorLevel nasıl döndürürüm.?BATCH (.BAT) dosya hazırlarken çalıştırdığınız programın sonucunu almak için ErrorLevel kullanılır. Örneğin bir satırlık bir şey girdirildiğini varsayalım. Eğer girmekten vazgeçti ve ESC tuşuna bastı. Durumu BATCH dosyanın anlayabilmesi için çalışan programdan geriye bir değer döndürülmesi gerekir. Örnek bir BATCH dosyasında ErrorLevel şu şekilde kullanılabilir. Dene.bat: @Echo off "if ErrorLevel X" komutu eğer ErrorLevel, X'e eşit veya büyük ise doğru döndürür. Ve yanına yazılan komutu işletir. Böyle bir yapı kullanmak çok fazla programın peşpeşe çalıştırılması gerektiğinde herhangi birinde hata olduğunda çıkmak için veya sonuca göre başka işler yapmak gerektiğinde kullanılabilir. Bu değeri Quick Basic'ten döndürebilmek için aşağıdaki satırı programınıza ekleyin. DECLARE SUB ExitWithErrLvl ALIAS "_exit" (BYVAL ERRORLEVEL%) Bunu ekledikten sonra aşağıdaki şekilde programın herhangi bir yerinden DOS ortamına dönebilirsiniz. ExitWithErrorLvl Oops% UYARI: Bunu QuickBasic içerisinden çalıştırmayın. Eğer çalıştırırsanız programın kaydedilip kaydedilmeyeceğini bile sormadan çıkacaktır. Yaptığınız değişiklikleri kaybedebilirsiniz. Diğer taraftan XT ve 386'larda kilitlenmeye yol açmakta. QB ile iki tane LIB dosyasını birden nasıl kullanırım.?Basitçe kullanamazsınız. Bu sebeple bu LIB dosyalarını birleştirip tek dosya haline getireceksiniz sonra birleştirdiğiniz tek dosyayı yükleyeceksiniz. Örneğin kendi kullandığınız rutinleri bir LIB haline getirdiniz ve QLB dosyasını oluşturdunuz. Sonra bir şey gerekti ve QB.QLB dosyasınıda yüklemeniz gerekti. Kendi oluşturduğunuz LIB dosyası FOO.LIB olsun. Birleştirip MYLIB.LIB dosyasını oluşturalım. Ayrıca birde katalog dosyası MYLIB.CAT oluşturalım. LIB QB.lib +FOO.LIB,MYLIB.CAT,MYLIB.CAT Şimdi buradan elde ettiğimiz MYLIB.LIB dosyasından MYLIB.QLB'yi oluşturalım. LINK /q MYLIB.LIB,MYLIB.QLB,nul,BQLB45 ; Yukarıdaki satırlarda, LINK, LIB, QB.LIB ve BQLB45.LIB dosyalarının bulunduğunuz dizinde olduğu varsayılmıştır. Eğer bulunduğunuz dizinde yoksa o zaman bu dosyaların bulundukları yerleri de yazmanız gerekiyor. STRING içindeki rakamı nasıl bir integer değişkene aktarırım.?En basit yolu : X% = VAL(TheString$) Ayrıca eğer random dosya kullanıyor ve rakam saklamaya çalışıyorsanız Önerim MKI$ ve CVI fonksiyonlarını kullanmanızdır. MKI$ fonksiyonu bir integer rakamı string'e çevirir. CVI ise iki karakterlik string'i rakama çevirir. Örnek Open "Test.dat" for
random as #1 Aynı şekilde diğer tipteki rakamlar için
FIELD tanımı yapmadan daha kolay Random dosyaya nasıl erişirim.?Bunun için TYPE belirlemeniz gerekiyor. Örnekle açıklamak gerekirse; TYPE Personel Type tanımında Dizi ancak QB 7.1 ve sonrasında yapılabiliyor. Daha öncesinde böyle bir şey mevcut değil. (QB4.5 veya QBasic) Gördüğünüz gibi son derece rahat bir şekilde bilgi aktarılıyor ve okunabiliyor. BINARY şekilde nasıl dosya açar ve nasıl kullanabilirim.?Binary dosya yapısı QB 4.5 ile gelmiştir. Herhangi bir formata gerek olmaksızın RANDOM olarak dosyaya erişmek için kullanılır. Aşağıda bununla alakalı bir örnek göreceksiniz. OPEN "Test.dat"
FOR BINARY AS #1 OPEN "Test.dat"
FOR BINARY AS #1 Aslına bakarsanız BINARY dosya içerisine ne atarsanız atın olduğu gibi kabul edecektir. Okurken dikkatli olmak gerekiyor. Çünki ne okuduğunuzu bilmeden okursanız hata yapabilirsiniz. O anda okuyacağınız bölgeyi belirlemek için SEEK komutunu kullanmanız gerekiyor. Byte Cinsinden nereyi okuyacağınızı bildirmelisiniz. Seek komutu INPUT / OUTPUT / APPEND türünde açılan sıralı dosyalarda pek işe yaramasada BINARY dosya modunda çokça kullanılır. Yine BINARY modu kullanılan bir dosya kopyalama programcığı. BufferLen% = 20000 ' 20.000
karakterlik bilgi bir defada aktarılacak. Oldukça basit olan bu program ile bir dosyanın kopyasını çıkartabilirsiniz. STRING İçindeki boşlukları nasıl kaldırırım.?String'in baş tarafındaki boşluğu (Boşluk karakteri Chr$(32)'dir) kaldırmak için X$ = LTRIM$(TheString$) String'in sonundaki boşlukları kaldırmak için X$ = RTRIM$(TheString$) Her iki taraftaki boşlukları birden kaldırmak içinde X$ = LTRIM$(RTRIM$(TheString$)) Kullanılabilir. Her iki taraftaki boşlukları kaldırmak için VB'te ayrıca TRIM$ fonksiyonu mevcut. "STRING DESCRIPTORS" nelerdir.?Eğer QB ile birlikte ASM veya C kullanmayı düşünmüyorsanız buna asla ihtiyaç duymazsınız. String Descriptor Text bilginin başlangıç ve uzunluk bilgilerini verek 4 BYTE uzunluğunda pakettir. ilk kısım DGROUP segmentinde bulunan string'in offset değeridir. ikinci iki byte uzunluğundaki kısım ise uzunluğudur. Her ikiside işaretsiz tam sayı ifade eder. (0-65536 arasında) QB ASCIIZ string kullanmaz. (ASCIIZ; Chr$(0) ile biten string'ler. C ve Pascal'da kullanılır.) QBASIC ile QuickBasic arasındaki farklar nelerdir.?Çok fark var. Bazıları : QBASIC BAS uzantılı dosyaları derleyip EXE yapamaz. QB45 yapabilir. QBASIC "CALL INTERRUPT" komutuna sahip değildir.QB45 Sahiptir. QBASIC LIB kullanımını desteklemez. QB45 Destekler. QB45'in kırpılarak MSDOS 5.0 içine QBASIC olarak eklenmiştir. QuickBasic 65-80 USD civarında bir fiyatla satılırken QBASIC MSDOS ile beraber gelmektedir. Genel olarak tüm BAS kodu QBASIC ile de çalışmaktadır. Yalnızca INTERRUPT ve LIB kullanımı kısıtlıdır. Bir şekilde CALL ABSOLUTE ile bazı ASM kodunu çağırabiliyorsunuz ama çok basit değil. Ayrıca yazdığınız program kısa olmak zorunda. Eğer amatörce deneme amaçlı program yazıyorsanız QBASIC işinizi görecektir. Ama eğer EXE yapmanız gerekiyorsa veya ciddi bir programlama işine giriştiyseniz QB45 veya PDS (QuickBasic 7.1) şiddetle önerilir. Önerilebilecek ciddi program yazılabilecek paketler ise PowerBasic ve Visual Basic For DOS'tur. Bu paketler gerçekten çok iyi ve QB45 üstüne ekstra komutlar getiriyorlar. Fakat QB45 ile geriye dönük bir uyumlulukları yok. HEX sayıları nasıl Desimal Sayılara ve Desimal Sayıları nasıl HEX formatına dönüştürebilirim.?HEX formatta karakter ifadeyi integer'a dönüştürmek için TheString$="6B" ve Desimal sayıyı HEX'e çevirmek için X$=HEX$(TheInteger%) komutları kullanılabilir. QUICK BASIC ile sistemi nasıl boot ettirebilirim.?Aşağıdaki basit kod bu işi yapmaktadır. SUB WarmBoot Warm Boot sanki CTRL-ALT-DEL tuşlarına basılmış gibi sistemi start ettirir. Cold Boot ise sistemi Reset tuşuna basılmış gibi start ettirir. Lütfen biri bana Inkey$ fonksiyonunun nasıl çalıştığını göstersin.?Inkey komutu basitçe klavyeyi kontrol eder. Eğer herhangi bir tuşa basılmışsa kodunu döndürür. Eğer herhangi bir tuşa basılmamışsa o zaman NULL string döndürür. Kullanmanın bir kaç yolu var. İş yapılırken arada kontrol etmek. For x=1 to 1000 Diğeri klavyeden bir şey girilene kadar beklemektir. Function GetKey$ Aşağıda girilen ifadede kelimelerin ilk harflerini büyüten ve Enter tuşu ile işlemi bitiren bir program parçası mevcuttur. Function GetKeyCap$ ARCSIN ve ARCCOS fonksiyonlarını nasıl hesaplayabilirim.?ArcSin ve ArcCos fonksiyonları diğer fonksiyonlardan türetilebilir. Basitçe CONST PI=3.141593 şeklinde tanımlayabilirsiniz. Eğer program içerisinde doğrudan kullanmak istiyorsanız; Function ARCSIN# (A#) komutlarını yazabilirsiniz. AND, OR ve XOR komutları nedir, ne işe yarar.?AND, OR ve XOR matematiksel fonksiyonlar olup, karşılaştırma amaçlı olarak kullanılır. Bu fonksiyonlar (BIT BIT çalışırlar.) AND OR XOR The comparitive functions are
like this: If (5 > 1) AND (6 < 10 )
then bir şeyler bir şeyler. Komut satırında gelen parametreleri nasıl ayırırım..?Aşağıdaki rutini kullanarak bu işi yapabilirsiniz. Bu rutin gelen parametreleri Arg$ dizini içerisine açmaktadır. Ayraç olarak boşluk kullanılmaktadır.
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||