home *** CD-ROM | disk | FTP | other *** search
/ Fish 'n' More 1 / FishNMoreVol1.bin / more / text_files / newmem&clock / new1meg.arc / clock.c < prev    next >
C/C++ Source or Header  |  1986-07-03  |  4KB  |  173 lines

  1.  
  2. static int adr[6]={9,8,7,4,2,0};
  3. static char *month[12]={
  4.        "Jan",
  5.        "Feb",
  6.        "Mar",
  7.        "Apr",
  8.        "May",
  9.        "Jun",
  10.        "Jul",
  11.        "Aug",
  12.        "Sep",
  13.        "Oct",
  14.        "Nov",
  15.        "Dec"};
  16.  
  17. static unsigned char d,i,*adradr=(char *)0x600003,*dataadr=(char *)0x600001;
  18.  
  19. readclock(data)
  20. char data[];
  21. {
  22.     *adradr=0xc;/* check for end of update cycle */
  23.     d=*dataadr;
  24.     do {
  25.         *adradr=0xc;
  26.     } while((*dataadr&0x10)==0);
  27.     /* here if just completed update cycle */
  28.     do {
  29.         for(i=0;i<6;i++) {
  30.            *adradr=adr[i];
  31.            data[i]=*dataadr;
  32.         }
  33.         *adradr=0xa;
  34.         if((*dataadr&0x80)!=0) continue;/* update */
  35.         *adradr=0xc;
  36.     } while((*dataadr&0x10)!=0);
  37.     /* here if read without encountering another update */
  38. }
  39.  
  40. writeclock(data,cvf)
  41. char data[];
  42. int cvf;
  43. {
  44.     *adradr=0xc;/* check for end of update cycle */
  45.     d=*dataadr;
  46.     do {
  47.         *adradr=0xc;
  48.     } while((*dataadr&0x10)==0);
  49.     /* here if just completed update cycle */
  50.     do {
  51.         for(i=0;i<6;i++) {
  52.            *adradr=adr[i];
  53.            *dataadr=data[i];
  54.         }
  55.         *adradr=0x20;
  56.         *dataadr=cvf;
  57.         *adradr=0xa;
  58.         if((*dataadr&0x80)!=0) continue;/* update */
  59.         *adradr=0xc;
  60.     } while((*dataadr&0x10)!=0);
  61.     /* here if written without encountering another update */
  62. }
  63.  
  64. main(argc,argv)
  65. int argc;
  66. char *argv[];
  67. {
  68.     int i;
  69.     char data[6];
  70.     char string[40];
  71.     int day,year,hour,min,sec,cvf;
  72.     /* check validity of clock */
  73.     *adradr=0xa;
  74.     if((i=(*dataadr&0x7f))!=0x20)
  75.     {
  76.         printf("reg a is %d\n",i);
  77.         *adradr=0xa;
  78.         *dataadr=0x20;
  79.         *adradr=0x20;
  80.         *dataadr=0xff;
  81.     }
  82.     *adradr=0xb;
  83.     if((i=*dataadr)!=0x7)
  84.     {
  85.         printf("reg b is %d\n",i);
  86.         *adradr=0xb;
  87.         *dataadr=0x7;
  88.         *adradr=0x20;
  89.         *dataadr=0xff;
  90.     }
  91.     *adradr=0xd;
  92.     if((*dataadr)!=0x80)
  93.     {
  94.         *adradr=0xd;
  95.         *dataadr=0x80;
  96.         *adradr=0x20;
  97.         *dataadr=0xff;
  98.     }
  99.     *adradr=0x20;
  100.     cvf=*dataadr;
  101.     readclock(data);
  102.     while((argc--)>1){
  103.        if(strlen(argv[argc])==9&&argv[argc][2]=='-'&&argv[argc][6]=='-')
  104.        {  /* handle date */
  105.           sscanf(argv[argc],"%2d-%3s-%2d",&day,string,&year);
  106.           if(day>0&&day<32) data[2]=day;
  107.           else {
  108.               printf("bad day of month\n");
  109.               exit(30);
  110.           }
  111.           for(i=0;i<12;i++) {
  112.               for(d=0;d<3;d++) {
  113.                  if(tolower(string[d])!=tolower(month[i][d])) break;
  114.                  else if(d==2) data[1]=i+1;
  115.               }
  116.               if(d==3) break;
  117.           }
  118.           if(i==12){
  119.               printf("bad month\n");
  120.               exit(30);
  121.           }
  122.           cvf&=0x0f;
  123.           data[0]=year;
  124.        }
  125.        else if(strlen(argv[argc])>4&&argv[argc][2]==':') /* time */
  126.        {  /* handle time */
  127.           if(strlen(argv[argc])==8&&argv[argc][5]==':')
  128.              sscanf(argv[argc],"%2d:%2d:%2d",&hour,&min,&sec);
  129.           else {
  130.              sscanf(argv[argc],"%2d:%2d",&hour,&min);
  131.              sec=0;
  132.           }
  133.           if(hour>=0&&hour<24) data[3]=hour;
  134.           else {
  135.               printf("bad hour\n");
  136.               exit(30);
  137.           }
  138.           if(min>=0 && min<60) data[4]=min;
  139.           else {
  140.               printf("bad minute\n");
  141.               exit(30);
  142.           }
  143.           if(sec>=0 && sec<60) data[5]=sec;
  144.           else {
  145.               printf("bad second\n");
  146.               exit(30);
  147.           }
  148.           cvf&=0xf0;
  149.        }
  150.        else /* syntax error */
  151.        {
  152.            printf("Incorrect arguements\n");
  153.            exit(30);
  154.        }
  155.        writeclock(data,cvf);
  156.     }
  157.     if(cvf)
  158.     {
  159.         printf("CLOCK CHIP IS INVALID\n");
  160.         if(cvf==0xff) printf("set both date and time\n");
  161.         else if(cvf==0xf0) printf("set date\n");
  162.         else printf("set time\n");
  163.         exit(30);
  164.     }
  165.     sprintf(string,"date %2d-%3s-%2d %2d:%2d:%2d\n",data[2],month[data[1]-1],
  166.        data[0],data[3],data[4],data[5]);
  167.     for(i=0;string[i];i++) {
  168.        if(string[i]==' ' && i!=4 && i!=14) string[i]='0';
  169.     }
  170.     if((!Execute(string,0,0))||(!Execute("date\n",0,0)))
  171.        printf("\nDATE INVALID\n");
  172. }
  173.