Тема: Как написать Lisp для DCL с операциями вычислений

Опыта у меня мало, одному разобраться трудно. Прошу откликнуться. С DCL - понятно, а дальше ...
dd_buttonn : dialog {
label = "Расчет однофазного тока";
: boxed_column {label = "Расчет однофазного тока";
:row {
:text {label = "Мощность, кBт";}
:edit_box { key = "M"; value = ""; edit_width = 6; alignment = center; initial_focus = true;
}
}
:row {
:text {label = "Соs" ;}
:edit_box { key = "C"; value = "1"; edit_width = 6; alignment = center; initial_focus = true;
}
}
:row {
:text {label = "КПД" ;}
:edit_box { key = "K"; value = "1"; edit_width = 6; alignment = center; initial_focus = true;
}
}
:row {
:text {label = "Ток, A" ;}
:edit_box { key = "T"; value = ""; edit_width = 6; alignment = center; initial_focus = true;
}
}
:spacer { height=1;}
ok_cancel;
}
}

Re: Как написать Lisp для DCL с операциями вычислений

Еще пример, чуть проще, но тоже не работает. Как вставить в окно DCL итог. Может кто то подскажет
test : dialog {
  label = "TEST";
  : column {
    : edit_box {
      label = "A";
      key = "sl1";
      value = "";
      initial_focus = true;
    }
    : edit_box {
      label = "B";
      key = "sl2";
      value = "";
      initial_focus = true;
    }
    : edit_box {
      label = "C";
      key = "sl3";
      value = "1";
      initial_focus = true;
    }
    : edit_box {
      label = "A*B*C";
      key = "sum";
      value = "";
      initial_focus = true;
    }
    ok_cancel;
  }
}

Re: Как написать Lisp для DCL с операциями вычислений

(defun C:test (/ AA BB CC)
  (setq dcl_id (load_dialog "test.dcl"))
  (if (not (new_dialog "test" dcl_id)) (exit))
  (set_tile "sl1" "")
  (set_tile "sl2" "")
  (set_tile "sl3" "1")
  (set_tile "sum" "")
  (action_tile "sl1" "(setq AA &value)")
  (action_tile "sl2" "(setq BB &value)")
  (action_tile "sl3" "(setq CC &value)")
  (action_tile "sum" "(setq DD &value)")
  (action_tile
    "Cancel"
    "(setq act nil) (done_dialog)"
  )                   
  (action_tile
    "Accept"
    "(CYMMA) (done_dialog)"
  )                   
  (start_dialog)           
  (unload_dialog dcl_id)       
  (defun CYMMA ()
    (if    (< (atoi (get_tile "sum")) 0)
      (progn
    (set_tile
      "sum"
      "(rtos(* (atof (get_tile \"sl1\")) (atof (get_tile \"sl1\")) (atof (get_tile \"sl1\"))))"
    )
      )
    )                   
  )
(princ)
)

Re: Как написать Lisp для DCL с операциями вычислений

> Victor

(defun C:test (/ AA BB CC DD)
(setq dcl_id (load_dialog "test.dcl"))
(if (not (new_dialog "test" dcl_id)) (exit))
(action_tile "sl1" "(setq AA (get_tile \"sl1\"))")
(action_tile "sl2" "(setq BB (get_tile \"sl2\")))")
(action_tile "sl3" (strcat
"(progn (setq CC (get_tile \"sl3\"))"
"(set_tile \"sum\""
"(rtos (* (atof AA) (atof BB) (atof CC))))"
"(setq DD (get_tile \"sum\")))"
))
(action_tile
"Cancel"
"(setq act nil) (done_dialog 0)"
)
(action_tile
"Accept"
"(done_dialog 1)"
)
(setq click (start_dialog))
(unload_dialog dcl_id)
(if (> click 0)
  (alert (strcat "A = " AA "\n"
         "B = " BB "\n"
         "C = " CC "\n"
         "A*B*C = " DD)))
(princ)
)

Re: Как написать Lisp для DCL с операциями вычислений

> Victor
После ввода в третье окно жмем Enter
~'J'~