11#define META_FILE_NAME "MkKernel_tcl.c"
12#define VER TCL_OO_METHOD_VERSION_CURRENT
17#define OtClass_ARGS OBJCMD_ARGS
19#define OT_SETUP_hdl_static \
22 __attribute__((unused)) MK_RT mkrt = MkRT; \
23 __attribute__((unused)) MK_ERR hdl = &MkERROR;
32#include "mk_check_tcl.h"
35#define MkCleanupTmpl()
142const Tcl_ObjType *
MK(tcl_LONG) = NULL;
143const Tcl_ObjType *
MK(tcl_WIDE) = NULL;
144const Tcl_ObjType *
MK(tcl_DOUBLE) = NULL;
145const Tcl_ObjType *
MK(tcl_BOOLEAN) = NULL;
146const Tcl_ObjType *
MK(tcl_INDEX) = NULL;
148#ifdef OT_REGISTRY_AS_TLS
153#define regTclObj(str) int MK(str);
154#define regTclObj2(def,str) int MK(def);
164#define ErrorE_FromInt_doc "MkErrorE [MkKernel ErrorE_FromInt value:int32]"
165#define IdSE_FromInt_doc "MkIdSE [MkKernel IdSE_FromInt value:int32]"
166#define TimeoutE_FromInt_doc "MkTimeoutE [MkKernel TimeoutE_FromInt value:int32]"
167#define TypeE_FromInt_doc "MkTypeE [MkKernel TypeE_FromInt value:int32]"
170#define ErrorE_ToInt_doc "int32 [MkKernel ErrorE_ToInt value:MkErrorE]"
171#define ErrorE_ToString_doc "string [MkKernel ErrorE_ToString value:MkErrorE]"
172#define IdSE_ToInt_doc "int32 [MkKernel IdSE_ToInt value:MkIdSE]"
173#define IdSE_ToString_doc "string [MkKernel IdSE_ToString value:MkIdSE]"
174#define TimeoutE_ToInt_doc "int32 [MkKernel TimeoutE_ToInt value:MkTimeoutE]"
175#define TimeoutE_ToString_doc "string [MkKernel TimeoutE_ToString value:MkTimeoutE]"
176#define TypeE_ToInt_doc "int32 [MkKernel TypeE_ToInt value:MkTypeE]"
177#define TypeE_ToString_doc "string [MkKernel TypeE_ToString value:MkTypeE]"
180#define Cleanup_doc "MkKernel Cleanup"
181#define Setup_doc "MkKernel Setup"
202 Tcl_ResetResult(interp);
205 OT_OBJ_T objPtr = Tcl_NewStringObj(
"::oo::class", -1);
206 OT_SELF_T ooclassO = Tcl_GetObjectFromObj(interp, objPtr);
207 Tcl_DecrRefCount(objPtr);
209 def.
ooclassC = Tcl_GetObjectAsClass(ooclassO);
212 Tcl_AppendResult(interp,
"\nCLASS-SETUP-ERROR: unable to setup '::oo::class'", NULL);
216 OT_OBJ_T cmdO = Tcl_ObjPrintf(
"%s::%s", ns->fullName, classM->type_class->type_name);
218 const char* cmdbuf = Tcl_GetString(cmdO);
221 OT_SELF_T classO = Tcl_NewObjectInstance(interp,def.
ooclassC,cmdbuf,cmdbuf,0, NULL, 0);
224 OT_OBJ_T classObj = Tcl_GetObjectName(interp,classO);
225 Tcl_IncrRefCount(classObj);
237 if (def.
count != 1 && classM->type_base != NULL ) {
246 Tcl_AppendResult(interp,
"\nCLASS-SETUP-ERROR: class '", classM->type_base->type_name,
247 "' has EMPTY base SELF pointer", NULL);
252 check_LNG(Tcl_EvalObjv(interp, 4, RL_data, TCL_EVAL_GLOBAL))
goto error;
258 Tcl_AppendResult(interp,
"\nCLASS-SETUP-ERROR: found at '", __func__,
"'", NULL);
268 OT_NS_T ns = Tcl_GetObjectNamespace(
object);
269 Tcl_Command myCmdC = Tcl_FindCommand(interp,
"my", ns, TCL_NAMESPACE_ONLY|TCL_LEAVE_ERR_MSG);
273 Tcl_GetCommandFullName(interp,myCmdC,myCmdO);
284#define FRAME_UPDATE \
285 if (*frameP == NULL) { \
286 RL_init( RL_O(0,RG(infoFrameCmd)) RL_NewC(1,0) ) \
287 OT_OBJ_T ret = MK(EvalObjvAR)(MK_RT_CALL NULL,interp,0,RL_objv(2)); \
289 Tcl_IncrRefCount(ret); \
293#define FRAME_GET(key) \
294 OT_OBJ_T key = NULL; \
295 Tcl_DictObjGet(interp,*frameP,RG(key),&key); \
301 if (method != NULL) {retObj = method;
goto end;}
303 if (proc != NULL) {retObj = proc;
goto end;}
306 return Tcl_GetStringFromObj(retObj,NULL);;
310#define Get_Call_Cmd__SIZE 100
314 if (cmd == NULL)
goto error;
316 char*
str = Tcl_GetStringFromObj(cmd, &len);
319 char* nl=strchr(buffer,
'\n');
324 strcat(buffer,
" ...");
330 Tcl_ResetResult(interp);
332 return Tcl_GetStringFromObj(type,NULL);
333#undef Get_Call_Cmd__SIZE
341 if (script) Tcl_DecrRefCount(RL_data[1]);
343 return Tcl_GetStringFromObj(ret,NULL);
349 if (file == NULL)
goto error;
350 return Tcl_GetStringFromObj(file,NULL);
357 Tcl_ResetResult(interp);
359 return Tcl_GetStringFromObj(type,NULL);
365 if (line == NULL)
goto error;
367 if (Tcl_GetIntFromObj(NULL,line,&lineI)==TCL_ERROR)
goto error;
370 Tcl_ResetResult(interp);
381 Tcl_IncrRefCount(frame);
388 Tcl_DecrRefCount(frame);
392 Tcl_ResetResult(interp);
402static char* printBits(
size_t const size,
void const *
const ptr)
404 static char buf[100];
405 char * bufP = &buf[0];
406 unsigned char *b = (
unsigned char*) ptr;
411 for (i = (
int)size-1; i >= 0; i--) {
412 for (j = 7; j >= 0; j--) {
413 byte = (b[i] >> j) & 1;
414 num = sprintf(bufP,
"%u",
byte);
422#define myprint(num) ({ \
423 unsigned int tmp=(unsigned int)num; \
424 printV("%-40s → %s\n", #num, printBits(4,&tmp)); \
436 for (
int i=0; i<objc; i++) {
438 sizeof(
struct LookupClassS),
"enum", TCL_EXACT, &index));
439 valI |= keys[index].
val;
457 return Tcl_GetObjectFromObj(interp, clsObj);
467 OT_SELF_T objO = Tcl_GetObjectFromObj (interp, tclO);
468 if (objO == NULL)
return NULL;
469 return Tcl_ObjectGetMetadata(objO, &
MK(AtomMeta));
479 OT_OBJ_T objNameO = Tcl_GetObjectName(interp,tclObj);
480 OT_OBJ_T clsNameO = Tcl_GetObjectName(interp,Tcl_GetClassAsObject(clazz));
486 check_LNG(Tcl_GetBooleanFromObj(interp,Tcl_GetObjResult(interp),&isClass)) {
502 assert(lngO != NULL);
507 OT_SELF_T tclObj = Tcl_GetObjectFromObj (interp, lngO);
508 if (tclObj == NULL) {
509 Tcl_ResetResult(interp);
511 if (OT_LNG_NULL_IS(lngO)) {
518 objM = Tcl_ObjectGetMetadata(tclObj, &
MK(AtomMeta));
521 switch (flag =
NS(sCheckClass)(interp,tclObj,clazz,flag)) {
529 if (clazz !=
MK(MkObjectC)) {
531 switch (flag =
NS(sCheckClass)(interp,tclObj,clazz,flag)) {
542 if (objP) *objP = objM;
545 if (flagP) *flagP = flag;
548 default :
return true;
556 OT_CLS_T cls = Tcl_GetObjectAsClass(
object);
559 if (cls != NULL)
return "Class";
574 RL_init(
RL_O(0,
RG(infoObjectClassCmd)) ) ;
RL_O(1,Tcl_GetObjectName(interp,
object))
576 check_NULL(classO)
return Tcl_GetStringResult(interp);
589 strncpy(buf, Obj->typePtr ? Obj->typePtr->name :
"unknown", 50);
592 if (strcmp(buf,
"unknown")!=0 && strcmp(buf,
"string")!=0 && strcmp(buf,
"cmdName")!=0)
595 OT_SELF_T object = Tcl_GetObjectFromObj(interp,Obj);
597 if (isObject) *isObject=
true;
601 if (isObject) *isObject=
false;
612 strncpy(buffer,lngO->typePtr ? lngO->typePtr->name :
"unknown", 50);
616 OT_SELF_T objO = Tcl_GetObjectFromObj (interp, lngO);
617 if (objO == NULL)
goto type;
619 OT_CLS_T cls = Tcl_GetObjectAsClass(objO);
621 classO = Tcl_GetObjectName(interp, objO);
629 if (classO != NULL) {
630 MK_STRN name = Tcl_GetString(classO);
634 for (p = name; *p !=
'\0'; p++) {
638 if ((*p ==
':') && (*(p-1) ==
':')) {
654 if (strcmp(buffer,
"cmdName")==0) {
655 return Tcl_GetString(lngO);
661static void MK(LngTupleToMkBufferListS) (
671 for (
int i=__skip; i<objc; i++) {
692 MK(LngTupleToMkBufferListS)(
MK_RT_CALL interp,listObjc,listObjv,&__skip,retP);
705#define OT_LNG_STRING(o) Tcl_GetString(o)
707#define OT_LNG_STRING_BYTES(o) o->bytes
708#define OT_LNG_STRING_LENGTH(o) o->length
709#define OT_LNG_SKIP_TYPE int
717 if ((*skipP) >= objc) {
718 return WrongNumArgs(hdl, (*skipP), objc, -999, +999, arg);
721 MK_STRN ret = Tcl_GetStringFromObj(objv[(*skipP)++], &len);
743 if ((*skipP) >= objc) {
744 return WrongNumArgs(hdl, (*skipP), objc, -999, +999, arg);
746 strncpy(ret,Tcl_GetString(objv[(*skipP)++]),size);
788 for (objc=0; (objv[objc]=(
OT_OBJ_T )va_arg(ap,
OT_OBJ_T )) != NULL; objc++) {
790 if (objc >= (
SIZE-1)) {
791 Tcl_SetResult(interp,
"EVAL-ERROR: size in MkEvalObjvVA is limited to " xstr(
SIZE), TCL_STATIC);
799 ret = Tcl_EvalObjv (interp, objc, objv, flags);
847 int ret = Tcl_EvalObjv (interp, objc, objv, flags);
909int MK(FillNamespace) (
913 ClientData clientData
917 for (
int i=0; type[i].version != 0; i++) {
918 Tcl_DStringInit(&buffer);
919 Tcl_DStringAppend(&buffer,ns->fullName,-1);
920 Tcl_DStringAppend(&buffer,
"::",-1);
921 Tcl_DStringAppend(&buffer,type[i].name,-1);
922 check_NULL ( Tcl_CreateObjCommand(interp, Tcl_DStringValue(&buffer),
923 type[i].callProc,clientData,type[i].deleteProc))
934 for(
int i=1;i<objc;i++) {
937 return MkBUF_R(&retR).storage.first.C;
953 #define objF "[type<%s>, refCount<MQ=%i,TCL=%i,SHARED=%i>, ptr<MQ=%p,TCL=%p>]"
954 #define objA type, (retObj?retObj->refCount:-1),Obj->refCount, Tcl_IsShared(Obj), retObj, (retObj?retObj->self:NULL)
1009 {
"MK_OK" ,
MK_OK },
1019 sizeof(
struct LookupClassS),
"enum", TCL_EXACT, &index));
1020 *ret = keys[index].
val;
1040 sizeof(
struct LookupClassS),
"enum", TCL_EXACT, &index));
1041 *ret = keys[index].
val;
1079 sizeof(
struct LookupClassS),
"enum", TCL_EXACT, &index));
1080 *ret = keys[index].
val;
1111 sizeof(
struct LookupClassS),
"enum", TCL_EXACT, &index));
1112 *ret = keys[index].
val;
1139static int MK(AtomMetaClone) (
OT_ENV_T interp, ClientData clientData, ClientData *out)
1145const Tcl_ObjectMetadataType
MK(AtomMeta) = {
1146 TCL_OO_METADATA_VERSION_CURRENT,
1166 static const char *option[] = {
1167 "object",
"type",
"var", NULL
1170 OBJECT, TYPE, VARIABLE
1174 OtErrorCheckLng (Tcl_GetIndexFromObj (interp, objv[__skip++], option,
"subcommand", 0, &index));
1177 switch ((
enum options) index) {
1180 Tcl_SetResult (interp,
MK(PrintLngObj) (
OT_Prefix_CALL "print", objv[__skip]), TCL_VOLATILE);
1184 Tcl_SetResult (interp, (
char*)
MK(GetTypeFromObj) (
OT_Prefix_CALL objv[__skip], NULL), TCL_VOLATILE);
1188 WNA(1,99,
"tclObj...");
1194 check_LNG(Tcl_GetIntFromObj(interp,lvlObj,&lvl))
goto varerror;
1196 fputs(
"print var ",stderr);
1202 check_LNG(Tcl_ListObjIndex(interp,lvlObj,0,&nameObj))
goto varerror;
1203 STR = Tcl_GetString(nameObj);
1209 for (
int i=2; i<objc; i++) {
1210 char * nameS = Tcl_GetString(objv[i]);
1211 OT_OBJ_T var = Tcl_ObjGetVar2(interp,objv[i],NULL,0);
1213 fprintf(stderr,
"%s<%s>, ", nameS, Tcl_GetString(var));
1215 fprintf(stderr,
"%s<not set>, ", nameS);
1240 static const char *constant[] = {
1241 "maxY",
"minY",
"maxS",
"minS",
"maxI",
"minI",
"maxF",
"minF",
"maxW",
"minW",
"maxD",
"minD", NULL
1244 MAXY, MINY, MAXS, MINS, MAXI, MINI, MAXF, MINF, MAXW, MINW, MAXD, MIND,
1247 WNA(1,1,
"(maxY|minY|maxS|minS|maxI|minI|maxF|minF|maxW|minW|maxD|minD)");
1250 OtErrorCheckLng (Tcl_GetIndexFromObj (interp, objv[__skip], constant,
"constant", 0, &index));
1253 switch ((
enum constants) index) {
1254 case MAXY: lngO = Tcl_NewIntObj (SCHAR_MAX);
break;
1255 case MINY: lngO = Tcl_NewIntObj (SCHAR_MIN);
break;
1256 case MAXS: lngO = Tcl_NewIntObj (SHRT_MAX);
break;
1257 case MINS: lngO = Tcl_NewIntObj (SHRT_MIN);
break;
1258 case MAXI: lngO = Tcl_NewLongObj (INT_MAX);
break;
1259 case MINI: lngO = Tcl_NewLongObj (INT_MIN);
break;
1260 case MAXF: lngO = Tcl_NewDoubleObj (FLT_MAX);
break;
1261 case MINF: lngO = Tcl_NewDoubleObj (FLT_MIN);
break;
1262 case MAXW: lngO = Tcl_NewWideIntObj (LLONG_MAX);
break;
1263 case MINW: lngO = Tcl_NewWideIntObj (LLONG_MIN);
break;
1264 case MAXD: lngO = Tcl_NewDoubleObj (DBL_MAX);
break;
1265 case MIND: lngO = Tcl_NewDoubleObj (DBL_MIN);
break;
1268 Tcl_SetObjResult (interp, lngO);
1657 {
VER,
"print" ,
NS(Print_Class_Cmd) , NULL, NULL},
1658 {
VER,
"const" ,
NS(Const_Class_Cmd) , NULL, NULL},
1662 {
VER,
"ErrorE_FromInt" ,
NS(MkKernel_ErrorE_FromInt) , NULL, NULL},
1663 {
VER,
"IdSE_FromInt" ,
NS(MkKernel_IdSE_FromInt) , NULL, NULL},
1664 {
VER,
"TimeoutE_FromInt" ,
NS(MkKernel_TimeoutE_FromInt) , NULL, NULL},
1665 {
VER,
"TypeE_FromInt" ,
NS(MkKernel_TypeE_FromInt) , NULL, NULL},
1668 {
VER,
"ErrorE_ToInt" ,
NS(MkKernel_ErrorE_ToInt) , NULL, NULL},
1669 {
VER,
"ErrorE_ToString" ,
NS(MkKernel_ErrorE_ToString) , NULL, NULL},
1670 {
VER,
"IdSE_ToInt" ,
NS(MkKernel_IdSE_ToInt) , NULL, NULL},
1671 {
VER,
"IdSE_ToString" ,
NS(MkKernel_IdSE_ToString) , NULL, NULL},
1672 {
VER,
"TimeoutE_ToInt" ,
NS(MkKernel_TimeoutE_ToInt) , NULL, NULL},
1673 {
VER,
"TimeoutE_ToString" ,
NS(MkKernel_TimeoutE_ToString) , NULL, NULL},
1674 {
VER,
"TypeE_ToInt" ,
NS(MkKernel_TypeE_ToInt) , NULL, NULL},
1675 {
VER,
"TypeE_ToString" ,
NS(MkKernel_TypeE_ToString) , NULL, NULL},
1678 {
VER,
"Cleanup" ,
NS(MkKernel_Cleanup) , NULL, NULL},
1679 {
VER,
"Setup" ,
NS(MkKernel_Setup) , NULL, NULL},
1682 {0, NULL, NULL, NULL, NULL}
1694 {0, NULL, NULL, NULL, NULL}
1707 if (Tcl_InitStubs (interp,
"8.6",
true) == NULL) {
1710 if (Tcl_OOInitStubs (interp) == NULL) {
1719 OtErrorCheckLng (Tcl_PkgProvide (interp,
"tclmkkernel", META_VERSION ));
1722 if (Tcl_GetVar(interp,
"::tcl::newPkgs", TCL_GLOBAL_ONLY) != NULL)
return TCL_OK;
1725 OT_NS_T ns = Tcl_CreateNamespace (interp,
"tclmkkernel", NULL, NULL);
1745 if (
MK_RT_REF.mkThreadData.ptr == NULL) {
1747 }
else if (strcmp(
MK_RT_REF.mkThreadData.name,
"tclmkkernel") == 0) {
1748 Tcl_SetErrorCode(interp,
"TCLMK",
"INIT",
"NON-NULL", NULL);
1749 Tcl_SetResult(interp,
"error: 'MK_RT_REF.mkThreadData' not NULL as expected",TCL_STATIC);
1752 Tcl_SetErrorCode(interp,
"TCLMK",
"INIT",
"WRONG-NAME", NULL);
1753 Tcl_SetResult(interp,
"error: 'MK_RT_REF.mkThreadData' already in use with extension: ",TCL_STATIC);
1754 Tcl_AppendResult(interp,
MK_RT_REF.mkThreadData.name, NULL);
1759 if (
MK(reggv)[0] == NULL) {
1762#define regTclObj(str) MK(reggv)[MK(str)=key++] = Tcl_NewStringObj(#str,-1);Tcl_IncrRefCount(MK(reggv)[MK(str)]);
1763#define regTclObj2(def,str) MK(reggv)[MK(def)=key++] = Tcl_NewStringObj(str,-1);Tcl_IncrRefCount(MK(reggv)[MK(def)]);
1770 MK(tcl_LONG) = Tcl_GetObjType(
"int") ;
1771 MK(tcl_WIDE) = Tcl_GetObjType(
"wideInt") ;
1772 MK(tcl_DOUBLE) = Tcl_GetObjType(
"double") ;
1773 MK(tcl_BOOLEAN) = Tcl_GetObjType(
"booleanString") ;
1774 MK(tcl_INDEX) = Tcl_GetObjType(
"index") ;
#define IdSE_ToString_doc
#define TimeoutE_FromInt_doc
#define Get_Call_Cmd__SIZE
OT_TCL_EXTERN int Tclmkkernel_Unload(OT_ENV_T interp, int flags)
#define ErrorE_ToString_doc
#define OT_SETUP_hdl_static
#define ErrorE_FromInt_doc
#define TypeE_FromInt_doc
#define TimeoutE_ToString_doc
#define TimeoutE_ToInt_doc
#define TypeE_ToString_doc
#define OtErrorCheckLngGoto(cmd)
#define OT_SETUP_NOARG(d)
#define OT_SETUP_ONEARG(d)
#define OT_VARFRAME_DELETE
#define OT_CHECK_NI4(val)
#define OT_retObj_SET_Error
#define RL_NewS(num, str)
#define OT_LNG_NAME_FROM_OBJ(_obj)
#define OT_CHECK_REQUIRED(val)
#define OT_retObj_SET_None
#define RL_NewC(num, str)
#define OT_retObj_SET_I32(nat)
#define WNA(min, max, txt)
#define OT_CHECK_ENUM(ename, val)
#define RL_NewI(num, itg)
#define OT_VARFRAME_OBJ_RESULT(itp)
#define OT_retObj_SET_STR(nat)
#define OT_NEW_Mk_enum_OBJ(typ, val)
#define OT_REF_DECR(_obj)
#define OT_retObj_SET(val)
#define OT_REF_INCR(_obj)
#define OT_VARFRAME_CREATE
#define OtErrorCheckLng(cmd)
#define MkErrorC_Check(mng, PROC)
#define MkBufferAppendV(...)
#define MkBUF(x)
cast a known-object into an MkBufferS pointer
#define MkBUF_R(x)
cast a known-object into an MkBufferS reference
#define MkBufferSetV(...)
#define MkBufferCreateTLS_T(cls, name, size)
create an new MkBufferC object as T)hread L)ocal S)torage…
#define MkBufferListIndexSetSTR(...)
#define MkBufferListReserve(...)
#define MkBufferListCreate(...)
#define MkErrorStackFormat(...)
static bool MK_NULL_STR_CHECK(char const *const __str, const long int __len)
check if __str is MK_NULL_STR return true or false …
MK_STRN MkTimeoutE_ToString(enum MkTimeoutE value)
return the MkTimeoutE as string …
MkTimeoutE
Predefined Timeout values …
MkBoolE
the internal boolean …
enum MkErrorE MkIdSE_FromInt(MK_I32 const value, enum MkIdSE *value_out)
return the MkIdSE from integer …
static MK_I32 MkTypeE_ToInt(enum MkTypeE value)
return the MkTypeE as integer …
static MK_I32 MkErrorE_ToInt(enum MkErrorE value)
return the MkErrorE as integer …
MK_STRN MkNativeIsE_ToString(enum MkNativeIsE value)
return the MkNativeIsE as string …
static MK_I32 MkTimeoutE_ToInt(enum MkTimeoutE value)
return the MkTimeoutE as integer …
enum MkErrorE MkTypeE_FromInt(MK_I32 const value, enum MkTypeE *value_out)
return the MkTypeE from integer …
MK_STRN MkBoolE_ToString(enum MkBoolE value)
return the MkBoolE as string …
MK_STRN MkIdSE_ToString(enum MkIdSE value)
return the MkIdSE as string …
static MK_I32 MkIdSE_ToInt(enum MkIdSE value)
return the MkIdSE as integer …
enum MkErrorE MkErrorE_FromInt(MK_I32 const value, enum MkErrorE *value_out)
return the MkErrorE from integer …
enum MkErrorE MkTimeoutE_FromInt(MK_I32 const value, enum MkTimeoutE *value_out)
return the MkTimeoutE from integer …
MK_STRN MkTypeE_ToString(enum MkTypeE value)
return the MkTypeE as string …
MkErrorE
collection for the different error-codes …
MkNativeIsE
define if data is string or little or big endian …
MkTypeE
basic data-types supported by Programming-Language-Micro-Kernel (PLMK) …
MK_STRN MkErrorE_ToString(enum MkErrorE value)
return the MkErrorE as string …
@ MK_TIMEOUT_LONG
long timeout in sec (180 sec) …
@ MK_TIMEOUT_VERYSHORT
very short timeout in sec (5 sec) …
@ MK_TIMEOUT_INIT
maximum timeout in sec (900 sec) …
@ MK_TIMEOUT_MAX
request the maximum possible (infinite) timeout value …
@ MK_TIMEOUT_NORMAL
normal timeout in sec (90 sec) …
@ MK_TIMEOUT_USER
request the user defined timeout value from the –timeout configuration value …
@ MK_TIMEOUT_SOCKET
shorter timeout in sec (10 sec) … This TIMEOUT is used for socket connection with 'connect'
@ MK_TIMEOUT_SHORT
short timeout in sec (20 sec) …
@ MK_TIMEOUT_DEFAULT
request the default timeout value …
@ MK_ERROR
(persistent) raise an error-event, the calling-fucntion is interrupted.
@ MK_CONTINUE
(transient) raise an continue-event, the calling-function must handle this.
@ MK_OK
(persistent) everything is OK.
@ MK_NATIVE_IS_INITIAL
0 = initial value
@ MK_NATIVE_IS_STRING
S = using of the string protocol.
@ MK_NATIVE_IS_LITTLE
L = using if the binary protocoll, data in little-edian.
@ MK_NATIVE_IS_BIG
B = using if the binary protocoll, data in big-endian.
@ MK_I8T
Y: 1 byte 'byte' type.
@ MK_I64T
W: 8 byte 'long long int' type.
@ MK_FLTT
F: 4 byte 'float' type.
@ MK_BINT
B: X byte 'byte-array' type.
@ MK_I16T
S: 2 byte 'short' type.
@ MK_BOLT
O: 1 byte 'boolean' type.
@ MK_DBLT
D: 8 byte 'double' type.
@ MK_I32T
I: 4 byte 'int' type.
@ MK_STRT
C: X byte 'string' type (e.g. with a \0 at the end)
@ MK_LSTT
L: X byte 'list' type.
void MkSetup(void)
setup tclmkkernel internal memory …
void MkCleanup(void)
cleanup tclmkkernel internal memory …
MK_PTRB * MK_PTR
generic pointer data-type
const MK_STRB * MK_STRN
constant string pointer data-type
MK_PTRB * MK_MNG
managed object pointer, datatype will be checked at runtime
MK_STRB * MK_STR
string pointer data-type with UTF8 ecoding (string)
signed int MK_I32
4 byte integer data-type
#define MkOBJ_R(x)
cast a known-object into an MkObjectS reference
static MK_OBJ MkObj(MK_MNG mng)
cast a unknown-object into an MkObjectS pointer or NULL if not possible
#define MkRefDecrWithoutSelf(...)
#define MkSelfSet_3X(x, self, env)
MkIdSE
signal type of the MkIdS data val …
@ MK_ID_THREAD
val has a thread handle
@ MK_ID_PROCESS
val has a process handle
@ MK_ID_UNUSED
empty struct
struct MkThreadDataS MkThreadDataS
#define WrongNumArgs(...)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsSTRN(OT_Check_ARGS, MK_STRN *)
bool MK TestObject(OT_Prefix_ARGS OT_OBJ_T lngO, OT_CLS_T typeO, MK_OBJ *objP, MkTestClassE *flagP)
#define OT_LNG_OBJECT_IS_3(objV, obj, flag)
@ MkTestClassE_NONE_OBJECT
@ MkTestClassE_INVALID_SIGNATURE
@ MkTestClassE_WRONG_CLASS
The CLASS used to store a list of MkBufferS items into a flat array…
The data-type to store and handle the error-condition …
MkTypeS - class known as typ or type is used as class-base for a Managed-Object-Technology (MOT) type...