Lisp »Tips 'n Tricks »Esempio in Lisp e DCL Ecco un listato in Lisp e DCL per vedere come si scambiano i dati una finestra di dialogo con un programma LISP. ;numero.lsp (C) by Claudio Piccini ;scrive un numero nella riga di comando :precedentemente digitato all'interno ;di una finestra di dialogo (defun defaults () (setq nNum 1) ; imposta la variabile nNum = 1 ; ; (set_tile chiave valore) ; imposta il valore della casella della finestra ; di dialogo. ; L'argomento chiave è una stringa che ; indica la casella, mentre valore è una ; stringa che attribuisce un nome al ; nuovo valore da assegnare. (set_tile "sN" "1") ) (defun do_sN() ; atof : restituisce la conversione di una stringa ; in un numero reale ; atoi : restituisce la conversione di una stringa ; in un numero intero ; ; (get_tile chiave) ; indica il valore corrente della casella di ; editazione nella finestra di dialogo ; ; (setq nNum valore) ; salva nella variabile nNum il numero digitato ; (setq nNum (atof (get_tile "sN"))) ) (defun C:NUMERO ( / ok_c dcl_id nNum) (setvar "cmdecho" 0) (setq ok_c 1) ; ; (load_dialog stringa) ; carica il file DCL, contenuto nell'argomento 'stringa' ; la funzione restituisce un numero intero positivo ; se trova e apre il file, intero negativo se non ; riesce ad aprire il file. ; Il numero è salvato nella variabile dcl_id. ; Se (if) dcl_id è minore di 0 fine del programma! ; (if (< (setq dcl_id (load_dialog "c:/pick/lisp/numero.dcl")) 0) (exit) ) ; ; (new_dialog nome_dcl dcl_id) ; attiva la finestra di dialogo 'numero.dcl' ; con il numero identificativo dcl_id ; (ricavato dalla funzione load_dialog) ; Se l'esito è positivo new_dialog ; restituisce T (vero), ; altrimenti restituisce nil (falso). ; ; (not elem) ; verifica se ad un elemento è stato assegnato ; il valore nil ; Restituisce T se ad elem è stato assegnato nil, ; altrimenti restituisce nil. ; (if (not (new_dialog "numero" dcl_id)) (exit) ) ; ; chiama la funzione defaults ; (defaults) ; ; (action_tile chiave espressione-azione) ; assegna un'azione da valutare quando l'utente seleziona ; la casella specificata nella finestra di dialogo ; o preme un tasto. ; ; (done_dialog) ; chiude la finestra di dialogo ; (action_tile "sN" "(do_sN)") (action_tile "accept" "(done_dialog)") (action_tile "cancel" "(setq ok_c 0)") ; ; (start_dialog) ; visualizza la finestra di dialogo. ; (start_dialog) ; ; (unload_dialog dcl_id) ; scarica il file DCL identificato dalla variabile dcl_id ; (unload_dialog dcl_id) (if (= 1 ok_c) (progn ;tasto OK (princ "Numero ") (princ nNum) (princ) ) (progn ;tasto ANNULLA (alert "Il numero non e' stato digitato") ) ) ) Riquadro di dialogo del comando LISP numero.lsp /* dcl_setting Livelli di verifica semantica: 0 Nessun controllo 1 Errori. Individua gli errori DCL che possono causare l'interruzione di AutoCAD. Livello di default. 2 Avvertimenti. 3 Suggerimenti. */ dcl_settings : default_dcl_settings { audit_level = 1; } numero : dialog { label = "numero.lsp"; //etichetta : column { : row { : boxed_column { //disegna una cornice : edit_box { //casella di modifica //etichetta label = "Scrivi un numero: "; // specifica un nome ASCII utilizzato dal lisp // per far riferimento a questa casella. key = "sN"; // valore iniziale contenuto nella casella value = "1"; //battendo n si attiva la casella mnemonic = "n"; edit_width = 7; } } } } ok_cancel; //pulsanti OK e Annulla. //ok_only; pulsante unico. } |