VLX e a tecla ESC

Já compilaram suas rotinas para VLX? que opções vocês usaram?
Pergunto isso, pois sempre compilo as minhas para este formato, seja para proteger o código, seja para colocar os *.lsp e *.dcl num arquivo apenas... Bom, mas minha dúvida aqui é o seguinte: quando compilada a rotina VLX, com a opção "Separate NameSpace" habilitada, a tecla ESC já não cancela mais a rotina... Estranho não?
Agora imagine que seu programa faça alguma operação bem demorada, e você decide interromper a execução dele? o que você vai fazer, já que a tecla ESC não cancela mais a execução? ver a rotina
(defun expandlist (el qtd / lst)
  (
repeat qtd (setq lst (cons el lst))))

(
defun init-status (maxvalue msg)
  (
setq status:delta (/ maxvalue 100.0)
        status:str   (apply 'strcat (expandlist (chr 160) 100))
        status:index 0
        status:looping 0
        status:msg msg)
  (
grtext -1 (strcat msg " 00 %" status:str)))

(
defun show-status nil
  (if (>= status:looping (* status:delta status:index))
    (
progn
      (setq status:str (vl-string-subst "|" (chr 160) status:str)
            status:index (1+ status:index))
      (
grtext -1 (strcat status:msg " "
                         (if (< status:index 10) "0" "")
                         (
itoa status:index) " %" status:str))))
  (
setq status:looping (1+ status:looping)))

(
defun end-status nil
  (grtext -1 "")
  (
princ))

(
defun c:teste (/ qtd)
  (
setq qtd 10000)
  (
init-status qtd "processing...")
  (
repeat qtd
    (command)
    (
REDRAW)
    (
show-status))
  (
prompt "\nFIM")
  (
end-status))

Faça o teste, compile a rotina acima para VLX com o Separate NameSpace marcado, carregue o VLX e rode... tente cancelar a rotina, depois tente o mesmo, deixando Separate NameSpace desmarcado... Numa delas você verá um "FIM" na linha de comando, na outra verá o famigerado "Function Cancelled"

Nenhum comentário:

Postar um comentário