1293Seric # include <time.h> 22897Seric # ifndef V6 32897Seric # include <sys/types.h> 42897Seric # include <sys/timeb.h> 52897Seric # endif 6293Seric 7*3185Seric static char SccsId[] = "@(#)arpadate.c 3.3 03/11/81"; 8403Seric 9293Seric /* 10293Seric ** ARPADATE -- Create date in ARPANET format 11293Seric ** 12293Seric ** Parameters: 132897Seric ** 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. 24*3185Seric ** 25*3185Seric ** Bugs: 26*3185Seric ** Timezone is computed from local time, rather than 27*3185Seric ** from whereever (and whenever) the message was sent. 28*3185Seric ** To do better is very hard. 29293Seric */ 30293Seric 312897Seric # ifdef V6 322897Seric # define DST_NAME "PDT" 332897Seric # define STD_NAME "PST" 342897Seric # endif 352897Seric 362897Seric # define NULL 0 372897Seric 381586Seric char * 392897Seric arpadate(ud) 402897Seric register char *ud; 41293Seric { 42293Seric register char *p; 432897Seric register char *q; 44293Seric static char b[40]; 451586Seric extern char *ctime(); 462897Seric register int i; 472897Seric extern struct tm *localtime(); 482897Seric # ifdef V6 492897Seric long t; 502897Seric # else 512897Seric struct timeb t; 522897Seric extern struct timeb *ftime(); 532897Seric extern char *timezone(); 542897Seric # endif 55293Seric 562897Seric # ifdef V6 57293Seric time(&t); 582897Seric if (ud == NULL) 592897Seric ud = ctime(&t); 602897Seric # else 612897Seric ftime(&t); 622897Seric if (ud == NULL) 632897Seric ud = ctime(&t.time); 642897Seric # endif 65293Seric 662897Seric q = b; 672897Seric 682897Seric p = &ud[0]; /* Mon */ 692897Seric *q++ = *p++; 702897Seric *q++ = *p++; 712897Seric *q++ = *p++; 722897Seric *q++ = ','; 732897Seric *q++ = ' '; 742897Seric 75293Seric p = &ud[8]; /* 16 */ 76293Seric if (*p == ' ') 77293Seric p++; 782897Seric else 792897Seric *q++ = *p++; 802897Seric *q++ = *p++; 812966Seric *q++ = ' '; 822897Seric 832897Seric p = &ud[4]; /* Sep */ 842897Seric *q++ = *p++; 852897Seric *q++ = *p++; 862897Seric *q++ = *p++; 872966Seric *q++ = ' '; 882897Seric 892897Seric p = &ud[20]; /* 1979 */ 902897Seric for (i = 4; i > 0; i--) 912897Seric *q++ = *p++; 922897Seric *q++ = ' '; 932897Seric 942897Seric p = &ud[11]; /* 01:03:52 */ 952897Seric for (i = 8; i > 0; i--) 962897Seric *q++ = *p++; 972897Seric 982897Seric /* -PST or -PDT */ 992897Seric # ifdef V6 100293Seric if (localtime(&t)->tm_isdst) 1012897Seric p = DST_NAME; 102293Seric else 1032897Seric p = STD_NAME; 1042897Seric # else 1052897Seric p = timezone(t.timezone, localtime(&t.time)->tm_isdst); 1062897Seric # endif V6 1072897Seric if (p[3] != '\0') 1082897Seric { 1092897Seric /* hours from GMT */ 1102897Seric p += 3; 1112897Seric *q++ = *p++; 1122897Seric if (p[1] == ':') 1132897Seric *q++ = '0'; 1142897Seric else 1152897Seric *q++ = *p++; 1162897Seric *q++ = *p++; 1172897Seric p++; /* skip ``:'' */ 1182897Seric *q++ = *p++; 1192897Seric *q++ = *p++; 1202897Seric } 1212897Seric else 1222897Seric { 1232897Seric *q++ = '-'; 1242897Seric *q++ = *p++; 1252897Seric *q++ = *p++; 1262897Seric *q++ = *p++; 1272897Seric } 1282897Seric 1292897Seric *q = '\0'; 1302897Seric 131293Seric return (b); 132293Seric } 133