amiga-tz/library/time_tzsetlcl.c

74 lines
1.3 KiB
C

#include "time_header.h"
char const* sys_zone();
char sys_zone_name[12];
void tzsetlcl(char const *name)
{
struct state *sp = lclptr;
if (name == NULL)
{
name = sys_zone();
}
if (strlen(name) >= sizeof(lcl_TZname)) {
return;
}
if (lcl_is_set && strcmp(lcl_TZname, name) == 0) {
return;
}
if (!sp) {
lclptr = (struct state*)
AllocMem(sizeof(struct state), MEMF_PUBLIC | MEMF_CLEAR);
sp = lclptr;
}
if (sp) {
if (zoneinit(sp, name) != 0) {
zoneinit(sp, "");
}
strcpy(lcl_TZname, name);
}
settzname();
lcl_is_set = 1;
}
char const* sys_zone()
{
int hour;
struct Locale *loc;
memset(sys_zone_name, 0, sizeof(sys_zone_name));
loc = OpenLocale(NULL);
if (!loc) {
return NULL;
}
hour = loc->loc_GMTOffset / 60;
CloseLocale(loc);
strcpy(sys_zone_name, "Etc/GMT");
if(hour == 0) {
return sys_zone_name;
}
sys_zone_name[7] = hour < 0 ? '-' : '+';
hour = hour < 0 ? -hour : hour;
if (hour >= 10) {
sys_zone_name[8] = '1';
sys_zone_name[9] = '0' + hour;
} else {
sys_zone_name[8] = '0' + hour;
}
return sys_zone_name;
}