关于LISP和DCL的合并问题的另一种解决办法
运行一个CAD程序需要两个文件,当然不是很方便,可以使用编译的方法,在R14下将LSP和DCL文件编译成ARX后成了怪物,文件增大了上百倍,而且与高版本的CAD不兼容,在2004下编译为VLX文件后,又不能在低版本的CAD下运行.如果将DCL文件的源码由LSP写入,并保存在某个目录下,再由LSP调用,那么是否就可以合二为一了?有了这个思路,那么这个转换的过程完全可以由程序来办.
LISP的事还是靠LISP来完成吧,以下程序就是将DCL文件转换为我们想要的结果.
<BR>(defun c:dcl( / df_row df_roc )<BR> (if (not df_row) (setq df_row "")) <BR> (setq df_row (getfiled "打开DCL文件" df_row "dcl" 2)) <BR> (if df_row (zhhuan) (princ "\n 未选择DCL文件"))<BR> (princ)<BR>)<BR>(defun zhhuan()<BR> (setq df_roc (getfiled "保存dcl-LSP文件" df_row "lsp" 1))<BR> (if df_roc (p_yx)(princ "\n 未保存dcl-LSP文件") )<BR>)<BR>(defun p_yx()<BR> (setq f_dat (open df_row "r"))<BR> (setq f_wrt (open df_roc "w"))<BR> (setq bc_txt "" )<BR> (write-line "(defun ydcl()" f_wrt)<BR> (write-line (strcat "(setq f_dcl (open \"" (f_name df_row) "\" \"w\"))") f_wrt)<BR> (while (setq txt_row1 (read-line f_dat))<BR> (setq bc_txt (strcat "(write-line \"" (tt_fk txt_row1) "\" f_dcl)"))<BR> (write-line bc_txt f_wrt) <BR> )<BR> (write-line "(close f_dcl))" f_wrt)<BR> (princ "\n 文件保存在")<BR> (princ df_roc)<BR> (close f_wrt)(close f_dat)<BR>)
(defun tt_fk(tt / k tr_k tr_kn nn a)<BR> (setq nn (strlen tt) k 0 tr_k "" a "\"")<BR> (while (<= k nn) <BR> (if (= (setq tr_kn (substr tt (setq k (+ k 1)) 1)) a)<BR> (setq tr_k (strcat tr_k "\\" tr_kn))<BR> (setq tr_k (strcat tr_k tr_kn))<BR> )) tr_k<BR>)<BR>(defun f_name(tt / k tr_k tr_kn nn a)<BR> (setq nn(strlen tt) nn (1+ nn) tr_k "")<BR> (while (/= "\\" (setq tr_kn (substr tt (setq nn (- nn 1)) 1))) <BR> (setq tr_k (strcat tr_kn tr_k))<BR> )<BR>);yxp制作于2004.11.18<BR>
需要注意的是,在LSP中调用DCL完毕后,对产生的垃圾DCL文件需要用其他程序来删除..
方法较笨,高手勿笑,也可能其他人已经解决了这个问题.
回复
参考:<A href="dispbbs.asp?boardID=16&ID=24805&page=3" target="_blank" >dispbbs.asp?boardID=16&ID=24805&page=3</A>
和你的思路是一样的吧? 楼上的斑竹
说实话我还是没有明白你的意思. 再罗嗦一下,
运行DCL程序后,将生成的LISP代码复制到你需要合并的LISP文件里作为子程序
在调用DCL对话框之前,调用这个子程序即可.原创哦. lisp生成文件 这样的调用 会不会被360当作病毒呢?
页:
[1]