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; }
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 ); }
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); }
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)] ); }
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; }
/** * * @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); }
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; }
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; }