134 lines
4.9 KiB
Plaintext
134 lines
4.9 KiB
Plaintext
# This Source Code Form is subject to the terms of the Mozilla Public
|
|||
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||
|
|
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||
|
|
#
|
||
|
|
# Basit komut satırı: satır düzenleme, yerleşik komutlar ve UTF-8 tamponu.
|
||
|
|
|
||
|
|
kullan "arayuz.kbl"
|
||
|
|
kullan "bellek.kbl"
|
||
|
|
|
||
|
|
AZAMI = 120
|
||
|
|
ISTEM_RENGI = 0x1E # mavi zemin, sarı yazı
|
||
|
|
YAZI_RENGI = 0x17 # mavi zemin, gri yazı
|
||
|
|
|
||
|
|
fonksiyon istem():
|
||
|
|
ekran.renk(ISTEM_RENGI)
|
||
|
|
ekran.yaz("kaba> ")
|
||
|
|
ekran.renk(YAZI_RENGI)
|
||
|
|
bellek_yaz64(durum.SATIR_UZUNLUK, 0)
|
||
|
|
|
||
|
|
fonksiyon uzunluk():
|
||
|
|
don bellek_oku64(durum.SATIR_UZUNLUK)
|
||
|
|
|
||
|
|
fonksiyon satir_metni():
|
||
|
|
# Komut satırı tamponundan metin (yığından ayrılır, iş bitince bırakılır).
|
||
|
|
don metin_oku(durum.KABUK_TAMPON, uzunluk())
|
||
|
|
|
||
|
|
fonksiyon komut_mu(satir, tr, ascii):
|
||
|
|
# Komutlar Türkçe yazımıyla ve ASCII karşılığıyla kabul edilir (yardım = yardim).
|
||
|
|
don satir == tr veya satir == ascii
|
||
|
|
|
||
|
|
fonksiyon yardim():
|
||
|
|
ekran.satir("Komutlar (Türkçe ya da ASCII yazılabilir):")
|
||
|
|
ekran.satir(" yardım bu liste")
|
||
|
|
ekran.satir(" panel sistem gösterge panelini çizer")
|
||
|
|
ekran.satir(" türkçe Türkçe karakter vitrini")
|
||
|
|
ekran.satir(" hakkında çekirdek bilgisi")
|
||
|
|
ekran.satir(" zaman açılıştan beri geçen süre")
|
||
|
|
ekran.satir(" yaz METİN metni ekrana yazar")
|
||
|
|
ekran.satir(" uzunluk METİN metnin harf sayısı (UTF-8)")
|
||
|
|
ekran.satir(" klavye tr|us klavye düzeni")
|
||
|
|
ekran.satir(" bellek bellek haritası ve sayfa ayırıcı")
|
||
|
|
ekran.satir(" ayır sayfa ayırıcıyı dener")
|
||
|
|
ekran.satir(" yığın yığın kullanımı")
|
||
|
|
ekran.satir(" temizle ekranı temizler")
|
||
|
|
ekran.satir(" kapat makineyi kapatır")
|
||
|
|
|
||
|
|
fonksiyon calistir():
|
||
|
|
eger uzunluk() == 0:
|
||
|
|
don 0
|
||
|
|
satir = satir_metni()
|
||
|
|
eger komut_mu(satir, "yardım", "yardim"):
|
||
|
|
yardim()
|
||
|
|
degilse eger satir == "panel":
|
||
|
|
arayuz.panel_ciz()
|
||
|
|
degilse eger komut_mu(satir, "türkçe", "turkce"):
|
||
|
|
arayuz.turkce_vitrin()
|
||
|
|
degilse eger komut_mu(satir, "hakkında", "hakkinda"):
|
||
|
|
ekran.satir("KabaLang mini çekirdek — KabaLang ile yazıldı, LLVM ile derlendi.")
|
||
|
|
ekran.satir("x86-64 uzun kip, 100 Hz zamanlayıcı, PS/2 klavye (Türkçe Q), VGA metin kipi.")
|
||
|
|
degilse eger satir == "zaman":
|
||
|
|
t = bellek_oku64(durum.TIK)
|
||
|
|
ekran.satir(f"Açılıştan beri: {t // 100}.{(t % 100) // 10} sn")
|
||
|
|
degilse eger satir == "temizle":
|
||
|
|
ekran.temizle(YAZI_RENGI)
|
||
|
|
degilse eger satir == "bellek":
|
||
|
|
bellek.haritayi_yaz()
|
||
|
|
degilse eger komut_mu(satir, "yığın", "yigin"):
|
||
|
|
ekran.satir(f"Yığın: {calisma_zamani.yigin_kullanilan()} bayt kullanılıyor")
|
||
|
|
degilse eger satir.ile_baslar("uzunluk "):
|
||
|
|
m = satir.parca(8, satir.uzunluk() - 8)
|
||
|
|
ekran.satir(f"\"{m}\": {m.uzunluk()} harf")
|
||
|
|
degilse eger satir == "klavye tr":
|
||
|
|
klavye.duzen(0)
|
||
|
|
ekran.satir("Klavye: Türkçe Q")
|
||
|
|
degilse eger satir == "klavye us":
|
||
|
|
klavye.duzen(1)
|
||
|
|
ekran.satir("Klavye: ABD")
|
||
|
|
degilse eger komut_mu(satir, "ayır", "ayir"):
|
||
|
|
a = bellek.sayfa_ayir()
|
||
|
|
b = bellek.sayfa_ayir()
|
||
|
|
ekran.yaz("ayrıldı: ")
|
||
|
|
ekran.onaltilik(a)
|
||
|
|
ekran.yaz(" ")
|
||
|
|
ekran.onaltilik(b)
|
||
|
|
ekran.karakter(0x0A)
|
||
|
|
bellek.sayfa_birak(a)
|
||
|
|
c = bellek.sayfa_ayir()
|
||
|
|
ekran.yaz("bırakılıp yeniden ayrılan: ")
|
||
|
|
ekran.onaltilik(c)
|
||
|
|
eger c == a:
|
||
|
|
ekran.satir(" (geri verilen sayfa yeniden kullanıldı)")
|
||
|
|
degilse:
|
||
|
|
ekran.karakter(0x0A)
|
||
|
|
degilse eger satir.ile_baslar("yaz "):
|
||
|
|
ekran.satir(satir.parca(4, satir.uzunluk() - 4))
|
||
|
|
degilse eger satir == "kapat":
|
||
|
|
ekran.satir("Kapatılıyor...")
|
||
|
|
seri.satir("kabuk: kapat")
|
||
|
|
port_yaz16(0x604, 0x2000)
|
||
|
|
degilse:
|
||
|
|
ekran.satir("Bilinmeyen komut: " + satir)
|
||
|
|
don 0
|
||
|
|
|
||
|
|
fonksiyon tampona_ekle(b):
|
||
|
|
bellek_yaz8(durum.KABUK_TAMPON + uzunluk(), b)
|
||
|
|
bellek_yaz64(durum.SATIR_UZUNLUK, uzunluk() + 1)
|
||
|
|
|
||
|
|
fonksiyon son_harfi_sil():
|
||
|
|
# UTF-8: devam baytlarını (10xxxxxx) ve baş baytı birlikte siler.
|
||
|
|
n = uzunluk()
|
||
|
|
iken n > 0 ve bit_ve(bellek_oku8(durum.KABUK_TAMPON + n - 1), 0xC0) == 0x80:
|
||
|
|
n = n - 1
|
||
|
|
eger n > 0:
|
||
|
|
n = n - 1
|
||
|
|
bellek_yaz64(durum.SATIR_UZUNLUK, n)
|
||
|
|
|
||
|
|
fonksiyon tus(cp):
|
||
|
|
# Klavyeden gelen bir kod noktasını işler; tampon UTF-8 tutar.
|
||
|
|
eger cp == 0x0A:
|
||
|
|
ekran.karakter(0x0A)
|
||
|
|
calistir()
|
||
|
|
istem()
|
||
|
|
degilse eger cp == 0x08:
|
||
|
|
eger uzunluk() > 0:
|
||
|
|
son_harfi_sil()
|
||
|
|
ekran.geri_sil()
|
||
|
|
degilse eger cp != 0 ve uzunluk() < AZAMI - 1:
|
||
|
|
eger cp < 0x80:
|
||
|
|
tampona_ekle(cp)
|
||
|
|
degilse:
|
||
|
|
tampona_ekle(bit_veya(0xC0, saga_kaydir(cp, 6)))
|
||
|
|
tampona_ekle(bit_veya(0x80, bit_ve(cp, 0x3F)))
|
||
|
|
ekran.kod_noktasi(cp)
|