static bool
read_state_cb(struct sml_object *sml, void *data)
{
    float time, weekday;
    Context *ctx = data;
    GList *itr;

    time = get_time(ctx);
    weekday = get_weekday(ctx->read_counter, ctx->read_freq);

    if (ctx->time)
        sml_variable_set_value(sml, ctx->time, time);
    if (ctx->weekday)
        sml_variable_set_value(sml, ctx->weekday, weekday);

    if (ctx->debug)
        printf("%i::READ(%i%%) - Weekday:%s, TB: %d\n", ctx->read_counter,
            ctx->read_counter  * 100 / ctx->reads, WEEKDAYS[(int)weekday],
            (int)time);

    for (itr = ctx->inputs; itr; itr = itr->next) {
        Variable *var = itr->data;
        variable_set_value(sml, var, ctx->read_counter, ctx->debug, ctx->rand);
    }

    for (itr = ctx->outputs; itr; itr = itr->next) {
        Variable *var = itr->data;
        variable_set_value(sml, var, ctx->read_counter, ctx->debug, ctx->rand);
    }

    ctx->read_counter++;

    return true;
}
Example #2
0
uint16 no_os_get_weekday( uint32 value )
{
    uint16 year_out, month_out, day_out, hour_out, minute_out, second_out;
    parse_time( value, &year_out, &month_out, &day_out, &hour_out, &minute_out, &second_out );

    return get_weekday( year_out, month_out, day_out );
}
Example #3
0
int main(int argc, char *argv[])
{
	if (argc != 3) {
		fputs("./a.out <year> <mon>\n", stderr);
		exit(0);
	}

	int	year, mon;

	if ((year = atoi(argv[1])) < 1900) {
		fputs("the year must great than 1900\n", stderr);
		exit(0);
	}
	if ((mon = atoi(argv[2])) < 1 || mon > 12) {
		fputs("the month must between 1 and 12\n", stderr);
		exit(0);
	}
	show_cal(year, mon, get_weekday(year, mon, 1));
	exit(0);
}
Example #4
0
void no_os_get_ymd_hms_w( uint32 secs, int8 *value )
{
    //int8 *week_str[7] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
    //int8 *week_str[7] = { "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" };
    //int8 *week_str[7] = { "sun", "mon", "tue", "wed", "thur", "fri", "sat" };
    //int8 *week_str[7] = { "[0]", "[1]", "[2]", "[3]", "[4]", "[5]", "[6]" };
    int8 *week_str[7] = { "0", "1", "2", "3", "4", "5", "6" };
    uint32 total_secs = secs;

    //total_secs += 60 * 60 * time_zone;
    //total_secs += 28880;

    uint16 year_out, month_out, day_out, hour_out, minute_out, second_out;

    parse_time( total_secs, &year_out, &month_out, &day_out, &hour_out, &minute_out, &second_out );

    // 2012-02-02 02:02:02 19 char
    os_sprintf( value, "%04d-%02d-%02d %02d_%02d_%02d[%s]", year_out, month_out, day_out,
                            hour_out, minute_out, second_out,
                                week_str[get_weekday(year_out, month_out, day_out)] );
}
Example #5
0
        InputIterator get(
            iter_type b, iter_type e,
            std::ios_base& iob,
            std::ios_base::iostate& err,
            std::tm* tm,
            char fmt, char) const
        {
            err = std::ios_base::goodbit;
            const std::ctype<char_type>& ct = std::use_facet<std::ctype<char_type> >(iob.getloc());

            switch (fmt)
            {
            case 'a':
            case 'A':
              {
                std::tm tm2;
                std::memset(&tm2, 0, sizeof(std::tm));
                that_.get_weekday(b, e, iob, err, &tm2);
                //tm->tm_wday = tm2.tm_wday;
              }
              break;
            case 'b':
            case 'B':
            case 'h':
              {
                std::tm tm2;
                std::memset(&tm2, 0, sizeof(std::tm));
                that_.get_monthname(b, e, iob, err, &tm2);
                //tm->tm_mon = tm2.tm_mon;
              }
              break;
//            case 'c':
//              {
//                const string_type& fm = c();
//                b = get(b, e, iob, err, tm, fm.data(), fm.data() + fm.size());
//              }
//              break;
            case 'd':
            case 'e':
              get_day(tm->tm_mday, b, e, err, ct);
              break;
            case 'D':
              {
                const char_type fm[] = {'%', 'm', '/', '%', 'd', '/', '%', 'y'};
                b = get(b, e, iob, err, tm, fm, fm + sizeof(fm)/sizeof(fm[0]));
              }
              break;
            case 'F':
              {
                const char_type fm[] = {'%', 'Y', '-', '%', 'm', '-', '%', 'd'};
                b = get(b, e, iob, err, tm, fm, fm + sizeof(fm)/sizeof(fm[0]));
              }
              break;
            case 'H':
              get_hour(tm->tm_hour, b, e, err, ct);
              break;
            case 'I':
              get_12_hour(tm->tm_hour, b, e, err, ct);
              break;
            case 'j':
              get_day_year_num(tm->tm_yday, b, e, err, ct);
              break;
            case 'm':
              get_month(tm->tm_mon, b, e, err, ct);
              break;
            case 'M':
              get_minute(tm->tm_min, b, e, err, ct);
              break;
            case 'n':
            case 't':
              get_white_space(b, e, err, ct);
              break;
//            case 'p':
//              get_am_pm(tm->tm_hour, b, e, err, ct);
//              break;
            case 'r':
              {
                const char_type fm[] = {'%', 'I', ':', '%', 'M', ':', '%', 'S', ' ', '%', 'p'};
                b = get(b, e, iob, err, tm, fm, fm + sizeof(fm)/sizeof(fm[0]));
              }
              break;
            case 'R':
              {
                const char_type fm[] = {'%', 'H', ':', '%', 'M'};
                b = get(b, e, iob, err, tm, fm, fm + sizeof(fm)/sizeof(fm[0]));
              }
              break;
            case 'S':
              get_second(tm->tm_sec, b, e, err, ct);
              break;
            case 'T':
              {
                const char_type fm[] = {'%', 'H', ':', '%', 'M', ':', '%', 'S'};
                b = get(b, e, iob, err, tm, fm, fm + sizeof(fm)/sizeof(fm[0]));
              }
              break;
            case 'w':
              {
                get_weekday(tm->tm_wday, b, e, err, ct);
              }
              break;
            case 'x':
              return that_.get_date(b, e, iob, err, tm);
//            case 'X':
//              return that_.get_time(b, e, iob, err, tm);
//              {
//                const string_type& fm = X();
//                b = that_.get(b, e, iob, err, tm, fm.data(), fm.data() + fm.size());
//              }
//              break;
//            case 'y':
//              get_year(tm->tm_year, b, e, err, ct);
                break;
            case 'Y':
              get_year4(tm->tm_year, b, e, err, ct);
              break;
            case '%':
              get_percent(b, e, err, ct);
              break;
            default:
                err |= std::ios_base::failbit;
            }
            return b;
        }
Example #6
0
/**
*
*	@brief get the calendar from time_value and time_zone
*	@param time_value:
*	@param time_zone:
*	@param cal:  out
*	@retval the num of the week
*/
void get_calendar(uint32 time_value, int time_zone, struct calendar *cal)
{
	static uint16 daycnt = 0;
	uint16 temp1 = 0;
	uint32 temp = 0;//time_value / 86400;    //a day of second is( 24 * 60 * 60 = 86400)
	int zone = 0;
	if(time_zone > 12)  //east 12 time zone
	{
		time_zone = 12;
	}
	else if(time_zone < -12) //west 12 time zone
	{
		time_zone = -12;
	}

	temp = (time_value + time_zone * 3600)/86400;

	if(daycnt != temp)
	{
		daycnt = temp;
		temp1 = 1970;
		while(temp >= 365)
		{
			if(is_leap_year(temp1))
			{
				if(temp >= 366){temp -= 366; }
				else{ temp1++; break;}
			}
			else temp -= 365;
			temp1++;
		}
		cal->year = temp1;
		temp1 = 0;

		while(temp >= 28)
		{
			if(is_leap_year(cal->year) && (temp1 == 1))
			{
				if(temp >= 29) temp -= 29;
				else break;
			}
			else
			{
				if(temp >= day_month_table[temp1])
				{
					temp -= day_month_table[temp1];
				}
				else break;
			}
			temp1++;
		}
		cal->month = temp1 + 1;
		cal->date = temp + 1;
	}

	temp = (time_value + time_zone * 3600) % 86400;
	cal->hour = temp/3600;
	cal->min  = (temp%3600)/60;
	cal->sec  = temp%3600%60;

	cal->weekday = get_weekday(cal->year, cal->month, cal->date);
}
Example #7
0
char* create_HTTP_response_header(const char *filename, char buffer[])
{
	//printf("................\n");
	char* response_header = (char*) malloc(BUFFER_SIZE);
	int range_end;
	int range_start = 0;
	int content_length;
	char *ptr;
	char *lineRange = NULL;
	//char *lineModified = NULL;



	if(response_header == NULL)
	{
		error("Error allocating response_header");
	}
	char status_text[100] = "HTTP/1.1 %i Partial Content\r\n";
	char date_text[100] = "DATUM Funktion einbauen\r\n";
	char server_text[100] = "Server: TinyWeb (Build Jun 12 2014)\r\n";
	char accept_range_text[100] = "Accept-Ranges: bytes\r\n";
	char last_modified_text[100] = "Last-Modified: Thu, 12 Jun 2014\r\n";
	char content_type_text[100] = "Content-Type: text/html\r\n";
	char content_length_text[100] = "Content-Length: 1004\r\n";
	char content_range_text[100] = "Content-Range: bytes 6764-7767/7768\r\n";
	char connection_text[100] = "Connection: Close\r\n\r\n";

	//file length calculating
	struct stat buf;
	if(stat(filename, &buf) != 0)
	{
		printf("Error in file length calculating.\n");
	}

   	//set_http_status(HTTP_STATUS_PARTIAL_CONTENT);
   	time_t t;
   	struct tm *ts;

   	t = time(NULL);
   	ts = localtime(&t);

   	struct stat file_Info;





	sprintf(status_text, "HTTP/1.1 %i %s\r\n", http_status_list[get_http_status()].code, http_status_list[get_http_status()].text ); //TODO: status dynamisch uebergeben
	sprintf(date_text, "Date: %s, %i %s %i %02i:%02i:%02i GMT\r\n", get_weekday(ts->tm_wday), ts->tm_mday, get_month(ts->tm_mon), ts->tm_year + 1900, ts->tm_hour, ts->tm_min, ts->tm_sec); //TODO: Reutemann fragen ob das Format so passt
	//sprintf(server_text, "Server: TinyWeb (Build Jun 12 2014)", ); //TODO: Buildzeit dynamisch einfuegen


	ptr = strtok(NULL, "\n");
	while (ptr != NULL) {
		// extract line with the range if existing
		if (strncmp(ptr,"Range",5) == 0) {
			lineRange = ptr;
		}
		else if ((strncmp(ptr,"If-Modified-Since",strlen("If-Modified-Since"))) == 0) {
			//lineModified = ptr;
		}
		ptr = strtok(NULL, "\n");
	}

	if (lineRange != NULL) {
		char *range = malloc(strlen(lineRange)+1);
		if (range == NULL) {
			perror("Malloc():");
		}
		strtok(lineRange,"=");
		range = strtok(NULL,"="); // after "="
		range_start = atoi(strtok(range,"-"));
		range_end = atoi(strtok(NULL,"-"));

		//printf("Start: %i End: %i", range_start, range_end);
	}



		int check;
		check = stat(filename, &file_Info);

		if (check < 0) {
			printf("NOT FOUND ACCESS CHECK ");
			set_http_status(HTTP_STATUS_NOT_FOUND);
		}

	   	// get last modified
		char* last_modified = malloc(32);
	   	struct tm * timeinfo;
	   	timeinfo = localtime(&file_Info.st_mtim.tv_sec);

	   	strftime (last_modified,32,"%a, %d %b %Y %H:%M:%S %Z",timeinfo);

	sprintf(last_modified_text, "Last-Modified: %s\n", last_modified); //TODO: Dateidatum einfuegen
	sprintf(content_type_text, "Content-Type: %s\r\n",  get_http_content_type_str(get_http_content_type(filename)));



	range_end = file_Info.st_size;

	if(range_end < 0)
	{
		error("Error with range");
	}
	else
	{
		content_length = range_end - range_start;
	}

	sprintf(content_length_text, "Content-Length: %i\r\n", content_length);
	sprintf(content_range_text, "Content-Range: bytes %i-%i/%i\n", range_start, range_end, content_length ); //TODO: Frage was das ist und wie dynamisch abgefragt wird

	strcat(response_header, status_text);
	strcat(response_header, date_text);
	strcat(response_header, server_text);
	strcat(response_header, accept_range_text);
	strcat(response_header, last_modified_text);
	strcat(response_header, content_type_text);
	strcat(response_header, content_length_text);
	strcat(response_header, content_range_text);
	strcat(response_header, connection_text);
	printf("\n------------Response-----------------\n%s------------Response-----------------\n", response_header);

	return response_header;
}
Example #8
0
int parse_condition(const char* condition, const Json::Value& input)
	{
	if ( !condition )
		{
		return -1;
		}

	if ( !*condition )
		{
		return 1;
		}

	std::string o_Location;
	std::string o_Uid;
	std::string dati;

	nlp::nlptime o_Time;

	if (input.isMember("usr_id"))		
	{
		o_Uid = input["usr_id"].asString();		
	}

	//o_Uid = input["usr_id"].asString();		
	dati = input["time"].asString();
	o_Location = input["pos"].asString();


	if ( dati.length() )
	{
		o_Time.set(dati.c_str());
	}
	else
	{
		o_Time.set(time(NULL));
	}

	char szStringValue[1024];	//规则中的字符串型值缓存
	char szNodeString[1024];	//节点中的字符串信息
	float nIntValue;		//规则中的整型值缓存
	float nNodeInt;		//节点中的整型信息

	const char* pChar = condition;
	int nReturnValue2 = 1;
	//条件部分
	int nFindPos;
	while (*pChar)
		{
		if (strchr("pu",*pChar))//char * 型:q
			{
			switch (*pChar)
				{
				case 'p'://place,地点信息
					pChar ++;
					sprintf(szNodeString,START_END_CHAR"%s"START_END_CHAR, o_Location.c_str());
					break;
				case 'u'://usrid
					pChar ++;
					sprintf(szNodeString,START_END_CHAR"%s"START_END_CHAR, o_Uid.c_str());
					break;
				default:
					return -1;
				}

			char cOp = *pChar;
			if (*(pChar+1) != '\"')
				{
				return -1;
				}
			nFindPos = (int)strcspn(pChar+2,"\"");
			strncpy(szStringValue,pChar+2,nFindPos);//取得规则中的字符串型数据
			nFindPos = (int)strcspn(pChar+2,"\"");
			szStringValue[nFindPos] = '\0';

			//printf("%s-------%s------\n", szNodeString, szStringValue);

			nReturnValue2 = 1;
			switch (cOp)
				{
				case '{':
					if (smstrstr(szStringValue,szNodeString,true)==NULL)	//Modified begin by zgchen	,2002-8-13 9:48:27

						{
						nReturnValue2 = 0;
						}
					break;
				case '}':
					if (smstrstr(szNodeString,szStringValue,true)==NULL) //Modified begin by zgchen	,2002-8-13 9:48:37

						{
						nReturnValue2 = 0;
						}
					break;
				case '#':
					//if (stricmp(szNodeString,szStringValue))
					if (strcasecmp(szNodeString,szStringValue))
						{
						nReturnValue2 = 0;
						}
					break;
				case '!':
					//Modifided begin by zgchen	,2003-3-18 11:58:39
					if (*(pChar+1) == '{')	//不被包括
						{
						if (smstrstr(szStringValue,szNodeString))
							{
							nReturnValue2 = 0;
							}
						}
					else if (*(pChar+1) == '}')	//不包括
						{
						if (smstrstr(szNodeString,szStringValue))
							{
							nReturnValue2 = 0;
							}
						}
					else 
						{
						if (!strcmp(szNodeString,szStringValue))
							{
							nReturnValue2 = 0;
							}
						}
					break;
					//Added/Modified end by zgchen2003-3-18 11:58:43
				default:
					//SMASSERT(0,"pChar must be in {}#");
					return -1;
					break;
				}
			}
		else if (strchr("hwdse",*pChar))//int 型
			{
			switch (*pChar)
				{
				case 'h'://小时
					nNodeInt = get_time(o_Time);
					break;
				case 'w'://周几
					nNodeInt = get_weekday(o_Time);
					break;
				case 'd'://日期
					nNodeInt = get_date(o_Time);
					break;
				case 's'://性别
					nNodeInt = get_sex();
					break;
				case 'e'://年龄
					nNodeInt = get_age();
					break;
				default:
					return -1;
					break;
				}
			pChar ++;
			nIntValue = (float)atof(pChar + 1);	//取得规则中的整型数据
			switch (*pChar)
				{
				case '<':
					if (nNodeInt > nIntValue)
						{
						nReturnValue2 = 0;						
						}
					break;
				case '>':
					if (nNodeInt < nIntValue)
						{
						nReturnValue2 = 0;						
						}
					break;
				case '=':
					if (nNodeInt != nIntValue)
						{
						nReturnValue2 = 0;						
						}
					break;
				case '!':
					if (nNodeInt == nIntValue)
						{
						nReturnValue2 = 0;
						}
					break;
				default:
					return -1;
					break;
				}
			}
		else
			{
			return -1;
			}

		if (nReturnValue2)
			{
			nFindPos = (int)strcspn(pChar,"+*");
			if(pChar[nFindPos])
				{
				if (pChar[nFindPos]=='+')
					{
					//nFindPos = strcspn(pChar,")");
					pChar += strlen(pChar);
					}
				else
					{
					pChar += nFindPos + 1;
					}
				}
			else
				{
				pChar +=nFindPos;
				}
			}
		else
			{
			nFindPos = (int)strcspn(pChar,"+");
			if (pChar[nFindPos]=='+')
				{
				pChar += nFindPos + 1;
				}
			else
				{
				pChar += nFindPos;
				}
			}
		}
	return nReturnValue2;
	}
int main(int argc,char **argv)
{
    int n;
    int curr_arg;
    bool bDebug;
    bool bRuntot;
    int retval;
    time_t today;
    time_t date1;
    time_t date2;
    char *cpt;
    int weekday_counts[NUM_WEEKDAYS];
    int weekday;
    int total_days;

    if ((argc < 3) || (argc > 5)) {
        printf(usage);
        return 1;
    }

    bDebug = false;
    bRuntot= false;

    for (curr_arg = 1; curr_arg < argc; curr_arg++) {
        if (!strcmp(argv[curr_arg],"-debug"))
            bDebug = true;
        else if (!strcmp(argv[curr_arg],"-runtot"))
            bRuntot = true;
        else
            break;
    }

    if (argc - curr_arg != 2) {
        printf(usage);
        return 2;
    }

    retval = get_today(&today);

    if (retval) {
        printf("get_today() failed: %d\n",retval);
        return 3;
    }

    if (!strcmp(argv[curr_arg],"today"))
        date1 = today;
    else
        date1 = cvt_date(argv[curr_arg]);

    if (date1 == -1L) {
        printf("%s: invalid date\n",argv[curr_arg]);
        return 4;
    }

    if (!strcmp(argv[curr_arg+1],"today"))
        date2 = today;
    else
        date2 = cvt_date(argv[curr_arg+1]);

    if (date2 == -1L) {
        printf("%s: invalid date\n",argv[curr_arg+1]);
        return 5;
    }

    if (bDebug) {
        cpt = ctime(&date1);
        cpt[strlen(cpt)-1] = 0;
        printf("date1: %s\n",cpt);
        cpt = ctime(&date2);
        cpt[strlen(cpt)-1] = 0;
        printf("date2: %s\n",cpt);
    }

    if (date1 >= date2) {
        printf("date1 must be less than date2\n");
        return 6;
    }

    for (n = 0; n < NUM_WEEKDAYS; n++)
        weekday_counts[n] = 0;

    for ( ; date1 < date2; date1 += SECS_PER_DAY) {
        cpt = ctime(&date1);

        retval = get_weekday(&cpt[0],&weekday);

        if (retval) {
            printf("get_weekday_failed: %d\n",retval);
            return 7;
        }

        weekday_counts[weekday]++;
    }

    total_days = 0;

    for (n = 0; n < NUM_WEEKDAYS; n++) {
        total_days += weekday_counts[n];

        if (!bRuntot)
            printf("%7d %s\n",weekday_counts[n],weekdays[n]);
        else
            printf("%7d %s %7d\n",weekday_counts[n],weekdays[n],total_days);
    }

    if (!bRuntot)
        printf("\n%7d\n",total_days);

    return 0;
}