![]() |
VR-Link API Documentation for HLA 1516
|
00001 /********************************************************************* 00002 ** Copyright (c) 1992-2010 VT MAK 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 #ifndef mtl_H_ 00006 #define mtl_H_ 00007 00012 #include <stdio.h> 00013 #include <vlutil/vlMachineTypes.h> 00014 #include <vlutil/vlPrint.h> 00015 #include <vlutil/vlList.h> 00016 #include <vlutil/vlString.h> 00017 #include <vlutil/vlDebug.h> 00018 #include "mtlstream.h" 00019 00020 #ifdef DtUSE_UTILITIES_NAMESPACE 00021 namespace DtUSE_UTILITIES_NAMESPACE 00022 { 00023 #endif 00024 00025 #define DtlObjDebug(s) do { if (DtLispDebugOn) DtlInfo s; } while (0) 00026 00027 #define DtlError(string, obj) do { if (DtNotifyLevel >= DtNlFatal) \ 00028 fprintf(stderr, "Lisp Error: %s", string), DtcErrPrint(obj); } while (0) 00029 00030 #define DtlWarn(string, obj) do { if (DtNotifyLevel >= DtNlWarn) \ 00031 fprintf(stderr, "Lisp Warning: %s", string), DtcErrPrint(obj); } while (0) 00032 00033 #define DtlInfo(string, obj) do { if (DtNotifyLevel >= DtNlInfo) \ 00034 printf(string), DtcPrint(obj); } while (0) 00035 00036 //-------------------------------------------------------------------------- 00037 00038 class DT_DLL_MTL DtlObj; 00039 class DT_DLL_MTL DtlObjPtr; 00040 class DT_DLL_MTL DtlHashTable; 00041 class DT_DLL_MTL DtcParam; 00042 00043 #ifdef MEMCHK 00044 extern DT_DLL_MTL int DtAllocObjCnt; 00045 extern DT_DLL_MTL int DtMaxAllocObjCnt; 00046 #endif 00047 00050 extern DT_DLL_MTL char* DtMtlReadEscapeChar; 00051 00053 00054 enum DtlTagType 00055 { 00056 DtpNull, 00057 DtpSymbol, 00058 DtpFix, 00059 DtpFlonum, 00060 DtpList, 00061 DtpSpecialForm, 00062 DtpCompiledC, 00063 DtpString, 00064 DtpLocative, 00065 DtpProcedure, 00066 DtpFrame 00067 }; 00068 00069 class DT_DLL_MTL DtlObjPtr 00070 { 00071 friend class DtlObj; 00072 00073 public: 00074 DtlObjPtr(); 00075 DtlObjPtr(const DtlObjPtr&); 00076 DtlObjPtr(DtlTagType); 00077 DtlObjPtr(int); 00078 DtlObjPtr(double); 00079 DtlObjPtr(const char*); 00080 ~DtlObjPtr(); 00081 DtlObjPtr& operator = (const DtlObjPtr&); 00082 int operator == (const DtlObjPtr&) const; 00083 operator void*() const; 00084 DtlObj* operator -> () const; 00085 DtlObj& operator * () const; 00086 00088 int isNull() const; 00089 00090 public: 00091 00092 static DtlObjPtr t(); 00093 static DtlObjPtr nil(); 00094 static DtlObjPtr unbound(); 00095 00096 private: 00097 00098 DtlObj* ptr; 00099 }; 00100 00101 typedef DtlObjPtr (*DtlFcn) (const DtlObjPtr& args, const DtlObjPtr& env); 00102 typedef DtlFcn DtlCompiledCFcnWithEnv; 00103 typedef void* DtlPtrToNode; 00104 00105 class DT_DLL_MTL DtlObj { 00106 friend class DtlObjPtr; 00107 public: 00108 DtlObj(DtlTagType); 00109 DtlObj(int); 00110 DtlObj(double); 00111 DtlObj(const char *); 00112 ~DtlObj(); 00113 00114 DtlTagType tag(); 00115 void setTag(DtlTagType); 00116 00117 int refcnt(); 00118 void setRefcnt(int); 00119 00120 char gone(); 00121 void setGone(char); 00122 00123 DtlObjPtr car(); 00124 void setCar(const DtlObjPtr&); 00125 DtlObjPtr cdr(); 00126 void setCdr(const DtlObjPtr&); 00127 00128 char* pname(); 00129 void setPname(const char*); 00130 00131 int fixnum(); 00132 void setFixnum(int); 00133 00134 double flonum(); 00135 void setFlonum(double); 00136 00137 char* string(); 00138 void setString(const char*); 00139 00140 DtlPtrToNode nodeptr(); 00141 void setNodeptr(DtlPtrToNode); 00142 00143 char* fcnPname(); 00144 void setFcnPname(const char*); 00145 00146 DtlCompiledCFcnWithEnv fcnCode(); 00147 void setFcnCode(DtlCompiledCFcnWithEnv); 00148 00149 DtlObjPtr procParams(); 00150 void setProcParams(const DtlObjPtr&); 00151 00152 DtlObjPtr procBody(); 00153 void setProcBody(const DtlObjPtr&); 00154 00155 DtlObjPtr& procEnv(); 00156 void setProcEnv(const DtlObjPtr&); 00157 00158 DtlObjPtr frameParent(); 00159 void setFrameParent(const DtlObjPtr&); 00160 00161 DtlHashTable* frameBindings(); 00162 void setFrameBindings(DtlHashTable*); 00163 00168 int registerVal(DtcParam* param); 00169 00173 DtList* params(); 00174 00175 void print(); 00176 void DtcObjFprint(FILE* s); 00177 void DtcPrintList(FILE* s); 00178 00179 00180 private: 00181 DtlTagType tg; 00182 int rcnt; 00183 char gn; 00184 00187 DtlObjPtr ptr1; 00188 DtlObjPtr ptr2; 00189 DtlObjPtr ptr3; 00190 00191 union vl 00192 { 00193 char *symbname; /* print name for symbol */ 00194 int fixnum; /* fixed point number (int) */ 00195 double flonum; /* floating point (double) */ 00196 char *s; /* for strings */ 00197 DtlPtrToNode ptr; /* locatives */ 00198 struct Fcn 00199 { 00200 char *pname; 00201 DtlCompiledCFcnWithEnv fcn; 00202 } compiled_c_fcn; 00203 /* struct cns 00204 { 00205 DtlObjPtr car; 00206 DtlObjPtr cdr; 00207 } cons; 00208 struct proc 00209 { 00210 DtlObjPtr params; 00211 DtlObjPtr body; 00212 DtlObjPtr p_env; 00213 } procedure; 00214 */ 00215 struct frm 00216 { 00219 DtlHashTable* bindings; 00220 DtList* allParams; 00221 } frame; 00222 } val; 00223 }; 00224 00227 DT_DLL_MTL DtlObjPtr DtcLoadLispFile(char *filename, 00228 const DtlObjPtr& env, DtList* allParams, int complain = 1); 00229 DT_DLL_MTL DtlObjPtr DtcLoadLispFile(const DtlObjPtr& pathlist, 00230 char *filename, const DtlObjPtr& env, DtList* allParams, int complain=1); 00231 DT_DLL_MTL DtlObjPtr DtcLoadLispFileOrExpr( 00232 char *arg, const DtlObjPtr& env, DtList* allParams, int complain = 1); 00233 DT_DLL_MTL DtlObjPtr DtcLoadLispExpr( 00234 char *lispLine, const DtlObjPtr& env, DtList* allParams, int complain = 1); 00235 00237 DT_DLL_MTL DtlObjPtr DtcHaltAndCatchFire(char *diagnostic); 00238 00241 DT_DLL_MTL DtlObjPtr DtcInternCompiledC( 00242 char *name, DtlCompiledCFcnWithEnv fcn, const DtlObjPtr& env); 00243 DT_DLL_MTL DtlObjPtr DtcPtrToNode( 00244 DtlTagType t, DtlPtrToNode ptr); 00245 DT_DLL_MTL DtlObjPtr DtcInternPtr( 00246 char *name, const DtlObjPtr& value, const DtlObjPtr& env); 00247 00251 DT_DLL_MTL DtlObjPtr DtcInternSpecialForm( 00252 char *name, DtlCompiledCFcnWithEnv fcn, const DtlObjPtr& env); 00253 00260 00261 DT_DLL_MTL int DtcSetIfBoundp( 00262 char *lisp_var_name, int *cvar, const DtlObjPtr& env); 00263 DT_DLL_MTL int DtcSetIfBoundp( 00264 char *lisp_var_name, double *cvar, const DtlObjPtr& env); 00265 DT_DLL_MTL int DtcSetIfBoundp( 00266 char *lisp_var_name, char** cvar, const DtlObjPtr& env); 00267 00269 DT_DLL_MTL void IncObjRefCnt(DtlObj *obj); 00270 DT_DLL_MTL void DecObjRefCnt(DtlObj *obj); 00271 DT_DLL_MTL int EnvLocalProcRefcnt(DtlObj *env); 00272 DT_DLL_MTL int EnvLocalProcRefcnt(const DtlObjPtr& env); 00273 00276 DT_DLL_MTL DtlObjPtr DtcCBooleanToLispBoolean(int i); 00277 DT_DLL_MTL DtlObjPtr DtcCaddddddr(const DtlObjPtr& c); 00278 DT_DLL_MTL DtlObjPtr DtcCadddddr(const DtlObjPtr& c); 00279 DT_DLL_MTL DtlObjPtr DtcCaddddr(const DtlObjPtr& c); 00280 DT_DLL_MTL DtlObjPtr DtcCadddr(const DtlObjPtr& c); 00281 DT_DLL_MTL DtlObjPtr DtcCaddr(const DtlObjPtr& c); 00282 DT_DLL_MTL DtlObjPtr DtcCadr(const DtlObjPtr& c); 00283 DT_DLL_MTL DtlObjPtr DtcCar(const DtlObjPtr& c); 00284 DT_DLL_MTL DtlObjPtr DtcCdr(const DtlObjPtr& c); 00285 DT_DLL_MTL DtlObjPtr DtcCons(const DtlObjPtr& car, const DtlObjPtr& cdr); 00286 DT_DLL_MTL DtlObjPtr DtcAppend(const DtlObjPtr&, const DtlObjPtr&); 00287 DT_DLL_MTL DtlObjPtr DtcAssoc(const DtlObjPtr& thing, const DtlObjPtr& alist); 00288 DT_DLL_MTL DtlObjPtr DtcAssv(const DtlObjPtr& thing, const DtlObjPtr& alist); 00289 DT_DLL_MTL DtlObjPtr DtcAssq(const DtlObjPtr& thing, const DtlObjPtr& alist); 00290 DT_DLL_MTL DtlObjPtr DtcReverse(const DtlObjPtr&); 00291 DT_DLL_MTL DtlObjPtr DtcEval(const DtlObjPtr& , const DtlObjPtr& env); 00292 DT_DLL_MTL DtlObjPtr DtcIntern(char *name, const DtlObjPtr& env); 00293 DT_DLL_MTL DtlObjPtr DtcMakeSymbol(char *pname); 00294 DT_DLL_MTL DtlObjPtr DtcPrint(const DtlObjPtr& c); 00295 DT_DLL_MTL DtlObjPtr DtcRead(DtlInputStream *f, const DtlObjPtr& env); 00296 DT_DLL_MTL DtlObjPtr DtcSet(const DtlObjPtr& c, const DtlObjPtr& value, const DtlObjPtr& env); 00297 #if DT_GLOBAL_ENV 00298 DT_DLL_MTL int DtcBoundp(const DtlObjPtr& sym); 00299 DT_DLL_MTL DtlObjPtr DtcSet(const DtlObjPtr& c, const DtlObjPtr& value); 00300 DT_DLL_MTL DtlObjPtr DtcIntern(char *name); 00301 DT_DLL_MTL DtlObjPtr DtcRead(DtlInputStream *f); 00302 #endif 00303 #define DtcSet1Env DtcSet 00304 DT_DLL_MTL DtlObjPtr DtcSymeval(const DtlObjPtr& c, const DtlObjPtr& env); 00305 DT_DLL_MTL int DtcBoundp(const DtlObjPtr& sym, const DtlObjPtr& env); 00306 DT_DLL_MTL int DtcEq(const DtlObjPtr& a, const DtlObjPtr& b); 00307 DT_DLL_MTL int DtcEqual(const DtlObjPtr& c1, const DtlObjPtr& c2); 00308 DT_DLL_MTL int DtcEqualSign(const DtlObjPtr& c1, const DtlObjPtr& c2); 00309 DT_DLL_MTL int DtcLength(const DtlObjPtr& c); 00310 DT_DLL_MTL int DtcListp(const DtlObjPtr& c); 00311 DT_DLL_MTL int DtcNull(const DtlObjPtr& c); 00312 DT_DLL_MTL int DtcNumberp(const DtlObjPtr& c); 00313 DT_DLL_MTL int DtcStringEqual(const DtlObjPtr& s1, const DtlObjPtr& s2); 00314 DT_DLL_MTL int DtcStringp(const DtlObjPtr& c); 00315 DT_DLL_MTL int DtcLocativep(const DtlObjPtr& c); 00316 00318 DT_DLL_MTL DtlObjPtr DtcErrPrint(const DtlObjPtr& c); 00324 00325 DT_DLL_MTL DtlObjPtr DtlAbort(const DtlObjPtr& args, const DtlObjPtr& env); 00326 DT_DLL_MTL DtlObjPtr DtlAbs(const DtlObjPtr& args, const DtlObjPtr& env); 00327 DT_DLL_MTL DtlObjPtr DtlAnd(const DtlObjPtr& args, const DtlObjPtr& env); 00328 DT_DLL_MTL DtlObjPtr DtlAppend(const DtlObjPtr& args, const DtlObjPtr& env); 00329 DT_DLL_MTL DtlObjPtr DtlAssoc(const DtlObjPtr& args, const DtlObjPtr& env); 00330 DT_DLL_MTL DtlObjPtr DtlAssq(const DtlObjPtr& args, const DtlObjPtr& env); 00331 DT_DLL_MTL DtlObjPtr DtlAssv(const DtlObjPtr& args, const DtlObjPtr& env); 00332 DT_DLL_MTL DtlObjPtr DtlCond(const DtlObjPtr& args, const DtlObjPtr& env); 00333 DT_DLL_MTL DtlObjPtr DtlCos(const DtlObjPtr& args, const DtlObjPtr& env); 00334 DT_DLL_MTL DtlObjPtr DtlDescribe(const DtlObjPtr& args, const DtlObjPtr& env); 00335 DT_DLL_MTL DtlObjPtr DtlDivide(const DtlObjPtr& args, const DtlObjPtr& env); 00336 DT_DLL_MTL DtlObjPtr DtlEnvDump(const DtlObjPtr& args, const DtlObjPtr& env); 00337 DT_DLL_MTL DtlObjPtr DtlEq(const DtlObjPtr& args, const DtlObjPtr& env); 00338 DT_DLL_MTL DtlObjPtr DtlEqual(const DtlObjPtr& args, const DtlObjPtr& env); 00339 DT_DLL_MTL DtlObjPtr DtlEqualSign(const DtlObjPtr& args, const DtlObjPtr& env); 00340 DT_DLL_MTL DtlObjPtr DtlEval(const DtlObjPtr& args, const DtlObjPtr& env); 00341 DT_DLL_MTL DtlObjPtr DtlExit(const DtlObjPtr& args, const DtlObjPtr& env); 00342 DT_DLL_MTL DtlObjPtr DtlFormat(const DtlObjPtr& args, const DtlObjPtr& env); 00343 DT_DLL_MTL DtlObjPtr DtlFrameBindings(const DtlObjPtr& args, const DtlObjPtr& env); 00344 DT_DLL_MTL DtlObjPtr DtlFrameBound(const DtlObjPtr& args, const DtlObjPtr& env); 00345 DT_DLL_MTL DtlObjPtr DtlFrameParent(const DtlObjPtr& args, const DtlObjPtr& env); 00346 DT_DLL_MTL DtlObjPtr DtlGetenv(const DtlObjPtr& args, const DtlObjPtr& env); 00347 DT_DLL_MTL DtlObjPtr DtlGreater(const DtlObjPtr& args, const DtlObjPtr& env); 00348 DT_DLL_MTL DtlObjPtr DtlGreaterEqual(const DtlObjPtr& args, const DtlObjPtr& env); 00349 DT_DLL_MTL DtlObjPtr DtlIf(const DtlObjPtr& args, const DtlObjPtr& env); 00350 DT_DLL_MTL DtlObjPtr DtlLCar(const DtlObjPtr& args, const DtlObjPtr& env); 00351 DT_DLL_MTL DtlObjPtr DtlLCdr(const DtlObjPtr& args, const DtlObjPtr& env); 00352 DT_DLL_MTL DtlObjPtr DtlLCons(const DtlObjPtr& args, const DtlObjPtr& env); 00353 DT_DLL_MTL DtlObjPtr DtlLambda(const DtlObjPtr& args, const DtlObjPtr& env); 00354 DT_DLL_MTL DtlObjPtr DtlLet(const DtlObjPtr& args, const DtlObjPtr& env); 00355 DT_DLL_MTL DtlObjPtr DtlLength(const DtlObjPtr& args, const DtlObjPtr& env); 00356 DT_DLL_MTL DtlObjPtr DtlLess(const DtlObjPtr& args, const DtlObjPtr& env); 00357 DT_DLL_MTL DtlObjPtr DtlLessEqual(const DtlObjPtr& args, const DtlObjPtr& env); 00358 DT_DLL_MTL DtlObjPtr DtlList(const DtlObjPtr& args, const DtlObjPtr& env); 00359 DT_DLL_MTL DtlObjPtr DtlListp(const DtlObjPtr& args, const DtlObjPtr& env); 00360 DT_DLL_MTL DtlObjPtr DtlLoad(const DtlObjPtr& args, const DtlObjPtr& env); 00361 DT_DLL_MTL DtlObjPtr DtlLogIOr(const DtlObjPtr& args, const DtlObjPtr& env); 00362 DT_DLL_MTL DtlObjPtr DtlMem(const DtlObjPtr& args, const DtlObjPtr& env); 00363 DT_DLL_MTL DtlObjPtr DtlMinus(const DtlObjPtr& args, const DtlObjPtr& env); 00364 DT_DLL_MTL DtlObjPtr DtlMultiply(const DtlObjPtr& args, const DtlObjPtr& env); 00365 DT_DLL_MTL DtlObjPtr DtlNewFrame(const DtlObjPtr& args, const DtlObjPtr& env); 00366 DT_DLL_MTL DtlObjPtr DtlNotOrNull(const DtlObjPtr& args, const DtlObjPtr& env); 00367 DT_DLL_MTL DtlObjPtr DtlNumberp(const DtlObjPtr& args, const DtlObjPtr& env); 00368 DT_DLL_MTL DtlObjPtr DtlOr(const DtlObjPtr& args, const DtlObjPtr& env); 00369 DT_DLL_MTL DtlObjPtr DtlPlus(const DtlObjPtr& args, const DtlObjPtr& env); 00370 DT_DLL_MTL DtlObjPtr DtlPopen(const DtlObjPtr& args, const DtlObjPtr& env); 00371 DT_DLL_MTL DtlObjPtr DtlPrin1(const DtlObjPtr& args, const DtlObjPtr& env); 00372 DT_DLL_MTL DtlObjPtr DtlPutenv(const DtlObjPtr& args, const DtlObjPtr& env); 00373 DT_DLL_MTL DtlObjPtr DtlReverse(const DtlObjPtr& args, const DtlObjPtr& env); 00374 DT_DLL_MTL DtlObjPtr DtlQuote(const DtlObjPtr& args, const DtlObjPtr& env); 00375 DT_DLL_MTL DtlObjPtr DtlSequence(const DtlObjPtr& args, const DtlObjPtr& env); 00376 DT_DLL_MTL DtlObjPtr DtlSetq(const DtlObjPtr& args, const DtlObjPtr& env); 00377 DT_DLL_MTL DtlObjPtr DtlSetqBoundVariable(const DtlObjPtr& args, const DtlObjPtr& env); 00378 DT_DLL_MTL DtlObjPtr DtlSin(const DtlObjPtr& args, const DtlObjPtr& env); 00379 DT_DLL_MTL DtlObjPtr DtlStringAppend(const DtlObjPtr& args, const DtlObjPtr& env); 00380 DT_DLL_MTL DtlObjPtr DtlStringEqual(const DtlObjPtr& args, const DtlObjPtr& env); 00381 DT_DLL_MTL DtlObjPtr DtlStringp(const DtlObjPtr& args, const DtlObjPtr& env); 00382 DT_DLL_MTL DtlObjPtr DtlTheFrame(const DtlObjPtr& args, const DtlObjPtr& env); 00383 DT_DLL_MTL DtlObjPtr DtlLocativep(const DtlObjPtr& args, const DtlObjPtr& env); 00384 DT_DLL_MTL DtlObjPtr DtlSystem(const DtlObjPtr& args, const DtlObjPtr& env); 00385 DT_DLL_MTL DtlObjPtr DtlTerpri(const DtlObjPtr& args, const DtlObjPtr& env); 00386 00388 DT_DLL_MTL DtlObjPtr DtlPrintRegistered(const DtlObjPtr&, const DtlObjPtr& env); 00389 DT_DLL_MTL DtlObjPtr DtlPathCross(const DtlObjPtr&, const DtlObjPtr& env); 00390 00392 DT_DLL_MTL DtlObjPtr DtlStringToNumber(const DtlObjPtr& args, const DtlObjPtr& env); 00393 DT_DLL_MTL DtlObjPtr DtlNumberToString(const DtlObjPtr& args, const DtlObjPtr& env); 00394 00395 /* ---------------------- REGISTER ---------------------- */ 00396 /* 00397 * DtcRegister facilitates the setting of simple C variables 00398 * (i.e. double, int, char *) from MTL files. 00399 * 00400 * Each call to DtcRegister creates a lisp-variable "name" and 00401 * initializes it to the value pointed to by "addr". 00402 * It also adds the lisp-variable and C-address to a list of 00403 * "registered" variables. 00404 * At the end of DtlLoadLispFile, every registered variable will have 00405 * its lisp value evaluated and copied to the registered C address. 00406 * 00407 * Note: Lisp evaluation and copy to C does not occur until the end of 00408 * DtlLoadLispFile, so modified values will not automatically be 00409 * visible to C functions called from within a lisp file. To bring 00410 * a C value up-to-date from within such a function, call 00411 * DtcSetIfBoundp() or DtcLispToC(). 00412 * 00413 * The macro DtcREGISTER can be useful to ensure that corresponding C 00414 * and Lisp variables share the same name. 00415 * 00416 * Use of setqb (aka setq-bound-variable) is recommended for registered 00417 * variables because it will complain if the parameter is misspelled. 00418 * 00419 * The registered address must be valid at the time DtlLoadLispFile is 00420 * called [i.e. be careful with automatic variables on the stack.] 00421 * 00422 * All calls to DtcRegister() should be made between 00423 * DtlGlobalEnvInit() and DtlLoadLispFile(). 00424 */ 00425 00430 DT_DLL_MTL void DtcGlobalEnvInit(DtlObjPtr& env); 00431 00432 #define DtcREGISTER(var, env, params) DtcRegister(#var, &var, env, params) 00433 #define DtcDEFINE(type, var, dflt) type var = dflt; DtcREGISTER(var) 00434 00435 DT_DLL_MTL int DtcRegister( 00436 const char *name, float *addr, const DtlObjPtr& env, DtList* allParams); 00437 DT_DLL_MTL int DtcRegister( 00438 const char *name, double *addr, const DtlObjPtr& env, DtList* allParams); 00439 DT_DLL_MTL int DtcRegister( 00440 const char *name, int* addr, const DtlObjPtr& env, DtList* allParams); 00441 DT_DLL_MTL int DtcRegister( 00442 const char *name, unsigned long *addr, const DtlObjPtr& env, DtList* allParams); 00443 DT_DLL_MTL int DtcRegister( 00444 const char *name, char **addr, const DtlObjPtr& env, DtList* allParams); 00445 DT_DLL_MTL int DtcRegister( 00446 const char *name, DtString *addr, const DtlObjPtr& env, DtList* allParams); 00447 DT_DLL_MTL int DtcRegister( 00448 const char *name, long *addr, const DtlObjPtr& env, DtList* allParams); 00449 DT_DLL_MTL int DtcRegister( 00450 const char *name, short *addr, const DtlObjPtr& env, DtList* allParams); 00451 DT_DLL_MTL int DtcRegister( 00452 const char *name, unsigned short *addr, const DtlObjPtr& env, DtList* allParams); 00453 #if DT_HAVE_64BIT_LONGS 00454 DT_DLL_MTL int DtcRegister( 00455 const char *name, unsigned int *addr, const DtlObjPtr& env, DtList* allParams); 00456 #endif 00457 00461 DT_DLL_MTL void DtcLispToC(DtList* allParams); 00462 00463 00467 DT_DLL_MTL void DtcCToLisp(DtList* allParams); 00468 00470 DT_DLL_MTL void DtcEmptyParamList(DtList* allParams); 00471 00473 00474 inline int DtlObj::refcnt() 00475 { 00476 return rcnt; 00477 } 00478 00479 inline void DtlObj::setRefcnt(int r) 00480 { 00481 rcnt = r; 00482 } 00483 00484 inline DtlObjPtr::~DtlObjPtr() 00485 { 00486 DecObjRefCnt(ptr); 00487 } 00488 00489 #ifdef DtUSE_UTILITIES_NAMESPACE 00490 } 00491 #endif 00492 00493 #endif /* _MTL_H_ */ 00494 00495 00496