/* Calendar-clock test program ** ** 2018-Sep-25, chris@groessler.org ** 2019-Dec-30, Greg King */ #include #include #include #include #include #ifdef __CC65__ #include #include #endif static int print_time(void) { struct tm *cur_tm; time_t cur_time = time(NULL); if (cur_time == -1) { printf("time() failed: %s\n", strerror(errno)); return 1; } cur_tm = localtime(&cur_time); printf("time: %s\n", asctime(cur_tm)); // DEBUG: printf("year=%d, mon=%d, mday=%d\nhour=%d, min=%d, sec=%d\n", cur_tm->tm_year, cur_tm->tm_mon, cur_tm->tm_mday, cur_tm->tm_hour, cur_tm->tm_min, cur_tm->tm_sec); return 0; } int main(int argc, char **argv) { char c; int s; struct tm cur_time; struct timespec new_time; #ifdef __CC65__ /* If DOS automatically will clear the screen after the program exits, ** then wait for a key-press. */ if (doesclrscrafterexit()) atexit((void (*)(void))cgetc); #endif if (argc == 1) { return print_time(); } if (argc != 2) { #if defined(__APPLE2__) printf("USAGE: CALL2051 [:REM YY-MM-DD-HH-MM-SS]\n"); #elif defined(__ATMOS__) || defined(__CBM__) printf("Usage: run [:rem YY-MM-DD-HH-MM-SS]\n"); #else printf("Usage: %s [YY-MM-DD-HH-MM-SS]\n", argv[0]); #endif return 1; } memset(&cur_time, 0, sizeof cur_time); s = sscanf(argv[1], "%d-%d-%d-%d-%d-%d", &cur_time.tm_year, &cur_time.tm_mon, &cur_time.tm_mday, &cur_time.tm_hour, &cur_time.tm_min, &cur_time.tm_sec); if (s != 6 || cur_time.tm_year > 99 /* other input values aren't being verified */) { printf("Invalid date-time format\n"); return 1; } cur_time.tm_year += 100; /* assume 21st century */ --cur_time.tm_mon; memset(&new_time, 0, sizeof new_time); new_time.tv_sec = mktime(&cur_time); printf("\nYou are about to set the time to\n--> %s\nContinue (y/n)? ", ctime(&new_time.tv_sec)); do { #ifdef __CC65__ c = cgetc(); #else c = getchar(); #endif } while (c != 'y' && c != 'Y' && c != 'n' && c != 'N'); printf("%c\n", c); if (c == 'n' || c == 'N') { printf("User abort\n"); return 0; } s = clock_settime(CLOCK_REALTIME, &new_time); if (s) { printf("clock_settime() failed: %s\n", strerror(errno)); return 1; } printf("Time set!\n\n"); //DEBUG test begin return print_time(); //DEBUG test end } /* Local Variables: */ /* c-file-style: "cpg" */ /* c-basic-offset: 4 */ /* End: */