Beispiel #1
0
/* This defines a function that opens up your library. */
SQRESULT sqext_register_axtls (HSQUIRRELVM v) {
    //add a namespace axtls
	sq_pushstring(v, SQ_LIBNAME, -1);
	sq_newtable(v);

	sq_insert_reg_funcs(v, axtls_obj_funcs);

    //add constants
    KeyIntPtrType KeyIntPtr;
    for (KeyIntPtr = axtls_constants; KeyIntPtr->Str; KeyIntPtr++) {
        sq_pushstring(v, KeyIntPtr->Str, -1);    //first the key
        sq_pushinteger(v, KeyIntPtr->Val);       //then the value
        sq_newslot(v, -3, SQFalse);              //store then
    }

    //now create the SSL Context class
	sq_pushstring(v,ssl_ctx_NAME,-1);
	sq_newclass(v,SQFalse);
	sq_settypetag(v,-1,(void*)SSL_CTX_Tag);
	sq_insert_reg_funcs(v, ssl_ctx_obj_funcs);
	sq_newslot(v,-3,SQFalse);

    //now create the SSL class
	sq_pushstring(v,ssl_NAME,-1);
	sq_newclass(v,SQFalse);
	sq_settypetag(v,-1,(void*)SSL_Tag);
	sq_insert_reg_funcs(v, ssl_obj_funcs);
	sq_newslot(v,-3,SQFalse);

	sq_newslot(v,-3,SQFalse); //add axtls table to the root table

    return SQ_OK;
}
Beispiel #2
0
SQRESULT sqext_register_MySQL(HSQUIRRELVM v)
{
    sq_pushstring(v,MySQL_TAG,-1);
    sq_newclass(v,SQFalse);
    sq_settypetag(v,-1,(void*)MySQL_TAG);
    sq_insert_reg_funcs(v, sq_mysql_methods);
    sq_newslot(v,-3,SQTrue);

    sq_pushstring(v,MySQL_Statement_TAG,-1);
    sq_newclass(v,SQFalse);
    sq_settypetag(v,-1,(void*)MySQL_Statement_TAG);
    sq_insert_reg_funcs(v, sq_mysql_statement_methods);
    sq_newslot(v,-3,SQTrue);

    sq_pushstring(v,MySQL_Result_TAG,-1);
    sq_newclass(v,SQFalse);
    sq_settypetag(v,-1,(void*)MySQL_Result_TAG);
    sq_insert_reg_funcs(v, sq_mysql_result_methods);
    sq_pushstring(v, _curr_row_key, -1);
    sq_pushnull(v);
    sq_newslot(v, -3, SQFalse);
    sq_newslot(v,-3,SQTrue);

    return 0;
}
Beispiel #3
0
HSQOBJECT class_init(HSQUIRRELVM v,SQFUNCTION c,const SQChar * p_name)
{	
	HSQOBJECT class_id;
	sq_pushroottable(v);
	sq_pushstring(v,p_name,-1);

	sq_newclass(v,SQFalse);
	sq_getstackobj(v,-1,&class_id);		
	sq_settypetag(v,-1,&class_id);		

	HSQOBJECT string_constructor;
	sq_pushstring(v,_SC("constructor"),-1);
	sq_resetobject(&string_constructor);
	sq_getstackobj(v,-1,&string_constructor);
	sq_newclosure(v,c,0);
	sq_newslot(v,-3,false);
		
	sq_pushstring(v,_SC("_cloned"),-1);
	sq_newclosure(v,clone<T>,0);
	sq_newslot(v,-3,false);
		
	sq_newslot(v,-3,false);
	sq_pop(v,1);

	return class_id;
}
Beispiel #4
0
void init_streamclass(HSQUIRRELVM v)
{
    sq_pushregistrytable(v);
    sq_pushstring(v,_SC("std_stream"),-1);
    if(SQ_FAILED(sq_get(v,-2))) {
        sq_pushstring(v,_SC("std_stream"),-1);
        sq_newclass(v,SQFalse);
        sq_settypetag(v,-1,(SQUserPointer)SQSTD_STREAM_TYPE_TAG);
        SQInteger i = 0;
        while(_stream_methods[i].name != 0) {
            const SQRegFunction &f = _stream_methods[i];
            sq_pushstring(v,f.name,-1);
            sq_newclosure(v,f.f,0);
            sq_setparamscheck(v,f.nparamscheck,f.typemask);
            sq_newslot(v,-3,SQFalse);
            i++;
        }
        sq_newslot(v,-3,SQFalse);
        sq_pushroottable(v);
        sq_pushstring(v,_SC("stream"),-1);
        sq_pushstring(v,_SC("std_stream"),-1);
        sq_get(v,-4);
        sq_newslot(v,-3,SQFalse);
        sq_pop(v,1);
    }
    else {
        sq_pop(v,1); //result
    }
    sq_pop(v,1);
}
Beispiel #5
0
SQRESULT sqext_register_ffi(HSQUIRRELVM v)
{
    int saved_top = sq_gettop(v);
    //add a namespace ffi
	sq_pushstring(v,_SC("ffi"),-1);
    sq_newclass(v,SQFalse);
    sq_settypetag(v,-1,(void*)FFI_LIB_TAG);
    sq_insert_reg_funcs(v, sq_ffi_methods);

    int i;
    for (i = 0; ffi_types_wrap[i].name != 0; i++) {
        struct FFI_type_name *e = &ffi_types_wrap[i];
        sq_pushstring(v, e->name, -1);
        sq_pushuserpointer(v, e->type);
        sq_newslot(v, -3, SQFalse);
    }
    sq_newslot(v,-3,SQTrue); //add ffi table to the root table


    sq_create_delegate_table(v, sq_lib_methods, FFI_LIB_LIB_TAG);
    sq_create_delegate_table(v, sq_func_methods, FFI_LIB_FUNC_TAG);
    sq_create_delegate_table(v, sq_var_methods, FFI_LIB_VAR_TAG);

    sq_settop(v, saved_top);

    return SQ_OK;
}
BOOL SbuCreateClass(HSQUIRRELVM v,SquirrelClassDecl *cd)
{
	int n = 0;
	int oldtop = sq_gettop(v);
	sq_pushroottable(v);
	sq_pushstring(v,cd->name,-1);
	if(cd->base) {
		sq_pushstring(v,cd->base,-1);
		if(SQ_FAILED(sq_get(v,-3))) {
			sq_settop(v,oldtop);
			return FALSE;
		}
	}
	if(SQ_FAILED(sq_newclass(v,cd->base?1:0))) {
		sq_settop(v,oldtop);
		return FALSE;
	}
	sq_settypetag(v,-1,(SQUserPointer)cd);
	const ScriptClassMemberDecl *members = cd->members;
	const ScriptClassMemberDecl *m = NULL;
	while(members[n].name) {
		m = &members[n];
		sq_pushstring(v,m->name,-1);
		sq_newclosure(v,m->func,0);
		sq_setparamscheck(v,m->params,m->typemask);
		sq_setnativeclosurename(v,-1,m->name);
		sq_createslot(v,-3);
		n++;
	}
	sq_createslot(v,-3);
	sq_pop(v,1);
	return TRUE;
}
Beispiel #7
0
SQRESULT sqext_register_libclang(HSQUIRRELVM v)
{
    sq_pushstring(v,LibClang_TAG,-1);
    sq_newclass(v,SQFalse);
    sq_settypetag(v,-1,(void*)LibClang_TAG);
    sq_insert_reg_funcs(v, sq_libclang_methods);
    sq_newslot(v,-3,SQTrue);

    return 0;
}
Beispiel #8
0
    /* This defines a function that opens up your library. */
    SQRESULT sqext_register_BitVector (HSQUIRRELVM v) {
        //add a namespace BitVector
        sq_pushstring(v, SQ_LIBNAME, -1);
        sq_newclass(v,SQFalse);
        sq_settypetag(v,-1,(SQUserPointer)BitVector_Tag);

        sq_insert_reg_funcs(v, BitVector_obj_funcs);

        sq_newslot(v,-3,SQFalse); //add BitVector table to the root table

        return SQ_OK;
    }
Beispiel #9
0
SQRESULT declare_stream(HSQUIRRELVM v,const SQChar* name,SQUserPointer typetag,const SQChar* reg_name,const SQRegFunction *methods,const SQRegFunction *globals)
{
    if(sq_gettype(v,-1) != OT_TABLE)
        return sq_throwerror(v,_SC("table expected"));
    SQInteger top = sq_gettop(v);
    //create delegate
    init_streamclass(v);
    sq_pushregistrytable(v);
    sq_pushstring(v,reg_name,-1);
    sq_pushstring(v,_SC("std_stream"),-1);
    if(SQ_SUCCEEDED(sq_get(v,-3))) {
        sq_newclass(v,SQTrue);
        sq_settypetag(v,-1,typetag);
        SQInteger i = 0;
        while(methods[i].name != 0) {
            const SQRegFunction &f = methods[i];
            sq_pushstring(v,f.name,-1);
            sq_newclosure(v,f.f,0);
            sq_setparamscheck(v,f.nparamscheck,f.typemask);
            sq_setnativeclosurename(v,-1,f.name);
            sq_newslot(v,-3,SQFalse);
            i++;
        }
        sq_newslot(v,-3,SQFalse);
        sq_pop(v,1);

        i = 0;
        while(globals[i].name!=0)
        {
            const SQRegFunction &f = globals[i];
            sq_pushstring(v,f.name,-1);
            sq_newclosure(v,f.f,0);
            sq_setparamscheck(v,f.nparamscheck,f.typemask);
            sq_setnativeclosurename(v,-1,f.name);
            sq_newslot(v,-3,SQFalse);
            i++;
        }
        //register the class in the target table
        sq_pushstring(v,name,-1);
        sq_pushregistrytable(v);
        sq_pushstring(v,reg_name,-1);
        sq_get(v,-2);
        sq_remove(v,-2);
        sq_newslot(v,-3,SQFalse);

        sq_settop(v,top);
        return SQ_OK;
    }
    sq_settop(v,top);
    return SQ_ERROR;
}
Beispiel #10
0
    SQRESULT sqext_register_sq_slave_vm(HSQUIRRELVM v)
    {
        const SQChar get_set_validation_mask[] = _SC("x s|n|p s|n|b|a|t|p|o");
        sq_pushstring(v,sq_slave_vm_TAG, -1);
        sq_newclass(v, SQFalse);
        sq_settypetag(v,-1,(void*)sq_slave_vm_TAG);
        sq_insertfunc(v, _SC("constructor"), sq_slave_vm_constructor, -1, _SC("xi"), SQFalse);
        sq_insertfunc(v, _SC("_tostring"), sq_slave_vm__tostring, 1, _SC("x"), SQFalse);
        sq_insertfunc(v, _SC("close"), sq_slave_vm_close, 1, _SC("x"), SQFalse);
        sq_insertfunc(v, _SC("set"), sq_slave_vm_set, 3, get_set_validation_mask, SQFalse);
        sq_insertfunc(v, _SC("_set"), sq_slave_vm_set, 3, get_set_validation_mask, SQFalse);
        sq_insertfunc(v, _SC("get"), sq_slave_vm_get, -2, get_set_validation_mask, SQFalse);
        sq_insertfunc(v, _SC("_get"), sq_slave_vm_get, -2, get_set_validation_mask, SQFalse);
        sq_insertfunc(v, _SC("dofile"), sq_slave_vm_dofile, -2, _SC("xsbbb"), SQFalse);
        sq_insertfunc(v, _SC("loadfile"), sq_slave_vm_loadfile, -3, _SC("xssbb"), SQFalse);
        sq_insertfunc(v, _SC("compilestring"), sq_slave_vm_compilestring, -3, _SC("xssbb"), SQFalse);
        sq_insertfunc(v, _SC("call"), sq_slave_vm_call, -3, _SC("xbs"), SQFalse);

        sq_newslot(v,-3,SQTrue); //push sq_slave_vm class
        return 0;
    }
Beispiel #11
0
    SQRESULT sqext_register_sq_zlib(HSQUIRRELVM v)
    {
        sq_pushliteral(v,_SC("zlib"));
        sq_newtable(v);
        INT_CONST(v, Z_DEFAULT_COMPRESSION);
        INT_CONST(v, Z_BEST_SPEED);
        INT_CONST(v, Z_BEST_COMPRESSION);

        sq_insertfunc(v, _SC("version"), sq_zlib_version, 1, _SC("."), SQTrue);
        sq_insertfunc(v, _SC("deflate"), sq_zlib_deflate, -2, _SC(".si"), SQTrue);
        sq_insertfunc(v, _SC("inflate"), sq_zlib_inflate, -2, _SC(".si"), SQTrue);

        sq_pushliteral(v,_SC("Unzip"));
        sq_newclass(v,SQFalse);
        sq_settypetag(v,-1,(void*)sq_minizip_unzip_TAG);
        sq_insert_reg_funcs(v, sq_minizip_unzip_methods);
        sq_newslot(v,-3,SQTrue);

        sq_newslot(v,-3,SQTrue); //push zlib table
        return 0;
    }
Beispiel #12
0
BOOL CreateClass(HSQUIRRELVM v,SquirrelObject & newClass,SQUserPointer classType,const SQChar * name,const SQChar * baseName) {
  int n = 0;
  int oldtop = sq_gettop(v);
  sq_pushroottable(v);
  sq_pushstring(v,name,-1);
  if (baseName) {
    sq_pushstring(v,baseName,-1);
    if (SQ_FAILED(sq_get(v,-3))) { // Make sure the base exists if specified by baseName.
      sq_settop(v,oldtop);
      return FALSE;
    } // if
  } // if
  if (SQ_FAILED(sq_newclass(v,baseName ? 1 : 0))) { // Will inherit from base class on stack from sq_get() above.
    sq_settop(v,oldtop);
    return FALSE;
  } // if
  newClass.AttachToStackObject(-1);
  sq_settypetag(v,-1,classType);
  sq_createslot(v,-3);
  sq_pop(v,1);
  return TRUE;
} // CreateClass
Beispiel #13
0
void bindTransport(HSQUIRRELVM vm)
{
    // create package table
    sq_pushstring(vm, "Transport", -1);
    sq_newtable(vm);

    // static method schedule
    sq_pushstring(vm, _SC("schedule"), -1);
    sq_newclosure(vm, &Transportschedule, 0);
    sq_newslot(vm, -3, false);

    // static method start
    sq_pushstring(vm, _SC("start"), -1);
    sq_newclosure(vm, &Transportstart, 0);
    sq_newslot(vm, -3, false);

    // static method stop
    sq_pushstring(vm, _SC("stop"), -1);
    sq_newclosure(vm, &Transportstop, 0);
    sq_newslot(vm, -3, false);

    // create class Transport.Master
    sq_pushstring(vm, "Master", -1);
    sq_newclass(vm, false);
    sq_getstackobj(vm, -1, &TransportMasterObject);
    sq_settypetag(vm, -1, &TransportMasterObject);

    // ctor for class Master
    sq_pushstring(vm, _SC("constructor"), -1);
    sq_newclosure(vm, &TransportMasterCtor, 0);
    sq_newslot(vm, -3, false);

    // clone for class Master
    sq_pushstring(vm, _SC("_cloned"), -1);
    sq_newclosure(vm, &unclonable, 0);
    sq_newslot(vm, -3, false);

    // methods for class Master
    sq_pushstring(vm, _SC("timeSignature"), -1);
    sq_newclosure(vm, &TransportMastertimeSignature, 0);
    sq_newslot(vm, -3, false);

    // push Master to Transport package table
    sq_newslot(vm, -3, false);

    // create class Transport.Position
    sq_pushstring(vm, "Position", -1);
    sq_newclass(vm, false);
    sq_getstackobj(vm, -1, &TransportPositionObject);
    sq_settypetag(vm, -1, &TransportPositionObject);

    // ctor for class Position
    sq_pushstring(vm, _SC("constructor"), -1);
    sq_newclosure(vm, &TransportPositionCtor, 0);
    sq_newslot(vm, -3, false);

    // clone for class Position
    sq_pushstring(vm, _SC("_cloned"), -1);
    sq_newclosure(vm, &TransportPositionClone, 0);
    sq_newslot(vm, -3, false);

    // methods for class Position
    sq_pushstring(vm, _SC("bar"), -1);
    sq_newclosure(vm, &TransportPositionbar, 0);
    sq_newslot(vm, -3, false);

    sq_pushstring(vm, _SC("div"), -1);
    sq_newclosure(vm, &TransportPositiondiv, 0);
    sq_newslot(vm, -3, false);

    sq_pushstring(vm, _SC("num"), -1);
    sq_newclosure(vm, &TransportPositionnum, 0);
    sq_newslot(vm, -3, false);

    sq_pushstring(vm, _SC("time"), -1);
    sq_newclosure(vm, &TransportPositiontime, 0);
    sq_newslot(vm, -3, false);

    // push Position to Transport package table
    sq_newslot(vm, -3, false);

    // create class Transport.TimeSignature
    sq_pushstring(vm, "TimeSignature", -1);
    sq_newclass(vm, false);
    sq_getstackobj(vm, -1, &TransportTimeSignatureObject);
    sq_settypetag(vm, -1, &TransportTimeSignatureObject);

    // ctor for class TimeSignature
    sq_pushstring(vm, _SC("constructor"), -1);
    sq_newclosure(vm, &TransportTimeSignatureCtor, 0);
    sq_newslot(vm, -3, false);

    // clone for class TimeSignature
    sq_pushstring(vm, _SC("_cloned"), -1);
    sq_newclosure(vm, &TransportTimeSignatureClone, 0);
    sq_newslot(vm, -3, false);

    // methods for class TimeSignature
    sq_pushstring(vm, _SC("denominator"), -1);
    sq_newclosure(vm, &TransportTimeSignaturedenominator, 0);
    sq_newslot(vm, -3, false);

    sq_pushstring(vm, _SC("numerator"), -1);
    sq_newclosure(vm, &TransportTimeSignaturenumerator, 0);
    sq_newslot(vm, -3, false);

    // push TimeSignature to Transport package table
    sq_newslot(vm, -3, false);

    // push package "Transport" to root table
    sq_newslot(vm, -3, false);
}