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; }
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); }
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); }
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); }
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); } }
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); }
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.")); } }
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); }
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); }
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); }
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, ¤tShow, 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; }
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); }
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); }
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); }
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; }
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); }