1 #include "all.h" 2 3 Timet 4 toytime(void) 5 { 6 return time(nil); 7 } 8 9 void 10 datestr(char *s, Timet t) 11 { 12 Tm *tm; 13 14 tm = localtime(t); 15 sprint(s, "%.4d%.2d%.2d", tm->year+1900, tm->mon+1, tm->mday); 16 } 17 18 void 19 prdate(void) 20 { 21 print("%T\n", time(nil)); 22 } 23 24 static void 25 ct_numb(char *cp, int n) 26 { 27 if(n >= 10) 28 cp[0] = (n/10)%10 + '0'; 29 else 30 cp[0] = ' '; 31 cp[1] = n%10 + '0'; 32 } 33 34 int 35 Tfmt(Fmt* fmt) 36 { 37 char s[30]; 38 char *cp; 39 Timet t; 40 Tm *tm; 41 42 t = va_arg(fmt->args, Timet); 43 if(t == 0) 44 return fmtstrcpy(fmt, "The Epoch"); 45 46 tm = localtime(t); 47 strcpy(s, "Day Mon 00 00:00:00 1900"); 48 cp = &"SunMonTueWedThuFriSat"[tm->wday*3]; 49 s[0] = cp[0]; 50 s[1] = cp[1]; 51 s[2] = cp[2]; 52 cp = &"JanFebMarAprMayJunJulAugSepOctNovDec"[tm->mon*3]; 53 s[4] = cp[0]; 54 s[5] = cp[1]; 55 s[6] = cp[2]; 56 ct_numb(s+8, tm->mday); 57 ct_numb(s+11, tm->hour+100); 58 ct_numb(s+14, tm->min+100); 59 ct_numb(s+17, tm->sec+100); 60 if(tm->year >= 100) { 61 s[20] = '2'; 62 s[21] = '0'; 63 } 64 ct_numb(s+22, tm->year+100); 65 66 return fmtstrcpy(fmt, s); 67 } 68 69 /* 70 * compute the next time after t 71 * that has hour hr and is not on 72 * day in bitpattern -- 73 * for automatic dumps 74 */ 75 Timet 76 nextime(Timet t, int hr, int day) 77 { 78 int nhr; 79 Tm *tm; 80 81 if(hr < 0 || hr >= 24) 82 hr = 5; 83 if((day&0x7f) == 0x7f) 84 day = 0; 85 for (;;) { 86 tm = localtime(t); 87 t -= tm->sec; 88 t -= tm->min*60; 89 nhr = tm->hour; 90 do { 91 t += 60*60; 92 nhr++; 93 } while(nhr%24 != hr); 94 tm = localtime(t); 95 if(tm->hour != hr) { 96 t += 60*60; 97 tm = localtime(t); 98 if(tm->hour != hr) { 99 t -= 60*60; 100 tm = localtime(t); 101 } 102 } 103 if(day & (1<<tm->wday)) 104 t += 12*60*60; 105 else 106 return t; 107 } 108 } 109 110 /* 111 * delay for l milliseconds more or less. 112 */ 113 void 114 delay(int l) 115 { 116 sleep(l); 117 } 118