00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00036 #include <scol.h>
00037 #include "Bloc.h"
00038
00039 HWND HScol = NULL;
00040
00042 cbmachine ww;
00043
00045 int OBJBLOCSCOL;
00046
00048 int SCOL_BLOC_NEW_DATA_CB=0;
00049
00051 int BLOC_NEW_DATA_CB;
00052
00053
00064
00065 typedef int BlocObj;
00066
00067
00077 int _GETblocValue(mmachine m)
00078 {
00079 #ifdef _SCOL_DEBUG_
00080 MMechostr(MSKDEBUG,"_GetWiiExtensionType\n");
00081 #endif
00082
00083 int blocTable = MTOP( MMget(m,0) ) ;
00084 if ( blocTable == NIL ) { MMset(m,0,NIL) ; return 0 ; }
00085
00086
00087 Bloc* bloc = (Bloc*)MMfetch(m, blocTable, 0) ;
00088 if( !bloc ) { MMset(m,0,NIL) ; return 0 ; }
00089
00090
00091 MMset(m,0,ITOM(bloc->getValue()));
00092
00093 #ifdef _SCOL_DEBUG_
00094 MMechostr(MSKDEBUG,"ok\n");
00095 #endif
00096
00097 return 0;
00098 }
00099
00100
00111 int _SETblocValue(mmachine m)
00112 {
00113 #ifdef _SCOL_DEBUG_
00114 MMechostr(MSKDEBUG,"_SETblocValue\n");
00115 #endif
00116
00117 int value = MTOI( MMpull(m) ) ;
00118
00119
00120 int blocTable = MTOP( MMget(m,0) ) ;
00121 if ( blocTable == NIL ) { MMset(m,0,-1) ; return 0 ; }
00122
00123
00124 Bloc* bloc = (Bloc*)MMfetch(m, blocTable, 0) ;
00125
00126 bloc->setValue(value);
00127
00128 MMset(m,0,0);
00129
00130
00131 SendMessage( HScol, BLOC_NEW_DATA_CB,(int)bloc,(LPARAM)NULL);
00132
00133 #ifdef _SCOL_DEBUG_
00134 MMechostr(MSKDEBUG,"ok\n");
00135 #endif
00136
00137 return 0;
00138 }
00139
00140
00150 int _GETblocName(mmachine m)
00151 {
00152 #ifdef _SCOL_DEBUG_
00153 MMechostr(MSKDEBUG,"_GetWiiExtensionType\n");
00154 #endif
00155
00156 int blocTable = MTOP( MMget(m,0) ) ;
00157 if ( blocTable == NIL ) { MMset(m,0,NIL) ; return 0 ; }
00158
00159
00160 Bloc* bloc = (Bloc*)MMfetch(m, blocTable, 0) ;
00161 if( !bloc ) { MMset(m,0,NIL) ; return 0 ; }
00162
00163
00164 MMpull(m);
00165
00166
00167 Mpushstrbloc(m, bloc->getName());
00168
00169 #ifdef _SCOL_DEBUG_
00170 MMechostr(MSKDEBUG,"ok\n");
00171 #endif
00172
00173 return 0;
00174 }
00175
00176
00187 int _SETblocName(mmachine m)
00188 {
00189 #ifdef _SCOL_DEBUG_
00190 MMechostr(MSKDEBUG,"_SETblocValue\n");
00191 #endif
00192
00193 int name = MTOP( MMpull(m) ) ;
00194
00195
00196 int blocTable = MTOP( MMget(m,0) ) ;
00197 if ( blocTable == NIL ) { MMset(m,0,-1) ; return 0 ; }
00198
00199
00200 Bloc* bloc = (Bloc*)MMfetch(m, blocTable, 0) ;
00201
00202 char * sname = MMstartstr(m, name);
00203
00204 bloc->setName(sname);
00205
00206 MMset(m,0,0);
00207
00208 #ifdef _SCOL_DEBUG_
00209 MMechostr(MSKDEBUG,"ok\n");
00210 #endif
00211
00212 return 0;
00213 }
00214
00215
00225 int destroyBlocObj(mmachine m, int handsys, int blocTab) {
00226
00227 Bloc* bloc = (Bloc*) MMfetch(m, MTOP(blocTab), 0);
00228 if (bloc == NULL) {
00229
00230 MMset(m, 0, NIL);
00231 return 0;
00232 }
00233
00234
00235 SAFE_DELETE(bloc);
00236
00237
00238 MMstore(m, MTOP(blocTab), 0, NULL);
00239
00240
00241 MMechostr(MSKDEBUG,"Bloc object destroyed.\n");
00242 return 0;
00243 }
00244
00245
00255 int _CRbloc(mmachine m) {
00256 #ifdef _SCOL_DEBUG_
00257 MMechostr(MSKDEBUG,"_CRbloc\n");
00258 #endif
00259
00260
00261 int k = 0;
00262
00263
00264 int channel = MMget(m, 0);
00265
00266
00267 if (channel == NIL) {
00268 MMechostr(MSKDEBUG, "Channel NIL\n");
00269 MMpull(m);
00270 MMpush(m, NIL);
00271 return 0;
00272 }
00273
00274
00275 Bloc * bloc = new Bloc();
00276
00277 if (bloc == NULL) {
00278 MMechostr(MSKDEBUG, "_CRbloc ...initialization failed\n");
00279 SAFE_DELETE(bloc) ;
00280 MMpull(m);
00281 MMpush(m, NIL);
00282 return 0;
00283 }
00284 MMechostr(MSKDEBUG,"_CRbloc ...initialization successful\n");
00285
00286
00287 int blocTab = MMmalloc(m, 1, TYPETAB);
00288 if (blocTab == NIL) {
00289 MMechostr(MSKDEBUG,"_CRbloc ...MMmalloc failed\n");
00290 SAFE_DELETE(bloc);
00291 MMpull(m);
00292 return MMpush(m, NIL);
00293 }
00294 MMechostr(MSKDEBUG,"_CRbloc ...MMmalloc successful\n");
00295
00296
00297 MMstore(m, blocTab, 0, (int)bloc);
00298 MMpush(m, PTOM(blocTab));
00299
00300
00301 k = OBJcreate(m, OBJBLOCSCOL, (int)bloc, NULL, NULL);
00302 MMechostr(MSKDEBUG,"_CRbloc ...object creation successful\n");
00303
00304 #ifdef _SCOL_DEBUG_
00305 MMechostr(MSKDEBUG,"ok\n");
00306 #endif
00307
00308
00309 return k;
00310 }
00311
00312
00322 int _DSbloc(mmachine m)
00323 {
00324 #ifdef _SCOL_DEBUG_
00325 MMechostr(MSKDEBUG,"_DSbloc\n");
00326 #endif
00327
00328 int bloc = MTOP( MMget(m,0) );
00329 if ( bloc == NIL ) { MMset(m,0,NIL); return 0; }
00330
00331 OBJdelTM( m, OBJBLOCSCOL, PTOM(bloc) );
00332 MMset(m,0,0);
00333
00334 #ifdef _SCOL_DEBUG_
00335 MMechostr(MSKDEBUG,"ok\n");
00336 #endif
00337 return 0;
00338 }
00339
00340
00354 int _CBblocChangeValue(mmachine m) {
00355
00356 MMechostr(MSKDEBUG, "_CBblocChangeValue ...adding reflex\n");
00357 return OBJaddreflex(m, OBJBLOCSCOL, SCOL_BLOC_NEW_DATA_CB);
00358 }
00359
00360
00371 int getBlocNewData(mmachine m, HWND h, unsigned msg, UINT id, LONG param, int *ret) {
00372 int k = 0;
00373
00374
00375 Bloc * bloc = (Bloc*) id;
00376
00377
00378 if (OBJbeginreflex(m, OBJBLOCSCOL, (int)bloc, SCOL_BLOC_NEW_DATA_CB)) {
00379 MMechostr(MSKDEBUG,"Bloc not found\n");
00380 return 0;
00381 }
00382
00383
00384 MMpush(m, ITOM(bloc->getValue()));
00385
00386 Mpushstrbloc(m, bloc->getName());
00387
00388
00389 k = OBJcallreflex(m, 2 );
00390 return k;
00391 }
00392
00393
00394
00396 #define NbTplPKG 8
00397
00398
00402 char *TplName[NbTplPKG] =
00403 {
00404 "ObjBloc",
00405 "_CRbloc",
00406 "_DSbloc",
00407 "_GETblocValue",
00408 "_GETblocName",
00409 "_SETblocName",
00410 "_SETblocValue",
00411 "_CBblocChangeValue"
00412 };
00413
00414
00418 int (*TplFunc[NbTplPKG])(mmachine m)=
00419 {
00420 NULL,
00421 _CRbloc,
00422 _DSbloc,
00423 _GETblocValue,
00424 _GETblocName,
00425 _SETblocName,
00426 _SETblocValue,
00427 _CBblocChangeValue
00428 };
00429
00430
00434 int TplNArg[NbTplPKG]=
00435 {
00436 TYPTYPE,
00437 1,
00438 1,
00439 1,
00440 1,
00441 2,
00442 2,
00443 3
00444 };
00445
00446
00450 char* TplType[NbTplPKG]=
00451 {
00452 NULL,
00453 "fun [Chn] ObjBloc",
00454 "fun [ObjBloc] I",
00455 "fun [ObjBloc] I",
00456 "fun [ObjBloc] S",
00457 "fun [ObjBloc S] I",
00458 "fun [ObjBloc I] I",
00459 "fun [ObjBloc fun [ObjBloc u0 I S] u1 u0] ObjBloc"
00460 };
00461
00462
00470 int LoadBloc(mmachine m) {
00471 int k;
00472
00473
00474 OBJBLOCSCOL = OBJregister(1 , 1, destroyBlocObj, "OBJBLOCSCOL");
00475
00476
00477
00478 BLOC_NEW_DATA_CB = OBJgetUserEvent();
00479
00480
00481 OBJdefEvent(BLOC_NEW_DATA_CB, (int (__cdecl *)(struct Mmachine *, int, unsigned int, int, int, int *))getBlocNewData);
00482
00483
00484 k = PKhardpak(m, "TemplateEngine", NbTplPKG, TplName, TplFunc, TplNArg, TplType);
00485 return k;
00486 }
00487
00488
00500
00502
00505 extern "C" __declspec (dllexport)
00506 int SCOLloadTemplate(mmachine m, cbmachine w)
00507 {
00508 SCOLinitplugin(w);
00509
00510 HScol = (HWND)SCgetExtra("hscol");
00511
00512
00513 MMechostr(MSKDEBUG,"Loading Template DLL ...\n");
00514 return 0;
00515 }
00516
00520 extern "C" __declspec (dllexport)
00521 int SCOLfreeTemplate()
00522 {
00523
00524 MMechostr(MSKDEBUG, "Template DLL CLOSED...\n\n" );
00525 return 0;
00526 }
00527