int main(int argc,char **argv) { char stdi=0; FILE *file=NULL; double min,inter=0.0,ind_inter,epsilon,av,ind_var; char *nearest,alldone; long i; unsigned int dim,emb; unsigned long donesofar; if (scan_help(argc,argv)) show_options(argv[0]); scan_options(argc,argv); #ifndef OMIT_WHAT_I_DO if (verbosity&VER_INPUT) what_i_do(argv[0],WID_STR); #endif infile=search_datafile(argc,argv,NULL,verbosity); if (infile == NULL) stdi=1; if (outfile == NULL) { if (!stdi) { check_alloc(outfile=(char*)calloc(strlen(infile)+5,(size_t)1)); strcpy(outfile,infile); strcat(outfile,".fnn"); } else { check_alloc(outfile=(char*)calloc((size_t)10,(size_t)1)); strcpy(outfile,"stdin.fnn"); } } if (!stdo) test_outfile(outfile); if (column == NULL) series=(double**)get_multi_series(infile,&length,exclude,&comp,"",dimset, verbosity); else series=(double**)get_multi_series(infile,&length,exclude,&comp,column, dimset,verbosity); for (i=0;i<comp;i++) { rescale_data(series[i],length,&min,&ind_inter); variance(series[i],length,&av,&ind_var); if (i == 0) { varianz=ind_var; inter=ind_inter; } else { varianz=(varianz>ind_var)?ind_var:varianz; inter=(inter<ind_inter)?ind_inter:inter; } } check_alloc(list=(long*)malloc(sizeof(long)*length)); check_alloc(nearest=(char*)malloc(length)); check_alloc(box=(long**)malloc(sizeof(long*)*BOX)); for (i=0;i<BOX;i++) check_alloc(box[i]=(long*)malloc(sizeof(long)*BOX)); if (!stdo) { file=fopen(outfile,"w"); if (verbosity&VER_INPUT) fprintf(stderr,"Opened %s for writing\n",outfile); } else { if (verbosity&VER_INPUT) fprintf(stderr,"Writing to stdout\n"); } check_alloc(vcomp=(unsigned int*)malloc(sizeof(int)*(maxdim))); check_alloc(vemb=(unsigned int*)malloc(sizeof(int)*(maxdim))); for (i=0;i<maxdim;i++) { if (comp == 1) { vcomp[i]=0; vemb[i]=i; } else { vcomp[i]=i%comp; vemb[i]=(i/comp)*delay; } } for (emb=minemb;emb<=maxemb;emb++) { dim=emb*comp-1; epsilon=eps0; toolarge=0; alldone=0; donesofar=0; aveps=0.0; vareps=0.0; for (i=0;i<length;i++) nearest[i]=0; if (verbosity&VER_USR1) fprintf(stderr,"Start for dimension=%u\n",dim+1); while (!alldone && (epsilon < 2.*varianz/rt)) { alldone=1; mmb(vcomp[dim],vemb[dim],epsilon); for (i=0;i<length-maxemb*delay;i++) if (!nearest[i]) { nearest[i]=find_nearest(i,dim,epsilon); alldone &= nearest[i]; donesofar += (unsigned long)nearest[i]; } if (verbosity&VER_USR1) fprintf(stderr,"Found %lu up to epsilon=%e\n",donesofar,epsilon*inter); epsilon*=sqrt(2.0); if (!donesofar) eps0=epsilon; } if (donesofar == 0) { fprintf(stderr,"Not enough points found!\n"); exit(FALSE_NEAREST_NOT_ENOUGH_POINTS); } aveps *= (1./(double)donesofar); vareps *= (1./(double)donesofar); if (stdo) { fprintf(stdout,"%u %e %e %e\n",dim+1,(double)toolarge/(double)donesofar, aveps*inter,sqrt(vareps)*inter); fflush(stdout); } else { fprintf(file,"%u %e %e %e\n",dim+1,(double)toolarge/(double)donesofar, aveps*inter,sqrt(vareps)*inter); fflush(file); } } if (!stdo) fclose(file); if (infile != NULL) free(infile); if (outfile != NULL) free(outfile); free(series); free(list); free(nearest); for (i=0;i<BOX;i++) free(box[i]); free(box); return 0; }
bool Do(const KEY_EVENT_RECORD& ker, Screen& screen, const EditScheme& scheme) { bool cont = true; if (ker.bKeyDown) { const bool readOnly = fileInfo.isreadonly(); switch (ker.wVirtualKeyCode) { case VK_F1: { wchar_t* pWData = nullptr; { HMODULE hModule = NULL; Memory mem = GetResource(hModule, IDR_TEXT); const char* pData = static_cast<const char*>(mem.data); pWData = new wchar_t[mem.size + 1]; for (DWORD i = 0; i < mem.size; ++i) { switch (pData[i]) { case '\r': pWData[i] = L' '; break; case '\n': pWData[i] = L'\0'; break; default: pWData[i] = pData[i]; break; } } pWData[mem.size] = L'\0'; } ModeInfoBox mmb(this, _COORD(4, 4), pWData); DoMode(mmb, screen, scheme); delete[] pWData; me.invalid = true; } break; case VK_F3: switch (ker.dwControlKeyState & 0x1F) { case RIGHT_CTRL_PRESSED: case LEFT_CTRL_PRESSED: if (me.Selection().empty()) { size_t p = MoveWordBegin(me.Chars(), me.Selection().end); if (iswblank(me.Chars()[p])) // TODO Use locale? break; // Don't search me.MoveCursor(p, false); me.MoveCursor(MoveWordEnd(me.Chars(), me.Selection().end), true); } if (!me.Selection().empty()) { mf.setFind(me.GetSelectedText()); mf.visible = true; me.invalid = true; } Find(true, true); break; case 0: Find(true, true); break; case SHIFT_PRESSED: Find(false, true); break; } break; case 'F': switch (ker.dwControlKeyState & 0x1F) { case RIGHT_CTRL_PRESSED: case LEFT_CTRL_PRESSED: // TODO Set focus to find window to edit search text mf.visible = true; DoMode(mf, screen, scheme); me.invalid = true; break; } break; case 'G': switch (ker.dwControlKeyState & 0x1F) { case RIGHT_CTRL_PRESSED: case LEFT_CTRL_PRESSED: { ModePromptInteger mpi(this, ms.buffer, ms.pos, L"Goto line?"); DoMode(mpi, screen, scheme); int line = mpi.Ret(); if (line > 0) { me.MoveCursor(GetLineOffset(me.Chars(), line), false); } me.invalid = true; } break; } break; case 'I': switch (ker.dwControlKeyState & 0x1F) { case RIGHT_CTRL_PRESSED: case LEFT_CTRL_PRESSED: mf.ToggleCaseSensitive(); Find(true, false); break; } break; case 'R': switch (ker.dwControlKeyState & 0x1F) { case RIGHT_CTRL_PRESSED: case LEFT_CTRL_PRESSED: me.Revert(fileInfo, l); break; } break; case 'S': switch (ker.dwControlKeyState & 0x1F) { case RIGHT_CTRL_PRESSED: case LEFT_CTRL_PRESSED: if (!readOnly) { try { me.Save(fileInfo, l); ms.message = L"Saved"; } catch (const std::exception& e) { ms.error = convert(e.what(), l); me.invalid = true; } } else Beep(); break; } break; case 'X': switch (ker.dwControlKeyState & 0x1F) { case RIGHT_ALT_PRESSED: case LEFT_ALT_PRESSED: { if (me.isEdited()) { ModePromptYesNo mpyn(this, ms.buffer, ms.pos, L"Save?"); DoMode(mpyn, screen, scheme); WORD key = mpyn.Ret(); me.invalid = true; if (key == L'Y') me.Save(fileInfo, l); if (key != 0) cont = false; } else cont = false; } break; } break; } } if (cont) cont = me.Do(ker, screen, scheme); return cont; }