static void cfe_init_ui(void)
{
    ui_init_cmddisp();

    OPTIONAL(ui_init_envcmds());
    OPTIONAL(ui_init_devcmds());
#if CFG_NETWORK
    ui_init_netcmds();
#endif
    ui_init_loadcmds();
    OPTIONAL(ui_init_memcmds());

#if CFG_PCI
    ui_init_pcicmds();
#endif
    OPTIONAL(ui_init_examcmds());
    ui_init_flashcmds();
#if CFG_VAPI
    ui_init_vapicmds();
#endif
    ui_init_hccmd();

#if CFG_VENDOR_EXTENSIONS
    ui_init_vendorcmds();
#endif

    OPTIONAL(ui_init_misccmds());

}
Esempio n. 2
0
	}
	
	(*which_discard)++;
}

DEFINE_RULE(branch_discard_1)
	auto_consume_whitespace = 0;
	SEQ(
		RULE(token, "a"),
		CHOOSE(
			RULE(token, "x"), // which_discard == 0
			RULE(token, "y"), // which_discard == 1
			RULE(token, "z"), // which_discard == 2
			RULE(token, "b")
		),
		OPTIONAL(RULE(token,"q")), // which_discard == 3
		RULE(token,"c"),
		NEG_LOOKAHEAD(RULE(token,"1")), // which_discard == 4
		RULE(token,"d")
	);
END_RULE

DEFINE_RULE(branch_discard_2)
	auto_consume_whitespace = 0;
	SEQ(
		ZERO_OR_MORE(RULE(token, "a")), // which_discard == 5
		RULE(token,"b"),
		ONE_OR_MORE(RULE(token, "a"))   // which_discard == 6
	);
END_RULE
// http://msdn.microsoft.com/en-us/library/ms725481.aspx
bool TimeZoneService::cbGetTimeZoneFromEasData(LSHandle* lsHandle, LSMessage *message,
											   void *user_data)
{
	std::string reply;
	bool ret;
	LSError lsError;
	json_object* root = 0;
	json_object* label = 0;

	int easBias;
	EasSystemTime easStandardDate;
	int easStandardBias;
	EasSystemTime easDaylightDate;
	int easDaylightBias;

	LSErrorInit(&lsError);

	easBias = 0;
	easStandardDate.valid = false;
	easStandardBias = 0;
	easDaylightDate.valid = false;
	easDaylightBias = 0;

    // {"bias": integer, standardDate:{"year": integer, "month": integer, "dayOfWeek": integer, "day": integer, "hour": integer, "minute": integer, "second": integer}, "standardBias": integer, "daylightDate":{"year": integer, "month": integer, "dayOfWeek": integer, "day": integer, "hour": integer, "minute": integer, "second": integer}, "daylightBias": integer}
    VALIDATE_SCHEMA_AND_RETURN(lsHandle,
                               message,
                               SCHEMA_5(REQUIRED(bias, integer), NAKED_OBJECT_OPTIONAL_7(standardDate, year, integer, month, integer, dayOfWeek, integer, day, integer, hour, integer, minute, integer, second, integer), OPTIONAL(standardBias, integer), NAKED_OBJECT_OPTIONAL_7(daylightDate, year, integer, month, integer, dayOfWeek, integer, day, integer, hour, integer, minute, integer, second, integer),OPTIONAL(daylightBias, integer)));
	
	const char* payload = LSMessageGetPayload(message);
	if (!payload) {
		reply = "{\"returnValue\": false, "
				" \"errorText\": \"No payload specifed for message\"}";
		goto Done;
	}

	root = json_tokener_parse(payload);
	if (!root || is_error(root)) {
		reply = "{\"returnValue\": false, "
				" \"errorText\": \"Cannot parse json payload\"}";
		goto Done;
	}

	// bias. mandatory (everything else is optional)
	label = json_object_object_get(root, "bias");
	if (!label || !json_object_is_type(label, json_type_int)) {
		reply = "{\"returnValue\": false, "
				" \"errorText\": \"bias value missing\"}";
		goto Done;
	}
	easBias = json_object_get_int(label);

	// standard date
	label = json_object_object_get(root, "standardDate");
	if (label && json_object_is_type(label, json_type_object))
		readEasDate(label, easStandardDate);

	// standard bias
	label = json_object_object_get(root, "standardBias");
	if (label && json_object_is_type(label, json_type_int))
		easStandardBias = json_object_get_int(label);

	// daylight date
	label = json_object_object_get(root, "daylightDate");
	if (label && json_object_is_type(label, json_type_object))
		readEasDate(label, easDaylightDate);

	// daylight bias
	label = json_object_object_get(root, "daylightBias");
	if (label && json_object_is_type(label, json_type_int))
		easDaylightBias = json_object_get_int(label);

	// Both standard and daylight bias need to specified together,
	// otherwise both are invalid
	if (!easDaylightDate.valid)
		easStandardDate.valid = false;

	if (!easStandardDate.valid)
		easDaylightDate.valid = false;

	{
		// Get all timezones matching the current offset
		PrefsHandler* handler = PrefsFactory::instance()->getPrefsHandler("timeZone");
		TimePrefsHandler* tzHandler = static_cast<TimePrefsHandler*>(handler);
		TimeZoneService* tzService = TimeZoneService::instance();

		std::list<std::string> timeZones = tzHandler->getTimeZonesForOffset(-easBias);

		if (timeZones.empty()) {

			reply = "{\"returnValue\": false, "
					" \"errorText\": \"Failed to find any timezones with specified bias value\"}";
			goto Done;
		}

		if (!easStandardDate.valid) {
			// No additional data available for refinement. Just use the
			// first timezone entry in the list
			json_object* obj = json_object_new_object();
			json_object_object_add(obj, "returnValue", json_object_new_boolean(true));
			json_object_object_add(obj, "timeZone", json_object_new_string(timeZones.begin()->c_str()));
			reply = json_object_to_json_string(obj);
			json_object_put(obj);

			goto Done;
		}
		else {

			time_t utcTime = time(NULL);
			struct tm* localTime = localtime(&utcTime);
			int currentYear = localTime->tm_year + 1900;

			updateEasDateDayOfMonth(easStandardDate, currentYear);
			updateEasDateDayOfMonth(easDaylightDate, currentYear);
				
			
			for (std::list<std::string>::const_iterator it = timeZones.begin();
				 it != timeZones.end(); ++it) {
				TimeZoneEntry tzEntry;
				tzEntry.tz = (*it);
				tzEntry.years.push_back(currentYear);

				TimeZoneResultList tzResultList = tzService->getTimeZoneRuleOne(tzEntry);
				if (tzResultList.empty())
					continue;

				const TimeZoneResult& tzResult = tzResultList.front();
	
				printf("For timezone: %s\n", tzEntry.tz.c_str());
				printf("year: %d, utcOffset: %lld, dstOffset: %lld, dstStart: %lld, dstEnd: %lld\n",
					   tzResult.year, tzResult.utcOffset, tzResult.dstOffset,
					   tzResult.dstStart, tzResult.dstEnd);

				// Set this timezone as the current timezone, so that we can calculate when the
				// DST transitions occurs in seconds for the specified eas data
				setenv("TZ", tzEntry.tz.c_str(), 1);

				struct tm tzBrokenTime;
				tzBrokenTime.tm_sec = easStandardDate.second;
				tzBrokenTime.tm_min = easStandardDate.minute;
				tzBrokenTime.tm_hour = easStandardDate.hour;
				tzBrokenTime.tm_mday = easStandardDate.day;
				tzBrokenTime.tm_mon = easStandardDate.month - 1;
				tzBrokenTime.tm_year = currentYear - 1900;
				tzBrokenTime.tm_wday = 0;
				tzBrokenTime.tm_yday = 0;
				tzBrokenTime.tm_isdst = 1;

				time_t easStandardDateSeconds = ::mktime(&tzBrokenTime);

				tzBrokenTime.tm_sec = easDaylightDate.second;
				tzBrokenTime.tm_min = easDaylightDate.minute;
				tzBrokenTime.tm_hour = easDaylightDate.hour;
				tzBrokenTime.tm_mday = easDaylightDate.day;
				tzBrokenTime.tm_mon = easDaylightDate.month - 1;
				tzBrokenTime.tm_year = currentYear - 1900;
				tzBrokenTime.tm_wday = 0;
				tzBrokenTime.tm_yday = 0;
				tzBrokenTime.tm_isdst = 0;

				time_t easDaylightDateSeconds = ::mktime(&tzBrokenTime);

				printf("eas dstStart: %ld, dstEnd: %ld\n", easDaylightDateSeconds, easStandardDateSeconds);
				
				if (easStandardDateSeconds == tzResult.dstEnd &&
					easDaylightDateSeconds == tzResult.dstStart) {
					// We have a winner
					json_object* obj = json_object_new_object();
					json_object_object_add(obj, "returnValue", json_object_new_boolean(true));
					json_object_object_add(obj, "timeZone", json_object_new_string(tzEntry.tz.c_str()));
					reply = json_object_to_json_string(obj);
					json_object_put(obj);
					goto Done;
				}
			}

			reply = "{\"returnValue\": false, "
					" \"errorText\": \"Failed to find any timezones with specified parametes\"}";
		}
	}

Done:

	ret = LSMessageReply(lsHandle, message, reply.c_str(), &lsError);
	if (!ret)
		LSErrorFree(&lsError);

	if (root && !is_error(root))
		json_object_put(root);

	return true;	
}
Esempio n. 4
0
/*
 * main
 */
int main(int argc, char *argv[])
{
	#ifdef _NDSTOOL_P_H
		if (sizeof(Header) != 0x200) { fprintf(stderr, "Header size %d != %d\n", sizeof(Header), 0x200); return 1; }
	#endif

	if (argc < 2) { Help(); return 0; }
	
	int num_actions = 0;
	int actions[MAX_ACTIONS];

	/*
	 * parse parameters to actions
	 */

	for (int a=1; a<argc; a++)
	{
		if (argv[a][0] == '-')
		{
			switch (argv[a][1])
			{
				case 'i':	// show information
				{
					ADDACTION(ACTION_SHOWINFO);
					OPTIONAL(ndsfilename);
					break;
				}

				case 'f':	// fix header CRC
				{
					ADDACTION(ACTION_FIXHEADERCRC);
					OPTIONAL(ndsfilename);
					break;
				}

				case 's':	// en-/decrypt secure area
				{
					ADDACTION(ACTION_ENCRYPTSECUREAREA);
					endecrypt_option = argv[a][2];
					OPTIONAL(ndsfilename);
					break;
				}

				case 'l':	// list files
				{
					ADDACTION(ACTION_LISTFILES);
					OPTIONAL(ndsfilename);
					break;
				}

				case 'x':	// extract
				{
					ADDACTION(ACTION_EXTRACT);
					OPTIONAL(ndsfilename);
					break;
				}
				
				case 'w':	// wildcard filemasks
				{
					while (1)
					{
						char *filemask = 0;
						OPTIONAL(filemask);
						if (!(filemasks[filemask_num] = filemask)) break;
						if (++filemask_num >= MAX_FILEMASKS) return 1;
					}
					break;
				}

				case 'c':	// create
				{
					ADDACTION(ACTION_CREATE);
					OPTIONAL(ndsfilename);
					break;
				}

				// file root directory
				case 'd': REQUIRED(filerootdir); break;

				// ARM7 filename
				case '7': 
					if (argv[a][2] == 'i') {
						REQUIRED(arm7ifilename);
					} else {
						REQUIRED(arm7filename);
					}
					break;
				// ARM9 filename
				case '9':
					if (argv[a][2] == 'i') {
						REQUIRED(arm9ifilename);
					} else {
						REQUIRED(arm9filename);
					}
					break;

				// hook ARM7 executable
				case 'k':
				{
					ADDACTION(ACTION_HOOK);
					OPTIONAL(ndsfilename);
					break;
				}

				case 't':
					REQUIRED(bannerfilename);
					bannertype = BANNER_BINARY;
					break;

				case 'b':
					bannertype = BANNER_IMAGE;
					REQUIRED(bannerfilename);
					REQUIRED(bannertext);
					break;

				case 'o':
					REQUIRED(logofilename);
					break;

				case 'h':	// load header or header size
					REQUIRED(headerfilename_or_size);
					break;

				/*case 'u':	// unique ID file
					REQUIRED(uniquefilename);
					break;*/

				case 'u': // DSi title ID high word
					if (argc > a)
						titleidHigh = strtoul(argv[++a], 0, 16);
					break;

				case 'z': // SCFG access flags
					if (argc > a)
						scfgExtMask = strtoul(argv[++a], 0, 16);
					break;

				case 'a': // DSi access control flags
					if (argc > a)
						accessControl = strtoul(argv[++a], 0, 16);
					break;

				case 'p': // DSi application flags
					if (argc > a)
						appFlags = strtoul(argv[++a], 0, 16) & 0xFF;
					break;

				case 'v':	// verbose
					for (char *p=argv[a]; *p; p++) if (*p == 'v') verbose++;
					OPTIONAL(romlistfilename);
					break;

				case 'n':	// latency
					//compatibility = true;
					OPTIONAL_INT(latency1);
					OPTIONAL_INT(latency2);
					break;

				case 'r':	// RAM address
					switch (argv[a][2])
					{
						case '7': arm7RamAddress = (argc > a) ? strtoul(argv[++a], 0, 0) : 0; break;
						case '9': arm9RamAddress = (argc > a) ? strtoul(argv[++a], 0, 0) : 0; break;
						default: Help(argv[a]); return 1;
					}
					break;

				case 'e':	// entry point
					switch (argv[a][2])
					{
						case '7': arm7Entry = (argc > a) ? strtoul(argv[++a], 0, 0) : 0; break;
						case '9': arm9Entry = (argc > a) ? strtoul(argv[++a], 0, 0) : 0; break;
						default: Help(argv[a]); return 1;
					}
					break;

				case 'm':	// maker code
					REQUIRED(makercode);
					break;

				case 'g':	// game code
					REQUIRED(gamecode);
					OPTIONAL(makercode);
					OPTIONAL(title);
					OPTIONAL_INT(romversion);
					break;

				case 'y':	// overlay table file / directory
					switch (argv[a][2])
					{
						case '7': REQUIRED(arm7ovltablefilename); break;
						case '9': REQUIRED(arm9ovltablefilename); break;
						case 0: REQUIRED(overlaydir); break;
						default: Help(argv[a]); return 1;
					}
					break;
				
				case '?':	// global or specific help
				{
					Help(argv[a][2] ? argv[a]+2 : 0);	// 0=global help
					return 0;	// do not perform any other actions
				}

				default:
				{
					Help(argv[a]);
					return 1;
				}
			}
		}
		else
		{
			//Help();
			if (ndsfilename)
			{
				fprintf(stderr, "NDS filename is already given!\n");
				return 1;
			}
			ndsfilename = argv[a];
			break;
		}
	}

	Title();

	/*
	 * sanity checks
	 */

	if (gamecode)
	{
		if (strlen(gamecode) != 4)
		{
			fprintf(stderr, "Game code must be 4 characters!\n");
			return 1;
		}
		for (int i=0; i<4; i++) if ((gamecode[i] >= 'a') && (gamecode[i] <= 'z'))
		{
			fprintf(stderr, "Warning: Gamecode contains lowercase characters.\n");
			break;
		}
		if (gamecode[0] == 'A')
		{
			fprintf(stderr, "Warning: Gamecode starts with 'A', which might be used for another commercial product.\n");
		}
	}
	if (makercode && (strlen(makercode) != 2))
	{
		fprintf(stderr, "Maker code must be 2 characters!\n");
		return 1;
	}
	if (title && (strlen(title) > 12))
	{
		fprintf(stderr, "Title can be no more than 12 characters!\n");
		return 1;
	}
	if (romversion > 255) {
		fprintf(stderr, "romversion can only be 0 - 255!\n");
		return 1;
	}

	/*
	 * perform actions
	 */

	int status = 0;
	for (int i=0; i<num_actions; i++)
	{
//printf("action %d\n", actions[i]);
		switch (actions[i])
		{
			case ACTION_SHOWINFO:
				ShowInfo(ndsfilename);
				break;

			case ACTION_FIXHEADERCRC:
				FixHeaderCRC(ndsfilename);
				break;

			case ACTION_EXTRACT:
				fNDS = fopen(ndsfilename, "rb");
				if (!fNDS) { fprintf(stderr, "Cannot open file '%s'.\n", ndsfilename); exit(1); }
				fread(&header, 512, 1, fNDS);
				fclose(fNDS);

			printf("9i %s, 7i %s, unitcode %x\n",arm9ifilename,arm7ifilename, header.unitcode);
				if (arm9filename) Extract(arm9filename, true, 0x20, true, 0x2C, true);
				if (arm7filename) Extract(arm7filename, true, 0x30, true, 0x3C);
				if (header.unitcode & 2) {
					if (arm9ifilename) Extract(arm9ifilename, true, 0x1C0, true, 0x1CC, true);
					if (arm7ifilename) Extract(arm7ifilename, true, 0x1D0, true, 0x1DC);
				}
				if (bannerfilename) Extract(bannerfilename, true, 0x68, false, 0x840);
				if (headerfilename_or_size) Extract(headerfilename_or_size, false, 0x0, false, 0x200);
				if (logofilename) Extract(logofilename, false, 0xC0, false, 156);	// *** bin only
				if (arm9ovltablefilename) Extract(arm9ovltablefilename, true, 0x50, true, 0x54);
				if (arm7ovltablefilename) Extract(arm7ovltablefilename, true, 0x58, true, 0x5C);
				if (overlaydir) ExtractOverlayFiles();
				if (filerootdir) ExtractFiles(ndsfilename);
				break;

			case ACTION_CREATE:
				Create();
				break;

			case ACTION_LISTFILES:
				filerootdir = 0;
				/*status =*/ ExtractFiles(ndsfilename);
				break;
			
			case ACTION_HOOK:
			{
				Hook(ndsfilename, arm7filename);
				break;
			}

			case ACTION_ENCRYPTSECUREAREA:
			{
				/*status =*/ EnDecryptSecureArea(ndsfilename, endecrypt_option);
				break;
			}
		}
	}

	return (status < 0) ? 1 : 0;
}