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))))
(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))
(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