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
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”
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))))
(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)))
(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)))
(grtext -1 “”)
(princ))
(setq qtd 10000)
(init-status qtd “processing…”)
(repeat qtd
(command)
(REDRAW)
(show-status))
(prompt “nFIM”)
(end-status))
(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”