示例#1
0
文件: xall.c 项目: rforge/muste
static int xall(void)
{
    int i,j,k;
    double x,y;

    int var1;
    int vartotal;
    int howmany;

    i=data_open(word[1],&d); if (i<0) return -1;
    i=mask(&d); if (i<0) return -1;
    i=conditions(&d); if (i<0) return -1;
    var1=varfind(&d,word[2]); if (var1<0) return -1;
    vartotal=atoi(word[3]);
    if (g>4) howmany=atoi(word[4]); else howmany=1;
    if (howmany<1) return -1;

    muste_kv_s_disp("\nConverting \"X ALL\" responses in %d variables...", vartotal);
    muste_kv_s_disp("\nMoving values of %d variables at a time...", howmany);

    if ((var1+howmany*vartotal) > d.m) {
        muste_kv_s_err("Not enough variables after %s!", word[2]);
        return -1;
    }

    for (j=d.l1; j<=d.l2; j++) {
        if (unsuitable(&d,j)) continue;
        muste_kv_s_disp(" %d",j);
        for (i=(var1+howmany*vartotal-howmany); i>=var1; i-=howmany) {
            data_load(&d,j,i,&x);
            if (x==MISSING8) {
                data_save(&d,j,i,MISSING8); /* (data in edit field) */
                for (k=1; k<howmany; k++) { /* 31.5.97 */
                    data_save(&d,j,i+k,MISSING8);
                }
                continue;
            }
            if (howmany==1 && ((int)x == i)) continue;
            if (((int)x < 1) || ((int)x > vartotal)) continue; /* 20.5.97 */
            data_save(&d,j,i,MISSING8);
            data_save(&d,j,var1+howmany*(int)x-howmany,x);
            for (k=1; k<howmany; k++) { /* 20.5.97 */
                data_load(&d,j,i+k,&y);
                data_save(&d,j,i+k,MISSING8);
                data_save(&d,j,var1+howmany*(int)x-howmany+k,y);
            }
        }
    }
    data_close(&d);
    return 1;
}
示例#2
0
文件: statmsf.c 项目: rforge/muste
static int compute_sums()
        {
        unsigned int i,k;
        unsigned int ui;
        long l;

        n=0L;
        for (i=0; i<d.m_act; ++i)
            {
            f[i]=0L; w[i]=0.0; sum[i]=0.0; sum2[i]=0.0;
            }
        for (ui=0; ui<m*n_class; ++ui) f2[ui]=0L;

        sur_print("\n");
        for (l=d.l1; l<=d.l2; ++l)
            {
            double weight;

            if (unsuitable(&d,l)) continue;
            if (weight_variable==-1) weight=1.0;
            else
                {
                data_load(&d,l,weight_variable,&weight);
                if (weight==MISSING8) continue;
                }
            ++n;
      /*********************
            if (muste_kbhit()) { muste_getch(); if (muste_kbhit()) muste_getch(); prind=1-prind; }
            if (prind)
                { sprintf(sbuf,"%ld ",l); sur_print(sbuf); }
      ***********************/
            for (i=0; i<d.m_act; ++i)
                {
                double x;

                if (d.v[i]==weight_variable) continue;
                data_load(&d,l,d.v[i],&x);
                if (x==MISSING8) continue;
                if (x<=limit[0] || x>limit[n_class]) continue;
                ++f[i]; w[i]+=weight; sum[i]+=weight*x; sum2[i]+=weight*x*x;
                for (k=0; k<n_class-1; ++k)
                    {
                    if (x<=limit[k+1]) break;
                    }
                ++f2[k+i*n_class];
                }
            }
        return(1);
        }
示例#3
0
文件: nterm.c 项目: rforge/muste
static int init_regressors() {
  int i,j;
  double dlapu;
  double *dlapu2;

  strcpy(nimi,survo_path);
  strcat(nimi,"SYS/NTERMLIB");

  if (data_open(nimi,&data)<0) {
    sur_print("\nError in opening file NTERMLIB!");
    WAIT; return(-1);
  }
  if (data.m_act>=MAX) {
    sur_print("\nToo many active regressors!");
    WAIT; return(-1);
  }
  for (i=0 ;i<data.m_act; ++i) {
    regressor[i]=(double *)muste_malloc((seq_n+1)*sizeof(double));
    if (regressor[i] == NULL) {
      sur_print("\nOut of memory!");
      WAIT; return(-1);
    }
    for (j=0;j<=seq_n;++j) {
      if (data_load(&data,data.l1+j,data.v[i],&dlapu)!=1) {
        sur_print("\nInvalid value in regressors!");
        WAIT; return(-1);
      }
      dlapu2=regressor[i];
      *(dlapu2+j)=dlapu;
    }
  }
  return(1);
}
示例#4
0
文件: t2test.c 项目: rforge/muste
static int talleta(int k)
        {
        int i,h;
        int l;
        char *p;

        n[k]=0L;
        for (l=d.l1; l<=d.l2; ++l)
            {
            if (unsuitable(&d,l)) continue;
            for (i=0; i<m; ++i)
                {
                data_load(&d,l,v[i],&x[i]);
                if (x[i]==MISSING8) break;

                }
            if (i<m) continue;
//          if (prind)
//              {
//              sprintf(sbuf,"%d ",l); sur_print(sbuf);
//              }
            for (i=0; i<m; ++i)
                {
                p=(char *)&x[i];
                for (h=0; h<sizeof(double); ++h)
                    fputc((int)p[h],tempfile);
                }
            ++n[k];
            }
        return(1);
        }
示例#5
0
static void getdata(fitdata *data, const char *file)
{
  int c = data_load(data,file);
  if (c < 0) {
    /* FIXME don't print errors and abort from the library */
    /* maybe record that there is an error in the fit structure so */
    /* that subsequent calls to fit are ignored even if user ignores */
    /* the return value from the data_load procedure. */
    fprintf(stderr,"%s: %s\n",file,data_error(c));
    exit(1);
  }
}
示例#6
0
文件: statmsf.c 项目: rforge/muste
static int pvalues(int ii)
        {
        int i;
        char x[LLENGTH];
        double *freq;
        long l;
        double a;

        strcpy(x,spb[ii]);
        i=load_X(x); if (i<0) return(-1);
/* Rprintf("\ndim=%d,%d",mX,nX); getch(); */
        i=data_open(word[1],&d); if (i<0) return(-1);
        v=(int *)muste_malloc(mX*sizeof(int));
        if (v==NULL) { ei_tilaa(); return(-1); }
        i=nrot();
        mT=mX; nT=2; rlabT=rlabX ;
        i=mat_alloc_lab(&T,mT,nT,NULL,&clabT);
        freq=T+mT;
        for (i=0; i<mX; ++i) freq[i]=0.0;

        i=conditions(&d); if (i<0) return(-1);

        n=0L; sur_print("\n");
        for (l=d.l1; l<=d.l2; ++l)
            {
            if (unsuitable(&d)) continue;
            sprintf(sbuf,"%ld ",l); sur_print(sbuf);
            ++n;
            for (i=0; i<mX; ++i)
                {
                data_load(&d,l,v[i],&a);
                if (a==MISSING8) continue;
                if (a>X[i]) ++freq[i];
                }
            }
        if (n==0L)
            {
            sur_print("\nNo active observations!"); WAIT; return(-1);
            }

        a=1.0/(double)n;
        for (i=0; i<mX; ++i)
            {
            T[i]=X[i];
            freq[i]*=a;
            }
        strncpy(clabT,"Value   P       ",16);
        sprintf(exprT,"Tail_frequencies_in_data_%s_N=%d",word[1],n);
        save_T("TAILFREQ.M");

        return(1);
        }
示例#7
0
void cmd_eeprom(const char* cmd)
{
	if (strstr( cmd, "load") )
	{
		data_load();	
		strcpy_P(cmd_line, PSTR("Persistent data loaded."));
	}
	else if (strstr( cmd, "save") )
	{
		data_save();
		strcpy_P(cmd_line, PSTR("Persistent data saved."));
	}
}
示例#8
0
int main() {
    ExpDiaDBHandler diadb_h = diadb_load();
    ExpDataHandler db_handler = data_load(diadb_h);
    // 表示線区情報
    ExpErr err;
    ExpDLineData_Initiate(db_handler, diadb_h, "data/displine/dlinemst.dat", "data/displine/ptn_match.dat", &err);

    // 探索
    ExpNaviHandler   navi_handler   = ExpNavi_NewHandler(db_handler, &err);
    ExpStationCode code1;
    ExpStationCode code2;
    ExpStation_SetEmptyCode(&code1);
    ExpStation_SetEmptyCode(&code2);
    ExpStation_SharedCodeToCode( db_handler, 22828, &code1);
    ExpStation_SharedCodeToCode( db_handler, 25853, &code2);
    ExpNavi_SetStationEntry( navi_handler, 1, &code1 );
    ExpNavi_SetStationEntry( navi_handler, 2, &code2 );

    //出発
    ExpInt16 searchMode = 0;
    ExpDate  searchDate = 20150625;
    ExpInt16 searchTime = 600;
    ExpDiaVehicles vehicles;
    ExpDiaVehicles_Clear(&vehicles, EXP_TRUE);
    ExpRouteResHandler searchResult = ExpRoute_DiaSearch(  navi_handler, 
                                                            searchMode,
                                                            searchDate,
                                                            searchTime,
                                                            nullptr, 
                                                            0,
                                                            &vehicles );


    output_result(searchResult);

    ExpNavi_DeleteHandler(navi_handler);
    ExpRoute_Delete(searchResult);
    ExpDB_Terminate(db_handler);
    ExpDiaDB_Terminate(diadb_h);
}
示例#9
0
文件: cluster.c 项目: rforge/muste
void muste_cluster(char *argv)
        {
        int i,k;
        double a;
        char ch;

//      if (argc==1) return;
        s_init(argv);

        if (g<2)
            {
            sur_print("\nUsage: CLUSTER <SURVO_data>,<output_line>");
            WAIT; return;
            }
        tulosrivi=0;
        if (g>2)
            {
            tulosrivi=edline2(word[2],1,1);
            if (tulosrivi==0) return;
            }

        strcpy(aineisto,word[1]);
        i=data_open(aineisto,&d); if (i<0) return;
        i=sp_init(r1+r-1); if (i<0) return;
        i=mask(&d); if (i<0) return;
        scales(&d);
        i=conditions(&d); if (i<0) return;

        gvar=activated(&d,'G');
        if (gvar<0)
            {
            sur_print("\nNo grouping variable (activated by 'G') given!");
            WAIT; return;
            }

        ivar=-1; ivar=activated(&d,'I');

        i=spfind("TRIALS");
        if (i>=0) maxiter=atoi(spb[i]);

        i=rand_init(); if (i<0) return;   /* 30.4.1994 */

        i=spfind("TEMPFILE");
        if (i>=0) strcpy(tempfile,spb[i]);
        else { strcpy(tempfile,etmpd); strcat(tempfile,"SURVO.CLU"); }

        i=spfind("PRIND");
        if (i>=0 && atoi(spb[i])>0) prind=1;

        data_load(&d,1L,gvar,&a);
        i=data_save(&d,1L,gvar,a);
        if (i<0) return;

        gvar2=(int *)muste_malloc(d.m_act*sizeof(int));
        if (gvar2==NULL) { not_enough_memory(); return; }

        k=0; n_saved=0; m=0;
        for (i=0; i<d.m_act; ++i)
            {
            ch=d.vartype[d.v[i]][1];
            if (ch=='G')
                {
                ++k;
                gvar2[n_saved]=d.v[i];    /* gvar=gvar2[0] */
                ++n_saved; continue;
                }
            if (ch=='I') { ++k; continue; }
            d.v[m++]=d.v[i];
            }
/*
printf("\nivar=%d gvar=%d m=%d\n",ivar,gvar,m); getch();
for (i=0; i<m; ++i) Rprintf(" %d",d.v[i]); getch();
printf("\n"); for (i=0; i<n_saved; ++i) Rprintf(" %d",gvar2[i]); getch();
*/

        i=spfind("GROUPS");
        if (i<0) ng=2; else ng=atoi(spb[i]);
        if (ng<2) ng=2;
        ng2=ng+2;
        mn=m; if (mn<ng) mn=ng;

        first_line=r+1; if (r+n_saved>r3) first_line=1;
        n_show=n_saved; if (n_show>r3) n_show=r3;

        i=varaa_tilat(); if (i<0) return;

        i=lue_havainnot(); if (i<0) return;
        hav_muistissa=havainnot_muistiin();
        ortogonalisoi();
        if (ivar_init) alustava_luokittelu();
        LOCATE(first_line,1);
        SCROLL_UP(first_line,r3+1,r3);
        sur_print("\nCluster analysis: Iteration 1:");
        while (sur_kbhit()) sur_getch();
        it=0;
        while (1)
            {
            while (1)
                {
                if (it) init_gr();
                i=init_tilat();
                if (i>=0) break;
                if (maxiter==1) return;
                }
            iteroi();
            ++it;
            if (maxiter>1) vertaa_muihin();
            if (it==maxiter) break;
            LOCATE(first_line,1);
            sprintf(sbuf,"\nIteration %d (Cluster analysis)",it);
            sur_print(sbuf);
            for (i=0; i<n_show; ++i)
               {
               if (freq[i]==0) break;
               sprintf(sbuf,"\n%d %g %d        ",i+1,lambda2[i],freq[i]); sur_print(sbuf);
               }
            if (sur_kbhit())
                {
                i=sur_getch(); if (i=='.') break;
                }
            }
        tulosta();

        data_close(&d);
        sur_delete(tempfile);
        s_end(argv);
        }
示例#10
0
文件: cluster.c 项目: rforge/muste
static int lue_havainnot()
        {
        int j;
        int i,h;
        double y;
        int miss;
        int group;
        char *p;

        hav=muste_fopen(tempfile,"wb");
        if (hav==NULL)
            {
            sprintf(sbuf,"\nCannot open file %s for temporary data!",tempfile);
            sur_print(sbuf); WAIT; return(-1);
            }

        sur_print("\nReading observations... ");
        for (i=0; i<m*m; ++i) T[i]=0.0;
        n=0L;
        for (j=d.l1; j<=d.l2; ++j)
            {
            if (unsuitable(&d,j)) continue;
            miss=0;
            for (i=0; i<m; ++i)
                {
                data_load(&d,j,d.v[i],&y);
                if (y==MISSING8) { miss=1; break; }
                xx[i]=y;
                }
            if (miss) continue;

            if (ivar>=0)
                {
                data_load(&d,j,ivar,&y);
                if (y==MISSING8) continue;
                group=y;

                if (group<=0 || group>ng)
                    { ++ivar_init; group=0; }
                }
            else
                group=ng*rand_uniform()+1;

            p=(char *)&group;
            for (h=0; h<sizeof(int); ++h) putc((int)p[h],hav);
            group=0; p=(char *)&group;
            for (i=0; i<n_saved; ++i)
                for (h=0; h<sizeof(int); ++h) putc((int)p[h],hav);

            p=(char *)&j;
            for (h=0; h<sizeof(int); ++h) putc((int)p[h],hav);
            for (i=0; i<m; ++i)
                {
                p=(char *)&xx[i];
                for (h=0; h<sizeof(double); ++h) putc((int)p[h],hav);
                }
            ++n;

            for (i=0; i<m; ++i)
                for (h=0; h<=i; ++h) T[i+m*h]+=xx[i]*xx[h];

            if (sur_kbhit())
                {
                i=sur_getch(); prind=1-prind;
                }
            if (prind) { sprintf(sbuf,"%d ",j); sur_print(sbuf); }
            }

        n_saved_len=n_saved*sizeof(int);
        hav_len=sizeof(int)+n_saved_len+sizeof(int)+m*sizeof(double);
        muste_fclose(hav);

        for (i=0; i<m; ++i)
            for (h=0; h<i; ++h) T[h+m*i]=T[i+m*h];

        for (i=0; i<n_saved; ++i) { lambda2[i]=1e100; freq[i]=0; }

        return(1);
        }
示例#11
0
文件: show.cpp 项目: s12v/mtop
int main()
{
  // Инициализация глобальных переменных
  query = new char[65536];
	areaCodeNumber = 0;
	globalError = 0;

	// Инициализация генератора случайных чисел с помощью номера процесса
	init_genrand(getpid());

  // Подключение к MySQL
  connection = mysql_init(NULL);
  if(connection == NULL)
  {
    loading_error_exit(1);
  }
  if(mysql_real_connect(connection, NULL, MTOP_MYSQL_RO_USER, MTOP_MYSQL_RO_PASSWD, MTOP_MYSQL_DB, 0, NULL, 0) == NULL)
  {
    loading_error_exit(1);
  }

	// Загрузка регионов/городов
	// Загрузка данных геотаргетинга
	gi = GeoIP_open(MTOP_GEOIP_FILE, GEOIP_MEMORY_CACHE);
	if(gi == NULL)
	{
    loading_error_exit(3);
	}

	// Составляем массив соответствий areaCodeArr[AreaId] = AreaCode
	mysql_query_check(globalError, connection, "SELECT AreaId, AreaCode FROM Area;");
	result = mysql_store_result(connection);
	areaCodeNumber = mysql_num_rows(result);
	if(areaCodeNumber > 0) areaCodeArr = new int[areaCodeNumber];
	while((row = mysql_fetch_row(result)) != NULL)
	{
	  i = atoi(row[0]);
	  if(i > 0 && i < areaCodeNumber)	areaCodeArr[i] = atoi(row[1]);
	}
	mysql_free_result(result);

	// Открытие канала FIFO
	int fd = open(MTOP_FIFO_FILE, O_WRONLY | O_NONBLOCK);
	if(fd < 0)
	{
    loading_error_exit(133);
	}

  // Загрузка данных
	data_load();

	//// ПЕРЕМЕННЫЕ, необходимые для работы основного цикла

  #ifdef DEBUG
		struct timeval start_time, end_time;  // необходимо для определения времени работы основного цикла
	#endif
	struct timeval load_timeout, tmp_time;	// таймаут с предыдущей загрузки данных
	gettimeofday(&load_timeout, NULL);
	
  char *query_string = new char[1024];
  char *remote_addr = new char[50];
  char *p;
  int siteId;
  int accountId;
  int areaCodeId;
	time_t time_of_day;
	struct tm *tmbuf;

	PROFILE **profileCheckedArr;
	if(profileNum > 0) profileCheckedArr = new PROFILE*[profileNum];
	int	profileCheckedNum;

	BANNERCHECKED	*bannerCheckedArr;
	if(bannerNum) bannerCheckedArr = new BANNERCHECKED[bannerNum];
	int	bannerCheckedNum;
	int newPriority;
	int prioritySumm;

	unsigned long	rnd;
	unsigned long trafficKey;

	SITE *currentSite;
	BANNER *currentBanner;
	unsigned int bannerShowNum;

	TRAFFIC currentShow;

	int found;
	int error;

	int outputCodeType;

/////// ОСНОВНОЙ ЦИКЛ

	while(FCGI_Accept() >= 0)
	{
		#ifdef DEBUG
			printf("Content-type: text/plain\r\n\r\n");
			PrintEnv("Request environment", environ);
		#endif

    // Определение необходимости перезагрузки данных
		gettimeofday(&tmp_time, NULL);
		if(tmp_time.tv_sec - load_timeout.tv_sec > MTOP_DATA_TIMEOUT)
		{
			data_clear();										// Очистка памяти
			data_load();										// Перезагрузка данных
			gettimeofday(&load_timeout, NULL);
		}
		
		#ifdef DEBUG
			gettimeofday(&start_time, NULL);
		#endif

		// Инициализация переменных
		memset(query_string, 0, 1024);		// строка запроса
		memset(remote_addr, 0, 50);       // адрес

		p = NULL;                         // временная переменная

		siteId = 0;                       // ID сайта и аккаунта, полученные
		accountId = 0;                    // из строки запроса. Не доверять!
		areaCodeId = 0;                   // ID области (именно ID)

	  tmp_ui = 0;

		time_of_day = time(NULL);
		tmbuf = localtime(&time_of_day);  // структура с днём недели и т.п.

		for(i = 0; i < profileNum; i++)
		{ // обнуляем массив
			profileCheckedArr[i] = NULL;
		}
		profileCheckedNum = 0;

		for(i = 0; i < bannerNum; i++)
		{ // обнуляем массив
			bannerCheckedArr[i].banner = NULL;
			bannerCheckedArr[i].Priority = 0;
		}
		bannerCheckedNum = 0;

		newPriority = 0;									// временная переменная
		prioritySumm = 0;                 // сумма приоритетов подходящих баннеров

		currentSite = NULL;								// сайт, на котором происходит показ
		currentBanner = NULL;							// баннер, который показывается
		bannerShowNum = 1;								// количество баннеров, которые необходимо показать

		error = 0;                        // во время выполнения возникла какая-от ошибка
		found = 0;												// временная переменная
		outputCodeType = 0;               // тип выводимого кода (TEXT, WAP, картинка)

	  // Переносим переменную окружения QUERY_STRING в локальную переменную
	  p = getenv("QUERY_STRING");
		if(p != NULL)
		{
		  strncpy(query_string, p, 1024);
		}

		#ifdef DEBUG
		  printf("query_string = %s\n", query_string);
		#endif

	  // Выделяем тип вывода
	  // !!!!!! доработать
	  p = strtok(query_string, ";");
	  if(p != NULL) outputCodeType = atoi(p);
	  p = strtok(NULL, ";"); 									// ID аккаунта
	  if(p != NULL) siteId = atoi(p);
	  p = strtok(NULL, ";");									// ID сайта
	  if(p != NULL) accountId = atoi(p);

	  if(outputCodeType == CODE_TEXT_PHP)
	  {
		  p = strtok(NULL, ";");								// Количество баннеров для показа
		  if(p != NULL) bannerShowNum = atoi(p);
		  p = strtok(NULL, ";");								// IP-адрес, тип - int
		  if(p != NULL) tmp_ui= atoi(p);
	  }

	  // Проверка bannerShowNum in [1,MTOP_MAX_BANNER_NUM]
	  if( (bannerShowNum <= 0) || (bannerShowNum > MTOP_MAX_BANNER_NUM) )
	  {
			bannerShowNum = 1;
	  }

		#ifdef DEBUG
		  printf("outputCodeType = %d\n", outputCodeType);
		  printf("siteId         = %d\n", siteId);
		  printf("accountId      = %d\n", accountId);
		#endif

		// Определяем IP-адрес
		if(tmp_ui > 0)
		{
			ipntoa(tmp_ui, remote_addr);
		}
		else
		{
		  // Переносим переменную окружения REMOTE_ADDR в локальную переменную
		  p = getenv("REMOTE_ADDR");
			if(p != NULL)
			{
				strncpy(remote_addr, p, 49);
			}
			else
			{
				strncpy(remote_addr, MTOP_SERVER_IP, 49);
			}
		}

	  // Проверяем ID аккаунта и сайта на корректность (частично)
	  if(siteId <= 0 || accountId <= 0)
	  {
			error = 2;
	  }

		// Находим сайт, на котором происходит показ
		// Таким образом проверяем корректность siteId и accountID
		if(!error)
		{
		  // перебираем все сайты (обход списка)
			for(site = siteList; site != NULL; site = site->next)
			{
				if( (site->Id == siteId) && (site->AccountId == accountId) )
				{ // нашли сайт, устанавливаем указатель на него
					currentSite = site;
					#ifdef DEBUG
					  printf("Site found:\n");
					  currentSite->show();
					#endif
					break;
				}
			}
			if(currentSite == NULL)
			{ // не нашли сайт, ошибка
				error = 4;
			}
		}
		//

	  printf("IP (%s)\n", remote_addr);

		// Находим область (город или регион) по адресу
		if(!error)
		{
			#ifdef DEBUG
			  printf("IP (%s) ", remote_addr);
			#endif
			gir = GeoIP_record_by_addr(gi, remote_addr);
			if(gir != NULL)
			{ // нашли регион для IP
			  if(gir->region != NULL)
			  {
				  areaCodeId = atoi(gir->region);
					#ifdef DEBUG
					  printf(" FOUND. ", remote_addr);
					  printf("Country_code=%s, ", gir->country_code);
					  printf("region=%s, ", gir->region);
						printf("city=%s\n", gir->city);
					#endif
					GeoIPRecord_delete(gir);
				}
			}
		}

		// Перебираем профили (нерекурсивный обход списка)
		if(!error)
		{
			for(profile = profileList; profile != NULL; profile = profile->next)
			{ // отбор подходящего профиля
				#ifdef DEBUG
					printf("Profile:\n");
					profile->show();
				#endif

				// проверяем совпадение сайта
				if(profile->UserId == currentSite->UserId)
				{
					if(profile->OwnSites == MTOP_NET_OWNSITES_NO)
					{
						#ifdef DEBUG
							printf("MTOP_NET_OWNSITES_NO, rejecting profile:\n");
						#endif
						continue;
					}
				}

				// проверяем день недели
				if(!(dayOfWeekBitArr[tmbuf->tm_wday] & profile->DayOfWeek))
				{
					#ifdef DEBUG
						printf("DayOfWeek, rejecting profile:\n");
					#endif
					continue;
				}
	
				// проверяем время суток
				if(!(timeBitArr[tmbuf->tm_wday] & profile->Time))
				{
					#ifdef DEBUG
						printf("Time, rejecting profile:\n");
					#endif
					continue;
				}

				// Проверяем директ-таргетинг (белый список)
				if(profile->TargetingWhiteNumber > 0)
				{
				  found = 0;
				  for(i = 0; i < profile->TargetingWhiteNumber; i++)
				  {
				  	if(profile->TargetingWhite[i] == currentSite->Id)
				  	{
				  	  found = 1;
				  		break;
				  	}
				  }
				  // не найдено в белом списке - пропускаем профиль
				  if(!found) continue;
				}

				// Проверяем директ-таргетинг (черный список)
				if(profile->TargetingBlackNumber > 0)
				{
				  found = 0;
				  for(i = 0; i < profile->TargetingBlackNumber; i++)
				  {
				  	if(profile->TargetingBlack[i] == currentSite->Id)
				  	{
				  	  found = 1;
				  		break;
				  	}
				  }
				  // найдено в черном списке - пропускаем профиль
				  if(found) continue;
				}

				// Проверяем таргетинг по рубрикам
				if(profile->TargetingRubricNumber > 0)
				{
				  found = 0;
				  for(i = 0; i < profile->TargetingRubricNumber; i++)
				  {
				  	if(profile->TargetingRubric[i] == currentSite->RubricId)
				  	{
				  	  found = 1;
				  		break;
				  	}
				  }
				  // не найдено в рубриках - пропускаем профиль
				  if(!found) continue;
				}

				// Проверяем геотаргетинг
				if(profile->TargetingAreaNumber > 0)
				{
				  found = 0;
				  for(i = 0; i < profile->TargetingAreaNumber; i++)
				  {
				  	if(profile->TargetingArea[i] == areaCodeId)
				  	{
				  	  found = 1;
				  		break;
				  	}
				  }
				  // не найдено в рубриках - пропускаем профиль
				  if(!found) continue;
				}

				// добавляем в массив проверенных профилей
				profileCheckedArr[profileCheckedNum++] = profile;
			}
		}

		#ifdef DEBUG
	  printf("Selected profiles:\n");
		for(i = 0; i < profileCheckedNum; i++)
		{
		  profileCheckedArr[i]->show();
		}
		#endif

		// Перебираем баннеры и составляем массив сумм
		#ifdef DEBUG
		  printf("Total banners. bannerNum=%d\n", bannerNum);
		#endif
		if(!error)
		{
			for(banner = bannerList; banner != NULL; banner = banner->next)
			{
			  if( (banner->NetworkId == currentSite->NetworkId) && (banner->Priority > 0) )
			  {
					#ifdef DEBUG
					  printf("Banner:\n");
					  banner->show();
					#endif
			    found = 1;
			    // поиск в массиве подходящих профилей
					for(i = 0; i < profileCheckedNum; i++)
					{
					  profile = profileCheckedArr[i];
						if(banner->ProfileId == profile->Id)
						{
						  if(profile->OwnSites == MTOP_NET_OWNSITES_CHECK)
						  { // Требуется проверка URL сайта и баннера
							  if(strcmp(banner->HrefHash, currentSite->UrlHash) == 0)
							  { // URL совпадают, баннер не подходит
									found = 0;
									#ifdef DEBUG
									  printf("OwnSites == MTOP_NET_OWNSITES_CHECK, HrefHash = UrlHash, found = 0\n\n");
									#endif
							  	break;
							  }
							}
						  if( (profile->OwnSites == MTOP_NET_OWNSITES_NO) && (currentSite->UserId == profile->UserId))
						  { // Показ на своих сайтах запрещен
								#ifdef DEBUG
								  printf("MTOP_NET_OWNSITES_NO, Site->UserId = profile->UserId\n\n");
								#endif
						  	found = 0;
								break;
							}
						}
					}

					// баннер в профиле и подходит для показа
					if(found)
					{
					  // Добавляем баннер к массиву проверенных
					  newPriority = (int)(banner->Priority*200);
						bannerCheckedArr[bannerCheckedNum].banner = banner;
						bannerCheckedArr[bannerCheckedNum].Priority = prioritySumm + newPriority;
						prioritySumm += newPriority;

						#ifdef DEBUG
							printf("added banner to bannerCheckedArr[%d], ", bannerCheckedNum);
						  printf("Id: %d, ", banner->Id);
							printf("PrioritySumm: %d\n\n", prioritySumm);
						#endif

						bannerCheckedNum++;
						//
					}
				}
			}
		}

		// Цикл показов баннера
		for(j = 0; (j < bannerShowNum) && (j < MTOP_MAX_BANNER_NUM); j++)
		{
			// Если хотя бы один баннер можно показать
			if((bannerCheckedNum > 0) && (prioritySumm > 0))
			{
				rnd = genrand_int32();			// генерация случайного числа (скорость - ~10 млн. раз в сек)
				trafficKey = rnd;						// ключ для записи в базу трафика

				// Выбираем случайное целое число из интервала [0, prioritySumm-1]
				// можно попробовать заменить на (int)genrand_real2()*prioritySumm
				// т.е. rnd [0,1) * prioritySumm
				if(!error)
				{
					rnd = rnd % prioritySumm;
				}

				// определяем выпавший баннер
				if(!error)
				{
					for(i = 0; i < bannerCheckedNum; i++)
					{
						if(rnd < bannerCheckedArr[i].Priority)
						{
						  currentBanner = bannerCheckedArr[i].banner;
							break;
						}
					}
				}

				// Передача данных обработчику статистики
				if(!error)
				{
					currentShow.Type = mtop_signature_show;
					currentShow.SiteId = siteId;
					currentShow.AccountId = accountId;
					currentShow.NetworkId = currentSite->NetworkId;
					currentShow.BannerId = currentBanner->Id;
					currentShow.BannerAccountId = currentBanner->AccountId;
					currentShow.IP = ipaton(remote_addr);
					currentShow.Key = trafficKey;

				  p = getenv("HTTP_REFERER");
					if(p != NULL)
					{
					  strncpy(currentShow.Referer, p, 128);
					}

					// Находим и записываем AreaId
					for(i = 0; i < areaCodeNumber; i++)
					{
						if(areaCodeArr[i] == areaCodeId)
						{
							currentShow.AreaId = i;
							break;
						}
					}
				
					// Запись в канал
					if(write(fd, &currentShow, sizeof(TRAFFIC)) == -1)
					{
						#ifdef DEBUG
							printf("ERROR writing\n");
						#endif
					}
				}
			}
			//

			// Вывод отклика
			if((currentBanner != NULL) && !error)
			{ // баннер найден
				#ifdef DEBUG
					printf("\n-----------------\nSHOW BANNER:\n");
				  currentBanner->show();
				#endif

				switch(outputCodeType)
				{
					case CODE_IFRAME:
					{
					  if(j == 0)
					  {
							printf("Content-type: text/html\r\n\r\n");
						}
						printf("<html><head><title></title></head><body leftmargin=0 topmargin=0 marginwidth=0 marginheight=0><a href=\"http://nw.mtop.ru/go.cgi?%u;%u;%u\" target=\"_blank\"><img src=\"http://mtop.ru/i/%s\" width=%d height=%d border=0 alt=\"%s\"></a><br></body></html>\n", currentBanner->Id, siteId, trafficKey, currentBanner->File, currentSite->XSize, currentSite->YSize, currentBanner->String);
					 	break;
					}
					case CODE_TEXT:
					{
					  if(j == 0)
					  {
							printf("Content-type: application/x-javascript\r\n\r\n");
						}
						printf("document.write('<a href=\"http://nw.mtop.ru/go.cgi?%u;%u;%u\" target=\"_blank\">%s</a><br>');\r\n", currentBanner->Id, siteId, trafficKey, currentBanner->String);
					 	break;
					}
					case CODE_WAP:
					{
					  printf("Location: http://mtop.ru/i/%s\r\n\r\n", currentBanner->File);
					 	break;
					}
					case CODE_TEXT_PHP:
					{
					  if(j == 0)
					  {
							printf("Content-type: text/plain\r\n\r\n");
						}
						printf("<a href=\"http://nw.mtop.ru/go.cgi?%u;%u;%u\" target=\"_blank\">%s</a>\n", currentBanner->Id, siteId, trafficKey, currentBanner->String);
					 	break;
					}
				}
			}
			else
			{ // нет ни одного подходящего баннера или возникла ошибка
				// показываем загрушку для данной сети
			  if(j == 0)
			  {
					printf("Content-type: text/html\r\n\r\n");
				}
				if(currentSite != NULL)
				{
					#ifdef DEBUG
						printf("No banner found\n");
					#endif
					show_default_banner(currentSite->NetworkId, outputCodeType);
				}
				else
				{ // не найден даже сайт
					#ifdef DEBUG
						printf("No banner found, no site found\n");
					#endif
					show_default_banner();
				}
			}
		}
		//

		#ifdef DEBUG
			printf("Process ID: %d\n", getpid());
			gettimeofday(&end_time, NULL);
			double timediff = (end_time.tv_sec - start_time.tv_sec) + ((double)end_time.tv_usec - (double)start_time.tv_usec)/1000000;
			printf("main while{} time: %f seconds\n", timediff);
		#endif
	}

/////// ДЕИНИЦИАЛИЗАЦИЯ: закрываем соединение с MySQL, освобождаем память

  // Закываем соединение с MySQL
  mysql_close(connection);

  // Освобождаем память
	delete query;
	delete query_string;
	delete remote_addr;
	delete areaCodeArr;

	// Закрываем базу GeoIP
	GeoIP_delete(gi);

	return 0;
}
示例#12
0
文件: linco.c 项目: rforge/muste
static int linear_combinations()
        {
        int i,k,m;
        int j;
        double val;
//        int miss;
        int keyind;
        int l;
        int prind_count;
        extern double sis_tulo();

        sur_print("\nComputing and saving linear combinations: ");

        keyind=1;
        i=hae_apu("prind",sbuf); if (i) keyind=atoi(sbuf);
        i=spfind("PRIND"); if (i>=0) keyind=atoi(spb[i]);


        for (i=0; i<cdim; ++i)
            if (outvar[i]>=0) { sprintf(sbuf," %.*s",8,d.varname[outvar[i]]); sur_print(sbuf); }
        sur_print("\n");

        for (i=0; i<cdim; ++i) if (outvar[i]>=0) break;
        if (i==cdim)
            {
            sprintf(sbuf,"\nParameters missing in %s!",word[2]);
            sur_print(sbuf); WAIT; return(-1);
            }

        prind_count=0;
        for (j=d.l1; j<=d.l2; ++j)
            {
            ++prind_count;
            if (prind_count==100)
                {
                prind_count=0;
                if (sur_kbhit()) { sur_getch(); keyind=1-keyind; }
                }
            if (unsuitable(&d,j)) continue;
            if (keyind) { sprintf(sbuf," %d",j); sur_print(sbuf); }
            for (k=0; k<rdim; ++k)
                {
                m=var[k];
                if (m==-1) y[k]=1.0;
                else
                    {
                    l=j+lag[k];
                    if (l>=1L && l<=d.n)
                        data_load(&d,l,m,&y[k]);
                    else
                        y[k]=MISSING8;
                    }
                }
            for (i=0; i<cdim; ++i)
                {
                if (outvar[i]==-1) continue;
//                miss=0;

                for (k=0; k<rdim; ++k) if (y[k]==MISSING8) break;
                if (k<rdim) val=MISSING8;
                else val=sis_tulo(A+i*rdim,y,1,1,rdim);
                k=data_save(&d,j,outvar[i],val); if (k<0) return(-1);
                }
            }
        return(1);
        }
示例#13
0
文件: rndtest.c 项目: rforge/muste
static int read_data()
        {
        int i;
        int j;
        int prind;
        int runlen;
        unsigned int u;
        double a;

        n=0L; run_start=0L; up=-1;
        sum1=sum2=0.0;

        if (n_sub)
            {
            i_sub=0; sub_sum1=0.0; sub_min=1e30; sub_max=-1e30;
            for (i=0; i<n_subclass; ++i)
                {
                p_mean[i]=p_min[i]=p_max[i]=0;
                }
            }

        if (fr_n)
            for (i=0; i<fr_n; ++i) fr_f[i]=0L;

        lagpos=0;
        for (i=0; i<maxlag; ++i) lagv[i]=lagvv[i]=0.0;
        for (i=0; i<maxgap; ++i) gap[i]=0L;
        gaplen=gapmax=0L;
        if (permlen)
            {
            i_perm=0;
            for (u=0; u<n_perm; ++u) f_perm[u]=0L;
            }
        if (poklen)
            {
            i_pok=0;
            for (u=0; u<n_pok; ++u) f_pok[u]=0L;
            for (u=0; u<poklen; ++u) f1_pok[u]=0;
            }
        if (couplen)
            {
            init_coup();
            for (u=0; u<coup_max; ++u) f_coup[u]=0L;
            }
        i=spfind("PRIND"); if (i>=0) prind=atoi(spb[i]); else prind=0;
        sur_print("\n");
        for (j=d.l1; j<=d.l2; ++j)
            {
            if (unsuitable(&d,j)) continue;
/***********************
            if (sur_kbhit()) { sur_getch(); prind=1-prind; }
************************/
            if (prind)
                {
                sprintf(sbuf,"%d ",j); sur_print(sbuf);
                }

            data_load(&d,j,var,&x);
            if (x==MISSING8) continue;
            ++n;
            sum1+=x; sum2+=x*x;
            if (n_sub)
                {
                sub_sum1+=x;
                if (x<sub_min) sub_min=x;
                if (x>sub_max) sub_max=x;
                ++i_sub;
                if (i_sub==n_sub)
                    {
                    sub_sum1/=(double)n_sub;
                    a=muste_cdf_std(sqrt(12.0*(double)n_sub)*(sub_sum1-0.5));
                    i=a*(double)n_subclass;
                    ++p_mean[i];

                    i=pow(1.0-sub_min,(double)n_sub)*(double)n_subclass;
                    ++p_min[i];
                    i=pow(sub_max,(double)n_sub)*(double)n_subclass;
                    ++p_max[i];

                    i_sub=0; sub_sum1=0.0; sub_min=1e30; sub_max=-1e30;
                    }
                }
            if (fr_n) freq();
            runs_updown();
            lags();
            if (maxgap) gaps();
            if (permlen) permtest();
            if (poklen) poker();
            if (couplen) coupon();
            xlag=x;
            }
        runlen=n-run_start;
        if (runlen>MAXRUN) runlen=MAXRUN-1;
        if (up) ++runs_up[(int)(runlen-1)];
        else    ++runs_down[(int)(runlen-1)];
        if (maxgap)
            {
            if (gaplen>gapmax) gapmax=gaplen;
            if (gaplen>(unsigned int)(maxgap-1)) gaplen=maxgap-1;
            ++gap[(int)gaplen];
            }
        return(1);
        }
示例#14
0
文件: xcorr.c 项目: rforge/muste
static int lue_datat()
{
    int j;
    double x,y;
    int i,k,h;

    k=0;
    if (autocorr) {
        sprintf(sbuf,"\nLoading values of %s ...",word[2]);
        sur_print(sbuf);
    }
    else {
        sprintf(sbuf,"\nLoading values of %s and %s ...",word[2],word[3]);
        sur_print(sbuf);
    }
    for (j=d.l1; j<=d.l2; ++j)
    {
        if (unsuitable(&d,j)) continue;
        data_load(&d,j,xvar,&x);
        if (x==MISSING8) {
            if (n==0) continue;
            break;
        }
        if (!autocorr)
        {
            data_load(&d,j,yvar,&y);
            if (y==MISSING8) {
                if (n==0) continue;
                break;
            }
        }

        xsum+=x;
        xsum2+=x*x;
        if (!autocorr) {
            ysum+=y;
            ysum2+=y*y;
            corr+=x*y;
        }

        for (i=0; i<maxlag; ++i)
        {
            if ((int)n<i+1) break;
            h=k-i-1;
            if (h<0) h+=maxlag;
            xx[i]+=x*x2[h];
            xs1[i]+=x;
            xs2[i]+=x2[h];
            if (!autocorr)
            {
                yy[i]+=y*y2[h];
                ys1[i]+=y;
                ys2[i]+=y2[h];
                xy1[i]+=x*y2[h];
                xy2[i]+=x2[h]*y;
            }
        }
        x2[k]=x;
        if (!autocorr) y2[k]=y;
        ++k;
        if (k==maxlag) k=0;
        ++n;
    }

    if (n==0)
    {
        sur_print("\nNo valid observations!");
        WAIT;
        return(-1);
    }
    xmean=xsum/(double)n;
    xxs=xsum2-xsum*xmean;
    if (fabs(xxs)<1e-10) {
        var_const(word[2]);
        return(-1);
    }
    if (!autocorr)
    {
        ymean=ysum/(double)n;
        yys=ysum2-ysum*ymean;
        if (fabs(yys)<1e-10) {
            var_const(word[3]);
            return(-1);
        }
    }
    for (i=0; i<maxlag; ++i)
    {
        xx[i]=(xx[i]-xmean*(xs1[i]+xs2[i])+(n-i-1)*xmean*xmean)/xxs;
        if (!autocorr)
        {
            yy[i]=(yy[i]-ymean*(ys1[i]+ys2[i])+(n-i-1)*ymean*ymean)/yys;
            xy1[i]=(xy1[i]-ymean*xs1[i]-xmean*ys2[i]+(n-i-1)*xmean*ymean)
                   /sqrt(xxs*yys);
            xy2[i]=(xy2[i]-ymean*xs2[i]-xmean*ys1[i]+(n-i-1)*xmean*ymean)
                   /sqrt(xxs*yys);

        }
    }
    if (!autocorr) corr=(corr-n*xmean*ymean)/sqrt(xxs*yys);

    sprintf(sbuf,"\n%u observations loaded!",n);
    sur_print(sbuf);


    return(1);
}
示例#15
0
文件: snb.c 项目: The-Compiler/snb
int main(int argc, char *argv[]) {
  FILE *fp;
  Result res;
  Entry *root;
  char *path, *locale;
  int opt;

#ifdef SCR_WIDTH
  ui_scr_width = SCR_WIDTH;
#else
  ui_scr_width = 0;
#endif

  locale = "";
  while ((opt = getopt(argc, argv, "hvl:w:b")) != -1) {
    switch (opt) {
      case 'b':
        use_term_colors = !use_term_colors;
        break;
      case 'w':
        ui_scr_width = atoi(optarg);
        if (ui_scr_width < 0) {
          fprintf(stderr, "WARN: Wrong width value, fixed-column is off\n");
          fprintf(stderr, "Press enter to continue.\n");
          fgetc(stdin);
          ui_scr_width = 0;
        }
        break;
      case 'l':
        locale = optarg;
        break;
      case 'v':
        version();
        break;
      case 'h':
      default:
        usage(argv[0]);
        break;
    }
  }

  fp = NULL;

  if (setlocale(LC_ALL, locale) == NULL) {
    fprintf(stderr, "WARN: Couldn't change LC_ALL to '%s'\n", locale);
    fprintf(stderr, "Press enter to continue.\n");
    fgetc(stdin);
  }

  if (optind < argc) {
    fp = fopen(argv[optind], "r");
    if (fp == NULL) {
      perror("Can't open your file");
      exit(1);
    }
    path = argv[optind];
  }
#ifdef DEFAULT_FILE
  else {
    fp = fopen(DEFAULT_FILE, "r");
    path = DEFAULT_FILE;
  }
#endif

  UI_File.path = NULL;
  if (fp) {
    res = data_load(fp);
    UI_File.loaded = true;
    UI_File.path = realpath(path, NULL);
    if (!UI_File.path) {
      perror("Couldn't resolve path");
      exit(3);
    }
    fclose(fp);
  } else {
    res = entry_new(32);
    UI_File.loaded = false;
  }

  if (!res.success) {
    fwprintf(stderr, L"ERROR: %S.\n", res.msg);
    perror("Unix error");
    exit(2);
  }

  ui_start();

  root = (Entry *)res.data;
  if (!fp)
    root->length = 0;
  res = ui_set_root(root);
  if (!res.success) {
    fwprintf(stderr, L"ERROR: %S.\n", res.msg);
    perror("Unix error");
    exit(3);
  }
  ui_refresh();

  ui_mainloop();
  ui_stop();

  res = ui_get_root();
  if (!res.success) {
    fwprintf(stderr, L"ERROR: %S.\n", res.msg);
    perror("Unix error");
    exit(4);
  }

  data_unload((Entry *)res.data);
  free(UI_File.path);

  return 0;
}
示例#16
0
文件: powers.c 项目: rforge/muste
void muste_powers(char *argv)
        {
        int i,k;
        int j;
        double a,b;

        degree=2;
        var_type='8';

        s_init(argv);
        if (g<2)
            {
            sur_print("\nUsage: POWERS <SURVO_data>");
            sur_print("\n       POW_VARS=<list_of_variables>");
            sur_print("\n       DEGREE=<max_power> TYPE=<1|2|4|8>");
            WAIT; return;
            }

        strcpy(aineisto,word[1]);
        i=data_open3(aineisto,&d,1,1,1,1);
        if (i<0) { s_end(argv[1]); return; }
        i=spec_init(r1+r-1); if (i<0) return;
        i=conditions(&d); if (i<0) { s_end(argv[1]); return; }

        i=list_of_vars(); if (i<0) return;
        i=spfind("DEGREE");
        if (i>=0) degree=atoi(spb[i]);
        if (degree>MAX_POW)
            {
            sprintf(sbuf,"\nMax. degree is %d.",MAX_POW);
            sur_print(sbuf); WAIT; return;
            }

        i=spfind("TYPE");
        if (i>=0) var_type=*spb[i];

        i=power_combinations(); if (i<0) return;

        for (j=1L; j<=d.n; ++j)
            {
            for (i=0; i<nvar; ++i)
                {
                if (unsuitable(&d,j)) continue;
                data_load(&d,j,var_ind[i],&a);
// Rprintf("\nvar=%d a=%g|",vara); getch();
                val[i][1]=a; b=a;
                for (k=2; k<=degree; ++k)
                    {
                    b*=a;
                    val[i][k]=b;
// Rprintf("\nval: %d %d %g %g|",i,k,a,val[i][k]); getch();
                    }
                }

            for (k=0; k<ncomb; ++k)
                {
                a=1.0;
                for (i=0; i<nvar; ++i)
                    if (pow_v[k][i]>0) a*=val[i][pow_v[k][i]];
// Rprintf("\na=%g|",a); getch();
                data_save(&d,j,pow_ind[k],a);
                }
            }
        data_close(&d); // 8.8.2011/SM
        s_end(argv);
        }