Ejemplo n.º 1
0
txSlot* fx_Date_prototype_getUTC_aux(txMachine* the, txTimeDescription* td)
{
	txSlot* slot = fxCheckDate(the, mxThis);
	txNumber number;
	c_time_t time;
	txInteger year = 0;

	if (!slot) mxTypeError("this is no date");
	number = slot->value.number;
	if (c_isnan(number)) {
		mxResult->value.number = C_NAN;
		mxResult->kind = XS_NUMBER_KIND;
		return C_NULL;
	}
	c_memset(td, 0, sizeof(txTimeDescription));
	td->tm.tm_mday = 1;
	td->ms = (int)c_floor(c_fmod(number, 1000.0));
	number /= 1000.0;
	//if ((number < gxMinTime) || (gxMaxTime < number))
	//	mxTypeError("invalid time");
	
	if(number > TIME_2032) { // 2032 <= number <= 2099
    	year = (int)((number - TIME_2032)/TIME_FourYear);
    	number -= TIME_FourYear * year;
    	year *= 4;
	}
	time = (c_time_t)c_floor(number);
	td->tm = *c_gmtime(&time);
	td->tm.tm_year += year;
	if( (td->ms < 0) && (td->ms > -1000) )
		td->ms = 1000 + td->ms;
	mxResult->kind = XS_INTEGER_KIND;	
	return slot;
}
Ejemplo n.º 2
0
txIndex fxArgToArrayLimit(txMachine* the, txInteger argi)
{
	if (mxArgc > argi) {
		txNumber i = c_trunc(fxToNumber(the, mxArgv(argi)));
		if (c_isnan(i))
			i = 0;
		else if (i < 0)
			i = 0;
		else if (i > XS_MAX_INDEX)
			i = XS_MAX_INDEX;
		return (txIndex)i;
	}
	return XS_MAX_INDEX;
}
Ejemplo n.º 3
0
txIndex fxArgToIndex(txMachine* the, txInteger argi, txIndex index, txIndex length)
{
	if (mxArgc > argi) {
		txNumber c = length;
		txNumber i = c_trunc(fxToNumber(the, mxArgv(argi)));
		if (c_isnan(i))
			i = 0;
		if (i < 0) {
			i = c + i;
			if (i < 0)
				i = 0;
		}
		else if (i > c)
			i = c;
		index = (txIndex)i;
	}
	return index;
}