* [TUHS] Unix System V date command update
@ 2023-03-09 23:26 KenUnix
2023-03-10 2:10 ` [TUHS] " Dan Cross
0 siblings, 1 reply; 3+ messages in thread
From: KenUnix @ 2023-03-09 23:26 UTC (permalink / raw)
To: UNIX TUHS Group
[-- Attachment #1.1: Type: text/plain, Size: 231 bytes --]
Guys,
Find attached an updated date.c for Y2K for System V
IE: date 0309182123
Also works:
# date +%D
03/09/23
# date +%y%m%d%H%M
2303091823
Interesting Version 7 wants: date 2303091821
Ken
--
WWL 📚
[-- Attachment #1.2: Type: text/html, Size: 638 bytes --]
[-- Attachment #2: date.c --]
[-- Type: text/x-csrc, Size: 9210 bytes --]
/* @(#)date.c 1.5 */
static char sccsid[] = "@(#)date.c 1.3";
/*
* date - with format capabilities. This version for System V.
*
* cc -o /bin/date date.c ; strip /bin/date ; chmod 775 /bin/date
*
* 3-9-2023 KenUnix changed i=2000 to i=1970 for Y2K and YEAR.
*
*/
#include <sys/types.h>
#include "utmp.h"
#include <stdio.h>
#include <time.h>
#define MONTH itoa(tim->tm_mon+1,cp,2)
#define DAY itoa(tim->tm_mday,cp,2)
/* ken 03-09-2023 #define YEAR itoa(tim->tm_year,cp,2) */
#define YEAR itoa(tim->tm_year % 100 ,cp,2)
#define HOUR itoa(tim->tm_hour,cp,2)
#define MINUTE itoa(tim->tm_min,cp,2)
#define SECOND itoa(tim->tm_sec,cp,2)
#define JULIAN itoa(tim->tm_yday+1,cp,3)
#define WEEKDAY itoa(tim->tm_wday,cp,1)
#define MODHOUR itoa(h,cp,2)
#define dysize(A) (((A)%4)? 365: 366)
int dmsize[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
char month[12][3] = {
"Jan","Feb","Mar","Apr",
"May","Jun","Jul","Aug",
"Sep","Oct","Nov","Dec"
};
char days[7][3] = {
"Sun","Mon","Tue","Wed",
"Thu","Fri","Sat"
};
char *itoa();
char *cbp;
long timbuf;
struct utmp wtmp[2] = { {"","",OTIME_MSG,0,OLD_TIME,0,0,0},
{"","",NTIME_MSG,0,NEW_TIME,0,0,0} };
main(argc, argv)
int argc;
int **argv;
{
register char *aptr, *cp, c;
int h, hflag, i, tfailed, wf;
long tbuf, time(), lseek();
struct tm *tim;
char buf[200], *tzn;
tfailed = 0;
if(argc > 1) {
cbp = (char *)argv[1];
if(*cbp == '+') {
hflag = 0;
for(cp=buf;cp< &buf[200];)
*cp++ = '\0';
(void) time(&tbuf);
tim = localtime(&tbuf);
aptr = (char *)argv[1];
aptr++;
cp = buf;
while(c = *aptr++) {
if(c == '%')
switch(*aptr++) {
case '%':
*cp++ = '%';
continue;
case 'n':
*cp++ = '\n';
continue;
case 't':
*cp++ = '\t';
continue;
case 'm' :
cp = MONTH;
continue;
case 'd':
cp = DAY;
continue;
case 'y' :
cp = YEAR;
continue;
case 'D':
cp = MONTH;
*cp++ = '/';
cp = DAY;
*cp++ = '/';
cp = YEAR;
continue;
case 'H':
cp = HOUR;
continue;
case 'M':
cp = MINUTE;
continue;
case 'S':
cp = SECOND;
continue;
case 'T':
cp = HOUR;
*cp++ = ':';
cp = MINUTE;
*cp++ = ':';
cp = SECOND;
continue;
case 'j':
cp = JULIAN;
continue;
case 'w':
cp = WEEKDAY;
continue;
case 'r':
if((h = tim->tm_hour) >= 12)
hflag++;
if((h %= 12) == 0)
h = 12;
cp = MODHOUR;
*cp++ = ':';
cp = MINUTE;
*cp++ = ':';
cp = SECOND;
*cp++ = ' ';
if(hflag)
*cp++ = 'P';
else *cp++ = 'A';
*cp++ = 'M';
continue;
case 'h':
for(i=0; i<3; i++)
*cp++ = month[tim->tm_mon][i];
continue;
case 'a':
for(i=0; i<3; i++)
*cp++ = days[tim->tm_wday][i];
continue;
default:
(void) fprintf(stderr, "date: bad format character - %c\n", *--aptr);
exit(2);
} /* endsw */
*cp++ = c;
} /* endwh */
*cp = '\n';
(void) write(1,buf,(cp - &buf[0]) + 1);
exit(0);
}
if(*cbp == '-') {
(void) fprintf(stderr,"date: no TOY clock\n");
exit(2);
}
if(gtime()) {
(void) fprintf(stderr,"date: bad conversion\n");
exit(2);
}
/* convert to Greenwich time, on assumption of Standard time. */
timbuf += timezone;
/* fprintf(stderr, "ken timbuf: %ld\n", timbuf); */
/* Now fix up to local daylight time. */
if (localtime(&timbuf)->tm_isdst)
timbuf += -1*60*60;
(void) time(&wtmp[0].ut_time);
if(stime(&timbuf) < 0) {
tfailed++;
(void) fprintf(stderr, "date: no permission\n");
} else {
(void) time(&wtmp[1].ut_time);
/* Attempt to write entries to the utmp file and to the wtmp file. */
pututline(&wtmp[0]) ;
pututline(&wtmp[1]) ;
if ((wf = open(WTMP_FILE, 1)) >= 0) {
(void) lseek(wf, 0L, 2);
(void) write(wf, (char *)wtmp, sizeof(wtmp));
}
}
}
if (tfailed==0)
(void) time(&timbuf);
cbp = ctime(&timbuf);
(void) write(1, cbp, 20);
tzn = tzname[localtime(&timbuf)->tm_isdst];
if (tzn)
(void) write(1, tzn, 3);
(void) write(1, cbp+19, 6);
exit(tfailed?2:0);
}
gtime()
{
register int i;
register int y, t;
int d, h, m;
long nt;
tzset();
t = gpair();
if(t<1 || t>12)
return(1);
d = gpair();
if(d<1 || d>31)
return(1);
h = gpair();
if(h == 24) {
h = 0;
d++;
}
m = gpair();
if(m<0 || m>59)
return(1);
y = gpair();
if (y<0) {
(void) time(&nt);
y = localtime(&nt)->tm_year;
}
if (*cbp == 'p')
h += 12;
if (h<0 || h>23)
return(1);
timbuf = 0;
y += 2000;
/* ken 03-09-2023 changed i=2000 to i=1970 per Chipmaster */
for(i=1970; i<y; i++)
timbuf += dysize(i);
/* Leap year */
if (dysize(y)==366 && t >= 3)
timbuf += 1;
while(--t)
timbuf += dmsize[t-1];
timbuf += (d-1);
timbuf *= 24;
timbuf += h;
timbuf *= 60;
timbuf += m;
timbuf *= 60;
return(0);
}
gpair()
{
register int c, d;
register char *cp;
cp = cbp;
if(*cp == 0)
return(-1);
c = (*cp++ - '0') * 10;
if (c<0 || c>100)
return(-1);
if(*cp == 0)
return(-1);
if ((d = *cp++ - '0') < 0 || d > 9)
return(-1);
cbp = cp;
return (c+d);
}
char *
itoa(i,ptr,dig)
register int i;
register int dig;
register char *ptr;
{
switch(dig) {
case 3:
*ptr++ = i/100 + '0';
i = i - i / 100 * 100;
case 2:
*ptr++ = i / 10 + '0';
case 1:
*ptr++ = i % 10 + '0';
}
return(ptr);
}
^ permalink raw reply [flat|nested] 3+ messages in thread
* [TUHS] Re: Unix System V date command update
2023-03-09 23:26 [TUHS] Unix System V date command update KenUnix
@ 2023-03-10 2:10 ` Dan Cross
2023-03-10 2:55 ` Steve Nickolas
0 siblings, 1 reply; 3+ messages in thread
From: Dan Cross @ 2023-03-10 2:10 UTC (permalink / raw)
To: KenUnix; +Cc: UNIX TUHS Group
It's probably best not to attach a bunch of files to emails to TUHS; a
better way might be to put these in, say, a github repository (or
similar), where folks can snag them if they want them.
Thanks!
On Thu, Mar 9, 2023 at 6:26 PM KenUnix <ken.unix.guy@gmail.com> wrote:
>
> Guys,
>
> Find attached an updated date.c for Y2K for System V
>
> IE: date 0309182123
>
> Also works:
> # date +%D
> 03/09/23
> # date +%y%m%d%H%M
> 2303091823
>
> Interesting Version 7 wants: date 2303091821
>
>
> Ken
>
> --
> WWL 📚
>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* [TUHS] Re: Unix System V date command update
2023-03-10 2:10 ` [TUHS] " Dan Cross
@ 2023-03-10 2:55 ` Steve Nickolas
0 siblings, 0 replies; 3+ messages in thread
From: Steve Nickolas @ 2023-03-10 2:55 UTC (permalink / raw)
To: UNIX TUHS Group
[-- Attachment #1: Type: text/plain, Size: 659 bytes --]
On Thu, 9 Mar 2023, Dan Cross wrote:
> It's probably best not to attach a bunch of files to emails to TUHS; a
> better way might be to put these in, say, a github repository (or
> similar), where folks can snag them if they want them.
>
> Thanks!
>
> On Thu, Mar 9, 2023 at 6:26 PM KenUnix <ken.unix.guy@gmail.com> wrote:
>>
>> Guys,
>>
>> Find attached an updated date.c for Y2K for System V
>>
>> IE: date 0309182123
FWIW, most of my "Strix" commands can be rolled on SVR4. I haven't yet
gotten a working setup to be able to build and test for SVR3.2.
Here's date:
https://github.com/buricco/strix/blob/main/src/date.c
-uso.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2023-03-10 2:55 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-09 23:26 [TUHS] Unix System V date command update KenUnix
2023-03-10 2:10 ` [TUHS] " Dan Cross
2023-03-10 2:55 ` Steve Nickolas
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).