Ejemplo n.º 1
0
/*
 * set audio volume with given channel
 *
 * @param audio channel index
 * @param audio volume (0 to 1)
 * @return EMO_NO_ERROR if succeeds
 */
SQInteger emoSetAudioChannelVolume(HSQUIRRELVM v) {
    if (!engine->audio->isRunning()) {
        sq_pushinteger(v, ERR_AUDIO_ENGINE_CLOSED);
        return 1;
    }

    SQInteger channelIndex;
    float channelVolume;

    if (sq_gettype(v, 2) != OT_NULL && sq_gettype(v, 3) != OT_NULL) {
        sq_getinteger(v, 2, &channelIndex);
        sq_getfloat(v, 3, &channelVolume);
    } else {
        sq_pushinteger(v, ERR_INVALID_PARAM_TYPE);
        return 1;
    }

    if (channelIndex >= engine->audio->getChannelCount()) {
        sq_pushinteger(v, ERR_INVALID_PARAM);
        return 1;
    }

    SLint16 volume = (1 - channelVolume) * SL_MILLIBEL_MIN;

    if (!engine->audio->setChannelVolume(channelIndex, volume)) {
        sq_pushinteger(v, ERR_AUDIO_ENGINE_STATUS);
        return 1;
    }

    sq_pushinteger(v, EMO_NO_ERROR);

    return 1;
}
Ejemplo n.º 2
0
// 脚本调用原型:
// VApiHandle VApiHwFindControl(HANDLE hWnd, string CtrlName);
SQInteger ViHwFindControl(HSQUIRRELVM v)
{
	VApiHandle       hRet           = 0;
	const SQChar*    szCtrlName    = NULL;
	SQInteger        nargs         = sq_gettop(v);
    SQInteger        nWnd          = 0;
    HANDLE           hWnd          = NULL;
	CScriptMgr*      pMgr          = NULL;
    CPaintManagerUI* pPM           = NULL;

	if (!v || 2 + 1 != nargs) {goto _Exit_;}

	if (OT_INTEGER != sq_gettype(v, 2)) {goto _Exit_;}
    if (OT_STRING != sq_gettype(v, 3)) {goto _Exit_;}

	sq_getinteger(v, 2, &nWnd);
    sq_getstring(v, 3, &szCtrlName);

    if (-1 == nWnd) {
        pMgr = (CScriptMgr*)sq_getforeignptr(v);
        if (!pMgr) {goto _Exit_;}
        pPM = pMgr->GetManager();
    } else {
        pPM = QiHwHandleToWin(nWnd)->pWinObj->GetPM();
    }
    if (!pPM) {goto _Exit_;}

	// fixbug - 未验证pm合法性
	hRet = QiHwCtrlToHandle(pPM->FindControl(szCtrlName));

_Exit_:
	sq_pushinteger(v, hRet);
	return 1;
}
Ejemplo n.º 3
0
static SQInteger _file_constructor(HSQUIRRELVM v)
{
	const SQChar *filename,*mode;
	bool owns = true;
	SQFile *f;
	SQFILE newf;
	if(sq_gettype(v,2) == OT_STRING && sq_gettype(v,3) == OT_STRING) {
		sq_getstring(v, 2, &filename);
		sq_getstring(v, 3, &mode);
		newf = sqstd_fopen(filename, mode);
		if(!newf) return sq_throwerror(v, _SC("cannot open file"));
	} else if(sq_gettype(v,2) == OT_USERPOINTER) {
		owns = !(sq_gettype(v,3) == OT_NULL);
		sq_getuserpointer(v,2,&newf);
	} else {
		return sq_throwerror(v,_SC("wrong parameter"));
	}
	f = new SQFile(newf,owns);
	if(SQ_FAILED(sq_setinstanceup(v,1,f))) {
		delete f;
		return sq_throwerror(v, _SC("cannot create blob with negative size"));
	}
	sq_setreleasehook(v,1,_file_releasehook);
	return 0;
}
Ejemplo n.º 4
0
/*
 * set preference value with given key
 *
 * @param preference key
 * @param preference value
 * @return EMO_NO_ERROR if succeeds
 */
SQInteger emoDatabaseSetPreference(HSQUIRRELVM v) {
    const SQChar* key;
    SQInteger nargs = sq_gettop(v);
    if (nargs >= 2 && sq_gettype(v, 2) != OT_NULL) {
        sq_tostring(v, 2);
        sq_getstring(v, -1, &key);
        sq_poptop(v);
    } else {
        sq_pushinteger(v, ERR_INVALID_PARAM);
        return 1;
    }

    const SQChar* value;
    if (nargs >= 3 && sq_gettype(v, 3) != OT_NULL) {
        sq_tostring(v, 3);
        sq_getstring(v, -1, &value);
        sq_poptop(v);
    } else {
        sq_pushinteger(v, ERR_INVALID_PARAM);
        return 1;
    }

    if (!engine->database->setPreference(key, value)) {
        sq_pushinteger(v, ERR_DATABASE);
        return 1;
    }

    sq_pushinteger(v, EMO_NO_ERROR);
    return 1;
}
Ejemplo n.º 5
0
/*
 * open database with given name
 * if database is not found, creates new database with given name
 * file mode is one of FILE_MODE_PRIVATE, FILE_MODE_WORLD_READABLE
 * or FILE_MODE_WORLD_WRITABLE
 *
 * @param database name
 * @param file mode
 * @return EMO_NO_ERROR if succeeds
 */
SQInteger emoDatabaseOpenOrCreate(HSQUIRRELVM v) {
    const SQChar* name;
    SQInteger nargs = sq_gettop(v);
    if (nargs >= 2 && sq_gettype(v, 2) == OT_STRING) {
        sq_tostring(v, 2);
        sq_getstring(v, -1, &name);
        sq_poptop(v);
    } else {
        sq_pushinteger(v, ERR_INVALID_PARAM);
        return 1;
    }

    SQInteger mode = FILE_MODE_PRIVATE;
    if (nargs >= 3 && sq_gettype(v, 3) == OT_INTEGER) {
        sq_getinteger(v, 3, &mode);
    }

    if (!engine->database->openOrCreate(name, mode)) {
        sq_pushinteger(v, ERR_DATABASE_OPEN);
        return 1;
    }

    sq_pushinteger(v, EMO_NO_ERROR);
    return 1;
}
Ejemplo n.º 6
0
int AnimSquirrel::playAnim(SQVM* v)
{
    int ID, stage, returnVal;
    returnVal = 0;
    const char* anim;
    float weight, duration, speed, timeoffset;
    SQInteger nargs = sq_gettop(v);
    if(nargs == 8)
    {
        if(sq_gettype(v,2) == OT_INTEGER &&
                sq_gettype(v,3) == OT_STRING &&
                sq_gettype(v,4) == OT_INTEGER)
        {
            sq_getinteger(v,2,&ID);
            sq_getinteger(v,4,&stage);
            sq_getstring(v,3,&anim);
            sq_getfloat(v,5,&weight);
            sq_getfloat(v,6,&duration);
            sq_getfloat(v,7,&speed);
            sq_getfloat(v,8,&timeoffset);
            returnVal = GameEngine::playAnim(ID,anim,stage,weight,duration,speed,timeoffset);
        }
    }
    sq_pushinteger(v,returnVal);
    return 1;
}
Ejemplo n.º 7
0
SQInteger ScriptText::_set(HSQUIRRELVM vm)
{
	int32 k;

	if (sq_gettype(vm, 2) == OT_STRING) {
		const SQChar *key;
		sq_getstring(vm, 2, &key);
		const char *key_string = SQ2OTTD(key);

		if (strncmp(key_string, "param_", 6) != 0 || strlen(key_string) > 8) return SQ_ERROR;
		k = atoi(key_string + 6);
	} else if (sq_gettype(vm, 2) == OT_INTEGER) {
		SQInteger key;
		sq_getinteger(vm, 2, &key);
		k = (int32)key;
	} else {
		return SQ_ERROR;
	}

	if (k > SCRIPT_TEXT_MAX_PARAMETERS) return SQ_ERROR;
	if (k < 1) return SQ_ERROR;
	k--;

	return this->_SetParam(k, vm);
}
Ejemplo n.º 8
0
// BOOL ViCbAddCtrl(HANDLE hCtrl, HANDLE hParent)
SQInteger ViCbAddCtrl(HSQUIRRELVM v)
{
    SQInteger        nargs         = sq_gettop(v);
    SQInteger        hCtrl         = 0;
    SQInteger        hParent       = 0;
    CContainerUI*    pParentCtrl   = NULL;
    CScriptMgr*      pMgr          = NULL;
    CPaintManagerUI* pPM           = NULL;
    CControlUI*      pCtrl         = NULL;
    SQBool           bRet          = FALSE;

    if (!v || 2 + 1 != nargs) {goto _Exit_;}
    if (OT_INTEGER != sq_gettype(v, 2)) {goto _Exit_;}
    if (OT_INTEGER != sq_gettype(v, 3)) {goto _Exit_;}

    sq_getinteger(v, 2, &hCtrl);
    sq_getinteger(v, 3, &hParent);

    pCtrl = QiHwHandleToCtrl(hCtrl);
    pParentCtrl = (CContainerUI*)QiHwHandleToCtrl(hParent);
    if (!pCtrl) {goto _Exit_;}
    if (NULL == pParentCtrl) {
        pMgr = (CScriptMgr*)sq_getforeignptr(v);
        if (!pMgr) {goto _Exit_;}
        pPM = pMgr->GetManager();
        if (!pPM) {goto _Exit_;}
        pParentCtrl = (CContainerUI*)pPM->GetRoot();
    }
    if (!pParentCtrl || !pParentCtrl->IsContainer()) {goto _Exit_;}
    bRet = (SQBool)pParentCtrl->Add(pCtrl);

_Exit_:
    sq_pushbool(v, bRet);
    return 1;
}
Ejemplo n.º 9
0
/*
 * SQInteger loadAudio(SQInteger audioIndex, SQChar* filename);
 *
 * @param audio channel index
 * @param file name to be loaded
 * @return EMO_NO_ERROR if succeeds
 */
SQInteger emoLoadAudio(HSQUIRRELVM v) {
    if (!engine->audio->isRunning()) {
        sq_pushinteger(v, ERR_AUDIO_ENGINE_CLOSED);
        return 1;
    }

    SQInteger channelIndex;
    const SQChar* filename;

    if (sq_gettype(v, 2) != OT_NULL && sq_gettype(v, 3) == OT_STRING) {
        sq_getinteger(v, 2, &channelIndex);
        sq_tostring(v, 3);
        sq_getstring(v, -1, &filename);
    } else {
        sq_pushinteger(v, ERR_INVALID_PARAM_TYPE);
        return 1;
    }

    if (channelIndex >= engine->audio->getChannelCount()) {
        sq_pushinteger(v, ERR_INVALID_PARAM);
        return 1;
    }

    if (!engine->audio->createChannelFromAsset(filename, channelIndex)) {
        sq_pushinteger(v, engine->getLastError());
        return 1;
    }

    sq_pushinteger(v, EMO_NO_ERROR);

    return 1;
}
Ejemplo n.º 10
0
void
TimeScheduler::update(float time)
{
  while(!schedule.empty() && schedule.front().wakeup_time < time) {
    HSQOBJECT thread_ref = schedule.front().thread_ref;

    sq_pushobject(global_vm, thread_ref);
    sq_getweakrefval(global_vm, -1);

    HSQUIRRELVM scheduled_vm;
    if(sq_gettype(global_vm, -1) == OT_THREAD &&
       SQ_SUCCEEDED(sq_getthread(global_vm, -1, &scheduled_vm))) {
      if(SQ_FAILED(sq_wakeupvm(scheduled_vm, SQFalse, SQFalse, SQTrue, SQFalse))) {
        std::ostringstream msg;
        msg << "Error waking VM: ";
        sq_getlasterror(scheduled_vm);
        if(sq_gettype(scheduled_vm, -1) != OT_STRING) {
          msg << "(no info)";
        } else {
          const char* lasterr;
          sq_getstring(scheduled_vm, -1, &lasterr);
          msg << lasterr;
        }
        log_warning << msg.str() << std::endl;
        sq_pop(scheduled_vm, 1);
      }
    }

    sq_release(global_vm, &thread_ref);
    sq_pop(global_vm, 2);

    std::pop_heap(schedule.begin(), schedule.end());
    schedule.pop_back();
  }
}
Ejemplo n.º 11
0
int SquirrelScriptContext::SquirrelClassMethodCallback(HSQUIRRELVM vm)
{
	// Get class info
	MultiScriptAssert( sq_gettype(vm, -1) == OT_USERPOINTER );
	void* userPtr = NULL;
	sq_getuserpointer(vm, -1, &userPtr);
	sq_pop(vm, 1);

	SquirrelClassInfo* classInfo = (SquirrelClassInfo*) userPtr;

	// Get method index
	MultiScriptAssert( sq_gettype(vm, -1) == OT_INTEGER );

	int methodIndex;
	sq_getinteger(vm, -1, &methodIndex);
	sq_pop(vm, 1);

	// Get the instance
	MultiScriptAssert( sq_gettype(vm, 1) == OT_INSTANCE );
	sq_getinstanceup(vm, 1, &userPtr, 0);
	SquirrelScriptObject* scriptObject = (SquirrelScriptObject*) userPtr;
	MultiScriptAssert(scriptObject->m_objectPtr);

	SquirrelScriptStack stack(classInfo->m_context, false);
	const bool result = classInfo->m_desc->m_methods[methodIndex].m_method(scriptObject, &stack);
	MultiScriptAssert( result );

	return stack.m_numPushed;
}
/*
 * Runtime logging
 *
 * @param log level
 * @param log message
 */
SQInteger emoRuntimeLog(HSQUIRRELVM v) {
    SQInteger nargs = sq_gettop(v);
    SQInteger level;
    const SQChar *message;

    if (nargs < 3)
        return 0;

    if (sq_gettype(v, 2) == OT_INTEGER && sq_gettype(v, 3) == OT_STRING) {
        sq_getinteger(v, 2, &level);
        sq_tostring(v, 3);
        sq_getstring(v, -1, &message);
        sq_poptop(v);

        switch (level) {
        case LOG_INFO:
            LOGI((char*) message);
            break;
        case LOG_ERROR:
            LOGE((char*) message);
            break;
        case LOG_WARN:
            LOGW((char*) message);
            break;
        }
    }
    return 0;
}
Ejemplo n.º 13
0
//////////////////////////////////////////////////////////////////////////
// ViIp 接口表示CFastImagePanelUI类的成员函数
// BOOL   ViIpSetImgByMem(VApiHandle hImgPaneCtrl, VApiHandle hImg)
SQInteger ViIpSetImgByMem(HSQUIRRELVM v)
{
	SQInteger          nargs         = sq_gettop(v);
	BOOL               bRet          = FALSE;
	SQInteger          hImg          = 0;
	CUIImage*          pImg          = NULL;
	CFastImagePanelUI* pImgPaneCtrl  = NULL;
	SQInteger          hImgPaneCtrl  = NULL;

	if (!v || 2 + 1 != nargs) {goto _Exit_;}
	if (OT_INTEGER != sq_gettype(v, 2)) {goto _Exit_;}
	if (OT_INTEGER != sq_gettype(v, 3)) {goto _Exit_;}

	sq_getinteger(v, 2, &hImgPaneCtrl);
	sq_getinteger(v, 3, &hImg);

	pImg = (CUIImage*)QiHwHandleToObj(hImg);
	pImgPaneCtrl = (CFastImagePanelUI*)QiHwHandleToObj(hImgPaneCtrl);
	if (!pImg || !pImgPaneCtrl) {goto _Exit_;}
	
	bRet = pImgPaneCtrl->SetImgByMem(pImg);

_Exit_:
	sq_pushbool(v, bRet);
	return 1;
}
Ejemplo n.º 14
0
// BOOL TwStepTween(HANDLE hTween, long currentMillis)
SQInteger TwStepTween(HSQUIRRELVM v)
{
	SQInteger          nargs          = sq_gettop(v);
	SQBool             bRet           = FALSE;
	SQInteger          nTweener       = NULL;
	SQInteger          currentMillis  = 0;
	Tweener*           pTweener       = NULL;

	if (!v || 2 + 1 != nargs) {goto _Exit_;}
	if (OT_INTEGER != sq_gettype(v, 2)) {goto _Exit_;}
	if (OT_INTEGER != sq_gettype(v, 3)) {goto _Exit_;}

	sq_getinteger(v, 2, &nTweener);
	sq_getinteger(v, 3, &currentMillis);

	pTweener = (Tweener*)QiHwHandleToObj(nTweener);
	if (!pTweener) {goto _Exit_;}

	pTweener->step(currentMillis);
	bRet = TRUE;

_Exit_:
	sq_pushbool(v, bRet);
	return 1;
}
Ejemplo n.º 15
0
//  BOOL  ViCbSetPos(VApiHandle hWnd, int x0, int y0, int x1, int y1)
SQInteger ViCbSetPos(HSQUIRRELVM v)
{
	SQInteger      nargs         = sq_gettop(v);
	SQInteger      Handle        = 0;
	CControlUI*    pCtrl         = NULL;
	int            x0            = 0;
	int            y0            = 0;
	int            x1            = 0;
	int            y1            = 0;
	RECT           rc            = {0};
	if (!v || 5 + 1 != nargs) {goto _Exit_;}
	if (OT_INTEGER != sq_gettype(v, 2)) {goto _Exit_;}
	if (OT_INTEGER != sq_gettype(v, 3)) {goto _Exit_;}
	if (OT_INTEGER != sq_gettype(v, 4)) {goto _Exit_;}
	if (OT_INTEGER != sq_gettype(v, 5)) {goto _Exit_;}
	if (OT_INTEGER != sq_gettype(v, 6)) {goto _Exit_;}
	
	sq_getinteger(v, 2, &Handle);
	sq_getinteger(v, 3, &x0);
	sq_getinteger(v, 4, &y0);
	sq_getinteger(v, 5, &x1);
	sq_getinteger(v, 6, &y1);
	pCtrl = QiHwHandleToCtrl(Handle);
	if (!pCtrl) {goto _Exit_;}

	rc.left = x0;
	rc.top = y0;
	rc.right = x1;
	rc.bottom = y1;
	pCtrl->SetPos(rc);
	
_Exit_:
	sq_pushbool(v, TRUE);
	return 1;
}
Ejemplo n.º 16
0
/*
 * seek audio with given channel
 *
 * @param audio channel index
 * @param seek offset (milliseconds from the beginning of the audio)
 * @return EMO_NO_ERROR if succeeds
 */
SQInteger emoSeekAudioChannel(HSQUIRRELVM v) {
    if (!engine->audio->isRunning()) {
        sq_pushinteger(v, ERR_AUDIO_ENGINE_CLOSED);
        return 1;
    }

    SQInteger channelIndex;
    SQInteger seekPosition;

    if (sq_gettype(v, 2) != OT_NULL && sq_gettype(v, 3) != OT_NULL) {
        sq_getinteger(v, 2, &channelIndex);
        sq_getinteger(v, 3, &seekPosition);
    } else {
        sq_pushinteger(v, ERR_INVALID_PARAM_TYPE);
        return 1;
    }

    if (channelIndex >= engine->audio->getChannelCount()) {
        sq_pushinteger(v, ERR_INVALID_PARAM);
        return 1;
    }

    if (!engine->audio->seekChannel(channelIndex, seekPosition, SL_SEEKMODE_ACCURATE)) {
        sq_pushinteger(v, ERR_AUDIO_ENGINE_STATUS);
        return 1;
    }

    sq_pushinteger(v, EMO_NO_ERROR);

    return 1;
}
/*
 * compile script from path
 *
 * @param script file name
 */
SQInteger emoRuntimeCompile(HSQUIRRELVM v) {

    if (sq_gettype(v, 2) == OT_STRING) {
        const SQChar *fname;
        sq_tostring(v, 2);
        sq_getstring(v, -1, &fname);
        sq_poptop(v);

        // check if the file type exists
        if (sq_gettype(v, 3) == OT_INTEGER) {
            SQInteger fileType = TYPE_ASSET;
            sq_getinteger(v, 3, &fileType);

            if (fileType == TYPE_ASSET) {
                // load script from resource
                loadScriptFromAsset((char*) fname);
            } else if (fileType == TYPE_DOCUMENT) {
                // load script from user document directory
                loadScriptFromUserDocument(fname);
            } else {
                // load script from path
                loadScript(fname);
            }
        } else {
            // load script from path
            loadScript(fname);
        }

    }
    return 0;
}
Ejemplo n.º 18
0
// BOOL TwAddProperty(HANDLE hTweenParam, float valor, float valorFinal)
SQInteger TwAddProperty(HSQUIRRELVM v)
{
	SQInteger          nargs         = sq_gettop(v);
	SQBool             bRet          = FALSE;
	TweenerParam*      pTweenParam   = NULL;
	SQInteger          nTweenParam   = NULL;
	SQInteger          fValor        = 0;
	SQInteger          fValorFinal   = 0;
	TweenerParam*      pParam        = NULL;

	if (!v || 3 + 1 != nargs) {goto _Exit_;}
	if (OT_INTEGER != sq_gettype(v, 2)) {goto _Exit_;}
	if (OT_INTEGER != sq_gettype(v, 3)) {goto _Exit_;}
	if (OT_INTEGER != sq_gettype(v, 4)) {goto _Exit_;}

	sq_getinteger(v, 2, &nTweenParam);
	sq_getinteger(v, 3, &fValor);
	sq_getinteger(v, 4, &fValorFinal);

	pTweenParam = (TweenerParam*)QiHwHandleToObj(nTweenParam);
	if (!pTweenParam) {goto _Exit_;}

	pTweenParam->addProperty(fValor, fValorFinal);
	bRet = TRUE;

_Exit_:
	sq_pushbool(v, bRet);
	return 1;
}
Ejemplo n.º 19
0
// HANDLE TwCreateTweenParam(float fTime, short nTransition = EXPO, short nEquation = EASE_OUT, float fDelay = 0)
SQInteger TwCreateTweenParam(HSQUIRRELVM v)
{
    SQInteger          nargs         = sq_gettop(v);
    SQInteger          nRet          = NULL;
    SQInteger          fTime         = 0;
    SQInteger          nTransition   = EXPO;
    SQInteger          nEquation     = EASE_OUT;
    SQInteger          fDelay        = 0;
    TweenerParam*      pParam        = NULL;

    if (!v || 4 + 1 != nargs) {goto _Exit_;}
    if (OT_INTEGER != sq_gettype(v, 2)) {goto _Exit_;}
    if (OT_INTEGER != sq_gettype(v, 3)) {goto _Exit_;}
    if (OT_INTEGER != sq_gettype(v, 4)) {goto _Exit_;}
    if (OT_INTEGER != sq_gettype(v, 5)) {goto _Exit_;}

    sq_getinteger(v, 2, &fTime);
    sq_getinteger(v, 3, &nTransition);
    sq_getinteger(v, 4, &nEquation);
    sq_getinteger(v, 5, &fDelay);

    pParam = new TweenerParam(fTime, nTransition, nEquation, fDelay);
    if (!pParam) {goto _Exit_;}

    nRet = QiHwObjToHandle(pParam);

_Exit_:
    sq_pushinteger(v, nRet);
    return 1;
}
Ejemplo n.º 20
0
int SquirrelScriptContext::SquirrelClassToStringMethodCallback(HSQUIRRELVM vm)
{
	// Get class info
	MultiScriptAssert( sq_gettype(vm, -1) == OT_USERPOINTER );
	void* userPtr = NULL;
	sq_getuserpointer(vm, -1, &userPtr);
	sq_pop(vm, 1);

	SquirrelClassInfo* classInfo = (SquirrelClassInfo*) userPtr;

	// Get the instance
	MultiScriptAssert( sq_gettype(vm, 1) == OT_INSTANCE );
	sq_getinstanceup(vm, 1, &userPtr, 0);
	SquirrelScriptObject* scriptObject = (SquirrelScriptObject*) userPtr;
	MultiScriptAssert(scriptObject->m_objectPtr);

	// Invoke to-string method
	char buffer[1 << 8];
	if (classInfo->m_desc->m_toStringMethod)
	{
		SquirrelScriptStack stack(classInfo->m_context, false);
		const bool result = classInfo->m_desc->m_toStringMethod(scriptObject, buffer, 1 << 8);
		MultiScriptAssert( result );
		MultiScriptAssert( stack.m_numPushed == 0 );
	}
	else
		MultiScriptSprintf(buffer, 1 << 8, "[%s]", classInfo->m_desc->m_name);

	sq_pushstring(vm, buffer, -1);
	return 1;
}
Ejemplo n.º 21
0
/**
 * squirrel から吉里吉里オブジェクトを取得
 */
bool
TJSObject::getVariant(HSQUIRRELVM v, SQInteger idx, tTJSVariant *variant)
{
    if (sq_gettype(v, idx) == OT_CLASS) {
        if (idx < 0) {
            idx = sq_gettop(v) + 1 + idx;
        }
        bool ret = false;
        // クラス属性からオブジェクト情報を引き出す
        sq_pushnull(v);
        if (SQ_SUCCEEDED(sq_getattributes(v, idx))) {
            sq_pushstring(v, tjsClassAttrName, -1);
            if (SQ_SUCCEEDED(sq_get(v,-2))) {
                if (SQ_SUCCEEDED(sq_getvariant(v,-1, variant))) {
                    ret = true;
                }
                sq_pop(v,1);
            }
            sq_pop(v,1);
        } else {
            // XXX
            sq_pop(v,1);
        }
        return ret;
    } else if (sq_gettype(v, idx) == OT_INSTANCE) {
        TJSObject *obj = SQClassType<TJSObject>::getInstance(v, idx);
        if (obj && obj->instance.AsObjectClosureNoAddRef().IsValid(0, NULL, NULL, NULL) == TJS_S_TRUE) {
            *variant = obj->instance;
            return true;
        }
    }
    return false;
}
Ejemplo n.º 22
0
Archivo: io.c Proyecto: njlg/mod_sq
// write
SQInteger file_put_contents(HSQUIRRELVM v) {
	// function parameters
	const SQChar* filename;
	const SQChar* contents;

	// internal structures
	apr_file_t* file;
	apr_size_t nbytes;
	apr_status_t status;
	request_rec* r = get_request_rec(v);

	// for error messages
	char error[120];
	char errorMessage[120];

	ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "file_put_contents()");

	// grab filename param
	if( sq_gettype(v, 2) != OT_STRING ) {
		return SQ_ERROR;
	}
	else if( SQ_FAILED(sq_getstring(v, 2, &filename)) ) {
		return SQ_ERROR;
	}

	// grab contents param
	if( sq_gettype(v, 3) != OT_STRING ) {
		return SQ_ERROR;
	}
	else if( SQ_FAILED(sq_getstring(v, 3, &contents)) ) {
		return SQ_ERROR;
	}

	nbytes = strlen(contents);

	ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "    file_put_contents('%s', '%s') %d", filename, contents, (int)nbytes);
	if( (status = apr_file_open(&file, filename, APR_WRITE|APR_CREATE, APR_OS_DEFAULT, r->pool)) != APR_SUCCESS ) {
		apr_strerror(status, error, sizeof error);
		ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "    file_put_contents() failed: %s", error);
		sprintf(errorMessage, "file_put_contents() failed: %s", error);
		errorfunc(v, errorMessage);
		sq_pushbool(v, SQFalse);
	}
	else if( (status = apr_file_write(file, contents, &nbytes)) != APR_SUCCESS ) {
		apr_strerror(status, error, sizeof error);
		ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "    file_put_contents() failed: %s", error);
		sprintf(errorMessage, "file_put_contents() failed: %s", error);
		errorfunc(v, errorMessage);
		sq_pushbool(v, SQFalse);
	}
	else {
		sq_pushinteger(v, nbytes);
		ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "    file_put_contents() wrote %d bytes", (int)nbytes);
	}

	ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "file_put_contents() returning 1");
	return 1;
}
Ejemplo n.º 23
0
/*
 * get boolean value from the stack.
 * this function accepts both integer(1,0) and bool(true,false).
 * returns true if succeeds.
 */
bool getBool(HSQUIRRELVM v, int idx, SQBool* value) {
	if (sq_gettype(v, idx) == OT_INTEGER) {
		SQInteger val;
		sq_getinteger(v, idx, &val);
		*value = (val == 1);
	} else if (sq_gettype(v, idx) == OT_BOOL) {
		sq_getbool(v, idx, value);
	} else {
		return false;
	}
	
	return true;
}
Ejemplo n.º 24
0
//------------------------------------------------------------------------------
void SN_API getTable(HSQUIRRELVM vm, Variant & out_v, SQInteger index)
{
	out_v.setDictionary();
	Variant::Dictionary & d = out_v.getDictionary();

	sq_push(vm, index);
	sq_pushnull(vm);

	while (SQ_SUCCEEDED(sq_next(vm, -2)))
	{
		if (sq_gettype(vm, -2) == OT_STRING)
		{
			const SQChar * key = nullptr;
			sq_getstring(vm, -2, &key);
			Variant & val = d[key];
			getVariant(vm, val, -1);
		}
		else
		{
			SN_WARNING("non-string keys in tables are not supported by getVariant");
		}

		sq_pop(vm, 2);
	}

	sq_pop(vm, 2); // Pop iterator and table
}
Ejemplo n.º 25
0
//   int  VwGetPosHight(VApiHandle hWnd)
SQInteger VwGetPosHight(HSQUIRRELVM v)
{
    SQInteger      nargs         = sq_gettop(v);
    SQInteger      nWnd          = 0;
    WinMgrItem*    pWin          = NULL;
    HWND           hWnd          = NULL;
    SQInteger      nRet          = 0;
    RECT           rc            = {0};

    if (!v || 1 + 1 != nargs) {goto _Exit_;}
    if (OT_INTEGER != sq_gettype(v, 2)) {goto _Exit_;}

    sq_getinteger(v, 2, &nWnd);

    if (-1 == nWnd) {
        CScriptMgr* pMgr = (CScriptMgr*)sq_getforeignptr(v);
        if (!pMgr) {goto _Exit_;}
        CPaintManagerUI* pPM = pMgr->GetManager();
        if (!pPM) {goto _Exit_;}
        hWnd = pPM->GetPaintWindow();
    } else {
        hWnd = QiHwHandleToWin(nWnd)->pWinObj->GetHWND();
    }

    ::GetWindowRect(hWnd, &rc);
    nRet = rc.bottom - rc.top;

_Exit_:
    sq_pushinteger(v, nRet);
    return 1;
}
Ejemplo n.º 26
0
static SQRESULT sq_mysql_result_col_value(HSQUIRRELVM v){
	SQ_FUNC_VARS_NO_TOP(v);
	GET_mysql_result_INSTANCE();
	SQObjectType ptype = sq_gettype(v, 2);
	int col = -1;
	if(ptype == OT_STRING){
	    SQ_GET_STRING(v, 2, col_name);
	    col = get_field_idx(self, col_name);
	}
	else
	{
	    SQ_GET_INTEGER(v, 2, idx);
	    col = idx;
	}
	if(col < 0) return sq_throwerror(v, _SC("invalid col index/name"));

    sq_pushstring(v, _curr_row_key, -1);
    if(sq_get(v, 1) == SQ_OK){
        SQ_GET_INTEGER(v, -1, curr_row);
        if(curr_row < dlmysql_num_rows(self)){
        	dlmysql_data_seek(self, curr_row);
        	const MYSQL_ROW res_row = dlmysql_fetch_row(self);
			unsigned long *lengths = dlmysql_fetch_lengths(self);
            sq_pushstring(v, (const SQChar*)res_row[col], lengths[col]);
            return 1;
        }
    }
	return SQ_ERROR;
}
Ejemplo n.º 27
0
// HANDLE TwAddTween(HANDLE hTweenParam)
SQInteger TwAddTween(HSQUIRRELVM v)
{
	SQInteger          nargs         = sq_gettop(v);
	SQInteger          nRet          = 0;
	TweenerParam*      pTweenParam   = NULL;
	SQInteger          nTweenParam   = NULL;
	Tweener*           pTweener      = NULL;

	pTweener = new Tweener();
	if (!pTweener) {goto _Exit_;}

	if (!v || 1 + 1 != nargs) {goto _Exit_;}
	if (OT_INTEGER != sq_gettype(v, 2)) {goto _Exit_;}

	sq_getinteger(v, 2, &nTweenParam);

	pTweenParam = (TweenerParam*)QiHwHandleToObj(nTweenParam);
	if (!pTweenParam) {goto _Exit_;}

	pTweener->addTween(*pTweenParam);
	delete pTweenParam;

	nRet = QiHwObjToHandle(pTweener);

_Exit_:
	sq_pushinteger(v, nRet);
	return 1;
}
/*
 * Set Runtime log level
 *
 * @param log level
 * @param EMO_NO_ERROR if succeeds
 */
SQInteger emoRuntimeSetLogLevel(HSQUIRRELVM v) {

    if (sq_gettype(v, 2) == OT_INTEGER) {
        SQInteger level;
        sq_getinteger(v, 2, &level);

        switch (level) {
        case LOG_INFO:
        case LOG_WARN:
        case LOG_ERROR:
            engine->logLevel = level;
            break;
        default:
            sq_pushinteger(v, ERR_INVALID_PARAM);
            return 1;
        }

    } else {
        sq_pushinteger(v, ERR_INVALID_PARAM);
        return 1;
    }

    sq_pushinteger(v, EMO_NO_ERROR);
    return 1;
}
Ejemplo n.º 29
0
//   void VwUpdateLayout(HWND hWnd)
SQInteger VwUpdateLayout(HSQUIRRELVM v)
{
	SQInteger         nargs            = sq_gettop(v);
	SQInteger         nWnd             = 0;
	HWND              hWnd             = NULL;
	CPaintManagerUI*  pPM              = NULL;

	if (!v || 1 + 1 != nargs) {goto _Exit_;}
	if (OT_INTEGER  != sq_gettype(v, 2)) {goto _Exit_;}

	sq_getinteger(v, 2, &nWnd);

	if (-1 == nWnd) {
		CScriptMgr* pMgr = (CScriptMgr*)sq_getforeignptr(v);
		if (!pMgr) {goto _Exit_;}
		pPM = pMgr->GetManager();
		if (!pPM) {goto _Exit_;}
	} else {
		pPM = QiHwHandleToWin(nWnd)->pWinObj->GetPM();
		if (!pPM) {goto _Exit_;}
	}

	pPM->UpdateLayout();

_Exit_:
	return 1;
}
Ejemplo n.º 30
0
int SquirrelScriptContext::SquirrelClassConstructorCallback(HSQUIRRELVM vm)
{
	MultiScriptAssert( sq_gettype(vm, -1) == OT_USERPOINTER );

	// Get class info
	void* userPtr = NULL;
	sq_getuserpointer(vm, -1, &userPtr);
	sq_pop(vm, 1);

	SquirrelClassInfo* classInfo = (SquirrelClassInfo*) userPtr;

	// Construct object
	SquirrelScriptObject* scriptObject = new SquirrelScriptObject();
	scriptObject->m_classInfo = classInfo;

	SquirrelScriptStack stack(classInfo->m_context, false);
	classInfo->m_desc->m_constructor(&stack, scriptObject);
	MultiScriptAssert( scriptObject->m_objectPtr );
	MultiScriptAssert( stack.m_numPushed == 0 );

	// There is already an instance on the stack (pushed automatically when constructor was invoked from script)
	// Attach our object to created instance
	sq_setinstanceup(vm, -1, scriptObject);

	// Set garbage collection callback for this instance
	sq_setreleasehook(vm, -1, SquirrelClassGCCallback);

	return 0;
}