1 # include <time.h> 2 # ifndef V6 3 # include <sys/types.h> 4 # include <sys/timeb.h> 5 # endif 6 7 static char SccsId[] = "@(#)arpadate.c 3.1 03/04/81"; 8 9 /* 10 ** ARPADATE -- Create date in ARPANET format 11 ** 12 ** Parameters: 13 ** ud -- unix style date string. if NULL, one is created. 14 ** 15 ** Returns: 16 ** pointer to an ARPANET date field 17 ** 18 ** Side Effects: 19 ** none 20 ** 21 ** WARNING: 22 ** date is stored in a local buffer -- subsequent 23 ** calls will overwrite. 24 */ 25 26 # ifdef V6 27 # define DST_NAME "PDT" 28 # define STD_NAME "PST" 29 # endif 30 31 # define NULL 0 32 33 char * 34 arpadate(ud) 35 register char *ud; 36 { 37 register char *p; 38 register char *q; 39 static char b[40]; 40 extern char *ctime(); 41 register int i; 42 extern struct tm *localtime(); 43 # ifdef V6 44 long t; 45 # else 46 struct timeb t; 47 extern struct timeb *ftime(); 48 extern char *timezone(); 49 # endif 50 51 # ifdef V6 52 time(&t); 53 if (ud == NULL) 54 ud = ctime(&t); 55 # else 56 ftime(&t); 57 if (ud == NULL) 58 ud = ctime(&t.time); 59 # endif 60 61 q = b; 62 63 p = &ud[0]; /* Mon */ 64 *q++ = *p++; 65 *q++ = *p++; 66 *q++ = *p++; 67 *q++ = ','; 68 *q++ = ' '; 69 70 p = &ud[8]; /* 16 */ 71 if (*p == ' ') 72 p++; 73 else 74 *q++ = *p++; 75 *q++ = *p++; 76 *q++ = '-'; 77 78 p = &ud[4]; /* Sep */ 79 *q++ = *p++; 80 *q++ = *p++; 81 *q++ = *p++; 82 *q++ = '-'; 83 84 p = &ud[20]; /* 1979 */ 85 for (i = 4; i > 0; i--) 86 *q++ = *p++; 87 *q++ = ' '; 88 89 p = &ud[11]; /* 01:03:52 */ 90 for (i = 8; i > 0; i--) 91 *q++ = *p++; 92 93 /* -PST or -PDT */ 94 # ifdef V6 95 if (localtime(&t)->tm_isdst) 96 p = DST_NAME; 97 else 98 p = STD_NAME; 99 # else 100 p = timezone(t.timezone, localtime(&t.time)->tm_isdst); 101 # endif V6 102 if (p[3] != '\0') 103 { 104 /* hours from GMT */ 105 p += 3; 106 *q++ = *p++; 107 if (p[1] == ':') 108 *q++ = '0'; 109 else 110 *q++ = *p++; 111 *q++ = *p++; 112 p++; /* skip ``:'' */ 113 *q++ = *p++; 114 *q++ = *p++; 115 } 116 else 117 { 118 *q++ = '-'; 119 *q++ = *p++; 120 *q++ = *p++; 121 *q++ = *p++; 122 } 123 124 *q = '\0'; 125 126 return (b); 127 } 128