1293Seric # include <time.h> 22897Seric # ifndef V6 32897Seric # include <sys/types.h> 42897Seric # include <sys/timeb.h> 52897Seric # endif 6293Seric 7*2966Seric static char SccsId[] = "@(#)arpadate.c 3.2 03/07/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. 24293Seric */ 25293Seric 262897Seric # ifdef V6 272897Seric # define DST_NAME "PDT" 282897Seric # define STD_NAME "PST" 292897Seric # endif 302897Seric 312897Seric # define NULL 0 322897Seric 331586Seric char * 342897Seric arpadate(ud) 352897Seric register char *ud; 36293Seric { 37293Seric register char *p; 382897Seric register char *q; 39293Seric static char b[40]; 401586Seric extern char *ctime(); 412897Seric register int i; 422897Seric extern struct tm *localtime(); 432897Seric # ifdef V6 442897Seric long t; 452897Seric # else 462897Seric struct timeb t; 472897Seric extern struct timeb *ftime(); 482897Seric extern char *timezone(); 492897Seric # endif 50293Seric 512897Seric # ifdef V6 52293Seric time(&t); 532897Seric if (ud == NULL) 542897Seric ud = ctime(&t); 552897Seric # else 562897Seric ftime(&t); 572897Seric if (ud == NULL) 582897Seric ud = ctime(&t.time); 592897Seric # endif 60293Seric 612897Seric q = b; 622897Seric 632897Seric p = &ud[0]; /* Mon */ 642897Seric *q++ = *p++; 652897Seric *q++ = *p++; 662897Seric *q++ = *p++; 672897Seric *q++ = ','; 682897Seric *q++ = ' '; 692897Seric 70293Seric p = &ud[8]; /* 16 */ 71293Seric if (*p == ' ') 72293Seric p++; 732897Seric else 742897Seric *q++ = *p++; 752897Seric *q++ = *p++; 76*2966Seric *q++ = ' '; 772897Seric 782897Seric p = &ud[4]; /* Sep */ 792897Seric *q++ = *p++; 802897Seric *q++ = *p++; 812897Seric *q++ = *p++; 82*2966Seric *q++ = ' '; 832897Seric 842897Seric p = &ud[20]; /* 1979 */ 852897Seric for (i = 4; i > 0; i--) 862897Seric *q++ = *p++; 872897Seric *q++ = ' '; 882897Seric 892897Seric p = &ud[11]; /* 01:03:52 */ 902897Seric for (i = 8; i > 0; i--) 912897Seric *q++ = *p++; 922897Seric 932897Seric /* -PST or -PDT */ 942897Seric # ifdef V6 95293Seric if (localtime(&t)->tm_isdst) 962897Seric p = DST_NAME; 97293Seric else 982897Seric p = STD_NAME; 992897Seric # else 1002897Seric p = timezone(t.timezone, localtime(&t.time)->tm_isdst); 1012897Seric # endif V6 1022897Seric if (p[3] != '\0') 1032897Seric { 1042897Seric /* hours from GMT */ 1052897Seric p += 3; 1062897Seric *q++ = *p++; 1072897Seric if (p[1] == ':') 1082897Seric *q++ = '0'; 1092897Seric else 1102897Seric *q++ = *p++; 1112897Seric *q++ = *p++; 1122897Seric p++; /* skip ``:'' */ 1132897Seric *q++ = *p++; 1142897Seric *q++ = *p++; 1152897Seric } 1162897Seric else 1172897Seric { 1182897Seric *q++ = '-'; 1192897Seric *q++ = *p++; 1202897Seric *q++ = *p++; 1212897Seric *q++ = *p++; 1222897Seric } 1232897Seric 1242897Seric *q = '\0'; 1252897Seric 126293Seric return (b); 127293Seric } 128