sml.h

Go to the documentation of this file.
00001 /******************************************************************************
00002  *
00003  * \file mi32/sml.h
00004  * \brief SML -- Spatial Manipulation Language
00005  *
00006  * SML is used in TNTmips for both a scripting language and for database
00007  * query operations.
00008  *
00009  * \if NODOC
00010  * $Log: sml.h_v $
00011  * Revision 1.478  2004/11/16 23:49:03  dglasser
00012  * Added func to close query windows.
00013  *
00014  * Revision 1.477  2004/11/12 23:24:05  dwilliss
00015  * *** empty log message ***
00016  *
00017  * Revision 1.476  2004/11/03 23:16:27  dglasser
00018  * Added a function to get at any old alias name by new name and index.
00019  *
00020  * Revision 1.475  2004/10/13 15:45:09  dwilliss
00021  * Starting adding generic container base class, but then ifdef'd it out
00022  * cause it isn't done yet
00023  *
00024  * Revision 1.474  2004/10/04 18:11:44  vdronov
00025  * *** empty log message ***
00026  *
00027  * Revision 1.473  2004/10/01 22:47:49  vdronov
00028  * added TRANSMODEL
00029  *
00030  * Revision 1.472  2004/10/01 16:31:39  dwilliss
00031  * Added a member to context
00032  *
00033  * Revision 1.471  2004/09/30 21:57:42  vdronov
00034  * added CTRLEDGE and CTRLPOINT names
00035  *
00036  * Revision 1.470  2004/09/30 21:53:58  dwilliss
00037  * got rid of some old deprecated stuff
00038  *
00039  * Revision 1.469  2004/09/29 22:12:27  vdronov
00040  * added RVC_GEOREFERENCE
00041  *
00042  * Revision 1.468  2004/09/28 17:33:24  dglasser
00043  * added hatch pattern.
00044  *
00045  * Revision 1.467  2004/09/21 22:19:39  dwilliss
00046  * Removed prototype for retired method
00047  *
00048  * Revision 1.466  2004/09/21 15:52:12  dglasser
00049  * Added SMLrasterObject methods to access info members.
00050  *
00051  * Revision 1.465  2004/09/15 19:53:08  scowan
00052  * Changed just so that the build machine will get it.
00053  *
00054  * Revision 1.464  2004/09/15 19:19:28  dwilliss
00055  * SMLHASH needed to be exported
00056  *
00057  * Revision 1.463  2004/09/15 17:18:25  dwilliss
00058  * oops, needs to be methods returning SMLCLASSHASH, not SMLHASH
00059  *
00060  * Revision 1.462  2004/09/15 17:11:41  dwilliss
00061  * added AddMethodOld version for methods returning SMLHASH
00062  *
00063  * Revision 1.461  2004/09/07 13:34:01  dwilliss
00064  * added a classname define
00065  *
00066  * Revision 1.460  2004/09/03 17:03:38  dwilliss
00067  * new classname macro
00068  *
00069  * Revision 1.459  2004/09/01 22:43:55  dwilliss
00070  * Removed some stuff that's been deprecated for a while
00071  *
00072  * Revision 1.458  2004/09/01 22:37:11  scowan
00073  * Added handle field to sml cad object.
00074  *
00075  * Revision 1.457  2004/08/27 14:45:10  dwilliss
00076  * *** empty log message ***
00077  *
00078  * Revision 1.456  2004/08/16 20:02:04  dwilliss
00079  * new class name
00080  * .;
00081  *
00082  * Revision 1.455  2004/08/09 19:11:36  dwilliss
00083  * *** empty log message ***
00084  *
00085  * Revision 1.454  2004/08/06 15:13:17  dglasser
00086  * Added function to get SML function description.
00087  *
00088  * Revision 1.453  2004/08/05 21:35:23  dwilliss
00089  * added method
00090  *
00091  * Revision 1.452  2004/08/05 20:49:16  scowan
00092  * Removed unused method.
00093  *
00094  * Revision 1.451  2004/08/05 20:35:41  dwilliss
00095  * Added some more clasname macros
00096  *
00097  * Revision 1.450  2004/07/19 19:30:59  scowan
00098  * Removed unnecessary forward declaration.
00099  *
00100  * Revision 1.449  2004/07/16 22:14:34  scowan
00101  * Removed unneeded include files.
00102  *
00103  * Revision 1.448  2004/07/14 16:05:42  dwilliss
00104  * Added to DESTOBJ flags
00105  *
00106  * Revision 1.447  2004/07/02 16:19:48  dwilliss
00107  * Added an STYPEFLAG
00108  *
00109  * Revision 1.446  2004/06/30 20:39:01  dwilliss
00110  * Added static method to allocate SMLOBJECT
00111  *
00112  * Revision 1.445  2004/06/30 19:22:53  dwilliss
00113  * Added new SMLCLASSNAME for REGION2D
00114  *
00115  * Revision 1.444  2004/06/28 17:39:15  dwilliss
00116  * Added some methods to SMLOBJECT
00117  *
00118  * Revision 1.443  2004/06/25 22:27:21  dwilliss
00119  * Changes for regions and COORDREFSYS
00120  *
00121  * Revision 1.442  2004/06/23 15:55:27  dwilliss
00122  * Added SMLSTYLEOBJECT
00123  *
00124  * Revision 1.441  2004/06/23 14:35:47  dwilliss
00125  * export SMLGEOSTRUCT now
00126  *
00127  * Revision 1.440  2004/06/22 22:02:04  dwilliss
00128  * *** empty log message ***
00129  *
00130  * Revision 1.439  2004/06/22 21:57:13  dwilliss
00131  * Oops. changed from struct to class
00132  *
00133  * Revision 1.438  2004/06/22 21:56:21  dwilliss
00134  * Changed SMLGEOSTRUCT to a real class and hid all the members.
00135  * Preparing to convert to new spatial reference
00136  *
00137  * Revision 1.437  2004/04/22 14:50:01  dwilliss
00138  * Added a member to SMLOBJECT
00139  *
00140  * Revision 1.436  2004/04/14 16:13:07  dwilliss
00141  * Added SMLSHAPEOBJECT
00142  *
00143  * Revision 1.435  2004/04/13 22:14:02  dwilliss
00144  * New methods on NUMHASH
00145  * New ResizeArray method on SMLSYMBOL that takes more parameters
00146  *
00147  * Revision 1.434  2004/04/13 15:16:37  scowan
00148  * Added shape stype.
00149  *
00150  * Revision 1.433  2004/04/09 21:10:28  dwilliss
00151  * fixed warning
00152  *
00153  * Revision 1.432  2004/04/09 14:03:46  dwilliss
00154  * Gave SMLSTRING a friend class just to shut up a VC7 warning.
00155  *
00156  * Revision 1.431  2004/04/07 20:50:05  dwilliss
00157  * added some object methods
00158  *
00159  * Revision 1.430  2004/03/29 17:49:27  dwilliss
00160  * Changes to hash classes
00161  *
00162  * Revision 1.429  2004/03/25 22:08:21  dwilliss
00163  * HASH support
00164  *
00165  * Revision 1.428  2004/03/22 16:49:34  dwilliss
00166  * Deprecated the the AddMethodOld that doesn't take an extra parameter
00167  *
00168  * Revision 1.427  2004/03/19 23:46:59  dwilliss
00169  * added AddMethodOld that takes an extra parameter to specify if return value
00170  * is allocated or not
00171  *
00172  * Revision 1.426  2004/03/18 23:06:39  dwilliss
00173  * No more way to declare a class function without specifying if it returns
00174  * a copy or a reference
00175  *
00176  * Revision 1.425  2004/03/18 00:01:55  dwilliss
00177  * changed deprecation order
00178  *
00179  * Revision 1.424  2004/03/17 23:40:07  dwilliss
00180  * *** empty log message ***
00181  *
00182  * Revision 1.423  2004/03/15 16:33:36  dwilliss
00183  * modified SMLHASH a bit
00184  *
00185  * Revision 1.422  2004/03/15 15:34:43  dwilliss
00186  * Addes SMLHASH class
00187  *
00188  * Revision 1.421  2004/03/05 15:27:43  dwilliss
00189  * SMLAUTOCLASS needs to have virtual destructor to avoid compiler warnings
00190  * in VC7
00191  *
00192  * Revision 1.420  2004/03/01 15:49:03  mju
00193  * Disable deprecated declaration warning within header itself.
00194  *
00195  * Revision 1.419  2004/02/27 20:38:37  dwilliss
00196  * *** empty log message ***
00197  *
00198  * Revision 1.418  2004/02/25 18:13:54  dwilliss
00199  * Redesign of how function calls cope with parameters.  Caller has to pop
00200  * them now because only it knows if the parameter was a temporary and how
00201  * to free it if it was.
00202  *
00203  * Revision 1.417  2004/02/16 21:51:19  mju
00204  * Don't deprecate stuff that causes in-header warnings.
00205  *
00206  * Revision 1.416  2004/02/13 17:28:54  dwilliss
00207  * Added function prototype support
00208  *
00209  * Revision 1.415  2004/02/10 18:50:25  dwilliss
00210  * Added a callback reason
00211  *
00212  * Revision 1.414  2004/02/03 14:04:39  mju
00213  * Add defns for some classnames.
00214  *
00215  * Revision 1.413  2004/01/29 23:23:16  dwilliss
00216  * Added a couple new methods and removed a bunch of stuff that's been
00217  * deprecated for a while
00218  *
00219  * Revision 1.412  2004/01/29 16:29:16  mju
00220  * Don't call query editor for MFC.
00221  *
00222  * Revision 1.411  2004/01/09 18:55:08  msmith
00223  * added sig
00224  *
00225  * Revision 1.410  2004/01/07 23:52:07  scowan
00226  * Removal of unnecessary include files.
00227  * Changed to use new vector toolkit.
00228  *
00229  * Revision 1.409  2003/12/19 23:49:10  dwilliss
00230  * Deprecate some old methods
00231  *
00232  * Revision 1.408  2003/12/16 18:05:43  dwilliss
00233  * Added new autoclass for classes which have destructors but no default
00234  * constructor or copy constructor
00235  *
00236  * Revision 1.407  2003/12/11 17:59:17  dwilliss
00237  * New proto
00238  *
00239  * Revision 1.406  2003/11/26 18:46:24  msmith
00240  * added a defsig
00241  *
00242  * Revision 1.405  2003/11/26 17:53:45  dwilliss
00243  * DrawOptimizedLabels now takes an ELEMTYPE parameter
00244  *
00245  * Revision 1.404  2003/11/26 16:24:57  dwilliss
00246  * Changed some private members from int to ELEMTYPE
00247  * Added a version of CallFunction that takes an ELEMTYPE as well as elemnum
00248  *
00249  * Revision 1.403  2003/11/17 18:07:05  dwilliss
00250  * nc
00251  *
00252  * Revision 1.402  2003/11/04 18:44:50  dwilliss
00253  * *** empty log message ***
00254  *
00255  * Revision 1.401  2003/10/24 19:36:02  dwilliss
00256  * Added methods to objects to get RVC Interface class instance
00257  *
00258  * Revision 1.400  2003/10/20 16:45:18  dwilliss
00259  * Put back some methods that I had retired too early.
00260  * Turns out they were deprecated but I hadn't hidden the prototype outside
00261  * the DLL so old code still called them
00262  *
00263  * Revision 1.399  2003/10/20 15:43:47  dwilliss
00264  * Deprecated some methods
00265  * Moved some private prototypes to mi32p/dbqueryp.h
00266  *
00267  * Revision 1.398  2003/10/16 17:12:28  dwilliss
00268  * Deprecated some SMLSTRING methods.
00269  * StringAlloc no longer needs a length.
00270  *
00271  * Revision 1.397  2003/10/15 22:53:13  dwilliss
00272  * Added methods to SMLTMPSTR to eliminate need for operator overloads on
00273  * casting to (char*) and (UNICODE*)
00274  *
00275  * Revision 1.396  2003/10/15 22:43:22  dwilliss
00276  * SMLSTRING now derived from MISTRING
00277  * Simplifies things a LOT!
00278  *
00279  * Revision 1.395  2003/10/08 22:07:12  dwilliss
00280  * Added Get/SetFilePath to SMLOBJECT.  Deprecated the Get/SetFilename methods
00281  *
00282  * Revision 1.394  2003/09/30 16:25:48  dwilliss
00283  * Doxygen fix
00284  *
00285  * Revision 1.393  2003/09/23 14:13:18  dwilliss
00286  * made SMLCONTEXT a friend of SMLELEMDATA to stop a gcc warning
00287  *
00288  * Revision 1.392  2003/09/15 13:49:56  fileserver!dwilliss
00289  * Doxygen
00290  *
00291  * Revision 1.391  2003/09/10 22:39:45  dwilliss
00292  * General cleanup
00293  *
00294  * Revision 1.390  2003/09/09 21:15:38  dwilliss
00295  * SMLSTRING had some inline methods which is BAD when exported from a DLL
00296  *
00297  * Revision 1.389  2003/09/05 17:07:50  mju
00298  * Add SMLSTRING::GetSTRUTF8 method.
00299  *
00300  * Revision 1.388  2003/08/28 22:25:04  dwilliss
00301  * Added versions of some methods that should have been taking const pointers
00302  *
00303  * Revision 1.387  2003/08/27 14:24:20  dwilliss
00304  * Added CurrentFuncitonIsClassMethod()
00305  *
00306  * Revision 1.386  2003/08/26 20:57:53  dwilliss
00307  * Added SMLCLASSNAME for viewable
00308  *
00309  * Revision 1.385  2003/08/19 17:52:13  dwilliss
00310  * Allow for name aliases
00311  *
00312  * Revision 1.384  2003/08/18 19:48:30  dwilliss
00313  * Added support for name aliases
00314  *
00315  * Revision 1.383  2003/08/12 17:58:24  dwilliss
00316  * Added a version of GetLastError that doesn't take any string.  We let the
00317  * normal error handling mechanism take care of it for us now
00318  *
00319  * Revision 1.382  2003/08/06 22:16:22  dwilliss
00320  * Changed LoadPlugins/UnloadPlugins to exist on all platforms, even if they
00321  * do nothing.  Keep track of plugins in a simple array now
00322  *
00323  * Revision 1.381  2003/08/04 19:48:11  dwilliss
00324  * *** empty log message ***
00325  *
00326  * Revision 1.380  2003/08/04 17:03:37  dwilliss
00327  * Another method needed for debugging
00328  *
00329  * Revision 1.379  2003/08/04 16:28:28  dwilliss
00330  * Some methods needed for the SML Debugger
00331  *
00332  * Revision 1.378  2003/07/23 20:47:29  dwilliss
00333  * Added SMLCLASSMEMBER::TYPE_Enum
00334  *
00335  * Revision 1.377  2003/07/17 22:12:24  dwilliss
00336  * *** empty log message ***
00337  *
00338  * Revision 1.376  2003/07/17 15:40:04  dwilliss
00339  * Get rid of ElemList from SMLOBJECT.  Nothing seemed to use it and it's
00340  * going to be replaced soon anyway
00341  *
00342  * Revision 1.375  2003/07/17 15:13:02  dwilliss
00343  * *** empty log message ***
00344  *
00345  * Revision 1.374  2003/07/17 14:05:51  dwilliss
00346  * Added a proto.  Fixed the debug class
00347  *
00348  * Revision 1.373  2003/06/30 21:02:55  dwilliss
00349  * const change in private function
00350  *
00351  * Revision 1.372  2003/06/25 15:29:33  dwilliss
00352  * Added MISTRING versions of List and ListLine
00353  *
00354  * Revision 1.371  2003/06/14 02:10:21  scowan
00355  * Changed use of dregion to a trans2d mapgen.
00356  *
00357  * Revision 1.370  2003/06/03 17:08:27  dwilliss
00358  * Added an AddMethodOldCB.
00359  *
00360  * Revision 1.369  2003/06/02 20:08:44  dwilliss
00361  * Added stuff for OLE
00362  *
00363  * Revision 1.368  2003/05/30 17:09:07  dwilliss
00364  * OLE additions (private)
00365  *
00366  * Revision 1.367  2003/05/09 20:19:40  dwilliss
00367  * Added private class and methods to context
00368  *
00369  * Revision 1.366  2003/05/06 21:25:57  dwilliss
00370  * Added a CreateHisto method to SMLRASTEROBJECT
00371  *
00372  * Revision 1.365  2003/05/01 16:25:02  dwilliss
00373  * Added changes from tnt68 version back into DV.
00374  *
00375  * Revision 1.364  2003/04/23 21:59:07  mju
00376  * Remove some obsolete "main" funcs.
00377  * Add default flags for one Main func and elimate 'Ext' version.
00378  *
00379  * Revision 1.363  2003/03/06 17:05:37  dwilliss
00380  * Gave SMLELEMDATA some private methods
00381  *
00382  * Revision 1.362  2003/03/06 16:33:32  dwilliss
00383  * Added a couple bools to SMLELEMDATA to keep track of undo state
00384  *
00385  * Revision 1.361  2003/02/28 16:46:24  dwilliss
00386  * Deprecated a bunch of non-const methods.
00387  * Made a version of SetArgError that takes a non-const string, deprecated
00388  * the old one.
00389  *
00390  * Revision 1.360  2003/02/20 17:10:05  dwilliss
00391  * Added private members to context for parsing
00392  *
00393  * Revision 1.359  2003/02/19 21:40:20  dwilliss
00394  * Added a new private method to context
00395  *
00396  * Revision 1.358  2003/01/20 16:46:57  dwilliss
00397  * Can't use _T for template argument because MFC #defines it to char*
00398  * Thank-you Microsoft!
00399  *
00400  * Revision 1.357  2003/01/15 23:20:19  dwilliss
00401  * mostly comment changes
00402  *
00403  * Revision 1.356  2003/01/15 17:14:29  dwilliss
00404  * Added SMLAUTOCLASS_NEW_NOCOPY_T
00405  *
00406  * Revision 1.355  2002/12/09 17:14:10  scowan
00407  * Changed init from db handle method and added member to sml elem data.
00408  *
00409  * Revision 1.352  2002/12/02 18:07:53  dwilliss
00410  * Put it back.  Just reverse two parameters to avoid ambiguious overload
00411  *
00412  * Revision 1.351  2002/12/02 17:54:54  dwilliss
00413  * Ifdef'd out one of the SMLFUNCDEF constructors.  Seems to be confusing
00414  * VC6.0
00415  *
00416  * Revision 1.350  2002/11/27 23:27:26  dwilliss
00417  * Added an SMLFUNCDEF structure which provided constructors for SMLFUNC in a
00418  * type-safe way.
00419  * Deprecated the old inline methods that tried to do the same thing because
00420  * gcc 3.1 chokes on them.
00421  *
00422  * Revision 1.349  2002/11/27 22:01:06  dwilliss
00423  * Added experimental SMLFUNCVOID to provide better way to define these things
00424  * in a type-safe way.
00425  *
00426  * Revision 1.348  2002/11/20 17:24:26  dwilliss
00427  * Added SetStrictSyntax method
00428  *
00429  * Revision 1.347  2002/11/20 17:17:25  dwilliss
00430  * Added method for adding parser warnings
00431  *
00432  * Revision 1.346  2002/11/13 17:11:36  dwilliss
00433  * SMLELEMDATA now has constructor/destructor
00434  *
00435  * Revision 1.345  2002/10/08 16:43:46  dwilliss
00436  * Deprecated a couple methods that took non-const strings
00437  *
00438  * Revision 1.343  2002/10/01 16:39:34  dwilliss
00439  * Defined a new flag for SMLCONTEXT::Run()
00440  *
00441  * Revision 1.341  2002/09/10 20:47:11  dwilliss
00442  * Decided not to deprecate a macro yet.
00443  *
00444  * Revision 1.340  2002/09/10 20:45:15  dwilliss
00445  * SMLFUNCDEF macros no longer fill in description.
00446  *
00447  * Revision 1.339  2002/09/10 17:56:00  dwilliss
00448  * Oops.  Tried to prototype an overload of a function with C linkage
00449  *
00450  * Revision 1.338  2002/09/10 17:51:24  dwilliss
00451  * Clean up after deprecated stuff fixed.  Some stuff that was deprecated
00452  * before can just go away now
00453  *
00454  * Revision 1.337  2002/09/09 17:08:28  mju
00455  * Remove deprecated #defines and inlines.
00456  * Retire exported fns/methods with comment as to when can remove.
00457  *
00458  * Revision 1.336  2002/09/09 15:51:39  mju
00459  * Remove previously retired seterrorcode fns/method.
00460  *
00461  * Revision 1.335  2002/09/06 21:52:55  dwilliss
00462  * Added Open/CloseDatabase methods to SMLELEMDATA.  Deprecated
00463  * SMLELEMDATA::SetHandle(), as it has been deemed "evil"
00464  *
00465  * Revision 1.334  2002/09/03 22:38:22  dwilliss
00466  * Deprecate stuff
00467  *
00468  * Revision 1.333  2002/08/28 22:44:00  dwilliss
00469  * Added some methods to get/set segment node
00470  *
00471  * Revision 1.332  2002/08/19 15:13:35  dwilliss
00472  * Got rid of some new warnings generated by gcc 3.1
00473  *
00474  * Revision 1.331  2002/08/16 21:04:35  dwilliss
00475  * Added XML document hooks to context
00476  *
00477  * Revision 1.330  2002/07/30 19:04:55  dwilliss
00478  * Use 0 instead of NULL for default parm
00479  *
00480  * Revision 1.329  2002/07/16 19:26:46  dwilliss
00481  * Added a GetFuncGroup method to SMLFUNC
00482  *
00483  * Revision 1.328  2002/06/07 21:28:14  dwilliss
00484  * Changed a private function to take const FIELPATH insteadh of UNICODE*
00485  *
00486  * Revision 1.327  2002/06/05 21:10:49  dwilliss
00487  * Added GetFieldType method to SMLSYMBOL'
00488  *
00489  * Revision 1.326  2002/06/03 16:20:55  dwilliss
00490  * Added SIG value for void function taking 4 doubles
00491  *
00492  * Revision 1.325  2002/05/16 16:15:39  dwilliss
00493  * force SMLSYMBOL members to be private for tonights build so I can make
00494  * sure I didn't miss anybody using them illegally.
00495  *
00496  * Revision 1.324  2002/05/16 16:08:33  dwilliss
00497  * Oops.  left SMLSYMBOL members private.
00498  * Now only private if compiling for no deprecated (and not for rvcsys)
00499  *
00500  * Revision 1.323  2002/05/16 15:59:47  dwilliss
00501  * Added a few more methods to access stuff in SMLSYMBOL
00502  *
00503  * Revision 1.322  2002/05/16 14:20:07  dwilliss
00504  * Deprecate the old GetValue
00505  *
00506  * Revision 1.321  2002/05/16 14:12:26  dwilliss
00507  * Get rid of default value on one method.  Causes ambiguious function
00508  * because we just added a new function taking just an MISTRING and returning
00509  * bool instead of void
00510  *
00511  * Revision 1.320  2002/05/16 14:02:13  dwilliss
00512  * Added two new GetValue methods to SMLSYMBOL
00513  *
00514  * Revision 1.319  2002/05/15 22:57:18  dwilliss
00515  * Deprecated FastSymbol inlines
00516  * Added some SMLSYMBOL method to access members that were previously being
00517  * accessed directly.  Plan to make all members private as of 6.7
00518  *
00519  * Revision 1.318  2002/04/26 22:20:52  dwilliss
00520  * DBQuery_LineStyleSetPoints() should take const pointer
00521  *
00522  * Revision 1.317  2002/04/19 14:20:10  dwilliss
00523  * Fixed compiler warning about function pointer typedef
00524  *
00525  * Revision 1.316  2002/04/16 19:12:47  dwilliss
00526  * Mac compile error
00527  *
00528  * Revision 1.315  2002/04/16 17:29:45  mju
00529  * Parms changed to query_setupdraw.
00530  *
00531  * Revision 1.312  2002/04/05 17:42:53  dwilliss
00532  * Clean up error handling.  Eliminate use of varargs SetErrCode
00533  *
00534  * Revision 1.311  2002/04/05 15:04:10  mju
00535  * Deprecate SetErrorCodeC.
00536  *
00537  * Revision 1.307  2002/03/28 22:28:08  dwilliss
00538  * Gave SMLCLASSMEMBER a TYPE enum so I could define a new one
00539  *
00540  * Revision 1.306  2002/03/26 21:44:29  dwilliss
00541  * SMLSTRING.SetString() now takes const pointers.  non-const versions still
00542  * defined but prototype only available in rvcsys.dll
00543  *
00544  * Revision 1.303  2002/03/25 20:17:13  dwilliss
00545  * SMLAUTOCLASS now has AddMethodOld() for functions returning strings
00546  * SMLAUTOCLASS now has AddMember()
00547  *
00548  * Revision 1.302  2002/03/01 18:45:39  dwilliss
00549  * GeorefAlloc and Copy now have flags to allow allocation in temp heap
00550  *
00551  * Revision 1.301  2002/02/25 21:09:40  dwilliss
00552  * Added a PrevTableSym member to context
00553  *
00554  * Revision 1.300  2002/02/19 17:07:05  dwilliss
00555  * Internal print buffer is now MISTRING
00556  *
00557  * Revision 1.299  2002/02/12 18:19:31  dwilliss
00558  * context now keeps track of what things its warned about so as to not repeat
00559  * itself.
00560  *
00561  * Revision 1.298  2002/01/30 17:22:04  dwilliss
00562  * Added StrictSyntax member to context
00563  *
00564  * Revision 1.297  2001/12/28 18:10:39  dwilliss
00565  * A few new DOCCODE methods
00566  *
00567  * Revision 1.296  2001/12/27 17:14:56  dwilliss
00568  * Now has real constructor/destructor.  Still private though.  You have
00569  * to use functions to allocate an SMLCONTEXT, and use the Destroy() method
00570  * to delete it.
00571  *
00572  * Revision 1.294  2001/12/26 22:58:53  dwilliss
00573  * Mike and I changed our minds on the DEPRICATED thing.  It's now a constant
00574  * to say when the feature will be RETIRED.  If it's set, it's considered
00575  * to be deprecated now
00576  *
00577  * Revision 1.293  2001/12/26 22:35:35  dwilliss
00578  * Ok, so I spelled DEPRECATED wrong.  That's what spell check is for!
00579  *
00580  * Revision 1.292  2001/12/26 22:31:35  dwilliss
00581  * Defined an SML_DEPRICATED constant
00582  *
00583  * Revision 1.291  2001/12/21 00:02:20  dwilliss
00584  * added funcgroup to SMLFUNC
00585  *
00586  * Revision 1.290  2001/12/19 21:37:21  dwilliss
00587  * AutoClass stuff works now
00588  *
00589  * Revision 1.289  2001/12/19 15:12:58  dwilliss
00590  * Got rid of typedef that gcc didn't like.  Wasn't using it any way
00591  *
00592  * Revision 1.288  2001/12/18 21:01:31  dwilliss
00593  * More AutoClass changes
00594  *
00595  * Revision 1.287  2001/12/17 15:28:17  dwilliss
00596  * SMLAUTOCLASS setup function doesn't need to take an SMLCONTEXT
00597  *
00598  * Revision 1.286  2001/12/14 22:43:02  dwilliss
00599  * Autoclass stuff more solidified
00600  *
00601  * Revision 1.285  2001/12/14 20:16:34  dwilliss
00602  * Added SMLAUTOCLASS
00603  *
00604  * Revision 1.282  2001/12/10 21:46:39  dwilliss
00605  * Major changes to documentation code
00606  *
00607  * Revision 1.281  2001/10/04 19:40:18  dwilliss
00608  * inline functions for defining function returning class was marking them
00609  * as classes, not as functions returning class.
00610  *
00611  * Revision 1.280  2001/10/04 17:30:20  dwilliss
00612  * Some new prototypes
00613  *
00614  * Revision 1.279  2001/09/19 22:27:58  dwilliss
00615  * Added prototype for MFC query editor
00616  *
00617  * Revision 1.278  2001/08/08 22:42:11  dwilliss
00618  * Added a protected member to SMLCONTEXT
00619  *
00620  * Revision 1.277  2001/07/06 15:44:29  mju
00621  * Add DEFINE_SMLCLASS_AUTO macro.
00622  *
00623  * Revision 1.276  2001/05/21 17:01:02  dwilliss
00624  * Change CopyConstructor
00625  *
00626  * Revision 1.275  2001/02/15 21:54:35  dwilliss
00627  * deprecate an old function
00628  *
00629  * Revision 1.274  2001/02/15 21:49:54  dwilliss
00630  * proto for DBQuery_EditMISTRING
00631  *
00632  * Revision 1.273  2001/02/01 17:58:20  dwilliss
00633  * Added new Func def macro for functions returning class which we have to
00634  * name differently than SML wants
00635  * Added encoding conversion to SMLFILE
00636  *
00637  * Revision 1.272  2001/01/25 23:04:18  dwilliss
00638  * Deprecate use of SMLSTRING constructor/destructor
00639  *
00640  * Revision 1.270  2001/01/18 16:58:56  dwilliss
00641  * Added MemPool methods to context
00642  *
00643  * Revision 1.269  2001/01/17 23:50:51  dwilliss
00644  * Clean up strings a bit
00645  *
00646  * Revision 1.268  2001/01/16 22:54:07  dwilliss
00647  * Change all bit-field things to bool values
00648  *
00649  * Revision 1.267  2001/01/16 18:53:31  dwilliss
00650  * Changed the way USERDATA is done so that it can be added to both
00651  * strings and symbols
00652  *
00653  * Revision 1.266  2000/12/13 17:48:19  dwilliss
00654  * Changed two spare bytes in SMLGEOSTRUCT to "Model"
00655  *
00656  * Revision 1.265  2000/11/22 22:23:13  dwilliss
00657  * Added format to GetValue() method that I just added last revision
00658  *
00659  * Revision 1.264  2000/11/22 22:12:10  dwilliss
00660  * Added GetValue method to SMLSYMBOL taking an MISTRING to fill int
00661  *
00662  * Revision 1.263  2000/10/31 16:50:50  mju
00663  * Add const versions of AddObjectSymbol.
00664  *
00665  * Revision 1.262  2000/10/26 16:01:28  mju
00666  * Add defaults for GetLastError.
00667  *
00668  * Revision 1.261  2000/10/13 16:35:14  dwilliss
00669  * changed a class back to struct
00670  *
00671  * Revision 1.260  2000/10/13 14:33:00  dwilliss
00672  * When delaring friends, must specify friend class NAME, not just friend NAME
00673  *
00674  * Revision 1.259  2000/09/13 15:03:08  dwilliss
00675  * I forgot, Macs don't export class methods the same way everybody else does.
00676  * Gotta do something special just for them.
00677  *
00678  * Revision 1.258  2000/09/12 21:16:43  dwilliss
00679  * new qflag
00680  *
00681  * Revision 1.257  2000/09/08 20:27:27  dwilliss
00682  * Defined new QFLAG
00683  *
00684  * Revision 1.256  2000/09/07 22:05:58  dwilliss
00685  * Added several new methods to SMLELEMDATA and SMLTABLE
00686  *
00687  * Revision 1.255  2000/08/31 15:04:43  mju
00688  * Add default for 'flags' in Parse() method.
00689  *
00690  * Revision 1.253  2000/08/29 20:10:33  dwilliss
00691  * Added case senssitive flag to context
00692  *
00693  * Revision 1.251  2000/08/11 20:17:49  mju
00694  * Add context::setsegment().
00695  *
00696  * Revision 1.250  2000/07/17 17:42:30  mju
00697  * Add const-name versions of AddSymbol and AddClassSymbol.
00698  *
00699  * Revision 1.249  2000/06/21 17:25:32  dwilliss
00700  * Changed object list to keep track of own head/tail, prev/next rather than
00701  * using MLIST.  MLIST assumes you can make the first element of the
00702  * structure a LINKEDLISTNODE, but if you have a vtable, you can't
00703  *
00704  * Revision 1.248  2000/06/13 20:59:38  dwilliss
00705  * Added USERDATA to SMLSTRING
00706  *
00707  * Revision 1.247  2000/06/09 14:21:30  mju
00708  * Add context::parse() method using const string.
00709  *
00710  * Revision 1.246  2000/06/05 14:09:06  mju
00711  * Add SMLSYMBOL::SetValue methods using const strings.
00712  *
00713  * Revision 1.245  2000/06/05 13:50:47  mju
00714  * Remove evil inclusion order dependencies.
00715  * Add SML_EditScript() inline.
00716  *
00717  * Revision 1.244  2000/05/26 19:26:09  mju
00718  * Add SML_ReadScript() using MISTRING.
00719  *
00720  * Revision 1.242  2000/05/26 15:19:48  dwilliss
00721  * Added SMLCONTEXT::CallbackAddGlobal() and reasons
00722  *
00723  * Revision 1.241  2000/05/24 22:11:21  mju
00724  * Add inlines/macros for defining various types of functions.
00725  * Change DEFINE_SMLCLASS_SIMPLE to take classname.
00726  * Remove ...FUNCDEFEXT and adjust other macros accordingly.
00727  * Add SMLCLASSWriteTableObj prototype.
00728  *
00729  * Revision 1.240  2000/05/19 22:18:40  mju
00730  * Add SMLCLASSNAME #defines.
00731  *
00732  * Revision 1.239  2000/05/17 22:27:26  dwilliss
00733  * More doc issues
00734  *
00735  * Revision 1.238  2000/05/17 17:37:02  dwilliss
00736  * More documentation
00737  *
00738  * Revision 1.237  2000/05/17 15:59:59  dwilliss
00739  * More documentation updates.
00740  * Added StringAlloc methods to SMLCONTEXT so that SMLSTRING's constructors
00741  *   can become private (some day)
00742  * SMLTABLEDATA now has some exported methods (data still opaque)
00743  *
00744  * Revision 1.236  2000/05/17 14:44:08  mju
00745  * In _SML_ReadScript use const for filename.
00746  * Add SML_ReadScript() inline overload that uses FILEPATH and rearranges parms to allow most to have defaults.
00747  * Add default for element parm in CONTEXT::CallFunction().
00748  *
00749  * Revision 1.235  2000/05/16 20:33:04  dwilliss
00750  * Added ReadElement method to CAD
00751  *
00752  * Revision 1.234  2000/05/12 19:59:45  dwilliss
00753  * Fixed ignore/End comments
00754  *
00755  * Revision 1.231  2000/04/28 21:42:27  dwilliss
00756  * More documentation
00757  *
00758  * Revision 1.230  2000/04/28 20:37:47  dwilliss
00759  * Put extern "C" around some prototypes that I had moved
00760  *
00761  * Revision 1.229  2000/04/28 17:49:23  dwilliss
00762  * Massive changes that were waiting until after 6.3 went out the door
00763  *
00764  * Revision 1.227  2000/03/07 20:41:23  dwilliss
00765  * More methods on context
00766  *
00767  * Revision 1.226  2000/03/01 20:32:15  dwilliss
00768  * Added GeorefCopy() method to context
00769  *
00770  * Revision 1.225  2000/02/25 20:50:15  dwilliss
00771  * Oops.  Added IsDirty method to the wrong class.
00772  *
00773  * Revision 1.224  2000/02/25 20:46:24  dwilliss
00774  * Added IsDirty to SMLOBJECT
00775  *
00776  * Revision 1.222  1999/12/08 23:26:00  mju
00777  * Add macros for creating C++ class definitions.
00778  *
00779  * Revision 1.221  1999/12/06 17:27:01  mju
00780  * Use const filename.
00781  *
00782  * Revision 1.220  1999/11/22 17:48:29  scowan
00783  * More const.
00784  *
00785  * Revision 1.219  1999/11/19 23:20:03  dwilliss
00786  * More comments for documentation.
00787  * Made some members of classes const pointers
00788  *
00789  * Revision 1.214  1999/11/18  16:41:26  dwilliss
00790  * Added constptr member to SMLARG
00791  *
00792 * Revision 1.209  1999/10/13 17:49:09  dwilliss
00793 * All members of SMLOBJECT and SMLELEMDATA are private outside of rvcapp.dll
00794 * now.  Must use methods to access them. (Post 6.2 release)
00795 *
00796 * Revision 1.208  1999/10/08 22:03:58  dwilson
00797 * make info a struct in SMLOBJECT
00798 *
00799 * Revision 1.203  1999/09/17 17:15:59  dwilliss
00800 * Added AddClassSymbol()
00801 *
00802 * Revision 1.202  1999/09/17 15:35:20  dwilliss
00803 * Added prototypes for plugin init/stop functions
00804 *
00805 * Revision 1.196  1999/09/03 22:21:30  dwilliss
00806 * Protos for two flavors of SetParentWidget
00807 *
00808 * Revision 1.195  1999/09/03 22:01:42  dwilliss
00809 * Took out inline method in SMLCONTEXT.  Evil!
00810 *
00811 * Revision 1.194  1999/09/03 21:12:28  dwilliss
00812 * More methods on SMLCONTEXT
00813 *
00814 * Revision 1.193  1999/09/02 20:53:53  dwilliss
00815 * Added a bunch of methods to SMLCONTEXT to access members which
00816 * should be private.  (Eventually they will be)
00817 *
00818  * Revision 1.190  1999/07/07  22:50:39  dwilliss
00819  * Added some things to a few of the structures
00820  *
00821 * Revision 1.189  1999/06/28 20:52:25  dwilliss
00822 * Added preprocessor stack
00823 *
00824 * Revision 1.188  1999/06/25 13:56:01  dwilliss
00825 * Got rid of a prototype that should never have been there
00826 *
00827 * Revision 1.187  1999/06/22 16:25:17  dwilson
00828 * Added Desc arg to SMLFUNCDEF2
00829 *
00830 * Revision 1.185  1999/06/18 21:11:30  dwilliss
00831 * Can't make SetString inline if the class is exported from a DLL
00832 *
00833 * Revision 1.184  1999/06/18 19:55:08  dwilliss
00834 * Oops.  semicolon in wrong place
00835 *
00836 * Revision 1.183  1999/06/18 19:48:04  dwilliss
00837 * addes SetString methods to SMLSTRING
00838 *
00839 * Revision 1.182  1999/06/11 15:53:55  dwilliss
00840 * Added some more macros for class/function defn's
00841 *
00842 * Revision 1.181  1999/06/09 16:10:11  mju
00843 * Use WIN32 instead of WIn95.
00844 *
00845  * Revision 1.180  1999/05/27  15:15:15  mju
00846  * Include rvcgref as used in many SML modules.
00847  *
00848  * Revision 1.179  1999/05/26  16:03:30  mju
00849  * Include various RVC object headers as need for RVC...INFO structures.
00850  *
00851  * Revision 1.178  1999/05/14  19:47:17  dwilson
00852  * #defines for sml import/export validation functions
00853  *
00854  * Revision 1.177  1999/05/07  21:52:54  scowan
00855  * Foward declare menu stuff.
00856  *
00857 * Revision 1.176  1999/04/30 22:34:15  dwilson
00858 * changed size of MIEFORMATSMLCLASSARRAYSIZE to 4
00859 *
00860  * Revision 1.175  1999/04/30  20:23:36  dwilson
00861  * revert to 2 (for now)
00862  *
00863  * Revision 1.174  1999/04/30  17:23:03  dwilson
00864  * changed MIEFORMATSMLCLASSARRAYSIZE to 4
00865  *
00866  * Revision 1.173  1999/04/28  17:40:24  mju
00867  * Include dispinfo.h.
00868  *
00869 * Revision 1.167  1999/04/08 14:31:39  mju
00870 * Use inclusion guards around every #include statement.
00871 *
00872  * Revision 1.166  1999/04/07  19:39:33  dwilliss
00873  * added flag for WIN32_Native
00874  *
00875 * Revision 1.164  1999/04/07 16:11:02  dwilliss
00876 * Added a flag to classes to indicate WIN32_NATIVE availability
00877 * Wrote a macro to define classes not available in win32 native
00878 *
00879 * Revision 1.163  1999/03/22 18:18:24  dwilliss
00880 * Added some members to SMLFILEINFO to keep track of poll callback
00881 *
00882 * Revision 1.162  1999/03/17 22:35:42  dwilson
00883 * sml imp/exp constant added
00884 *
00885  * Revision 1.161  1999/03/12  17:00:07  dwilliss
00886  * Change SML macro so we can move installer function to different module
00887  *
00888 * Revision 1.160  1999/03/10 21:01:17  dwilson
00889 * func prototypes for sml import/export
00890 *
00891 * Revision 1.158  1999/03/04 15:07:35  dwilliss
00892 * Renamed new macro so I can use it directly.  Other way had problems
00893 * with preprocessor sometimes
00894 *
00895 * Revision 1.157  1999/03/03 23:05:29  dwilliss
00896 * Added a flags to smlfunc structure
00897 *
00898 * Revision 1.156  1999/02/18 22:59:39  dwilliss
00899 * SMLCLASS constructors behave more like C++ constructors now
00900 *
00901 * Revision 1.155  1999/02/18 20:14:55  dwilliss
00902 * Special way to export classes on the Mac
00903 *
00904 * Revision 1.154  1999/02/18 16:00:58  dwilliss
00905 * RVCAPPCLASSEXPORT now defined in rvcdefns.h, not here
00906 *
00907 * Revision 1.151  1999/02/16 22:49:01  dwilliss
00908 * temp define a constructor for SMLSTRING which takes a (struct _SMLCONTEXT *)
00909 * because programs compiled last week need it.
00910 *
00911 * Revision 1.150  1999/02/16 17:32:00  dwilliss
00912 * Major changes.  Moved a gob of stuff out of dbqueryp.h to here
00913 *
00914 * Revision 1.148  1999/02/05 15:02:53  dwilliss
00915 * IND is no longer an extern double.  It's a #define in ieeefp.h
00916 * Also simplified ISIND and ISINF to use the macros defined
00917 * in ieeefp.h
00918 *
00919 * Revision 1.147  1999/02/03 23:58:25  dwilliss
00920 * Major changes to SMLSTRING
00921 *
00922 * Revision 1.146  1999/01/05 19:13:42  scowan
00923 * Swapped multiple keywords
00924 *
00925 *
00926 *******************************************************************************
00927 *     Defining built-in SML functions:
00928 *
00929 * I   SML built-in functions come in 3 flavors: void, double, and string.
00930 *     Functions should take 3 parameters:
00931 *
00932 *     static void function(numargs, arg, argtype)
00933 *        int numargs;       # of arguments
00934 *        SMLARG *arg;       Array of arguments
00935 *        UINT8 *argtype;    STYPE_Xxxx -- See <mi32/dbquery.h>
00936 *
00937 *     All built-in functions should be declared as static.
00938 *
00939 * II  To install a group of built-in functions, do the following:
00940 *
00941 *     A. For each function:
00942 *        1. Prototype the function.
00943 *        2. Define a static array of SMLPARM.
00944 *           a. Give one entry for each parameter.
00945 *           b. Signal the end of the array by defining a paramater
00946 *              with NULL for a name.
00947 *           c. If you request the type STYPE_AnyVal, you may be passed
00948 *              either an STYPE_Constant or STYPE_String.  Check the
00949 *              argtype array in your function and use the parm accordingly.
00950 *           d. If you don't care how many parameters your function gets,
00951 *              name the last parameter (not counting the NULL) "..."
00952 *              This will match 0 or more parameters of the type requested.
00953 *           e. Some parameters can be marked as optional, but then it's
00954 *              up to you to figure out which ones you got.  Put optional
00955 *              parameters at the end.
00956 *
00957 *     B. Define a static array of SMLFUNC, one entry per function.
00958 *        the type must be either STYPE_BProcedure (void function),
00959 *        STYPE_Function (function returning double), or STYPE_BSFunction
00960 *        (Function returning SMLSTRING).  You will have to cast the
00961 *        function pointer to (VOIDFUNC), or most compilers will hate you.
00962 *        Signal the end of the array by defining a function with NULL as
00963 *        a name.
00964 *
00965 * III In the function:
00966 *
00967 *     A. Don't free anything passed to you -- ever!
00968 *     B. The arg array passed is an array of unions.  Use the field that
00969 *        matches the type of data you requested.  Rasters are passed as
00970 *        symbols.
00971 *     C. If you encounter an error in your function and want to halt the
00972 *        SML script, call one of the following, then return:
00973 *        1. SML_SetErrorCode(int error)
00974 *           Works for any error code listed in <mi32/errcodes.ref>
00975 *        2. SML_SetArgError(int error, int argnum)
00976 *           Works for SML_EXxxxx errors listed below.  Pass the
00977 *           argument number of the offending argument.
00978 *
00979 * IV. Actual install.
00980 *     A. Get the SML context (returned from SML_Init)
00981 *     B. Call the following:
00982 *           SML_InstallFunctions(context, class, func_list)
00983 *              void *context;    (returned from SML_Init)
00984 *              char *class;      (example: "test")
00985 *              SMLFUNC *func_list; (see above)
00986 *
00987 *        Function returns 0 or an error code
00988 *     C. In the SML editor, the functions will be shown on the
00989 *        "Symbols..." dialog in a group called (in this example)
00990 *        "function_test".  To make this look better, edit the
00991 *        MIPS resource file and add the following line:
00992 *           *function_test.labelString:      My test functions
00993 *
00994  * \endif
00995 */
00996 /*****************************************************************************/
00997 
00998 #ifndef INC_MI32_SML_H
00999 #define INC_MI32_SML_H
01000 
01001 /*#undef SML_API_CONFORMANCE     Can't have until I can check this include file in */
01002 
01003 #ifndef SML_API_CONFORMANCE
01004 #define SML_API_CONFORMANCE 0
01005 #endif
01006 
01007 #ifndef  INC_MI32_RVCCAD_H
01008    #include <mi32/rvccad.h>   /* For RVCCADINFO */
01009 #endif
01010 #ifndef  INC_MI32_RVCRAST_H
01011    #include <mi32/rvcrast.h>  /* For RVCRASTINFO */
01012 #endif
01013 #ifndef  INC_MI32_RVCTEXT_H
01014    #include <mi32/rvctext.h>  /* For RVCTEXTINFO */
01015 #endif
01016 #ifndef  INC_MI32_RVCTIN_H
01017    #include <mi32/rvctin.h>   /* For RVCTININFO */
01018 #endif
01019 #ifndef  INC_MI32_RVCVECT_H
01020    #include <mi32/rvcvect.h>  /* For RVCVECTINFO */
01021 #endif
01022 #ifndef  INC_MI32_RVCDBASE_H
01023    #include <mi32/rvcdbase.h> /* For RVCVECTINFO */
01024 #endif
01025 #ifndef  INC_MI32_INIDEFNS_H
01026    #include <mi32/inidefns.h>
01027 #endif
01028 #ifndef  INC_MI32_MCB_H
01029    #include <mi32/mcb.h>
01030 #endif
01031 #ifndef  INC_MI32_SIMPLEAR_H
01032    #include <mi32/simplear.h>
01033 #endif
01034 #ifndef  INC_MI32_MLIST_H
01035    #include <mi32/mlist.h>
01036 #endif
01037 #ifndef  INC_MI32_TEXTID_H
01038    #include <mi32/textid.h>
01039 #endif
01040 #ifndef  INC_MI32_IEEEFP_H
01041    #include <mi32/ieeefp.h>
01042 #endif
01043 #ifndef WIN32_NATIVE
01044 #include <X11/Intrinsic.h>
01045 #endif
01046 #ifndef  INC_MI32_COLORMAP_H
01047 #include <mi32/colormap.h>
01048 #endif
01049 #ifndef  INC_MI32_ELEMTYPE_H
01050 #include <mi32/elemtype.h>
01051 #endif
01052 #ifndef  INC_MI32_SPATREF_H
01053 #include <mi32/spatref.h>
01054 #endif
01055 
01056 #ifdef WIN32
01057 #pragma warning (disable:4996)   // Disable warning about deprecated declaration within header
01058 #endif
01059 
01060 /* Forward Declarations */
01061 struct DISPLAYINFO;
01062 struct MCRYPTOHDR;
01063 struct MENUBARITEM;
01064 struct MENUITEM;
01065 typedef void* TEHANDLE;
01066 
01067 class MISTRING;
01068 class SMLHASH;
01069 class SMLCLASSHASH;
01070 class XMLDOC;
01071 
01072 #ifdef WINNT
01073 #pragma warning (disable: 4018) /* '!=' : signed/unsigned mismatch */
01074 #pragma warning (disable: 4251) //! struct needs dll-interface blah blah blah
01075 #endif
01076 
01077 #ifdef GetObject
01078 //! If we've included windows.h before this, they #defined GetObject
01079 //! for us.  We don't want it defined!
01080 #undef GetObject
01081 #endif
01082 
01083 //! Use this for the desciption field of any member or function that you want
01084 //! the documentation to show as being Deprecated.
01085 //! The last two digits are the version in which the feature will no longer
01086 //! be guarenteed to be available.
01087 #define SML_RETIRE_IN_68   "RetireIn6.8"
01088 #define SML_RETIRE_IN_69   "RetireIn6.9"
01089 
01090 /***************************************************************************/
01091 //! definitions used by SML inport/export
01092 //! allows validation func to know what type of operation is being performed
01093 
01094 #define SMLMIE_IMPORTRASTER   1
01095 #define SMLMIE_IMPORTVECTOR   2
01096 #define SMLMIE_IMPORTCAD      3
01097 #define SMLMIE_IMPORTTIN      4
01098 #define SMLMIE_IMPORTDBASE    5
01099 
01100 #define SMLMIE_EXPORTRASTER   6
01101 #define SMLMIE_EXPORTVECTOR   7
01102 #define SMLMIE_EXPORTCAD      8
01103 #define SMLMIE_EXPORTTIN      9
01104 #define SMLMIE_EXPORTDBASE    10
01105 
01106 
01107 /***************************************************************************/
01108 //! Forward decl'n of struct types so we can use pointers to them before
01109 //! Actually defining them
01110 
01111 struct DBCALLBACKSTRUCT;
01112 struct SMLARGTYPELIST;
01113 struct SMLELEMDATA;
01114 struct SMLENUMLIST;
01115 struct SMLCLASSSTACK;
01116 struct _SMLTFREF;
01117 struct SMLCONTEXT;
01118 struct SMLSEGMENT;
01119 struct SMLSOURCEINFO;
01120 struct SMLPARSEPOS;
01121 struct SMLFLAG;
01122 struct SMLCLASS;
01123 struct SMLFUNC;
01124 struct SMLPARM;
01125 struct SMLRASTBUF;
01126 struct SMLTABLEDATA;
01127 struct SMLONEXITDATA;
01128 struct SMLMACHINEINSTRUCTION;
01129 struct SMLPREPROCESSORSTACK;
01130 class  SMLEDITOR;
01131 class  SMLDEBUG;
01132 class SMLPARSER;
01133 class SMLVM;
01134 class SMLMEMPOOL;
01135 class XMLNODE;
01136 
01137 class SMLSYMBOL;
01138 class SMLSTRING;
01139 class DEBUGDATA;
01140 
01141 #ifndef WIN32_NATIVE
01142 //! Because I need to create a prototype for a method that takes
01143 //! a CWnd even though I may not be compiling WIN32_NATIVE.
01144 class CWnd;
01145 struct _GUID;
01146 #endif
01147 
01148 struct ITypeInfo;
01149 struct IDispatch;
01150 
01151 class SMLOBJPROXY;
01152 
01153 namespace SPATREF {
01154    class COORDREFSYS;
01155    }
01156 
01157 namespace MGD {
01158    class CONTEXT;
01159    }
01160 
01161 namespace RVC {
01162    class GEOREFERENCE;
01163    class OBJECT;
01164    class RASTER;
01165    class VECTOR;
01166    class CAD;
01167    class TIN;
01168    class SHAPE;
01169    class REGION;
01170    class CADHANDLE;
01171    class VECTORTOOLKIT;
01172    class VECTORHANDLE;
01173    class RASTERHANDLE;
01174    class SHAPEHANDLE;
01175    class FILEHANDLE;
01176    class STYLE;
01177    }
01178 
01179 //!***************************************************************************
01180 //!   SML class names.
01181 //!
01182 //! Some existing code hard-codes the strings.  These defined values should
01183 //! be used instead to avoid use of incorrect names and to make code easier
01184 //! to understand.
01185 //!
01186 //! Class names in SML are case-insensitive.  The convention is to make
01187 //! them all uppercase.  Many existing scripts will have mixed case though.
01188 //!
01189 //! The "Mie" classes are not listed here for simplicity.
01190 //!
01191 //! Keep names in alphabetical order.
01192 
01193 #define  SMLCLASSNAME_ALLOCATION          "ALLOCATION"
01194 #define  SMLCLASSNAME_BITMAPPATTERN       "BITMAPPATTERN"
01195 #define  SMLCLASSNAME_BUTTONITEM          "BUTTONITEM"
01196 #define  SMLCLASSNAME_CALLBACKLIST        "CALLBACKLIST"
01197 #define  SMLCLASSNAME_CENTER              "CENTER"
01198 #define  SMLCLASSNAME_COLOR               "COLOR"
01199 #define  SMLCLASSNAME_COLORMAP            "COLORMAP"
01200 #define  SMLCLASSNAME_COMPOSITEWIDGET     "COMPOSITEWIDGET"
01201 #define  SMLCLASSNAME_CONTEXT          "CONTEXT"
01202 #define  SMLCLASSNAME_CTRLEDGE            "CTRLEDGE"
01203 #define  SMLCLASSNAME_CTRLPOINT           "CTRLPOINT"
01204 #define  SMLCLASSNAME_DATABASE            "DATABASE"
01205 #define  SMLCLASSNAME_DATATIP             "DATATIP"
01206 #define  SMLCLASSNAME_DATETIME            "DATETIME"
01207 #define  SMLCLASSNAME_DBEDITOR            "DBEDITOR"
01208 #define  SMLCLASSNAME_DBEDITOR_SINGLERECORDVIEW    "DBEDITOR_SINGLERECORDVIEW"
01209 #define  SMLCLASSNAME_DBEDITOR_SINGLERECORDWIDGET     "DBEDITOR_SINGLERECORDWIDGET"
01210 #define  SMLCLASSNAME_DBEDITOR_TABULARVIEW      "DBEDITOR_TABULARVIEW"
01211 #define  SMLCLASSNAME_DBEDITORTABLE       "DBEDITORTABLE"
01212 #define  SMLCLASSNAME_DBFIELDINFO         "DBFIELDINFO"
01213 #define  SMLCLASSNAME_DBTABLEINFO         "DBTABLEINFO"
01214 #define  SMLCLASSNAME_DBTABLEVAR          "DBTABLEVAR"
01215 #define  SMLCLASSNAME_DIALOGSHELL         "DIALOGSHELL"
01216 #define  SMLCLASSNAME_DISP                "DISP"
01217 #define  SMLCLASSNAME_DISPCALLBACKLIST    "DISPCALLBACKLIST"
01218 #define  SMLCLASSNAME_DISPLAYINFO         "DISPLAYINFO"
01219 #define  SMLCLASSNAME_ELEMENTREF          "ELEMENTREF"
01220 #define  SMLCLASSNAME_ELEMSELECTPARMS     "ELEMSELECTPARMS"
01221 #define  SMLCLASSNAME_FILE                "FILE"
01222 #define  SMLCLASSNAME_GEOREF              "GEOREF"
01223 #define  SMLCLASSNAME_GPSCALLBACKLIST     "GPSCALLBACKLIST"
01224 #define  SMLCLASSNAME_GPSDATA             "GPSDATA"
01225 #define  SMLCLASSNAME_GPSPORT             "GPSPORT"
01226 #define  SMLCLASSNAME_GPSSYMBOL           "GPSSYMBOL"
01227 #define  SMLCLASSNAME_GRAPHICSCONTEXT     "GC"  // old name
01228 #define  SMLCLASSNAME_GC                  "GC"
01229 #define  SMLCLASSNAME_GRDEVICE            "GRDEVICE"
01230 #define  SMLCLASSNAME_GRDEVICE_MEM_BINARY "GRDEVICE_MEM_BINARY"
01231 #define  SMLCLASSNAME_GRE_GROUP           "GRE_GROUP"
01232 #define  SMLCLASSNAME_GRE_LABELS          "GRE_LABELS"
01233 #define SMLCLASSNAME_GRE_LAYER            "GRE_LAYER"
01234 #define SMLCLASSNAME_GRE_LAYER_CAD        "GRE_LAYER_CAD"
01235 #define SMLCLASSNAME_GRE_LAYER_GEOFORMULA "GRE_LAYER_GEOFORMULA"
01236 #define SMLCLASSNAME_GRE_LAYER_MAPGRID "GRE_LAYER_MAPGRID"
01237 #define SMLCLASSNAME_GRE_LAYER_PINMAP     "GRE_LAYER_PINMAP"
01238 #define SMLCLASSNAME_GRE_LAYER_RASTER     "GRE_LAYER_RASTER"
01239 #define SMLCLASSNAME_GRE_LAYER_REGION     "GRE_LAYER_REGION"
01240 #define SMLCLASSNAME_GRE_LAYER_SCALEBAR   "GRE_LAYER_SCALEBAR"
01241 #define SMLCLASSNAME_GRE_LAYER_SCRIPT     "GRE_LAYER_SCRIPT"
01242 #define SMLCLASSNAME_GRE_LAYER_SHAPE      "GRE_LAYER_SHAPE"
01243 #define SMLCLASSNAME_GRE_LAYER_TEXT    "GRE_LAYER_TEXT"
01244 #define SMLCLASSNAME_GRE_LAYER_TIN        "GRE_LAYER_TIN"
01245 #define SMLCLASSNAME_GRE_LAYER_VECTOR     "GRE_LAYER_VECTOR"
01246 #define SMLCLASSNAME_GRE_LAYERDC       "GRE_LAYERDC"
01247 #define  SMLCLASSNAME_GRE_LAYERMANAGER    "GRE_LAYERMANAGER"
01248 #define  SMLCLASSNAME_GRE_LAYOUT          "GRE_LAYOUT"
01249 #define  SMLCLASSNAME_GRE_VECTOR_LABELS      "GRE_VECTOR_LABELS"
01250 #define  SMLCLASSNAME_GRE_VECTOR_LINES    "GRE_VECTOR_LINES"
01251 #define  SMLCLASSNAME_GRE_VECTOR_NODES    "GRE_VECTOR_NODES"
01252 #define  SMLCLASSNAME_GRE_VECTOR_POINTS      "GRE_VECTOR_POINTS"
01253 #define  SMLCLASSNAME_GRE_VECTOR_POLYS    "GRE_VECTOR_POLYS"
01254 #define  SMLCLASSNAME_GRE_VIEW            "GRE_VIEW"
01255 #define  SMLCLASSNAME_GRE_VIEWABLE        "GRE_VIEWABLE"
01256 #define  SMLCLASSNAME_GRE_VIEW3D          "GRE_VIEW3D"
01257 #define  SMLCLASSNAME_GROUPXPOSN          "GROUPXPOSN"
01258 #define  SMLCLASSNAME_GROUPYPOSN          "GROUPYPOSN"
01259 #define  SMLCLASSNAME_HATCHPATTERN        "HATCHPATTERN"
01260 #define  SMLCLASSNAME_HISTOGRAM           "HISTOGRAM"
01261 #define  SMLCLASSNAME_INIHANDLE           "INIHANDLE"
01262 #define  SMLCLASSNAME_LABELATTACHMENT     "LABELATTACHMENT"
01263 #define  SMLCLASSNAME_LABELFRAMEPARMS     "LABELFRAMEPARMS"
01264 #define  SMLCLASSNAME_LABELPLACE          "LABELPLACE"
01265 #define  SMLCLASSNAME_LABELSTYLE          "LABELSTYLE"
01266 #define  SMLCLASSNAME_LEGENDVIEW          "LEGENDVIEW"
01267 #define  SMLCLASSNAME_LINEPATTERN         "LINEPATTERN"
01268 #define  SMLCLASSNAME_LINESTYLE           "LINESTYLE"
01269 #define  SMLCLASSNAME_LMCOMPONANT         "LMCOMPONANT"  //! Spelled incorrectly
01270 #define  SMLCLASSNAME_LMCOMPONENT         SMLCLASSNAME_LMCOMPONANT
01271 #define  SMLCLASSNAME_MAPPROJ             "MAPPROJ"
01272 #define  SMLCLASSNAME_MAT3X3              "MAT3X3"
01273 #define  SMLCLASSNAME_MATRIX              "MATRIX"
01274 #define  SMLCLASSNAME_MDISPREGIONTOOL     "MDISPREGIONTOOL"
01275 #define  SMLCLASSNAME_MDISPTOOL           "MDISPTOOL"
01276 #define  SMLCLASSNAME_MENUITEM            "MENUITEM"
01277 #define  SMLCLASSNAME_NETWORK             "NETWORK"
01278 #define  SMLCLASSNAME_OBJECT              "OBJECT"
01279 #define  SMLCLASSNAME_POINT2D             "POINT2D"
01280 #define  SMLCLASSNAME_POINT3D             "POINT3D"
01281 #define  SMLCLASSNAME_POINTSTYLE          "POINTSTYLE"
01282 #define  SMLCLASSNAME_POINTSYMBOL         "POINTSYMBOL"
01283 #define  SMLCLASSNAME_POINTTOOL           "POINTTOOL"
01284 #define  SMLCLASSNAME_POLYLINE            "POLYLINE"
01285 #define  SMLCLASSNAME_POLYSTYLE           "POLYSTYLE"
01286 #define  SMLCLASSNAME_PORT                "PORT"
01287 #define  SMLCLASSNAME_PORTCALLBACKLIST    "PORTCALLBACKLIST"
01288 #define  SMLCLASSNAME_PRINTPARMS          "PRINTPARMS"
01289 #define  SMLCLASSNAME_PROMPT              "PROMPT"
01290 #define  SMLCLASSNAME_PROMPTNUM           "PROMPTNUM"
01291 #define  SMLCLASSNAME_PROMPTSTR           "PROMPTSTR"
01292 #define  SMLCLASSNAME_PUSHBUTTONITEM      "PUSHBUTTONITEM"
01293 #define  SMLCLASSNAME_RASTER              "RASTER"
01294 #define  SMLCLASSNAME_RASTERINFO          "RASTERINFO"
01295 #define  SMLCLASSNAME_RECT                "RECT"
01296 #define  SMLCLASSNAME_REGION              "REGION"       // an RVC object
01297 #define  SMLCLASSNAME_REGION2D            "REGION2D"     // A region in memory
01298 #define  SMLCLASSNAME_REGIONDATA          "REGIONDATA"   // DEPRECATED (old name for REGION2D
01299 #define  SMLCLASSNAME_REGIONTOOL          "REGIONTOOL"
01300 #define  SMLCLASSNAME_ROUTE               "ROUTE"
01301 #define  SMLCLASSNAME_RVC_GEOREFERENCE    "RVC_GEOREFERENCE"
01302 #define  SMLCLASSNAME_SR_ELLIPSOID        "SR_ELLIPSOID"
01303 #define  SMLCLASSNAME_SR_PRIMEMERIDIAN    "SR_PRIMEMERIDIAN"
01304 #define  SMLCLASSNAME_SR_DATUM            "SR_DATUM"
01305 #define  SMLCLASSNAME_SR_COORDAXIS        "SR_COORDAXIS"
01306 #define  SMLCLASSNAME_SR_COORDSYS         "SR_COORDSYS"
01307 #define  SMLCLASSNAME_SR_COORDOPPARM      "SR_COORDOPPARM"
01308 #define  SMLCLASSNAME_SR_COORDOPMETHOD    "SR_COORDOPMETHOD"
01309 #define  SMLCLASSNAME_SR_COORDOPDEF       "SR_COORDOPDEF"
01310 #define  SMLCLASSNAME_SR_COORDREFSYS      "SR_COORDREFSYS"
01311 #define  SMLCLASSNAME_STATUSCONTEXT       "STATUSCONTEXT"
01312 #define  SMLCLASSNAME_STATUSHANDLE        "STATUSHANDLE"
01313 #define  SMLCLASSNAME_STOP                "STOP"
01314 #define  SMLCLASSNAME_STRINGLIST          "STRINGLIST"
01315 #define  SMLCLASSNAME_STYLEOBJECT         "STYLEOBJECT"
01316 #define  SMLCLASSNAME_TEXTSTYLE           "TEXTSTYLE"
01317 #define  SMLCLASSNAME_TIMER               "TIMER"
01318 #define  SMLCLASSNAME_TIMEINTERVAL        "TIMEINTERVAL"
01319 #define  SMLCLASSNAME_TOGGLEBUTTONITEM    "TOGGLEBUTTONITEM"
01320 #define  SMLCLASSNAME_TOOL                "TOOL"
01321 #define  SMLCLASSNAME_TOOLCALLBACKLIST    "TOOLCALLBACKLIST"
01322 #define  SMLCLASSNAME_TOOLTIP             "TOOLTIP"
01323 #define  SMLCLASSNAME_TRANSMODEL          "TRANSMODEL"
01324 #define  SMLCLASSNAME_TRANSPARM           "TRANSPARM"
01325 #define  SMLCLASSNAME_VECTOR              "VECTOR"
01326 #define  SMLCLASSNAME_VECTORINFO          "VECTORINFO"
01327 #define  SMLCLASSNAME_VIEWPOINT3D         "VIEWPOINT3D"
01328 
01329 //! The following class names are left as mixed case because of historical usage.
01330 #define  SMLCLASSNAME_Widget              "Widget"
01331 #define  SMLCLASSNAME_XmBulletinBoard     "XmBulletinBoard"
01332 #define  SMLCLASSNAME_XmCallbackList      "XmCallbackList"
01333 #define  SMLCLASSNAME_XmDrawingArea       "XmDrawingArea"
01334 #define  SMLCLASSNAME_XmForm              "XmForm"
01335 #define  SMLCLASSNAME_XmFrame             "XmFrame"
01336 #define  SMLCLASSNAME_XmHTML              "XmHTML"
01337 #define  SMLCLASSNAME_XmLabel             "XmLabel"
01338 #define  SMLCLASSNAME_XmManager           "XmManager"
01339 #define  SMLCLASSNAME_XmOptionMenu        "XmOptionMenu"
01340 #define  SMLCLASSNAME_XmPrimitive         "XmPrimitive"
01341 #define  SMLCLASSNAME_XmPushButton        "XmPushButton"
01342 #define  SMLCLASSNAME_XmRowColumn         "XmRowColumn"
01343 #define  SMLCLASSNAME_XmScale             "XmScale"
01344 #define  SMLCLASSNAME_XmScrollBar         "XmScrollBar"
01345 #define  SMLCLASSNAME_XmScrolledWindow    "XmScrolledWindow"
01346 #define  SMLCLASSNAME_XmSeparator         "XmSeparator"
01347 #define  SMLCLASSNAME_XmToggleButton      "XmToggleButton"
01348 
01349 /***************************************************************************/
01350 /*
01351  *  Symbol types
01352  */
01353 
01354 #define  STYPE_StrVar         STYPE_StringVar
01355 #define  STYPE_Num            STYPE_Constant //!<  Same as Constant
01356 
01357 enum SMLSTYPE {
01358    STYPE_Constant = 0,  //!<   0 NUMBER
01359    STYPE_NumVar,        //!<   1 FVAR
01360    STYPE_StringVar,     //!<   2 SVAR
01361    STYPE_Array,         //!<   3 AVAR
01362    STYPE_Raster,        //!<   4 RVAR
01363    STYPE_Vector,        //!<   5 VVAR
01364    STYPE_CAD,           //!<   6 CVAR
01365    STYPE_Region,        //!<   7  region
01366    STYPE_TIN,           //!<   8 TINVAR
01367    STYPE_RESERVERD,     //!<   9 reserved for whatever
01368    STYPE_Keyword,       //!<  10
01369    STYPE_Intrinsic,     //!<  11 BLTIN
01370    STYPE_UFunction,     //!<  12 FUNCTION - User defined
01371    STYPE_UProcedure,    //!<  13 PROCEDURE - User defined
01372    STYPE_BFunction,     //!<  14 BFUNCTION - Built-in
01373    STYPE_BSFunction,    //!<  15 BSTRFUNC - Built-in
01374    STYPE_BProcedure,    //!<  16 PBROCEDURE - Built-in
01375    STYPE_Table,         //!<  17 TABLE
01376    STYPE_TableVar,      //!<  18 TVAR - pointer to table
01377    STYPE_AnyVal,        //!<  19 ANYVAL -- Either NUMBER or STRING
01378    STYPE_String,        //!<  20 String
01379    STYPE_AnyObject,     //!<  21 RVAR, VVAR, or CVAR
01380    STYPE_NumList,       //!<  22 NUMBER, VLVAR, or NUM_OR_LIST
01381    STYPE_StrList,       //!<  23 STRING, SLVAR, or STR_OR_LIST
01382    STYPE_List,          //!<  24 StrList or NumList
01383    STYPE_RecList,       //!<  25 May use NUMLIST instead
01384    STYPE_VectFunc,      //!<  26 Function returning an object
01385    STYPE_RESERVED27,    //!<  27 unused (used to be func returning region)
01386    STYPE_CADFunc,       //!<  28 Function returning an object
01387    STYPE_TINFunc,       //!<  29 Function returning an object
01388    STYPE_ClassRefFunc,  //!<  30 Function returning a class ptr that the caller should not free
01389    STYPE_ClassVar,      //!<  31 Variable holding a class ptr
01390    STYPE_ClassRef,      //!<  32 Just data that SML should NOT free
01391    STYPE_RastListVar,   //!<  33
01392    STYPE_VectListVar,   //!<  34
01393    STYPE_CADListVar,    //!<  35
01394    STYPE_TINListVar,    //!<  36
01395    STYPE_RegListVar,    //!<  37
01396    STYPE_Enum,          //!<  38
01397    STYPE_StrField,      //!<  39
01398    STYPE_NumField,      //!<  40
01399    STYPE_ClassHashFunc, //!<  41 Function returning an (SMLCLASSHASH*)
01400    STYPE_NumHashFunc,   //!<  42
01401    STYPE_FuncProto,     //!<  43
01402    STYPE_StrFuncProto,  //!<  44
01403    STYPE_ClassFuncProto,//!<  45
01404    STYPE_ProcProto,     //!<  46
01405    STYPE_ClassCopy,     //!<  47 Same as STYPE_ClassRef but needs to be freed
01406    STYPE_ClassCopyFunc, //!<  48 Same as STYPE_ClassRefFunc need to free result
01407    STYPE_ClassHashVar,  //!<  49
01408    STYPE_NumHashVar,    //!<  50
01409    STYPE_Shape,         //!<  51
01410    STYPE_Style,         //!<  52
01411    STYPE_MAXTYPE        //!<  53  Always the last one
01412    };
01413 
01414 #ifdef WIN32
01415 #pragma deprecated(STYPE_Class)     // Use STYPE_ClassRef or STYPE_ClassCopy
01416 #pragma deprecated(STYPE_ClassFunc) // Use STYPE_ClassRefFunc or STYPE_ClassCopyFunc
01417 #endif
01418 #define STYPE_Class        STYPE_ClassRef
01419 #define STYPE_ClassFunc    STYPE_ClassRefFunc
01420 
01421 typedef enum SMLSTYPE SMLSTYPE;
01422 /* When adding a new STYPE, be sure to modify the following functions in dbquery.c
01423 **    DBQuery_STYPEtoString(), DBQuery_STYPEFlags(),
01424 **    _qq_stype_to_token_val(), _qq_token_val_to_stype()
01425 */
01426 
01427 /***************************************************************************/
01428 //! For historical reasons, these constants are defined weird.  They used to
01429 //! be defined in terms of the #defines produced by YACC for the various
01430 //! keywords.  However, those values were not "fixed" and adding a new terminal
01431 //! to the grammer could cause the "constants" to shift.  This is bad for a
01432 //! dll.  To keep old code working, the enums are defined to be the numbers
01433 //!   that they were at the time I changed this to be an enum and must remain
01434 //!   the same for all time.
01435 
01436 enum SMLSCOPE {
01437    SCOPE_NONE        = 0,
01438    SCOPE_TABLE       = 272,
01439    SCOPE_BFUNCTION   = 280,
01440    SCOPE_KEYWORD     = 311,
01441    SCOPE_GLOBAL      = 336,
01442    SCOPE_LOCAL       = 337,
01443    SCOPE_PERMANENT   = 1000,
01444    SCOPE_PROTOTYPE   = 1001
01445    };
01446 
01447 typedef enum SMLSCOPE SMLSCOPE;
01448 
01449 /***************************************************************************/
01450 #ifndef  INC_MI32_SMLFUNCS_H
01451    #include <mi32/smlfuncs.h> /* Gives us prototypes for installer functions */
01452 #endif
01453 /***************************************************************************/
01454 
01455 typedef PTRINT SMLMACHINEINST;   //!<  not (INT32),  Must be same size as (void *)
01456 
01457 /***************************************************************************/
01458 /**
01459  * Parameter flag value definition
01460  *
01461  * These are meant to be statically defined and normally use (char*) in the ASCII
01462  * range.  Since there are a few cases where we need Unicode, interpret the name
01463  * and desc as UTF8.  This will cause no change for statically defined strings,
01464  * as they're all chars < 128.  In the few places where we need to make one
01465  * Unicode, convert it to UTF8 and store that.
01466  */
01467 struct SMLFLAG {
01468    char *name;
01469    UINT32 value;
01470    char *desc;
01471    };
01472 
01473 /* Flags for SML_InstallStaticEnum().  It gets passed an array of SMLFLAGs and we have
01474 *  to tell it what if anything to free when the context is destroied
01475 */
01476 #define SMLFLAG_FreeName         0x0001
01477 #define SMLFLAG_FreeDesc         0x0002
01478 #define SMLFLAG_FreeFlagArray    0x0004
01479 
01480 
01481 /***************************************************************************/
01482 
01483 //!   \class SMLUSERDATA mi32/sml.h
01484 //!   A class which can be used to hang USERDATA off an SMLSTRING or SMLSYMBOL
01485 //!
01486 //!   To use, you have to derive a class from SMLUSERDATA,
01487 //!   Create your own ID in the enum below, and make your constructor
01488 //! call the base class constructor, passing in your id.
01489 //!
01490 //!   For MicroImages employees adding derived classes, just use the
01491 //! next available number in the TAG enum.   If using TNTsdk,
01492