找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1277|回复: 3

[原创]:整理lisp变菜单

[复制链接]
发表于 2007-9-19 13:01:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
这个lsp的功能是收集lsp文件中的外部函数,自动转成菜单的格式,
供lisp写得多或收得多的兄弟们整理方便。
要用到dislib的函数。
要求是lsp文件中命令的注释和(defun c:xx在同一行,如:

(defun c:pzx ()(pzx (* 3 0bl))) ;;;破折线;;;
(defun c:pzx1 ()(pzx 0bl))          ;;;小破折线;;;
(defun c:pzx                 ;;;破折线;;;
  (/ a ava f fa )
  。。。。)
(defun c:pzx         (/ a ava f fa )        ;;;破折线;;;
    。。。。)

运行时可多选文件,然后后会在c:盘建一个临时文件:

[破折线pzx]^c^c(ld c:pzx "FH.lsp");_pzx
[小破折线pzx1]^c^c(ld c:pzx1 "FH.lsp");_pzx1
。。。。

你可以剪贴了放在lsp文件前做总目,也可以
剪贴到菜单中使用。
菜单中的ld函数其实就是load,弟兄们自己调整吧。


  1. (defun cy_strbnil_b(b / A IN N STRB0);;空字串表清理;;
  2.   (setq strb0 '()n(length b)in 0)
  3.   (repeat n
  4.     (setq a(nth in b)in(1+ in))
  5.     (if (/= a "")(setq strb0(append strb0 (list a))))
  6.   )strb0
  7. )

  8. (defun c:hs1 ;;lsp外部函数变菜单;;
  9.        (/ F1 F2 FLN FLNAM FLNB FLNB1 FLNLSP FLNN IN1 MINLM MNU-STR PATH
  10.                STR1 STRB STRB1 STRB2 T1 ZSM)
  11.   (setq        fln    "c:/acadcom.txt"
  12.         flnlsp (dos_getfilem "选择lsp文件:"
  13.                  (if path-cb path-cb "E:/")
  14.                  "LISP Files (*.lsp)|*.LSP")
  15.         flnn(1- (length flnlsp)) path (car flnlsp)
  16.         path-cb path
  17.         flnb(cdr flnlsp) path(car flnlsp)
  18.         flnb1 (ACAD_STRLSORT flnb)flnb flnb1
  19.         in1 0 f2 (open fln "w")
  20.   )
  21.   (while (setq flnam (nth in1 flnb))
  22.     (setq flnlsp(strcat path flnam) in1(1+ in1)
  23.           f1(open flnlsp "r"))
  24.     (write-line flnlsp f2)
  25.     (while (setq t1 (read-line f1))
  26.       (if (= (strcase (substr t1 1 9)) "(DEFUN C:")(progn
  27.         (setq t1(substr t1 8)
  28.               strb(strParse t1 ";");;变为表;
  29.               strb1(cy_strbnil_b strb)
  30.               str1(car strb1)
  31.               strb2(strParse str1  " ")
  32.               minlm(car (cy_strbnil_b strb2))
  33.               minlm(car (strParse minlm  "(")));;命令名;;
  34.         (if (nth 1 strb1)
  35.           (setq zsm(nth 1 strb1))
  36.           (setq zsm "")
  37.         );;注释名;;
  38.         (setq mnu-str(strcat "[" zsm (substr minlm 3)  "]^c^c(ld " minlm
  39.                              " "" flnam "");_" (substr minlm 3)))
  40.         (write-line mnu-str f2)
  41.       ) )
  42.     )
  43.     (close f1)
  44.   )
  45.   (close f2)
  46.   (dos_shellexe "notepad.exe" "c:/acadcom.txt")
  47. )

  48. (defun strParse        (Str Delimiter / SearchStr StringLen return n char)
  49. ;;;(StrParse Str Delimiter)  ;Str字符串  Delimiter分隔符
  50. ;;;将具有分隔符的字符串解析为列表,Delimiter可以多字符
  51.   (setq SearchStr Str return '()
  52.         StringLen (strlen SearchStr)
  53.         strlen-d(strlen Delimiter))
  54.   (while (> StringLen 0)
  55.     (setq n 1
  56.           char (substr SearchStr 1 strlen-d))
  57.     (while (and (/= char Delimiter) (/= char ""))
  58.       (setq n (1+ n) char (substr SearchStr n strlen-d))
  59.     )
  60.     (setq return (cons (substr SearchStr 1 (1- n)) return)
  61.           SearchStr (substr SearchStr (+ n strlen-d) StringLen)
  62.           StringLen (strlen SearchStr))
  63.   )(reverse return)
  64. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2007-9-20 16:08:10 | 显示全部楼层
我怎么运行不了呢,是不是还缺少什么支持函数呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-21 00:02:36 | 显示全部楼层
这是一个老程序了,以前的程序注释写得不规范,改过n次,
抄了strParse函数后又改过一次,所以比较拖沓。能用不想再改了。
里面都是老lisp函数了,应该没问题。

你是否没加载doslib5.0以上版本?这里用于选择文件路径。
你如不想加,可以自己改为其他选文件函数,或者
干脆指定一个文件路径.

贴程序最怕找内部函数,在自己的机子上什么都是现成的,
所以往往发现不了。好在是程序论坛,dx们要么提出,
要么稍稍动手改改,问题应该还不大。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-9-21 14:36:08 | 显示全部楼层
想法不错
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 04:53 , Processed in 0.203907 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表