Long HH:MM:SS day-time implemented as an addition to HH:MM.
[timeplan.git] / timeplan.c
index e48910c..3847022 100644 (file)
@@ -446,20 +446,20 @@ char *ce;
        storeone(what,length);
 }
 
        storeone(what,length);
 }
 
-static void hit(time_t t)
+static void hit(time_t t,char *bufaction)
 {
 static time_t last=-1;
 static char bufbackup[sizeof(buf)];
 char *acts[ACTS_MAX],*s;
 int timetot,acti,i;
 
 {
 static time_t last=-1;
 static char bufbackup[sizeof(buf)];
 char *acts[ACTS_MAX],*s;
 int timetot,acti,i;
 
-       if (verbose) printf("hit: %ld: %s\n",t,buf+6);
+       if (verbose) printf("hit: %ld: %s\n",t,bufaction);
        if (last!=-1) {
                if (t<last) {
                        fprintf(ERRH1"Time goes backward"WHERE1,ERRH2,WHERE2);
                        t=last;
                        }
        if (last!=-1) {
                if (t<last) {
                        fprintf(ERRH1"Time goes backward"WHERE1,ERRH2,WHERE2);
                        t=last;
                        }
-               acts[0]=bufbackup+6;
+               acts[0]=bufbackup;
                acti=1;
                while ((s=strchr(acts[acti-1],'+'))) {
                        *s='\0';
                acti=1;
                while ((s=strchr(acts[acti-1],'+'))) {
                        *s='\0';
@@ -473,7 +473,7 @@ int timetot,acti,i;
                for (i=0;i<acti;i++)
                        store(acts[i],calctime(timetot,i,acti));
                }
                for (i=0;i<acti;i++)
                        store(acts[i],calctime(timetot,i,acti));
                }
-       strcpy(bufbackup,buf);
+       strcpy(bufbackup,bufaction);
        last=t;
 }
 
        last=t;
 }
 
@@ -481,7 +481,7 @@ int main(int argc,char **argv)
 {
 int optc;
 time_t basetime=-1,currtime;
 {
 int optc;
 time_t basetime=-1,currtime;
-int hour,min;
+int hour,min,sec;
 
        pname=argv[0];
        while ((optc=getopt_long(argc,argv,"b:pw:qusTtc:f:r:vhV",longopts,NULL))!=EOF) switch (optc) {
 
        pname=argv[0];
        while ((optc=getopt_long(argc,argv,"b:pw:qusTtc:f:r:vhV",longopts,NULL))!=EOF) switch (optc) {
@@ -599,10 +599,13 @@ const char *days[]={"Ne","Po","Ut","St","Ct","Pa","So"};
                        continue;
                        }
 
                        continue;
                        }
 
-               if (!isdigit(buf[0]) || !isdigit(buf[1]) || buf[2]!=':' || !isdigit(buf[3]) || !isdigit(buf[4]) || buf[5]!='-'
-                || sscanf(buf,"%d:%d-",&hour,&min)!=2
+               if (!(isdigit(buf[0]) && isdigit(buf[1]) && buf[2]==':' && isdigit(buf[3]) && isdigit(buf[4])
+                && (buf[5]=='-' || (buf[5]==':' && isdigit(buf[6]) && isdigit(buf[7]) && buf[8]=='-'))
+                     )
+                || (sec=0,sscanf(buf,(buf[5]=='-'?"%d:%d-":"%d:%d:%d-"),&hour,&min,&sec)!=2+(buf[5]==':'))
                 || hour<0 || hour>23
                 || min <0 || min >59
                 || hour<0 || hour>23
                 || min <0 || min >59
+                || sec <0 || sec >59
                    ) {
                        fprintf(ERRH1"Incorrect day-time \"%s\""WHERE1,ERRH2,buf,WHERE2);
                        exit(EXIT_FAILURE);
                    ) {
                        fprintf(ERRH1"Incorrect day-time \"%s\""WHERE1,ERRH2,buf,WHERE2);
                        exit(EXIT_FAILURE);
@@ -611,8 +614,8 @@ const char *days[]={"Ne","Po","Ut","St","Ct","Pa","So"};
                        fprintf(ERRH1"Day-time found but no basetime timestamp set"WHERE1,ERRH2,WHERE2);
                        exit(EXIT_FAILURE);
                        }
                        fprintf(ERRH1"Day-time found but no basetime timestamp set"WHERE1,ERRH2,WHERE2);
                        exit(EXIT_FAILURE);
                        }
-               currtime=basetime+(hour*60+min)*60;
-               hit(currtime);
+               currtime=basetime+(hour*60+min)*60+sec;
+               hit(currtime,buf+(buf[5]=='-'?6:9));
                }
 
        if (!feof(fi) || ferror(fi))  {
                }
 
        if (!feof(fi) || ferror(fi))  {