- GUI RPC: in the structures used in the C++ interface to GUI RPC,

change various std::string to char[n], to improve performance.

NOTE: std::string should ONLY be used in cases where there is
no a priori limit on string length.
If there's a limit (e.g. because the string originates in
a fixed-size database field) always use char[n].

svn path=/trunk/boinc/; revision=20877
This commit is contained in:
David Anderson 2010-03-12 17:47:17 +00:00
parent b9fed7ee8c
commit 86582342a8
21 changed files with 368 additions and 288 deletions

View File

@ -1884,3 +1884,32 @@ Rom 12 Mar 2010
properly.
<Various Files>
David 12 Mar 2010
- GUI RPC: in the structures used in the C++ interface to GUI RPC,
change various std::string to char[n], to improve performance.
NOTE: std::string should ONLY be used in cases where there is
no a priori limit on string length.
If there's a limit (e.g. because the string originates in
a fixed-size database field) always use char[n].
clientgui/
sg_StatImageLoader.cpp
BOINCBaseView.cpp
sg_StatImageLoader.h
sg_ViewTabPage.h
sg_ProjectsComponent.cpp
sg_ViewTabPage.cpp
MainDocument.h
MainDocument.cpp
ViewStatistics.cpp
DlgItemProperties.cpp
ViewWork.cpp
ViewProjects.cpp
lib/
gui_rpc_client_print.cpp
gui_rpc_client_ops.cpp
gui_rpc_client.h
client/
boinc_cmd.cpp

View File

@ -241,9 +241,9 @@ int main(int argc, char** argv) {
} else if (!strcmp(cmd, "--task")) {
RESULT result;
char* project_url = next_arg(argc, argv, i);
result.project_url = project_url;
strcpy(result.project_url, project_url);
char* name = next_arg(argc, argv, i);
result.name = name;
strcpy(result.name, name);
char* op = next_arg(argc, argv, i);
if (!strcmp(op, "suspend")) {
retval = rpc.result_op(result, "suspend");
@ -264,7 +264,7 @@ int main(int argc, char** argv) {
}
} else if (!strcmp(cmd, "--project")) {
PROJECT project;
project.master_url = next_arg(argc, argv, i);
strcpy(project.master_url, next_arg(argc, argv, i));
canonicalize_master_url(project.master_url);
char* op = next_arg(argc, argv, i);
if (!strcmp(op, "reset")) {
@ -529,7 +529,7 @@ int main(int argc, char** argv) {
vector<PROJECT>projects;
while (i < argc) {
PROJECT proj;
proj.master_url = string(next_arg(argc, argv, i));
strcpy(proj.master_url, next_arg(argc, argv, i));
int std = atoi(next_arg(argc, argv, i));
proj.cpu_short_term_debt = std;
proj.cuda_short_term_debt = std;

View File

@ -777,7 +777,7 @@ void CBOINCBaseView::UpdateWebsiteSelection(long lControlGroup, PROJECT* project
pItem = new CTaskItem(
wxString(project->project_name.c_str(), wxConvUTF8),
wxT(""),
wxString(project->master_url.c_str(), wxConvUTF8),
wxString(project->master_url, wxConvUTF8),
ID_TASK_PROJECT_WEB_PROJDEF_MIN
);
pGroup->m_Tasks.push_back(pItem);

View File

@ -184,7 +184,7 @@ void CDlgItemProperties::renderInfos(PROJECT* project_in) {
std::string tname;
tp->get_name(tname);
wxString t1(wxString(tname.c_str(),wxConvUTF8));
if(t1.IsSameAs(wxString(projectname.c_str(),wxConvUTF8)) || t1.IsSameAs(wxString(project->master_url.c_str(),wxConvUTF8))) {
if(t1.IsSameAs(wxString(projectname.c_str(),wxConvUTF8)) || t1.IsSameAs(wxString(project->master_url, wxConvUTF8))) {
diskusage =tp->disk_usage;
break;
}
@ -195,7 +195,7 @@ void CDlgItemProperties::renderInfos(PROJECT* project_in) {
SetTitle(wxTitle);
//layout controls
addSection(_("General"));
addProperty(_("Master URL"),wxString(project->master_url.c_str(),wxConvUTF8));
addProperty(_("Master URL"),wxString(project->master_url, wxConvUTF8));
addProperty(_("User name"),wxString(project->user_name.c_str(),wxConvUTF8));
addProperty(_("Team name"),wxString(project->team_name.c_str(),wxConvUTF8));
addProperty(_("Resource share"),wxString::Format(wxT("%0.0f"),project->resource_share));
@ -268,11 +268,11 @@ void CDlgItemProperties::renderInfos(PROJECT* project_in) {
void CDlgItemProperties::renderInfos(RESULT* result) {
wxDateTime dt;
wxString wxTitle = _("Properties of task ");
wxTitle.append(wxString(result->name.c_str(),wxConvUTF8));
wxTitle.append(wxString(result->name, wxConvUTF8));
SetTitle(wxTitle);
addProperty(_("Application"), FormatApplicationName(result));
addProperty(_("Workunit name"),wxString(result->wu_name.c_str(),wxConvUTF8));
addProperty(_("Workunit name"),wxString(result->wu_name, wxConvUTF8));
addProperty(_("State"), FormatStatus(result));
if (result->received_time) {
dt.Set((time_t)result->received_time);
@ -280,8 +280,8 @@ void CDlgItemProperties::renderInfos(RESULT* result) {
}
dt.Set((time_t)result->report_deadline);
addProperty(_("Report deadline"), dt.Format());
if (result->resources.size()) {
addProperty(_("Resources"), wxString(result->resources.c_str(), wxConvUTF8));
if (strlen(result->resources)) {
addProperty(_("Resources"), wxString(result->resources, wxConvUTF8));
}
if (result->active_task) {
addProperty(_("CPU time at last checkpoint"), FormatTime(result->checkpoint_cpu_time));

View File

@ -1271,7 +1271,7 @@ PROJECT* CMainDocument::project(const wxString& projectname) {
PROJECT* tp = state.projects[i];
wxString t1(tp->project_name.c_str(), wxConvUTF8);
if(t1.IsSameAs(projectname)) return tp;
wxString t2(tp->master_url.c_str(), wxConvUTF8);
wxString t2(tp->master_url, wxConvUTF8);
if(t2.IsSameAs(projectname)) return tp;
}
return NULL;
@ -1521,9 +1521,9 @@ RESULT* CMainDocument::result(const wxString& name, const wxString& project_url)
//iterating over the vector and find the right result
for(unsigned int i=0; i< results.results.size();i++) {
RESULT* tResult = results.results.at(i);
wxString resname(tResult->name.c_str(),wxConvUTF8);
wxString resname(tResult->name, wxConvUTF8);
if(resname.IsSameAs(name)){
wxString resurl(tResult->project_url.c_str(),wxConvUTF8);
wxString resurl(tResult->project_url, wxConvUTF8);
if(resurl.IsSameAs(project_url)){
pResult = tResult;
break;
@ -1552,10 +1552,10 @@ int CMainDocument::GetWorkCount() {
}
int CMainDocument::WorkSuspend(std::string& strProjectURL, std::string& strName) {
int CMainDocument::WorkSuspend(char* url, char* name) {
int iRetVal = 0;
RESULT* pStateResult = state.lookup_result(strProjectURL, strName);
RESULT* pStateResult = state.lookup_result(url, name);
if (pStateResult) {
iRetVal = rpc.result_op((*pStateResult), "suspend");
} else {
@ -1566,10 +1566,10 @@ int CMainDocument::WorkSuspend(std::string& strProjectURL, std::string& strName)
}
int CMainDocument::WorkResume(std::string& strProjectURL, std::string& strName) {
int CMainDocument::WorkResume(char* url, char* name) {
int iRetVal = 0;
RESULT* pStateResult = state.lookup_result(strProjectURL, strName);
RESULT* pStateResult = state.lookup_result(url, name);
if (pStateResult) {
iRetVal = rpc.result_op((*pStateResult), "resume");
} else {
@ -1720,7 +1720,7 @@ int CMainDocument::WorkShowGraphics(RESULT* result)
{
int iRetVal = 0;
if (!result->graphics_exec_path.empty()) {
if (strlen(result->graphics_exec_path)) {
// V6 Graphics
RUNNING_GFX_APP gfx_app;
RUNNING_GFX_APP* previous_gfx_app;
@ -1732,7 +1732,7 @@ int CMainDocument::WorkShowGraphics(RESULT* result)
int id;
#endif
p = strrchr((char*)result->slot_path.c_str(), '/');
p = strrchr((char*)result->slot_path, '/');
if (!p) return ERR_INVALID_PARAM;
slot = atoi(p+1);
@ -1761,13 +1761,13 @@ int CMainDocument::WorkShowGraphics(RESULT* result)
// exits with "RegisterProcess failed (error = -50)" unless
// we pass its full path twice in the argument list to execv.
//
argv[1] = (char *)result->graphics_exec_path.c_str();
argv[2] = (char *)result->graphics_exec_path.c_str();
argv[1] = (char *)result->graphics_exec_path;
argv[2] = (char *)result->graphics_exec_path;
argv[3] = 0;
if (g_use_sandbox) {
iRetVal = run_program(
result->slot_path.c_str(),
result->slot_path,
"../../switcher/switcher",
3,
argv,
@ -1776,8 +1776,8 @@ int CMainDocument::WorkShowGraphics(RESULT* result)
);
} else {
iRetVal = run_program(
result->slot_path.c_str(),
result->graphics_exec_path.c_str(),
result->slot_path,
result->graphics_exec_path,
1,
&argv[2],
0,
@ -1819,8 +1819,8 @@ int CMainDocument::WorkShowGraphics(RESULT* result)
strcpy(di.display, (const char*)wxGetApp().m_strDefaultDisplay.mb_str());
iRetVal = rpc.show_graphics(
result->project_url.c_str(),
result->name.c_str(),
result->project_url,
result->name,
MODE_WINDOW,
di
);
@ -1830,10 +1830,10 @@ int CMainDocument::WorkShowGraphics(RESULT* result)
}
int CMainDocument::WorkAbort(std::string& strProjectURL, std::string& strName) {
int CMainDocument::WorkAbort(char* url, char* name) {
int iRetVal = 0;
RESULT* pStateResult = state.lookup_result(strProjectURL, strName);
RESULT* pStateResult = state.lookup_result(url, name);
if (pStateResult) {
iRetVal = rpc.result_op((*pStateResult), "abort");
} else {

View File

@ -278,19 +278,10 @@ public:
int GetWorkCount();
int WorkSuspend(
std::string& strProjectURL,
std::string& strName
);
int WorkResume(
std::string& strProjectURL,
std::string& strName
);
int WorkSuspend(char* url, char* name);
int WorkResume(char* url, char* name);
int WorkShowGraphics(RESULT* result);
int WorkAbort(
std::string& strProjectURL,
std::string& strName
);
int WorkAbort(char* url, char* name);
CC_STATE* GetState() { return &state; };

View File

@ -1110,7 +1110,7 @@ void CViewProjects::GetDocProjectURL(wxInt32 item, wxString& strBuffer) const {
}
if (project) {
strBuffer = wxString(project->master_url.c_str(), wxConvUTF8);
strBuffer = wxString(project->master_url, wxConvUTF8);
} else {
strBuffer = wxEmptyString;
}

View File

@ -578,7 +578,7 @@ void CPaintStatistics::DrawLegend(wxDC &dc, PROJECTS* proj, CMainDocument* pDoc,
y0 = wxCoord(m_WorkSpace_Y_start + ((double)(count - m_Legend_Shift) + 0.5) * m_Legend_dY + double(buffer_y1) + radius1);
if (x0 < 0) x0 = 0;
if (y0 < 0) y0 = 0;
if ((SelProj >= 0) || (!(m_HideProjectStatistic.count( wxString( (*i)->master_url.c_str(),wxConvUTF8 ) )))){
if ((SelProj >= 0) || (!(m_HideProjectStatistic.count( wxString( (*i)->master_url, wxConvUTF8 ) )))){
myDrawPoint(dc, int(x0), int(y0), graphColour, typePoint ,m_GraphPointWidth);
dc.SetFont(m_font_bold);
}else {
@ -1153,10 +1153,10 @@ void CPaintStatistics::DrawAll(wxDC &dc) {
for (std::vector<PROJECT*>::const_iterator i = proj->projects.begin(); i != proj->projects.end(); ++i) {
++count;
if (m_ViewHideProjectStatistic == count){
s = m_HideProjectStatistic.find( wxString((*i)->master_url.c_str(),wxConvUTF8) );
s = m_HideProjectStatistic.find( wxString((*i)->master_url, wxConvUTF8) );
if (s != m_HideProjectStatistic.end()){
m_HideProjectStatistic.erase(s);
}else m_HideProjectStatistic.insert( wxString((*i)->master_url.c_str(),wxConvUTF8) );
}else m_HideProjectStatistic.insert( wxString((*i)->master_url, wxConvUTF8) );
break;
}
}
@ -1171,7 +1171,7 @@ void CPaintStatistics::DrawAll(wxDC &dc) {
//How many rows/colums?
int nb_proj_show = 0;
for (std::vector<PROJECT*>::const_iterator i = proj->projects.begin(); i != proj->projects.end(); ++i) {
if (!(m_HideProjectStatistic.count( wxString((*i)->master_url.c_str(),wxConvUTF8) ))){
if (!(m_HideProjectStatistic.count( wxString((*i)->master_url, wxConvUTF8) ))){
++nb_proj_show;
}
}
@ -1201,13 +1201,13 @@ void CPaintStatistics::DrawAll(wxDC &dc) {
double min_val_x_all = 10e32, max_val_x_all = 0;
for (std::vector<PROJECT*>::const_iterator i = proj->projects.begin(); i != proj->projects.end(); ++i) {
if (!(m_HideProjectStatistic.count( wxString((*i)->master_url.c_str(),wxConvUTF8) ))){
if (!(m_HideProjectStatistic.count( wxString((*i)->master_url, wxConvUTF8) ))){
MinMaxDayCredit(i, min_val_y_all, max_val_y_all, min_val_x_all, max_val_x_all, m_SelectedStatistic, false);
}
}
for (std::vector<PROJECT*>::const_iterator i = proj->projects.begin(); i != proj->projects.end(); ++i) {
if (!(m_HideProjectStatistic.count( wxString((*i)->master_url.c_str(),wxConvUTF8) ))){
if (!(m_HideProjectStatistic.count( wxString((*i)->master_url, wxConvUTF8) ))){
//Find minimum/maximum value
double min_val_y = 10e32, max_val_y = 0;
double min_val_x = 10e32, max_val_x = 0;
@ -1326,10 +1326,10 @@ void CPaintStatistics::DrawAll(wxDC &dc) {
for (std::vector<PROJECT*>::const_iterator i = proj->projects.begin(); i != proj->projects.end(); ++i) {
++count;
if (m_ViewHideProjectStatistic == count){
s = m_HideProjectStatistic.find( wxString((*i)->master_url.c_str(),wxConvUTF8) );
s = m_HideProjectStatistic.find( wxString((*i)->master_url, wxConvUTF8) );
if (s != m_HideProjectStatistic.end()){
m_HideProjectStatistic.erase(s);
}else m_HideProjectStatistic.insert( wxString((*i)->master_url.c_str(),wxConvUTF8) );
}else m_HideProjectStatistic.insert( wxString((*i)->master_url, wxConvUTF8) );
break;
}
}
@ -1349,7 +1349,7 @@ void CPaintStatistics::DrawAll(wxDC &dc) {
if (m_Zoom_Auto){
for (std::vector<PROJECT*>::const_iterator i = proj->projects.begin(); i != proj->projects.end(); ++i) {
if (!(m_HideProjectStatistic.count( wxString((*i)->master_url.c_str(),wxConvUTF8) ))){
if (!(m_HideProjectStatistic.count( wxString((*i)->master_url, wxConvUTF8) ))){
MinMaxDayCredit(i, min_val_y, max_val_y, min_val_x, max_val_x, m_SelectedStatistic, false);
}
}
@ -1375,7 +1375,7 @@ void CPaintStatistics::DrawAll(wxDC &dc) {
int count = -1;
for (std::vector<PROJECT*>::const_iterator i = proj->projects.begin(); i != proj->projects.end(); ++i) {
++count;
if (!(m_HideProjectStatistic.count( wxString((*i)->master_url.c_str(),wxConvUTF8) ))){
if (!(m_HideProjectStatistic.count( wxString((*i)->master_url, wxConvUTF8) ))){
wxColour graphColour = wxColour(0,0,0);
int typePoint = 0;
getTypePoint(typePoint,count);

View File

@ -749,7 +749,7 @@ void CViewWork::UpdateSelection() {
// Disable Show Graphics button if any selected task can't display graphics
if (((!result->supports_graphics) || pDoc->GetState()->executing_as_daemon)
&& result->graphics_exec_path.empty()
&& !strlen(result->graphics_exec_path)
) {
enableShowGraphics = false;
}
@ -965,7 +965,7 @@ void CViewWork::GetDocName(wxInt32 item, wxString& strBuffer) const {
RESULT* result = wxGetApp().GetDocument()->result(item);
if (result) {
strBuffer = wxString(result->name.c_str(), wxConvUTF8);
strBuffer = wxString(result->name, wxConvUTF8);
}
}
@ -1077,7 +1077,7 @@ void CViewWork::GetDocReportDeadline(wxInt32 item, time_t& time) const {
RESULT* result = wxGetApp().GetDocument()->result(item);
if (result) {
time = result->report_deadline;
time = (time_t)result->report_deadline;
} else {
time = (time_t)0;
}
@ -1153,8 +1153,8 @@ void CViewWork::GetDocStatus(wxInt32 item, wxString& strBuffer) const {
if (status.task_suspend_reason & SUSPEND_REASON_EXCLUSIVE_APP_RUNNING) {
strBuffer += _(" - an exclusive app is running");
}
if (result->resources.size()) {
strBuffer += wxString(wxT(" (")) + wxString(result->resources.c_str(), wxConvUTF8) + wxString(wxT(")"));
if (strlen(result->resources)) {
strBuffer += wxString(wxT(" (")) + wxString(result->resources, wxConvUTF8) + wxString(wxT(")"));
}
} else if (result->active_task) {
if (result->too_large) {
@ -1178,8 +1178,8 @@ void CViewWork::GetDocStatus(wxInt32 item, wxString& strBuffer) const {
} else if (result->scheduler_state == CPU_SCHED_UNINITIALIZED) {
strBuffer += _("Ready to start");
}
if (result->resources.size()) {
strBuffer += wxString(wxT(" (")) + wxString(result->resources.c_str(), wxConvUTF8) + wxString(wxT(")"));
if (strlen(result->resources)) {
strBuffer += wxString(wxT(" (")) + wxString(result->resources, wxConvUTF8) + wxString(wxT(")"));
}
} else {
strBuffer += _("Ready to start");
@ -1245,7 +1245,7 @@ void CViewWork::GetDocProjectURL(wxInt32 item, wxString& strBuffer) const {
RESULT* result = wxGetApp().GetDocument()->result(item);
if (result) {
strBuffer = wxString(result->project_url.c_str(), wxConvUTF8);
strBuffer = wxString(result->project_url, wxConvUTF8);
}
}

View File

@ -310,7 +310,7 @@ void CProjectsComponent::UpdateProjectArray() {
bool found = false;
std::vector<StatImageLoader*>::iterator j;
for(j=m_statProjects.begin(); j < m_statProjects.end(); j++) {
if ( project->master_url == (*j)->m_prjUrl ) {
if (!strcmp(project->master_url, (*j)->project_url)) {
found = true;
break;
}
@ -327,7 +327,7 @@ void CProjectsComponent::UpdateProjectArray() {
PROJECT* project = NULL;
std::vector<StatImageLoader*>::iterator i;
for(i=m_statProjects.begin(); i < m_statProjects.end(); i++) {
project = pDoc->state.lookup_project((*i)->m_prjUrl);
project = pDoc->state.lookup_project((*i)->project_url);
if ( project == NULL ) {
(*i)->Show(false);
delete (*i);

View File

@ -48,10 +48,10 @@ BEGIN_EVENT_TABLE(StatImageLoader, wxWindow)
EVT_MENU(WEBSITE_URL_MENU_ID_REMOVE_PROJECT,StatImageLoader::OnMenuLinkClicked)
END_EVENT_TABLE()
StatImageLoader::StatImageLoader(wxWindow* parent, std::string url) :
StatImageLoader::StatImageLoader(wxWindow* parent, char* url) :
wxWindow(parent, wxID_ANY, wxDefaultPosition, wxSize(40,40), wxNO_BORDER)
{
m_prjUrl = url;
strcpy(project_url, url);
project_files_downloaded_time = 1;
project_last_rpc_time = 1;
BuildUserStatToolTip();
@ -95,7 +95,7 @@ void StatImageLoader::BuildUserStatToolTip() {
wxASSERT(pDoc);
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
PROJECT* project = pDoc->state.lookup_project(m_prjUrl);
PROJECT* project = pDoc->state.lookup_project(project_url);
strBuffer.Printf(
_("%s. Work done by %s: %0.2f"),
@ -120,7 +120,7 @@ void StatImageLoader::AddMenuItems()
wxASSERT(pSkinSimple);
wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple));
#endif
PROJECT* project = pDoc->state.lookup_project(m_prjUrl);
PROJECT* project = pDoc->state.lookup_project(project_url);
urlCount = project->gui_urls.size();
// Add the home page link
@ -171,10 +171,10 @@ void StatImageLoader::OnMenuLinkClicked(wxCommandEvent& event)
//call detach project function
OnProjectDetach();
} else if (menuIDevt == WEBSITE_URL_MENU_ID_HOMEPAGE ) {
wxLaunchDefaultBrowser(wxString(m_prjUrl.c_str(),wxConvUTF8));
wxLaunchDefaultBrowser(wxString(project_url, wxConvUTF8));
} else{
int menuId = menuIDevt - WEBSITE_URL_MENU_ID;
PROJECT* project = pDoc->state.lookup_project(m_prjUrl);
PROJECT* project = pDoc->state.lookup_project(project_url);
project->gui_urls[menuId].name.c_str();
wxLaunchDefaultBrowser(wxString(project->gui_urls[menuId].url.c_str(),wxConvUTF8));
@ -202,7 +202,7 @@ void StatImageLoader::OnProjectDetach() {
for(int m = 0; m < prjCount; m++){
PROJECT* project = pDoc->project(m);
project->get_name(strProjectName);
if(project->master_url == m_prjUrl){
if(!strcmp(project->master_url, project_url)){
indexOfProj = m;
break;
}
@ -236,8 +236,8 @@ void StatImageLoader::LoadStatIcon(wxBitmap& image) {
std::string StatImageLoader::GetProjectIconLoc() {
char urlDirectory[256];
CMainDocument* pDoc = wxGetApp().GetDocument();
PROJECT* project = pDoc->state.lookup_project(m_prjUrl);
url_to_project_dir((char*)project->master_url.c_str() ,urlDirectory);
PROJECT* project = pDoc->state.lookup_project(project_url);
url_to_project_dir(project->master_url, urlDirectory);
return (std::string)urlDirectory + "/stat_icon";
}
@ -280,7 +280,7 @@ void StatImageLoader::ReloadProjectSpecificIcon() {
void StatImageLoader::UpdateInterface() {
CMainDocument* pDoc = wxGetApp().GetDocument();
PROJECT* project = pDoc->state.lookup_project(m_prjUrl);
PROJECT* project = pDoc->state.lookup_project(project_url);
// Check to see if we need to reload the stat icon
if ( project > NULL && project->project_files_downloaded_time > project_files_downloaded_time ) {

View File

@ -26,12 +26,9 @@
class StatImageLoader : public wxWindow
{
public:
//members
wxMenu *statPopUpMenu;
//Skin Class
std::string m_prjUrl;
/// Constructors
StatImageLoader(wxWindow* parent, std::string url);
char project_url[256];
StatImageLoader(wxWindow* parent, char* url);
~StatImageLoader();
void LoadImage();
void OnMenuLinkClicked(wxCommandEvent& event);
@ -43,7 +40,6 @@ public:
private:
//private memb
wxBitmap Bitmap;
std::string projectIcon;
int numReloadTries;

View File

@ -74,13 +74,15 @@ bool isRunning(RESULT* result) {
CViewTabPage::CViewTabPage() {}
CViewTabPage::CViewTabPage(WorkunitNotebook* parent,RESULT* result,std::string name,std::string url) :
CViewTabPage::CViewTabPage(
WorkunitNotebook* parent,RESULT* result, std::string name, char* url
) :
wxPanel(parent, -1, wxDefaultPosition, wxSize(370,330), wxNO_BORDER)
{
wxASSERT(parent);
m_name = name;
isAlive = true;
m_prjUrl = url;
strcpy(project_url, url);
m_hasGraphic = false;
resultWU = result;
//create page
@ -129,7 +131,7 @@ void CViewTabPage::CreatePage()
spacerLine->Create(this,-1,wxPoint(20,36),wxSize(305,1));
//My Progress
wrkUnitName = wxString(resultWU->name.c_str(),wxConvUTF8);
wrkUnitName = wxString(resultWU->name, wxConvUTF8);
//Main Gauge
gaugeWUMain=new CProgressBar(this,wxPoint(20,282));
gaugeWUMain->SetValue(floor(resultWU->fraction_done * 100000)/1000);
@ -141,7 +143,7 @@ void CViewTabPage::CreatePage()
FormatCPUTime(resultWU, elapsedTimeValue);
FormatTimeToCompletion(resultWU, timeRemainingValue);
// show graphic button
if (resultWU->supports_graphics || !resultWU->graphics_exec_path.empty()) {
if (resultWU->supports_graphics || strlen(resultWU->graphics_exec_path)) {
m_hasGraphic = true;
}
int status = ComputeState();
@ -191,7 +193,7 @@ void CViewTabPage::LoadSlideShow(std::vector<wxBitmap> *vSlideShow) {
RESULT* result = pDoc->state.lookup_result(resultWU->project_url, resultWU->name);
// If result not found then return
if ( result <= 0 ) return;
url_to_project_dir((char *) result->project->master_url.c_str() ,urlDirectory);
url_to_project_dir(result->project->master_url, urlDirectory);
char file[512];
char resolvedFile[512];
wxBitmap* btmpSlideShow;
@ -289,7 +291,7 @@ void CViewTabPage::UpdateInterface()
// check to see if we can display graphics
bool changed = false;
if ((resultWU->supports_graphics || !resultWU->graphics_exec_path.empty()) && isRunning(resultWU) ) {
if ((resultWU->supports_graphics || strlen(resultWU->graphics_exec_path)) && isRunning(resultWU) ) {
if ( !m_hasGraphic ) {
changed = true;
}
@ -716,7 +718,7 @@ void WorkunitNotebook::AddTab(RESULT* result) {
RESULT* resState = NULL;
std::string projUrl = result->project_url;
std::string nme = result->name;
resState = pDoc->state.lookup_result(projUrl, nme);
resState = pDoc->state.lookup_result(result->project_url, result->name);
if(!resState){
pDoc->ForceCacheUpdate();
return;
@ -726,7 +728,7 @@ void WorkunitNotebook::AddTab(RESULT* result) {
Freeze();
std::string index = " ";
appShortName += wxString(index.c_str(), wxConvUTF8 );
CViewTabPage *wTab = new CViewTabPage(this,result,nme,projUrl);
CViewTabPage *wTab = new CViewTabPage(this, result, nme, result->project_url);
AddPage(wTab, appShortName, true);
if(isRunning(resState) ){

View File

@ -85,7 +85,7 @@ public:
CViewTabPage();
CViewTabPage(
WorkunitNotebook* parent, RESULT* result, std::string name,std::string url
WorkunitNotebook* parent, RESULT* result, std::string name, char* url
);
~CViewTabPage();
@ -112,7 +112,7 @@ protected:
//tab identifier
std::string m_name;
std::string m_prjUrl;
char project_url[256];
bool m_hasGraphic;
wxInt32 FormatCPUTime( RESULT* rslt, wxString& strBuffer ) const;

View File

@ -215,6 +215,7 @@ function language_form() {
."<option value=es>Espa&ntilde;ol (Spanish)"
."<option value=fr>Fran&ccedil;ais (French)"
."<option value=el>Ελληνικά (Greek)"
."<option value=hu>Magyar (Hungarian)"
."<option value=it>Italiano (Italian)"
."<option value=ja>日本語 (Japanese)"
."<option value=ko>한국어 (Korean)"

View File

@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc@boinc.berkeley.edu>\n"
"POT-Creation-Date: 2010-02-19 09:49 PST\n"
"PO-Revision-Date: 2010-02-26 07:49-0700\n"
"PO-Revision-Date: 2010-03-02 06:07-0700\n"
"Last-Translator: Christophe Lherieau <skimpax@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: fr\n"
@ -3346,10 +3346,13 @@ msgid ""
"Team member %1 has requested this team's foundership. This may be because "
"you left the team or haven't had contact with the team for a long time."
msgstr ""
"Le membre %1 a demandé à être déclaré fondateur de l'équipe. Ceci peut être "
"du au fait que vous avez quitté l'équipe ou que vous n'avez eu aucun contact "
"avec l'équipe depuis un long moment."
#: ../user/team_change_founder_form.php:53
msgid "decline request"
msgstr ""
msgstr "décline la requête"
#: ../user/team_change_founder_form.php:56
msgid ""
@ -3358,24 +3361,31 @@ msgid ""
" To accept the request, assign foundership to %3 using the "
"form below."
msgstr ""
"Si vous ne déclinez pas la requête par %1, %2 aura l'option d'assumer le "
"rôle de fondateur de l'équipe.<br /><br />\n"
" Pour accepter la requête, assignez le rôle "
"de fondateur à %3 en utilisant le formulaire ci-dessous."
#: ../user/team_change_founder_form.php:64
msgid "No transfer request is pending."
msgstr ""
msgstr "Aucune requête de transfert en attente."
#: ../user/team_change_founder_form.php:67
msgid ""
"To assign foundership of this team to another member, check the box next to "
"member name and click <strong>Change founder</strong> below."
msgstr ""
"Pour assigner le rôle de fondateur de cette équipe à un autre membre, "
"sélectionnez le membre via la boîte de sélection située près de son nom et "
"cliquer <strong>Changer de fondateur</strong> ci-dessous."
#: ../user/team_change_founder_form.php:74
msgid "New founder?"
msgstr ""
msgstr "Nouveau fondateur ?"
#: ../user/team_change_founder_form.php:103 ../user/team_manage.php:54
msgid "Change founder"
msgstr ""
msgstr "Changer de fondateur"
#: ../user/team_create_action.php:27
msgid "You must choose a non-blank team name"
@ -3402,124 +3412,125 @@ msgstr ""
#: ../user/team_delta.php:64
msgid "Not founder or admin"
msgstr ""
msgstr "Aucun fondateur ou administrateur"
#: ../user/team_delta.php:71
msgid "Team history for %1"
msgstr ""
msgstr "Historique d'équipe pour %1"
#: ../user/team_delta.php:74
msgid "When"
msgstr ""
msgstr "Quand"
#: ../user/team_delta.php:75
msgid "User"
msgstr ""
msgstr "Utilisateur"
#: ../user/team_delta.php:76
msgid "Action"
msgstr ""
msgstr "Action"
#: ../user/team_delta.php:77
msgid "Total credit at time of action"
msgstr ""
msgstr "Crédit total au moment de l'action"
#: ../user/team_edit_action.php:57
msgid "The name '%1' is being used by another team."
msgstr ""
msgstr "Le nom '%1' est déjà utilisé par une autre équipe."
#: ../user/team_edit_action.php:60
msgid "Must specify team name"
msgstr ""
msgstr "Doit spécifier un nom d'équipe"
#: ../user/team_edit_action.php:88
#, fuzzy
msgid "Could not update team - please try again later."
msgstr "Impossible de créer l'équipe. Essayez plus tard."
msgstr "Impossible de mettre à jour l'équipe. Réessayez plus tard."
#: ../user/team_edit_form.php:31
msgid "Edit %1"
msgstr ""
msgstr "Éditer %1"
#: ../user/team_edit_form.php:32
msgid "Update team info"
msgstr ""
msgstr "Mettre à jour les informations d'équipe"
#: ../user/team_email_list.php:58
msgid "%1 Email List"
msgstr ""
msgstr "Liste des e-mails de %1"
#: ../user/team_email_list.php:60
msgid "Member list of %1"
msgstr ""
msgstr "Liste des membres de %1"
#: ../user/team_email_list.php:75
msgid "Show as plain text"
msgstr ""
msgstr "Afficher en clair"
#: ../user/team_forum.php:26 ../user/team_forum.php:37
msgid "Create Message Board"
msgstr ""
msgstr "Créer un forum"
#: ../user/team_forum.php:27
msgid "You may create a message board for use by %1."
msgstr ""
msgstr "Vous pouvez créer un forum relatif à %1."
#: ../user/team_forum.php:29
msgid "Only team members will be able to post."
msgstr ""
msgstr "Seuls les membres de l'équipe pourront poster dans le forum."
#: ../user/team_forum.php:30
msgid "At your option, only members will be able to read."
msgstr ""
msgstr "Selon votre choix, seuls les membres pourront lire."
#: ../user/team_forum.php:31
msgid "You and your Team Admins will have moderator privileges."
msgstr ""
"Vous et les administrateurs de votre équipe auront les privilèges de "
"modérateur."
#: ../user/team_forum.php:38
msgid "Create a message board for %1"
msgstr ""
msgstr "Créer un forum pour %1"
#: ../user/team_forum.php:46
msgid "Team already has a message board"
msgstr ""
msgstr "L'équipe a déjà un forum"
#: ../user/team_forum.php:51
msgid "couldn't create message board"
msgstr ""
msgstr "impossible de créer le forum"
#: ../user/team_forum.php:57
msgid "Team Message Board"
msgstr ""
msgstr "Forum de l'équipe"
#: ../user/team_forum.php:66
msgid "Discussion among members of %1"
msgstr ""
msgstr "Discussions entres les membres de %1"
#: ../user/team_forum.php:69
msgid "Minimum time between posts (seconds)"
msgstr ""
msgstr "Délai minimum entre les dépôts de messages (en secondes)"
#: ../user/team_forum.php:72
msgid "Minimum total credit to post"
msgstr ""
msgstr "Crédit total minimum pour pouvoir poster"
#: ../user/team_forum.php:75
msgid "Minimum average credit to post"
msgstr ""
msgstr "Crédit moyen minimum pour pouvoir poster"
#: ../user/team_forum.php:78
msgid "Submit"
msgstr ""
msgstr "Soumettre"
#: ../user/team_forum.php:87
msgid "Remove your team's message board."
msgstr ""
msgstr "Supprimer le forum de votre équipe."
#: ../user/team_forum.php:95
msgid "Really remove message board?"
msgstr ""
msgstr "Voulez-vous vraiment supprimer le forum de votre équipe ?"
#: ../user/team_forum.php:96
msgid ""
@ -3527,59 +3538,64 @@ msgid ""
"posts will be permanently removed. (You may, however, create a new message "
"board later)."
msgstr ""
"Êtes-vous sûr de vouloir supprimer le forum de votre équipe ? Tous les fils "
"et messages seront alors définitivement supprimés. (Vous aurez néanmoins la "
"possibilité de créer un nouveau forum ensuite)."
#: ../user/team_forum.php:98
msgid "Yes - remove message board"
msgstr ""
msgstr "Oui - supprimer le forum"
#: ../user/team_forum.php:105
msgid "message board not found"
msgstr ""
msgstr "impossible de trouver le forum"
#: ../user/team_forum.php:119
msgid "Message board removed"
msgstr ""
msgstr "Le forum a été supprimé"
#: ../user/team_forum.php:120
msgid ""
"Your teams message board has been removed. You may now %1create a new one%2."
msgstr ""
"Le forum de votre équipe a été supprimé. Vous pouvez éventuellement en "
"%1créer un nouveau%2."
#: ../user/team_forum.php:120
msgid "<p>"
msgstr ""
msgstr "<p>"
#: ../user/team_forum.php:135
msgid "Team Message Board Updated"
msgstr ""
msgstr "Le forum de l'équipe a été mis à jour"
#: ../user/team_forum.php:136
msgid "Update successful"
msgstr ""
msgstr "Mis à jour avec succès"
#: ../user/team_forum.php:139
msgid "Update failed"
msgstr ""
msgstr "Échec de la mise à jour"
#: ../user/team_forum.php:146
msgid "team has no forum"
msgstr ""
msgstr "l'équipe n'a pas de forum"
#: ../user/team_forum.php:181
msgid "no such forum"
msgstr ""
msgstr "Ce forum n'existe pas"
#: ../user/team_forum.php:192
msgid "unknown command %1"
msgstr ""
msgstr "commande inconnue %1"
#: ../user/team_founder_transfer_action.php:34
msgid "You must be a member of a team to access this page."
msgstr ""
msgstr "Vous devez être membre d'une équipe pour pouvoir accéder à cette page."
#: ../user/team_founder_transfer_action.php:88
msgid "Requesting foundership of %1"
msgstr ""
msgstr "Demande en cours du titre de fondateur pour %1"
#: ../user/team_founder_transfer_action.php:96
msgid ""
@ -3588,74 +3604,86 @@ msgid ""
" If the founder does not respond within 60 days you "
"will be allowed to become the founder."
msgstr ""
"Le fondateur actuel a été notifié de votre demande par un e-mail et un "
"message privé.<br /><br />\n"
" Si le fondateur ne répond pas dans les 60 jours, vous "
"serez alors autorisé à devenir le fondateur."
#: ../user/team_founder_transfer_action.php:100
#: ../user/team_founder_transfer_action.php:111
msgid "Foundership request not allowed now"
msgstr ""
"Les requêtes pour le titre de fondateur ne sont pas autorisées actuellement."
#: ../user/team_founder_transfer_action.php:107
msgid "Assumed foundership of %1"
msgstr ""
msgstr "Titre de fondateur assumé pour %1"
#: ../user/team_founder_transfer_action.php:109
msgid ""
"Congratulations, you are now the founder of team %1. Go to %2Your Account "
"page%3 to find the Team Admin options."
msgstr ""
"Félicitations ! Vous êtes maintenant le fondateur de l'équipe %1. Allez sur "
"%2la page de votre compte%3 pour y trouver les options d'administration."
#: ../user/team_founder_transfer_action.php:118
msgid "Decline founder change request"
msgstr ""
msgstr "Refuser la requête de changement de fondateur"
#: ../user/team_founder_transfer_action.php:125
msgid "The foundership request from %1 has been declined."
msgstr ""
msgstr "La requête de titre de fondateur de %1 a été rejetée."
#: ../user/team_founder_transfer_action.php:128
msgid "There were no foundership requests."
msgstr ""
msgstr "Il n'y a aucune requête de titre de fondateur."
#: ../user/team_founder_transfer_action.php:132
msgid "undefined action %1"
msgstr ""
msgstr "action non-définie %1"
#: ../user/team_founder_transfer_action.php:135
#: ../user/team_founder_transfer_form.php:81
msgid "Return to team page"
msgstr ""
msgstr "Retour à la page principale"
#: ../user/team_founder_transfer_form.php:26
msgid "You need to be a member of a team to access this page."
msgstr ""
msgstr "Vous devez être membre d'une équipe pour accéder à cette page."
#: ../user/team_founder_transfer_form.php:29
msgid "Request foundership of %1"
msgstr ""
msgstr "Demande le titre de fondateur pour %1"
#: ../user/team_founder_transfer_form.php:36
msgid "You are now founder of team %1."
msgstr ""
msgstr "Vous avez maintenant le titre de fondateur de %1."
#: ../user/team_founder_transfer_form.php:42
msgid "You requested the foundership of %1 on %2."
msgstr ""
msgstr "Vous avez demandé le titre de fondateur de %1 le %2."
#: ../user/team_founder_transfer_form.php:45
msgid ""
"60 days have elapsed since your request, and the founder has not responded. "
"You may now assume foundership by clicking here:"
msgstr ""
"Soixante jours se sont écoulés depuis votre requête et le fondateur n'a pas "
"répondu. Vous pouvez maintenant prendre le titre de fondateur en cliquant "
"ici :"
#: ../user/team_founder_transfer_form.php:48
msgid "Assume foundership"
msgstr ""
msgstr "Prendre le titre de fondateur"
#: ../user/team_founder_transfer_form.php:52
msgid ""
"The founder was notified of your request. If he/she does not respond by %1 "
"you will be given an option to become founder."
msgstr ""
"Le fondateur a été notifié de votre requête. S'il ne répond pas dans les %1, "
"il vous sera proposé une option pour devenir le fondateur."
#: ../user/team_founder_transfer_form.php:58
msgid ""
@ -3666,14 +3694,22 @@ msgid ""
"will be allowed to become the founder.<br /><br />\n"
" Are you sure you want to request foundership?"
msgstr ""
"Si le fondateur de l'équipe n'est pas actif et que vous voulez assumer ce "
"rôle, cliquer sur le bouton ci-dessous. Un e-mail sera envoyé au fondateur "
"actuel pour détailler votre requête. Il pourra alors vous transférer le "
"titre de fondateur ou refuser votre requête. Si le fondateur ne répond pas "
"dans les 60 jours, vous serez alors autorisé à devenir fondateur.<br /><br "
"/>\n"
" Voulez-vous vraiment demander le titre de fondateur ?"
#: ../user/team_founder_transfer_form.php:63
msgid "Request foundership"
msgstr ""
msgstr "Demander le titre de fondateur"
#: ../user/team_founder_transfer_form.php:72
msgid "Founder change has already been requested by %1 on %2."
msgstr ""
"Une demande de changement de fondateur a déjà été effectuée par %1 le %2."
#: ../user/team_founder_transfer_form.php:75
msgid ""

View File

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc@boinc.berkeley.edu>\n"
"POT-Creation-Date: 2010-02-14 20:30 PST\n"
"PO-Revision-Date: 2010-02-214 23:19+0900\n"
"PO-Revision-Date: 2010-02-28 22:50+0900\n"
"Last-Translator: je2bwm <je2bwm@jarl.com>\n"
"Language-Team: \n"
"Language: ja\n"
@ -4306,9 +4306,8 @@ msgid "Tasks in progress"
msgstr "タスク 実行中"
#: ../user/workunit.php:52
#, fuzzy
msgid "suppressed pending completion"
msgstr "完了保留中の状態は表示を省略"
msgstr "完了保留中のワークウニットは表示を省略"
#: ../user/workunit.php:55
msgid "minimum quorum"

View File

@ -3,15 +3,15 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc@boinc.berkeley.edu>\n"
"POT-Creation-Date: 2010-02-19 09:49 PST\n"
"PO-Revision-Date: 2010-02-05 12:20-0700\n"
"PO-Revision-Date: 2010-03-11 07:48-0700\n"
"Last-Translator: Nikolay Saharov <saharovna@gmail.com>\n"
"Language-Team: Russia\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ru\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Pootle 1.2.1\n"
"X-Poedit-Language: Russian\n"
"X-Poedit-SearchPath-0: html\\user\n"
@ -114,59 +114,60 @@ msgstr "Отметить все обсуждения во всех досках
#: ../inc/host.inc:24
msgid "No host"
msgstr ""
msgstr "Нет компьютера"
#: ../inc/host.inc:26
msgid "Unavailable"
msgstr ""
msgstr "Недоступно"
#: ../inc/host.inc:55 ../inc/prefs.inc:1350 ../project.sample/project.inc:49
msgid "Home"
msgstr ""
msgstr "Дом"
#: ../inc/host.inc:56 ../inc/prefs.inc:1351
msgid "Work"
msgstr ""
msgstr "Работа"
#: ../inc/host.inc:57 ../inc/prefs.inc:1352
msgid "School"
msgstr ""
msgstr "Школа"
#: ../inc/host.inc:59
msgid "Update"
msgstr ""
msgstr "Обновить"
#: ../inc/host.inc:83
msgid "Computer information"
msgstr ""
msgstr "Информация о компьютере"
#: ../inc/host.inc:87 ../inc/host.inc:92
msgid "IP address"
msgstr ""
msgstr "IP-адрес"
#: ../inc/host.inc:87
msgid "(same the last %1 times)"
msgstr ""
msgstr "(такой же последние %1 раз)"
#: ../inc/host.inc:89
msgid "External IP address"
msgstr ""
msgstr "Внешний IP-адрес"
#: ../inc/host.inc:92
msgid "Show IP address"
msgstr ""
msgstr "Показать IP-адрес"
#: ../inc/host.inc:94
msgid "Domain name"
msgstr ""
msgstr "Доменное имя"
#: ../inc/host.inc:97
msgid "Local Standard Time"
msgstr ""
msgstr "Местное Стандартное Время"
#: ../inc/host.inc:97
#, fuzzy
msgid "UTC %1 hours"
msgstr ""
msgstr "UTC %1 часа"
#: ../inc/host.inc:98 ../inc/host.inc:612 ../inc/result.inc:375
#: ../inc/team.inc:202 ../inc/team.inc:345 ../inc/user.inc:198
@ -179,16 +180,15 @@ msgstr "Имя"
#: ../inc/host.inc:102 ../inc/host.inc:104 ../inc/host.inc:213
msgid "Owner"
msgstr ""
msgstr "Владелец"
#: ../inc/host.inc:104 ../inc/host.inc:318
msgid "Anonymous"
msgstr ""
msgstr "Анонимный"
#: ../inc/host.inc:108 ../inc/result.inc:377
#, fuzzy
msgid "Created"
msgstr "Создать"
msgstr "Создан"
#: ../inc/host.inc:109 ../inc/host.inc:217 ../inc/host.inc:222
#: ../inc/host.inc:621 ../inc/team.inc:94 ../inc/team.inc:207
@ -207,160 +207,176 @@ msgid "Average credit"
msgstr "В среднем очков"
#: ../inc/host.inc:112
#, fuzzy
msgid "Cross project credit"
msgstr ""
msgstr "Объединенных по проектам очков"
#: ../inc/host.inc:114
msgid "CPU type"
msgstr ""
msgstr "Тип ЦП"
#: ../inc/host.inc:115
msgid "Number of processors"
msgstr ""
msgstr "Число процессоров"
#: ../inc/host.inc:117
msgid "Coprocessors"
msgstr ""
msgstr "Сопроцессоры"
#: ../inc/host.inc:119 ../inc/host.inc:627
msgid "Operating System"
msgstr ""
msgstr "Операционная система"
#: ../inc/host.inc:122
msgid "BOINC client version"
msgstr ""
msgstr "Версия клиента BOINC"
#: ../inc/host.inc:126
msgid "Memory"
msgstr ""
msgstr "Память"
#: ../inc/host.inc:126 ../inc/host.inc:134
msgid "%1 MB"
msgstr ""
msgstr "%1 Мб"
#: ../inc/host.inc:129
msgid "Cache"
msgstr ""
msgstr "Кэш"
#: ../inc/host.inc:129
msgid "%1 KB"
msgstr ""
msgstr "%1 Кб"
#: ../inc/host.inc:134
#, fuzzy
msgid "Swap space"
msgstr ""
msgstr "Виртуальная память"
#: ../inc/host.inc:137
msgid "Total disk space"
msgstr ""
msgstr "Полное дисковое пространство"
#: ../inc/host.inc:137 ../inc/host.inc:140
msgid "%1 GB"
msgstr ""
msgstr "%1 Гб"
#: ../inc/host.inc:140
msgid "Free Disk Space"
msgstr ""
msgstr "Свободное дисковое пространство"
#: ../inc/host.inc:144
#, fuzzy
msgid "Measured floating point speed"
msgstr ""
msgstr "Измеренная скорость вычислений с плавающей запятой"
#: ../inc/host.inc:144 ../inc/host.inc:147
#, fuzzy
msgid "%1 million ops/sec"
msgstr ""
msgstr "%1 млн операций/с"
#: ../inc/host.inc:147
#, fuzzy
msgid "Measured integer speed"
msgstr ""
msgstr "Измеренная скорость целочисленных вычислений"
#: ../inc/host.inc:151 ../inc/host.inc:153
#, fuzzy
msgid "Average upload rate"
msgstr ""
msgstr "Средняя скорость отправки данных"
#: ../inc/host.inc:151 ../inc/host.inc:158
msgid "%1 KB/sec"
msgstr ""
msgstr "%1 Кб/с"
#: ../inc/host.inc:153 ../inc/host.inc:160 ../inc/result.inc:145
#: ../inc/result.inc:155 ../inc/result.inc:173 ../inc/result.inc:205
msgid "Unknown"
msgstr ""
msgstr "Неизвестно"
#: ../inc/host.inc:158 ../inc/host.inc:160
#, fuzzy
msgid "Average download rate"
msgstr ""
msgstr "Средняя скорость загрузки данных"
#: ../inc/host.inc:163
#, fuzzy
msgid "Average turnaround time"
msgstr ""
msgstr "Среднее оборотное время"
#: ../inc/host.inc:163 ../inc/prefs.inc:841 ../inc/prefs.inc:842
msgid "%1 days"
msgstr ""
msgstr "%1 дней"
#: ../inc/host.inc:165
#, fuzzy
msgid "Maximum daily WU quota per CPU"
msgstr ""
msgstr "Максимальная дневная квота заданий на один ЦП"
#: ../inc/host.inc:165
msgid "%1/day"
msgstr ""
msgstr "%1/день"
#: ../inc/host.inc:174 ../inc/host.inc:302 ../inc/user.inc:149
msgid "Tasks"
msgstr "Задания"
#: ../inc/host.inc:178
#, fuzzy
msgid "Number of times client has contacted server"
msgstr ""
msgstr "Количество контактов клиента с сервером"
#: ../inc/host.inc:179
#, fuzzy
msgid "Last time contacted server"
msgstr ""
msgstr "Время последнего контакта с сервером"
#: ../inc/host.inc:180
#, php-format
#, fuzzy
msgid "% of time BOINC client is running"
msgstr ""
msgstr "% времени работы клиента BOINC"
#: ../inc/host.inc:182
#, php-format
#, fuzzy
msgid "While BOINC running, % of time host has an Internet connection"
msgstr ""
msgstr "% времени подключения компьютера к Интернет за время работы BOINC"
#: ../inc/host.inc:184
#, php-format
#, fuzzy
msgid "While BOINC running, % of time work is allowed"
msgstr ""
msgstr "% времени разрешенной работы за время работы BOINC"
#: ../inc/host.inc:186
msgid "Average CPU efficiency"
msgstr ""
msgstr "Средняя эффективность ЦП"
#: ../inc/host.inc:189
msgid "Task duration correction factor"
msgstr ""
msgstr "Фактор исправления продолжительности выполнения задачи"
#: ../inc/host.inc:191 ../inc/host.inc:614
msgid "Location"
msgstr ""
msgstr "Размещение"
#: ../inc/host.inc:193
msgid "Delete this computer"
msgstr ""
msgstr "Удалить этот компьютер"
#: ../inc/host.inc:197
#, fuzzy
msgid "Click to"
msgstr ""
msgstr "Нажать чтобы"
#: ../inc/host.inc:197
#, fuzzy
msgid "Merge this computer"
msgstr ""
msgstr "Объединить этот компьютер"
#: ../inc/host.inc:211
msgid "Computer info"
msgstr ""
msgstr "Информация о компьютере"
#: ../inc/host.inc:212 ../inc/host.inc:616 ../inc/team.inc:344
#: ../user/top_users.php:46
@ -369,7 +385,7 @@ msgstr "Позиция"
#: ../inc/host.inc:216 ../inc/host.inc:619
msgid "Avg. credit"
msgstr ""
msgstr "В среднем за день"
#: ../inc/host.inc:221 ../inc/team.inc:95 ../inc/team.inc:208
#: ../inc/team.inc:217 ../inc/team.inc:219 ../inc/team.inc:350
@ -382,101 +398,107 @@ msgstr "В среднем за день"
#: ../inc/host.inc:226
msgid "BOINC version"
msgstr ""
msgstr "Версия BOINC"
#: ../inc/host.inc:227 ../inc/host.inc:624
msgid "CPU"
msgstr ""
msgstr "Тип ЦП"
#: ../inc/host.inc:228 ../inc/host.inc:625
#, fuzzy
msgid "GPU"
msgstr ""
msgstr "Тип ГП"
#: ../inc/host.inc:229
msgid "Operating system"
msgstr ""
msgstr "Операционная система"
#: ../inc/host.inc:281
#, fuzzy
msgid "(%1 processors)"
msgstr ""
msgstr "(%1 процессоров)"
#: ../inc/host.inc:301
msgid "Details"
msgstr ""
msgstr "Подробности"
#: ../inc/host.inc:306
#, fuzzy
msgid "Cross-project stats:"
msgstr "Объединенная статистика по проектам"
msgstr "Объединенная статистика по проектам:"
#: ../inc/host.inc:460
#, fuzzy
msgid "Host %1 has overlapping lifetime:"
msgstr ""
msgstr "У компьютера %1 наложение времени жизни:"
#: ../inc/host.inc:467
#, fuzzy
msgid "Host %1 has an incompatible OS:"
msgstr ""
msgstr "У компьютера %1 несовместимая ОС:"
#: ../inc/host.inc:473
#, fuzzy
msgid "Host %1 has an incompatible CPU:"
msgstr ""
msgstr "У компьютера %1 несовместимый ЦП:"
#: ../inc/host.inc:540
msgid "same host"
msgstr ""
msgstr "тот же самый компьютер"
#: ../inc/host.inc:543
#, fuzzy
msgid "Can't merge host %1 into %2 - they're incompatible"
msgstr ""
msgstr "Невозможно объединить компьютеры %1 и %2 - они несовместимы"
#: ../inc/host.inc:546
#, fuzzy
msgid "Merging host %1 into host %2"
msgstr ""
msgstr "Слияние компьютера %1 в %2"
#: ../inc/host.inc:563
#, fuzzy
msgid "Couldn't update credit of new computer"
msgstr ""
msgstr "Невозможно обновить очки нового компьютера"
#: ../inc/host.inc:567
msgid "Couldn't update results"
msgstr ""
msgstr "Невозможно обновить результаты"
#: ../inc/host.inc:572
msgid "Couldn't retire old computer"
msgstr ""
msgstr "Невозможно удалить старый компьютер"
#: ../inc/host.inc:574
msgid "Retired old computer %1"
msgstr ""
msgstr "Старый компьютер %1 удален"
#: ../inc/host.inc:597 ../inc/host.inc:600
msgid "Show:"
msgstr ""
msgstr "Показать:"
#: ../inc/host.inc:597 ../inc/host.inc:600
#, fuzzy
msgid "All computers"
msgstr "Лучшие компьютеры"
msgstr "Все компьютеры"
#: ../inc/host.inc:597 ../inc/host.inc:600
msgid "Only computers active in past 30 days"
msgstr ""
msgstr "Только компьютеры, активные за последние 30 дней"
#: ../inc/host.inc:609 ../inc/result.inc:384
msgid "Computer ID"
msgstr ""
msgstr "ID компьютера"
#: ../inc/host.inc:622
msgid "BOINC<br>version"
msgstr ""
msgstr "Версия<br>BOINC"
#: ../inc/host.inc:629
msgid "Last contact"
msgstr ""
msgstr "Последний контакт"
#: ../inc/host.inc:678
msgid "Merge computers by name"
msgstr ""
msgstr "Объединить компьютеры по имени"
#: ../inc/news.inc:40
msgid "Comment"
@ -553,13 +575,15 @@ msgstr ""
#: ../inc/prefs.inc:68
msgid "Processor usage"
msgstr ""
msgstr "Использование процессора"
#: ../inc/prefs.inc:71
msgid ""
"Suspend work while computer is on battery power? %1(matters only for "
"portable computers)%2"
msgstr ""
"Останавливать обработку, пока компьютер питается от аккумуляторов? "
"%1(применимо только для портативных компьютеров)%2"
#: ../inc/prefs.inc:77
msgid "Suspend work while computer is in use?"

View File

@ -104,7 +104,7 @@ public:
class PROJECT {
public:
std::string master_url;
char master_url[256];
double resource_share;
std::string project_name;
std::string user_name;
@ -221,11 +221,11 @@ public:
class RESULT {
public:
std::string name;
std::string wu_name;
std::string project_url;
char name[256];
char wu_name[256];
char project_url[256];
int version_num;
std::string plan_class;
char plan_class[64];
double report_deadline;
double received_time;
bool ready_to_report;
@ -236,7 +236,7 @@ public:
int scheduler_state;
int exit_status;
int signal;
std::string stderr_out;
//std::string stderr_out;
bool suspended_via_gui;
bool project_suspended_via_gui;
bool coproc_missing;
@ -260,10 +260,10 @@ public:
bool too_large;
bool needs_shmem;
bool edf_scheduled;
std::string graphics_exec_path;
std::string slot_path;
char graphics_exec_path[512];
char slot_path[512];
// only present if graphics_exec_path is
std::string resources;
char resources[256];
APP* app;
WORKUNIT* wup;
@ -368,13 +368,13 @@ public:
CC_STATE();
~CC_STATE();
PROJECT* lookup_project(std::string&);
PROJECT* lookup_project(char* url);
APP* lookup_app(PROJECT*, std::string&);
APP_VERSION* lookup_app_version(PROJECT*, APP*, int, std::string&);
APP_VERSION* lookup_app_version(PROJECT*, APP*, int, char* plan_class);
APP_VERSION* lookup_app_version_old(PROJECT*, APP*, int);
WORKUNIT* lookup_wu(PROJECT*, std::string&);
RESULT* lookup_result(PROJECT*, std::string&);
RESULT* lookup_result(std::string&, std::string&);
WORKUNIT* lookup_wu(PROJECT*, char* name);
RESULT* lookup_result(PROJECT*, char* name);
RESULT* lookup_result(char* url, char* name);
void print();
void clear();

View File

@ -222,7 +222,7 @@ int PROJECT::parse(MIOFILE& in) {
while (in.fgets(buf, 256)) {
if (match_tag(buf, "</project>")) return 0;
if (parse_str(buf, "<master_url>", master_url)) continue;
if (parse_str(buf, "<master_url>", master_url, sizeof(master_url))) continue;
if (parse_double(buf, "<resource_share>", resource_share)) continue;
if (parse_str(buf, "<project_name>", project_name)) continue;
if (parse_str(buf, "<user_name>", user_name)) {
@ -286,7 +286,7 @@ int PROJECT::parse(MIOFILE& in) {
}
void PROJECT::clear() {
master_url.clear();
strcpy(master_url, "");
resource_share = 0;
project_name.clear();
user_name.clear();
@ -436,11 +436,11 @@ int RESULT::parse(MIOFILE& in) {
}
return 0;
}
if (parse_str(buf, "<name>", name)) continue;
if (parse_str(buf, "<wu_name>", wu_name)) continue;
if (parse_str(buf, "<name>", name, sizeof(name))) continue;
if (parse_str(buf, "<wu_name>", wu_name, sizeof(wu_name))) continue;
if (parse_int(buf, "<version_num>", version_num)) continue;
if (parse_str(buf, "<plan_class>", plan_class)) continue;
if (parse_str(buf, "<project_url>", project_url)) continue;
if (parse_str(buf, "<plan_class>", plan_class, sizeof(plan_class))) continue;
if (parse_str(buf, "<project_url>", project_url, sizeof(project_url))) continue;
if (parse_double(buf, "<report_deadline>", report_deadline)) continue;
if (parse_double(buf, "<received_time>", received_time)) continue;
if (parse_bool(buf, "ready_to_report", ready_to_report)) continue;
@ -461,10 +461,12 @@ int RESULT::parse(MIOFILE& in) {
if (parse_int(buf, "<exit_status>", exit_status)) continue;
if (parse_int(buf, "<signal>", signal)) continue;
if (parse_int(buf, "<active_task_state>", active_task_state)) continue;
#if 0
if (match_tag(buf, "<stderr_out>")) {
copy_element_contents(in, "</stderr_out>", stderr_out);
continue;
}
#endif
if (parse_int(buf, "<app_version_num>", app_version_num)) continue;
if (parse_int(buf, "<slot>", slot)) continue;
if (parse_int(buf, "<pid>", pid)) continue;
@ -478,21 +480,21 @@ int RESULT::parse(MIOFILE& in) {
if (parse_bool(buf, "too_large", too_large)) continue;
if (parse_bool(buf, "needs_shmem", needs_shmem)) continue;
if (parse_bool(buf, "edf_scheduled", edf_scheduled)) continue;
if (parse_str(buf, "graphics_exec_path", graphics_exec_path)) continue;
if (parse_str(buf, "slot_path", slot_path)) continue;
if (parse_str(buf, "resources", resources)) continue;
if (parse_str(buf, "graphics_exec_path", graphics_exec_path, sizeof(graphics_exec_path))) continue;
if (parse_str(buf, "slot_path", slot_path, sizeof(slot_path))) continue;
if (parse_str(buf, "resources", resources, sizeof(resources))) continue;
}
return ERR_XML_PARSE;
}
void RESULT::clear() {
name.clear();
wu_name.clear();
strcpy(name, "");
strcpy(wu_name, "");
version_num = 0;
plan_class.clear();
project_url.clear();
graphics_exec_path.clear();
slot_path.clear();
strcpy(plan_class, "");
strcpy(project_url, "");
strcpy(graphics_exec_path, "");
strcpy(slot_path, "");
report_deadline = 0;
received_time = 0;
ready_to_report = false;
@ -503,7 +505,7 @@ void RESULT::clear() {
scheduler_state = 0;
exit_status = 0;
signal = 0;
stderr_out.clear();
//stderr_out.clear();
suspended_via_gui = false;
project_suspended_via_gui = false;
coproc_missing = false;
@ -714,10 +716,10 @@ void CC_STATE::clear() {
have_ati = false;
}
PROJECT* CC_STATE::lookup_project(string& str) {
PROJECT* CC_STATE::lookup_project(char* url) {
unsigned int i;
for (i=0; i<projects.size(); i++) {
if (projects[i]->master_url == str) return projects[i];
if (!strcmp(projects[i]->master_url, url)) return projects[i];
}
return 0;
}
@ -732,7 +734,7 @@ APP* CC_STATE::lookup_app(PROJECT* project, string& str) {
}
APP_VERSION* CC_STATE::lookup_app_version(
PROJECT* project, APP* app, int version_num, string& plan_class
PROJECT* project, APP* app, int version_num, char* plan_class
) {
unsigned int i;
for (i=0; i<app_versions.size(); i++) {
@ -758,29 +760,29 @@ APP_VERSION* CC_STATE::lookup_app_version_old(
return 0;
}
WORKUNIT* CC_STATE::lookup_wu(PROJECT* project, string& str) {
WORKUNIT* CC_STATE::lookup_wu(PROJECT* project, char* name) {
unsigned int i;
for (i=0; i<wus.size(); i++) {
if (wus[i]->project != project) continue;
if (wus[i]->name == str) return wus[i];
if (wus[i]->name == name) return wus[i];
}
return 0;
}
RESULT* CC_STATE::lookup_result(PROJECT* project, string& str) {
RESULT* CC_STATE::lookup_result(PROJECT* project, char* name) {
unsigned int i;
for (i=0; i<results.size(); i++) {
if (results[i]->project != project) continue;
if (results[i]->name == str) return results[i];
if (results[i]->name == name) return results[i];
}
return 0;
}
RESULT* CC_STATE::lookup_result(string& url, string& str) {
RESULT* CC_STATE::lookup_result(char* url, char* name) {
unsigned int i;
for (i=0; i<results.size(); i++) {
if (results[i]->project->master_url != url) continue;
if (results[i]->name == str) return results[i];
if (strcmp(results[i]->project->master_url, url)) continue;
if (!strcmp(results[i]->name, name)) return results[i];
}
return 0;
}
@ -1440,7 +1442,7 @@ int RPC_CLIENT::get_statistics(PROJECTS& p) {
while (rpc.fin.fgets(buf, 256)) {
if (match_tag(buf, "</project_statistics>")) break;
if (parse_str(buf, "<master_url>", p.projects.back()->master_url)) continue;
if (parse_str(buf, "<master_url>", p.projects.back()->master_url, sizeof(project->master_url))) continue;
if (match_tag(buf, "<daily_statistics>")) {
DAILY_STATS ds;
retval = ds.parse(rpc.fin);
@ -1569,7 +1571,7 @@ int RPC_CLIENT::project_op(PROJECT& project, const char* op) {
" <project_url>%s</project_url>\n"
"</%s>\n",
tag,
project.master_url.c_str(),
project.master_url,
tag
);
retval = rpc.do_rpc(buf);
@ -1885,8 +1887,8 @@ int RPC_CLIENT::result_op(RESULT& result, const char* op) {
" <name>%s</name>\n"
"</%s>\n",
tag,
result.project_url.c_str(),
result.name.c_str(),
result.project_url,
result.name,
tag
);
retval = rpc.do_rpc(buf);
@ -2293,7 +2295,7 @@ int RPC_CLIENT::set_debts(vector<PROJECT> projects) {
" <short_term_debt>%f</short_term_debt>\n"
" <long_term_debt>%f</long_term_debt>\n"
" </project>\n",
p.master_url.c_str(),
p.master_url,
p.cpu_short_term_debt,
p.cpu_long_term_debt
);

View File

@ -59,7 +59,7 @@ void GUI_URL::print() {
}
void PROJECT::print_disk_usage() {
printf(" master URL: %s\n", master_url.c_str());
printf(" master URL: %s\n", master_url);
printf(" disk usage: %.2fMB\n", disk_usage/MEGA);
}
@ -67,7 +67,7 @@ void PROJECT::print() {
unsigned int i;
printf(" name: %s\n", project_name.c_str());
printf(" master URL: %s\n", master_url.c_str());
printf(" master URL: %s\n", master_url);
printf(" user_name: %s\n", user_name.c_str());
printf(" team_name: %s\n", team_name.c_str());
printf(" resource share: %f\n", resource_share);
@ -111,9 +111,9 @@ void WORKUNIT::print() {
}
void RESULT::print() {
printf(" name: %s\n", name.c_str());
printf(" WU name: %s\n", wu_name.c_str());
printf(" project URL: %s\n", project_url.c_str());
printf(" name: %s\n", name);
printf(" WU name: %s\n", wu_name);
printf(" project URL: %s\n", project_url);
time_t foo = (time_t)report_deadline;
printf(" report deadline: %s", ctime(&foo));
printf(" ready to report: %s\n", ready_to_report?"yes":"no");
@ -125,7 +125,7 @@ void RESULT::print() {
printf(" signal: %d\n", signal);
printf(" suspended via GUI: %s\n", suspended_via_gui?"yes":"no");
printf(" active_task_state: %d\n", active_task_state);
printf(" stderr_out: %s\n", stderr_out.c_str());
//printf(" stderr_out: %s\n", stderr_out.c_str());
printf(" app version num: %d\n", app_version_num);
printf(" checkpoint CPU time: %f\n", checkpoint_cpu_time);
printf(" current CPU time: %f\n", current_cpu_time);