With my program below, i want in the do_day finction to print out the day of the week....

so for example, the user types in "d 5 9 2002"
i want the program to print out "5 September is a Thursday"

Can anyone help me with this???

Cheers.



#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include "date.h"

/* true for leap years */

/***************************DATE.C***************** *********/

int leap_year (int year) {


return year % 400 == 0 || year % 100 != 0 && year % 4 == 0;
}

/* the number of days in month of year */



int days_in_month (int month, int year) {


switch (month) {
case 9: case 4: case 6: case 11:
return 30;
case 2:
return leap_year(year) ? 29 : 28;
default:
return 31;
}
}

/* the weekday (0 = Sunday) of a given date
accurate for dates in the Gregorian calendar
which began on 14 September 1752 */



int week_day (int day, int month, int year) {


int d = 14; /* The modern calendar began on 14 ... */
int m = 9; /* ... September ... */
int y = 1752; /* ... 1752 ... */
int n = 4; /* ... which was a Thursday */

while (year > y || month > m || day > d) {
n++;
day--;
if (day < 1) { month--; day = days_in_month(month, year); }
if (month < 1) { year--; month = 12; }
}
return n % 7;
}

struct timeval tv;



int current_day () {


gettimeofday(&tv, 0);
return localtime(&tv.tv_sec)->tm_mday;
}



int current_month () {


gettimeofday(&tv, 0);
return localtime(&tv.tv_sec)->tm_mon + 1;
}



int current_year () {


gettimeofday(&tv, 0);
return localtime(&tv.tv_sec)->tm_year + 1900;
}

/************************MY PROGRAM**********************/


int do_day ( char *cmd ) {

int day, month, year;
int res;
res = sscanf( cmd, "%*c %d %d %d", &day, &month, &year );
if ( res == 3 ) {
switch(month){
case 1:
printf("%d January %d is a ", day, year);
week_day(day, month, year);
break;
case 2:
printf("%d February %d is a ", day, year);
break;
case 3:
printf("%d March %d is a ", day, year);
break;
case 4:
printf("%d April %d is a ", day, year);
break;
case 5:
printf("%d May %d is a ", day, year);
break;
case 6:
printf("%d June %d is a ", day, year);
break;
case 7:
printf("%d July %d is a ", day, year);
break;
case 8:
printf("%d August %d is a ", day, year);
break;
case 9:
printf("%d September %d is a ", day, year);
break;
case 10:
printf("%d October %d is a ", day, year);
break;
case 11:
printf("%d November %d is a ", day, year);
break;
case 12:
printf("%d December %d is a ", day, year);
break;
default :
printf("Invalid month\n");
return 0;
}}
else{
printf( "Bad day command parameters\n" );
}
}


int do_month ( char *cmd ) {

int month, year;
int res;
res = sscanf( cmd, "%*c %d %d", &month, &year );
if ( res == 2 ) {
switch(month){
case 1:
printf("January\n");
break;
case 2:
printf("February\n");
break;
case 3:
printf("March\n");
break;
case 4:
printf("April\n");
break;
case 5:
printf("May\n");
break;
case 6:
printf("June\n");
break;
case 7:
printf("July\n");
break;
case 8:
printf("August\n");
break;
case 9:
printf("September\n");
break;
case 10:
printf("October\n");
break;
case 11:
printf("November ");
break;
case 12:
printf("December\n");
break;
default :
printf("Invalid month\n");
return 0;
}
}
else {
printf( "Bad month command parameters\n" );
}}


void do_year ( char *cmd ) {

int year;
int res;
res = sscanf( cmd, "%*c %d", &year );
if ( res == 1 ) {
printf("%d \n", year);
}
else {
printf( "Bad year command parameters\n" );
}
}


int first_day_of_month ( int year, int month ) {

struct tm t = { 0 };
struct tm *tp;
time_t now;
t.tm_mday = 1;
t.tm_mon = month-1;
t.tm_year = year-1900;
now = mktime(&t);
tp = localtime(&now);
return tp->tm_wday;
}


int main ( ) {

char buff[BUFSIZ];
while ( fgets( buff, BUFSIZ, stdin ) != NULL ) {
switch ( buff[0] ) {
case 'd':
do_day ( buff );
return 0;
case 'm':
do_month ( buff );
return 0;
case 'y':
do_year ( buff );
return 0;
default:
printf( "Unknown command \n", buff[0] );
return 0;
}
}
{
int i;
for ( i = 1 ; i <= 12 ; i++ ) {
int day = first_day_of_month( 2002, i );
printf( "First day of %d/%d is %d\n", 2002, i, day );
}
}
return 0;
}