bool _HYConsoleWindow::_ProcessMenuSelection (long msel) { switch (msel) { case HY_WINDOW_MENU_ID_FILE+1: SaveConsole (); return true; case 14: _DoPrint (); return true; case 16: ((_HYTextBox*)GetObject(0))->_DoUndo(true); return true; case 17: ((_HYTextBox*)GetObject(0))->_DoCut(true); return true; case 18: ((_HYTextBox*)GetObject(0))->_DoCopy(true); return true; case HY_WINDOW_MENU_ID_EDIT+5: ((_HYTextBox*)GetObject(0))->_DoSelectAll(true); return true; case 21: SetStatusLine ("Canceling"); terminateExecution = true; return true; case 22: { GtkWidget * suspendItem = gtk_item_factory_get_widget_by_action(menu_items,22); if (!isSuspended) { isSuspended = true; SetStatusLine (empty,empty,empty,-1,HY_SL_SUSPEND); gtk_label_set_text (GTK_LABEL (gtk_bin_get_child(GTK_BIN(suspendItem))), "Resume"); updateTimer = false; while (isSuspended) { gtk_main_iteration_do(true); } } else { isSuspended = false; SetStatusLine (empty,empty,empty,-1,HY_SL_RESUME); gtk_label_set_text (GTK_LABEL (gtk_bin_get_child(GTK_BIN(suspendItem))), "Suspend execution"); timerStart += clock()-lastTimer; updateTimer = true; } return true; } case 23: ShowMessagesLog(); return true; case 24: RunStandardAnalyses(); return true; case 25: displayAbout(false); return true; case HY_WINDOW_MENU_ID_EDIT+4: ((_HYTextBox*)GetObject(0))->_DoClear (true,true); return true; case 27: HandlePreferences (globalPreferencesList,"HYPHY Preferences"); return true; case 29: //WinExec ("hh HYPHY HELP.chm",SW_SHOWNORMAL); return true; case 30: if (OpenBatchFile (false)) { ExecuteBatchFile(); PopFilePath(); } return true; case 31: ((_HYTextBox*)GetObject(0))->_DoRedo(true); return true; case 15: postWindowCloseEvent (GetID()); gtk_main_quit (); return true; case 60: // expression calculator if (calculatorMode) { _HYTextBox *ib = (_HYTextBox*)hyphyConsoleWindow->GetObject(1); ib->SetText ("exit"); hyphyConsoleWindow->ProcessEvent (generateTextEditChangeEvent(ib->GetID(),2)); calculatorMode = false; //ib->SetText (empty); } else { calculatorMode = true; while(calculatorMode&&ExpressionCalculator()) {} calculatorMode = false; } return true; case 61: { // execute selection ExecuteSelection(); return true; } case 70: // New Tree NewTreeWindow(-1); return true; case 71: // New Model NewModel(nil); return true; case 72: // New Chart NewChartWindow(); return true; case 73: // New Genetic Code NewGeneticCodeTable(0); return true; case 74: // New Database NewDatabaseFile(0); return true; case 80: // Open Batch File if (OpenBatchFile()) { ExecuteBatchFile (); } return true; case 81: // Open Data File OpenDataFile(); return true; case 82: // Open Tree OpenTreeFile(); return true; case 83: // Open Text OpenTextFile(); return true; case 84: // Open Table OpenTable (); return true; case 85: // Open SQLite database OpenDatabaseFile (nil); return true; case HY_WINDOW_MENU_ID_FILE-2: ShowObjectInspector (); return true; default: { msel -= 1000; if (msel<availablePostProcessors.lLength) { ExecuteAPostProcessor (*(_String*)(*(_List*)availablePostProcessors(msel))(1)); return 0; } msel-=1000; if (msel<(long)recentPaths.lLength) { if (msel == -1) { for (long mi=0; mi<recentFiles.lLength; mi++) { GtkWidget * recFile = gtk_item_factory_get_widget_by_action(hyphyConsoleWindow->menu_items,2000+mi); if (recFile) { gtk_item_factory_delete_item(hyphyConsoleWindow->menu_items,gtk_item_factory_path_from_widget(recFile)); } } recentPaths.Clear(); recentFiles.Clear(); } else { if (argFileName) { *argFileName = *(_String*)recentPaths(msel); } else { argFileName = new _String (*(_String*)recentPaths(msel)); } if (OpenBatchFile(false)) { ExecuteBatchFile (); } } return true; } return true; } } return _HYTWindow::_ProcessMenuSelection(msel); }
/** ** Handle keys in command mode. ** ** @param key Key scancode. ** @return True, if key is handles; otherwise false. */ local int CommandKey(int key) { switch( key ) { case '\r': KeyState=KeyStateInput; Input[0]='\0'; InputIndex=0; ShowInput(); return 1; case '^': UnSelectAll(); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if( KeyModifiers&ModifierControl ) { // dirty atoi version :) SetGroup(Selected,NumSelected,key-48); } else { SelectGroup(key-48); } UpdateBottomPanel(); MustRedraw|=RedrawCursor|RedrawMap|RedrawPanels; break; #if 0 IfDebug( case '0': ++ThisPlayer; if( ThisPlayer==&Players[PlayerMax] ) { ThisPlayer=&Players[0]; } MustRedraw=RedrawEverything; break; case '1': --ThisPlayer; if( ThisPlayer<&Players[0] ) { ThisPlayer=&Players[PlayerMax-1]; } MustRedraw=RedrawEverything; break; ); #endif case KeyCodePause: case 'P': // If pause-key didn't work if(GamePaused) { GamePaused=0; SetStatusLine("Game Resumed"); } else { GamePaused=1; SetStatusLine("Game Paused"); } break; case KeyCodeF10: InterfaceState=IfaceStateMenu; GamePaused=1; SetStatusLine("Game Paused"); ProcessMenu(MENU_GAME); break; case '+': VideoSyncSpeed+=10; InitVideoSync(); SetStatusLine("Faster"); break; case '-': VideoSyncSpeed-=10; InitVideoSync(); SetStatusLine("Slower"); break; case 'S': // SMALL s is needed for panel SaveAll(); break; case 'c': if( NumSelected==1 ) { MapCenter(Selected[0]->X,Selected[0]->Y); } break; // TAB toggles minimap. // FIXME: more... case '\t': DebugLevel1("TAB\n"); MinimapWithTerrain^=1; MustRedraw|=RedrawMinimap; break; // FIXME: shift+TAB case 'q': Exit(0); case KeyCodeUp: if( MapY ) { if( KeyModifiers&ModifierControl ) { if( MapY<MapHeight/2 ) { MapY=0; } else { MapY-=MapHeight/2; } } else { --MapY; } MustRedraw|=RedrawMaps|RedrawMinimapCursor; } break; case KeyCodeDown: if( MapY<TheMap.Height-MapHeight ) { if( KeyModifiers&ModifierControl ) { if( MapY<TheMap.Height-MapHeight-MapHeight/2 ) { MapY+=MapHeight/2; } else { MapY=TheMap.Height-MapHeight; } } else { ++MapY; } MustRedraw|=RedrawMaps|RedrawMinimapCursor; } break; case KeyCodeLeft: if( MapX ) { if( KeyModifiers&ModifierControl ) { if( MapX<MapWidth/2 ) { MapX=0; } else { MapX-=MapWidth/2; } } else { --MapX; } MustRedraw|=RedrawMaps|RedrawMinimapCursor; } break; case KeyCodeRight: if( MapX<TheMap.Width-MapWidth ) { if( KeyModifiers&ModifierControl ) { if( MapX<TheMap.Width-MapWidth-MapWidth/2 ) { MapX+=MapWidth/2; } else { MapX=TheMap.Width-MapWidth; } } else { ++MapX; } MustRedraw|=RedrawMaps|RedrawMinimapCursor; } break; default: DebugLevel3("Key %d\n",key); return 0; }
HTTPResponseHeader::HTTPResponseHeader(int code, const std::string text, const int majVersion, const int minVersion) { SetStatusLine(code, text, majVersion, minVersion); }
/** ** Show input. */ local void ShowInput(void) { sprintf(InputStatusLine,"MESSAGE:%s~_",Input); ClearStatusLine(); SetStatusLine(InputStatusLine); }
/** ** Draw bottom panel. */ global void DrawBottomPanel(void) { int i; int v; const UnitStats* stats; const ButtonAction* buttons; DrawImage(ImagePanelBottom,0,0,0,336); if( !(buttons=CurrentButtons) ) { // no buttons return; } for( i=0; i<9; ++i ) { if( buttons[i].Pos!=-1 ) { // cursor is on that button if( ButtonUnderCursor==i+10 ) { v=IconActive; if( MouseButtons&LeftButton ) { v=IconClicked; } } else { v=0; } // // Any better ideas? // Show the current action state of the unit // with the buttons. // if( NumSelected==1 ) { switch( buttons[i].Action ) { case B_Stop: if( Selected[0]->Command.Action==UnitActionStill ) { v=IconSelected; } break; case B_StandGround: if( Selected[0]->Command.Action ==UnitActionStandGround ) { v=IconSelected; } break; case B_Move: if( Selected[0]->Command.Action==UnitActionMove ) { v=IconSelected; } break; case B_Attack: if( Selected[0]->Command.Action==UnitActionAttack ) { v=IconSelected; } break; case B_Demolish: if( Selected[0]->Command.Action==UnitActionDemolish ) { v=IconSelected; } break; /* FIXME: attackground and attack are both ActionAttack case B_AttackGround: if( Selected[0]->Command.Action==UnitActionAttack ) { v=IconSelected; } break; */ // FIXME: must handle more actions default: break; } } DrawUnitIcon(buttons[i].Icon.Icon ,v,Buttons[i+10].X,Buttons[i+10].Y); // // Update status line for this button // if( ButtonUnderCursor==i+10 ) { SetStatusLine(buttons[i].Hint); // FIXME: Draw costs v=buttons[i].Value; switch( buttons[i].Action ) { case B_Build: case B_Train: case B_UpgradeTo: stats=&UnitTypes[v].Stats[ThisPlayer->Player]; SetCosts(0,stats->Costs[GoldCost] ,stats->Costs[WoodCost] ,stats->Costs[OilCost]); break; //case B_Upgrade: case B_Research: SetCosts(0 /*Upgrades[v].Costs[ManaCost]*/ ,Upgrades[v].Costs[GoldCost] ,Upgrades[v].Costs[WoodCost] ,Upgrades[v].Costs[OilCost]); break; case B_Magic: // FIXME: correct costs!!! SetCosts(11 ,0,0,0); break; default: ClearCosts(); break; } } } } }
static BOOL RunInstaller() { PROCESS_INFORMATION pi; STARTUPINFO sti; char szCmdLine[MAX_BUF]; char szSetupFile[MAX_BUF]; char szUninstallFile[MAX_BUF]; char szArcLstFile[MAX_BUF]; BOOL bRet; char szText[256]; char szTempPath[MAX_BUF]; char szTmp[MAX_PATH]; char xpiDir[MAX_PATH]; char szFilename[MAX_BUF]; char szBuf[MAX_BUF]; if(gbUncompressOnly == TRUE) return(TRUE); // Update UI UpdateProgressBar(100); LoadString(hInst, IDS_STATUS_LAUNCHING_SETUP, szText, sizeof(szText)); SetStatusLine(szText); memset(&sti,0,sizeof(sti)); sti.cb = sizeof(STARTUPINFO); // Setup program is in the directory specified for temporary files GetFullTempPathName("", MAX_BUF, szTempPath); GetFullTempPathName("Archive.lst", sizeof(szArcLstFile), szArcLstFile); GetFullTempPathName("SETUP.EXE", sizeof(szSetupFile), szSetupFile); GetFullTempPathName("uninstall.exe", sizeof(szUninstallFile), szUninstallFile); GetPrivateProfileString("Archives", "uninstall.exe", "", szBuf, sizeof(szBuf), szArcLstFile); if((FileExists(szUninstallFile) != FALSE) && (*szBuf != '\0')) { lstrcpy(szCmdLine, szUninstallFile); } else { lstrcpy(szCmdLine, szSetupFile); GetModuleFileName(NULL, szFilename, sizeof(szFilename)); ParsePath(szFilename, xpiDir, sizeof(xpiDir), PP_PATH_ONLY); AppendBackSlash(xpiDir, sizeof(xpiDir)); lstrcat(xpiDir, "xpi"); if(FileExists(xpiDir)) { GetShortPathName(xpiDir, szBuf, sizeof(szBuf)); lstrcat(szCmdLine, " -a "); lstrcat(szCmdLine, szBuf); } lstrcat(szCmdLine, " -n "); lstrcat(szCmdLine, szFilename); } if(szCmdLine != NULL) lstrcat(szCmdLine, szCmdLineToSetup); // Launch the installer bRet = CreateProcess(NULL, szCmdLine, NULL, NULL, FALSE, 0, NULL, szTempPath, &sti, &pi); if (!bRet) return FALSE; CloseHandle(pi.hThread); // Wait for the InstallShield UI to appear before taking down the dialog box WaitForInputIdle(pi.hProcess, 3000); // wait up to 3 seconds if(dwMode != SILENT) { DestroyWindow(dlgInfo.hWndDlg); } // Wait for the installer to complete WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); // Delete the files from the temp directory EnumResourceNames(NULL, "FILE", (ENUMRESNAMEPROC)DeleteTempFilesProc, 0); // delete archive.lst file in the temp directory GetFullTempPathName("Archive.lst", sizeof(szTmp), szTmp); DeleteFile(szTmp); GetFullTempPathName("xpcom.ns", sizeof(szTmp), szTmp); DirectoryRemove(szTmp, TRUE); DirectoryRemove(szTempPath, FALSE); return TRUE; }
BOOL APIENTRY ExtractFilesProc(HANDLE hModule, LPCTSTR lpszType, LPTSTR lpszName, LONG lParam) { char szTmpFile[MAX_PATH]; char szArcLstFile[MAX_PATH]; HRSRC hResInfo; HGLOBAL hGlobal; LPBYTE lpBytes; LPBYTE lptr; LPBYTE lpBytesUnCmp; HANDLE hFile; char szStatus[128]; char szText[4096]; // Update the UI LoadString(hInst, IDS_STATUS_EXTRACTING, szText, sizeof(szText)); wsprintf(szStatus, szText, lpszName); SetStatusLine(szStatus); if(gbUncompressOnly == TRUE) lstrcpy(szTmpFile, lpszName); else { // Create a file in the temp directory GetFullTempPathName(lpszName, sizeof(szTmpFile), szTmpFile); CreateDirectoriesAll(szTmpFile); } if((*gszFileToUncompress != '\0') && (lstrcmpi(lpszName, gszFileToUncompress) != 0)) // We have a file to uncompress, but the one found is not the one we want, // so return TRUE to continue looking for the right one. return TRUE; // Extract the file hResInfo = FindResource((HINSTANCE)hModule, lpszName, lpszType); hGlobal = LoadResource((HINSTANCE)hModule, hResInfo); lpBytes = (LPBYTE)LockResource(hGlobal); // Create the file hFile = CreateFile(szTmpFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY, NULL); if (hFile != INVALID_HANDLE_VALUE) { DWORD dwSize; DWORD dwSizeUnCmp; DWORD dwTemp; GetFullTempPathName("Archive.lst", sizeof(szArcLstFile), szArcLstFile); WritePrivateProfileString("Archives", lpszName, "TRUE", szArcLstFile); lptr = (LPBYTE)malloc((*(LPDWORD)(lpBytes + sizeof(DWORD))) + 1); if(!lptr) { char szBuf[512]; LoadString(hInst, IDS_ERROR_OUT_OF_MEMORY, szBuf, sizeof(szBuf)); MessageBox(NULL, szBuf, NULL, MB_OK | MB_ICONEXCLAMATION); return FALSE; } lpBytesUnCmp = lptr; dwSizeUnCmp = *(LPDWORD)(lpBytes + sizeof(DWORD)); // Copy the file. The first DWORD specifies the size of the file dwSize = *(LPDWORD)lpBytes; lpBytes += (sizeof(DWORD) * 2); dwTemp = uncompress(lpBytesUnCmp, &dwSizeUnCmp, lpBytes, dwSize); while (dwSizeUnCmp > 0) { DWORD dwBytesToWrite, dwBytesWritten; ProcessWindowsMessages(); dwBytesToWrite = dwSizeUnCmp > 4096 ? 4096 : dwSizeUnCmp; if (!WriteFile(hFile, lpBytesUnCmp, dwBytesToWrite, &dwBytesWritten, NULL)) { char szBuf[512]; LoadString(hInst, IDS_STATUS_EXTRACTING, szText, sizeof(szText)); wsprintf(szBuf, szText, szTmpFile); MessageBox(NULL, szBuf, szTitle, MB_OK | MB_ICONEXCLAMATION); FreeResource(hResInfo); if(lptr) free(lptr); return FALSE; } dwSizeUnCmp -= dwBytesWritten; lpBytesUnCmp += dwBytesWritten; // Update the UI to reflect the total number of bytes written static DWORD nBytesWritten = 0; nBytesWritten += dwBytesWritten; UpdateProgressBar(nBytesWritten * 100 / nTotalBytes); } CloseHandle(hFile); } // Release the resource FreeResource(hResInfo); if(lptr) free(lptr); if((*gszFileToUncompress != '\0') && (lstrcmpi(lpszName, gszFileToUncompress) == 0)) // We have a file to uncompress, and we have uncompressed it, // so return FALSE to stop uncompressing any other file. return FALSE; return TRUE; // keep enumerating }
int main( int argc, char *argv[] ) { #ifdef __HYPHYMPI__ int rank, size; MPI_Init (&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); _hy_mpi_node_rank = rank; setParameter (mpiNodeID, (_Parameter)rank); setParameter (mpiNodeCount, (_Parameter)size); if (rank == 0) #endif gtk_init (&argc, &argv); /* set up globals */ char curWd[4096]; getcwd (curWd,4096); _String baseDir (curWd); baseDir=baseDir&'/'; pathNames&& &baseDir; baseDirectory = baseDir; for (long i=1; i<argc;i++) { _String thisArg (argv[i]); if (thisArg.beginswith ("BASEPATH=")) { baseDirectory = thisArg.Cut(9,-1); if (baseDirectory.sLength) { if (baseDirectory.sData[baseDirectory.sLength-1]!='/') baseDirectory = baseDirectory&"/"; } } else if (thisArg.beginswith ("USEPATH=")) { _String baseArgDir (thisArg,8,-1); errorFileName = baseArgDir & errorFileName; messageFileName = baseArgDir & messageFileName; pathNames.Delete (0); pathNames&& &baseDir; } else if (thisArg.beginswith ("CPU=")) { #ifdef __MP__ _String cpus = thisArg.Cut(4,-1); systemCPUCount = cpus.toNum(); if (systemCPUCount<1) systemCPUCount = 1; #ifdef __MP2__ pthread_setconcurrency (systemCPUCount+1); #endif #endif } #ifdef __HYPHYMPI__ else if (thisArg == _String("MPIOPTIMIZER")) { mpiParallelOptimizer = true; setParameter (mpiNodeCount, 0.0); } else if (thisArg == _String("MPIPARTITIONS")) { mpiPartitionOptimizer = true; setParameter (mpiNodeCount, 0.0); } #endif } #ifdef __HYPHYMPI__ if (rank == 0) #endif { baseDir = baseDirectory & "GTKResources"; _List scanRes; ScanDirectoryForFileNames(baseDir,scanRes,false); if (scanRes.lLength == 0) { GtkWidget * noRez = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "HYPHY_GTK was unable to find a required GTKResources directory in %s. Please use BASEPATH= command line option to specify where the installation directory of HyPhy can be found.", baseDirectory.sData); gtk_dialog_run (GTK_DIALOG (noRez)); gtk_widget_destroy (noRez); return 1; } _String rcPath = baseDir & "/theme/theme.rc"; //printf ("Loading res files from %s\n", rcPath.sData); gtk_rc_parse (rcPath.sData); } GlobalStartup(); #ifdef __HYPHYMPI__ if (rank == 0) { #endif GdkDisplay * defDisplay = gdk_screen_get_display (gdk_screen_get_default()); hSizeCursor = gdk_cursor_new_for_display (defDisplay,GDK_SB_H_DOUBLE_ARROW); pickUpCursor = gdk_cursor_new_for_display (defDisplay,GDK_TARGET); dropOffCursor = gdk_cursor_new_for_display (defDisplay,GDK_TCROSS); screenPContext = gdk_pango_context_get_for_screen (gdk_screen_get_default()); tablePDMenuIcon = (GdkPixbuf*)ProcureIconResource(4020); /*{ GdkScreen * defD = gdk_screen_get_default(); fontConversionFactor = 72.27 / (gdk_screen_get_height (defD) *25.4 / gdk_screen_get_height_mm(defD)); printf ("Pango conversion factor computed at: %g\n", fontConversionFactor); }*/ ReadInTemplateFiles (); hyphyConsoleWindow = new _HYConsoleWindow ("HYPHY Console"); ReadPreferences (); SetStatusLine ("None","Idle","00:00:00"); while (gtk_events_pending()) gtk_main_iteration(); SetPreferences (); ReadGeneticCodes (); ReadModelTemplates (); ReadTreeProcessors (); MoveConsoleWindow (consolePositionRectangle); StringToConsole (hyphyCiteString); hyphyConsoleWindow->BringToFront(); #ifdef __HYPHYMPI__ { char statBuffer[1024]; sprintf (statBuffer,"MPI version of HyPhy running on %d nodes (a master and %d compute nodes) in %s mode\n", size, size-1, mpiPartitionOptimizer?"partition":(mpiParallelOptimizer?"rate heterogeneity":"normal")); BufferToConsole (statBuffer); } #endif g_timeout_add (100,GlobalQueueTimer,nil); g_timeout_add (1000,progressTimerFunction,nil); gtk_main (); WritePreferences(); #ifdef __HYPHYMPI__ } else // slave node { if (mpiParallelOptimizer || mpiPartitionOptimizer) mpiOptimizerLoop (rank, size); else mpiNormalLoop (rank, size, baseDir); } #endif GlobalShutdown(); return 0; }