Program 27:03 Aktif raporlar listesi almak (Quick Basic) |
|
'Quick Basic QB/L QB.QLB komut satırı ile yüklenmelidir 'Ayni dizin içerisinde QB.BI dosyası bulunmalıdır '$INCLUDE: 'qb.bi' '$DYNAMIC DIM oku(20), yaz(20), t(200) cihaz = &HA0 'A0h=Master B0h=Slave <-DEĞİŞTİRİN bar = &H1F0 '01F0h=Primer 0170h=Sekonder <-DEĞİŞTİRİN GOSUB Yerles 'Okuyan ve yazan assembler rutinleri yerleştir. CLS : PRINT "AKTİF OLAN PROFİL RAPORLARI" PRINT "Profil No: Şimdi geçerli mi?": PRINT "========== =================" DEF SEG = 0: sakla0 = PEEK(0): sakla1 = PEEK(1): OUT bar + 6, cihaz profilNo = 0: GOSUB profil 'Gelen bayt sayısı gönderilen bayt sayısına eşit değilse dur IF say - 4 <> t(2) * 256 + t(3) THEN GOSUB hatabul: PRINT "Hata kodu= "; hata$: GOTO cikis PRINT HEX$(t(8) * 256 + t(9)); "h", , : IF t(10) AND 1 THEN PRINT "Evet" ELSE PRINT "Hayır" baz = 12: toplam = t(11) – 1 'toplam = Buradan aşağıya kaç bayt var FOR x = 0 TO toplam STEP 4 'Her profil 4 bayt yer kapliyor 0...3 PRINT HEX$(t(baz + x) * 256 + t(baz + x + 1)); "h", , IF t(baz + x + 2) AND 1 THEN PRINT "Evet" ELSE PRINT "Hayır" NEXT : PRINT "DİĞER PROFİL RAPORLARI" PRINT "Profil No: Şimdi geçerli mi? Baytlar (Desimal)" PRINT "========== ================= ========" geridekalan = say - 4 - t(11) 'Aktif olmayan profil sayısı baz = t(11) + 12 'baz= başlangıç noktası 0ıncı profilin bittiği bayt DO: PRINT HEX$(t(baz) * 256 + t(baz + 1)); "h", , IF t(baz + 2) AND 1 THEN PRINT "Evet", ELSE PRINT "Hayır", FOR x = 0 TO t(baz + 3) – 1 : PRINT t(baz + 4 + x); : NEXT: PRINT baz = baz + 4 + t(baz + 3) 'Yeni profilin başlangıcı LOOP UNTIL baz > say - 4 cikis: DEF SEG = 0: POKE 0, sakla0: POKE 1, sakla1: END ' Int 0 vektörünü restore et /çık
profil: 'Bu rutin profilNo değişkenindeki profil 'raporunu t() dizisine alır. SAY değişkeni bayt sayısıdır istek = 1: a = INT(profilNo / 256): b = profilNo - a * 256 profil$ = CHR$(a) + CHR$(b): paket$ = CHR$(&H46) + CHR$(istek) + profil$ + STRING$(3, 0) paket$ = paket$ + CHR$(&HFF) + CHR$(&HFD) + STRING$(3, 0) GOSUB paketgonder: GOSUB bekle1: say = 0: DO: GOSUB oku: t(say) = a: t(say + 1) = b say = say + 2: LOOP UNTIL (INP(bar + 7) AND 8) = 0: RETURN |
|
Programın ekran çıktısı görülmektedir. İstek bitleri bu defa 01b yapılmıştır. Sağ sütunda profil raporunda cihazdan gönderilen baytlar yer almaktadır. Bu baytlar her profil için kendi konu başlığında anlatılan şekilde anlamlandırılır. |
Bu programda ilk kısım bir önceki programdan kopya edilmiştir. Profil=00 raporunun bittiği baytta t(11) yazan değere 12 sayısını eklememizin sebebi cevap başlangıcı dahil olarak profil=00 raporunun sabit kısmının uzunluğunun 12 bayt olmasıdır. Bu 12 nereden çıktı onu anlatalım: Cevap başlığı kaç bayttır? 8 bayttır. Peki her profil raporunun kaç bayt uzunluğunda olduğu profil raporunun kaçıncı baytında yazar? Baştan 4 üncü baytında yazar. Daima oradadır, hiçbir yere gidemez. 8+4 ne yapar? 12 yapar. İşte programdaki 12 oradan geliyor.
PROGRAMA DE ACTIVIDADES EN BODEGA VISITA GUIADA
PUESTA EN MARCHA DE PROGRAMA PARA IMPULSAR
DOKUZ EYLÜL ÜNİVERSİTESİ FARABİ DEĞİŞİM PROGRAMI ÖĞRENİM PROTOKOLÜ
Tags: (quick basic), raporlar, program, quick, basic), (quick, aktif, listesi, almak