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

📄 jam_adaptation.c

📁 java 1.1 gemini 08_16
💻 C
📖 第 1 页 / 共 4 页
字号:
					scan_off += temp + 2;
					/* mids icon */
					temp = TRANS_INT(ucs2str_ptr);
					Kread(handle, buffer + scan_off, temp + 20);
					ucs2str_ptr +=10 + (temp >> 1);
					scan_off += (temp >> 1) + 10;
					/* mid count */
					mid_count = TRANS_INT(ucs2str_ptr);
					Kread(handle, buffer + scan_off, 8);
					scan_off += 4;
					ucs2str_ptr += 4;

					for (j=0; j<mid_count; j++)
					{
						/* mid name */
						temp = TRANS_INT(ucs2str_ptr);
						Kread(handle, buffer + scan_off, (temp << 1) + 4);
						ucs2str_ptr +=2 + temp;
						scan_off += temp + 2;

						/* mid icon */
						temp = TRANS_INT(ucs2str_ptr);
						if (temp != 0)
						{
							/* skip the icon */
							Klseek(handle, temp + 16, SEEK_CUR);
						}
						/* remove the icon */
						ucs2str_ptr[0] = 0;
						ucs2str_ptr[1] = 0;
						ucs2str_ptr += 2;

						Kread(handle, buffer + scan_off, 4);

						scan_off += 2;
					}

					/* mids size */
					Kread(handle, buffer + scan_off, 4);
					scan_off += 2;
					ucs2str_ptr += 2;


					/* mids version */
					temp = TRANS_INT(ucs2str_ptr);
					Kread(handle, buffer + scan_off, (temp << 1) + 4);
					ucs2str_ptr +=2 + temp;
					scan_off += temp + 2;

					/* mids vendor */
					temp = TRANS_INT(ucs2str_ptr);
					Kread(handle, buffer + scan_off, (temp << 1) + 4);
					ucs2str_ptr +=2 + temp;
					scan_off += temp + 2;

					/* mids description */
					temp = TRANS_INT(ucs2str_ptr);
					Kread(handle, buffer + scan_off, (temp << 1) + 4);
					ucs2str_ptr +=2 + temp;
					scan_off += temp + 2;

					/* mids authorized */
					Kread(handle, buffer + scan_off, 2);
					ucs2str_ptr += 1;
					scan_off += 1;

					/* mids authorized by */
					temp = TRANS_INT(ucs2str_ptr);
					Kread(handle, buffer + scan_off, (temp << 1) + 4);
					ucs2str_ptr +=2 + temp;
					scan_off += temp + 2;

					/* mids auto start */


				} else
				{
					buffer = (kal_wchar*)j2me_midslist_mem_malloc(mids_info_size);
				}
			}

			if ((mids_info_ptr == NULL) || (buffer == NULL))
			{

				error_code = J2ME_INSUFFICIENT_MEMORY;
				/* jam_free_mids_listfile(); */
				if (mids_info_ptr != NULL)
					j2me_midslist_mem_free(mids_info_ptr);
				goto _mem_error_return_closefile;
			}

			/* b.3 save all mids info field */
			/* mids info size */
			if (!is_mid_icon_shrinked)
			{
				mids_info_ptr->mids_info_size = mids_info_size;         

				bytes_read = Kread(handle, buffer, mids_info_size);

				if (bytes_read != mids_info_size)
				{
					error_code = J2ME_READ_MIDS_LIST_FIlE_FAILURE;

					j2me_midslist_mem_free(mids_info_ptr);
					j2me_midslist_mem_free(buffer);
					goto _mem_error_return_closefile;
				}
			}

			/* Save raw data to speed up release */
			mids_info_ptr->mids_info_rawdata = (kal_uint8*)buffer;

			/* reference to raw data format */
			/* mids_name */
			ucs2str_ptr = buffer;
			temp = TRANS_INT(ucs2str_ptr);
			ucs2str_ptr += 2;/* 2 == sizeof(kal_int32)/sizeof(kal_wchar) */

			if (temp)
			{
				FixUCS2Endian(ucs2str_ptr);
				mids_info_ptr->mids_name = ucs2str_ptr;
			} else
				mids_info_ptr->mids_name = NULL;

			/* mids_root */
			ucs2str_ptr += temp;
			temp = TRANS_INT(ucs2str_ptr);
			ucs2str_ptr += 2;

			if (temp)
			{
				FixUCS2Endian(ucs2str_ptr);
				mids_info_ptr->mids_root = ucs2str_ptr;
			} else
				mids_info_ptr->mids_root = NULL;

			/* jad url */
			ucs2str_ptr += temp;
			temp = TRANS_INT(ucs2str_ptr);
			ucs2str_ptr += 2;

			if (temp)
			{
				FixUCS2Endian(ucs2str_ptr);
				mids_info_ptr->jad_url = ucs2str_ptr;
			} else
				mids_info_ptr->jad_url = NULL;


			/* jar url */
			ucs2str_ptr += temp;
			temp = TRANS_INT(ucs2str_ptr);
			ucs2str_ptr += 2;

			if (temp)
			{
				FixUCS2Endian(ucs2str_ptr);
				mids_info_ptr->jar_url = ucs2str_ptr;
			} else
				mids_info_ptr->jar_url = NULL;

			/* webside */
			ucs2str_ptr += temp;
			temp = TRANS_INT(ucs2str_ptr);
			ucs2str_ptr += 2;

			if (temp)
			{
				FixUCS2Endian(ucs2str_ptr);
				mids_info_ptr->webside = ucs2str_ptr;
			} else
				mids_info_ptr->webside = NULL;

			/* mids icon */
			ucs2str_ptr += temp;

			temp = TRANS_INT(ucs2str_ptr);
			mids_info_ptr->mids_icon.icon_size = temp;

			if (mids_info_ptr->mids_icon.icon_size)
			{
				ucs2str_ptr += 2;
				temp = TRANS_INT(ucs2str_ptr);
				mids_info_ptr->mids_icon.icon_width = temp;
				ucs2str_ptr += 2;
				temp = TRANS_INT(ucs2str_ptr);
				mids_info_ptr->mids_icon.icon_height = temp;
				ucs2str_ptr -= 4;
				mids_info_ptr->mids_icon.icon_data = (kal_uint8*)(ucs2str_ptr);

				temp = mids_info_ptr->mids_icon.icon_size/2 + 5*2;

				ASSERT((kal_uint32)(mids_info_ptr->mids_icon.icon_data + temp) < (kal_uint32)(buffer + mids_info_size/2));
				jam_trans_midlist_icondata(mids_info_ptr->mids_icon.icon_data, 
										   mids_info_ptr->mids_icon.icon_size, 
										   mids_info_ptr->mids_icon.icon_width,
										   mids_info_ptr->mids_icon.icon_height);
				ucs2str_ptr += temp;
			} else
			{
				ucs2str_ptr += 2;
			}

			/* Process MIDlet info */
			mids_info_ptr->mid_info.mid_count = mid_count = TRANS_INT(ucs2str_ptr);
			mids_info_ptr->mid_info.mid_info_size = mid_info_size = TRANS_INT((ucs2str_ptr + 2));
			mids_info_ptr->mid_info.mid_list = NULL;
			cur_mid_ptr = &mids_info_ptr->mid_info.mid_list;

			ucs2str_ptr += 2*2;
			temp = 0;

			for (j=0; j<mid_count; j++)
			{
				ucs2str_ptr += temp;
				temp = TRANS_INT(ucs2str_ptr);
				ucs2str_ptr += 2;

				mid_ptr = (mid_struct*)j2me_midslist_mem_malloc(sizeof(mid_struct));              
				if (mid_ptr == NULL)
				{
					error_code = J2ME_INSUFFICIENT_MEMORY;
					jam_listmem_finalize();
					jam_listmem_initialize();
					(*this_saved_mids_listfile_ptr) = NULL;
					goto _mem_error_return_closefile;
				}

				if (temp)
				{
					FixUCS2Endian(ucs2str_ptr);
					mid_ptr->mid_name = ucs2str_ptr;
				} else
					mid_ptr->mid_name = NULL;

				mid_ptr->mid_next = NULL;

				/* Process mid icon */
				ucs2str_ptr += temp;
				temp = TRANS_INT(ucs2str_ptr);
				mid_ptr->mid_icon.icon_size = temp;

				if (mid_ptr->mid_icon.icon_size)
				{
					ucs2str_ptr += 2;
					temp = TRANS_INT(ucs2str_ptr);
					mid_ptr->mid_icon.icon_width = temp;
					ucs2str_ptr += 2;
					temp = TRANS_INT(ucs2str_ptr);
					mid_ptr->mid_icon.icon_height = temp;
					ucs2str_ptr -= 4;
					mid_ptr->mid_icon.icon_data = (kal_uint8*)(ucs2str_ptr);

					temp = mid_ptr->mid_icon.icon_size/2 + 5*2;
					ASSERT((kal_uint32)(mid_ptr->mid_icon.icon_data + temp) < (kal_uint32)(buffer + mids_info_size/2));
					jam_trans_midlist_icondata(mid_ptr->mid_icon.icon_data, 
											   mid_ptr->mid_icon.icon_size,
											   mid_ptr->mid_icon.icon_width,
											   mid_ptr->mid_icon.icon_height);
				} else
				{
					temp = 2;
				}

				/* Link to list */
				/* modified by Justin to fix link list bug */
				if (j == 0)
					*cur_mid_ptr = mid_ptr;
				else
				{
					(*cur_mid_ptr)->mid_next = mid_ptr;
					cur_mid_ptr = &((*cur_mid_ptr)->mid_next);
				}
			}

			ucs2str_ptr = ucs2str_ptr + temp;

			/* mids size */
			temp = TRANS_INT(ucs2str_ptr);
			mids_info_ptr->mids_size = temp;
			ucs2str_ptr += 2;

			/* mids version */
			temp = TRANS_INT(ucs2str_ptr);
			ucs2str_ptr += 2;

			if (temp)
			{
				FixUCS2Endian(ucs2str_ptr);
				mids_info_ptr->mids_version = ucs2str_ptr;
			} else
				mids_info_ptr->mids_version	= NULL;

			/* mids vendor */
			ucs2str_ptr += temp;
			temp = TRANS_INT(ucs2str_ptr);
			ucs2str_ptr += 2;

			if (temp)
			{
				FixUCS2Endian(ucs2str_ptr);
				mids_info_ptr->mids_vendor = ucs2str_ptr;
			} else
				mids_info_ptr->mids_vendor = NULL;

			/* mids description */
			ucs2str_ptr += temp;
			temp = TRANS_INT(ucs2str_ptr);
			ucs2str_ptr += 2;

			if (temp)
			{
				FixUCS2Endian(ucs2str_ptr);
				mids_info_ptr->mids_description = ucs2str_ptr;
			} else
				mids_info_ptr->mids_description	= NULL;

			/* mids authorized */
			ucs2str_ptr = ucs2str_ptr + temp;
			temp = TRANS_SHORT(ucs2str_ptr);
			if (temp)
				mids_info_ptr->mids_authorized = KAL_TRUE;
			else
				mids_info_ptr->mids_authorized = KAL_FALSE;

			/* mids authorized by */
			ucs2str_ptr += 1;
			temp = TRANS_INT(ucs2str_ptr);
			ucs2str_ptr += 2;

			if (temp)
			{
				FixUCS2Endian(ucs2str_ptr);
				mids_info_ptr->mids_authorized_by = ucs2str_ptr;
			} else
				mids_info_ptr->mids_authorized_by = NULL;

			/* mids auto start */
			ucs2str_ptr += temp;
			temp = TRANS_INT(ucs2str_ptr);
			ucs2str_ptr += 2;

			if (temp)
			{
				FixUCS2Endian(ucs2str_ptr);
				mids_info_ptr->mids_auto_start = ucs2str_ptr;
			} else
				mids_info_ptr->mids_auto_start = NULL;

			/* Link to list */
			mids_info_ptr->mids_list_info_next = NULL;

			/* modified by Justin to fix the link list bug */
			if (i == mids_start_indx)
				*cur_mids_info_ptr = mids_info_ptr;
			else
			{
				(*cur_mids_info_ptr)->mids_list_info_next = mids_info_ptr;
				cur_mids_info_ptr = &((*cur_mids_info_ptr)->mids_list_info_next);
			}

//			(*this_saved_mids_listfile_ptr)->mids_count++;
			(*this_saved_mids_listfile_ptr)->mids_avail_count++;
		}
	}
	goto ok;
	_mem_error_return_closefile:
	if (parsing_pass == 0)
	{
		Kclose(handle);
		return jam_adp_parse_midslistfile(type, this_saved_mids_listfile_ptr, list_start_indx, list_count, mode, 1);
	} else
		ASSERT(0);
	ok:
	_error_return_closefile:

	/* Close mids list file */
	Kclose(handle);

	_error_return:

	return error_code;

}

kal_int32 
jam_adp_get_list(game_type_enum type, kal_int32 list_start_indx, kal_int32 list_count, 
						   mids_listfile_struct** this_saved_mids_listfile_ptr)
{
	return jam_adp_parse_midslistfile(type, this_saved_mids_listfile_ptr, list_start_indx, list_count, 
									  MIDS_PARSELIST_FULL_MODE, 0);
}

void 
jam_adp_call_back_init(jam_call_back_function_struct *call_back)
{
	call_back->jam_get_list = jam_adp_get_list;
	call_back->jam_free_list = jam_free_mids_listfile;
	call_back->jam_get_avail_storage = jvm_get_avail_storage;
	call_back->jam_get_total_storage = jvm_get_total_storage;
	call_back->jam_start_up = jam_start_up;
	call_back->jam_tck_start_up = jam_tck_start_up;
	call_back->jam_get_setting = jam_get_setting;
	call_back->jam_set_setting = jam_set_setting;
	call_back->jam_remove_midlet_suite = jam_remove_midlet_suite;
	call_back->jam_update_midlet_suite = jam_update_midlet_suite;
	call_back->jam_install_midlet_suite = jam_install_midlet_suite;
	call_back->jam_get_event_abort_handler = jam_get_event_abort_handler;
	call_back->jam_get_mids_id_from_push_name = getStorageNumberFromName;
	call_back->jam_get_jar_storage_name_from_mids_id = jam_get_jar_storage_name;
	call_back->jam_init = jam_clean_and_recovery_storage;
#ifdef OGDR_SECURITY_SETTING
	call_back->jam_get_domain_list = jam_get_domain_list;
	call_back->jam_get_default_setting = jam_get_default_setting;
	call_back->jam_set_default_setting = jam_set_default_setting;
	call_back->jam_reset_default_permission_setting = jam_reset_default_permission_setting;
#endif
}

char*
jam_current_midletsuite_name()
{
	return MidpCommandState.suiteStorageName;
}

⌨️ 快捷键说明

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