calendar program
Bill Silvert
silvert at dalcs.UUCP
Thu Apr 25 03:43:45 AEST 1985
This program prints a calendar sheet starting on any Sunday for any number
of weeks, with user-selectable width and length. For example --
Sunday Monday Tuesday Wednesday Thursday Friday Saturday
|----------|----------|----------|----------|----------|----------|----------|
| Apr. 28 | Apr. 29 | Apr. 30 | May. 1 | May. 2 | May. 3 | May. 4 |
| | | | | | | |
|----------|----------|----------|----------|----------|----------|----------|
| May. 5 | May. 6 | May. 7 | May. 8 | May. 9 | May. 10 | May. 11 |
| | | | | | | |
|----------|----------|----------|----------|----------|----------|----------|
-------------------------cut here----------------------------------
cat >calform.c << xxCALxx
/* program to create calendar forms of various widths -- W. Silvert */
static char SCCSID[] = "@(#)calform.c Ver. 1.4, 85/03/04 13:33:47";
struct months {
char *name;
int length;
} m[] = { /* months mod 12 */
"December",31,
"January",31,
"February",28,
"March",31,
"April",30,
"May",31,
"June",30,
"July",31,
"August",31,
"September",30,
"October",31,
"November",30
};
char *week[] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
/* Formatting information */
#define WEEK " %-9s%s"
#define BAR "|---------%s"
#define SPACE "| %s"
#define DLINE "| %.3s. %2d %s"
#define ENDLIN "|\n"
char *fill[]={""," "," "," "," "," "," "," "," "};
char *rill[]={"","-","--","---","----","-----","------","-------","--------"};
int argint[3], month, nlines; /* argint={month, day, nweeks} */
int length=62, width=1; /* default length and width */
main(argc,argv)
int argc;
char *argv[];
{
int index=2 ;
char c;
if(argc < 4) { /* error processing */
printf("Usage: %s [-lnn] [-wnn] [-L] month day #weeks\n",
argv[0]);
exit();
}
/* process arguments for -l and -w here */
while(--argc > 0) {
switch(c = argv[argc][0]) {
case '-': /* flag */
switch(c = argv[argc][1]) {
case 'l': /* next part of argument is length */
length=atoi(argv[argc]+2);
break;
case 'w': /* next part of argument is width */
width=atoi(argv[argc]+2);
width=(width - 71)/7;
if(width < 0 || width >8) {
printf("Illegal width\n");
exit(1);
}
break;
case 'L': /* leap year correction */
m[2].length=29;
break;
default:
printf("Unknown flag %s\n",argv[argc]);
exit(1);
}
break;
default: /* should test for digits here */
argint[index]=atoi(argv[argc]);
if(index-- < 0) {
printf("Too many arguments\n");
exit(1);
}
break;
}
}
month = argint[0] % 12 ;
nlines = (length - 2) / argint[2] ;
do_top(); /* print header and first bar */
while(argint[2]-- > 0) { /* main loop */
do_date();
do_fill(nlines);
do_bar();
}
}
do_top() /* printer header with days of week */
{
int i;
for(i=0;i<7;printf(WEEK,week[i++],fill[width]));
printf("\n");
do_bar();
return;
}
do_date() /* enter row of dates */
{
int i;
for (i=0;i++ <7;) {
printf(DLINE,m[month].name,argint[1]++,fill[width]);
if(argint[1] > m[month].length) {
argint[1]=1;
month= ++month % 12;
}
}
printf(ENDLIN);
return;
}
do_fill(n) /* print n-2 blank lines */
int n;
{
int i;
while(n-- > 2) {
for(i=0;i++<7;printf(SPACE,fill[width]));
printf(ENDLIN);
}
return;
}
do_bar() /* draw a bar across */
{
int i;
for(i=0;i++<7;printf(BAR,rill[width]));
printf(ENDLIN);
return;
}
xxCALxx
--
Bill Silvert
Marine Ecology Lab.
Dartmouth, NS
dalcs!biomel!bill
More information about the Comp.sources.unix
mailing list