vec sqtrain(const vec &inDB, int SIZE) { vec DB(inDB); vec Levels, Levels_old; ivec indexlist(SIZE + 1); int il, im, ih, i; int SIZEDB = inDB.length(); double x; sort(DB); Levels = DB(round_i(linspace(0.01 * SIZEDB, 0.99 * SIZEDB, SIZE))); Levels_old = zeros(SIZE); while (energy(Levels - Levels_old) > 0.0001) { Levels_old = Levels; for (i = 0;i < SIZE - 1;i++) { x = (Levels(i) + Levels(i + 1)) / 2; il = 0; ih = SIZEDB - 1; while (il < ih - 1) { im = (il + ih) / 2; if (x < DB(im)) ih = im; else il = im; } indexlist(i + 1) = il; } indexlist(0) = -1; indexlist(SIZE) = SIZEDB - 1; for (i = 0;i < SIZE;i++) Levels(i) = mean(DB(indexlist(i) + 1, indexlist(i + 1))); } return Levels; }
int test_texture1DArray_query() { int Error(0); gli::texture1DArray::size_type Layers(2); gli::texture1DArray::size_type Levels(2); gli::texture1DArray Texture(gli::FORMAT_RGBA8_UINT, gli::texture1DArray::dim_type(2), Layers, Levels); gli::texture1DArray::size_type Size = Texture.size(); Error += Size == sizeof(glm::u8vec4) * 3 * Layers ? 0 : 1; Error += Texture.format() == gli::FORMAT_RGBA8_UINT ? 0 : 1; Error += Texture.layers() == Layers ? 0 : 1; Error += Texture.levels() == Levels ? 0 : 1; Error += !Texture.empty() ? 0 : 1; Error += Texture.dimensions() == static_cast<gli::dim1_t>(2) ? 0 : 1; return Error; }
int test() { int Error(0); gli::texture2DArray::size_type Layers(2); gli::texture2DArray::size_type Levels(2); gli::texture2DArray Texture(gli::FORMAT_RGBA8_UINT_PACK8, gli::texture2DArray::texelcoord_type(2), Layers, Levels); gli::texture2DArray::size_type Size = Texture.size(); Error += Size == sizeof(glm::u8vec4) * 5 * Layers ? 0 : 1; Error += Texture.format() == gli::FORMAT_RGBA8_UINT_PACK8 ? 0 : 1; Error += Texture.layers() == Layers ? 0 : 1; Error += Texture.levels() == Levels ? 0 : 1; Error += !Texture.empty() ? 0 : 1; Error += Texture.dimensions().x == 2 ? 0 : 1; Error += Texture.dimensions().y == 2 ? 0 : 1; return Error; }
int test_texture1DArray_query() { int Error(0); gli::texture1DArray::size_type Layers(2); gli::texture1DArray::size_type Levels(2); gli::texture1DArray Texture( Layers, Levels, gli::RGBA8U, gli::texture1DArray::dimensions_type(2)); gli::texture1DArray::size_type Size = Texture.size(); Error += Size == sizeof(glm::u8vec4) * 3 * Layers ? 0 : 1; Error += Texture.format() == gli::RGBA8U ? 0 : 1; Error += Texture.layers() == Layers ? 0 : 1; Error += Texture.levels() == Levels ? 0 : 1; Error += !Texture.empty() ? 0 : 1; Error += Texture.dimensions() == 2 ? 0 : 1; return Error; }
void IlukGraph<LocalOrdinal,GlobalOrdinal,Node>::constructFilledGraph() { size_t NumIn, NumL, NumU; bool DiagFound; constructOverlapGraph(); L_Graph_ = Teuchos::rcp( new TpetraCrsGraphType(OverlapGraph_->getRowMap(), OverlapGraph_->getRowMap(), 0)); U_Graph_ = Teuchos::rcp( new TpetraCrsGraphType(OverlapGraph_->getRowMap(), OverlapGraph_->getRowMap(), 0)); // Get Maximum Row length int MaxNumIndices = OverlapGraph_->getNodeMaxNumRowEntries(); Teuchos::Array<LocalOrdinal> L(MaxNumIndices); Teuchos::Array<LocalOrdinal> U(MaxNumIndices); // First we copy the user's graph into L and U, regardless of fill level int NumMyRows = OverlapGraph_->getRowMap()->getNodeNumElements(); NumMyDiagonals_ = 0; for (int i=0; i< NumMyRows; i++) { Teuchos::ArrayView<const LocalOrdinal> my_indices; OverlapGraph_->getLocalRowView(i,my_indices); // Split into L and U (we don't assume that indices are ordered). NumL = 0; NumU = 0; DiagFound = false; NumIn = my_indices.size(); for (size_t j=0; j< NumIn; j++) { LocalOrdinal k = my_indices[j]; if (k<NumMyRows) { // Ignore column elements that are not in the square matrix if (k==i) DiagFound = true; else if (k < i) { L[NumL] = k; NumL++; } else { U[NumU] = k; NumU++; } } } // Check in things for this row of L and U if (DiagFound) ++NumMyDiagonals_; if (NumL) { Teuchos::ArrayView<LocalOrdinal> Lview(&L[0], NumL); L_Graph_->insertLocalIndices(i, Lview ); } if (NumU) { Teuchos::ArrayView<LocalOrdinal> Uview(&U[0], NumU); U_Graph_->insertLocalIndices(i, Uview ); } } if (LevelFill_ > 0) { // Complete Fill steps Teuchos::RCP<const TpetraMapType> L_DomainMap = OverlapGraph_->getRowMap(); Teuchos::RCP<const TpetraMapType> L_RangeMap = Graph_->getRangeMap(); Teuchos::RCP<const TpetraMapType> U_DomainMap = Graph_->getDomainMap(); Teuchos::RCP<const TpetraMapType> U_RangeMap = OverlapGraph_->getRowMap(); Teuchos::RCP<Teuchos::ParameterList> params = Teuchos::rcp(new Teuchos::ParameterList()); params->set("Optimize Storage",false); L_Graph_->fillComplete(L_DomainMap, L_RangeMap, params); U_Graph_->fillComplete(U_DomainMap, U_RangeMap, params); L_Graph_->resumeFill(); U_Graph_->resumeFill(); // At this point L_Graph and U_Graph are filled with the pattern of input graph, // sorted and have redundant indices (if any) removed. Indices are zero based. // LevelFill is greater than zero, so continue... int MaxRC = NumMyRows; std::vector<std::vector<int> > Levels(MaxRC); std::vector<int> LinkList(MaxRC); std::vector<int> CurrentLevel(MaxRC); Teuchos::Array<LocalOrdinal> CurrentRow(MaxRC+1); std::vector<int> LevelsRowU(MaxRC); for (int i=0; i<NumMyRows; i++) { int First, Next; // copy column indices of row into workspace and sort them size_t LenL = L_Graph_->getNumEntriesInLocalRow(i); size_t LenU = U_Graph_->getNumEntriesInLocalRow(i); size_t Len = LenL + LenU + 1; CurrentRow.resize(Len); L_Graph_->getLocalRowCopy(i, CurrentRow(), LenL); // Get L Indices CurrentRow[LenL] = i; // Put in Diagonal if (LenU > 0) { Teuchos::ArrayView<LocalOrdinal> URowView(&CurrentRow[LenL+1], LenU); // Get U Indices U_Graph_->getLocalRowCopy(i, URowView, LenU); } // Construct linked list for current row for (size_t j=0; j<Len-1; j++) { LinkList[CurrentRow[j]] = CurrentRow[j+1]; CurrentLevel[CurrentRow[j]] = 0; } LinkList[CurrentRow[Len-1]] = NumMyRows; CurrentLevel[CurrentRow[Len-1]] = 0; // Merge List with rows in U First = CurrentRow[0]; Next = First; while (Next < i) { int PrevInList = Next; int NextInList = LinkList[Next]; int RowU = Next; // Get Indices for this row of U Teuchos::ArrayView<const LocalOrdinal> IndicesU; U_Graph_->getLocalRowView(RowU,IndicesU); int LengthRowU = IndicesU.size(); int ii; // Scan RowU for (ii=0; ii<LengthRowU; /*nop*/) { int CurInList = IndicesU[ii]; if (CurInList < NextInList) { // new fill-in int NewLevel = CurrentLevel[RowU] + Levels[RowU][ii+1] + 1; if (NewLevel <= LevelFill_) { LinkList[PrevInList] = CurInList; LinkList[CurInList] = NextInList; PrevInList = CurInList; CurrentLevel[CurInList] = NewLevel; } ii++; } else if (CurInList == NextInList) { PrevInList = NextInList; NextInList = LinkList[PrevInList]; int NewLevel = CurrentLevel[RowU] + Levels[RowU][ii+1] + 1; CurrentLevel[CurInList] = std::min(CurrentLevel[CurInList], NewLevel); ii++; } else // (CurInList > NextInList) { PrevInList = NextInList; NextInList = LinkList[PrevInList]; } } Next = LinkList[Next]; } // Put pattern into L and U CurrentRow.resize(0); Next = First; // Lower while (Next < i) { CurrentRow.push_back(Next); Next = LinkList[Next]; } L_Graph_->removeLocalIndices(i); // Delete current set of Indices if (CurrentRow.size() > 0) { L_Graph_->insertLocalIndices(i, CurrentRow()); } // Diagonal TEUCHOS_TEST_FOR_EXCEPTION(Next != i, std::runtime_error, "Ifpack2::IlukGraph::constructFilledGraph: FATAL: U has zero diagonal") LevelsRowU[0] = CurrentLevel[Next]; Next = LinkList[Next]; // Upper CurrentRow.resize(0); LenU = 0; while (Next < NumMyRows) { LevelsRowU[LenU+1] = CurrentLevel[Next]; CurrentRow.push_back(Next); ++LenU; Next = LinkList[Next]; } U_Graph_->removeLocalIndices(i); // Delete current set of Indices if (LenU > 0) { U_Graph_->insertLocalIndices(i, CurrentRow()); } // Allocate and fill Level info for this row Levels[i] = std::vector<int>(LenU+1); for (size_t jj=0; jj<LenU+1; jj++) { Levels[i][jj] = LevelsRowU[jj]; } } } // Complete Fill steps Teuchos::RCP<const TpetraMapType> L_DomainMap = OverlapGraph_->getRowMap(); Teuchos::RCP<const TpetraMapType> L_RangeMap = Graph_->getRangeMap(); Teuchos::RCP<const TpetraMapType> U_DomainMap = Graph_->getDomainMap(); Teuchos::RCP<const TpetraMapType> U_RangeMap = OverlapGraph_->getRowMap(); L_Graph_->fillComplete(L_DomainMap, L_RangeMap);//DoOptimizeStorage is default here... U_Graph_->fillComplete(U_DomainMap, U_RangeMap);//DoOptimizeStorage is default here... Teuchos::reduceAll<int,size_t>(*(L_DomainMap->getComm()), Teuchos::REDUCE_SUM, 1, &NumMyDiagonals_, &NumGlobalDiagonals_); }
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { //Check for proper number of inputs if(nrhs != 1) { mexErrMsgTxt("One input required\n"); } //Check for proper number of outputs bool diag_flag=false; if (nlhs == 2) { diag_flag=true; } else { if(nrhs !=1 ) { mexErrMsgTxt("One or two outputs required."); } } int nfields = mxGetNumberOfFields(prhs[0]); if(nfields!=3) { mexErrMsgTxt("First input must have three fields."); } /* Get dimensions of first field of input */ const mxArray* tmp=mxGetField(prhs[0],0,fnames_in[0]); mwSize ndims_in=mxGetNumberOfDimensions(tmp); const mwSize* dims_in=mxGetDimensions(tmp); if(!mxIsClass(tmp,"double")) { mexErrMsgTxt("First field of input must be double\n"); } int N=dims_in[ndims_in-1]; int n=1; for(int i=0;i<ndims_in-1;i++) { n*=dims_in[i]; } mexPrintf("dim n=%d number N=%d\n",n,N); double* X=(double*)mxGetData(tmp); /* Get second field of input */ tmp=mxGetField(prhs[0],0,fnames_in[1]); if(!mxIsClass(tmp,"double")) { mexErrMsgTxt("Second field of input must be double\n"); } double* ptheta=(double*)mxGetData(tmp); /* Get third field of input */ tmp=mxGetField(prhs[0],0,fnames_in[2]); if(!mxIsClass(tmp,"int32")) { mexErrMsgTxt("Third field of input must be int32\n"); } int* pmaxdescend=(int*)mxGetData(tmp); int maxdescend=(int)*pmaxdescend; /* Create matrix for the return argument. */ plhs[0] = mxCreateStructMatrix(1, 1, 8, fnames_out_0); mxArray* fout; dims[0]=1; dims[1]=1; fout =mxCreateNumericArray(ndims,dims,mxDOUBLE_CLASS,mxREAL); double* p=(double*)mxGetData(fout); mxSetField(plhs[0],0,fnames_out_0[0],fout); p[0]=ptheta[0]; dims[0]=1; dims[1]=8; fout =mxCreateNumericArray(ndims,dims,mxINT32_CLASS,mxREAL); int* params=(int*)mxGetData(fout); mxSetField(plhs[0],0,fnames_out_0[1], fout); dims[0]=2; dims[1]=N; fout =mxCreateNumericArray(ndims,dims,mxINT32_CLASS,mxREAL); int* plp=(int*)mxGetData(fout); mxSetField(plhs[0],0,fnames_out_0[2], fout); dims[0]=4; dims[1]=N; fout =mxCreateNumericArray(ndims,dims,mxINT32_CLASS,mxREAL); int* pchildren=(int*)mxGetData(fout); mxSetField(plhs[0],0,fnames_out_0[3], fout); int* pdescend_list=(int*)mxMalloc(2*N*sizeof(int)); int* pdist_flags=(int*)mxMalloc(N*sizeof(int)); int* pindices_to_dist_flags=(int*)mxMalloc(N*sizeof(int)); double* pdistances=(double*)mxMalloc(N*sizeof(double)); int* pcurrent_child_flags=(int*)mxMalloc(N*sizeof(int)); int* pindices_to_current_child_flags=(int*)mxMalloc(N*sizeof(int)); int* pcurrent_children=(int*)mxMalloc(N*sizeof(int)); Vectors vectors(n,N,X); Cover cover(*ptheta, maxdescend, &vectors,plp, pchildren, pdescend_list, pdist_flags, pindices_to_dist_flags, pdistances, pcurrent_child_flags, pindices_to_current_child_flags, pcurrent_children); params[0]=cover.getRoot(); params[1]=N; params[2]=cover.getCoverNumber(); params[3]=cover.getNumDuplicates(); params[4]=cover.getMinLevel(); params[5]=cover.getMaxLevel(); int numlevels=cover.getNumLevels(); params[6]=numlevels; params[7]=cover.getMaxDescend(); dims[0]=1; dims[1]=cover.getNumLevels(); fout=mxCreateNumericArray(ndims,dims,mxDOUBLE_CLASS,mxREAL); double* pradii=(double*)mxGetData(fout); pradii[0]=cover.getRadius(); for(int i=1;i<numlevels;i++) { pradii[i]=ptheta[0]*pradii[i-1]; } mxSetField(plhs[0],0,fnames_out_0[4], fout); //mexPrintf("cover.getDistCounter=%d\n",cover.getDistCtr()); dims[0]=1; dims[1]=numlevels; fout =mxCreateNumericArray(ndims,dims,mxINT32_CLASS,mxREAL); int* plevel_counters=(int*)mxGetData(fout); mxSetField(plhs[0],0,fnames_out_0[5], fout); dims[0]=1; dims[1]=numlevels; fout =mxCreateNumericArray(ndims,dims,mxINT32_CLASS,mxREAL); int* plevel_offsets=(int*)mxGetData(fout); mxSetField(plhs[0],0,fnames_out_0[6], fout); dims[0]=1; dims[1]=cover.getCoverNumber(); fout =mxCreateNumericArray(ndims,dims,mxINT32_CLASS,mxREAL); int* plevels=(int*)mxGetData(fout); mxSetField(plhs[0],0,fnames_out_0[7], fout); Levels(&cover,plevel_counters,plevel_offsets,plevels); if(diag_flag) { double* p=0; plhs[1]= mxCreateStructMatrix(1, 1, 4, fnames_out_1); ndims=2; dims[0]=1; dims[1]=1; fout = mxCreateNumericArray(ndims,dims,mxDOUBLE_CLASS,mxREAL); p=(double*)mxGetData(fout); mxSetField(plhs[1],0,fnames_out_1[0],fout); p[0]=cover.getDistNCallsToGet(); fout = mxCreateNumericArray(ndims,dims,mxDOUBLE_CLASS,mxREAL); p=(double*)mxGetData(fout); mxSetField(plhs[1],0,fnames_out_1[1],fout); p[0]=cover.getDistNCallsToSet(); fout = mxCreateNumericArray(ndims,dims,mxDOUBLE_CLASS,mxREAL); p=(double*)mxGetData(fout); mxSetField(plhs[1],0,fnames_out_1[2],fout); p[0]=cover.getChildrenNCallsToGet(); fout = mxCreateNumericArray(ndims,dims,mxDOUBLE_CLASS,mxREAL); p=(double*)mxGetData(fout); mxSetField(plhs[1],0,fnames_out_1[3],fout); p[0]=cover.getChildrenNCallsToSet(); } mxFree(pdescend_list); mxFree(pdist_flags); mxFree(pindices_to_dist_flags); mxFree(pdistances); mxFree(pcurrent_child_flags); mxFree(pindices_to_current_child_flags); mxFree(pcurrent_children); }
void DrawPrefs(int where, char a1, char a2) { int mode = 0; FadeOut(2, 10, 0, 0); helpText = "i013"; keyHelpText = "K013"; boost::shared_ptr<display::PalettizedSurface> prefs_image(Filesystem::readImage("images/preferences.png")); // fixme: don't use vhptr to draw this screen vhptr->palette().copy_from(prefs_image->palette()); vhptr->draw(prefs_image, 0, 0); display::graphics.screen()->clear(); prefs_image->exportPalette(); ShBox(0, 0, 319, 22); ShBox(0, 24, 89, 199); ShBox(91, 24, 228, 107); IOBox(98, 28, 137, 63); IOBox(98, 68, 137, 103); IOBox(144, 28, 221, 63); /* This draws disabled button around camera */ /* IOBox(144,68,221,103); */ InBox(144, 68, 221, 103); ShBox(91, 109, 228, 199); InBox(95, 113, 224, 195); fill_rectangle(96, 114, 223, 194, 0); ShBox(230, 24, 319, 199); if (where == 2) { where = mode = 1; //modem klugge } else if (where == 3) { where = mode = 2; //play-by-mail } if (where == 0 || where == 2) { music_start(M_SOVTYP); IOBox(6, 105, 83, 140); IOBox(6, 158, 83, 193); IOBox(236, 105, 313, 140); IOBox(236, 158, 313, 193); InBox(6, 52, 83, 87); InBox(236, 52, 313, 87); fill_rectangle(7, 53, 82, 86, 0); fill_rectangle(237, 53, 312, 86, 0); OutBox(8, 77, 18, 85); OutBox(238, 77, 248, 85); //BinT(8,54,0);BinT(238,54,0); // Old way with buttons BinT(8, 54, 1); BinT(238, 54, 1); // No select Buttons fill_rectangle(237, 35, 312, 41, 0); fill_rectangle(7, 35, 82, 41, 0); } else { music_start(M_DRUMSM); InBox(8, 107, 81, 138); InBox(8, 160, 81, 191); InBox(238, 107, 311, 138); InBox(238, 160, 311, 191); InBox(8, 77, 18, 85); InBox(238, 77, 248, 85); BinT(8, 54, 1); BinT(238, 54, 1); fill_rectangle(237, 35, 312, 41, 0); fill_rectangle(7, 35, 82, 41, 0); }; if (mode == 0) { draw_heading(6, 5, "PREFERENCES SELECTIONS", 0, -1); } else if (mode == 2) { draw_heading(3, 5, "PLAY BY MAIL SELECTIONS", 0, -1); } else { draw_heading(6, 5, "MODEM GAME SELECTIONS", 0, -1); } IOBox(243, 3, 316, 19); InBox(236, 34, 313, 42); InBox(6, 34, 83, 42); PLevels(0, Data->Def.Plr1); CLevels(0, a1); PLevels(1, Data->Def.Plr2); CLevels(1, a2); Levels(0, Data->Def.Lev1, 1); Levels(0, Data->Def.Ast1, 0); Levels(1, Data->Def.Lev2, 1); Levels(1, Data->Def.Ast2, 0); if (where == 0 || where == 2) { display::graphics.setForegroundColor(9); } else { display::graphics.setForegroundColor(34); } draw_string(23, 30, "PLAYER 1"); display::graphics.setForegroundColor(34); draw_string(253, 30, "PLAYER 2"); display::graphics.setForegroundColor(5); draw_string(23, 49, "COUNTRY"); draw_string(254, 49, "COUNTRY"); draw_string(17, 101, "GAME LEVEL"); draw_string(247, 101, "GAME LEVEL"); draw_string(249, 148, "COSMONAUT"); draw_string(250, 155, "SELECTION"); draw_string(19, 148, "ASTRONAUT"); draw_string(20, 155, "SELECTION"); display::graphics.setForegroundColor(1); draw_string(258, 13, "CONTINUE"); draw_string(8, 40, &Data->P[ Data->Def.Plr1 ].Name[0]); draw_string(238, 40, &Data->P[ Data->Def.Plr2 ].Name[0]); // todo: convert to draw commands vhptr->copyTo(display::graphics.legacyScreen(), 153 + 34 * (Data->Def.Music), 0, 101, 31, 134, 60); vhptr->copyTo(display::graphics.legacyScreen(), 221 + 34 * (Data->Def.Sound), 0, 101, 71, 134, 100); vhptr->copyTo(display::graphics.legacyScreen(), 216, 30, 147, 31, 218, 60); vhptr->copyTo(display::graphics.legacyScreen(), 72 * (Data->Def.Anim), 90, 147, 71, 218, 100); HModel(Data->Def.Input, 1); // if (where==0 || where==2) FadeIn(2, 10, 0, 0); return; }
void Prefs(int where) { int num, hum1 = 0, hum2 = 0; FILE *fin; char ch, Name[20], ksel = 0; int32_t size; if (where != 3) { if (where == 0) { plr[0] = 0; plr[1] = 1; Data->Def.Plr2 = 1; Data->Def.Plr1 = 0; hum1 = 0, hum2 = 1; Data->Def.Lev1 = Data->Def.Ast1 = Data->Def.Ast2 = 0; Data->Def.Lev2 = 2; //start computer level 3 Data->Def.Input = 0; Data->Def.Sound = Data->Def.Music = 1; MuteChannel(AV_ALL_CHANNELS, 0); } if (Data->Def.Plr1 > 1) { Data->Def.Plr1 -= 2; hum1 = 1; } if (Data->Def.Plr2 > 1) { Data->Def.Plr2 -= 2; hum2 = 1; } } /* Data->Def.Sound=Data->Def.Music=1; */ DrawPrefs(where, hum1, hum2); WaitForMouseUp(); while (1) { key = 0; GetMouse(); if (mousebuttons > 0 || key > 0) { /* Game Play */ if (((x >= 245 && y >= 5 && x <= 314 && y <= 17) || key == K_ENTER) && !(hum1 == 1 && hum2 == 1)) { InBox(245, 5, 314, 17); WaitForMouseUp(); if (key > 0) { delay(150); } OutBox(245, 5, 314, 17); if (!(Data->Def.Input == 2 || Data->Def.Input == 3)) { if (options.feat_eq_new_name && hum1 != 1) { SetEquipName(0); } if (options.feat_eq_new_name && hum2 != 1) { SetEquipName(1); } } //Change Name, if basic mode and for human players if (Data->Def.Plr1 != Data->Def.Plr2) { if (Data->Def.Plr1 == 1) { int tmp; strcpy(&Name[0], &Data->P[0].Name[0]); strcpy(&Data->P[0].Name[0], &Data->P[1].Name[0]); strcpy(&Data->P[1].Name[0], &Name[0]); tmp = Data->Def.Lev1; Data->Def.Lev1 = Data->Def.Lev2; Data->Def.Lev2 = tmp; tmp = Data->Def.Ast1; Data->Def.Ast1 = Data->Def.Ast2; Data->Def.Ast2 = tmp; } Data->Def.Plr1 += hum1 * 2; Data->Def.Plr2 += hum2 * 2; if (where == 0 || where == 3) { FadeOut(2, 10, 0, 0); } key = 0; if ((where == 0 || where == 3) && (Data->Def.Input == 2 || Data->Def.Input == 3)) { fin = sOpen("HIST.DAT", "rb", 0); fread(&Data->P[0].Probe[PROBE_HW_ORBITAL], 28 * (sizeof(Equipment)), 1, fin); fread(&Data->P[1].Probe[PROBE_HW_ORBITAL], 28 * (sizeof(Equipment)), 1, fin); fclose(fin); } ///Random Equipment if ((where == 0 || where == 3) && (Data->Def.Input == 4 || Data->Def.Input == 5)) { RandomizeEq(); } int i, k; for (i = 0; i < NUM_PLAYERS; i++) for (k = 0; k < 7; k++) { Data->P[i].Probe[k].MSF = Data->P[i].Probe[k].MaxRD; Data->P[i].Rocket[k].MSF = Data->P[i].Rocket[k].MaxRD; Data->P[i].Manned[k].MSF = Data->P[i].Manned[k].MaxRD; Data->P[i].Misc[k].MSF = Data->P[i].Misc[k].MaxRD; } if (Data->Def.Input == 0 || Data->Def.Input == 2 || Data->Def.Input == 4) { // Hist Crews fin = sOpen("CREW.DAT", "rb", 0); size = fread(buffer, 1, BUFFER_SIZE, fin); fclose(fin); fin = sOpen("MEN.DAT", "wb", 1); fwrite(buffer, size, 1, fin); fclose(fin); } else if (Data->Def.Input == 1 || Data->Def.Input == 3 || Data->Def.Input == 5) { // User Crews fin = sOpen("USER.DAT", "rb", FT_SAVE); if (!fin) { fin = sOpen("USER.DAT", "rb", FT_DATA); } size = fread(buffer, 1, BUFFER_SIZE, fin); fclose(fin); fin = sOpen("MEN.DAT", "wb", 1); fwrite(buffer, size, 1, fin); fclose(fin); } music_stop(); return; } } else if (key == 'P' && (where == 0 || where == 3)) { fill_rectangle(59, 26, 68, 31, 3); fill_rectangle(290, 26, 298, 31, 3); if (ksel == 0) { ksel = 1; display::graphics.setForegroundColor(9); draw_string(253, 30, "PLAYER 2"); display::graphics.setForegroundColor(34); draw_string(23, 30, "PLAYER 1"); } else { ksel = 0; display::graphics.setForegroundColor(34); draw_string(253, 30, "PLAYER 2"); display::graphics.setForegroundColor(9); draw_string(23, 30, "PLAYER 1"); } } else if ((x >= 146 && y >= 30 && x <= 219 && y <= 61 && mousebuttons > 0) || key == 'E') { // Edit astronauts has been ripped out } else if (((x >= 96 && y >= 114 && x <= 223 && y <= 194 && mousebuttons > 0) || key == K_SPACE) && (where == 3 || where == 0)) { // Hist char maxHModels; maxHModels = options.feat_random_eq > 0 ? 5 : 3; WaitForMouseUp(); Data->Def.Input++; if (Data->Def.Input > maxHModels) { Data->Def.Input = 0; } HModel(Data->Def.Input, 0); } else if ((x >= 146 && y >= 70 && x <= 219 && y <= 101 && mousebuttons > 0) || key == 'A') { /* disable this option right now */ } else if ((x >= 100 && y >= 30 && x <= 135 && y <= 61 && mousebuttons > 0) || key == 'M') { InBox(100, 30, 135, 61); WaitForMouseUp(); Data->Def.Music = !Data->Def.Music; // SetMusicVolume((Data->Def.Music==1)?100:0); music_set_mute(!Data->Def.Music); vhptr->copyTo(display::graphics.legacyScreen(), 153 + 34 * (Data->Def.Music), 0, 101, 31, 134, 60); OutBox(100, 30, 135, 61); /* Music Level */ } else if ((x >= 100 && y >= 70 && x <= 135 && y <= 101 && mousebuttons > 0) || key == 'S') { InBox(100, 70, 135, 101); WaitForMouseUp(); Data->Def.Sound = !Data->Def.Sound; MuteChannel(AV_SOUND_CHANNEL, !Data->Def.Sound); vhptr->copyTo(display::graphics.legacyScreen(), 221 + 34 * (Data->Def.Sound), 0, 101, 71, 134, 100); OutBox(100, 70, 135, 101); /* Sound Level */ } else if ((x >= 8 && y >= 77 && x <= 18 && y <= 85 && where == 0 && mousebuttons > 0) || (where == 0 && ksel == 0 && key == 'H')) { InBox(8, 77, 18, 85); WaitForMouseUp(); hum1++; if (hum1 > 1) { hum1 = 0; } CLevels(0, hum1); OutBox(8, 77, 18, 85); /* P1: Human/Computer */ //change human to dif 1 and comp to 3 if (hum1 == 1) { Data->Def.Lev1 = 2; } else { Data->Def.Lev1 = 0; } Levels(0, Data->Def.Lev1, 1); } else if ((x >= 8 && y >= 107 && x <= 81 && y <= 138 && (where == 0 || where == 3) && mousebuttons > 0) || ((where == 3 || where == 0) && ksel == 0 && key == 'G')) { InBox(8, 107, 81, 138); WaitForMouseUp(); OutBox(8, 107, 81, 138); Data->Def.Lev1++; if (Data->Def.Lev1 > 2) { Data->Def.Lev1 = 0; } Levels(0, Data->Def.Lev1, 1); /* P1: Game Level */ } else if ((x >= 8 && y >= 160 && x <= 81 && y <= 191 && ((where == 0 || where == 3) && mousebuttons > 0)) || ((where == 3 || where == 0) && ksel == 0 && key == 'L')) { InBox(8, 160, 81, 191); WaitForMouseUp(); OutBox(8, 160, 81, 191); Data->Def.Ast1++; if (Data->Def.Ast1 > 2) { Data->Def.Ast1 = 0; } Levels(0, Data->Def.Ast1, 0); /* P1: Astro Level */ } else if ((x >= 238 && y >= 77 && x <= 248 && y <= 85 && where == 0 && mousebuttons > 0) || (where == 0 && ksel == 1 && key == 'H')) { InBox(238, 77, 248, 85); WaitForMouseUp(); hum2++; if (hum2 > 1) { hum2 = 0; } CLevels(1, hum2); OutBox(238, 77, 248, 85); /* P2:Human/Computer */ //change human to dif 1 and comp to 3 if (hum2 == 1) { Data->Def.Lev2 = 2; } else { Data->Def.Lev2 = 0; } Levels(1, Data->Def.Lev2, 1); } else if ((x >= 238 && y >= 107 && x <= 311 && y <= 138 && (where == 0 || where == 3) && mousebuttons > 0) || ((where == 0 || where == 3) && ksel == 1 && key == 'G')) { InBox(238, 107, 311, 138); WaitForMouseUp(); OutBox(238, 107, 311, 138); Data->Def.Lev2++; if (Data->Def.Lev2 > 2) { Data->Def.Lev2 = 0; } Levels(1, Data->Def.Lev2, 1); /* P2: Game Level */ } else if ((x >= 238 && y >= 160 && x <= 311 && y <= 191 && (where == 0 || where == 3) && mousebuttons > 0) || ((where == 0 || where == 3) && ksel == 1 && key == 'L')) { InBox(238, 160, 311, 191); WaitForMouseUp(); OutBox(238, 160, 311, 191); Data->Def.Ast2++; if (Data->Def.Ast2 > 2) { Data->Def.Ast2 = 0; } Levels(1, Data->Def.Ast2, 0); /* P2: Astro Level */ } else if ((x >= 6 && y >= 34 && x <= 83 && y <= 42 && (where == 3 || where == 0) && mousebuttons > 0) || ((where == 3 || where == 0) && ksel == 0 && key == 'N')) { fill_rectangle(7, 35, 82, 41, 0); for (int i = 0; i < 20; i++) { Data->P[0].Name[i] = 0x00; } num = 0; ch = 0; display::graphics.setForegroundColor(1); grMoveTo(8, 40); draw_character(0x14); av_sync(); while (ch != K_ENTER) { ch = getch(); if (ch != (ch & 0xff)) { ch = 0x00; } if (ch >= 'a' && ch <= 'z') { ch -= 0x20; } if (ch == 0x08 && num > 0) { Data->P[0].Name[--num] = 0x00; } else if (num < 12 && (isupper(ch) || isdigit(ch) || ch == 0x20)) { Data->P[0].Name[num++] = ch; } fill_rectangle(7, 35, 82, 41, 0); display::graphics.setForegroundColor(1); draw_string(8, 40, &Data->P[0].Name[0]); draw_character(0x14); av_sync(); } Data->P[0].Name[num] = 0x00; fill_rectangle(7, 35, 82, 41, 0); display::graphics.setForegroundColor(1); draw_string(8, 40, &Data->P[0].Name[0]); av_sync(); /* P1: Director Name */ } else if ((x >= 236 && y >= 34 && x <= 313 && y <= 42 && (where == 3 || where == 0) && mousebuttons > 0) || ((where == 3 || where == 0) && ksel == 1 && key == 'N')) { fill_rectangle(237, 35, 312, 41, 0); for (int i = 0; i < 20; i++) { Data->P[1].Name[i] = 0x00; } num = 0; ch = 0; display::graphics.setForegroundColor(1); grMoveTo(238, 40); draw_character(0x14); av_sync(); while (ch != K_ENTER) { ch = getch(); if (ch != (ch & 0xff)) { ch = 0x00; } if (ch >= 'a' && ch <= 'z') { ch -= 0x20; } if (ch == 0x08 && num > 0) { Data->P[1].Name[--num] = 0x00; } else if (num < 12 && (isupper(ch) || isdigit(ch) || ch == 0x20)) { Data->P[1].Name[num++] = ch; } fill_rectangle(237, 35, 312, 41, 0); display::graphics.setForegroundColor(1); draw_string(238, 40, &Data->P[1].Name[0]); draw_character(0x14); av_sync(); } Data->P[1].Name[num] = 0x00; fill_rectangle(237, 35, 312, 41, 0); display::graphics.setForegroundColor(1); draw_string(238, 40, &Data->P[1].Name[0]); av_sync(); /* P2: Director Name */ }; } }; }