Zobrazit plnou verzi příspěvku: prodleva

Ferdinand
13.12.2007, 11:05
Snažím se vytvořit utilitku pro zadání volitelné prodlevy při provádění nějaké subrutiny, abych postřehl proběhlé změny na obrazovce. Nějak se mi to nedaří odladit. Když lisp po řádcích resp. po logických celcích nakopíruji do p.ř., provede se vše.  Když si lisp načtu a spustím, neprovede se nic (výsledek je "nil").
uploads/20071213_110441_prd.lsp

pavelstyl
13.12.2007, 11:39
Co treba takhle
Pavel Styl
 
(defun C:PRD (/ CAS MM)    (if (> CAS 0)    (setq CAS 0)  )  (setq MM (getint "\nZadejte délku prodlevy (ms) : <2000> "))  (if (= MM nil)    (setq CAS 2000)    (setq CAS MM)  )  (command "_delay" CAS)  (princ))

Ferdinand
13.12.2007, 13:27
Pavle, je to pořád to stejné - výsledek je "nil".
Příklad: Ve výkresu již byla nastavena prom. CAS=5000. Načtu lisp, volám fci PRD, a dívám se, jestli tu zadanou hodnotu opravdu přiřadila:
Command: _appload prd.lsp successfully loaded.
Command: prd
Zadejte délku prodlevy (ms) : <2000> 1111_delay Enter delay time (in milliseconds): 1111Command:Command: !cas5000
Command: !mmnil
To stejné i pro případ, když <2000> odentruji.
Když to řádek po řádku nakopíruji do p.ř., tak:
Command: (if (> CAS 0)(_>     (setq CAS 0)(_>   )0
Command: (setq MM (getint "\nZadejte délku prodlevy (ms) : <2000> "))
Zadejte délku prodlevy (ms) : <2000> 11111111
Command: (if (= MM nil)(_>     (setq CAS 2000)(_>     (setq CAS MM)(_>   )1111
Command: (command "_delay" CAS)_delay Enter delay time (in milliseconds): 1111Command: nil
Command: !cas1111
Command: !mm1111
1. Zdá se, že se to zarazí po tom "delay" a nechce to dokončit celý. Ale i když v lispu to vynechám, tak je to stejné...
2. Pokud ;(command "_delay" 250) v původním lispu:
Command: _appload prd.lsp successfully loaded.
Command: prd
Zadejte délku prodlevy (ms) : <2000> 33333333
Command:Command: !cas5000
Command: !mm0
Upřesnění: jde mi o to, získat prom. CAS se zadanou hodnotou od uživatele, kterou pak mohu použít v jiných aplikacích. Ten "delay" (s hodnotou 250) tam mám pouze jaksi "navíc", pro pozdržení (jak to bude chodit OK, pak to odmažu). Právě proto mi bylo divné, že i když CAS v lispu by se měla vynulovat, zůstává ji přiřazena pořád ta původní hodnota.

pavelstyl
13.12.2007, 14:05
No a není celý problém způsoben tím, že promněnná CAS je lokální?
Pokud chci, aby přiřazená hodnota v proměnné CAS zůstala i po ukončení funkce, tak ta hlavička musí být bez proměnné CAS
 
(defun C:PRD (/ MM)
...
Pavel Styl