theKernel 10.0
Loading...
Searching...
No Matches
LibMkKernel_rb.c
Go to the documentation of this file.
1
9/* LABEL-NO */
10
12#include "misc_check_rb.h"
13
14/* LABEL-END */
15
16#include <ruby/defines.h>
17
18VALUE MK(MkKernel) = 0;
19VALUE MK(globalRef) = 0;
20VALUE MK(cEnum) = 0;
21VALUE MK(InitError) = 0;
22VALUE MK(NULL_STR) = 0;
23
24ID NS(id_caller);
25ID NS(id_caller_locations);
26ID NS(id_label);
27ID NS(id_path);
28ID NS(id_bn);
29ID NS(id_lineno);
30
31ID NS(id_arity);
32ID NS(id_clone);
33ID NS(id_unbind);
34ID NS(id_bind);
35ID NS(id_receiver);
36ID NS(id_enum_attr);
37ID NS(id_to_i);
38ID NS(id_full_message);
39
40// BEGIN-enumD - created by 'rb_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
41
42VALUE MK(MkErrorE);
43VALUE MK(MkIdSE);
45VALUE MK(MkTypeE);
46
47// END-enumD - created by 'rb_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
48
49#define MkSetupTmpl() MkSetup()
50#define MkCleanupTmpl()
51
52// #######################################################################
53// -----------------------------------------------------------------------
54// documentation order
55
69
80
92
104
114
126
134
146
156
162
163// BEGIN-DOC - created by 'rb_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
164
165// doc-key: MkKernel,EnumFunc,sco,func
166#define ErrorE_FromInt_doc "MkErrorE MkKernel.ErrorE_FromInt(value:int32)"
167#define IdSE_FromInt_doc "MkIdSE MkKernel.IdSE_FromInt(value:int32)"
168#define TimeoutE_FromInt_doc "MkTimeoutE MkKernel.TimeoutE_FromInt(value:int32)"
169#define TypeE_FromInt_doc "MkTypeE MkKernel.TypeE_FromInt(value:int32)"
170
171// doc-key: MkKernel,EnumFunc,sm_,func
172#define ErrorE_ToInt_doc "int32 MkKernel.ErrorE_ToInt(value:MkErrorE)"
173#define ErrorE_ToString_doc "string MkKernel.ErrorE_ToString(value:MkErrorE)"
174#define IdSE_ToInt_doc "int32 MkKernel.IdSE_ToInt(value:MkIdSE)"
175#define IdSE_ToString_doc "string MkKernel.IdSE_ToString(value:MkIdSE)"
176#define TimeoutE_ToInt_doc "int32 MkKernel.TimeoutE_ToInt(value:MkTimeoutE)"
177#define TimeoutE_ToString_doc "string MkKernel.TimeoutE_ToString(value:MkTimeoutE)"
178#define TypeE_ToInt_doc "int32 MkKernel.TypeE_ToInt(value:MkTypeE)"
179#define TypeE_ToString_doc "string MkKernel.TypeE_ToString(value:MkTypeE)"
180
181// doc-key: MkKernel,Setup,sm_,func
182#define Cleanup_doc "MkKernel.Cleanup()"
183#define Setup_doc "MkKernel.Setup()"
184
185// END-DOC - created by 'rb_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
186
187#define OT_SETUP_hdl_static MK_RT_UNUSED MkRtSetup_NULL; \
188 __attribute__((unused)) MK_ERR hdl = &MkERROR;
189
190/*****************************************************************************/
191/* */
192/* calling proc information */
193/* */
194/*****************************************************************************/
195
196void NS(_printObj) (MK_RT_ARGS VALUE v, MK_STRN caller) {
197 MkLogV_4M(MK_ERROR_PRINT,caller,0, "printObj: value<%p> class<%s> %s\n", \
198 (void*) v, OT_LNG_OBJ_CLASSNAME(v), VAL2STRN(rb_inspect(v)));
199}
200
201void NS(printLNG_STACK)(MK_RT_ARGS MK_MNG mng) {
202 VALUE arg;
203 VALUE ary = rb_funcall(rb_mKernel, NS(id_caller), 0,0);
204 while ((arg = rb_ary_shift(ary)) != Qnil) {
205 printXC2(mng, VAL2STRN(arg));
206 }
207}
208
209#define FRAME_init \
210 VALUE frame = 0; \
211 if (frameP == NULL || *frameP == 0) { \
212 VALUE ary = rb_funcall(rb_mKernel, NS(id_caller_locations), 2, INT2FIX(skip), INT2FIX(1)); \
213 frame = rb_ary_entry(ary,0); \
214 if (frameP != NULL) *frameP = frame; \
215 } else { \
216 frame = *frameP; \
217 } \
218
219MK_STRN NS(Get_Call_Proc) (int skip, VALUE* frameP) {
221 VALUE label = rb_funcallv(frame, NS(id_label), 0, NULL);
222 return VAL2STRN(label);
223}
224
225MK_STRN NS(Get_Call_Script) (int skip, VALUE* frameP) {
227 VALUE path = rb_funcallv(frame, NS(id_path), 0, NULL);
228 VALUE base = rb_funcall(rb_cFile, NS(id_bn), 1, path);
229 return VAL2STRN(base);
230}
231
232MK_I32 NS(Get_Call_Line) (int skip, VALUE* frameP) {
234 VALUE line = rb_funcallv(frame, NS(id_lineno), 0, NULL);
235 return VAL2I32(line);
236}
237
238void NS(Get_Call_All) (int skip, MK_STRN *proc, MK_STRN *file, MK_I32 *line) {
239 VALUE ary = rb_funcall(rb_mKernel, NS(id_caller_locations), 2, INT2FIX(skip), INT2FIX(1));
240 VALUE a0 = rb_ary_entry(ary,0);
241 if (proc) {
242 *proc = VAL2STRN(rb_funcallv(a0, NS(id_label), 0, NULL));
243 }
244 if (file) {
245 VALUE path = rb_funcall(a0, NS(id_path), 0);
246 *file = VAL2STRN(rb_funcall(rb_cFile, NS(id_bn), 1, path));
247 }
248 if (line) {
249 *line = VAL2I32(rb_funcallv(a0, NS(id_lineno), 0, NULL));
250 }
251}
252
253void NS(Get_Call_Stack) (MK_RT_ARGS MK_ERR const err, int level) {
254 VALUE ary = rb_funcall(rb_mKernel, NS(id_caller_locations), 2, INT2FIX(level), INT2FIX(1));
255 VALUE a0 = rb_ary_entry(ary,0);
256 VALUE path = rb_funcallv(a0, NS(id_path), 0, NULL);
257
259 VAL2STRN(rb_funcallv(a0, NS(id_label), 0, NULL)),
260 VAL2STRN(rb_funcall(rb_cFile, NS(id_bn), 1, path)),
261 VAL2I32(rb_funcallv(a0, NS(id_lineno), 0, NULL))
262 );
263}
264
265/*****************************************************************************/
266/* */
267/* Obj_As */
268/* */
269/*****************************************************************************/
270
272
274 if ((*skipP) >= objc) {
275 return WrongNumArgs(hdl,(*skipP), objc, -999, +999, arg);
276 }
277 VALUE obj = objv[(*skipP)++];
278 VALUE strO = rb_obj_as_string(obj);
279 long len = RSTRING_LEN(strO);
280 MK_STRN ret = RSTRING_PTR(strO);
281 // mark=MK_NULL
282 if (MK_NULL_STR_CHECK(ret,len)) {
283 ret = NULL;
284 }
285 *retP = ret;
286 return MK_OK;
287}
288
289enum MkErrorE NS(Obj_AsSTR_COPY) (OT_Check_ARGS, MK_STR ret, size_t size) {
290 if ((*skipP) >= objc) {
291 return WrongNumArgs(hdl,(*skipP), objc, -999, +999, arg);
292 }
293 VALUE obj = objv[(*skipP)++];
294 strncpy(ret,VAL2STRN(obj),size);
295 return MK_OK;
296}
297
298/*****************************************************************************/
299/* */
300/* check */
301/* */
302/*****************************************************************************/
303
304static enum MkErrorE MK(LngListToMkBufferListS) (
306 VALUE argsO,
307 MK_BFL *argsP
308) {
309 MK_BFL args = *argsP;
310 //MK_BFL orig = args;
311 if (!OT_LNG_ARRAY_IS(argsO)) {
312 return MK_OK;
313 } else {
314 *argsP = NULL;
315 long len = rb_array_len(argsO);
316 if (args == NULL) args = MkBufferListCreate (rb_long2int(len));
317 for (long i=0; i<len; i++) {
318 MkBufferListAppendSTR(args, VAL2STRN(rb_ary_entry(argsO,i)));
319 }
320 }
321 *argsP = args;
322 return MK_OK;
323}
324
325enum MkErrorE MK(LngTupleToMkBufferListS) (
327 int *origskip,
328 MK_BFL *argsP
329) {
330 MK_BFL args = *argsP;
331 int skip = origskip==NULL ? 0 : *origskip;
332 if (objv == NULL) {
333 return MK_OK;
334 } else {
335 *argsP = NULL;
336 if (args == NULL) args = MkBufferListCreate (objc-skip);
337 for (; skip < objc; skip++) {
338 MkBufferListAppendSTR(args, VAL2STRN(objv[skip]));
339 }
340 }
341 *origskip = skip;
342 *argsP = args;
343 return MK_OK;
344}
345
347
348/*****************************************************************************/
349/* */
350/* private */
351/* */
352/*****************************************************************************/
353
354// BEGIN-MkKernel - created by 'rb_MqC.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
355
359
360// doc-key: MkKernel,MkKernel-Enum,sco
361
363static OT_ProcRet NS(MkKernel_ErrorE_FromInt) (OtClass_ARGS) {
366 MK_I32 value = 0;
369 enum MkErrorE value_out;
371 OT_retObj_SET(OT_NEW_Mk_enum_OBJ(ErrorE,value_out));
372 end: MK_UNUSED /* LONG JUMP on error */
374}
375
377static OT_ProcRet NS(MkKernel_IdSE_FromInt) (OtClass_ARGS) {
380 MK_I32 value = 0;
383 enum MkIdSE value_out;
384 MkErrorC_Check(MK_ERROR_FORMAT,MkIdSE_FromInt (value, &value_out));
385 OT_retObj_SET(OT_NEW_Mk_enum_OBJ(IdSE,value_out));
386 end: MK_UNUSED /* LONG JUMP on error */
388}
389
391static OT_ProcRet NS(MkKernel_TimeoutE_FromInt) (OtClass_ARGS) {
394 MK_I32 value = 0;
397 enum MkTimeoutE value_out;
399 OT_retObj_SET(OT_NEW_Mk_enum_OBJ(TimeoutE,value_out));
400 end: MK_UNUSED /* LONG JUMP on error */
402}
403
405static OT_ProcRet NS(MkKernel_TypeE_FromInt) (OtClass_ARGS) {
408 MK_I32 value = 0;
411 enum MkTypeE value_out;
413 OT_retObj_SET(OT_NEW_Mk_enum_OBJ(TypeE,value_out));
414 end: MK_UNUSED /* LONG JUMP on error */
416}
417
418// doc-key: MkKernel,MkKernel-Enum,sm_
419
421static OT_ProcRet NS(MkKernel_ErrorE_ToInt) (OtClass_ARGS) {
424 enum MkErrorE value = 0;
428 end: MK_UNUSED /* LONG JUMP on error */
430}
431
433static OT_ProcRet NS(MkKernel_ErrorE_ToString) (OtClass_ARGS) {
436 enum MkErrorE value = 0;
440 end: MK_UNUSED /* LONG JUMP on error */
442}
443
445static OT_ProcRet NS(MkKernel_IdSE_ToInt) (OtClass_ARGS) {
448 enum MkIdSE value = 0;
452 end: MK_UNUSED /* LONG JUMP on error */
454}
455
457static OT_ProcRet NS(MkKernel_IdSE_ToString) (OtClass_ARGS) {
460 enum MkIdSE value = 0;
464 end: MK_UNUSED /* LONG JUMP on error */
466}
467
469static OT_ProcRet NS(MkKernel_TimeoutE_ToInt) (OtClass_ARGS) {
472 enum MkTimeoutE value = 0;
476 end: MK_UNUSED /* LONG JUMP on error */
478}
479
481static OT_ProcRet NS(MkKernel_TimeoutE_ToString) (OtClass_ARGS) {
484 enum MkTimeoutE value = 0;
488 end: MK_UNUSED /* LONG JUMP on error */
490}
491
493static OT_ProcRet NS(MkKernel_TypeE_ToInt) (OtClass_ARGS) {
496 enum MkTypeE value = 0;
500 end: MK_UNUSED /* LONG JUMP on error */
502}
503
505static OT_ProcRet NS(MkKernel_TypeE_ToString) (OtClass_ARGS) {
508 enum MkTypeE value = 0;
512 end: MK_UNUSED /* LONG JUMP on error */
514}
515
517// MkKernel_Enum_RB_API
518
522
523// doc-key: MkKernel,MkKernel-Setup-libmkkernel,sm_
524
526static OT_ProcRet NS(MkKernel_Cleanup) (OtClass_ARGS) {
530 MkCleanupTmpl ();
532 end: MK_UNUSED /* LONG JUMP on error */
534}
535
537static OT_ProcRet NS(MkKernel_Setup) (OtClass_ARGS) {
541 MkSetupTmpl ();
543 end: MK_UNUSED /* LONG JUMP on error */
545}
546
548// MkKernel_Setup_libmkkernel_RB_API
549
550// END-MkKernel - created by 'rb_MqC.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
551
552// **************************************************************************
553
554static OT_ProcRet MK(RubyMsgque_M) (OtClass_ARGS) {
556 OT_SETUP_VARARGS(1,1,"M(repeat*10)")
557 VALUE strO = 0;
562 strO = rb_funcall(rb_obj_as_string(strO), rb_intern("*"), 1, INT2VAL(17));
563 MkLogV_4M(MK_ERROR_PRINT,proc,0, "%s [%s:%d]\n", VAL2STRN(strO), file, line);
565}
566
567static OT_ProcRet MK(RubyMsgque_printObj) (OtClass_ARGS) {
569 OT_SETUP_VARARGS(1,2,"printObj object ?caller?")
570 VALUE obj = 0;
572 MK_STRN caller = NULL;
576 if (caller == NULL) caller = OT_GET_CALL_PROC;
577 MK(_printObj)(MK_RT_CALL obj,caller);
579}
580
581/*****************************************************************************/
582/* */
583/* public */
584/* */
585/*****************************************************************************/
586
587void MK(MkKernel_Init) (MK_RT_ARGS_ONLY) {
588 MK(MkKernel) = rb_define_module("MkKernel");
589
590 OT_METH_S ( MkKernel, M, RubyMsgque_M )
591 OT_METH_O ( MkKernel, M, RubyMsgque_M )
592
593 OT_METH_S ( MkKernel, printObj, RubyMsgque_printObj )
594 OT_METH_O ( MkKernel, printObj, RubyMsgque_printObj )
595
596// BEGIN-CLASS - created by 'rb_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
597
598// doc-key: MkKernel,EnumFunc,sco
599OT_METH_O ( MkKernel, ErrorE_FromInt, MkKernel_ErrorE_FromInt )
600OT_METH_S ( MkKernel, ErrorE_FromInt, MkKernel_ErrorE_FromInt )
601OT_METH_O ( MkKernel, IdSE_FromInt, MkKernel_IdSE_FromInt )
602OT_METH_S ( MkKernel, IdSE_FromInt, MkKernel_IdSE_FromInt )
603OT_METH_O ( MkKernel, TimeoutE_FromInt, MkKernel_TimeoutE_FromInt )
604OT_METH_S ( MkKernel, TimeoutE_FromInt, MkKernel_TimeoutE_FromInt )
605OT_METH_O ( MkKernel, TypeE_FromInt, MkKernel_TypeE_FromInt )
606OT_METH_S ( MkKernel, TypeE_FromInt, MkKernel_TypeE_FromInt )
607
608// doc-key: MkKernel,EnumFunc,sm_
609OT_METH_O ( MkKernel, ErrorE_ToInt, MkKernel_ErrorE_ToInt )
610OT_METH_S ( MkKernel, ErrorE_ToInt, MkKernel_ErrorE_ToInt )
611OT_METH_O ( MkKernel, ErrorE_ToString, MkKernel_ErrorE_ToString )
612OT_METH_S ( MkKernel, ErrorE_ToString, MkKernel_ErrorE_ToString )
613OT_METH_O ( MkKernel, IdSE_ToInt, MkKernel_IdSE_ToInt )
614OT_METH_S ( MkKernel, IdSE_ToInt, MkKernel_IdSE_ToInt )
615OT_METH_O ( MkKernel, IdSE_ToString, MkKernel_IdSE_ToString )
616OT_METH_S ( MkKernel, IdSE_ToString, MkKernel_IdSE_ToString )
617OT_METH_O ( MkKernel, TimeoutE_ToInt, MkKernel_TimeoutE_ToInt )
618OT_METH_S ( MkKernel, TimeoutE_ToInt, MkKernel_TimeoutE_ToInt )
619OT_METH_O ( MkKernel, TimeoutE_ToString, MkKernel_TimeoutE_ToString )
620OT_METH_S ( MkKernel, TimeoutE_ToString, MkKernel_TimeoutE_ToString )
621OT_METH_O ( MkKernel, TypeE_ToInt, MkKernel_TypeE_ToInt )
622OT_METH_S ( MkKernel, TypeE_ToInt, MkKernel_TypeE_ToInt )
623OT_METH_O ( MkKernel, TypeE_ToString, MkKernel_TypeE_ToString )
624OT_METH_S ( MkKernel, TypeE_ToString, MkKernel_TypeE_ToString )
625
626// doc-key: MkKernel,Setup,sm_
627OT_METH_O ( MkKernel, Cleanup, MkKernel_Cleanup )
628OT_METH_S ( MkKernel, Cleanup, MkKernel_Cleanup )
629OT_METH_O ( MkKernel, Setup, MkKernel_Setup )
630OT_METH_S ( MkKernel, Setup, MkKernel_Setup )
631
632// END-CLASS - created by 'rb_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
633
634// BEGIN-OBJ - created by 'rb_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
635
636// → no data
637
638// END-OBJ - created by 'rb_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
639
640}
641
642/*****************************************************************************/
643/* */
644/* sys */
645/* */
646/*****************************************************************************/
647
648/*
649static rb_pid_t SysFork (
650)
651{
652 rb_pid_t pid = rb_fork(0, 0, 0, Qnil);
653 if (pid == 0) rb_thread_atfork();
654 return pid;
655}
656
657static enum MkErrorE SysServerSpawn (
658 struct MkS * const mqctx,
659 char * * argv,
660 MK_STRN name,
661 struct MkIdS * idP
662)
663{
664 rb_pid_t pid;
665 VALUE args = rb_ary_new();
666 MK_BUF tmp = mqctx->temp;
667
668 MkBufferReset(tmp);
669
670 // spawn setup !before! a spawn is created
671 if (mqctx->setup.fSpawnInit) (*mqctx->setup.fSpawnInit)(mqctx);
672
673 // fill the args
674 for (;*argv!=NULL; argv++) {
675printC(*argv)
676 rb_ary_push(args, STRN2VAL(*argv));
677 }
678
679 // use ruby spawn
680 pid = rb_spawn_err(RARRAY_LEN(args), RARRAY_PTR(args), tmp->cur.C, tmp->size);
681
682 // check for error
683 if (pid == -1) {
684 return MkErrorSetC (tmp->cur.C, mqctx, name, 1);
685 }
686
687 // return ok
688 (*idP).val = pid;
689 (*idP).type = MK_ID_PROCESS;
690 return MK_OK;
691}
692*/
693
694/*
695static VALUE
696sSysServerThreadInit(MK_PTR data)
697{
698 MkSysServerThreadMain((struct MkSysServerThreadMainS*)data);
699 //return rb_last_status_get();
700 return Qnil;
701}
702
703static VALUE SysServerThread2 (VALUE data) {
704 VALUE ret = rb_thread_create(sSysServerThreadInit, VAL2PTR(data));
705 // make thread_id persistent
706 INCR_REG(ret);
707 return ret;
708}
709
710static enum MkErrorE SysServerThread (
711 struct MkS * const mqctx,
712 struct MkFactoryS factory,
713 struct MkBufferListS ** argvP,
714 struct MkBufferListS ** alfaP,
715 MK_STRN name,
716 int state,
717 struct MkIdS * idP
718)
719{
720 VALUE ret;
721
722 // fill thread data
723 struct MkSysServerThreadMainS * argP = (struct MkSysServerThreadMainS *) MkSysMalloc(MK_ERROR_PANIC,sizeof(*argP));
724 argP->factory = factory;
725 argP->argv = *argvP;
726 argP->alfa = *alfaP;
727 argP->tmpl = mqctx;
728
729 // pointers are now owned by SysServerThread
730 *argvP = NULL;
731 *alfaP = NULL;
732
733 // after a "thread" no "fork" is possible
734 MkConfigSetIgnoreFork (mqctx, MK_YES);
735
736 // start thread
737 NIL_Check(ret = rb_protect(SysServerThread2, PTR2VAL(argP), NULL));
738
739 // save tid
740 (*idP).val = ret;
741 (*idP).type = MK_ID_THREAD;
742
743 return MK_OK;
744
745error:
746 MkBufferListDelete (&argP->argv);
747 MkBufferListDelete (&argP->alfa);
748 MkSysFree (argP);
749 return MK_ERROR;
750}
751*/
752
753// PROBLEM: After RUBY 'rb_exit' the code is NOT stoped, insted an Exit-Exception is raised
754// and code jump to the next 'rescue' etc.
755// This create a lot of problems in a server on recursion:
756// 1. after 'MqExit→rb_exit' the 'context' is deleted but likely used in 'rescue'.
757// Result: A "'MqContextC' hdl is NULL (RuntimeError)" is raised
758// 2. after FORK→MqExit→rb_Exit the code continue to work with code from the
759// !! FORK-CLIENT !!, still available on the FORK-server. (everything is forked...)
760// Result: unpredictable, perhaps unbalanced RefCountProtection with MK_RT_REF.cid etc
761// 3. etc...
762
763#define USE_SysExit
764
765#ifdef USE_SysExit
766
767static VALUE MK(SysExit2)(VALUE dummy) {
768 VALUE thread = rb_thread_current();
769 DECR_REG(thread);
770 rb_thread_kill(thread);
771 return Qnil;
772}
773static int MK(SysExit) (
775 int isThread,
776 int num
777) {
778 if (isThread) {
779 rb_protect(MK(SysExit2),Qnil,NULL);
780 } else {
781 if (MkRefCidN_NULL() == 0) {
782 // 0 = toplevel
783 rb_exit(num);
784 }
785 }
786 exit(num);
787 return num;
788}
789#endif
790
791/*****************************************************************************/
792/* */
793/* init */
794/* */
795/*****************************************************************************/
796
798{
799
800 // Register system
801#ifdef HAVE_FORK
802// MkInitSysAPI(MK(fork),NULL);
803#endif
804
805 // Initialize libmkkernel
806 MkSetup();
808
809 // Initialize components
810
811 MK(globalRef) = rb_ary_new();
812 rb_gc_register_mark_object(MK(globalRef));
813
814 MK(MkKernel_Init) (MK_RT_CALL_ONLY) ;
815 MK(MkObjectC_Init) (MK_RT_CALL_ONLY) ;
816 MK(MkBufferC_Init) (MK_RT_CALL_ONLY) ;
817 MK(MkBufferStreamC_Init) (MK_RT_CALL_ONLY) ;
818 MK(MkBufferListC_Init) (MK_RT_CALL_ONLY) ;
819 MK(MkLogFileC_Init) (MK_RT_CALL_ONLY) ;
820 MK(MkErrorC_Init) (MK_RT_CALL_ONLY) ;
821 MK(MkExceptionC_Init) (MK_RT_CALL_ONLY) ;
822 MK(MkRuntimeC_Init) (MK_RT_CALL_ONLY) ;
823
824
825 // set global data
826
827 // Get_Call_???
828 NS(id_caller) = rb_intern("caller") ;
829 NS(id_caller_locations) = rb_intern("caller_locations") ;
830 NS(id_label) = rb_intern("label") ;
831 NS(id_path) = rb_intern("path") ;
832 NS(id_bn) = rb_intern("basename") ;
833 NS(id_lineno) = rb_intern("lineno") ;
834
835 // update LAL
836 //MkLal.SysFork = (MkSysForkF) SysFork ;
837
838 //MkLal.SysServerThread = SysServerThread;
839#ifdef USE_SysExit
840 MkLal.MkSysExitCB = MK(SysExit);
841#endif
842 //MkLal.SysWait = SysWait;
843
844 //MkLal.SysSelect = (MkSysSelectF) rb_thread_select;
845 //MkLal.SysSelect = (MkSysSelectF) rb_thread_fd_select;
846
847 /*****************************************************************************/
848 /* */
849 /* enums */
850 /* */
851 /*****************************************************************************/
852
853 NS(cEnum) = rb_eval_string(
854 " \n\
855 class Enum \n\
856 \n\
857 private \n\
858 \n\
859 def self.enum_attr(name, num) \n\
860 name = name.to_s \n\
861 \n\
862 define_method(name + '?') do \n\
863 @attrs & num != 0 \n\
864 end \n\
865 \n\
866 define_method(name + '=') do |set| \n\
867 if set \n\
868 @attrs |= num \n\
869 else \n\
870 @attrs &= ~num \n\
871 end \n\
872 end \n\
873 \n\
874 self.const_set(name,self.new(num)) \n\
875 end \n\
876 \n\
877 public \n\
878 \n\
879 def initialize(attrs = 0) \n\
880 @attrs = attrs \n\
881 end \n\
882 \n\
883 def to_i \n\
884 @attrs \n\
885 end \n\
886 \n\
887 alias_method :to_int, :to_i \n\
888 \n\
889 end \n\
890 Enum \n\
891 "
892 );
893
894 MK(InitError) = rb_define_class_under(MK(MkKernel), "InitError", rb_eStandardError);
895
896 NS(id_enum_attr) = rb_intern("enum_attr");
897
898 // BEGIN-enumF - created by 'rb_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
899
900 MK(MkErrorE) = rb_define_class_under(MK(MkKernel), "MkErrorE", MK(cEnum));
901 rb_funcall(MK(MkErrorE), MK(id_enum_attr), 2, STRN2VAL("OK"), INT2NUM(0));
902 rb_funcall(MK(MkErrorE), MK(id_enum_attr), 2, STRN2VAL("CONTINUE"), INT2NUM(1));
903 rb_funcall(MK(MkErrorE), MK(id_enum_attr), 2, STRN2VAL("ERROR"), INT2NUM(2));
904
905 MK(MkIdSE) = rb_define_class_under(MK(MkKernel), "MkIdSE", MK(cEnum));
906 rb_funcall(MK(MkIdSE), MK(id_enum_attr), 2, STRN2VAL("UNUSED"), INT2NUM(0));
907 rb_funcall(MK(MkIdSE), MK(id_enum_attr), 2, STRN2VAL("PROCESS"), INT2NUM(1));
908 rb_funcall(MK(MkIdSE), MK(id_enum_attr), 2, STRN2VAL("THREAD"), INT2NUM(2));
909
910 MK(MkTimeoutE) = rb_define_class_under(MK(MkKernel), "MkTimeoutE", MK(cEnum));
911 rb_funcall(MK(MkTimeoutE), MK(id_enum_attr), 2, STRN2VAL("INIT"), INT2NUM(900));
912 rb_funcall(MK(MkTimeoutE), MK(id_enum_attr), 2, STRN2VAL("LONG"), INT2NUM(( 900/5 )));
913 rb_funcall(MK(MkTimeoutE), MK(id_enum_attr), 2, STRN2VAL("NORMAL"), INT2NUM(( 900/10 < 1 ? 1 : 900/10 )));
914 rb_funcall(MK(MkTimeoutE), MK(id_enum_attr), 2, STRN2VAL("SHORT"), INT2NUM(( 900/45 < 1 ? 1 : 900/45 )));
915 rb_funcall(MK(MkTimeoutE), MK(id_enum_attr), 2, STRN2VAL("SOCKET"), INT2NUM(( 900/90 < 1 ? 1 : 900/90 )));
916 rb_funcall(MK(MkTimeoutE), MK(id_enum_attr), 2, STRN2VAL("VERYSHORT"), INT2NUM(( 900/180 < 1 ? 1 : 900/180 )));
917 rb_funcall(MK(MkTimeoutE), MK(id_enum_attr), 2, STRN2VAL("DEFAULT"), INT2NUM(-1));
918 rb_funcall(MK(MkTimeoutE), MK(id_enum_attr), 2, STRN2VAL("USER"), INT2NUM(-2));
919 rb_funcall(MK(MkTimeoutE), MK(id_enum_attr), 2, STRN2VAL("MAX"), INT2NUM(-3));
920
921 MK(MkTypeE) = rb_define_class_under(MK(MkKernel), "MkTypeE", MK(cEnum));
922 rb_funcall(MK(MkTypeE), MK(id_enum_attr), 2, STRN2VAL("I8T"), INT2NUM(( ( 1 << 4 ) | ( 1<<0 ) )));
923 rb_funcall(MK(MkTypeE), MK(id_enum_attr), 2, STRN2VAL("BOLT"), INT2NUM(( ( 2 << 4 ) | ( 1<<0 ) )));
924 rb_funcall(MK(MkTypeE), MK(id_enum_attr), 2, STRN2VAL("I16T"), INT2NUM(( ( 3 << 4 ) | ( 1<<1 ) )));
925 rb_funcall(MK(MkTypeE), MK(id_enum_attr), 2, STRN2VAL("I32T"), INT2NUM(( ( 4 << 4 ) | ( 1<<2 ) )));
926 rb_funcall(MK(MkTypeE), MK(id_enum_attr), 2, STRN2VAL("FLTT"), INT2NUM(( ( 5 << 4 ) | ( 1<<2 ) )));
927 rb_funcall(MK(MkTypeE), MK(id_enum_attr), 2, STRN2VAL("I64T"), INT2NUM(( ( 6 << 4 ) | ( 1<<3 ) )));
928 rb_funcall(MK(MkTypeE), MK(id_enum_attr), 2, STRN2VAL("DBLT"), INT2NUM(( ( 7 << 4 ) | ( 1<<3 ) )));
929 rb_funcall(MK(MkTypeE), MK(id_enum_attr), 2, STRN2VAL("BINT"), INT2NUM(( ( 8 << 4 ) )));
930 rb_funcall(MK(MkTypeE), MK(id_enum_attr), 2, STRN2VAL("STRT"), INT2NUM(( ( 9 << 4 ) )));
931 rb_funcall(MK(MkTypeE), MK(id_enum_attr), 2, STRN2VAL("LSTT"), INT2NUM(( ( 10 << 4 ) )));
932
933 // END-enumF - created by 'rb_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
934
935 NS(id_arity) = rb_intern("arity");
936 NS(id_clone) = rb_intern("clone");
937 NS(id_unbind) = rb_intern("unbind");
938 NS(id_bind) = rb_intern("bind");
939 NS(id_receiver) = rb_intern("receiver");
940 NS(id_to_i) = rb_intern("to_i");
941 NS(id_full_message) = rb_intern("full_message");
942
943 MK(NULL_STR) = rb_str_new_cstr(MK_NULL_STR);
944 INCR_REG(MK(NULL_STR));
945}
tag: nhi1-release-250425
#define IdSE_ToString_doc
#define TimeoutE_FromInt_doc
MK_RB_EXTERN void LibMkKernel()
#define MkCleanupTmpl()
#define FRAME_init
#define IdSE_ToInt_doc
#define ErrorE_ToString_doc
#define OT_SETUP_hdl_static
#define ErrorE_FromInt_doc
#define ErrorE_ToInt_doc
#define TypeE_ToInt_doc
#define MkSetupTmpl()
#define TypeE_FromInt_doc
#define TimeoutE_ToString_doc
#define Cleanup_doc
#define Setup_doc
#define IdSE_FromInt_doc
#define TimeoutE_ToInt_doc
#define TypeE_ToString_doc
#define OT_LNG_ARRAY_IS(o)
#define MK(n)
#define OT_SETUP_VARARGS(min, max, d)
#define OT_SETUP_NOARG(d)
#define OT_SETUP_ONEARG(d)
#define OT_NEW_Mk_enum_OBJ(typ, i)
#define SETUP_ARGS
#define OT_CHECK_NI4(val)
#define OT_METH_S(c, s, f)
#define OT_LNG_OBJ_CLASSNAME(obj)
#define OT_CHECK_REQUIRED(val)
#define OT_retObj_SET_None
#define OT_retObj_SET_I32(nat)
#define DECR_REG(val)
#define OT_METH_O(c, s, f)
#define OT_Check_ARGS
#define INT2VAL(nat)
#define NS(n)
#define VAL2STRN(val)
#define OT_retObj_RETURN
#define OT_GET_CALL_PROC
#define OT_GET_CALL_ALL
#define VAL2I32(val)
#define OT_retObj_SET_STR(nat)
#define MK_RB_EXTERN
static library
#define OT_CHECK_OPTIONAL(val)
#define INCR_REG(val)
#define OT_retObj_SET(val)
#define OT_CHECK_NOARGS
#define MkErrorC_Check(mng, PROC)
#define OT_ProcRet
#define OT_Prefix_ARGS
#define OtClass_ARGS
#define STRN2VAL(nat)
#define OT_CHECK_STRN(val)
#define MkBufferListAppendSTR(...)
#define MkBufferListCreate(...)
#define MkErrorStackFormat(...)
#define MK_ERROR_PRINT
#define MK_ERROR_FORMAT
#define MK_NULL_STR
the string "MK_NULL" value as MK_NULL_STR …
#define MK_UNUSED
mark unnused variables and functions
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 …
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 …
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 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 …
MkTypeE
basic data-types supported by Programming-Language-Micro-Kernel (PLMK) …
MK_STRN MkErrorE_ToString(enum MkErrorE value)
return the MkErrorE as string …
@ MK_OK
(persistent) everything is OK.
void MkSetup(void)
setup rbmkkernel internal memory …
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 MkLogV_4M(x, callfunc, debug, printfmt,...)
#define MkRefCidN_NULL()
MkIdSE
signal type of the MkIdS data val …
struct MkLalS MkLal
Language Abstraction Layer in duty.
#define MK_RT_CALL
#define MK_RT_CALL_ONLY
#define MK_RT_ARGS
#define MkRtSetup_NULL
#define MK_RT_ARGS_ONLY
tag: nhi1-release-250425
#define WrongNumArgs(...)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsSTRN(OT_Check_ARGS, MK_STRN *)
tag: nhi1-release-250425
#define OT_CHECK_ENUM(ename, val)
#define OT_CHECK_LNG_T(val)
The CLASS used to store a list of MkBufferS items into a flat array…
The data-type to store and handle the error-condition …
MkSysExitF MkSysExitCB