1*12974Ssam /* @(#)timezone.c 4.2 (Berkeley) 06/10/83 */ 21993Swnj /* 31993Swnj * The arguments are the number of minutes of time 41993Swnj * you are westward from Greenwich and whether DST is in effect. 51993Swnj * It returns a string 61993Swnj * giving the name of the local timezone. 71993Swnj * 81993Swnj * Sorry, I don't know all the names. 91993Swnj */ 101993Swnj 111993Swnj static struct zone { 121993Swnj int offset; 131993Swnj char *stdzone; 141993Swnj char *dlzone; 151993Swnj } zonetab[] = { 161993Swnj 4*60, "AST", "ADT", /* Atlantic */ 171993Swnj 5*60, "EST", "EDT", /* Eastern */ 181993Swnj 6*60, "CST", "CDT", /* Central */ 191993Swnj 7*60, "MST", "MDT", /* Mountain */ 201993Swnj 8*60, "PST", "PDT", /* Pacific */ 211993Swnj 0, "GMT", 0, /* Greenwich */ 22*12974Ssam -10*60, "EST", "EST", /* Aust: Eastern */ 23*12974Ssam -10*60+30, "CST", "CST", /* Aust: Central */ 24*12974Ssam -8*60, "WST", 0, /* Aust: Western */ 251993Swnj -1 261993Swnj }; 271993Swnj 281993Swnj char *timezone(zone, dst) 291993Swnj { 301993Swnj register struct zone *zp; 311993Swnj static char czone[10]; 321993Swnj char *sign; 33*12974Ssam register char *p, *q; 34*12974Ssam char *getenv(), *index(); 351993Swnj 36*12974Ssam if (p = getenv("TZNAME")) { 37*12974Ssam if (q = index(p, ',')) { 38*12974Ssam if (dst) 39*12974Ssam return(++q); 40*12974Ssam else { 41*12974Ssam *q = '\0'; 42*12974Ssam strncpy(czone, p, sizeof(czone)-1); 43*12974Ssam czone[sizeof(czone)-1] = '\0'; 44*12974Ssam *q = ','; 45*12974Ssam return (czone); 46*12974Ssam } 47*12974Ssam } 48*12974Ssam return(p); 49*12974Ssam } 501993Swnj for (zp=zonetab; zp->offset!=-1; zp++) 511993Swnj if (zp->offset==zone) { 521993Swnj if (dst && zp->dlzone) 531993Swnj return(zp->dlzone); 541993Swnj if (!dst && zp->stdzone) 551993Swnj return(zp->stdzone); 561993Swnj } 571993Swnj if (zone<0) { 581993Swnj zone = -zone; 591993Swnj sign = "+"; 601993Swnj } else 611993Swnj sign = "-"; 621993Swnj sprintf(czone, "GMT%s%d:%02d", sign, zone/60, zone%60); 631993Swnj return(czone); 641993Swnj } 65