乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 1.7K|回复: 14

[程序分享] DCL檔 轉 LISP檔

[复制链接]

75

主题

335

帖子

1059

银币

版主

Rank: 10Rank: 10

铜币
628
发表于 2022-5-11 12:47:11 | 显示全部楼层 |阅读模式
本帖最后由 lee50310 于 2022-5-12 07:00 编辑

分享一個以前寫的程式 DCL檔 轉 LISP檔
這是一個可以將 dcl檔轉換 為lisp檔的程式 可以讓兩者結合成一個lisp檔
在程式執行上更為方便
執行指令:DCL2LSD

以demo.dcl 及 demo,lsp為例

demo.dcl
  1. demo : dialog {
  2.       label = "demo.lsp";
  3.       : column {
  4.         : boxed_column {
  5.           label = "選擇一個功能";
  6.           : popup_list {
  7.             key = "funct";
  8.             width = 18.0;
  9.             fixed_width = true;
  10.             alignment = centered;
  11.           }
  12.           : spacer {
  13.             height = 0;
  14.           }
  15.         }
  16.         : button {
  17.           label = "&ok";
  18.           key = "accept";
  19.           width = 18;
  20.           fixed_width = true;
  21.           alignment = centered;
  22.           is_default = true;
  23.         }  
  24.         : button {
  25.           label = "&exit";
  26.           key = "cancel";
  27.           width = 18;
  28.           fixed_width = true;
  29.           alignment = centered;
  30.           is_cancel = true;
  31.         }
  32.       }
  33.     }


demo.lsp
  1. (defun c:demo (/ dcl_id funct funct_list)
  2. (or f:unct (setq f:unct 0))
  3. (setq funct_list (list "demo 1" "demo 2" "demo 3"))
  4. (setq dcl_id (load_dialog "demo.dcl"))
  5. (if (not (new_dialog "demo" dcl_id))
  6. (exit))
  7. (start_list "funct")(mapcar 'add_list funct_list)(end_list)
  8. (if f:unct-def (set_tile "funct" (itoa f:unct-def)))
  9. (action_tile "accept"
  10.    (strcat
  11.     "(progn (setq f:unct (atoi (get_tile "funct")) f:unct-def f:unct)"            
  12.            "(done_dialog)(setq button t))"))
  13. (action_tile "cancel" "(done_dialog)(setq button nil)")
  14. (start_dialog)
  15. (unload_dialog dcl_id)
  16. (setq funct f:unct)
  17. (if button
  18.    (cond
  19.      ((= funct 0)(alert "您選擇了範例 1"))
  20.      ((= funct 1)(alert "您選擇了範例 2"))
  21.      ((= funct 2)(alert "您選擇了範例 3"))))
  22. (princ))

GI2.gif

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复





评分记录银币 收起 理由
admin + 20 原创资源,奖励!
总评分: 银币 + 20 
回复

使用道具 举报

75

主题

335

帖子

1059

银币

版主

Rank: 10Rank: 10

铜币
628
发表于 2022-5-11 12:47:35 | 显示全部楼层
本帖最后由 lee50310 于 2022-6-6 09:09 编辑

將上面2個檔 demo.lsp及demo.dcl 放在 d:\demo 路徑下
執行 DCL2LSP程式  選擇要轉換的dcl檔  選擇d:\demo\    路徑下的 demo.dcl
轉換為 lisp
轉換成功後會在該目錄下 產生一個 DCL_demo.lsp 檔

依照下面的步驟操作
  1. 編輯DCL_demo.lsp ,demo.lsp
  2.       (1)將 DCL_demo.lsp 內容複製  並 貼在  demo.lsp 程式內容的上方
  3.       (2)並將
  4. ;<<<<<<   設定 DCL  >>>>>>
  5.           (vl-load-com) (demo_DCL)  ; 在螢幕上顯示DCL
  6. 上方此2行 搬移 覆蓋 程式 標示(1)(2)(3) 這三行 即可
  7. (defun c:demo (/ dcl_id funct funct_list)
  8.   (or f:unct (setq f:unct 0))
  9.   (setq funct_list (list "demo 1" "demo 2" "demo 3"))
  10.   (setq dcl_id (load_dialog "demo.dcl"))                 ;原載入dcl  ---(1)
  11.   (if (not (new_dialog "demo" dcl_id))             ;                 ---(2)
  12.   (exit))                                          ;                 ---(3)
  13.   (start_list "funct")(mapcar 'add_list funct_list)(end_list)






編輯好後另存  demo2.lsp

demo2.lsp
  1. ;***********************************************************************************************
  2. ;<<<<<<   設定 DCL  >>>>>>
  3. (defun demo_DCL ()
  4.     (not (and (setq dcl_file (open (setq tmp (vl-filename-mktemp nil nil  ".DCL")) "w"))
  5.               (progn
  6.                  (foreach x
  7.                    '(  
  8.                      "//"  
  9.                      "//"  
  10.                      "//"  
  11.                      "demo : dialog {"  
  12.                      "      label = "demo2.lsp";"  
  13.                      "      : column {"  
  14.                      "        : boxed_column {"  
  15.                      "          label = "選擇一個功\能";"  
  16.                      "          : popup_list {"  
  17.                      "            key = "funct";"  
  18.                      "            width = 18.0;"  
  19.                      "            fixed_width = true;"  
  20.                      "            alignment = centered;"  
  21.                      "          }"  
  22.                      "          : spacer {"  
  23.                      "            height = 0;"  
  24.                      "          }"  
  25.                      "        }"  
  26.                      "        : button {"  
  27.                      "          label = "&ok";"  
  28.                      "          key = "accept";"  
  29.                      "          width = 18;"  
  30.                      "          fixed_width = true;"  
  31.                      "          alignment = centered;"  
  32.                      "          is_default = true;"  
  33.                      "        }  "  
  34.                      "        : button {"  
  35.                      "          label = "&exit";"  
  36.                      "          key = "cancel";"  
  37.                      "          width = 18;"  
  38.                      "          fixed_width = true;"  
  39.                      "          alignment = centered;"  
  40.                      "          is_cancel = true;"  
  41.                      "        }"  
  42.                      "      }"  
  43.                      "    }"  
  44.      ) (write-line x dcl_file) )
  45.      (setq dcl_file (close dcl_file))
  46.          (< 0 (setq dcl_id (load_dialog tmp)))
  47.              )   (if (not (new_dialog "demo" dcl_id)) (exit))
  48.                  )   )   )
  49. ;***********************************************************************************************
  50.                   
  51. (defun c:demo (/ dcl_id funct funct_list)
  52. (or f:unct (setq f:unct 0))
  53. (setq funct_list (list "demo 1" "demo 2" "demo 3"))
  54. ;<<<<<<   設定 DCL  >>>>>>
  55.           (vl-load-com) (demo_DCL)  ; 在螢幕上顯示DCL
  56. (start_list "funct")(mapcar 'add_list funct_list)(end_list)
  57. (if f:unct-def (set_tile "funct" (itoa f:unct-def)))
  58. (action_tile "accept"
  59.    (strcat
  60.     "(progn (setq f:unct (atoi (get_tile "funct")) f:unct-def f:unct)"            
  61.            "(done_dialog)(setq button t))"))
  62. (action_tile "cancel" "(done_dialog)(setq button nil)")
  63. (start_dialog)
  64. (unload_dialog dcl_id)
  65. (setq funct f:unct)
  66. (if button
  67.    (cond
  68.      ((= funct 0)(alert "您選擇了範例 1"))
  69.      ((= funct 1)(alert "您選擇了範例 2"))
  70.      ((= funct 2)(alert "您選擇了範例 3"))))
  71. (princ))                  
  72.                   

這樣就能 一個檔案執行了  demo2.lsp

S2.jpg







回复

使用道具 举报

21

主题

356

帖子

1048

银币

管理员

Rank: 25

铜币
525
发表于 2022-5-11 13:20:23 | 显示全部楼层
回帖,就是对楼主最大的支持
回复

使用道具 举报

21

主题

356

帖子

1048

银币

管理员

Rank: 25

铜币
525
发表于 2022-5-11 13:20:41 | 显示全部楼层
感谢分享,这是非常优秀的资源。
回复

使用道具 举报

122

主题

647

帖子

223

银币

版主

Rank: 10Rank: 10

铜币
1174
发表于 2022-5-11 18:38:29 | 显示全部楼层
很不错,赞一个
回复

使用道具 举报

0

主题

8

帖子

5

银币

初来乍到

Rank: 1

铜币
7
发表于 2022-5-21 09:20:20 | 显示全部楼层
真是难得的好帖子啊
回复

使用道具 举报

0

主题

22

帖子

21

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-5-24 14:15:34 | 显示全部楼层
我们支持楼主,希望楼主继续分享
回复

使用道具 举报

0

主题

14

帖子

8

银币

初来乍到

Rank: 1

铜币
14
发表于 2022-6-5 08:29:17 来自手机 | 显示全部楼层
我们支持楼主,希望楼主继续分享
 
回复

使用道具 举报

0

主题

37

帖子

4

银币

初来乍到

Rank: 1

铜币
37
发表于 2022-6-10 17:11:18 | 显示全部楼层
我们支持楼主,希望楼主继续分享
回复

使用道具 举报

0

主题

29

帖子

3

银币

初来乍到

Rank: 1

铜币
29
发表于 2022-12-4 11:54:23 | 显示全部楼层
我们支持楼主,希望楼主继续分享
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 01:12 , Processed in 0.170120 second(s), 81 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表