void stringToTime(char* string, int* h, int* m, int *s) { char hour[3]; char minute[3]; char second[3]; hour[0] = string[0]; hour[1] = string[1]; hour[2] = '\0'; minute[0] = string[2]; minute[1] = string[3]; minute[2] = '\0'; second[0] = string[4]; second[1] = string[5]; second[2] = '\0'; *h = sys_atoi(hour); *m = sys_atoi(minute); *s = sys_atoi(second); }
/*----------------------------------------------------------------------------*/ int sys_str2int(const char *s) { int m = 1; if(*s == '-') { m = -1; s ++; } else if(*s == '+') s++; if(*s == '0') { s ++; if(*s == 'x' || *s == 'X') return m * sys_atoi16(s + 1); else if(*s) return m * sys_atoi8(s + 1); else return 0; } else if(*s == 'x' || *s == 'X') return m * sys_atoi16(s + 1); return m * sys_atoi(s); }
/*----------------------------------------------------------------------------*/ int sys_nvprintf(writer_t write, void *data, const char *fmt, va_list ap) { char spec[20]; int r = 0, i, brk; const char *fmt0; fmt0 = fmt; while(*fmt) { if(*fmt == '%') { r += write(data, fmt0, fmt - fmt0); fmt ++; brk = 0; i = 0; spec[0] = '\0'; while(*fmt && !brk) { brk = 1; switch(*fmt) { case '%': r += write(data, fmt, 1); break; case 'c': spec[0] = va_arg(ap, int); r += write(data, spec, 1); break; case 'd': case 'i': case 'o': case 'u': case 'x': case 'X': r += write_int(write, data, *fmt, va_arg(ap, unsigned), sys_atoi(spec), spec[0] == '0' ? '0' : ' '); break; case 's': i = sys_atoi(spec); r += write_str(write, data, va_arg(ap, char*), i > 0 ? i : 0, i < 0 ? -i : 0); break; default: if(i < (int)sizeof(spec)) { spec[i++] = *fmt; spec[i] = '\0'; } brk = 0; break; } fmt ++; } fmt0 = fmt; continue; } fmt ++; }
void stringToDate(char* string, int* yr, int* m, int *d, int format) { /* string: a date in the format DDMMYYYY, MMDDYYYY or YYYYMMDD * if year < 1000 it has to be zero-padded. * result goes into arguments 2-4. format is the format to expect * (values are the same as on the dateformat setting) * if format is not specified, it is read according to settings. * does not check if the date read is valid or if the string has the right size. */ char year[6]; char month[3]; char day[3]; switch(format) { case 0: day[0] = string[0]; day[1] = string[1]; day[2] = '\0'; month[0] = string[2]; month[1] = string[3]; month[2] = '\0'; year[0] = string[4]; year[1] = string[5]; year[2] = string[6]; year[3] = string[7]; year[4] = '\0'; break; case 1: day[0] = string[2]; day[1] = string[3]; day[2] = '\0'; month[0] = string[0]; month[1] = string[1]; month[2] = '\0'; year[0] = string[4]; year[1] = string[5]; year[2] = string[6]; year[3] = string[7]; year[4] = '\0'; break; case 2: day[0] = string[6]; day[1] = string[7]; day[2] = '\0'; month[0] = string[4]; month[1] = string[5]; month[2] = '\0'; year[0] = string[0]; year[1] = string[1]; year[2] = string[2]; year[3] = string[3]; year[4] = '\0'; break; } *yr = sys_atoi(year); *m = sys_atoi(month); *d = sys_atoi(day); }