Strona 1 z 6

[Lisp] CadPack propozycja DCL_StdQuickOptionsDialog

PostNapisane: cze 26, 2017 00:01
przez ziele_o2k
Często jest tak, że mam jakiegoś lispa, w którym trzeba mieć kilka ustawień. Denerwowało mnie wybieranie GetKeyWorda i innych getów w linii komend.
Patrząc na CadPackowe cd:DCL_StdEditBoxDialog pomyślałem, żeby napisać podobną funkcję biblioteczną do szybkich ustawień.

Coś zacząłem skrobać. Jeszcze to ani ładu, ani składu nie ma, ale wrzucam może jakieś pomysły będą.
Na tą chwilę ograniczyłem się jedynie do edit boxa i popup listy, ale może rozwinąć zakres?

Wstępny szkic:
Kod: Zaznacz cały
(defun cd:DCL_StdQuickOptionsDialog (Data Default SubTitles Title WidthCol-1 WidthCol-2 BtnsWidth BtnsLabel DPos
                                     / *error* inc keys_A keys_B )

  (if (not DPos) (setq *cd-TempDlgPosition* (list -1 -1)))
  (setq
    inc 0
    keys_A (mapcar '(lambda (%) (strcat "A_" (itoa (setq inc (1+ inc))))) SubTitles)
    inc 0
    keys_B (mapcar '(lambda (%) (strcat "B_" (itoa (setq inc (1+ inc))))) SubTitles)
  )
  (cond
    ( (not
        (and
          (setq fd
            (open
              (setq tmp (vl-FileName-MkTemp nil nil ".dcl")) "w"
            )
          )
          (foreach %
            (list
              (strcat
                "but : button { width = " (if BtnsWidth (itoa BtnsWidth) 13) "; fixed_width = true; }"
                "StdQuickOptionsDialog : dialog {"
                (if Title (strcat "label = \"" Title "\";") "")
                "  : column {"
                "    : row {"
                "      : column {"
              )
              (cd:STR_ReParse
                (mapcar
                  '(lambda (%1 %2)
                    (strcat ": text { key = \"" %2 "\";value = \"" %1 "\";width=" (if WidthCol-1 (itoa WidthCol-1) "20")";}" )
                  )
                  SubTitles
                  keys_A
                )
                " "
              )
              (strcat
                "      }"
                "      : column {"
              )
              (cd:STR_ReParse
                (mapcar
                  '(lambda (%1 %2)
                    (if (= (car %1) 1)
                      (strcat
                        ": popup_list {"
                        "key = \"" %2 "\";"
                        "width = "
                        (if WidthCol-2 (itoa WidthCol-2) "20")
                        ";}"
                      )
                      (strcat
                        ": edit_box {"
                        "key = \"" %2 "\";"
                        (if (caddr %1) (strcat "edit_limit = " (itoa (caddr %1)) ";") "")
                        "width = "
                        (if WidthCol-2 (itoa WidthCol-2) "20")
                        ";}"
                      )
                    )
                  )
                  Data
                  keys_B
                )
                " "
              )
              (strcat
                "      }"
                "    }"
                "  :   spacer_1 {}"
                "  : row { alignment = centered; fixed_width = true;"
                "  : but { key = \"" (car BtnsLabel) "\";"
                "    label = \"" (car BtnsLabel) "\"; is_default = true; }"
                "  : but { key = \"" (cadr BtnsLabel) "\";"
                "    label = \"" (cadr BtnsLabel) "\"; is_cancel = true; }"
                "  } "
                ;(if (setq fl (= (type (cadr Data)) (quote INT))) "" ": errtile { width = 20; }")
                ": errtile { width = 20; }"
                " }"
                "}"
              )
            )
            (write-line % fd)
          )
          (not (close fd))
          (< 0 (setq dc (load_dialog tmp)))
          (new_dialog "StdQuickOptionsDialog" dc ""
            (cond
              ( *cd-TempDlgPosition* )
              ( (quote (-1 -1)) )
            )
          )
        )
      )
    )
    ( T
      ; (setq defval (substr (caddr Data) 1 Limit)
            ; res (if (not (= defval "")) (_CheckVal (car Data) (cadr Data) defval))
      ; )
      ; (mode_tile "edit" 2)
      ; (action_tile "edit" "(setq res (_CheckVal (car Data) (cadr Data) $value))")
      (action_tile (car BtnsLabel) "(setq *cd-TempDlgPosition* (done_dialog 1))")
      (action_tile (cadr BtnsLabel) "(setq res nil) (done_dialog 0)")
      (start_dialog)
    )
  )
)


A testujemy przykładowo z
Kod: Zaznacz cały
(cd:DCL_StdQuickOptionsDialog
  (list
    (list 1 (list "Tak" "Nie") "Tak" 25)
    (list 2
      (list 3
        (list
          (cons 1 "Wprowadz liczbe rzeczywista")
          (cons 2 "Liczba nie moze byc zerem")
          (cons 8 "Spacje niedozwolone")
          (cons 16 "To nie jest liczba")
          (cons 32 "Liczba jest za mala")
          (cons 64 "Liczba jest za duza")
        )
        "2.5" -100 100 2 2
      )
      nil
      25
    )
    (list 1 (list "Kropka" "Przecinek") "Przecinek")
  )
  (list "Tak" "2.5" "Przecinek")
  (list
    "Czy wstawić punkt w środku:"
    "Wysokość tekstu:"
    "Separator:"
  )
  "Quick Settings"
  25
  25
  13
  (list "&Ok" "&Anuluj")
  T
)

Zaznaczam, że nic tu nie działa, ale w trakcie pracy może pojawią się jakieś pomysły ;)

Re: [Lisp] CadPack propozycja DCL_StdQuickOptionsDialog

PostNapisane: cze 26, 2017 11:21
przez kruuger
jakis uniwersalny settnigs raczej ciezko zrobic. fajnym wzorem do powielania moze byc NOTO z DrawingNotes.
noto.png
noto.png (5.62 KiB) Przeglądane 497 razy

bardziej moglby to byc przygotowany szablon. tworzyc w locie iles edit, list chyba ciezko?

mamy DCLEditBox i DCLList
edit1.png
edit1.png (2.64 KiB) Przeglądane 497 razy

stdlist.png
stdlist.png (3.15 KiB) Przeglądane 497 razy

moze by dorobic na wzor z popup list ?
k.

Re: [Lisp] CadPack propozycja DCL_StdQuickOptionsDialog

PostNapisane: cze 26, 2017 12:25
przez MarCho
jako wybór opcji (i dla osób niechętnie czytających linię komend) zrobiłem takie proste dynamiczne okno dialogowe - trochę niezdarne, ale u mnie działa:

Re: [Lisp] CadPack propozycja DCL_StdQuickOptionsDialog

PostNapisane: cze 26, 2017 12:46
przez ziele_o2k
kruuger napisał(a):(...)moze by dorobic na wzor z popup list ?
k.

Coś w tę stronę?
Kod: Zaznacz cały
(defun c:tese ( / )
  (cd:DCL_StdPopupDialog
    '("A" "B" "C")
    0
    "TEST"
    "Testowa"
    20
    2
    15
    '("&Ok" "&Cancel")
    T
  )
)


(defun cd:DCL_StdPopupDialog (Data Pos Title ListTitle Width Btns BtnsWidth BtnsLabel DPos
                              / fd tmp ok ca dc res)
  (if (not DPos) (setq *cd-TempDlgPosition* (list -1 -1)))
  (cond
    ( (not
        (and
          (setq fd
            (open
              (setq tmp (vl-FileName-MkTemp nil nil ".dcl")) "w"
            )
          )
          (setq ok (strcat
                     ": but { label = \"" (car BtnsLabel) "\";"
                     "  key = \"" (car BtnsLabel) "\"; is_default = true;}"
                   )
                ca (strcat
                     ": but { label=\"" (cadr BtnsLabel) "\";"
                     "  key = \"" (cadr BtnsLabel) "\";is_cancel = true;}"
                   )
          )
          (foreach %
            (list
              (strcat
                "but : button { width = " (if BtnsWidth (itoa BtnsWidth) 13)
                "; fixed_width = true; }"
                "StdPopupDialog: dialog { "
                (if Title (strcat "label = \"" Title "\";") "")
                ": popup_list { key = \"popup_list\"; fixed_width=true;"
                (if ListTitle (strcat "label = \"" ListTitle "\";") "")
                "fixed_width = true; fixed_height = true;"
                "width = " (if Width (itoa Width) "20" ) ";"
                "} : row { alignment = centered; fixed_width = true;"
              )
              (cond
                ( (zerop Btns) ca )
                ( (= 1 Btns) ok )
                ( T (strcat ok ca) )
              )
              "}}"
            )
            (write-line % fd)
          )
          (not (close fd))
          (< 0 (setq dc (load_dialog tmp)))
          (new_dialog "StdPopupDialog" dc ""
            (cond
              ( *cd-TempDlgPosition* )
              ( (quote (-1 -1)) )
            )
          )
        )
      )
    )
    ( T     
      (cd:DCL_SetList "popup_list" Data 0)
      (if
        (or
          (not Pos)
          (not (< -1 Pos (length Data)))
        )
        (setq Pos 0)
      )
      (setq res (set_tile "popup_list" (itoa Pos)))
      (action_tile "popup_list"
        (vl-prin1-to-string
          (quote
            (progn
              (setq res (get_tile "popup_list"))
            )
          )
        )
      )
      (action_tile (car BtnsLabel) "(setq *cd-TempDlgPosition* (done_dialog 1))")
      (action_tile (cadr BtnsLabel) "(setq res nil) (done_dialog 0)")
      (start_dialog)
    )
  )
  (if (< 0 dc) (unload_dialog dc))
  (if (setq tmp (findfile tmp)) (vl-file-delete tmp))
  (if (not DPos) (setq *cd-TempDlgPosition* (list -1 -1)))
  res
)

Re: [Lisp] CadPack propozycja DCL_StdQuickOptionsDialog

PostNapisane: cze 26, 2017 13:35
przez kruuger
MarCho napisał(a):jako wybór opcji (i dla osób niechętnie czytających linię komend) zrobiłem takie proste dynamiczne okno dialogowe - trochę niezdarne, ale u mnie działa:

jeszcze bardziej dynamiczna wersja. dowolna liczba opcji.
k.

Re: [Lisp] CadPack propozycja DCL_StdQuickOptionsDialog

PostNapisane: cze 26, 2017 14:07
przez MarCho
kruuger napisał(a):
MarCho napisał(a):jako wybór opcji (i dla osób niechętnie czytających linię komend) zrobiłem takie proste dynamiczne okno dialogowe - trochę niezdarne, ale u mnie działa:

jeszcze bardziej dynamiczna wersja. dowolna liczba opcji.
k.


dzięki za modyfikację. maleńka poprawka

Re: [Lisp] CadPack propozycja DCL_StdQuickOptionsDialog

PostNapisane: cze 26, 2017 14:30
przez kruuger
MarCho napisał(a):
kruuger napisał(a):
MarCho napisał(a):jako wybór opcji (i dla osób niechętnie czytających linię komend) zrobiłem takie proste dynamiczne okno dialogowe - trochę niezdarne, ale u mnie działa:

jeszcze bardziej dynamiczna wersja. dowolna liczba opcji.
k.


dzięki za modyfikację. maleńka poprawka

dz.

niemniej ziele_o2k chodzilo chyba bardziej o jakies listy, edit box. wydaje mi sie ze jakiegos gotowca nie da sie skrobnac. roznych konfiguracji okna z opcjami jest nieskonczenie wiele. bardziej bym szedl w jakis szablon jak pisalem wczesniej. gdybysmy mieli przygotowane wycinki w dcl i kod lsp do sklejania wtedy latwiej mozna by cos sklecic.
k.

Re: [Lisp] CadPack propozycja DCL_StdQuickOptionsDialog

PostNapisane: cze 26, 2017 16:11
przez ziele_o2k
kruuger napisał(a):dz.

niemniej ziele_o2k chodzilo chyba bardziej o jakies listy, edit box. wydaje mi sie ze jakiegos gotowca nie da sie skrobnac. roznych konfiguracji okna z opcjami jest nieskonczenie wiele. bardziej bym szedl w jakis szablon jak pisalem wczesniej. gdybysmy mieli przygotowane wycinki w dcl i kod lsp do sklejania wtedy latwiej mozna by cos sklecic.
k.

Mi chodziło o szybkie ustawienia z edit_box i popup_list, nic więcej.
Jeszcze nad tym posiedzę i wrzucę com naskrobał.
Wydaje mi się, że jestem w stanie to opanować. Najwięcej zabawy pewnie będzie będzie z edit boxem.

Re: [Lisp] CadPack propozycja DCL_StdQuickOptionsDialog

PostNapisane: cze 26, 2017 17:02
przez kruuger
ziele_o2k napisał(a):
kruuger napisał(a):dz.

niemniej ziele_o2k chodzilo chyba bardziej o jakies listy, edit box. wydaje mi sie ze jakiegos gotowca nie da sie skrobnac. roznych konfiguracji okna z opcjami jest nieskonczenie wiele. bardziej bym szedl w jakis szablon jak pisalem wczesniej. gdybysmy mieli przygotowane wycinki w dcl i kod lsp do sklejania wtedy latwiej mozna by cos sklecic.
k.

Mi chodziło o szybkie ustawienia z edit_box i popup_list, nic więcej.
Jeszcze nad tym posiedzę i wrzucę com naskrobał.
Wydaje mi się, że jestem w stanie to opanować. Najwięcej zabawy pewnie będzie będzie z edit boxem.

co to maja byc te szybkie ustawienia ? szybko mozna pobrac ustawienie z jednego ale nie z kilku na raz. nie napiszesz uniwersalnej funkcji do tego.

Re: [Lisp] CadPack propozycja DCL_StdQuickOptionsDialog

PostNapisane: cze 27, 2017 01:16
przez ziele_o2k
kruuger napisał(a):
ziele_o2k napisał(a):
kruuger napisał(a):dz.

niemniej ziele_o2k chodzilo chyba bardziej o jakies listy, edit box. wydaje mi sie ze jakiegos gotowca nie da sie skrobnac. roznych konfiguracji okna z opcjami jest nieskonczenie wiele. bardziej bym szedl w jakis szablon jak pisalem wczesniej. gdybysmy mieli przygotowane wycinki w dcl i kod lsp do sklejania wtedy latwiej mozna by cos sklecic.
k.

Mi chodziło o szybkie ustawienia z edit_box i popup_list, nic więcej.
Jeszcze nad tym posiedzę i wrzucę com naskrobał.
Wydaje mi się, że jestem w stanie to opanować. Najwięcej zabawy pewnie będzie będzie z edit boxem.

co to maja byc te szybkie ustawienia ? szybko mozna pobrac ustawienie z jednego ale nie z kilku na raz. nie napiszesz uniwersalnej funkcji do tego.

O coś takiego mi chodziło:
Kod: Zaznacz cały
(defun cd:DCL_StdQuickOptionsDialog (Data Default SubTitles Title WidthCol-1 WidthCol-2 BtnsWidth BtnsLabel DPos
                                     / inc keys_A keys_B fd tmp dc defval res _CheckVal)
                                     
  (defun _CheckVal (Code Bit Val Key DataCV / tmp _Logand _IsBlank _IsSpaces _Pattern _UserList
                                   _Error _StrUnit _Nth _IsNumb res err)
    (if
      (and
        (not Code)
        (not Bit)
        Val
        Key
        (not DataCV)
      )
      (progn
        (setq
          DataCV (cadr(nth (vl-position Key keys_B) Data))
          Code (car DataCV)
          Bit (cadr DataCV)
        )
      )
    )
    (setq tmp Bit)
    (if (not fl) (setq Bit (apply (quote +) (mapcar (quote car) Bit))))
    (defun _Logand (b) (= b (logand Bit b)))
    (defun _IsBlank (s) (= s ""))
    (defun _IsSpaces (s) (not (vl-remove '32 (vl-string->list s))))
    (defun _Pattern (s) (not (wcmatch s (_Nth 3))))
    (defun _UserList (s) (member (strcase Val) (mapcar (quote strcase) (_Nth 4))))
    (defun _Error (b) (if (not fl) (setq err (cdr (assoc b tmp)))))
    (defun _StrUnit (s) (distof s 3))
    (defun _Nth (n / p)
      (if (setq p (vl-catch-all-apply (quote nth) (list n DataCV)))
        p
        (vl-catch-all-error-p p)
      )
    )
    (defun _IsNumb (s b / r)
      (if (setq r (_StrUnit s))
        (cond
          ( (and (= 1 (logand 1 b)) (numberp r)) ) ; liczba / number
          ( (and (= 2 (logand 2 b)) (zerop r)) )   ; zero   / zero
          ( (and (= 4 (logand 4 b)) (minusp r)) )  ; ujemna / negative
          ( T nil )
        )
      )
    )
    (cond
      ( (= Code 0) ; dowolny lancuch / any string
        (cond
          ( (and (_Logand 1) (_IsBlank Val)) (_Error 1) )  ; bez ""            / no ""
          ( (and (_Logand 8) (_IsSpaces Val)) (_Error 8) ) ; bez samych spacji / no spaces
          ( T (setq res Val) )
        )
      )
      ( (= Code 1) ; lancuch zgodny z nazwa tablicy / string consistent with table name
        (cond
          ( (and (_Logand 1) (_IsBlank Val)) (_Error 1) )           ; bez ""                  / no ""
          ( (and (_Logand 2) (not (snvalid Val))) (_Error 2) )      ; bez zlej nazwy snvalid  / no bad name
          ( (and (_Logand 4) (tblsearch (_Nth 2) Val)) (_Error 4) ) ; bez istniejacych nazw   / no existing name
          ( (and (_Logand 8) (_IsSpaces Val)) (_Error 8) )          ; bez samych spacji       / no spaces
          ( (and (_Logand 16) (_Pattern Val)) (_Error 16) )         ; pasujacy do wzorca      / match pattern
          ( (and (_Logand 32) (_UserList Val)) (_Error 32) )        ; nie wystepuje na liscie / does not appear in the list
          ( T (setq res Val) )
        )
      )
      ( (member Code (list 2 3)) ; INT = 2, REAL = 3
        (cond
          ( (and (_Logand 1) (_IsBlank Val)) (_Error 1) )                ; bez ""            / no ""
          ( (and (_Logand 2) (_IsNumb Val 2)) (_Error 2) )               ; bez zera          / no zero
          ( (and (_Logand 4) (_IsNumb Val 4)) (_Error 4) )               ; bez ujemnych      / no negative
          ( (and (_Logand 8) (_IsSpaces Val)) (_Error 8) )               ; bez samych spacji / no spaces
          ( (and (_Logand 16) (not (_IsNumb Val 1))) (_Error 16) )       ; tylko liczby      / only number
          ( (and (_Logand 32) (> (_Nth 2) (_StrUnit Val))) (_Error 32) ) ; liczba za mala    / number to small
          ( (and (_Logand 64) (< (_Nth 3) (_StrUnit Val))) (_Error 64) ) ; liczba za duza    / number to big
          ( T
            (setq res
              (if (_IsNumb Val 1)
                (if (= Code 2)
                  (itoa (fix (_StrUnit Val)))
                  (cd:CON_Real2Str (_StrUnit Val) (_Nth 4) (_Nth 5))
                )
                Val
              )
            )
          )
        )
      )
      ( T nil )
    )
    (if (and defval res)
      (set_tile Key res)
      (set_tile Key Val)
    )
    (if err
      (progn (set_tile "error" err) (mode_tile Key 2))
      (progn (set_tile "error" "") )
    )
    res
  )
  (if (not DPos) (setq *cd-TempDlgPosition* (list -1 -1)))
  (setq
    inc 0
    keys_A (mapcar '(lambda (%) (strcat "A_" (itoa (setq inc (1+ inc))))) SubTitles)
    inc 0
    keys_B (mapcar '(lambda (%) (strcat "B_" (itoa (setq inc (1+ inc))))) SubTitles)
  )
  (cond
    ( (not
        (and
          (setq fd
            (open
              (setq tmp (vl-FileName-MkTemp nil nil ".dcl")) "w"
            )
          )
          (foreach %
            (list
              (strcat
                "but : button { width = " (if BtnsWidth (itoa BtnsWidth) 13) "; fixed_width = true; }"
                "StdQuickOptionsDialog : dialog {"
                (if Title (strcat "label = \"" Title "\";") "")
                "  : column {"
                "    : row {"
                "      : column {"
              )
              (cd:STR_ReParse
                (mapcar
                  '(lambda (%1 %2)
                    (strcat ": text { key = \"" %2 "\";value = \"" %1 "\";width=" (if WidthCol-1 (itoa WidthCol-1) "20")";}" )
                  )
                  SubTitles
                  keys_A
                )
                " "
              )
              (strcat
                "      }"
                "      : column {"
              )
              (cd:STR_ReParse
                (mapcar
                  '(lambda (%1 %2)
                    (if (= (car %1) 1)
                      (strcat
                        ": popup_list {"
                        "key = \"" %2 "\";"
                        "width = "
                        (if WidthCol-2 (itoa WidthCol-2) "20")
                        ";}"
                      )
                      (strcat
                        ": edit_box {"
                        "key = \"" %2 "\";"
                        (if (caddr %1) (strcat "edit_limit = " (itoa (caddr %1)) ";") "")
                        "width = "
                        (if WidthCol-2 (itoa WidthCol-2) "20")
                        ";}"
                      )
                    )
                  )
                  Data
                  keys_B
                )
                " "
              )
              (strcat
                "      }"
                "    }"
                "  :   spacer_1 {}"
                "  : row { alignment = centered; fixed_width = true;"
                "  : but { key = \"" (car BtnsLabel) "\";"
                "    label = \"" (car BtnsLabel) "\"; is_default = true; }"
                "  : but { key = \"" (cadr BtnsLabel) "\";"
                "    label = \"" (cadr BtnsLabel) "\"; is_cancel = true; }"
                "  } "
                ;(if (setq fl (= (type (cadr Data)) (quote INT))) "" ": errtile { width = 20; }")
                ": errtile { width = 20; }"
                " }"
                "}"
              )
            )
            (write-line % fd)
          )
          (not (close fd))
          (< 0 (setq dc (load_dialog tmp)))
          (new_dialog "StdQuickOptionsDialog" dc ""
            (cond
              ( *cd-TempDlgPosition* )
              ( (quote (-1 -1)) )
            )
          )
        )
      )
    )
    ( T
      (mapcar
       '(lambda (%1 %2 %3)
          (if (= (car %1) 1)
            (cd:DCL_SetList %3 (cadr %1) (vl-position %2 (cadr %1)))
            (progn(setq
              defval (substr %2 1 (caddr %1)))
              (princ defval)
              (princ (type defval))
            (setq
              res (if (not (= defval "")) (_CheckVal (caadr %1) (cadadr %1) defval %3 (cadr %1)))
            ))
          )
        )
        Data
        Default
        keys_B
      )
      ; (setq defval (substr (caddr Data) 1 Limit)
            ; res (if (not (= defval "")) (_CheckVal (car Data) (cadr Data) defval))
      ; )
      ; (mode_tile "edit" 2)
      ; (action_tile "edit" "(setq res (_CheckVal (car Data) (cadr Data) $value))")
      (foreach %1 (mapcar 'cons keys_B Data)
        (if (= (cadr %1) 2)
          (action_tile (car %1)
            (vl-prin1-to-string
              (quote
                (progn
                  (_CheckVal (caadr (cdr %1)) (cadadr (cdr %1)) $value $key (cadr (cdr %1)))
                )
              )
            )
          )
        )
      )
      (action_tile (car BtnsLabel)
        (vl-prin1-to-string
          (quote
            (progn
              (setq res
                (mapcar
                 '(lambda (%1 %2)
                    (if (= (car %1) 1)
                      (nth (atoi (get_tile %2)) (cadr %1) )
                      (get_tile %2)
                    )
                  )
                  Data
                  keys_B
                )
              )
              (setq *cd-TempDlgPosition* (done_dialog 1))
            )
          )
        )
      )
      (action_tile (cadr BtnsLabel) "(setq res nil) (done_dialog 0)")
      (start_dialog)
    )
  )
  (if (< 0 dc) (unload_dialog dc))
  (if (setq tmp (findfile tmp)) (vl-file-delete tmp))
  (if (not DPos) (setq *cd-TempDlgPosition* (list -1 -1)))
  res
)

Testować przykładowo z:
Kod: Zaznacz cały
(defun c:tese ( /  )
  (cd:DCL_StdQuickOptionsDialog
    (list
      (list
        1
        (list "Tak" "Nie")
      )
      (list
        2
        (list
          3                                                                                   ;
          (list                                                                                   ;
            (cons 1 "Wprowadz liczbe rzeczywista")                                                ;
            (cons 2 "Liczba nie moze byc zerem")                                                  ;
            (cons 8 "Spacje niedozwolone")                                                        ;
            (cons 16 "To nie jest liczba")                                                        ;
            (cons 32 "Liczba jest za mala")                                                       ;
            (cons 64 "Liczba jest za duza")                                                       ;
          )
          ;19
          -100
          100
          2
          2                                                                       ;
        )
        10
      )
      (list
        2
        (list
          3                                                                                   ;
          (list                                                                                   ;
            (cons 1 "Wprowadz liczbe rzeczywista")                                                ;
            (cons 2 "Liczba nie moze byc zerem")                                                  ;
            (cons 8 "Spacje niedozwolone")                                                        ;
            (cons 16 "To nie jest liczba")                                                        ;
            (cons 32 "Liczba jest za mala")                                                       ;
            (cons 64 "Liczba jest za duza")                                                       ;
          )
          ;19
          -50
          20
          2
          2                                                                       ;
        )
        10
      )
      (list
        1
        (list "Kropka" "Przecinek")
      )
    )
    (list "Tak" "19" "19" "Kropka")
    (list
      "Czy wstawić punkt w środku:"
      "Wysokość tekstu:"
      "Odstęp tekstu:"
      "Separator:"
    )
    "Quick Settings"
    25
    25
    13
    (list "&Ok" "&Anuluj")
    T
  )
)

Jutro albo na dniach postaram się jeszcze sprawdzić kod, bo parę rzeczy można wywalić i opisze po co to i jak używać.