//ver [Sat Mar 10 15:07:21 CET 2001] -- 6 /*================================================================ ************************* ****** ***** *** ** * ++[X3ni0n]++ xenion@libero.it ~ http://www.tba.tsx.org 7/3/2k+1 ************************* ****** ***** *** ** * GONE Funzione svolta da gone(h,m,s) : torna 1 se -> * non sono ancora passati hh:mm:ss dall'ora di compilazione e * se il giorno del mese e' ancora quello nel quale si e' compilato il programma ================================================================*/ #include #include int s_ora(int *h, int *m, int *s) { // funzione che rende valide le ore. Esempio : // h m s h m s // | | | | | | // 26:59:145 --> 03:01:25 while (*s >= 60) { ++*m; *s-=60; } while (*m >= 60) { ++*h; *m-=60; } while (*h > 24) *h-=24; return(1); } int c_ore(int h1, int m1, int s1, int h2, int m2, int s2) { // torna 0 se ora1 < ora2 // 1 se ora1 > ora2 // 2 se ora1 = ora2 // * usiamo un numero per rappresentare l'ora voluta in modo *univoco* // e comodo : hh:mm:ss --> hh*10^4+mm*10^2+ss if (h1*10*10*10*10+m1*10*10+s1 < h2*10*10*10*10+m2*10*10+s2) return(0); if (h1*10*10*10*10+m1*10*10+s1 > h2*10*10*10*10+m2*10*10+s2) return(1); if (h1*10*10*10*10+m1*10*10+s1 == h2*10*10*10*10+m2*10*10+s2) return(2); } int gone(int h, int m, int s) { int t_old[3]; int day; time_t t1; struct tm *t2; time(&t1); t2=localtime(&t1); // __TIME__ e __DATE__ sono identificatori predefiniti di tipo stringa // contenenti ora\data di compilazione t_old[0]=(__TIME__[0]-48)*10+__TIME__[1]-48+h; t_old[1]=(__TIME__[3]-48)*10+__TIME__[4]-48+m; t_old[2]=(__TIME__[6]-48)*10+__TIME__[7]-48+s; s_ora(&t_old[0],&t_old[1],&t_old[2]); // siccome in __DATE__ il giorno e' visualizzato senza zeri a destra del primo // numero significativo quindi occorre gestire l'eventuale spazio vuoto if (__DATE__[4] != 32) day=(__DATE__[4]-48)*10+__DATE__[5]-48; else day=__DATE__[5]-48; printf("compiled at : %s\n",__TIME__); printf("+time : %d %d %d\n",h,m,s); printf("runnable until : %d:%d:%d\n",t_old[0],t_old[1],t_old[2]); printf("-> of day : %d\n",day); printf("local time : %d:%d:%d\n",t2->tm_hour,t2->tm_min,t2->tm_sec); printf("-> today : %d\n",t2->tm_mday); if (c_ore(t_old[0],t_old[1],t_old[2],t2->tm_hour,t2->tm_min,t2->tm_sec)) if (day == t2->tm_mday) return(1); else return(0); } int main() { if (gone(0,1,30)) printf("non sono passati 1*60+30secondi dalla compilazione\n"); else printf("sono passati 1*60+30secondi dalla compilazione\n"); }