找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 800|回复: 2

[LISP程序]: xyp1964的错误函数有点疑问

[复制链接]
发表于 2008-8-2 01:46:44 | 显示全部楼层 |阅读模式

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

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

×
用这个错误函数为什么会改变系统变量errno的值,我检查了下我的程序,把错误函数去掉了就不会改变errno的值,虽然对程序的正常运行没什么影响我还是想知道为什么会这样~!谁知道是哪里问题,或者 xyp1964斑竹来解觉下

  1.   [FONT=courier new]
  2. ;;;                    保存用户系统变量                     
  3. ;;;方式 : (CMDLA0)
  4. (defun CMDLASC0        ()
  5.   (CMDLA0)
  6.   (if (null sc)
  7.     (SETBL)
  8.   )
  9. )
  10. (defun CMDLA0 ()
  11.   (defun *error* (msg)
  12.     (princ "错误 : ")
  13.     (princ msg)
  14.     (CMDLA1)
  15.   )
  16.   (SetQ        **SysVarNL**
  17.                      '("AUNITS"             "AUPREC"           "ATTDIA"
  18.                        "BLIPMODE"    "CECOLOR"           "CELTYPE"
  19.                        "CLAYER"             "CMDECHO"           "DIMZIN"
  20.                        "EXPERT"             "HIGHLIGHT"   "LUNITS"
  21.                        "LUPREC"             "OSMODE"           "ORTHOMODE"
  22.                        "TEXTSTYLE"   "PLINEWID"           "dimdec"
  23.                        "dimadec"     "regenmode"   "pickbox"
  24.                       )
  25.         #time1             (rtos (getvar "cdate") 2 16)
  26.         start-time   (substr (rtos (getvar "cdate") 2 16) 7)
  27.   )
  28.   (SetIErr)
  29.   (command "ucs" "")
  30.   (command ".undo" "BE")
  31.   (princ)
  32. )


  33. (Defun SetIErr (/ sv)
  34.   (If (= 'LIST (Type *error*))
  35.     (Alert "错误:最后一个(SetIErr)函数没有配对的(ReErr)!")
  36.     (Progn
  37.       (SetQ **svarl** '())
  38.       (ForEach sv **SysVarNL**
  39.         (SetQ **svarl** (Cons (GetVar sv) **svarl**))
  40.       )
  41.       (ForEach sv '("ATTDIA"           "BLIPMODE"          "CMDECHO"
  42.                     "ORTHOMODE"           "DIMZIN"          "plinewid"
  43.                     "regenmode"
  44.                    )
  45.         (SetVar sv 0)
  46.       )
  47.       (setvar "ATTREQ" 1)
  48.       (SetVar "EXPERT" 5)
  49.       (setvar "pickbox" 5)
  50.       (setvar "pickadd" 1)
  51.       (setvar "aperture" 5)
  52.       (Defun-Q *error* (st) (ReErr))
  53.     )
  54.   )
  55. )
  56. (Defun ReErr ()
  57.   (If (= 'LIST (Type *error*))
  58.     (Progn
  59.       (MapCar 'SetVar **SysVarNL** (Reverse **svarl**))
  60.       (SetQ *error* nil)
  61.       (SetVar "modemacro" ".")
  62.     )
  63.   )
  64. )

  65. ;;;------------------------ CMDLA1 -------------------------
  66. ;;;                     恢复用户系统变量                    
  67. ;;;方式 : (CMDLA1)                                          
  68. (defun CMDLA1 ()
  69.   (command ".undo" "E")
  70.   (command "ucs" "")
  71.   (ReErr)
  72.                  
  73.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2008-8-5 01:04:32 | 显示全部楼层
调用command可能影响errno的值。看看cad帮助。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 16:54 , Processed in 0.194032 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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