From 98d0faa2eeddfe260bd337c69b00734b7cff2375 Mon Sep 17 00:00:00 2001 From: mataes2007 Date: Sat, 26 Nov 2011 15:54:11 +0000 Subject: added mBot git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@217 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- mBot/src/libphp/svar.cpp | 124 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 mBot/src/libphp/svar.cpp (limited to 'mBot/src/libphp/svar.cpp') diff --git a/mBot/src/libphp/svar.cpp b/mBot/src/libphp/svar.cpp new file mode 100644 index 0000000..c249859 --- /dev/null +++ b/mBot/src/libphp/svar.cpp @@ -0,0 +1,124 @@ +/* + +Miranda Scripting Plugin for Miranda-IM +Copyright 2004-2006 Piotr Pawluczuk (www.pawluczuk.info) + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ +#include "libphp.h" +#include "internals.h" +#include "svar.h" + +extern LPHP_MALLOC g_malloc; +extern LPHP_FREE g_free; + +void* svar_malloc(unsigned long amount) +{ + return g_malloc(amount); +} +char* svar_strdup(const char* str) +{ + unsigned long len = strlen(str)+1; + char* tmp = (char*)g_malloc(len); + if(tmp){ + memcpy(tmp,str,len); + } + return tmp; +} +void svar_free(void* ptr) +{ + try{//g_heap,0, + (ptr)?(g_free(ptr)):(0); + }catch(...){ + return; + } +} + +void svar_freevar(sVar* ptr) +{ + try{ + if(ptr) + { + if(ptr->type == SV_STRING || ptr->type > 10){ + svar_free(ptr->str.val); + ptr->str.val = 0; + } + } + }catch(...){ + return; + } +} + +int svar_set(sVar* v1, sVar* v2, void* param){ + + if(!v2) + {//release + if(v1->locked && param!=(void*)1)return 0; + svar_freevar(v1); + v1->type = SV_NULL; + } + else + { + if(v1->locked){ + return 1; + } + if(v1->type == SV_STRING || v1->type > 10){ + svar_free(v1->str.val); + v1->str = v2->str; + }else{ + v1->dval = v2->dval; + } + v1->type = v2->type; + } + return 1; +} + +void sVariable(sVar* out,char cType,void* pValue,unsigned long pLen,char cLocked) +{ + out->type = cType; + out->locked = cLocked; + + switch(cType){ + case SV_STRING: + out->str.val = (pLen)?((char*)pValue):(svar_strdup((const char*)pValue)); + out->str.len = (pLen)?(pLen):(strlen(out->str.val)); + break; + case SV_LONG: + case SV_WORD: + out->lval = (long)pValue; + break; + case SV_DOUBLE: + out->dval = *((double*)pValue); + break; + case SV_ARRAY: + out->str.val = (char*)pValue; + out->str.len = pLen; + break; + case SV_LPOINTER: + out->lval = (long)pValue; + break; + default: + out->type = SV_NULL; + out->lval = 0; + } +}; + +void sVariable(sVar* out,double val,char cLocked) +{ + out->type = SV_DOUBLE; + out->dval = val; + out->locked = cLocked; +} \ No newline at end of file -- cgit v1.2.3