Exemplo n.º 1
0
/*
* Given an ActionScript object, push it onto the Lua stack as a Lua native
* type if a primitive class (String, Number, Boolean, int, null).
* If object is not convertible to native Lua value, do not push anything
* (and return 0).
*
* WARNING: It important that this function does not touch
*          non-primitive values (like Arrays). If this will be changed,
*          optional primitive autoconversion logic will break.
*/
int push_as3_to_lua_stack_if_convertible(lua_State * L, AS3_Val val)
{
  LCALL(L, stack);

#ifdef DO_SPAM
  SPAM(("push_as3_to_lua_stack_if_convertible(): begin: value, type"));
  AS3_Trace(val);
  AS3_Trace(
      AS3_Call(
          getQualifiedClassName_method, NULL, AS3_Array("AS3ValType", val)
        )
    );
#endif /* DO_SPAM */

  if (AS3_InstanceOf(val, Number_class))
  {
    lua_pushnumber(L, AS3_NumberValue(val));
  }
  else if (AS3_InstanceOf(val, int_class))
  {
    lua_pushinteger(L, AS3_IntValue(val));
  }
  else if (AS3_InstanceOf(val, String_class))
  {
    size_t length = 0;
    AS3_Malloced_Str str = get_string_bytes(val, &length);
    lua_pushlstring(L, str, length);
    free(str);
  }
  else if (AS3_InstanceOf(val, Boolean_class))
  {
    lua_pushboolean(L, AS3_IntValue(val));
  }
  else if (val == AS3_Undefined())
  {
    lua_pushnil(L);
  }
  else if (is_null(val))
  {
    lua_pushnil(L);
  }
  else
  {
    SPAM(("push_as3_to_lua_stack_if_convertible(): not convertible"));
    LRETURN(L, stack, 0);
  }

  SPAM(("push_as3_to_lua_stack_if_convertible(): end"));

  LRETURN(L, stack, 1);
}
Exemplo n.º 2
0
int push_as3_array_to_lua_stack(lua_State * L, AS3_Val array)
{
  LCALL(L, stack);

  int len = 0;
  int i = 0;
  AS3_Val cur;
  AS3_Val len_v;

  if (!AS3_InstanceOf(array, Array_class))
  {
    LRETURN(L, stack, 0);
  }

  len_v = AS3_GetS(array, "length");
  len = AS3_IntValue(len_v);
  SAFE_RELEASE(len_v);

  for (i = 0; i < len; i++)
  {
    AS3_Val i_v = AS3_Int(i);
    cur = AS3_Get(array, i_v);
    SAFE_RELEASE(i_v);
    /* TODO: This probably should be push_as3_to_lua_stack */
    push_as3_lua_userdata(L, cur);
    SAFE_RELEASE(cur);
  }

  LRETURN(L, stack, len);
}
Exemplo n.º 3
0
int push_as3_array_to_lua_stack_convert_values(lua_State * L, AS3_Val array)
{
  LCALL(L, stack);

  int len = 0;
  int i = 0;
  AS3_Val cur;
  AS3_Val len_v;

  if (!AS3_InstanceOf(array, Array_class))
  {
    LRETURN(L, stack, 0);
  }

  len_v = AS3_GetS(array, "length");
  len = AS3_IntValue(len_v);
  SAFE_RELEASE(len_v);

  for (i = 0; i < len; i++)
  {
    AS3_Val i_v = AS3_Int(i);
    cur = AS3_Get(array, i_v);
    SAFE_RELEASE(i_v);
    push_as3_to_lua_stack(L, cur);
    SAFE_RELEASE(cur);
  }

  LRETURN(L, stack, len);
}
Exemplo n.º 4
0
Arquivo: pdf.c Projeto: db00/reader
//Method exposed to ActionScript
//Takes a String and echos it
static AS3_Val echo(void* self, AS3_Val args)
{
	AS3_Val byteArray;
	AS3_ArrayValue( args, "AS3ValType", &byteArray);
	AS3_Val length = AS3_GetS(byteArray, "length");  

	sztrace("length getted!");
	int len = AS3_IntValue(length);
	//if(len>0) return length;

	char *data=NULL;
	data=malloc(len);
	memset(data,0,len);
	int fileLen = AS3_ByteArray_readBytes(data,byteArray, len);
	char *out= NULL;
	out = malloc(fileLen);
	memset(out,0,fileLen);



	ByteArray * bytearray = ByteArray_new(fileLen);
	bytearray->data = data;

	PdfFile_free(PdfFile_parse(bytearray,out));
	ByteArray_free(bytearray);

	return AS3_String(out);
}
Exemplo n.º 5
0
QSP_BOOL qspCallIsPlayingFile(QSP_CHAR *file)
{
	/* Здесь проверяем, проигрывается ли файл */
	QSPCallState state;
	QSP_BOOL isPlaying;
	AS3_Val args;
	char *strUTF8;
	if (qspCallBacks[QSP_CALL_ISPLAYINGFILE].IsSet)
	{
		qspSaveCallState(&state, QSP_TRUE, QSP_FALSE);
		if (file)
		{
			strUTF8 = qspW2C(file);
			args = AS3_Array("StrType", strUTF8);
			free(strUTF8);
		}
		else
			args = AS3_Array("StrType", 0);
		AS3_Call(qspCallBacks[QSP_CALL_ISPLAYINGFILE].FuncVal, qspCallBacks[QSP_CALL_ISPLAYINGFILE].ThisVal, args);
		AS3_Release(args);
		flyield();
		isPlaying = (QSP_BOOL)AS3_IntValue(result);
		AS3_Release(result);
		qspRestoreCallState(&state);
		return isPlaying;
	}
	return QSP_FALSE;
}
Exemplo n.º 6
0
static AS3_Val thunk_PacketToByteArray(void *gg_clientData, AS3_Val gg_args) {
	AS3_Val bytes;
	AS3_Val packet;
	AS3_ArrayValue(gg_args, "AS3ValType, AS3ValType",  &bytes,  &packet);
	AS3_Val actionVal = AS3_GetS(packet, "action");
	AS3_Val transactionIdVal = AS3_GetS(packet, "transactionId");
	AS3_Val protocolVersionVal = AS3_GetS(packet, "protocolVersion");
	AS3_Release(AS3_CallTS("writeByte", bytes, "IntType", AS3_IntValue(actionVal)));
	AS3_Release(AS3_CallTS("writeUnsignedInt", bytes, "IntType", AS3_IntValue(transactionIdVal)));
	AS3_Release(AS3_CallTS("writeShort", bytes, "IntType", AS3_IntValue(protocolVersionVal)));
	AS3_Release(actionVal);
	AS3_Release(transactionIdVal);
	AS3_Release(protocolVersionVal);
	AS3_Release(bytes);
	AS3_Release(packet);
	return NULL;
}
Exemplo n.º 7
0
static AS3_Val thunk_SubPieceRequestPacketToByteArray(void *gg_clientData, AS3_Val gg_args) {
	AS3_Val packet;
	AS3_Val bytes;
	AS3_ArrayValue(gg_args, "AS3ValType, AS3ValType",  &packet,  &bytes);
	AS3_Val subpieces = AS3_GetS(packet, "subpieces");
	AS3_Val lengthVal = AS3_GetS(subpieces, "length");
	AS3_Val priorityVal = AS3_GetS(packet, "priority");
	
	AS3_Release(AS3_CallTS("writeShort", bytes, "IntType", AS3_IntValue(lengthVal)));
	AS3_Release(AS3_CallTS("WriteSubpieces", packet, "AS3ValType", bytes));
	AS3_Release(AS3_CallTS("writeShort", bytes, "IntType", AS3_IntValue(priorityVal)));
	
	AS3_Release(subpieces);
	AS3_Release(lengthVal);
	AS3_Release(priorityVal);
	AS3_Release(packet);
	AS3_Release(bytes);
	return NULL;
}
static AS3_Val initparam(void* self, AS3_Val args) {
	AS3_Val	tmp = AS3_Undefined();
    int il, len;

    for (il=0; il < sizeof(models)/sizeof(LAYER); ++il) {
        tmp = AS3_Get(args, AS3_Int(2*il));
        len = AS3_IntValue(AS3_GetS(tmp, "length"));
        models[il].w = (float*) malloc(len);
        AS3_ByteArray_readBytes(models[il].w, tmp, len);

        tmp = AS3_Get(args, AS3_Int(2*il+1));
        len = AS3_IntValue(AS3_GetS(tmp, "length"));
        models[il].b = (float*) malloc(len);
        AS3_ByteArray_readBytes(models[il].b, tmp, len);
    }
    
    data = (float*) malloc(BUF_SIZE);
    o = (float*) malloc(BUF_SIZE);
        
	return AS3_Int(0);
}
Exemplo n.º 9
0
// Go check a Flash event queue for events SDL should be aware of!
void FLASH_PumpEvents(_THIS)
{
	if (!FLASH_EMPTY_PARAMS)
		FLASH_EMPTY_PARAMS = AS3_Array("");
	
	// Event Vars
	AS3_Val mouseEvent, mouseEvents, mousePosition, keyboardEvent, keyboardEvents;
	int buttonState, rawKeyboardEvent, scanCode, keyState;
	SDL_keysym keysym;
	
	mousePosition = AS3_CallS( "pumpMousePosition", FLASH_EVENT_MANAGER_OBJECT, FLASH_EMPTY_PARAMS );
	mouseEvents = AS3_CallS( "pumpMouseEvents", FLASH_EVENT_MANAGER_OBJECT, FLASH_EMPTY_PARAMS );
	keyboardEvents = AS3_CallS( "pumpKeyEvents", FLASH_EVENT_MANAGER_OBJECT, FLASH_EMPTY_PARAMS );
	
	// Mouse Position
	if (mousePosition) {
		AS3_ObjectValue( mousePosition, "x:IntType, y:IntType", &FLASH_mouseX, &FLASH_mouseY );	
		SDL_PrivateMouseMotion( 0, 0, FLASH_mouseX, FLASH_mouseY );
	}
	
	// Mouse Click Events
	while( AS3_IntValue(AS3_GetS(mouseEvents, "size")) > 0 ) {
		mouseEvent = AS3_CallS( "dequeue", mouseEvents, FLASH_EMPTY_PARAMS );
		buttonState = AS3_IntValue( mouseEvent )? SDL_PRESSED: SDL_RELEASED;
		SDL_PrivateMouseButton(buttonState, SDL_BUTTON_LEFT, FLASH_mouseX, FLASH_mouseY);
	}
	
	// Keyboard Events
	while( AS3_IntValue(AS3_GetS(keyboardEvents, "size")) > 0 ) {
		keyboardEvent = AS3_CallS( "dequeue", keyboardEvents, FLASH_EMPTY_PARAMS );
		rawKeyboardEvent = AS3_IntValue( keyboardEvent );
		scanCode = rawKeyboardEvent & 0xFF;		// Packed event format: 9th bit for press/release, lower 8 bits for scan code
		keyState = rawKeyboardEvent >> 8;
		SDL_PrivateKeyboard(keyState, TranslateKey(scanCode, &keysym));
	}
}
Exemplo n.º 10
0
int qspCallGetMSCount()
{
	/* Здесь получаем количество миллисекунд, прошедших с момента последнего вызова функции */
	QSPCallState state;
	int count;
	AS3_Val args;
	if (qspCallBacks[QSP_CALL_GETMSCOUNT].IsSet)
	{
		qspSaveCallState(&state, QSP_TRUE, QSP_FALSE);
		args = AS3_Array("");
		AS3_Call(qspCallBacks[QSP_CALL_GETMSCOUNT].FuncVal, qspCallBacks[QSP_CALL_GETMSCOUNT].ThisVal, args);
		AS3_Release(args);
		flyield();
		count = AS3_IntValue(result);
		AS3_Release(result);
		qspRestoreCallState(&state);
		return count;
	}
	return 0;
}
Exemplo n.º 11
0
int qspCallShowMenu()
{
	/* «десь показываем меню */
	QSPCallState state;
	int index;
	AS3_Val args;
	if (qspCallBacks[QSP_CALL_SHOWMENU].IsSet)
	{
		qspSaveCallState(&state, QSP_FALSE, QSP_TRUE);
		args = AS3_Array("");
		AS3_Call(qspCallBacks[QSP_CALL_SHOWMENU].FuncVal, qspCallBacks[QSP_CALL_SHOWMENU].ThisVal, args);
		AS3_Release(args);
		flyield();
		index = AS3_IntValue(result);
		AS3_Release(result);
		qspRestoreCallState(&state);
		return index;
	}
	return -1;
}
Exemplo n.º 12
0
static AS3_Val thunk_InitPeerDownloadInfo(void *gg_clientData, AS3_Val gg_args) {
	AS3_Val info;
	AS3_Val bytes;
	AS3_ArrayValue(gg_args, "AS3ValType, AS3ValType",  &info,  &bytes);	
	AS3_Val isDownloadingVal = AS3_CallTS("readUnsignedByte", bytes, "");
	
	if (AS3_IntValue(isDownloadingVal) == 1)
	{
		AS3_Val true = AS3_True();
		AS3_SetS(info, "isDownloading", true);
		AS3_Release(true);
	}
	else
	{
		AS3_Val false = AS3_False();
		AS3_SetS(info, "isDownloading", false);
		AS3_Release(false);
	}
	
	AS3_Val onLineTimeVal = AS3_CallTS("readUnsignedInt", bytes, "");
	AS3_Val avgDownloadVal = AS3_CallTS("readUnsignedShort", bytes, "");
	AS3_Val nowDownloadVal = AS3_CallTS("readUnsignedShort", bytes, "");
	AS3_Val avgUploadVal = AS3_CallTS("readUnsignedShort", bytes, "");
	AS3_Val nowUploadVal = AS3_CallTS("readUnsignedShort", bytes, "");
	AS3_SetS(info, "onLineTime", onLineTimeVal);
	AS3_SetS(info, "avgDownload", avgDownloadVal);
	AS3_SetS(info, "nowDownload", nowDownloadVal);
	AS3_SetS(info, "avgUpload", avgUploadVal);
	AS3_SetS(info, "nowUpload", nowUploadVal);
	AS3_ByteArray_seek(bytes, 3, 1);	// ignore 3 byte reserved bytes	
	
	AS3_Release(isDownloadingVal);
	AS3_Release(onLineTimeVal);
	AS3_Release(avgDownloadVal);
	AS3_Release(nowDownloadVal);
	AS3_Release(avgUploadVal);
	AS3_Release(nowUploadVal);	
	AS3_Release(bytes);
	AS3_Release(info);
	return NULL;
}
Exemplo n.º 13
0
static AS3_Val thunk_CreatePacketFromByteArray(void *gg_clientData, AS3_Val gg_args) {
	AS3_Val bytes;
	AS3_ArrayValue(gg_args, "AS3ValType",  &bytes);
	AS3_Val actionVal = AS3_CallTS("readUnsignedByte", bytes, "");
	AS3_Val transactionIdVal = AS3_CallTS("readUnsignedInt", bytes, "");	
	AS3_Val protocolVersionVal = AS3_CallTS("readUnsignedShort", bytes, "");
	
	AS3_Val pplive_protocol_namespace = AS3_String("com.pplive.p2p.network.protocol");
	AS3_Val PacketClass = AS3_NSGetS(pplive_protocol_namespace, "Packet");
	AS3_Val paramArray = AS3_Array("IntType, IntType, IntType",  AS3_IntValue(actionVal), AS3_IntValue(transactionIdVal), AS3_IntValue(protocolVersionVal));
	AS3_Val packet = AS3_New(PacketClass, paramArray);
	
	AS3_Release(paramArray);
	AS3_Release(PacketClass);
	AS3_Release(pplive_protocol_namespace);
	AS3_Release(protocolVersionVal);
	AS3_Release(transactionIdVal);
	AS3_Release(actionVal);
	AS3_Release(bytes);
	
	return packet;
}
static AS3_Val prediction(void* self, AS3_Val args) {
	AS3_Val	in_arr = AS3_Undefined(), out_arr = AS3_Array(0);
	float *tmp, d, e;
	int i,j,k,l, n,x,y, newx,newy, il, dx,dy;
	LAYER *pL;

	AS3_ArrayValue( args, "AS3ValType", &in_arr );

	for(i=0; i < 1024; ++i)
    	data[i] = AS3_IntValue(AS3_Get(in_arr, AS3_Int(4*i+1))) /255.0;
    	
    n = 1;
    x = 32;
    y = 32;
    
    #define DATA(l,j,i) data[((l)*y + (j))*x + (i)]
    #define O(k,dy,dx) o[((k)*newy + (dy))*newx + (dx)]
    #define W(k,l,j,i) pL->w[(((k)*n + (l))*pL->y + (j))*pL->x + (i)]
    
    for (il=0; il < nl; ++il) {
        flyield();
        pL = L+il;
        newx = x+1-pL->x;
        newy = y+1-pL->y;

        for (dx=0; dx < newx; ++dx)
        for (dy=0; dy < newy; ++dy)
        for (k=0; k < pL->n; ++k) {
            d = pL->b[k];
            for (l=0; l < n; ++l)
            for(j=0; j < pL->y; ++j)
            for(i=0; i < pL->x; ++i)
                d += DATA(l,j+dy,i+dx)*W(k,l,j,i);
            O(k,dy,dx) = d;
        }

        if(pL->maxpool) {
            for (k=0; k < pL->n; ++k)
            for (dx=0; dx < newx; dx+=2)
            for (dy=0; dy < newy; dy+=2) {
                d=O(k,dy,dx);
                e=O(k,dy,dx+1); if(e>d) d=e;
                e=O(k,dy+1,dx); if(e>d) d=e;
                e=O(k,dy+1,dx+1); if(e>d) d=e;
                O(k,dy/2,dx/2)=d;
            }
            newx /= 2;
            newy /= 2;
        }

        for (dx=0; dx < newx; ++dx)
        for (dy=0; dy < newy; ++dy) {
            e = 0;
            for (k=0; k < pL->n; ++k) {
                d = O(k,dy,dx);
                if(pL->nonlin==1) d=1.0/(1.0 + exp(-d));
                else if(pL->nonlin==2) d=tanh(d);
                else if(pL->nonlin==3) { d=exp(d); e += d; }
                O(k,dy,dx) = d;
            }
            if(pL->nonlin==3 && e)
            for (k=0; k < pL->n; ++k)
                O(k,dy,dx) /= e;
        }
        
        tmp = data;
        data = o;
        o = tmp;
        
        x = newx;
        y = newy;
        n = pL->n;
    }

	for(i=0; i < n*x*y; ++i)
        AS3_Set(out_arr, AS3_Int(i), AS3_Number(data[i]));

	return out_arr;
}
Exemplo n.º 15
0
static AS3_Val thunk_InitBlockMap(void *gg_clientData, AS3_Val gg_args) {
	AS3_Val map;
	AS3_Val bytes;
	AS3_ArrayValue(gg_args, "AS3ValType, AS3ValType",  &map,  &bytes);
	AS3_Val blockCountVal = AS3_CallTS("readUnsignedInt", bytes, "");
	AS3_Val bitset = AS3_GetS(map, "bitset");
	
	AS3_SetS(map, "blockCount", blockCountVal);
	AS3_Release(AS3_CallTS("readBytes", bytes, "AS3ValType, IntType, IntType", bitset, 0, (int)((AS3_IntValue(blockCountVal) + 7) / 8)));
	
	AS3_Release(blockCountVal);
	AS3_Release(bitset);
	AS3_Release(map);
	AS3_Release(bytes);
	return NULL;
}