#include #include "buffer.h" #include "exit.h" #include "fmt.h" char num[FMT_ULONG]; void get(char *ch) { int r; r = buffer_GETC(buffer_0,ch); if (r == 1) return; if (r == 0) _exit(0); _exit(111); } void out(char *buf,int len) { if (buffer_put(buffer_1,buf,len) == -1) _exit(111); } time_t secs; unsigned long nanosecs; unsigned long u; main() { char ch; for (;;) { get(&ch); if (ch == '@') { secs = 0; nanosecs = 0; for (;;) { get(&ch); u = ch - '0'; if (u >= 10) { u = ch - 'a'; if (u >= 6) break; u += 10; } secs <<= 4; secs += nanosecs >> 28; nanosecs &= 0xfffffff; nanosecs <<= 4; nanosecs += u; } secs -= 4611686018427387914ULL; out(num,fmt_uint0(num,secs,9)); out(".",1); out(num,fmt_uint0(num,nanosecs,9)); } for (;;) { out(&ch,1); if (ch == '\n') break; get(&ch); } } } .