找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1043|回复: 2

[LISP程序]:打印实体resbuf链表的Lisp函数是什么?

[复制链接]
发表于 2002-10-19 22:30:14 | 显示全部楼层 |阅读模式

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

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

×
别笑俺先,Lisp一点不懂,呵呵,谢谢您
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-19 22:47:00 | 显示全部楼层
resbuf链表是ADSRX的数据结构,LISP不能直接读到的。

你可以用ADSRX写一个外部函数供LISP调用,去打印链表。

不过,没有什么实际意义吧,如果你开发供LISP调用的API,在命令行调试信息应该能用到的。

下面代码是打印RESBUF链表的函数,你可以把他们定义成外部函数。


  1. [FONT=courier new]
  2. /************************************************************************
  3. **
  4. **        XdRbUtils::dxfCodeToDataType:
  5. **
  6. **        **jma
  7. **
  8. ******************************************/

  9. int
  10. XdRbUtils::dxfCodeToDataType(int resType)
  11. {
  12.                 // which data type is this value
  13.         if ((resType >= 0) && (resType <= 9))
  14.                 return(RTSTR);
  15.         else if ((resType >= 10) && (resType <= 19))
  16.                 return(RT3DPOINT);
  17.         else if ((resType >= 38) && (resType <= 59))
  18.                 return(RTREAL);
  19.         else if ((resType >= 60) && (resType <= 79))
  20.                 return(RTSHORT);
  21.         else if ((resType >= 90) && (resType <= 99))
  22.                 return(RTLONG);
  23.         else if ((resType == 100) || (resType == 102) ||(resType == 105))
  24.                 return(RTSTR);
  25.         else if ((resType >= 140) && (resType <= 147))
  26.                 return(RTREAL);
  27.         else if ((resType >= 170) && (resType <= 179))
  28.                 return(RTSHORT);
  29.         else if ((resType >= 210) && (resType <=239))
  30.                 return(RT3DPOINT);
  31.         else if ((resType >= 270) && (resType <= 279))
  32.                 return(RTSHORT);
  33.         else if ((resType >= 300) && (resType <= 309))
  34.                 return(RTSTR);
  35.         else if ((resType >= 310) && (resType <= 369))
  36.                 return(RTENAME);
  37.         else if ((resType>=370)&&(resType<=379))
  38.                 return (RTSHORT);
  39.         else if ((resType>=400)&&(resType<=409))
  40.                 return (RTSHORT);
  41.         else if ((resType>=410)&&(resType<=419))
  42.                 return (RTSTR);
  43.         else if (resType == 1004)
  44.                 return(resType);                // binary chunk
  45.         else if ((resType >= 1000) && (resType <= 1009))
  46.                 return(RTSTR);
  47.         else if ((resType >= 1010) && (resType <= 1013))
  48.                 return(RT3DPOINT);
  49.         else if ((resType >= 1038) && (resType <= 1059))
  50.                 return(RTREAL);
  51.         else if ((resType >= 1060) && (resType <= 1070))
  52.                 return(RTSHORT);
  53.         else if ((resType == 1071))
  54.                 return(RTLONG);
  55.         else if ((resType < 0) || (resType > 4999))
  56.                 return(resType);
  57.         else
  58.                 return(RTNONE);
  59. }
  60. [/FONT]
复制代码




  1. [FONT=courier new]
  2. /*********************************************************************
  3. **
  4. **        XdRbUtils::dxfToStr:
  5. **
  6. **         
  7. ******************************************/

  8. void
  9. XdRbUtils::dxfToStr(resbuf* rb, CString& dxfCodeStr, CString& valueStr)
  10. {
  11.         int dataType = XdRbUtils::dxfCodeToDataType(rb->restype);
  12.         dxfCodeStr.Format(_T("%d"), rb->restype);

  13.         CString tmpStr;

  14.         switch (dataType) {
  15.                 case RTSHORT:
  16.                         valueStr.Format(_T("%d"), rb->resval.rint);
  17.                         break;
  18.                 case RTLONG:
  19.                         valueStr.Format(_T("%ld"), rb->resval.rlong);
  20.                         break;
  21.                 case RTREAL:
  22.                         valueStr.Format(_T("%g"), rb->resval.rreal);
  23.                         break;
  24.                 case RTSTR:
  25.                         if (rb->resval.rstring == NULL)
  26.                                 valueStr = _T("(NULL)");
  27.                         else
  28.                                 valueStr.Format(_T(""%s""), rb->resval.rstring);
  29.                         break;
  30.                 case RT3DPOINT:
  31.                         valueStr.Format(_T("(%g, %g, %g)"), rb->resval.rpoint[X],
  32.                                                 rb->resval.rpoint[Y], rb->resval.rpoint[Z]);
  33.                         break;
  34.                 case RTPOINT:
  35.                         valueStr.Format(_T("(%g, %g)"), rb->resval.rpoint[X], rb->resval.rpoint[Y]);
  36.                         break;
  37.                 case 1004:
  38.                         valueStr.Format(_T("Binary Chunk: "%s""),
  39.                                                 XdRbUtils::bytesToHexStr(rb->resval.rbinary.buf,
  40.                                                                 rb->resval.rbinary.clen, tmpStr));
  41.                         break;
  42.                 case -5:
  43.                         valueStr = _T("Persistent Reactors");
  44.                         break;
  45.                 case -4:
  46.                         valueStr.Format(_T("Conditional Operator: "%s""), rb->resval.rstring);
  47.                         break;
  48.                 case -3:
  49.                         valueStr = _T("Start of Xdata");
  50.                         break;
  51.                 case -2:
  52.                         valueStr.Format(_T("<Entity Name Reference: %8lx>"), rb->resval.rlname[0]);
  53.                         break;
  54.                 case -1:
  55.                 case RTENAME:
  56.                         if ((rb->restype >= 330 )&& (rb->restype < 340))
  57.                                 valueStr.Format(_T("<Soft Pointer: %8lx>"), rb->resval.rlname[0]);
  58.                         else if((rb->restype >= 340) && (rb->restype < 350))
  59.                                 valueStr.Format(_T("<Hard Pointer: %8lx>"), rb->resval.rlname[0]);
  60.                         else if((rb->restype >= 350) && (rb->restype < 360))
  61.                                 valueStr.Format(_T("<Soft Ownership: %8lx>"), rb->resval.rlname[0]);
  62.                         else if((rb->restype >= 360) && (rb->restype < 370))
  63.                                 valueStr.Format(_T("<Hard Ownership: %8lx>"), rb->resval.rlname[0]);
  64.                         else
  65.                                 valueStr.Format(_T("<Entity Name: %8lx>"), rb->resval.rlname[0]);
  66.                         break;
  67.                 case RTPICKS:
  68.                         valueStr.Format(_T("<Selection Set: %8lx>"), rb->resval.rlname[0]);
  69.                         break;
  70.                 case RTLB:
  71.                         valueStr = _T("List Begin");
  72.                         break;
  73.                 case RTLE:
  74.                         valueStr = _T("List End");
  75.                         break;
  76.                 case RTNIL:
  77.                         valueStr = _T("NIL");
  78.                         break;
  79.                 case RTT:
  80.                         valueStr = _T("T");
  81.                         break;
  82.                 default:
  83.                         valueStr = _T("Unknown Type");
  84.                         break;
  85.         }
  86. }[/FONT]
复制代码





  1. [FONT=courier new]

  2. /*********************************************************************
  3. **
  4. **        XdRbUtils::printResbufChain:
  5. **
  6. **       
  7. ******************************************/

  8. void
  9. XdRbUtils::printResbufChain(resbuf* const rb)
  10. {
  11.         CString dxfCodeStr, valueStr, tmpStr;
  12.         resbuf* tmp = rb;
  13.         while (tmp) {
  14.                 XdRbUtils::dxfToStr(tmp, dxfCodeStr, valueStr);
  15.                 tmpStr.Format(_T("\n(%s . %s)"), dxfCodeStr, valueStr);
  16.                 ads_printf(static_cast<LPCTSTR>(tmpStr));
  17.                 tmp = tmp->rbnext;
  18.         }
  19. }
  20. [/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-26 02:26 , Processed in 0.168566 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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