Newsgroup: it.comp.software.cad
Titolo: LISP - Elenco variabili locali

Ciao a tutti,
sto realizzando un software sviluppato in linguaggio LISP piuttosto 
complesso con centinaia di variabili con i nomi più disparati.
Ora vorrei annullare tutte queste variabili in modo che non utilizzino le 
risorse del PC.
Di solito le inserisco nella prima riga di ogni funzioni:
(defun c:prova (\ var1 va2 var3...)
dove var1, var2, var3 sono le variabili da annullare una volta conclusa la 
funzione.
Tuttavia trattandosi di molte variabili mi è difficile continuare ad 
utilizzare questo metodo sopratutto perchè mi è difficile ricavare un elenco 
delle variabili utilizzate.
E' possibile in qualche modo avere l'elenco di tutte le variabili attive 
(diverse da quelle di AutoCAD)? oppure in alternative un sistema per 
annullarle tutte?
Ringrazio tutti in anticipo.
Ciao
-- 
Emiliano - Webmaster di EmiCAD® - Tutto per AutoCAD e ProgeSOFT® IntelliCAD
e-mail:  
webm...@emicad.it
web:  
www.emicad.it
 

Ciao Emiliano,
1) modifica le righe indicate:
  a) prefissi nomi delle funzioni o variabili
  b) nomi interi delle variabili
  (io uso il prefisso "#" per le variabili globali (vere)
   e "ALE_" per i nomi delle mie funzioni)
2) carica (load) il lisp seguente e lancia il comando ALE_Leak
3) carica la tua funzione che vuoi controllare
4) rilancia il comando ALE_Leak
--
Anche con la compilazione in FAS puoi vedere:
; (COMPILAZIONE FILE st (C:/xxx.lsp))
[Analisi file "C:/xxx.lsp"]
[COMPILAZIONE C:/xxx.lsp]
;;C:xxx
; === STATISTICHE: C:xxx
;             globali esterne sono (X)
il problema è che vedi anche variabili globali
che in realtà non lo sono
...
--
Ciao.
Marco
; -------------------------------------------------------
; Credits R. Robert Bell, MCSE
(setq *TempLeak* nil) ; pulisce la variabile con (re)load
;
(defun C:ALE_Leak  (/ lVars orgAtoms)
  (cond
    ( *TempLeak*
      (setq orgAtoms *TempLeak*)
      (princ "\nRicerca atomi non-localizzati...")
      (foreach atomVar (atoms-family 1)
        (ALE_FUZZY nil)
        (cond
          ( (member atomVar orgAtoms)
            (setq orgAtoms (vl-remove atomVar orgAtoms))
          )
          ( (wcmatch atomVar
              "`#*,C:*,ALE_*,VLA-*,VLAX-*,:VLR-*,VLR-*"
               ; a > Prefissi: modifica questa riga
            )  ; usare le maiuscole in wcmatch
          )
          ( (setq lVars (cons atomVar lVars)) )
        )
      )
      (princ " fatto.\nAtomi non-localizzati: ")
      (if lVars
        (foreach atomVar  lVars
          (princ (strcat atomVar " "))
        )
        (princ "nessun atomo trovato.")
      )
    )
    (T
      (princ "\nInizializza la lista degli atomi... ")
      (setq *TempLeak*
        (append
          '("*TEMPLEAK*" "ORGATOMS" "#SPIN" "*LAST-VALUE*")
           ; b > Nomi interi: modifica questa riga
           (atoms-family 1)
        )
      )
      (princ " fatto.")
    )
  )
  (princ)
)
; Funzione per ottenere un trattino rotante e determinare una attesa in base
; al numero dato come argomento.
; se count = nil si ottiene una sola rotazione del trattino
;
(defun ALE_Fuzzy (Countr /)
  (if Countr
    (progn
      (princ "Elaborazione in corso...  ")
      (while (> Countr 1)
        (princ (strcat (chr 8) "|")) (princ) (princ (strcat (chr 8) "/" )) 
(princ)
        (princ (strcat (chr 8) "-")) (princ) (princ (strcat (chr 8) "\\")) 
(princ)
        (setq Countr (1- Countr))
      )
      (prompt "\n \n \n ")
    );progn
    (progn
      (or #spin (setq #spin "Elaborazione in corso...  -"))
      (princ (strcat (chr 8) #spin)) (princ)
      (cond
        ( (equal #spin  "-") (setq #spin "\\")) ( (equal #spin "\\") (setq 
#spin "|" ))
        ( (equal #spin  "|") (setq #spin "/" )) (T (setq #spin 
      )
      )
    );progn
  );if
  (princ)
);defun ALE_Fuzzy
-- 
Marc'Antonio Alessi
http://xoomer.virgilio.it/alessi
(strcat "NOT a " (substr (ver) 8 4) " guru.")
--

 ha scritto nel messaggio 
news:wAKZe.19103$pJ6.1...@news4.tin.it...
