theSq3Lite 10.0
Loading...
Searching...
No Matches
Sq3Call_atl.c
Go to the documentation of this file.
1
9/* LABEL-NO */
10
11#include "LibSq3Lite_atl.h"
12
13
14#if 0
15 #define dbgMsg(fmt,...) printV(fmt,__VA_ARGS__)
16 #define dbgObj(obj) printLngObj(obj)
17#else
18 #define dbgMsg(fmt,...)
19 #define dbgObj(obj)
20#endif
21
22
23/*
24[LiteExecCall signature]
25 callback-args := vals:List[in] cols:List[in]
26 [static] proc callback { callback-args ?additional-args...? } ...
27 Sq3LiteC::LiteExec $liteNs callback
28 [instance] myooX::ClassN ::XXX {
29 proc callback { xxxNs callback-args ?additional-args...? } ...
30 }
31 Sq3LiteCC::LiteExec $liteNs [list callback $xxxNs]
32 [class] myooX::ClassN ::YYY {
33 proc callback { callback-args ?additional-args...? } ...
34 }
35 Sq3LiteC::LiteExec $liteNs ::YYY::callback
36[LiteExecCall signature]
37*/
38
39// #define Sq3Fupu_Sq3LiteExec_callback_call_args MK_CBP callV1, MK_I32 num, MK_STR *vals, MK_STR *cols
41{
43
44 // 1. setup environment
45 struct MkCallS * call = callV1 ;
46 assert(call->signature == MkCallS_SIG);
47
48 OT_OBJ_T valsO=NULL;
49 OT_OBJ_T colsO=NULL;
50 MK_RT mkrt=call->mkrt;
51 assert(mkrt != NULL);
52
53 // 2. prolog
54 CallProlog(call->hdl);
55
56 // 3. setup args
57 valsO = Tcl_NewObj();
58 for (int i=0; i<num; i++) {
59 check_LNG(Tcl_ListObjAppendElement(interp,valsO,Tcl_NewStringObj(vals[i],-1))) goto error;
60 }
61 colsO = Tcl_NewObj();
62 for (int i=0; i<num; i++) {
63 check_LNG(Tcl_ListObjAppendElement(interp,colsO,Tcl_NewStringObj(cols[i],-1))) goto error;
64 }
65 objv[objc++] = valsO;
66 objv[objc++] = colsO;
67
68 // 4. setup user args
69 if (call->args) MK(ProcResolveAppendArgs)(call,&objc,objv);
70
71 // 5. call the callback
72 int ret = MK(EvalObjv) (interp, objc, objv, 0); /* "MK(EvalObjv)" IS required !! */
73 if (ret != TCL_OK) goto error;
74
75 Tcl_ResetResult(interp);
76 return 0;
77
78error:
80error_mq:
82 return 1;
83}
84
85// *********************************************************************************
86
87/*
88[LiteExecV2Call signature]
89 callback-args := vals:MkBufferList[in] cols:MkBufferList[in]
90 [static] proc callback { callback-args ?additional-args...? } ...
91 Sq3LiteC::ExecV2 $liteNs callback
92 [instance] myooX::ClassN ::XXX {
93 proc callback { xxxNs callback-args ?additional-args...? } ...
94 }
95 Sq3LiteC::ExecV2 $liteNs [list callback $xxxNs]
96 [class] myooX::ClassN ::YYY {
97 proc callback { callback-args ?additional-args...? } ...
98 }
99 Sq3LiteC::ExecV2 $liteNs ::YYY::callback
100[LiteExecV2Call signature]
101*/
102
103// #define Sq3LiteExecV2CB_ret enum MkErrorE
104// #define Sq3LiteExecV2CB_args MK_RT_ARGS MK_CBP callV2, MK_BFL vals, MK_BFL cols
106{
108
109 // 1. setup environment
110 struct MkCallS * call = callV2 ;
111 assert(call->signature == MkCallS_SIG);
112
113 // 2. prolog
114 CallProlog(call->hdl);
115
116 // 3. setup args
117 objv[objc++] = OT_TMP_BFL_OBJ(vals);
118 objv[objc++] = OT_TMP_BFL_OBJ(cols);
119
120 // 4. setup user args
121 if (call->args) MK(ProcResolveAppendArgs)(call,&objc,objv);
122
123 // 5. call the callback
124 int ret = Tcl_EvalObjv (interp, objc, objv, 0); /* "MK(EvalObjv)" IS NOT required !! */
125 if (ret != TCL_OK) goto error;
126
127 Tcl_ResetResult(interp);
128 return 0;
129
130error:
132error_mq:
134 return 1;
135}
#define CallProlog(m)
#define MK(n)
#define MkCallS_SIG
#define check_LNG(code)
#define OT_ERROR_LNG_2_META(m)
#define OT_TMP_BFL_OBJ(nat)
MOX_OBJ_T OT_OBJ_T
tag: nhi1-release-250425
#define NS(n)
#define MkErrorStack_0E()
#define Sq3Fupu_Sq3LiteExecV2CB_callback_call_check
#define Sq3LiteExecV2CB_ret
#define Sq3Fupu_Sq3LiteExec_callback_call_check
#define Sq3Fupu_Sq3LiteExec_callback_call_args
#define Sq3Fupu_Sq3LiteExec_callback_call_ret
#define Sq3LiteExecV2CB_args
OT_OBJ_T args
MK_SIG signature