⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jam_adaptation.c

📁 java 1.1 gemini 08_16
💻 C
📖 第 1 页 / 共 4 页
字号:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2001
*
*****************************************************************************/

/*****************************************************************************
 *
 * Filename:
 * ---------
 *   jam_adaptation.c
 *
 * Project:
 * --------
 *   Maui_Software
 *
 * Description:
 * ------------
 *   This file implements JAM (Java Application Manager) and other module
 *  adaptation interface layer.
 *
 * Author:
 * -------
 * -------
 *
 *============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
 ****************************************************************************/

/*************************************************************************
 * Include Header Files
 *************************************************************************/
#include <kni.h>
#include <defaultLCDUI.h>
#include <imageDecode.h>
#include <images.h>
#include "jam_msg_handler.h"
#include "jam_internal.h"
#include "global.h"
#include "storage.h"
#include "commandState.h"
#include "gdi_include.h"
#include "gd_primitive.h"
#include "gdi_util.h"
#include "installer.h" // For __SUPPORT_INDEX_STORAGE_NAME__

/*************************************************************************
 * External Declaration
 *************************************************************************/
extern kal_int32 skipOneStringField(kal_uint8* myBuffer, kal_int32 scanPosition);
extern kal_uint32 update_crc(kal_uint32 crc, kal_uint8 *buf, kal_int32 len);
extern void jpush_push_deletesuite(char *store);
extern void jam_trans_midlist_icondata(kal_uint8* icon, kal_int32 icon_len, 
									   kal_int32 width, kal_int32 height);
extern kal_bool jam_get_removal_confirm(game_type_enum type, kal_int32 MIDSID);
extern void UCS2ToUTF8(kal_char* toString, kal_uint8* myBuffer, 
					   kal_uint32 scanOffset, kal_uint32 length);

extern void javaFileRecovery(game_type_enum type);
extern void javaFileRemoveAll(game_type_enum type);
extern void j2me_send_alertuser(char* message, int len);

extern kal_int32 jam_start_up(game_type_enum type, kal_int32 mids_id, 
							  kal_wchar* mid_name_str);
extern void jam_tck_start_up(java_mode_enum tck_mode, kal_bool to_execute);
extern kal_int32 jam_get_setting(game_type_enum type, mmi_setting_struct *get_setting_ptr, 
								 mmi_setting_struct *max_setting, kal_int32 mids_id, 
								 mids_list_info_struct *mids_info_ptr, kal_bool* is_trused);
extern kal_int32 jam_set_setting(game_type_enum type, mmi_setting_struct *set_setting_ptr, 
								 kal_int32 mids_id, mids_list_info_struct* mids_info_ptr);
extern void jam_remove_midlet_suite(game_type_enum type, kal_int32 mids_id, kal_bool *commit);
extern void jam_update_midlet_suite(game_type_enum type, kal_int32 mids_id);
extern void jam_install_midlet_suite(game_type_enum type, kal_wchar* jad_file_name, 
									 kal_wchar* jar_file_name, kal_wchar* download_url);

extern kal_int32 jam_get_event_abort_handler(void);
extern kal_wchar* jam_get_jar_storage_name(void* (*malloc)(int size), kal_int32 MIDS_id);
extern kal_bool jam_clean_and_recovery_storage(game_type_enum type);

#ifdef OGDR_SECURITY_SETTING
extern kal_int32 jam_get_domain_list(game_type_enum type, kal_int32* total_domain, kal_wchar domains[10][30]);
extern kal_int32 jam_get_default_setting(game_type_enum type, kal_int32 domain_id, mmi_setting_struct* max_setting, mmi_setting_struct* default_setting);
extern kal_int32 jam_set_default_setting(game_type_enum type, kal_int32 domain_id, mmi_setting_struct* default_setting);
extern kal_int32 jam_reset_default_permission_setting(game_type_enum type);
#endif

kal_bool commit_removal = KAL_FALSE;

/*************************************************************************
 * Internal Macro
 *************************************************************************/
#define RGB_TRANSPARENT_COLOR_16				(0x1234)

#if LITTLE_ENDIAN
	#define FixUCS2Endian(ucs2str_ptr){\
    int scanIndex = 0;\
    while(ucs2str_ptr[scanIndex] != 0){\
        ucs2str_ptr[scanIndex] = ((ucs2str_ptr[scanIndex] >> 8) | (ucs2str_ptr[scanIndex] << 8));\
        scanIndex ++;\
    }}
#else
	#define FixUCS2Endian(ucs2str_ptr)
#endif


#define traslateInt(integer) \
	((kal_uint32)integer >> 24) | ((((kal_uint32)integer << 8) >> 24) << 8) | \
	((((kal_uint32)integer << 16) >> 24) << 16) | ((kal_uint32)integer << 24)

#define getMIDSInt(myBuffer, offset) \
    (((kal_uint32)myBuffer[offset] << 24) | ((kal_uint32)myBuffer[offset + 1] << 16) | \
        ((kal_uint32)myBuffer[offset + 2] << 8) | myBuffer[offset + 3])

void* LCDUIDrawScaled(void *dst, void *img,
					  jint dst_width, jint dst_height, 
					  jint* x_src, jint* y_src,
					  jint* width, jint* height)
{

	pImageGC src_ = (pImageGC)((img==NULL)?NULL:(((BYTEARRAY)img)->bdata));
	int srcWidth   = src_->width;
	int srcHeight  = src_->height;

	if (dst_width == 0 || dst_height == 0 || *height == 0 || *width == 0)
	{
		return NULL;
	} else
	{
		BYTEARRAY scaledB  = (BYTEARRAY)instantiateArrayKNI(PrimitiveArrayClasses[T_BYTE], 
															(dst_width * dst_height * 2 + sizeof(ImageGC)));
		pImageGC scaledSrc;
#ifdef GDI_USING_HW_RESIZER
		BOOL hardwareDone = KAL_FALSE; 
		if (scaledB == NULL)
			return NULL;
		scaledSrc = (pImageGC)scaledB->bdata;
		if (src_->prop == HAS_SOLID)
		{
			unsigned char *srcImage = ((unsigned char *)src_->u.data) + ((*x_src + *y_src * srcWidth) << 1);
			unsigned char *dstImage = (unsigned char*)scaledSrc->u.data;
			srcImage = (U8*)FBBR_invalid_l1_cache_img(srcImage, 0, 0, *width, *height, *width);
			dstImage = (U8*)FBBR_invalid_l1_cache_img(dstImage, 0, 0, dst_width, dst_height, dst_width);
			if (gdi_resizer((U8*)srcImage, *width, *height, srcWidth, dstImage, 
							dst_width, dst_height, 0, 0, dst_width - 1, dst_height -1) == GDI_IMAGE_SUCCEED)
			{
				hardwareDone = TRUE;
			}
		}

		if (!hardwareDone) /* use software resizer */
#endif
		{
			int xIncr = (*width << 16) / dst_width;
			int yIncr = (*height << 16) / dst_height;
			int srcScanX = 0; /* rounding */
			int srcScanY = 0; /* rounding */
			unsigned char *srcImage = ((unsigned char *)src_->u.data) + ((*x_src + *y_src * srcWidth) << 1);
			unsigned char *dstImage = NULL;
			unsigned char *dstImageEnd = dstImage + ((dst_width * dst_height) << 1);
			int tempSrcWidth = srcWidth << 1;
			int tempDstWidth = dst_width << 1;
			if (scaledB == NULL)
				return NULL;
			scaledSrc = (pImageGC)scaledB->bdata;
			dstImage = (unsigned char*)scaledSrc->u.data;
			do
			{
				unsigned char* srcScanImage = srcImage + ((srcScanY >> 16) * tempSrcWidth);
				int scanLine = 0;
				srcScanY += yIncr;
				srcScanX = 0; /* rounding */
				do
				{
					((unsigned short *)dstImage)[scanLine] = ((unsigned short*)srcScanImage)[(srcScanX >> 16)];
					srcScanX += xIncr;
					scanLine ++;
				}while (scanLine < dst_width);
				dstImage += tempDstWidth;
			}while (dstImage < dstImageEnd);
		}
		scaledSrc->prop = src_->prop;
		scaledSrc->width = dst_width;
		scaledSrc->height = dst_height;
		*x_src = 0;
		*y_src = 0;
		srcWidth = dst_width;
		srcHeight = dst_height;
		*width = dst_width;
		*height = dst_height;
		return scaledB;
	}
}


/* for removal */
static int removeSuiteFromSUITEUTF(kal_char* storageName)
{
	kal_char *myError = NULL;
	kal_int32 handle;
	kal_char *content;
	kal_int32 scanPos = 0;
	kal_uint32 CRCCode;
	kal_int32 strLen = strlen(storageName);
	int scanStrLen = 0;
	int size;
#ifdef __SUPPORT_MIDLETSUITE_HASH_VALUE__
	char* hash_content=NULL;
	int hash_content_size = 0;
	int record_index = 0;
#endif

	handle = storageOpen(&myError, "suites.utf", O_RDWR|O_BINARY);

	size = storageSizeOf(&myError, handle);
	content = (kal_char*)midpMalloc(size);
	storageRead(&myError, handle, content, size);
	storageClose(&myError, handle);

#ifdef __SUPPORT_MIDLETSUITE_HASH_VALUE__
	handle = storageOpen(&myError, SUITE_HASH_FILENAME, O_RDWR|O_BINARY);

	hash_content_size = storageSizeOf(&myError, handle) - 4; //discard CRC
	hash_content = (kal_char*)midpMalloc(hash_content_size);
	if(hash_content==NULL)
	{
		return -1;
	}
	storageRead(&myError, handle, hash_content, hash_content_size);
	storageClose(&myError, handle);
#endif	
	while (scanPos < size - 4)
	{
		scanStrLen = ((kal_uint8 *)content)[scanPos + 1];
		scanStrLen += ((kal_uint8 *)content)[scanPos] << 8;

		if (strLen == strlen(content + scanPos + 2) &&
			strncmp(content + scanPos + 2, storageName, strLen) == 0)
			break;

		scanPos += scanStrLen + 2;
#ifdef __SUPPORT_MIDLETSUITE_HASH_VALUE__
		record_index++;
#endif		
	}
	if (scanPos >= size - 4) /* can not find out the suite in suite.utf */
		return -1;
	/* the old CRC code is not useful at all, omit copying it */
	memcpy(content + scanPos, content + scanPos + scanStrLen + 2, size - scanPos - scanStrLen - 2 - 4);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -