koreth@ssyx.ucsc.edu (Steven Grimm) (05/19/89)
Submitted-by: radoslav@kuling.docs.uu.se (Radoslav Bogdanovic) Posting-number: Volume 2, Issue 40 Archive-name: atime89 This is the sources for the AUTO - TIMESET program which was posted to the comp.binaries.atari.st. ---------------------- CUT HERE ------------------------------------------ : This is a shar archive. Extract with sh, not csh. : This archive ends with exit, so do not worry about trailing junk. echo 'Extracting a_time89.doc' sed 's/^X//' > a_time89.doc << '+ END-OF-FILE a_time89.doc' X X AUTO - TIMESET Version 1.0 X (c) by Radoslav Bogdanovic / RadoSoft X 17 may, 1989 X X For Microdeal/Michtron Internal Clock Card X and X Other Clock Cards working on the keyboard X processor for time & date maintenance. X X This program works from your AUTO folder of your floppydisk or harddisk X and also takes over the function of the supplied AUTOTIME.PRG supplied X with the Microdeal/Michtron Clock Card. X X The need for this program arose after I had installed the Clock Card X and then suddenly noticed that the clock was zeroed by some other program X and that I suddenly had a lot of files with wrong time and date stamp. X To prevent this I realised that the only way was to write a program that X would check if the date was somehow wrong. This is performed by checking X if the IKBD setting of the year is different of the xx year in the file X name of A_TIMExx.PRG. This mean that you only need to rename the program X once every year to get it to work properly. X X This program was compiled with Sozobon C compiler and the complete X source code is supplied. X X This program may freely be distributed. X X I can be reached at the following address for bug reports and others: X X RadoSoft X Radoslav Bogdanovic X Sernaders Vag 1-332 X S-752 61 Uppsala X SWEDEN X X Telephone: +46-18-463897 X X E-mail address: radoslav@kuling.uu.se X X + END-OF-FILE a_time89.doc chmod 'u=rw,g=rw,o=r' 'a_time89.doc' echo ' -rw-rw-r-- 1 radoslav 1636 May 17 17:09 a_time89.doc (as sent)' echo -n ' ' /bin/ls -l a_time89.doc echo 'Extracting a_time89.c' sed 's/^X//' > a_time89.c << '+ END-OF-FILE a_time89.c' X/* X AUTO - TIMESET Version 1.0 by Radoslav Bogdanovic / RadoSoft X Compiled with Sozobon C -- 17 may, 1989 X X For Microdeal Internal Clock Card and other clock cards working X on the keyboard processor for time & date maintaince. X X This program also takes over the function of the AUTOTIME.PRG which X is supplied with Microdeal Clock Card. X X For more details see the supplied documentation file. X X*/ X X#include <stdio.h> X#include <ctype.h> X#include <osbind.h> X Xmain(argc,argv) Xint argc; Xchar *argv[]; X{ X register unsigned long IKBDtimedate; X register unsigned int GEMtime, GEMdate; X int seconds, minutes, hours, day, month, year, fyear; X char *ptr, ans; X X printf("\n AUTO - TIMESET Version 1.0\n"); X printf(" by Radoslav Bogdanovic / RadoSoft\n"); X printf("Compiled with Sozobon C -- 12 May, 1989\n"); X X X /* Following works only with Sozobon C, because other C compilers does X NOT inserts program name (command) in ARGV[0] when program started X from GEM-DESKTOP or program autostarted from AUTO-folder. */ X ptr = argv[0]; X while (*ptr) ++ptr; /* Find the end of the program name */ X ptr -= 6; /* Back up to xx.prg */ X if ( isdigit(*ptr) ) X fyear = atoi(ptr); X else { X printf("\n This is %s ...\n",argv[0]); X printf(" This program should be renamed to\n"); X printf(" A_TIMExx.PRG, where xx is 80 to 99,\n"); X printf(" two digits indicating which year\n"); X printf(" you want to check against. \n"); X printf("\n Press any key to exit\n"); X Bconin(2); X exit(0); X } X X IKBDtimedate = Gettime(); X GEMtime = Tgettime(); X GEMdate = Tgetdate(); X X /* Check if year from filename is same as current IKBD year */ X /* If year from filename differs from current IKBD year then */ X /* it's assumed that the IKBD time is wrong or zeroed. */ X X if (fyear != (((IKBDtimedate >> 25) & 0x7F) + 80)) { X X IKBDtimeprint("\nThe current IKBD time and date is",IKBDtimedate); X timeprintGEM("The current GEM time is",GEMtime); X dateprintGEM("The current GEM date is",GEMdate); X X printf("\nDo you want to change time and date (Y/N): "); X ans = Bconin(2); X if ((ans == 'Y')||(ans == 'y')) X { X printf("\nEnter the new date and time (YY/MM/DD HH:MM): "); X scanf("%d/%d/%d %d:%d",&year,&month,&day,&hours,&minutes); X seconds = 0; X if (year < 100) year += 1900; X X IKBDtimedate = ((unsigned long)(year-1980)<<25) X |((unsigned long)month<<21) X |((unsigned long)day<<16) X |((unsigned long)hours<<11) X |((unsigned long)minutes<<5) X |((unsigned long)seconds<<1); X X GEMdate = ((unsigned)(year - 1980)<<9) X |((unsigned)month<<5) X |(unsigned)day; X X GEMtime = ((unsigned)hours<<11) X |((unsigned)minutes<<5) X |((unsigned)seconds>>1); X X Settime(IKBDtimedate); X Tsettime(GEMtime); X Tsetdate(GEMdate); X } X else X setsystemtime(Gettime()); X putchar('\n'); X } X else X setsystemtime(Gettime()); X} X X/*-----------------------------------------------------*/ X/* fixdigit insert a '0' before number if number < 10 */ X/*-----------------------------------------------------*/ Xfixdigit(buf, number) Xchar *buf; int number; X{ X if (number < 10) { X buf[0] = '0'; X sprintf(&buf[1],"%d",number); X } X else X sprintf(buf,"%d",number); X} X X/*---------------------------------------------------------------*/ X/* IKBDtimeprint decodes IKBD time & date and prints a string */ X/*---------------------------------------------------------------*/ XIKBDtimeprint(string,time) Xchar *string; register unsigned long time; X{ X int seconds, minutes, hours, day, month, year; X char mins[3], secs[3], days[3], monts[3]; X X seconds = (time & 0x001F) << 1; X minutes = (time >> 5) & 0x3F; X hours = (time >> 11) & 0x1F; X X day = (time >> 16) & 0x1F; X month = (time >> 21) & 0x0F; X year = ((time >> 25) & 0x7F) + 1980; X X fixdigit(mins, minutes); X fixdigit(secs, seconds); X fixdigit(days, day); X fixdigit(monts, month); X printf("%s %d:%s:%s on %d/%s/%s\n",string,hours,mins, X secs, year,monts,days); X} X X/*-----------------------------------------------------*/ X/* timeprintGEM decodes GEM time and prints a string */ X/*-----------------------------------------------------*/ XtimeprintGEM(string,time) Xchar *string; register unsigned int time; X{ X int seconds, minutes, hours; X char mins[3], secs[3]; X X seconds = (time & 0x001F) << 1; X minutes = (time >> 5) & 0x3F; X hours = (time >> 11) & 0x1F; X X fixdigit(mins, minutes); X fixdigit(secs, seconds); X printf("%s %d:%s:%s\n",string,hours,mins,secs); X} X X/*-----------------------------------------------------*/ X/* dateprintGEM decodes GEM date and prints a string */ X/*-----------------------------------------------------*/ XdateprintGEM(string,date) Xchar *string; register unsigned int date; X{ X int day, month, year; X char days[3], monts[3]; X X day = date & 0x1F; X month = (date >> 5) & 0x0F; X year = ((date >> 9) & 0x7F) + 1980; X X fixdigit(days, day); X fixdigit(monts, month); X printf("%s %d/%s/%s\n",string,year,monts,days); X} X X/*---------------------------------------------------------------------*/ X/* setsystemtime sets the GEM system time & date from IKBD time & date */ X/*---------------------------------------------------------------------*/ Xsetsystemtime(time) Xregister unsigned long time; X{ X int seconds, minutes, hours, day, month, year; X unsigned int GEMtime, GEMdate; X X seconds = (time & 0x001F) << 1; X minutes = (time >> 5) & 0x3F; X hours = (time >> 11) & 0x1F; X X day = (time >> 16) & 0x1F; X month = (time >> 21) & 0x0F; X year = (time >> 25) & 0x7F; X X GEMdate = ((unsigned)year<<9) X |((unsigned)month<<5) X |(unsigned)day; X X GEMtime = ((unsigned)hours<<11) X |((unsigned)minutes<<5) X |((unsigned)seconds>>1); X X Tsettime(GEMtime); X Tsetdate(GEMdate); X} X + END-OF-FILE a_time89.c chmod 'u=rw,g=rw,o=r' 'a_time89.c' echo ' -rw-rw-r-- 1 radoslav 6693 May 17 17:00 a_time89.c (as sent)' echo -n ' ' /bin/ls -l a_time89.c exit 0