1293Seric # include <time.h> 2*2897Seric # ifndef V6 3*2897Seric # include <sys/types.h> 4*2897Seric # include <sys/timeb.h> 5*2897Seric # endif 6293Seric 7*2897Seric static char SccsId[] = "@(#)arpadate.c 3.1 03/04/81"; 8403Seric 9293Seric /* 10293Seric ** ARPADATE -- Create date in ARPANET format 11293Seric ** 12293Seric ** Parameters: 13*2897Seric ** ud -- unix style date string. if NULL, one is created. 14293Seric ** 15293Seric ** Returns: 16293Seric ** pointer to an ARPANET date field 17293Seric ** 18293Seric ** Side Effects: 19293Seric ** none 20293Seric ** 21293Seric ** WARNING: 22293Seric ** date is stored in a local buffer -- subsequent 23293Seric ** calls will overwrite. 24293Seric */ 25293Seric 26*2897Seric # ifdef V6 27*2897Seric # define DST_NAME "PDT" 28*2897Seric # define STD_NAME "PST" 29*2897Seric # endif 30*2897Seric 31*2897Seric # define NULL 0 32*2897Seric 331586Seric char * 34*2897Seric arpadate(ud) 35*2897Seric register char *ud; 36293Seric { 37293Seric register char *p; 38*2897Seric register char *q; 39293Seric static char b[40]; 401586Seric extern char *ctime(); 41*2897Seric register int i; 42*2897Seric extern struct tm *localtime(); 43*2897Seric # ifdef V6 44*2897Seric long t; 45*2897Seric # else 46*2897Seric struct timeb t; 47*2897Seric extern struct timeb *ftime(); 48*2897Seric extern char *timezone(); 49*2897Seric # endif 50293Seric 51*2897Seric # ifdef V6 52293Seric time(&t); 53*2897Seric if (ud == NULL) 54*2897Seric ud = ctime(&t); 55*2897Seric # else 56*2897Seric ftime(&t); 57*2897Seric if (ud == NULL) 58*2897Seric ud = ctime(&t.time); 59*2897Seric # endif 60293Seric 61*2897Seric q = b; 62*2897Seric 63*2897Seric p = &ud[0]; /* Mon */ 64*2897Seric *q++ = *p++; 65*2897Seric *q++ = *p++; 66*2897Seric *q++ = *p++; 67*2897Seric *q++ = ','; 68*2897Seric *q++ = ' '; 69*2897Seric 70293Seric p = &ud[8]; /* 16 */ 71293Seric if (*p == ' ') 72293Seric p++; 73*2897Seric else 74*2897Seric *q++ = *p++; 75*2897Seric *q++ = *p++; 76*2897Seric *q++ = '-'; 77*2897Seric 78*2897Seric p = &ud[4]; /* Sep */ 79*2897Seric *q++ = *p++; 80*2897Seric *q++ = *p++; 81*2897Seric *q++ = *p++; 82*2897Seric *q++ = '-'; 83*2897Seric 84*2897Seric p = &ud[20]; /* 1979 */ 85*2897Seric for (i = 4; i > 0; i--) 86*2897Seric *q++ = *p++; 87*2897Seric *q++ = ' '; 88*2897Seric 89*2897Seric p = &ud[11]; /* 01:03:52 */ 90*2897Seric for (i = 8; i > 0; i--) 91*2897Seric *q++ = *p++; 92*2897Seric 93*2897Seric /* -PST or -PDT */ 94*2897Seric # ifdef V6 95293Seric if (localtime(&t)->tm_isdst) 96*2897Seric p = DST_NAME; 97293Seric else 98*2897Seric p = STD_NAME; 99*2897Seric # else 100*2897Seric p = timezone(t.timezone, localtime(&t.time)->tm_isdst); 101*2897Seric # endif V6 102*2897Seric if (p[3] != '\0') 103*2897Seric { 104*2897Seric /* hours from GMT */ 105*2897Seric p += 3; 106*2897Seric *q++ = *p++; 107*2897Seric if (p[1] == ':') 108*2897Seric *q++ = '0'; 109*2897Seric else 110*2897Seric *q++ = *p++; 111*2897Seric *q++ = *p++; 112*2897Seric p++; /* skip ``:'' */ 113*2897Seric *q++ = *p++; 114*2897Seric *q++ = *p++; 115*2897Seric } 116*2897Seric else 117*2897Seric { 118*2897Seric *q++ = '-'; 119*2897Seric *q++ = *p++; 120*2897Seric *q++ = *p++; 121*2897Seric *q++ = *p++; 122*2897Seric } 123*2897Seric 124*2897Seric *q = '\0'; 125*2897Seric 126293Seric return (b); 127293Seric } 128