#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include <string.h>

/*
void main(){
  int x,y,z;
  for(x=0;x<15;x++)
    for(y=0;y<15;y++)
      for(z=0;z<15;z++)
        if(350*x+80*y+30*z==980 && 
          91*x+19*y+8*z==252 &&
          x+y+z<=15){
             printf("\nx=%d y=%d z=%d\n",x,y,z);
             return;
        }
  printf("\nНет решения\n");
}
*/


char lnk[]={

"\x3B\x54\x69\x6D\x65\x72\x20\x2D\x20\xE2\xFB\xE7\xFB\xE2\xE0\xE5"
"\xF2\x20\xE4\xF0\xF3\xE3\xE8\xE5\x20\xFD\xEB\xFC\xF4\xFB\x20\xE2"
"\x20\xE7\xE0\xE4\xE0\xED\xED\xEE\xE5\x20\xE2\xF0\xE5\xEC\xFF\x0D"
"\x0A\x3B\xCF\xEE\xEB\xEE\xE6\xE8\xF2\xFC\x20\x54\x69\x6D\x65\x72"
"\x2E\x65\x6C\x66\x20\xE2\x20\xEF\xE0\xEF\xEA\xF3\x20\x30\x3A\x5C"
"\x5A\x42\x69\x6E\x5C\x44\x61\x65\x6D\x6F\x6E\x73\x20\xC2\xCC\xC5"
"\xD1\xD2\xC5\x20\xF1\x20\xFD\xF2\xE8\xEC\x20\x2E\x69\x6E\x69\x20"
"\xF4\xE0\xE9\xEB\xEE\xEC\x2C\x0D\x0A\x3B\xEF\xF0\xE5\xE4\xE2\xE0"
"\xF0\xE8\xF2\xE5\xEB\xFC\xED\xEE\x20\xED\xE0\xF1\xF2\xF0\xEE\xE8"
"\xE2\x20\xF1\xEE\xE1\xFB\xF2\xE8\xFF\x0D\x0A\x0D\x0A\x3B\xEA\xEE"
"\xEC\xEC\xE5\xED\xF2\xE0\xF0\xE8\xE8\x20\xEF\xEE\xF1\xEB\xE5\x20"
"\x22\x3B\x22\x20\xF1\x20\xED\xE0\xF7\xE0\xEB\xE0\x20\xF1\xF2\xF0"
"\xEE\xEA\xE8\x0D\x0A\x3B\xEB\xE8\xF8\xED\xE8\xE5\x20\xEF\xF0\xEE"
"\xE1\xE5\xEB\xFB\x20\xED\xE5\x20\xE4\xEE\xEF\xF3\xF1\xEA\xE0\xFE"
"\xF2\xF1\xFF\x21\x21\x21\x20\x0D\x0A\x0D\x0A\x3B\xF4\xEE\xF0\xEC"
"\xE0\xF2\x20\xEA\xEE\xEC\xE0\xED\xE4\xFB\x3A\x20\xE2\x20\x5B\x5D"
"\x20\xED\xE5\xEE\xE1\xFF\xE7\xE0\xF2\x2E\x20\xEF\xE0\xF0\xE0\xEC"
"\xE5\xF2\xF0\xFB\x0D\x0A\x3B\xC2\xF0\xE5\xEC\xFF\x5F\xF1\x5F\xD7"
"\xD7\x3A\x4D\x4D\x5B\x2D\xE4\xEE\x5F\xD7\xD7\x3A\xCC\xCC\x5D\x20"
"\x5B\xE8\xED\xF2\xE5\xF0\xE2\xE0\xEB\x5F\xEC\xE8\xED\x5D\x20\x5B"
"\xE2\xF1\xE5\xE3\xEE\x5F\xE7\xE0\xEF\xF3\xF1\xEA\xEE\xE2\x5D\x20"
"\xCF\xEE\xEB\xED\xFB\xE9\x5F\xEF\xF3\xF2\xFC\x0D\x0A\x3B\xE8\xED"
"\xF2\xE5\xF0\xE2\xE0\xEB\xFB\x20\xE2\xF0\xE5\xEC\xE5\xED\xE8\x20"
"\xEC\xEE\xE6\xED\xEE\x20\xEE\xE1\xFA\xE5\xE4\xE8\xED\xFF\xF2\xFC"
"\x20\xF7\xE5\xF0\xE5\xE7\x20\x22\x2C\x22\x20\xED\xE0\xEF\xF0\xE8"
"\xEC\xE5\xF0\x3A\x20\x38\x3A\x30\x30\x2D\x31\x36\x3A\x30\x30\x2C"
"\x31\x38\x3A\x30\x30\x2D\x32\x30\x3A\x30\x30\x0D\x0A\x3B\xEF\xE5"
"\xF0\xE5\xE4\x20\xE2\xF0\xE5\xEC\xE5\xED\xE5\xEC\x20\xEC\xEE\xE6"
"\xED\xEE\x20\xF3\xEA\xE0\xE7\xFB\xE2\xE0\xF2\xFC\x20\x28\x63\x20"
"\x2E\x29\x20\xE4\xE5\xED\xFC\x20\xED\xE5\xE4\xE5\xEB\xE8\x20\x28"
"\x31\x3D\xEF\xED\x2C\x2E\x2E\x2E\x2C\x37\x3D\xE2\xF1\x29\x20\xED"
"\xE0\xEF\xF0\xE8\xEC\xE5\xF0\x3A\x20\x31\x2E\x31\x38\x3A\x30\x30"
"\x2D\x36\x2E\x32\x30\x3A\x30\x30\x0D\x0A\x3B\xE8\xED\xF2\xE5\xF0"
"\xE2\xE0\xEB\x5F\xEC\xE8\xED\x20\x20\xE7\xE0\xE4\xE0\xE5\xF2\x20"
"\xF7\xE5\xF0\xE5\xE7\x20\xEA\xE0\xEA\xEE\xE5\x20\xE2\xF0\xE5\xEC"
"\xFF\x20\xEF\xEE\xE2\xF2\xEE\xF0\xED\xEE\x20\xE2\xFB\xEF\xEE\xEB"
"\xED\xFF\xF2\xFC\x0D\x0A\x3B\xE2\xF1\xE5\xE3\xEE\x5F\xE7\xE0\xEF"
"\xF3\xF1\xEA\xEE\xE2\x20\x20\xF3\xEA\xE0\xE7\xFB\xE2\xE0\xE5\xF2"
"\x20\xF1\xEA\xEE\xEB\xFC\xEA\xEE\x20\xF0\xE0\xE7\x20\xE2\xF1\xE5"
"\xE3\xEE\x20\xE7\xE0\xEF\xF3\xF1\xEA\xE0\xF2\xFC\x0D\x0A\x0D\x0A"
"\x3B\xCF\xF0\xE8\xEC\xE5\xF0\xFB\x20\xE8\xF1\xEF\xEE\xEB\xFC\xE7"
"\xEE\xE2\xE0\xED\xE8\xFF\x0D\x0A\x3B\xE1\xF3\xE4\xE8\xEB\xFC\xED"
"\xE8\xEA\x20\x28\xEF\xF0\xE8\x20\xE2\xEA\xEB\x2E\xEC\xEE\xE1\xE8"
"\xEB\xE5\x29\x3A\x0D\x0A\x36\x3A\x30\x30\x20\x30\x3A\x5C\x53\x6F"
"\x75\x6E\x64\x5C\x50\x6C\x61\x79\x2E\x77\x61\x76\x0D\x0A\x0D\x0A"
"\x3B\xE8\xEB\xE8\x20\xE0\xE2\xF2\xEE\xEC\xE0\xF2\xE8\xF7\xE5\xF1"
"\xEA\xEE\xE5\x20\xE2\xFB\xEA\xEB\x0D\x0A\x3B\xE7\xE0\xEF\xF3\xF1"
"\xEA\xE0\xE5\xEC\x20\xE3\xEB\xFE\xF7\xED\xFB\xE9\x20\xFD\xEB\xFC"
"\xF4\x20\x3A\x29\x0D\x0A\x32\x33\x3A\x30\x30\x20\x30\x3A\x5C\x5A"
"\x42\x69\x6E\x5C\x70\x69\x63\x6B\x6F\x66\x66\x2E\x65\x6C\x66\x0D"
"\x0A\x0D\x0A\x3B\xEF\xEE\xF0\xE0\x20\xE4\xEE\xEC\xEE\xE9\x21\x0D"
"\x0A\x31\x37\x3A\x30\x30\x20\x30\x3A\x5C\x53\x6F\x75\x6E\x64\x5C"
"\x67\x6F\x68\x6F\x6D\x65\x2E\x77\x61\x76\x0D\x0A\x0D\x0A\x3B\xE5"
"\xE6\xE5\xF7\xE0\xF1\xED\xFB\xE9\x20\xF1\xE8\xE3\xED\xE0\xEB\x3A"
"\x0D\x0A\x37\x3A\x30\x30\x2D\x31\x33\x3A\x30\x30\x2C\x31\x35\x3A"
"\x30\x30\x2D\x32\x30\x3A\x30\x30\x20\x36\x30\x20\x30\x3A\x5C\x5A"
"\x42\x69\x6E\x5C\x6E\x65\x77\x68\x6F\x75\x72\x2E\x65\x6C\x66\x0D"
"\x0A\x0D\x0A\x3B\xFD\xEB\xFC\xF4\x20\xE7\xE0\xE3\xF0\xF3\xE7\xE8"
"\xF2\xFC\x20\xF7\xE5\xF0\xE5\xE7\x20\x31\x20\xEC\xE8\xED\x20\xEF"
"\xEE\xF1\xEB\xE5\x20\xE2\xEA\xEB\x2E\x20\xF2\xE5\xEB\xE5\xF4\xEE"
"\xED\xE0\x0D\x0A\x30\x3A\x30\x30\x2D\x32\x34\x3A\x30\x30\x20\x31"
"\x20\x31\x20\x30\x3A\x5C\x5A\x42\x69\x6E\x5C\x73\x74\x61\x72\x74"
"\x2E\x65\x6C\x66\x0D\x0A\x0D\x0A\x3B\xE1\xF3\xE4\xE8\xEB\xFC\xED"
"\xE8\xEA\x20\xEF\xEE\x20\xF0\xE0\xE1\xEE\xF7\xE8\xEC\x20\xE4\xED"
"\xFF\xEC\x0D\x0A\x3B\x3F\x0D\x0A\x0D\x0A\x3B\xE2\x20\xE2\xEE\xF1"
"\xEA\xF0\xE5\xF1\x2E\x20\xF2\xEE\xEB\xFC\xEA\xEE\x0D\x0A\x37\x2E"
"\x31\x36\x3A\x30\x30\x20\x30\x3A\x5C\x5A\x42\x69\x6E\x5C\x79\x69"
"\x63\x6B\x65\x6E\x64\x2E\x65\x6C\x66\x0D\x0A"

  
  
//  "\x30\x3A\x5C\x5A\x42\x69\x6E\x5C\x45\x64\x69\x74\x5C\x45\x64\x69"
//"\x74\x2E\x65\x6C\x66\x0D\x0A\x0D\x0A"

  
  //"\x30\x3A\x5C\x5A\x42\x69\x6E\x5C\x4E\x45\x53\x5C\x4E\x45\x53\x2E"
//"\x65\x6C\x66\x0D\x0A\x0D\x0A\x30\x3A\x5C\x5A\x42\x69\x6E\x5C\x4E"
//"\x45\x53\x5C\x64\x65\x6D\x6F\x2E\x6E\x65\x73"
};

// Link - загрузчик ярлыков
//#include "..\swilib.h"

#define lnksize 512
char *s, *exe, *img=0, *par=0;
int f;
unsigned int err;

//void Exit(void){
//extern void *ELF_BEGIN;
//((void (*)(void *))(mfree_adr()))(&ELF_BEGIN);
//}

//char *exename, char *fname;

int main2(){
  do{
//   if(!fname) break;
//   if((f=fopen(fname,A_ReadOnly+A_BIN,P_READ,&err))==-1) break;
//   if(!fread(f,lnk,lnksize,&err)) break;
//   fclose(f, &err);
   //exe
   s=exe=lnk;
   while(*++s && *s!=0xd && *s!=':');
   if(*s!=':') break;
   while(*++s && *s!=0xd);
   do{
     if(!*s) break;
     *s++=0;
     //img
     img=s+1;
     while(*++s && *s!=0xd && *s!=':');
     if(*s==':'){ // Есть картинка
       while(*++s && *s!=0xd);
     }else img=0;
     if(!*s) break;
     *s++=0;
     //par
     par=s+1;
     while(*++s && *s!=0xd && *s!=':');
     if(*s==':'){
       while(*++s && *s!=0xd);
     }else par=0;
     *s=0;
   }while(0);
   //execute
//   WSHDR *ws=AllocWS(256);
//   str_2ws(ws,exe,strlen(exe)+1);
//   ExecuteFile(ws,0,par);
//   FreeWS(ws);
 }while(0);
// SUBPROC((void *)Exit);
 return (0);
}


//char *lnk; //free
int maxtask;

struct taskst{    //задачи:
  char *exe;      //имя файла для запуска
  unsigned short used,     //сколько раз запускалось
        maxused,  //ск. всего нужно запускать
        interval, //интервал между запусками
        time;     //время последнего запуска
}*task=0; //free

char *mask;
// в данную минуту стартовать? (бит)     все обнуляется если зап.нужн.к-во раз
//180*maxtask    буфер путей

void ii(int hm){ // запустить все задачи во время hm
  int i;
  char *mm=mask;
  struct taskst *tt=task;
  for(i=0;i<maxtask;i++,mm+=180,tt++)
    if(mm[hm>>3] & (1<<(hm&7))) //активирован
      if(hm-tt->time>tt->interval && tt->used<=(tt->maxused-1)){
        tt->time=hm;
        ++tt->used;
        //execute tt->exe
      }
}




// ДОЛЖЕН кончаться 0!
char *delrem(char *lnk){ //удаляет комментарий и считает сколько строк
  char *s,*ss;
  s=ss=lnk-1;
  maxtask=0;
  do{
    while(*++s && *s==' ');
    if(!*s) break;
    if(*s==0xd) ++s;
    else if(*s==';'){
      while(*++s && *s!=0xd);
      if(!*s++) break;
    }else{
      ++maxtask;
      do{
        *++ss=*s++;
      }while(*ss && *ss!=0xd);
      if(!*ss) break;
      *ss=0;
    }
  }while(*s);
  *++ss=0;
  return ss;
}


int loadini(){ 
  char *maxlnk,*s;
  int i,tsk,h,m,hm,h2,m2,hm2;
  maxlnk=delrem(lnk);
  if(!maxtask) return 1;
  if(task){ free(task); task=0;}
  if(!(task=(struct taskst *)malloc(i=(sizeof(struct taskst)+180)*maxtask+maxlnk-lnk))) return 1;
  memset(task,0,i);
  mask=(char*)task+sizeof(struct taskst)*maxtask;
  s=mask+180*maxtask;
  memcpy(s,lnk,maxlnk-lnk);
  --s;
  tsk=0;
  do{
   do{
    h=*++s-'0';
    if(*++s!=':') h=h*10+*s++-'0';
    if(*s!=':') return 1; //00:
    m=(*++s-'0')*10;
    m+=*++s-'0';
    if(*++s=='-'){ //-00:00
      h2=*++s-'0';
      if(*++s!=':') h2=h2*10+*s++-'0';
      if(*s!=':') return 1; //00:
      m2=(*++s-'0')*10;
      m2+=*++s-'0';
      //
      hm=h*60+m;
      hm2=h2*60+m2;
      while(hm<hm2){
        mask[tsk*180+(hm>>3)] |= 1<<(hm&7);
        ++hm;
      }
    }else{ //1 раз в 6:00
       hm=h*60+m;
       mask[tsk*180+(hm>>3)] |= 1<<(hm&7);
    }
   }while(*++s==',');
   while(*s==' ') ++s;
   if(s[1]!=':'){ //интервал
     i=*s-'0';
     while(*++s!=' ') i=i*10+*s-'0';
     task[tsk].interval=i;
     while(*++s==' ');
     if(s[1]!=':'){ //всего запусков
       i=*s-'0';
       while(*++s!=' ') i=i*10+*s-'0';
       task[tsk].maxused=i;
       while(*++s==' ');
     }
   }
   //путь
   task[tsk].exe=s;
   while(*++s);
  }while(++tsk<maxtask && s[1]);
  return 0;
}



int main(){ 
  if(loadini()) return 1;
  return 0;
}




