DCL檔 轉 LISP檔
本帖最后由 lee50310 于 2022-5-12 07:00 编辑分享一個以前寫的程式 DCL檔 轉 LISP檔
這是一個可以將 dcl檔轉換 為lisp檔的程式 可以讓兩者結合成一個lisp檔
在程式執行上更為方便
執行指令:DCL2LSD
以demo.dcl 及 demo,lsp為例
demo.dcl
demo : dialog {
label = "demo.lsp";
: column {
: boxed_column {
label = "選擇一個功能";
: popup_list {
key = "funct";
width = 18.0;
fixed_width = true;
alignment = centered;
}
: spacer {
height = 0;
}
}
: button {
label = "&ok";
key = "accept";
width = 18;
fixed_width = true;
alignment = centered;
is_default = true;
}
: button {
label = "&exit";
key = "cancel";
width = 18;
fixed_width = true;
alignment = centered;
is_cancel = true;
}
}
}
demo.lsp(defun c:demo (/ dcl_id funct funct_list)
(or f:unct (setq f:unct 0))
(setq funct_list (list "demo 1" "demo 2" "demo 3"))
(setq dcl_id (load_dialog "demo.dcl"))
(if (not (new_dialog "demo" dcl_id))
(exit))
(start_list "funct")(mapcar 'add_list funct_list)(end_list)
(if f:unct-def (set_tile "funct" (itoa f:unct-def)))
(action_tile "accept"
(strcat
"(progn (setq f:unct (atoi (get_tile \"funct\")) f:unct-def f:unct)"
"(done_dialog)(setq button t))"))
(action_tile "cancel" "(done_dialog)(setq button nil)")
(start_dialog)
(unload_dialog dcl_id)
(setq funct f:unct)
(if button
(cond
((= funct 0)(alert "您選擇了範例 1"))
((= funct 1)(alert "您選擇了範例 2"))
((= funct 2)(alert "您選擇了範例 3"))))
(princ))
**** Hidden Message *****
本帖最后由 lee50310 于 2022-6-6 09:09 编辑
將上面2個檔 demo.lsp及demo.dcl 放在 d:\demo 路徑下
執行 DCL2LSP程式選擇要轉換的dcl檔選擇d:\demo\ 路徑下的 demo.dcl
轉換為 lisp
轉換成功後會在該目錄下 產生一個 DCL_demo.lsp 檔
依照下面的步驟操作
編輯DCL_demo.lsp ,demo.lsp
(1)將 DCL_demo.lsp 內容複製並 貼在demo.lsp 程式內容的上方
(2)並將
;<<<<<< 設定 DCL>>>>>>
(vl-load-com) (demo_DCL); 在螢幕上顯示DCL
上方此2行 搬移 覆蓋 程式 標示(1)(2)(3) 這三行 即可
(defun c:demo (/ dcl_id funct funct_list)
(or f:unct (setq f:unct 0))
(setq funct_list (list "demo 1" "demo 2" "demo 3"))
(setq dcl_id (load_dialog "demo.dcl")) ;原載入dcl---(1)
(if (not (new_dialog "demo" dcl_id)) ; ---(2)
(exit)) ; ---(3)
(start_list "funct")(mapcar 'add_list funct_list)(end_list)
編輯好後另存demo2.lsp
demo2.lsp;***********************************************************************************************
;<<<<<< 設定 DCL>>>>>>
(defun demo_DCL ()
(not (and (setq dcl_file (open (setq tmp (vl-filename-mktemp nil nil".DCL")) "w"))
(progn
(foreach x
'(
"//"
"//"
"//"
"demo : dialog {"
" label = \"demo2.lsp\";"
" : column {"
" : boxed_column {"
" label = \"選擇一個功\能\";"
" : popup_list {"
" key = \"funct\";"
" width = 18.0;"
" fixed_width = true;"
" alignment = centered;"
" }"
" : spacer {"
" height = 0;"
" }"
" }"
" : button {"
" label = \"&ok\";"
" key = \"accept\";"
" width = 18;"
" fixed_width = true;"
" alignment = centered;"
" is_default = true;"
" }"
" : button {"
" label = \"&exit\";"
" key = \"cancel\";"
" width = 18;"
" fixed_width = true;"
" alignment = centered;"
" is_cancel = true;"
" }"
" }"
" }"
) (write-line x dcl_file) )
(setq dcl_file (close dcl_file))
(< 0 (setq dcl_id (load_dialog tmp)))
) (if (not (new_dialog "demo" dcl_id)) (exit))
) ) )
;***********************************************************************************************
(defun c:demo (/ dcl_id funct funct_list)
(or f:unct (setq f:unct 0))
(setq funct_list (list "demo 1" "demo 2" "demo 3"))
;<<<<<< 設定 DCL>>>>>>
(vl-load-com) (demo_DCL); 在螢幕上顯示DCL
(start_list "funct")(mapcar 'add_list funct_list)(end_list)
(if f:unct-def (set_tile "funct" (itoa f:unct-def)))
(action_tile "accept"
(strcat
"(progn (setq f:unct (atoi (get_tile \"funct\")) f:unct-def f:unct)"
"(done_dialog)(setq button t))"))
(action_tile "cancel" "(done_dialog)(setq button nil)")
(start_dialog)
(unload_dialog dcl_id)
(setq funct f:unct)
(if button
(cond
((= funct 0)(alert "您選擇了範例 1"))
((= funct 1)(alert "您選擇了範例 2"))
((= funct 2)(alert "您選擇了範例 3"))))
(princ))
這樣就能 一個檔案執行了demo2.lsp
回帖,就是对楼主最大的支持 感谢分享,这是非常优秀的资源。 很不错,赞一个 真是难得的好帖子啊 我们支持楼主,希望楼主继续分享 我们支持楼主,希望楼主继续分享
我们支持楼主,希望楼主继续分享 我们支持楼主,希望楼主继续分享
页:
[1]
2