示例#1
0
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");
}
示例#2
0
文件: calendar.c 项目: ryo/netbsd-src
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;
}
示例#3
0
文件: io.c 项目: kusumi/DragonFlyBSD
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);
}
示例#4
0
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;
      }
}
示例#5
0
文件: io.c 项目: chneukirchen/outils
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);
}
示例#6
0
文件: main.c 项目: chrishajas/gpdb
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");

    }

}