theKernel 10.0
Loading...
Searching...
No Matches
MkObjectC_tcl.c
Go to the documentation of this file.
1
9/* LABEL-INIT */
10
11#define SetupRtFromHdl_X(hd) MkRtSetup_O(hd)
12#define SetupRtFromHdl_XN(hd) MkRtSetup_ON(hd)
13
14/* LABEL-START */
15
16#define META_FILE_NAME "MkObjectC_tcl.c"
17
19
20#define OT_CLASS NS(MkObjectC)
21#define OT_CLASS_NAME "MkObjectC"
22
23#define OBJECT2OBJ(O) MkAssertCastM(MkObjectC,(Tcl_ObjectGetMetadata(O, &MK(AtomMeta))))
24
25// TCL class
27
28// META class
30MkThreadLocal OT_OBJ_T MK(MkObjectC_MK_NULL) = NULL;
31
32// META: ObjNew feature: selfCreate will be called from "ObjNew->MkSelfNew" if MkObj need a SELF pointer
33static MK_PTR NS(MkObjectC_selfCreate) (MK_RT_ARGS MK_OBJ const obj, MK_PTR const env) {
34 OT_ENV_T interp = env;
35 return MK(AtomCreate) (MK_RT_CALL interp,obj,OT_CLASS,NULL,NULL);
36}
37// META: is called when the META object is destroyed and SELF does NOT belongs to the META.
38static void NS(MkObjectC_selfDelete) (MK_RT_ARGS MK_PTR selfP, MK_PTR const env) {
39 OT_SELF_T selfO = selfP;
40 OT_ENV_T interp = env;
41 MK(AtomDeleteHard) (MK_RT_CALL interp, selfO);
42}
43// META: is called when the META object is destroyed and SELF does NOT belong to the META.
44static void NS(MkObjectC_selfUnlink) (MK_RT_ARGS MK_PTR selfP, MK_PTR const env) {
45 OT_SELF_T selfO = selfP;
46 OT_ENV_T interp = env;
47 MK(AtomUnlink) (MK_RT_CALL interp, selfO);
48}
49
50// ATTENTION: TCL has no "Unlink" because the "Tcl_ObjectSetMetadata(selfO,&MK(AtomMeta),NULL);" call
51// also the destructor
52
53#define OT_SETUP_hdl_static_constr_pre
54#define OT_SETUP_hdl_static_constr \
55 OT_SETUP_hdl_static_constr_pre; \
56 OT_SETUP_hdl_static
57
58#define OT_SETUP_hdl_static \
59 int __skip=Tcl_ObjectContextSkippedArgs(objCtx); \
60 AllRtSetup_NULL; \
61 __attribute__((unused)) OT_SELF_T selfO = Tcl_ObjectContextObject(objCtx); \
62 __attribute__((unused)) MK_TYP hdl = MkObjectC##_TT;
63
64#define OT_SETUP_hdl SetupHdlFromMetaData_2(OBJ,MK_OBJ);
65#define OT_SETUP_hdl__null_allow SetupHdlFromMetaData__null_allow_2(OBJ,MK_OBJ);
66#define OT_SETUP_hdl_destr SetupHdlFromMetaData__null_allow_2(OBJ,MK_OBJ);
67
68#define OT_SETUP_hdl_constr_pre
69#define OT_SETUP_hdl_constr \
70 OT_SETUP_hdl_constr_pre; \
71 int __skip=Tcl_ObjectContextSkippedArgs(objCtx); \
72 AllRtSetup_NULL; \
73 MK_RT_UNUSED OT_SELF_T selfO = Tcl_ObjectContextObject(objCtx); \
74 MK_OBJ hdl = (MK_OBJ) &MkERROR;
75
76#if !defined(SetupRtFromHdl_XN)
77 #define SetupRtFromHdl_XN(hdl) AllRtSetup_XN(hdl)
78 #define SetupRtFromHdl_X(hdl) AllRtSetup_X(hdl)
79#endif
80
81// initialize the TCL and MO class specific object
82#define ClassInit \
83 /* if not already done, initialize NEW MQ type */ \
84 if (MkObjectCTT == NULL) MkObjectCTT = MkObjectSTT; \
85 \
86 /* protect against double call */ \
87 if (MkObjectCTT->selfCreate == NS(MkObjectC_selfCreate)) return MK_OK; \
88 \
89 /* add "selfCreate" and "selfDelete" feature to the MQ-Class */ \
90 MkObjectCTT->selfCreate = NS(MkObjectC_selfCreate); \
91 MkObjectCTT->selfDelete = NS(MkObjectC_selfDelete); \
92 MkObjectCTT->selfUnlink = NS(MkObjectC_selfUnlink); \
93 \
94 /* create the TCL-class */ \
95 OT_SELF_T classO = MK(ClassDef)(interp,ns,MkObjectCTT); \
96 check_NULL(classO) goto error; \
97 OT_CLASS = Tcl_GetObjectAsClass(classO); \
98 \
99 /* create the TCL static Methods */ \
100 static MkThreadLocal OtUnknownS NS(sClassUnknown) = {OT_UNKNOWN_CLASS}; \
101 check_LNG(MK(UnknownSetup) (interp,classO,NS(sOtClassDef),&NS(sClassUnknown))) goto error; \
102 \
103 /* create the TCL instance Methods */ \
104 static MkThreadLocal OtUnknownS NS(sInstanceUnknown) = {OT_UNKNOWN_INSTANCE}; \
105 check_LNG(MK(UnknownSetup) (interp,classO,NS(sInstanceDef),&NS(sInstanceUnknown))) goto error; \
106 \
107 /* define the "NULL" object */ \
108 MK(MkObjectC_MK_NULL) = Tcl_GetObjectName(interp, \
109 MK(AtomCreate) (MK_RT_CALL interp, NULL /*obj*/, OT_CLASS, "MK_NULL" /*name*/, "::tclmkkernel::MkObjectC" /*ns*/) \
110 ); \
111 Tcl_IncrRefCount(MK(MkObjectC_MK_NULL));
112
113#define VER TCL_OO_METHOD_VERSION_CURRENT
114
115/* LABEL-END */
116
117// BEGIN-DOC - created by 'tcl_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
118
119// doc-key: MkObjectC,MkDbg,sm_,func
120#define DbgM_doc "MkObjectC DbgM message:string ?debug:int32=0? ?callfunc:string=\"MK_NULL\"? ?lvl:int32=0?"
121
122// doc-key: MkObjectC,MkDbg,om_,func
123#define DbgDump_doc "$obj DbgDump ?message:string=\"var\"? ?callfunc:string=\"MK_NULL\"? (const)"
124#define DbgL_doc "$fmtobj DbgL message:string ?debug:int32=0? ?callfunc:string=\"MK_NULL\"? ?lvl:int32=0? (const)"
125#define DbgLogC_doc "$obj DbgLogC ?callfunc:string=\"MK_NULL\"? (const)"
126#define DbgO_doc "$obj DbgO ?callfunc:string=\"MK_NULL\"? (const)"
127#define DbgSTACK_doc "$fmtobj DbgSTACK ?skip:int32=0? ?num:int32=-1? ?callfunc:string=\"MK_NULL\"? (const)"
128
129// doc-key: MkObjectC,MkLog,om_,func
130#define LogC_doc "$fmtobj LogC message:string ?debug:int32=0? ?callfunc:string=\"MK_NULL\"? (const)"
131#define LogHEX_doc "$fmtobj LogHEX callfunc:string data:binary (const)"
132
133// doc-key: MkObjectC,MkObj,om_,func
134#define RefGet_doc "int32 [$obj RefGet]"
135
136// doc-key: MkObjectC,MkObject,sc_,func
137#define GetNull_doc "MkObjectC [MkObjectC GetNull]"
138#define HandleResolve_doc "MkObjectC [MkObjectC HandleResolve netHdl:MK_HDL]"
139#define Instances_doc "MkObjectC [MkObjectC Instances]"
140
141// doc-key: MkObjectC,MkObject,sm_,func
142#define DeleteCallbackCleanup_doc "MkObjectC DeleteCallbackCleanup ident:string"
143#define DeleteCallbackSetup_doc "MkObjectC DeleteCallbackSetup ident:string ?callback:callable=\"MK_NULL\"? ?filter:string=\"MK_NULL\"?"
144#define HandleDeleteByNetHdl_doc "MkObjectC HandleDeleteByNetHdl netHdl:MK_HDL"
145
146// doc-key: MkObjectC,MkObject,oD_,func
147#define Delete_doc "$obj Delete"
148
149// doc-key: MkObjectC,MkObject,od_,func
150#define Dispose_doc "$obj Dispose"
151
152// doc-key: MkObjectC,MkObject,oc_,func
153#define ErrorCatch_doc "MkErrorC [$obj ErrorCatch ?exception:errorCode=\"MK_NULL\"? ?callfunc:string=\"MK_NULL\"?] (const)"
154#define Next_doc "MkObjectC [$obj Next]"
155#define Prev_doc "MkObjectC [$obj Prev]"
156#define ToError_doc "MkErrorC [$obj ToError]"
157
158// doc-key: MkObjectC,MkObject,om_,func
159#define HandleDelete_doc "$netObj HandleDelete"
160#define HandleExists_doc "bool [$obj HandleExists]"
161#define HandleGet_doc "MK_HDL [$obj HandleGet]"
162#define HandleGetOfType_doc "MK_HDL [$obj HandleGetOfType]"
163#define HandleGetOr0_doc "MK_HDL [$obj HandleGetOr0]"
164#define IsNull_doc "bool [$obj IsNull]"
165#define Log_doc "$obj Log ?fmtobj:MkObjectC=\"MK_NULL\"? ?debug:int32=0? ?callfunc:string=\"MK_NULL\"? ?lvl:int32=0? (const)"
166#define LogLong_doc "$obj LogLong ?fmtobj:MkObjectC=\"MK_NULL\"? ?debug:int32=0? ?callfunc:string=\"MK_NULL\"? ?lvl:int32=0? (const)"
167#define LogShort_doc "$obj LogShort ?fmtobj:MkObjectC=\"MK_NULL\"? ?debug:int32=0? ?callfunc:string=\"MK_NULL\"? ?lvl:int32=0? (const)"
168#define LogType_doc "$obj LogType ?fmtobj:MkObjectC=\"MK_NULL\"? ?debug:int32=0? ?callfunc:string=\"MK_NULL\"? ?lvl:int32=0? (const)"
169#define ToName_doc "string [$obj ToName] (const)"
170#define ToNameOfClass_doc "string [$obj ToNameOfClass]"
171#define ToNameOfType_doc "string [$obj ToNameOfType] (const)"
172#define ToString_doc "string [$inst ToString] (const)"
173
174// doc-key: MkObjectC,MkSys,sm_,func
175#define SysHashI32_doc "int32 [MkObjectC SysHashI32 key:string ?length:int32=-1?]"
176#define SysHashSTR_doc "string [MkObjectC SysHashSTR key:string ?length:int32=-1?]"
177
178// doc-key: MkObjectC,MkSys,om_,func
179#define SysKill_doc "$fmtobj SysKill pid:int32 signal:int32 (const)"
180
181// doc-key: MkObjectC,MkSys,omo,func
182#define SysGetPid_doc "int32 [$fmtobj SysGetPid] (const)"
183
184// END-DOC - created by 'tcl_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
185
186/*****************************************************************************/
187/* */
188/* S T A R T */
189/* */
190/*****************************************************************************/
191
192// overwrite "libmkkernel→MkObjectToNameOfClass_O" with "own" implementation
193#define MkDbgO_O(hdl,call) MkLogV(hdl,call,0,"%s\n",MK(PrintLngObj)(OT_Prefix_CALL NULL,META2VAL_O(hdl)))
194#define MkDbgDumpTmpl(...) TclDbgDump(OT_Prefix_CALL __VA_ARGS__)
195#define MkObjectToNameOfClassTmpl(hdl) OT_LNG_OBJ_CLASSNAME(META2VAL_O(hdl))
196#define MkObjectErrorCatchTmpl(...) MK(MkExceptionC_Catch)(OT_Prefix_CALL __VA_ARGS__)
197
198static enum MkErrorE
199TclDbgDump ( OT_Prefix_ARGS MK_OBJ const obj, MK_STRN const message, MK_STRN const callfunc )
200{
201 Tcl_Obj * self = META2VAL_O(obj);
203 MkLogV(obj,callfunc,0,MK_COLOR_CYAN" >>> "MK_COLOR_RESET"\n");
204
205 fprintf(MK_RT_REF.log.logFILE," > " MK_COLOR_YELLOW "%s"MK_COLOR_RESET"\n", MK(PrintLngObj)(OT_Prefix_CALL message,self));
206
207 MkObjectLog(obj,NULL,0,callfunc,1);
208
209 MkLogV(obj,callfunc,0,MK_COLOR_CYAN" <<< "MK_COLOR_RESET"\n");
211
212 return MK_OK;
213}
214
215/*****************************************************************************/
216/* */
217/* O B J E C T */
218/* */
219/*****************************************************************************/
220
221// BEGIN-MkObjectC - created by 'tcl_MqC.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
222
226
227// doc-key: MkObjectC,MkObjectC-Class-Export,sc_
228
230static OT_ProcRet NS(MkObjectC_HandleResolve) (OtClass_ARGS) {
233 MK_HDL netHdl = 0;
236 MK_OBJ retVal = MkObjectHandleResolve (netHdl);
237 OT_retObj_SET_OBJ(retVal);
238 goto end;
239 error:
241 end:
243}
244
245// doc-key: MkObjectC,MkObjectC-Class-Export,om_
246
248static OT_ProcRet NS(MkObjectC_HandleDelete) (MkObjectC_ARGS) {
254 goto end;
255 error:
257 end:
259}
260
262static OT_ProcRet NS(MkObjectC_HandleExists) (MkObjectC_ARGS) {
267 goto end;
268 error:
270 end:
272}
273
275static OT_ProcRet NS(MkObjectC_HandleGet) (MkObjectC_ARGS) {
280 goto end;
281 error:
283 end:
285}
286
288static OT_ProcRet NS(MkObjectC_HandleGetOfType) (MkObjectC_ARGS) {
293 goto end;
294 error:
296 end:
298}
299
301static OT_ProcRet NS(MkObjectC_HandleGetOr0) (MkObjectC_ARGS) {
306 goto end;
307 error:
309 end:
311}
312
313// doc-key: MkObjectC,MkObjectC-Class-Export,sm_
314
316static OT_ProcRet NS(MkObjectC_HandleDeleteByNetHdl) (OtClass_ARGS) {
319 MK_HDL netHdl = 0;
324 goto end;
325 error:
327 end:
329}
330
332// MkObjectC_Class_TCL_API
333
337
338// doc-key: MkObjectC,MkObjectC-Class-Introspection,oc_
339
341static OT_ProcRet NS(MkObjectC_Next) (MkObjectC_ARGS) {
345 MK_OBJ retVal = MkObjectNext (hdl);
346 OT_retObj_SET_OBJ(retVal);
347 goto end;
348 error:
350 end:
352}
353
355static OT_ProcRet NS(MkObjectC_Prev) (MkObjectC_ARGS) {
359 MK_OBJ retVal = MkObjectPrev (hdl);
360 OT_retObj_SET_OBJ(retVal);
361 goto end;
362 error:
364 end:
366}
367
368// doc-key: MkObjectC,MkObjectC-Class-Introspection,sc_
369
371static OT_ProcRet NS(MkObjectC_Instances) (OtClass_ARGS) {
375 MK_OBJ retVal = MkObjectInstances ();
376 OT_retObj_SET_OBJ(retVal);
377 goto end;
378 error:
380 end:
382}
383
385// MkObjectC_Class_TCL_API
386
390
391// doc-key: MkObjectC,MkObjectC-Class-Misc,sc_
392
394static OT_ProcRet NS(MkObjectC_GetNull) (OtClass_ARGS) {
398 MK_OBJ retVal = MkObjectGetNull ();
399 OT_retObj_SET_OBJ(retVal);
400 goto end;
401 error:
403 end:
405}
406
408// MkObjectC_Class_TCL_API
409
413
414// doc-key: MkObjectC,MkObjectC-Dbg,om_
415
417static OT_ProcRet NS(MkObjectC_DbgDump) (MkObjectC_ARGS) {
420 MK_STRN message = "var";
422 MK_STRN callfunc = NULL;
425 if (MkSysStringIsNULL(callfunc)) {callfunc = OT_GET_CALL_PROC;}
426 MkErrorC_Check(hdl,MkDbgDumpTmpl (hdl, message, callfunc));
428 goto end;
429 error:
431 end:
434}
435
437static OT_ProcRet NS(MkObjectC_DbgL) (MkObjectC_ARGS) {
440 MK_STRN message = 0;
442 MK_DBG debug = 0;
444 MK_STRN callfunc = NULL;
446 MK_I32 lvl = 0;
449 if (debug > MkRuntimeDebugGet()) {
451 goto end;
452 }
453 if (MkSysStringIsNULL(callfunc)) {callfunc = OT_GET_CALL_PROC;}
454 MkDbgL (hdl, message, debug, callfunc, lvl);
456 goto end;
457 error:
459 end:
462}
463
465static OT_ProcRet NS(MkObjectC_DbgLogC) (MkObjectC_ARGS) {
468 MK_STRN callfunc = NULL;
471 if (MkSysStringIsNULL(callfunc)) {callfunc = OT_GET_CALL_PROC;}
472 MkDbgLogC (hdl, callfunc);
474 goto end;
475 error:
477 end:
480}
481
483static OT_ProcRet NS(MkObjectC_DbgO) (MkObjectC_ARGS) {
486 MK_STRN callfunc = NULL;
489 if (MkSysStringIsNULL(callfunc)) {callfunc = OT_GET_CALL_PROC;}
490 MkDbgO (hdl, callfunc);
492 goto end;
493 error:
495 end:
498}
499
501static OT_ProcRet NS(MkObjectC_DbgSTACK) (MkObjectC_ARGS) {
504 MK_I32 skip = 0;
506 MK_I32 num = -1;
508 MK_STRN callfunc = NULL;
511 if (MkSysStringIsNULL(callfunc)) {callfunc = OT_GET_CALL_PROC;}
512 MkDbgSTACK (hdl, skip, num, callfunc);
514 goto end;
515 error:
517 end:
520}
521
522// doc-key: MkObjectC,MkObjectC-Dbg,sm_
523
525static OT_ProcRet NS(MkObjectC_DbgM) (OtClass_ARGS) {
528 MK_STRN message = 0;
530 MK_DBG debug = 0;
532 MK_STRN callfunc = NULL;
534 MK_I32 lvl = 0;
537 if (debug > MkRuntimeDebugGet()) {
539 goto end;
540 }
541 if (MkSysStringIsNULL(callfunc)) {callfunc = OT_GET_CALL_PROC;}
542 MkDbgM (message, debug, callfunc, lvl);
544 goto end;
545 error:
547 end:
550}
551
553// MkObjectC_Dbg_TCL_API
554
558
559// doc-key: MkObjectC,MkObjectC-Log,om_
560
562static OT_ProcRet NS(MkObjectC_LogC) (MkObjectC_ARGS) {
565 MK_STRN message = 0;
567 MK_DBG debug = 0;
569 MK_STRN callfunc = NULL;
572 if (debug > MkRuntimeDebugGet()) {
574 goto end;
575 }
576 if (MkSysStringIsNULL(callfunc)) {callfunc = OT_GET_CALL_PROC;}
577 MkLogC (hdl, message, debug, callfunc);
579 goto end;
580 error:
582 end:
585}
586
588static OT_ProcRet NS(MkObjectC_LogHEX) (MkObjectC_ARGS) {
591 MK_STRN callfunc = NULL;
593 MkBinaryR data = {0};
596 if (MkSysStringIsNULL(callfunc)) {callfunc = OT_GET_CALL_PROC;}
597 MkLogHEX (hdl, callfunc, data);
599 goto end;
600 error:
602 end:
605}
606
608static OT_ProcRet NS(MkObjectC_Log) (MkObjectC_ARGS) {
611 MK_OBJN fmtobj = NULL;
613 MK_DBG debug = 0;
615 MK_STRN callfunc = NULL;
617 MK_I32 lvl = 0;
620 if (debug > MkRuntimeDebugGet()) {
622 goto end;
623 }
624 if (MkSysStringIsNULL(callfunc)) {callfunc = OT_GET_CALL_PROC;}
625 MkObjectLog (hdl, fmtobj, debug, callfunc, lvl);
627 goto end;
628 error:
630 end:
633}
634
636static OT_ProcRet NS(MkObjectC_LogLong) (MkObjectC_ARGS) {
639 MK_OBJN fmtobj = NULL;
641 MK_DBG debug = 0;
643 MK_STRN callfunc = NULL;
645 MK_I32 lvl = 0;
648 if (debug > MkRuntimeDebugGet()) {
650 goto end;
651 }
652 if (MkSysStringIsNULL(callfunc)) {callfunc = OT_GET_CALL_PROC;}
653 MkObjectLogLong (hdl, fmtobj, debug, callfunc, lvl);
655 goto end;
656 error:
658 end:
661}
662
664static OT_ProcRet NS(MkObjectC_LogShort) (MkObjectC_ARGS) {
667 MK_OBJN fmtobj = NULL;
669 MK_DBG debug = 0;
671 MK_STRN callfunc = NULL;
673 MK_I32 lvl = 0;
676 if (debug > MkRuntimeDebugGet()) {
678 goto end;
679 }
680 if (MkSysStringIsNULL(callfunc)) {callfunc = OT_GET_CALL_PROC;}
681 MkObjectLogShort (hdl, fmtobj, debug, callfunc, lvl);
683 goto end;
684 error:
686 end:
689}
690
692static OT_ProcRet NS(MkObjectC_LogType) (MkObjectC_ARGS) {
695 MK_OBJN fmtobj = NULL;
697 MK_DBG debug = 0;
699 MK_STRN callfunc = NULL;
701 MK_I32 lvl = 0;
704 if (debug > MkRuntimeDebugGet()) {
706 goto end;
707 }
708 if (MkSysStringIsNULL(callfunc)) {callfunc = OT_GET_CALL_PROC;}
709 MkObjectLogType (hdl, fmtobj, debug, callfunc, lvl);
711 goto end;
712 error:
714 end:
717}
718
720// MkObjectC_Log_TCL_API
721
725
726// doc-key: MkObjectC,MkObjectC-Misc,oc_
727
729static OT_ProcRet NS(MkObjectC_ErrorCatch) (MkObjectC_ARGS) {
732 MK_EXP exception = NULL;
734 MK_STRN callfunc = NULL;
737 if (MkSysStringIsNULL(callfunc)) {callfunc = OT_GET_CALL_PROC;}
738 MK_ERR retVal = MkObjectErrorCatchTmpl (hdl, exception, callfunc);
739 OT_retObj_SET_ERR(retVal);
740 goto end;
741 error:
743 end:
746}
747
749static OT_ProcRet NS(MkObjectC_ToError) (MkObjectC_ARGS) {
753 MK_ERR retVal = MkObjectToError (hdl);
754 OT_retObj_SET_ERR(retVal);
755 goto end;
756 error:
758 end:
760}
761
762// doc-key: MkObjectC,MkObjectC-Misc,om_
763
765static OT_ProcRet NS(MkObjectC_IsNull) (MkObjectC_ARGS) {
770 goto end;
771 error:
773 end:
775}
776
778static OT_ProcRet NS(MkObjectC_ToName) (MkObjectC_ARGS) {
783 goto end;
784 error:
786 end:
788}
789
791static OT_ProcRet NS(MkObjectC_ToNameOfClass) (MkObjectC_ARGS) {
796 goto end;
797 error:
799 end:
801}
802
804static OT_ProcRet NS(MkObjectC_ToNameOfType) (MkObjectC_ARGS) {
809 goto end;
810 error:
812 end:
814}
815
817static OT_ProcRet NS(MkObjectC_ToString) (MkObjectC_ARGS) {
822 goto end;
823 error:
825 end:
827}
828
830// MkObjectC_Misc_TCL_API
831
835
836// doc-key: MkObjectC,MkObjectC-Obj,om_
837
839static OT_ProcRet NS(MkObjectC_RefGet) (MkObjectC_ARGS) {
844 goto end;
845 error:
847 end:
849}
850
852// MkObjectC_Obj_TCL_API
853
857
858// doc-key: MkObjectC,MkObjectC-Sys,om_
859
861static OT_ProcRet NS(MkObjectC_SysKill) (MkObjectC_ARGS) {
864 MK_I32 pid = 0;
866 MK_I32 signal = 0;
869 MkErrorC_Check(hdl,MkSysKill (hdl, pid, signal));
871 goto end;
872 error:
874 end:
876}
877
878// doc-key: MkObjectC,MkObjectC-Sys,omo
879
881static OT_ProcRet NS(MkObjectC_SysGetPid) (MkObjectC_ARGS) {
885 MK_I32 pid_out;
886 MkErrorC_Check(hdl,MkSysGetPid (hdl, &pid_out));
887 OT_retObj_SET_I32(pid_out);
888 goto end;
889 error:
891 end:
893}
894
895// doc-key: MkObjectC,MkObjectC-Sys,sm_
896
898static OT_ProcRet NS(MkObjectC_SysHashI32) (OtClass_ARGS) {
901 MK_STRN key = 0;
903 MK_NUM length = -1;
906 OT_retObj_SET_I32(MkSysHashI32 (key, length));
907 goto end;
908 error:
910 end:
912}
913
915static OT_ProcRet NS(MkObjectC_SysHashSTR) (OtClass_ARGS) {
918 MK_STRN key = 0;
920 MK_NUM length = -1;
923 OT_retObj_SET_STR(MkSysHashSTR (key, length));
924 goto end;
925 error:
927 end:
929}
930
932// MkObjectC_Sys_TCL_API
933
937
938// doc-key: MkObjectC,MkObjectC-TOR,od_
939
941static OT_ProcRet NS(MkObjectC_Dispose) (MkObjectC_ARGS) {
947 goto end;
948 error:
950 end:
952}
953
954// doc-key: MkObjectC,MkObjectC-TOR,oD_
955
957static OT_ProcRet NS(MkObjectC_Delete) (MkObjectC_ARGS) {
963 goto end;
964 error:
966 end:
968}
969
970// doc-key: MkObjectC,MkObjectC-TOR,sm_
971
973static OT_ProcRet NS(MkObjectC_DeleteCallbackCleanup) (OtClass_ARGS) {
976 MK_STRN ident = 0;
981 goto end;
982 error:
984 end:
986}
987
989static OT_ProcRet NS(MkObjectC_DeleteCallbackSetup) (OtClass_ARGS) {
992 MK_STRN ident = 0;
994 OT_SETUP_CALLABLE(callback)
996 MK_STRN filter = NULL;
999 MkObjectDeleteCallF fCall = (callback == NULL ? NULL : NS(ObjectDeleteCall));
1000 MkErrorC_Check(MK_ERROR_FORMAT,MkObjectDeleteCallbackSetup (ident, fCall, callback, NS(ObjectDeleteFree), filter));
1002 goto end;
1003 error:
1005 end:
1006 OT_CLEANUP_CALLABLE(callback)
1008}
1009
1011// MkObjectC_TOR_TCL_API
1012
1013// END-MkObjectC - created by 'tcl_MqC.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
1014
1015// ---------------------------------------------------------------------------------------
1016
1017const static Tcl_MethodType NS(sOtClassDef)[] = {
1018
1019// BEGIN-CLASS - created by 'tcl_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
1020
1021// doc-key: MkObjectC,MkDbg,sm_
1022 {VER, "DbgM" , NS(MkObjectC_DbgM) , NULL, NULL},
1023
1024// doc-key: MkObjectC,MkObject,sc_
1025 {VER, "GetNull" , NS(MkObjectC_GetNull) , NULL, NULL},
1026 {VER, "HandleResolve" , NS(MkObjectC_HandleResolve) , NULL, NULL},
1027 {VER, "Instances" , NS(MkObjectC_Instances) , NULL, NULL},
1028
1029// doc-key: MkObjectC,MkObject,sm_
1030 {VER, "DeleteCallbackCleanup", NS(MkObjectC_DeleteCallbackCleanup) , NULL, NULL},
1031 {VER, "DeleteCallbackSetup" , NS(MkObjectC_DeleteCallbackSetup) , NULL, NULL},
1032 {VER, "HandleDeleteByNetHdl", NS(MkObjectC_HandleDeleteByNetHdl) , NULL, NULL},
1033
1034// doc-key: MkObjectC,MkSys,sm_
1035 {VER, "SysHashI32" , NS(MkObjectC_SysHashI32) , NULL, NULL},
1036 {VER, "SysHashSTR" , NS(MkObjectC_SysHashSTR) , NULL, NULL},
1037
1038// END-CLASS - created by 'tcl_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
1039 {0, NULL, NULL, NULL}
1040};
1041
1047
1048// with ALL_INIT_AT_STARTUP - all methods will be setup at startup
1049#define ALL_INIT_AT_STARTUP
1050
1051static void NS(sUnknownAllMethods) (
1052 OT_ENV_T interp,
1053 const OtUnknownS *ukn
1054) {
1055 const Tcl_MethodType *type = ukn->list;
1056 const size_t nmemb = ukn->nmemb;
1057 const OT_CLS_T classC = ukn->classC;
1058 const OT_SELF_T classO = ukn->classO;
1059
1060 for (int i=0; i<nmemb; i++) {
1061//printC(type[i].name)
1062 switch(ukn->what) {
1064 if (type[i].name[0] == '<') {
1065 if (type[i].name[1] == 'c') {
1066 if (strcmp(type[i].name,"<constructor>") == 0) {
1067#ifdef ALL_INIT_AT_STARTUP
1068 Tcl_Method mth = Tcl_NewMethod(interp, classC, NULL, 1, &type[i], NULL);
1069 Tcl_ClassSetConstructor(interp,classC,mth);
1070#endif
1071 } else {
1072 goto other;
1073 }
1074 } else if (type[i].name[1] == 'd') {
1075 if (strcmp(type[i].name,"<destructor>") == 0) {
1076#ifdef ALL_INIT_AT_STARTUP
1077 // there are 2 destructors:
1078 // -> FIRST from "MkAtomMeta"
1079 // -> SECOND the "<destructor>" from "MkObjectC"
1080 // BOTH call "MK(AtomMetaDelete)", disable SECOND and wait for errors
1081 //Tcl_Method mth = Tcl_NewMethod(interp, classC, NULL, 1, &type[i], clientData);
1082 //Tcl_ClassSetDestructor(interp,classC,mth);
1083#endif
1084 } else {
1085 goto other;
1086 }
1087 } else {
1088 goto other;
1089 }
1090 } else {
1091 other:
1092 Tcl_NewMethod(interp, classC, Tcl_NewStringObj(type[i].name,-1), 1, &type[i], NULL);
1093 }
1094 break;
1095 case OT_UNKNOWN_CLASS:
1096 Tcl_NewInstanceMethod(interp, classO, Tcl_NewStringObj(type[i].name,-1), 1, &type[i], NULL);
1097 break;
1098 }
1099 }
1100}
1101
1102
1103#ifndef ALL_INIT_AT_STARTUP
1104static int NS(sUnknownSort) (const void *one, const void *two) {
1105 return strcmp(((Tcl_MethodType*)one)->name, ((Tcl_MethodType*)two)->name);
1106}
1107
1108static int NS(sUnknownSort2) (const void *one, const void *two) {
1109//printV("%s ? %s\n", ((MK_STRN)one), ((Tcl_MethodType*)two)->name)
1110 return strcmp(((MK_STRN)one), ((Tcl_MethodType*)two)->name);
1111}
1112static OT_ProcRet NS(sUnknownObjCmd) (MkObjectC_ARGS) {
1113 Tcl_MethodType* item = NULL;
1115 //OT_SETUP_VARARGS(1,99,"unknown command args ...")
1116 OtUnknownS *ukn = clientData;
1117
1118//printAryX(hdl, "xxx", objc, objv)
1119//printAryX(hdl, OT_LNG_NAME_CLASS_FROM_CONTEXT(objCtx), objc, objv)
1120 if (skip<objc) {
1121 MK_STRN key = Tcl_GetString(objv[skip]);
1122 item = bsearch (key, ukn->list, ukn->nmemb, sizeof(Tcl_MethodType), NS(sUnknownSort2));
1123 }
1124
1125 if (item) {
1126 switch (ukn->what) {
1128 Tcl_NewMethod(interp, ukn->classC, Tcl_NewStringObj(item->name,-1), 1, item, NULL);
1129 break;
1130 case OT_UNKNOWN_CLASS:
1131 Tcl_NewInstanceMethod(interp, ukn->classO, Tcl_NewStringObj(item->name,-1), 1, item, NULL);
1132 break;
1133 }
1134 return Tcl_EvalObjv(interp,objc,objv,0);
1135 } else {
1136 // on ERROR, init ALL METHODS first
1137 NS(sUnknownAllMethods)(interp,ukn);
1138 // and than call the "unkown"
1139 return Tcl_ObjectContextInvokeNext(interp,objCtx,objc,objv,skip);
1140 }
1141 return MK_OK;
1142}
1143
1144#endif /* not ATT_INIT */
1145
1146// create the "<constructor>" and count the items
1147int MK(UnknownSetup) (
1148 OT_ENV_T interp,
1149 OT_SELF_T classO,
1150 const Tcl_MethodType methodsDefs[],
1151 OtUnknownS *uknPtr
1152) {
1153 OT_CLS_T classC = Tcl_GetObjectAsClass(classO);
1154
1155//printTxt(OT_LNG_NAME_FROM_CLASS(classC))
1156
1157 // allready done?
1158 if (uknPtr->list != NULL) return TCL_OK;
1159
1160 // sort the methodsDefs -> required for "bsearch" in sUnknownObjCmd
1161 size_t num;
1162 for (num=0; methodsDefs[num].version != 0; num++) { };
1163 *uknPtr = (OtUnknownS) {uknPtr->what, num, methodsDefs, classO, classC};
1164
1165#ifdef ALL_INIT_AT_STARTUP
1166 NS(sUnknownAllMethods)(interp,uknPtr);
1167#else
1168 qsort(methodsDefs, num, sizeof(Tcl_MethodType), NS(sUnknownSort));
1169
1170 // MA; for (int i=0; i<num; i++) { printV("[%2i] %s\n", i, methodsDefs[i].name); } /* debugging */
1171
1172 const static Tcl_MethodType NS(sUnknownDef) = { VER, "unknown", NS(sUnknownObjCmd), NULL, NULL };
1173
1174 switch (uknPtr->what) {
1175
1176 case OT_UNKNOWN_CLASS: {
1177
1178 /* add the "unknown" */
1179 Tcl_NewInstanceMethod(interp, classO, Tcl_NewStringObj("unknown",-1), 1, &NS(sUnknownDef), uknPtr);
1180
1181 break;
1182 }
1183
1184 case OT_UNKNOWN_INSTANCE: {
1185 Tcl_MethodType* item;
1186
1187 // create MINIMUM required functions
1188 item = bsearch("<constructor>", uknPtr->list, uknPtr->nmemb, sizeof(Tcl_MethodType), NS(sUnknownSort2));
1189 if (item) {
1190 Tcl_Method mth = Tcl_NewMethod(interp, classC, NULL, 1, item, NULL);
1191 Tcl_ClassSetConstructor(interp,classC,mth);
1192 }
1193
1194/*
1195 // there are 2 destructors, FIRST from "MkAtomMeta" and SECOND the "<destructor>" from "MkObjectC"
1196 // -> BOTH call "MkAtomMetaDelete"
1197 // disable SECOND and wait for errors
1198 item = bsearch("<destructor>", uknPtr->list, uknPtr->nmemb, sizeof(Tcl_MethodType), NS(sUnknownSort2));
1199 if (item) {
1200 mth = Tcl_NewMethod(interp, classC, NULL, 1, item, clientData);
1201 Tcl_ClassSetDestructor(interp,classC,mth);
1202 }
1203*/
1204
1205 /* add the "unknown" */
1206 Tcl_NewMethod(interp, classC, Tcl_NewStringObj("unknown",-1), 1, &NS(sUnknownDef), uknPtr);
1207
1208 break;
1209 }
1210 }
1211
1212#endif /* ALL_INIT_AT_STARTUP */
1213
1214 return TCL_OK;
1215}
1216
1217#undef ALL_INIT_AT_STARTUP
1218
1219// --------------------------------------------------------------------------
1220
1221const static Tcl_MethodType NS(sInstanceDef)[] = {
1222
1223// BEGIN-OBJ - created by 'tcl_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
1224
1225// doc-key: MkObjectC,MkDbg,om_
1226 {VER, "DbgDump" , NS(MkObjectC_DbgDump) , NULL, NULL},
1227 {VER, "DbgL" , NS(MkObjectC_DbgL) , NULL, NULL},
1228 {VER, "DbgLogC" , NS(MkObjectC_DbgLogC) , NULL, NULL},
1229 {VER, "DbgO" , NS(MkObjectC_DbgO) , NULL, NULL},
1230 {VER, "DbgSTACK" , NS(MkObjectC_DbgSTACK) , NULL, NULL},
1231
1232// doc-key: MkObjectC,MkLog,om_
1233 {VER, "LogC" , NS(MkObjectC_LogC) , NULL, NULL},
1234 {VER, "LogHEX" , NS(MkObjectC_LogHEX) , NULL, NULL},
1235
1236// doc-key: MkObjectC,MkObj,om_
1237 {VER, "RefGet" , NS(MkObjectC_RefGet) , NULL, NULL},
1238
1239// doc-key: MkObjectC,MkObject,oD_
1240 {VER, "Delete" , NS(MkObjectC_Delete) , NULL, NULL},
1241
1242// doc-key: MkObjectC,MkObject,od_
1243 {VER, "Dispose" , NS(MkObjectC_Dispose) , NULL, NULL},
1244
1245// doc-key: MkObjectC,MkObject,oc_
1246 {VER, "ErrorCatch" , NS(MkObjectC_ErrorCatch) , NULL, NULL},
1247 {VER, "Next" , NS(MkObjectC_Next) , NULL, NULL},
1248 {VER, "Prev" , NS(MkObjectC_Prev) , NULL, NULL},
1249 {VER, "ToError" , NS(MkObjectC_ToError) , NULL, NULL},
1250
1251// doc-key: MkObjectC,MkObject,om_
1252 {VER, "HandleDelete" , NS(MkObjectC_HandleDelete) , NULL, NULL},
1253 {VER, "HandleExists" , NS(MkObjectC_HandleExists) , NULL, NULL},
1254 {VER, "HandleGet" , NS(MkObjectC_HandleGet) , NULL, NULL},
1255 {VER, "HandleGetOfType" , NS(MkObjectC_HandleGetOfType) , NULL, NULL},
1256 {VER, "HandleGetOr0" , NS(MkObjectC_HandleGetOr0) , NULL, NULL},
1257 {VER, "IsNull" , NS(MkObjectC_IsNull) , NULL, NULL},
1258 {VER, "Log" , NS(MkObjectC_Log) , NULL, NULL},
1259 {VER, "LogLong" , NS(MkObjectC_LogLong) , NULL, NULL},
1260 {VER, "LogShort" , NS(MkObjectC_LogShort) , NULL, NULL},
1261 {VER, "LogType" , NS(MkObjectC_LogType) , NULL, NULL},
1262 {VER, "ToName" , NS(MkObjectC_ToName) , NULL, NULL},
1263 {VER, "ToNameOfClass" , NS(MkObjectC_ToNameOfClass) , NULL, NULL},
1264 {VER, "ToNameOfType" , NS(MkObjectC_ToNameOfType) , NULL, NULL},
1265 {VER, "ToString" , NS(MkObjectC_ToString) , NULL, NULL},
1266
1267// doc-key: MkObjectC,MkSys,om_
1268 {VER, "SysKill" , NS(MkObjectC_SysKill) , NULL, NULL},
1269
1270// doc-key: MkObjectC,MkSys,omo
1271 {VER, "SysGetPid" , NS(MkObjectC_SysGetPid) , NULL, NULL},
1272
1273// END-OBJ - created by 'tcl_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
1274 {0, NULL, NULL, NULL, NULL}
1275};
1276
1282
1283int NS(pMkObjectC_Init) ( MK_RT_ARGS OT_ENV_T interp, OT_NS_T ns)
1284{
1285 ClassInit
1286
1287 return TCL_OK;
1288error:
1289 return TCL_ERROR;
1290}
1291
1292// ########################################################################################
1293// OVERLOAD
tag: nhi1-release-250425
#define OtClass_ARGS
#define OT_SELF
#define MK(n)
#define OT_SETUP_VARARGS(min, max, d)
#define OT_CHECK_NIH(val)
#define OT_retObj_SET_BOL(nat)
#define OT_SETUP_NOARG(d)
#define OT_SETUP_ONEARG(d)
Tcl_Class OT_CLS_T
Tcl_Namespace * OT_NS_T
#define OT_CHECK_NI4(val)
#define OT_retObj_SET_Error
#define OT_FRAME_CLEANUP
#define OT_retObj_SET_HDL(nat)
#define OT_OBJECT_DELETE(O)
@ OT_UNKNOWN_CLASS
@ OT_UNKNOWN_INSTANCE
#define OT_CHECK_REQUIRED(val)
#define OT_retObj_SET_None
#define OT_retObj_SET_I32(nat)
#define OT_Prefix_CALL
#define OT_retObj_SET_OBJ(nat)
#define NS(n)
#define MkObjectC_ARGS
#define OT_retObj_RETURN
#define OT_GET_CALL_PROC
#define OT_CHECK__ME_REF_MkBinaryR(val)
#define OT_retObj_SET_STR(nat)
Tcl_Object OT_SELF_T
#define OT_CHECK_OPTIONAL(val)
#define OT_retObj_SET_ERR(nat)
#define OT_OBJECT_DISPOSE(O)
#define OT_CHECK_NOARGS
#define MkErrorC_Check(mng, PROC)
#define OT_ProcRet
Tcl_Interp * OT_ENV_T
#define OT_Prefix_ARGS
#define META2VAL_O(o)
Tcl_Obj * OT_OBJ_T
#define OT_CHECK_STRN(val)
#define Instances_doc
#define LogShort_doc
#define SysKill_doc
#define DbgLogC_doc
#define SysGetPid_doc
#define LogType_doc
#define SysHashSTR_doc
#define HandleDeleteByNetHdl_doc
#define SysHashI32_doc
#define OT_SETUP_hdl
#define ToString_doc
#define ToName_doc
#define LogC_doc
#define Log_doc
#define OT_SETUP_hdl_destr
#define HandleExists_doc
#define IsNull_doc
#define LogHEX_doc
#define GetNull_doc
#define LogLong_doc
#define Next_doc
#define HandleResolve_doc
#define DbgM_doc
#define Prev_doc
#define MkDbgDumpTmpl(...)
#define VER
#define ToError_doc
#define OT_CLASS
#define OT_SETUP_hdl_static
#define DeleteCallbackCleanup_doc
#define DbgO_doc
#define HandleGet_doc
static enum MkErrorE TclDbgDump(OT_Prefix_ARGS MK_OBJ const obj, MK_STRN const message, MK_STRN const callfunc)
#define ToNameOfType_doc
#define HandleDelete_doc
#define OT_SETUP_hdl__null_allow
#define MkObjectToNameOfClassTmpl(hdl)
static __thread MK_TYP MkObjectCTT
#define DbgDump_doc
#define MkObjectErrorCatchTmpl(...)
#define Delete_doc
#define DeleteCallbackSetup_doc
#define HandleGetOr0_doc
#define DbgL_doc
#define Dispose_doc
#define ErrorCatch_doc
#define ClassInit
#define DbgSTACK_doc
#define HandleGetOfType_doc
#define RefGet_doc
#define ToNameOfClass_doc
#define MK_ERROR_FORMAT
#define MK_NULL_YES
flag, allow NULL
MkErrorE
collection for the different error-codes …
@ MK_OK
(persistent) everything is OK.
int32_t MK_NUM
array size data-type ('num' items in array …
MK_PTRB * MK_PTR
generic pointer data-type
const MK_STRB * MK_STRN
constant string pointer data-type
MK_PTRB const * MK_EXP
exception object pointer
int32_t MK_HDL
4 byte int handle data-type
signed int MK_I32
4 byte integer data-type
int MK_DBG
debug-level data-type …
#define MkObjectHandleResolve(...)
#define MkObjectHandleGet(...)
static MK_HDL MkObjectHandleGetOfType(MK_OBJ const obj)
Export-Slot - returns typeHdl of the obj .
static MK_OBJ MkObjectGetNull(void)
Null-Slot - return a MkObjectC typed NULL instance …
#define MkObjectHandleDelete(...)
static MK_OBJ MkObjectPrev(MK_OBJ const obj)
get previous instance from linked-list of MkObjectS type
static MK_OBJ MkObjectNext(MK_OBJ const obj)
get next instance from linked-list of MkObjectS type
#define MkObjectInstances()
MK_HDL MkObjectHandleGetOr0(MK_OBJ const obj)
return export-hdl or 0 in not created…
bool MkObjectHandleExists(MK_OBJ const obj)
check if obj has already a handle defined…
#define MkObjectHandleDeleteByNetHdl(...)
#define MkDbgM(...)
#define MkDbgLogC(...)
#define MkDbgL(...)
#define MkDbgO(...)
#define MkDbgSTACK(...)
#define MkObjectLogLong(...)
#define MkObjectLogShort(...)
#define MkObjectLog(...)
#define MkLogC(...)
#define MkLogV(...)
#define MkLogHEX(...)
#define MkObjectLogType(...)
static bool MkObjectIsNull(MK_OBJ const obj)
ckeck if the object is "MK_NULL"
#define MkObjectToName(...)
#define MkObjectToString(...)
#define MkObjectToError(...)
#define MkObjectToNameOfType(...)
static MK_I32 MkRefGet(MK_OBJ const obj)
get the reference-count
enum MkErrorE MkSysKill(MK_OBJN fmtobj, MK_I32 pid, MK_I32 signal)
kill syscall with tclmkkernel error plugin
enum MkErrorE MkSysGetPid(MK_OBJN fmtobj, MK_I32 *pid_out)
getpid syscall with tclmkkernel error plugin
MK_STRN MkSysHashSTR(MK_STRN key, MK_NUM length)
compute the HASH from a string …
static bool MkSysStringIsNULL(MK_STRN str)
test if string is NULL or EMPTY …
MK_I32 MkSysHashI32(MK_STRN key, MK_NUM length)
same as MkSysHashSTR but return MK_I32 …
#define MkObjectDeleteCallbackCleanup(...)
#define MkObjectDeleteCallbackSetup(...)
enum MkErrorE(* MkObjectDeleteCallF)(MK_RT mkrt, MK_OBJN const obj, MK_STRN const typeName, MK_HDL const typeHdl, MK_HDL const objHdl, MK_CBP const __data__)
static callback to delete an obj …
static MK_I32 MkRuntimeDebugGet(void)
get the MkRuntimeS::debug value …
#define MkRuntimeLogBufferPush()
#define MkRuntimeLogBufferPop()
#define MkThreadLocal
#define MK_RT_CALL
#define MK_RT_ARGS
#define MK_RT_REF
#define OT_CHECK_CALLABLE(val)
#define OT_CLEANUP_CALLABLE(val)
#define OT_SETUP_CALLABLE(val)
#define OT_CHECK_OBJN(val, nullB)
#define OT_CHECK_EXP(val)
binary data default format …
The data-type to store and handle the error-condition …
object header …
MkTypeS - class known as typ or type is used as class-base for a Managed-Object-Technology (MOT) type...