- UID
- 1
- 积分
- 16111
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-1-3
- 最后登录
- 1970-1-1
|
发表于 2002-10-19 22:47:00
|
显示全部楼层
resbuf链表是ADSRX的数据结构,LISP不能直接读到的。
你可以用ADSRX写一个外部函数供LISP调用,去打印链表。
不过,没有什么实际意义吧,如果你开发供LISP调用的API,在命令行调试信息应该能用到的。
下面代码是打印RESBUF链表的函数,你可以把他们定义成外部函数。
- [FONT=courier new]
- /************************************************************************
- **
- ** XdRbUtils::dxfCodeToDataType:
- **
- ** **jma
- **
- ******************************************/
- int
- XdRbUtils::dxfCodeToDataType(int resType)
- {
- // which data type is this value
- if ((resType >= 0) && (resType <= 9))
- return(RTSTR);
- else if ((resType >= 10) && (resType <= 19))
- return(RT3DPOINT);
- else if ((resType >= 38) && (resType <= 59))
- return(RTREAL);
- else if ((resType >= 60) && (resType <= 79))
- return(RTSHORT);
- else if ((resType >= 90) && (resType <= 99))
- return(RTLONG);
- else if ((resType == 100) || (resType == 102) ||(resType == 105))
- return(RTSTR);
- else if ((resType >= 140) && (resType <= 147))
- return(RTREAL);
- else if ((resType >= 170) && (resType <= 179))
- return(RTSHORT);
- else if ((resType >= 210) && (resType <=239))
- return(RT3DPOINT);
- else if ((resType >= 270) && (resType <= 279))
- return(RTSHORT);
- else if ((resType >= 300) && (resType <= 309))
- return(RTSTR);
- else if ((resType >= 310) && (resType <= 369))
- return(RTENAME);
- else if ((resType>=370)&&(resType<=379))
- return (RTSHORT);
- else if ((resType>=400)&&(resType<=409))
- return (RTSHORT);
- else if ((resType>=410)&&(resType<=419))
- return (RTSTR);
- else if (resType == 1004)
- return(resType); // binary chunk
- else if ((resType >= 1000) && (resType <= 1009))
- return(RTSTR);
- else if ((resType >= 1010) && (resType <= 1013))
- return(RT3DPOINT);
- else if ((resType >= 1038) && (resType <= 1059))
- return(RTREAL);
- else if ((resType >= 1060) && (resType <= 1070))
- return(RTSHORT);
- else if ((resType == 1071))
- return(RTLONG);
- else if ((resType < 0) || (resType > 4999))
- return(resType);
- else
- return(RTNONE);
- }
- [/FONT]
复制代码
- [FONT=courier new]
- /*********************************************************************
- **
- ** XdRbUtils::dxfToStr:
- **
- **
- ******************************************/
- void
- XdRbUtils::dxfToStr(resbuf* rb, CString& dxfCodeStr, CString& valueStr)
- {
- int dataType = XdRbUtils::dxfCodeToDataType(rb->restype);
- dxfCodeStr.Format(_T("%d"), rb->restype);
- CString tmpStr;
- switch (dataType) {
- case RTSHORT:
- valueStr.Format(_T("%d"), rb->resval.rint);
- break;
- case RTLONG:
- valueStr.Format(_T("%ld"), rb->resval.rlong);
- break;
- case RTREAL:
- valueStr.Format(_T("%g"), rb->resval.rreal);
- break;
- case RTSTR:
- if (rb->resval.rstring == NULL)
- valueStr = _T("(NULL)");
- else
- valueStr.Format(_T(""%s""), rb->resval.rstring);
- break;
- case RT3DPOINT:
- valueStr.Format(_T("(%g, %g, %g)"), rb->resval.rpoint[X],
- rb->resval.rpoint[Y], rb->resval.rpoint[Z]);
- break;
- case RTPOINT:
- valueStr.Format(_T("(%g, %g)"), rb->resval.rpoint[X], rb->resval.rpoint[Y]);
- break;
- case 1004:
- valueStr.Format(_T("Binary Chunk: "%s""),
- XdRbUtils::bytesToHexStr(rb->resval.rbinary.buf,
- rb->resval.rbinary.clen, tmpStr));
- break;
- case -5:
- valueStr = _T("Persistent Reactors");
- break;
- case -4:
- valueStr.Format(_T("Conditional Operator: "%s""), rb->resval.rstring);
- break;
- case -3:
- valueStr = _T("Start of Xdata");
- break;
- case -2:
- valueStr.Format(_T("<Entity Name Reference: %8lx>"), rb->resval.rlname[0]);
- break;
- case -1:
- case RTENAME:
- if ((rb->restype >= 330 )&& (rb->restype < 340))
- valueStr.Format(_T("<Soft Pointer: %8lx>"), rb->resval.rlname[0]);
- else if((rb->restype >= 340) && (rb->restype < 350))
- valueStr.Format(_T("<Hard Pointer: %8lx>"), rb->resval.rlname[0]);
- else if((rb->restype >= 350) && (rb->restype < 360))
- valueStr.Format(_T("<Soft Ownership: %8lx>"), rb->resval.rlname[0]);
- else if((rb->restype >= 360) && (rb->restype < 370))
- valueStr.Format(_T("<Hard Ownership: %8lx>"), rb->resval.rlname[0]);
- else
- valueStr.Format(_T("<Entity Name: %8lx>"), rb->resval.rlname[0]);
- break;
- case RTPICKS:
- valueStr.Format(_T("<Selection Set: %8lx>"), rb->resval.rlname[0]);
- break;
- case RTLB:
- valueStr = _T("List Begin");
- break;
- case RTLE:
- valueStr = _T("List End");
- break;
- case RTNIL:
- valueStr = _T("NIL");
- break;
- case RTT:
- valueStr = _T("T");
- break;
- default:
- valueStr = _T("Unknown Type");
- break;
- }
- }[/FONT]
复制代码
- [FONT=courier new]
- /*********************************************************************
- **
- ** XdRbUtils::printResbufChain:
- **
- **
- ******************************************/
- void
- XdRbUtils::printResbufChain(resbuf* const rb)
- {
- CString dxfCodeStr, valueStr, tmpStr;
- resbuf* tmp = rb;
- while (tmp) {
- XdRbUtils::dxfToStr(tmp, dxfCodeStr, valueStr);
- tmpStr.Format(_T("\n(%s . %s)"), dxfCodeStr, valueStr);
- ads_printf(static_cast<LPCTSTR>(tmpStr));
- tmp = tmp->rbnext;
- }
- }
- [/FONT]
复制代码 |
|