Тема: Калькулятор для набора
Lsp
(DEFUN C:prb (/ chis nabor nn znac t2 dim ch ch1 zn2 i dcl_id r2 pp) (alert "Выберете строки содержащие \nчиловые значения, для \nдольнейшей операции с ними" ) (SETQ dim (getvar "dimzin") nabor (SSGET '((0 . "*text"))) nn (SSLENGTH nabor) i -1 ch1 1 zn2 1 pp 2 ) (if (< (setq dcl_id (load_dialog "D:\\Геодезия\\Лисп\\My1.DCL")) 0 ) (exit) ) (new_dialog "my_dial" dcl_id) (action_tile "accept" "(setq ch (atof (get_tile \"chislo\"))) (setq znak (atoi (get_tile \"zzn\"))) (done_dialog)" ) (mode_tile "zzn" 1) (action_tile "r1" "(setq ch1 1)") (action_tile "r2" "(setq ch1 2)") (action_tile "r3" "(setq ch1 3)") (action_tile "r4" "(setq ch1 4)") (action_tile "c1" "(setq zn2 1) (mode_tile \"zzn\" 1)") (action_tile "c3" "(setq zn2 3) (mode_tile \"zzn\" 1)") (action_tile "c4" "(setq zn2 4) (mode_tile \"zzn\" 1)") (action_tile "c5" "(setq zn2 5) (mode_tile \"zzn\" 1)") (action_tile "c6" "(setq zn2 6) (mode_tile \"zzn\" 1)") (action_tile "c7" "(setq zn2 7) (mode_tile \"zzn\" 0)") (action_tile "p1" "(setq pp 1) ") (action_tile "p2" "(setq pp 2) ") (start_dialog) (setvar "dimzin" 1) (REPEAT nn (setq r2 (vl-string-subst "." "," (CDR (ASSOC 1 (ENTGET (SSNAME nabor (SETQ i (1+ i))))) ) ) ) (if (wcmatch r2 "*@*") () (progn (SETQ chis (ATOF r2) z2 (cond ((= zn2 1) (- (strlen (vl-string-subst "" "+" (vl-string-subst "" "." r2))) (strlen (rtos (atof r2) 2 0)) ) ) ((= zn2 3) 0) ((= zn2 4) 1) ((= zn2 5) 2) ((= zn2 6) 3) ((= zn2 7) znak) ) t2 (ENTGET (SSNAME nabor i) ) znac (cond ((= ch1 1) (+ ch chis)) ((= ch1 2) (- ch chis)) ((= ch1 3) (* ch chis)) ((= ch1 4) (/ chis ch)) ) znac (if (minusp znac) (rtos znac 2 z2) (cond ((= pp 1) (strcat "+" (rtos znac 2 z2))) ((= pp 2) (rtos znac 2 z2)) ) ) t2 (SUBST (CONS 1 znac ) (ASSOC 1 t2) t2 ) ) (entmod t2) (entupd (entlast)) ) ) ) (setvar "dimzin" dim) (unload_dialog dcl_id) (princ) )
Dcl
my_dial: dialog{label="Калькулятор"; :row{label=""; :column{label="";children_fixed_height=true; :radio_column{label="Чё делать будем?";key="k1"; :radio_button{label="число + набор";key="r1";value="1";} :radio_button{label="число - набор";key="r2";value="0";} :radio_button{label="число * набор";key="r3";value="0";} :radio_button{label="набор / число";key="r4";value="0";} } :edit_box{label="Число"; key="chislo"; value="0"; edit_width=6;} :radio_column{label="Ставить \"+\" ?";key="p01"; :radio_button{label="Да";key="p1";value="0";} :radio_button{label="Нет";key="p2";value="1";} } } :column{label="";children_alignment=top; :radio_column{label="Число знаков после запятой?";key="c01"; :radio_button{label="как в исходном";key="c1";value="1";} :radio_button{label="0";key="c3";value="0";} :radio_button{label="1";key="c4";value="0";} :radio_button{label="2";key="c5";value="0";} :radio_button{label="3";key="c6";value="0";} :radio_button{label="другое";key="c7";value="0";} } :edit_box{label="Число знаков"; key="zzn"; value="4"; edit_width=6;} }} ok_button; }