AutoLISP’te Ham Veriler ile Çalışma

AutoLISP özel AutoCAD uygulamaları yaratmak için, sıklıkla kullanılan bir programlama dilidir. AutoLISP ile yaratılmış olan birçok özel komut kullanıcıdan veri(veriler) istemektedir. Bu veri istemleri genellikle GetXXX fonksiyonları ile yapılmaktadır. Bu fonksiyonlar noktalar, sayılar, ifadeler ve anahtar kelimeler gibi temel veri girişleri için harika olmakla birlikte; aynı zamanda da sınırlıdırlar.

GetInt fonksiyonu dönen değeri bir tam sayı olarak sınırlandırırken; kullanıcıya istediği herhangi bir karakteri girme olanağı sağlar. Kullanıcı Enter veya Boşluk “Space” tuşuna bastığı zaman, şayet girilen metin bir tam sayı ise, onaylanır. GetString fonksiyonu size bir yazı dizgisi girme olanağı sağlar; fakat karakterleri girildiği gibi maskelemek için bir yol sağlamaz.

İşte burası Grread fonksiyonunun devreye girdiği yer olup; birçok AutoLISP programcısı tarafından sıklıkla başvurulan bir fonksiyondur. Bu fonksiyon klavye, fare ve dijital veri giriş araçları ile çalışır gibi kendi Get davranışınızı yaratırken faydalı olabilir. Örneğin, sadece rakamların girişine izin veren veya şifre özelliği gibi metni girilirken maskeleyen (örten, gizleyen) işlevsellikleri yaratabilirsiniz.

Grread fonksiyonunun yazımı aşağıdaki gibidir:

(grread [imleç izleme] [veri giriş filtreleri [imleç tipi]])

Grread fonksiyonunun desteklediği argümanlar ve değerler hakkında bilgi için, AutoCAD ‘in çevrimiçi yardımında GRREAD (AutoLISP) başlığına bakın.

Aşağıdaki örnek kod, kullanıcıya bir rakamsal değer girme ve komut satırında görüntülenir gibi girilen yazıyı maskeleme (örtme, gizleme) olanağı sağlamaktadır. Bu kod ihtiyaç duyulan tüm hatalı işlemleri göstermezken, kullanıcıyı veri girişi için nasıl uyaracağınızı gösterir ve daha sonra girilen değerin istenen değer olup olmadığını belirler.

(defun c:BenimPINKodum ( / number code ch)
  (setq number "")
  (prompt "\nBir tam sayı girin [silmek için Geri Sil tuşuna basın]: ")
  (setq code (grread))

  (while (and (= 2 (car code))
              (and (/= 13 (cadr code))
                      (/= 32 (cadr code))))
    (if (and (>= (cadr code) 48)
                (<= (cadr code) 57))
      (progn
        (setq ch (chr (cadr code)))
        (setq number (strcat number ch))
        (princ "*")
      )
    )

    ;; Support backspace
    (if (= (cadr code) 8)
      (progn
        (repeat (strlen number)
          (princ (chr 8))
        )
        (setq number "")
      )
    )

    ;; Ask for more input if the user did not press Enter or Space
    (if (or (/= 13 (cadr code))(/= 32 (cadr code)))
      (setq code (grread))
    )
  )

  (prompt (strcat "\nPIN olarak girilmişti.: " number))
 (princ)
)

Kod AutoCAD’in içine yüklediğinde, BenimPINKodum komutu çalıştırıldıktan sonra aşağıdaki verti istemini (uyarısını) göreceksiniz.

Bir tam sayı girin [silmek için Geri Sil tuşuna basın]:

Klavyeden değerleri yazarken, sadece 0-9 arasındaki tam sayılar kabul edilecek; ‘A’, ‘c’ veya ‘;’ gibi tuşlara basma program tarafından ihmal edilecektir. Geçereli bir sayı girildiği zaman, komut veri istemi (uyarısı) yerinde bir yıldız işareti (*) görünecektir. Boşluk “Spacebar” veya Enter tuşuna basma veri girişini sonlandıracak ve girilen değeri görüntüleyecektir. Geri Sil “Backspace” tuşuna sürekli basma kullanıcının girmiş olduğu tüm rakamları silecektir.

Veri giriş ve komut satırındaki geri dönen değer örneği:

Bir tam sayı girin [silmek için Geri Sil tuşuna basın]: *****
PIN: 69515 olarak girilmişti.