mak@bnr-rsc.UUCP (Maarten Koning) (03/28/89)
[Here is the cute time program that people have been mentioning. Enjoy. Mark Dapoz is mdapoz@hybrid. --mak] #! /bin/sh # This is a shell archive. Remove anything before this line, then feed it # into a shell via "sh file" or similar. To overwrite existing files, # type "sh file -c". # The tool that generated this appeared in the comp.sources.unix newsgroup; # send mail to comp-sources-unix@uunet.uu.net if you want that tool. # If this archive is complete, you will see the following message at the end: # "End of shell archive." # Contents: qt.c # Wrapped by smeg@malibu on Tue Mar 28 09:08:15 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'qt.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'qt.c'\" else echo shar: Extracting \"'qt.c'\" \(3577 characters\) sed "s/^X//" >'qt.c' <<'END_OF_FILE' X/* qt.c - Displays time in real English, also chimes. */ X/* Mike Cowlishaw, December 1979 - December 1982 */ X/* Mark Dapoz, Converted to C for UNIX, April 1986 */ X/* 86/11/13 - major update, code really cleaned up :-) */ X X#include <sys/types.h> X#include <sys/time.h> X#define TIMESIZ 80 /* size of our saying */ X X#define DEBUG X#undef DEBUG X Xchar *h[13] = { /* numbers in words */ X "one", X "two", X "three", X "four", X "five", X "six", X "seven", X "eight", X "nine", X "ten", X "eleven", X "" X}; X Xmain(argc,argv) Xint argc; Xchar **argv; X X{ X char ot[TIMESIZ]; /* words to display */ X short int hr,mn,sc,mod; /* time of day */ X short int five_mn; /* time to nearest five min */ X time_t clock; /* struct for time function */ X struct tm *tm; X char *malloc(); X struct tm *localtime(); /* conver to local time function*/ X time_t time(); /* GMT time function */ X X strcpy(ot,"It's "); /* our saying */ X X time(&clock); /* GMT time of day from system */ X tm=localtime(&clock); /* get local time */ X hr=tm->tm_hour; X mn=tm->tm_min; X sc=tm->tm_sec; X X#ifdef DEBUG X if (argc > 1) { /* debug */ X hr=atoi(argv[1]); X mn=atoi(argv[2]); X sc=atoi(argv[3]); X printf("hr=%u, mn=%u, sc=%u\n",hr,mn,sc); X } X#endif X X if (sc > 29) /* round up mins */ X mn+=1; X if (mn > 32) /* round up hours */ X hr+=1; X /* how far off 5 min mark? */ X switch(mn%5) { X case 0: /* exact hour */ X break; X case 1: X strcat(ot,"just gone "); X break; X case 2: X strcat(ot,"just after "); X break; X case 3: X strcat(ot,"nearly "); X break; X case 4: X strcat(ot,"almost "); X break; X } X five_mn = mn; X if (mn%5 >= 3) /* round up */ X five_mn = mn+5; X /* what part of the hour? */ X switch(five_mn-(five_mn%5)) { /* 5 minute resolution */ X case 0: X case 60: X break; X case 5: X strcat(ot,"five past "); X break; X case 10: X strcat(ot,"ten past "); X break; X case 15: X strcat(ot,"a quarter past "); X break; X case 20: X strcat(ot,"twenty past "); X break; X case 25: X strcat(ot,"twenty-five past "); X break; X case 30: X strcat(ot,"half past "); X break; X case 35: X strcat(ot,"twenty-five to "); X break; X case 40: X strcat(ot,"twenty to "); X break; X case 45: X strcat(ot,"a quarter to "); X break; X case 50: X strcat(ot,"ten to "); X break; X case 55: X strcat(ot,"five to "); X break; X } X X if ((hr%12) == 0) X midnoon(&hr,ot); /* noon and midnight */ X if (hr > 12) X hr -= 12; /* get rid of 24-hour clock */ X else X if (hr == 0) X hr=12; /* cater for midnight */ X /* add the o'clock */ X strcat(ot,h[hr-1]); X if ((mn%60 == 0) && (hr != 12)) X strcat(ot," o'clock"); X strcat(ot,"."); /* end of sentence */ X if ((mn%15) == 0) /* chime every 15 minutes */ X chime(&hr,&mn); X printf("\n%s\n\n",ot); /* town crier :-) */ X} X Xmidnoon(hr,ot) /* is it noon or midnight? */ Xshort int *hr; /* hour of day */ Xchar *ot; /* the saying */ X X{ X if (*hr == 12) /* it's noon */ X strcat(ot,"Noon"); X else /* it's midnight */ X strcat(ot,"Midnight"); X *hr=12; /* make it noon */ X} X Xchime(hr,mn) /* ring the bells */ Xshort int *hr; /* hour of day */ Xshort int *mn; /* minute of day */ X X{ X int num,i; X char bell[16], ring[80]; X X if ((*mn%60) == 0) { /* on the hour? */ X strcpy(bell,"Bong"); X num = *hr; X } X else { /* must be quarter hour */ X strcpy(bell,"Ding-Dong"); X num=(*mn%15); X } X strcpy(ring,"("); X strcat(ring,bell); /* ring the bells */ X for (i=0;i < num-1;i++) { X strcat(ring,","); X strcat(ring,bell); X } X strcat(ring,"!)"); X printf("\n%s",ring); X} END_OF_FILE echo shar: NEWLINE appended to \"'qt.c'\" if test 3578 -ne `wc -c <'qt.c'`; then echo shar: \"'qt.c'\" unpacked with wrong size! fi # end of 'qt.c' fi echo shar: End of shell archive. exit 0 --