Zobrazit plnou verzi příspěvku: přerušení lispu

Ferdinand
18.10.2007, 16:30
Dá se nějak zakomponovat do lispu, aby v případě přerušení běhu programu se přenastavené sys. prom. vrátily na původní hodnoty? Mám na mysli např. takový případ:
(defun FUNKCE (/ 1VY CLA OSM CDE ORM VWC ... )
  (setq 1VY (getvar "sdi"))
  (setq CLA (getvar "clayer"))
  (setq OSM (getvar "osmode"))
  (setq CDE (getvar "cmdecho"))
  (setq ORM (getvar "orthomode"))
  (setq VWC (getvar "viewctr"))
...atd
začátek procedur...
...
...zde se to zasekne a odporoučí se...
 
Tj. chtěl bych, aby 1VY CLA OSM CDE OSM VWC ... se než CAD spadne, nastavily na
  (setvar "sdi" 1VY)
  (setvar "clayer" CLA)
  (setvar "osmode" OSM)
...atdFerdinand2007-10-18 16:34:20

Vladimír Michl
18.10.2007, 16:41
Většina řízených přerušení se dá odchytit přes errorhandler - viz funkce *error*.

svarc.vl
18.10.2007, 17:49
příklad
;zacatek prg
(defun *error* (msg)(if (/= uchst nill)(progn
                         (setvar "osmode" uchst)
                         (setvar "clayer" hl)
                         );konec progn
);konec if(princ "error: ")
 (princ msg)  (princ)
);konec defun
;zacatek prg;uchovani uchopu(setq uchst (getvar "osmode"))
(setq hl (GETVAR "CLAYER"))(setvar "cmdecho" 0)
.
.
.
.
.
.
;nastaveni uchopu na konci prg(setvar "osmode" uchst)(setvar "clayer" hl)
 
doufan ze tam nejsou chyby, dopisoval jsem to bez cadu