Trovare la lista di tutte le variabili di sistema per salvarle/ripristinarle all'ingresso/uscita di un lisp

x11start

Utente Standard
Professione: Disegnatore prefabbricati
Software: Autocad
Regione: Piemonte
Ormai da molti anni nei miei listati, utilizzo 2 semplici funzioni: MODES e MODER
... ed uso B_ERR per gestire le "uscite" improvvise dalla funzione, magari con il tasto ESC.
;
;---------------------------------
; Input Variabili ambiente
;---------------------------------
(defun MODES (a)
(setq mlst '())
(repeat (length a)
(setq mlst (append mlst (list (list (car a) (getvar (car a))))))
(setq a (cdr a))
)
)
;-----------------------------------
; Ripristina variabili ambiente
;-----------------------------------
(defun MODER ()
(repeat (length mlst)
(setvar (caar mlst) (cadar mlst))
(setq mlst (cdr mlst))
)
)
; ----------------------------------
; Error handler (gestione errore)
; ----------------------------------
(defun b_err (st)
(moder) ; Ripristina variabili memorizzate
(setq *error* olderr) ; Restore old *error* handler

;;;; Inserire qui altre variabili di sistema o comandi da eseguire prima dell'uscita

(princ) ; Esce senza nil
)

Queste funzioni mi permettono di salvare una lista di variabili di sistema in entrata:
;
(modes '("OSMODE" "ORTHOMODE" "LIMCHECK" "CMDECHO" "CLAYER" "ATTDIA"))
;

... e poi ripristinarne il valore all'uscita:
;
(moder)
;

Ma la mia intenzione sarebbe quello di farlo con TUTTE le variabili!
Questo mi permetterebbe di non avere più problemi se il lisp venisse usato su configurazioni particolarmente "esotiche" (!):

Recentemente ho lanciato un mio lisp perfettamente funzionante, sul pc di un mio amico ed il risultato non è stato quello voluto: lui utilizza lo zero verso l'alto e la rotazione oraria anzichè antioraria.
Il tutto si è risolto memorizzando e ripristinando (con MODES e MODER) le variabili ANGBASE e ANGDIR ... ma se io avessi salvato TUTTE le variabili, avrebbe funzionato tutto dall'inizio!

Dopo questa lunga premessa la mia domanda è: esiste un modo per estrarre la lista delle variabili di sistema?

Suppongo occorra armeggiare con TBLSEARCH ecc. ... e devo dire che non ci so fare molto!
Quindi chiedo cortesemente aiuto al forum!
 

smemo

Utente Standard
Professione: Tira Righe
Software: Autocad Notepad++
Regione: Veneto
guida della verione 2020, ma comunque valida per le versioni antecedenti
 

x11start

Utente Standard
Professione: Disegnatore prefabbricati
Software: Autocad
Regione: Piemonte
Grazie... questo puó essere un inizio..... ma cercheró di trovare un lisp da cui estrarre solo la parte di codice che mi serve.
Grazie comunque per la risposta.
 

x11start

Utente Standard
Professione: Disegnatore prefabbricati
Software: Autocad
Regione: Piemonte
Ho trovato un file su internet: una volta caricato (magari facendo il load da un'altro lisp), occorre salvare le variabili usando (SAVEV), poi all'uscita si ripristinano usando (RESTOREV).
Diciamo che si tratta di una soluzione forse un pò "grezza", in quanto le variabili vengono espressamente elencate nel listato e non "acquisite" con qualche 'magico' metodo TBLSEARCH...
Questo vuol dire che se intendiamo far girare questo lisp su GStarCAD su ZWCAD o PROGECAD, anzichè su Autocad... conviene fare prima un MODIVAR e fare copia/incolla delle variabili elencate (e poi eliminare quelle in sola lettura)...
Comunque mi sembra una soluzione interessante!
 

Allegati