Y2k for Unix
Alexey Chupahin
achupahi at uic.rsu.ru
Sat Jan 22 19:26:17 AEST 2000
Hello Warren,
I make date2 program now for BSD and Venix. I just send it for you.
This is not best program, only Beta version. Please note me if you find bugs.
To working, it calculates JD time, so algorithm is not best, it requires floating
instructions. JD time is very useful for Astronomicals (my second hobby is
Astronomy).
Other thing - ctime use local time, while stime Grinvich time, if I remember.
So you may need to add a number of hours to into the source string to see exact
time you entered:
Time=Time*3600L*24 + (hour+4)*3600L + minutes*60 + sec;
^
Venix was partically Y2k. I test "find" command with date2 and find (sillogizme!)
it fine.:-).
Seems, Venix with new date2 is full Y2k now.
But BSD and other systems may have a number of non Y2k utilites. I don't like
BSD's ls program for example. It seems work correctly, but I wish to test it
again.
The one way is to copy executable ls from Venix, it works fine on BSD or other way
- I may fix ls sources and recompile it.
I'm making Y2k features ( that is hardly then for Unix ) for DEC RT-11.
To make this, I use better algorithm to calculate time and better interface, and
if you are interested, I'll port it to Unix too.
I'd like to port Y2k features into Unix 6,7 ,but unfortunatly, it is very
difficult
to use "ed" for me. :-) And I don't know how to put files into Unix 6 RL disk - it
hasn't
"tar".
May be, we can do well-organized work to prepeare old Unix system to use in
21Centure?
We can make full test all utilites for all versions and fix bugs to make Unixes as
Y2k ready-to-use systems?
Alexey
P.S. I send you date2.c - sources and executable date2 for BSD and Venix both.
To use it, one can copy date2 into /usr/bin or replace old standard unuseful
/bin/date
Usage:
$date2 year month day [hour min [sec]]
for example:
$date 2000 1 22 12 15
^ ^ ^ ^ ^
year month day hour min
date2 without arguments prints date and time.
--
IC~XC NI~KA
+------------------------+
| "I WAS living, |
| I AM living and |
| I WILL BE living!" |
| |
| DEC PDP-11... |
+------------------------+
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Date2
Type: application/octet-stream
Size: 9110 bytes
Desc: not available
URL: <http://minnie.tuhs.org/pipermail/tuhs/attachments/20000122/7ae8af10/attachment.obj>
-------------- next part --------------
/* Y2k date program for all Unix systems V0.2.2000, beta version.
(c) Alex Chupakhin, 17-Jun-2000
tested on Venix, 2BSD
Next better version will comes soon.
*/
#include <ctype.h>
main(argc,argv)
int argc;
char **argv;
{
int year,month,day,hour,minutes,sec;
long mjd();
long Time,time();
char *ctime();
if (argc==1) { Time=time(); printf("%s",ctime(&Time) ); exit(); }
if (argc<4) { printf("Y2k date\nusage\n%s year month day [hour min] [sec]\n",
argv[0]);exit(); }
year =atoi(argv[1]);
month=atoi(argv[2]);
day =atoi(argv[3]);
if(argc>=6)
{
hour = atoi(argv[4]);
minutes= atoi(argv[5]);
}
if(argc==7) sec = atoi(argv[6]);
Time = mjd(year,month,day)-mjd(1970,1,1);
Time = Time*3600L*24 + (hour+4)*3600L + minutes*60 + sec;
printf("%sJD=%D\n",ctime(&Time),mjd(year,month,day));
stime(&Time);
}
long mjd(y,m,d)
int y,m,d;
{
long a,a4,e,c,b;
if(m<=2) { y--; m+=12; }
a=(long) y/100;
a4=a/4;
b=2-a+a4;
c = (long) (365.25*y);
e = (long) (30.6001*(m+1));
return ( c+e+b+d+1720994L );
}
More information about the TUHS
mailing list