void calendar(int yyyy, int mm) { Date start; start.yyyy = yyyy; start.mm = mm; start.dd = 1; int startday = getday(start); int enddate = DAYS_IN_MONTH[mm]; if (isleap(yyyy) && mm == 1) { enddate++; } printf(" %d/%d \n", yyyy, mm+1); printf("Sun Mon Tue Wed Thu Fri Sat\n"); int i; for (i = 0; i < startday; i++) { printf(" "); } for (i = 1; i <= enddate; i++) { printf(" %02d ", i); startday++; if (startday % 7 == 0) { printf("\n"); } } printf("\n"); }
static int getfield(char *p, char **endp, int *flags) { int val; char *start; char savech; /* * note this macro has an arg that isn't used ... it is retained * (it is believed) to make the macro call look more "natural" * and suggest at the call site what is happening. */ #define FLDCHAR(a) (*p != '\0' && !isdigit((unsigned char)*p) && \ !isalpha((unsigned char)*p) && *p != '*') val = 0; for (/*EMPTY*/; FLDCHAR(*p); ++p) continue; if (*p == '*') { /* `*' is current month */ if (!(*flags & F_ISMONTH)) { *flags |= F_ISMONTH | F_WILDMONTH; *endp = p + 1; return tp->tm_mon + 1; } else { *flags |= F_ISDAY | F_WILDDAY; *endp = p + 1; return 1; } } if (isdigit((unsigned char)*p)) { val = (int)strtol(p, &p, 10); /* if 0, it's failure */ for (/*EMPTY*/; FLDCHAR(*p); ++p) continue; *endp = p; return val; } for (start = p; *p != '\0' && isalpha((unsigned char)*p); p++) continue; savech = *p; if (p != start) { *p = '\0'; if ((val = getmonth(start)) != 0) *flags |= F_ISMONTH; else if ((val = getday(start)) != 0) *flags |= F_ISDOW; else { *p = savech; *endp = start; return 0; } } for (*p = savech; FLDCHAR(*p); ++p) continue; *endp = p; return val; }
int getfield(char *p, char **endp, int *flags) { int val, var; char *start, savech; for (; !isdigit((unsigned char)*p) && !isalpha((unsigned char)*p) && *p != '*'; ++p); if (*p == '*') { /* `*' is current month */ *flags |= F_ISMONTH; *endp = p+1; return(tp->tm_mon + 1); } if (isdigit((unsigned char)*p)) { val = strtol(p, &p, 10); /* if 0, it's failure */ for (; !isdigit((unsigned char)*p) && !isalpha((unsigned char)*p) && *p != '*'; ++p); *endp = p; return(val); } for (start = p; isalpha((unsigned char)*++p);); /* Sunday-1 */ if (*p == '+' || *p == '-') for(; isdigit((unsigned char)*++p);); savech = *p; *p = '\0'; /* Month */ if ((val = getmonth(start)) != 0) *flags |= F_ISMONTH; /* Day */ else if ((val = getday(start)) != 0) { *flags |= F_ISDAY; /* variable weekday */ if ((var = getdayvar(start)) != 0) { if (var <=5 && var >= -4) val += var * 10; #ifdef DEBUG printf("var: %d\n", var); #endif } } /* Easter */ else if ((val = geteaster(start, tp->tm_year + 1900)) != 0) *flags |= F_EASTER; /* Paskha */ else if ((val = getpaskha(start, tp->tm_year + 1900)) != 0) *flags |= F_EASTER; /* undefined rest */ else { *p = savech; return (0); } for (*p = savech; !isdigit((unsigned char)*p) && !isalpha((unsigned char)*p) && *p != '*'; ++p); *endp = p; return(val); }
void Date::Date::onPrivmsg(const char *from, const char *to, const char *msg) { chan *ch = ME.findChannel(to); if (!ch) return; //message is not sent to channel chanuser *u = ch->getUser(from); if (!u) return; //user is not on channel if (msg[0]!=CMD_PREFIX) return; //message hasn't command prefix (e.g. '!') time_t t; static char buf[256]; struct tm timedat; int j,a,b,c,sdy; char *endp; double sd,it; //star date, internet time for (int i=0;i<N_CMDS;i++) if (!strncmp(&msg[1],CMDS[i],strlen(CMDS[i]))) switch (i) { case CMD_DATE: if (msg[1+strlen(CMDS[CMD_DATE])]!=0) break; //not exactly !date time(&t); memcpy(&timedat,localtime(&t),sizeof(struct tm)); timedat.tm_year+=1900; timedat.tm_mon++; sdy=timedat.tm_year-2323; sd=((double)timedat.tm_yday+(double)(timedat.tm_year%4)/4.0)/365.2425*1000.0; sd+=(double)(t%86400)/86400.0; it=(double)((t+3600)%86400)/86.4; sprintf(buf,"%s %02d%c%02d%c%02d %d:%02d:%02d (SD: %d%3.2lf) (IT: @%03.0lf)", DAYS[timedat.tm_wday], timedat.tm_year,DATE_SEP, timedat.tm_mon,DATE_SEP, timedat.tm_mday, timedat.tm_hour,timedat.tm_min,timedat.tm_sec, sdy,sd,it); ME.privmsg(ch->name,buf,NULL); break; case CMD_GDATE: if (msg[1+strlen(CMDS[CMD_GDATE])]!=0) break; //not exactly !gdate time(&t); memcpy(&timedat,gmtime(&t),sizeof(struct tm)); timedat.tm_year+=1900; timedat.tm_mon++; sprintf(buf,"%s %02d%c%02d%c%02d %d:%02d:%02d GMT", DAYS[timedat.tm_wday], timedat.tm_year,DATE_SEP, timedat.tm_mon,DATE_SEP, timedat.tm_mday, timedat.tm_hour,timedat.tm_min,timedat.tm_sec); ME.privmsg(ch->name,buf,NULL); break; case CMD_DAY : if (msg[1+strlen(CMDS[CMD_DAY])]!=' ') break; time(&t); memcpy(&timedat,localtime(&t),sizeof(struct tm)); j=2+strlen(CMDS[CMD_DAY]); if (j>=strlen(msg)) break; a=strtol(&msg[j],&endp,10); if (endp==&msg[j] || (*endp!=DATE_SEP && *endp!=0)) break; if (*endp==0) { if (a>31) { sprintf(buf,"\x02%s:\x02 Invalid date",u->nick); ME.privmsg(ch->name,buf,NULL); break; } sdy=getday(timedat.tm_year+1900,timedat.tm_mon+1,a); } else { j+=endp-&msg[j]+1; b=strtol(&msg[j],&endp,10); if (endp==&msg[j] || (*endp!=DATE_SEP && *endp!=0)) break; if (*endp==0) { if (a>12 || b>31) { sprintf(buf,"\x02%s:\x02 Invalid date",u->nick); ME.privmsg(ch->name,buf,NULL); break; } sdy=getday(timedat.tm_year+1900,a,b); } else { j+=endp-&msg[j]+1; c=strtol(&msg[j],&endp,10); if (*endp!=0) break; if (b>12 || c>31) { sprintf(buf,"\x02%s:\x02 Invalid date",u->nick); ME.privmsg(ch->name,buf,NULL); break; } sdy=getday(a,b,c); } } if (sdy==-1) { sprintf(buf,"\x02%s:\x02 Invalid date",u->nick); ME.privmsg(ch->name,buf,NULL); break; } sprintf(buf,"%s",DAYS[sdy]); ME.privmsg(ch->name,buf,NULL); break; } }
int getfield(char *p, char **endp, int *flags) { int val, var, i; char *start, savech; for (; !isdigit((unsigned char)*p) && !isalpha((unsigned char)*p) && *p != '*' && *p != '\t'; ++p) ; if (*p == '*') { /* `*' is every month */ *flags |= F_ISMONTH; *endp = p+1; return (-1); /* means 'every month' */ } if (isdigit((unsigned char)*p)) { val = strtol(p, &p, 10); /* if 0, it's failure */ for (; !isdigit((unsigned char)*p) && !isalpha((unsigned char)*p) && *p != '*'; ++p) ; *endp = p; return (val); } for (start = p; isalpha((unsigned char)*++p);) ; /* Sunday-1 */ if (*p == '+' || *p == '-') for(; isdigit((unsigned char)*++p); ) ; savech = *p; *p = '\0'; /* Month */ if ((val = getmonth(start)) != 0) *flags |= F_ISMONTH; /* Day */ else if ((val = getday(start)) != 0) { *flags |= F_ISDAY; /* variable weekday */ if ((var = getdayvar(start)) != 0) { if (var <= 5 && var >= -4) val += var * 10; #ifdef DEBUG printf("var: %d\n", var); #endif } } /* Try specials (Easter, Paskha, ...) */ else { for (i = 0; i < NUMEV; i++) { if (strncasecmp(start, spev[i].name, spev[i].nlen) == 0) { start += spev[i].nlen; val = i + 1; i = NUMEV + 1; } else if (spev[i].uname != NULL && strncasecmp(start, spev[i].uname, spev[i].ulen) == 0) { start += spev[i].ulen; val = i + 1; i = NUMEV + 1; } } if (i > NUMEV) { const char *errstr; switch (*start) { case '-': case '+': var = strtonum(start + 1, 0, 365, &errstr); if (errstr) return (0); /* Someone is just being silly */ if (*start == '-') var = -var; val += (NUMEV + 1) * var; /* We add one to the matching event and multiply by * (NUMEV + 1) so as not to return 0 if there's a match. * val will overflow if there is an obscenely large * number of special events. */ break; } *flags |= F_SPECIAL; } if (!(*flags & F_SPECIAL)) { /* undefined rest */ *p = savech; return (0); } } for (*p = savech; !isdigit((unsigned char)*p) && !isalpha((unsigned char)*p) && *p != '*' && *p != '\t'; ++p) ; *endp = p; return (val); }
void table_gen(long long nrows, Stringlist wlist,int numcols, int *column_types, double *column_mins, double *column_maxes) { int itemp; int i,j,ii, nwords; int year, month, day, hour, minute, second; int minyear, minmonth, minday; int maxyear, maxmonth, maxday; int leaps[] = LEAPS; int nonleaps[] = NONLEAPS; //printf("Number of rows to be generated: %ld\n",nrows); //exit(0); for (i=0; i<nrows; i++) { for (j=0; j<numcols; j++) { switch (column_types[j]) { case INTEGER: //printf("column_type[%d] = INTEGER\n",j+1); printf("%d",(int)randomrange(column_mins[j],column_maxes[j])); break;; case VARCHAR: //printf("column_type[%d] = VARCHAR\n",j+1); nwords = (int)randomrange(column_mins[j],column_maxes[j]); for (ii=0; ii<nwords ; ii++) { itemp = (int)randomrange(0,wlist.used_size-1); printf("%s",wlist.list[itemp]); if (ii != (nwords-1)) printf(" "); } break;; case TIMESTAMP: //printf("column_type[%d] = TIMESTAMP\n",j+1); minyear = getyear(column_mins[j]); maxyear = getyear(column_maxes[j]); minmonth = getmonth(column_mins[j]); maxmonth = getmonth(column_maxes[j]); minday = getday(column_mins[j]); maxday = getday(column_maxes[j]); year = (int)randomrange(minyear,maxyear); month = (int)randomrange(minmonth,maxmonth); day = (int)randomrange(minday,maxday); if (ISLEAP(year)) { day = MIN(leaps[month-1],day); } else { day = MIN(nonleaps[month-1],day); } hour = (int)randomrange(0,23); minute = (int)randomrange(0,59); second = (int)randomrange(0,59); printf("%.4d-%.2d-%.2d %.2d:%.2d:%.2d",year,month,day,hour,minute,second); break;; case NUMERIC: //printf("column_type[%d] = NUMERIC\n",j+1); printf("%.6f",(float)randomrange(column_mins[j],column_maxes[j])); break;; } if (j != (numcols-1)) printf("|"); } //End of numcolumns printf("\n"); } }