[net.micro.atari16] Utility to set date/time on power up.

bray@alberta.UUCP (Brian Bray) (04/30/86)

Here is a short utility for the Atari ST that sets the time and date
on power up.  It's especially useful to MAKE users.  The MAKEFILE
follows the source code.

----------------------------------------------------------------------
/* SETCLOCK.C

   Routine to set the clock on startup (Atari ST).


        Copyright 1986, Brian Bray

        This software may be freely copied and given away for
   non-commercial use, but sale is prohibited.
   Upgrades and comments should be sent to:

        Brian Bray
        #306, 10135 - Saskatchewan Drive
        Edmonton, Alberta
        Canada  T6E 4Y9

   or on UNIX.

        bray@alberta.UUCP


Usage:

   This program is intended to be placed in the "auto" folder of a
boot disk.  On power up, it asks for the time and date and sets the
clock.  It will not reset the date during a reboot,
only on power up. (Another mystery!).


   86/04/30     Brian Bray      Release
   86/04/25     Brian Bray      Called BIOS getline.
   86/04/24     Brian Bray      Removed scanf to make smaller
   86/04/22     Brian Bray      First version

*/

#include <osbind.h>
#include <define.h>
#include <stdio.h>

#define isdigit(c) (c>='0' & c<='9')
#define tonum(c) (c-'0')

char *getd(s,var)
char *s;
int *var;
{
        *var = 0;
        while(isdigit(*s))
            *var = *var * 10 + tonum(*s++);
        return(s);
}

main()
{

int time;
int year, month, day, hour, minute, seconds;
char inline[80], *ilp;
int error;
char *getd();


        Cconws("Clock setting program -- Version 1.0, BDB\r\n\n");

        inline[0] = 70;
        error = TRUE;
        while ( error ) {

                Cconws("\r\nEnter date YY/MM/DD (^C to cancel): ");
                Cconrs(inline);
                if (inline[1] == 0) return;

                ilp = &inline[2];
                ilp = getd(ilp,&year);
                if (*ilp++ != '/') continue;

                ilp = getd(ilp,&month);
                if (*ilp++ != '/') continue;

                ilp = getd(ilp,&day);

                if (year<80) year += 100; /*plan ahead!*/

                error = year<86 || month<1 || month>12 || day<1 || day>31;
        }
        time = (year-80)<<9 | month<<5 | day;
        Tsetdate(time);

        error = TRUE;
        while ( error ) {

                Cconws("\r\nEnter time HH:MM:SS : ");
                Cconrs(inline);

                ilp = &inline[2];
                ilp = getd(ilp,&hour);
                if (*ilp++ != ':') continue;

                ilp = getd(ilp,&minute);
                if (*ilp++ == ':')
                    ilp = getd(ilp,&seconds);
                    else seconds = 0;

                error = hour<0 || hour>24 || minute<0 || minute>59 ||
                    seconds<0 || seconds>59;
        }
        time = hour<<11 | minute<<5 | seconds>>1;
        Tsettime(time);
        Cconws("\r\nThank you.\r\n\n")

}
-----------------------end of program/start of makefile-------------------
setclock.prg : setclock.o
        d:\commandp.tos copy setclock.o d:
        +cd a:\clib
        a:\bin\LINK68.prg [u] \
            d:setclock.68k=gemstart.o,d:setclock.o,osbind.o,gemlib,libf
        a:\bin\relmod.prg d:setclock
        d:\commandp.tos rm d:setclock.68k
        +cd a:\setclock
        d:\commandp.tos copy d:setclock.prg a:
        d:\commandp.tos rm d:setclock.prg
*.o : *.c
        d:\commandp.tos d:\bin\c $*

setclock.o : setclock.c
                                                                              
--------------------------------end of makefile--------------------

-Brian